我可以在不使用临时寄存器的情况下扩展一次宏参数吗?

我可以在不使用临时寄存器的情况下扩展一次宏参数吗?

我仍在努力弄清楚 TeX 中的扩展工作原理。有一件事我无法弄清楚,那就是如何在不使用临时寄存器作为中间件的情况下扩展一次宏参数。

举例来说,考虑下面的代码,它定义了一个带有\meaning一些花哨功能的替代方案:

\long\def\printmeaning#1%
{%
    \def\@tempa{#1}%
    {\tt\expandafter\string\@tempa} is defined as\par
    {\tt\meaning#1}%
}
\printmeaning\centerline

\bye

输出(用 生成pdftex)是

在此处输入图片描述

到目前为止一切顺利。但是,我想知道我是否真的必须\@tempa在这里使用临时寄存器(例如)。有没有办法\printmeaning在不使用临时寄存器(或其他临时宏)的情况下打印传递给的控制序列的名称?

答案1

\string#1如果#1是控制序列,则可直接使用:

\def\printmeaning #1{{\tt\string#1} is defined as:\endgraf {\tt\meaning#1}}

(可能\endgraf最后会有一个附加内容。或者\par。我倾向于\endgraf在真实排版之外毫无理由地使用它)。

相关内容