次のコードを使用します:
\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}
はTeXファイルに計算結果\tracingparagraph=1
をレポートします。.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) を表します。
2 回目のパスでは、段落の先頭に実行可能な改行 (@@0
新しい段落は新しい行で始まるため、 は常に存在する) が表示され、次にペナルティ ( によって\item
暗黙的に挿入される コマンドによって挿入される\begin{center}
) が表示されます。このペナルティによって改行ポイントが提供され、これを使用すると、オーバーフルでない行をタイプセットできるようになります。ただし、長すぎるルールにより、TeX は諦めてしまいます。
just が使用される場合は、状況がまったく異なります\centering
。
\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
項目の最初の「文字」が行に収まらないほど長い場合、TeX は改行を挿入します。提案される解決策:trivlist
\item
\newenvironment{senter}{\par\centering\medskip}{\par\medskip}
次に、senter
の代わりにを使用しますcenter
。\medskip
必要に応じて、 を大きくしたり小さくしたりします。