以下是 MWE:
\documentclass{book}
\usepackage{geometry}
\geometry{paperwidth=127mm,paperheight=203mm,totalwidth=92mm,totalheight=165mm}
\usepackage{lipsum}
\linespread{1.2}
\begin{document}
\vspace*{5cm}
\lipsum[1][1-8]
\lipsum[1][1-8]
\lipsum[1][1-12]
\lipsum[1][1-9]
\lipsum[1][1-10]
\lipsum[1][1-10]
\lipsum[1][1-12]
\lipsum[1][1-12]
\lipsum[1][1-4]
\end{document}
我的观点是,第 2 页的段落之间的垂直空间比第 1 页或第 3 页的段落之间的垂直空间大得多。如果我并排查看第 2 页和第 3 页,我认为这种差异很烦人。
但是,很明显可以通过将第 3 页的第一行移动到第 2 页的末尾来解决这个问题,而不会产生孤行或寡行,也不会超出第 2 页的可用高度。为什么 TeX 不这样做呢?
答案1
如果你插入,\tracingpages=1
你可以在日志文件中看到:
%% goal height=469.47046, max depth=5.0
% t=10.0 g=469.47046 b=10000 p=0 c=100000#
% t=24.39996 g=469.47046 b=10000 p=150 c=100000#
% t=38.79993 g=469.47046 b=10000 p=0 c=100000#
% t=53.19989 plus 1.0 g=469.47046 b=10000 p=150 c=100000#
% t=67.59985 plus 1.0 g=469.47046 b=10000 p=0 c=100000#
% t=81.99982 plus 1.0 g=469.47046 b=10000 p=0 c=100000#
% t=96.39978 plus 1.0 g=469.47046 b=10000 p=0 c=100000#
% t=110.79974 plus 1.0 g=469.47046 b=10000 p=100 c=100000#
% t=125.1997 plus 1.0 g=469.47046 b=10000 p=0 c=100000#
% t=139.59967 plus 1.0 g=469.47046 b=10000 p=150 c=100000#
% t=153.99963 plus 1.0 g=469.47046 b=10000 p=0 c=100000#
% t=168.3996 plus 2.0 g=469.47046 b=10000 p=150 c=100000#
% t=182.79956 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=197.19952 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=211.59949 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=225.99945 plus 2.0 g=469.47046 b=10000 p=100 c=100000#
% t=240.39941 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=254.79938 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=269.19934 plus 2.0 g=469.47046 b=10000 p=150 c=100000#
% t=283.5993 plus 2.0 g=469.47046 b=10000 p=0 c=100000#
% t=297.99927 plus 3.0 g=469.47046 b=10000 p=150 c=100000#
% t=312.39923 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=326.7992 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=341.19916 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=355.59912 plus 3.0 g=469.47046 b=10000 p=100 c=100000#
% t=369.99908 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=384.39905 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=398.79901 plus 3.0 g=469.47046 b=10000 p=150 c=100000#
% t=413.19897 plus 3.0 g=469.47046 b=10000 p=0 c=100000#
% t=427.59894 plus 4.0 g=469.47046 b=10000 p=150 c=100000#
% t=441.9989 plus 4.0 g=469.47046 b=10000 p=0 c=100000#
% t=456.39886 plus 4.0 g=469.47046 b=3482 p=0 c=3482#
% t=470.79883 plus 4.0 g=469.47046 b=* p=0 c=*
Underfull \vbox (badness 3482) has occurred while \output is active []
[2]
此记录显示了页面每行之后的内部参数。t
表示每行末尾累积到页面的总材料大小。您可以看到,第一行的大小为 10pt(从页面顶部到基线),第一行和第二行的大小为 24.399,等等。第四行是新段落的第一行。值为\parskip
0pt 加 1pt 的行插入在此行之前,因此我们可以看到,t
现在包括“加 1 pt”的可拉伸性。
参数g
(goal) 表示目标,即要填充的页面大小。参数c
表示成本,即如果选择该点作为分页点,则成本类似于惩罚。您可以看到,该值c
始终为 100000,这意味着。最大成本。如果分页点在这里,则会警告 vbox 未满。在倒数第二行,该c
值为 3482,这意味着有更合理的分页点。最后一行报告c=*
,这意味着t
大于,g
并且这里是过满。现在,TeX 选择最小值c
,这里是真正的分页符。您可以看到,g
负值t
几乎是一行高。这个空间必须在允许“正 1pt”伸缩性的段落之间划分。但是,由于四个段落的开头都在这里,因此我们在此页面上只积累了“正 4pt”。页面必须使用t
负值进行拉伸g
,并且仅使用“正 4pt”伸缩性,这将导致未满 vbox 警告。
您的问题是,您的尺寸\vsize
仅比理想尺寸小 1 pt,而我们的成绩单中报告的最后一行不会导致页面超满。
答案2
我在 Mittelbach/Goossens 的书中发现了一些东西(我承认这本书在我的书架上,但很少看)。我不确定这是否是“最佳”方法,但它似乎解决了我的问题。在文档开头使用此方法:
\newcounter{tempc} \newcounter{tempcc}
\setlength\textheight{165mm-\topskip}
\setcounter{tempc}{\textheight}
\setcounter{tempcc}{\baselineskip}
\setcounter{tempc}{\value{tempc}/\value{tempcc}}
\setlength\textheight{\baselineskip*\value{tempc}+\topskip}
您还需要使用该calc
包才能使其工作。
编辑:正如大卫·卡莱尔所建议的,heightrounded
该geometry
方案提供了类似的解决方案。