Longtable e floats: quebras de tabela erradas em páginas com floats (parte 2)

Longtable e floats: quebras de tabela erradas em páginas com floats (parte 2)

Acho que me deparei com um recurso não documentado relacionado à quebra de página em arquivos longtable.

O seguinte MWE produz (pelo menos na minha configuração do TeXlive 2014) um documento no qual os últimos parágrafos ultrapassam a parte inferior da página.

\documentclass{article}

\usepackage[margin=1in]{geometry}
\usepackage{lipsum}
\usepackage{longtable}

\begin{document}
  \begin{figure}
    \sffamily \lipsum[2]
    \caption{A figure}
  \end{figure}
  \lipsum[1-2]

 \begin{longtable}{ll}
    a & b \\
    c & d 
  \end{longtable}

  \begin{figure}
    \sffamily \lipsum[1]
    \caption{A figure}
  \end{figure}

  \lipsum[1-4]

\end{document}

O resultado é:

insira a descrição da imagem aqui

O problema está, penso eu, relacionado comlongtabu e floats: quebras de tabela erradas em páginas com floats. Observe que estou trabalhando com uma versão corrigida do longtable.sty, conforme sugestões de David Carlisle (patch disponível emhttp://www.latex-project.org/cgi-bin/ltxbugs2html?pr=tools/3512, que, aliás, não entrou no TeXlive 2014, apesar de já existir há mais de 2 anos).

A diferença com a pergunta anterior é que meu float aparecedepoisa longa mesa. Mover o flutuador acima da tabela longa resolve o problema, mas claramente não é uma solução real. Alguém sabe como consertar isso?

Responder1

Não há bugs no longtable: apenas recursos interessantes.

então.. LT ultrapassa a página e TeX reclama:

Overfull \vbox (89.34776pt too high) has occurred while \output is active

Em um mundo ideal, isso não aconteceria, mas se acontecer, você pode ajudar o separador de páginas e encurtá-lo no valor declarado.

\begin{longtable}{ll}
    a & b \\
    c & d 
  \end{longtable}
\makeatletter
\global\advance\@colroom-90pt
\makeatother

Eu acho que é uma crueldade produzir autores de rotina para ter uma tabela de várias páginas com menos de uma página e ter um ponto flutuante antes da tabela e um ponto flutuante depois da tabela, todos na mesma página :-)

Responder2

Não posso comentar porque sou novo, então terei que colocar isso em uma resposta. Encontrei esse problema outro dia porque o pandoc passou a usar longtable para todas as tabelas de látex.

http://johnmacfarlane.net/pandoc/releases.html

"O gravador LaTeX agora usa longtable em vez de ctable. Isso permite que as tabelas sejam divididas nos limites da página."

De qualquer forma, imagino que muito mais pessoas estão se deparando com isso, já que pandoc é o que é usado para gerar tabelas ao usar o RMarkdown para gerar documentos de látex.

Apliquei o patch antigo e ele corrigiu o problema, mas os números de linha estão um pouco diferentes agora:

diff longtable.sty.bak longtable.sty
167c167
<     \advance\vsize-\ht\LT@foot
---
>     \global\advance\vsize-\ht\LT@foot
195a196,200
>   \ifvoid\LT@foot\else
>     \global\advance\vsize\ht\LT@foot
>     \global\advance\@colroom\ht\LT@foot
>     \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@
>   \fi
198d202
<   \pagegoal\vsize
394a399
>         \advance\dimen@\ht\LT@foot
399a405
>             \global\vsize\@colroom
403,406c409
<       \global\@colroom\@colht
<       \global\vsize\@colht
<       \vbox
<         {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
---
>       \unvbox\z@\ifvoid\LT@lastfoot\copy\LT@foot\else\box\LT@lastfoot\fi

informação relacionada