我正在尝试设计一个包含多个等间距部分的标题页宏。其中一个部分包含一个 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}