Aus source2e.pdf

Aus source2e.pdf

Die Definition von \@setfontsizesieht so aus (Ausgabe von \makeatletter\meaning\@setfontsize)

\@nomath#1\ifx\protect\@typeset@protect\let\@currentsize#1\fi\fontsize{#2}{#3}\selectfont
  • \@nomathgibt eine Warnung aus, wenn Sie dieses Makro im Mathematikmodus aufrufen. Siehe source2e.
  • \let\@currentsize#1ist 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 \relaxund 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 \largegeschrieben wird , beim Wiedereinlesen wie vorgesehen.auxtoc

Wenn wir die Definition ändern, um den \ifx\protect\@typeset@protectTest 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.

verwandte Informationen