Größerer vertikaler Abstand bei einigen Tabellen (die zu überfüllten \hboxes führen?)

Größerer vertikaler Abstand bei einigen Tabellen (die zu überfüllten \hboxes führen?)

Mit folgendem Code:

\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}

Ich bekomme:

Bildbeschreibung hier eingeben

Die Beispiele lassen mich vermuten, dass der größere vertikale Abstand, der mich beunruhigt, auf die Überfüllung zurückzuführen ist, die \hboxdurch die Tabellen mit dem größeren vertikalen Abstand (der sich zwischen dem Text über der Tabelle und der Tabelle selbst befindet) entsteht. Warum passiert das? Ist meine Vermutung richtig?

Antwort1

Der Leerraum wird offensichtlich durch die überfüllte Tabelle verursacht und es kann hilfreich sein, den Grund dafür zu verstehen. Was Sie als zusätzlichen vertikalen Leerraum sehen, ist eine leere Zeile.

Wenn Sie \\dies tun, centerschließen Sie einen Absatz, sodass der Effekt reproduzierbar ist, indem Sie

\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 wird dann seine Berechnungen \tracingparagraph=1in der Datei protokollieren ..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

Der erste Durchgang über den Absatz, der nur aus dem durch dargestellten Feld besteht, |ist offensichtlich nicht erfolgreich. Das []Bit stellt das Einzugsfeld dar (das 0pt breit ist).

Der zweite Durchgang zeigt einen möglichen Zeilenumbruch am Anfang des Absatzes ( @@0, immer vorhanden, da ein neuer Absatz in einer neuen Zeile beginnt) und dann eine Strafe (die durch den \itemvon implizit eingefügten Befehl eingefügt wird \begin{center}). Diese Strafe liefert einen Zeilenumbruchpunkt, der dann verwendet wird, da er den Satz einer nicht überfüllten Zeile ermöglicht. Die Überlängenregel führt jedoch dazu, dass TeX das Handtuch wirft.

Eine völlig andere Situation liegt vor, wenn „just“ \centeringverwendet wird:

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

das berichtet

@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

Hier wird im Absatz kein Punkt hinzugefügt, sodass der einzige mögliche Umbruchpunkt am Ende liegt. Es wird kein „vertikaler Abstand“ (tatsächlich eine leere Zeile) hinzugefügt.

Da Sie jedoch von vornherein keine übermäßig vollen Zeilen erstellen sollten, handelt es sich hierbei um eine rein akademische Diskussion.

Antwort2

Ich vermute, dass das Problem tatsächlich von der Umgebung herrührt , die auf mit einer Öffnung centerbasiert . Wenn der erste „Buchstabe“ im Element zu breit ist, um in die Zeile zu passen, fügt TeX einen Zeilenumbruch ein. Vorgeschlagene Lösung:trivlist\item

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

Verwenden Sie dann senteranstelle von center. Ändern Sie das \medskips bei Bedarf in einen größeren oder kleineren Wert.

verwandte Informationen