
EPUBの論理目次を調べるときは、nav.xhtmlがナビゲーション文書として登録されているか、その中の目次リンクが実在する本文を指しているかを先に見ます。nav.xhtmlが本文の読む順番にも入っていれば、同じファイルが表示用の目次ページにもなります。入っていなければ、アプリの目次として働いても本文ページとしては現れません。
この記事は、表示用目次をどこへ置くかではなく、nav.xhtmlの登録・リンク・読む順番の関係から故障箇所を切り分けるためのものです。目次ページの位置は別の記事に譲ります。
nav.xhtmlの役割は「章へ移動できる関係」を渡すこと
EPUB 3のナビゲーション文書はXHTMLで作られ、目次を示すnav要素を持ちます。パッケージ文書では、そのファイルがナビゲーション文書であることを登録します。読書アプリはこの関係を使い、画面の目次操作から章へ移動します。詳しい要件はW3C EPUB 3.3で確認できます。
ここで大切なのは、論理目次であることと、本文中に見えるページであることは別条件だという点です。
- ナビゲーション文書としての登録:読書アプリが論理目次として見つけるための条件
- 目次nav内のリンク:章名と移動先を結ぶ条件
- 読む順番への収録:読者がページをめくってnav.xhtmlへ到達するための条件
同じnav.xhtmlが三つを満たす制作もできますが、「EPUB 3では必ず一つのファイルが二つの見え方になる」とは限りません。
症状から確認場所を決める
論理目次の不具合は、見え方ではなく次の順で調べます。
- アプリの目次に何も出ない:ナビゲーション文書の登録と、目次navの有無を確認する
- 章名は出るが移動できない:各リンクの行き先がEPUB内に存在するか確認する
- アプリの目次は動くが、本文中に目次ページがない:nav.xhtmlが読む順番に入っているか確認する
- 新しいアプリでは動くが古い環境で動かない:旧形式のtoc.ncxを用意する方針か、その中身が現行目次と合うか確認する
3番は、目次ページを設けない方針なら異常ではありません。反対に、nav.xhtmlというファイルがEPUB内にあるだけでも足りません。何として登録され、どこへリンクし、読む順番に入っているかを分けて見ます。
手作業では、三つの関係を一つずつ確かめる
手で組む場合は、nav.xhtmlを作った後にパッケージ文書へ登録し、目次navの各リンクを書き、必要なら読む順番へ加えます。旧環境にも対応する方針ならtoc.ncxも別に管理します。
章を追加したときは、ファイル名が存在するだけでは完了しません。論理目次のリンク先、本文の読む順番、旧形式を用意する場合はその項目を確認します。ここを混ぜると、「目次ページは見えるがアプリの目次に出ない」「項目は見えるが移動できない」という部分的な故障になります。
確認表は次の4行で足ります。
- nav.xhtmlがナビゲーション文書として登録されている
- 目次navの章名とリンク先が意図どおり
- すべてのリンク先がEPUB内に存在する
- 表示用ページも必要なら、nav.xhtmlが読む順番の意図した位置にある
旧形式を配布要件に含める場合だけ、toc.ncxの項目も別に照合します。
rune Studioで確認できた出力
開発版を命令から動かし、二章の原稿からEPUBを書き出して調べました。結果は次のとおりです。
- 目次ファイルがナビゲーション文書として登録されていた
- 同じ目次ファイルが読む順番にも入り、「タイトル、目次、第一章、第二章、奥付」と並んだ
- 旧形式の目次も収録されていた
- 新旧の目次に第一章と第二章が同じ順で入っていた
これは、今回のRune Studio出力ではnav.xhtmlが論理目次と表示用ページを兼ね、さらにtoc.ncxも生成された、という確認です。EPUB一般で常に同じ構成になるという意味ではありません。
目次から外しても本文は残る
第三章を目次から外して書き出すと、目次の項目から第三章が消え、本文ページは読む順番に残りました。これは「本文に収録するか」と「論理目次から移動先として見せるか」が別の判断であることを示します。
検査結果の意味を限定する
Rune Studioの検査では、目次と旧形式目次の有無、読む順番を確認できます。ただし、特定の読書アプリがどちらを使うか、各端末でどのように表示するかまでは今回の操作検証に含まれません。
向く人と、別の記事を先に読む人
この記事が向いているのは、アプリの目次が出ない、項目から移動できない、表示用ページだけ見えない、という症状を切り分けたい人です。 見えるページの位置を変えたいだけなら、読む順番を扱う記事のほうが直接的です。
手作業でEPUBを組まず、利用中の制作ツールがナビゲーションを一括生成するなら、毎回nav.xhtmlを編集する必要はありません。それでも入稿前に、論理目次の有無、リンク移動、必要なら表示用ページの三つは別々に試します。
まとめ
- nav.xhtmlの論理目次は、ナビゲーション文書としての登録と、目次navのリンクで成立する
- 表示用ページになるかは、nav.xhtmlが本文の読む順番に入っているかという別条件
- 症状を、登録・リンク先・読む順番・旧形式の四つに分けると直す場所が分かる
- Rune Studioの検証出力では、同じ目次ファイルが論理目次と表示用ページを兼ね、toc.ncxも収録されていた
次の一歩として、目次ページの見た目ではなく、まずアプリの目次から各章へ移動できるかを試してください。動かなければnav.xhtmlの登録とリンク、動くのにページが見えなければ読む順番を確認します。


