如何仅当尚未使用 etoolbox 定义环境时才定义环境

如何仅当尚未使用 etoolbox 定义环境时才定义环境

我不确定要使用哪个测试。这似乎有效:

\ifcsmacro{myenvironment}{}{
    \newenvironment{myenvironment}{Not seen so far.}{End.}
}

可以吗,还是我应该使用其他测试?此外,我不应该使用 etoolbox 吗?我正在使用 etoolbox 执行其他任务,因此在这里使用它似乎很自然。

答案1

这已经足够了,因为 LaTeX 定义了命令\<env>\end<env>执行时\newenvironment{<env>}。但是,为了安全起见,您可能希望删除任何先前使用的定义,无论出于何种原因\end<env>,这些定义可能已被定义\def\end<env>{...}

\ifcsmacro{myenvironment}{}{
  \let\endmyenvironment\undefined%
  \newenvironment{myenvironment}{Not seen so far.}{End.}
}

这里,\undefined是一个未定义的宏。它也可能就是任何未定义的东西,比如\thismacrodoesnotexist。当然,如果担心\end<env>可能很重要,那么在定义之前也应该测试一下<env>,可以将其嵌套在<false>条件中\ifcsmacro

相关内容