Более широкое вертикальное пространство с некоторыми таблицами (те, которые вызывают переполнение \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).

Второй проход показывает возможный разрыв в начале абзаца ( @@0, всегда присутствует, потому что новый абзац начинается с новой строки), а затем штраф (который вставляется командой, \itemнеявно вставленной \begin{center}). Этот штраф обеспечивает точку разрыва строки, которая затем используется, потому что позволяет набрать не переполненную строку. Однако правило overlong заставляет 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. Измените \medskips на что-то большее или меньшее, если хотите.

Связанный контент