我想在宏中更改 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
中的其余部分有效,这很可能不是您想要的。