![新环境内部的环境](https://linux22.com/image/447151/%E6%96%B0%E7%8E%AF%E5%A2%83%E5%86%85%E9%83%A8%E7%9A%84%E7%8E%AF%E5%A2%83.png)
需要创建一个使用不同环境的环境。例如,我可以像这样实现它:
\newenvironment{new}{ \begin{old} }{ \end{old} }
一切正常,直到old
变为document
。在这种情况下,代码停止工作:
! LaTeX Error: \begin{Document} on input line 2 ended by \end{document}
为什么上述代码在非的情况下可以正常工作document
,但在的情况下却不行document
?
PS 我也会给出一个在这个广阔的地点:
\newenvironment{Document}{}{}
\AddToHook{env/Document/before}{ \begin{document} }
\AddToHook{env/Document/after}{ \end{document} }
答案1
有充分的理由表明这种方法不起作用。
每个环境都会创建一个组,只有一个例外,即document
。为什么?因为在一个组内排版整个文档很容易导致内存溢出,因为 TeX 需要保留每个分配,以便在组结束时恢复它(但这毫无意义,因为文档已经结束)。
除了该方法不可行之外,我看不出隐藏document
在另一个环境中的任何好理由,因为这会导致与 LaTeX 内核想要避免的完全相同的问题。