vivliostyle / vivliostyle-cli

⚒ Supercharge command-line publication workflow.
https://docs.vivliostyle.org/#/vivliostyle-cli
GNU Affero General Public License v3.0
166 stars 25 forks source link

EPUBで使えるCSSについて #426

Open MurakamiShinyu opened 1 year ago

MurakamiShinyu commented 1 year ago

Vivliostyle CLIでEPUB出力が可能となると、EPUBで使えるCSSについての考慮が必要になる。VivliostyleがサポートするCSS組版用のスタイルシートをEPUBに入れることは可能だが、そのEPUBを一般のEPUBリーダーで閲覧するとVivliostyleのCSS組版のページレイアウトは再現されない。また、ブラウザで利用できる標準的なCSSの機能がEPUBリーダーで利用できるとは限らない。

EPUBリーダーをサポートするCSS機能によって分けると次のようになる:

  1. Vivliostyle
  2. Apple Books、Thorium Readerなど、最新ブラウザベースのEPUBリーダー
  3. Kindleなど、CSSの機能が限定されているEPUBリーダー

VivliostyleをEPUBリーダーとして使うならば、VivliostyleがサポートするCSS組版の機能を活かすことができる。しかし、Vivliostyleを使わないと正常に閲覧することができないEPUBというのでは、EPUBにする意味があまりないだろう。

Apple BooksやThorium Readerなど、最新ブラウザベースのEPUBリーダーでは、最新の標準のCSS機能が利用できる。そのようなEPUBリーダーでのみ最適に表示できるということを明記してEPUBを頒布するということはありうるだろう。しかし、EPUBを頒布して多くの読者を得ることを目的とするならば、EPUBリーダーを限定するというのはあまりよくないだろう。

作成したEPUB電子書籍をAmazon Kindleストアで出版する場合、その電子書籍はKindle端末あるいはKindleアプリで閲覧されることになる。残念なことに、KindleでサポートされているCSSの機能はとても限定されており、CSS変数、CSS Flexbox、CSS Gridなど現在ブラウザで標準的に利用できるCSS機能の多くが利用できないことに注意が必要である。

Vivliostyle CLIでのプレビューに、CSSの機能の制限があるEPUBリーダーをエミュレートする機能があればよいかもしれない。

spring-raining commented 1 year ago

EPUB出力機能の実装時には意図的にスコープから外していましたが、たしかにEPUBリーダーを考慮したCSSを用意するという要望は考えられます。ただ、各リーダーのCSSの互換性に関する情報を収集してメンテナンスする作業は相当実装コストがかかることが予想され、今の開発規模では難しいように思います。

この問題に対処するため、いくつかアイディアは考えています。もしほかに良い方法がありましたら、こちらのissueにコメントをお願いします。

butameron commented 1 year ago

ご参考としてですが、京姫鉄道合同会社の出版物では以下のようにしています。

京姫鉄道合同会社の出版物の生成は、Vivliostyle CLIが登場する前からの自前のスクリプトを使用しています。 参考になるかもしれませんので、以下にサンプルのリポジトリを公開しました。 (Vivliostyle CLIとは方向性が結構違っていますので、弊社ではVivliostyle CLIに移行できずどうしようかなと思っているぐらいなのですが、参考になれば……)

https://github.com/kyoki-railway/novel-akane-2-sample

自分で使えればいいやのスクリプトなので、汚いコードで申し訳ありません。 数カ月前からリファクタリングした上で公開するすると言っていたのですが、時間を確保できませんでした。

ご参考になれば幸いです。

spring-raining commented 1 year ago

EPUB Fixed layoutの出力の話題についてはこちらに分割しました #432

butameron commented 1 year ago

VivliostyleをEPUBリーダーとして使うならば、VivliostyleがサポートするCSS組版の機能を活かすことができる。しかし、 Vivliostyleを使わないと正常に閲覧することができないEPUBというのでは、EPUBにする意味があまりないだろう。

オフトピックですが、これについては、個人的には、「中間データ形式としてのEPUB」であれば、多少意味があるのではないかと思っています。この利点としては、ワークフローとして以下のようにzip未圧縮のEPUB形式を中間点にできるため、恐らく処理をいくつか共通化できるところにあります。

先ほどのスクリプトはその発想で作成しています。