-
Notifications
You must be signed in to change notification settings - Fork 2
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
pxeveryshi.sty: LaTeX2e 2020-10-01 対策 #16
Conversation
この変更でやろうとしていることについて,少し説明しておきます. LaTeX2e 2020-10-01 では everyshi-ltx パッケージにて everyshi のエミュレートをすることになったようです.この everyshi-ltx はかなり素朴に実装されていて,everyshi の2つの公開インターフェース ( https://github.com/latex3/latex2e/blob/develop/base/ltshipout.dtx#L1688-L1694 この修正提案は そういう意味では,そもそも everyshi-ltx が everyshi と互換ではありません.既に言及したように内部命令に対応していませんし,ltshipout.dtx の実装箇所直後に言及があるように, cf. https://github.com/latex3/latex2e/blob/develop/base/ltshipout.dtx#L1696-L1716 |
pull request ありがとうございます。
なるほど atbegshi -> atbegshi-ltx と似た状況ということですね。pxatbegshi については一応対処したつもりだったのですが,例の texjporg/platex#94 でも話題のとおり,「その対処を pLaTeX カーネルに入れたほうが良いのではないか」という考えも出ています。 既存の問題には「everyshi 読込時のみ公開インタフェースにパッチする」という方法で十分なことがわかったのは収穫ですが,もう少し検討したいと思います。 |
ただ,ほとんど気にしなくてもよいのかもしれませんが,
のように外部水平モード・外部垂直モードで \shipout が呼ばれる可能性もありますね. |
プレースホルダに入れる物は pLaTeX 側で自由にできるので
だとどうでしょう? |
これについては異存ありません.
output routine 内で呼ばれる場合は その他の場合には
という 2 つの問題があります.
|
『\shipout が output routine 内で呼ばれたことを検知し,その場合のみプレースホルダに \yoko を入れる』(その他の場合の \shipout は弄らない)ということが出来れば OK である,と理解しました。もしここで「output routine 内で呼ばれた」が「 |
考えてみれば \AtBeginDvi も everyshi も atbegshi も「\yoko が必要な理由」はひとえに「pLaTeX カーネルの |
pLaTeX の output routine は十分なはずですが,一方 #16 (comment) に挙げられた \documentclass{article}
\begin{document}
hoge % outer horizontal
\noindent
\shipout\vbox{\tate あっという間にABCV}
\stop は現行の platex だと OK ですが,現行の platex-dev で既にエラーですね。
しかも「plcore.ltx の どうしたものか…。 |
ちょっと話の流れを遮ってしまいますが
の実現方法については見当が付いていますか? これは shipout/before の直前に shipout/before/before 的なフックを追加するということですか? |
十分検証していませんが https://github.com/latex3/latex2e/blob/develop/base/ltshipout.dtx#L627 の |
私もそのようなイメージでいました(LuaTeX-ja でもこの命令を使うと思います). |
これに関して言えば,そもそも |
なるほど,だいたいわかりました. 前者は cf. https://github.com/latex3/latex2e/blob/develop/base/ltshipout.dtx#L803
これはむしろ要望・実装の難易度が上がりそうですが…… 本件以外でも同様に「フック先頭を固定する機能」が有用な場面が複数あるなら,この方が良い選択肢になると思います. |
なんだか泥沼になりそうな気がします(……と思うのは自分だけ?).
とかなると収拾がつきません. |
よくわかっていないのですが、 \AddToHook{shipout/before}{\yoko}
\documentclass{tarticle}
\begin{document}
\begin{figure}
\caption{キャプション}
\end{figure}
\end{document} がエラーになります。
詳細は分かりませんが、フロートのみの状態で ここの議論に影響しそうな気がしたので…… |
LaTeX team に要望を送るに際して「通るべきテストケース」と「期待される結果」をまとめた物を示したいと思います。それ専用のリポジトリを立てようと思います。 l3build のログだけで確認するのは難しい可能性があるので,TeX ソースと生成した DVI や PDF を置いていく感じの想定で。 |
このテストケースがかなり重要なことがわかりました。前に私が書いていた
の方法も,やはり原理は同じでエラーが出てしまいます。事はそんなに単純じゃなかった…。 |
この状態で hook の内容を
として
となっていました.\output で入った内部垂直モード内に \clearpage 由来の \write が 2 つあるのが「! Use `\yoko' at top of list.」の原因だと思われますが,まだよくわかりません. |
https://github.com/texjporg/tests-shipout の candidate 3 を以って,everyshi の公開インタフェースをパッチすることなく pLaTeX カーネル内部で対策できるようになりました。これが pLaTeX に採用されれば pxeveryshi は不要となるため,先走って 51be5bf でコードを消してみました。 pLaTeX カーネルが確定しましたら,この pull request は close させていただきます。 |
その変更をこのプルリクに追加コミットしようと思っていたのですが,先に反映されたのですね.了解しました. |
platex-tools 2020-09-27 を出しました。
という方針により,こちらは close と致します。 |
aminophen/plautopatch#12 を調べていて発覚した根本原因の修正案です.ひとまず,向こうの issue で言及した MWE はこれで通るようになります.ただし色々と配慮不足の点があるかもしれませんので,すぐにマージして大丈夫そうかというと,かなり怪しいです.
なお,この変更が plautopatch でも効果を発揮するようにするには,別途 plautopatch.sty に以下を追加する必要があります.