1 EPUBリーダの数式サポート―iBooks3.0のMathML表示がかなり進化

10月の主要EPUBリーダの新版登場でひとつ注目したいのが数式のサポート強化です。Readiumは3月にMathJaxを使ったMathML表示をサポートしました[1](Readium 0.19 update adds MathML support)。

これに対して、iBooksはMathMLの直接レンダリングを強化したようです。表1･1 メジャーなEPUBリーダのMathJaxサポートは、主要なEPUBリーダのMathMLレンダリングサポート状況です。

項目 | iBooks3.0 (iOS6) | Adobe Digita Editions 2.0 | Readium 0.5.3 | Kindle Previewer 2.7 (Kindle Paperwhite モード）
MS明朝
MathMLサポート | MathML直接描画 | 未サポート | MathJaxによる | 未サポート

表1･1 メジャーなEPUBリーダのMathJaxサポート

1–1 iBooks3.0による表示例

(1) 図1･1 サンプル数式のiBooks3.0による表示１の一番上の数式では最初の()が上下に伸びすぎています。二つ目の数式では「・」が親文字と離れすぎです。この2点を除くと大体使えると思います。

図1･1 サンプル数式のiBooks3.0による表示１

(2) 図1･2 サンプル数式のiBooks3.0による表示２についても（）が上下に伸びすぎている点を除くと使えると思います。

図1･2 サンプル数式のiBooks3.0による表示２

1–2 ReadiumによるMathMLの表示

ReadiumはMathJaxで数式を表示しています。Readiumによる表示を次に示します。こちらの方はすべての数式が綺麗に表示されています。

図1･3 サンプル数式のReadiumによる表示１

図1･4 サンプル数式のReadiumによる表示２

1–3 総合的にみて

EPUB3.0になって数式MathMLの表示がEPUB3.0リーダの標準機能になりました。まだ、EPUB3.0リーダによる数式表示機能の実装は全体として遅れています。しかし、iBooksが数式のMathML表示をサポートしつつあることが分かります。現状ではまだすべての数式をサポートできていないようですが、このペースですとあと半年もあればMathJax並みになりそうで、かなり期待が持てます。

2 EPUBのベストプラクティス linear 属性の設定方法

2–1 EPUB2

EPUB2に、先頭ページに表紙（カバー）画像を登録して、spine要素のitemrefにlinear="no"を設定せよ、というのベストプラクティスがありました[1](Best practices in ePub cover images)。

次のような内容です。

(1) 表紙のHTMLファイルを作り、manifestに次のように設定：

<item id="cover"  href="cover.xhtml" media-type="application/xhtml+xml"/>

(2) spineに次のように設定：

<itemref idref="cover" linear="no"/>

これはEPUB3でも採用できるでしょうか？

１年半程前（2011年春）、表紙をどうしようかと思案して、EPUBリーダの挙動を調べました。

しかし、iBooks2ではlinear="no"を指定したページを表示するが、Adobe Digital Editionsの旧バージョン（確か1.5）では、linear="no"を指定したページを表示しない、という挙動の相違があったため設定を見送っていました。

2–2 EPUB3

最近、EPUBリーダが新しくなりましたので、何か変わったかと思い、もう一度調べてみました。次のようなコードのEPUBで試してみました。

manifest：

<item href="Text/opening.xhtml" id="idopening" media-type="application/xhtml+xml" />

spine：

<itemref idref="idopening" linear="no" />

さらに linear="yes" とした版も用意しました。2種類のEPUB3を作成して、linear="no"とlinear="yes"でEPUBリーダの表示を比較した表を作成しました。やはり、EPUBリーダによって挙動がまちまちです。

| linear="no" | linear="yes"
Readium 0.5 | 表示しない | 表示する
Adobe Digital Editions 2.0 | 表示する | 表示する
iBooks 3.0 | 表示しない | 表示する
Kobo 2.1.4 | 表示する | 表示する
Kindle 2.71 | 表示しない | 表示する

表2･1 linear="no"とlinear="yes"でEPUBリーダの表示を比較

先日、電流協のEPUB研究会で、このことを報告しましたところ、参加者の方から次のようなコメントをいただきました。

・linear="no" は本文のページとして表示しない内容に対して使うもの。注釈のようなもの。順番にめくっていっても表示されない。ページとして扱わないものに設定するのだろう。

ところでEPUB3仕様におけるitemref要素のlinear属性についての説明は次の2箇所にしかありません。

3.4.13 itemref要素より抜粋

linear属性は参照された項目が主要素なのか付随要素なのかを示す。これによりRSは本体コンテンツの表示を補足コンテンツと区別するために使っても良い。後者は、例えばポップアップ・ウインドウにしたり、音声レンダリングで省略したりされるかもしれない。

3.14.12 spine要素より抜粋

RSは、spine中の先頭にある主項目（linear="yes")を出版物の主たる閲読順序の始まりとする。そして、spineの中の主項目を順番に可視化する。

説明もサンプルも少ないので、これでは解釈統一のしようがないように思えますね。困ったものです。

ある方から、EPUB2.0では、guide機能があって、guideに登録することでlinear="no"を指定したページにもジャンプできたが、EPUB3.0でguideが廃止されてしまったためlinear="no"を指定したページを表示する方法がリンクぐらいしかなくなっているという指摘がありました。

3 EPUBのベストプラクティス EPUB2用の目次NCXの出力はまだ必要か？

3–1 EPUB2

EPUB2では、目次にNCXという形式のファイルを使っていました。NCXはDAISY Consortiumによって標準化されたANSI/NISO Z39.86-2005, Specifications for the Digital Talking Bookという仕様の一部です[1](Open Packaging Format (OPF) 2.0.1 v1.0.1 Recommended Specification September 4, 2010)。

3–2 EPUB3

EPUB3では、NAV形式のXHTMLファイルを目次に使うことになっており、NCX形式の目次をEPUB2のリーダのために含めておいても良いことになっています[2](EPUB Content Documents 3.0 Recommended Specification 11 October 2011 EPUB Navigation Documents)。

したがって、EPUB3リーダ専用のEPUBであればNCXを含む必要はありません。そこで、最近アップデートされたEPUB3リーダを対象として、NCXとNAV形式の両方の目次をもつEPUB3とNAV形式の目次のみ（NCXを含んでいない）もつEPUB3を作って、目次が表示されるかどうかについて比較してみました。

結果は表3･1 NCXとNAVの両方を含むEPUBと、NAVしか含まないEPUBの目次はどうなるか？に示すとおりです。

(1) iBooks3.0、Kobo、ReadiumはNAVの目次を表示します。NCXの目次は必要としません。

(2) Adobe Digital Editions 2.0は、NCXの目次がないと目次が表示されないようです。

(3) なお、KindleのKF8形式については、「Kindle Publishing Guide」ではNCXが必須とされており、HTML形式の目次も必要とされています。実際の結果は後述の項目をご覧ください。

ということで、まだNCXを全廃というわけにはいかないようです。

| NCXとNAV | NAVのみ
Readium 0.5 | 表示する | 表示する
Adobe Digital Editions 2.0 | 表示する | 表示しない
iBooks 3.0 | 表示する | 表示する
Kobo 2.1.4 | 表示する | 表示する
Kindle 2.71 | NCXは必須と説明されている | XHTMLの目次が必要とされている

表3･1 NCXとNAVの両方を含むEPUBと、NAVしか含まないEPUBの目次はどうなるか？

表示する：目次が表示されるという意味。

表示しない：目次が表示されないという意味。

3–3 Kindle Paperwhiteでの確認結果

(1) NAVのみでNCXが存在しないEPUB3をKindleGen(2.7)でmobiに変換すると、「移動」メニュー「表紙」と「最後のページ」の間にグレー（無効）の「目次」が表示されます。NAVの内容は無視されているようです。

(2) NAVとNCXと両方が存在するEPUB3をKindleGen(2.7)でmobiに変換すると、「移動」メニューの「表紙」と「最後のページ」の間に目次項目が表示されます。

(3) (1)、(2)からKindle Paperwhiteは、NCXの内容を「移動」の目次項目として表示していることがわかります。

(4) HTMLの目次[3](CAS-UBのKindle生成メニューでは、EPUB3のNAV.xhtmlにスタイルシートを設定して、HTML形式の目次として作成し、先頭ページに登録します。)は、「表紙」の次の単独ページに表示されます。さらにHTMLの目次ページをガイドに登録すると「移動」の目次としても使われます。（ガイドの内容が「移動」の目次に表示されるのであれば、HTML形式の目次を用意した場合、NCXの目次は不要なのかもしれません。）

図3･1 HTML目次

図3･2 移動メニュー （頁の上部にポップアップ）

図3･3 「移動」メニューの内容

4 EPUBのベストプラクティス カバー画像の登録方法

多くのEPUBリーダーでは登録されている書籍のアイコンとしてカバー画像を表示します。このカバー画像の登録方法を調べてみました。

4–1 EPUB2

EPUB2ではカバー画像であることをEPUBリーダに伝えるために、metadateのmeta要素に次のように指定します。

【EPUB2の例】

metadata

<meta **name="cover"** content="cover-id" />

なお、manifestには、次のようにカバー画像に使用する画像ファイルが登録されていることが前提です。（metaのcontentの値とitemのidの値は一致していること。文字列は可変。）

manifest

<item id="cover-id" href="cover.jpeg" media-type="image/jpeg" />

4–2 EPUB3

EPUB3では、上の形式のメタデータは廃止されました。ただし、EPUB2のリーダ用との互換性のためにこれを残しておくことができます。そして、EPUB3リーダはmetaの方を無視しなければなりません[1](3.4.8 The meta Element (OPF2) [OBSOLETE)。

EPUB3の仕様では、manifestのitem要素のproperties属性に「cover-image」という値を指定することでカバー画像であることを示します。EPUB3の方がシンプルになったわけです。

EPUB3では、例えば、cover.jpgというファイルがカバー画像であることを示すには次のように指定します。（idの値は可変）。

【EPUB3の例】

<item** properties="cover-image"** id="ci" href="cover.jpg" media-type="image/jpeg" />

koboやiBooks3などの新しいEPUB3のリーダは、manifestのitem要素の属性を見ています。

4–3 Kindle

Kindleは、カバー画像をmetaとitem要素の両方に指定することになっています。

カバー画像を、仮に、id="cover-id"、ファイル名="cover_image.jpg" とするとき、Kindleは次のように登録します[2](Amazon Kindle Publishing Guidelines)。

【Kindleの例】

metadata

<meta **name="cover"** content="cover-id" />

manifest

<item id="cover-id" href="cover.jpg" media-type="image/jpeg" **properties="cover-image"**/>

4–4 まとめ

ややこしい話ですが、EPUB3にEPUB2形式のmetaがあっても特に害はないようなので、両方登録しておくEPUB2/EPUB3/Kindle KF8で共通になりますので都合が良いでしょう。

なお、EPUBの場合、印刷製本した書籍と異なり、①EPUBリーダの書架または書籍一覧に表示されるアイコンとしてのカバー画像、②リーダで表示するときの先頭ページ、③iBooksのように見開き表示したときに初めて表示される画像ページなどの役割が明確になっていません。このあたりについては別途まとめてみたいと考えています。

注釈一覧

1 EPUBリーダの数式サポート―iBooks3.0のMathML表示がかなり進化

[1] Readium 0.19 update adds MathML support

2 EPUBのベストプラクティス linear 属性の設定方法

[1] Best practices in ePub cover images

3 EPUBのベストプラクティス EPUB2用の目次NCXの出力はまだ必要か？

[1] Open Packaging Format (OPF) 2.0.1 v1.0.1 Recommended Specification September 4, 2010

[2] EPUB Content Documents 3.0 Recommended Specification 11 October 2011 EPUB Navigation Documents

[3] CAS-UBのKindle生成メニューでは、EPUB3のNAV.xhtmlにスタイルシートを設定して、HTML形式の目次として作成し、先頭ページに登録します。

4 EPUBのベストプラクティス カバー画像の登録方法

[1] 3.4.8 The meta Element (OPF2) [OBSOLETE

[2] Amazon Kindle Publishing Guidelines

図表一覧

図一覧

1 EPUBリーダの数式サポート―iBooks3.0のMathML表示がかなり進化

図1･1 サンプル数式のiBooks3.0による表示１

図1･2 サンプル数式のiBooks3.0による表示２

図1･3 サンプル数式のReadiumによる表示１

図1･4 サンプル数式のReadiumによる表示２

3 EPUBのベストプラクティス EPUB2用の目次NCXの出力はまだ必要か？

図3･1 HTML目次

図3･2 移動メニュー （頁の上部にポップアップ）

図3･3 「移動」メニューの内容

表一覧

1 EPUBリーダの数式サポート―iBooks3.0のMathML表示がかなり進化

表1･1 メジャーなEPUBリーダのMathJaxサポート

2 EPUBのベストプラクティス linear 属性の設定方法

表2･1 linear="no"とlinear="yes"でEPUBリーダの表示を比較

3 EPUBのベストプラクティス EPUB2用の目次NCXの出力はまだ必要か？

表3･1 NCXとNAVの両方を含むEPUBと、NAVしか含まないEPUBの目次はどうなるか？