MarkdownからWordやPDF生成ができるようにする (またはPandoc環境の構築方法)

最近は、AnsibleやServerspecで「動くサーバ設定書」が作れるようになってきたので非常に気分がいいです。

あとはドキュメント周り。なんとかしたい。

やりたいことは

  • WordやPDFって見た目はいいよね。印刷も綺麗。
    • でもmergeやdiffとか絶望的。バージョン管理してたら死ぬ。
    • Wordが苦手。
  • Markdown記法いいよね。テキストだし、書きやすい。よく使うし。
  • じゃあMarkdownからWordやPDFが生成できればいい。

という、「世の中のエンジニアの半数以上が3回は考えたのではないか?」ということです。

案の定グーグル先生に聞いたらPandocというツールがありました。

Pandoc

Pandocは「Universal markup converter」という説明のとおり、あるマークアップ言語で書かれたドキュメントを他のドキュメント形式に変換するツールです。

サンプルコマンドや結果を見ると良さそうです。

取りあえず環境構築に手間がかかったので、備忘録的にメモ。

前提

Pandocのインストール

PandocはHaskell製のツールなのでまず、Haskellの環境の構築

$ brew install haskell-platform

同時にHaskellのパッケージマネージャのcabalもインストールされるので、cabalにPATHを通します

export PATH=$PATH:/Users/k1low/.cabal/bin

cabalを利用してpandocをインストール

$ cabal update

...
Note: there is a new version of cabal-install available.
To upgrade, run: cabal install cabal-install

$ cabal install cabal-install
$ cabal install pandoc

ここまででpandocコマンドでMarkdownファイルをWord(.docx)に変換できます。

$ pandoc input.md -o output.docx

PDF出力環境のインストール

PandocでのPDF出力はLaTeXを通して実行しているので、日本語LaTeX環境を作る必要があります。

今回は日本語LaTeX環境としてLuaTeX-jaを使うことにしました。

MacTeXの最小構成をインストール

MacTeX環境を構築するMacTeXをそのままインストールすると相当大きいので、BasicTeXだけインストールします。

tlmgrというTeX用のパッケージマネージャがインストールされるので、まずはPATHを通します。

export PATH=$PATH:/usr/local/texlive/2013basic/bin/x86_64-darwin/

tlmgrで必要なパッケージをインストールします。

$ sudo tlmgr update --self
$ sudo tlmgr update --all
$ sudo tlmgr install collection-langcjk collection-latexrecommended collection-fontsrecommended

ここまででpandocコマンドでMarkdownファイルをPDF(.pdf)に変換できます。

$ pandoc input.md -o output.pdf -V documentclass=ltjarticle --latex-engine=lualatex

軽く使用してみた感想

  • やはり表操作はExcelが最強。ただ、それを諦めてでも方眼紙Excelよりかはかなり気分が良い。
  • Wordは「変換したものをそのまま納品する」という夢のようなことは難しい。
    • 逆に言えば「変換したものを体裁を整える前提」なら全然あり。
    • PDF出力のほうならLaTeXのdocumentclassを作り込んだらいけるかも。

ということで、とりあえず使ってみようかと思います。

参考URL