¿\@ifundefinido realmente define macros?

¿\@ifundefinido realmente define macros?

¿Soy solo yo o es un poco ilógico que

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

devolucionescapítulo. Básicamente \@ifundefined, termina definiendo la macro (haciéndola igual a \relax)

Respuesta1

No es ilógico, lo es.histórico. te comparaste con

\ifdefined\chapter chapter\else no chapter\fi

Pero esa es una primitiva de e-tex agregada algunos años después de que se definiera LaTeX \@ifundefined.

La forma clásica de TeX de hacer esa definición (para un nombre cs que no conoce de antemano) es

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

y esohacedefina \chapterestar \relaxen el caso sin capítulo (y así es como \@ifundefinedse define).


Tenga en cuenta que en las versiones de LaTex a partir de 2018, la definición de \@ifundefinedse modificó para que ya no defina el comando probado como \relaxsi no estuviera definido anteriormente.

información relacionada