控制长表分页符

控制长表分页符

是否可以指定 longtable 中首选的分页符的位置?我正在尝试创建一个包含三种行类型的 longtable:

  1. 行后面永远不应有分页符
  2. 必要时,可以分页
  3. 标记首选分页符位置的行

我知道这\\*会让我得到类型 1 的行,但我不知道如何完成另外两种。

此外,虽然通常每两三行就会有一行 2 或 3 型字体,但我仍然希望通过在每行后引入一些可拉伸的空间来避免在页面底部出现大块的空白:

  1. 0pt 加 1pt
  2. 0pt 加 1pt
  3. 12pt 加 6pt

我知道我可以用它\\[12pt]来在特定的行后引入固定量的距离,但将其更改为可拉伸空间会引发错误。

我以前能够通过重新定义\item\par和在列表环境中执行类似操作\\,但现在需要 longtable 的页眉和页脚功能。是否可以在 longtable 环境上\\\tabularnewline内部定义一些变体来实现这两个目标?

MWE(实际上并没有做太多事情,但它可以给你一些可以玩的东西):

\documentclass[12pt,a5paper]{article}

\usepackage{longtable}

\newcounter{bla}
\newcommand\bla{\stepcounter{bla}row\thebla}

\setlength{\baselineskip}{12pt plus 1pt}

\begin{document}

\begin{longtable}{c}
\bla \\* \bla type 2 \\ \bla \\* \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\[12pt]
\end{longtable}

\end{document}

答案1

让我们看看。

  1. 行后面永远不应有分页符
  2. 必要时,可以分页
  3. 标记首选分页符位置的行

你已经注意到,第 1 项可以用 来完成\\*。但是,如果后面跟着 ,则存在一个错误,导致此操作不起作用\cline。有一个针对此问题的补丁(请参阅使用 cline 和 nopagebreak 的 longtable 多行问题)。

数字 2 是正常的行结尾\\

\noalign{\penalty-5000}可以通过在 后添加 来实现数字 3。\\可以更改 5000 以获得更多或更少的分页符偏好。这仅在页面具有足够的可伸缩性时才有效。

您可以使用 在行之间添加可伸缩空间\noalign{\vskip 12pt plus 6pt},但垂直线将会被断开。

答案2

在此处输入图片描述

为了使有限量的 stretech 在行之间产生任何影响,您需要修改 longtable 以不在页面底部添加无限拉伸(例如使用\flushbottom而不是\raggedbottom包没有用于该目的的接口,但只是删除\vss它出现的位置会产生

在此处输入图片描述

\documentclass[12pt,a5paper]{article}

\usepackage{longtable}

\newcounter{bla}
\newcommand\bla{\stepcounter{bla}row\thebla}

\setlength{\baselineskip}{12pt plus 1pt}

\makeatletter
\def\LT@output{%
  \ifnum\outputpenalty <-\@Mi
    \ifnum\outputpenalty > -\LT@end@pen
      \LT@err{floats and marginpars not allowed in a longtable}\@ehc
    \else
      \setbox\z@\vbox{\unvbox\@cclv}%
      \ifdim \ht\LT@lastfoot>\ht\LT@foot
        \dimen@\pagegoal
        \advance\dimen@-\ht\LT@lastfoot
        \ifdim\dimen@<\ht\z@
          \setbox\@cclv\vbox to \textheight{\unvbox\z@\copy\LT@foot}%
          \@makecol
          \@outputpage
          \setbox\z@\vbox{\box\LT@head}%
        \fi
      \fi
      \global\@colroom\@colht
      \global\vsize\@colht
      \vbox to \textheight
        {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
    \fi
  \else
    \setbox\@cclv\vbox to \textheight{\unvbox\@cclv\copy\LT@foot}%
    \@makecol
    \@outputpage
      \global\vsize\@colroom
    \copy\LT@head\nobreak
  \fi}

\begin{document}


\begin{longtable}{c}
\bla \\* \bla type 2 \\ \bla \\* \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 1fill minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\bla \\* \bla type 2 \\ \bla \\* \bla type 3\\\noalign{\vspace{10pt plus 5pt minus 2pt}}
\end{longtable}


\end{document}

相关内容