出力前に章をそろえる!EPUBの目次、本文中に表示する目次

表示用目次と論理目次をそろえるアイキャッチ

EPUBで本文中に表示する目次を作るなら、読者が本文の一ページとして開く可視目次と、端末の目次メニューに使われるnav・互換用NCXを別資源として確認します。最初に章ID、表示ラベル、掲載可否、移動先を決め、可視目次ページを生成対象へ含めます。出力後は可視ページのリンク、navのhref、NCXのsrc、spineの読書順を同じ章表へ照合してください。

この記事は、編集画面の見出し一覧を使う方法ではありません。章ID・掲載可否・表示ラベル・hrefを決めた承認済み章表から、読者向けの可視目次ページを作り、生成EPUB内のnavigationと読み順まで確認します。作品情報と目次の正本は別々に保ちます。

可視目次・nav・NCX・spineの役割を分ける

可視目次は、読者が本文と同じようにページとして開く目次です。書名や「目次」という見出し、章ラベル、本文へのリンクを持つ通常のXHTMLとして収録されます。リーダーの本文領域で表示される点が特徴です。

navはEPUB 3のnavigation資源で、リーダーの目次メニューなどが参照します。NCXは互換用のnavigation資源です。spineは既定の読書順を示し、目次に載せない章も本文として読むなら残ります。

同じ章ラベルが複数資源に現れても役割は同じではありません。可視目次があるだけで端末メニューが正しいとは限らず、navにない章が必ず本文から消えるわけでもありません。

二章の目次対応表を先に作る

最小例はC01とC02です。どちらも本文として読むためspineへ残し、C01だけを目次掲載、C02は意図的に非掲載とします。可視目次、nav、NCXにはC01を一件、spineにはC01とC02をこの順で置くのが期待値です。

対応表には章ID、表示ラベル、可視目次掲載、可視ページhref、nav掲載とhref、NCX掲載とsrc、spine位置、到着先の見出しを置きます。空欄を「非掲載」と推測せず、非掲載なら理由を書きます。

章名が同じ場合は、到着先の冒頭文も記録します。ラベル一致だけで別章へのリンクを合格にしないためです。

本文中へ表示する目次ページを生成対象にする

Rune Studioの公開資料には、章順と章ごとの目次掲載、本文中の目次、nav、NCX、spineを含むEPUB生成範囲が記載されています。資料上の制作手順では、承認済み章表を作品へ設定し、本文中の目次を生成対象へ含めて別名でEPUBを出力します。

本文中の可視目次ページについて、画面表示からリンク移動までの全操作は確認できていません。この節は公開資料に基づく一般手順です。手元で実行するときは、生成前確認で本文中目次の有無、掲載章数、出力名を記録してください。

生成したEPUBは上書きせず、ファイル名、生成日時、SHA-256を記録します。可視ページとnavigationを別版から取り出して混ぜないようにします。

タイトル・もくじ・第一章・第二章の順序と、もくじ掲載の可否が並ぶRune StudioのEPUB作成画面
EPUB作成のファイル順序の画面。タイトル、もくじ、各章の並びと、章ごとのもくじ掲載の可否が一覧で見えます。生成が成功したことは、この画面からは分かりません。

可視目次ページのラベルとリンク先を確認する

EPUBの複製を展開し、content.opfのmanifestとspineから本文中の目次に当たる通常XHTMLを特定します。ファイル名だけで決めず、表示見出しと章リンクを開いて可視目次ページであることを確認します。

二章例では、ページ上にC01の承認済みラベルが一件あり、そのhrefがC01の本文XHTMLへ到達することを確認します。C02は非掲載のため可視目次に出しません。ただしC02本文を削除したわけではありません。

ラベルが正しくてもリンク先がC02や存在しない資源なら再生成です。生成済みXHTMLだけを直すと次回出力で戻るため、章表または目次設定へ戻ります。

navとNCXを同じ章IDへ照合する

次にpackageが指定するnavとNCXを開きます。二章例では、どちらにもC01があり、C02がないことを確認します。hrefまたはsrcを実際の本文XHTMLへ解決し、見出しまたは冒頭文でC01を特定します。

可視目次、nav、NCXのラベルは同じ承認表へ接続しますが、資源そのものは別です。可視ページだけC01、navはC01とC02という差があれば、本文ページと端末メニューで異なる目次を示すため、意図した差か入力ミスかを章表へ戻って判断します。

navとNCXの存在だけを「目次完成」としません。掲載対象、表示名、リンク先の三つを照合します。

spineで非掲載章を含む読書順を確認する

spineでは、可視目次ページが読む順番へ含まれ、その後の本文C01、C02が承認済み順に並ぶかを確認します。実際の補助ページ構成により位置は変わるため、単純な件数ではなく資源IDと中身を対応させます。

C02が可視目次、nav、NCXに出なくても、本文として読むならspineに残ります。C02がすべてから消えた場合は、目次非掲載ではなく本文欠落の疑いがあります。

目次掲載の変更後は、変わる可視目次・nav・NCXだけでなく、変えないはずのspine順も確認します。

確認済みのnavigationと未確認の可視ページを分ける

二章EPUBを生成し、C02を目次対象外にして再出力したところ、完成物検査に合格しました。navとNCXが生成され、navにはC01だけが残る一方、spineにはC02も残ることを確認しました。

この結果は、navigation非掲載と本文の読書順を分けられる根拠です。一方、本文中の可視目次ページの表示項目、リンク移動、外部リーダー表示は完遂していません。navigationの合格を可視ページの表示成功へ読み替えないでください。

外部リーダーやストアでの表示も別確認です。内部資源の一致は、すべての端末で同じUIになる保証ではありません。

編集段階の章表と役割を分ける

前工程では、編集段階で六章へID、順番、掲載可否、表示ラベル、hrefを割り当て、エディタ側で移動先を確認します。その成果物が、本記事で使う承認済み章表です。

本記事はその章表を入力に、本文中の可視目次ページを生成し、可視ページ、nav、NCX、spineの四資源へどう現れたかを確認します。エディタの目次タブ、現在見出し追跡、レベル絞り込みは扱いません。

結論:可視ページとnavigationを別資源として閉じる

章ID、表示ラベル、掲載可否、移動先を二章表へ固定し、本文中に表示する目次を生成対象へ含めます。出力後は、可視目次XHTMLのラベルとhref、navのhref、NCXのsrc、spineの読書順を同じ章IDへ照合してください。

本文中の目次は、端末メニューに目次があるだけでは完成しません。読者が開くページとnavigation資源がそれぞれ期待章へ到達し、非掲載章も本文の読書順へ残ることを説明できれば完了です。Rune Studioの現行生成範囲はRune Studioの商品ページで確認できます。