Longtable -“知道”分页符后是否有第一个非标题行?

Longtable -“知道”分页符后是否有第一个非标题行?

我负责在 LaTeX 中重现的表格有一列子参数,其左侧有一列父参数。由于它是按父参数组织的,因此除非表格中断,否则父参数不会重复。行的高度会有所不同,所以我无法预测页面会在哪里中断。以下是行为应该如何的示例: 理想页面 1

- -分页符 - -

理想页面 2

我已经想出了如何使用包让左列“记住”它应该显示哪个父级collcell。我需要帮助来确定某一行是否是新页面上的第一个非标题行。我的直觉是定义longtable \endfirsthead\endhead命令不同,因此分页符后的标题将设置“newPage”标志,但所有标题都是在设置 longtable 的开头计算的,并且不会在运行中重新计算,正如我在以下代码中发现的那样:

\documentclass{article}
\usepackage{longtable,array}
\begin{document}
\gdef\newPage{0}
\begin{longtable}{| c%
    <{\ifnum\newPage=1%
    (continued)\gdef\newPage{0}%
    \fi
    }%
    | c | }
\hline\multicolumn{2}{|c|}{Header}\\\hline\endfirsthead
\hline\multicolumn{2}{|>{\gdef\newPage{1}} c |}{Header}\\\hline\endhead
%\multicolumn{2}{>{\bfseries} c }{Header}\endhead
A & A1\\\hline
& A2\\\hline
& A3\\\hline\newpage
& A4\\\hline
& A5\\\hline
& A6\\\hline
\end{longtable}
\end{document}

其结果是: 实际第 1 页

- -分页符 - -

实际第 2 页

因为它在开始时计算第二个标题,所以第 1 页得到的是(继续),而不是第 2 页。我知道如果我使用包supertabular而不是,这不会成为问题longtable,但不幸的是,在其他地方我必须使用arydshln与不兼容的包supertabular。我意识到这与非常相似问题 46205, 并这次讨论但我还不太熟悉 LaTeX,无法理解如何操作。由于我的最终目标只是知道何时发生分页,而不一定要动态重新计算页眉,也许还有其他方法?如果没有,也许有人可以详细解释一下我将使用哪些命令?

答案1

您可以在每一行中插入编号标签并比较它们的页面引用。主要问题是在表格开头和新父级开头处获得正确的逻辑:

\documentclass{article}
\usepackage{longtable}
\usepackage{array}
\usepackage[abspage,user]{zref}

\usepackage{etoolbox}
\newbool{startparent}
\newcounter{rowcount}


\makeatletter
\newcommand\checkandsetparent{%
 \refstepcounter{rowcount}\zref@label{longtabel-row-\number\c@rowcount}%
 \ifnum \zref@extractdefault{longtabel-row-\number\c@rowcount}{abspage}{-1}
        = \zref@extractdefault{longtabel-start-\number\c@LT@tables}{abspage}{-1} %same page as start
  \global\boolfalse{startparent}      
 \else       
   \ifnum \zref@extractdefault{longtabel-row-\number\c@rowcount}{abspage}{-1}
        =\zref@extractdefault{longtabel-row-\the\numexpr\c@rowcount-1}{abspage}{-1} %first row
       \global\boolfalse{startparent}
   \else
        \ifbool{startparent}{}{\current@parent\ (continued)}
   \fi
  \fi      }

\newcommand\parent[1]{\global\booltrue{startparent}\gdef\current@parent{#1}#1}
\newcommand\initlongtable{\zref@label{longtable-start-\the\numexpr \c@LT@tables+1}}
\makeatletter

\begin{document}

\begin{longtable}{| c<{\checkandsetparent}    %
    | c | }
\hline\multicolumn{2}{|c|}{Header}\\\hline\endhead
% Init
\initlongtable
\parent{X} & X1 \\
           & x2\\
\parent{A} & A1\\\hline
& A2\\\hline
& A3\\\hline\newpage
& A4\\\hline
& A5\\\hline
& A6\\\hline
\parent{Y} & Y1\\\newpage
            & y2\\\newpage
\parent{Z} & Z1            
\end{longtable}
\end{document}

在此处输入图片描述

相关内容