第3章 ページマスターとページシーケンス

ページマスターはページの雛形を設定する。ページシーケンス(3–3 ページシーケンスを参照)は子孫としてテキスト・表・画像などドキュメントの内容を含むFOである。XSL-FOプロセサによる組版では、ページシーケンスの内容をページマスターに流し込んで組版済みのページを生成する。ページマスターにはページマスターには①単純ページマスター(本章で解説する)と②ページシーケンス・マスター(4–3 ページシーケンス・マスターを参照)がある。

3–1 単純ページマスター

fo:simple-page-master単純ページマスター)はページを規定するFOである。その子供には必須のfo:region-body(本文区画)、オプションとしてregion-before(前方区画)、region-after(後方区画)、region-start(開始区画)、region-end(終了区画)が設定される。

単純ページマスターの構造

図3・1 単純ページマスターの構造

3–1–1 単純ページマスターのプロパティ

fo:simple-page-masterの重要なプロパティはmaster-name(必須)、page-heightとpage-width、およびマージンの3種類である。他にreference-orientation(5–4 参照方向を参照)、writing-mode(5–5 ライティングモードを参照)を指定できる。

プロパティmaster-nameプロパティには単純ページマスターの名前を設定する。単純ページマスターの名前はぺージシーケンスから参照される。また、後述のfo:single-page-master-reference、fo:repeatable-page-master-reference、fo:conditional-page-master-referenceが単純ページマスターを使用するときにも参照される。

表3・1 master-nameプロパティ
プロパティ値説明
<name>(初期値は空)文字列の指定が必須である。単純ページマスターまたはページシーケンス・マスター(4–3 ページシーケンス・マスター)に適用する。名前はすべての単純ページマスターとページシーケンス・マスターを通じてユニークでなければならない。

ページの大きさは、ページの高さをプロパティpage-heightプロパティで、ページの幅をプロパティpage-widthプロパティで指定する。単純ページマスターに設定するページの高さとページの幅は仕上がりサイズである。

表3・2 page-heightとpage-widthプロパティ(共通)
プロパティ値説明
auto(初期値)ユーザーインターフェイスのウィンドウの高さまたは幅から、または媒体から設定される。媒体が不明のときは実装依存である。
indefinite未定。このときは内容の大きさから設定される。page-heightとpage-widthの両方とも未定義ではいけない。
<length>高さまたは幅を長さで指定する。

ページの中央にはテキストを配置する版面領域を置き、上下左右に空きをとる。それぞれをプロパティmargin-topプロパティmargin-bottomプロパティmargin-leftプロパティmargin-rightプロパティで指定する。この四つと次のmarginショートハンドで設定する余白を総称してマージンという。単純ページマスターのマージンにはオブジェクトを配置しないのが基本である。

表3・3 margin-top、margin-bottom、margin-left、margin-rightプロパティ(共通)
プロパティ値説明
autoCSSとの互換用なので、計算方法はCSSの仕様を参照のこと。
<length>初期値は0pt。上下左右のマージンを固定の長さで指定する。
<percentage>外側の領域の大きさに対する割合で示す。

プロパティmarginプロパティはショートハンドである。ショートハンドはCSSとの互換性のために用意されたもので指定方法はCSSと同じである。XSL-FOプロセサはマージンのショートハンドを次のように四辺に展開する(6–6 ショートハンド・プロパティを参照)。

  • marginの値が1個のときは、四辺に同じ値を設定する。
  • marginの値が2個のときは、最初の値を上と下に、次の値は左と右に適用する。
  • marginの値が3個のときは、最初の値を上に、次の値は左と右に、三つ目の値は下に適用する。
  • marginの値が4個のときは、最初の値から順に、上、右、下、左に適用する。

3–2 本文区画

fo:region-body本文区画)は本文を配置する区画である。本文区画は区画の設定のみ行うもので内容はない(空要素である)。単純ページマスターのマージンの内側に配置され、本文区画の高さと幅は単純ページマスターの高さと幅から単純ページマスターのマージンを引いた値である。

さらに本文区画には上下左右にマージンを定義できる。単純ページマスターと本文区画のマージンの関係を図3・2 単純ページマスターと本文区画のマージンに示す。

i01-image3.emf

図3・2 単純ページマスターと本文区画のマージン

本文区画の高さと幅から本文区画のマージンをとった内側が本文テキストなどを配置する領域(本文内容領域)である。つまり、ページの端から本文内容領域までの空き(距離)は、単純ページマスターのマージンと本文区画のマージンの合計となる。

本文区画の重要なプロパティには後述のregion-name(区画の名前)がある。その他のプロパティは3–2–4 区画のプロパティに一覧する。なお、XSL-FO V1.1から単純ページマスターに複数の本文区画を設定できるようになった。本書では複数の本文区画については解説しない。

3–2–1 周囲の区画

本文区画の上下左右のマージンの中にオプションでfo:region-before(前方区画)、fo:region-after(後方区画)、fo:region-start(開始区画)、fo:region-end(終了区画)の四つの区画を規定できる。本文区画と四つの周囲の区画はfo:simple-page-masterの子供(区画同士は兄弟)であるが、領域の配置上は本文区画のマージン内に周囲の区画が置かれる。各区画の広さをプロパティextentプロパティで指定する。周辺区画は単純ページマスターのマージンに寄せて配置されるので、extentが本文区画のマージンの幅より小さいときは、本文内容領域と周辺区画の間に空きができる。

i01-image4.emf

この図は単純ページマスターが正立で横組の区画配置である。単純ページマスターの参照方向を回転したり、ライティングモードで縦組を設定したりすると区画の配置が変わる。詳細は5–8 単純ページマスターの回転・ライティングモード適用で説明する。

図3・3 区画のextent
表3・4 extentプロパティ
プロパティ値説明
<length>初期値は0.0pt。0以上の値。マイナス値は0とする。
<percentage>区画の幅。ページの大きさに対する相対値として指定する。

3–2–2 区画の名前

プロパティregion-nameプロパティには区画の名前を設定する。region-nameを設定しないときは表3・6 区画名の初期値に示す初期値となる。region-nameを設定するときは名前を空にできない。

表3・5 region-nameプロパティ
プロパティ値説明
xsl-region-body、xsl-region-start、xsl-region-end、xsl-region-before、xsl-region-after表3・6 区画名の初期値による初期値。
<name>名前の文字列。
表3・6 区画名の初期値
区画の種類region-nameを指定しないときの初期値
fo:region-bodyxsl-region-body
fo:region-beforexsl-region-before
fo:region-afterxsl-region-after
fo:region-startxsl-region-start
fo:region-endxsl-region-end

3–2–3 区画の優先度

前方区画と開始・終了区画が同時に設定されているとき、または後方区画と開始・終了区画が同時に設定されているとき隅が重なる。プロパティprecedenceプロパティでどちらを優先するか設定する。

表3・7 precedenceプロパティ
プロパティ値説明
trueまたはfalse(初期値)(region-beforeとregion-after区画のみ)ページのマージン内一杯まで広がる(true)か広がらない(false)か

3–2–4 区画のプロパティ

本文区画と周辺区画に設定できるプロパティを表にまとめると次の通り。

表3・8 区画のプロパティ
プロパティ本文区画前方区画/後方区画開始区画/終了区画参照箇所
region-name
マージン
背景第9章 背景
extent
precedence
overflow11–4 オーバーフロー
clip
display-align5–6 ブロック方向位置合わせ
reference-orientation5–4 参照方向
writing-mode5–5 ライティングモード
段組4–6 段組

この他、ボーダ―(第8章 ボーダー(罫線)とパディング)、パディングは、本文区画、前方区画/後方区画、開始区画/終了区画に設定できる。しかし、XSL-FO V1.1ではこれらの幅はゼロでなければならないとされている(AH Formatter は独自拡張で罫線を評価している。)

3–2–5 単純ページマスターの設定例

単純ページマスターの設定例を次に示す。次のようなページを設定している。

  • fo:simple-page-masterの名前を"PageMaster1"と"PageMaster2"とする。
  • 用紙サイズはpage-height="80mm"、page-width="160mm"とする
  • ページの上下に10mm、ページの左右に20mmのページマージンを設定する。
  • fo:region-body(本文区画)は上下左右のマージンを20mmとする。背景色に"#EEEEEE"を設定する。
  • fo:region-beforeとfo:region-afterのextent(高さ)は15mmとする。背景色に"#BBBBBB"を設定する。
  • fo:region-startとfo:region-endのextent(幅)は20mmとする。背景色に"#E0E0E0"を設定する。
<fo:simple-page-master page-height="80mm" 
                       page-width="160mm" 
                       margin-top="10mm" 
                       margin-left="20mm" 
                       margin-right="20mm" 
                       margin-bottom="10mm" 
                       master-name="PageMaster1">
  <fo:region-body margin-top="20mm" 
                  margin-left="20mm" 
                  margin-right="20mm" 
                  margin-bottom="20mm" 
                  background-color="#EEEEEE"
                  display-align="center" />
  <fo:region-before background-color="#BBBBBB" 
                    extent="15mm" />
  <fo:region-after background-color="#BBBBBB" 
                   extent="15mm" />
  <fo:region-start background-color="#E0E0E0" 
                   extent="15mm" />
  <fo:region-end background-color="#E0E0E0" 
                 extent="15mm"/>
</fo:simple-page-master>	

組版結果は図3・4 単純ページマスターの区画設定例のようになる。

images/region-preference--epub--.png

図3・4 単純ページマスターの区画設定例

次に"PageMaster2"というページマスターでfo:region-beforeとfo:region-afterのprecedence="true"を設定する。

<fo:simple-page-master …略… master-name="PageMaster2">
  <fo:region-before background-color="#BBBBBB" 
                    precedence="true" 
                    extent="15mm" />
  <fo:region-after background-color="#BBBBBB" 
                   precedence="true" 
                   extent="15mm" />
  …略(PageMasterと同じ)… 
</fo:simple-page-master> 
…流し込むテキスト(ページシーケンス)省略しているので注意…

“PageMaster2”では、前方区画と後方区画が優先される。

images/region-preference2--epub--.png

図3・5 単純ページマスターの区画設定例2

3–3 ページシーケンス

fo:page-sequence(ページシーケンス)はページマスターに流し込む内容を表す。

ページシーケンスの子供にはfo:flow(3–4 フロー内容)が必須で、オプションでfo:title(3–7 タイトル)、fo:folio-prefixとfo:folio-suffix(14–4 ページ番号への接頭辞と接尾辞)とfo:static-content(3–5 静的内容)を持てる。ページシーケンスの必須プロパティはmaster-referenceである。その他重要なプロパティはinitial-page-number、force-page-count、reference-orientation(参照方向)、writing-mode(ライティングモード)である。参照方向は5–4 参照方向、ライティングモードは5–5 ライティングモードで説明する。

3–3–1 マスター参照プロパティ

プロパティmaster-reference(マスター参照)プロパティは必須のプロパティであり、ページシーケンスを流し込むページマスターの名前(master-name)を設定する。複数のページシーケンスで同じページマスターを参照できる。

表3・9 master-referenceプロパティ
プロパティ値説明
<name>(初期値は空)文字列の指定が必須である。XSL-FOドキュメント内に存在するmaster-nameの値のどれかでなければならない。

master-referenceプロパティは、fo:single-page-master-reference、fo:repeatable-page-master-reference、fo:conditional-page-master-referenceにも設定する。

3–3–2 開始ページ番号プロパティ

プロパティinitial-page-number(開始ページ番号)プロパティはページシーケンスの開始ページ番号を設定する。

表3・10 initial-page-numberプロパティ
プロパティ値説明
auto(初期値)前にページシーケンスがなければ1から。あれば、前の最後のページ番号に1を加えたページ番号から開始する。
auto-oddautoと同じように開始ページ番号を計算し、偶数なら1を加える。
auto-evenautoと同じように開始ページ番号を計算し、奇数なら1を加える。
<number>自然数を指定する。指定したページ番号から開始する。

3–3–3 ページ数強制プロパティ

プロパティforce-page-count(ページ数強制)プロパティはページシーケンスのページ数を強制する。例えば、値に“even”を指定したとき、ページ数が奇数になったら最後に1ページを追加する。

表3・11 force-page-countプロパティ
プロパティ値説明
auto(初期値)次のページシーケンスの開始ページ番号が偶数ページであれば最後を奇数ページにする。次のページシーケンスの開始ページ番号が奇数ページであれば最後を偶数ページにする。次のページシーケンスの開始ページに制約がなければなにもしない。
evenこのページシーケンスのページ数を偶数にする。
oddこのページシーケンスのページ数を奇数にする。
end-on-evenこのページシーケンスの最終ページ番号を偶数にする。
end-on-oddこのページシーケンスの最終ページ番号を奇数にする。
no-force 制約しない。

3–4 フロー内容

fo:flowフロー内容)の内容は本文のブロックレベルのFOである。flow-nameには流し込み先の区画名を指定する。本文区画の名前は初期値ではxsl-region-bodyなので、本文区画の名前を明示的に変更していないときは、flow-name="xsl-region-body"とする。

fo:page-sequenceは次のような構造になる。

<fo:page-sequence master-reference="PageMaster" 
                  initial-page-number="1">
  <fo:static-content flow-name="xsl-region-before">
    …ヘッダーの内容…
  </fo:static-content>
  <fo:static-content flow-name="xsl-region-after">
    …フッターの内容…
  </fo:static-content>
  <fo:flow flow-name="xsl-region-body">
   …本文の内容…
  </fo:flow>
</fo:page-sequence>

3–5 静的内容

fo:static-content静的内容)は、ページの柱やノンブルのような原則として多くのページで繰り返すか、一定の形式となる内容である。柱やノンブルを別々に静的内容にしていくつでも配置できる。静的内容の子供はブロックレベルのFOである。fo:static-contentにはプロパティflow-nameプロパティで流し込み先の区画の名前を指定する。

表3・12 flow-nameプロパティ
プロパティ値説明
<name>(初期値は空)文字列の指定が必須である。ページシーケンス単位でユニークでなければならない。

flow-nameプロパティ値は静的内容またはフロー内容に対し、それを流し込む先を指定する。次の値はXSL-FO仕様で流し込み先が( )内に決まっている:xsl-region-body(本文区画)、xsl-region-before(前方区画)、 xsl-region-after(後方区画)、xsl-region-start(開始区画)、xsl-region-end(終了区画)、xsl-before-float-separator(前方フロート境界)、xsl-footnote-separator(脚注境界)

横組ページで柱をページの上、ノンブルをページの下に置く場合は次のようにする。

  1. 単純ページマスターにfo:region-before(前方区画)とfo:region-after(後方区画)を用意する(2、3項はそれぞれ区画の名前を初期値のままとしたときの例である)。
  2. 柱用の内容をもつfo:static-contentを用意し、flow-name="xsl-region-before"とする。
  3. ノンブル用の内容をもつfo:static-contentを用意し、flow-name="xs-region-after"とする。

3–6 流し込み区画の対応付け

ページシーケンスの子供のフロー内容は本文区画に流し込む。静的内容をどの区画に流し込むかの対応付けは、プロパティflow-nameプロパティの値で設定する。

i01-image7.png

図3・6 流し込み領域の対応付け

3–6–1 フローマップ

流し込み区画の対応付けはfo:flow-map(フローマップ)で明示的に設定できる。フローマップが明示されていない時は、flow-nameはそれと一致するregion-nameを持つ区画に対応付けられる。多くの場合、flow-nameの値に対応する区画のregion-nameを設定すればフローマップをユーザーが作成する必要はない。但し、複雑な流し込みの制御を行う場合は、フローマップによる対応付けが必要になる。

3–7 タイトル

fo:title(タイトル)は、各ページシーケンスに見出しを付ける機能である。例えば、タイトルウインドウやツールチップにタイトルの内容を表示したりできる。