いくつかのテーブルで垂直方向のスペースが広くなりました (\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}

は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必要に応じて、 を大きくしたり小さくしたりします。

関連情報