페이지 끝까지 직사각형

페이지 끝까지 직사각형

페이지의 1/3을 차지하는 텍스트입니다. 그런 다음 현재 페이지 끝까지 계속되는 직사각형을 그려야 합니다. 기본적으로 이는 질문지이며 학생들이 빈 상자에 답변을 작성할 수 있는 공간을 제공하고 있습니다.

\begin{tikzpicture}
\node (rect) at (0,0) [draw, text width=16.6 cm, minimum height=7cm]{};
\node[below right, text width=16.6 cm] at (rect.north west) {};
\end{tikzpicture}

\pagebreak

한 줄로 된 일부 텍스트. 그런 다음 페이지 끝까지 직사각형을 그려야 합니다.

\begin{tikzpicture}
\node (rect) at (0,0) [draw, text width=16.6 cm, minimum height=7cm]{};
\node[below right, text width=16.6 cm] at (rect.north west) {};
\end{tikzpicture}

보시다시피 텍스트 너비와 최소 높이를 명시적으로 작성하고 있습니다. 마지막 줄 뒤에 남은 공간에 따라 사각형이 자동으로 만들어지도록 페이지 너비와 높이를 자동으로 지정하고 싶습니다. 그러나 직사각형의 시작은 페이지의 어느 위치에서든 가능합니다. ( 편집 : 직사각형의 시작은 이전 줄의 끝 이후에 시작됩니다 )

답변1

\pagegoal및 를 사용하여 페이지의 남은 높이를 계산할 수 있습니다 \pagetotal. 후자는 지금까지의 텍스트 높이를 포함하고 첫 번째는 텍스트에 사용 가능한 높이를 포함합니다( \textheight페이지에 부동 및/또는 각주가 있을 수 있으므로 는 아님). \baselineskip그림은 새로운 줄에서 시작하기 때문에 빼야 합니다. 그리고 빼기 때문에 0이 아닌 값이 사용 \parskip되는 경우 상자가 텍스트 아래에 더 많이 설정됩니다 .\parskip

나는 또한 너비를 \textwidth. -0.4pt선의 너비를 조정하는 것입니다 .편집하다:그렇지 않으면 경고가 표시됩니다 overfull \hbox.

편집하다:코드를 변경하여 텍스트가 없는 페이지에서도 작동합니다. 이번에도 -0.4pt선 너비를 조정하고 overfull \vbox경고를 방지합니다.

\newpage텍스트가 없는 페이지의 직사각형 앞에 가 필요합니다 .

편집 2:직사각형이 페이지 하단까지 가지 않았습니다. 이를 수정하기 위해 (다시 선을 조정하기 위해) -\baselineskip로 대체했습니다 .-\lineskip-0.4pt-0.4pt

메모:프레임에 다른 선 너비가 사용되는 경우 모든 항목을 -0.4pt로 바꿔야 합니다 -<new line width>. 그렇지 않으면 상자가 너무 가득 차거나 텍스트가 있는 페이지의 사각형이 다음 페이지로 이동될 수 있습니다.

편집 3:제거됨 -parskip. 이것은 필요하지 않았습니다.

\documentclass[a4paper]{article}
\usepackage{tikz}
\usepackage{lipsum}

\newdimen\remainingheight
\newcommand*{\calcremainingheight}{%
    \ifdim\pagegoal=\maxdimen
        \remainingheight\dimexpr\textheight-0.4pt\relax
    \else
        % edit 2: replaced -\baselineskip by -\lineskip-0.4pt
        % edit 3: removed -\parskip
        \remainingheight\dimexpr\pagegoal-\pagetotal-\lineskip-0.4pt\relax
    \fi
}

\parskip2ex
\parindent0pt

\begin{document}
\lipsum[1]

\noindent
\begin{tikzpicture}
\calcremainingheight
\node (rect) at (0,0) [draw, minimum width=\textwidth-0.4pt, minimum height=\remainingheight]{};
%\node[below right, text width=16.6 cm] at (rect.north west) {};
\end{tikzpicture}

\lipsum[1-2]

\noindent
\begin{tikzpicture}
\calcremainingheight
\node (rect) at (0,0) [draw, minimum width=\textwidth-0.4pt, minimum height=\remainingheight]{};
%\node[below right, text width=16.6 cm] at (rect.north west) {};
\end{tikzpicture}

% needed for a page with no text before the rectangle
\newpage
\noindent
\begin{tikzpicture}
\calcremainingheight
\node (rect) at (0,0) [draw, minimum width=\textwidth-0.4pt, minimum height=\remainingheight]{};
%\node[below right, text width=16.6 cm] at (rect.north west) {};
\end{tikzpicture}
\end{document}

답변2

여기에 두 가지 해결책이 있습니다. 하나는 이전 텍스트 줄의 끝에 배치됩니다. 다른 하나는 새 텍스트 줄의 시작 부분에 배치됩니다. 들여쓰기나 센터링을 무시합니다.

오버레이 모드에서는 원점이 기준선에 위치하므로 약간의 오프셋이 필요합니다. \strutbox와 같은 크기입니다 \strut.

두 번 실행하는 것을 잊지 마십시오.

\documentclass{article}
\usepackage{tikzpagenodes}
\usepackage{lipsum}% MWE only

\begin{document}
Some text on one line.
\begin{tikzpicture}[remember picture,overlay]% still on same line as text
  \path (0pt,-\dp\strutbox) -| (current page text area.west) coordinate[midway] (start);
  \draw (start) rectangle (current page text area.south east);
\end{tikzpicture}

\lipsum[1-6]

\begin{tikzpicture}[remember picture,overlay]% start of new paragraph
  \path (0pt,\ht\strutbox) -| (current page text area.west) coordinate[midway] (start);
  \draw (start) rectangle (current page text area.south east);
\end{tikzpicture}
\lipsum[7-11]
\end{document}

답변3

tcolorboxheight fill이러한 종류의 문제를 해결할 수 있는 옵션을 제공합니다 .

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\begin{document}
\lipsum[1]
\begin{tcolorbox}[height fill, title=Your solution]
\end{tcolorbox}

\lipsum[2]
\begin{tcolorbox}[height fill, sharp corners, colback=white]
\end{tcolorbox}
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보