ARMERIA

通信とWeb技術とRubyとゲーム制作と

PandocでMarkdownからPDF化を試してみた

最近、やれ社内向けの説明資料作りだ、やれ雑用だ、という感じで、仕事で開発っぽいことができていません…

社内資料ではExcelPowerPointを使わないと一部のオジさん達が嫌な顔をするので(何故かWordは使わない)、ファイル名に日付入れてメールで送るみたいな儀式をやっていますが、開発文書くらいはplaintextベースで作ってgitで管理・メンテしたい!ということで、過去の遺産をMarkdown化する作業をこそこそと少しずつ進めています。

んで、Markdownで書いたものをPDF化する際に、試してみたのがPandocです。

Pandocについて

Pandocは異なる形式のドキュメントやマークアップ言語を変換することができるツールです。HTML、Markdown、LaTeX、そしてWordのdocxファイルなども対応しています。

Pandoc - About pandoc

ここに書いてるグラフ、これを作る意味があるのかは分からないけどなんとなくすごさは伝わってくる。入力docxで出力Markdownとかもできるみたいだけどどうなるんだろう。

MarkdownからPDF化する、という点に限って言うと、利点は

  1. インストールが楽(Pandocだけ、ならば)
  2. コマンド一発で変換できる
  3. Markdownを章や節ごとに分割して、結合してPDF化、みたいなことができる

などなど。逆に欠点は、

  1. PDF化するには別途LaTeXをインストールする必要あり。
  2. 仕上がりにLaTeXの癖が出る。スタイルをカスタマイズするのにはLaTeXの知識が必要。
  3. ちょっと変換に時間がかかる。

とかかな。

手順

環境は会社でWindows 7でやって、自宅でWindows 8.1で試しました。

Pandocをインストール

Releases · jgm/pandoc · GitHub

最新のリリースノートの末尾から自分の環境に合ったものをダウンロードします。今回はWindowsなのでmsiを選択。立ち上げて特に問題なくインストール。

パスは自動で通ってくれるものの、コマンドプロンプトに反映されてくれない場合があるようです。GitHubのIssueを見ると、環境変数の設定画面を開けばいい、みたいなことも書いてありますが、自分は1回アンインストールしてインストールし直すとなぜか上手くいきました。

コマンドプロンプトを立ち上げて

>pandoc -v

でバージョン表記が出ればOKです。

LaTeXインストール

PDF化のために必要なLaTeXをインストールします。自分は学生時代にずっとLaTeX使ってた影響で、入社1年目の時はLaTeXで技術文書書いてたので、既に入ってました(きっと周りからは変人と思われていたでしょう…)

Microsoft Windows - TeX Wiki

新しく入れる場合はこちらを参考に。W32TeXTex Liveの2通りが紹介されてますが、TeX Liveのほうが多分かんたんです。LaTeXインストールだけでわりと時間かかりますががんばりましょう。

Markdownをごりごり書く

今回は、複数ファイルに章を分割して書く、というのをやってみます。結合してからPandocに食べさせても別にいいのですが、Pandocなら変換時に結合することができます。今回はファイル名を次の2つとします。

  • 01_hoge.md
  • 02_fuga.md

PDFを作ってみる

基本コマンドは

>pandoc 01_hoge.md 02_fuga.md -o test.pdf

こんな感じです。(ファイル名ベタ書きなのがちょっとダサいですが、bash等と違い、*.mdとかで展開されないので…何かいい方法ないかな。)

ただ、このままでは文章中の日本語が消えてしまうので、オプションを付けます。

>pandoc 01_hoge.md 02_fuga.md -o test.pdf -V documentclass=ltjarticle --latex-engine=lualatex

このコマンド一発でPDFが作れます!素晴らしい。

自分はこれに加えて

  • 整形済みテキストのフォントをConsolas
  • 見出しに番号を付ける
  • 文書の最初に目次を作る

というのを指定して、以下のオプションで使っています。

>pandoc 01_hoge.md 02_fuga.md -o test.pdf -V documentclass=ltjarticle -V monofont=Consolas --latex-engine=lualatex -N --toc

.batファイルとしてリポジトリに入れておけば、ファイル名もオプションも含めてメンテできますね!

気になる点

結局は一度LaTeXにしてからPDF化しているので、LaTeXの癖が良く出ます。一番気になるのが、整形済みテキストが自動改行されない点ですね(長いコマンドとかを書いてると困る)。あと、ハイフンとかアンダースコアとかの一部の記号は、たまに変な表記になったりします(フォントを上手く選べば解決することも多い)。

LaTeXのテンプレートはちゃんとカスタマイズできるようになってるみたいなので、そっちでどうにかなる部分は直していきたいですね。

参考にしたサイト

Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association

HTML - 多様なフォーマットに対応!ドキュメント変換ツールPandocを知ろう - Qiita