我想设置 TeX 文档中字体的精确大小(以磅为单位)。仔细阅读文档后fontspec
,我没有找到很多与设置字体大小相关的信息。所以我求助于谷歌。几篇帖子建议使用\fontsize
与 结合使用\selectfont
,包括:
我的问题有两个:
- 为什么
fontspec
不处理这个? - 和
\fontsize
是\selectfont
从哪里来的?LaTeX 是原语吗?它们是库的一部分吗?
答案1
你问,“它们来自哪里\fontsize
?\selectfont
它们是 LaTeX 原语吗?它们是库的一部分吗?”
这两个宏均由 LaTeX2e 内核定义,或者格式。术语“原始” [命令] 在 TeX 和 LaTeX 圈子中具有特殊含义,因此将其称为“原始”是不明智
\fontsize
的\selectfont
。就像原来的“Plain TeX”一样格式由一组基元(通常但并非普遍称为“Knuth TeX”)和一组基于这些基元构建的宏组成(基元和上述宏均在 TeXbook 中详细解释),LaTeX2e格式由一组基元(目前来自 eTeX,而不是 Knuth TeX)和一组在 LaTeX2e 内核中定义的宏组成。LaTeX 内核可以在文件中找到
latex.ltx
。在当前版本
latex.ltx
(“LaTeX2e <2021-06-01> patch level 1”)中,该宏\fontsize
定义在文件的第 7036 行和 7037 行,如下所示:\DeclareRobustCommand\fontsize[2] {\set@fontsize\baselinestretch{#1}{#2}}
该宏
\set@fontsize
在第 7985 行至第 8002 行定义如下:\def\set@fontsize#1#2#3{% \@defaultunits\@tempdimb#2pt\relax\@nnil \edef\f@size{\strip@pt\@tempdimb}% \@defaultunits\@tempskipa#3pt\relax\@nnil \edef\f@baselineskip{\the\@tempskipa}% \edef\f@linespread{#1}% \let\baselinestretch\f@linespread \def\size@update{% \baselineskip\f@baselineskip\relax \baselineskip\f@linespread\baselineskip \normalbaselineskip\baselineskip \setbox\strutbox\hbox{% \vrule\@height.7\baselineskip \@depth.3\baselineskip \@width\z@}% \let\size@update\relax}% }
而宏则
\selectfont
在第 7954 行至第 7985 行定义如下:\DeclareRobustCommand\selectfont {% \ifx\f@linespread\baselinestretch \else \set@fontsize\baselinestretch\f@size\f@baselineskip \fi \ifx\delayed@f@adjustment\@empty \else \let\f@shape@saved\f@shape \let\f@series@saved\f@series \delayed@f@adjustment \maybe@load@fontshape \ifcsname \f@encoding/\f@family/\f@series/\f@shape \endcsname \else \let\f@shape\f@shape@saved \let\f@series\f@series@saved \let\delayed@merge@font@shape\merge@font@shape \let\delayed@merge@font@series\merge@font@series \delayed@f@adjustment \let\delayed@merge@font@shape\merge@font@shape@without@substitution \let\delayed@merge@font@series\merge@font@series@without@substitution \fi \let\delayed@f@adjustment\@empty \fi \@forced@seriesfalse \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \pickup@font \font@name \UseHook{selectfont}% \size@update \enc@update } \NewHook{selectfont}
正如代码所示,这两个宏都非常复杂,并且依赖大量的辅助宏来完成大部分工作。
您还问:“为什么
fontspec
不处理这个问题?”正如@UlrikeFischer 和@Cicada 已经在评论中指出的那样,没有必要或合理的理由让执行现有的 LaTeX 宏和fontspec
可以完美处理的任务。\fontsize
\selectfont