TeXの記憶(43) — \clubpenaltyをゼロにする

\sectionや\subsectionの後に1行だけ残して改ページしたい、という話題です。

LaTeXで普通に組版すると、\sectionの後は最低2行続いてから改ページするか\sectionの前で改ページする仕組みになっています。\sub*sectionも同じです。
これを1行だけ残して改ページするには、ちょっと設定の変更が必要です。

0914aa

私の周りには、\sectionの後が1行になってしまうことよりも、ページのテキスト領域(版面)の下が空いてしまうことを気にする編集者のほうが多いような気がします。

0914bb

そんな場合、ちょっと強引かもしれませんが\clubpenaltyをゼロにしてしまう方法があります。

\clubpenaltyは、段落の1行目の後で改ページされないためのpenaltyのようで、LaTeXのクラスのでは\@afterheadingの中で使われています。以下はjsbook.clsの例です。

\def\@afterheading{%
  \@nobreaktrue
  \everypar{%
    \if@nobreak
      \@nobreakfalse
      \clubpenalty \@M
      \if@afterindent \else
        {\setbox\z@\lastbox}%
      \fi
    \else
      \clubpenalty \@clubpenalty
      \everypar{\everyparhook}%
    \fi\everyparhook}}

この中の

      \clubpenalty \@M

      \clubpenalty \z@

に替えてしまえば目的が果たせます。jbook.clsは、その中では定義されていないのですが、元のLaTeXの定義をそのまま受け継いでいるので、プリアンブルのどこかに入れておけば上書きされます。

\@afterheadingは\section以外でも使われているので、別な定義を作って\section以外では元の値を使うのが良いのかもしれません。

コメント