
Это только мне так кажется или это немного нелогично?
\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
Но это примитив e-tex, добавленный через несколько лет после определения LaTeX \@ifundefined
.
Классический способ TeX сделать такое определение (для csname, которое вы заранее не знаете) —
\expandafter\ifx\csname chapter\endcsname\relax no chapter\else chapter\fi
и чтоделаетопределить \chapter
, чтобы быть \relax
в случае отсутствия главы (и как это \@ifundefined
определено).
Обратите внимание, что в версиях LaTex с 2018 года определение \@ifundefined
было изменено таким образом, что теперь оно больше не определяет тестируемую команду как , \relax
если ранее она была неопределена.