取消定义自定义命令

取消定义自定义命令

使用 定义命令后\newcommand,可以取消定义它吗?

我的动机是我正在写一篇论文,其中每一章都在一个单独的源文件中。有些章节定义了自己的命令,这些命令在其他地方都没有使用,所以我希望它们只在该章节中可见。

因此我希望能够做类似的事情:

\chapter{Some Chapter}
\newcommand{foo}{...}
... % chapter body
\forgetcommand{foo}
% end of chapter

有没有类似\forgetcommand上面虚构的宏的东西?

答案1

如果您关心某个命令是否存在,并且想要定义/重新定义它,LaTeX 提供了\providecommand具有与\newcommand和类似界面\renewcommand的 。它会在必要时进行适当的(重新)定义。

或者,如果您想“取消定义”一个命令\foo,您也可以使用\let\foo\undefined

答案2

考虑下面的例子。它展示了 Seamus 建议的方法和 的方法\let...\undefined

\documentclass{minimal}

\newcommand{\foo}{Foo}
\newcommand{\baz}{Baz}

\begin{document}
x\foo\baz x

\renewcommand{\foo}{}
\let\baz\undefined

x\foo%
%\baz x% can’t use \baz anymore

%\newcommand{\foo}{FOO}% doesn?t work
\renewcommand{\foo}{FOO}% still need \renew...
\newcommand{\baz}{BAZ}

x\foo\baz x
\end{document}

\foo不再产生输出但不能被第二次定义(它仍然需要命令\renew…)。\baz被删除并且可以被第二次定义。

答案3

如果该宏没有在其他地方使用,那么保持其定义明确是没有问题的。

除了封装之外,您还可以考虑为章节特定的宏设置名称空间。

因此,仅在第一章中使用的宏如下所示:\chaponefoo…而第三章中的宏将是:\chapthreefoo…等等。

(我之前的回答有一些问题,Werner 的回答更好。)

相关内容