longtable 表格与垂直间距问题

longtable 表格与垂直间距问题

我正在尝试设计一个包含多个等间距部分的标题页宏。其中一个部分包含一个 longtable 表。当我包含该表时,一些 \vfill 命令似乎不再扩展以均衡间距。我希望这里有人能看到我在这里没有看到的东西。

这是我的 MWE:

\documentclass{article}

\usepackage{array}
\usepackage{longtable}
\usepackage{calc}

\begin{document}

% A bit less than half the page width
\newlength{\halfwd}
\setlength{\halfwd}{((\textwidth) * \real{0.95} - \columnsep)/2}%

% A longtable that I want as one of the page components
\def\lt{%
  \setlength\extrarowheight{12pt}%
  \begin{longtable}{p{\halfwd}p{\halfwd}}%
    \parbox[t]{\halfwd}{%
    11111111111111111111\\
    11111111111111111111\\
    11111111111111111111}&
    \parbox[t]{\halfwd}{22222222222222222222\\
    22222222222222222222\\
    22222222222222222222}\\

    \parbox[t]{\halfwd}{33333333333333333333\\
    33333333333333333333\\
    33333333333333333333}&
    \parbox[t]{\halfwd}{44444444444444444444\\
    44444444444444444444\\
    44444444444444444444}\\

    \parbox[t]{\halfwd}{55555555555555555555\\
    55555555555555555555\\
    55555555555555555555}&
    \parbox[t]{\halfwd}{66666666666666666666\\
    66666666666666666666\\
    66666666666666666666}\\
  \end{longtable}
}

% I expect each part of the page to be equally spaced and all the parts together
% to fill up the whole page.
  \begin{center}
    \hrule
    Part I
    \vfill
    \hrule
    \vfill
    Part II
    \vfill
    \hrule
    \vfill
    Part III
    {\texttt \lt}
    \vfill
    \hrule
    \vfill
    Part IV
    \vfill
    \hrule
  \end{center}
\end{document}

输出结果如下。第一部分和第二部分被压缩到最小尺寸,而所有部分似乎都应等间距分布。

图片

答案1

您可以通过删除来避免 longtable 限制页面迄今为止的内容,从而将垂直跳跃冻结在其自然宽度 0pt ,\vbox如下所示:

在此处输入图片描述

\documentclass{article}

\usepackage{array}
\usepackage{longtable}
\usepackage{calc}
\makeatletter
\def\LT@output{%
  \ifnum\outputpenalty <-\@Mi
    \ifnum\outputpenalty > -\LT@end@pen
      \LT@err{floats and marginpars not allowed in a longtable}\@ehc
    \else
      \setbox\z@\vbox{\unvbox\@cclv}%
      \ifdim \ht\LT@lastfoot>\ht\LT@foot
        \dimen@\pagegoal
        \advance\dimen@-\ht\LT@lastfoot
        \ifdim\dimen@<\ht\z@
          \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
          \@makecol
          \@outputpage
          \setbox\z@\vbox{\box\LT@head}%
        \fi
      \fi
      \global\@colroom\@colht
      \global\vsize\@colht
%      \vbox
        {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
    \fi
  \else
    \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
    \@makecol
    \@outputpage
      \global\vsize\@colroom
    \copy\LT@head\nobreak
  \fi}

\begin{document}

% A bit less than half the page width
\newlength{\halfwd}
\setlength{\halfwd}{((\textwidth) * \real{0.95} - \columnsep)/2}%

% A longtable that I want as one of the page components
\def\lt{%
  \setlength\extrarowheight{12pt}%
  \begin{longtable}{p{\halfwd}p{\halfwd}}%
    \parbox[t]{\halfwd}{%
    11111111111111111111\\
    11111111111111111111\\
    11111111111111111111}&
    \parbox[t]{\halfwd}{22222222222222222222\\
    22222222222222222222\\
    22222222222222222222}\\

    \parbox[t]{\halfwd}{33333333333333333333\\
    33333333333333333333\\
    33333333333333333333}&
    \parbox[t]{\halfwd}{44444444444444444444\\
    44444444444444444444\\
    44444444444444444444}\\

    \parbox[t]{\halfwd}{55555555555555555555\\
    55555555555555555555\\
    55555555555555555555}&
    \parbox[t]{\halfwd}{66666666666666666666\\
    66666666666666666666\\
    66666666666666666666}\\
  \end{longtable}
}

% I expect each part of the page to be equally spaced and all the parts together
% to fill up the whole page.
  \begin{center}
    \hrule
    Part I
    \vfill
    \hrule
    \vfill
    Part II
    \vfill
    \hrule
    \vfill
    Part III
    {\texttt \lt}
    \vfill
    \hrule
    \vfill
    Part IV
    \vfill
    \hrule
  \end{center}
\end{document}

答案2

我不知道您真正想要的布局是什么。但是,只要添加几行空行、使用 tabular 代替 longtable 以及使用 \ttfamily,就可以得到看起来或多或少合理的布局:

\documentclass{article}

\usepackage{array}
\usepackage{longtable}
\usepackage{calc}

\begin{document}

% A bit less than half the page width
\newlength{\halfwd}
\setlength{\halfwd}{((\textwidth) * \real{0.95} - \columnsep)/2}%

% A longtable that I want as one of the page components
\def\lt{%
  \setlength\extrarowheight{12pt}%
  \begin{tabular}{ll}%
    \parbox[t]{\halfwd}{%
    11111111111111111111\\
    11111111111111111111\\
    11111111111111111111}&
    \parbox[t]{\halfwd}{22222222222222222222\\
    22222222222222222222\\
    22222222222222222222}\\

    \parbox[t]{\halfwd}{33333333333333333333\\
    33333333333333333333\\
    33333333333333333333}&
    \parbox[t]{\halfwd}{44444444444444444444\\
    44444444444444444444\\
    44444444444444444444}\\

    \parbox[t]{\halfwd}{55555555555555555555\\
    55555555555555555555\\
    55555555555555555555}&
    \parbox[t]{\halfwd}{66666666666666666666\\
    66666666666666666666\\
    66666666666666666666}\\
  \end{tabular}}

% I expect each part of the page to be equally spaced and all the parts together
% to fill up the whole page.
  \begin{center}
    \hrule
    \vfill 

    Part I

    \vfill
    \hrule
    \vfill
    Part II

    \vfill
    \hrule
    \vfill
    Part III

    {\ttfamily \lt}

    \vfill
    \hrule
    \vfill
    Part IV

    \vfill
    \hrule
  \end{center}
\end{document}

在此处输入图片描述

相关内容