我正在创建一个报告模板,其中为许多人中的每一个人都提供了一个“评估”部分。每个评估部分由三个部分组成:一个标题和两个文本块(每个文本块都放在 tcolorbox 内)。评估部分将使用模板引擎动态生成,因此部分的内容和数量事先是未知的。
为了节省空间,我希望允许每个部分分布在两页上(如果需要)。但是,我不希望标题和第一个文本块分开。为了解决这个问题,我将它们放在同一个页面块中。现在内容的分布是正确的,但我想改善每页的间距。我希望每页上的部分均匀分布,使得上方、中间和下方的间距都是均匀的(与 flushbottom 不同,其中顶部元素上方和底部元素下方没有空间)。
我可以使用\vspace*{\vfill}
来使它工作,但是,我想确保如果整个评估部分适合一页,那么两个文本块之间没有额外的空间。我尝试了各种间距和 par 组合来使其工作,但我认为我缺乏简洁地描述我的问题并对其进行研究的术语。
这是演示内容一般结构的 MWE。我写下了一些评论,并尝试将一些 vfill 命令放在我认为可能有帮助的地方。通常最终每页会放一个半报告。理想情况下,第一个报告上方、第一个报告与第二个报告之间以及第二个报告下方的间距都应相等。
\documentclass{report}
\usepackage[letterpaper,margin=0.5in]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{parskip}
\usepackage{pgffor}
\usepackage{lipsum}
\usepackage{showframe}
%\flushbottom
\newtcolorbox{containingBox}[1][]{%
width=16cm,
arc=0mm,
colframe=blue,
colback=blue,
nobeforeafter,
after skip=15pt,
#1,
}%
\pagestyle{empty}
\begin{document}
\foreach \n in {0,...,5} {
\vspace*{\fill}
% Heading and first text block
\begin{samepage}
{\fontsize{24pt}{1em}\bfseries Header Text}
\begin{center}
\begin{containingBox}
\lipsum[1]
\end{containingBox}
\end{center}
\end{samepage}
% Second section that can break to another page, but
% should stay close if on same page
% This is where I want to put a vfill only if
% this block has gotten separated
%\vspace*{\fill}
\begin{center}
\begin{containingBox}
\lipsum[1-2]
\end{containingBox}
\end{center}
\vspace*{\fill}
}
\end{document}
答案1
\vspace{\fill}
我在这里所做的是在第一个块后添加一个,然后在第二个center
块内添加一个\vspace{-\fill}
。如果它们出现在同一页上,则两个\vspace
s 会取消,但如果分开,第一个块后的剩余正值\vspace
仍会在页面底部保持活动状态。\vspace
下一页顶部的负值没有净效应。
因为center
环境增加了额外的垂直空间,并且 OP 指示如果在同一页面上则将块保持在一起,所以我还在\vspace{-2\topsep}
块之间添加了一个。
\documentclass{report}
\usepackage[letterpaper,margin=0.5in]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{parskip}
\usepackage{pgffor}
\usepackage{lipsum}
\usepackage{showframe}
%\flushbottom
\newtcolorbox{containingBox}[1][]{%
width=16cm,
arc=0mm,
colframe=blue,
colback=blue,
nobeforeafter,
after skip=15pt,
#1,
}%
\pagestyle{empty}
\begin{document}
\foreach \n in {0,...,5} {
\vspace*{\fill}
% Heading and first text block
\begin{samepage}
{\fontsize{24pt}{1em}\bfseries Header Text}
\begin{center}
\begin{containingBox}
\lipsum[1]
\end{containingBox}
\end{center}
\end{samepage}
% Second section that can break to another page, but
% should stay close if on same page
% This is where I want to put a vfill only if
% this block has gotten separated
\vspace{-2\topsep}
\vspace{\fill}
\begin{center}
\vspace{-\fill}
\begin{containingBox}
\lipsum[1-2]
\end{containingBox}
\end{center}
\vspace*{\fill}
}
\end{document}