使用 定义命令后\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 的回答更好。)