TeXの記憶(8)—ページヘッダを修正する

jsbookでもjbookでもページヘッダ(柱と呼ぶことが多いです)はページやテキスト領域(版面)の端に寄せて表示されます。柱は出版社によってページの真ん中にしたいとか、ページ番号(ノンブルと呼ぶことが多いです)を端から少し内側にしたいとか、いろいろこだわりがあるようです。これって、出版社のこだわり、というか担当編集者の好みかもしれませんが。とにかくデフォルトじゃすまない項目の一つです。

デフォルトの柱はjbook.cls、jsbook.clsとも、柱とノンブル(ページ番号)が両端に寄るようになっています。

img20130501-1

img20130501-2

この柱を真ん中に表示することにしました。jsbook.clsはノンブルも直しています。元はボールドの数字ですがイタリックで出力しています。

img20130501-3

img20130501-4

まずは、jbook.clsから。

LaTeXの各ページにはそれぞれのスタイルが割り当てられていて、普通のページはheadingsというスタイルに定義されています。この中の奇数・偶数のページヘッダ定義を直してやれば目的を達するはずです。jbook.clsの元の定義を眺めてみます。

\if@twosideの中にあるところ

\def\@evenhead{\thepage\hfil\leftmark}%
\def\@oddhead{{\rightmark}\hfil\thepage}%

偶数ページは\def\@evenhead、奇数ページは\def\@oddheadが担当しています。\@evenheadと\@oddheadは、版面(textwidth)の幅を持つので、ページ番号と柱の真ん中に\hfilを入れて、それぞれを両端に配置させています。

この部分を修正することにします。幅ゼロのボックスにページ番号を入れて、版面の幅のボックスを作って、その中央に柱を置く、という方法で作りました。奇数ページも同じ考え方で作ります。

\def\@evenhead{\hbox to \z@{%  幅ゼロのボックスを作って
  \thepage\hss}%               ページ番号を入れる
  \hbox to \textwidth{%        版面のボックスを作って
    \hss\leftmark\hss}}%       真ん中に柱を入れる

\def\@oddhead{\hbox to \textwidth{\hss\rightmark\hss}%
  \hbox to \z@{\hss\thepage}}%

jsbook.clsも同じところだろうと思って見てみると

\def\@evenhead{%
  \if@mparswitch \hss \fi
  \underline{\hbox to \fullwidth{\autoxspacing
      \textbf{\thepage}\hfil\leftmark}}%
  \if@mparswitch\else \hss \fi}%

のような定義になっています。\fullwidthって何でしょうか。LaTeXにこんな定義があったのかな?とりあえず、ファイル内を検索するとjsbook.clsの中で定義されている長さで、ページのテキスト領域+余白を合わせたもののようです。奇数ページは右に余白を置き、偶数ページは左に余白置く、というためにあるようです。(jsbook.clsを仕事で使ったことがないので知りませんでした。ほんとはもともとLaTeXにあるのかな。)

jsbook.clsは\fullwidthにあたる幅全体に下線を引いて、そこにページ番号と柱を出力していますが、同じ考えで進めました。\underlineの中で、\fullwidth幅の中にノンブルと柱を配置すればいいわけです。

\def\@evenhead{%
  \if@mparswitch \hss \fi
  \underline{\hbox to \z@{\textit{\thepage}\hss}%
    \hbox to \fullwidth{\hss\autoxspacing\leftmark\hss}}%
  \if@mparswitch\else \hss \fi}%
\def\@oddhead{\underline{\hbox to \fullwidth{\hss
      {\autoxspacing\if@twoside\rightmark\else\leftmark\fi}\hss}%
    \hbox to \z@{\hss\textit{\thepage}}}\hss}%

ついでに、ボールドになっているノンブルをイタリックにしたのは\textit{\thepage}の部分です。\smallにすれば、ノンブルだけ小さな文字で出力することもできます。

ページ番号の位置もここで変更できます。版面から内側に入った体裁もよく見かけるので、1文字内側に入るものを作ってみました。jbook.clsの例です。

\def\@evenhead{\hbox to \z@{\hskip1zw\thepage\hss}%
  \hbox to \textwidth{\hss\leftmark\hss}}%
\def\@oddhead{\hbox to \textwidth{\hss\rightmark\hss}%
  \hbox to \z@{\hss\thepage\hskip1zw}}%

\hskip1zwを使って、ページ番号を中央に向けて押しています。

img20130501-5

コメント