フロート拡張

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

XSL-FOで使用の場合、フロート拡張プロパティ(axf:float-*)は fo:float オブジェクトに指定します。

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

注意: XSL仕様では、float="left"float="start" と、float="right"float="end" と、解釈されることになっています。しかし、その仕様では、float を writing-mode によらずに物理的な left/right に位置させることができません。AH Formatter V6.2 では、left/right は、物理的な方向を示すように解釈されます。clear も同様です。

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

フロート拡張プロパティ

axf:float / CSS (-ah-)float

フロート関連拡張プロパティをまとめて指定するショートハンドプロパティです。 [CSS3-GCPM] Page floats

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

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

<float-y> = none | before | after | top | bottom | left | right | center | inside | outside

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

<float-wrap> = wrap | skip

フロートへのテキスト回り込みの有無を指定します。

<float-reference> = auto | normal | page | multicol | column

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

<float-move> = next | auto-next | auto-move | keep | keep-float

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

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

axf:float-x / CSS -ah-float-x

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

Value: none | start | end | left | right | top | bottom | center | inside | 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

小口側(右ページでは右側、左ページでは左側)にフロート配置します。横書き専用です。縦書きで指定することはできません。

axf:float-y / CSS -ah-float-y

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

Value: none | before | after | top | bottom | left | right | center | inside | outside
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

小口側(右ページでは右側、左ページでは左側)にフロート配置します。縦書き専用です。横書きで指定することはできません。

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 で float-ynone の場合、フロートのアンカーのあるブロックのインデントがフロート配置に影響します。

normal

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

page

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

multicol

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

column

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

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

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

axf:float-move / CSS -ah-float-move

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

Value: auto | next | auto-next | auto-move | keep | keep-float
Initial: auto
Applies to: fo:float / floated elements
Inherited: no
Percentages: N/A

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

auto

float-ynone なら keep と同じ、それ以外なら auto-next と同じです。

next

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

auto-next

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

auto-move

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

keep

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

keep-float

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

float-xfloat-y の値が両方とも none であればフロート配置はされないので 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

float-xnone 以外なら wrap とし、none なら skip とします。

wrap

テキストの回り込みをします。ただし、段の中でフロートの両側に回り込めるスペースがあるような場合(float-xcenter、あるいは 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

float-y の値が none 以外の場合、組版対象領域内でフロートの前または後にテキストを配置するスペースがあるとき、その高さ(縦書きでは幅)がこのプロパティで指定される高さ(縦書きでは幅)よりも小さければ、そこにはテキストを配置しません。

float-y の値が nonefloat-move の値が auto-next の場合、組版対象領域内でフロートの後にテキストを配置するスペースが残っているとき、その高さ(縦書きでは幅)がこのプロパティで指定される高さ(縦書きでは幅)よりも小さければ、その高さ(縦書きでは幅)がゼロになるようにフロートの位置を移動します。フロートの後にあったテキストはフロートの前に移動することになります。

float-y の値が nonefloat-move の値が auto-move の場合、auto-next の場合と同様だが、組版対象領域内で、フロートの後だけでなくフロートの前のテキスト配置スペースの高さ(縦書きでは幅)も、このプロパティで指定される高さ(縦書きでは幅)よりも小さければ、その高さ(縦書きでは幅)がゼロになるようにフロートの位置を移動します。フロートの前にあったテキストはフロートの後に移動することになります。

初期値 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

フロートへのテキスト回り込みのための幅(縦書きでは高さ)が 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

フロートの前後にテキストを配置する高さ(縦書きでは幅)が 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

値を2つ指定した場合、最初の値が 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

値を2つ指定した場合、最初の値が 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 は、float-margin-x の値と同じです。値を2つ指定した場合、最初の値が start 側、次の値が end 側の値となります。

float-float-margin-x の値が 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 は、float-margin-y の値と同じです。値を2つ指定した場合、最初の値が before 側、次の値が after 側の値となります。

float-float-margin-y の値が 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

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

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

注意: gr は、axf:float="multicol" である float に対してのみ定義されます。その他の float および float 以外に適用することはできません。適用した場合の動作は不定となります。

CSSによる脚注・傍注

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

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 を使って適切な配置を指定してください。display: inline には対応していません。

合印の体裁は ::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 で行います。 要領は脚注と同じです。

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 の指定は、デフォルトスタイルシートにはありません。

拡張フロートの例

ページフロートの例

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

<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" を指定することでそれがなくなるので、この空のフロートは前のページの最後に配置されることになり、次のブロックの間に後からフロートが移動できるようになります。

制限事項

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