MarkdownファイルをPandocでHTML化する際、どのような指定が良いかを迷っていたのですが、いまのところ以下のようなオプションで落ち着きました。
$ pandoc \ --standalone \ --self-contained \ --resource-path=/path/to \ --toc \ --toc-depth 2 \ --shift-heading-level-by=-1 \ --metadata title='タイトル' \ --template=html_templates/bootstrap_menu.html \ --fail-if-warnings \ --output=${destdir}/guide.html \ /path/to/target.md
HTMLテンプレート
Pandocでは、出力フォーマットに応じたテンプレートを内包しています。
デフォルトのテンプレートはpandoc -D 'html'
で確認できます。
$ pandoc -D 'html' | head -5 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$> <head> <meta charset="utf-8" /> <meta name="generator" content="pandoc" />
テンプレートは自身でも記述可能なのですが、オシャレなテンプレートもGitHub等で公開されています。 例えば僕が使ったのはこちらのテンプレートです。
screenshotフォルダを見れば、出力されるHTMLが理解できるでしょう。
ぼくはテンプレートとしてbootstrap_menu.html
を利用しました。
以下のように、ローカルにテンプレートをダウンロードして、pandocの`--template=で指定すれば良いです。
$ curl 'https://raw.githubusercontent.com/ryangrose/easy-pandoc-templates/master/html/bootstrap_menu.html' > html_templates/bootstrap_menu.html
Table of Contents(TOC)の作成
上記のテンプレートはサイドバーに索引を表示してくれますが、この索引を生成するのが--toc
オプションです。
一方で、Markdownではトップレベルの#
がページのタイトルを構成することが多く、これを索引に表示したくないケースがあります。
このようなケースでは--shift-heading-level-by
オプションを利用しましょう。これは索引に表示するレベルを「ずらす」ことができるオプションです。例えば-1
を指定すると、#
は索引に表示されなくなります。
どこまでを索引に表示するかは、--toc-depth
で指定します。
例えばpandoc --toc --toc-depth=2 --shift-heading-level-by=-1
と指定した場合を考えます。
この場合、Markdown上の# header
は索引が除去され、## header
と### header
は索引に表示されます。
画像ファイルの同梱
HTMLファイルを生成しても、画像ファイルを同梱しなければHTMLから参照できません。一般的には。
Pandocのすごいところはここで、--self-contained
オプションを使用すると、画像や動画に関してはdata:
スキームに置き換えてくれます。つまり、画像や動画をファイルとして一緒に配布することなく、HTMLファイル1枚を配布するだけですみます。便利。
もちろん、どこに画像や動画が配置されているかを指定する--resource-path
を忘れずに。