Rectángulo hasta el final de la página.

Rectángulo hasta el final de la página.

Algún texto que ocupe un tercio de la página. Después de esto, es necesario dibujar un rectángulo que continuará hasta el final de la página actual. Básicamente es un cuestionario y estoy proporcionando espacios para que los estudiantes escriban sus respuestas en el cuadro vacío.

\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

Algún texto con una línea. Después de esto, el rectángulo debe dibujarse hasta el final de la página.

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

Como puede ver, estoy escribiendo explícitamente el ancho y el alto mínimo del texto. Me gustaría hacerlo automáticamente, con el ancho y alto de la página para que el rectángulo se haga automáticamente dependiendo del espacio que quede después de la última línea. Sin embargo, el comienzo del rectángulo podría estar en cualquier parte de la página. (EDITAR: el comienzo del rectángulo comienza después del final de la línea anterior)

Respuesta1

Puedes calcular la altura restante de una página con la ayuda de \pagegoaly \pagetotal. Este último contiene la altura del texto hasta el momento y el primero la altura disponible para el texto (no \textheight, porque puede haber elementos flotantes y/o notas al pie en la página). \baselineskipdebe restarse, porque la imagen comienza en una nueva línea. Y \parskipse resta, por lo que el cuadro se establece más debajo del texto en caso de que \parskipse utilice un valor distinto de cero.

También me tomé la libertad de ajustar el ancho \textwidth. Es -0.4ptun ajuste para el ancho de las líneas.Editar:De lo contrario habrá una overfull \hboxadvertencia.

Editar:Cambié el código para que funcione en páginas sin texto. Nuevamente, -0.4ptse ajusta al ancho de la línea y evita una overfull \vboxadvertencia.

Esto necesita un \newpageantes del rectángulo en una página sin texto.

Edición 2:el rectángulo no llegaba hasta el final de la página. Lo reemplacé -\baselineskippor -\lineskip-0.4ptpara corregir esto (nuevamente, -0.4ptpara ajustar las líneas).

Nota:Si se utiliza otro ancho de línea para los marcos, todas las apariciones de -0.4ptdeben reemplazarse por -<new line width>. De lo contrario, es posible que los cuadros se llenen demasiado o que el rectángulo de una página con texto se mueva a la página siguiente.

Edición 3:eliminado -parskip. Esto no era necesario.

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

Respuesta2

Aquí hay dos soluciones. Uno debe colocarse al final de la línea de texto anterior. El otro está pensado para colocarse al comienzo de una nueva línea de texto. Ignora la sangría o el centrado.

Tenga en cuenta que en el modo de superposición, el origen se ubicará en la línea base, por lo que se necesita algo de desplazamiento. \strutboxes del mismo tamaño que \strut.

No olvides ejecutarlo dos veces.

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

Respuesta3

tcolorboxofrece height fillopción para solucionar este tipo de problemas:

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

ingrese la descripción de la imagen aquí

información relacionada