我正在創建一個報告模板,其中每個人都有一個「評估」部分。每個評估部分由三個組件組成:一個標題和兩個文字區塊(每個都放置在 tcolorbox 內)。評估部分將使用模板引擎動態生成,因此部分的內容和數量事先未知。
為了節省空間,如有必要,我希望每個部分可以分佈在兩頁上。但是,我不希望標題和第一個文字區塊分開。為了解決這個問題,我將它們放在同一個頁面區塊中。現在內容的分佈是正確的,但我想改善每頁的間距。我希望每個頁面上的部分均勻分佈,以便上面、之間和下面的間距都是均勻的(與頂部元素之上和底部元素之下沒有空間的flushbottom不同)。
我可以用來\vspace*{\vfill}
稍微完成這項工作,但是,我想確保如果整個評估部分適合一頁,那麼兩個文字區塊之間沒有額外的空間。我嘗試了間距和標準桿的各種組合來完成這項工作,但我認為我缺乏術語來簡潔地描述我的問題並對其進行研究。
這是一個 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}