読者です 読者をやめる 読者になる 読者になる

Kobo Touchで目次画面の現在地が後方にズレる問題の対策

Kobo TouchはどうやらEPUBの目次に全てのページが存在していることを前提としているようで、

metadata.opfのspine内のN番目のitemref要素を開いている = toc.ncxのN番目のnavPoint要素が現在地ねっ!

と解釈するようです。目次画面を開いたとき、現在地が後方にズレるのはこれが原因です。楽天Koboから大手出版社の小説のサンプル版をいくつかダウンロードしてみましたが、普通にズレていましたので、あまり気にする人はいないのかもしれません。(というか使ってる人がそもそもいない…?)ですが、今自分がどこを開いているのかがわからないというのは、用途によってはかなり致命的です。

ところで、自炊した画像データやPDFからEPUBを作成するにはChainLPが大変便利で、僕はこのツールでデータをEPUBに変換しています。ChainLPで作成したEPUBは、一枚の画像(を表示するためのページ)と一つのitemrefが1対1になっています。このため、データに目次を設定し、出来上がったEPUBをKobo Touchで閲覧する場合、目次の現在位置が後方に(正確には、開いているページがN番目のページであった場合、N番目の目次に)ズレることになります。悲しいことですが、悲しんでばかりもいられません。少し考えると、Kobo Touchのこの仕様への対策がいくつか思いつきました。

対策A 全てのページを目次に登録する

目次の動作がすごく遅くなり、実用上問題がありました。また、意味のある目次項目が、便宜上加えられた無意味な目次項目に埋もれてしまい、加えてその位置が不規則に分散してしまうため、非常に使いづらいです。これはやめておいたほうがよいでしょう。

対策B 目次ごとにページを統合する

要するに

ページ番号 見出し
1 表紙
2
3 まえがき
4
5 第一章
6

とある場合、

ページ番号 見出し
1, 2 表紙
3, 4 まえがき
5, 6 第一章

のようにセクションごとにページをまとめてしまうわけです。この方法が今のところ最良だと思います。ページ送りも問題なく行え、またセクション内のでページ送りは、単一のページに格納する場合より高速なようです。 ChainLPで作成したEPUBに、この変更を施すスクリプトが以下です。

ところで、Kobo Touchで目次を使って別の位置にジャンプしたあと、”戻る”的な操作がうまく動作しないのはどうしてなんでしょうね…? しかたなく毎回しおりを挟んで、あとでそこに戻っていますが…。不便!