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 \pagegoal
y \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). \baselineskip
debe restarse, porque la imagen comienza en una nueva línea. Y \parskip
se resta, por lo que el cuadro se establece más debajo del texto en caso de que \parskip
se utilice un valor distinto de cero.
También me tomé la libertad de ajustar el ancho \textwidth
. Es -0.4pt
un ajuste para el ancho de las líneas.Editar:De lo contrario habrá una overfull \hbox
advertencia.
Editar:Cambié el código para que funcione en páginas sin texto. Nuevamente, -0.4pt
se ajusta al ancho de la línea y evita una overfull \vbox
advertencia.
Esto necesita un \newpage
antes 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é -\baselineskip
por -\lineskip-0.4pt
para corregir esto (nuevamente, -0.4pt
para ajustar las líneas).
Nota:Si se utiliza otro ancho de línea para los marcos, todas las apariciones de -0.4pt
deben 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. \strutbox
es 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
tcolorbox
ofrece height fill
opció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}