我注意到的第二个参数\fontsize
和第一个参数\linespread
似乎都会改变文本行之间的间距。它们之间有什么区别?我是否应该使用其中一种?
答案1
的参数\linespread
是一个实数(不是长度),而的两个参数\fontsize
都是长度。
\fontsize{<size>}{<baselineskip>}
设置字体<size>
,<baselineskip>
同时\linespread{<factor>}
用作多种的对于\baselineskip
。事实上,后者实际上相当于
\renewcommand{\baselinestretch}{<factor>}
使用哪种字体由您决定。但是,两者都需要选择字体才能激活。有关此特性的更多信息,请参阅 TeX FAQ 条目为啥不起作用\linespread
?
在 LaTeX 内核中,\fontsize
定义\linespread
为
\DeclareRobustCommand\linespread[1]
{\set@fontsize{#1}\f@size\f@baselineskip}
\DeclareRobustCommand\fontsize[2]
{\set@fontsize\baselinestretch{#1}{#2}}
请注意,两者都利用了\set@fontsize{<factor>}{<size>}{<baselineskip>}
。将两者分开的原因是允许您使用修复一个,同时操纵另一个。一旦调用,它就会创建设置为其自身的倍数并将此结果存储在中以供其他用途(除其他外)。调用“使用”这些设置。对于内心狂野的人\set@fontsize
来说,这里是细节(带有一些评论):\size@update
\baselineskip
\baselinestretch
\normalbaselineskip
\selectfont
\def\set@fontsize#1#2#3{%
\@defaultunits\@tempdimb#2pt\relax\@nnil
\edef\f@size{\strip@pt\@tempdimb}% <-- extracts font size
\@defaultunits\@tempskipa#3pt\relax\@nnil
\edef\f@baselineskip{\the\@tempskipa}% <-- extracts baseline skip
\edef\f@linespread{#1}% <-- extracts baseline stretch
\let\baselinestretch\f@linespread% <-- stores baseline stretch
\def\size@update{%
\baselineskip\f@baselineskip\relax% <-- stores baseline skip in \baselineskip
\baselineskip\f@linespread\baselineskip% <-- multiplies \baselineskip by \baselinestretch
\normalbaselineskip\baselineskip% <-- stores \normalbaselineskip
\setbox\strutbox\hbox{%
\vrule\@height.7\baselineskip
\@depth.3\baselineskip
\@width\z@}%
\let\size@update\relax}%
}
所有这些复杂的事情都可以通过setspace
保持一致性。