keep-together.within-*="always" による fo:table-row のオーバーフローを回避
表の fo:table-row などページで分割させず、ページに収まらなければ fo:table-row を改ページさせる指定として keep-together.within-page="always" があります。しかし、改ページされた fo:table-row が移動先のページに収まらない長さの場合、ページの下部からオーバーフローする現象が発生します。これは always がページで分割させるのを許さない値であるためです。このサンプルは keep-together によるオーバフローを回避する方法を紹介します。なお、1 ページ内で keep-together 指定の表示のされ方を確認いただくため keeptogether.within-page を、段組と keep-together.within-column へ置き換えて説明します。各段を 1 ページとしてご覧ください。
まず、2 ページ目の表は keep-together の指定がない例です。No.2 を含む fo:table-row が段で分割します
が、そのまま出力されます。次に 3 ページ目は各 fo:table-row へ keep-together で always を指定した表です。
No.2 を含む fo:table-row が段で分割せず改段しますが、fo:table-row が移動先の 2 段目に収まらないためページの下部からオーバーフローします。

Antenna House, Inc.

-1-keep-together 指定なし
No.

Details

No.1

Item a Details sample
Lorem ipsum dolor sit
amet, consectetur adipisc‐ing elit. Aliquam biben‐
dum tincidunt pharetra.
Aenean ultricies molestieante, sit amet ultricies

No.2No.

Details

No.

Details

ante, sit amet ultriciesInteger eu lobortis neque.

nunc mollis id. Integer

Donec malesuada sed arcu

ut porttitor felis, vel tin‐vitae fringilla.

cidunt velit. Duis volut‐
pat, quam quis aliquet tris‐tique, nulla dui malesuada
velit, et consectetur tellus
ipsum et arcu.

nunc mollis id. Duis volut‐

Sed viverra metus quispat, quam quis aliquet tris‐

nibh pulvinar, at dignissimtique.

nibh adipiscing. Duis sit

Item b Details sample

amet ipsum non elit tinci‐

Lorem ipsum dolor sit

dunt sagittis ac non tortor.

amet, consectetur adipisc‐

Mauris commodo, elit aing elit. Aliquam biben‐

imperdiet interdum, nulla

dum tincidunt pharetra.

velit viverra elit, at sceler‐

Aenean ultricies molestie

isque urna est eget lacus.

No.3

Item b Details sample
Lorem ipsum dolor sit
amet, consectetur adipisc‐ing elit.

Antenna House, Inc.

-2-keep-together、always を指定
keep-together.withincolumn="always" を fo:table-row へ指定しています。

No.
No.2

Details

No.

Item b Details sample

No.3

Details
Item b Details sample

Lorem ipsum dolor sitLorem ipsum dolor sit

amet, consectetur adipisc‐amet, consectetur adipisc‐ing elit.

No.

Details

ing elit. Aliquam biben‐

No.1

Item a Details sample

dum tincidunt pharetra.

Lorem ipsum dolor sit

Aenean ultricies molestie

amet, consectetur adipisc‐ante, sit amet ultricies

ing elit. Aliquam biben‐

nunc mollis id. Integer

dum tincidunt pharetra.

ut porttitor felis, vel tin‐

Aenean ultricies molestie

cidunt velit. Duis volut‐

ante, sit amet ultricies

pat, quam quis aliquet tris‐

nunc mollis id. Duis volut‐tique, nulla dui malesuada

pat, quam quis aliquet tris‐

velit, et consectetur tellus

tique.

ipsum et arcu.
Sed viverra metus quis
nibh pulvinar, at dignissim
nibh adipiscing. Duis sit
amet ipsum non elit tinci‐
dunt sagittis ac non tortor.
Mauris- 3 commodo,elit a
imperdiet interdum, nulla
velit viverra elit, at sceler‐

Antenna House, Inc.

keep-together 、integer（数値指定）について -1- （オーバフロー回避）
keep-together の always 指定では、3 ページ目のように改段後の fo:table-row がオーバーフローする場合があります。これを、XSL-FO の仕様 7.20.3 "keep-together" の integer（数値指定）に基づいた Antenna House
Formatter の実装によりオーバーフローしないようにできます。5 ページでは次のコードのように fo:tablerow へ keep-together.within-column="1" を指定しオーバーフローを回避しています。
<fo:table-body><fo:table-row keep-together.within-column="1"><fo:table-cell>...</fo:table-cell></fo:table-row><fo:table-row keep-together.within-column="1"><fo:table-cell>...</fo:table-cell></fo:table-row>...
</fo:table-body>keep-together へ指定する数値は強度を表し大きいほど強くなり、指定の判定は ページ、段、行のエリア中で行われます。なお、auto や指定なしでは keep-together の指定がないものとして扱われ、always は最強です。
Antenna House Formatter による keep-together 数値指定の実装では、指定のある fo が生成するコンテンツが判定のエリア、例えばページに収まらない場合、keep-together 指定を効かせコンテンツを改ページします。
そして、次の判定のエリアであるページにコンテンツが収まらない場合は、keep-together の指定に関わらずコンテンツをページで分割させます。よって、5 ページのサンプルでは keep-together.within-column="1" が指定されている No.2 を含む fo:table-row は 1 段目に収まらないため keep-together の指定により改段します。
2 段目に送られた fo:table-row はページに収まりませんがページで分割されるためオーバーフローしません。
Antenna House, Inc.

-4-keep-together、数値を指定
keep-together.within-column="1"を fo:table-row へ指定しています。

No.

Details

No.

Details

No.2

Item b Details sample

amet ipsum non elit tinci‐

Lorem ipsum dolor sit

dunt sagittis ac non tortor.

No.

Details

amet, consectetur adipisc‐

Mauris commodo, elit a

No.1

Item a Details sample

ing elit. Aliquam biben‐

imperdiet interdum, nulla

Lorem ipsum dolor sit

dum tincidunt pharetra.

velit viverra elit, at sceler‐amet, consectetur adipisc‐

Aenean ultricies molestie

isque urna est eget lacus.

ing elit. Aliquam biben‐

ante, sit amet ultricies

Integer eu lobortis neque.

dum tincidunt pharetra.

nunc mollis id. Integer

Donec malesuada sed arcu

Aenean ultricies molestie

ut porttitor felis, vel tin‐vitae fringilla.

ante, sit amet ultricies

cidunt velit. Duis volut‐

nunc mollis id. Duis volut‐

pat, quam quis aliquet tris‐

Lorem ipsum dolor sit

pat, quam quis aliquet tris‐tique, nulla dui malesuada

amet, consectetur adipisc‐tique.

velit, et consectetur tellus

ing elit.

No.3

Item b Details sample

ipsum et arcu.
Sed viverra metus quis
nibh pulvinar, at dignissimnibh adipiscing. Duis sit
Antenna House, Inc.

-5-keep-together 、integer（数値指定）について -2補足として keep-together の数値指定が次のコードのように複数指定されている場合を説明いたします。
<fo:table-body keep-together.within-column="2"><fo:table-row keep-together.within-column="1"><fo:table-cell>...</fo:table-cell></fo:table-row><fo:table-row keep-together.within-column="2"><fo:table-cell>...</fo:table-cell></fo:table-row><fo:table-row keep-together.within-column="3"><fo:table-cell>...</fo:table-cell></fo:table-row></fo:table-body>
fo に keep-together、数値 "N" が指定されており、さらにその子供の fo に keep-together、数値 "M" が指定されているケースにおいて、ふたつ目（以後）の子供が、その前の子供と同じ判定エリアであるページに入りきらないケースを想定します。このとき、数値指定による結果は次のようになります。
・ N≧M：数値 N が有効、ふたつ目の子供の fo は前の fo と同じページから始まりページで分割します。
・ N<M：数値 N が無効、ふたつ目の子供の fo の前で改ページします。
7 ページ目のサンプルは fo:table-body に keep-together.within-column="2" を指定、No.1、2、3 を含む fo:tablerow へ順に keep-together.within-column="1"、"2"、"3" を指定しています。1 段目では、ふたつ目の No.2 を含む
fo:table-row が 1 段目に収まりませんが、fo:table-body 数値"2"、fo:table-row 数値"1"、"2" で、fo:table-body≧
fo:table-row となります。fo:table-body の keep-together が有効、No.1、2 の fo:table-row は同じ段から始まり、No.2 の fo:table-row は段で分割します。3 段目、No.3 を含む fo:table-row は fo:table-body 数値"2"、fo:table-row
数値"3" となり、fo:table-body<fo:table-row です。fo:table-body の keep-together は無効、No.3 の fo:table-row の前で改段されます。改段後のエリアに収まらないコンテンツは段で分割され、オーバーフローしません。
Antenna House, Inc.

-6-keep-together、数値を指定

No.

Details

No.

Details

keep-together.within-column=" 数ing elit. Aliquam biben‐

imperdiet interdum, nulla

値" を fo:table-body、fo:table-row へ

dum tincidunt pharetra.

velit viverra elit, at sceler‐

指定しています。

Aenean ultricies molestie

isque urna est eget lacus.

ante, sit amet ultricies

Integer eu lobortis neque.

nunc mollis id. Integer

Donec malesuada sed arcu

ut porttitor felis, vel tin‐vitae fringilla.

No.

Details

No.1

Item a Details sample
Lorem ipsum dolor sit
amet, consectetur adipisc‐ing elit. Aliquam biben‐
dum tincidunt pharetra.
Aenean ultricies molestieante, sit amet ultricies

No.2

cidunt velit. Duis volut‐
pat, quam quis aliquet tris‐tique, nulla dui malesuada
velit, et consectetur tellus
ipsum et arcu.

nunc mollis id. Duis volut‐

Sed viverra metus quispat, quam quis aliquet tris‐

nibh pulvinar, at dignissimtique.

nibh adipiscing. Duis sit

Item b Details sample

amet ipsum non elit tinci‐

Lorem ipsum dolor sit

dunt sagittis ac non tortor.

amet, consectetur adipisc‐

Mauris commodo, elit a

Antenna House, Inc.

-7-No.

Details

No.3

Item b Details sample

lor sit amet, consectetur

Lorem ipsum dolor sit

adipiscing elit. Lorem ip‐

amet, consectetur adipisc‐sum dolor sit amet, con‐ing elit. Lorem ipsum do‐secteturlor sit amet, consectetur

Lorem ipsum dolor sit

adipiscing elit. Lorem ip‐

amet, consectetur adipisc‐sum dolor sit amet, con‐ing elit. Lorem ipsum do‐secteturelit.

lor sit amet, consectetur

Lorem ipsum dolor sit

adipiscing elit. Lorem ip‐

amet, consectetur adipisc‐sum dolor sit amet, con‐ing elit. Lorem ipsum do‐sectetur adipiscing elit.

adipiscing

No.

Details

adipiscingelit.

lor sit amet, consectetur
adipiscing elit. Lorem ip‐
sum dolor sit amet, con‐sectetur

adipiscingelit.

Lorem ipsum dolor sit
amet, consectetur adipisc‐ing elit. Lorem ipsum do‐
Antenna House, Inc.

-8-keep-together、integer（数値指定）を fo:list-item へ適用した例
keep-together へ数値を指定してオーバーフローを回避させる方法は、fo:table-row 以外に例えば fo:list-itemの場合でも有効です。fo:list-item では、次のようなコード指定となります。
<fo:list-block><fo:list-item keep-together.within-page="1"><fo:list-item-label>...</fo:list-item-label><fo:list-item-body>...</fo:list-item-body></fo:list-item><fo:list-item keep-together.within-page="1"><fo:list-item-label>...</fo:list-item-label><fo:list-item-body>...</fo:list-item-body></fo:list-item></fo:list-block>10 ページ目は keep-together 指定なし、11 ページ目は keep-together と always 指定、そして、12 ページ目は keep-together へ数値指定した場合のサンプルです。

Antenna House, Inc.

-9-keep-together 指定なし
label-1

list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1

label-2

list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2

list-item-sample-2
list-item-sample-2

list-item-sample-2
label-3list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2

Antenna House, Inc.

- 10 -

keep-together、always を指定 label-2

list-item-sample-2

label-3list-item-sample-3

list-item-sample-2

list-item-sample-3

column="always" を fo:list-item へ指list-item-sample-2

list-item-sample-3

定しています。

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

keep-together.within-label-1

list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1

list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2- 11 list-item-sample-2
list-item-sample-2
list-item-sample-2

Antenna House, Inc.

list-item-sample-2

list-item-sample-2

keep-together.within-column="1"

list-item-sample-2

list-item-sample-2

を fo:list-item へ指定しています。

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

list-item-sample-2

keep-together、数値を指定

label-1

list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1
list-item-sample-1

label-2

list-item-sample-2

label-3list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2

list-item-sample-3

list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2
list-item-sample-2

Antenna House, Inc.

- 12 -