即我可以重新定义\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
{}