
Al desarrollar un fragmento de código complejo, obtuve el siguiente error críptico:
./[email protected]:5: Undefined control sequence.
\GenericError ...
#4 \errhelp \@err@ ...
l.5 ...w@thmref@thm:defi:DistRn\endcsname{$\mathbb
{R}$}
Por "búsqueda binaria", me di cuenta de que se debía a lo siguiente:
\documentclass[a4paper]{report}
\usepackage{amsfonts}
\begin{document}
\expandafter\xdef\csname mw@thmref@thm:defi:DistRn\endcsname{$\mathbb{R}$}
\end{document}
y ese convertirse \xdef
en \gdef
lo hizo desaparecer. Entonces sentí curiosidad y vine aquí para preguntar: ¿qué está pasando aquí y qué significa ese error?
Respuesta1
Hay una razón por la \xdef
que no es un comando compatible con látex: la mayoría de las construcciones tex explotan en un edef. use \protected@edef
y luego use \protect
para cualquier comando frágil.
si vas
\edef\foo{\def\zzz{hello}}
luego intenta expandir (solo) los tokens mientras define \foo
. \def
no es expandible, por lo que simplemente se deja como está, luego intenta expandirse \zzz
y generalmente genera un error de comando indefinido (o si \zzz
ya tiene una definición, obtiene un error arbitrario al expandir esa definición). Esta es la razón del \protect
mecanismo de látex, y usarlo \xdef
directamente simplemente hace un agujero a través de él.
La razón por la que la salida del registro parece un poco extraña es que revela (o intenta revelar) un token interno con un nombre interesante.
\@err@ %
es un token con aproximadamente 65 espacios en su nombre,