ページの 3 分の 1 を占めるテキスト。その後、現在のページの最後まで続く長方形を描く必要があります。基本的には質問用紙で、空のボックスに生徒が回答を書き込むためのスペースを用意しています。
\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
1 行のテキスト。この後、ページの最後まで四角形を描画する必要があります。
\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
ここに 2 つの解決策があります。1 つは、前のテキスト行の末尾に配置することを目的としています。もう 1 つは、新しいテキスト行の先頭に配置することを目的としています。インデントや中央揃えは無視されます。
オーバーレイ モードでは、原点がベースライン上に配置されるため、いくらかのオフセットが必要になることに注意してください。 \strutbox
は と同じサイズです\strut
。
2回実行することを忘れないでください。
\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}