防止 setbox 内的宏扩展

防止 setbox 内的宏扩展

以下代码是我所面临的问题的精髓:

\documentclass{minimal}

\newbox\boxa
\newbox\boxb
\newbox\boxc
\parindent=0pt

\begin{document}

\setbox\boxc\hbox{Hello World!}

\def\foobar{MIST}

\setbox\boxa=\hbox{\foobar\space A}

\def\foobar{MOST}
\setbox\boxb=\hbox{\foobar\space B}

\setbox\boxc=\hbox{\unhbox\boxc\space \unhbox\boxa\space \unhbox\boxb.}

\unhbox\boxc
\end{document}

期望输出为

Hello World! MOST A MOST B.

但我只能得到

Hello World! MIST A MOST B.

从技术上讲,仅通过施展魔法就能获得所需的输出 \setbox\boxa吗?

答案1

您可以通过保存宏而不是保存框来获得所需的内容。

一个框包含排版文本:框中根本没有 tex 控制结构,因此即使宏已经发生改变,每次使用框时都会获取相同的文本,这是“设计使然”。

相关内容