\@ifundefiniert tatsächlich Makros?

\@ifundefiniert tatsächlich Makros?

Ist das nur bei mir so oder ist es ein bisschen unlogisch, dass

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

kehrt zurückKapitel. Im Grunde \@ifundefinedwird also tatsächlich das Makro definiert (und es wird gleich \relax)

Antwort1

Es ist nicht unlogisch, es isthistorisch. Sie verglichen mit

\ifdefined\chapter chapter\else no chapter\fi

Aber das ist ein E-Tex-Grundelement, das einige Jahre nach der Definition von LaTeX hinzugefügt wurde \@ifundefined.

Die klassische TeX-Methode zur Definition dieser Definition (für einen CS-Namen, den Sie im Voraus nicht kennen) ist

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

und dastutDefinieren Sie \chapter, dass es sich \relaxim „Kein Kapitel“-Fall befindet (und wie \@ifundefinedes definiert wird).


Beachten Sie, dass in LaTex-Versionen ab 2018 die Definition von \@ifundefinedso geändert wurde, dass der getestete Befehl nicht mehr als „be“ definiert wird, \relaxwenn er zuvor nicht definiert war.

verwandte Informationen