メモ@inudaisho

君見ずや出版 / 興味次第の調べ物置き場

目次をなるべく簡単に作りたい

kindleのmobiをhtmlでつくって専用リーダ用の目次もつけたいとき最低限必要なものを調べてみると、こんな情報がひっかかる。
ファイル名をaとする。

  • a.html (本文)
  • a.opf (定義ファイル)
  • a.ncx もしくは nav.xhtml (目次用)
  • a.jpg (カバー)
  • kindlegen (mobi作成ツール)

nav.xhtmlをつくってncxとhtml目次を自動生成する方法は olリストで目次を定義すればいいので実に簡単だが 、タグがつかえない。(縦中横とかルビとか)
mobiunpack で kindlegen の生成した mobiファイル を分解してみると、結局 ncxファイルを新しく生成し、guide要素もopfファイルの中に追加され、nav.xhtmlはhtmlの中にspineの順序にしたがって挿入されている。ならncxはncxで作ってhtml目次は目次で好きに作ったらいいんじゃないの。

でもncxファイルの記法って読みづらいし書きづらいんよな。ncxって機械向け目次なんだから手をぬけれるなら手を抜きたい。
....
ということでいろいろやってみたら、olリスト をnav要素の中に適当に並べただけのhtmlでも行けることがわかった。html目次の方は本文の中の目次を指定したって問題ない。
ということで最低必要なのは

  • a.html (本文)
  • a.opf (定義ファイル)
  • a.nav.html (専用リーダ向け目次)
  • a.jpg (カバー画像)
  • kindlegen (mobi作成ツール)

以下サンプルを貼ってみる。
a.html

<html><head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>残水滸</title>
<style>
html{ -webkit-writing-mode:vertical-rl; -epub-writing-mode:vertical-rl;}
.tcy{-webkit-text-combine: horizontal}
p.author{text-align:right}
p{text-indent:1em}
</style>
</head>
<body>
<!-- 所詮はhtmlだから好き放題配置できる -->
<h2 id="000-1"></h2>
<p>
皖南程師善之、先兄綬伯摯友也、三十年前.....<br/>
民国二十二年秋....
</p>
<mbp:pagebreak/>

<h1>残水滸</h1>
<h2 id="000-2">小引</h2>
<p class="author">秋風</p>
<p>
昔讀施耐庵水滸、受其善於描寫!一展巻、而百八人之... 
</p>
<mbp:pagebreak/>

<h2 id="000-3">目録</h2>
<ul>
<li><a href="#071">第七十一囘 玉麒麟夢魂驚草莽 智多星妙語穏英雄</a>
    <ul>
        <li><a href="#071_001">話説盧俊義夢中</a>...(<span class="tcy">1</span>節目)</li>
        <li><a href="#071_002">不多一會、呉軍</a>...(<span class="tcy">2</span>節目)</li>
    </ul>
</li>
<li><a href="#072">第七十二囘 刧軍餉林武師遇友 念庭&#38344;公孫勝歸山</a></li>
<li><a href="#073">第七十三囘 呉加亮議打&#20823;州府 燕小乙組合軍官團</a></li>
<li>...
</ul>
<mbp:pagebreak/>

<h2 id="071">第七十一囘 玉麒麟夢魂驚草莽 智多星妙語穏英雄</h2>
<p id="071_001">
話説盧俊義夢中看見自己和一百〇七個兄弟、一齊就忠義堂下草地裏處斬、刀鋒過處、&#29022;地一陣清涼。忽然間身子直跳起来....
</p>
<p id="071_002">
不多一會、呉軍師、便仝安道全來問病。... 
</p>
<mbp:pagebreak/>
<h2 id="072">第七十二囘 刧軍餉林武師遇友 念庭&#38344;公孫勝歸山</h2>
<p>&#35498;呉用見李應和&#34083;敬兩個、&#35498;起山寨錢糧、只支三月...</p>
<mbp:pagebreak/>
<h2 id="073">第七十三囘 呉加亮議打&#20823;州府 燕小乙組合軍官團</h2>
<p>&#35498;那些百姓喚到宋江馬前...</p>
<mbp:pagebreak/>
</body></html>

a.opf(定義ファイル)

<?xml version="1.0" encoding="utf-8"?>
<package> 
<metadata>
<dc-metadata xmlns:dc="http://purl.org/metadata/dublin_core" xmlns:oebpackage="http://openebook.org/namespaces/oeb-package/1.0/" xmlns:opf="http://www.idpf.org/2007/opf" >
<dc:title>残水滸</dc:title>
<dc:creator>程善之</dc:creator>
<dc:Language>JA</dc:Language>
</dc-metadata>
<x-metadata>
<output encoding="utf-8" />
<EmbeddedCover>a.jpg</EmbeddedCover>
</x-metadata>
<meta name="primary-writing-mode" content="vertical-rl">
</metadata>
<manifest>
<item id="item1" media-type="text/x-oeb1-document" href="a.html" />
<item id="toc" properties="nav" href="a.nav.html" media-type="text/x-oeb1-document" />
</manifest>
<spine page-progression-direction="rtl" toc="ncx">
<itemref idref="item1" />
</spine>
<tours>
</tours>
<guide>
    <reference type="cover" title="Cover Page" href="a.jpg" />
    <reference type="toc"   title="Table of Contents" href="a.html#000-3" />
    <reference type="text"  title="Start Page" href="a.html#000-1" />
</guide>
</package>

a.nav.html(電子書籍リーダ向け目次)

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
<nav epub:type="toc" id="toc">
<ol>
<li><a href="a.html#071">第七十一囘 玉麒麟夢魂驚草莽 智多星妙語穏英雄</a>
    <ol>
        <li><a href="a.html#071_001">話説盧俊義夢中...1節目</a></li>
        <li><a href="a.html#071_002">不多一會、呉軍...2節目</a></li>
    </ol>
</li>
<li><a href="a.html#072">第七十二囘 刧軍餉林武師遇友 念庭&#38344;公孫勝歸山</a></li>
<li><a href="a.html#073">第七十三囘 呉加亮議打&#20823;州府 燕小乙組合軍官團</a></li>
</ol>
</nav>
</body>
</html>

そしてコマンドラインから

kindlegen a.opf

できたできた。最低限必要なのがわかったら自動化も目処がつくな。
これでkindleストアに登録できるかどうかは知らない。 (その後やってみたら登録できた)
まぁでも電子書籍リーダとかいっても、要するに読書に特化したブラウザなんだな。
kindlekindleだけで通用する要素とか用意してるのも昔IEだけで使える要素があったりしたようなもんだろ?そのうち規格にうるさい奴とか出てきたりするんだろうな。htmlの文法が正しいかどうかチェックするツールもあったしなぁ。歴史は繰り返すのか...