Pandocでは–include-in-header引数とheader-includes変数は共存できない

カテゴリ: pandoc

ちょっとハマった。 Pandocでマークダウンファイルを変換する場合、YAMLフロントマターの設定と引数を用いた設定では、引数が優先権を持つ。で、HTMLファイルのhead要素内に記述を追加する場合は

  1. 引数に--include-in-headerを使ってファイルを指定する
  2. YAMLフロントマターにheader-includesを使って内容を指定する

の2パターンがある。ファイルを指定するか、内容を指定するか、ベツモノっぽいなと思いきや、マニュアルには

header-includes
    contents specified by -H/--include-in-header (may have multiple values) 

とあってどうやら、引数の方が強いらしい。

確かめてみよう。

まずはheader-includesを使って<script></script>を追加する。

MD=$(mktemp --suffix=".md")
echo -e \
"---
title: test
header-includes: |
  <script></script>
---" >> "$MD"
pandoc $MD --standalone
## <!DOCTYPE html>
## <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
## <head>
##   <meta charset="utf-8" />
##   <meta name="generator" content="pandoc" />
##   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
##   <title>test</title>
##   <style>
##       code{white-space: pre-wrap;}
##       span.smallcaps{font-variant: small-caps;}
##       span.underline{text-decoration: underline;}
##       div.column{display: inline-block; vertical-align: top; width: 50%;}
##   </style>
##   <!--[if lt IE 9]>
##     <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
##   <![endif]-->
##   <script></script>
## </head>
## <body>
## <header id="title-block-header">
## <h1 class="title">test</h1>
## </header>
## 
## </body>
## </html>

うまくいった。次に、追加で--include-in-headerに空ファイルを指定してみる。

HEADER=$(mktemp --suffix=".html")
MD=$(mktemp --suffix=".md")
echo -e \
"---
title: test
header-includes: |
  <script></script>
---" >> "$MD"
pandoc $MD --standalone --include-in-header="$HEADER"
## <!DOCTYPE html>
## <html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
## <head>
##   <meta charset="utf-8" />
##   <meta name="generator" content="pandoc" />
##   <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
##   <title>test</title>
##   <style>
##       code{white-space: pre-wrap;}
##       span.smallcaps{font-variant: small-caps;}
##       span.underline{text-decoration: underline;}
##       div.column{display: inline-block; vertical-align: top; width: 50%;}
##   </style>
##   <!--[if lt IE 9]>
##     <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
##   <![endif]-->
## </head>
## <body>
## <header id="title-block-header">
## <h1 class="title">test</h1>
## </header>
## 
## </body>
## </html>

<script></script>が消えた。

Pandocムツカシイ。