有哪些命令不能被重新定义?

有哪些命令不能被重新定义?

即我可以重新定义\def,或 吗\renewcommand?是否有明确的清单?

答案1

TeX 在未完成的条件句中插入了所谓的“冻结\relax”(见@egreg 的这个答案)。

您可以使用此插入来定义一个宏,以通过使用以下方式扩展此特殊\relax

\edef\x{\ifnum1=1\fi}

由于 TeX 将插入\relax这相当于

\edef\x{\ifnum1=1\relax\fi}

并且由于\edef将尽可能扩展定义,因此\ifnum1=1将为真,并且\fi由于扩展而被删除。

现在\x将扩展为\relax,但此\relax标记将无法重新定义(即冻结)。因此,以下代码\inaccessible在第二行会引发错误:

\edef\x{\ifnum1=1\fi}
\expandafter\def\x{}

完整的错误信息如下

! Missing control sequence inserted.
<inserted text>
                \inaccessible
l.2 \expandafter\def\x
                      {}

相关内容