出力前に章をそろえる!KDPの目次、端末メニュー用の論理目次

端末メニュー用の論理目次の確認工程を、白い原稿用紙と紫色の半透明装置で抽象的に示したアイキャッチ

KDPの目次には、本文中に置く「見える目次ページ」と、読書端末のメニューが使う論理目次があります。二つは役割が違いますが、章名、順番、リンク先は同じ本文章へそろえる必要があります。今回の五章標本では、見える目次を論理目次の項目から除外し、本文五章だけをnavとNCXに並べました。ローカル構造は一致したものの、実際の端末メニューとタップ移動は未確認なのでStage 4はpartialです。

見える目次と端末メニュー用目次は役割を分ける

見える目次は、本の本文ページとして読者がページ送りで開く一覧です。論理目次は、リーダーのナビゲーション画面から章へ移動するためにEPUBへ収録される構造です。一方を作れば他方も自動的に同じになる、と決めつけてはいけません。

EPUB 3.3仕様では、EPUBナビゲーション文書の目次が主要なナビゲーションを担います。項目順は本文の読む順番に沿い、リンクは実在する本文位置を指す必要があります。この記事の中心はnav.xhtmlの書式そのものではなく、見える目次と端末メニュー用目次の役割を分けたうえで五章を照合することです。

見える目次一件と本文五章を開始値にする

標本には、見える目次ファイル一件と本文五章を用意しました。見える目次には五項目、本文には照合用の固定マーカーを入れています。開始時点の期待値は次のとおりです。

見える目次まで論理目次へ入れると、端末メニューの先頭に「目次」が加わり、期待した五章とずれます。そこで標本では見える目次を本文には残しつつ、生成対象から除外しました。

二つの目次をそろえる一般手順

最初に本文の正しい章順を一列に書きます。次に、見える目次の表示名とリンク先、論理目次の表示名とリンク先を横に並べ、章ごとに照合します。判定は「項目数」「順番」「表示名」「リンク先」の四列で行い、一列でも違えば完了にしません。

EPUBを生成したら、パッケージのspineで読む順番を、navで論理目次を、各本文XHTMLでリンク先のIDを確認します。Amazonの対応原稿形式に沿って提出前にKindle Previewerを使い、端末メニューに五章が並ぶか、各項目から正しい章へ移動するかを目視します。ローカルファイルの一致とリーダー上の操作は別の検査です。

五章を除外設定付きで出力した実測

記事専用の検証作業場で、見える目次ファイルと本文五章を選び、見える目次を--exclude-from-toc 1で論理目次の生成対象から除外しました。シリーズと巻を設定し、出力計画を確認してEPUBを出力し、inspect後にnav、NCX、本文XHTMLを読みました。command_countは9です。

結果はvalid=true、spine=9、欠落画像0件でした。見える目次には5項目が残り、生成されたnavとNCXも各5項目です。navのリンクはp002.xhtmlからp006.xhtml、NCXの参照先もText/p002.xhtmlからText/p006.xhtmlの順でした。本文XHTMLでは固定マーカーを20件読み戻しています。

この数値から、見える目次と論理目次を別構造として残し、論理目次を本文五章へそろえたことはローカルに確認できます。ただし端末メニューでの表示とタップ移動は試していません。statusはpartialです。

端末操作は未確認のまま、ずれた列へ戻す

今回の未確認範囲は、KDP受理、Kindle Previewerや実機の端末メニュー表示、各項目のタップ移動、全リーダーでの挙動です。失敗時は四列のどこがずれたかで戻します。

Rune Studioは二種類の目次を同じ出力へ収録する

現行Mac版Rune StudioのEPUB 3出力ウィザードでは、原稿ファイルを選び、章順と目次掲載の有無を設定して出力計画を確認できます。出力には本文ページ、EPUBナビゲーション文書、NCX、パッケージ文書が含まれます。これはRune Studioの商品ページと製品資料で確認できるStage 3の公開機能です。

五章、見える目次五項目、nav五項目、NCX五項目、固定マーカー20件は、今回の専用標本で観測したStage 4です。Rune Studioの機能が存在することと、KDP端末メニューで実際に動くことは同じ主張ではありません。

結論:五章の一致後も端末メニューを別に試す

KDPの見える目次と端末メニュー用の論理目次は、別の役割を持つ二つの構造です。今回の標本では、見える目次ファイルを論理目次から除外し、本文五章をnavとNCXへ同じ順で生成できました。ローカルの章対応は確認済みです。端末メニューとタップ移動が未確認なので判定はpartialのままです。同じEPUBをPreviewerまたは対象端末で開き、五項目すべての移動を確認してから完了にします。