De fuente2e.pdf

De fuente2e.pdf

La definición de \@setfontsizese ve así (salida de \makeatletter\meaning\@setfontsize)

\@nomath#1\ifx\protect\@typeset@protect\let\@currentsize#1\fi\fontsize{#2}{#3}\selectfont
  • \@nomathemite una advertencia si llama a esta macro mientras está en modo matemático. Ver fuente2e.
  • \let\@currentsize#1no está en mi fuente2e. El mío (v. 01/01/2017 Nivel de parche 1) tiene\@currsize#1
  • \fontsize{fontsize}{baselineskip}

Revelador \@typeset@protect(salida de \makeatletter\meaning\@typeset@protect) rendimientos \relax.

De fuente2e.pdf

Para garantizar que \@setfontsize siga siendo sólido, omitimos esta asignación en momentos en los que \protect difiere de \@typeset@protect.

  • ¿Cuándo son esos tiempos?
  • ¿Cuándo se establece esto en algo distinto \relaxy con qué propósito?
  • "sigue siendo robusto" es una frase interesante por cierto

Respuesta1

\documentclass{article}

\begin{document}

\typeout{\large abc}

\end{document}

Produce un registro de

\relax \fontsize {12}{14}\selectfont abc

lo cual no es particularmente interesante, pero es un código equivalente \largey en aplicaciones reales donde se escribe auxo tocse archiva, funciona según lo previsto cuando se vuelve a leer.

Si modificamos la definición para eliminar la \ifx\protect\@typeset@protectprueba, el efecto es bastante dramático:

\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}

produce

! 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!

Básicamente, la prueba garantiza que los comandos de tamaño de fuente sean robustos en lugar de frágiles.

información relacionada