Longtable:变量或开关确定行是当前页的第一行还是最后一行

Longtable:变量或开关确定行是当前页的第一行还是最后一行

我目前正在努力解决 longtable 包和水平线问题,它们应该在视觉上分隔行。问题是我不想在每个特定页面的最后一行显示底线,在每个后续页面的第一行显示顶线。我的问题是,是否有任何变量或 longtable 代码开关,我可以用来确定(在我的rowend命令中)这是否为真,然后抑制执行hdashline?我知道这个变量,\LT@rows但到目前为止我尝试过的方法都没有给我任何结果。

梅威瑟:

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{longtable}
\usepackage{array}
\usepackage{arydshln}

\newcommand{\rowend}{%
  \tabularnewline%
  % Determine here if it is the last row of the current page or first row of next page
  % If it is the last row of the current page, don't make a bottom dashed line.
  % If it is the first row of a succeeding page, don't make a top row (although I have no idea why that line is actually drawn ...
  \hdashline%
}

\begin{document}

\begin{longtable}{|l|r|c|p{2cm}|}
\caption{A simple longtable example}\\
\hline
\textbf{First entry} & \textbf{Second entry} & \textbf{Third entry} & \textbf{Fourth entry} \\
\hline
\endfirsthead

\multicolumn{4}{c}%
{\tablename\ \thetable\ -- \textit{Continued from previous page}} \\
\hline
\textbf{First entry} & \textbf{Second entry} & \textbf{Third entry} & \textbf{Fourth entry} \\
\hline
\endhead

\hline \multicolumn{4}{r}{\textit{Continued on next page}} \\
\endfoot
\hline
\endlastfoot

1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend
1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend 1 & 2 & 3 & 4 \rowend

\end{longtable}

\end{document}

答案1

没有这样的开关(也没有直接提供开关的方法),longtable 的主要思想是使用标准 TeX 异步输出例程进行分页。这意味着,与普通文本页面一样,宏层实际上并不知道任何文本位最终会落在哪个页面上。

可以使用两遍系统\pageref(或\pdfsavepos,或诸如 zref 之类的包装器)来检测一行是否与前一行位于不同的页面上,并且在这种情况下省略规则,或者(也许)您可以调整规则以具有特殊的深度(例如 1sp)并检测并在输出例程中将其删除。

supertabular另一种方法是使用longtable表格宏中的“手动”分页,测量高度,然后停止表格,强制分页并在内部开始新的分页。在这样的系统中,更容易“知道”您是页面的最后一行。

相关内容