我仍在努力弄清楚 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
在真实排版之外毫无理由地使用它)。