2018年8月10日

jlreqをアップデートした.ページスタイルで「二番目の柱」を指定できるようにしたという,あまり使われることがなさそうな拡張.ページスタイルを定義する\DeclarePageStyleもほぼ一から書き直した.もともと読みにくいと思っていたので書き直したかったのだが,書き直してもあまり変わってねーな…….

で,この\DeclarePageStyleに関して質問があがっていた.この命令自身が少しわかりにくいのかもしれないのでもう少し詳しく書いてみる.以下では,新しくページスタイルを定義する版である\NewPageStyleを使う.

\NewPageStyleはLaTeXでのページスタイル(\pagestyleの引数に入るもの)を定義する.つまり,次のように使うことができる.

\NewPageStyle{mystyle}{<設定>}% ページスタイル「mystyle」を定義
\pagestyle{mystyle}% それを適用.

<設定>はkeyval型式で行われる.

柱とノンブル

LaTeXのページスタイルは,ヘッダとフッタを出力する.jlreqでは,ここに「柱」と「ノンブル」を出力する.各々の意味はJLReqの用語集にある通り.柱がそのときの見出し(\sectionの中身など)で,ノンブルがページ数である.\DeclarePageStyleでは,柱とノンブルの中身と,出力する場所を規定する.

場所

縦書きと横書き

ページスタイルには縦組と横組がある.縦組はJLReq 図2.48の(e)のような配置である.ドキュメント自身が縦組であるかとは基本的に無縁である*1.デフォルトは横組であり,縦組を指定する時はtateを指定する.

\NewPageStyle{mystyle}{tate,...}

より詳細な場所指定は,nombre_positionrunning_head_positionで指定をする.指定方法は縦組か横組かで大きく異なる.

場所指定:横組の場合

横組の場合,指定できる場所は次の2×3=6通りである.

  • 本文の上(top)か下(bottom)かで2通り.
  • 左(left),中央(center),右(right)で3通り.

例えばノンブルを本文上の左側に出力する場合はnombre_position=top-leftとする.topleftを逆にしてnombre_position=left-topでもよい.ノンブルを左上,柱を左下におく場合は次のようになる.

\NewPageStyle{mystyle}{nombre_position=top-left,running_head_position=bottom-left}

なお,ドキュメントクラスへのオプションとしてtwosideが指定されている場合,偶数ページの柱とノンブルの位置はここで指定した場所の左右が反転した位置になる.

場所指定:縦組の場合

縦組の場合,柱とノンブルの上下位置を指定することになる.原則として,柱は上の方,ノンブルは下の方に配置される(JLReq 2.6.1.d).従って,柱が本文上端からどの程度下がっているか,ノンブルが本文下端からどの程度上がっているかを指定する.

横組同様nombre_positionrunning_head_positionで指定をする.ただし指定方法は大きく異なり,nombre_positionはノンブル下端と本文下端との距離,running_head_positionには柱上端と本文上端との距離を,TeXが認識できる寸法で指定する.例えば柱は本文上端に合わせて出力し,ノンブルは本文下端から5文字分上げて出力する*2場合は次のようになる.

\NewPageStyle{mystyle}{tate,nombre_position=5\zw,running_head_position=0pt}

ノンブルの中身

ノンブルをどのような型式で出力するかは,nombreで指定できる.ページ数はpageカウンタ(LaTeXの意味でのカウンタ)に入っているので,これを参照することになるだろう.デフォルトはnombre=\thepageである.例えばこれを(\thepageを再定義することなく*3)小文字ローマ数字で出力することにするならば,

\NewPageStyle{mystyle}{nombre={\roman{page}}
とする.更に括弧でくくりたければ
\NewPageStyle{mystyle}{nombre={(\roman{page})}}
のようにすればよい.ちなみにページ数と全く関係ない値を指定することもできて,例えば
\NewPageStyle{mystyle}{nombre={のんぶる!}}
とするとノンブルの位置に常に「のんぶる!」と出力される.

柱の中身

柱の中身はodd_running_headおよびeven_running_headで指定する.それぞれ,奇数ページおよび偶数ページの柱を指定する.ただしeven_running_headはドキュメントクラスへのオプションとしてtwosideが与えられているときのみ有効で,そうでない時は常にodd_running_headが参照される.どちらも同様であるので,以下はodd_running_headのみ解説する.

固定されたものを出力するならば,そのまま指定すればよい.例えば

\NewPageStyle{mystyle}{odd_running_head={はしら!}}
とすると常に「はしら!」と出る.なお,実装の都合上ここで指定される値は頑強である必要がある.ただ,実際にはこういう使い方ではなく,以下で説明する見出しの中身を出力することが多いと思うが.

柱に見出しの中身を出力する

例えば

\section{はじめに}
とした時に,「はじめに」と柱に出てほしい,ということである.このときは

odd_running_head=_section
_<見出し命令名>と指定する*4.指定できる見出しは,標準で定義されている\part\chapter\section\subsection\subsubsection\paragraph\subparagraph\subsubparagraphの他,\NewBlockHeadingなどで独自に定義した命令も可能である.

\NewBlockHeading{myheading}{0}{...}% 新しい見出し命令「\myheading」を定義
\NewPageStyle{odd_running_head=_myheading}% \myheadingの引数を柱に出す
柱出力のカスタマイズ

見出しの中身をどのような形で出力するかは,mark_formatで指定する.各見出し命令ごとに設定をすることができる.例えば\section{はじめに}に対して「(はじめに)」と括弧でくくって出てほしければ

mark_format={_section={(#1)}}
とする*5#1\sectionの引数に変わる.更に節番号も出力したければ,
mark_format={_section={(\thesection\quad #1)}}
sectionカウンタを使えば良い.例えば
\NewPageStyle{mystyle}{
  odd_running_head=_subsection,
  even_running_head=_section,
  mark_format={_section={(節\thesection: #1)},_subsection={[#1]}}
}
\pagestyle{mystyle}
\section{はじめに}
\subsection{これまでの研究}
とすると,偶数ページの柱に「(節1: はじめに)」と出て,奇数ページの柱に「[これまでの研究]」と出る.なお,mark_formatのkeyにはoddevenも指定でき*6,それぞれ奇数ページと偶数ページの柱内容の指定になる.例えば上記の指定は次と等価である.

\NewPageStyle{mystyle}{
  odd_running_head=_subsection,
  even_running_head=_section,
  mark_format={even={(節\thesection: #1)},odd={[#1]}}
}

なお,2018-08-08版では以下のよう改行を挟むと指定が効かないようである.これはバグであり,近いうちに修正される.(2018-08-15で修正済み.)

\NewPageStyle{mystyle}{
  odd_running_head=_subsection,
  even_running_head=_section,
  mark_format={
    _section={(節\thesection: #1)},
    _subsection={[#1]}
  }
}

その他

次の指定ができる.

  • font={\small\bfseries}とすると,柱およびノンブルがやや小さい文字で太字で出力される.
  • gapは「横組」「ノンブルと柱が同じ場所に指定されている」時にのみ有効な値である.この場合ノンブルと柱が並んで出力されるが,この間の距離を指定する.例えばgap=1\zwとすると間に全角一文字分の空きができる.

二つ目の柱とノンブル

柱とノンブルは二つ指定することができる.指定方法は一つ目と全く同じで,nombre_iinombre_ii_positionodd_running_head_iieven_running_head_iiodd_running_head_ii_positionodd_running_head_iieven_running_head_ii_positionを使って指定する.mark_formatも同様に参照されるが,oddキーとevenキーは(現在のところ)参照されない.ちなみに更に_iiiも指定できたりする.

\ModifyHeading

既存のページスタイルからの改変を行うには\ModifyHeadingが便利である.例えば

\ModifyHeading{mystyle}{odd_running_head=_paragraph}
とするとmystyleスタイルの奇数ページ柱が\paragraphの中身となる.なお,
\NewHeading{mystyle}{mark_format={_section={節\thesection: #1},_subsection={(#1)}}}
\ModifyHeading{mystyle}{mark_format={_section={(#1)}}}
とすると\subsectionに対する柱中身の指定が失われることに注意.(mark_format全体の指定を上書きしてしまうため.)また,\ModifyHeadingで更新したページスタイルは,改めて\pagestyleで指定し直すことで初めて有効になる.

\pagestyle{mystyle}
\ModifyHeading{mystyle}{...}% ページスタイル「mystyle」を改変.ただし,この段階では古いmystyleがまだ有効である.
\pagestyle{mystyle}% これで初めて\ModifyHeadingによる改変が有効になる
*1
JLReqを読む限りは,ドキュメント自身が横組の時は柱/ノンブルも横組であるように思えるが.
*2
今は「柱のフォントサイズ」での5文字分になっている気がする.JLReq的には本文サイズの方がよさそうであるが.後で考える.
*3
\thepageを再定義する方を選ぶかどうかは,その他の位置での出力(\pagerefなど)との兼ね合いで決める.
*4
実際に柱に出るかはLaTeXカウンタsecnumdepthの値にもよる,のは標準ドキュメントクラスと同様である.
*5
_sectionのように,最初に_があることに注意.
*6
今度は_がないことに注意.

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です