占据页面三分之一的文本。之后需要绘制一个矩形,该矩形将一直延伸到当前页面的末尾。基本上这是一张试卷,我为学生提供空间,让他们在空白框中写下答案。
\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
必须减去,因为图片从新行开始。减去 ,因此如果使用\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}