Seltsamer Fehler mit \mathbb in \xdef

Seltsamer Fehler mit \mathbb in \xdef

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 \xdefin 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 \xdefdies kein unterstützter Befehl in Latex ist. Die meisten Tex-Konstrukte scheitern in einem Edef. Verwenden Sie es \protected@edefund verwenden Sie es dann \protectfü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. \defist nicht erweiterbar, wird also einfach so belassen, wie es ist, dann versucht es zu erweitern \zzzund gibt dann normalerweise einen undefinierten Befehlsfehler aus (oder wenn \zzzbereits eine Definition vorhanden ist, erhalten Sie einen willkürlichen Fehler beim Erweitern dieser Definition). Dies ist der ganze Grund für den Latex- \protectMechanismus, und die direkte Verwendung \xdefreiß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,

verwandte Informationen