Странная ошибка с \mathbb в \xdef

Странная ошибка с \mathbb в \xdef

Разрабатывая сложный фрагмент кода, я получил следующую загадочную ошибку:

./[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 или около того пробелами в названии,

Связанный контент