如何更改宏中的 catcode

如何更改宏中的 catcode

我想在宏中更改 catcode,但似乎不起作用。有人能帮我吗?

\def\A{\catcode`\|=0 |bf{test}} 

|bf{test}不会按预期工作。

答案1

这是行不通的,因为|已经被读作了的参数的一部分\def\A,因此在\catcode执行包含的之前已经有了它的 catcode。

您需要将 catcode 更改移出宏:

\begingroup
\catcode`\|=0 
\gdef\A{|bf{test}} 
\endgroup

还有其他方法可以做到这一点:eTeX 提供\scantokens重新读取其内容的功能,以便重新应用 catcode,并且有一个技巧可以使用 来实现\lowercase

请注意,在这个例子中没有不同如果使用\|。如果您还将 catcode 更改\为其他内容,则会这样。如果您告诉我们有关您的确切应用程序的更多信息,我们可以给出更具体的答案。

还请注意,您的代码示例将使 catcode 更改对组\A中的其余部分有效,这很可能不是您想要的。

相关内容