タイトル通りですが,\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とかは完璧じゃない」
とあった記憶があるので、そんなもんかなと.