Определение \@setfontsize
выглядит так (вывод \makeatletter\meaning\@setfontsize
)
\@nomath#1\ifx\protect\@typeset@protect\let\@currentsize#1\fi\fontsize{#2}{#3}\selectfont
\@nomath
выдает предупреждение, если вы вызываете этот макрос в математическом режиме. См. source2e.\let\@currentsize#1
нет в моем source2e. Мой (v. 2017/01/01 Patch level 1) имеет\@currsize#1
\fontsize{fontsize}{baselineskip}
Выявление \@typeset@protect
(выход \makeatletter\meaning\@typeset@protect
) урожайности \relax
.
Из source2e.pdf
Чтобы гарантировать, что \@setfontsize будет оставаться надежным, мы пропускаем это назначение в тех случаях, когда \protect отличается от \@typeset@protect.
- Когда наступают эти времена?
- Когда это значение отличается от указанного
\relax
и с какой целью? - «продолжает быть крепким» — интересная формулировка, кстати
решение1
\documentclass{article}
\begin{document}
\typeout{\large abc}
\end{document}
Создает журнал
\relax \fontsize {12}{14}\selectfont abc
что не особенно интересно, но это эквивалент кода, \large
и в реальных приложениях, где он записывается в aux
файлы toc
, он работает так, как задумано, при обратном считывании.
Если мы изменим определение, убрав \ifx\protect\@typeset@protect
тест, то эффект будет весьма разительным:
\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}
производит
! 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!
По сути, тест гарантирует, что команды размера шрифта надежны, а не хрупки.