\renewcommand 用于使用 \def 定义的命令

\renewcommand 用于使用 \def 定义的命令

在以下 MWE 中,我曾经\renewcommand重新定义通过以下方式定义的命令\def

\documentclass{article}

\def\mymacro{Hello}
\renewcommand{\mymacro}{Hello world}

\begin{document}
\mymacro
\end{document} 

据我所知,它运行良好。

我想知道的是:

  1. 有哪些情况它不起作用?
  2. 这是一个好的做法吗?或者我应该用它\def来重新定义通过定义的命令\def

编辑

我已经看过了\def 和 \newcommand 之间有什么区别?。我的意思是,有时我需要破解一些定义的命令\def,我想知道是否允许我这样做\renewcommand

答案1

如果用 创建的命令\def是“上下文相关的”(或“分隔的”),则不能用 重新定义\renewcommand。但对于像您展示的那样的简单定义,它\renewcommand可以很好地工作,并且在 LaTeX 中被认为是更好的选择。

在定义比纯文本提供的类似命令更灵活的符号命令时,内部使用以下模式来amsmath检查符号的存在或类别,以便“做正确的事情”:

\def\@tempa#1#2\@nil{<...>}

该字符串\@nil看起来像一个命令,但实际上它不是。相反,它被用作“哨兵”来划定正在测试的范围。

在这种情况下,使用标记可以避免在使用定义的命令时使用括号。“LaTeX 方式”是使用括号,但在某些情况下,括号的增多会使输入更难阅读(并且在发生错误时难以调试),而标记方法可以发挥其优势。

编辑:正如@Dan所说,这并不意味着不能使用重新定义命令\renewcommand,而是在这样做时不可能复制原始的使用语法。

相关内容