我认为这是很常见的,但无论我怎么搜索,我都找不到其他人问这个问题。
我发现 longtable 包将最后一行与表的其余部分保存在一起,而不是插入分页符,这取决于表在页面中允许开始的位置。
在此 MWE 中,它将“最后一步”行与表的其余部分保留在一起,从而导致
\output 处于活动状态时,发生 \vbox 过满(8.2999pt 太高)
\documentclass[12pt,letterpaper,notitlepage,oneside]{article}
\usepackage{array}
\usepackage{longtable}
\begin{document}
\rule{2pt}{457pt}%Takes up enough space for this problem to come up
\begin{longtable}{| m{5cm} |}
\hline\endfirsthead
\hline\endhead
\hline\endfoot
\hline\endlastfoot
step 1\\
step 2\\
step 3\\
step 4\\
step 5\\
final step\\
\end{longtable}
\end{document}
长表前的 \rule 只是一个占位符,表示在长表前占用足够空间以致发生问题的内容(文本、其他表格等)。它只是长表前一小块“最佳位置”空间,可能导致问题。
如果有人能推荐一种可以自动防止这种情况发生的方法,我将不胜感激。我知道我可以在“步骤 5”行的末尾手动输入 \pagebreak 命令,但使用 longtable 包的部分目的是避免必须手动拆分我的表格。
答案1
您可能会认为在长桌前添加一些胶水就可以解决这个问题,但这并不奏效。
不确定为什么这会分成两条线而不是一条,但这可能与寡妇或孤儿有关。
\documentclass[12pt,letterpaper,notitlepage,oneside]{article}
\usepackage{array}
\usepackage{longtable}
\usepackage{showframe}
\begin{document}
\rule{2pt}{457pt}%with \hline, no captions
\normalbaselineskip=\baselineskip
\begin{longtable}{| m{5cm} |}
\hline\endfirsthead
\hline\endhead
\hline\endfoot
\hline\endlastfoot
\global\advance\baselineskip by 0pt plus 1fil
step 1\\
step 2\\
step 3\\
step 4\\
step 5\\
final step\\
\end{longtable}
\baselineskip=\normalbaselineskip% restore global value
\end{document}
此版本采用\arraystretch
(反复试验)的方式进行。
\documentclass[12pt,letterpaper,notitlepage,oneside]{article}
\usepackage{array}
\usepackage{longtable}
\usepackage{showframe}
\begin{document}
\rule{2pt}{457pt}%with \hline, no captions
\def\arraystretch{1.1}
\begin{longtable}{| m{5cm} |}
\hline\endfirsthead
\hline\endhead
\hline\endfoot
\hline\endlastfoot
step 1\\
step 2\\
step 3\\
step 4\\
step 5\\
final step\\
\end{longtable}
\end{document}