在 OpTeX 中,有一个宏\addto
会将一些文本添加到另一个宏的定义中。它的定义如下:\long\def \addto #1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
。为什么\expandafter
需要所有这些 s,尤其是最后一个 s 到底有什么作用?据我所知,最后一个\expandafter
s 会删除{
,然后展开#1
并重新插入{<expansion of #1>
到标记列表中。那 呢#2
?它是如何展开的?
答案1
第二个论点就不展开了:我们接着说
\def\aaa{x}
\addto\aaa{y}
执行第一个定义后,TeX 会进行扩展\addto
,得到
\expandafter\def\expandafter\aaa\expandafter{\aaa y}
(括号按规则被去掉,后面没有空格\aaa
)。这就变成了
\def\aaa{xy}
如您所愿。如果{y}
您有类似的东西\bbb
,并且想要合并两者的内容\aaa
,那么\bbb
您需要按如下方式进行操作
\def\aaa{x}
\def\bbb{y}
\expandafter\addto\expandafter\aaa\expandafter{\bbb}
此后,宏\aaa
将扩展为xy
。