如果命令 \commandA 存在,并且我
\newcommand{\commandB}{}
\let\commandB\commandA
*a redefinition of \commandA*
上的修改\commandA
也会影响\commandB
。但我想将“原始命令A”保存为命令B。
我怎样才能做到这一点?
答案1
也许这个类比有助于理解为什么应该使用\let\commandB\commandA
before \renewcommand{\commandA}{...}
。
如果在意外修改(删除?)文件之前应该保留它,则应将其存储到其他地方或复制到另一个名称,因此cp -a fileA fileB
(使用 Un*x 命令)正在复制原始文件并命名它fileB
。在短时间内,两个文件确实存在并且是相同的。
现在fileA
可以编辑等等。
情况也是如此\let...
,\let
但是不是就像编程语言中的指针C
,指向相同的内存位置,或者像文件系统中的符号链接。
首先将的定义安全地
\commandA
改为其他名称,\commandB
例如\let\commandB\commandA
这将立即完成,即\commandB
具有与 相同的定义\commandA
,并将执行与 相同的操作\commandA
。
\commandA
现在用\renewcommand{\commandA}{...}
或\def
等进行最终的改变。
这是一种经常应用的技术,为了扩展的定义\commandA
(即在其代码之前或之后)以便在重新定义内部使用它的定义,即调用\commandB
以获得原始效果。
请注意,对于带有可选参数的命令,应该使用 Heiko Oberdiek 包\LetLtxMacro
中的命令,而不是。letltxmacro
\let
expl3
另一方面提供\cs_set_eq:NN
等命令。