質問というわけではないのですが、情報交換のつもりで書き込んでみます。
下記ソースを処理すると、4つの章題の水平位置が揃いません。
プリアンブルで使っている三つの要素(\noindent ,“§”,\ybaselineshift)の
どれか一つでも外して無効にすれば水平位置が揃うようになります。
試した環境は「TeX を使ってみよう」です。
https://oku.edu.mie-u.ac.jp/~okumura/texonweb/
あれこれ調べて、原因は pTeX で標準に使われる min10.tfm で、
“§”の前後に入る JFMグル― だと分かりました。
マクロレベルでは問題はなさそうなので、はじめは原因がよく分からず、
乙部厳己さんの「min10 フォントについて」(min10.pdf)を読み直して
ようやく納得しました。
調べるのに難儀したので、これは知られた現象なのかと気になりました。
昨今は min10 はあまり使われないようですし、
この現象に出くわすための条件は、
min10 の全角文字の“§”に \ybaselineshift と、
なかなかきつそうには思うのですが、
どなたか同じ現象に遭遇した方はいないでしょうか。
## 以下、テストソースです。
\documentclass{minimal}
% minimal.cls はLaTeXに標準で含まれているテスト用のクラスファイルです。
\def\section#1{\par \noindent § #1\par} % 両方あり
%\def\section#1{\par § #1\par} % \noindent 無し
%\def\section#1{\par \noindent セク #1\par} %“§”無し
\ybaselineshift=-0.25pt
\begin{document}
\section{章題A}
\section{章題}
\section{章題A}
\section{章題}
\end{document}
動作させていませんが,現象を見るに
(1)「\noindent がある」
(2)「冒頭が JFM グルーで始まる」
(3)「ベースライン補正がゼロでない」
という三条件が揃った時に起こる古い pTeX の挙動(バグ)
直前に組んだ文字が和文か欧文かで JFM グルーが入らなかったり入ったりする
(直前が和文だと次の行の冒頭 JFM グルーが消え,欧文だと次の行の冒頭 JFM グルーが入る)
が原因と思います。この件は
https://github.com/texjporg/tex-jp-build/issues/40
で昨年末に私が分析していて,TeX Live 2018 pretest 時点の pTeX では修正されています。
・(1)の条件が外れると揃う理由…全行に JFM グルーが入るため,字下げが起こり揃って見える。
・(2)の条件が外れると揃う理由…JFM グルーが無いので当然揃う。
・(3)の条件が外れると揃う理由…全行で JFM グルーが消滅するので,字下げが無くなり揃って見える。
(1)「\noindent がある」
(2)「冒頭が JFM グルーで始まる」
(3)「ベースライン補正がゼロでない」
という三条件が揃った時に起こる古い pTeX の挙動(バグ)
直前に組んだ文字が和文か欧文かで JFM グルーが入らなかったり入ったりする
(直前が和文だと次の行の冒頭 JFM グルーが消え,欧文だと次の行の冒頭 JFM グルーが入る)
が原因と思います。この件は
https://github.com/texjporg/tex-jp-build/issues/40
で昨年末に私が分析していて,TeX Live 2018 pretest 時点の pTeX では修正されています。
・(1)の条件が外れると揃う理由…全行に JFM グルーが入るため,字下げが起こり揃って見える。
・(2)の条件が外れると揃う理由…JFM グルーが無いので当然揃う。
・(3)の条件が外れると揃う理由…全行で JFM グルーが消滅するので,字下げが無くなり揃って見える。
aminophenさん、ありがとうございます。
最近修正されたのですか。ご対応、お疲れさまです。
なるほど、よく似た問題のようですね。
完全に理解するには、私には少し複雑ですが。
「TeX を使ってみよう」のほうは
log が次のようになっていましたから、
修正されていないものなのですね。
(e-pTeX も修正されたのかは追えてないですが)
This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex)
entering extended mode
(./51.tex
pLaTeX2e <2016/11/29> (based on LaTeX2e <2017/01/01> patch level 3)
実はうちのはもっと古くて、次のようなのものですが、これを見ると20年近くに亘る現象なのですね。
よく知られていて仕様として対処法が確立していたりとかしなかったのか、気になります。
This is pTeX, Version p2.1.11, based on TeX, Version 3.14159 (SJIS) (Web2C 7.3.3) (format=platex 2001.5.23) 15 MAR 2018 14:07
最近修正されたのですか。ご対応、お疲れさまです。
なるほど、よく似た問題のようですね。
完全に理解するには、私には少し複雑ですが。
「TeX を使ってみよう」のほうは
log が次のようになっていましたから、
修正されていないものなのですね。
(e-pTeX も修正されたのかは追えてないですが)
This is e-pTeX, Version 3.14159265-p3.7-160201-2.6 (utf8.euc) (TeX Live 2016) (preloaded format=platex)
entering extended mode
(./51.tex
pLaTeX2e <2016/11/29> (based on LaTeX2e <2017/01/01> patch level 3)
実はうちのはもっと古くて、次のようなのものですが、これを見ると20年近くに亘る現象なのですね。
よく知られていて仕様として対処法が確立していたりとかしなかったのか、気になります。
This is pTeX, Version p2.1.11, based on TeX, Version 3.14159 (SJIS) (Web2C 7.3.3) (format=platex 2001.5.23) 15 MAR 2018 14:07
pTeX のソース (ptex-base.ch) は e-pTeX や upTeX や e-upTeX とも共有されているので,
2017 年末に修正された結果がそのまま反映されます(つまり全部 TeX Live 2018 で直る)。
「p3.7.1」という表示があれば多分古いもので,「p3.8」と表示されるのは修正適用済みのはずです。
> よく知られていて仕様として対処法が確立していたりとかしなかったのか、気になります。
目に見える現象としてはいろいろあるのですが,原因を突き詰めないと対処できない案件ですから,
そこまで辿り着いた人はいない(もしくは極めて少ない)と思います。
「直前に組んだ文字が和文でありさえすれば起きない」
ということですから,例えば古い pTeX(TeX Live 2017 まで)の workaround としては
\section{章題A\phantom{あ}}
のように「最後が欧文で終わるときは無理やり“隠れた”和文文字を組む」というのがあり得ます。
2017 年末に修正された結果がそのまま反映されます(つまり全部 TeX Live 2018 で直る)。
「p3.7.1」という表示があれば多分古いもので,「p3.8」と表示されるのは修正適用済みのはずです。
> よく知られていて仕様として対処法が確立していたりとかしなかったのか、気になります。
目に見える現象としてはいろいろあるのですが,原因を突き詰めないと対処できない案件ですから,
そこまで辿り着いた人はいない(もしくは極めて少ない)と思います。
「直前に組んだ文字が和文でありさえすれば起きない」
ということですから,例えば古い pTeX(TeX Live 2017 まで)の workaround としては
\section{章題A\phantom{あ}}
のように「最後が欧文で終わるときは無理やり“隠れた”和文文字を組む」というのがあり得ます。
なるほど。やはり最近まで直されなかったことから
推して知るべしといった感じでしょうか。
業務で使っていた方などの間で知られていたり
なんてあるかもしれないと思っていましたが。
ところで、pTeX が修正されたのは素晴らしいと思うのですが、
私個人は過去の資産との絡みもあって、古いまま使っています。
どんどん使いやすくなっているのに、もったいない話ですね。
古い pTeX なので対処が必要なわけですが、私の場合は
\def\§{ \kern-1zw\hbox{§}\kern-1zw }% ( <- 前後にあるのは全角空白)
のようにして、全角記号“§”を裸で使わないようにしてしのいでいます。
これだと他の和文字と同じように左右に \kanjiskip が入るのを妨げません。
解説をいただき、ありがとうございました。
推して知るべしといった感じでしょうか。
業務で使っていた方などの間で知られていたり
なんてあるかもしれないと思っていましたが。
ところで、pTeX が修正されたのは素晴らしいと思うのですが、
私個人は過去の資産との絡みもあって、古いまま使っています。
どんどん使いやすくなっているのに、もったいない話ですね。
古い pTeX なので対処が必要なわけですが、私の場合は
\def\§{ \kern-1zw\hbox{§}\kern-1zw }% ( <- 前後にあるのは全角空白)
のようにして、全角記号“§”を裸で使わないようにしてしのいでいます。
これだと他の和文字と同じように左右に \kanjiskip が入るのを妨げません。
解説をいただき、ありがとうございました。