![防止 \longtable 中的 \midrule 之后出现分页符](https://linux22.com/image/293313/%E9%98%B2%E6%AD%A2%20%5Clongtable%20%E4%B8%AD%E7%9A%84%20%5Cmidrule%20%E4%B9%8B%E5%90%8E%E5%87%BA%E7%8E%B0%E5%88%86%E9%A1%B5%E7%AC%A6.png)
我试图告诉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}