for 迴圈創建內容的條件垂直空間分佈

for 迴圈創建內容的條件垂直空間分佈

我正在創建一個報告模板,其中每個人都有一個「評估」部分。每個評估部分由三個組件組成:一個標題和兩個文字區塊(每個都放置在 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}.如果它們出現在同一頁上,則兩個\vspaces 取消,但如果分開,則第一個區塊之後的剩餘正值\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}

相關內容