一些表格的垂直空间更宽(导致 \hboxes 过满?)

一些表格的垂直空间更宽(导致 \hboxes 过满?)

使用以下代码:

\documentclass[a4paper]{report}
\usepackage{lipsum}

\begin{document}
a
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Ord & Esplicito (Adam-Bashforth) & Implicito (Adam-Moulton) \\\hline
0 & & $y_{n+1}=y_n+hf_{n+1}$ Eulero implicito \\\hline
1 & $y_{n+1}=y_n+hf_n$, Eulero esplicito & $y_{n+1}=y_n+\frac{h}{2}(f_{n+1}+f_n)$ Greg-Nickolson \\\hline
2 & $y_{n+1}=y_n+\frac{h}{2}(2f_n-f_{n-1})$ & $y_{n+1}=y_n+\frac{h}{12}(5f_{n+1}+8f_n-f_{n-1})$ \\\hline
3 & $y_{n+1}=y_n+\frac{h}{12}(23f_n-16f_{n-1}+5f_{n-2})$ & \\\hline
\end{tabular}
\end{center}
\lipsum[1]
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Ord & Esplicito (Adam-Bashforth) & Implicito (Adam-Moulton) \\\hline
0 & & $y_{n+1}=y_n+hf_{n+1}$ Eulero implicito \\\hline
2 & $y_{n+1}=y_n+\frac{h}{2}(2f_n-f_{n-1})$ & $y_{n+1}=y_n+\frac{h}{12}(5f_{n+1}+8f_n-f_{n-1})$ \\\hline
3 & $y_{n+1}=y_n+\frac{h}{12}(23f_n-16f_{n-1}+5f_{n-2})$ & \\\hline
\end{tabular}
\end{center}
b
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Ord & Esplicito (Adam-Bashforth) & Implicito (Adam-Moulton) \\\hline
0 & & $y_{n+1}=y_n+hf_{n+1}$ Eulero implicito \\\hline
2 & $y_{n+1}=y_n+\frac{h}{2}(2f_n-f_{n-1})$ & $y_{n+1}=y_n+\frac{h}{12}(5f_{n+1}+8f_n-f_{n-1})$ \\\hline
\end{tabular}
\end{center}
c
\end{document}

我得到:

在此处输入图片描述

这些例子让我怀疑更大的垂直空间(这也是困扰我的地方)是由于\hbox表格的垂直空间(表格上方的文本与表格之间的空间)较大而产生的溢出。为什么会发生这种情况?我的怀疑是对的吗?

答案1

这个空格显然是由于表格太满造成的,了解原因可能会有所帮助。您看到的多余的垂直空间实际上是一个空行。

当你\\在里面做的时候center,你正在关闭一个段落,所以效果可以通过以下方式重现:

\documentclass{article}
\begin{document}
a
\begin{center}\tracingparagraphs=1
\vrule height 1pt depth 0pt width 1.2\textwidth % an overlong indivisible object
\end{center}
b
\end{document}

\tracingparagraph=1将使 TeX 在.log文件中报告其计算结果,具体如下

@firstpass
[]
@\penalty via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
@secondpass
[]
@\penalty via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
|
@\par via @@1 b=* p=-10000 d=*
@@2: line 2.3- t=100 -> @@1

第一次遍历段落,仅由 表示的框组成,|显然没有成功。该[]位代表缩进框(宽度为 0pt)。

第二遍显示段落开头有一个可行的换行符(@@0,始终存在,因为新段落从新行开始),然后是一个惩罚(由\item隐式插入的命令插入\begin{center})。此惩罚提供了一个换行符点,然后使用它,因为它允许排版非过满的行。但是,过长规则导致 TeX 认输。

一个非常不同的情况是当\centering使用 just 时:

\documentclass{article}
\begin{document}
a
\begingroup\centering \tracingparagraphs=1
\vrule height 1pt depth 0pt width 1.2\textwidth
\par\endgroup
b
\end{document}

报告

@firstpass
[]\OT1/cmr/m/n/10 a 
@ via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
@secondpass
[]\OT1/cmr/m/n/10 a 
@ via @@0 b=0 p=0 d=100
@@1: line 1.2 t=100 -> @@0
|
@\par via @@1 b=* p=-10000 d=*
@@2: line 2.3- t=100 -> @@1

此处段落中未添加惩罚,因此唯一可行的断点是在末尾。未添加“垂直空间”(实际上是空行)。

但是你一开始就不应该写得太满,所以讨论只是学术性的。

答案2

我猜想问题实际上源于环境center,它基于trivlist以 开头的\item。当项目中的第一个“字母”太宽而无法容纳在一行中时,TeX 会插入换行符。建议的解决方案:

\newenvironment{senter}{\par\centering\medskip}{\par\medskip}

然后使用senter而不是center\medskip如果需要,将 s 改为更大或更小的值。

相关内容