我负责在 LaTeX 中重现的表格有一列子参数,其左侧有一列父参数。由于它是按父参数组织的,因此除非表格中断,否则父参数不会重复。行的高度会有所不同,所以我无法预测页面会在哪里中断。以下是行为应该如何的示例:
- -分页符 - -
我已经想出了如何使用包让左列“记住”它应该显示哪个父级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 页。我知道如果我使用包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}