Open aminophen opened 7 years ago
上の例はさしあたり
\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 ですね。これで十分なのかな?
「最初の要素の左側」とは別に、今度は「要素の右側」の 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}
とりあえず,tabbing 先頭の JFM グルーを消すコードをカーネルに移しました。
さて,plcore.dtx に
相互参照や疑似タイプ入力では、和欧文間スペースが入らないので、\null を取り 除きましたが、tabbing 環境では、逆に \null がないため、和欧文間スペースが 入ってしまうので、それを追加します。
とあるのですが,この「\null がないと和欧文間スペースが入ってしまう」とはどんなソースで確認できるのでしょうか? 少なくとも \null の影響で,ここに書いたような「末尾に JFM グルーが来た場合」の挙動が変化しているわけですが,他にも \null が意図しない変化を生んでいたりしないかが心配です。
「\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}
ということは,この意図を壊さずに右寄せ \'
を修正するには…?
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}
現行では、tabbing 環境の各行で最初のモノだけ冒頭 JFM グルーが残り、以降のモノは消えます。最近 #43 で tabular 環境を修正したので、tabbing 環境も修正したいと思います。
明日 8/27 までにコードが間に合えば、exppl2e.sty に入れた状態にする予定です。