XSLTスタイルシートでFOツリーに変換するとき、XMLドキュメントの索引マークアップから、次のようにして巻末索引を作る。
索引キーは巻末の索引項目と、参照先索引用FOとの対応を付けるための値である。プロパティindex-keyプロパティの値として索引キーを指定する。index-keyはほとんどすべてのFOに関連付けられる。プロパティindex-classで索引の種別を示す。例えば章と付録、図など索引項目の所属などを分類できる。
各索引項目の見出しは、例えばfo:blockの内容である。fo:blockの子供としてfo:index-page-citation-list(索引ページ引用リスト)を置き、その子供としてfo:index-key-reference(索引キー参照)を置く。
fo:index-range-beginとfo:index-range-endは明示的に索引キーの始まりと終わりを示すFOである。fo:index-range-beginにはid、index-key、index-classの三つのプロパティを設定できる。fo:index-range-endのref-idは、fo:index-range-beginのidと同じ値にして開始と終了を対応付ける。次に例を示す。
<!--節の先頭は2ぺージ--> <fo:index-range-begin id="b01" index-key="XSL-FO" /> … <!--節の最後は6ページ--> <fo:index-range-end ref-id="b01" /> … <!--索引項目--> <fo:block>XSL-FO <fo:inline> </fo:inline> <fo:index-page-citation-list> <fo:index-key-reference ref-index-key="XSL-FO"/> </fo:index-page-citation-list> </fo:block>
組版結果は次の通り。
fo:index-page-citation-list(索引ページ引用リスト)は、索引キー参照で取得した索引語のページ番号を整理する役割である。索引ページ引用リストの子供には複数の異なる索引キーを置くことができる。
同一の索引キーで得られた同一ページ番号は,index-classが同じならば一つにまとめられる。異なる索引キーで得られた同一ページ番号のまとめ方は、次のプロパティで指定する。
プロパティmerge-pages-across-index-key-referencesプロパティは異なる索引キー参照で得られた同一ページ番号をまとめる(merge)か、まとめない(leave-separate)かを指定する。mergeであれば異なる索引キーで得られた同一ページ番号は一つになる。leave-separateであれば別に表示される。
プロパティmerge-sequential-page-numbersプロパティは索引キーが3ページ以上連続するときページ番号の表示を範囲形式にするかどうかを指定する。設定値は範囲にまとめる(merge(初期値))または範囲にまとめない(leave-separate)。ページ番号が連続するとは、次の三つをすべて満たすときである。
プロパティmerge-ranges-across-index-key-referencesプロパティは異なる索引キー参照で得られた範囲を一つにする(merge(初期値))か、しない(leave-separate)かを指定する。
次に範囲をまとめる例を挙げる。
<!--本文 3ページ--> <fo:wrapper index-key="XSLTプロセサ">…</fo:wrapper> … <!--本文 4ページ--> <fo:wrapper index-key="XSLTプロセサ">…</fo:wrapper> <fo:wrapper index-key="テンプレート">…</fo:wrapper> … <!--本文 5ページ--> <fo:wrapper index-key="XSLT">…</fo:wrapper> … <!--索引項目--> <fo:block>XSLTプロセサ<fo:inline> </fo:inline> <fo:index-page-citation-list merge-sequential-page-numbers="merge" merge-pages-across-index-key-references="merge" merge-ranges-across-index-key-references="merge"> <fo:index-key-reference ref-index-key="XSLTプロセサ"/> <fo:index-key-reference ref-index-key="テンプレート"/> <fo:index-key-reference ref-index-key="XSLT"/> </fo:index-page-citation-list> </fo:block>
この例では、3種類の索引キー参照で得られたページ番号を一つの範囲にまとめる。そこで索引項目の組版結果は次のようになる。
三つのプロパティを分離にする。
<fo:block>XSLTプロセサ<fo:inline> </fo:inline> <fo:index-page-citation-list merge-sequential-page-numbers="leave-separate" merge-pages-across-index-key-references="leave-separate" merge-ranges-across-index-key-references="leave-separate"> <fo:index-key-reference ref-index-key="XSLTプロセサ"/> <fo:index-key-reference ref-index-key="テンプレート"/> <fo:index-key-reference ref-index-key="XSLT"/> </fo:index-page-citation-list> </fo:block>
組版結果は次のようになる。
fo:index-page-citation-list-separatorはページ番号のリストでページ番号同士を分離する文字を指定する。fo:index-page-citation-range-separatorはページ番号の開始と終了の範囲を示す文字を指定する。fo:index-page-number-prefix、fo:index-page-number-suffixは索引キー参照で得られたページ番号に付ける接頭辞、接尾辞を指定するためのFOである。