Die Definition von \@setfontsize
sieht so aus (Ausgabe von \makeatletter\meaning\@setfontsize
)
\@nomath#1\ifx\protect\@typeset@protect\let\@currentsize#1\fi\fontsize{#2}{#3}\selectfont
\@nomath
gibt eine Warnung aus, wenn Sie dieses Makro im Mathematikmodus aufrufen. Siehe source2e.\let\@currentsize#1
ist nicht in meiner Quelle2e. Meine (v. 2017/01/01 Patch Level 1) hat\@currsize#1
\fontsize{fontsize}{baselineskip}
Die Offenlegung \@typeset@protect
(der Ausgabe von \makeatletter\meaning\@typeset@protect
) ergibt \relax
.
Aus source2e.pdf
Um sicherzustellen, dass \@setfontsize weiterhin robust bleibt, lassen wir diese Zuweisung weg, wenn sich \protect von \@typeset@protect unterscheidet.
- Wann sind diese Zeiten?
- Wann wird hier etwas anderes eingestellt
\relax
und zu welchem Zweck? - "bleibt robust" ist übrigens eine interessante Formulierung
Antwort1
\documentclass{article}
\begin{document}
\typeout{\large abc}
\end{document}
Erzeugt ein Protokoll von
\relax \fontsize {12}{14}\selectfont abc
Das ist zwar nicht besonders interessant, entspricht aber dem Code und funktioniert in realen Anwendungen, in denen es in Dateien \large
geschrieben wird , beim Wiedereinlesen wie vorgesehen.aux
toc
Wenn wir die Definition ändern, um den \ifx\protect\@typeset@protect
Test zu entfernen, sind die Auswirkungen ziemlich dramatisch:
\documentclass{article}
\begin{document}
\makeatletter
\def\@setfontsize#1#2#3{\@nomath#1%
% \ifx\protect\@typeset@protect
\let\@currsize#1%
% \fi
\fontsize{#2}{#3}\selectfont}
\typeout{\large abc}
\end{document}
produziert
! TeX capacity exceeded, sorry [input stack size=5000].
\@nomath ...e \@font@warning {Command \noexpand #1
invalid in math mode}\fi
l.13 \typeout{\large abc}
! ==> Fatal error occurred, no output PDF file produced!
Grundsätzlich stellt der Test sicher, dass die Befehle zur Schriftgröße robust und nicht fehleranfällig sind.