XSL-FO の基礎 - CAS-UB

XSL-FO の基礎
XML を組版するためのレイアウト仕様
アンテナハウス株式会社
はじめに
XML ドキュメントの基本は内容とレイアウトの分離である。従って、XML ドキュメ
ントには、その内容をレイアウトするためのスタイルシートの仕組みが必須である。こ
うして、W3C(World Wide Web Consortium)で、1998 年に XML V1.0 の仕様が策定され
て、ほどなく XML ドキュメントをレイアウトして紙に印刷するための仕様である
「Extensible Stylesheet Language(XSL-FO)」仕様が策定された。
XSL-FO の仕様書は長文でしかも難解な部分が沢山ある。但し、仕様書は XSL-FO 関
連ソフトを実装する人を対象に書かれているので、利用者が全てを理解する必要はない。
XSL-FO ドキュメントを印刷するソフトが XSL-FO プロセサである。本書は、主として
XSL-FO プロセサを利用するための人向けの解説書である。
本書は 2001 年から 2002 年にかけて開催した XSL-School というセミナーのテキスト
をベースにしている。当時は XSL-FO についての情報が少なく、XSL-FO の普及活動を
有償のセミナーとして行った。XSL-FO はニッチな技術なので本としての出版は難しか
ったが、10 数年を経てプリントオンデマンド(POD)で本を販売できる仕組みができ
た。今回、テキストを刷新した上で POD により出版する。ちなみに、本書 POD 用 PDF
版は XSL-FO により制作されている1)。
元となるテキストは 2001 年 10 月 15 日に W3C 勧告となった XSL-FO V1.0 仕様に基づ
いている。XSL-FO 仕様は 2006 年 12 月に V1.1 になったので、この機会に XSL-FO V1.1
で追加された項目も含める2)。但し、本書は XSL-FO を使うためのポイントを解説するの
が目的であり、XSL-FO の仕様を網羅していない。仕様書原文は次を参照されたい。
「Extensible Stylesheet Language (XSL) Version 1.1」(W3C Recommendation 05 December
2006、XSL-FO V1.1)https://www.w3.org/TR/xsl/
XSL-FO V1.1 の日本語訳は、次の JIS 規格として制定されている。
JIS X 4179:2010「拡張可能なスタイルシート言語(XSL)1.1」
XSL-FO は機能拡張が容易であり、それぞれの XSL-FO プロセサがさまざまな拡張機
能を提供している。本書は原則として、XSL-FO V1.1 の標準仕様の範囲内での解説にと
どめている。
なお、本書の読者には XML ドキュメントについての基礎的な知識を前提としている。
本書の XML や FO のサンプルは見やすくするために本来は不要な改行や空白を使って
整形しているので注意されたい。
1) 本 PDF は POD 用設定ではない。
2) 本バージョンは草稿であり、V1.1 のごく一部を盛り込んだ状態である。
1
目
次
はじめに
1
第 1 章 XSL-FO による組版の概要
8
1.1 XSL-FO による組版プロセス
9
1.2 XML ドキュメント
10
1.3 XSLT とは?
11
1.4 XSL-FO 用 XSLT スタイルシート
11
1.5 XSL-FO インスタンスの例
13
1.6 XSL-FO プロセサ
14
第 2 章 ページマスターとページシーケンス
16
2.1 単純ページマスター
16
2.2 単純ページマスター中の区画
16
2.3 ページシーケンス
21
2.4 流し込み領域の対応つけ
23
2.5 fo:flow-map
24
第 3 章 FO ツリーの基本構造
25
3.1 fo:root とその子供たち
26
3.2 レイアウトマスター・セット
27
第 4 章 ページレイアウトの切り替え
31
4.1 本のページレイアウト
31
4.2 ページマスターの参照方法
31
4.3 ページシーケンス・マスター
32
4.4 条件付きページマスター参照
33
4.5 左右ページのヘッダーの配置を替える
33
4.6 先頭ページのヘッダーとフッターの内容を変える
34
3
4.7 段組
第 5 章 エリアモデル(領域モデル)
36
40
5.1 エリアとは
40
5.2 エリアのトレイト
41
5.3 エリアの基本構造(内容・パディング・ボーダー)と辺の判定
42
5.4 参照エリア
43
5.5 ブロックエリアの配置
44
5.6 参照エリア座標系の回転
50
5.7 ライティングモード
50
5.8 その他エリアの配置
52
第 6 章 式・数値の表現
54
6.1 式と評価
54
6.2 単位
54
6.3 ショートハンド・プロパティ
55
6.4 絶対方向と相対方向の対応
55
6.5 複合データ型<space>
56
6.6 複合データ型<keep>
59
第 7 章 文字コードとフォント
7.1 文字コード
60
7.2 フォント
60
7.3 空白の扱い
62
第 8 章 ボーダー(罫線)
64
8.1 設定項目
64
8.2 設定対象 FO
64
第 9 章 ブロック組版オブジェクト
9.1 見出しと本文段落のプロパティ指定例
4
60
67
67
目次
9.2 段落レイアウト
68
9.3 段落フォント設定
69
9.4 段落の文字配置
69
9.5 インデント、ボーダー、パディングの関係
71
9.6 段落の背景
71
9.7 ページや段の先頭ブロックと最終ブロックの前後の空き量
72
9.8 改ページや改段(break-before、break-after)
72
9.9 改ページの抑制(Keep)
73
9.10 ウィドウとオーファン (widows、orphans)
74
9.11 行ピッチの指定 (line-height、line-stacking-strategy)
74
第 10 章 ブロックコンテナー
10.1 ブロックコンテナーの位置指定(absolute-position)
第 11 章 インラインの FO
78
79
83
11.1 fo:inline
83
11.2 fo:inline-container
85
第 12 章 画像
87
12.1 fo:external-graphic
87
12.2 fo:instream-foreign-object
88
第 13 章 ページ番号の処理
90
13.1 fo:page-number
90
13.2 fo:page-number-citation
90
13.3 fo:page-number-citation-last
91
13.4 ページ番号文字列の書式
91
第 14 章 リーダー
93
14.1 目次設定例
93
14.2 フッター設定例
95
5
第 15 章 表
96
15.1 表を構成する FO
97
15.2 表のプロパティ
98
15.3 表の独自のプロパティ
101
第 16 章 リスト(箇条書き)
105
第 17 章 しおりの FO
108
第 18 章 脚注と前方フロート
111
18.1 脚注と前方フロートの参照エリア
111
18.2 脚注の設定例
112
18.3 前方フロートの設定例
113
第 19 章 サイドフロート
116
19.1 フロートの配置設定
116
19.2 フロートのクリア(fo:float の clear プロパティ)
118
19.3 侵入による移動(intrusion-displace)
118
第 20 章 柱の設定
121
第 21 章 索引
123
21.1 索引キーと索引項目
123
21.2 範囲の始まりと終わりの索引キー
124
21.3 索引ページ番号の表示に関わる FO
126
第 22 章 リンク
128
22.1 fo:basic-link
128
第 23 章 双方向性(BIDI)
6
129
目次
23.1 双方向性とは
129
23.2 ニュートラル文字とミラーリング
131
23.3 fo:bidi-override
131
コア関数ライブラリーとデータ型
135
FO の一覧
139
図表一覧
147
7
第 1 章 XSL-FO による組版の概要
組版という用語は情報技術(IT)の世界ではあまり馴染みがないので聞いたことが
ない人も多いだろう。組版とは、原稿を指定されたレイアウトの通りに印刷用のペー
ジにすることである。
XML ドキュメントにはレイアウト指定はないが、HTML に変換すればブラウザでレイ
アウトしてパソコンやモバイル端末の画面に表示できる。しかし、ブラウザは巻物を画
面でスクロールして表示することを主たる目的として設計されている。このため、印刷
につかえるようなページレイアウトの指定や、本のような製本形式をつくるためのレイ
アウトの指定は難しい。
これに対し、XSL-FO は紙のようなページの概念をもつ媒体を想定としており、製本
した本のためのページレイアウト機能も豊富である。そこで、次のような印刷・製本向
けの指定ができる。
●
見栄えの良い表紙を作る。
●
本文とは違う印刷書式で目次を作成する。目次の項目にはページ番号を添える。
●
左ページ、右ページで印刷書式を変更する。
●
本文ページにはヘッダー、フッター、サイドバーを設け、ヘッダーまたはフッター
に柱やノンブル1)を印刷する。
●
章の先頭ページには柱やノンブルをつけず(隠しノンブル)、2ページ目から柱やノ
ンブルをつける。
●
見出しと本文が別のページに分かれないようにする。
●
表の途中で改ページするかしないかを指定する。改ページするとき表のヘッダー行
を繰り返すかどうかを指定する。
●
脚注をページの下につける。ページの横に傍注をつける。
●
段組の印刷書式を設定したページを作る。本文は1段組だが索引は2段組にする。
●
索引を作成し、索引項目の本文の位置のページ番号を添える。
冊子の組版をするときは、冊子のページの縦と横のサイズ(判型)の設定、ページの
中で本文を印刷する領域(版面)の設定、表紙のタイトルや発行日、本文の見出し、段
1) ノンブルは各ページのヘッダーまたはフッターに置くページ番号を表示する数字のこと。本書ではノン
ブルとページ番号を区別する。ページ番号は本文中の参照先ページ数を示す数字として使う。本の表紙は
ページ番号にカウントしないし、前書きや目次の部分と本文でページ番号を別にカウントすることもあるの
で、ページ番号は物理的なページの順番とは一致しないことが多い。
8
第 1 章 XSL-FO による組版の概要
落の組方、引用や注の組方、柱・ノンブル/ページ番号などの多様な組版対象項目があ
る。こうした項目はデスクトップパブリッシング(DTP)では、項目は編集者やデザイ
ナーが制作者に指示する項目である。
XSL-FO ではこうした組版対象となる項目を組版オブジェクト(Formatting Object、
FO)と呼ぶ。FO は XML の用語では要素に相当する。FO の属性をプロパティと呼ぶ。
1.1 XSL-FO による組版プロセス
XSL-FO を使う組版プロセスは図 1.1 XSL-FO による組版プロセスのようになる。
図 1.1 XSL-FO による組版プロセス
XML ドキュメントをいきなり組版するのではなく、第一段階で、XML ドキュメント
を XSL-FO ドキュメントに変換する。第一段階で使うプログラムが XSLT プロセサであ
る。XSLT プロセサのために、XML ドキュメントを XSL-FO ドキュメントに変換するた
めのルールを記述したものが XSLT スタイルシートである。ソースの XML ドキュメン
トと XSLT スタイルシートを XSLT プロセサに入力すると、XML ドキュメントが XSLFO ドキュメントに変換される。XSL-FO ドキュメントを XSLT 以外の別の方法で作成し
ても構わない。
この XSL-FO ドキュメントは、レイアウトを指定した状態のもので、まだページにレ
イアウトされた状態ではない。次に、第二段階で XSL-FO プロセサにより XSL-FO ドキ
ュメントを組版処理する。
図で出てきた基本的用語について概略を説明する。
9
1.2 XML ドキュメント
XSL-FO による組版の対象となる XML ドキュメントは、ユーザーが独自に設定した文
書型でも標準の文書型でも良い。XML のタグセットはどのようなものでも構わない。
また、文書型(DTD)やスキーマを伴っていても良いし、伴わない整形式の XML ドキ
ュメントでも良い。但し、XSLT スタイルシートを作成するには、XML の構造を定める
文書型やスキーマの知識は必須である。次は簡単な XML ドキュメントの一部である。
<doc>
<head>
<title>
スタイルシート解説
</title>
<author>
アンテナハウス株式会社
</author>
<date>
2001 年 2 月
</date>
</head>
<body>
<section>
<title>
スタイルシートとは
</title>
...(略)...
</section>
...(略)...
</body>
</doc>
この例では、doc がルート要素(文書全体を囲むタグ)、head 要素、body 要素はルート
要素の子供、title、author、date などの要素は、さらにその下位の要素である。
10
第 1 章 XSL-FO による組版の概要
1.3 XSLT とは?
XSLT(XSL Transformations)は、XML ドキュメントのツリー構造を変換するための
仕様である。XSLT は、W3C で XSL-FO の仕様の開発が始まったときに、ソース XML ド
キュメントを XSL-FO ドキュメントに変換するために設計された。XSLT による XML
文書のツリー構造の変換は、XSL-FO 用途のみではなく、汎用に使えることから、XSLFO 仕様開発の過程で、XSLT は別の言語仕様として分離された。
「XSL Transformations (XSLT) Version 1.0」は 1999 年に W3C の勧告になった。その後、
2007 年に XSLT V2.0 が W3C 勧告となった。本書執筆時点(2016 年 3 月)で XSLT V3.0
が W3C の勧告候補である。
XSLT の仕様を実装するプログラムが XSLT プロセサである。勧告版の XSLT 仕様を
実装する XSLT プロセサは沢山あり、その多くは無償で配布されている。
XSLT プロセサには入力 XML ドキュメントのツリーを変換するためのルールを外部
ファイルとして与える。このルールを記述したファイルを XSLT スタイルシート(また
は XSL スタイルシート)という。XSLT スタイルシートの内容は入力 XML ドキュメント
の要素を、異なる XML 要素に変換するためのテンプレートを記述したものである。こ
のテンプレートの作り方次第で、色々なツリー構造の XML ドキュメントを、異なるツ
リー構造の XML ドキュメントに変換できる。
1.4 XSL-FO 用 XSLT スタイルシート
次に、XML ドキュメントを XSL-FO ドキュメントに変換する XSLT スタイルシートの
ごく一部を示す。
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsl="http://www.w3.org/1999/XSL/
Transform">
<xsl:output method="xml"
version="1.0"
indent="no" />
<xsl:param name="toc-make" select="true()"/>
<!-- Paper Size -->
11
<xsl:param name="paper-width">210mm</xsl:param>
<xsl:param name="paper-height">297mm</xsl:param>
...中略...
<!-- Content Transform-->
<xsl:template match="doc">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master margin-top="5mm"
margin-bottom="5mm"
margin-right="5mm"
margin-left="10mm"
master-name="PageMaster">
...中略...
</fo:simple-page-master>
...中略...
</fo:layout-master-set>
...中略...
</fo:root>
</xsl:template>
</xsl:stylesheet>
この XSLT スタイルシートの中で、xsl:という名前空間接頭辞で始まる要素が XSLT 仕
様で決まっているルール記述用の要素である。また、fo:という接頭子で始まっている要
素が、XSL-FO ドキュメントに出力される要素である。
XML ドキュメントを XSL-FO ドキュメントに変換するための XSLT スタイルシート
を作成するには、XML ドキュメントの構造についての知識に加えて、
1) XSLT のルールの書き方に関する知識
2) 出力する XSL-FO に関する知識
が必要である。
第一の XSLT のルールに関する知識はプログラミングの知識に近い部分がある。テン
プレートの使い方を覚えれば HTML への変換など汎用に使える。本書では XSLT の書き
方に関する解説は行わない。日本語で書かれた XSL-FO のための XSLT スタイルシート
の書き方については、次の資料を参考にしてほしい。また、別途 POD による本の出版を
計画中である。
「XSL-FO による XML ドキュメント印刷のためのスタイルシート作成方法」(http://
12
第 1 章 XSL-FO による組版の概要
www.antenna.co.jp/AHF/ahf_samples/#XSLT)(Formatter の Web ページより配布(無料))
第二の XSL-FO は、印刷するページの書式や行間隔などを細かく指定できる。綺麗な
レイアウト指定には、XSL-FO の仕様を理解するだけではなく、印刷の世界で培われて
きた日本語組版の知識と経験が必要である。特に、印刷物ではレイアウト指定の良し悪
しが、み易さ、読み易さに大きな影響を与える。優れたスタイルシートを作るには、プ
ログラムの知識だけではなく、印刷ページをデザインする能力も必要である。
XML のタグセットが同一であれば、一種類の XSLT スタイルシートで、そのタグセッ
トを採用する任意の XML ドキュメントを XSL-FO ドキュメントに変換できる。スタイ
ルシートをうまく作れば、レイアウトを調整するにしても若干の調整で済み、スタイル
シートの使い回しで、効率をあげることができる。一つ一つの XML ドキュメントを手
作業でページ組版するのと比べると、短時間で膨大なドキュメントを組版することもで
きる。優れたスタイルシートは価値ある知的資産となる。
1.5 XSL-FO インスタンスの例
XSL-FO ドキュメントは、fo:root をルート要素とする整形式 XML である。次に XSLFO ドキュメントの先頭部分の例を示す。
<?xml version="1.0" encoding="UTF-16"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master margin-top="5mm"
margin-bottom="5mm"
margin-right="5mm"
margin-left="10mm"
master-name="PageMaster"
page-height="297mm"
page-width="210mm">
<fo:region-body margin-top="8mm"
margin-right="8mm"
margin-bottom="8mm"
margin-left="8mm"/>
</fo:simple-page-master>
...中略...
</fo:layout-master-set>
13
...中略...
<fo:page-sequence master-reference="PageMaster">
<fo:flow flow-name="xsl-region-body" >
<fo:block …>本文のテキスト</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
通常、XSL では名前空間接頭辞として fo を使う。しかし、その接頭辞を XSL に結び
つける名前空間宣言があれば、他の接頭辞を使っても構わない。XSL 名前空間の URI は
次の通り。
http://www.w3.org/1999/XSL/Format
また、XSL 名前空間に属する要素(Formatting Object)には、他の名前空間に属する属
性を持たせることができる。この場合、拡張された属性名は、空でない名前空間 URI を
もつ必要がある。
1.6 XSL-FO プロセサ
XSL-FO ドキュメントはレイアウト指定をした XML ドキュメントである。これをペ
ージに組版する処理を行うのが XSL-FO プロセサ2)である。XSL-FO プロセサは、組版結
果を指定した媒体(紙、PDF)に出力したり、画面に表示したりする。
世界にはいくつか XSL-FO プロセサがある。XSL-FO プロセサでは、ApacheTMFOP
(Formatting Objects Processor)というオープンソースが広く使われている。主なものを
表 1.1 主な XSL-FO プロセサに示す。XSL-FO の仕様に準拠する XSL-FO プロセサで同
じ XSL-FO ドキュメントを組版すると、ほぼ同じ組版結果を得ることができる。但し、
詳細は XSL-FO プロセサの実装に任されており、組版結果の綺麗さは XSL-FO プロセサ
によって異なる。印刷のためのレイアウトは設定項目が多く複雑である。アンテナハウ
スの AH XSL Formatter は日本語組版用に最適な XSL-FO プロセサである。2000 年に
V1.0 を発売して以来、FOP では飽き足らない需要に応えて機能の強化を図っている。
2016 年 3 月時点の最新版は V6.3 である。
表 1.1 主な XSL-FO プロセサ
製品名
AH XSL Formatter
提供元
アンテナハウス
2) 日本語では XSL-FO 組版エンジンということもある
14
URL
http://www.antenna.co.jp/AHF/
第 1 章 XSL-FO による組版の概要
FOP
XEP
XF Rendering Server
Apache
RenderX
Ecrion
https://xmlgraphics.apache.org/fop/
http://www.renderx.com/tools/xep.html
http://www.ecrion.com/
15
第 2 章 ページマスターとページシーケンス
XSL-FO では、fo:simple-page-master(単純ページマスター)でページの大きさ(判型)
やマージンを設定する。fo:simple-page-master の子供として内容を配置する区画を設定
する。単純ページマスターはページ上に内容のない区画レイアウトだけを規定したテン
プレートである。
単純ページマスターを組み合わせて使うページシーケンス・マスターも設定できる(詳
しくは 4.3 ページシーケンス・マスターを参照)。両者を区別する必要がないときはペ
ージマスターと呼ぶ。
fo:page-sequence(ページシーケンス)は、区画に対して流し込むテキスト・表・画像
などの内容から構成する FO ツリーを子供としてもつ。XSL-FO プロセサはページシー
ケンスの内容をページマスターに流し込んで組版済みのページを生成する(詳しくは
2.3 ページシーケンスを参照)。
2.1 単純ページマスター
fo:simple-page-master は 判 型 や 上 下 左 右 マ ー ジ ン な ど ペ ー ジ の 外 形 を 規 定 す る 。
fo:simple-page-master に設定できるプロパティは次の通り。
表 2.1 単純ページマスターのプロパティ
プロパティ
値
master-name
<name>
page-height
page-width
margin-top、marginbottom、marginleft、margin-right
referenceorientation
writing-mode
<length>
<length>
<length>
0(既定値)、90、180、
270、-90、-180、-270
lr-tb、rl-tb などのキーワ
ード
説明
必須。空ではいけない。ページマスターを識別するため
のユニークな名前
ページの高さ
ページの幅
上下左右のマージン。
ショートハンド・プロパティ margin による指定もできる。
エリアの回転。詳しくは 5.6 参照エリア座標系の回転を
参照
ライティングモード。エリア内の書記方向である。詳し
くは 5.7 ライティングモードを参照
2.2 単純ページマスター中の区画
単純ページマスターに配置するいくつかの区画を設定する。
16
第 2 章 ページマスターとページシーケンス
2.2.1 本 文 区 画
fo:simple-page-master には必須の子供として fo:region-body(本文区画)を設定する。
fo:region-body のプロパティで本文区画の上下左右マージンを定義できる。単純ページ
マスターと本文区画のマージンの関係を図 2.1 単純ページマスターと本文区画のマー
ジンに示す。
page-width
margin-top
margin-top
margin-right
margin-right
margin-left
margin-left
page-height
本文内容領域
(版面)
margin-bottom
margin-bottom
fo:region-body
fo:simple-page-master
図 2.1 単純ページマスターと本文区画のマージン
fo:region-body の高さと幅からマージンをとった内側領域(本文内容領域)が本文の文
字を印刷する領域である。単純ページマスターと本文区画の上下左右マージンは独立で
あり、ページの端から本文内容領域までの空き量(余白)は、単純ページマスターのマ
ージンと本文区画のマージンの合計となる。
なお、XSL-FO V1.1 から単純ページマスターに複数の本文区画を設定できるようにな
った。本書では複数の本文区画については解説しない。
2.2.2 本文区画周囲の区画
本文区画の上下左右のマージンの中に fo:region-before、fo:region-after、fo:region-start、
17
fo:region-end の四つの区画を規定できる。横組みではそれぞれヘッダー・フッター・左
サイドバー・右サイドバーを配置する領域となる。各区画の広さを extent プロパティで
指定する。
extent
extent
extent
margin-top
fo:region-before
margin-right
fo:region-end
fo:region-start
margin-left
本文内容領域
(
版面)
fo:region-after
extent
margin-bottom
fo:region-body
fo:simple-page-master
図 2.2 区画の extent プロパティ
2.2.3 区 画 の 名 前
各区画の名前は region-name プロパティで設定する。明示的に名前を付けないときは
既定値となる。
表 2.2 区画名の既定値
区画の種類
fo:region-body
fo:region-before
fo:region-after
fo:region-start
fo:region-end
18
区画名の既定値(region-name)
xsl- region-body
xsl-region-before
xsl-region-after
xsl-region-start
xsl-region-end
第 2 章 ページマスターとページシーケンス
2.2.4 区画のプロパティ
区画のプロパティを表にまとめると次の通り。
表 2.3 区画のプロパティ
プロパティ
region-name
値
説明
区画の名前。既定値は表 2.2 区画名の既定値を参照
<name>
margin-top、margin- <margin-width>
bottom、margin-left、
margin-right
column-count と
省略
column-gap
extent
<length>または
<percentage>
(本文区画内のみ)上下左右のマージン
(本文区画のみ)段組を設定する。詳細は 4.7 段組を参照
(周辺区画のみ)区画の幅。図 2.2 区画の extent プロパティを
参照
(region-before と region-after 区画のみ)ページのマージン内一
杯まで広がる(true)か広がらない(false(既定値))か
precedence
true または false
overflow
display-align
reference-orientation
省略
省略
省略
表 2.1 単純ページマスターのプロパティを参照
writing-mode
省略
表 2.1 単純ページマスターのプロパティを参照
2.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 とする。背景色に"#E0E0E0E0"
を設定する。
●
"PageMaster2"では fo:region-before と fo:region-after の precedence="true"を設定する。
<fo:simple-page-master page-height="80mm"
page-width="160mm"
margin-top="10mm"
margin-left="20mm"
margin-right="20mm"
19
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="#E0E0E0E0"
extent="15mm" />
<fo:region-end background-color="#E0E0E0E0"
extent="15mm"/>
</fo:simple-page-master>
<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>
…流し込むテキスト(ページシーケンス)省略しているので注意…
組版結果は図 2.3 単純ページマスターの区画設定例の通り。図の上は“PageMaster1”
を使ったページであり、下は“PageMaster2”(fo:region-before と fo:region-after 区画の
precedence="true"に設定)を使ったページである。
20
第 2 章 ページマスターとページシーケンス
図 2.3 単純ページマスターの区画設定例
2.3 ページシーケンス
fo:page-sequence(ページシーケンス)はページマスターに流し込む内容を FO で表現
したツリーである。ページシーケンスは、表紙、目次、本文の章、索引などの本の内容
構成単位毎に作る。ページシーケンスは FO ツリーの中で兄弟として作成し、最初に出
現したものから順に指定したページマスターに流し込む。
fo:page-sequence の子供には、fo:static-content と fo:flow の 2 種類がある。
2.3.1 fo:static-content
ページの柱やノンブルのような原則として多くのページで繰り返すか、一定の形式と
なる内容である。fo:static-content には flow-name プロパティで流し込み先の区画の名前
を指定する。例えば、横組ページで柱をページの上、ノンブルをページの下に置く場合
は、次のようにする。
1) 単純ページマスターに fo:region-before(本文区画の上部区画)と fo:region-after(本
21
文区画の下部区画)を用意する。それぞれ名前は既定値のままとする。
2) 柱用の内容をもつ fo:static-content を用意し、flow-name="xsl-region-before"とする。
3) ノンブル用の内容をもつ fo:static-content を用意し、flow-name="xs-region-after"と
する。
2.3.2 fo:flow
fo:flow は本文のテキストや図版を置く。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>
ページシーケンスの master-reference は必須のプロパティであり、ページシーケンスを
流し込むページマスターの名前(master-name)を設定する。複数のページシーケンスで
同じページマスターを使える。その他の主なプロパティを解説する。
2.3.3 initial-page-number プロパティ
ページシーケンスの開始ページ番号を設定する。
表 2.4 initial-page-number プロパティ
値
auto
auto-odd
auto-even
<number>
22
説明
前にページシーケンスがなければ1から。あれば、前の最後のページ番号に 1 を加えたページ番
号から開始する。
auto と同じように開始ページ番号を計算し、偶数なら 1 を加える。
auto と同じように開始ページ番号を計算し、奇数なら 1 を加える。
自然数を指定する。指定したページ番号から開始する。
第 2 章 ページマスターとページシーケンス
2.3.4 force-page-count プロパティ
ページシーケンスのページ数を強制する。例えば、値に“even”を指定したとき、ペ
ージ数が奇数になったら最後に 1 ページを追加する。
表 2.5 force-page-count プロパティ
値
auto
even
odd
end-oneven
end-onodd
no-force
説明
次のページシーケンスの開始ページ番号が偶数ページであれば最後を奇数ページにする。次の
ページシーケンスの開始ページ番号が奇数ページであれば最後を偶数ページにする。次のペー
ジシーケンスの開始ページに制約がなければなにもしない。
このページシーケンスのページ数を偶数にする。
このページシーケンスのページ数を奇数にする。
このページシーケンスの最終ページ番号を偶数にする。
このページシーケンスの最終ページ番号を奇数にする。
制約しない。
2.3.5 reference-orientation プロパティ
from-page-master-region() によって区画毎に指定した回転方向を取得する。例えば、単
純ページマスターで本文区画が 90 度回転に設定されていれば、本文区画に流し込む内容
は 90 度回転される。流し込む内容に回転を指定したいときは必須である。
2.3.6 writing-mode プロパティ
from-page-master-region() によって区画毎に指定したライティングモードを取得する。
例えば、単純ページマスターで本文区画が縦書き、region-before が横書きに設定されて
いれば、本文区画に流し込む内容は縦書きになり、region-before に流し込む内容は横書
きになる。横書き以外では必須である。
2.4 流し込み領域の対応つけ
本文区画は fo:page-sequence の fo:flow を流し込む領域である。
fo:page-sequence の子供の fo:static-content 及び fo:flow をどの区画に流し込むかの対応
つけは、flow-name プロパティの値で設定する。
23
図 2.4 流し込み領域の対応つけ
2.5 fo:flow-map
この対応付けは fo:flow-map(フローマップ)で明示的に設定できる。フローマップが
明示されていない時は、flow-name はそれと一致する region-name を持つ区画に対応つけ
られる。多くの場合、flow-name の値に対応する区画の region-name を用意すればフロー
マップをユーザーが作成する必要はない。但し、複雑な流し込みの制御を行う場合は、
flow-map による対応つけが必要になる。
24
第 3 章 FO ツリーの基本構造
FO のツリーでページマスターとページシーケンスがどのように配置されるか、どのよ
うに組版処理されるかを、表紙と本文からなる簡単な冊子を作る例で説明する。表紙に
はタイトルや発行日をレイアウトする。本文には見出しに続いて、文章の段落を配置す
る。本文の下部(フッター)にはノンブルを配置する。
表紙と本文ではマージンの取り方やフッターの有無などページ内の領域の取り方が異
なる。そこで、表紙用と本文用の 2 種類のページマスターを作り、表紙用のページマス
ターに master-name="cover"、本文用のページマスターに master-name="body"とする。
表紙の内容を構成する FO と本文の内容を構成する FO をそれぞれ別のページシーケ
ンスとして用意する。表紙のページシーケンスは master-reference="cover"を設定する。
本文のページシーケンスには master-reference="body"とする。
このようなとき、全体の FO ツリーは図 3.1 表紙と本文からなる冊子の FO ツリーのよ
うな関係になる。
図 3.1 表紙と本文からなる冊子の FO ツリー
流し込みの順序は FO ツリーのページシーケンス順である。最初のページシーケンス
(cover)を、指定したページマスター(cover)に流し込むと、ページマスター(cover)
を雛形とした表紙となるページが作成される。作成されたページの所定区画にページシ
ーケンス(cover)の部分ツリーが規則に則り配置される。もし、ページマスター(cover)
の領域にページシーケンスの内容が収まりきらなければ、2 ページ目が作成されまた所
定の領域に残りの内容が配置されていく。表紙ではページシーケンスの内容が 1 ページ
に収まるように準備する。
ページシーケンス内で配置する FO がなくなった場合、次にページシーケンス(body)
25
の処理を始める。ページシーケンスが変わるところで改ページされる。次に弟であるペ
ージシーケンス(body)に対して同様の処理が行われる。次に流し込むページシーケン
スがなくなったら組版終了となる。
ページシーケンスの子供には、fo:static-contents と fo:flow がある。流し込みの主役は
fo:flow の内容である。fo:flow の内容を本文区画(fo:region-body)に配置してページを
作っていく。fo:static-contents の内容はページが作られたときに指定された周囲区画
(fo:region-before など)に配置される。
3.1 fo:root とその子供たち
前記の例を FO で表すと次のようになる。ルート要素は fo:root であり、その最初の子
供として一つの fo:layout-master-set(レイアウトマスター・セット)を置く。次の子供と
して一つ又はそれ以上の fo:page-sequence を置く。
fo:page-sequence は表紙用、本文用を兄弟として用意する。fo:page-sequence の masterreference プロパティに、ページシーケンスを流し込むページマスターの名前を指定する。
<fo:root>
<fo:layout-master-set>
<fo:simple-pagemaster master-name="cover">
......................
......................
</fo:simple-pagemaster>
<fo:simple-pagemaster master-name="body">
......................
......................
</fo:simple-pagemaster>
</fo:layout-master-set>
<fo:page-sequence master-reference="cover">
......................
......................
......................
</fo:page-sequence>
<fo:page-sequence master-reference="body">
......................
......................
26
第 3 章 FO ツリーの基本構造
......................
</fo:page-sequence>
</fo:root>
fo:root には、図示していないオプションとして fo:declarations と fo:bookmark-tree を置
くことができる。fo:declarations にはカラープロファイルを指定する。fo:bookmark-tree
は、PDF のしおり(ブックマーク)作成などに使用する(第 17 章 しおりの FO を参照)。
3.2 レイアウトマスター・セット
fo:layout-master-set(レイアウトマスター・セット)は単純ページマスター(2.1 単純
ページマスター参照)や、ページシーケンス・マスター(4.3 ページシーケンス・マス
ター参照)をグループ化する FO である。またフローマップ(2.5 fo:flow-map)を含む
ことができる。
fo:simple-page-master はその子供である。次の例は、cover と body という 2 種類の単純
ページマスターを定義したレイアウトマスター・セットである。cover は表紙用である。
表紙にはヘッダー・フッターなどはないので fo:region-body 区画のみを設定する。body
には fo:region-body、fo:region-before、region-after を設定する。
<fo:layout-master-set>
<fo:simple-page-master margin="50mm 40mm 25mm 40mm"
master-name="cover"
page-height="297mm"
page-width="210mm">
<fo:region-body margin="0mm 0mm 0mm 0mm"/>
</fo:simple-page-master>
<fo:simple-page-master margin="10mm 00mm 10mm 00mm"
master-name="body"
page-height="297mm"
page-width="210mm">
<fo:region-body margin="15mm 25mm 15mm 25mm"/>
<fo:region-before region-name="header" extent="10mm" />
<fo:region-after region-name="footer" extent="10mm" />
</fo:simple-page-master>
</fo:layout-master-set>
27
表紙と本文の fo:page-sequence は次のようになる。
<fo:page-sequence master-reference="cover"
force-page-count="even">
<fo:flow flow-name="xsl-region-body">
<fo:block space-after="120mm"
font-size="24pt"
font-family="Arial,'MS ゴシック',sans-serif"
text-align="center"
background-color="#EEEEEE"
border-style="solid"
border-color="~#888888"
padding-top="5pt"
padding-bottom="5pt" >
<fo:block>
XSL-FO による<fo:block/>XML ドキュメント印刷のための<fo:block/>スタイル
シート作成方法
</fo:block>
</fo:block>
<fo:block space-after="5mm"
font-size="12pt"
font-family="'MS 明朝'"
text-align="center">2016 年 3 月</fo:block>
<fo:block font-size="14pt"
font-family="'MS 明朝'"
text-align="center">
アンテナハウス株式会社
</fo:block>
</fo:flow>
</fo:page-sequence>
<fo:page-sequence master-reference="body"
initial-page-number="1">
<fo:static-content flow-name="header">
<fo:block font-size="10pt"
text-align="center">
28
第 3 章 FO ツリーの基本構造
ヘッダー
</fo:block>
</fo:static-content>
<fo:static-content flow-name="footer">
<fo:block font-size="9pt"
text-align="center">
<fo:page-number/>
</fo:block>
</fo:static-content>
<fo:static-content flow-name="end" />
<fo:static-content flow-name="start" />
<fo:flow flow-name="xsl-region-body">
<fo:block font-size="22pt"
font-family="Arial,'MS ゴシック',sans-serif"
space-after="14pt"
break-before="page"
border-after-style="solid"
border-after-width="2pt">はじめに</fo:block>
<fo:block text-indent="1em"
text-align="justify">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。このため、
この仕様に基づいて作成された結果を XSL-FO(XSL-Formatting Object)と呼ぶ
のが通例です。
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
さて XML ドキュメントから、この XSL-FO を作成して印刷するには、次の手順が一般
的です。
</fo:block>
</fo:flow>
</fo:page-sequence>
この例ではページシーケンス(cover)の制約条件を force-page-count="even"で偶数を指
29
定しているので、2 ページ目が空白となる。ページシーケンス(body)には initial-pagenumber="1"としているので、本文は 3 ページ目から始まるが、フッターのノンブルは 1
となる。
図 3.2 組版結果の PDF
30
第 4 章 ページレイアウトの切り替え
4.1 本のページレイアウト
一冊の本には本文と本文以外のさまざまな構成要素がある。構成要素によってページ
のレイアウトを変えたり、ページの位置(右と左、あるいは先頭ページと最後のページ)
でレイアウトを変更したり、ページ総数を偶数に制約したり、などを配慮する。
表 4.1 本に要求されるページレイアウト
構成要素
表紙(本扉)、半扉
(書名のみの扉)
目次
右ページと左ペ
ージ
章
索引
奧付
ページレイアウトの要求(例)
独立した挟み込みのページ。裏表ペア。
目次ページには柱やノンブルを付けないことが多く、上下余白を本文ページと変えるこ
とがある。
製本のために、左右のマージンを鏡像関係に設定する。
柱の位置、ノンブルの位置を鏡像関係にする。
章の先頭ページを改丁して(奇数ページから)開始するか。
章の先頭ページには柱をつけない。
本文が一段組でも索引は二段組にする。
柱やノンブルをつけない。
改丁するか、改ページするか。
ページシーケンスから参照する単純ページマスターを切り替える機能だけで、表紙・
半扉、目次、奧付、索引のページレイアウト要求は実現できる。しかし、右ページと左
ページのレイアウト切り替え要求や、章の先頭ページのレイアウト変更要求は実現でき
ない。これらの要求を実現するには、次に説明するページシーケンス・マスターを使う。
4.2 ページマスターの参照方法
fo:page-sequence からページマスターを参照するには、master-reference プロパティで直
接 fo:simple-page-master を参照する方法(図 4.1 ページマスターの参照(上))と、fo:pagesequence-master を経由して間接的に参照する方法(図 4.1 ページマスターの参照(下))
がある。
単純ページマスターが一回使われる毎に一枚の用紙が生成される。例えば、図 4.1 ペ
ージマスターの参照(下)のように fo:repeatable-page-master-reference から fo:simple-pagemaster を参照している場合、fo:page-sequence の中から単純ページマスターが呼ばれる毎
31
図 4.1 ページマスターの参照
に1ページが生成される。
4.3 ページシーケンス・マスター
fo:page-sequence-master は、いろいろな単純ページマスターの繰り返し回数を規定した
り、繰り返し順序を制約したりする。fo:page-sequence-master の子供は次の表に示す 3 種
類のサブシーケンス指定の繰り返しである。
表 4.2 ページシーケンス・マスターのサブシーケンス
サブシーケンス名
特徴
fo:single-page-masterreference
fo:repeatable-pagemaster-reference
所定の位置に一つの単純ページマスター
を使って、1 ぺージ挿入する
ひとつの単純ページマスターの繰り返し
を規定する
fo:repeatable-pagemasteralternatives
単純ページマスターの組み合せの繰り返
しを規定する
子供に一つ以上の fo:conditional-pagemaster-reference を置く。
プロパティと制約
master-reference で同じ名前の単純ペー
ジマスターを参照する
master-reference で同じ名前の付いた単
純ページマスターを参照する
maximum-repeats で 0 以上の最大繰り
返し回数を指定する
maximum-repeats で 0 以上の最大繰り
返し回数を指定する
fo:page-sequence-master は、レイアウトマスター・セットの子供として、単純ページマ
スターと兄弟になり、何回でも使える。各 fo:page-sequence-master には master-name プロ
パティで、ユニークな名前をつけて、ページシーケンスから参照する。
32
第 4 章 ページレイアウトの切り替え
4.4 条件付きページマスター参照
fo:page-sequence-master の子供に fo:repeatable-page-master-alternatives を置いたときは、
fo:conditional-page-master-reference(条件付きページマスター参照)を経由して単純ペー
ジマスターを指定する。条件付きページマスター参照では次の三つのプロパティの組み
合わせによって出現条件を設定する。その条件が満たされたときに、master-name プロパ
ティで指定した単純ページマスターを参照する。
表 4.3 条件付きページマスター参照のプロパティ
出現制約プロパティ
page-position
odd-or-even
blank-or-not-blank
値
説明
only, first, last, rest, any,
inherit のどれか
odd, even, any, inherit
blank, not-blank, any,
inherit
first、last はそれぞれ先頭と最後のページに使う。rest はそ
の他。only は first かつ last である。
odd は奇数ページ、even は偶数ページに使う。
blank は空白ページ挿入用
表 4.1 本に要求されるページレイアウトで示した、左右ページのレイアウトの切り替
え、章の先頭ページのレイアウト変更は、fo:conditional-page-master-reference で指定す
る。次に利用方法の例を示す。
4.5 左右ページのヘッダーの配置を替える
左右のページでマージン、ヘッダーやフッターの内容と文字の配置を変更する例を示
す。
1) 左ページ用、右ページ用の 2 種類の単純ページマスターを用意、ヘッダーとフッ
ター用の区画にユニークな名前をつける。
2) fo:repeatable-page-master-alternatives の子供として、左ページ用と右ページ用の二
つの fo:conditional-page-master-reference を用意する。
3) フローの中の static-contents に右ページ用と左ページ用の二つ用意し、flow-name
にページマスター上の対応する区画名を指定する。
33
4.6 先頭ページのヘッダーとフッターの内容を変える
本の章で先頭ページでは柱を出さず、2 ページ目から柱を出したいときは、次の例の
ように設定すれば良い。
34
第 4 章 ページレイアウトの切り替え
1) 先頭ページ用の単純ページマスターを用意する。
2) fo:conditional-page-master-reference で先頭ページの単純ページマスターを指定す
る。
3) fo:page-sequence に先頭ページ・ヘッダーの内容(この例では空)をもつ fo:staticcontents を用意し、flow-name を First-header とする。
<fo:layout-master-set>
…奇数ページ用の単純ページマスターと偶数ページ用の単純ページマスター(省略)
<!--次は先頭ページ用の単純ページマスター-->
<fo:simple-page-master margin="10mm 00mm 10mm 00mm"
master-name="PageMaster-First"
page-height="297mm"
page-width="210mm">
<fo:region-body margin="15mm 25mm 15mm 25mm"/>
<fo:region-before region-name="First-header"
extent="10mm"/>
<fo:region-after region-name="First-footer"
extent="10mm"/>
<fo:region-start region-name="First-start"
extent="25mm"/>
<fo:region-end region-name="First-end"
extent="25mm"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="PageMaster">
<fo:repeatable-page-master-alternatives>
<fo:conditional-page-master-reference
master-reference="PageMaster-First"
page-position="first"/>
<fo:conditional-page-master-reference
master-reference="PageMaster-Left"
odd-or-even="even"/>
<fo:conditional-page-master-reference
master-reference="PageMaster-Right"
odd-or-even="odd"/>
</fo:repeatable-page-master-alternatives>
35
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="PageMaster"
initial-page-number="1">
<fo:static-content flow-name="First-header">
</fo:static-content>
<fo:static-content flow-name="Left-header">
<fo:block>左ページ用ヘッダー</fo:block>
</fo:static-content>
<fo:static-content flow-name="Right-header">
<fo:block >右ページ用ヘッダー</fo:block>
</fo:static-content>
<fo:static-content flow-name="First-footer">
</fo:static-content>
...省略…
</fo:page-sequence>
4.7 段
組
段組は fo:region-body 単位で、column-count と column-gap を指定する。段組はページ単
位の設定が基本である。
表 4.4 段組のプロパティ
プロパティ
プロパティの値
column-count
column-gap
<number>(既定値は 1)
<length>(既定値は 12 pt)または
<percentage>
all または none(既定値)
span
説明
fo:region-body に対して段数を指定する。
fo:region-body に対して段間の余白を指定する。
fo:flow の子孫の fo:block のプロパティとして多段組の全
段に渡って配置するか、それとも一段に配置するかを指定
する。
次の例では、単純ページマスターの fo:region-body を 2 段組みに設定する。
<fo:simple-page-master margin-top="7mm"
margin-bottom="7mm"
margin-right="5mm"
margin-left="10mm"
36
第 4 章 ページレイアウトの切り替え
page-height="297mm"
page-width="210mm"
master-name="Twocol-PageMaster">
<fo:region-body margin-top="8mm"
margin-bottom="8mm"
margin-right="10mm"
margin-left="10mm"
column-count="2"
column-gap="16pt"/>
...
</fo:simple-page-master>
段組に流し込むページシーケンスは次の通り。
<fo:flow flow-name="xsl-region-body">
<fo:block span="all"
font-size="22pt"
font-family="Arial,'MS ゴシック',sans-serif"
space-after="14pt"
space-after.conditionality="retain"
break-before="page"
border-after-style="solid"
border-after-width="2pt">
はじめに
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。このため、
この仕様に基づいて作成された結果を XSL-FO(XSL-Formatting Object)と呼ぶ
のが通例です。
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
37
さて XML ドキュメントから、この XSL-FO を作成して印刷するには、次の手順が一般
的です。
</fo:block>
<fo:block span="all"
font-size="18pt"
font-family="Arial,'MS ゴシック',sans-serif" spaceafter="14pt"
border-after-style="solid"
border-after-width="0.5pt">
見出し2
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。このため、
この仕様に基づいて作成された結果を XSL-FO(XSL-Formatting Object)と呼ぶ
のが通例です。
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
さて XML ドキュメントから、この XSL-FO を作成して印刷するには、次の手順が一般
的です。
</fo:block>
</fo:flow>
見出しの fo:block 二つに span="all"を設定して段抜きとする。また、最初の見出しと本
文 の 間 に 空 き を 12pt に 設 定 し て い る が 、 こ れ を 有 効 と す る た め spaceafter.conditionality="retain"を指定する。これを組版すると図 4.2 段組の組版結果のよう
になる。
2 段組の左段の途中でテキストが終了しても自動的には左右の段が均等にならない。
均等にするには span="all"を指定した空の fo:block を文末に置くと良い。
38
第 4 章 ページレイアウトの切り替え
図 4.2 段組の組版結果
39
第 5 章 エリアモデル(領域モデル)
5.1 エ リ ア と は
FO は、出力媒体(プリンタの用紙、あるいは、ディスプレイの画面)の領域と直接
対応づけられている訳ではない。出力媒体上の四角い領域に対応付けられるのは、
「エリ
ア」と呼ばれる領域である。XSL-FO プロセサは、
1) まず、XSL-FO ドキュメントツリーをエリアツリーに変換し、
2) 次に、エリアツリーを出力媒体用に可視化する。
エリアツリーは文書の中の文字、図形やイメージを配置するための位置情報、間隔・
空き情報、その他組版のために必要な情報を含む順序づけられたツリーである。エリア
ツリーにおける領域の順序は、原則として FO のツリーの順序になる。但し、フロート
や脚注などは例外で、FO ツリーの順序とは出力位置が変わる。
エリアは組版時の積み上げ方の違いにより、ブロックエリア(ブロック領域)とイン
ラインエリア(行内領域)の2種類に分類できる。ブロックエリアのうちの特別なもの
にラインエリア(行領域)がある。ラインエリアはその子供がすべてインラインエリア
になる。インラインエリアのひとつにグリフエリアがある。グリフエリアは子供をもた
ず、内容として一つのグリフのイメージをもつ末端のエリアである。
エリアツリーと出力媒体の上の領域との対応関係は図の通りである。「P」がページ、
「A、B、C」はブロックエリア、
「XY」がラインエリア、
「あ、い、う」がインライン
エリアに相当する。
エリアモデルは XSL-FO 仕様書に抽象的な概念として記述されており、仕様の一部と
図 5.1 エリアツリーと出力媒体の領域
40
第 5 章 エリアモデル(領域モデル)
して標準化されているわけではない。XSL-FO プロセサのベンダーは各社独自にエリア
ツリーを実装している。
AH Formatter のエリアツリーに関する情報は次にある。
https://antennahouse.github.io/AreaTree/ja/(https://antennahouse.github.io/AreaTree/ja/)
5.2 エリアのトレイト
エリアの属性はトレイト(特色)と呼ぶ。トレイトは FO のプロパティに相当する。
トレイトはエリアのレンダリング、あるいはエリアの組版の制約を規定する。FO から
エリアが作られる際にエリアのトレイトが決まる。トレイトには FO のプロパティと直
接対応しているものもあるし、間接的に導き出されるものもある。
エリアのトレイトの中で重要なものは block-progression-direction(ブロック進行方向)
と inline-progression-direction(行内進行方向)である。ブロック進行方向は、そのエリア
の子孫となるブロックエリアを積み上げる方向であり、行の進行方向に相当する。行内
進行方向はそのエリアの子孫となるインラインエリアを積み上げる方向であり、テキス
トの単語や文字を進める方向に相当する。
図 5.2 エリアのブロックと行内の進行方向
41
5.3 エリアの基本構造(内容・パディング・ボーダー)と辺の判定
5.3.1 エリアの基本構造
エリアの基本構造は図 5.3 エリアの基本構造の通りである。エリアの中核は内容領
域である。内容領域はさらに他のエリアやテキストを配置する領域となる。内容領域の
周囲にパディング、ボーダー(境界線)を持つ。内容領域の外辺を内容長方形、パディ
ングの外辺をパディング長方形、ボーダーの外辺をボーダー長方形という。
図 5.3 エリアの基本構造
内容長方形、パディング長方形、ボーダー長方形、ボーダー領域周囲の長方形の四つ
の辺は、上・下・左・右という絶対方向ではなくブロック進行方向と行内進行方向を基
準に、次のように位置づける。
●
前方辺(before-edge)は、ブロック配置の進行方向でみて手前の辺
●
後方辺(after-edge)は、前方辺の反対側の辺
●
開始辺(start-edge)は、文字の進行方向の開始側の辺
●
終了辺(end-edge)は、開始辺の反対側の辺
これによって、西欧の横書きと、縦書きやアラビア文字のように右から左に書く文字
でも、同じスタイルの指定方法ができる。
エリアには、参照エリア(is-reference-area="true"というトレイトをもつ)という種類
がある(5.4 参照エリア)。参照エリアでは座標系を回転できるので、前方辺・後方辺・
開始辺・終了辺の判定が複雑になる。内容長方形の辺はその領域のブロック進行方向と
行内進行方向を基準として判定する。しかし、ボーダー長方形の辺、パディング長方形
の辺は親領域のブロック進行方向と行内進行方向を基準として判定する。
42
第 5 章 エリアモデル(領域モデル)
5.3.2 エリアの特性値
エリアの大きさに関連する特性値は、エリアの block-progression-dimension(ブロック
進行方向のサイズ)と inline-progression-dimension(行進行方向のサイズ)である。これ
らはエリアの内容領域のサイズで指定する。内容領域の周辺の広がりは図 5.4 エリア
の広がりを示す特性値に示す特性と特性値で表す。
図 5.4 エリアの広がりを示す特性値
space-before と space-after はブロックエリアに対して意味を持ち、space-start と spaceend はインラインエリアに対して意味がある。
background-color、background-image によってエリアの背景色と背景のイメージを表す。
これらはパディング領域内に適用される。
5.4 参 照 エ リ ア
次の FO から生成されるエリアは自動的に参照エリアとなる。
●
fo:simple-page-master
●
fo:title
●
fo:region-body
●
fo:region-before
●
fo:region-after
●
fo:region-start
●
fo:region-end
43
●
fo:table
●
fo:table-caption
●
fo:table-cell
●
fo:block-container
●
fo:inline-container
これ以外に XSL-FO プロセサが生成する参照エリアがある。参照エリアは座標系の基
準となるエリアであり、次の特徴をもつ。
1) 参照エリア(のみ)ではインデント(字下げ・字上げ)を指定できる。
2) 参照エリアのみが親と異なるブロック進行方向を持つことができる。次に説明す
る座標系の回転とライティングモードでブロック進行方向を変えられる。
5.5 ブロックエリアの配置
5.5.1 ブロックエリアの幅
ラインエリアでないブロックエリアのブロック進行方向の幅は内容領域が基準であ
る。内容領域は一番近い先祖の参照エリア内容領域から、start-indent と end-indent 分内側
に取られる。ブロック進行方向の周りのパディングとボーダーは内容エリアの外側に取
られる。次に例を示す。
<fo:page-sequence …>
<fo:flow flow-name="xsl-region-body">
<fo:block border="0.1pt solid black">
<fo:block font-size="22pt"
font-family="Arial,'MS ゴシック',sans-serif"
space-after="14pt"
break-before="page"
border-after-style="solid"
border-after-width="2pt">
ブロックエリア構造と配置
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
border="1em solid #EEEEEE"
padding="1em"
44
第 5 章 エリアモデル(領域モデル)
space-before="1em">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
start-indent="2em"
end-indent="2em"
border="1em solid #F6F6F6"
padding="1em"
space-before="1em">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
</fo:block>
…
</fo:flow>
</fo:page-sequence>
この例では先頭の fo:block はパディングがなく、ボーダーのみ設定されている。先頭
図 5.5 ブロックエリアの幅
45
fo:block の左右ボーダーは親の参照エリアであるページ本文区画の内容(版面)の幅で
ある。二つめの fo:block には左右のインデント設定はなく、パディングとボーダーの幅
がそれぞれ 1em である。パディングとボーダーは版面の外側に取られる。三つ目の
fo:block には左右のインデント(start-indent、end-indent)が 2em に設定されている。その
内容領域は版面の左右各 2 文字分内側になり、パディングとボーダーがインデント内に
とられる。
5.5.2 ブロックエリアの高さ
ブロックエリアは、普通は親のエリア内で block-progression-direction (ブロック進行
方向)で積み上げられる。ブロックエリアの高さ(block-progression-dimension)は、そ
の子孫に都合の良い高さになる。ブロックエリアは一行毎ラインエリアとなる。文字の
大きさと line-height によって行送りが決まる。line-stacking-strategy はブロックエリアの
子孫であるラインエリアの積み上げに影響を与える。次に例を示す。
<fo:page-sequence …>
<fo:flow flow-name="xsl-region-body">
<fo:block border="0.1pt solid black">
<fo:block font-size="22pt"
font-family="Arial,'MS ゴシック',sans-serif"
space-after="14pt"
break-before="page"
border-after-style="solid"
border-after-width="2pt">
ブロックエリアの高さ
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
line-height="1.6">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを
表示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメ
ントを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
line-height="1em">
46
第 5 章 エリアモデル(領域モデル)
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
font-size="12pt"
line-height="1.6em">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
</fo:block>
…
</fo:flow>
</fo:page-sequence>
図 5.6 ブロックの高さ
段落①はフォントサイズを既定値(10pt)line-height を 1.6(フォントサイズの 1.6 倍)、
段落②は line-height を 1.0(フォントサイズと同じ)、段落③はフォントサイズを 12pt、
line-height を 1.6 としている。line-height がフォントサイズよりも大きいときは、lineheight からフォントサイズを引いた量の半分を各行の前後につける。この量が行間(行
と行の間の空き)となる。
各 fo:block の高さは3行分となるが、行間が異なるため三つの fo:block の高さが異なる
結果となる。
47
5.5.3 ブロックエリア間の間隔
ブロックエリア間の間隔は、先行するブロックの space-after と後行ブロックの spacebefore から決定される。space-after・space-before のデータ型は間隔指定子であり、最大
値、最適値、最小値、優先度(precedence)、条件付き(conditionality)設定ができる。
ブロックエリア同士の間隔は間隔決定規則によって計算される。間隔指定子と間隔決定
規則について詳細は 6.5 複合データ型<space>を参照のこと。
優先度や条件設定がない場合は、隣接する fo:block に指定した space-after と spacebefore の大きい方の値を採用する。次の例は隣接する fo:block に優先度も条件設定もな
い間隔指定子で空きが設定されている例である。
<fo:page-sequence …>
<fo:flow flow-name="xsl-region-body">
<fo:block text-indent="1em"
text-align="justify"
border="0.1em solid black"
line-height="1.6"
space-after="1em" >
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
border="0.1em solid black"
line-height="1.6"
space-before="1em"
space-after="1em" >
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
border="0.1em solid black"
48
第 5 章 エリアモデル(領域モデル)
line-height="1.6"
space-before="1.5em"
space-after="2em">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
<fo:block text-indent="1em"
text-align="justify"
border="0.1em solid black"
line-height="1.6"
space-before="1em">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。
</fo:block>
</fo:flow>
</fo:page-sequence>
図 5.7 ブロックエリア間の間隔
最初のブロックと次のブロックの間の空きは 1em、二つ目のブロックと三つめのブロ
ックの空きは 1.5em、三つめのブロックと四つ目のブロックの空きは 2em となる。
49
5.6 参照エリア座標系の回転
ページ全体については用紙の上が top、下が bottom、左が left、右が right である。参照
エリアの一部については、そのエリアを生成する FO の reference-orientation プロパティに
よって、親の参照エリアに対して回転できる。reference-orientation の既定値は 0 で、この
時、上下左右の四辺は親のエリアの四辺と平行である。例えば 90 を指定すると、指定し
たエリアの参照エリアは、その親の参照エリアの方向に対して反時計廻りに 90 度回転す
る。
次の図のように、Bの reference-orientation プロパティを 270 に設定すると、Bの領域
の top はPの top に対して反時計周りに 270 度回転(時計回りに 90 度回転と同じ)する。
図 5.8 参照エリアの回転
5.7 ライティングモード
表記の進行方向をライティングモードという。ライティングモードによってブロック
進行方向と行内進行方向を変えられる。ライティングモードの既定値は行の進行方向は
上から下、文字の進行方向は左から右である。参照エリアに対して writing-mode プロパ
ティを設定することで、ライティングモードを変更できる。次の図は、Bの writing-mode
プロパティを tb-rl に設定し、Bブロック(reference-orientation は 0)を縦書きとした例で
50
第 5 章 エリアモデル(領域モデル)
図 5.9 ライティングモードの設定
ある。このとき領域Bでは文字は上から下へ、行は右から左に進む。
writing-mode プロパティの値は次のものがある。
表 5.1 writing-mode プロパティの値
値
lr-tb(既定
値)
rl-tb
tb-rl
説明
インラインのエリア、テキストの文字は左から右に進み、行とブロックは上から下に進む。
インラインのエリア、テキストの文字は右から左に進み、行とブロックは上から下に進む。ア
ラビア語、ヘブライ語で使われる。
インラインのエリア、テキストの文字は上から下に進み、行とブロックは右から左に進む。日
本語、中国語の縦書きで使われる。
5.7.1 参照エリアのエリア座標系の回転とライティングモードの適用
エリア座標系の回転と、ライティングモードは全ての参照エリアに適用できる訳では
ない。例えば、テーブルのセル(fo:table-cell)単位での縦書きは指定できない。セル単
位で縦書きに設定したいときは、セルの中に fo:block-container を置いて、fo:blockcontainer に縦書きを設定する。
表 5.2 参照エリアの回転とライティングモードの適用
fo:simple-page-master
エリア座標系の回転
ライティングモード
○
○
51
fo:title
fo:region-body
fo:region-before
fo:region-after
fo:region-start
fo:region-end
fo:table
fo:table-caption
fo:table-cell
fo:block-container
fo:inline-container
×
○
○
○
○
○
×
×
×
○
○
×
○
○
○
○
○
○
×
×
○
○
5.8 その他エリアの配置
5.8.1 ラインエリア
ラインエリアはブロックエリアの特別なタイプである。ボーダー、パディングをもた
ない。XSL-FO プロセサはラインエリアの開始辺に baseline-start-point を設定し、ライン
エリアの中で、その点に相対的にインラインエリアを配置する。
5.8.2 インラインエリア
インラインエリアはそれ自身の line-height トレイトを持ち、それを含むブロックエリ
アの line-height とは異なることがある。もし、先祖のラインエリアの line-stackingstrategy が line-height の場合、インラインエリアの line-height トレイトがラインエリアの
配置に影響を与えることがある。また。インラインエリアは nominal-font に対して
actual-baseline-table を持つ。また、dominant-baseline-identifier トレイトを持つ。
インラインエリアの shift-direction でベースライン移動方向を示す。
インラインエリアは子供のエリアを持つことがあり、子供を持つ場合、参照エリアに
なることもある。子供を持たないインラインエリア及び子供がブロックエリアであるイ
ンラインエリアの内容領域の幅と高さはそれを生成する FO で指定した通りに計算す
る。
子供がインラインエリアであるインラインエリアの大きさは、dominant-baseline から
text-depth 分の距離と反対方向に text-altitude 分の距離を合わせた高さを持つ。また、
inline-progression-direction 方向には、最初の子供の配置矩形の開始辺から最後の子供の配
置矩形の終了辺までの範囲になる。
5.8.3 グリフエリア
典型的なインラインエリアはグリフエリアである。グリフエリアとは特定のフォント
52
第 5 章 エリアモデル(領域モデル)
の 文 字 の 表 現 を 含 む も の で あ る 。 グ リ フ エ リ ア は 対 応 す る nominal-font と glyphorientation を持つ。nominal-font はそのタイポグラフィックス・トレイトによって決定さ
れ、文字データに適用される。
グリフエリアの alignment-point と dominant-baseline-identifier は使用するライティン
グ・システムによって指定され、ラインエリアの子孫であるインラインエリアの配置を
制御するのに使われる。グリフエリアは子供を持たない。そのエリアの高さ(blockprogression-dimension)と actual-baseline-table はフォントの中の全てのグリフに対して同
一である。
グリフの方向を決めるプロパティには、glyph-orientation-horizontal と glyph-orientationvertical の2つがある。glyph-orientation-vertical は、縦書きの時、欧文の向きを回転する
のに使うなど既定値のグリフの方向に対して相対的なグリフの方向を決定できる。
53
第 6 章 式・数値の表現
6.1 式 と 評 価
プロパティ値の指定には式を使うことができる。式は最初に評価されて、結果の値か
らプロパティの値が決定される。プロパティは独自の文脈によって評価される。この文
脈は次のようなものがある。
●
プロパティの値として許される結果のタイプ
●
式の結果の値のタイプからプロパティに許されるタイプへの変換
●
カレント・フォントサイズ
●
タイプ毎の相対的な数値から絶対的な数値への変換
式の中の文字、キーワード、数値はプロパティの文脈によって認識する。例えば、あ
るプロパティの値が auto であるとき、auto はプロパティの定義で指定されたアルゴリズ
ムによって特定のタイプの値に変換される。このようなとき、結果の値は FO のある側
面の幅を指定する絶対長になることもある。
ある FO のプロパティ・セットを評価する場合は指定の順序がある。基本的には、fontsize プロパティを一番先に評価しなければならない。他のプロパティはどのような順序
で評価されても構わない。font-size の評価に用いるカレント・フォントサイズは親の要
素のフォントサイズになる。
数値には、絶対数値と相対数値がある。数値の指定においては、+(和)、-(差)、*
(積)、div(割算)、mod(残余)計算を使える。
6.2 単
位
表 6.1 単位
分類
説明
名前
定義
cm
mm
in
絶対数値
絶対数値は数字と絶対単位からなる。 pt
pc
px
54
2.54cm
1/72in
12pt
典型的なコンピュータのディスプレイの画素の表
示の近似値。デバイス依存である。1/92 インチま
第 6 章 式・数値の表現
分類
説明
名前
定義
たは 1/72 インチのような値にしても良い。
%
相対数値
相対長は数字と相対単位からなる。
em
既知の特性値のパーセンテージ
現在の font-size プロパティの値を単位とする。
1em は現在の font-size と同じである。
カラーは、RGB(red, green, blue)と ICC(International Color Consortium)の指定がで
きる。
6.3 ショートハンド・プロパティ
XSL-FO では、2 種類のショートハンド・プロパティを使える。border のように CSS か
ら直接もってきたものと page-break-inside のように CSS のプロパティを分解したり結合
したりしたもので、両方とも同じように処理される。
ショートハンドは親から継承されず、展開した個々のプロパティが継承される。CSS
では、関係するショートハンドと個々の関係するプロパティの処理順位をユーザが指定
する。XML の属性には優先順位がないため、XSL-FO で優先順位を定義している。原則
はより詳細な指定の優先度が高い。個々のプロパティはショートハンドよりも優先順位
が高く、例えば、border より border-top の方がより詳しく、さらに border-top-color の方が
より詳しい。
さらに、曖昧なケースについては次のように優先順位を定義する。border-style、bordercolor、border-width よりも border-top、border-bottom、border-right、border-left の方が詳しい。
プロパティの決定は、概念的には、次の順序である。
1) 全てのプロパティを既定値に設定する。
2) ショートハンドを徐々に詳しくなる順番で処理する。
3) 個別のプロパティに指定された値を処理する。
4) 2,3段階で値が指定されなかったプロパティに継承値を処理する。
6.4 絶対方向と相対方向の対応
padding-left と padding-start のような絶対プロパティと相対プロパティの対応関係は次
のようになる。
表 6.2 絶対方向と相対方向の対応
writing-mode
block-progression-direction を top-to-bottom に指定
絶対と相対プロパティの対応
top は before に、bottom は after に対応
55
block-progression-direction を bottom-to-top に指定
block-progression-direction を left-to-right に指定
block-progression-direction を right-to-left に指定
inline-progression-direction を left-to-right に指定
inline-progression-direction を right-to-left に指定
inline-progression-direction を top-to-bottom に指定
inline-progression-direction を bottom-to-top に指定
inline-progression-direction を奇数行は left-to-right に、偶数行は rightto-left に指定
top は after に、bottom は before に対応
left は before に、right は after に対応
left は after に、right は before に対応
left は start に、right は end に対応
left は end に、right は start に対応
top は start に、bottom は end に対応
top は end に、bottom は start に対応
left は start に、right は end に対応
border 関係、padding 関係のプロパティには次のルールを適用する。
border-left-color と border-start-color のように、絶対と相対の2つのプロパティが対応し
ているときは最も単純である。この場合、FO に絶対値が指定されているなら、その計算
値が相対値にも設定される。絶対値が明示的に設定されていないなら、絶対値の計算値
が相対値に設定される。FO に相対値が設定されていて、絶対値はショートハンドの展開
で得られるとき、絶対値の計算値が相対値の計算値にも設定される。両方とも指定され
ていないなら、継承または既定値を使う。両方が指定されていて一致しないときは絶対
の方が優先する。
ブロックレベルの FO の space-before、space-after、end-indent、start-indent の四つの相対
プロパティとインラインレベル FO の space-start、space-end は、margin-top、marginbottom、margin-left、margin-right の四つの絶対プロパティに対応してセットされる。
end-indent と start-indent については、padding と border-width の値と次の関係を満たす。
●
end-indent=対応する margin +対応する padding +対応する border-width
●
start-indent=対応する margin+対応する padding +対応する order-width
ライティングモードに基づいて FO の height、min-height、max-height プロパティと、
width 、 min-width 、 max-width の プ ロ パ テ ィ は 、 block-progression-dimension ( 高 さ )、
inlineprogression-dimension(幅)の設定値に換算される。
エリアの内容領域の start-indent、endindent、inline-progression-dimension の合計は、そ
の直ぐ先祖の参照エリアの内容領域の inlineprogression-dimension(幅)に一致しなけれ
ばならない。もし、不一致ならば end-indent を調整する。
6.5 複合データ型<space>
空きの量、高さの量を指定するプロパティは<space>型の複合データ型(間隔指定子と
呼ぶ)として記述されることがある。間隔指定子は次のコンポーネントをもつ。
minimum, optimum, maximum
空き量は optimum であることが望ましいが、mimimum 以上でなければならず、
56
第 6 章 式・数値の表現
maximum を超えてはならない。数値はマイナスも許される。マイナスの場合、二つ
のエリアが重なることを意味する。
conditionality
間隔指定子を、参照エリアまたはラインエリアの先頭または最後で有効にするかど
うかを制御する。retain または discard の値をもつ。discard の値をもつものを条件付
間隔指定子という。設定例は 9.7 ページや段の先頭ブロックと最終ブロックの前
後の空き量を参照のこと。
precedence
自然数または force の値を取る。この値が force である間隔指定子を強制間隔指定子
という。
6.5.1 間隔指定子を設定できるプロパティ
間隔指定子を設定できるのは次の 7 種類のプロパティである。このうち、line-height 以
外は FO 間の空き量である。
●
space-before
●
space-after
●
space-end
●
space-start
●
line-height
●
letter-spacing
●
word-spacing
例えば、space-before プロパティは次のように指定できる。
space-before.minimum="2.0pt"
space-before.optimum="3.0pt"
space-before.maximum="4.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
6.5.2 省
略
形
複合値の指定では、省略形を使うことができる。長さの場合では、プロパティ名と一
致する名前をもつ属性のすべての長さのコンポーネントに指定した値をセットし、長さ
以外のコンポーネントには既定値をセットする。例えば、
space-before="4.0pt"
57
と指定するのは、次と同等である。
before.minimum="4.0pt"
space-before.optimum="4.0pt"
space-before.maximum="4.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
省略形を完全な指定と一緒に使うことができる。完全な指定は、省略形を展開したも
のより優先する。例えば、
space-before="4.0pt"
space-before.maximum="6.0pt"
と指定するのは次と同等である。
space-before.mimimum="4.0pt"
space-before.optimum="4.0pt"
space-before.maximum="6.0pt"
space-before.precedence="0"
space-before.conditionality="discard"
複合型は個別のコンポーネントではなく一単位として継承する。
6.5.3 隣合う間隔指定子の距離の解決
隣り合うエリアの間の距離を、複数の間隔指定子によって指定しているとき、それら
の間隔指定子の距離を解決する計算を行い、間隔指定子を決定する。計算方法の概略は
次の通り。
1) 初めの間隔指定子が条件付であればその距離を 0 とする。
2) 続く条件付間隔指定子はすべて距離を 0 とする。残ったものの中に強制間隔指定
子があれば、強制間隔指定子でないものの距離を 0 とした上で、強制間隔指定子ひ
とつひとつの距離を、決定済みとして採用する。強制間隔指定子がない場合は、一
番 precedence が大きなものの中で optimum 値の最大のものを採用し、他の間隔指定
子の距離は 0 とする。
3) 決定済みの間隔指定子が複数ある時は、それらが指定する距離を加算する。
58
第 6 章 式・数値の表現
6.6 複合データ型<keep>
keep 型は指定された FO 全体、または指定した FO とその前後の FO を行、段、ページ
の範囲に納める指定ときに使う。次の三つの三つのコンポーネントをもつ複合型であ
る。
●
within-line
●
within-column
●
within-page
各コンポーネントの値は、auto、always または整数。keep を省略形で指定したときは、
プロパティ名を持つ属性のコンポーネントに妥当な値を与える。例えば、
keep-together="always"
と指定するのは、次と同等である。
keep-together.within-line="always"
keep-together.within-colums="always"
keep-together.within-page="always"
6.6.1 keep 型を設定できるプロパティ
keep-together
指定したコンテキストにおいて FO を同じ領域の中に納める。
keep-with-next
指定したコンテキストにおいて FO を次の FO と同じ領域に納める。
keep-with-previous
指定したコンテキストにおいて FO を前の FO と同じ領域に納める。
keep-together.within-colums="always"の指定例は 9.9 改ページの抑制(Keep)を参照の
こと。
59
第 7 章 文字コードとフォント
7.1 文 字 コ ー ド
XML ドキュメントの文字セットは Unicode(符号化方式は UTF-8 または UTF-16 が主
流)が標準であるが、XML 宣言で文字符号化方式を指定すれば Shift_JIS による符号化方
式を扱うこともできる。Unicode にある文字については、Unicode のコードポイントを文
字参照の形で直接指定できる。XML ドキュメントの中で Shift_JIS で符号化したとして
も、文字参照では Unicode のコードポイントで参照する。例えば、copyright 記号©のコ
ードポイントの参照は、「&#x00a9;」のように行う。
7.2 フ ォ ン ト
フォントについては、FO のプロパティとして設定する。設定できる FO は、ブロック
レベル、インラインレベルのほぼすべてである。フォント関連プロパティの種類は次の
ものがある。
●
font-family
●
font-selection-strategy
●
font-size
●
font-stretch
●
font-size-adjust
●
font-style
●
font-variant
●
font-weight
7.2.1 font-family
font-family プロパティにフォントファミリー名(MS 明朝、MS ゴシックなど)を設定
する。フォントファミリー名が空白を含む場合は引用符で囲む。引用符を省略するとフ
ォントファミリー名の前後の空白を省略し、フォント名の中に二つ以上の空白の並びが
あると一つだけにする。フォントファミリー名で指定したフォントがシステムにない場
合のために、generic-family 名として、serif、sans-serif、cursive、fantasy、monospace の五
つのキーワードが定義されている。
60
第 7 章 文字コードとフォント
7.2.2 font-size
font-size プロパティにフォントのサイズを指定する。
表 7.1 font-size プロパティ
font-size の値
説明
<absolute-size>
xx-small、x-small、small、medium(既定値)、large、x-large、xx-large の七つのキーワードの
どれか。
larger、smaller のどちらか。XSL-FO プロセサは、親要素のフォントサイズに対して相対的
にサイズを決める。
フォントサイズの絶対値を指定します。マイナスはエラーとなる。
em、%値を設定すると、親の要素のフォントサイズに対して相対的に、フォントサイズの
絶対値を計算する。
<relative-size>
<length>
<percentage>
7.2.3 font-style
font-style プロパティには、normal(既定値)、italic、oblique、backslant のいずれかを指
定できる。フォントファミリーに該当するフォントフェイスがあることが前提である。
7.2.4 font-variant
font-variant プロパティには、normal(既定値)、small-caps を指定できる。small-caps フ
ォントを指定すると、小文字が大文字に似て見え、しかし、より小さく若干異なるプロ
ポーションをもつグリフとなる。このプロパティを使うには、二つの大文字と小文字を
もつフォントが必要である。
漢字やかななどの和文フォントは大文字・小文字がないので、このプロパティを指定
しても意味がない。
7.2.5 font-weight
フォントの太さは、font-weight プロパティにキーワードまたは数字を指定して設定す
る。
表 7.2 font-weight プロパティ
font-weight の
値
normal(既定
値)
bold
bolder
lighter
説明
400 と同じ。
700 と同じ。
フォントに割り当てられたウエイトのなかで、継承した値より暗くなるような次の値にな
る。
フォントに割り当てられたウエイトのなかで、継承した値より明るくなるような次の値に
61
<integer>
なる。
100,200,300,400,500,600,700,800,900 大きいほど暗くなる
7.3 空 白 の 扱 い
ドキュメントの組版では、空白によって文字間の調整を行うことがある。従って、空
白の取り扱いは注意が必要である。
7.3.1 XML 仕様における空白処理規定
XML ドキュメント中で空白として扱われる文字コードは、英文空白(#x20)、タブコ
ード(#x9)、改行(#xA)、復帰(#xD)の 4 種類である。但し、改行と復帰が連続した
場合、または復帰 XML ドキュメントを処理する際に、ひとつの改行になる。
XML の仕様では XML ドキュメントの文字データ中の空白はアプリケーション(XSLFO プロセサ)にそのまま引き渡されなければならない。しかし、その後の空白の処理は
XSL-FO プロセサに任される。但し、要素に xml:space という属性を加え、その値として
preserve を指定する(xml:space="preserve")と、XSL-FO プロセサにすべての空白を保存
する意図を伝えることができる。xml:space="default"とすることで、XSL-FO プロセサの
既定値の空白処理モードを適用可能となる。この属性は、xml:space 属性の別の指定で上
書きされない限り、指定した要素の内容に現れるすべての要素に適用される。
さらに、XSL の仕様では空白文字に関連して white-space-treatment、linefeed-treatment、
whitespace-collapse 三つのプロパティが定義されている。
7.3.2 white-space-treatment
U+000A(改行)以外の空白文字の取り扱いを指定する。
表 7.3 white-space-treatment
white-space-treatment
の値
ignore
preserve
ignore-if-before-linefeed
ignore-if-after-linefeed
ignore-if-surroundinglinefeed(既定値)
inherit
62
説明
linefeed-treatment の処理をする前に、改行以外の空白文字は捨てる。
linefeed-treatment の処理をする前に、改行以外の空白文字は U+0020(空白)に変
換する。
linefeed-treatment の処理をする前に、改行の直前の空白文字は捨てる。
linefeed-treatment の処理をする前に、改行の直後の空白文字は捨てる。
linefeed-treatment の処理をする前に、改行の直前と直後の空白文字は捨てる。
第 7 章 文字コードとフォント
7.3.3 linefeed-treatment
表 7.4 linefeed-treatment
linefeed-treatment の値
説明
ignore
preserve
treat-as-space(既定値)
treat-as-zero-width-space
U+000A(改行)を捨てる。
特別な処理はしない。
改行は、U+0020(空白)に変換する。
改行コードは、U+200B(ゼロ幅スペース)に変換する。
7.3.4 white-space-collapse
XSL-FO では、white-space-collapse プロパティによって、連続する空白文字をひとつに
まとめるか、それともなにもしないかを指定できる。既定値では、空白文字はひとつに
まとめられる。
表 7.5 white-space-collapse
white-spacecollapse の値
false
true(既定値)
説明
なにもしない
その文字が XML の空白文字であって、かつ U+000A(改行)でなく、かつ直前の文字
が XML の空白文字もしくは直後の文字が改行であるならばその空白文字は無視され
る。
XML ドキュメントの要素に xml:space="preserve"が指定されていたならば、FO に変換
する際には、その FO の white-space-treatment は preserve とし、white-space-collapse プロパ
ティには false を設定しなければならない。
63
第 8 章 ボーダー(罫線)
XSL-FO では罫線は FO の周囲のボーダーとして設定する。
8.1 設 定 項 目
上下左右独立に、線の種類、色、太さを設定できる。
表 8.1 ボーダーの種類
設定項目
ボーダーの種類
ボーダーの色
ボーダーの太さ
設定方法
border-*-style の値として none、hidden、dotted、dashed、solid、double、groove、ridge、
inset、outset のどれかを指定する。
border-*-color にカラーのキーワードまたは値を指定する。
border-*-width の値として thin、medium、thick、<length>を指定する。
上下左右は、*のところに、before、after、start、end、top、bottom、left、right のどれ
かを指定する。
top、bottom、left、right は既定値では紙の上下左右に対応する。reference-orientation に
よって領域を回転した場合は top の位置は回転角度によって決まる。before、after はブロ
ック進行方向の前後、start、end は文字の進行方向の前後である。
8.2 設定対象 FO
ボーダーを指定できる FO は次の通り。
●
fo:region-body
●
fo:region-before
●
fo:region-after
●
fo:region-start
●
fo:region-end
●
fo:title
●
fo:block
●
fo:block-container
●
fo:character
●
fo:external-graphic
64
第 8 章 ボーダー(罫線)
●
fo:instream-foreign-object
●
fo:inline
●
fo:inline-container
●
fo:leader
●
fo:page-number
●
fo:page-number-citation
●
fo:table-and-caption
●
fo:table
●
fo:table-column
●
fo:table
●
fo:table-header
●
fo:table-footer
●
fo:table-body
●
fo:table-row
●
fo:table-cell
●
fo:list-block
●
fo:list-item
●
fo:basic-link
例えば、ブロックの前方辺に太さ 0.5mm の赤の点線を引く場合は次のように設定す
る。
<fo:block border-before-style="dotted"
border-before-width="0.5mm" />
8.2.1 ボーダーの種類と太さ
ボーダーの種類と太さの設定例を示す。
65
図 8.1 ボーダーの種類と太さ
66
第 9 章 ブロック組版オブジェクト
9.1 見出しと本文段落のプロパティ指定例
fo:block は最も多用する FO である。XSL-FO では HTML の見出し(h1、h2 など)、本
文段落(p)に相当する要素はなく、見出しや本文段落は fo:block のプロパティとして指
定する。次に見出しと本文にあたる fo:block の指定例を示す。
<fo:block font-size="22pt"
font-family="Arial,'MS ゴシック',sans-serif"
space-after="14pt"
break-before="page"
border-after-style="solid"
border-after-width="2pt">はじめに</fo:block>
<fo:block text-indent="1em"
text-align="justify">
「Extensible Stylesheet Language 仕様」
(XSL 仕様)は XML ドキュメントを表
示・印刷するための仕様として W3C が勧告したものです。XSL 仕様は XML ドキュメン
トを表示・印刷するためのオブジェクトとプロパティを定義しています。このため、
この仕様に基づいて作成された結果を XSL-FO(XSL-Formatting Object)と呼ぶ
のが通例です。
</fo:block>
<fo:block text-indent="1em"
text-align="justify">
さて XML ドキュメントから、この XSL-FO を作成して印刷するには、次の手順が一般
的です。
</fo:block>
この例では三つの fo:block がある。最初の fo:block が見出しであり、二つ目と三つ目の
fo:block が本文の段落である。この XSL-FO を AH Formatter で組版した結果が図 9.1
fo:block の組版である。
この例で fo:block に指定されているプロパティを次の表に示す。なお、表に示すもの
以外に、明示的に指定されていないプロパティがある。AH Formatter の既定値で暗黙に
67
図 9.1 fo:block の組版
設定されているが、もちろんすべて明示的に設定変更できる。
表 9.1 fo:block の組版例のプロパティ
プロパティ
プロパティの値
break-before
border-after-style
border-after-width
space-after
font-family
font-size
page
solid
2pt
14pt
Arial,'MS ゴシック',sans-serif
見出しのブロック:22pt
本文ブロック:1em(相対値)
justify
1em
text-align
text-indent
説明(段落のレイアウト)
見出し段落の前の改ページ指定
見出し段落の下罫線の種類
見出し段落の下罫線の太さ
見出しの段落の後の空き
見出し段落内テキストのフォント名
段落内テキストのフォントの大きさ
本文段落内の文字配置を均等指定
本文段落の先頭行インデント(字下げ)
9.2 段落レイアウト
一般のページ組版では段落に次のようなレイアウト指定をする。
●
段落のフォント設定―フォントの種類、フォントの大きさなどのフォント関連の
属性
●
段落の文字配置―均等配置、左寄せ、右寄せ、先頭行インデント、最終行の配置
●
インデント、ボーダー、パディング―左右端から文字の先頭、終端までの間隔(左
右インデント)、段落のボーダーの太さや種類(ボーダー)、段落のボーダーと段落
の文字の間隔(パディング)
●
段落の背景―背景色、背景画像
●
段落間の間隔設定、本文領域上端と最初の段落の間隔設定
●
段落の前後の改ページ、改段指定
●
段落間での改ページの抑制
●
段落内の行ピッチ設定
●
多段組の全段抜き設定
68
第 9 章 ブロック組版オブジェクト
9.3 段落フォント設定
fo:block のプロパティにフォント関連のプロパティの値を設定して、段落のフォント
属性を設定できる。次の例は font-family、font-size で段落のフォントの種類と大きさを設
定した。
段落のフォント設定例
<fo:block font-size="18pt"
font-family="sans-serif">
段落のフォントの種類:sans-serif、フォントのサイズ:18 ポイントに設定
</fo:block>
上の設定例を組版すると、次のようになる。
図 9.2 段落フォント設定例
9.4 段落の文字配置
段落内部の文字配置プロパティには次の三つがある。
●
text-indent で fo:block の先頭行の字下げまたは字上げを指定する。
●
text-align で段落の文字の中央寄せ、両端揃え、左寄せ、右寄せ、内側・外側寄せを
指定する。
●
text-align-last で段落最終行の文字配置を指定する。
各プロパティの設定値を次の表に示す。
表 9.2 段落の文字配置プロパティ
プロパ
プロパティの値
ティ
説明
text-
<length>または
ブロックエリアの先頭行のインデント(先頭行の字下げ)。マイナス値
indent
<percentage>または継承
は、ハンギング・インデントとなる。
text-align
start
開始辺側に寄せる。横書きでは、左寄せに相当。
center
センタリング(中央寄せ)する。
end
終了辺側に寄せる。横書きでは、右寄せに相当。
69
プロパ
プロパティの値
ティ
justify
textalign-last
説明
ジャスティファイ。ブロックの幅全体に文字を配置する。最終行は、
text-align-last で指定する。
inside
ページを綴じる辺の側に寄せる。
outside
ページを綴じる辺の反対側に寄せる。
left
text-align='start'と同じ。
right
text-align='end'と同じ。
relative
text-align がジャスティファイの時は左寄せとし、そうでないときは
text-align と同じとする。
start、center、end、justify、inside、outside、left、right は、text-align と同じ意味となる。
図 9.3 段落の文字配置例
70
第 9 章 ブロック組版オブジェクト
fo:block のプロパティにテキストの配置属性を設定した例である。
9.5 インデント、ボーダー、パディングの関係
マージンを明示的に指定しないでインデントを指定した場合、margin は次式のように
インデント幅からボーダーとパディングを引いた量である。
●
margin = indent - (border-width) – padding
マージンもインデントも明示的に指定しない場合、インデントは 0(継承値)になる。
margin は次のように計算する。ボーダー幅とパディング分は版面の外側になる。
●
margin = -(border-width) – padding
マージンを明示的に指定すると、indent はマージン、ボーダー幅とパディングの合計
となる。
●
indent = margin + (border-width) + padding
9.6 段 落 の 背 景
段落の背景には、カラー、バックグラウンド・イメージを指定できる。バックグラウ
ンド・イメージの繰り返し、その位置を指定できる。
表 9.3 段落の背景プロパティ
プロパティ
background-color
background-image
background-repeat
backgroundposition- horizontal
プロパティの値
説明
<color>
transparent(既定値)
<uri 指定>
none(既定値)
repeat(既定値)
repeat-x
repeat-y
no-repeat
<%値>
カラーの値
下層のカラーが見える
バックグラウンド・イメージの URI を指定する。
なし
水平方向、垂直方向とも繰り返す
水平方向のみ繰り返す
垂直方向のみ繰り返す
繰り返さない。一個のイメージのみ描画する。
イメージの左からの%値の位置が、エリアのパディング矩形の指
定位置に配置される。既定値は 0%。
メージの左辺が、パディング矩形の左辺からの指定位置に配置さ
れる。
0%と同じ
50%と同じ
100%と同じ
イメージの上からの%値の位置が、エリアのパディング矩形の上
からの指定位置に配置される。既定値は 0%。
イメージの上辺が、パディング矩形の上辺からの指定位置に配置
される。
0%と同じ
<長さ>
backgroundposition- vertical
left
center
right
<%値>
<長さ>
top
71
center
bottom
50%と同じ
100%と同じ
9.7 ページや段の先頭ブロックと最終ブロックの前後の空き量
例えば見出しの前に段落があるときは、space-before による空きを有効にし、改ページ
や 改 段 し た と き は 無 効 に す る に は space-before.conditionality を 使 う 。 こ の 既 定 値 は
discard になっているので、見出しに space-before で空きを指定しても、その見出しがペ
ージの先頭や段組の段の先頭に配置されたときは無視される。ページや段の先頭の
space-before を有効にしたい時には space-before.conditionality="retain"に設定する。詳し
くは 6.5 複合データ型<space>を参照。
次の図は、2 段組で左段の先頭ブロックには、space-before.conditionality="discard"(既
定値)、右段の先頭ブロックに space-before.conditionality="retain"を設定した例である。
図 9.4 段落先頭の空きの制御
9.8 改ページや改段(break-before、break-after)
fo:block の break-after、break-before プロパティで当該の fo:block の前後で改ページ、ま
たは改段を設定できる。単純な改ページ、改段のみでなく改ページして次のページを偶
数ページで始めたり、奇数ページで始めたりする指定もできる。
表 9.4 改ページや改段のプロパティ
Break プロ
プロパティ
パティ
の値
break-before
72
page
説明
この FO が生成する最初のエリアの前で改ページする。
第 9 章 ブロック組版オブジェクト
Break プロ
プロパティ
パティ
の値
even-page
odd-page
この FO が生成する最初のエリアの前に改ページを挿入し、偶数ページから始
まるようにする。
この FO が生成する最初のエリアの前に改ページを挿入し、奇数ページから始
まるようにする。
column
この FO が生成する最初のエリアの前で改段する。
auto
強制的な break は行わない。
page
この FO が生成する最後のエリアの後に改ページを挿入する。
even-page
break-after
説明
odd-page
この FO が生成する最後のエリアの後に改ページを挿入し、次の FO の最初のエ
リアが偶数ぺージから始まるようにする。
この FO が生成する最後のエリアの後で改ページを挿入し、次の FO の最初のエ
リアが奇数ページから始まるようにする。
column
この FO が生成する最後のエリアの後で改段を挿入する。
auto
強制的な break は行わない。
9.9 改ページの抑制(Keep)
keep-with-previous、keep-with-next、keep-together の三つのプロパティは、ある FO と次
の FO の間で改ページ、改段が起こらないようにする。within-page、within-column、withinline の三つのコンポーネントをもつ複合型(keep 型 6.6 複合データ型<keep>も参照)
で、それぞれのコンポーネントに強度を示す値を設定するか always とする。数字が大き
いほど強く、always は最強の条件である。auto にすれば Keep 条件はなにも設定されな
い。なお、within-line は、ラインエリアの中に配置されるエリアが対象になる。
次の図の左側では、ブロック 1 とブロック 2 の間で改段されている。ブロック 1 に
keep-withnext.within-column="always"を設定すると右側のようになり、ブロック1の後ろ
で改段されない。
73
図 9.5 改ページの制御
9.10 ウィドウとオーファン (widows、orphans)
ページの最後に次の段落の先頭を、指定した行数以上配置するには、widows プロパテ
ィで行数を指定する。既定値は windows="2"(2 行)である。
ページ先頭に段落の最後の行を指定した数以上配置するには、orphans プロパティで行
数を指定する。既定値は orphans="2"(2 行)である。
9.11 行ピッチの指定 (line-height、line-stacking-strategy)
fo:block で生成するエリアの中にはラインエリア(行)ができる。各行の行送りは、
fo:block の line-height と line-stacking-strategy プロパティの値で設定する。line-height プロ
パティはすべての FO に設定できる。line-height の既定値は 1.2 倍であるが、これは欧文
組版向きである。日本語組版では line-height を 1.6 程度にするのが望ましい。図 9.6 行
ピッチの指定に line-height の設定により行ピッチがどのように変わるかを示した。
表 9.5 行ピッチのプロパティ
line-height の
値
74
説明
第 9 章 ブロック組版オブジェクト
図 9.6 行ピッチの指定
AH Formatter V6.3 の組版設定でフォントサイズ 10pt、行送り 1.6 に設定した。
normal(既定
値)
フォントサイズに基づいて自動設定する。XSL-FO(CSS から)1.0 から 1.2 が推奨されてい
る。しかし、日本語組版では不適切である。1.5~1.7 程度が良いだろう。
<length>
<number>
エリアの高さをこの値にする。マイナスはエラーである。
フォントサイズにこの値を掛けた値がプロパティの計算値である。マイナスはエラーであ
る。
フォントサイズにこのパーセント値を掛けた値がプロパティの値になる。マイナスはエラ
ーである。
<percentage>
<space>
ハーフレディングを決定するのに使う行の高さ(line-height)の複合型指定子。もし、lineheight のみを指定した場合、line-height.minimum、同 optimum、同 maximum は計算結果の値
がセットされ、line-height.precedence="force"、line-height.conditionality="retain"となる。lineheight.precedence はハーフレディングと他の余白との併せ方をコントロールし、lineheight.conditionality は参照エリアの最初の行と最後の行の余白をコントロールする。なお、
ハーフレディングについては表の下の説明を参照のこと。
fo:block が生成するエリアのハーフレディングの値は、fo:block の line-height からフォ
ントの高さを引いた値の半分に設定される。text-altitude、text-depth は既定値では、フォ
ント・メトリックスの値を使う。
line-stacking-strategy の値は、font-height、max-height(既定値)、line-height のどれかを
取る。
75
図 9.7 ハーフレディング
表 9.6 line-stacking-strategy の値
linestackingstrategy
font-height
max-height
line-height
(既定値)
説明
fo:block のフォントの高さ+前後のハーフレディング幅により行を配置する。ある fo:block
が生成するブロックエリアの子供のラインエリアについてはブロックの高さは同一となる。
行の space-after と space-before はそれぞれハーフレディングの値を設定する。改行ピッチが
一定になり、もし、行の中に大きな文字があっても行間が広がらないため、前後の行が重な
ることがある。
行の高さは fo:block のフォントの高さとそのラインエリア内のインラインエリアの配置矩形
をすべて含む高さである。行の中に大きな文字があるときは、行によって高さが異なること
がある。行の space-after と space-before はそれぞれハーフレディングの値を設定する。
「行ごとのインラインの高さ」で行を配置する。行によって行の高さが異なることがある。
「行ごとのインラインの高さ」とは、次の両方を包含する高さである。
●
行内の個々のインラインエリアの高さの最大値を取る。インラインエリアの高さと
は、インラインエリアの配置矩形が標準配置矩形の時は配置矩形の前後にハーフレ
ディング分の間隔を追加したもの。また、ラージ配置矩形の時は space-before と
space-after の分の間隔を追加したもの。
●
行を生成する fo:block のフォントの高さとその前後にハーフレディング分を加えた
高さ。
インラインエリアの配置矩形は次の図の通り。通常のインラインエリアは標準配置矩
形であり、ラージ配置矩形となるのは、fo:external-graphic で挿入されるグラフィックス
などの場合である。
76
第 9 章 ブロック組版オブジェクト
図 9.8 インラインエリアの配置矩形
77
第 10 章 ブロックコンテナー
fo:block-container は、横書き文書の中に部分縦書きを挿入するなど、本文と異なるラ
イティングモードのエリアを組み込むのに使う。fo:block-container ではライティングモ
ードのみでなく、リファレンス・オリエンテーションの変更もできる。
次は、fo:block-container を使って横書きの本文に部分縦書を埋め込んだ例である。ブ
ロックコンテナーの文字の進行方向(inline-progression-direction)が上位の参照エリアの
文字の進行方向(inline-progression-direction)と平行でないときは、その幅を指定する必
要がある。
<fo:block-container writing-mode="tb-rl"
padding-before="3pt"
padding-after="3pt"
padding-start="3pt"
padding-end="3pt"
width="167mm"
height="50mm">
<fo:block text-indent="1em"
space-before="0.6em"
space-after="0.6em"
start-indent="5mm"
end-indent="5mm"
text-align="justify">
--本文テキスト (略)-</fo:block>
</fo:block-container>
78
第 10 章 ブロックコンテナー
図 10.1 部分縦書
10.1 ブロックコンテナーの位置指定(absolute-position)
ブロックコンテナーは絶対位置指定できる。絶対位置を指定した場合、他のフローと
関係なく指定した位置に配置され、他のフロー・オブジェクトが既にレイアウトされて
いる場合は重なる。
次は親のブロックコンテナーの中に、子供のブロックコンテナ―を配置して見かけ上
段組のように配置した例である。
<fo:block-container height="10pt*10*1.6"
border-style="solid"
border-width="thin"
border-color="red"
padding="0.3em"
space-before="5mm"
space-before.conditionality="retain">
<fo:block/>
<fo:block-container absolute-position="absolute"
inline-progression-dimension="50%"
margin-left="0pt"
margin-right="0pt"
space-after="4mm">
<fo:block>
region-body<fo:block/>region-before<fo:block/>regionafter<fo:block/> region-start<fo:block/>region-end<fo:block/
>title<fo:block/>block<fo:block/>block-container<fo:block/
79
>character<fo:block/>external-graphic
</fo:block>
</fo:block-container>
<fo:block-container absolute-position="absolute"
inline-progression-dimension="50%"
left="50%"
margin-left="0pt"
margin-right="0pt"
space-after="4mm">
<fo:block>page-number<fo:block/>page-numbercitation<fo:block/>table-and-caption<fo:block/>table<fo:block/
>table-column<fo:block/>table<fo:block/>table-header<fo:block/
>table-footer<fo:block/>table-body<fo:block/>table-row
</fo:block>
</fo:block-container>
</fo:block-container>
<fo:block-container height="10pt*10*1.6"
border-style="solid"
border-width="thin"
border-color="red"
padding="0.3em"
space-before="0.5em"
space-before.conditionality="retain">
<fo:block/>
<fo:block-container absolute-position="absolute"
inline-progression-dimension="33%"
margin-left="0pt"
margin-right="0pt"
space-after="4mm">
<fo:block>region-body<fo:block/>region-before<fo:block/
>region-after<fo:block/>region-start<fo:block/>regionend<fo:block/>title<fo:block/>block<fo:block/>blockcontainer<fo:block/>character<fo:block/>external-graphic
</fo:block>
</fo:block-container>
80
第 10 章 ブロックコンテナー
<fo:block-container absolute-position="absolute"
inline-progression-dimension="33%"
left="33%"
margin-left="0pt"
margin-right="0pt"
space-after="4mm">
<fo:block>instream-foreign-object<fo:block/
>inline<fo:block/>inline-container<fo:block/>leader<fo:block/
>page-number<fo:block/>page-number-citation<fo:block/>tableand-caption<fo:block/>table<fo:block/>table-column<fo:block/
>table
</fo:block>
</fo:block-container>
<fo:block-container absolute-position="absolute"
inline-progression-dimension="33%"
left="66%"
margin-left="0pt"
margin-right="0pt"
space-after="4mm">
<fo:block><fo:block/>table-header<fo:block/>tablefooter<fo:block/>table-body<fo:block/>table-row<fo:block/
>table-cell<fo:block/>list-block<fo:block/>list-item<fo:block/
>basic-link
</fo:block>
</fo:block-container>
</fo:block-container>
表 10.1 ブロックコンテナーによる段組
表 10.2 ブロックコンテナ―の位置指定方法
absoluteposition
説明
auto(既定値) 絶対位置指定の制約なし。相対位置指定プロパティに従う。
absolute
エリアの位置は、"left"、"right"、"top"、"bottom"プロパティで指定する。この値は当該エリ
アを含むエリアに対して相対的な指定である。絶対位置指定のオブジェクトは通常のフロ
ーから切り離され、他のオブジェクトの配置に影響を与えない。
fixed
エリアの位置は、絶対モデルに従って配置される。紙の場合は用紙に対して固定となる。
81
"left"、"right"、"top"、"bottom"の値は、長さ、パーセント値または auto(既定値)で指
定する。長さは、参照辺からの固定の値を指定する。パーセント値は、当該エリアを含
むエリアの幅("left"、"right"の時)、または、高さ("top"、"bottom"の時)に対する比率
で指定する。
82
第 11 章 インラインの FO
インラインの FO は行内のレイアウトを指定するために使う。fo:inline と fo:inlinecontainer がある。
11.1 fo:inline
fo:inline は主にテキストに対してテキストを修飾したり、背景をつけたりするプロパ
ティを設定するのに使う。但し、fo:inline の子供にはブロック FO(fo:block、fo:blockcontainer、fo:table-and-caption、fo:table、fo:list-block)を含むこともできる。
11.1.1 文 字 の 修 飾
次は文字修飾の例である。
<fo:inline font-style="italic">
イタリック
</fo:inline>
<fo:inline font-weight="bold">
ボールド
</fo:inline>
<fo:inline baseline-shift="super">
上付き
</fo:inline>
<fo:inline baseline-shift="sub">
下付き
</fo:inline>
<fo:inline text-decoration="underline">
アンダーライン
</fo:inline>
<fo:inline text-decoration="overline">
オーバーライン
</fo:inline>
<fo:inline text-decoration="line-through">
83
中線
</fo:inline>
<fo:inline border-style="dotted">
ボーダー
</fo:inline>
<fo:inline background-color="yellow">
バックグラウンド・カラー
</fo:inline>
図 11.1 文字修飾の例
11.1.2 文字の大きさ
fo:inline の font-size プロパティにフォントサイズを指定することで、文字の大きさを変
更できる。次の例では、1 文字ごとに font-size の値を 8、10、12、18、24、30、36、42、
48 ポイントに設定した。
<fo:block text-align="center">
<fo:inline font-size="8pt">あ</fo:inline>
<fo:inline font-size="10pt">あ</fo:inline>
<fo:inline font-size="12pt">あ</fo:inline>
<fo:inline font-size="18pt">あ</fo:inline>
<fo:inline font-size="24pt">あ</fo:inline>
<fo:inline font-size="30pt">あ</fo:inline>
<fo:inline font-size="36pt">あ</fo:inline>
<fo:inline font-size="42pt">あ</fo:inline>
<fo:inline font-size="48pt">あ</fo:inline>
</fo:block>
84
第 11 章 インラインの FO
図 11.2 文字の大きさ例
11.2 fo:inline-container
fo:inline-container(インラインコンテナー) は、インラインエリアの参照エリアを作
る。異なるライティングモードのテキストやルビなどを挿入するために使う。インライ
ンコンテナーの中に表を含めることもできる。
11.2.1 部 分 縦 書 き
インラインコンテナーの中では、リファレンス・オリエンテーションやライティング
モードを変更できる。これを使うと、インラインエリアの中で部分縦書きを実現できる。
インラインコンテナーによる部分縦書きの例を示す。
<fo:inline font-size="18pt">
横書きの行の中に、
<fo:inline-container reference-orientation="90"
writing-mode="tb-rl">
<fo:block background-color="yellow" >
縦書きのセンテンスを
</fo:block>
</fo:inline-container>
埋め込みます。
</fo:inline>
上の例は、次のように表示される。
図 11.3 部分縦書き
11.2.2 ル ビ の 表 現
インラインコンテナーを使って、fo:block を上下に配置することで見かけ上ルビを実
現できる。次のような複雑なルビも表現できる。
85
<fo:block font-size="1.5em"
font-weight="bold"
space-before="0.83em"
space-after="0.83em"
keep-with-next.within-column="always"
keep-together.within-column="always">
<fo:inline-container alignment-baseline="central"
block-progression-dimension="1em"
text-indent="0pt"
last-line-end-indent="0pt"
start-indent="0pt"
end-indent="0pt"
text-align="center"
text-align-last="center">
<fo:block font-size="50%"
wrap-option="no-wrap"
line-height="1"
space-before.conditionality="retain"
space-before="-1.1em"
space-after="0.1em">
complex ruby example
</fo:block>
<fo:block wrap-option="no-wrap"
line-height="1">
複雑なルビの例
</fo:block>
</fo:inline-container>
</fo:block>
上の例は、次のようにフォーマットされる。
図 11.4 ルビの例
86
第 12 章 画
像
画像を埋め込むには fo:external-graphic または fo:instream-foreign-object を使う。いずれ
も、インラインのオブジェクトであり、行の中に埋め込まれる。画像をブロックのよう
に埋め込むには fo:external-graphic または fo:instream-foreign-object を fo:block で囲む。
12.1 fo:external-graphic
グラフィック・データが外部ファイルになっているとき、グラフィックを埋め込む場
所に fo:external-graphic を置く。グラフィックのエリアの大きさは、width と height プロパ
ティの値として設定する。値が auto ならば内容のグラフィックのサイズを使用する。
グラフィックの内容の大きさは、グラフィック自体のサイズを取得して content-height、
content-width、scaling プロパティで指定されたように拡大・縮小する。もし、幅か高さ
のどちらかが auto ならば、他方の拡大・縮小係数を auto の方にも適用する。
グラフィックの配置は text-align と display-align プロパティによって決める。
表 12.1 fo:external-graphic の主なプロパティとその値の説明
プロパティ
height
width
content-height
content-width
プロパティの値
説明
auto(既定値)
他のプロパティに依存
<length>
固定の高さを指定
<percentage>
親の要素の内容領域の高さに対する比率
auto(既定値)
他のプロパティに依存
<lenght>
固定の幅を指定
<percentage>
親の要素の内容領域の幅に対する比率
auto(既定値)
内容自体の高さ
scale-to-fit
表示エリアの高さに合わせる。何らかの拡大・縮小を施す。
<length>
内容の高さの絶対値。何らかの拡大・縮小を施す。
<percentage>
内容自体の高さに対する拡大・縮小率を表す。
auto(既定値)
内容自体の幅
scale-to-fit
表示エリアの幅に合わせる。何らかの拡大・縮小を施す。
<length>
内容の幅の絶対値。何らかの拡大・縮小を施す。
<percentage>
内容自体の幅に対する拡大・縮小率を表す。
text-align
ブロックエリアのテキストの配置の項を参照のこと。
scaling
uniform(既定値) 拡大・縮小でアスペクト比を維持する。
non-uniform
拡大・縮小でアスペクト比を維持する必要はない。
87
次は、EMF(ファイル名:dtp-xsl-jp.emf)を fo:external-graphic で指定した例である。
グラフィックスの領域は幅 9cm、高さ 6cm。グラフィックスは幅 5.5cm、高さ 4.5cm とし
て上下、左右にセンタリングしている。
<fo:block text-align="center">
<fo:external-graphic src="dtp-xsl-jp.emf"
border-style="dotted"
border-width="thin"
width="9cm"
height="6cm"
content-width="5.5cm"
content-height="4.5cm"
display-align="center"
text-align="center"/>
</fo:block>
図 12.1 EMF 画像
12.2 fo:instream-foreign-object
fo:instream-foreign-object は、図形等のデータをその子供としてもつインラインオブジ
ェクトである。典型的な例は、XSL 以外の名前空間をもつ XML 要素ツリーである。
SVG や MathML を FO ツリーの中に埋め込むことができる。fo:instream-foreign-object に
適用されるプロパティは、fo:external-graphic と同じである。
次のコードは、fo:instream-foreign-object に SVG を記述した例。
88
第 12 章 画像
<fo:block text-align="center">
<fo:instream-foreign-object border-style='dotted'
border-width='thin'>
<svg:svg width="4.5cm"
height="4.5cm"
xmlns:svg="http://www.w3.org/2000/svg">
<svg:g style="fill:red">
<svg:rect x="0" y="0" width="3cm" height="3cm"/>
</svg:g>
<svg:g style="fill:yellow">
<svg:rect x="1cm" y="1cm" width="3cm" height="3cm"/>
<svg:text x="0cm" y="3cm"
font-size="20pt" font-family="Arial"
fill="green" >
SVG Instream Object
</svg:text>
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
</fo:block>
SVG は次のように表示される。
図 12.2 SVG 画像
89
第 13 章 ページ番号の処理
ヘッダーやフッターにノンブルを入れたいことがある。また、目次や索引などで見出
しの参照先ページ番号を添える。しかし、ページ番号は組版が終了したあとでないと決
定できない。このための FO として page-number と fo:page-number-citation がある。
13.1 fo:page-number
fo:page-number はインラインの FO であり、文字列の中に埋め込む。ノンブルまたはペ
ージ番号を入れたい場所に、fo:page-number を置いておけば、組版が終了した後に、XSLFO プロセサが、fo:page-number をその位置のページ番号に置き換える。
13.1.1 ページ番号開始値
ページ番号の開始値は、page-sequence 毎に initial-page-number プロパティで設定する。
initial-page-number の値は次の通り。
表 13.1 ページ番号開始値
initial-page-number
auto(既定値)
auto-odd
auto-even
<number>
説明
最初の page-sequence では1にセットする。前に page-sequence があるときは、前の
page-sequence のページ番号+1 の値をセットする。
auto と同じように値を決め、偶数ならば+1 する。
auto と同じように値を決め、奇数ならば+1 する。
正の値を指定する。
例えば、表紙や目次のページ数に関係なく、本文の先頭ページの番号を'1'から開始す
るには、本文の fo:page-sequence の initial-page-number を'1'に設定する。
13.2 fo:page-number-citation
fo:page-number-citation は索引、目次の項目、参照箇所のページ番号を引用するための
FO である。参照元の FO には、id プロパティの値として固有の ID をつける。id プロパテ
ィの値は、fo 名前空間の中でユニークでなければならない。
ページ番号を引用する場所に fo:page-number-citation を置き、そのプロパティ ref-id に
参照したい FO の id プロパティと同じ ID 値を設定する。
90
第 13 章 ページ番号の処理
13.3 fo:page-number-citation-last
参照対象 FO の最後のページ番号を引用するための FO である。例えば、章などを参照
するとき、参照する章の範囲をページ番号で示すとき、fo:page-number-citation と共に使
う。page-citation-strategy プロパティでどのページが参照対象 FO の最終ページかの制約
条件指定し、その制約を満たす領域の最後のページ番号に置き換わる。
表 13.2 page-citation-strategy プロパティ
プロパティの値
all(既定値)
normal
non-blank
説明
参照された FO の ref-id トレイトに一致するすべてのページ。参照された FO が生成する
空白ページを含む。
正規領域を含むページ。
脚注やフロートのような(正規領域でない)領域を含むページ。
13.4 ページ番号文字列の書式
fo:page-number、fo:page-number-citation は、組版終了時にページ番号に置き換わる。印
刷や PDF などに出すときには、文字列に置き換る。文字列の書式は、fo:page-sequence に
次の表に挙げるプロパティを設定する。
表 13.3 ページ番号文字列
プロパティ
format
groupingseparator
grouping-size
letter-value
country
language
プロパティの値
説明
fo:page-sequence に設定して、数値から文字列への変換を指定
する。詳細は XSLT の仕様で定義されている。
<character>(既定値は'なし') fo:page-sequence に設定して、数値から文字列への変換を指定
する。詳細は XSLT の仕様で定義されている。
<number>(既定値はグルーピ fo:page-sequence に設定して、数値から文字列への変換を指定
ングなし)
する。詳細は XSLT の仕様で定義されている。
auto(既定値)または
fo:page-sequence に設定して、数値から文字列への変換を指定
alphabetic または traditional
する。詳細は XSLT の仕様で定義されている。
なし(既定値)または
ISO 3166 による国の指定
<country>
なし(既定値)または
ISO 639-2 による言語の指定。2 文字または 3 文字コード
<language>
<string>(既定値は'1')
主なプロパティは format である。次に format による番号の種類指定の例を示す。
format='1'
format='1'
format='(1)'
format='01'
1,2,3 ....
1,2,3 ....
(1),(2),(3),(4) ....
01,02,03,04 ....
91
format='一'
format='A'
format='a'
format='i'
format='I'
format="ア"
format="イ"
format="&#x0661;"
format="&#x06F1;"
format="&#x0967;"
format="&#x09E7;"
format="&#x0A67;"
format="&#x0AE7;"
format="&#x0B67;"
format="&#x0C67;"
format="&#x0CE7;"
format="&#x0D67;"
format="&#x0E51;"
format="&#x0ED1;"
format="&#x0F21;"
92
一,二,三,四....
A B C ... Z AA AB AC....
a b c ... z aa ab ac....
i ii iii iv v vi vii viii ix x ....
I II III IV V VI VII VIII IX X ....
カタカナの番号付けを指定
カタカナをイロハ順に指定
(ARABIC-INDIC DIGITS)
(EXTENDED ARABIC-INDIC DIGITS)
(DEVANAGARI DIGITS)
(BENGALI DIGITS)
(GURMUKHI DIGITS)
(GUJARATI DIGITS)
(ORIYA DIGITS)
(TELUGU DIGITS)
(KANNADA DIGITS)
(MALAYALAM DIGITS)
(THAI DIGITS)
(LAO DIGITS)
(TIBETAN DIGITS)
第 14 章 リ ー ダ ー
fo:leader は伸縮自在な水平線(リーダー)を引く FO である。fo:leader は、'.'を並べて
目次のタイトルとページ番号を分離したり、セパレータとしての水平線を生成するのに
使う。fo:leader はひとつのインラインエリアを生成する。leader-pattern が use-content な
らば高さはラインエリア(行)と同じとなる。そうでないと高さは rule-thickness トレイ
トで決定される。fo:leader の主要なプロパティは次の表の通り。
表 14.1 fo:leader の主要なプロパティ
プロパティ
leaderalignment
プロパティの値
none(既定値)
説明
指定なし
reference-area
参照エリアの内容領域の開始辺に揃える。
page
ページの開始辺に揃える。
leader-lenght.minimun(既定値は 0)はリーダの最低の長さ、leader-
leader-length
<length-range>
length.optimum(既定値は 12.0pt)はリーダの適正な長さ、leader-
leader-pattern
space(既定値)
リーダを空白で埋める。
rule
リーダを線で埋めます。この時、rule-thickness、rule-style をセットする。
dots
リーダをドットで埋める。
use-content
リーダを fo:leader の子供で指定したパターンで埋める。
length.maximum(既定値は 100%)はリーダの最大の長さを指定する。
leader-patternwidth
rule-style
rule-thickness
use-fontmetrics
(既定値)
リーダ・パターンの幅を、フォント・メトリックスで決まる値とする。
<length>
リーダ・パターンの繰り返し幅を指定する。
none
なし
dotted
ドットの並び
dashed
短い線分の並び
solid
一本の線
double
二重線。線の太さと線の間隔の合計は、rule-thickness の値に一致する。
groove
線はキャンバスに掘られているように見える。
ridge
線はキャンバスから盛り上がっているように見える。
<length>
線の太さ。既定値は 1.0pt。
14.1 目 次 設 定 例
次の例は、本文の中の「目次・索引に指定する項目」という文字列に id="XYZ0211"を
93
つけ、その項目のページ番号を fo:block の中から参照する。項目の文字列は左寄せ、ペ
ージ番号は右寄せとし、両者の間にリーダを引く。fo:leader と fo:page-number-citation が
配置される fo:block に text-align-last="justify"を設定して、ページ番号を行末揃えし、この
間をリーダで埋める。
<fo:block space-before="2em"
start-indent="10mm"
end-indent="10mm"
text-align-last="justify">
目次・索引に指定する項目
<fo:leader leader-pattern="dots"/>
<fo:page-number-citation ref-id="XYZ0211"/>
</fo:block>
<fo:block space-before="2em"
start-indent="10mm"
end-indent="10mm">
本文・・・・・・・・・・・・・・・・・・
</fo:block>
<fo:block start-indent="10mm"
end-indent="10mm">
・・・・・・・・・・・・・・・・・・・・
</fo:block>
<fo:block start-indent="10mm"
end-indent="10mm">
・・・・
<fo:inline id="XYZ0211">
目次・索引に指定する項目
</fo:inline>・・・・
</fo:block>
<fo:block start-indent="10mm"
end-indent="10mm">
・・・・・・・・・・・・・・・・・・・・
</fo:block>
この例は、次のように組版される。
94
第 14 章 リーダー
図 14.1 仮想的目次例
14.2 フッター設定例
次の例は、奇数ページのフッターに左寄せで文字列をいれ、右寄せでノンブルを設定
している。
<fo:static-content flow-name="Right-footer">
<fo:block text-align-last="justify">
<fo:inline font-style="italic"
font-size="8pt">
奇数ページ用フッタ文字列
</fo:inline>
<fo:leader leader-pattern="space" />
Page-<fo:page-number />
</fo:block>
</fo:static-content>
図 14.2 フッターの柱とノンブル例
95
第 15 章 表
XSL-FO の表は、次のような構造をしている。
図 15.1 表の構造
<fo:table-and-caption>
<fo:table>
<fo:table-column/>
<fo:table-column/>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block>........</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>........</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>........</fo:block>
96
第 15 章 表
</fo:table-cell>
<fo:table-cell>
<fo:block>........</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-and-caption>
15.1 表を構成する FO
15.1.1 fo:table-and-caption
fo:table-and-caption は表と見出し(キャプション)をグループにする。オプションの
table-caption と組み合わせてキャプションのレイアウトを設定する。
15.1.2 fo:table
fo:table は表形式の本体部分を組版するための必須オブジェクトである。ひとつの表
はヘッダーとフッターとボディから構成する。ヘッダーとフッターはオプションであ
る。fo:table-column をヘッダーの前に置いて表のセルの列幅を指定できる。fo:table は参
照エリアであり、内部のリファレンス・オリエンテーションやライティングモードを変
更できる。
15.1.3 fo:table-column
fo:table-column は補助的なオブジェクトである。同じカラム(表の列)とスパンをも
つセルに適用し、カラム幅やカラムの枠線の優先度などを設定するために使う(表のカ
ラム幅の項を参照)。
15.1.4 fo:table-header、fo:table-footer
fo:table-header、fo:table-footer は、表の見出しになる fo:table-row と fo:table-cell を包含す
るのに使う。表がページや段に跨った場合、ヘッダーとフッターは各ページと段で繰り
返すが、これを抑制することもできる。
15.1.5 fo:table-body
fo:table-body は、表の本体を包含する。fo:table-row と fo:table-cell を子供として持つ。
97
もし、fo:table-row がなく、fo:table-cell を子供としてもつ場合は、表の行の開始セルに
starts-row="true"、表の行の終わりのセルに ends-row="true"を指定して、行をグループ化
する。
15.1.6 fo:table-row
fo:table-row は、表のセルを行にグループ化するために使う。
15.1.7 fo:table-cell
fo:table-cell は、子供に fo:block をもち表のセルのデータを配置するエリアを生成する。
fo:table-cell の生成するエリアは参照エリアとなる。
15.2 表のプロパティ
15.2.1 table-layout プロパティ
XSL-FO 仕様では表のレイアウトのアルゴリズムは、各 XSL-FO プロセサに任されて
いる。表のレイアウト処理では表の幅と各カラムの幅をどのように指定するかがポイン
トである。XSL-FO プロセサが幅をどのように処理するかは table-layout プロパティで指
定する。
table-layout="auto"(表の自動レイアウト)は、XSL-FO プロセサが、表のセルの内容
から自動的に列幅を計算して設定する。table-layout ="fixed"(表の固定レイアウト)は、
表の列に width プロパティで auto 以外の値があればそれを採用し、ないときは一行目の
セルの width プロパティの値を使って列幅を設定する。width プロパティに値が設定さ
れていない列の幅は均等幅とする。一般的に table-layout="auto"を指定すると組版の処
理時間がかかる。
表 15.1 表のレイアウト
プロパティ
table-layout(fo:table に適
用)
プロパティの値
auto(既定値)
fixed
説明
表の自動レイアウトを指定。
inline-progression-dimension に長さまたは比率が指定されてい
て、table-layout="fixed"ならば、表の固定レイアウトを行う。
15.2.2 一般のプロパティ
表はブロック FO に適用できる様々なプロパティを設定できる。keep-together、keepwith-previous、keep-with-next を、fo:table-and-caption、fo:table、fo:table-row に適用して、
98
第 15 章 表
表と前後のブロックを同一のページに入れたり、表全体を同一のページに入れたりでき
る。例えば、表とキャプション全体を同一のページに入れるには、fo:table-and-caption に
keep-together.within-page="always"を設定する。
fo:table-and-caption、fo:table にはブロックのマージンを適用できるので、表の前後の空
きを間隔指定子で設定したり、左右の余白を margin やインデントで設定したりできる。
ボーダー、パディング、バックグラウンドのプロパティは、table-column を除く表の
FO に適用できる。従って、表やセルの周囲の罫線を border で設定したり、表やセルの罫
線と文字の間の間隔を padding で設定したりできる。
その他、表のレイアウトに関係する主なプロパティは次の通り。
表 15.2 表のレイアウトのための主なプロパティ
プロパティ
プロパティの値
auto(既定値)
before
display-align(fo:table-cell に適用)
center
after
width(fo:table、fo:table-caption、
fo:table-cell に適用)
height(fo:table、fo:table-caption、
fo:table-row、fo:table-cell に適用)
説明
relative-align が適用される時はそれに従うが、そうで
ない時は before と同じになる。
最初の子供のエリアを参照エリアの前方辺に寄せて
配置する。
子供のエリアを参照エリアの前後方中央に寄せて配
置する。
最後の子供のエリアを参照エリアの後方辺に寄せて
配置する。
auto(既定値)
自動設定
<length>
固定幅を指定
<percentage>
包含するブロックに対する比率を指定
auto(既定値)
自動設定
<length>
固定の高さを指定
<percentage>
包含するブロックに対する比率を指定
15.2.3 表のプロパティ(display-align)の設定例
<fo:table width="12cm"
table-layout="fixed">
<fo:table-column column-number="1"
column-width="25%">
</fo:table-column>
<fo:table-column column-number="2"
column-width="40%">
</fo:table-column>
99
<fo:table-column column-number="3"
column-width="72pt">
</fo:table-column>
<fo:table-body>
<fo:table-row height="60pt">
<fo:table-cell column-number="1"
display-align="before"
border-style="solid"
border-width="thin">
<fo:block>Cell 1</fo:block>
</fo:table-cell>
<fo:table-cell column-number="2"
display-align="center"
text-align="center"
border-style="solid"
border-width="thin">
<fo:block>Cell 2</fo:block>
</fo:table-cell>
<fo:table-cell column-number="3"
text-align="center"
border-style="solid"
border-width="thin">
<fo:block>Cell 3</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
組版結果は次の通り。cell1 の幅は表の幅(12cm)の 25%で 3cm となる。
100
第 15 章 表
図 15.2 表のセル(display-align)
15.3 表の独自のプロパティ
表をレイアウトするための独自のプロパティには次のものがある。
表 15.3 表レイアウト指定のプロパティ
プロパティ
説明
border-collapse
border-separation
border-after-precedence
border-beforeprecedence
border-end-precedence
border-start-precedence
caption-side
column-number
column-width
number-columnsrepeated
number-columnsspanned
number-rows-spanned
starts-row
ends-row
empty-cells
table-layout
table-omit-footer-atbreak
table-omit-header-atbreak
同一辺のボーダーを分離するか、一体にする(境界をつぶす)かを指定する。
隣り合うセルのボーダーの間隔を指定する。
後方辺のボーダーの優先度を指定する。
前方辺のボーダーの優先度を指定する。
開始辺のボーダーの優先度を指定する。
終了辺のボーダーの優先度を指定する。
表のボックスに対するキャプションの位置を指定する。
列の番号
列の幅
table-column 指定を繰り返す回数
table-cell が跨る欄数
table-row が跨る行数
当該セルが行を終了するか否か。
当該セルが行を終了するか否か。
空のセルの周囲のボーダーを表示するかしないかを指定する。
表を固定レイアウト(fixed)または自動レイアウト(auto)のどちらでレイアウト
するかを指定する(次の説明を参照)。
表が 2 ページ(2 段)に跨るとき各ページにフッターを繰り返し表示するか否か。
表が 2 ページ(2 段)に跨るとき各ページにヘッダーを繰り返し表示するか否か。
15.3.1 表のプロパティ(border、padding)の設定例
<fo:table-and-caption border-style="solid">
<fo:table table-layout="fixed"
width="100%"
border-collapse="separate"
101
border-separation.block-progressiondirection="3pt"
border-separation.inline-progressiondirection="3pt">
<fo:table-body>
<fo:table-row border-style="dotted"
border-width="thin">
<fo:table-cell border-style="solid"
border-width="thin">
<fo:block>1</fo:block>
</fo:table-cell>
<fo:table-cell border-style="dotted"
border-width="thin">
<fo:block>2</fo:block>
</fo:table-cell>
<fo:table-cell border-style="dashed"
border-width="thin">
<fo:block>3</fo:block>
</fo:table-cell>
<fo:table-cell border-style="inset"
border-width="thin">
<fo:block>4</fo:block>
</fo:table-cell>
<fo:table-cell border-style="outset"
border-width="thin">
<fo:block>5</fo:block>
</fo:table-cell>
</fo:table-row>
<fo:table-row >
<fo:table-cell border-style="solid"
border-width="thin"
padding="5pt">
<fo:block background-color="#EEEEEE">2-1</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
102
第 15 章 表
border-width="thin"
padding="5mm">
<fo:block background-color="#EEEEEE">2-2</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
border-width="thin"
padding="3em">
<fo:block background-color="#EEEEEE">2-3</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
border-width="thin"
padding="1cm">
<fo:block background-color="#EEEEEE">2-4</fo:block>
</fo:table-cell>
<fo:table-cell border-style="solid"
border-width="thin">
<fo:block background-color="#EEEEEE">2-5</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
</fo:table-and-caption>
組版結果は次の通り。この表ではボーダーを分離し、間隔を 3pt に設定している。
図 15.3 表のボーダーとパディングの例
15.3.2 表のカラム幅の設定
fo:table-column の column-width プロパティで列幅を指定する。proportional-columnwidth() は、fo:table-column のみで使うプロパティ値計算関数である。表のレイアウトで
103
は最初にカラム幅が指定された列の合計列幅を計算し、表全体の幅から組版済みの合計
列幅を引いた残りを、proportional-column-width() の指定値で案分する。
<fo:table-column column-number="1" column-width="20pt" />
<fo:table-column column-number="2" column-width="24pt" />
<fo:table-column column-number="3" column-width="6em" />
<fo:table-column column-number="4" column-width="proportionalcolumn-width(4)" />
<fo:table-column column-number="5" column-width="proportionalcolumn-width(2)" />
上の例のカラム幅は次のようになる。4 番目と 5 番目の列の幅は2:1となる。
図 15.4 カラム幅の例
104
第 16 章 リスト(箇条書き)
XSL-FO では、箇条書全体を fo:list-block とする。箇条項目それぞれは fo:list-item とな
り、fo:list-item の中に fo-list-item-label(リストのラベルを表示する部分)と list-item-body
(リストの本体を表示する部分)を配置する。
図 16.1 リストの構造
注意すべき点が二つある。
1) XSL-FO ではリストのラベルの内容を fo:list-item-label の子供として明示的に指定
する。したがって番号なしリストであれば先頭の箇条記号を、番号付きリストであ
ればその番号を XSL-FO ドキュメントを作成するときに振らなければならない。
2) 既定値スタイルシートが存在しないので、fo:list-item-label の終了位置や fo:listitem-body の開始位置を明示的に指定しなければならない。
16.0.1 リスト独自のプロパティ
fo:list-block にリストのラベルと本体の配置のためのプロパティを設定する。
表 16.1 リスト独自のプロパティ
プロパティ
プロパティ
説明
105
の値
provisional-distancebetween-starts
provisional-labelseparation
数値
リストのラベル開始位置と本体開始位置の間の間隔。初期値は
24.0pt。
リストのラベル終了位置と本体の終了位置の間の間隔。初期値は
6.0pt。
数値
リストラベルの開始位置は start-indent で指定すれば良いが、その終了位置を直接指定
するのは分かり難い。そこで end-indent="label-end()"とすれば自動的に計算する。
同様にリスト本体の開始位置は分かり難いので、start-indent="body-start()"とすれば自
動的に計算する。リスト本体の終了位置は直接指定する。
<fo:list-block provisional-distance-between-starts="15mm"
provisional-label-separation="5mm">
<fo:list-item>
<fo:list-item-label start-indent="4mm"
end-indent="label-end()">
<fo:block>&#x02022;</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()"
end-indent="50mm">
<fo:block>※※※※※※※※※※※</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item>
<fo:list-item-label start-indent="4mm"
end-indent="label-end()">
<fo:block>&#x02022;</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()"
end-indent="50mm">
<fo:block>****************************
****************</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
組版結果は次のようになる。
106
第 16 章 リスト(箇条書き)
図 16.2 リストの組版
107
第 17 章 しおりの FO
組版した結果を PDF として配布する場合、PDF のしおりを設定すると文書の読みたい
か所に直接アクセスできて便利である。fo:bookmark-tree はしおりのための FO である。
fo:bookmark-tree はしおりのツリーの最上位である。fo:layoutmaster-set の直後に置く。
その子供として fo:bookmark が第一階層のしおり項目である。しおりを階層化するとき
は、fo:bookmark の子供の fo:bookmark が第二階層のしおり項目となる。これを繰り返し
てしおりのツリーを構築する。fo:bookmark のプロパティは次の表の通り。
表 17.1 fo:bookmark のプロパティ
プロパティ
プロパティ値
internal-destination
external-destination
starting-state
<idref>で行先のフロー FO の ID を示す。
<uri-specification>で行先の外部 URI を示す。
最初の状態で表示される(show(既定値))か、表示されない(hide)かを設定
する。
説明
fo:bookmark のしおりの項目に表示するテキストを、その子供の fo:bookmark-title で表
す。しおりの設定例は次の通り。
<fo:layout-master-set>
…
</fo:layout-master-set>
<fo:bookmark internal-destination="MARK001">
<fo:bookmark-title font-weight="bold">目次</fo:bookmarktitle>
</fo:bookmark>
<fo:bookmark internal-destination="MARK002">
<fo:bookmark-title>第1章</fo:bookmark-title>
<fo:bookmark internal-destination="MARK003">
<fo:bookmark-title>1.1</fo:bookmark-title>
</fo:bookmark>
<fo:bookmark internal-destination="MARK004">
<fo:bookmark-title>1.2</fo:bookmark-title>
</fo:bookmark>
108
第 17 章 しおりの FO
<fo:bookmark internal-destination="MARK005">
<fo:bookmark-title>1.3</fo:bookmark-title>
</fo:bookmark>
</fo:bookmark>
<fo:bookmark internal-destination="MARK006">
<fo:bookmark-title font-weight="bold">第2章</fo:bookmarktitle>
<fo:bookmark internal-destination="MARK007">
<fo:bookmark-title>2.1</fo:bookmark-title>
</fo:bookmark>
<fo:bookmark internal-destination="MARK008">
<fo:bookmark-title>2.2</fo:bookmark-title>
</fo:bookmark>
<fo:bookmark internal-destination="MARK009">
<fo:bookmark-title>2.3</fo:bookmark-title>
</fo:bookmark>
</fo:bookmark>
<fo:bookmark external-destination="http://
www.antenna.co.jp/">
<fo:bookmark-title>http://www.antenna.co.jp/</fo:bookmarktitle>
</fo:bookmark>
</fo:bookmark-tree>
図 17.1 PDF のしおり
109
<fo:page-sequence>
…
組版結果を PDF として保存する。PDF Reader で開くと次のようなしおりがある。
110
第 18 章 脚注と前方フロート
fo:footnote は脚注を設定する。脚注の本文は fo:footnote の子供 fo:footnote-body に設定
する。fo:float にプロパティ float="before"を設定すると前方フロートとなる。フロート
には横に設定するサイド・フロートもある(第 19 章 サイドフロートを参照)。
18.1 脚注と前方フロートの参照エリア
脚注と前方フロートは本文の中に指定される FO である。ページが生成されたとき本
文領域(fo:region-body)の版面下部(脚注)または上部(前方フロート)に、脚注参照
エリアまたは前方フロート参照エリアが生成される。そして、脚注とフロートの内容は
そのエリアに配置される。そのとき、版面の高さはその分だけ小さくなる。
本文領域とそれぞれのエリアの区切りを挿入できる。この区切りは、fo:static-content
を使って設定する。
●
fo:static-content の flow-name プロパティの値として xsl-footnote-separator を指定する
と、その内容は footnote 参照エリアの先頭に挿入される。
●
fo:static-content の flow-name プロパティの値として xsl-before-float-separator を設定す
ると、その内容は、前方フロートの最後に追加される。
図 18.1 脚注と前方フロートの領域
111
18.2 脚注の設定例
脚注の分離罫線および本文の fo:flow に脚注の内容を設定した例を示す。
<fo:page-sequence master-name="PageMaster">
<fo:static-content flow-name="xsl-footnote-separator">
<fo:block text-align-last="justify">
<fo:leader leader-pattern="rule"
rule-thickness="0.5pt"
leaderlength="33%" />
</fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block text-indent="1em"
space-before="0.6em"
space-after="0.6em"
start-indent="10mm"
end-indent="10mm"
text-align="justify">
<fo:inline font-weight="bold">
「Extensible Markup Language」(XSL-FO)仕様
<fo:footnote>
<fo:inline baseline-shift="super"
font-size="75%">
(1)
</fo:inline>
<fo:footnote-body>
<fo:block background-color="antiquewhite"
start-indent="10mm"
end-indent="10mm">
<fo:inline baseline-shift="super" fontsize="75%">
(1)
</fo:inline>
112
第 18 章 脚注と前方フロート
XSL スタイルシートという言葉は、現在、非常に混乱しています。「Extensible
Stylesheet Language」仕様は、当初、XSLT(変換言語)、XPATH(パス指定方法)
と一緒に検討されていました。ところが、1999 年 4 月に XSLT、XPATH が独立して
別仕様になったこと。Internet Explorer が、独自仕様の XSL スタイルシートを
使って XML を HTML に変換して表示するようになっているなどが原因です。
</fo:block>
</fo:footnote-body>
</fo:footnote>
は、このような要請に応えることができます。
</fo:inline>
</fo:block>
…
</fo:flow>
</fo:page-sequence>
組版結果は次のようになる。
図 18.2 脚注の組版例
18.3 前方フロートの設定例
前方フロートの分離罫線と fo:flow に前方フロートの内容を設定した例を示す。
<fo:page-sequence …>
<fo:static-content flow-name="xsl-before-float-separator">
<fo:block border-bottom="solid 0.1pt gray"></fo:block>
113
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:block text-align="justify"
text-indent="1em" >
ページシーケンスが切り替わるとページマスターが切り替わり改ページが行われる。
それだけではなく、force-page-count=”even”でページ数を偶数にする、
initial-page-number=”1”でページ番号の付け方を指定している。こうして組版
結果の PDF は次のようになる。表紙のページシーケンスの制約条件として偶数を指定
しているので、2 ページ目が空白となる。3 ページ目から本文が始まり、フッターのペ
ージ番号は 1 となる。
</fo:block>
<fo:float float="before">
<fo:block text-align="center">
<fo:external-graphic src="Sample3PDF.PNG" />
</fo:block>
<fo:block text-align="center">図 先頭の 3 ページ</fo:block>
</fo:float>
<fo:block text-indent="1em" >図に続く文章……</fo:block>
図 18.3 前方フロートの組版例
114
第 18 章 脚注と前方フロート
…
</fo:flow>
</fo:page-sequence>
組版結果は図 18.2 脚注の組版例の通り。
115
第 19 章 サイドフロート
サイドフロートはイメージを片方に配置して、通常のコンテントがそのイメージを廻
り込むようにするために使用する。サイドフロートは、常に直近の先祖にあたる参照エ
リアの子として作成される。
19.1 フロートの配置設定
fo:float はフロートを指定する FO である。フロートをその親の参照エリアのどちらの
辺に寄せるかを float プロパティの値で制御する。フロートの種類には前方フロート
(xsl-before-float クラス)とサイドフロート(xsl-side-float クラス)がある。
表 19.1 float プロパティ
プロパティ
の値
before
start
end
left
right
inside
outside
none
説明
fo:float が返すブロックエリアは xsl-before-float のクラスで、前方フロート参照エリアの子孫に
なる(18.3 前方フロートの設定例を参照)。
fo:float が返すブロックエリアは xsl-side-float のクラスで、参照エリアの開始辺の方向にフロー
トする。
fo:float が返すブロックエリアは xsl-side-float のクラスで、参照エリアの終了辺の方向にフロー
トする。
float='start'と解釈する。
float='end'と解釈する。
fo:float が返すブロックエリアは xsl-side-float のクラスで、のど側(綴じる辺)の方向にフロー
トする。
fo:float が返すブロックエリアは xsl-side-float のクラスで、小口側(外側の辺)の方向にフロー
トする。
fo:float は通常のブロックエリアを生成する。
xsl-side-float のクラスのフロートをサイドフロート(side-float)という。サイドフロー
トを使うことで、図を左右に寄せて本文は図を回り込ませたり、あるいは図を本文の左
インデント内に配置して本文は図の右側に流したりできる。
サイドフロートには次の制約が適用される。
●
サイドフロートは、anchor-area の直近の先祖の参照エリアの子供になるか、同じ参
照エリアのチェーンの中で後ろの方の子供になる。
●
エリアツリーの中で兄弟になるサイドフロートは、内容領域が重なってもかまわな
い。
116
第 19 章 サイドフロート
図 19.1 サイドフロートの配置例
●
サイドフロートの幅は、子供のエリアから決定する。プロパティの値で明示的に決
定することはない。
●
サイドフロートには、その直近の先祖の参照エリアがそのサイドフロートの親にな
るような、インラインで重なるブロックエリアの侵入による移動を追加することが
ある。
117
●
表示ソフトは、一つあるいは複数の重なるサイドフロートの侵入による移動を考慮
して、残りのインライン方向の空白が、サイドフロートまたは通常のブロックエリ
アにとって不十分かどうかを決定する。この場合、clear プロパティの指定に従っ
て、次のサイドフロートまたは通常のブロックエリアによって関連するサイドフロ
ートをクリアし、侵入による移動を十分に小さくできる。
19.2 フロートのクリア(fo:float の clear プロパティ)
エリアが、そのエリアのボーダー領域の前方辺がサイドフロートの後方辺に配置され
るか、あるいは、サイドフロートの親の参照エリアの子孫ではないとき、エリアはサイ
ドフロートをクリアするという。ブロックレベルの FO が生成するすべてのエリアがサ
イドフロートをクリアするなら、その FO はサイドフロートをクリアするという。
このプロパティは、ブロックレベルの FO と fo:float に適用する。あるブロックレベル
の FO の clear プロパティが'none'以外の値にセットされていると、このブロックが生成す
るエリアの境界矩形は、適用される fo:float の配置矩形と重ならない。サイドフロートが
連続すると横に並ぶ。2 つ目のサイドフロートに clear を適用すると縦に並ぶ。
表 19.2 クリアプロパティ
プロパテ
ィの値
start
end
left
right
inside
outside
both
none
説明
この FO が生成する各エリアは、この FO よりも前にある fo:float が生成したもので、かつ、各エ
リアの直近の先祖の参照エリアの子供になっている start-float をすべてクリアしなければならな
い。さらに、この FO が生成する各エリアの直近の先祖の参照エリアを含む参照エリアのチェー
ンは、この FO よりも前にある fo:float の生成する start-float の親の参照エリアを後ろに含んでは
ならない。
この FO が生成する各エリアは、この FO よりも前にある fo:float が生成したもので、かつ、各エ
リアの直近の先祖の参照エリアの子供になっている end-float をすべてクリアしなければならな
い。さらに、この FO が生成する各エリアの直近の先祖の参照エリアを含む参照エリアのチェー
ンは、この FO よりも前にある fo:float の生成する end-float の親の参照エリアを後ろに含んでは
ならない。
clear='start'と解釈する
clear='end'と解釈する
inside 側のサイドフロートをクリアする。
outside 側のサイドフロートをクリアする。
両サイドのサイドフロートをクリアする。
特に制約を課さない。
19.3 侵入による移動(intrusion-displace)
フロートを挿入した場合、テキストはフロートの周囲に流れる。intrusion-displace は、
118
第 19 章 サイドフロート
フロートによって、ラインエリアやブロックエリアを移動する方法を設定する。次の FO
に適用できる。
●
fo:block
●
fo:block-container
●
fo:table-and-caption
●
fo:table
●
fo:table-caption
●
fo:list-block
●
fo:list-item
ふたつのブロックが同じ直近先祖の参照エリアをもち、ふたつのブロックの配置矩形
と交差するインライン方向の線があるとき、ふたつのブロックがインラインで重なると
いう。A が xsl-side-float クラスのエリアで、float='start'であり、B がブロックエリアで A
と B が同じ直近先祖の参照エリアをもつとき、A と B がインラインで重なって、かつ B
の start-indent が A の start-indent と inline-progression-dimension の合計よりも小さいとき、
A は B に開始側で侵入するという。A の開始側侵入量は、A の start-indent と A の inlineprogression-dimension の合計から B の start-indent を引いた値である。
A が xsl-side-float クラスのエリアで、float='end'であり、B がブロックエリアで A と B
が同じ直近先祖の参照エリアをもつとき、A と B がインラインで重なって、かつ B の
end-indent が A の end-indent と inline-progression-dimension の合計よりも小さいとき、A は
B に終了側で侵入するという。A の終了側侵入量は、A の end-indent と A の inlineprogression-dimension の合計から B の end-indent を引いた値である。
intrusion-displace プロパティはサイドフロートの侵入の調整方法を決定する。
表 19.3 侵入による移動
プロパ
ティの
値
auto(既
定値)
none
line
indent
説明
参照エリアについては、block が指定されたときと同じ。その他のエリアについては line が指定さ
れたときと同じ。
ラインエリアもブロックエリアも共に、フロートの侵入により移動することはない。フロートの
clear ロパティが none 以外の指定された値をもたない限り、フロートは、エリアの内容に影響を与
えることなく重なる。
フロートの侵入が当該ラインエリアの内容領域と交差することがないよう、ラインエリアの開始
辺と終了辺を移動する。また、ラインエリアに text-indent を適用する前の段階で判断する。結果
としてラインエリアのインライン方向の幅が小さくなる。
このプロパティが適用されるブロックエリアの中の各ラインエリアの開始辺と終了辺を (a) 最低
限 intrusion-displace='line'を指定したのと同じ量を移動する。(b) それに加えて、現在のラインの移
動を引き起こす全ての侵入によって移動される他のすべてのラインの開始辺と終了辺の移動との
相対的な差異分を移動する。
119
block
ブロックの開始辺と終了辺を次の (a)(b) を満たす最小限の量だけ移動する。(a) 当該のブロックと
重なる全ての開始側の侵入(または終了側の侵入)と、ブロックの開始辺(または終了辺)が交
差しないようにする。(b) 親のエリアが参照エリアではないブロックエリアの場合、移動量は最低
限、その親のエリアの移動量以上。なお、そのブロックと侵入の両方の配置矩形を横切るインラ
イン方向の線が存在する場合、ブロックと侵入が重なるという。
intrusion-displace の各プロパティの効果を図 19.2 侵入による移動の効果に示す。
図 19.2 侵入による移動の効果
120
第 20 章 柱 の 設 定
fo:marker と fo:retrieve-marker を組にして使うことで、ページや章の見出しなどの内容
を取り出して、ヘッダーやフッターに設定できる。使用方法は次の通り。
1) 本文中で取り出したい内容を fo:marker で囲む。fo:marker の marker-class-name プ
ロパティには、カテゴリ値を設定する。fo:marker は常に FO の先頭の子供として設
定する必要がある。
2) fo:retrieve-marker は 、 fo:static-content の 中 に の み 置 く こ と が で き る 。
fo:retrievemarker の retrieve-class-name プロパティには、取り出したいカテゴリ値を設
定する。
3) XSL-FO プロセサは組版時に、fo:marker の親である FO が作り出すエリアにはすべ
て fo:marker をつける。
4) fo:retrieve-marker が内容を取り出す対象は retrieve-class-name プロパティの値と
marker-class-name プロパティの値が同じであるような fo:marker が付いているエリ
アである。この対象エリアについて retrieve-position プロパティの値により優先順位
を計算する。
5) 最終的に、対象エリアの中で一番優先順位の高いエリアに付いている fo:marker の
子供の内容を取り出して、その内容で fo:retrieve-marker を置換する。
表 20.1 柱の設定のプロパティ
プロパティ
retrieveclass-name
プロパティの値
<name>(必須)
first-startingwithin-page(既定
値)
first-including-
retrieveposition
carryover
last-starting-withinpage
last-endingwithinpage
説明
名前を設定する
ページ(retrieve-boundary、以下同様)の中で最初の対象エリアに付いて
いる fo:marker の子供を取り出す。この時、ページの is-first トレイトが
true の対象エリアの中で最初のエリアが最優先。そのようなエリアがな
ければ、最初の対象エリアに付いている fo:marker の子供を取り出す。
最初の対象エリアに付いている fo:marker の子供を取り出す。
ページの is-first トレイトが true のすべての対象エリアの中で最後のエ
リアが最優先。そのようなエリアがなければ最後の対象エリアに付いて
いる fo:marker の子供を取り出す。
ページの is-last トレイトが true の対象エリアの中で最後のエリアが最優
先。そのようなエリアがなければページの最後の対象エリアに付いてい
る fo:marker の子供を取り出す。
121
プロパティ
プロパティの値
page
retrieveboundary
page-sequence
document
122
説明
ページの中で作成された fo:marker の子供(内容)を取り出す。
fo:page-sequence の中の fo:flow の子孫である fo:marker の子供を取り出
す。
ドキュメント全体の fo:flow の子供である fo:marker の子供を取り出す。
第 21 章 索
引
XSLT スタイルシートで FO ツリーに変換するとき、XML ドキュメントの索引マーク
アップから、次のようにして末索引を作る。
1) XML ドキュメントの索引語マークアップを FO ツリーの中で索引キーに変換す
る。索引キーの作り方には次の 2 種類がある。
①
FO の index-key プロパティの値として索引キーを指定する。
②
fo:index-range-begin と fo:index-range-end の二つの索引専用 FO で索引キーを
設定する。
2) XSLT スタイルシートで XML の索引語マークアップから索引項目を並べた巻末
索引を作る。巻末索引の項目の配列や項目スタイルは XSLT スタイルシートで設定
する。
3) 索引項目は fo:index-key-reference(索引キー参照)で索引キーを参照する。
4) fo:index-page-citation-list で組版時に索引キー参照により得られる、索引キーのペ
ージ番号の重複や連続するページ番号を整理する。
図 21.1 XSL-FO の索引
21.1 索引キーと索引項目
索引キーは巻末の索引項目と、参照先索引用 FO との対応を付けるための値である。
index-key プロパティの値として索引キーを指定する。index-key はほとんどすべての FO
123
に関連つけられる。index-class で索引の種別を示す。例えば章と付録、図など索引項目
の所属などを分類できる。
各索引項目の見出しは、例えば fo:block の内容である。fo:block の子供として fo:indexpage-citation-list(索引ページ引用リスト)を置き、その子供として fo:index-key-reference
(索引キー参照)を置く。
21.2 範囲の始まりと終わりの索引キー
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>
組版結果は次の通り。
図 21.2 範囲の索引キー
21.2.1 索引ページ引用リスト
fo:index-page-citation-list(索引ページ引用リスト)は、索引キー参照で取得した索引語
のページ番号を整理する役割である。索引ページ引用リストの子供には複数の異なる索
124
第 21 章 索引
引キーを置くことができる。
同一の索引キーで得られた同一ページ番号は,index-class が同じならば一つにまとめら
れる。異なる索引キーで得られた同一ページ番号のまとめ方は、次のプロパティで指定
する。
merge-pages-across-index-key-references
異なる索引キー参照で得られた同一
ページ番号をまとめる(merge)か、まとめない(leave-separate)かを指定する。merge
であれば異なる索引キーで得られた同一ページ番号は一つになる。leave-separate であれ
ば別に表示される。
21.2.2 連続ページ番号の範囲表示
merge-sequential-page-numbers プロパティは索引キーが 3 ページ以上連続するときペー
ジ番号の表示を範囲形式にするかどうかを指定する。設定値は範囲にまとめる(merge
(既定値))または範囲にまとめない(leave-separate)。ページ番号が連続するとは、次の
三つをすべて満たすときである。
●
索引キーが連続するページに出てくる。
●
索引キーの index-class が同じである(index-class が異なるとマージ処理が指定され
ていても分離される)。
merge-ranges-across-index-key-references プロパティ"merge"が設定されている。
●
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
125
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 種類の索引キー参照で得られたページ番号を一つの範囲にまとめる。
そこで索引項目の組版結果は次のようになる。
図 21.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="leaveseparate">
<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>
組版結果は次のようになる。
図 21.4 索引キー参照のページ番号を分離する
21.3 索引ページ番号の表示に関わる FO
fo:index-page-citation-list-separator はページ番号のリストでページ番号同士を分離する
126
第 21 章 索引
文字を指定する。fo:index-page-citation-range-separator はページ番号の開始と終了の範囲
を示す文字を指定する。fo:index-page-number-prefix、fo:index-page-number-suffix は索引キ
ー参照で得られたページ番号につける接頭辞、接尾辞を指定するための FO である。
127
第 22 章 リ
ン
ク
リンクとマルチ FO はダイナミックな効果を表現する FO である。
22.1 fo:basic-link
リンクについては fo:bacik-link という一方向のジャンプ機能が定義されている。
fo:basic-link のプロパティにジャンプする先を指定する。組版結果上でリンク機能を使
うには、ユーザとの対話機能が必要となる。現在のところ、大抵の XSL-FO プロセサは、
リンクを設定した PDF を出力して PDF Reader から PDF のリンク機能を使用する。
表 22.1 リンクのプロパティ
プロパティ
external-destination
internal-destination
プロパティの値
説明
<urispecification>(既定値は空文字列) リンクの外部ジャンプ先を設定します。
<idref>(既定値は空文字列)
リンクの内部ジャンプ先を指定する。
external-destination と internal-destination はいずれか一方のみ指定可能である。fo:basiclink に 指 定 で き る プ ロ パ テ ィ に は 、 こ の 他 に destination-placement-offset 、 indicatedestination、show-destination、target-presentation-context、target-processingcontext、targetstylesheet がある。
図 22.1 リンクの仕組み
128
第 23 章 双方向性(BIDI)
23.1 双方向性とは
英語のような左から右に書く文章の中にアラビア文字やヘブライ語のような右から左
に書く文字が混在することがある。これを BIDI(双方向性)という。Unicode の文字デ
ータベースでは文字の双方向性の特性値を定義している。さらに表 23.1 Unicode の方
向制御コードに示すコードを追加している。方向制御コードは表示の順序を決定するた
めにのみ使用する。このコードはパラグラフ単位で有効でパラグラフ区切(U+2029)で
効果が終了する。
表 23.1 Unicode の方向制御コード
分類
コード
値
名称
説明
Right-to-Left
続く文字を右から左へ埋め込む
RLE
U+202B
LRE
U+202A
RLO
U+202E
Right-to-Left Override
続く文字は右から左方向として扱う
LRO
U+202D
Left-to-Right Override
続く文字は左から右方向として扱う
終了
PDF
U+202C
Pop Directinal
双方向性の状態を、直前の LRE、RLE、
Formatting
RLO、LRO の状態に戻す
暗黙の双方向性マ
RLM
U+200F
Right-to-Left Mark
Right-to-Left ゼロ幅マーク
ーク
LRM
U+200E
Left-to-Right Mark
Left-to-Right ゼロ幅マーク
埋め込み
オーバライド
Embedding
Left-to-Right
続く文字を左から右へ埋め込む
Embedding
Unicode Consortium.“The Unicode Standard, Version 5.0.” Addison-Wesley, 2007. p.1253 を元に作成
表 23.2 Unicode の双方向性文字タイプ
分類
強い
弱い
タイプ
説明
方向制御コード名、一般の文字
LRM、アルファベット、シラビック、漢字、欧州・アラビア語以外
L
左から右
LRE,LRO
左から右
LRE,LRO
R
右から左
RLM、ヘブライ語のアルファベットと主要な句読点
AL
右から左
RLE,RLO
右から左
RLE,RLO
PDF
方向性の回復
PDF
の十進数
アラビア語、Thaana、シリア語のアルファベット、それらの言語特有
の主要な句読点
129
分類
中立
タイプ
説明
方向制御コード名、一般の文字
EN
欧州の番号
欧州の十進数、東 Arabic-Indic 系の十進数
ES
欧州の番号区切り
プラス記号、マイナス記号
ET
欧州の番号終了
温度、通貨記号
AN
アラビア文字番号
Arabic-Indic の十進数、アラビア文字の十進、千単位の区切り
CS
普通の番号区切り
コロン、コンマ、フル・ストップ、No-Break-Space
NSM
非空白区切り
Unicode で Mn、Me とマークされた文字
BN
中立の境界
上記以外の整形、制御記号
B
パラグラフ区切り
U+2029 パラグラフ区切り、改行機能
S
セグメント区切り
Tab
WS
ホワイトスペース
空白、数字の空白、行の区切り、FF、一般的な禁則空白
ON
その他中立
他の全ての文字、Object Replacement Character などを含む
Unicode Consortium.“The Unicode Standard, Version 5.0.” Addison-Wesley, 2007. p.1257 を元に作成
23.1.1 Unicode BIDI アルゴリズム
進行方向の異なる文字が入れ子になっていると、文字の進行方向に関して曖昧さが生
まれることがある。これを処理するため、Unicode の仕様では BIDI アルゴリズムを定義
している。これは文字の特性に基づく暗黙の部分と、埋め込み、オーバライドを明示的
に制御する部分がある。Unicode BIDI の処理はテキストのストリームに対して次の 3 段
階の処理を行う。
1) インプットされたテキストをパラグラフに分解する。
2) テキストの埋め込みレベルを解決する。文字の双方向特性と Unicode の方向制御
コードを使って、解決済みの埋め込みレベルを決定する。
3) テキストを行に分解した後で、解決済みの埋め込みレベルを使って行単位でテキ
ストを表示のために並び替える。
埋め込みレベルを決定する部分が Unicode BIDI アルゴリズムの中核である。Unicode
BIDI では、パラグラフを同じ方向性をもつ文字の並びに分解し、各並びに埋め込みレベ
ルを付与する。この際、オーバライド・コード(RLO,LRO)の個所は、文字自体のもつ
方向性をオーバライド・コードで指定した方向性に切り替える。
各文字の解決済み埋め込みレベルはパラグラフの埋め込みレベルと等しいかそれより
大きくなる。右から左へのテキストは奇数になり、左から右へのテキストは偶数にな
る。例えば英語のパラグラフでは英語の埋め込みレベルは 0、それに埋め込まれたアラ
ビア語のテキストは 1、さらにその中に埋め込まれた英語のテキストは 2 である。それ
に加えて、数字のテキストはパラグラフよりも大きなレベルになる。
次に同じ埋め込みレベルの中で、十進数、数字の区切りなどの弱い方向性、空白など
の中立文字を処理して、解決済みの埋め込みレベルを決定する。
130
第 23 章 双方向性(BIDI)
23.2 ニュートラル文字とミラーリング
ラテンアルファベットやアラビア文字のように強い方向性を持つ文字以外に、中立(ニ
ュートラル)の文字がある。スペースや括弧などの記号類は中立である。括弧のような
対になった文字が Right-to-Left の状態になった場合、グリフを左右反転させる処理があ
る。これをミラーリングという。Unicode ではこのミラーリング対象の文字一覧を定め
ている。
例えば、FO の中でアラビア語を括弧で括った文字列の場合
<fo:block>‫ )ضصش(ضصش‬ENGLISH</fo:block>1)
一般的に中立の文字は周辺の文字の方向性に影響を受ける。Left-to-Right と Left-toRight にはさまれた文字は Left-to-Right になり、Right-to-Left と Right-to-Left にはさまれた
文字は Right-to-Left になる。この周辺の方向性が対立した場合は、上位の方向性(つま
り fo:block の writing-mode)に従う。そこで上の fo:block の部分は、次のように組版され
る。
‫ )شصض )شصض‬ENGLISH
左から二つ目(右側)の“)”は反転しない。この問題を解決するには Unicode の方向
制御コードを使う、二つの方法がある。
①左から二つ目の“)”の後に RLM(U+200F)を挿入して、右から左に書くコンテキ
ストであることを明確にする。
<fo:block>‫& )ضصش( ضصش‬#x200F;ENGLISH</fo:block>
②アラビア文字列を RLE(U+202B~U+202C)で囲む。
<fo:block>&#x202B;‫& )ضصش( ضصش‬#x202C;ENGLISH</fo:block>
この二つはいずれも次のように表示される。
(‫شصض )شصض‬ENGLISH
23.3 fo:bidi-override
fo:bidi-override は、Unicode BIDI のアルゴリズムに対してテキストの文字列を特定の方
向に向かって書くことを強制する。二つの unicode-bidi と direction プロパティでインラ
イン FO の、Unicode BIDI アルゴリズムで使用する inline-progression-direction をセットす
る。
1) アラビア文字列の先頭に U+202D を置き、強制的に左から右に並べている。
131
23.3.1 unicode-bidi
このプロパティで指定した値は、マークアップを削除して、あたかも方向制御コード
を付加したテキスト文字列のように Unicode BIDI 処理に受け渡される。
表 23.3 unicode-bidi
プロパティ
説明
の値
normal(既
定値)
双方向性のアルゴリズムに関連して、新しいレベルの埋め込みを開始しない。
インラインレベルの要素については、双方向性アルゴリズムに関連して新しい埋め込みを開始
embed
する。この埋め込みの方向は、direction プロパティで与えられる。要素の内部では、暗黙のう
ちに並び替えを行う。これは、開始点では LRE(U+202A、direction="ltr"に対して)または、
RLE(U+202B、direction="rtl"に対して)に相当し、終了点では PDF(U+202C)に相当する。
インラインレベルの要素またはインラインレベルのみを含む要素では、オーバーライドを生成
bidi-
する。言い換えると、並び替えでは双方向性アルゴリズムを無視して direction プロパティの指
override
定する順序通りとなる。これは、開始点では LRO(U+202D、direction="ltr"に対して)または、
RLO(U+202B、direction="rtl"に対して)に相当し、終了点では PDF(U+202C)に相当する。
23.3.2 direction
unicode-bidi="embed"または unicode-bidi="override"とともに指定して、Unicode BIDI ア
ルゴリズムのための、ブロックのライティング方向と埋め込みとオーバーライドの方向
を指定する。
この他、表の欄のレイアウト、水平方向のオーバーフロー、text-align="justify"を指定
した時の段落の不完全な最終行の位置を指定する。writing-mode プロパティとの整合性
をたもつため、direction プロパティは、そこに適用される writing-mode プロパティと同
じ初期値を持つ。もし、同じ FO に direction プロパティが明示的に指定されていれば、
direction プロパティは、writing-mode からセットする inline-progression-direction を上書き
する。
プロパティの値
説明
ltr(既定値)
左から右方向
rtl
右から左方向
ニュートラルとミラーリングの項で方向整形コードを使った例は、fo:bidi-override を
使っても同様のことができる。
132
第 23 章 双方向性(BIDI)
23.3.3 fo:bidi-override を使った例
<fo:block>
&#x0634;&#x0635;&#x0636; (&#x0634;&#x0635;&#x0636;) ENGLISH
</fo:block>
<fo:block>
<fo:bidi-override unicode-bidi="embed"
direction="rtl">
&#x0634;&#x0635;&#x0636; (&#x0634;&#x0635;&#x0636;)
</fo:bidi-override>
ENGLISH
</fo:block>
上の行は左からアラビア文字を 3 文字、開き括弧、アラビア文字 3 文字、閉じ括弧、
ラテンアルファベットを並べている。下の行はアラビア文字の区間を fo:bidi-override で
方向を明確化する。組版結果は次の通り。
図 23.1 bidi-override の組版例
133
コア関数ライブラリーとデータ型
コア関数ライブラリー
数値関数
数値 floor(数値)
引数より大きくない最大の整数 (closest to positive infinity) を返す。
数値 ceiling(数値)
引数より小さくない最小の整数 (closest to negative infinity) を返す。
数値 round(数値)
引数に一番近い整数を返す。
数値 min(数値,数値)
2つの引数の数値の中で小さい方を返す。
数値 max(数値,数値)
2つの引数の数値の中で大きい方を返す。
数値 abs(数値)
引数の数値の絶対値を返す。
カラー関数
カラー rgb(数値,数値,数値)
カラー icc-color(数値,数値,数値,名前文
字,数値,数値)
カラー system-color(名前文字)
RGB カラー空間の特定のカラーを返す。
ICC カラー・プロファイルの特定のカラーを返す。
与えられた名前をもつシステム定義のカラーを返す。
フォント関数
オブジェクト system-font(名前文字,名
前文字?)
システム・フォントの特性を返す。
プロパティ値関数
オブジェクト inherited-propertyvalue(名前文字)
引数で指定した名前と一致するプロパティの継承値を返す。
数値 label-end()
リストの label-end の値を返す。
数値 body-start()
リストの body-start の値を返す。
オブジェクト from-parent(名前文字)
引数に一致するプロパティの計算された値を返す。
オブジェクト from-nearest-specifiedvalue(名前文字?)
引数に一致するプロパティの計算された値を返す。
オブジェクト from-table-column(名前文
fo:table-column の中で、名前が引数に一致するプロパティの継承さ
字?)
れた値を返す。
数値 propotional-column-width(数値)
オブジェクト merge-property-values(名
前文字?)
この関数の引数が N であるとき、プロポーショナル・メジャーの
N 単位を返す。
引数に一致するプロパティの計算された値を返す。
135
データ型
<integer>
符号付整数。オプションの'+'または'-'記号に続く数字の並び。
<number>
符号付実数。オプションの'+'または'-'記号に続く数字の並び、オプションの'.'記号と
数字の並び。
<length>
符号付の長さの値。長さは、実数と単位からなる。
<length-range>
複合データ型。minimum、optimum、maximum のコンポーネントをもち、各コンポ
ーネントは<length>。
<length-conditional>
length と conditionality をもつ複合データ型。length コンポーネントは<length>で、
conditionality コンポーネントは discard か retain。
<length-bp-ip-direction>
block-progression-direction、inline-progression-direction のコンポーネントをもつ複合
型。各コンポーネントは<length>。
<space>
minimum、optimum、maximum、precedence、conditionality のコンポーネントをもつ
複合データ型。minimum、optimum、maximum コンポーネントは<length>、precedence
コンポーネントは force または<integer>、conditionality コンポーネントは discard か
retain である。minimum が optimum より大きいなら、その値を optimum にセットし、
maximum が optimum より小さいなら、その値を optimum にセットする。
<keep>
within-line、within-column、within-page のコンポーネントをもつ複合型。各コンポー
ネントの値は、auto、always または<integer>。
<angle>
オプションの'+'または'-'記号、<number>、角度の単位の識別子の順で構成される角
度表現。角度の単位の識別子には、'deg'、'grad'、'rad'があり、0deg から 360deg に正
規化される。
<percentage>
オプションの'+'または'-'記号に続く数字の並び、オプションの'.'記号と数字の並びに
続いて'%'が現れる符号付実数。
136
コア関数ライブラリーとデータ型
<character>(文字)
ひとつの Unicode 文字
<string>(文字列)
文字の並び
<name>(名前文字)
名前を現す文字列。名前文字 (NCName) の定義に従っている必要がある。
<family-name>
フォントを識別する文字列。
<color>(カラー)
キーワードまたはカラー関数を表す文字列。キーワードのカラー名は、aqua、
black、blue、fuchsia、gray、green、lime、maroon、navy、olive、purple、red、silver、
teal、white、yellow。
<country>
ISO 3166 による国コードの指定。
<language>
639-2 による言語コードの指定。2 文字または 3 文字コード
<script>
ISO 15924 スクリプト・コードに準拠する文字列。
<id>
名前(Name)の定義に準拠し、スタイルシートの中でユニークな文字列。
<idref>
名前(Name)の定義に準拠し、スタイルシートの中で使われている ID プロパティ
の値にマッチする文字列。
<uri-specification>
"url("から始まり、オプションの空白、オプションのシングル・クオート(')または
ダブル・クオート(")、続いて RFC2396 で定義する URI 参照、オプションのシング
ル・クオート(')またはダブル・クオート(")、続いてオプションの空白、最後
に")"からなる文字列。
<time>
数字と時間単位('ms'または's')
<frequency>
数字と周波数単位('Hz'または'kHz')
137
FO の一覧
宣言、ページネーション、ページレイアウトの FO
FO の名前(要素名)
説明
6.4.2 fo:root
XSL 結果ツリーである FO ツリーのトップ・ノード
6.4.3 fo:declarations
スタイルシートのグローバル宣言のグループ化
6.4.4 fo:color-profile
スタイルシートの ICC カラー・プロフィールを宣言する。
6.4.5 fo:page-sequence
6.4.6 fo:page-sequencewrapper
レポートの章のような、文書の一部となるページの部分的な並びを生成する方法
を規定する。このページの内容は fo:page-sequence の子供のフローである。
(V1.1)
6.4.7 fo:layout-master-set
文書で使われる全てのマスターを囲む要素
6.4.8 fo:page-sequence-
ページの並びを生成するためのページマスターのセットの制約や順序を規定す
master
る。
6.4.9 fo:single-page-
ひとつのページマスターのひとつのインスタンスからなる下位の並びを規定す
master-reference
る。
6.4.10 fo:repeatable-page-
ひとつのページマスターの繰り返しのインスタンスからなる下位の並びを規定す
master-reference
る。
6.4.11 fo:repeatable-page-
いくつかの代替可能なページマスターのセットからなる繰り返しの並びを規定す
master-alternatives
る。
6.4.12 fo:conditional-
使用条件を指定して、その条件を満たした時に使われるページマスターを参照す
page-master-reference
る。
6.4.13 fo:simple-page-
ページの領域を定義し、ページを生成するのに使われる。ページは最大 5 までの
master
領域に分けることができる。
6.4.14 fo:region-body
ページの中央のビューポート参照エリア対を定義する。
6.4.15 fo:region-before
fo:reion-body の前方に位置するビューポート・エリアを定義する。
6.4.16 fo:region-after
fo:region-body の後方に位置するビューポート・エリアを定義する。
6.4.17 fo:region-start
fo:region-body の開始側に位置するビューポート・エリアを定義する。
6.4.18 fo:region-end
fo:region-body の終了側に位置するビューポート・エリアを定義する。
6.4.19 fo:flow
fo:flow の内容はページの中に分布する流し込みテキストを供給するフロー・オブ
ジェクトの並び。
複数のページの中の同じ名前のひとつの領域に繰り返して置かれたり、あるいは
6.4.20 fo:static-content
ひとつの領域に表示される、FO の並びまたはツリーを保持する。一般的には静的
なヘッダやフッタ等に使う。
6.4.21 fo:title
6.4.22 fo:flow-map
文書のタイトルを関連づけるのに使われる。ユーザ・エージェントが文書を識別
するのに使うことができる。
(V1.1)
6.4.23 fo:flow-assignment (V1.1)
139
FO の名前(要素名)
説明
6.4.24 fo:flow-source-list (V1.1)
6.4.25 fo:name-specifier
(V1.1)
6.4.26 fo:flow-target-list
(V1.1)
6.4.27 fo:region-namespecifier
(V1.1)
ブロックレベルの FO
FO の名前(要素名)
6.5.2 fo:block
6.5.3 fo:block-container
説明
段落、タイトル、ヘッドライン、図、テーブルのキャプション等に使う。
ライティング・モードの異なるエリア等ブロックレベルの参照エリアを生成するの
に使う。
インラインレベルの FO
FO の名前(要素名)
6.6.2 fo:bidi-override
6.6.3 fo:character
6.6.4 fo:initialproperty-set
6.6.5 fo:externalgraphic
説明
行内の異なるスクリプトや言語が混在するときに使う、既定値の Unicode の bidi ア
ルゴリズムを変更する。
グリフにマップする文字を表す。
fo:block の最初の行のフォーマット特性を表す。
FO 結果ツリーの外部に置くグラフィック・データのために使う。
6.6.6 fo:instream-
インライン・グラフィックやその他のジェネリックなオブジェクト。オブジェクト
foreign-object
のデータは、fo:instream-foreign-object の子孫になる。
6.6.7 fo:inline
6.6.8 fo:inlinecontainer
6.6.9 fo:leader
6.6.10 fo:page-number
バック・グラウンドをもつテキストの一部を整形する場合や、テキストの一部を境
界で囲む時などに使う。
インラインの参照エリアを生成するのに使う。
ふたつのテキスト FO を繋ぐのに使う、リーダ線、繰り返し文字の行、文字を周期
的に繰り返すパターンなど発生する。
現在のページ番号を表す。
6.6.11 fo:page-number-
引用された FO によって返される最初のエリアを含むページのページ番号を参照す
citation
る。
6.6.12 fo:page-number- (V1.1)引用された FO によって返される最後のエリアを含むページのページ番号を
citation-last
6.6.13 fo:folio-prefix
140
参照する。
(V1.1)
FO の一覧
FO の名前(要素名)
説明
(V1.1)
6.6.13 fo:folio-suffix
6.6.13 fo:scaling-valuecitation
(V1.1)
表の FO
FO の名前(要素名)
6.7.2 fo:table-and-
説明
表とキャプションを一緒に組版するために使う。
caption
6.7.3 fo:table
表の表部分の組版をするのに使う。
6.7.4 fo:table-column
表のカラム幅のように同じカラムとスパンをもつセル適用する特性を設定する。
fo:table-and-caption を使うときのみ。表のキャプションを内容とするブロックレベ
6.7.5 fo:table-caption
ルの FO を含む。
6.7.6 fo:table-header
表のヘッダの内容
6.7.7 fo:table-footer
表のフッタの内容
6.7.8 fo:table-body
表の本体の内容
6.7.9 fo:table-row
表のセルを行としてグループ化するのに使う。
6.7.10 fo:table-cell
表のセルに配置する内容をグループ化するのに使う。
リストの FO
FO の名前(要素名)
説明
6.8.2 fo:list-block
リストを組版するためのフロー・オブジェクト
6.8.3 fo:list-item
リストのラベルとボディを含む項目。
6.8.4 fo:list-item-body
リストの項目のボディ。
6.8.5 fo:list-item-label
リストの項目のラベルです。リストのボディを列挙したり、識別する。
リンクとマルチ FO
FO の名前(要素
説明
名)
6.9.2 fo:basic-link
6.9.3 fo:multi-switch
6.9.4 fo:multi-case
単純な 1 方向の1ターゲットのリンクの開始リソース
FO の代替サブ・ツリーの指定を囲み、ひとつのサブ・ツリーから他のサブ・ツリーへ
の切替を制御する。
fo:multi-switch の中で FO の各代替サブ・ツリーを囲む。各サブ・ツリーから表示した
り、隠したりする対象を選択する。
141
FO の名前(要素
説明
名)
6.9.5 fo:multi-toggle
6.9.6 fo:multiproperties
6.9.7 fo:multiproperty-set
fo:multi-case の中で、他の fo:multi-case にを切り替えるために使う。
ひとつの内容に関係付けられた複数のプロパティ・セットを切り替えるために使う。
ユーザ・エージェントの状態によって切り替える FO のプロパティ・セットを指定する。
索引のための FO
索引機能は XSL-FO V1.1 で追加された。
FO の名前(要素名)
6.10.2 fo:index-page-numberprefix
6.10.3 fo:index-page-numbersuffix
説明
索引のページ番号の接頭辞を指定する。
索引のページ番号の接尾辞を指定する。
6.10.4 fo:index-range-begin
索引キーの範囲の始まりを示す。
6.10.5 fo:index-range-end
索引キーの範囲の終わりを示す。
6.10.6 fo:index-key-reference
索引キー参照。
6.10.7 fo:index-page-citation-list
6.10.8 fo:index-page-citation-listseparator
6.10.9 fo:index-page-citationrange-separator
索引キー参照で得られたページ番号リストの整理方法を指定するために
使う。
索引ページ番号間の分離に使う文字を指定する。
索引ページ番号の範囲を示す文字を指定する。
しおりのための FO
しおり機能は XSL-FO V1.1 で追加された。
142
FO の名前(要素名)
説明
6.11.1 fo:bookmark-tree
しおりツリーの起点(ルート)
6.11.2 fo:bookmark
しおり項目のジャンプ先を示す
6.11.3 fo:bookmark-title
しおりの表示文字列
FO の一覧
アウト・オフ・ラインの FO
FO の名前(要素名)
説明
2つの目的に使う。ひとつは内容を普通に配置していくとき、関連する内容をページ
6.12.2 fo:float
の先頭の別のエリアに配置するため。もうひとつはエリアをページの片側に寄せて、
通常の内容をその廻りに流すため。
6.12.3 fo:footnote
6.12.4 fo:footnotebody
脚注の引用と対応する脚注を作り出すのに使う。
脚注の内容を生成するのに使う。
その他の FO
FO の名前(要素名)
説明
6.13.2 fo:change-bar-begin
(V1.1)
6.13.3 fo:change-bar-end
(V1.1)
6.13.4 fo:wrapper
6.13.5 fo:marker
6.13.6 fo:retrieve-marker FO のグループに対して継承されたプロパティを指定するのに使う。
ランニング・ヘッダ、ランニング・フッタを作り出すために fo:retrieve-marker
と一緒に使う。
同上
6.13.7 fo:retrieve-table-marker (V1.1)
フォーマッテイング・プロパティ
FO のプロパティの多くは CSS2 からコピーされており、三つのグループに大きく分類
されている。第一グループは、多数の FO に適用されるもので九つのサブグループに分
類される。
共通のアクセシビリティ・プロパティ
アクセシビリティをサポートするためのプロパティ
共通の絶対位置決め用プロパティ
絶対位置指定のエリアの位置と大きさを制御するためのプロパティ
共通の聴覚プロパティ
FO の内容の音声によるレンダリングを制御するためのプロパティ
共通のボーダー、パディング、バックグラウンドのプロパティ
ブロック・エリアとインライン・エリアのバックグラウンド、ボーダー、パディン
グを制御するためのプロパティ
143
共通のフォント・プロパティ
テキストを含む FO のフォントの選択を制御するためのプロパティ
共通のハイフネーション・プロパティ
ライン分割を制御するためのプロパティ、言語、スクリプト、国を含む。
共通のマージン・プロパティ-ブロック
ブロックレベル FO を囲むスペースとインデントを設定する。
共通のマージン・プロパティ-インライン
インラインレベル FO を囲むスペースを設定する。
共通の相対位置決め用プロパティ
相対的な位置決めされるエリアの位置を制御するためのプロパティ。
残りのプロパティは、幾つかの FO に適用されるもの。同じような機能をもつものに
分類されている。
エリアの配置用プロパティ
インライン・エリアの相互配置を制御するためのプロパティ。特に、異なるスクリ
プトの異なるベースラインの調整など。また、ブロック・エリアの位置を調整する
ための display-align、relative-align というプロパティもある。
エリアの大きさ用プロパティ
エリアのブロック・エリアとインライン・エリアの大きさなどを制御するプロパティ
ブロックとライン関係のプロパティ
ライン・エリアの構築とそれを含むブロック・エリアの中でライン・エリアをどの
ように配置するかを管理するプロパティ*--文字のプロパティ--テキストの表示を制
御するプロパティ。ワードの間隔調整、文字の間隔調整など。
カラー関連プロパティ
カラー管理とカラーモデル選択用プロパティ
フロート関連プロパティ
サイドフロート、前方フロートを管理するプロパティ
Keeps and Breaks プロパティ
ページ、カラム、ラインの中で同一にしたり分割したりするためのプロパティ。ウ
ィドウ、オーファンや内容を一緒にすることを含む。
レイアウト関連のプロパティ
top や、クリッピング、オーバーフロー、カラムをまたがるためのプロパティ。
リーダとルールのプロパティ
リーダと水平線を管理するためのプロパティ
ダイナミック効果のプロパティ
リンクやその他のダイナミックな効果に関連する表示、動作を管理するプロパティ。
144
FO の一覧
マーカーのプロパティ
マーカーを生成したり検索するためのプロパティ。マーカは主として辞書のような
ヘッダやフッタのために使用する。
番号と文字を変換するためのプロパティ
ページ番号やその他のフォーマッタ・ベースの番号付けを構築するためのプロパテ
ィ。
ページネーションとレイアウトのプロパティ
ページの順序、レイアウト、生成を管理するためのプロパティ。ページの大きさ、
ページの方向、ページマスターの領域の大きさ、ページマスターの識別や選択、ボ
ディ領域をカラムに分割、コンテント・フローをレイアウト領域に割当するなど。
表のプロパティ
表のレイアウトと表示を管理するプロパティ。
ライティング・モード関連のプロパティ
ブロックの進行方向、インラインの進行方向などに影響を与える様々な方向性とラ
イティング・モードに関連するプロパティ。
各種のプロパティ
その他、分類できないプロパティ
この他にショートハンド・プロパティがある。ショートハンド・プロパティは、個別
のプロパティに展開される。
145
図 表 一 覧
図一覧
第 1 章 XSL-FO による組版の概要
図 1.1 XSL-FO による組版プロセス(p. 9)
第 2 章 ページマスターとページシーケンス
図 2.1 単純ページマスターと本文区画のマージン(p. 17)
図 2.2 区画の extent プロパティ(p. 18)
図 2.3 単純ページマスターの区画設定例(p. 21)
図 2.4 流し込み領域の対応つけ(p. 24)
第 3 章 FO ツリーの基本構造
図 3.1 表紙と本文からなる冊子の FO ツリー(p. 25)
図 3.2 組版結果の PDF(p. 30)
第 4 章 ページレイアウトの切り替え
図 4.1 ページマスターの参照(p. 32)
図 4.2 段組の組版結果(p. 39)
第 5 章 エリアモデル(領域モデル)
図 5.1 エリアツリーと出力媒体の領域(p. 40)
図 5.2 エリアのブロックと行内の進行方向(p. 41)
図 5.3 エリアの基本構造(p. 42)
図 5.4 エリアの広がりを示す特性値(p. 43)
図 5.5 ブロックエリアの幅(p. 45)
図 5.6 ブロックの高さ(p. 47)
図 5.7 ブロックエリア間の間隔(p. 49)
図 5.8 参照エリアの回転(p. 50)
図 5.9 ライティングモードの設定(p. 51)
第 8 章 ボーダー(罫線)
図 8.1 ボーダーの種類と太さ(p. 66)
第 9 章 ブロック組版オブジェクト
図 9.1 fo:block の組版(p. 68)
図 9.2 段落フォント設定例(p. 69)
図 9.3 段落の文字配置例(p. 70)
図 9.4 段落先頭の空きの制御(p. 72)
図 9.5 改ページの制御(p. 74)
図 9.6 行ピッチの指定(p. 75)
図 9.7 ハーフレディング(p. 76)
図 9.8 インラインエリアの配置矩形(p. 77)
147
第 10 章 ブロックコンテナー
図 10.1 部分縦書(p. 79)
第 11 章 インラインの FO
図 11.1 文字修飾の例(p. 84)
図 11.2 文字の大きさ例(p. 85)
図 11.3 部分縦書き(p. 85)
図 11.4 ルビの例(p. 86)
第 12 章 画像
図 12.1 EMF 画像(p. 88)
図 12.2 SVG 画像(p. 89)
第 14 章 リーダー
図 14.1 仮想的目次例(p. 95)
図 14.2 フッターの柱とノンブル例(p. 95)
第 15 章 表
図 15.1 表の構造(p. 96)
図 15.2 表のセル(display-align)(p. 101)
図 15.3 表のボーダーとパディングの例(p. 103)
図 15.4 カラム幅の例(p. 104)
第 16 章 リスト(箇条書き)
図 16.1 リストの構造(p. 105)
図 16.2 リストの組版(p. 107)
第 17 章 しおりの FO
図 17.1 PDF のしおり(p. 109)
第 18 章 脚注と前方フロート
図 18.1 脚注と前方フロートの領域(p. 111)
図 18.2 脚注の組版例(p. 113)
図 18.3 前方フロートの組版例(p. 114)
第 19 章 サイドフロート
図 19.1 サイドフロートの配置例(p. 117)
図 19.2 侵入による移動の効果(p. 120)
第 21 章 索引
図 21.1 XSL-FO の索引(p. 123)
図 21.2 範囲の索引キー(p. 124)
図 21.3 索引キー参照のページ番号をまとめる(p. 126)
図 21.4 索引キー参照のページ番号を分離する(p. 126)
第 22 章 リンク
図 22.1 リンクの仕組み(p. 128)
第 23 章 双方向性(BIDI)
図 23.1 bidi-override の組版例(p. 133)
148
図表一覧
表一覧
第 1 章 XSL-FO による組版の概要
表 1.1 主な XSL-FO プロセサ(p. 14)
第 2 章 ページマスターとページシーケンス
表 2.1 単純ページマスターのプロパティ(p. 16)
表 2.2 区画名の既定値(p. 18)
表 2.3 区画のプロパティ(p. 19)
表 2.4 initial-page-number プロパティ(p. 22)
表 2.5 force-page-count プロパティ(p. 23)
第 4 章 ページレイアウトの切り替え
表 4.1 本に要求されるページレイアウト(p. 31)
表 4.2 ページシーケンス・マスターのサブシーケンス(p. 32)
表 4.3 条件付きページマスター参照のプロパティ(p. 33)
表 4.4 段組のプロパティ(p. 36)
第 5 章 エリアモデル(領域モデル)
表 5.1 writing-mode プロパティの値(p. 51)
表 5.2 参照エリアの回転とライティングモードの適用(p. 51)
第 6 章 式・数値の表現
表 6.1 単位(p. 54)
表 6.2 絶対方向と相対方向の対応(p. 55)
第 7 章 文字コードとフォント
表 7.1 font-size プロパティ(p. 61)
表 7.2 font-weight プロパティ(p. 61)
表 7.3 white-space-treatment(p. 62)
表 7.4 linefeed-treatment(p. 63)
表 7.5 white-space-collapse(p. 63)
第 8 章 ボーダー(罫線)
表 8.1 ボーダーの種類(p. 64)
第 9 章 ブロック組版オブジェクト
表 9.1 fo:block の組版例のプロパティ(p. 68)
表 9.2 段落の文字配置プロパティ(p. 69)
表 9.3 段落の背景プロパティ(p. 71)
表 9.4 改ページや改段のプロパティ(p. 72)
表 9.5 行ピッチのプロパティ(p. 74)
表 9.6 line-stacking-strategy の値(p. 76)
第 10 章 ブロックコンテナー
表 10.1 ブロックコンテナーによる段組(p. 81)
表 10.2 ブロックコンテナ―の位置指定方法(p. 81)
149
第 12 章 画像
表 12.1 fo:external-graphic の主なプロパティとその値の説明(p. 87)
第 13 章 ページ番号の処理
表 13.1 ページ番号開始値(p. 90)
表 13.2 page-citation-strategy プロパティ(p. 91)
表 13.3 ページ番号文字列(p. 91)
第 14 章 リーダー
表 14.1 fo:leader の主要なプロパティ(p. 93)
第 15 章 表
表 15.1 表のレイアウト(p. 98)
表 15.2 表のレイアウトのための主なプロパティ(p. 99)
表 15.3 表レイアウト指定のプロパティ(p. 101)
第 16 章 リスト(箇条書き)
表 16.1 リスト独自のプロパティ(p. 105)
第 17 章 しおりの FO
表 17.1 fo:bookmark のプロパティ(p. 108)
第 19 章 サイドフロート
表 19.1 float プロパティ(p. 116)
表 19.2 クリアプロパティ(p. 118)
表 19.3 侵入による移動(p. 119)
第 20 章 柱の設定
表 20.1 柱の設定のプロパティ(p. 121)
第 22 章 リンク
表 22.1 リンクのプロパティ(p. 128)
第 23 章 双方向性(BIDI)
表 23.1 Unicode の方向制御コード(p. 129)
表 23.2 Unicode の双方向性文字タイプ(p. 129)
表 23.3 unicode-bidi(p. 132)
150
アンテナハウス株式会社
XSL-FO の基礎
XML を組版するためのレイアウト仕様
2016 年 3 月 25 日 0.5 版
2016 年 4 月 3 日 0.62 版 ページマスターとページシーケンス大幅書き直し
著 者 アンテナハウス株式会社
発 行 所 アンテナハウス株式会社 CAS 電子出版
住 所 東京都中央区東日本橋 2 丁目 1 番 6 号
電話番号 03-5829-9021
W E B http://www.cas-ub.com
Eメール [email protected]
Copyright ©2016- Antenna House, Inc.
All right reserved.