需要帮助 \expandafter

需要帮助 \expandafter

在 OpTeX 中,有一个宏\addto会将一些文本添加到另一个宏的定义中。它的定义如下:\long\def \addto #1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}。为什么\expandafter需要所有这些 s,尤其是最后一个 s 到底有什么作用?据我所知,最后一个\expandafters 会删除{,然后展开#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

相关内容