フロート拡張

Antenna House Formatter V7.4 では、フロート拡張により、ページ上の任意の場所への配置、段組の段をまたぐ配置など、高度なフロート配置の機能が実装されています。これにより、自動組版における図版等の配置の様々な要求を満たすことができます。

XSL-FOで使用の場合、フロート拡張プロパティ(axf:float-*)は <fo:float> 要素に指定します。

CSSで使用の場合、フロート拡張プロパティ(-ah-float-*)はフロート対象にする要素に指定します。

拡張プロパティ

axf:float / CSS (-ah-)float CSSページ組版入門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による脚注・傍注

この拡張プロパティはショートハンドとして扱われ、個別の拡張プロパティにマッピングされます。例えば、

<!-- XSL-FO example -->
<fo:float axf:float="before column auto-move">
  ...
</fo:float>
<!-- XHTML+CSS example -->
<div style="-ah-float: before column auto-move">
  ...
</div>

は次と同じことになります:

<!-- XSL-FO example -->
<fo:float axf:float-x="none" axf:float-y="before"
          axf:float-reference="column" axf:float-move="auto-move">
  ...
</fo:float>
<!-- XHTML+CSS example -->
<div style="-ah-float-x: none; -ah-float-y: before;
            -ah-float-reference: column; -ah-float-move: auto-move">
  ...
</div>

詳しい説明は個別の拡張プロパティを参照してください。

絶対方向を表す値 leftrighttopbottomcenterinsideoutside は、<float-x><float-y> のどちらにも展開されるあいまいさがあります。これは、次のように解決されます。

  • none は無視されます。
  • beforeafterstartendalternatecolumn-outside のいずれかが含まれる場合、それは <float-x><float-y> のどちらかに決まるので、残っているあいまいな値はもう一方の値となります。
  • float の値のリスト内に beforeafterstartendalternatecolumn-outside のいずれも含まれない場合、絶対方向を表す値の始めものを <float-x> に、後のものを <float-y> とします。

axf:float-x / CSS -ah-float-x XSL-FO Samples Collectionカラムフロートページフロート段抜きフロート段組内フロートの自動配置段組内フロートの自動配置(カラムの外側に配置)

水平(縦書きでは垂直)方向のフロート配置を指定します。

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 XSL-FO Samples Collectionアンカー位置にフロートを配置カラムフロートページフロート段抜きフロート

垂直(縦書きでは水平)方向のフロート配置を指定します。

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 XSL-FO Samples Collectionカラムフロートページフロート段抜きフロート

フロートを配置する参照エリアを指定します。

Value:auto | normal | page | multicol | column
Initial:auto
Applies to:fo:float / floated elements
Inherited:no
Percentages:N/A

値の意味は以下のとおりです。

auto

normal と基本的に同じです。ただし、CSS で axf:float-ynone の場合、フロートのアンカーのあるブロックのインデントがフロート配置に影響します。

normal

現在の参照エリア内でフロートを配置します。

page

ページエリア(region-body)内でフロートを配置します。

multicol

段組エリア内でフロートを配置します。

column

段エリア内でフロートを配置します。

axf:float-ynone の場合には、x方向の配置のために参照するエリアを設定することになります。

CSSで使用の場合、axf:float-ynoneaxf:float-referenceauto の場合、フロートのアンカーのあるブロックのインデントがフロート配置に影響しますが、axf:float-referencenormalpage または column を指定することで、ブロックのインデントに関係なく配置できます。

axf:float-move / CSS -ah-float-move XSL-FO Samples Collection表の泣き別れを float で回避

フロートを次のページ(または段)に移動するかどうかを指定します。

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-ynone なら keep と同じ、それ以外なら auto-next と同じです。

next

フロートを次のページ(または段)に移動します。

auto-next

現在のページ(または段)に十分な余白がない場合、フロートを次のページ(または段)に移動します。

auto-move

現在のページ(または段)に十分な余白がない場合、フロートを次のページ(または段)に移動します。または、フロートを移動するのではなく、フロートのアンカーとまわりのテキストを次のページ(または段)に移動します。

keep

フロートとそのアンカーは常に同じページ(または段)に配置されます。現在のページ(または段)にそのための十分な余白がない場合は、フロートのアンカーよりも前のところで改ページ(または改段)が起きて空白が生じることになります。

keep-float

keep とほとんど同じですが、次の点が異なります。keep は、アンカーエリアに keep-with-next="always" が自動的に設定され、次のエリアとの間で改ページ(または改段)が抑止されますが、keep-float ではそれが行われません。これの動作上の違いは、アンカーエリアの高さがゼロのときに現れます。

after-edge

axf:float-ynone のとき、フロートの下端をアンカーの位置に合わせます。

<integer>

数値はページ番号とみなされ、フロートをそのページに移動します。文書のページ数より大きいときは、内容が空のページ(ブランクページではありません)が挿入されます。 axf:float-ynone のとき、及び値がアンカーが配置されるページのページ番号より小さいときは機能しません。そのときは auto が指定されたとみなされます。

axf:float-xaxf: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-xnone 以外なら wrap とし、none なら skip とします。

wrap

テキストの回り込みをします。ただし、段の中でフロートの両側に回り込めるスペースがあるような場合(axf:float-xcenter、あるいは 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-xstart なら 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-ybefore なら after 側へのオフセット、after なら before 側へのオフセットを指定します。

単位gr

単位 'gr' (grid)は特別な長さの単位であり、段組の段幅(column-width)と段間(column-gap)の両方をそれぞれ 1gr として数えます。このため、n段抜きの指定は (2n-1)gr となります。段幅または段間の途中までの長さの指定のために端数の指定も可能です。負の値は指定できません。

次は2段抜きのフロートの例:

<fo:float axf:float="multicol top left">
  <fo:block-container width="3gr">
    <fo:block>This is a two-column-spanning float.</fo:block>
  </fo:block-container>
</fo:float>

ここで、'3gr' は段幅×2と段間×1を合わせた幅ということになります。

0.5gr = 0.5 columnWidth
1gr = 1 columnWidth
1.5gr = 1 columnWidth + 0.5 columnGap
2gr = 1 columnWidth + 1 columnGap
2.5gr = 1 columnWidth + 1 columnGap + 0.5 columnWidth
3gr = 1 columnWidth + 1 columnGap + 1 columnWidth
(2n-1)gr = n columnWidth + (n-1) columnGap

CSSによる脚注・傍注

CSSで脚注を表現するには、(-ah-)float:footnote@footnote で行います。 次はごく簡単な脚注の例です。  [CSS3-GCPM] Footnotes

span.footnote {
 -ah-float: footnote;
}
@page {
 @footnote {
  border-top: solid;
  -ah-float: page bottom;
 }
}
<p>
Lorem dignissim<span class="footnote">Quisque suscipit ante vel eros.</span>, orci ac porta blandit, ...
</p>

これにより、<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 に指定できるものが指定できます。

::footnote-call,
::footnote-marker {
 content: counter(footnote, upper-alpha);
}

カウンタのリセットは、counter-reset:footnote@pageなどに適宜指定します。

CSSで傍注を表現するには、(-ah-)float:sidenote@sidenote で行います。 要領は脚注と同じです。  [CSS3-GCPM] Sidenotes (@sidenote は、2010-06-08以降のGCPMから削除されています)

span.sidenote {
 -ah-float: sidenote;
}
@page {
 @sidenote {
  -ah-float: outside;
  clear: both;
  width: 20%
 }
}
<p>
Lorem dignissim<span class="sidenote">Quisque suscipit ante vel eros.</span>, orci ac porta blandit, ...
</p>

::sidenote-call::sidenote-marker の指定は、デフォルトスタイルシートにはありません。

::footnote-call::sidenote-call は、その内容が空のときでも空の領域を生成します。これは、-ah-baseline-grid などに影響するかも知れません。::footnote-call::sidenote-call を使わないときは、次のように display:none を指定するとよいでしょう。

::sidenote-call { display: none }

ページフロートの例

次の例は、ページの上部にフロートを配置します。

<fo:float axf:float="page top">
  <fo:block>This is a page float.</fo:block>
</fo:float>

次の例は、ページの下部にフロートを配置します。

<fo:float axf:float="page bottom">
  <fo:block>This is a page float.</fo:block>
</fo:float>

段抜きフロートの例

次の例は、段組エリアの右上角に3段抜きでフロートを配置します。

<fo:float axf:float="multicol top right">
  <fo:block-container width="5gr">
    <fo:block>This is a multicol float.</fo:block>
  </fo:block-container>
</fo:float>

次の例は、段組エリアの下部のノド側にフロートを配置します。

<fo:float axf:float="multicol bottom inside">
  <fo:block-container width="1gr">
    <fo:block>This is a multicol float.</fo:block>
  </fo:block-container>
</fo:float>

カラムフロートの例

次の例は、段の上部にフロートを配置します。

<fo:float axf:float="column top">
  <fo:block>This is a column float.</fo:block>
</fo:float>

次の例は、段の下部にフロートを配置します。

<fo:float axf:float="column bottom">
  <fo:block>This is a column float.</fo:block>
</fo:float>

フロートの移動の例

フロートは、そのアンカーエリアの場所に配置されるため、画像などが含まれる場合、ページ余白が少ないと次のページに送られ、その結果ページ下部に大きな余白が残ることになります。これを避けるため、axf:float-moveプロパティを利用して、フロートを自動的にアンカーエリアから移動させて余白を解消することができます。ただし、移動する余地がない場合は、余白が残ることになるので注意してください。

次の例は、画像をテキストの回り込みなしでページの左右中央に配置します。このとき、ページ余白が少ないと、アンカーをその位置に残したまま、画像だけ次のページに移動します。このとき、axf:float-xの指定が必要なことに注意してください。

<fo:float axf:float-x="center"
          axf:float-y="none"
          axf:float-move="auto-next"
          axf:float-wrap="skip"
          axf:float-reference="page">
  <fo:block>
    <fo:external-graphic src="any-image"/>
  </fo:block>
</fo:float>

上の例で、axf:float-move="auto-move" を指定すると、余白の状況によっては、アンカー(とそのまわりのテキスト)が次のページに移動するようになります。結果として、画像が前のページに移動したように見えます。

フロートの移動では、章や節をまたいで移動して欲しくないことがあります。フロートは、他のフロートを越えて移動しないので、章や節の切れ目に、ダミーのフロートを入れることで、それを実現することができます。次のようにすることで、空のフロートが、他のフロートが章をまたぐのを防ぎます。

<fo:float axf:float-x="end"
          axf:float-y="none"
          axf:float-move="keep"/>
<fo:block page-break-before="always"> 新しい章 ...

新しい章にあるフロートが前に移動するのを許したいことがあります。上の例では、空のフロートに keep-with-next="always" が設定されるので、新しい章の前にフロートが移動してくる余地がありません。axf:float-move="keep-float" を指定することでそれがなくなるので、この空のフロートは前のページの最後に配置されることになり、次のブロックの間に後からフロートが移動できるようになります。

制限事項

Antenna House Formatter V7.4 のフロート拡張機能には、以下のような制限事項があります。

  • axf:float-ynone のフロートは改ページ(改段)時に分割されることがあります。分割を回避する場合は keep-together="always" を指定してください。

  • 段組で axf:float-ynoneaxf: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-cellinline-block となる要素中でのフロート拡張機能は、正しく配置されないことがあります。

  • axf:float-ynone でないフロートは <fo:region-body> または <axf:spread-region> に置くことができます。それ以外の区画にそのようなフロートを置いても、フロートはしません。

  • (-ah-)float の値が sidenote/footnote である要素には、axf:float-move の指定は無効です。