2022年4月4日

koma-scriptを使ってみようかと.正確にはkoma-scriptについているカスタマイズ機能を使ってみようかと.というわけで見出しのカスタマイズ.

見出しは\RedeclareSectionCommandで行うようだ.これは\renewcommandに対応するのだが,\newcommand\providecommandに対応する\DeclareNewSectionCommand\ProvideSectionCommandもある.強制的に定義するのは\DeclareSectionCommand.ちょっと注意しないとならないのがデフォルト値.各オプションはデフォルト値が決まっていたり,必須だったりするけど,既存の定義を上書きする場合には現在の定義にある値が使われる.例えば\RedeclareSectionCommand[]{section}とすると,全てのオプションの値が現在の\sectionのそれとして使われる.つまり,この指定は何もしていないのと同じ.

これらの命令の使い方はどれも同じで次のようにシンプル.

\RedeclareSectionCommand[attributes]{<見出し命令名>}

いやもちろんattributesがkeyval形式でたくさんいろいろ受け付けてくれるんですが.以下は説明がないために挙動から想像している部分もあるので間違いを含む可能性がある.ちなみに見出し命令名のことをentry levelと呼ぶらしい.

まずは「スタイル」を指定する.キーはstyleで,style=partstyle=chapterstyle=sectionが指定できる.それぞれのスタイルは大体こんな感じ.

  • part:scrreprtまたはscrbookの時は扉見出し.scrartclの時は直前で\cleardoublepageされる別行見出し.
  • chapter:scrreprtまたはscrbookの時は直前で\cleardoublepageされる別行見出し.scrartclの時は使えない.
  • section:直前に改行しない別行見出しまたは同行見出し.別行か同行かはオプションで指定する.

また,tocstyleキーにより目次のスタイルも指定できる.目次のスタイルはまた別の命令で定義できる.省略すると「default」スタイルになる.このスタイルはさらにtocindenttocnumwidthという二つのオプションを要求する.前者は目次でのインデント,後者は目次におけるラベル部分の長さ(多分).

スタイルごとに指定できるオプションは異なるが,以下は共通.

  • level:必須.見出しのレベル.
  • counterwithin:カウンタ名を指定する.ここに指定したカウンタに従属した見出しとなる.\subsectionの番号は1.3みたいになっていて,この1の方はsectionカウンタの値なので\subsectionの定義にcounterwithin=sectionを指定する,みたいなのだと思う.(実際のクラスファイル内ではそうはなっていないみたいだけど…….)
  • expandopttrueまたはfalseを指定する.長さに関するオプションが全てその場で計算される.例えば1emという値はそのときのフォントサイズに依存するが,このオプションが指定されていると見出しが定義されたそのときのフォントサイズにのみ依存して決まった値となる.デフォルトはfalse

また,ラベルの出力調整を\<見出し命令名>formatというコマンドを再定義することで行える.例えば\renewcommand{\sectionformat}{[\thesection]}とすると[]で囲まれてラベルが出る.

指定できるオプション

part / chapter

指定できるオプションは変わらない.

  • beforeskip:前空き.0ptにすると(前の行にくっつくのではなく)自然に組まれたようになる.以下で述べるafterindentbysignの時は絶対値が使われる.
  • afterskip:後空き.
  • afterindent:見出し直後の本文をインデントするか.truefalsebysignbysignを指定すると,beforeskipが正ならばインデントあり,そうでなければインデントなしとなる.
  • prefixfont:フォント設定コードを指定する.見出しのフォント.
  • font:フォント設定コードを指定する.見出し文字列のフォント.prefixfontに上書きされる形で適用される.(つまり,{<prefixfont> <ラベル> {<font> <見出し文字列>}}という形で適用される.
  • innerskip:寸法を指定する.ラベルと見出し文字列の間の空き.part + srcartclでは使えない.
  • pagestyle:見出しページでのページスタイル.part + srcartclでは使えない.
section

beforeskipafterskipは必須.

  • beforeskip:前空き.0ptにすると(前の行にくっつくのではなく)自然に組まれたようになる.以下で述べるafterindentbysignの時は絶対値が使われる.
  • afterskip:後空き.以下で述べるruninbysignの時は絶対値が使われる.
  • afterindent:見出し直後の本文をインデントするか.truefalsebysign.デフォルトはbysignで,これはbeforeskipが正ならばインデントあり,そうでなければインデントなしとなる.
  • runin:同行見出しにするか.truefalsebysign.デフォルトはbysignで,これはafterskipが正ならば別行見出し,そうでなければ同行見出しとなる.
  • indent:見出しのインデント.寸歩を指定.
  • font:フォント設定コードを指定する.見出しのフォント.

afterindent=bysignかつrunin=bysignの状態では\@startsectionと同じか?

\@startsection{<見出し命令名>}{<level>}{<indent>}{<beforeskip>}{<afterskip>}{<font>}

定義される命令

\DeclareSectionCommand{<name>}は,\<name>\<name>mark\l@<name>,カウンタ\<name>を定義するほか,\<name>format\<name>markformatいうコマンドも定める.

\なんとかlinesformatとかいろいろ

なんだか紛らわしいのだが,とにかくこんな感じの名前の命令を再定義すると対応するスタイルの出力を変更できる.実際の命令は次の通り.

  • partスタイルに対しては\partlineswithprefixformat
  • chapterスタイルに対してはchapterprefixオプション(これはクラスオプション)がtrueならば\chapterlineswithprefixformatで,そうれなければ\chapterlinesformat
  • sectionスタイルに対しては,別行見出しは\sectionlinesformat,同行見出しは\sectioncatchphraseformat

partとchapterに関しては,引数を三つとる命令として定義する必要があって,#1が見出し名,#2がラベル,#3が見出し文字列を表す.ただ調整用の改行とか空きとかも入っているので,#2#3はまとめて使った方がよさそう? 例えば次のようにすると見出しの出力が真ん中になる.

\renewcommand{\chapterlinesformat}[3]{\centering #2#3}

tcolorboxパッケージとかと併用すると見出しの枠囲みなんかも可能そう.

sectionに関しては引数が四つになる.#1が見出し名,#2がインデント量(擬似的な寸法レジスタ),#3がラベル,#4が見出し文字列を表す.

0 件のコメント:

コメントを投稿

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