标题末尾规则下方的垂直间距与表格第 1 页上的我预期的一样,但在第 2、3 页等上,我获得了更多的垂直空间。
有办法解决这个问题吗?
\documentclass[a4paper]{memoir}
\usepackage{longtable}
\usepackage{lipsum}
\ChangeLipsumPar{} % Don't want \par at the end of each \parbox in the \longtable
\setlipsumdefault{2} % short enough to get 2 table rows per page
\begin{document}
\begin{longtable}{p{150pt}p{150pt}}
Heading & Heading \\ \midrule
\endhead
\lipsum & \lipsum \\ \midrule
\lipsum & \lipsum \\ \midrule
\lipsum & \lipsum \\ \midrule % Extra space above this row
\lipsum & \lipsum \\ \midrule
\end{longtable}
\end{document}
EIDT:根据评论,这解决了我的具体问题:
\documentclass[a4paper]{memoir}
\usepackage{longtable}
\usepackage{lipsum}
\ChangeLipsumPar{} % Don't want \par at the end of each \parbox in the \longtable
\setlipsumdefault{2} % short enought to get 2 table rows per page
\newdimen\savebelowrulesep
\savebelowrulesep=\belowrulesep
\begin{document}
\begin{longtable}{p{150pt}p{150pt}}
\global\belowrulesep=0pt % Kill the space below \midrule in the header
Heading & Heading \\
\midrule
\endhead
\noalign{\global\belowrulesep=\savebelowrulesep % Restore \midrule ...
\vskip\belowrulesep} % ... and tweak the spacing on the first page
\lipsum & \lipsum \\ \midrule
\lipsum & \lipsum \\ \midrule
\lipsum & \lipsum \\ \midrule % Extra space above this row
\lipsum & \lipsum \\ \midrule
\end{longtable}
\end{document}
答案1
该空间来自于booktabs
标题中的规则,其中包括垂直空间。
\hline
您可以在该位置使用标准,或者\belowrulesep=0pt
按照更新后的问题中的说明进行设置。
答案2
在您的第一个 MWE 中,将行替换为
Heading & Heading \\ \midrule
通过以下一个
Heading & Heading \\ \specialrule{\lightrulewidth}{\aboverulesep}{0pt}
解释
最简单的解决办法是消除标题中a\midrule
和 the 处的断行造成的“双倍空格”,如下:\midrule
David Carlisle 在评论中指出。
我特别不喜欢所提出的解决方案,因此我使用\specialrule
了booktabs
包来模拟一个\midrule
但没有\belowrulesep
下面的。然后,我\midrule
按照这个规则交换了标题的(因此您只需更改一行而不是几十行)。
\lightrulewidth
我认为这个解决方案更好,因为您可以通过替换其他内容来控制规则宽度\heavyrulewidth
,1em
等等......
例外情况 - 使用\pagebreak
只要您不在\pagebreak
某个时候手动拆分长表(使用),这种方法就会有效,因为这会导致下一页的第一行接触页眉。
如果需要,您可以通过手动添加来“恢复”丢失的空间\addlinespace[<width>]
。
简而言之,\pagebreak
您不能只使用,而是必须使用以下方法拆分长表:
\pagebreak\addlinespace[\belowrulesep]
答案3
解决方案tabularray
包裹:
\documentclass[a4paper]{memoir}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\usepackage[nopar]{lipsum}
\setlipsumdefault{2} % short enough to get 2 table rows per page
\begin{document}
\begin{longtblr}[
caption = {Table Title},
]{
colspec={p{150pt}p{150pt}},
rowhead = 1,
}
\toprule
Heading & Heading \\
\midrule
\lipsum & \lipsum \\
\midrule
\lipsum & \lipsum \\
\midrule
\lipsum & \lipsum \\
\midrule
\lipsum & \lipsum \\
\bottomrule
\end{longtblr}
\end{document}