PandocでWord出力する時にヘッダーやフッターの内容を動的に変更する

カテゴリ: r

Pandocで出力するdocxファイルに好みの書式設定などを反映するには、スタイルを設定済みのdocxファイルを用意しておき、そのファイルのパスを--reference-docオプションに指定します(以下リファレンスファイル)。スタイルのカスタマイズや作成方法は以下を参考にしてください。

新しいスタイルをカスタマイズまたは作成する by microsoft

このリファレンスファイルには書式に限らず、ヘッダーやフッターの設定も保存できます。たとえばリファレンスファイルのヘッダーに「ここはヘッダー」と書いておくと、 Pandocで出力した他のdocxファイルのヘッダーにも「ここはヘッダー」が入ります。ヘッダーやフッターの挿入方法は以下の通り。

ヘッダーまたはフッターを挿入する by microsoft

この方法で固定の文字列を挿入できました。更にPandocに入力するファイル側でヘッダーやフッターの内容を制御するには、ドキュメントプロパティという機能を使います。ドキュメントプロパティは文字通り、文書の属性情報で、著者名やタイトルなどを指します。ドキュメントプロパティは更にフィールドという形でdocxファイル内の任意箇所に挿入できます。大元のドキュメントプロパティを変更すると各フィールドの値も更新されて便利です。以下の手順に従うとヘッダーやフッターにも挿入できます。

ヘッダーまたはフッターにファイル名、日付、作成者、その他のドキュメント プロパティを追加する by microsoft

Pandocでは--metadata--metadata-fileオプション、を利用してドキュメントにメタデータを付与でき、 docx出力時にはメタデータがドキュメントプロパティ化します。入力がmarkdownの場合はYAMLメタデータブロック(フロントマター)の内容もドキュメントプロパティ化します。 Wordにプリセットされたドキュメントプロパティ以外はカスタムプロパティになります。

現在のファイルのカスタムプロパティを表示または作成する by microsoft

何がカスタムプロパティになるかとか考えるのはしんどいと思うので、最初はヘッダ・フッタのことを考えずにdocxに出力するといいでしょう。

  1. メタデータを含めた原稿を作成しdocxに出力する(--reference-docオプションは任意)
  2. 出力したdocxを編集しヘッダやフッタにドキュメントプロパティを挿入し、別名で保存しリファレンスファイル化する
    • ついでにスタイルなども設定するとよい
  3. 原稿を更新し、リファレンスファイルを--reference-docオプションに指定してdocxに出力する

ちなみにdocx -> mdなどの逆変換時にはドキュメントプロパティの一部しか反映されないので注意が必要です。 docxをunzipして中のxmlを読んでメタデータ化するといったトリックが必要になります。

Enjoy