使用以下程式碼:
\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
.如果需要,可將 s變更\medskip
為更大或更小的值。