jlreq.cls,見出しにまつわる次のあたりはしっくりこない.どげんかせんといかん気もするが,気がしているだけでそのうち忘れそうなのでメモ.
目次
目次を作る機構.通常のarticleでは次のようになっている.
\section
など(から呼び出される\@startsection
)内で\addcontentsline
が呼び出される.\addcontentsline
は見出し文字列などの目次への追加を行うが,その際の整形は\contentsline
に回される.\contentsline
の実態は\l@<見出し命令名>
.- article.clsなどは
\l@<見出し命令名>
を個別に定義する.
jlreq.clsでもこの機構を踏襲し,\l@<見出し命令名>
を最終的に呼び出すようにしている(\@startsection
を使っているわけではないが).
しっくりこないのは,この\l@<見出し命令名>
である.従って,目次出力をカスタマイズしたければ,\l@<見出し命令名>
を再定義すればよい……のだが,@
入り命令なので,基本的にいじるように考えられているわけではない.
いじれないならいじれないのでよく,jlreq.clsには\Declare***Heading
という命令群があり,そこの中で\l@<見出し命令名>
を定義している.ただこの\l@<見出し命令名>
がきちんとできているのかが実はあまり自信がない.\l@<見出し命令名>
は通常\@dottedtocline
を呼び出す.この命令の第三引数には,ラベル部分の長さを指定する.この長さを自動で取得しないとならないのだが……今ので大丈夫なんでしょーか.ユーザレベルで書き換えられるならばちょっとくらい駄目でもいいんですが,上述のようにそういう感じの作りにはなっていないので…….
目次を出力するか否か
また目次話だけど.見出し命令を書いたとしても,目次への出力が行われるとは限らない.例えばarticle.clsの場合,*
付きだと出ない.もう少しややこしいのはbook.clsの\chapter
で,前付内ではラベルは目次に出力されない(見出し文字列のみになる)という動きをする.book.clsでは\chapter
を直接定義しているのでよいのだが,jlreq.clsとしてはあくまで\Declare***Heading
という汎用命令の枠組みで押さえないとならない.
というわけで苦し紛れに,\jlreq@heading@maketoc@<命令名>
という命令が見出し用命令から呼び出されるようにしてある.もちろん\Declare***Heading
内でとりあえずの定義がされるし,\jlreq@heading@maketoc@chapter
はクラスファイル内で再定義される.苦し紛れ感半端ねぇ…….
前付とか
book.clsには\frontmatter
とか\mainmatter
とかいう命令があって,jlreq.clsでもbook
オプション指定時に定義される.で,前付内では,\chapter
のラベルがでなかったりする.(上でも同じようなことを言っているけど,上は目次での話.こっちは実際の見出しの話.)jlreq.clsではこれを実現するために次のようにしている.
\frontmatter
で現在の\chapter
を\SaveHeading
を使って保存し,\ModifyHeading{chapter}{label_format={}}
を実行する.\mainmatter
で\chapter
を復帰させる.
というわけで\frontmatter
と\mainmatter
の間で
\chapter
が再定義されていたらアウトである.そんなことは普通ないだろうけど…….
もやもやはするけど,まぁこれはこれでよいかなと思うし,\frontmatter
とかをユーザが再定義すればいいかなと思うので(一般にこれが再定義するものだと思われてはいない気がするけど),前の二つに比べるとしっくりきてない度は低いのですが.
0 件のコメント:
コメントを投稿
コメントの追加にはサードパーティーCookieの許可が必要です