こんにちは。
AH Formatterサポート担当です。
今週はAH Formatterのサポートで比較的よくあるご質問を紹介いたします。
今回は、.precedence について、です。
XSL-FOの仕様の中で、space-before や space-after などのプロパティで Value に <space> が定義されているものがあります。
7.11.5 “space-before”
では、以下のように書かれています。
XSL Definition:
Value: <space> | inherit
Initial: space.minimum=0pt, .optimum=0pt, .maximum=0pt, .conditionality=discard, .precedence=0
さらに
5.11 Property Datatypes
の中で、<space> の説明があります。
A compound datatype, with components: minimum, optimum, maximum, precedence, and conditionality.
つまり、Value に <space> とあるプロパティについては
space-before.minimum=”2.0pt”
space-before.optimum=”3.0pt”
space-before.maximum=”4.0pt”
space-before.precedence=”0″
space-before.conditionality=”discard”
のような使い方ができます。
この中の “.precedence” について
どのような意味を持っているのか?
使い方がよくわからないというご質問を受けることがあります。
.precedence は指定値が競合するような場合の解決に用います。
競合した場合の強さを整数または”force”(最も強い)で表します。
space-after/space-beforeを例にしますと、
<fo:block space-after=”2cm”>1のブロック</fo:block>
<fo:block space-before=”1cm”>2のブロック</fo:block>
このような場合、どちらのblockも .precedence は指定されていないので
値は初期値の0です。したがって、
1のブロックと2のブロックの間の space は、
大きいほうの値が選択され、2cmとなります。
補足:
スペース指定子のこのような法則は
4.3.1 Space-resolution Rules
に定義されています。
次に、2のブロックに space-before.precedence=”force” を指定します。
<fo:block space-after=”2cm”>1のブロック</fo:block>
<fo:block space-before=”1cm” space-before.precedence=”force”>2のブロック</fo:block>
space-before の方が強制力を持つので、space は1cmになります。
次に両方に .precedence=”force” を指定すると、
<fo:block space-after=”2cm” space-after.precedence=”force”>1のブロック</fo:block>
<fo:block space-before=”1cm” space-before.precedence=”force”>2のブロック</fo:block>
両方とも強制的に space を出力するので、間の space は3cmとなります。
このような使い方を知っていると、章タイトル/節タイトルや本文との空きを調節するのに
便利なことがあるかもしれません。
参考資料
『XSL-FOの基礎』 6.8 複合データ型