PandocでEPUBを作る(試行錯誤メモ)
スポンサーリンク
あまり凝ったことをやらないなら結構手軽でいいかも知れない。
前提
CSSで頑張ればいけるだろうけどしんどそう。そもそもビューワーがどこまで対応しているのかはっきりしない。
Pandocのインストール
macOSではHomebrew経由でコマンド一発。
$ brew install pandoc
ソースファイル
サンプルとして以下のようなファイルを変換する。
最初の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
ディレクトリにあるもの。メタデータファイルはリンク先参照。
- Pandoc - Creating an ebook with pandoc
- How We Automated Our Ebook Builds With Pandoc and KindleGen | Puppet
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を適当なスクリプトでパースする?