`\global\NewCommandCopy` 而不是 `\GlobalLetLtxMacro`?

`\global\NewCommandCopy` 而不是 `\GlobalLetLtxMacro`?

新的 LATEX2ε 内核提供\NewCommandCopy\Renew...\Declare...变体),其功能几乎\LetLtxMacroletltxmacro 包

而不是\GlobalLetLtxMacro来自 letltxmacro,\global\NewCommandCopy现在可以使用吗?

答案1

\global前缀仅当位于原始 TeX 赋值之前(宏扩展之后)时才有效:

  • \global<def>其中<def>\def\edef或中\gdef的任意一个;在这种情况下、或(使用 e-TeX)\xdef中的其他前缀可能位于和之间;\long\outer\protected\global<def>

  • \global<register>,其中<register>可以是\count\dimen\skip或中的任意一个,\muskip或者是用、、\toks或 定义的符号名称,或者是任何内部 TeX 寄存器,例如或。\countdef\dimendef\skipdef\muskipdef\toksdef\baselineskip\everypar

  • \global\let

  • \global\chardef或者\global\mathchardef

  • \global\box

例如,不能说\global\newcommand。好吧,这不会触发错误,但也不会产生您期望的结果。在某些情况下\global\setlength可能会起作用,但建议不要使用它。

也是一样\NewCommandCopy,因为它的扩展以 开始,\declare@commandcopy而 又以 开始

\edef\reserved@a{...}

因此\global将被应用于\edef并全局定义\reserved@a,这不会很有用。

没有“全局”版本\NewCommandCopy:我们的想法是,这样的任务应该在顶层完成。

如果您有用例,您可以向 LaTeX 团队提出功能请求。

确实letltxmacro提供了\GlobalLetLtxMacro,但我从未发现它有什么用处。有四个包使用它。然而

  • tablefootnote在顶层使用它;
  • lwarp-chemfig在顶层使用它;
  • footnoterange用它来修饰\footnotemark开头footnoterangefootnoterange*环境,并在结尾恢复含义;
  • autonumfoonoterange\label和进行类似的交换\\

我不认为有必要进行这样的恢复,因为命令是在形成组的环境内部修改的。

相关内容