自上次 LaTeX 更新以来,包装\document
到另一个环境失败,可能是因为新的钩子管理系统。
以下曾经有效:
\documentclass{article}
\newenvironment{mydoc}{%
\document%
}{%
\enddocument%
}%
\begin{mydoc}
This is a test document.
\end{mydoc}
近 20 年来,我一直使用这种机制为学生创建数学练习,这些练习可以独立编译或包含在其他文档中(根据环境而变化mydoc
)。自今天更新以来,我得到了
LaTeX 错误:输入第 13 行的 \begin{mydoc} 以 \end{document} 结束。
由于我有大约 1000 份这样的文件,因此我真的很感激一种将document
环境包装成私有环境的(新?)方法。
答案1
这取决于你的mydoc
环境具体做什么\document
以及什么时候做。如果你只是想
\begin{mydoc}
...
\end{mydoc}
成为...的捷径
\begin{document}
\begin{mydoc}
...
\end{mydoc}
\end{document}
那么你可以做
\AddToHook{env/mydoc/before}{\begin{document}}
\AddToHook{env/mydoc/after}{\end{document}}
它会\begin{document}
在之前\begin{mydoc}
和\end{document}
之后执行\end{mydoc}
。请参阅我的回答环境钩子的时机。
您可以找到以下文档lthooks
这里(或使用texdoc lthooks
)。
这相当于之前提供的接口etoolbox
:
\BeforeBeginEnvironment{mydoc}{\begin{document}}
\AfterEndEnvironment{mydoc}{\end{document}}
只不过现在它使用lthooks
而不是修补\begin
和\end
(这通常会导致
Package etoolbox Warning: Patching '\begin' failed!
(etoolbox) '\BeforeBeginEnvironment' will not work.
如果加载了任何稍微不兼容的包)。