除了 LaTeX 默认的在段落之间留出额外空间的方法外,实现均匀文本高度的一种技巧是稍微调整行距(大约 0.5pt)。
我尝试使用以下方法实现此目的,
\setlength{\baselineskip}{12pt plus 0.6pt minus 0.3pt}
但我无法实现均匀的文本高度。
我尝试过将这种策略与三种相互独立的设置行距的方法结合使用:使用setspace
和leading
包,以及使用\renewcommand{\baselinestretch}{1.2}
。
下面是一个最小的例子(使用LuaLaTeX)。
\documentclass[openany,12pt]{book}
\usepackage{lipsum}
\usepackage{fontspec}
\clubpenalty=0
\brokenpenalty=0
\interlinepenalty=0
\widowpenalty=3000
\setlength{\parskip}{0pt}
\setlength{\baselineskip}{12pt plus 1pt minus 0.5pt}
\renewcommand{\baselinestretch}{1.2}
\flushbottom
\setmainfont{Times New Roman}
\begin{document}
\section{One}
\lipsum
% More text to get the section starting in the middle of a page
Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio. Sed vehicula hendrerit sem. Duis non odio. Morbi ut dui. Sed accumsan risus eget odio. In hac habitasse platea dictumst. Pellentesque non elit. Fusce sed justo eu urna porta tincidunt. Mauris felis odio, sollicitudin sed, volutpat a, ornare ac, erat. Morbi quis dolor. Donec pellentesque, erat ac sagittis semper, nunc dui lobortis purus, quis congue purus metus ultricies tellus. Proin et quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Praesent sapien turpis, fermentum vel, eleifend faucibus, vehicula eu, lacus.
\section{Two}
\lipsum
\end{document}
答案1
灵活的基线跳过通常不被认为是一个好的选择。另一方面,您已经用 破坏了排版\linespread{1.2}
,所以这无论如何也不会造成太大的损害。
另一方面,你尝试的设置无法工作,让我们看看为什么。必须知道字体参数部分由宏设置
\size@update
定义为
2346 \def\set@fontsize#1#2#3{%
2347 \@defaultunits\@tempdimb#2pt\relax\@nnil
2348 \edef\f@size{\strip@pt\@tempdimb}%
2349 \@defaultunits\@tempskipa#3pt\relax\@nnil
2350 \edef\f@baselineskip{\the\@tempskipa}%
2351 \edef\f@linespread{#1}%
2352 \let\baselinestretch\f@linespread
2353 \def\size@update{%
2354 \baselineskip\f@baselineskip\relax
2355 \baselineskip\f@linespread\baselineskip
2356 \normalbaselineskip\baselineskip
2357 \setbox\strutbox\hbox{%
2358 \vrule\@height.7\baselineskip
2359 \@depth.3\baselineskip
2360 \@width\z@}%
2361 \let\size@update\relax}%
2362 }
并且第 2355 行负责定义胶水的可拉伸性和可收缩性的差异,因为任何赋值,例如
<skip register>=<factor><skip register>
将 强制转换<skip register>
为 a <dimen>
。请参阅在 TeX 中缩放胶水了解更多信息。
对于您的情况来说,实际上不需要缩放胶水;只需添加固定量的可拉伸性和可收缩性即可:
\usepackage{etoolbox}
\makeatletter
\patchcmd\set@fontsize
{\f@linespread\baselineskip}
{\f@linespread\baselineskip plus 0.6\p@ minus 0.3\p@}
{}{}
\makeatother
就能解决问题。
\documentclass[openany,12pt]{book}
\usepackage{fontspec}
\usepackage{etoolbox}
\usepackage{lipsum}
\setlength{\parskip}{0pt}
\renewcommand{\baselinestretch}{1.2}
\makeatletter
\patchcmd\set@fontsize
{\f@linespread\baselineskip}
{\f@linespread\baselineskip plus 0.6\p@ minus 0.3\p@}
{}{}
\makeatother
\flushbottom
\setmainfont{Times New Roman}
\begin{document}
\section{Look: \texttt{\the\baselineskip}}
\texttt{\the\baselineskip}
\lipsum
% More text to get the section starting in the middle of a page
Sed commodo posuere pede. Mauris ut est. Ut quis purus. Sed ac odio. Sed vehicula hendrerit
sem. Duis non odio. Morbi ut dui. Sed accumsan risus eget odio. In hac habitasse platea
dictumst. Pellentesque non elit. Fusce sed justo eu urna porta tincidunt. Mauris felis odio,
sollicitudin sed, volutpat a, ornare ac, erat. Morbi quis dolor. Donec pellentesque, erat ac
sagittis semper, nunc dui lobortis purus, quis congue purus metus ultricies tellus. Proin et
quam. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos. Praesent sapien turpis, fermentum vel, eleifend faucibus, vehicula eu, lacus.
\section{Two}
\lipsum
\end{document}
如您所见,每个字体大小都添加了加号和减号。