CAS-UB上級テクニック: Kindleストアで販売する電子書籍の目次や移動メニューの作成方法。

今日は、6月12日の「Kindleストアで販売する電子書籍の目次や移動メニューの作成方法。特に、ランドマークの扱いの後退について。」の続きとして、CAS-UBでKindleストア向けの本を作る上級テクニックを説明します。[1]

CAS-UBにはKindle版を直接生成する機能がありますが、こちらは目次の作り方が固定です。それに対して、今日説明する上級テクニックを使えば、目次のパターンを使い分けられます。

1.作業の流れ

上級者は、CAS-UBの機能でEPUB3を生成し、KindleGenでEPUB3からmobiに変換する方法を使うと良いでしょう。そうすると、CAS-UBの目次設定をフル活用できますし、必要であればEPUBの目次を自分で編集できます(次図)。


Kindle

なお、KindleGenを使う代わりにKindlePreviewerでもEPUB3からmobiへの変換ができます。今回はKindleGenで説明します。

2.準備:KindleGenの用意

最初にKindleGenについて簡単に紹介します。KindleGenは、アマゾンのサイトから自由にダウンロードできます。Windows版、Mac版、Linux版がありますので、ご自分のPC環境にあった版をダウンロードします。現時点の最新版はバージョン2.9です。

KindleGen

以下、Windows版の例です。KindleGenはZIP形式で配布されていますのでダウンロードしたら自分のPCで任意のフォルダーに解凍します。フォルダーの内容は次のようになります。kindlegen.exeが、プログラム本体です。

KindleGen

KindleGenで、EPUB3をmobi形式に変換するのは次のように行ないます。
①WindowsのDOS窓を開く。
②カレントフォルダーをkindlegen.exeがあるフォルダーに変更します。
次の図は、仮に、c:ドライブのtempの下のKindleGenというフォルダーに解凍しています。
③コマンド入力状態になりますので、kindlegen(プログラム名)を入力し、その後ろに変換元EPUB3ファイルをドラッグ&ドロップ、-oの後ろに出力ファイル名を入力します。
④この状態でEnterキーを押すと処理を開始します。
④正常終了というメッセージが出て、EPUB3と同じフォルダーにmobiファイルが作られます。

KindlegenStart

これでEPUB3からmobiへの変換は準備完了です。

次にEPUB3の目次生成の設定とKindleアプリでの目次の表示の関係について説明します。

3.CAS-UBのEPUB3目次関係設定とKindleの目次の対応関係

前回の説明をもう一度整理します。CAS-UBのEPUB3生成「一般」メニューでは目次関連の項目が3つあります。それぞれKindlePreiewerのコンテンツ・ナビゲーション用メニューに対応します。対応関係を整理すると次の表の左端欄(CAS-UB)、左から2つ目の欄(KindlePreiewer)のようになります。

CAS-UBのEPUB「一般」設定 KindlePreviewer表示 AndoridのKindleアプリ iOSのKindleアプリ KindlePaperWhite
Navの目次 NCX表示 パネル移動メニューの目次 パネル移動メニューの目次 移動パネルの下部
本文の目次 本文の目次 本文の目次 本文の目次 本文の目次
Navのランドマーク 移動 表示されない パネルの一部 移動パネルの一部に割り当て

(注意)KindlePreiewerはV2.9、AndroidのKindleアプリは4.5、iOSのKindleアプリは4.3

実際に提供されているKindleアプリは、かなり頻繁にバージョンアップされています。
例えば、iOSのKindleアプリは、4.1.2(2014年2月5日)まで、パネル移動メニューに目次が表示されませんでした。しかし、4.2(2014年4月23日)でパネル移動メニューに目次が表示されるようになりました。また、Android版Kindleアプリは4.4では目次項目が正しく表示されていませんでしたが、4.5で正しく表示できるようになりました。

このように、パネル移動メニューはかなり頻繁に修正されています。現時点の最新版でAndroid版とiOS版で表示が同じになりました。

4.CAS-UBの設定

toc-0621

(1) 「本文の目次」は、HTML形式で作成した目次です。EPUB3で使えるCSSレイアウトを指定できます。もちろん縦書きも設定できます。従ってCAS-UBの設定では本文目次は常に「生成する」とすると良いでしょう。

Screenshot_2014-06-21-18-51-05
図 本文目次の例

(2) 次に「Navの目次」はEPUB3仕様に準拠するためには必須です。常に生成しますが、その内容としてCAS-UBでは次のどちらかを指定できます。

①論理目次を選ぶと、本文目次と同じように見出しを並べた目次とします。
②ランドマークを選ぶと、書籍の大枠の構造とします。(3番目のランドマークと同じ内容になります。)

具体的な例を示します。最初は本文目次と同じように見出しを並べた例です。本文目次との相違は、縦書きなどのレイアウト指定をしても実際にはリーダーが対応していないので意味がないことです。

Screenshot_2014-06-22-12-32-38
図 本文目次と同じように見出しを並べた目次

本文目次と同じように見出しを並べた場合、Androidアプリ、iOSアプリとも、現在のバージョンでは見出しの階層を折り畳みません。このため目次の項目が多いと見出しが縦に長くなってしまいます。あまり縦長になる場合、生成する階層を最上位だけにするのが良いでしょう。

Screenshot_2014-06-22-12-37-29
図 書籍の大枠の構造(ランドマーク)

このようにNavの内容をランドマークにすると項目が少なくなり、すっきりします。

見出しを並べるか、ランドマークにするかは、体裁の方針や書籍の内容によって決めると良いでしょう。

[1] Kindleストアで販売する電子書籍の目次や移動メニューの作成方法。特に、ランドマークの扱いの後退について。

Kindleストアで販売する電子書籍の目次や移動メニューの作成方法。特に、ランドマークの扱いの後退について。

アマゾンのKindleストアで販売する電子書籍(KF8形式、拡張子はmobi)を作るには、アマゾンが配布しているKindleGenという変換ソフトを使ってEPUBからmobiに変換します。KindleGenはEPUB以外の入力も受付ますが、EPUBが一般的です。

最新のKindleGen2.9を使うならば、変換元とするEPUBの作り方には二種類あります。

(1) EPUB2をベースに、Kindle独自の機能を追加した独自EPUBを準備する。
(2) EPUB3仕様に完全準拠のEPUBを準備する。

KindeGenは2013年2月18日に比較的大きなバージョンアップを行い、KindleGen2.8となりました[1]。KindleGen2.7以前は(1)のEPUBを用意する必要がありましたが、KindleGen2.8以降は(1)と(2)のいづれかのEPUBを入力形式として扱えます。KindleGen2.8から2.9のバージョンアップは小さな機能追加であり、入力EPUB形式については変わっていません。

以下、本ブログのテーマは、(2)の方法でEPUB3を作成するときを対象にします。そして、その目次がKindleGenとKindleのリーダーでどのように扱われるかに関して、最近の状況を整理するものです。

EPUBにおける目次の種類

紙の書籍では目次のレイアウト形式や製本時の配置は確立しています。しかし、EPUBでは目次のレイアウトや配置は確立していません。

現在、EPUBリーダーで使える目次機能には、主に次の種類があります。

(a) EPUBの本文コンテンツと同じ扱いのXHTML形式ファイルで目次を用意し、本文の一部として配置する。
(b) EPUB専用のナビゲーション用の目次という機能を使って目次を作成する。
(c) さらにEPUB3のランドマークという機能で、表紙、目次、まえがき、本文、などのような書籍の構造の骨組みをあらわす。

(b)、(c)はEPUB2の頃からの歴史的な機能をEPUB3でナビゲーション文書仕様として設定し直したものです。[2]

この(a)~(c)の目次機能の実際の使い方については、版元やEPUBリーダーによってばらばらになっています。このことは過去に何回か本ブログで説明しています。たとえば、「EPUBのナビゲーション目次とランドマークの使い方の再検討が必要。」を参照してください。[3]

KindlePreviewerでの表示

アマゾンはmobiファイルの内容をPC上で表示確認するツール「KindlePreviewer」を配布しています。これはKindleGenで作成したmobi形式の電子ファイルを販売前にチェックするためのツールです。KindlePreviewer2.9でmobi形式を表示するとき、(a)~(c)の目次を確認するメニューがあります。次の図は3種類の目次をKindlePreviewerで表示したところです。

KinPre-toc
(a) KindlePreviewerの本文目次画面

KinPre-ncx
(b) KindlePreviewerのナビゲーション目次画面

KinPre-ido
(c) KindlePreviewerの移動メニュー
KindlePreviewerの移動メニューは、もともと設定されている項目と、ランドマークに指定した項目を合成して構築されます。

CAS-UBでの3つの目次の生成設定方法

CAS-UBではV2.2以降、(a)ナビゲーション目次、(b)本文目次、(b)ランドマークの3種類を自動生成する機能を用意しました。これについては、「EPUB目次自動作成機能を大幅に強化! CAS-UB V2.2 を正式版としました。」を参照してください。[4]

CAS-UBでEPUBを生成する際に、編集画面で「生成」→EPUB3「一般」で、EPUB3に(a)~(c)を含めるかどうか、含める場合どのような内容にするかを設定できます。次の図は「一般」メニューの一部で、朱枠が目次関連の設定項目を示しています。

landmark1
図 CAS-UB V2.2のEPUB生成「一般」設定

これらの設定を変更してから「保存」し、EPUB3を出力すると指定した目次をもつEPUBを作ることができます。

次回はCAS-UBで設定したこれらの目次が、最近のKindle電子書籍リーダーでどのように扱われているかを説明します。(続く「CAS-UB上級テクニック: Kindleストアで販売する電子書籍の目次や移動メニューの作成方法。」)

[1] KindleGen リリースノート
[2] 2.2.4 EPUB Navigation Document Definition
[3] EPUBのナビゲーション目次とランドマークの使い方の再検討が必要。
[4] EPUB目次自動作成機能を大幅に強化! CAS-UB V2.2 を正式版としました。

Kindle mobi形式サンプルとKindle 専用のEPUBと一般のEPUBの相違点(リフロー型の場合)

CAS-UB V2.1でKindle正式対応しましたので、サンプルページのブログ記事EPUB版にKindle形式を追加しました。

CAS-UB Sampleの3.3 CAS-SUPPORTブログ記事のEPUB版-2012年11月のブログの項にあります。

簡単に相違点を説明します。

1.EPUB3形式は一般のEPUB3リーダ向けとなります。
2.mobi形式は次のKindle専用EPUB形式をKindlegenでmobi形式に変換した結果となります。
3.Kindle専用EPUB形式は、Kindle専用に最適化(特殊化という方が適切かもしれません)したEPUBです。

標準のEPUB3とKindle用のEPUBの相違点は次の通りです。

1.カバー画像の登録
(1)標準のEPUB3:
・manifest に登録:<item href="cover.png" id="idcoverpng" media-type="image/png" properties="cover-image"/>
なお、metaにもカバー画像を登録していますが、これはEPUB2リーダ用のためなのでEPUB3では意味がありません。

(2)Kindle専用EPUB形式: 
・metaに登録: <meta content="idcoverpng" name="cover"/>
・manifest に登録:<item href="cover.png" id="idcoverpng" media-type="image/png"/>

2.カバーページ
(1)標準のEPUB3: 
・cover.htmlを出力、そのimg要素にcover.jpegを指定する。cover.htmlをmanifestとspineに登録する。

※カバーページはnavやncxには登録していません。通常の書籍では目次に表紙は登録しないのでその類推からです。

(2)Kindle専用EPUB形式: 
・cover.htmlは出力しない。Kindleは、カバー画像として登録した画像を表紙として扱うため。

3.目次
(1)標準のEPUB3: 
・nav.htmlを出力し、manifestに次のように登録:<item href="nav.html" id="nav" media-type="application/xhtml+xml" properties="nav"/>
なお、ncxも出力していますが、これはEPUB2リーダ用に互換にするためですので、EPUB3では意味はありません。

(2)Kindle専用EPUB形式: 
・EPUB2形式の論理目次toc.ncxを生成する。
・・manfestに登録:<item href="toc.ncx" id="ncx" media-type="application/x-dtbncx+xml"/>
・・spineに登録:<spine toc="ncx">
・HTML形式の目次toc.htmlを生成する。
・・manifestに登録:<item href="toc.html" id="toc" media-type="application/xhtml+xml"/>
・・spineに登録:<itemref idref="toc"/>
・・toc.htmlをguideに登録:<guide><reference href="toc.html" title="Table of Contents" type="toc"/><reference href="cover.png" title="Cover Image" type="cover"/></guide>

Kindle専用EPUBをKindlegenでmobiに変換したときの、ログは次の通りです。CSSにKindleでサポートしていないプロパティを設定しているという警告がありますが、それを除くと警告・エラーはありません。

—ここから—

*********************************************************
Amazon.com kindlegen(Linux) V2.7 build 1019-d6e4792
コマンドライン電子書籍コンパイラ
Copyright Amazon.com 2012
*********************************************************

情報(prcgen):I1047: metadata が追加されました dc:Title “CAS-SUPPORT ブログ 2012年11月分”
情報(prcgen):I1047: metadata が追加されました dc:Date “2012-12-22”
情報(prcgen):I1047: metadata が追加されました dc:Creator “CAS-SUPPORT”
情報(cssparser):I10004: @import、@charset、および @font-face 以外のアットルールはサポートされていません。
情報(prcgen):I1002: ファイルを解析 0000011
警告(htmlprocessor):W28003: コンテンツの CSS プロパティに指定された値は Kindle リーダーではサポートされていません。プロパティの使用方法については、Kindle 出版ガイドラインをご参照ください: ‘position: relative’ ファイル内で:/tmp/mobi-2zYgdk/OEBPS/themes/normal-serif/common.css
警告(htmlprocessor):W28003: コンテンツの CSS プロパティに指定された値は Kindle リーダーではサポートされていません。プロパティの使用方法については、Kindle 出版ガイドラインをご参照ください: ‘position: absolute’ ファイル内で:/tmp/mobi-2zYgdk/OEBPS/themes/normal-serif/common.css
警告(htmlprocessor):W28001: コンテンツで指定された CSS スタイルは Kindle リーダーではサポートされていません。CSS プロパティの削除: ‘max-width’ ファイル内で:/tmp/mobi-2zYgdk/OEBPS/themes/normal-serif/common.css
情報(prcgen):I1015: PRC ファイルを構築します
情報(prcgen):I1006: ハイパーリンクを解決します
情報(prcgen):I1008: 読書開始位置を解決します
情報(prcgen):I1049: 目次を構築します URL:/tmp/mobi-2zYgdk/OEBPS/toc.ncx
情報(pagemap):I8000: 本の中にページマップが見つかりません
情報(prcgen):I1045: 本で使用されている UNICODE の範囲を計算しています
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Basic Latin [20..7E]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Katakana [30A0..30FF]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Hiragana [3040..309F]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: CJK Unified Ideographs [4E00..9FFF]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: General Punctuation – other than Windows 1252 [2015..2017]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Chinese, Japanese, and Korean (CJK) Symbols and Punctuation [3000..303F]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Halfwidth and Fullwidth Forms [FF00..FFEF]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Geometric Shapes [25A0..25FF]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Arrows [2190..21FF]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Enclosed Alphanumerics [2460..24FF]
情報(prcgen):I1017: PRC ファイルを構築、カウントを記録します: 0000011
情報(prcgen):I1039: 最終的な統計情報 – テキストは以下に圧縮されました(元のサイズの%): 49.12%
情報(prcgen):I1040: 文書の識別子は以下の通りです: “CAS-SUPPORT_WTK_2012A11MQ”
情報(prcgen):I1041: ファイルフォーマットのバージョンは V 6
情報(prcgen):I1031: PRC ファイルを保存します
情報(prcgen):I1032: PRC が正常に構築されました
情報(prcgen):I1016: 強化 PRC ファイルを構築します
情報(prcgen):I1007: mediaidlinks を解決します
情報(prcgen):I1011: mediaidlinks を書き込みます
情報(prcgen):I1009: ガイド項目を解決します
情報(prcgen):I1046: UNICODE の範囲が見つかりました: General Punctuation – Windows 1252 [2013..2014]
情報(prcgen):I1046: UNICODE の範囲が見つかりました: Basic Greek [370..3FF]
情報(prcgen):I1017: PRC ファイルを構築、カウントを記録します: 0000020
情報(prcgen):I1039: 最終的な統計情報 – テキストは以下に圧縮されました(元のサイズの%): 49.79%
情報(prcgen):I1041: ファイルフォーマットのバージョンは V 8
情報(prcgen):I15000: おおよその標準 Mobi 送信可能ファイルサイズ: 0000455KB
情報(prcgen):I15001: おおよその KF8 配信可能ファイルサイズ: 0000475KB
情報(prcgen):I1036: mobi ファイルが正常に構築されました
—ここまで—

※疑問点

◎これで良いはずなのですが疑問が一つあります:Kindle paperwhiteの「移動」メニューに「目次」へのリンクが表示されません

19日のJEPAにおける説明会でも、目次へのリンクメニューから目次ページに飛べるようにするには、opfのguideにtocを追加すればよいとあります。また説明会の後、アマゾンの方にお聞きしたところ、目次ページ(toc.html)へのリンクは、guideにあれば、ncxに登録しなくても自動的に作られるとのことです。アマゾンの説明とPaperwhiteの挙動が食い違っているように思います。

ということで、またまた嵌っている・・・

何か、間違いがあるのでしょうか?ご存知の方ぜひお教えください。

◎そうそう、もうひとつ思い出しました。

アマゾンの資料には、目次(toc.html)はspineの先頭におくようにと書かれています。で、いまは、その通り先頭においているのですが、目次が先頭で本当に良いんだろうか?

普通の本は、扉や前付けの後ろに目次を置くのですが・・・

◎Kindlegenが出す、「本の中にページマップが見つかりません」というメッセージについては、アマゾンの「Kindle Publishing Guidelines」(Version 2012.4)には説明がありません。悩んでいる人が多いようです。どうも、page-mapはアドビの独自機能で、非標準。ページ番号とEPUBの記事の対応付けをするためのXML形式らしいです。

Kindlegenの奇妙な動作に、再び、はまる―表紙画像が表示されないのはなぜ?

CAS-UBの12月20日Kindle mobi形式正式サポートの機能をチェックしていて、またまたKindlegenの奇妙な動作にはまってしまいました。

CAS-UBの12月20日版ではカバー(表紙)画像について、ユーザーが画像ファイルを指定していないとき、システムが扉(タイトルページ)から自動生成する機能を用意します。そして、そのカバー画像をKindleのカバー画像として登録します。

しかし、うまく登録できないように見えることがあります。次の図をご覧ください。同じようなタイトルページから自動生成したカバー画像をもつふたつのEPUBファイルをKindelgenでmobiに変換し、二つのmobiファイルをKindle Paperwhiteのドキュメント一覧で見たものです。

・テストデータ
ロゴがないmobiファイル
ロゴがあるmobiファイル

右は、カバー画像が見えますが、左はカバー画像がない状態(Kindleが自動的に作った画像)となっています。

なぜなのかなあ?

変換する前の、ふたつのEPUBファイルのカバー画像の相違は、一方は、EPUBファイル内に発行所ロゴがないため、タイトルページから画像を生成するときにブロークンイメージになっているもの、他方は発行所ロゴが正しくはいっているものです。

Kindelgenでmobiに変換する前のEPUB3をiBooks3で見ますと次のようになります。EPUB3の状態では、二つのカバー画像の相違点は、ロゴがあるかどうかのみです。

・テストデータ
ロゴがないEPUB3
ロゴがあるEPUB3

変換元のEPUBに入っている画像ファイルは、いずれも、600×800ピクセルのPNGです。ロゴがないほうはファイルサイズ4.54KB、ロゴがある方はファイルサイズ24.3KBという相違です。

わずかな相違にみえるのですが、Kindlegenで変換したmobi形式を解凍してみますと、なぜか、まったく異なります。

・ロゴがないほうの変換結果(mobi8のフォルダー下のimageフォルダー)

・ロゴがあるほうの変換結果(mobi8のフォルダー下のimageフォルダー)

・600×800ピクセルのPNGが一方はGIFになり、他方はJPEGになっています。
・両方とも180×240ピクセルのサムネイル画像(JPEG)ができています。

ということで次のような疑問が沸きます。

(1) PNGからGIFまたはJPEGに変換する使い分けはどうなっているんだろう?
(2) ロゴがないほうもサムネイル画像ができているのに、Paperwhiteのドキュメント一覧でカバー画像が表示されないのはなぜ?

(1) はKindlegenが画像をGIFにしようが、JPEGにしようが別に好きなようにやって構わない、要はきちんと表示できればそれで良い、といえば終わりですが、問題は(2)です。
(2) はPaperwhiteのバグではないかと思うのですが・・・

KindleGen のSVG変換 奇妙な動作にはまる

CAS-UBで作成したEPUBをKindleGen[1]でmobi形式に変換する処理の確認をしていたところ、Kindle Paperwhiteで表示されない画像があることに気がつきました。

何が起きているか、DRMのかかっていないmobiファイルをアンパックするツールMobi_unpack[2]を使って調べてみました。

結果を整理すると、次のようになります。

1.KindleGenでEPUBからmobiに変換すると、出来上がったmobiファイルの中には、mobi7とmobi8(KF8)形式の両方がひとつにパックされています。

画像について次のような処理を行なっています。
2.JEPGはそのまま両方にコピー

3.PNGはGIF形式に変換して、両方にコピー

4.問題はSVGです。もとのEPUBでは、SVGを<img src="SVGファイルへのパス" …/>として外部オブジェクトとして指定しており、SVGファイルの実体はimagesフォルダの中にあります。これをKindleGenで変換すると次のようになります。
(1)mobi7ではSVGがすべて削除されてしまいます。つまり古いKindleではSVGはまったく表示できないということになります。
(2)mobi8の中をみますと、EPUBと同じ方式でそのままコピーされているケースと、<p><svg xml…>….</svg></p>のように埋め込みになってしまうケースの2種類があります。そして、埋め込みにされたSVGがKindle Paperwhiteで表示できません。

5.そのまま複製されるSVGと埋め込み処理されてしまうSVGに、SVGの仕様からみて何かの違いがあるか、ということを調べたのですが、いまのところまったく相違点がわかっていません。

たとえば、次の二つのSVGファイル(ok.svgとng.svg)ですが、ok.svgは表示できますが、ng.svgは表示できません。この二つのSVGファイルは、ok.svg の途中に <!– xxxxx –>を入れて保存したのがng.svgです。コメントを一つ挿入しただけで表示できなくなってしまう、というわけです。

●データ 
a. ok.svg
b. ng.svg
c. EPUB3
d. mobi

KindleGenのバグではないかと思いますが、どうなんでしょうか。

[1] Kindlegen Windows版・バージョン2.7を使用
[2] Movi_unpack