使用以下代码:
\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 改为更大或更小的值。