日本語MarkdownをPandocで印刷用に変換する方法

テキスト主体だけど最終的には印刷できる形式にしないといけない文書を、Markdownで書きたくなり、試した結果をまとめておきます。テキストエディタ使いが、会議の議事録をWordやPDFで配布しなくてはいけない場合などに便利だと思います。

ツールの選定: Pandocでdocx出力

Markdownの整形に関して検索すると、まず出てくるのがPandocというツールです。Markdownをはじめとする、各種のテキスト形式を入力して、HTML・Wordファイル・LaTeX・PDFといった多数の形式に出力することができます。
ただ、PDFに変換するにはLaTeXを経由する必要があります。
自分は学生時代および社会人初期に、かなりLaTeXを使っていたのですが、この目的だけのために15年ぶりぐらいでTeX環境を選定・構築する気になれず、Wordファイル(docx形式)に出力して、そこで印刷やPDF変換をすることにしました(Word2007以降なら、単体でPDFとして保存可能)。

Pandocのインストール

Pandocは、公式サイトでWindows用・MacOS X用のバイナリが入手できます。2014年12月の1.13.2からは、64bitのDebian/Ubuntu用バイナリも配布しているようです。下記ページで必要なバージョンを探して、説明文末尾にあるダウンロードボタンをクリックしてください。
https://github.com/jgm/pandoc/releases
ダウンロードしたファイルをダブルクリックするなどしてインストールした後、コマンドラインでpandocコマンドを実行すると下記のようになります(Markdownで文書を作ろうという方には、コマンドラインの説明は不要ですよね)。

$ pandoc --version
pandoc.exe 1.13.2
Compiled with texmath 0.8.0.1, highlighting-kate 0.5.11.1.
Syntax highlighting is supported for the following languages:
(以下省略)

Pandocでdocxを出力する方法

テキストエディタで適当なinput.mdファイルを作成した後、コマンドラインで下記のように指定するとdocxファイルが生成されます。

$ pandoc input.md -o output.docx

-oオプションは、出力するファイル名を指定するオプションですが、Pandocはこの拡張子を見て、出力形式を適切に変更してくれます。生成されたoutput.docxは、MS Wordで見ることができます。
とはいえ、文書作成中にいちいちWordを起動するのは面倒なので、自分は下記のようにしてHTML出力した結果を眺めて、自分が意図した通りに書けているかどうか確認しています。

$ pandoc input.md | less

Wordファイルのスタイルを変更する方法

Wordファイルをとりあえず作るだけなら、上記のようにごく簡単なのですが、標準のdocxファイルのスタイルは、紙の大きさがA4ではなくレターサイズだったり、見出しが黒ではなく青色だったりして、イマイチです。
この場合、Pandocの--reference-docxというオプションで、ベースにするdocxファイルを指定することができます(指定したファイルの中身は捨てられて、スタイルだけが利用されます)。
ベースにするdocxファイルは、ゼロから作るより、Pandocで生成したファイルを、MS Wordで自分の好みにスタイル変更して保存したものを使うのが簡単です。
詳しくはThe Hackademicというサイトの下記記事が参考になります。
http://hackademic.postach.io/pandoc-and-academic-docx-files

改行が空白に変換されないようにする方法

日本語テキストを書くとき、下記のように、読みやすさを考慮して、ある程度のところで改行するのが一般的です。

日本語テキストを書くとき、このように、読みやすさを考慮して、
ある程度のところで改行するのが一般的です。

しかし、PandocのMarkdown処理では、改行は空白に変換されてしまい、下記のようになります(HTMLに出力した例)。

<p>日本語テキストを書くとき、このように、読みやすさを考慮して、 ある程度のところで改行するのが一般的です。</p>

ブラウザ上だとあまり気にならないかもしれませんが、Wordファイルに出力すると、かなり気になります。
結論としては、この、改行を空白に変換する動作は、Pandoc Markdown形式のignore_line_breaksという拡張機能をonにすると抑制できます。指定方法は、下記のようになります。

$ pandoc -f markdown+ignore_line_breaks input.md -o output.docx

前節のベースdocx指定と組み合わせると、下記のようになります。

$ pandoc -f markdown+ignore_line_breaks --reference-docx=reference.docx input.md -o output.docx

なお、この指定をしても、箇条書きの継続行先頭の空白(下記のようなもの)は残ってしまうようです。

- 箇条書き
  1個目
- 箇条書き2個目

自分はまだ、これが気になるほどPandocを使い込んでいないのですが、気になる方はリクエストするといいかもしれません。ignore_line_breaksが実装された下記のやり取りでは、リクエストから3日で実装されてます。
https://groups.google.com/forum/#!topic/pandoc-discuss/PT0Uf5frMuM