如何在修改命令之前保存它?

如何在修改命令之前保存它?

如果命令 \commandA 存在,并且我

\newcommand{\commandB}{}
\let\commandB\commandA
*a redefinition of \commandA*

上的修改\commandA也会影响\commandB。但我想将“原始命令A”保存为命令B。

我怎样才能做到这一点?

答案1

也许这个类比有助于理解为什么应该使用\let\commandB\commandAbefore \renewcommand{\commandA}{...}

如果在意外修改(删除?)文件之前应该保留它,则应将其存储到其他地方或复制到另一个名称,因此cp -a fileA fileB(使用 Un*x 命令)正在复制原始文件并命名它fileB。在短时间内,两个文件确实存在并且是相同的。

现在fileA可以编辑等等。

情况也是如此\let...\let但是不是就像编程语言中的指针C,指向相同的内存位置,或者像文件系统中的符号链接。

  1. 首先将的定义安全地\commandA改为其他名称,\commandB例如

    \let\commandB\commandA
    

这将立即完成,即\commandB具有与 相同的定义\commandA,并将执行与 相同的操作\commandA

  1. \commandA现在用\renewcommand{\commandA}{...}\def等进行最终的改变。

这是一种经常应用的技术,为了扩展的定义\commandA(即在其代码之前或之后)以便在重新定义内部使用它的定义,即调用\commandB以获得原始效果。

请注意,对于带有可选参数的命令,应该使用 Heiko Oberdiek 包\LetLtxMacro中的命令,而不是。letltxmacro\let

expl3另一方面提供\cs_set_eq:NN等命令。

答案2

考虑使用響鳴包。我将展示如何处理所有转义字符代码例如变音符\c,其中一些带有变元。在序言中,使用

\usepackage[preset=reset]{phfnote}

重新定义任何内容之前,请保存所有旧命令:

\phfnoteSaveDefs{origcmds}{H,c,k,l,b,d,r,aa,u,v,t,o}

然后你就可以随意定义它们了。在你需要使用旧版本之前,写下

\phfnoteRestoreDefs{origcmds}

相关内容