问题
TeX/LaTeX 中是否有办法以某种方式减少由于行距页面目标高度较远而导致的不良影响?
语境
我正在为我的学生创建一个文档类,让他们使用 LaTeX 而不是 MS Word 来自动创建可移植文档。学生们可能对 LaTeX 一点都不熟悉,所以我想在我的 LaTeX 类中自动处理尽可能多的极端情况。
同时,我的机构对我试图涵盖的文档类型在字体、空格、对齐方式等方面有要求。但是,允许整个文档的底部页边距稍微不一致。
具体来说,论文要求使用14pt大小的专用字体,行距为1.5倍,因此,xelatex
用于编写,更重要的是,以行距页面底部的垂直距离为衡量标准的不良率增长速度比普通的TeX/LaTeX文档快得多。
以下 MWE 重现了该问题(pdflatex
也包括):
\documentclass{book}
\renewcommand{\section}[1]{\ifhmode\par\fi\addvspace{0.5em}\textbf{#1}\par
\penalty201\addvspace{0.5em}}
\renewcommand{\subsection}[1]{\ifhmode\par\fi\addvspace{0.5em}\textbf{\textit{#1}}\par\penalty301}
\begin{document}
\parskip=1em\raggedbottom
\tracingonline=1\tracingpages=1
1\par2\par3\par4\par5\par6\par7\par8\par9\par10\par11\par12\par13\par14\par
15\par16\par17\par18\par19\par20\par21\par22
\section{Section 1}\section{Section 2}\subsection{Subsection}
\par23
\end{document}
产生结果(这里为了易读性我人为地裁剪了图像并减少了页边距):
页面追踪结果(页面之间的部分):
% t=472.0 g=550.0 b=10000 p=0 c=100000#
% t=499.0 g=550.0 b=10000 p=201 c=100000#
% t=526.0 g=550.0 b=10000 p=201 c=100000#
% t=553.0 g=550.0 b=* p=301 c=*
[1]
%% goal height=550.0, max depth=5.0
% t=10.0 g=550.0 b=10000 p=301 c=100000#
% t=32.0 g=550.0 b=10000 p=0 c=100000#
在这个例子中,我希望第 2 节与小节位于同一页面上,并且我希望小节与第“23”段位于同一页面上,以尊重周围的处罚。
我知道我可以在章节标题后指定无限惩罚\penalty 10000
,但这会引入另一个问题。在我看来,人们通常首先定义一个内容结构,放置空的章节/节/小节等,然后填写适当的内容。使用无限惩罚,所有这些章节将位于同一页面上,并放置在页面边界之外。这就是这样\@startsection
做的。
也就是说,我希望在 MWE 中的第 1 节和第 2 节之间可以有一个分页符,尽管会受到惩罚。
我能找到的唯一实现这些目标的方法是尝试\parskip
拉伸(实际示例中为 5em)和收缩,虽然这似乎不是一个可靠的解决方案,但它可能会违反机构的要求,而且我听说这在排版中通常是不受欢迎的。因此,我宁愿让底部边距可拉伸,但不会将坏度设为无限大,以尊重惩罚,我的问题是关于在 LaTeX 类中这样做的可能性。
我也尝试过使用\raggedbottom
和\def\@textbottom{...}
,但它们不会以任何方式影响分页符的劣化/成本。我比较了使用该diff-pdf
工具生成的 PDF,放置这些宏根本没有任何区别。