
Разрабатывая сложный фрагмент кода, я получил следующую загадочную ошибку:
./[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
и затем обычно выдает ошибку undefined command (или, если \zzz
уже есть определение, вы получаете произвольную ошибку от расширения этого определения). Это и есть вся причина механизма latex \protect
, и \xdef
прямое использование просто пробивает в нем дыру.
Причина, по которой вывод журнала выглядит немного странно, заключается в том, что он раскрывает (или пытается раскрыть) внутренний токен с интересным именем.
\@err@ %
это токен с 65 или около того пробелами в названии,