改ページの調整

LaTeX の 改ページ 命令のうち、\newpage\pagebreak の違いは latex.ltx の中では \vfil ひとつぶんしかありません。\newpage\vfil \penalty -10000\pagebreak\vfil の無い \penalty -10000。この無限に伸びる空きがあるかないかだけで、残りを白紙で捨てるか、本文を下端まで引き伸ばすかが決まります。\clearpage はさらに一歩進んで \penalty -10001 を置きます——TeX の無限大より 1 だけ大きい 値で、これが溜まったフロートを吐き出させる仕掛けです。このページでは \pagebreak[n]\newpage\clearpage\cleardoublepage\nopagebreak[n]\samepageneedspace\enlargethispage を、実際に組んで測った結果とともに扱います。

扱う層をはっきりさせておきます。このページは その場で改ページに口を出す命令 の担当です。文書全体のリズム——\widowpenalty\clubpenalty(標準クラスではどちらも既定 150)、\raggedbottom\flushbottom の選択、フロートの占有率、そして「なぜこのページはここで終わったのか」の診断——は「改ページの設計と診断」が深く扱います。原則も向こうで書かれているとおりです。改ページの手当ては最後にやる。 文字を一つ足せば以降の切れ目は全部ずれるので、本文が固まる前に \newpage を撒くと、書き直すたびに変な空白が生まれます。以下の命令は、原稿が固まったあとの最終工程で使う道具だと思ってください。

\pagebreak\newpage の違い——残りを伸ばすか、捨てるか

どちらもその位置でページを終えますが、余った縦の空きの扱いが正反対です。 \newpage\vfil を置いてから折るので、無限に伸びるその空きが残りを全部吸い取り、ページの下部は白紙のまま 次へ進みます。\pagebreak\vfil を置かないので、ページに元からある行間などのグルーが引き伸ばされ、本文が下端まで届くように広がります。章の終わりのように「ここで一区切り」なら \newpage、行間をわずかに開いてでも版面を埋めたいなら \pagebreak、というのが選び方です。ただし \pagebreak には副作用があり、段落の途中でも折れます

\pagebreak[n] の n は行の側の \linebreak[n] とまったく同じ仕組みで、latex.ltx\@getpen を通り、article.cls の値で 0・51・151・301・10000 に翻訳されます。\pagebreak は負、\nopagebreak は正。引数を省略するとどちらも 4、つまり ∓10000 です。[0] は「ここで折ってもよい」という許可、[4] だけが命令、と覚えれば十分です。なお \flushbottom が効いている文書(twosidearticle や既定の book)で \pagebreak を使うと、伸ばしきれずに Underfull \vbox (badness 10000) has occurred while \output is active が出ることがあります。実測でも twosidearticle で段落途中に \pagebreak を置いた時点で、この行がログに現れました。一方 \raggedbottom の文書では、ページが短く終わることが許されているので警告は出ません。

\clearpage\newpage の違い——図が次の節に置き去りにされる理由

\clearpage は待機中のフロート(figuretable)を全部出力してから折り、\newpage は出力しません。 これがどれほど結果を変えるか、実測が明快です。本文・図 A・図 B・\section* の順に並べた文書を三通り組んでみました。何も入れなければ、1 ページ目に節見出しと図 A、2 ページ目に図 B。\newpage を入れると 2 ページ組みのまま、2 ページ目に節見出しと図 B が同居 します——「図のあとに来るはず」の節が図 B より前に出てしまうわけです。\clearpage を入れると 3 ページになり、1 ページ目に図 A、2 ページ目に図 B、そして 3 ページ目にようやく節見出し。図表の順序が意味を持つ文書なら、節の境目に置くべきは \clearpage です。

latex
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure A}\end{figure}
\begin{figure}[b]\centering\rule{4cm}{3cm}\caption{Figure B}\end{figure}

% \newpage   -> heading and Figure B end up together on page 2
% \clearpage -> Figure A p.1, Figure B p.2, heading p.3
\clearpage
\section*{This section must come after its figures}

仕掛けは短い定義そのものです。\clearpage\newpage を呼んだあと \write\m@ne{}・空の \vbox{}・そして \penalty -\@Mi を置きます。\@Mi は 10001、つまり TeX の無限大より 1 だけ大きい値 で、これがもう一度 output ルーチンを走らせ、溜まったフロートの待ち行列を空にします。ここで一つ注意。二段組では \newpage は「段」しか終わらせません。 実測でも twocolumnarticle\newpage を打つと、その直後の文章は同じページの右段に落ち、ページは変わりませんでした。同じ文書で \clearpage を打つと、はじめて次ページへ移ります。二段組でページを変えたいなら \clearpage\cleardoublepage を使ってください。

\cleardoublepage——章を必ず右ページから始める

\cleardoublepage\clearpage を実行したうえで、twoside のときに限り、次の本文が奇数(右)ページから始まるよう白紙を差し込みます。 定義はほとんど読み下せるほど短く、\clearpage のあとに「twoside かつページ番号が偶数なら \hbox{}\newpage」というだけです。この \hbox{} は「中身のあるページ」を装うためのもので、これが無いと空ページは出力されずに消えてしまいます。二段組ならこの手順を 2 回繰り返します。製本された本で章がいつも見開きの右から始まるのはこの仕掛けで、book クラスの \chapter は既定でこれを呼んでいます。片面印刷(oneside)では条件が成り立たないので、\clearpage と同じ動きになります。

ここでページを切らせない——\nopagebreak は効き、\samepage は効かない

\samepage は連続する段落をひとまとまりに保てません。 実測が容赦ないので先に書きます。ページ末近くに 1 行段落を 6 つ並べた文書では、素のままだと BLOCK1〜4 が 1 ページ目、BLOCK5・6 が 2 ページ目に分かれます。この 6 段落を \begin{samepage}\end{samepage} で囲んでも、宣言として {\samepage …} でくくっても、分かれ方はまったく同じ でした。理由は定義を見ればわかります。\samepage\interlinepenalty\predisplaypenalty\postdisplaypenalty\interdisplaylinepenalty\@beginparpenalty\@endparpenalty\@itempenalty\@secpenalty\interfootnotelinepenalty の 9 個を \@M(10000)にするだけの宣言で、段落と段落のあいだの切れ目には、この 9 個のどれも関与しない からです。段落の内側・箇条書きの項目間・別行立て数式の前後は守られますが、ふつうの改段落は素通しです。

その一点を守りたいなら \nopagebreak[n] が正解です。同じ実験で、切れていた BLOCK4 と BLOCK5 の境目に \nopagebreak を置いたところ、切れ目は 3 と 4 のあいだへ移り、BLOCK4 は BLOCK5・6 と一緒に次ページへ行きました。段落の直前でも直後でも結果は同じです。\nopagebreak は水平モードなら \vadjust 経由で、垂直モードなら直接、その位置にペナルティを置くだけなので、「切ってほしくない継ぎ目」がはっきりしているときに最も確実 です。見出しとその直後の本文、図とその説明文のあいだなど、縫い目が一つに決まる場面で使ってください。逆に「この一かたまりを何行かまとめて」という要求には、次の needspace のほうが合っています。

latex
% Measured: six one-line paragraphs at the foot of a page split 4 | 5.
% \samepage around all six changes nothing.
% \nopagebreak at the seam moves the split to 3 | 4.
BLOCK4\par\nopagebreak
BLOCK5\par

% Reserve room instead of forbidding a break:
\usepackage{needspace}
\needspace{6\baselineskip}

% Or make just this one page one line taller:
\enlargethispage{\baselineskip}

needspace パッケージ——「あと 6 行入らないなら改ページ」

\needspace{6\baselineskip} は「ここから下端まで 6 行ぶんの高さが残っていなければ、いま改ページする」という条件付きの命令です。 \samepage が失敗した実験に \usepackage{needspace} を足し、6 段落の直前に \needspace{6\baselineskip} を置いたところ、BLOCK1 から 6 まで 全部が 2 ページ目へ移りました。禁止するのではなく場所を確保するという発想なので、\samepage のように「守れないのに黙っている」ことがありません。長さは \baselineskip の倍数で書くのが直感的ですが、ptcm でも構いません。より厳密に確保する \Needspace{...}\flushbottom のもとで短いページの下端を揃える \Needspace*{...} もあり、後の二つは段落と段落のあいだで使います。見出しがページ末に一行だけ取り残されるのを防ぐ、いちばん素直な道具です。

\enlargethispage ——このページだけ 1 行ぶん背を伸ばす

\enlargethispage{\baselineskip} は現在のページの \textheight だけを一時的に伸ばし、行を 1 行ぶん余計に収めます。 効き方は数えられます。1 行 1 段落で 120 行を流し込んだ article では、素のままだと 1 ページ目の最後が LINE46 でした。\enlargethispage{\baselineskip} を足すと LINE47、{2\baselineskip} なら LINE48、負の長さ {-\baselineskip} なら逆に LINE45 まで縮みます。要求ぴったりの結果です。実装はいかにも実装らしく、latex.ltx\@kludgeins という名前の insert に負の \vskip を差し込むことで版面の目標高さを騙します——LaTeX 自身がこの仕掛けを kludge(その場しのぎ) と名づけている点に、この命令の性格が出ています。行間を詰めてでも 1 行押し込みたいときは星付きの \enlargethispage*{\baselineskip} を使います。

この命令の出番は、たいてい 孤立行の後始末 です。段落の最後の一行だけが次ページの先頭に取り残された(widow/泣き別れ)とき、\enlargethispage{\baselineskip} でそのページを 1 行ぶん高くすれば、はぐれた行が呼び戻されて解消します。\widowpenalty を 10000 に上げて文書全体で禁じるやり方もありますが、その代償——ページ下端が揃わなくなる、\flushbottom では Underfull \vbox が出る——は「改ページの設計と診断」で実測つきで比較されています。大域の設定で大勢を決め、残った数か所だけを \enlargethispage で手当てする、というのが最終工程の定石です。手で入れた 1 行には必ずコメントを添えてください。本文を書き直したあと、その 1 行が有害になっているかどうかを判断できるのは、コメントだけです。

命令何をするか注意
\pagebreak[n]ペナルティ −(0/51/151/301/10000) を置く。\vfil は置かないので本文が下端まで伸びる段落の途中でも折れる。\flushbottom では Underfull \vbox が出ることがある
\newpage\vfil \penalty -10000。残りを白紙のまま次へ二段組では段しか終わらない。フロートは吐き出さない
\clearpage\newpage\penalty -10001 を足し、待機中のフロートを全部出してから折る節の境目に置く。本文の途中に置くと大きな空白が残る
\cleardoublepage\clearpage のうえで、twoside なら奇数(右)ページから再開。必要なら白紙を差し込むoneside では \clearpage と同じ。二段組では手順を 2 回行う
\nopagebreak[n]ペナルティ +(0/51/151/301/10000) をその位置に置く縫い目が一つに決まるときに最も確実。見出しと本文のあいだなど
\samepage9 個のペナルティを 10000 にする宣言(同名の環境としても使える)段落と段落のあいだには効かない。 実測で BLOCK4/5 の切れ目を止められなかった
\needspace{N\baselineskip}下端まで N 行ぶん残っていなければ、いま改ページする(needspace パッケージ)禁止ではなく確保。見出しを本文の頭と一緒に保つのに最適
\enlargethispage{\baselineskip}このページの \textheight だけを一時的に伸ばす。実測で LINE46 が LINE47 になった負の長さで縮む。星付きは行間を詰めて押し込む

ページ組みの最終工程——どの順で見るか

ページ組みの点検は、本文・図表・参考文献がすべて揃ってから始めます。 順番があります。まずフロートが渋滞していないかを見て、必要なら \clearpage で流す。次に、ページ末に取り残されそうな見出しを needspace で守る。最後に、目立つ泣き別れだけを \enlargethispage で個別に手当てする。\newpage を撒くのは、章の構成が本当にそれを要求する場所だけにしてください。手を入れた箇所には理由をコメントで残すこと——半年後の自分は、なぜそこに \enlargethispage があるのかを絶対に覚えていません。

  • 章・付録の境目には \clearpage\cleardoublepage 図表が次の部へ流れ込むのを止める。二段組では \newpage では足りない。
  • 見出しの前には \needspace{3\baselineskip} 程度。 禁止するのではなく場所を確保する。\samepage は当てにしない。
  • 縫い目が一つに決まるなら \nopagebreak 図とその説明、見出しとその第一段落など。
  • 泣き別れ 1 行には \enlargethispage{\baselineskip} 白の量とページ下端の揃いを両方見てから入れる。
  • 手で入れた改ページには必ずコメントを。 本文を直したあとに外すべきかどうかを判断できるのは、その一行だけ。