是否可以重新定义宏的参数?

是否可以重新定义宏的参数?

我想重新定义一个宏参数。这是我迄今为止尝试过的方法:

\def#1{$#1$} 

但是它引发了这个严重的错误,我不知道如何修复。

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.66     \def#
              1{$#1$}

有人有什么想法吗?

我的实际目标是做以下事情:

\def#1{\noexpand{{#1}}

但它抛出了同样的错误。我这样做只是为了防止#1以后在宏中扩展。

答案1

从你的帖子中很难猜测你的意图,但我想你的意思是这样的,它在本地重新定义给出的命令#1\TeX这里)以确保安全\edef


\def\LocallyMakeSafe#1{%
\edef\tmpA{#1}%
\immediate\write20{aaa: \meaning\tmpA}%
{%
\def#1{\noexpand#1}% local \protect
\edef\tmpB{#1}%
\immediate\write20{bbb: \meaning\tmpB}%
}%
}



\LocallyMakeSafe\TeX



\bye

生成显示前后效果的日志\def#1

aaa: macro:->T\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX
bbb: macro:->\TeX 

相关内容