09 June 2015

    無料で出版してもダウンロードさえして貰えないと聞くけど

     最近自分が購入する本に占める電子書籍の割合が高くなってきました。単に購入する電子書籍の数が増えてきているだけでなく、昔は購入する電子書籍といえばマンガや雑誌のようなどうでもいいと思える本が多かったのに、最近は何度も読み返すようなお気に入りの技術系の本の中に電子書籍が混じっています。そして、電子書籍に触れる機会が増えてきたのと出版へのハードルが下がってきたこともあって、電子書籍を作るほう(出版)にも興味が湧いてきました。でも、原稿用紙に鉛筆で文章を書いて出版したいわけじゃなく、今このブログを書いているスタイル(markdownで書く)のまま書いたものを流用したいという拘りがあります。
     だから、書きたいことはあるけど、わざわざMacのpagesを使ったりWindowsの一太郎を使ったりネット上のサービス1を利用してepubファイルを作成して出版したいわけじゃないってことです。こういう方法論に拘るタイプは作家としては大成できないことは分かっていますが、あくまでmarkdownファイルを元にして電子書籍出版するにはどうすればいいのか、最近試行錯誤したことを書いてみたいと思います。

    markdownから電子書籍ファイルに変換する色々な方法

    1. markdown-pdfコマンドで変換しPDF出力
      markdown-pdfコマンドを使用してPDFファイルに変換します。CSSも使えるし改ページ処理も可能です、リンクが有効に出来ないようなので目次が使えません。でも、左サイドにサムネイル表示すれば不要な気もするので、PCで読むことだけを考えるのならこれでいいような気もします。
      例.
      npm install -g markdown-pdf
      markdown-pdf -f 'A4' -s github.css hoge.md -o hoge.pdf

    2. pandocで変換、PDF出力
      ややこしいLaTeXのclsファイルを弄りながらpandocでPDFを出力してみましたが、文字化けしたりよくわからないトラブルに見舞われましたので自分としてはお勧めしません。
      例1.
      pandoc hoge.md -o hoge.pdf -V documentclass=myltjsarticle --latex-engine=lualatex
      例2(一度TeXに変換してからPDFに変換)
      pandoc hoge.md -f markdown_github -o hoge.tex
      pandoc hoge.tex -o hoge.pdf -V documentclass=myltjsarticle --latex-engine=lualatex

    3. pandocで変換、epub出力
      ほぼ満足のいく出来でしたが強制改ページの方法がわからないのと、epubcheckでエラーが出て原因がわからないので使うのを止めました。
      例1.
      pandoc -t epub3 -o hoge.epub title.txt hoge.md -s --mathjax --epub-cover-image=images/title.png --epub-stylesheet=github.css --epub-metadata=metadata.xml
      例2.(一度TeXに変換してからPDFに変換)
      pandoc hoge.md -f markdown_github -o hoge.tex
      pandoc -s hoge.tex -o hoge.epub

    4. epubの仕様に沿って定義ファイルを自前で用意してコンパイル(zip化)してepub出力。
      他の変換ツールを使った方法と違って、変換ツールの制限を受けないので調べながらやれば出来上がりに不満が出ることは無いと思うのですが手間がかかります。
      例.
      zip -q0X hoge.zip mimetype
      zip -qXr9D hoge.zip *
      cp hoge.zip hoge.epub
      用意するディレクトリとファイルの例
      参考サイト

    Packeage/
    ├── META-INF
    │   └── container.xml
    ├── mimetype
    ├── hoge
    │   ├── cover.xhtml
    │   ├── css
    │   │   └── stylesheet.css
    │   ├── images
    │   │   └── title.png
    │   ├── main01.xhtml
    │   ├── main02.xhtml
    │   ├── main03.xhtml
    │   ├── nav.ncx
    │   ├── nav.xhtml
    │   └── hoge.opf
    ├── hoge.epub
    └── hoge.zip
    

    PDFかepubか

     出版するための形態をどちらにするか一般的にはepubの方が正式な出版物という扱いだと思いますが、自分としては最初GumroadにPDFで公開するのが一番簡単そうだったのでそうしようと思っていたのです。でもpandocを使ってmarkdownからPDFに出力すると色々と不満が出てきたのでepubにも手を出してみたという経緯があります。pandocを使えばPDFにもepubにも出力出来るはずですが、一部の文字が化けたり、細かなトラブルに見舞われたのでPDF出力するならmarkdown-pdfを使った方が良さそうだとか、epub出力するならこのオプションが良さそうだとかいうノウハウが色々試行錯誤しているうちにわかってきました。そして、最終的には1.markdown-pdfを使ってPDF出力する、2.pandocを使ってepub出力する、3.epubの仕様に沿って自前で定義ファイルを書きepubを作成する、の3つの方法に絞りました。以下にそれぞれのメリットデメリットを書きます(不満点に書いている内容は、あくまで自分がうまく出来なかっただけで、よく理解している人がやれば可能なのかもしれません)。

        メリット 不満点
    1 markdown-pdf 簡単。PCで読むことだけを考えればこれで十分かも ・脚注が使えない
          ・数式が出せない?
          ・リンクが効かない?
    2 pandoc 多くの電子書籍リーダーで利用できるepub形式 ・epubcheck(後述)エラーの検証で手も足も出せなくなる
    3 自力epub 変換ツールの仕様やバグの制限を受けない ・markdownから直接ではなく、一度HTMLに変換する必要がある

     上記のようなファイル出力が思うように出来るか出来ないかという観点とは別に、PDFならDRMとしての簡易透かし機能が使えるとか、epubだとISBNのような識別IDをどうするのかとか手続き面のメリット・デメリット、epubだと大きな市場に投入出来るけどPDFだと電子書籍市場で不利だとかビジネス面でのメリット・デメリットもあると思います。

    epubcheckとは

     実はpandocで自分にとってはほぼ満足いくepub形式のファイルに変換できてcalibre等で動作確認も出来たのですが、AppleのiBooksだとepubcheckというepub検証ツールを通過しないと出版できないという話を聞いたので試したところ原因不明のエラーが出ました。そしてエラーメッセージだけからでは原因がわからず、いろいろ推測しながら編集してエラーの原因を探ることに疲れたので、一から自前で定義ファイルを書く(自力epub)ことにしたのです。その結果epubcheckでエラーも出ないし自分で満足のいくepubファイルが作れることはわかったのですが、markdownファイルから直接epubファイルに変換しているわけではないので不満もあります。

    java -jar ~/Downloads/epubcheck-4.0.0-alpha11/epubcheck.jar ./hoge.epub
    

    まとめ

     結局現時点での自分なりの結論はpandocに頼らずepubの仕様に沿って自前で定義ファイルを書いてコンパイルする(自力epub)のが一番良さそうだと思います。でもこの方法はmarkdownファイルから直接変換しているわけではなく、jekyll等でmarkdownからHTMLを生成し、それを定義にあわせて編集しているので一手間かかるのでまだ不満が残ります。ただこのやり方はepubで出力することを考慮しながらmarkdownの書き方を工夫するという余地もあるので、まだまだ試行錯誤が続きそうです。
     こんなことに時間を費やしているより出版したい文章を仕上げることを優先すべきなのですが、pandocの機能アップに期待しながら出版するのはもう少し先になりそうです。


    1. markdownに拘らなければAmazonやAppleや楽天ブックス以外にも個人出版を助けるネットサービスがあるようですし、変換ツールも色々あります。 



    blog comments powered by Disqus