\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

라텍스에서 지원되는 명령이 아닌 이유가 있습니다 \xdef. 대부분의 tex 구성은 edef에서 폭발합니다. 깨지기 쉬운 명령에 사용 \protected@edef하고 사용하십시오 .\protect

당신이 가면

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

그런 다음 정의하는 동안 토큰을 확장하려고 합니다 \foo. \def확장할 수 없으므로 그대로 두면 확장을 시도 \zzz하고 일반적으로 정의되지 않은 명령 오류가 발생합니다(또는 \zzz이미 정의가 있는 경우 해당 정의를 확장하면 임의 오류가 발생합니다). 이것이 라텍스 \protect메커니즘의 전체 이유이며 \xdef직접 사용하면 바로 구멍이 뚫립니다.

로그 출력이 약간 이상하게 보이는 이유는 흥미로운 이름을 가진 내부 토큰을 공개(또는 공개하려고)하기 때문입니다.

 \@err@                                                                 %

이름에 65개 정도의 공백이 있는 토큰입니다.

관련 정보