etoolbox 和 csundef 的问题

etoolbox 和 csundef 的问题

使用代码

\documentclass{article}
\usepackage{etoolbox}

\newenvironment{Toto}{%
}{%
}

\AfterEndEnvironment{Toto}{I forgot\dots}

\begin{document}
\begin{Toto}

\end{Toto}

\csundef{@afterend@Toto@hook}

\begin{Toto}

\end{Toto}

\end{document}

\csundef 不适用于 TL2020 + 2020/10/05 v2.5k e-TeX 工具(适用于 LaTeX (JAW))

但在 overleaf 中,它可与 TL2020 + etoolbox 2020/07/15 v2.5i e-TeX 工具(适用于 LaTeX(JAW))配合使用

答案1

我不认为这是从中删除某些内容的正确方法\AfterEndEnvironment

\documentclass{article}
\usepackage{etoolbox}

\newenvironment{Toto}{%
}{%
}

\newcommand{\iforgot}{I forgot\dots}
\AfterEndEnvironment{Toto}{\iforgot}

\begin{document}
\begin{Toto}
x
\end{Toto}

\renewcommand{\iforgot}{}

\begin{Toto}
x
\end{Toto}

\end{document}

从 2020-10-01 版本开始,LaTeX 内核中内置了新的钩子管理。

\documentclass{article}

\newenvironment{Toto}{}{}

\AddToHook{env/Toto/after}[forgot]{I forgot\ldots}

\begin{document}
\begin{Toto}
x
\end{Toto}

\RemoveFromHook{env/Toto/after}[forgot]

\begin{Toto}
x
\end{Toto}

\end{document}

方括号中的标签是任意字符串。您可以添加任意多段代码,并通过标签机制仅禁用其中一部分。请参阅文档

texdoc lthooks

相关内容