ページの最後まで長方形

ページの最後まで長方形

ページの 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

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

ここに画像の説明を入力してください

関連情報