Rechteck bis zum Ende der Seite

Rechteck bis zum Ende der Seite

Irgendein Text, der ein Drittel der Seite einnimmt. Danach muss ein Rechteck gezeichnet werden, das bis zum Ende der aktuellen Seite reicht. Im Grunde ist es ein Fragebogen und ich gebe den Schülern Platz, um ihre Antworten in das leere Feld zu schreiben.

\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

Irgendein einzeiliger Text. Danach soll das Rechteck bis zum Ende der Seite gezeichnet werden.

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

Wie Sie sehen, schreibe ich die Textbreite und Mindesthöhe explizit. Ich möchte dies automatisch tun, mit der Seitenbreite und -höhe, sodass das Rechteck automatisch erstellt wird, je nach dem nach der letzten Zeile verbleibenden Platz. Der Anfang des Rechtecks ​​könnte jedoch an einer beliebigen Stelle auf der Seite liegen. ( BEARBEITEN: Der Anfang des Rechtecks ​​beginnt nach dem Ende der vorherigen Zeile )

Antwort1

Die verbleibende Höhe einer Seite kann man mit Hilfe von \pagegoalund berechnen \pagetotal. Letzteres enthält die bisherige Höhe des Textes und ersteres die für Text zur Verfügung stehende Höhe (nicht \textheight, da sich auf der Seite noch Floats und/oder Fußnoten befinden können). \baselineskipmuss abgezogen werden, da das Bild in einer neuen Zeile beginnt. Und \parskipwird abgezogen, damit die Box bei einem Wert ungleich Null weiter unter den Text gesetzt wird \parskip.

Ich habe mir außerdem die Freiheit genommen, die Breite auf anzupassen \textwidth. Das -0.4ptist eine Anpassung für die Breite der Linien.Bearbeiten:Andernfalls erfolgt eine overfull \hboxVerwarnung.

Bearbeiten:Ich habe den Code so geändert, dass er auch auf Seiten ohne Text funktioniert. Auch hier -0.4ptpasst er die Zeilenbreite an und verhindert eine overfull \vboxWarnung.

Dies erfordert ein \newpagevor dem Rechteck auf einer Seite ohne Text.

Bearbeitung 2:das Rechteck reichte nicht bis zum unteren Rand der Seite. Ich habe es -\baselineskipdurch ersetzt -\lineskip-0.4pt, um dies zu korrigieren (nochmals, -0.4ptum die Zeilen anzupassen).

Notiz:Wird für die Rahmen eine andere Zeilenbreite verwendet, -0.4ptmuss jedes Vorkommen von durch ersetzt werden -<new line width>. Sonst kann es zu überfüllten Kästen kommen oder das Rechteck auf einer Seite mit Text wird auf die nächste Seite verschoben.

Bearbeitung 3:entfernt -parskip. Das war nicht nötig.

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

Antwort2

Hier sind zwei Lösungen. Eine soll am Ende der vorherigen Textzeile platziert werden. Die andere soll am Anfang einer neuen Textzeile platziert werden. Einrückung oder Zentrierung werden dabei ignoriert.

Beachten Sie, dass sich im Überlagerungsmodus der Ursprung auf der Grundlinie befindet und daher ein gewisser Versatz erforderlich ist. \strutboxhat die gleiche Größe wie \strut.

Vergessen Sie nicht, es zweimal auszuführen.

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

Antwort3

tcolorboxbietet height fillMöglichkeiten zur Lösung dieser Art von Problemen:

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

Bildbeschreibung hier eingeben

verwandte Informationen