假设我有这两个简单的文件
myclass.cls
:\LoadClass{article} \AtBeginDocument{\typeout{IN CLASS}}
myfile.tex
\AtBeginDocument{\typeout{BEFORE CLASS}} \documentclass{myclass} \AtBeginDocument{\typeout{AFTER CLASS}} \begin{document} empty \end{document}
编译时myfile.tex
我希望按以下顺序看到消息:
BEFORE CLASS
IN CLASS
AFTER CLASS
我宁愿得到这个命令:
IN CLASS
BEFORE CLASS
AFTER CLASS
我错过了什么?
只是为了完整性,我使用pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020/Debian)
和得到了这个结果kpathsea version 6.3.2
。
答案1
使用钩子管理系统\AtBeginDocument
是一个别名\AddToHook{begindocument}
,所有具有相同标签(toplevel
在这种情况下默认为或您的类名)的条目一起执行,以便它们可以按照钩子规则进行排序。
您可以使用新的可选参数将两个调用放在单独的标签中
\AtBeginDocument[A]{\typeout{BEFORE CLASS}}
\documentclass{myclass}
\AtBeginDocument[B]{\typeout{AFTER CLASS}}
\begin{document}
empty
\end{document}
生产
BEFORE CLASS
IN CLASS
AFTER CLASS