武藤さま
Vivliostyle川久保です。
わかりやすいドキュメントがなく、ご不便おかけしております。
> On 2016/08/29, at 0:34, Kenshi Muto <
kensh...@gmail.com> wrote:
>
> Adaptive Layoutを使ってのページ配置実験をしているのですが、
> 遷移のところがどうも理解しきれておらず、自力で問題を解決で
> きないため、質問させてください。
>
> 添付のものはサンプルのCSSをもとに作ってみた小さなものです。
> body/
> section/
> h1, span
> h2, span, p
> section/h1, span
> h2, span, p
>
> というドキュメント構造で、vivliostyle.jsでのプレビューで
> 本文やページ・柱はうまくできています。
>
> しかし、章扉を作るためにh1を-epubx-flow-intoでchapter-title-flowの
> フローに遷移させているのですが、ここでなぜかh1が最初に2つとも取り出さ
> れてしまいます。
>
> どこかでCSSかHTMLの誤りがあるのだと思いますが、ご指摘いただけ
> ないでしょうか。
Adaptive Layoutでは、ページマスター選択の際にある程度ソース文書を先読みし、
そこで見つかった要素をレイアウトに使用します。
デフォルトでは、デフォルトのフォントサイズでだいたい1ページに収まる程度の先読みをします。
今回のケースでは、1つ目のsectionが短いため、先読みが2つ目のh1まで到達してしまい、
1ページ目に2つ目のh1まで取り出されています。
CSSシークレットの制作時に同じ問題に突き当たったため、Vivliostyleの実装には追加仕様を加えています。
この追加仕様を使うと、今回の場合は問題を回避することができます。
具体的には、body > sectionに’page-break-before: always’を指定すると問題は解決します。
以下、追加仕様についてご説明します。その追加仕様とは、
「あるコンテンツ(Aと呼ぶことにします)の親フローに強制改ページがあり、
その強制改ページがソース文書内でAより前にある場合、
Aはその強制改ページより前にレイアウトされることはない」
というものです。
まず、「親フロー」ですが、実装の内部では、各フロー間に親子関係を設定しています。
あるフローの親フローは、「そのフローに属する最初の要素の親要素が属するフロー」として定義されます。
今回の例ですと、chapter-title-flowの最初の要素は1つ目のbody > section > h1なので、
その親要素のbody > sectionのフローであるchapter-flowが親フローとなります。
今回は、sectionの中に入っているh1が、1つ目のsectionを飛び越えて1ページ目に来ているわけですが、
sectionの区切りで強制改ページを入れると、2つ目のsection内のh1は、
1つ目と2つ目のsection間の強制改ページを超えられなくなります。
したがって、1つ目のsectionの内容がすべてレイアウトされた後に、
2つ目のsection内のh1がレイアウトされることになります。
なお、この追加仕様はまだドキュメント化できていません(TODOには入っているのですが…申し訳ありません)。
ちなみに、実はオリジナルのAdaptive Layoutの機能を使った回避策もあります。
ソース文書の先読み量を、-epubx-utilizationプロパティを使って小さくするという方法です。
3.4.15. Lookup range: the ‘-epubx-utilization’ property
http://www.idpf.org/epub/pgt/#s3.4.15
このプロパティの初期値は1ですが、これを0.1や0.05など小さな値に変更すると、
先読みの量を小さくでき、先の方のコンテンツを手前に持ってくることを防ぐことができます。
ただし、先読みの量の変更によって、ページマスター選択などに副作用が出ることもあります。
> (Adaptive Layoutでちょっと間違えるとvivliostyle.jsが頻繁に固まって
> しまうのがなかなか厳しいです……)
固まるというのは、ブラウザがフリーズしてしまうということでしょうか。
その場合は何らかのバグだと思われますので、ご報告いただければ調査いたします。
そうではなく、ページ数が多くて、レイアウト完了して操作を受け付けるまでの時間が長いということでしたら、
現在、対策を実装中です。もうしばらくお待ちいただければと思います。
--
Toru Kawakubo (川久保 亮)
Vivliostyle Inc.
http://vivliostyle.com