我目前正在努力解决 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
表格宏中的“手动”分页,测量高度,然后停止表格,强制分页并在内部开始新的分页。在这样的系统中,更容易“知道”您是页面的最后一行。