XSL-FOの索引でページ番号が連続するとき、最初と最後のページ番号だけ表示して途中のページを省略するプロパティがあります。
- 索引キーが連続するページに登場する
- 索引キーのindex-classが同じである(index-classが異なるとマージ処理が指定されていても分離される)
- merge-ranges-across-index-key-referencesプロパティ”merge”が設定されている
このときmerge-sequential-page-numbers
へmerge
を指定いると、ページ番号表示が範囲形式にまとめられます。範囲形式のときに最初のページ番号と最後のページ番号の間の文字は<fo:index-page-citation-range-separator>
で指定可能です。
仕様にも「3ページ以上のとき」とあり、2ページのときはとくに何もしません。
この機能は、索引に指定した語の登場ページを列挙するときに表示をまとめる機能であり、「トピックと語がほぼ一致するので、索引表示はトピックの範囲が分かるようにしたい」という要望のためのものでは「ない」ということです。
具体的には、筆者は「2ページ連続のときも範囲形式で表示したい」とFOを記述しようとして「そういう機能ではない」という指摘を受けました。
ちなみに「トピックの範囲を常に範囲形式で表示したい」というときはどうするかについては、「トピックは必ず2ページ以上となる」という制約を付けられるのであれば(見開き2ページを基本構成とするなど)、<fo:page-number-citation>
を使えば良いでしょう。制約がないと、トピックが1ページの範囲のとき「3ページ-3ページ」のような表示になってしまうかもしれません。(<fo:static-content>
内のマーカ参照でのこういった重複については、AH XSL Formatterではaxf:suppress-duplicate-marker-contents
という拡張仕様があります。)
索引 22–2–2 連続ページ番号の範囲表示 | XSL-FOの基礎 第2版
索引自体の記述例はサンプルFOをご覧ください。
https://www.antenna.co.jp/AHF/ahf_samples/sample-fo.html#page-set