考虑这个例子:
\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}
编译时,长表格的标题在一页上,而表格本身在另一页上:
我该如何避免这种尴尬的局面?
对答案进行评论
\hline
在标题后立即使用时会出现另一个问题:
\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}
即使在使用时\\*
我们也会恢复到初始状态:
看来可以通过取消注释该行来解决问题%\Needspace{5\baselineskip}
\Needspace
然而,对于多行字幕的情况,似乎需要进行一些手动调整。
考虑这个例子:
\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}
结果还是一样:
5
通过将\Needspace{5\baselineskip}
改为可以解决此情况6
。
答案1
您可以在 后直接使用\\*
而不是。摘自手册:\\
\caption
\\*
:与相同,\\
但不允许在行后分页。
longtable
有一些宏来控制标题(参见手册第 3 节)。根据您的用例,查看\endhead
或\endfirsthead
。此代码对我有用:
\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}
答案2
假设您希望至少longtable
显示 3 行,然后才认为分页符是不可接受的,您可以加载needspace
包并发出指令
\Needspace{5\baselineskip}
紧接在 之前\begin{longtable}
。这样,除非页面底部还有至少 5 行文本可用,否则 将从longtable
下一页的顶部开始。
为什么5\baselineskip
?因为 longtable 的标题和标题与正文开头之间的空行占用了另外 2 行。