
在開發一段複雜的程式碼時,我遇到了以下神秘錯誤:
./[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
,然後通常會給出未定義的命令錯誤(或者如果\zzz
已經有定義,則擴展該定義會出現任意錯誤)。這就是乳膠機制的全部原因\protect
,\xdef
直接使用只會將其炸出一個洞。
日誌輸出看起來有點奇怪的原因是它揭示(或試圖揭示)具有有趣名稱的內部令牌
\@err@ %
這是一個名稱中有 65 個左右空格的令牌,