\xdef 中的 \mathbb 出现奇怪错误

\xdef 中的 \mathbb 出现奇怪错误

开发一段复杂的代码时,我遇到了以下神秘的错误:

./[email protected]:5: Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.5 ...w@thmref@thm:defi:DistRn\endcsname{$\mathbb
                                                  {R}$}

通过“二分查找”,我意识到这是由于以下原因造成的:

\documentclass[a4paper]{report}
\usepackage{amsfonts}

\begin{document}
\expandafter\xdef\csname mw@thmref@thm:defi:DistRn\endcsname{$\mathbb{R}$}
\end{document}

然后变成\xdef\gdef消失了。所以我很好奇,来这里问:这里发生了什么,这个错误是什么意思?

答案1

有一个原因\xdef是 latex 中不支持命令,大多数 tex 构造在 edef 中爆炸。使用 \protected@edef然后\protect用于任何脆弱的命令。

如果你走的话

\edef\foo{\def\zzz{hello}}

然后它会尝试扩展(仅)标记,而定义\foo.\def是不可扩展的,因此就保持原样,然后它会尝试扩展\zzz,然后通常会给出未定义的命令错误(或者如果\zzz已经有定义,则会因扩展该定义而得到任意错误)。这就是 latex\protect机制的全部原因,\xdef直接使用只会直接将其炸开一个洞。

日志输出看起来有点奇怪的原因是它揭示了(或试图揭示)一个具有有趣名称的内部标记

 \@err@                                                                 %

这是一个名称中有 65 个左右空格的 token,

相关内容