第14章 ページ番号の処理

書籍や冊子のヘッダーやフッターにノンブルを入れたり、また目次や索引項目には参照先ページ番号を添えたりする。しかし、これらのページ番号は組版が終了したあとでないと決定できない。こうしたページ番号処理のために次のFOがある。

14–1 ページ番号

fo:page-numberページ番号)はインラインのFOであり、組版されると、自身が置かれているページのページ番号を内容に含むインラインエリアを生成する。ノンブルまたはページ番号を入れたい場所に、fo:page-numberを置いておけば、組版処理によりその場所のページ番号が確定すると、XSL-FOプロセサがfo:page-numberをその位置のページ番号に置き換える。

14–1–1 ページ番号開始値

ページ番号の開始値はページシーケンス毎にプロパティinitial-page-numberプロパティで設定する。initial-page-numberの値は次の通り。

表14・1 initial-page-numberプロパティ
プロパティ値説明
auto(初期値)最初のpage-sequenceでは1にセットする。前にpage-sequenceがあるときは、前のpage-sequenceのページ番号+1の値をセットする。
auto-oddautoと同じように値を決め、偶数ならば+1する。
auto-evenautoと同じように値を決め、奇数ならば+1する。
<number>正の値を指定する。

例えば、表紙や目次のページ数に関係なく、本文の先頭ページの番号を'1'から開始するには、本文のfo:page-sequenceのinitial-page-numberを'1'に設定する。

14–2 ページ番号を引用

fo:page-number-citationページ番号を引用)は索引、目次の項目、参照箇所等、特定のFOが存在するページのページ番号を引用するためのFOである。ページ番号を引用したい場所にfo:page-number-citationを置き、そのプロパティref-idプロパティに参照したいFOに付与されたidプロパティの値を設定する。参照先FOのidプロパティの値はfo名前空間の中で一意でなければならない。

表14・2 ref-id
プロパティ値説明
<idref>参照するFOのidプロパティの値を指定する。初期値はなく値を設定しなければならない。

ページ番号を引用

図14・1 ページ番号を引用

14–3 ページ番号文字列の書式

fo:page-number、fo:page-number-citationは、組版終了時にページ番号に置き換わる。印刷やPDFなどに出すときには、文字列に置き換る。文字列の書式は、fo:page-sequenceに次の表に挙げるプロパティによって設定する。

表14・3 ページ番号書式のプロパティ
プロパティプロパティ値説明
format<string>(初期値は'1')fo:page-sequenceに設定して、数値から文字列への変換を指定する。詳細はXSLTの仕様で定義されている。
grouping-separator<character>(初期値は'なし')fo:page-sequenceに設定して、数値から文字列への変換を指定する。詳細はXSLTの仕様で定義されている。
grouping-size<number>(初期値はグルーピングなし)fo:page-sequenceに設定して、数値から文字列への変換を指定する。詳細はXSLT の仕様で定義されている。
letter-valueauto(初期値)またはalphabeticまたはtraditionalfo:page-sequenceに設定して、数値から文字列への変換を指定する。詳細はXSLTの仕様で定義されている。
countryなし(初期値)または<country>ISO 3166による国の指定
languageなし(初期値)または<language>ISO 639-2による言語の指定。2文字または3文字コード

主なプロパティはプロパティformatである。次にformatによる番号の種類指定の例を示す。

format='1' 1,2,3 ....
format='1' 1,2,3 ....
format='(1)'(1),(2),(3),(4) ....
format='01'01,02,03,04 ....
format='一'一,二,三,四....
format='A'A B C ... Z AA AB AC....
format='a'a b c ... z aa ab ac....
format='i' i ii iii iv v vi vii viii ix x ....
format='I' I II III IV V VI VII VIII IX X ....
format="ア" カタカナの番号付けを指定
format="イ" カタカナをイロハ順に指定
format="&#x0661;" (ARABIC-INDIC DIGITS)
format="&#x06F1;" (EXTENDED ARABIC-INDIC DIGITS)
format="&#x0967;" (DEVANAGARI DIGITS)
format="&#x09E7;" (BENGALI DIGITS)
format="&#x0A67;" (GURMUKHI DIGITS)
format="&#x0AE7;" (GUJARATI DIGITS)
format="&#x0B67;" (ORIYA DIGITS)
format="&#x0C67;" (TELUGU DIGITS)
format="&#x0CE7;" (KANNADA DIGITS)
format="&#x0D67;" (MALAYALAM DIGITS)
format="&#x0E51;" (THAI DIGITS)
format="&#x0ED1;" (LAO DIGITS)
format="&#x0F21;" (TIBETAN DIGITS)

14–4 ページ番号への接頭辞と接尾辞

ページシーケンス単位でページ番号にfo:folio-prefix(接頭辞)とfo:folio-suffix(接尾辞)を指定できる。ページ番号の接頭辞と接尾辞は、fo:page-sequenceの子供として指定する(3–3 ページシーケンスを参照)。またfo:page-number-citationをページ番号に置き換えるとき接頭辞と接尾辞も一緒に付く。

次はページ番号、ページ番号参照、ページ番号の接頭辞、接尾辞を指定した例である。ページ番号の種類をformat="I" によりローマ数字とし、fo:folio-prefix、fo:folio-suffixでページ番号の前後に序章、頁を付与する。序章の本文には<fo:page-number-citation ref-id="text1" background-color="#DDDDDD">により章の文章のページ番号参照を設定している(以上、アンダーラインを付与)。

  …略…
<fo:simple-page-master margin="0mm" 
                       master-name="PageMaster"
                       page-height="64mm" 
                       page-width="95mm">
  <fo:region-body border="0.2pt solid gray" 
                  margin="8mm 8mm 8mm 8mm"/>
  <fo:region-after extent="5mm"
                   background-color="#EFEFEF"/>
</fo:simple-page-master>
  …略…   
<!-- 1ページ目 -->
<fo:page-sequence master-reference="PageMaster" 
                  initial-page-number="1"  
                  format="I" 
                  force-page-count="no-force">    
  <fo:folio-prefix>序章</fo:folio-prefix>
  <fo:folio-suffix>頁</fo:folio-suffix> 
  <fo:static-content flow-name="xsl-region-after">
    <fo:block text-align="center" font-size="0.9em">
      <fo:page-number  text-decoration="underline" />
    </fo:block>
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">
    <fo:block font-size="20pt" 
              font-family="sans-serif" 
              id="headinga">
      序章 見出しA</fo:block>
    <fo:block text-indent="1em" 
              text-align="justify" >
     …略… 
     詳しくは<fo:page-number-citation ref-id="text1" background-color="#DDDDDD"/>
     で説明します。
    </fo:block>
  </fo:flow>
</fo:page-sequence> 

組版結果を図14・2 序章の組版結果に示す。網掛(background-color="#DDDDDD")部分はIDで参照しているfo:inlineオブジェクトのページ番号が組み込まれている。

序章の組版結果

図14・2 序章の組版結果

次は二つ目のページシーケンスである章である。章のページ番号には接尾辞のみを付与する。また、章の本文には<fo:inline id="text1">XSL仕様</fo:inline>として参照されるテキストにidを設定している。

<!-- 2ページ目 -->
<fo:page-sequence master-reference="PageMaster" 
                  initial-page-number="1" 
                  force-page-count="no-force">    
   <fo:folio-suffix>頁</fo:folio-suffix> 
   <fo:static-content flow-name="xsl-region-after">
    <fo:block text-align="center" font-size="0.9em">
      <fo:page-number text-decoration="underline"  /> 
    </fo:block>
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">   
    <fo:block font-size="20pt" 
              font-family="sans-serif" 
              id="headingb">
       本章 見出しB
    </fo:block>      
    <fo:block text-indent="1em" 
               text-align="justify">
      <fo:inline id="text1">XSL仕様</fo:inline>は …略… 
    </fo:block>
  </fo:flow>
</fo:page-sequence> 

組版結果を図14・3 本文の組版結果に示す。

本文の組版結果

図14・3 本文の組版結果

14–5 fo:page-number-citation-last

fo:page-number-citation-lastは参照対象FOの最後のページ番号を引用するためのFOである。例えば、章などを参照するとき、参照する章の範囲をページ番号で示すとき、fo:page-number-citationと共に使う。プロパティpage-citation-strategyプロパティで参照対象FOの最終ページを判断する制約条件を指定し、fo:page-number-citation-lastは、その制約を満たす領域の最後のページ番号に置き換わる。

表14・4 page-citation-strategyプロパティ
プロパティ値説明
all(初期値)参照されたFOのref-idトレイトに一致するすべてのページ。参照されたFOが生成する空白ページを含む。
normal正規エリア(脚注やフロートなどを除いて本文ブロックとして積み上げられるエリア)を含むページ。
non-blank脚注やフロートのような(正規エリアでない)領域を含むページ。