タイトル通りですが,\pdfsaveposの有無で出力が変わることがあるようですが,それってそういうもんなんでしょうか?
以下再現ソースです.
\documentclass{jsarticle}
\textwidth=5zw
\parindent=0pt
\begin{document}
あいうえ
\pdfsavepos
\hbox{\vbox{さしすせ}}かき
\newpage
あいうえ
\hbox{\vbox{さしすせ}}かき
\end{document}
結果は添付の通りです.一ページ目と二ページ目は\pdfsaveposの有無しか違わないので,結果は同じだろうと思ったのですが,一ページ目では二行目にある「え」が二ページ目では一行目に移りました.
ちなみにLuaTeX-jaでの対応するソース
\documentclass{ltjsarticle}
\textwidth=5\zw
\parindent=0pt
\begin{document}
あいうえ
\savepos
\hbox{\vbox{さしすせ}}かき
\newpage
あいうえ
\hbox{\vbox{さしすせ}}かき
\end{document}
だと同じ出力を得ることができています.
pTeX では「\kanjiskip は glue ノードとして挿入されることはあまりない」
という forum:1062 の話と関係しているのでしょうか?
(LuaTeX-ja では glue ノードとして挿入される、という話だったような。)
例でいうと「え」の後に改行が入らなくなる理由はこれで説明つきそうです。
という forum:1062 の話と関係しているのでしょうか?
(LuaTeX-ja では glue ノードとして挿入される、という話だったような。)
例でいうと「え」の後に改行が入らなくなる理由はこれで説明つきそうです。
(「細かい話」への需要があるようなので。)
% plain e-pTeX 文書 \jfont\rml=rml \rml % 1zwを丁度10ptに \kanjiskip=5pt \showboxdepth=100 \showboxbreadth=100 \tracingonline=1 \setbox0\hbox{% あ\pdfsavepos い\special{pn 1}う\write16{foo}え \penalty42 お\relax か }\showbox0 \bye
\showbox
の結果:
> \box0= \hbox(8.99998+1.0)x70.0, yoko direction .\rml あ .\pdfsavepos .\rml い .\special{pn 1} .\rml う .\write*{foo} .\rml え .\penalty 42 .\glue(\kanjiskip) 5.0 .\rml お .\rml か
「隣接した和文文字同士の間には暗黙の \kanjiskip
が入る」という規則のため、〈お〉と〈か〉の間に暗黙の \kanjiskip
が入ります。ボックスの中に 2 つの \kanjiskip
があるため、横幅は(10.0×6+5.0×2=)70.0pt となっています。
この結果からわかることは:ペナルティを入れた場合は、それによって消えてしまう暗黙の \kanjiskip
を補うために、明示的な \kanjiskip
のノードが挿入されます。それに対して、whatsit を入れた場合には同様の処理は行われないため、元々あった \kanjiskip
が消えてしまうわけです。
「\pdfsavepos
は whatsit の一種」(これは pdfTeX の決定)でかつ「whatsit が入ると \(x)kanjiskip
が消える」(これは元祖 pTeX の決定)なので、e-pTeX における \pdfsavepos
の挙動についても他の選択肢は無さそうです。
以下のサンプルで状況がみえるように思います.
1062と同じだと思います.
\documentclass{jarticle}
\begin{document}
\hbox to5zw{ああ\pdfsavepos ああ}
\par
\hbox to5zw{ああああ}
\end{document}
abenoriさんの例だとjsかjかで結果が変わると思います.
\indexなどは「完全な透過」ではないと
理解していたので,そういうものだと思ってました.
現象としては\kanjiskipが挿入されないんだなと.
LaTeXのどこかのドキュメントに
「\indexの\@bshackとかは完璧じゃない」
とあった記憶があるので、そんなもんかなと.
1062と同じだと思います.
\documentclass{jarticle}
\begin{document}
\hbox to5zw{ああ\pdfsavepos ああ}
\par
\hbox to5zw{ああああ}
\end{document}
abenoriさんの例だとjsかjかで結果が変わると思います.
\indexなどは「完全な透過」ではないと
理解していたので,そういうものだと思ってました.
現象としては\kanjiskipが挿入されないんだなと.
LaTeXのどこかのドキュメントに
「\indexの\@bshackとかは完璧じゃない」
とあった記憶があるので、そんなもんかなと.