Wordのライセンスを持っていないが、Wordファイル(docx)を作りたい…
でもドキュメント自体はマークダウンで書きたいし、レイアウトが気になった時は整えたい…
こんな時の対応方法についてです。
※環境はmacOS Sonoma (M3)ですが、コマンドを読み替えれば別のOSでもできるはずです。
概要
Pandocを使い、md → docxの変換を行います。
この時レイアウト調整が必要であれば、LibreOfficeを使ってレイアウト参照のファイルを準備することで、変換時にそのレイアウトで出力できるようにします。
Pandocとは
マークアップ形式のファイル(HTML, YAMLなど)を、様々な形式に変換するためのツールです。
入力・出力共に多様な形式のファイルが使えます。詳しくは日本語ガイドを確認してください。
md → docxに変換する
まずはPandocを使って変換します。
Pandoc で変換手順
Homebrewでインストールできます。
brew install pandocその後、pandocコマンドで入力ファイルと出力先を指定すれば変換は実現できます。
pandoc path/to/input-file.md --output=path/to/output-file.docxレイアウトもそれっぽく出力してくれるので、これで問題なければ終わっても大丈夫です。
出力ファイルのレイアウトを整える
とはいえ、一番大きい見出しはこのフォントサイズにしたい…など、整えたい場合があります。
そこで、Pandocでは以下のように、変換実行時にレイアウト参照用のファイルを--reference-docオプションで指定することができます。
これにより、スタイル定義を読み取り、出力ファイルに同じようにスタイルを適用することができます。
pandoc path/to/input-file.md --output=path/to/output-file.docx --reference-doc=path/to/custom-reference.docxただ無料で使えるMicrosoft 365 OnlineのWordでは、試してみる限りファイルのスタイル定義の編集が出来なさそうでした。
そこでOSSのLibreofficeを使ってこのレイアウト参照用のファイルを編集して整えていきます。
Libreofficeでレイアウト参照用ファイルを作成する
まずはLibreOfficeをダウンロードしてインストールします。
download | LibreOffice
次にPandocでレイアウト参照用の元となるファイルを出力します。
pandoc --output=path/to/custom-reference.docx --print-default-data-file reference.docx※--reference-docを指定しない場合は、このコマンドで出力されるファイルのレイアウトがデフォルトとして適用されているようです。
そして出力されたcustom-reference.docxをレイアウト参照用のファイルとして、スタイル定義を変更していきます。
LibreOfficeで開き、Styles → Manage Styles よりファイル内のスタイル一覧を表示します。

Pandocで使われるスタイルの一覧は以下に定義されています。
Pandoc User’s Guide 日本語版 | 特定のWriterに関するオプション
※--reference-doc=FILE 部参照
この一覧とマークダウン記法の対応関係を確認したところ、以下の通りとなっていました。
マークダウン記法と対応があるスタイルで、変えたいものを編集していけばよいです。
※対応するマークダウン記法列が?のところは、変換元がマークダウンの時は使われないものだと思われます。
※Pandocで使えるマークダウン記法については以下の記事を参照ください。
Paragraph Style(段落スタイル)
| スタイル名 | 対応するマークダウン記法 |
|---|---|
| Normal (標準) | ? |
| Body Text (本文) | 見出しの後の最初の段落を除く文章 |
| First Paragraph | 見出しの後の最初の段落 ※Body Text (本文) と同じスタイル設定にするのが良さそう |
| Compact | リスト 番号付きリスト チェックボックスリスト 表内の値 |
| Title (表題) | メタタグtitle |
| Subtitle (副題) | メタタグsubtitle |
| Author | メタタグauthor |
| Date | メタタグdate |
| Abstract | メタタグabstract |
| Bibliography | --bibliographyオプションを使って出力する時? |
| Heading 1 (見出し1) | #での表記部 |
| Heading 2 (見出し2) | ##での表記部 |
| Heading 3 (見出し3) | ###での表記部 |
| Heading 4 (見出し4) | ####での表記部 |
| Heading 5 (見出し5) | #####での表記部 |
| Heading 6 (見出し6) | ######での表記部 |
| Heading 7 (見出し7) | #######での表記部 |
| Heading 8 (見出し8) | ########での表記部 |
| Heading 9 (見出し9) | #########での表記部 |
| Block Text (ブロック) | 引用部 |
| Footnote Text | フッター部 ※脚注で使われる |
| Definition Term | ? |
| Definition | ? |
| Caption | Table Caption, Image Caption の親スタイル |
| Table Caption | 表の見出し |
| Image Caption | 画像リンク |
| Figure | ? |
| Captioned Figure | ? |
| TOC Heading | ? |
Character Style(文字スタイル)
| スタイル名 | マークダウン記法 |
|---|---|
| Default Paragraph Font | ? |
| Body Text Char | ? |
| Verbatim Char | インラインコード コードブロック |
| Footnote Reference | ? |
Internet Link | ハイパーリンク ※ユーザガイドにはHyperlinkとあるが、reference.docxにはInternet Linkしか定義されていなかった |
| Section Number | ? |
スタイルの仕様について
スタイルには親子関係があります。
例えばParagraph Styleの大半のスタイルは以下の通りDefault Paragraph Style を継承していたりします。

なので、フォントなど共通的な内容を設定したい場合は、必要に応じてその親を変更してやるなどすると良さそうです。
ただ、Heading1などフォントがその子スタイルに定義されている場合は、親を変更しても変わらなかったりするので注意が必要です。
LibreOfficeを使う方法の制約事項
上記の方法であらかたスタイルを整えることができるのですが、表のスタイルだけは整えることができません。
Pandocでは表のスタイルを指定する方法は提供されており、Tableのスタイルを編集すればいいと、公式ガイドの--reference-doc=FILE部に記述があります。
LibreOfficeでもTableのスタイルを指定できるように見えるのですが、

これはスタイルをファイル自身に定義する機能ではなく、クリックした時にその設定通りの見た目に変えるという機能のためです。
参考: How do I add own template styles to tables? – English – Ask LibreOffice
Wordでは表のスタイルをファイル自身に定義できるので、こんな問題は起きないのですが、LibreOfficeを使うなら何らか回避手段が必要となります…
編集したレイアウト参照用ファイルのスタイルを出力ファイルに適用する
レイアウト参照用のファイルの編集が完了したら、冒頭で提示した以下のコマンドで出力すれば、編集したスタイルが適用されてoutput-file.docxが出力されます。
pandoc path/to/input-file.md --output=path/to/output-file.docx --reference-doc=path/to/custom-reference.docx


