for-loop 생성 콘텐츠의 조건부 수직 공간 분포

for-loop 생성 콘텐츠의 조건부 수직 공간 분포

저는 여러 개인 각각에 대한 "평가" 섹션이 있는 보고서 템플릿을 만들고 있습니다. 각 평가 섹션은 제목과 두 개의 텍스트 블록(각각 tcolorbox 내부에 배치됨)의 세 가지 구성 요소로 구성됩니다. 평가 섹션은 템플릿 엔진을 사용하여 동적으로 생성되므로 섹션의 내용과 수는 미리 알 수 없습니다.

공간을 절약하기 위해 필요한 경우 각 섹션을 두 페이지에 걸쳐 배포할 수 있도록 하고 싶습니다. 그러나 제목과 첫 번째 텍스트 블록이 분리되는 것을 원하지 않습니다. 이를 처리하기 위해 동일한 페이지 블록 내에 배치했습니다. 이제 내용의 분포는 정확하지만 각 페이지의 간격을 개선하고 싶습니다. 위, 사이, 아래의 간격이 모두 균일하도록 각 페이지의 섹션을 균등하게 분배하고 싶습니다(상단 요소 위와 하단 요소 아래에 공간이 없는 플러시바텀과 달리).

이 작업을 어느 정도 수행하는 데 사용할 수 있지만 \vspace*{\vfill}전체 평가 섹션이 한 페이지에 맞는 경우 두 텍스트 블록 사이에 추가 공간이 없는지 확인하고 싶습니다. 나는 이 작업을 수행하기 위해 간격과 파의 다양한 조합을 시도했지만 내 문제를 간결하게 설명하고 연구할 수 있는 용어가 부족한 것 같습니다.

다음은 콘텐츠의 일반적인 구조를 보여주는 MWE입니다. 나는 몇 가지 의견을 기록하고 도움이 될 수 있다고 생각되는 곳에 몇 가지 vfill 명령을 배치해 보았습니다. 일반적으로 페이지당 1.5개의 보고서가 들어가게 됩니다. 이상적으로는 첫 번째 보고서 위, 첫 번째 보고서와 두 번째 보고서 사이, 두 번째 보고서 아래의 간격이 모두 동일합니다.

\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가 취소되지만, 분리된 경우 첫 번째 블록 이후의 잔류 양성은 \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}

관련 정보