判定間違いが起きる例には「横組クラスで,何かのパッケージが \tate を含むコードを \@begindocumenthook に遅延させた場合」があります(上のコードでは「\tate を含むかどうか」しかわからないので)。そのような事象がどの程度起きるのかは私には判断しかねます。
「横組クラスで,何かのパッケージが \tate を含むコードを \@begindocumenthook に遅延させた場合」が
普通に起こりそうな気がする。
判定基準を \tate \message とかにすれば誤判定は無くせそうだけど、結局それは「標準クラスに特化した判定」になりますよね。 だったら、単純にクラス名を調べたほうが素直な気がしますね。
ところで、実装を見る限りは
「LuaTeX-jaでは、クラス読込終了時に既に \tate が呼ばれている」
と仮定しているようですが、そう判断できる根拠は何なのでしょうか?
ところで、実装を見る限りは
「LuaTeX-jaでは、クラス読込終了時に既に \tate が呼ばれている」
と仮定しているようですが、そう判断できる根拠は何なのでしょうか?
>「LuaTeX-jaでは、クラス読込終了時に既に \tate が呼ばれている」
単純に lltjp-geometry を書いたときには ltjt* クラスがそのようになっていたから,だけだと思います.
\DeclareOption{tate}{% \tate\AtBeginDocument{\message{《縦組モード》}\adjustbaseline}% }
pLaTeX でクラス読込終了時のリストを
\documentclass{tarticle} \tracingonline1 \showboxdepth10000 \showlists \begin{document} \end{document}で調べると,
### yoko direction, vertical mode entered at line 0 ### current page: \write-{}となっています. \tate は \AtBeginDocument で発行されるわけですが,それが許される理由は「現在のリスト = recent contribution が空だから」で, 当時の私はこの点に違和感を持ったのでしょう(#33971 参照).
LuaTeX-ja に縦組を実装した当初は,tex.lists.page_head (= current page) が空の時にしかページの組方向は変えられないようにしていました. 今はなんだかよくわからないことになっています⛄
私がこの issue を立てた目的は,
「縦組用に書かれた lltjp-geometry パッケージを,横組専用なクラスで使うと,警告なしに変な出力になる」
という状況を改善したかったからでした。もしかすると
「\@begindocumenthook に \tate が登場しない場合」は明らかに横組クラスと考えて良さそうだから警告する
とか,何か改善の余地はないかというキッカケを作りたかっただけです。個人的には geometry パッケージは数ある \usepackage の中で,比較的最初の方で読み込まれやすい傾向にあると思っていて,その状況では \@begindocumenthook を簡易的にチェックするだけでも十分判定の精度が高そうだと考えられるかもしれません。
あと,別のアプローチとして
\kanjiencodingdefault の定義を見る
というのもいけるかもしれません。\normalfont はクラスファイル内で一旦実行されるので,この時点で JY{1,2,3} か JT{1,2,3} かでクラスファイルの判定がつく可能性は高いです。
commit 175188f3 で lltjp-geometry.sty を更新しました. 以下のいずれかを満たした場合に,自動で「縦組クラス」と検出して有効化されるようにしています:
また,自動判定を無視して強制的に有効化する force オプションと,強制的に無効化する disable オプションを作りました.ただ LuaTeX-ja にこれらを渡すには,
のように \PassOptionsToPackage を使う必要があります.
lltjp-geometry のドキュメントより
判定できるっぽいです。ascmac パッケージに最近入れたアレと類似のコードを使った例(最小化はしていない):
大概の日本語縦組クラスはアスキーに準じて \AtBeginDocument しているはずですし、もし遅延なしに \tate してあった場合はこれまた簡単ですね。仮に問題が起きるとすれば「\begin{document} より手前のどこかまで遅延する」とか「\document の定義を書き変えて \@begindocumenthook を使わない」とかなので(私は見たことない)、これで完全に判定可能とみなしてよいさそうに思っています。