柱などの設定を行います.つまり,\pagestyle
に指定するページスタイルを作ります.
マークについて
マークについておさらいをしておきます.標準クラスファイルのheadingsページスタイルでは,そのときの\section
や\subsection
の中身が出力されます.TeXでは,柱として出力したいテキストを「マーク」として保存し,実際にヘッダなどを出力する際に取り出すことができます.これを使い,次のような順で柱の出力が行われます.
\section
や\subsection
(の内部で使われている\@startsection
)から\sectionmark
や\subsectionmark
が呼び出される.\sectionmark
は「左のマーク」に現在見出しを,右のマークに空文字列を設定する.\subsectionmark
は右のマークに現在見出しを設定する.左のマークはそのままにする.- 柱が出力される際に,偶数ページならば左のマークが,奇数ページならば右のマークが参照される.
マークの設定 / 取得には以下の命令を使います.
\markboth{<左のマーク>}{<右のマーク>}
で両方のマークを設定する.\markright{<右のマーク>}
で右のマークを設定する(左のマークはそのまま).\leftmark
と\rightmark
で,それぞれ左のマークと右のマークが取得できる.
通常,\sectionmark
や\subsectionmark
などの定義は\pagestyle
でペーシスタイルを設定した際に定義されるようです.以下のページスタイルの設定でこの定義を入れることにします.
\@mkboth
\tableofcontents
や索引などの中では,\@mkboth
というマクロが呼ばれています.これは,\section
における\sectionmark
と同様の立ち位置です.必要ならば\@mkboth
を再定義する必要があります.通常,\let\@mkboth=\markboth
とするか,\def\@mkboth#1#2{}
*1とするかします.
ページスタイル
\pagestyle{<style>}
の実態はマクロ\ps@<style>
の呼び出し.このマクロをクラスファイル内で定義します.
\@oddhead
,\@oddfoot
,\@evenhead
,\@evenfoot
.必須です.命令名から明らかかと思いますが,それぞれ奇数ページのヘッダ,奇数ページのフッタ,偶数ページのヘッダ,偶数ページのフッタを定めます.ただし,\@twosidetrue
を実行していない場合は常に奇数ページのものが適用されます.\@mkboth
.必要ならば.\<見出し命令名>mark
.必要なもののみ.
標準クラスファイルと同様に,empty,plain,headings,myheadingsを定義するようにします.なおemptyとplainはLaTeX内で定義されているます.特にemptyは改めて定義する必要は無いでしょう.といいながら以下では一応定義を書いてみますが.まずはemptyとplainです.
\def\ps@empty{% emptyスタイル,全て空
\def\@mkboth##1##2{}%
\def\@oddhead{}%
\def\@oddfoot{}%
\def\@evenhead{}%
\def\@evenfoot{}%
}
\def\ps@plain{% plainスタイル.ページ数のみを出す.奇数ページで右下,偶数ページで左下に出るようにする.
\def\@mkboth##1##2{}%
\def\@oddhead{}%
% 既定ではヘッダは傍注部分を無視した本文の上に出るので,それを傍注の部分にまでかかるように調整する
\def\@oddfoot{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\hfil\thepage}\hskip -\dimexpr\marginparsep + \marginparwidth\relax}%
\def\@evenhead{}%
\def\@evenfoot{\hskip -\dimexpr\marginparsep + \marginparwidth\relax\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\thepage\hfil}}%
}
もちろん傍注を使わない / よくある「傍注を無視した本文部分のみにヘッダやフッタが出る」という挙動で良いのであればそれに関する調整は不要です.headingsは次の通り.ページ数はplainと同じ場所,柱はその上に出すことにします.ついでに下線も引いてみましょう.
\def\ps@headings{% headingsスタイル.
\let\@mkboth=\markboth
\def\sectionmark##1{\markboth{##1}{}}% 左のマークを\sectionの見出しとし,右マークをクリア
\def\subsectionmark##1{\markright{##1}}% 右のマークを設定
% 右上に\subsectionの見出し
\def\@oddhead{\underline{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\hfil\rightmark}}\hskip -\dimexpr\marginparsep + \marginparwidth\relax}%
\def\@oddfoot{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\hfil\thepage}\hskip -\dimexpr\marginparsep + \marginparwidth\relax}%
% 左上に\subsectionの見出し
\def\@evenhead{\hskip -\dimexpr\marginparsep + \marginparwidth\relax\underline{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\leftmark\hfil}}}%
\def\@evenfoot{\hskip -\dimexpr\marginparsep + \marginparwidth\relax\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\thepage\hfil}}%
}
myheadingsはheadingsから\sectionmark
などを空にしたものです.
\def\ps@myheadings{% headingsスタイル.
\def\@mkboth##1##2{}%
\def\sectionmark##1{}%
\def\subsectionmark##1{}%
\def\@oddhead{\underline{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\hfil\rightmark}}\hskip -\dimexpr\marginparsep + \marginparwidth\relax}%
\def\@oddfoot{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\hfil\thepage}\hskip -\dimexpr\marginparsep + \marginparwidth\relax}%
\def\@evenhead{\hskip -\dimexpr\marginparsep + \marginparwidth\relax\underline{\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\leftmark\hfil}}}%
\def\@evenfoot{\hskip -\dimexpr\marginparsep + \marginparwidth\relax\hbox to \dimexpr\textwidth + \marginparsep + \marginparwidth\relax{\thepage\hfil}}%
}
縦書き
縦書きでも基本は同じですが,\marginparwidth
などは考慮しなくて良くなります.
- *1
- LaTeX内では
\long\def\@gobbletwo#1#2{}
により定義されているマクロ\@gobbletwo
があるので,このマクロを使い\let\@mkboth=\@gobbletwo
とすることもできます.こちらの方が多いようです.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です