フロート拡張
Antenna House Formatter V7.4 では、フロート拡張により、ページ上の任意の場所への配置、段組の段をまたぐ配置など、高度なフロート配置の機能が実装されています。これにより、自動組版における図版等の配置の様々な要求を満たすことができます。
XSL-FOで使用の場合、フロート拡張プロパティ(axf:float-*)は <fo:float> 要素に指定します。
CSSで使用の場合、フロート拡張プロパティ(-ah-float-*)はフロート対象にする要素に指定します。
注意: | XSL仕様では、float="left" は float="start" と、float="right" は float="end" と、解釈されることになっています。しかし、その仕様では、float を writing-mode によらずに物理的な left/right に位置させることができません。Antenna House Formatter V7.4 の XSL-FO では、left/right は、物理的な方向を示すように解釈されます。clear も同様です。 |
---|
拡張プロパティ
axf:float / CSS (-ah-)float
フロート関連拡張プロパティをまとめて指定するショートハンドプロパティです。 [CSS3-GCPM] Page floats (float は、2014-05-13以降のGCPMから削除されています)
Value: |
<float-x> || <float-y> || <float-wrap> || <float-reference> || <float-move> (XSL) [<float-x> || <float-y> || <float-wrap> || <float-reference> || <float-move>] | footnote | sidenote (CSS) |
Initial: | none |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- <float-x> = none | start | end | left | right | top | bottom | center | inside | outside | alternate | column-outside
-
水平(縦書きでは垂直)方向のフロート配置を指定します。 ☞ axf:float-x
- <float-y> = none | before | after | top | bottom | left | right | center | inside | outside | anchor
-
垂直(縦書きでは水平)方向のフロート配置を指定します。 ☞ axf:float-y
- <float-wrap> = wrap | skip
-
フロートへのテキスト回り込みの有無を指定します。 ☞ axf:float-wrap
- <float-reference> = auto | normal | page | multicol | column
-
フロートを配置する参照エリアを指定します。 ☞ axf:float-reference
- <float-move> = next | auto-next | auto-move | keep | keep-float | after-edge | <integer>
-
フロートを次のページ(または段)に移動するかどうかを指定します。 ☞ axf:float-move
- footnote
CSSで脚注を生成します。 ☞ CSSによる脚注・傍注
- sidenote
CSSで傍注を生成します。 ☞ CSSによる脚注・傍注
この拡張プロパティはショートハンドとして扱われ、個別の拡張プロパティにマッピングされます。例えば、
は次と同じことになります:
詳しい説明は個別の拡張プロパティを参照してください。
絶対方向を表す値 left、right、top、bottom、center、inside、outside は、<float-x> と <float-y> のどちらにも展開されるあいまいさがあります。これは、次のように解決されます。
- none は無視されます。
- before、after、start、end、alternate、column-outside のいずれかが含まれる場合、それは <float-x> と <float-y> のどちらかに決まるので、残っているあいまいな値はもう一方の値となります。
- float の値のリスト内に before、after、start、end、alternate、column-outside のいずれも含まれない場合、絶対方向を表す値の始めものを <float-x> に、後のものを <float-y> とします。
axf:float-x / CSS -ah-float-x
水平(縦書きでは垂直)方向のフロート配置を指定します。
Value: | none | start | end | left | right | top | bottom | center | inside | outside | alternate | column-outside |
Initial: | none |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- none
-
水平(縦書きでは垂直)方向にはフロート配置しません。
- start
-
start 側にフロート配置します。左から右の横書きの場合 left と同じです。
- end
-
end 側にフロート配置します。左から右の横書きの場合 right と同じです。
- left
-
左側にフロート配置します。横書き専用です。縦書きで指定することはできません。
- right
-
右側にフロート配置します。横書き専用です。縦書きで指定することはできません。
- top
-
上側にフロート配置します。縦書き専用です。横書きで指定することはできません。
- bottom
-
下側にフロート配置します。縦書き専用です。横書きで指定することはできません。
- center
-
水平(縦書きでは垂直)方向の中央にフロート配置します。
- inside
-
ノド側(右ページでは左側、左ページでは右側)にフロート配置します。横書き専用です。縦書きで指定することはできません。
- outside
-
小口側(右ページでは右側、左ページでは左側)にフロート配置します。横書き専用です。縦書きで指定することはできません。
- alternate
-
段組の最初の段のときは end、最後の段のときは start、それ以外では center とみなします。段組でないときは center とみなします。
- column-outside
-
段組の最後の段のときは end、それ以外の段のときは start とみなします。段組でないときは start とみなします。
axf:float-y / CSS -ah-float-y
垂直(縦書きでは水平)方向のフロート配置を指定します。
Value: | none | before | after | top | bottom | left | right | center | inside | outside | anchor |
Initial: | none |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- none
-
垂直(縦書きでは水平)方向にはフロート配置しません。
- before
-
before 側にフロート配置します。左から右の横書きの場合 top と同じです。
- after
-
after 側にフロート配置します。左から右の横書きの場合 bottom と同じです。
- top
-
上側にフロート配置します。横書き専用です。縦書きで指定することはできません。
- bottom
-
下側にフロート配置します。横書き専用です。縦書きで指定することはできません。
- left
-
左側にフロート配置します。縦書き専用です。横書きで指定することはできません。
- right
-
右側にフロート配置します。縦書き専用です。横書きで指定することはできません。
- center
-
垂直(縦書きでは水平)方向の中央にフロート配置します。
- inside
-
ノド側(右ページでは左側、左ページでは右側)にフロート配置します。縦書き専用です。横書きで指定することはできません。
- outside
-
小口側(右ページでは右側、左ページでは左側)にフロート配置します。縦書き専用です。横書きで指定することはできません。
- anchor
-
アンカー位置にフロートを配置します。
axf:float-reference / CSS -ah-float-reference
フロートを配置する参照エリアを指定します。
Value: | auto | normal | page | multicol | column |
Initial: | auto |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- auto
-
normal と基本的に同じです。ただし、CSS で axf:float-y が none の場合、フロートのアンカーのあるブロックのインデントがフロート配置に影響します。
- normal
-
現在の参照エリア内でフロートを配置します。
- page
-
ページエリア(region-body)内でフロートを配置します。
- multicol
-
段組エリア内でフロートを配置します。
- column
-
段エリア内でフロートを配置します。
axf:float-y が none の場合には、x方向の配置のために参照するエリアを設定することになります。
CSSで使用の場合、axf:float-y が none で axf:float-reference が auto の場合、フロートのアンカーのあるブロックのインデントがフロート配置に影響しますが、axf:float-reference に normal、page または column を指定することで、ブロックのインデントに関係なく配置できます。
axf:float-move / CSS -ah-float-move
フロートを次のページ(または段)に移動するかどうかを指定します。
Value: | auto | next | auto-next | auto-move | keep | keep-float | after-edge | <integer> |
Initial: | auto |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- auto
-
axf:float-y が none なら keep と同じ、それ以外なら auto-next と同じです。
- next
-
フロートを次のページ(または段)に移動します。
- auto-next
-
現在のページ(または段)に十分な余白がない場合、フロートを次のページ(または段)に移動します。
- auto-move
-
現在のページ(または段)に十分な余白がない場合、フロートを次のページ(または段)に移動します。または、フロートを移動するのではなく、フロートのアンカーとまわりのテキストを次のページ(または段)に移動します。
- keep
-
フロートとそのアンカーは常に同じページ(または段)に配置されます。現在のページ(または段)にそのための十分な余白がない場合は、フロートのアンカーよりも前のところで改ページ(または改段)が起きて空白が生じることになります。
- keep-float
-
keep とほとんど同じですが、次の点が異なります。keep は、アンカーエリアに keep-with-next="always" が自動的に設定され、次のエリアとの間で改ページ(または改段)が抑止されますが、keep-float ではそれが行われません。これの動作上の違いは、アンカーエリアの高さがゼロのときに現れます。
- after-edge
axf:float-y が none のとき、フロートの下端をアンカーの位置に合わせます。
- <integer>
数値はページ番号とみなされ、フロートをそのページに移動します。文書のページ数より大きいときは、内容が空のページ(ブランクページではありません)が挿入されます。 axf:float-y が none のとき、及び値がアンカーが配置されるページのページ番号より小さいときは機能しません。そのときは auto が指定されたとみなされます。
注意: ページ番号は、論理的なページ番号とみなされます。
axf:float-x と axf:float-y の値が両方とも none であればフロート配置はされないので axf:float-move の指定も無効です。
axf:float-wrap / CSS -ah-float-wrap
テキストの回り込みについて指定します。
Value: | auto | wrap | skip |
Initial: | auto |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | N/A |
値の意味は以下のとおりです。
- auto
-
axf:float-x が none 以外なら wrap とし、none なら skip とします。
- wrap
-
テキストの回り込みをします。ただし、段の中でフロートの両側に回り込めるスペースがあるような場合(axf:float-x が center、あるいは axf:float-offset-x の指定によります)は skip の扱いとなります。
- skip
-
テキストの回り込みをしません。フロートを飛ばしてテキストを配置します。
axf:float-min-wrap-x / CSS -ah-float-min-wrap-x
フロートへのテキスト回り込みのための幅(縦書きでは高さ)の最小値を指定します。
Value: | normal | <length> | <percentage> |
Initial: | normal |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
フロートへのテキスト回り込みのための幅(縦書きでは高さ)がこのプロパティで指定される幅(縦書きでは高さ)よりも小さければ、回り込みなしとします。
初期値 normal は標準のフロートの最小回り込み幅(縦書きでは高さ)とします。0pt の指定と同じです。
axf:float-min-wrap-y / CSS -ah-float-min-wrap-y
フロートの前後に配置するテキスト量の最小値を指定します。
Value: | normal | <length> | <percentage> |
Initial: | normal |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
axf:float-y の値が none 以外の場合、組版対象領域内でフロートの前または後にテキストを配置するスペースがあるとき、その高さ(縦書きでは幅)がこのプロパティで指定される高さ(縦書きでは幅)よりも小さければ、そこにはテキストを配置しません。
axf:float-y の値が none の場合は次のように処理されます。
- axf:float-move の値が auto-next の場合、組版対象領域内でフロートの後にテキストを配置するスペースが残っているとき、その高さ(縦書きでは幅)がこのプロパティで指定される高さ(縦書きでは幅)よりも小さければ、その高さ(縦書きでは幅)がゼロになるようにフロートの位置を移動します。フロートの後にあったテキストはフロートの前に移動することになります。
- axf:float-move の値が auto-move の場合、auto-next の場合と同様ですが、組版対象領域内で、フロートの後だけでなくフロートの前のテキスト配置スペースの高さ(縦書きでは幅)も、このプロパティで指定される高さ(縦書きでは幅)よりも小さければ、その高さ(縦書きでは幅)がゼロになるようにフロートの位置を移動します。フロートの前にあったテキストはフロートの後に移動することになります。
- float-move の値がそれ以外の場合、組版対象領域内でフロートの後にテキストを配置するスペースが残っているときはテキストの回り込みが起こり、そうでないときは回り込みが起こりません。
初期値 normal は、0pt です。
axf:float-centering-x / CSS -ah-float-centering-x
フロートへのテキスト回り込みのための幅(縦書きでは高さ)が足りないときフロートをセンタリングするかどうかを指定します。
Value: | none | auto | <length> | <percentage> |
Initial: | none |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
値の意味は以下のとおりです。
- none
-
フロートをセンタリングしません。
- auto
-
フロートへのテキスト回り込みのための幅(縦書きでは高さ)が axf:float-min-wrap-x プロパティで指定された幅(縦書きでは高さ)に足りないときフロートをセンタリングします。
- <length>
- <percentage>
-
フロートへのテキスト回り込みのための幅(縦書きでは高さ)がこのプロパティで指定された幅(縦書きでは高さ)に足りないときフロートをセンタリングします。
axf:float-centering-y / CSS -ah-float-centering-y
フロートの前後にテキストを配置する高さ(縦書きでは幅)が足りないときフロートをセンタリングするかどうかを指定します。
Value: | none | auto | <length> | <percentage> |
Initial: | none |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
値の意味は以下のとおりです。
- none
-
フロートをセンタリングしません。
- auto
-
フロートの前後にテキストを配置する高さ(縦書きでは幅)が axf:float-min-wrap-y プロパティで指定された高さ(縦書きでは幅)に足りないときフロートをセンタリングします。
- <length>
- <percentage>
-
フロートの前後にテキストを配置する高さ(縦書きでは幅)がこのプロパティで指定された高さ(縦書きでは幅)に足りないときフロートをセンタリングします。
axf:float-margin-x / CSS -ah-float-margin-x
フロートと回り込むテキストとの間の余白を指定します(x方向)。
Value: | [ <length> | <percentage> ] [ <length> | <percentage> ]? |
Initial: | 0pt |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
値をふたつ指定した場合、最初の値が start 側、次の値が end 側の値となります。
axf:float-margin-y / CSS -ah-float-margin-y
フロートと前後のテキストとの間の余白を指定します(y方向)。
Value: | [ <length> | <percentage> ] [ <length> | <percentage> ]? |
Initial: | 0pt |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
値をふたつ指定した場合、最初の値が before 側、次の値が after 側の値となります。
axf:float-float-margin-x / CSS -ah-float-float-margin-x
フロートと別の隣接するフロートとの間の余白を指定します(x方向)。
Value: | auto | [[ <length> | <percentage> ] [ <length> | <percentage> ]?] |
Initial: | auto |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
初期値 auto は、axf:float-margin-x の値と同じです。値をふたつ指定した場合、最初の値が start 側、次の値が end 側の値となります。
axf:float-float-margin-x の値が axf:float-margin-x の値を超える指定はできません。
axf:float-float-margin-y / CSS -ah-float-float-margin-y
フロートと別の隣接するフロートとの間の余白を指定します(y方向)。
Value: | auto | [[ <length> | <percentage> ] [ <length> | <percentage> ]?] |
Initial: | auto |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block |
初期値 auto は、axf:float-margin-y の値と同じです。値をふたつ指定した場合、最初の値が before 側、次の値が after 側の値となります。
axf:float-float-margin-y の値が axf:float-margin-y の値を超える指定はできません。
axf:float-offset-x / CSS -ah-float-offset-x
フロートのオフセット配置を指定します(x方向)。
Value: | <length> | <percentage> |
Initial: | 0pt |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block minus the size of the float |
axf:float-x が start なら end 側へのオフセット、end なら start 側へのオフセットを指定します。
axf:float-offset-y / CSS -ah-float-offset-y
フロートのオフセット配置を指定します(y方向)。
Value: | <length> | <percentage> |
Initial: | 0pt |
Applies to: | fo:float / floated elements |
Inherited: | no |
Percentages: | refer to the size of containing block minus the size of the float |
axf:float-y が before なら after 側へのオフセット、after なら before 側へのオフセットを指定します。
単位gr
単位 'gr' (grid)は特別な長さの単位であり、段組の段幅(column-width)と段間(column-gap)の両方をそれぞれ 1gr として数えます。このため、n段抜きの指定は (2n-1)gr となります。段幅または段間の途中までの長さの指定のために端数の指定も可能です。負の値は指定できません。
次は2段抜きのフロートの例:
ここで、'3gr' は段幅×2と段間×1を合わせた幅ということになります。
注意: | 単位gr は、axf:float="multicol" である float に対してのみ定義されます。その他の float および float 以外に適用することはできません。適用した場合の動作は不定となります。 |
---|
CSSによる脚注・傍注
CSSで脚注を表現するには、(-ah-)float:footnote と @footnote で行います。 次はごく簡単な脚注の例です。 ☞ [CSS3-GCPM] Footnotes
これにより、<span class="footnote">~</span> で囲まれた部分がページ末に脚注として配置され、その部分は合印に置き換わります。 (-ah-)float:footnote は、脚注本体を表します(FOの<fo:footnote-body>に相当)。@footnote では、脚注の体裁を指定します。(-ah-)float を使って適切な配置を指定してください。footnote-display には対応していません。
合印の体裁は ::footnote-call で指定します。脚注に付く番号は ::footnote-marker で指定します。これらは、デフォルトの体裁がデフォルトスタイルシート(html.css)に指定されています。次のようにすると、番号付けを A, B, C... にすることができます。ここには、list-style-type に指定できるものが指定できます。
カウンタのリセットは、counter-reset:footnote を @pageなどに適宜指定します。
CSSで傍注を表現するには、(-ah-)float:sidenote と @sidenote で行います。 要領は脚注と同じです。 ☞ [CSS3-GCPM] Sidenotes (@sidenote は、2010-06-08以降のGCPMから削除されています)
::sidenote-call と ::sidenote-marker の指定は、デフォルトスタイルシートにはありません。
::footnote-call、::sidenote-call は、その内容が空のときでも空の領域を生成します。これは、-ah-baseline-grid などに影響するかも知れません。::footnote-call、::sidenote-call を使わないときは、次のように display:none を指定するとよいでしょう。
例
ページフロートの例
次の例は、ページの上部にフロートを配置します。
次の例は、ページの下部にフロートを配置します。
段抜きフロートの例
次の例は、段組エリアの右上角に3段抜きでフロートを配置します。
次の例は、段組エリアの下部のノド側にフロートを配置します。
カラムフロートの例
次の例は、段の上部にフロートを配置します。
次の例は、段の下部にフロートを配置します。
フロートの移動の例
フロートは、そのアンカーエリアの場所に配置されるため、画像などが含まれる場合、ページ余白が少ないと次のページに送られ、その結果ページ下部に大きな余白が残ることになります。これを避けるため、axf:float-moveプロパティを利用して、フロートを自動的にアンカーエリアから移動させて余白を解消することができます。ただし、移動する余地がない場合は、余白が残ることになるので注意してください。
次の例は、画像をテキストの回り込みなしでページの左右中央に配置します。このとき、ページ余白が少ないと、アンカーをその位置に残したまま、画像だけ次のページに移動します。このとき、axf:float-xの指定が必要なことに注意してください。
上の例で、axf:float-move="auto-move" を指定すると、余白の状況によっては、アンカー(とそのまわりのテキスト)が次のページに移動するようになります。結果として、画像が前のページに移動したように見えます。
フロートの移動では、章や節をまたいで移動して欲しくないことがあります。フロートは、他のフロートを越えて移動しないので、章や節の切れ目に、ダミーのフロートを入れることで、それを実現することができます。次のようにすることで、空のフロートが、他のフロートが章をまたぐのを防ぎます。
新しい章にあるフロートが前に移動するのを許したいことがあります。上の例では、空のフロートに keep-with-next="always" が設定されるので、新しい章の前にフロートが移動してくる余地がありません。axf:float-move="keep-float" を指定することでそれがなくなるので、この空のフロートは前のページの最後に配置されることになり、次のブロックの間に後からフロートが移動できるようになります。
制限事項
Antenna House Formatter V7.4 のフロート拡張機能には、以下のような制限事項があります。
axf:float-y が none のフロートは改ページ(改段)時に分割されることがあります。分割を回避する場合は keep-together="always" を指定してください。
段組で axf:float-y が none で axf:float-reference の値が multicol または page の場合に、指定の段以外でフロートへのテキストの回り込みがされず、テキストとフロートとが重なることがあります。
axf:float="page before" のとき、xsl-before-float-separator が定義されてる場合は標準XSL仕様での float="before" の動作となります。それ以外の場合では xsl-before-float-separator は表示されません。
<fo:table-cell>・<fo:block-container> や display の値が table-cell・inline-block となる要素中でのフロート拡張機能は、正しく配置されないことがあります。
axf:float-y が none でないフロートは <fo:region-body> または <axf:spread-region> に置くことができます。それ以外の区画にそのようなフロートを置いても、フロートはしません。