今日も微速転進

ここではないどこかへ

PandocでEPUBを作る(試行錯誤メモ)


スポンサーリンク

あまり凝ったことをやらないなら結構手軽でいいかも知れない。

前提

  • macOS/Pandoc
  • 元データはMarkdownとする
  • ルビとか傍点とか下線とかはそういうのは考慮しない

CSSで頑張ればいけるだろうけどしんどそう。そもそもビューワーがどこまで対応しているのかはっきりしない。

Pandocのインストール

macOSではHomebrew経由でコマンド一発。

$ brew install pandoc

ソースファイル

サンプルとして以下のようなファイルを変換する。

pandocによるepub生成用のサンプルファイル

最初の2行はメタデータ。別ファイルに分割してもいいし、yaml形式にしてもいい。

詳細は以下を参照。

ePubの生成

基本

$ pandoc -f markdown sample.md -o sample.epub

指定しない場合はepub3形式のようです。

各種オプション付き

$ pandoc -f markdown  -t epub2 -o test.epub title.txt test.md 
 --epub-cover-image=cover.jpg \
--css=pandoc.css \
--epub-metadata=metadata.xml \
--toc  --toc-depth=2

カバー画像は縦長の画像(縦横比が黄金比白銀比がベター)を用意する。

pandoc.cssはpandocのリポジトリdataディレクトリにあるもの。メタデータファイルはリンク先参照。

Kindle化するうえでの注意 (2018/09/09 追記

title.txt--epub-metadataで指定しているファイルの両方でtitleを指定しているとkindlegenコマンドでエラーとなる。

Error(opfparser):E20006: There are more than one title defined in OPF metadata. But none of them is refined with "title-type" as "main" title. Refer http://idpf.org/epub/30/spec/epub30-publications.html#sec-opf-dctitle for more info.

その場しのぎ的には--epub-metadataの引数に指定するファイル側でtitleを削っておく。

目次

--tocオプションを使う。目次に含める階層は--toc-depth=Nで調整できる。

ファイル分割(内部)

基本は内部で1チャプターごとに1xhtmlファイルとなるが、オプションで調整できる。

--epub-chapter-leve=2とすると、セクション(見出しレベル 2)単位でxhtmlファイルとして分割される。

epub形式の正体はzipファイルなので展開すると確認できる。

セクション番号の追加

--number-sectionsオプションを使用。

セクション番号の非表示

見出しにunnumberedクラスを指定するとセクション番号が付加されなくなる。

# 見出し {.unnumbered}

もしくは下記の記法も可。

# 見出し {-}

目次の部分はxhtmlのリスト要素なのでCSSで番号を振らないようにする。適当なCSSを流用する場合は注意する。

コードハイライトのオプション

--highlight-style=。指定可能な値はpygmentsなど。スタイルシートに依存。

相互参照など

未検証。フィルタ機能か拡張機能でできるみたいだが面倒なのは変わらないのでは。

Pandoc Filters · jgm/pandoc Wiki · GitHub

課題など

見出し名のナンバリング規則のカスタマイズ

付録ページだけセクション番号をいじるとかそういうのは厳しいかも。 template機能があるのでそれでいけるか?

Markdownからtemplateを使ってMarkdwonを生成できるので場合によっていは2段階で変換するのもありかも。

凝ったレイアウトにしたいならおそらくTeX形式を経由するかRe:View形式。Markdownを適当なスクリプトでパースする?

電子書籍とナビゲーション

EPUBのナビゲーションを理解しよう

情報源

広告