60
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Markdownをpandocでwordへ変換するためのテンプレート作成

Last updated at Posted at 2019-04-15

はじめに

 VScode(or Atom)で**Markdownを作成して、PDFHTMLに変換するのが当たり前の世の中になりつつあります。
 作成した文書の納品先によっては、
Word(Microsoft Office)にしてくださいと注文を受けることがあります。
 そんな時に便利な、
pandocは非常に重宝します。コマンド一発でmdファイルdocxファイルに変換してくれます。
 この時、テンプレートを指定しないで、MarkdownをWordに変換するとWordの
デフォルトの書式**が設定されます。
 ちぃとおもしろくないですね、納品先のヘッダーやフッター、段落、文字フォントなど、納品先のテンプレートをあらかじめ用意しておき、mdファイルをdocxファイルへ変換すると、納品物のできあがりとなるわけです。

前提

  • Windows 7 以上のOS
  • VSCode(Visual Studio Code)インストール済み
  • pandocの「Windows用の最新のインストーラーをダウンロードする」からインストーラーをダウンロードして、インストール済み
  • Microsoft Office Wordがインストールされている

※1 VSCodeの拡張機能、vscode-pandocは使用しません
※2 Microsoft Office Word 2010で検証

Wordテンプレート操作

復習です。

  • Wordテンプレートフォルダー下記のフォルダーに準備します。
    C:\Users\ユーザ\AppData\Roaming\Microsoft\Templates
  • Wordテンプレートを作成(reference.dotx)
    ヘッダー:{左, 年月日(和暦)},{右,Qitta(png)}
    2019-04-15-15-58-00.png
    フッター:{上, 二重下線(png)},{中央, ページ番号}
    2019-04-15-16-02-00.png
    ファイル→名前を付けて保存→名前をreference→Wordテンプレート(*.docx)を選択して
    C:\Users\ユーザ\AppData\Roaming\Microsoft\Templatesに保存
    2019-04-15-13-54-00.png
  • Wordテンプレートから新規docxを作成
    ファイル→新規作成→マイテンプレート→新規作成
    2019-04-15-16-15-00.png
    テンプレートのヘッダーとフッターが反映した1ページが開きます。
    2019-04-15-16-20-00.png

サンプルMarkdownをつくります。 (sample.md)

「Qiitaとは」「Qiitaへの思い」から引用しました。

# Qiitaとは
Qiita (キータ) は、プログラマのための技術情報共有サービスです。

プログラミングに関することをどんどん投稿して、知識を記録、共有しましょう。Qiitaに投稿すると、自分のコードやノウハウを見やすい形で残すことができます。 技術情報はテキストファイルへのメモではなく、タグを付けた文章、シンタックスハイライトされたコードで保存することで初めて再利用可能な知識になる、そうQiitaでは考えています。  

# Qiitaへの思い
# 「なぜQiitaをつくったのか」<br>再利用性・汎用性の高い情報が集まる場をつくりたい
Qiitaをつくったきっかけは、プログラミングをやっていて、バグやエラーが出た時に簡単に解決したいと思った個人的な体験がきっかけです。当時(2012年)はプログラミングに関する困りごとが解決できるような場というのは、個人のブログがほとんどで、必要な情報を得ることは簡単ではありませんでした。  

プログラミングで「何かしらの困りごとを解決したい」と思った時に、「ここを見ればいい」という利用価値の高い情報を集めている特定の場がなかったんです。だったらそういった場をつくろう、と思いました。ですので、「再利用性・汎用性の高い情報が集まる場をつくる」というのは、いまでもQiitaの開発や運営で意識している点です。  

~以下略

いざ、From Markdown To Word(docx)

VSCodeのターミナルに以下のコマンドを入力して、pandocがインストールされているか確認します。
下記の例は、pandocのバージョンが 2.7.2となっています。

PS C:\Users\~\> pandoc --version
pandoc.exe 2.7.2
Compiled with pandoc-types 1.17.5.4, texmath 0.11.2.2, skylighting 0.7.7
Default user data directory: C:\Users\~\AppData\Roaming\pandoc
Copyright (C) 2006-2019 John MacFarlane
Web:  http://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.

ディレクトリをsample.mdのあるディレクトリに変更しておきます。

PS C:\Users\~\> dir sample.md

    ディレクトリ: C:\Users\~\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        2019/04/15     16:42          0 sample.md

pandocのマニュアルでは、mdファイルからdocxファイルへのテンプレートを使用したコマンドは下記となっています。

pandoc Markdownファイル.md --reference-doc=テンプレート.dotx -o Wordファイル.docx

このとおりに入力すると、reference.dotxがないと怒られます。

PS C:\Users\~\> pandoc sample.md --reference-doc=reference.dotx -o sample.docx
pandoc.exe: reference.dotx: openBinaryFile: does not exist (No such file or directory)

実際は、reference-docのテンプレートにフルパスを付ける必要があります。
テンプレートの格納先のディレクトリを指定します。

pandoc sample.md --reference-doc=C:\Users\ユーザ\AppData\Roaming\Microsoft\Templates\reference.dotx -o sample.docx

これで、sample.docxができあがりました。
※ スタイルの変更でモダンにしているので、見出し1(#)は青の背景が付きます。
2019-04-15-17-05-00.png

まとめ

 MarkdownはIT業界の標準ドキュメントになるのは間違いありません。
 Webドキュメントを記述できるドキュメントのなかでこれほど劇的な進化をとげたものは存在しないと思います。
 すべてをmdファイルで納品できないところが、IT業界の混沌としたところです。
 とりあえず、Markdownからpandocを使ったWord変換の簡単な例をのせてみました。
 たぶん、直接、docxファイルを生成するとかもありですが、テンプレートはWordで作ったほうが簡単です。
以上、参考までに

60
71
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?