Я нашел этот вопросКак работает \fontsize{}{}?пока искал понимание \selectfont
, но был разочарован, увидев, что термин «работа» относится к его использованию, а не к его реализации, т. е. к тому, как он на самом деле работает внутри.
Где \fontsize{}{}\selectfont
документировано? Неправильно ли думать, что это должно быть включено в source2e? Если да, то почему?
решение1
Вот код:
2400 \DeclareRobustCommand\fontsize[2]
2401 {\set@fontsize\baselinestretch{#1}{#2}}
2697 \def\set@fontsize#1#2#3{%
2698 \@defaultunits\@tempdimb#2pt\relax\@nnil
2699 \edef\f@size{\strip@pt\@tempdimb}%
2700 \@defaultunits\@tempskipa#3pt\relax\@nnil
2701 \edef\f@baselineskip{\the\@tempskipa}%
2702 \edef\f@linespread{#1}%
2703 \let\baselinestretch\f@linespread
2704 \def\size@update{%
2705 \baselineskip\f@baselineskip\relax
2706 \baselineskip\f@linespread\baselineskip
2707 \normalbaselineskip\baselineskip
2708 \setbox\strutbox\hbox{%
2709 \vrule\@height.7\baselineskip
2710 \@depth.3\baselineskip
2711 \@width\z@}%
2712 \let\size@update\relax}%
2713 }
\@defaultunits
отвечает за добавлениеpt
к аргументу, если появляется только число, сохраняя значение либо в\@tempdimb
(для аргумента размера), либо в\@tempskipa
(для аргумента пропуска базовой линии)\f@size
и\f@baselineskip
устанавливаются на значение в пунктах (без единиц измерения) из двух аргументов\fontsize
\f@linespread
задается из первого аргумента, то есть из\baselinestretch
- Для обновления значений определен временный макрос, который будет выполнен при следующей
\selectfont
команде; макрос \size@updatewill then redefine itself to be
\relax`
Обратите внимание, что \size@update
также будет содержаться переопределение \strutbox
, поэтому \strut
всегда будет соответствовать текущему размеру шрифта.
Вы можете вызвать \fontsize{3cm}{4cm}
или \fontsize{15}{18}
или любую смесь с единицами измерения или без них; без единиц измерения подразумевается, что они выражены в пунктах.