
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 \xdef
fez \gdef
com 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 \xdef
não há um comando suportado no latex, a maioria das construções tex explodem em um edef. use \protected@edef
e depois use \protect
para quaisquer comandos frágeis.
se tu vais
\edef\foo{\def\zzz{hello}}
então ele tenta expandir (apenas) os tokens enquanto define \foo
. \def
não é expansível, então é deixado como está, então ele tenta expandir \zzz
e normalmente fornece um erro de comando indefinido (ou se \zzz
já tiver uma definição, você receberá um erro arbitrário ao expandir essa definição). Esta é a razão do \protect
mecanismo de látex, e usá-lo \xdef
diretamente 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,