
Beim Entwickeln eines komplexen Codestücks erhielt ich den folgenden kryptischen Fehler:
./[email protected]:5: Undefined control sequence.
\GenericError ...
#4 \errhelp \@err@ ...
l.5 ...w@thmref@thm:defi:DistRn\endcsname{$\mathbb
{R}$}
Durch die „binäre Suche“ wurde mir klar, dass es an folgendem lag:
\documentclass[a4paper]{report}
\usepackage{amsfonts}
\begin{document}
\expandafter\xdef\csname mw@thmref@thm:defi:DistRn\endcsname{$\mathbb{R}$}
\end{document}
und als es sich \xdef
in verwandelte \gdef
, verschwand es. Also wurde ich neugierig und bin hierhergekommen, um zu fragen: Was ist hier los und was bedeutet dieser Fehler?
Antwort1
Es gibt einen Grund, warum \xdef
dies kein unterstützter Befehl in Latex ist. Die meisten Tex-Konstrukte scheitern in einem Edef. Verwenden Sie es \protected@edef
und verwenden Sie es dann \protect
für alle instabilen Befehle.
wenn du gehst
\edef\foo{\def\zzz{hello}}
dann versucht es, (nur) die Tokens zu erweitern, während es definiert \foo
. \def
ist nicht erweiterbar, wird also einfach so belassen, wie es ist, dann versucht es zu erweitern \zzz
und gibt dann normalerweise einen undefinierten Befehlsfehler aus (oder wenn \zzz
bereits eine Definition vorhanden ist, erhalten Sie einen willkürlichen Fehler beim Erweitern dieser Definition). Dies ist der ganze Grund für den Latex- \protect
Mechanismus, und die direkte Verwendung \xdef
reißt einfach ein Loch hinein.
Der Grund, warum die Protokollausgabe etwas seltsam aussieht, liegt darin, dass sie ein internes Token mit dem interessanten Namen enthüllt (oder zu enthüllen versucht).
\@err@ %
das ist ein Token mit etwa 65 Leerzeichen im Namen,