- 絳アト日記: ePub 2.0 ことはじめ (1) シンプルな ePub を作る
- 絳アト日記: ePub 2.0 ことはじめ (2) iBooks で確認
- 絳アト日記: ePub 2.0 ことはじめ (3) HTML 整形
- 絳アト日記: ePub 2.0 ことはじめ (4) Makefile を作る
の続きです。
Makefile ができたので、XHTML ファイルを編集しても最少の手間で ePub ドキュメントを生成できるようになりました。本エントリーでは、「目次」の作成方法を解説します。
目次の作成
iBooks では目次がないと ePub ドキュメントとして不正に扱われます。そのため、簡単な目次の作成方法については「絳アト日記: ePub 2.0 ことはじめ (1) シンプルな ePub を作る」で解説しました。おさらいしてみましょう。
目次を作るには、まず content.opf ファイルに目次ファイル「toc.ncx」があることを認識させます。そして、toc.ncx ファイルで目次を作ります。
content.opf ファイルの変更点
content.opf ファイルにおける目次ファイルの変更部分は二か所です。
まず manifest
要素に toc.ncx が ncx (目次) ファイルであることを登録します。今回の場合、次のようになります:
<manifest>
<item id="ncx" href="toc.ncx" media-type="text/xml" />
...
</manifest>
id 属性値は ncx としておくのが無難でしょう。href 属性値は自由に決めて構いませんが、拡張子は ncx とします。今回は toc.ncx という名前を採用しました。media-type 属性値は text/xml
です。
次に spine
要素に toc 属性を追加します。属性値は目次ファイルの ID です:
<spine toc="ncx">
目次ファイル (toc.ncx) は次のようになります:
<?xml version="1.0" encoding="UTF-8"?> <ncx xmlns="http://www.daisy.org/x3986/2005/ncx/" version="2005-1"> <head> <meta name="dtb:uid" content="akaato.com20110418"/> <meta name="dtb:depth" content="1"/> <meta name="dtb:totalPageCount" content="0"/> <meta name="dtb:maxPageNumber" content="0"/> </head> <docTitle> <text>ePub 2.0 ことはじめ</text> </docTitle> <navMap> <navPoint id="chap1" playOrder="1"> <navLabel> <text>第一章 ことはじめ</text> </navLabel> <content src="chap1.xhtml"/> </navPoint> </navMap> </ncx>
dtb:uid
目次ファイルの例を見れば分かる通り、目次ファイルには一つの navMap
要素が入ります。navMap 要素の前はヘッダーと考えて構いません。navMap 要素の中身が目次となって表示されます。
navMap 要素の中に目を移す前に、目次ファイルのヘッダー部分へ注意を向けましょう。ここに meta
要素で name="dtb:uid"
というコードがあります。この属性値には、content.opf ファイルで dc:identifier
で設定した値から「urn:uuid」を除いたものを設定します。
今回の例では、content.opf の概当部分は次の様になっていますから
<dc:identifier id="BookId">urn:uuid:akaato.com20110418</dc:identifier>
toc.ncx の概当部分は下記の様になります:
<meta name="dtb:uid" content="akaato.com20110418"/>
navPoint
navMap
要素の中には複数の navPoint
要素を入れることができます。この navPoint が「目次」となります。
一般的な navPoint
要素は次の様になります。
<navPoint id="目次用のID" playOrder="目次の順番 (数字)"> <navLabel><text>目次名</text></navLabel> <content src="URL"/> </navPoint>
「目次用のID」は content.opf 内の ID とは無関係です。playOrder の順番に目次が並べられます。navPoint
要素は入れ子にすることも可能ですし、「#name」も利用可能です。
一例です。
<navMap> <navPoint id="chap1" playOrder="1"> <navLabel> <text>第一章 ことはじめ</text> </navLabel> <content src="chap1.xhtml"/> <navPoint id="chap1" playOrder="2"> <navLabel> <text>1.1 利用可能な要素</text> </navLabel> <content src="chap1.xhtml#elem"/> <navPoint id="structure" playOrder="2"> <navLabel><text>1.1.1 構造要素</text></navLabel> <content src="chap1.xhtml#structure"/> </navPoint> <navPoint id="text" playOrder="3"> <navLabel><text>1.1.2 テキスト</text></navLabel> <content src="chap1.xhtml#text"/> </navPoint> <navPoint id="link" playOrder="4"> <navLabel><text>1.1.3 ハイパーリンク</text></navLabel> <content src="chap1.xhtml#link"/> </navPoint> <navPoint id="list" playOrder="5"> <navLabel><text>1.1.4 リスト</text></navLabel> <content src="chap1.xhtml#list"/> </navPoint> <navPoint id="fix" playOrder="6"> <navLabel><text>1.1.5 修正</text></navLabel> <content src="chap1.xhtml#fix"/> </navPoint> <navPoint id="table" playOrder="7"> <navLabel><text>1.1.6 テーブル</text></navLabel> <content src="chap1.xhtml#table"/> </navPoint> </navPoint> </navPoint> </navMap>
結果です。iPhone の iBooks で表示させました。
0 件のコメント:
コメントを投稿