在编写包时,当遇到类似\selectlanguage
在序言中不起作用的命令时,我学会将它们放在里面\AddToHook{begindocument}{...}
,这样如果在序言中调用它,它将自动延迟到文档的开头。
对于使用 expl3 编写的包,我一直(错误地)使用\hook_gput_next_code:nn
作为其等效形式。然而,我刚刚意识到它们并不相同。例如,使用以下代码,text in document 2
不会显示。
\documentclass{article}
\ExplSyntaxOn
\AddToHook { begindocument } { text in preamble 1 \\ }
\hook_gput_next_code:nn { begindocument } { text in preamble 2 \\ }
\begin{document}
\AddToHook { begindocument } { text in document 1 }\\
\hook_gput_next_code:nn { begindocument } { text in document 2 }
\end{document}
仔细研究texdoc lthooks
,似乎\hook_gput_next_code:nn
是唯一一个与:nn
接近的说明符\AddToHook
。 的实际 expl3-equivalent 是什么\AddToHook
?
答案1
你想要\hook_gput_code:nnn
。在这个expl3
层面上,没有“标签猜测”:你有指定使用什么标签。这与设计级别形成对比\AddToHook
,设计级别将假定它可以使用文件的名称,除非您添加可选参数。