* LaTeX でヘッダーやフッターに柱やページノンブルを配置する。 [#u78a92d9]

** 概要 [#je91d3c2]
一般的な書籍では、各ページの上部や下部にそのページが属する章や節の情報(節番号+節題など)が記載されることがよくあります。この部分をヘッダーやフッターと呼びます。上部がヘッダー(header)で下部がフッター(footer)となります。この部分にはまた、ページ番号も記載されます。日本の印刷業界では、ページ番号のことをノンブル(nombre フランス語で数のこと)ということが多いです。これらについては次のような慣習があります。
一般的な書籍では、各ページの上部や下部に章題などが記載されることがよくあります。
このような、ページの外縁部に記される章題などを「柱(はしら)」といい、柱が置かれる領域をヘッダーやフッターと呼びます。
上部がヘッダー(header)で下部がフッター(footer)となります。
ヘッダーやフッターには、柱のほかにページ番号も記載されます。
日本の印刷業界では、ページ番号のことをノンブル(nombre フランス語で数のこと)ということが多いです。
これらについては次のような慣習があります。
- ノンブルは、見開き2ページのうち前のページが偶数で後のページが奇数。
(横書きの書籍で右に読み進めるものでは見開き左が偶数ページで右が奇数ページ、縦書き書籍で左に読み進めるものでは見開き右が偶数ページで左が奇数ページ)
- 両ページに柱を出す場合は、偶数ページに大構造、奇数ページに小構造を記載する。
(横書きの書籍で右に読み進めるものでは見開き左が偶数ページで右が奇数ページ、
縦書き書籍で左に読み進めるものでは見開き右が偶数ページで左が奇数ページ)
- 見開き両ページに柱を出す場合は、偶数ページに大構造、奇数ページに小構造を記載する。
(章題と節題としたり、書名と章題としたり)
- 分量が短い節や章があるために、ひとつのページに複数の章見出しや節見出しがあるとき、大構造の柱はページ最後のものを拾い、小構造の柱はページ内最初のものを拾って記載する。
- 分量が短い節や章があるためにひとつのページに複数の章見出しや節見出しがあるとき、
大構造の柱はページ最後のものを拾い、小構造の柱はページ内最初のものを拾って記載する。

この、「ページ内に複数存在する節見出しから最初のものを拾う」という動作は、次のように TeX の「マーク」と呼ばれる機構を利用して実現されます。TeX には、組版する文章の任意の場所に印刷されない文字列を埋め込む機能があり、埋め込まれた文字列はマークと呼ばれます。各ページに埋め込まれたマークは、ページが組み上げられる毎に呼び出されるページ出力ルーチン中で参照できるので、例えば章見出しの場所で \mark{第1章 はじめに} のように指定してマークとして章題を埋め込んでおき、ページ出力ルーチン中でその章題を読みだして柱に配置したりできるわけです。ただし、ページに複数のマークがあっても参照できるのはそのページ中で最初に埋め込まれたマークと最後に埋め込まれたマークおよび前のページの最後のマークだけです。それぞれ、\firstmark,\botmark,\topmark によって参照できます。LaTeX では、マークとして \mark{{第1章 はじめに}{第1節 はじめにのはじめ}} のように章と節の情報をそれぞれブレイスで括ったものをふたつまとめて一つのマークとして埋め込んでおき、ページ出力ルーチンで章柱を記載するときは \botmark のふたつのブレイスのひとつ目を取り出し、節柱を記載するときは \firstmark のふたつのブレイスのふたつ目を取り出すようになっています。これらに関係するユーザーマクロは次の通りです。
この、「ページ内に複数存在する節見出しから最初のものを拾う」という動作は、
次のように TeX の「マーク」と呼ばれる機構を利用して実現されます。
TeX には、組版する文章の任意の場所に印刷されない文字列を埋め込む機能があり、
埋め込まれた文字列はマークと呼ばれます。
各ページに埋め込まれたマークは、ページが組み上げられる毎に呼び出されるページ出力ルーチン中で参照できるので、
例えば章見出しの場所で \mark{第1章 はじめに} のように指定してマークとして章題を埋め込んでおき、
ページ出力ルーチン中でその章題を読みだして柱に配置したりできるわけです。
ただし、ページに複数のマークがあっても、参照できるのはそのページ中で最初に埋め込まれたマークと
最後に埋め込まれたマークおよび前のページの最後のマークだけです。
それぞれ、\firstmark,\botmark,\topmark によって参照できます。
LaTeX では、マークとして \mark{{第1章 はじめに}{第1節 はじめにのはじめ}} のように
章と節の情報をそれぞれブレイスで括ったものをふたつまとめて一つのマークとして埋め込むようになっています。
この方法により、1系統だけだった TeX のマーク機能の上で2系統のマークを扱えるようにしています。
そうして、ページ出力ルーチンで章柱を記載するときは \botmark のふたつのブレイスのひとつ目を取り出し、
節柱を記載するときは \firstmark のふたつのブレイスのふたつ目を取り出すようになっています。
これらに関係するユーザーマクロは次の通りです。

:\markboth{A}{B}|「{A}{B}」という文字列をマークとして埋め込む。多くの文書クラスでは、章見出しのところで \markboth{章題}{} として実行される。
:\markright{C}|それまでに埋め込まれた最新のマークが「{A}{B}」だとすると{A}を引き継いで「{A}{C}」というマークを埋め込む。多くの文書クラスでは、節見出しのところで \markright{節題} として実行される。
:\leftmark|ページに「{A1}{B1}」「{A2}{B2}」「{A3}{B3}」の三つのマークが順に埋め込まれると、ページ出力ルーチン中で \leftmark が A3 に置き換えられる。多くの文書クラスでは、偶数ページのヘッダー内で呼び出される。
:\rightmark|ページに「{A1}{B1}」「{A2}{B2}」「{A3}{B3}」の三つのマークが順に埋め込まれると、ページ出力ルーチン中で \rightmark が B1 に置き換えられる。多くの文書クラスでは、奇数ページのヘッダー内で呼び出される。
:\markboth{A}{B}|「{A}{B}」という文字列をマークとして埋め込む。
多くの文書クラスでは、章見出しのところで \markboth{章題}{} として実行される。
:\markright{C}|それまでに埋め込まれた最新のマークが「{A}{B}」だとすると{A}を引き継いで「{A}{C}」というマークを埋め込む。
多くの文書クラスでは、節見出しのところで \markright{節題} として実行される。
:\leftmark|ページに「{A1}{B1}」「{A2}{B2}」「{A3}{B3}」の三つのマークが順に埋め込まれると、
ページ出力ルーチン中で \leftmark が A3 に置き換えられる。
多くの文書クラスでは、偶数ページのヘッダー内で呼び出される。
:\rightmark|ページに「{A1}{B1}」「{A2}{B2}」「{A3}{B3}」の三つのマークが順に埋め込まれると、
ページ出力ルーチン中で \rightmark が B1 に置き換えられる。
多くの文書クラスでは、奇数ページのヘッダー内で呼び出される。

このマクロの名称に含まれる left および right は、上に挙げた横書き書籍の慣習に固定化された用法と思われます。見開き左ページに章柱、右ページに節柱を置く場合に、節柱の内容を埋め込むことは右ページの柱を指定することになるので \markright、右ページの柱に記載するのは小構造の見出しなので \rightmark にはページ内最初のマークから取り出すことも織り込み済みです。「慣習通りの横書き書籍」でない場合には、これらのマクロの名称と見開きページの左右との関係が直感的ではなくなりますので、注意が必要です。
これらのマクロの名称に含まれる left および right は、上に挙げた横書き書籍の慣習に固定化された用法と思われます。
慣習通りに見開き左ページに章柱、右ページに節柱を置くような横書き書籍を作るのであれば、
節柱の内容を埋め込むことは「右へ印をつけよ=mark right」として \markright ですし、
埋め込まれた節見出しは「右の印=right-mark」として \rightmark で参照されます。
(なお、右ページの柱に記載するのは小構造の見出しなので、
\rightmark 自体にページ内最初のマークから取り出すという動作も組み込まれています。)
「慣習通りの横書き書籍」でない場合には、
これらのマクロの名称と見開きページの左右との関係が直感的ではなくなりますので、注意が必要です。

** ヘッダーとフッター [#l3a43e16]

ヘッダーやフッターはマクロとして定義されたものが使われます。

:\@oddhead|奇数ページのヘッダー
:\@oddfoot|奇数ページのフッター
:\@evenhead|偶数ページのヘッダー
:\@evenfoot|偶数ページのフッター

プリアンブルで直接定義し直すこともできるし、\pagestyle 命令で間接的に定義することもできます。(直接定義する際は、必要に応じて \makeatletter, \makeatother などを使用します。→ 「[[TeX入門/マクロの作成#コントロールシークエンス名に“@”を織り交ぜたもの>TeX入門/マクロの作成#f8b87eec]]」))
プリアンブルで直接定義し直すこともできるし、\pagestyle 命令で間接的に定義することもできます。
(直接定義する際は、必要に応じて \makeatletter, \makeatother などを使用します。
→ 「[[TeX入門/マクロの作成#コントロールシークエンス名に“@”を織り交ぜたもの>TeX入門/マクロの作成#f8b87eec]]」)

例えば、\pagestyle{empty} とするとヘッダーやフッターは4つともマクロとして {} と同じように定義し直されるので、ヘッダーやフッターに何も表示されなくなります。また、
例えば、\pagestyle{empty} とするとヘッダーやフッターは4つともマクロとして {} と同じように定義し直されるので、
ヘッダーやフッターに何も表示されなくなります。
また、例えば、

例えば、

 \makeatletter
 \def\@oddhead{\rightmark\hfil\thepage}
 \makeatother

とすると、奇数ページのヘッダーがの左端(横書きの場合ノド側)に節題が記載され、右端にノンブルが記載されます(一般的な文書クラスを使っている場合)。
ヘッダーやフッターは板面幅一杯に組まれます。その中の配置の調整にはいくらでも広がる空白として \hfil が使えます。また、ノンブルを表す \thepage もよく使われます。これら以外の通常の文字列なども使えます。
とすると、奇数ページのヘッダーの左端(横書きの場合ノド側)に節題が記載され、
右端にノンブルが記載されます(一般的な文書クラスを使っている場合)。
ヘッダーやフッターは版面幅一杯に組まれます。
その中の配置の調整には、いくらでも広がる空白として \hfil が使えます。
また、ノンブルを表す \thepage もよく使われます。これら以外の通常の文字列なども使えます。

定義例

 \makeatletter
 \def\@oddfoot{\hfil- \thepage\ -\hfil}% 中央にハイフンで挟んだノンブルを表示
 \def\@evenhead{\thepage\qquad\leftmark\hfil}% 偶数ページにノンブル+クワタ2つ分の空白+章柱の全体を左に寄せて記載
 \def\@oddfoot{\hfil- \thepage\ -\hfil}% 奇数ページのフッターの中央にハイフンで挟んだノンブルを記載
 \def\@evenhead{\thepage\qquad\leftmark\hfil}% 偶数ページのヘッダーに「ノンブル+クワタ2つ分の空白+章柱」の全体を左に寄せて記載
 \makeatother

ヘッダー、フッター内でよく使われる命令
:\thepage|ノンブル(ページ番号を出力)
:\hfil|横にいくらでも広がる空白
:\leftmark|ページに含まれる最後のマーク({A}{B})のひとつ目(A)
:\rightmark|ページに含まれる最初のマーク({A}{B})のふたつ目(B)
:\underline{文字列}|文字列に下線を引く