待辦事項 #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パッケージの性質からして、どうすればよいか私にはわかりません。

Ticket History (2/2 Histories)

2022-04-26 23:00 Updated by: None
  • New Ticket "macrocode 環境の \Module" created
2022-04-28 20:04 Updated by: h7k
評語

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

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

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

Attachment File List

No attachments

編輯

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登入