mdファイルをword形式に変換する -1-

仕様書をword形式で書けとうるさい。無理やりテキストで通して来たけど、外注に出す文書でフォーマットを統一する必要があったので、mdからの変換をやってみることにした。

 結論から書くと、あんまりうまくはいかなかったので、これ以下は読む必要はない。2回続くけどw

 変換は、pandocが一般的と聞いている。Haskell製の汎用ドキュメント変換ツール。

Pandoc - About pandoc
https://pandoc.org/

 OPMLの変換もできるのか、OmniOutlinerからの変換も行けそうね。

 だいぶ古いけど、日本語ドキュメントもある。

Pandoc ユーザーズガイド 日本語版 - Japanese Pandoc User's Association
http://sky-y.github.io/site-pandoc-jp/users-guide/

 インストールは、macOSでは、brewを使うのが標準のようだ。

Pandoc - Installing pandoc
https://pandoc.org/installing.html

 インストールする。

$ brew install pandoc

 ==> Downloading https://homebrew.bintray.com/bottles/pandoc-2.9.2.1.high_sierra.

 ==> Downloading from https://akamai.bintray.com/0f/0fa6bfa3d880c8dcc41a469bd60ae

 ######################################################################## 100.0%

 ==> Pouring pandoc-2.9.2.1.high_sierra.bottle.tar.gz

 ==> Caveats

 Bash completion has been installed to:

 /usr/local/etc/bash_completion.d

 ==> Summary

 🍺 /usr/local/Cellar/pandoc/2.9.2.1: 183 files, 102.9MB

 pandocの引用パーサーも入れる場合は、こんな感じ。今回は入れなかった。

$ brew install pandoc-citeproc

 バージョン情報を表示してみる。

$ pandoc --version

 pandoc 2.9.2.1

 Compiled with pandoc-types 1.20, texmath 0.12.0.1, skylighting 0.8.3.2

 Default user data directory: /Users/kinneko/.local/share/pandoc or /Users/kinneko/.pandoc

 Copyright (C) 2006-2020 John MacFarlane

 Web: https://pandoc.org

 This is free software; see the source for copying conditions.

 There is no warranty, not even for merchantability or fitness

 for a particular purpose.

 変換用のmdファイルを用意する。pandocで変換できるmd形式にはいくつかあるようだ。

 markdown_strict ベーシックなMarkdown

 markdown pandoc拡張のMarkdown

 commonmark CommonMark Markdown

 gfm GitHub-Flavored Markdown

 markdown_mmd MultiMarkdown

 markdown_phpextra PHP Markdown Extra

 基本的なマークダウンでは、あんまり表現が多彩ではないので、pandoc拡張のMarkdownを使ってみることにする。

Pandoc - Pandoc User’s Guide
https://pandoc.org/MANUAL.html#pandocs-markdown

 こんなmdファイルを用意してみた。

 ------------------------------------------------------------------------------

 % タイトル

 % 著者1; 著者2

 % 日付

 # ヘッダ1

 本文ほにゃらら[^1]という脚注。

 [^1]ヘッダ前には空行は必須

 ## ヘッダ1.1

 記号付きリスト

 * リスト1

 * リスト2

 インデントはスペース4つ

 さらにインデント

 ### ヘッダ1.1.1

 順序付きリスト

 1. リスト1

 2. リスト2

 #### ヘッダ1.1.1.1

 テーブルの前には空行必須。

 +---------------+---------------+--------------------+

 | なんとか | かんとか | だよね |

 +:=============:+==============:+:===================+

 | なんか | おなかが | - すいた |

 +---------------+---------------+--------------------+

 | とても | のどが | - かわいた |

 +---------------+---------------+--------------------+

 ##### ヘッダ1.1.1.1.1

 段落ほにゃらら

 ###### ヘッダ1.1.1.1.1.1

 段落ほにゃらら

 ####### ヘッダ1.1.1.1.1.1.1

 段落ほにゃらら

 ####### ヘッダ1.1.1.1.1.1.1.1

 段落ほにゃらら

 ######## ヘッダ1.1.1.1.1.1.1.1.1

 段落ほにゃらら

 # ヘッダ2

 強制改行は末尾にスペース2つ

 改行されたかな?

 最後には改行はいらない

 ------------------------------------------------------------------------------

 変換する。一瞬で終わってしまった。

$ pandoc md_data.md -o word_format.docx
$ ls -lha word_format.docx

 -rw-r--r-- 1 kinneko staff 10K 4 1 14:00 word_format.docx

 SlackのWordプレビュー機能で見てみる。なんだこれ... 失敗。

 エディタの設定で改行がCRだけになっている。改行設定をCR+LFにしないとダメかな。落とし穴っぽい。

 改行コードを変更したらうまくいったようだ。同じくSlackのプレビューで見てみる。

 表がうまくいっていない。

 うーん、そのまま使うことはできないな...

 指定の文書フォーマットを使いたい場合は、テンプレートを指定することができる。

 作った文書のテンプレートを、Wordでテンプレート(.dotx)として保存する。ドキュメント¥Officeのカスタムテンプレート以下に保管される。

 今回はめんどくさいので、MSの配布しているテンプレートの中から「ビジネス文書」をダウンロードして使ってみる。

ビジネス文書
https://templates.office.com/ja-jp/%e3%83%93%e3%82%b8%e3%83%8d%e3%82%b9%e6%96%87%e6%9b%b8-tm16392933

 tf16392933.dotxがダウンロードされた。先程のサンプルmdにテンプレートを指定して変換してみる。

$ pandoc md_data.md --reference-doc=tf16392933.dotx -o word_format.docx

 念の為、こんどはwordで開いてみた。

 それを、PDFにして画像化してみたが、罫線が再現されていないな。縦棒とか寄せがおかしいが、word上では罫線は表示されている。

 ダメな感じで使えない機能が多かったようだ。テーブルは崩壊。著者と日付は未定義のようだ。テンプレートで未定義のヘッダはそのまま表示されてしまうようだ。脚注とリストが展開されていない。

 十分とは言えないがないよりはマシ... なのかなぁ...

 期待したのと違って、だいぶ残念な結果だった。テンプレートとのあいだで、だいぶマッチングをしっかり設計しないとうまくいかないようだ。

 pandocでmd/word変換、使う人があまりいないわけだw

 これなら、docxをunzipして、word/document.xmlを直接変換するパーサーを作ったほうがよさそうな気がしてきてしまう。


オリジナル投稿:
mdファイルをword形式に変換する -1-|kinneko|pixivFANBOX
https://kinneko.fanbox.cc/posts/932644