\fontsize{}{} 內部如何運作?

\fontsize{}{} 內部如何運作?

我發現這個問題\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   }
  1. \@defaultunits如果只出現一個數字,則負責新增pt至參數,將該值儲存在\@tempdimb(對於大小參數)或\@tempskipa(對於基線跳過參數)

  2. \f@size\f@baselineskip設定為兩個參數中以點為單位的值(無單位)\fontsize

  3. \f@linespread從第一個參數開始設置,即從\baselinestretch
  4. 定義一個臨時巨集用於更新值,該巨集將在下一個\selectfont命令時執行;巨集 \size@update will then redefine itself to be\relax`

請注意,\size@update還將包含 的重新定義\strutbox,因此 a\strut將始終適合當前字體大小。

您可以調用\fontsize{3cm}{4cm}\fontsize{15}{18}或 任何帶有或不帶有單位的混合物;無單位被隱含地假定為以點為單位。

相關內容