佔據頁面三分之一的文字。之後需要繪製一個矩形,該矩形將持續到目前頁面的末端。基本上它是一張考卷,我為學生提供了在空盒子裡寫下答案的空間。
\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}