페이지의 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
tcolorbox
height 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}