矩形直到頁面末尾

矩形直到頁面末尾

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

\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}

在此輸入影像描述

相關內容