![Longtable 最后一页仅显示表格标题和底线](https://linux22.com/image/342622/Longtable%20%E6%9C%80%E5%90%8E%E4%B8%80%E9%A1%B5%E4%BB%85%E6%98%BE%E7%A4%BA%E8%A1%A8%E6%A0%BC%E6%A0%87%E9%A2%98%E5%92%8C%E5%BA%95%E7%BA%BF.png)
我更新了 MWE 以解决 David 的评论。现在我使用的是 CSV 文件(“未知记录数”)。这会在最后一页上给出相同的“仅标题/底线”(在 Overleaf 中测试)。如何使其始终正常工作(与记录数量无关)?
我对 longtable 有一个问题。longtable 有时会产生一个“空”的最后一个表格页面(只有一个标题和底行,因此没有数据行)。
(致谢)我改变了这篇 tex.stackexchange.com 帖子来演示这个问题。
更一般地说:我如何获得长表行为:“如果剩余记录数少于 x,则跳至下一页,即使当前页面未满”。因此,我可以说在新页面上执行最后的 [2,3,4 或 5](并且总数更高,否则我们将陷入无限循环),以避免在最后一页上得到丑陋的 1 个项目表。
MWE 最后一页截图(Overleaf 生成):
MWE 代码
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{demo.csv}
col
a
b
c
d
e
f
g
h
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
z1
\end{filecontents}
\usepackage{array}
\usepackage{setspace}
\usepackage{datatool}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage[english]{babel}
\usepackage[pangram]{blindtext}
\usepackage{lscape}
\begin{document}
\setstretch{1.03}
\blindtext[5]
\begin{landscape}
\DTLloaddb{dset}{demo.csv}
\begin{longtable}{>{\raggedright}p{7cm}>{\centering}p{7cm}}
\toprule
Header & \\
\midrule
\endhead
\bottomrule
\endfoot
\endlastfoot
\DTLforeach*{dset}{\COL=col}%
{\COL & t\tabularnewline}%
\end{longtable}\end{landscape}
\end{document}
答案1
发布的代码没有显示问题,最后一行有 Jack... 以及最后一页 3 上的标题,但正如 longtable 手册中所述,要将行保持在一起,您可以使用\\*
或(更强烈地)将更多行放入该\endlastfoot
部分。另请注意,\sfamily
不带参数,因此您应该删除{}
表格周围的组。
请注意,规则中更有可能出现最终中断的问题,booktabs
因为根据设计,规则周围有垂直空间,从而longtable
引入了额外的断点。
答案2
DataTool/LongTable 最佳实践就在这里!!
我发现了这个问题。如果您遇到此问题,则需要进行以下更改。背景是原始 MWE 总是\tabularnewline
在每一行之后发出,最后一行也是如此。在新方法中,这会在新行开始之前输出(第一行除外)。
切勿使用(如在 MWE 中):
\DTLforeach*{dset}{\COL=col}%
{\COL & t\tabularnewline}%
但使用:
\DTLforeach*{dset}{\COL=col}%
{\DTLiffirstrow{}{\tabularnewline}%
\COL & t}%