新的 LATEX2ε 内核提供\NewCommandCopy
(\Renew...
和\Declare...
变体),其功能几乎\LetLtxMacro
与letltxmacro 包。
而不是\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
开头footnoterange
和footnoterange*
环境,并在结尾恢复含义;autonum
foonoterange
与\label
和进行类似的交换\\
。
我不认为有必要进行这样的恢复,因为命令是在形成组的环境内部修改的。