柱などの設定を行います.つまり,\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の許可が必要です