
Sou só eu ou é um pouco ilógico isso
\documentclass[a4paper]{article}
\begin{document}
\makeatletter
\@ifundefined{chapter}{}{}
\makeatother
\ifdefined\chapter chapter\else no chapter\fi
\end{document}
retornacapítulo. Então, basicamente \@ifundefined
, acaba definindo a macro (tornando-a igual a \relax
)
Responder1
Não é ilógico, éhistórico. Você comparou com
\ifdefined\chapter chapter\else no chapter\fi
Mas essa é uma primitiva e-tex adicionada alguns anos depois da definição do LaTeX \@ifundefined
.
A maneira clássica do TeX de fazer essa definição (para um csname que você não conhece de antemão) é
\expandafter\ifx\csname chapter\endcsname\relax no chapter\else chapter\fi
e essafazdefina \chapter
para estar \relax
no caso sem capítulo (e é como \@ifundefined
é definido).
Observe que nas versões LaTex de 2018 em diante, a definição de \@ifundefined
foi modificada para que não defina mais o comando testado como sendo \relax
se ele era anteriormente indefinido.