长表与页面顶部之间的垂直空间

长表与页面顶部之间的垂直空间

在环境中longtable,我们制作了一个跨页面边界的表格。如果表格有一个标题(\endhead命令),则longtable效果很好:通常文本页面中第一行的基线和表格中第一行文本的基线是重合的。

带头的长桌

但是,如果表格没有表头,则表格中第一行文本的基线低于通常文本页面第一行的基线。

无头长桌

如何减少页面顶部和无表头的表格之间的空间?

是否可以稍微修改longtable包以便修复文档中的所有表格?

\documentclass{article}

\usepackage[a5paper]{geometry}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{longtable}

\pagestyle{fancy}
\rhead{\thepage}
\lhead{\thepage}

\begin{document}

\lipsum[2]

\begin{longtable}{|p{0.4\textwidth}|p{0.4\textwidth}|}
 \hline
  Header & Header \\
 %\endhead %% Uncomment this line for table with head
 \hline
  \lipsum[2] & \lipsum[2] \\
 \hline
  \lipsum[2] & \lipsum[2] \\
 \hline
\end{longtable}

\end{document}

答案1

您可以使用\firsthline数组包来代替\hline

\documentclass{book}%
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array,longtable}
\usepackage{geometry,tikz}
\usepackage{eso-pic}
\geometry{top=2cm}
\AddToShipoutPictureFG{%
 \tikz[overlay,remember picture] \draw[red] ([yshift=-2cm-\topskip]current page.north west) -- ++(\textwidth,0);}

\begin{document}
some text
\newpage 
\begin{longtable}{l}
\hline
abc
\end{longtable}
\newpage
\begin{longtable}{l}
\firsthline
abc
\end{longtable}

\end{document}

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

答案2

下一个补丁longtable对我有用,假设如果\hline存在于表中,那么它毕竟存在\\

%
% Adjustment of longtable environment
%
\makeatletter
\newskip\ax@LT@topskip
\newif\ifax@LT@hline
% Save original definitions
\let\ax@LT@longtable=\longtable
\let\ax@LT@endlongtable=\endlongtable
\let\ax@LT@output=\LT@output
\let\ax@LT@hline=\LT@hline
% Remember, there was \hline
\def\LT@hline{%
 \noalign{\global\ax@LT@hlinetrue}%
 \ax@LT@hline
}
% Forget about \hline, store initial value of \topskip
\def\longtable{%
 \global\ax@LT@hlinefalse
 \ax@LT@topskip=\topskip
 \ax@LT@longtable
}
% Adjust \topskip, if there was \hline and wasn't \endhead
\def\LT@output{%
 \ifax@LT@hline\ifvoid\LT@head
  \global\topskip=\ax@LT@topskip
  \global\advance\topskip by -\ht\@arstrutbox
 \fi\fi
 \ax@LT@output
}
% Restore \topskip
\def\endlongtable{%
 \ax@LT@endlongtable
 \global\topskip=\ax@LT@topskip
}
\makeatother

相关内容