Espaço vertical mais amplo com algumas tabelas (aquelas que causam \hboxes muito cheias?)

Espaço vertical mais amplo com algumas tabelas (aquelas que causam \hboxes muito cheias?)

Com o seguinte código:

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

Eu recebo:

insira a descrição da imagem aqui

Os exemplos me fazem suspeitar que o maior espaço vertical, que é o que me preocupa, se deve ao excesso \hboxgerado pelas tabelas com maior espaço vertical (que fica entre o texto acima da tabela e a tabela). Por que isso acontece? Minha suspeita está certa?

Responder1

O espaço é obviamente causado pela mesa cheia demais e pode ser proveitoso entender o motivo. O que você vê como um excesso de espaço vertical é uma linha vazia.

Quando você faz \\dentro centervocê está fechando um parágrafo, então o efeito é reproduzível apenas

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

O \tracingparagraph=1TeX reportará no .logarquivo seus cálculos, que são

@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

A primeira passagem pelo parágrafo, que consiste apenas na caixa representada por, |obviamente não é bem-sucedida. O []bit representa a caixa de recuo (que tem 0pt de largura).

A segunda passagem mostra uma quebra viável no início do parágrafo ( @@0, sempre presente, porque um novo parágrafo começa em uma nova linha) e depois uma penalidade (que é inserida pelo \itemcomando inserido implicitamente por \begin{center}). Esta penalidade fornece um ponto de quebra de linha, que é então usado porque permite que uma linha não muito cheia seja composta. No entanto, a regra excessivamente longa faz com que o TeX jogue a toalha.

Uma situação muito diferente é quando just \centeringé usado:

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

que relata

@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

Aqui nenhuma penalidade é adicionada ao parágrafo, então o único ponto de interrupção viável está no final. Nenhum “espaço vertical” (na verdade, uma linha vazia) é adicionado.

No entanto, para começar, você não deveria escrever linhas muito completas, então a discussão é apenas acadêmica.

Responder2

Presumo que o problema realmente decorra do centermeio ambiente, que se baseia trivlistem uma abertura \item. Quando a primeira “letra” do item é muito larga para caber na linha, o TeX insere uma quebra de linha. Solução sugerida:

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

Então use senterem vez de center. Altere \medskips para algo maior ou menor, se desejar.

informação relacionada