在下面的代码中,第一页的结果如下(使用 进行编译时pdflatex
)
第一页上的 tabularx 环境之间有相当多的垂直空间。我认为这是因为页面上没有足够的空间来放置第三段,所以它将其推到第二页,然后第一页上有很多可用的空白,所以算法选择了一种“均匀”间隔页面上元素的方式,导致它们分散。
我有几个问题。
- 以上内容正确吗?
- 我怎样才能控制间距?
- 具体来说,我如何才能以这样的方式操纵间距,使得默认情况下,空白聚集在结尾页面的顶部,而不是分散在整个页面上?
谢谢。
\documentclass[12pt,english,twoside]{article}
\usepackage{lipsum}
\usepackage{tabularx}
\begin{document}
\begin{flushleft}
\begin{tabularx}{\textwidth}{lXr}
1.\hspace{1em} & \lipsum[1] & \hspace{1em}(3) \\
\end{tabularx}
\begin{tabularx}{\textwidth}{lXr}
2.\hspace{1em} & \lipsum[2] & \hspace{1em}(3) \\
\end{tabularx}
\begin{tabularx}{\textwidth}{lXr}
3.\hspace{1em} & \lipsum[1] & \hspace{1em}(3) \\
\end{tabularx}
\end{flushleft}
\end{document}
答案1
如果article
文档类加载了选项twoside
,则该指令\flushbottom
被激活。该指令告诉 LaTeX 确保每页文本的底部边缘都位于底部边距的正上方。这就是您所经历的。
我能想到两种补救措施:
不要指定选项
twoside
。如果你必须设置
twoside
选项,发出序言中的指令\raggedbottom
,取消 的效果\flushbottom
。
答案2
补充一点Mico 的回答(+1):
您的文档已隐式设置\flushbottom
样式 — 原因已由 Mico 解释。这意味着当 TeX 选择分页符时,它将拉伸为页面收集的材料,使其跨越页面主体的整个高度。这样,所有页面通常都具有相同的高度(也就是说,除非在特殊情况下,例如完全没有可拉伸性、页面过满或使用\enlargethispage
)。
在您的例子中,唯一可拉伸的垂直粘连(在主垂直列表部分中的顶层,导致第 1 页)是\parskip
段落之间自动插入的粘连(环境之间的空白行由 TeXtabularx
转换为\par
标记)。您可以使用以下方法验证此断言:
\tracingoutput=1
\showboxdepth=1
\showboxbreadth=\maxdimen
\tracingonline=1
这样,您将在输出中看到以下内容:
Underfull \vbox (badness 10000) has occurred while \output is active
\vbox(548.5+0.0)x390.0, glue set 191.00003
.\write-{}
.\glue(\topskip) 0.0
.\hbox(111.75+105.74998)x390.0 []
.\glue(\parskip) 0.0 plus 1.0
.\glue(\lineskip) 1.0
.\hbox(75.5+69.49998)x390.0 []
.\glue -6.0
Completed box being shipped out [1] % this means page 1 was just output
默认情况下,\parskip
确实是0pt plus 1pt
。上面的输出表明它是唯一顶级胶水1页面主体中( plus 1pt
)。因此,此\parskip
粘连会根据需要进行拉伸,以便页面具有使用布局设置的页面的正常高度。由于它只有 1 个可拉伸点,因此拉伸过多,TeX 正确地报告包含\vbox
页面主体的部分“未满”。
正如 Mico 所说,您可以使用它\raggedbottom
来实现您的要求。
脚注
\vbox
我这样说的意思是,在构成页体的最外层进行粘合。