macrocode 環境の \Module
LuaTeX-ja を読み込んだ上で doc パッケージの macrocode 環境を用いた場合、\CheckModules の設定が効かず、常に \DontCheckModules の状態になってしまいます。 具体的には、ガードが他のコードと同等に扱われ、\c@StandardModuleDepth の設定も無意味になります。 実際に、jsclasses.pdf と ltjsclasses.pdf を比較しても、この挙動が確認できます。
以下に、LuaTeX-ja の読み込みの有無で出力が変わる例を示します:
% \iffalse \documentclass{article} \usepackage{doc} \usepackage{luatexja} \begin{document} \DocInput{\jobname} \end{document} % \fi % \begin{macrocode} %<*wysiwyg> \catcode"3001 \active \catcode"3002 \active %</wysiwyg> % \end{macrocode}
LuaTeX-ja は everyhook パッケージがなくても動くようですが、この場合、問題は発生しません。 macrocode 環境ではガードを判定するために \everypar で \futurelet を使っていますが、everyhook を読み込んだ場合、\everypar の後ろに \PushPostHook{par} により登録されたテキストを実行するためのマクロ \eh@postpar が置かれます。
このため、\futurelet で正しくガードを判定することができないのが原因のようです。
LuaTeX-ja の問題ではないかもしれませんが、どこが対応すべきかも微妙ですし、everyhook パッケージのバグ報告先がわからなかったので、とりあえずここに書ききました。
個人的には everyhook パッケージが \PushPostHook{par} で登録されたテキストが空な場合、\everypar により登録された内容を最後に実行する(\eh@postpar は実行しない)というのが一番丸く収まる気がします。 LuaTeX-ja 側で何か対策するとしたら、everyhook パッケージの読み込みを抑制する方法を提供するとかでしょうか。
everyhookパッケージの性質からして、どうすればよいか私にはわかりません。
確認しました.おそらく everyhook 読み込み時は
として回避できると思いますが,筋の良い方法ではないと思っています. もう少し悩んでみます.
概要
LuaTeX-ja を読み込んだ上で doc パッケージの macrocode 環境を用いた場合、\CheckModules の設定が効かず、常に \DontCheckModules の状態になってしまいます。 具体的には、ガードが他のコードと同等に扱われ、\c@StandardModuleDepth の設定も無意味になります。 実際に、jsclasses.pdf と ltjsclasses.pdf を比較しても、この挙動が確認できます。
以下に、LuaTeX-ja の読み込みの有無で出力が変わる例を示します:
原因
LuaTeX-ja は everyhook パッケージがなくても動くようですが、この場合、問題は発生しません。 macrocode 環境ではガードを判定するために \everypar で \futurelet を使っていますが、everyhook を読み込んだ場合、\everypar の後ろに \PushPostHook{par} により登録されたテキストを実行するためのマクロ \eh@postpar が置かれます。
このため、\futurelet で正しくガードを判定することができないのが原因のようです。
対策
LuaTeX-ja の問題ではないかもしれませんが、どこが対応すべきかも微妙ですし、everyhook パッケージのバグ報告先がわからなかったので、とりあえずここに書ききました。
個人的には everyhook パッケージが \PushPostHook{par} で登録されたテキストが空な場合、\everypar により登録された内容を最後に実行する(\eh@postpar は実行しない)というのが一番丸く収まる気がします。 LuaTeX-ja 側で何か対策するとしたら、everyhook パッケージの読み込みを抑制する方法を提供するとかでしょうか。
everyhookパッケージの性質からして、どうすればよいか私にはわかりません。