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である。