在这个答案, egreg 用途
\NewDocumentCommand{\refprefix}{m}{%
\ifinproofref\else #1\fi
}
该命令\refprefix
是写入辅助文件的代码的一部分。使用以下命令定义命令
\newcommand{\refprefix}[1]{%
\ifinproofref\else #1\fi
}
显然不起作用,因为\refprefix
在写入辅助文件时已经扩展。
为什么会这样?在这种情况下,还有哪些其他类似定义的命令会以何种方式运行?
答案1
在这种情况下,不同之处在于\NewDocumentCommand
使用 e-tex \protected\def
,因此命令不会在 中展开\write
。您可以使用\NewExpandableDocumentCommand
来定义不受保护的版本。同样,在经典 latex 中,您可以使用 来\DeclareRobustCommand
定义不展开的命令(使用 LaTeX \protect
机制而不是\protected
)。