调整 tabularx 环境之间的垂直间距

调整 tabularx 环境之间的垂直间距

在下面的代码中,第一页的结果如下(使用 进行编译时pdflatex

第 1 页结果

第一页上的 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来实现您的要求。


脚注

  1. \vbox我这样说的意思是,在构成页体的最外层进行粘合。

相关内容