Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tabbing 環境の JFM グルーの入り方 #53

Open
aminophen opened this issue Aug 26, 2017 · 5 comments
Open

tabbing 環境の JFM グルーの入り方 #53

aminophen opened this issue Aug 26, 2017 · 5 comments

Comments

@aminophen
Copy link
Member

aminophen commented Aug 26, 2017

現行では、tabbing 環境の各行で最初のモノだけ冒頭 JFM グルーが残り、以降のモノは消えます。最近 #43 で tabular 環境を修正したので、tabbing 環境も修正したいと思います。

\documentclass{article}
%\usepackage{bxjaprnind}% これを入れても効かない!
\begin{document}
\begin{tabbing}
あああああ+++\=あああああああ+++++\=あああああ\kill
(あ) \> (あ) \> (あ) \\
(あ)\>(あ)\>(あ)\\
あああ \> あああ \> あああ \\
あああ\>あああ\>あああ
\end{tabbing}
\end{document}

明日 8/27 までにコードが間に合えば、exppl2e.sty に入れた状態にする予定です。

@aminophen
Copy link
Member Author

上の例はさしあたり

\gdef\@startline{%
     \ifnum \@nxttabmar >\@hightab
       \@badtab
       \global\@nxttabmar \@hightab
     \fi
     \global\@curtabmar \@nxttabmar
     \global\@curtab \@curtabmar
     \global\setbox\@curline \hbox {}%
     \@startfield
     \strut\inhibitglue}

のように \@startline の末尾に \inhibitglue を追加すれば ok ですね。これで十分なのかな?

@aminophen
Copy link
Member Author

aminophen commented Aug 26, 2017

「最初の要素の左側」とは別に、今度は「要素の右側」の JFM グルーが気になってきました。

pLaTeX カーネルは \@stopfield を再定義しています。この影響で「で終わるモノを右寄せする」というときにその配置が \null の影響で変化しています。これは意図したものなのでしょうか?

%\makeatletter
% LaTeX
%\gdef\@stopfield{\color@endgroup\egroup}
% pLaTeX
%\gdef\@stopfield{\null\color@endgroup\egroup}
%\makeatother
\documentclass{jarticle}
\begin{document}
\verb+\'+の前後に空白があるとき
\begin{tabbing}
ほげほげほげ \= ほげほげほげほげ \= ほげほげ \= ほげほげほげほげほげ \\
(一) \> (二) \> (三) \> (四) \+\+\\
(三) \> (四) \\
(二右) \' (三) \> (四)
\end{tabbing}
\verb+\'+の前後に空白がないとき
\begin{tabbing}
ほげほげほげ \= ほげほげほげほげ \= ほげほげ \= ほげほげほげほげほげ \\
(一)\>(二)\>(三)\>(四)\+\+\\
(三)\>(四)\\
(二右)\'(三)\>(四)
\end{tabbing}
\end{document}

さらに、アラインメント区切り命令の周囲の“半角空白”有無で変わります。 これは pdflatex でも起きる現象のようですが、意図どおりなのだろうか…? → これは意図どおりとのことです。

%#!pdflatex
\documentclass{article}
\begin{document}

with spaces
\begin{tabbing}
1++++++++++++ \= 2+++++++ \= 3+++++++++++ \\
first \> second \> third \+\\
second \> third \\
first \' second \> third
\end{tabbing}

without spaces
\begin{tabbing}
1++++++++++++ \= 2+++++++ \= 3+++++++++++ \\
first\>second\>third\+\\
second\>third\\
first\'second\>third
\end{tabbing}

\end{document}

…で、それは \unskip を入れておけば解消できるみたい。

\gdef\@tablab{%
  \unskip
  \@stopfield
  \global\setbox\@curline\hbox{%
    \box\@curline
    \hskip-\wd\@curfield \hskip-\tabbingsep
    \box\@curfield
    \hskip\tabbingsep}%
  \@startfield
  \ignorespaces}

@aminophen
Copy link
Member Author

とりあえず,tabbing 先頭の JFM グルーを消すコードをカーネルに移しました。

さて,plcore.dtx に

相互参照や疑似タイプ入力では、和欧文間スペースが入らないので、\null を取り
除きましたが、tabbing 環境では、逆に \null がないため、和欧文間スペースが
入ってしまうので、それを追加します。

とあるのですが,この「\null がないと和欧文間スペースが入ってしまう」とはどんなソースで確認できるのでしょうか? 少なくとも \null の影響で,ここに書いたような「末尾に JFM グルーが来た場合」の挙動が変化しているわけですが,他にも \null が意図しない変化を生んでいたりしないかが心配です。

@aminophen
Copy link
Member Author

「\null がないと和欧文間スペースが入ってしまう」とはどんなソースで確認できるのでしょうか?

ようやく理解しました。LaTeX のママだと要素間に \xkanjiskip が入る行と入らない行ができてしまい,「かきくけこ」と「カキクケコ」が揃わなくなっていますが,pLaTeX だと要素間の \xkanjiskip が一律に抑制され,揃うようになっているということですね。

\documentclass{jarticle}
\def\TEST{%
\begin{tabbing}
あいう\=AAA\=かきくけこ\=さし\\
アイウ\>AAA\>カキクケコ\>サシ
\end{tabbing}}
\begin{document}
\makeatletter

% LaTeX
\gdef\@stopfield{\color@endgroup\egroup}
\TEST

% pLaTeX
\gdef\@stopfield{\null\color@endgroup\egroup}
\TEST

\end{document}

ということは,この意図を壊さずに右寄せ \' を修正するには…?

@aminophen
Copy link
Member Author

pLaTeX と LuaTeX-ja の間でなるべく共通な方がわかりやすいと思ったので,両方でいろいろ処理してみることにしました。結果的に,以下のコード(pLaTeX dev と記したもの)にたどり着きました。

  • \@startline は既に plcore.dtx (8b0a452) で入れた通り。
  • \@stopfield は「\lastskip 退避 → 復帰」としてみた。

比較上の便宜のため,本家 LaTeX のコードや現行の pLaTeX のコードを併記しています。(LuaTeX-ja は pLaTeX dev のコードを使わないとタブが揃わないような気が…?)

\documentclass{article}
\ifx\directlua\undefined\else\usepackage{luatexja}\fi
\begin{document}

\makeatletter
%
%% \@startline patch
% LaTeX
\gdef\@startline{%
     \ifnum \@nxttabmar >\@hightab
       \@badtab
       \global\@nxttabmar \@hightab
     \fi
     \global\@curtabmar \@nxttabmar
     \global\@curtab \@curtabmar
     \global\setbox\@curline \hbox {}%
     \@startfield
     \strut}
% pLaTeX dev
\gdef\@startline{%
     \ifnum \@nxttabmar >\@hightab
       \@badtab
       \global\@nxttabmar \@hightab
     \fi
     \global\@curtabmar \@nxttabmar
     \global\@curtab \@curtabmar
     \global\setbox\@curline \hbox {}%
     \@startfield
     \strut\inhibitglue}
%
%% \@stopfield patch
% LaTeX
\gdef\@stopfield{\color@endgroup\egroup}
% pLaTeX
\gdef\@stopfield{\null\color@endgroup\egroup}
% pLaTeX dev
\gdef\@stopfield{%
  \inhibitglue
  \@tempskipa\lastskip\unskip
  \hskip\@tempskipa
  \color@endgroup\egroup}
%
\makeatother

\tabbingsep15pt

% ===== test for \xkanjiskip and alignment =====

\def\TEST{%
\begin{tabbing}
あいう\=AAA\=かきくけこ\=さし\\
アイウ\>AAA\>カキクケコ\>サシ
\end{tabbing}}

% ===== test for JFM glue and alignment =====

\def\TESTA{%
[1]
\begin{tabbing}
ほげほげほげ \= ほげほげほげほげ \= ほげほげ \= ほげほげほげほげほげ \\
(一) \> (二) \> (三) \> (四) \+\+\\
(三) \> (四) \\
(二右) \' (三) \> (四)
\end{tabbing}

[2]
\begin{tabbing}
ほげほげほげ \= ほげほげほげほげ \= ほげほげ \= ほげほげほげほげほげ \\
(一)\>(二)\>(三)\>(四)\+\+\\
(三)\>(四)\\
(二右)\'(三)\>(四)
\end{tabbing}

[3]
\begin{tabbing}
ほげほげほげ\=ほげほげほげほげ\=ほげほげ\=ほげほげほげほげほげ\\
(一) \> (二) \> (三) \> (四) \+\+\\
(三) \> (四) \\
(二右) \' (三) \> (四)
\end{tabbing}

[4]
\begin{tabbing}
ほげほげほげ\=ほげほげほげほげ\=ほげほげ\=ほげほげほげほげほげ\\
(一)\>(二)\>(三)\>(四)\+\+\\
(三)\>(四)\\
(二右)\'(三)\>(四)
\end{tabbing}}

% ===== test for \tabbingsep compatibility =====

\def\TESTB{%
[1]
\begin{tabbing}
AAA \= BBBB \= CC \= DDDDD \\
A\>B\>C\>D\+\+\\
C\>D\\
rB\'C\>D
\end{tabbing}

[2]
\begin{tabbing}
AAA\=BBBB\=CC\=DDDDD\\
A\>B\>C\>D\+\+\\
C\>D\\
rB\'C\>D
\end{tabbing}

[3]
\begin{tabbing}
AAA \= BBBB \= CC \= DDDDD \\
A \> B \> C \> D \+\+\\
C \> D \\
rB \' C \> D
\end{tabbing}

[4]
\begin{tabbing}
AAA\=BBBB\=CC\=DDDDD\\
A \> B \> C \> D \+\+\\
C \> D \\
rB \' C \> D
\end{tabbing}}

\TEST
\TESTA\newpage
\TESTB

\end{document}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant