
Considere este exemplo:
\documentclass{report}
\usepackage{lipsum}
\usepackage{longtable}
\begin{document}
\lipsum[1-4]
another paragraph
another paragraph
another paragraph
another paragraph
anoteher paragraph
another paragraph
another paragraph
%anoteher paragraph
%another paragraph
\begin{longtable}{lr}
\caption{long table}\\
A&B\\
c&D
\end{longtable}
\end{document}
Quando compilada, a legenda da tabela longa fica em uma página, enquanto a própria tabela fica em outra página:
Como posso evitar uma situação tão embaraçosa?
Comente as respostas
Um problema adicional é introduzido ao usar \hline
imediatamente após a legenda:
\documentclass{report}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{needspace}
\begin{document}
\lipsum[1-4]
another paragraph
another paragraph
another paragraph
another paragraph
anoteher paragraph
another paragraph
another paragraph
%anoteher paragraph
%another paragraph
%\Needspace{5\baselineskip}
\begin{longtable}{lr}
\caption{some table}\\*
\hline
A&B\\
c&D\\
E&F
\end{longtable}
\end{document}
Mesmo quando usamos, \\*
voltamos ao estado inicial:
Parece que o problema pode ser resolvido descomentando a linha%\Needspace{5\baselineskip}
No entanto, parece que é necessário algum ajuste manual \Needspace
no caso de legendas multilinhas.
Considere este exemplo:
\documentclass{report}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{needspace}
\begin{document}
\lipsum[1-4]
another paragraph
another paragraph
another paragraph
another paragraph
anoteher paragraph
%another paragraph
%another paragraph
%anoteher paragraph
%another paragraph
\Needspace{5\baselineskip}
\begin{longtable}{lr}
\caption{\lipsum[1][1-3]}\\*
\hline
A&B\\
c&D\\
E&F
\end{longtable}
\end{document}
O resultado é novamente o mesmo:
Este caso é corrigido mudando 5
para \Needspace{5\baselineskip}
.6
Responder1
Você pode simplesmente usar \\*
em vez de \\
depois do \caption
. Do manual:
\\*
: O mesmo que,\\
mas não permite uma quebra de página após a linha.
longtable
possui algumas macros para controlar títulos (cf. seção 3 do manual). Dependendo do seu caso de uso, dê uma olhada em \endhead
ou \endfirsthead
. Este código funciona para mim:
\documentclass{report}
\usepackage{lipsum}
\usepackage{longtable}
\begin{document}
\lipsum[1-4]
another paragraph
another paragraph
another paragraph
another paragraph
anoteher paragraph
\begin{longtable}{lr}
\caption{\lipsum[1][1-3]}\\
\hline
\endfirsthead
A&B\\
c&D\\
E&F
\end{longtable}
\end{document}
Responder2
Supondo que você queira que pelo menos 3 linhas apareçam longtable
antes de considerar uma quebra de página inaceitável, você pode carregar o needspace
pacote e emitir a diretiva
\Needspace{5\baselineskip}
imediatamente antes \begin{longtable}
. Dessa forma, a menos que haja pelo menos 5 linhas de texto ainda livres na parte inferior da página, o texto longtable
começará no topo da próxima página.
Por que 5\baselineskip
? Porque a legenda da tabela longa e a linha em branco entre a legenda e o início do corpo do texto ocupam mais 2 linhas.