Longtable Overfull \vbox 页面未中断

Longtable Overfull \vbox 页面未中断

我认为这是很常见的,但无论我怎么搜索,我都找不到其他人问这个问题。

我发现 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}

相关内容