
それは私だけでしょうか、それとも少し非論理的でしょうか
\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
。
(事前に分からないcsnameに対して)その定義を作成するための古典的なTeXの方法は次のとおりです。
\expandafter\ifx\csname chapter\endcsname\relax no chapter\else chapter\fi
そしてする章がない場合に定義します(定義方法は次のとおり\chapter
です)。\relax
\@ifundefined
2018 年以降の LaTex リリースでは、 の定義が\@ifundefined
変更され、\relax
以前は定義されていなかった場合、テストされたコマンドが として定義されなくなったことに注意してください。