TOC プラグインは,Movable Type で目次を自動生成するプラグインです.TeX における「\tableofcontents」を意識しています.
章立てが必要なほど長いエントリを書くなという意見ももっともだと思うのですが,そんなエントリを書いてしまったものは仕方がないわけでして.では,書いてしまったものをどう見やすくするかと考えると,やっぱり目次があった方が良いわけでして.
というわけで,h[1-6] 要素を収集して目次を自動生成するプラグインを作ってみました.ついでに,章番号も自動でつける *1ようにしてみました.
1. はじめに
TOC プラグインは,エントリ内の h[1-6] 属性を抽出し,それをもとに目次を自動生成します.また,必要に応じて,章番号等も挿入します.なお,本プラグインについて,私は一応著作権を主張しますが,改変,再利用等自由にやっていただいて構いません.また,使用上何か問題があっても,一切の責任は負いません.
2. 導入
2.1. Macros プラグイン
本プラグインは,Brad Choate 氏による Macros プラグインの下で動作します.インストールしていない場合は,まずこれをインストールしてください.なお,Macros プラグイン導入の簡単な説明は,"Footnote Plugin" の中にありますので,必要に応じて参照してください.
2.2. TOC プラグインの導入
mt-toc.pl をダウンロードし,「(mt.cgi があるディレクトリ)/plugins/mt-toc.pl」にコピーしてください.
- mt-toc.pl (2004/03/06)
3. 設定
3.1. 定義
本プラグインを利用するための設定は,各テンプレートの中に記述します.これらは,次の3つの定義からなります.
- 初期化部
- 適用部
- 出力部
本プラグインを適用したい部分より前に,以下を記述してください *2.これらは連続して記述する必要はありませんが,この順序で読み込まれる必要があります.
3.1.1. 初期化部
ここでは,TOC プラグインの初期化について定義します.後述の出力部と同じタグ *3を利用することにより,エントリを記述する際にはエントリを記述する際には初期化部を意識する必要はありません.
<MTMacroDefine name="toc_init" tag="toc">
<MTTOCInit
ignore="no_toc"
max_depth="[MTMacroAttr name='max_depth' default='6']">
<toc>
</MTMacroDefine>
3.1.2. 適用部
ここでは,TOC プラグインを適用する部分,即ち目次として情報を収集する部分を定義します.また,章番号等を挿入したい場合も,ここに記述します.
<MTMacroDefine
name="toc_set"
pattern="m!(<h([1-6])[^>]*>)(.*?</h\2>)!">
<MTTOCSet
match="[MTMacroMatch position='1']"
depth="[MTMacroMatch position='2']"
value="[MTMacroMatch position='3']">
<MTMacroMatch position="1">
<MTIfTOC>
<a id="toc-<$MTEntryID$>-<$MTTOCCounter glue='-'$>">
<MTTOCCounter glue=".">. </a>
</MTIfTOC>
<MTMacroMatch position="3">
</MTMacroDefine>
3.1.3. 出力部
ここでは,目次を出力する様式について定義します.
<MTMacroDefine name="toc" tag="toc">
<MTTOC>
<ul>
<MTTOCItems>
<li>
<MTTOCItemBody>
<a href="#toc-<$MTEntryID$>-<$MTTOCCounter glue='-'$>">
<$MTTOCCounter glue='.'$>. <MTTOCItem remove_html="1"></a>
</MTTOCItemBody>
</li>
</MTTOCItems>
</ul>
</MTTOC>
</MTMacroDefine>
3.2. 適用範囲の指定
これまで Macros プラグインを使用していなかった場合は,Macros プラグインを適用する範囲 *4を指定する必要があります.通常は,「<MTEntryBody>」「<MTEntryMore>」に適用することになりますから,これらを「<MTMacroApply><MTEntryBody></MTMacroApply>」「<MTMacroApply><MTEntryMore></MTMacroApply>」と書き換えてください.
4. 使用方法
エントリ内で目次を表示させたい場所に「<toc>」と記述します.表示する目次の深さを制限したい場合は,「<toc max_depth="3">」のように記述します.ただし,ここで指定する深さは,トップレベルからの相対的な深さではなく,この例の場合は「h3 要素」までが表示の対象になります.また,部分的に TOC プラグインの対象から外したい場合は,「<h2 class="no_toc">」のように class 等の属性値に「no_toc」という文字列を含めます *5.逆にいえば,「no_toc」が含まれていない h[1-6] 要素は,TOC プラグインの対象となります.
トップレベルは「h1 要素」である必要はなく,最初に登場した(かつ,ignore 属性で除外されなかった要素)が自動的にトップレベルとして扱われます.
5. 各タグの説明
- MTTOCInit
- そのエントリで TOC プラグインを使用することを宣言し,初期化を行います.このタグは,値を何も返しません.
- ignore
- 部分的に TOC プラグインの対象から外したい要素に含まれる文字列を正規表現で定義します.
- max_depth
- 目次の対象となる深さを指定します.この値は,トップレベルからの相対的な深さではなく,「3」と指定したの場合は「h3 要素」までが表示の対象になります.
- MTTOCSet
- 目次情報を記憶します.
- value
- 目次情報として記憶する文字列
- depth
- この要素の深さ
- match
- 前述の ignore 属性値が,この属性値にマッチする場合は,対象から除外されます.
- MTIfTOC
- 条件タグです.エントリで MTTOCInit で TOC プラグインの使用が宣言されており,かつ直前に MTTOCSet で記憶使用とした要素に前述の ignore 属性値がマッチしなかった場合に真となります.
- MTTOCCounter
- 章番号等を出力します.各深さでのカウンタ値を浅いものから順に出力します.
- glue
- 各カウンタ値の間に出力する文字列を指定します.
- MTTOC
- コンテナタグであり,この中で目次を出力する様式を指定します.最初の文字項目や,直前の項目より深い項目を表示させる際に,繰り返し出力されます.
- MTTOCItems
- コンテナタグであり,同じ深さの項目が続く間,繰り返し出力されます.
- MTTOCItemBody
- コンテナタグであり,各目次要素の表示様式を指定します.次の目次要素が現在の目次要素よりも深い場合は,このタグの直後に出力されます.
6. 更新履歴
- 2008-10-6 ダウンロードリンクが間違っていたので修正しました。
- 2004-3-6 変数の初期化を修正
- 2004-2-9 公開

コメントする