\@ifundefined 其實定義了巨集?

\@ifundefined 其實定義了巨集?

是只有我這樣還是有點不合邏輯

\documentclass[a4paper]{article}
\begin{document}
\makeatletter
\@ifundefined{chapter}{}{}
\makeatother
\ifdefined\chapter chapter\else no chapter\fi
\end{document}

回報章節。所以基本上\@ifundefined實際上最終定義了巨集(使其等於\relax

答案1

這並非不合邏輯歷史的。你與

\ifdefined\chapter chapter\else no chapter\fi

但這是在 LaTeX 定義幾年後加入的 e-tex 原語\@ifundefined

進行該定義的經典 TeX 方法(對於您事先不知道的 csname)是

\expandafter\ifx\csname chapter\endcsname\relax no chapter\else chapter\fi

然後定義\chapter\relax無章節情況(以及如何\@ifundefined定義)。


請注意,在 2018 年以後的 LaTex 版本中, 的定義\@ifundefined已被修改,因此\relax如果之前未定義,則不再定義測試命令。

相關內容