自 2020 年 10 月 LaTeX 更新以来,将文档环境包装到另一个环境中失败

自 2020 年 10 月 LaTeX 更新以来,将文档环境包装到另一个环境中失败

自上次 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.

如果加载了任何稍微不兼容的包)。

相关内容