防止 \longtable 中的 \midrule 之后出现分页符

防止 \longtable 中的 \midrule 之后出现分页符

我试图告诉longtable只在某个特定点发出分页符(通过使用)\\*。将 放在\midrule该点附近的任何位置都会导致在中间规则之后出现分页符,而不是我希望它在的位置。

考虑一下这个MWE:

\documentclass[12pt,a4paper]{article}

\usepackage{longtable,booktabs}

\begin{document}

\begin{longtable}{c}
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\*
Last line on this page \\
bla \\*%\midrule
bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
\end{longtable}

\end{document}

它产生了正确的结果:

在此处输入图片描述

取消注释后出现了我的问题\midrule

在此处输入图片描述

\midrule我尝试通过在其之前和/或之后插入来防止分页符\nopagebreak,但无济于事。

附言:我知道规则之后通常是表格中分页的理想点。但是,我在某些行之前和之后使用规则来在行块之间创建某种分隔符。因此,规则必须位于下一行的顶部,并且分页应该在最后一行之后发生\\* 规则。

答案1

问题并不局限于 booktabs:使用标准时,\hline您也会遇到断点。 longtable 重新定义\hline,以便它实际上插入两行,并在它们之间设置断点。这样,一页底部的一行将在下一页顶部重复。您可以定义一个命令,暂时更改所使用的惩罚\hline和宽度:

\documentclass[12pt,a4paper]{article}

\usepackage{longtable,booktabs}

\makeatletter

\newlength\oriarrayrulewidth  
\newcount\orilowpenalty
\newcommand\nobreakmidrule{%
 \noalign{\global\oriarrayrulewidth\arrayrulewidth\relax
          \global\orilowpenalty\@lowpenalty\relax  
          \global\@lowpenalty=\numexpr-10000\relax%
          \global\arrayrulewidth\lightrulewidth\relax}
 \hline
 \noalign{\global\@lowpenalty=\orilowpenalty\relax%
          \global\arrayrulewidth\oriarrayrulewidth\relax}}

\makeatother

\begin{document}

\begin{longtable}{c}
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\*
Last line on this page \\
bla \\*\nobreakmidrule
bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
\end{longtable}

\end{document}

答案2

最简单的方法是在你想休息的地方强制休息

\documentclass[12pt,a4paper]{article}

\usepackage{longtable,booktabs}

\begin{document}

\begin{longtable}{c}
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\*
bla \\*
Last line on this page \\
bla \\\pagebreak\midrule
bla \\*
bla \\* bla \\* bla \\* bla \\* bla \\* bla \\* bla \\*
\end{longtable}

\end{document}

相关内容