チケット #44472

macrocode 環境の \Module

登録: 2022-04-26 23:00 最終更新: 2022-04-28 20:04

報告者:
(匿名)
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

概要

LuaTeX-ja を読み込んだ上で doc パッケージの macrocode 環境を用いた場合、\CheckModules の設定が効かず、常に \DontCheckModules の状態になってしまいます。 具体的には、ガードが他のコードと同等に扱われ、\c@StandardModuleDepth の設定も無意味になります。 実際に、jsclasses.pdfltjsclasses.pdf を比較しても、この挙動が確認できます。

以下に、LuaTeX-ja の読み込みの有無で出力が変わる例を示します:

  1. % \iffalse
  2. \documentclass{article}
  3. \usepackage{doc}
  4. \usepackage{luatexja}
  5. \begin{document}
  6. \DocInput{\jobname}
  7. \end{document}
  8. % \fi
  9. % \begin{macrocode}
  10. %<*wysiwyg>
  11. \catcode"3001 \active
  12. \catcode"3002 \active
  13. %</wysiwyg>
  14. % \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パッケージの性質からして、どうすればよいか私にはわかりません。

チケットの履歴 (2 件中 2 件表示)

2022-04-26 23:00 更新者: None
  • 新しいチケット "macrocode 環境の \Module" が作成されました
2022-04-28 20:04 更新者: h7k
コメント

確認しました.おそらく everyhook 読み込み時は

  • \macro@code\everypar している部分を \PushPostHook{par} にする
  • \endmacrocode\everypar{} している部分を \PopPostHook{par} にする

として回避できると思いますが,筋の良い方法ではないと思っています. もう少し悩んでみます.

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする