在环境中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