MarkdownドキュメントをWordに変換するPandocで、独自スタイルが使えない

ふと、Markdownで書いたドキュメントをMicrosoft Office Wordに自動変換してくれるツールがないかなぁ…と思って検索したら、ありました

おぉ……! 対応しているフォーマットが、めっさ多様です。これだこれだ! ただし、まさかのHaskell製。

3日前にマイナーバージョンアップされていて、開発継続中です。ダウンロードサイトGoogle Projectですが、現在のコードはgithubホスティングされています。いい感じ。

と、喜んだのもつかの間、触ってみると、テンプレートの参照が上手くいきませんでした。

未解決ですが、やったことをメモします。

環境

インストール

インストーラ(pandoc-1.9.4.2b-setup.exe)を次のページからダウンロードします。

実行するだけ。インストール中に、PATHも通してくれます。

入力ファイルの準備

Markdownで記述した20121015_input.txtを用意します。

# hogeプロジェクト構成管理計画書

R0.1

最終更新日: 2012/10/15

## 目的
本ドキュメントの目的は、あれをこうしてなにすることである。対象読者は、ほげもがを担当する者とする。

## 関連ドキュメント
* hogeプロジェクト変更管理手順書
* hogeプロジェクト構成管理手順書

中身もファイル名も、テキトーに。任意のフォルダに置きます。

動作確認(HTML出力)

まずは、htmlに変換してみます。

入力ファイルを置いたフォルダに異動して、実行。

pandoc -o output.html 20121015_input.txt

次のようなoutput.htmlが、カレントディレクトリに生成されました。

<h1 id="hogeプロジェクト構成管理計画書">hogeプロジェクト構成管理計画書</h1>
<p>R0.1</p>
<p>最終更新日: 2012/10/15</p>
<h2 id="目的">目的</h2>
<p>本ドキュメントの目的は、あれをこうしてなにすることである。対象読者は、ほげもがを担当する者とする。</p>
<h2 id="関連ドキュメント">関連ドキュメント</h2>
<ul>
<li>hogeプロジェクト変更管理手順書</li>
<li>hogeプロジェクト構成管理手順書</li>
</ul>

Validには程遠いけれど、headを前につけて、bodyでサンドするスクリプトを書けば、使えるでしょうか。

動作確認(Wordファイル出力)

続いて、本命のdocxに出力します。

pandoc -o output.docx 20121015_input.txt

Wordで開けるdocxファイルが、生成されました。

見出し1のフォントは、Calibri、18pt、見出し2のフォントは、MS ゴシック、16ptになっていました。

このドキュメントには、reference.docxというデフォルトテンプレートの書式(スタイル)が適用されているようです。reference.docxは、Pandocをインストールしたルートフォルダに、最初から入っていました。

Wordファイル出力のスタイル変更でハマる

さて、ユーザドキュメントを見ると、docxに適用するスタイルを変更できるようです。

ということは、Markdownで書いたドキュメントを、プロジェクト標準のスタイルを適用したWordファイルに変換することも、できるわけです。上手く動いてくれれば。

スタイルファイルを指定するには、次のオプションを使います。

pandoc --reference-docx=reference_copy.docx -o output.docx 20121015_input.txt

reference_copy.docxが、独自のスタイルファイルですね。

しかし、試したところ、上手くいきませんでした。スタイルが何も設定されていない、プレーンな(?)Wordファイルが生成されてしまいます。

検索すると、同じ問題で困っている人たちがぞろぞろ。

(ツラいけどemacsでdocxを編集しよう!とか言いだす人までいて、カオス)

ここから先は、何をやってダメだったか、という実りのない話なので注意です。

  1. デフォルトのreference.docxから生成されたdocxを、Wordで編集して、新規テンプレート用に名前をつけて保存し、指定した。→失敗
  2. reference.docxをカレントフォルダにコピーし、Wordで編集して上書き保存し、指定した。→失敗
  3. reference.docxをカレントフォルダにコピーし、OpenXMLエディタで編集して上書き保存し、指定した。→失敗
  4. ルートフォルダのreference.docxを、編集済みスタイルファイルに置き換えた。→失敗

3番目だけ、初めてのことをしたので、少し詳しく備忘を書いておきます。

reference.docxのコピーをOpenXMLエディタで編集

docxの実体はバイナリファイルではなく、OpenXML(OOXML)です。そのため、XMLを直接編集することができます。

Open XML パッケージ内で、スタイルは