The One with ...

研究用のメモなどを公開しています

TeXの柱とノンブルの設定

jsbookクラスをつかった場合の柱の設定方法を忘れないためにメモを残しておきます.

最終的な出力目標は

偶数頁のヘッダ左側に章タイトル,奇数頁のヘッダ右側にセクションタイトル

偶数頁のフッタ左側に頁番号,奇数頁のフッタ右側にセクションタイトル

であると仮定します.これをデザインAと呼ぶことにしましょう.

\chapterコマンドはデフォルト設定で開始1頁目に\thispagestyle{plain}を実行するので,章のはじめだけ設定したスタイルが表示されないことが しばしばあります.まずはこれを制御します.

直感的に分かりやすいやり方は,\chapterコマンドのすぐ後に自分で\thispagestyle{empty}\thispagestyle{fancy} を使って,\thispagestyle{plain}を上書きしてやることです.

しかしこの方法だと全ての\chapterに同じ命令を書き込む必要があるのであまりスマートではありません. \newcommandでコマンドを定義すれば多少はラクになりますが,章が多いとはやはり煩雑です.

一番簡単な方法は pLaTeX2e 新ドキュメントクラス の指示通りにプリアンブルに

\makeatletter
\renewcommand{\chapter}{%
  \if@openright\cleardoublepage\else\clearpage\fi
  \global\@topnum\z@
  \secdef\@chapter\@schapter}
\makeatother

と書く方法です.この\renewcommandによって,章開始1頁目は自分で設定した柱のスタイルに一致します. どうしてこれでうまくいくのか,実はよくわかっていません.おそらく, jsbook.cls\chapterの定義にある\plainifnotemptyの削除により, \thispagestyle{plain}を実行しないのではないかと推測します.\plainifnotemptyというコマンドは全体のpagestyleemptyでないならplainにせよ,という命令です. ですからこの命令が有効だと,empty以外のpagestyleを使うと,無視されるという現象が生じるのでしょう.

次に, デザインAを実現するには\thispagestyle{fancy}の中身を設定する必要があるので, これを調整します.例としてはこんな感じです.

\pagestyle{fancy}
\fancyhead{} % clear all header fields
\renewcommand{\chaptermark}[1]{\markboth{第\ \thechapter\ 章\,\, #1}{}}
\fancyhead[RO]{{\footnotesize \rightmark}}
\fancyhead[LE]{{\footnotesize \leftmark}}
\renewcommand{\headrulewidth}{0pt} %ヘッダの罫線を消す 
\fancyfoot{} % clear all footer fields
\fancyfoot[LE,RO]{{\footnotesize \thepage}}%頁番号の表示を偶数頁と奇数頁に分けて指定.
\cfoot{}

\fancyheadfancyfootのオプションは

R: 右側 L: 左側 O: 奇数頁 E: 偶数頁

を組み合わせて指定します.例えば \fancyfoot[LE,RO]{{\footnotesize \thepage}} は,「LEが偶数頁のフッターの左側」「ROが奇数頁のフッターの右側」に頁数を示す,という指定です.

もし\frontmatter\chapterを使っている場合は,

\renewcommand{\chaptermark}[1]{\markboth{第\ \thechapter\ 章\,\, #1}{}}

の部分を

\renewcommand{\chaptermark}[1]{#1}{}}

などに改めて定義してください.こうすることで柱を「第0章 イントロダクション」ではなく「イントロダクション」という見出しに変更できます. 一方で\mainmatterは「第1章 先行研究のレビュー」のように,{\markboth{第\ \thechapter\ 章\,\, #1}を使います.

要するにポイントは

  1. \renewcommand{\chapter}で章開始頁を修正

  2. \frontmatter用に\pagestyleを定義

  3. \mainmatter用に\pagestyleを定義

です.\frontmatter\mainmatterの柱が同じなら定義は1種類でOKです.