三个不同的标题:longtable

三个不同的标题:longtable

我的问题是,我的表格长达三页。因此,我想在使用时有三个不同的标题longtable package

类似的问题如何使用表列表中只有一个条目的长表并不能解决我的问题。据我所知,我们可以这样longtable看待这个问题:

\caption{Example of longtable}
\endfirsthead
\caption[]{Continued}
\endhead

但是,如果表格占据三页,那么标题就是这样的:

表 2.1 - longtable 的示例(第 1 页)

表 2.1 – 续(第 2 页)

表 2.1 – 续(第 3 页)

换句话说,我无法为第二页和第三页添加不同的标题。这正是我想要的,也是问题所在。

答案1

longtable表格的表头有两种设置:\endfirsthead\endhead。 的内容\endfirsthead将保存在保存框中\LT@firsthead, 的内容将保存\endhead在 中\LT@head。 如果保存框\LT@firsthead为空,longtable则使用 的内容\LT@head。 页脚将使用相同的程序。 我用同样的方式定义了\endsecondhead

\def\endsecondhead{\LT@end@hd@ft\LT@secondhead}

要使用此命令,我必须定义一个仅在第二页设置的新保存框。

\newbox\LT@secondhead

为了确保仅在第二页使用此框,我必须操纵的输出longtable。因此我使用了一个简单的\ifvoid子句。

\ifvoid\LT@secondhead
   \copy\LT@head\nobreak
\else
   \box\LT@secondhead\nobreak
\fi

\ifvoid测试保存框是否\LT@secondhead为空。如果设置了第二个头,则将通过 打印该框\box。此命令打印该框并清除该框。因此在下一页上,上述测试为真。通过这种方式,您可以确保当没有定义第二个头时将\endhead使用 。

为了允许三个以上的不同标题,您必须定义新的保存框并扩展测试。

\documentclass{article}
\usepackage{forloop,longtable}
\newcounter{count}
\setcounter{count}{1}
\makeatletter
\newbox\LT@secondhead
\def\endsecondhead{\LT@end@hd@ft\LT@secondhead}
\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{\unvbox\z@\copy\LT@foot\vss}%
          \@makecol
          \@outputpage
          \ifvoid\LT@secondhead
           \setbox\z@\vbox{\box\LT@head}%
          \else
           \setbox\z@\vbox{\box\LT@secondhead}%
          \fi
        \fi
      \fi
      \global\@colroom\@colht
      \global\vsize\@colht
      \vbox
        {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
    \fi
  \else
    \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
    \@makecol
    \@outputpage
      \global\vsize\@colroom
      \ifvoid\LT@secondhead
         \copy\LT@head\nobreak
      \else
         \box\LT@secondhead\nobreak
      \fi
  \fi}
\makeatother


\begin{document}
\listoftables
\section{section}
\begin{longtable}{c}
\caption{foo}\\\stepcounter{table}\endfirsthead
\caption{foo bar}\\\stepcounter{table}\endsecondhead
\caption{bar}\\\endhead
\whiledo{\value{count} < 100}{\stepcounter{count}
   \arabic{count} \\}
\end{longtable}
\end{document}

相关内容