\xdef の \mathbb で奇妙なエラーが発生する

\xdef の \mathbb で奇妙なエラーが発生する

複雑なコードを開発しているときに、次のような不可解なエラーが発生しました。

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

「バイナリ検索」によって、次のことが原因であることがわかりました。

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

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

\xdefに変わると\gdef消えました。それで私は興味を持ち、ここに来て尋ねました。ここで何が起こっているのですか、そしてそのエラーはどういう意味ですか?

答え1

このコマンドが LaTeX でサポートされていないのには理由があります。\xdefほとんどの TEX 構造は EDEF で機能しなくなります。 脆弱なコマンドにはを使用し\protected@edef、その後 を使用してください。\protect

もしあなたが行くなら

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

次に、トークン (のみ) を定義中に展開しようとしますが\foo、 .\defは展開できないためそのまま残され、展開を試みた\zzz後、通常は undefined コマンド エラーが発生します (または、\zzzすでに定義されている場合は、その定義を展開すると任意のエラーが発生します)。これが LaTeX メカニズムの理由であり\protect\xdef直接使用すると、そのメカニズムに穴が開きます。

ログ出力が少し奇妙に見える理由は、興味深い名前の内部トークンを明らかにしている(または明らかにしようとしている)ためです。

 \@err@                                                                 %

これは名前に65個ほどのスペースがあるトークンです。

関連情報