Erro estranho com \mathbb em \xdef

Erro estranho com \mathbb em \xdef

Ao desenvolver um código complexo, recebi o seguinte erro enigmático:

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

Por "pesquisa binária", percebi que era devido ao seguinte:

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

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

e essa transformação \xdeffez \gdefcom que desaparecesse. Então fiquei curioso e vim aqui perguntar: o que está acontecendo aqui e o que significa esse erro?

Responder1

Há uma razão pela qual \xdefnão há um comando suportado no latex, a maioria das construções tex explodem em um edef. use \protected@edefe depois use \protectpara quaisquer comandos frágeis.

se tu vais

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

então ele tenta expandir (apenas) os tokens enquanto define \foo. \defnão é expansível, então é deixado como está, então ele tenta expandir \zzze normalmente fornece um erro de comando indefinido (ou se \zzzjá tiver uma definição, você receberá um erro arbitrário ao expandir essa definição). Esta é a razão do \protectmecanismo de látex, e usá-lo \xdefdiretamente apenas abre um buraco nele.

A razão pela qual a saída do log parece um pouco estranha é que ela está revelando (ou tentando revelar) um token interno com um nome interessante

 \@err@                                                                 %

isso é um token com cerca de 65 espaços em seu nome,

informação relacionada