6.10 Pandoc の LaTeX テンプレートをカスタマイズする (*)

Pandoc はテンプレート を通じて Markdown を LaTeX に変換します. テンプレートは Pandoc 変数を含む LaTeX ファイルであり, Pandoc はこれらの変数を値に置き換えます. 以下は $body$ という変数を1つだけ含んだ単純なテンプレートです.

\documentclass{article}
\begin{document}
$body$
\end{document}

$body$ の値は Markdown ドキュメントの本文から生成された LaTeX コードです. 例えば Markdown で本文が Hello **world**! ならば, $body$ の値は Hello \textbf{world}! となります.

6.1, 6.2, 6.4節で紹介した LaTeX のカスタマイズ方法だけでは不十分なら, 代わりにカスタムテンプレートを使ってみてください. テンプレートはその内部に任意の LaTeX コードを使うことが可能なので, はるかに柔軟です. テンプレートを使うには, pdf_documenttemplate オプション にテンプレートのパスを含めます.

output:
  pdf_document:
    template: my-template.tex

Pandocのデフォルトの LaTeX テンプレートは https://github.com/jgm/pandoc/tree/master/data/templates で見ることができます (ファイル名は default.latex). 自分でテンプレートを作成したい場合, このテンプレートから作りたいと思うことでしょう.

Pandoc 変数 ($body$$title$ など) の完全なリストとその意味は Pandoc マニュアルの https://pandoc.org/MANUAL.html#templates で見ることができます. 任意のカスタム変数を使うこともでき, それは典型的には YAML メタデータからテンプレートへと与えられます. もし具体例で学びたいなら, MonashEBSTemplates パッケージ (https://github.com/robjhyndman/MonashEBSTemplates) を確認することもできます. これはいくつかのカスタム LaTeX テンプレートを提供しています. これらのテンプレートは inst/rmarkdown/templates/*/resources/ ディレクトリ (* はテンプレート名を指します) 以下にあります. 例えば出力フォーマット MonashEBSTemplates::memo 用のテンプレートは YAML メタデータの変数 branding を使って, モナシュ大学のブランドロゴを含むかどうかを制御できます. 以下のようにテンプレート内で if 文を使うことで実現しています.

$if(branding)$%
\includegraphics[height=1.5cm]{monash2}
\vspace*{-0.6cm}
$else$
\vspace*{-1cm}
$endif$