PandocでLaTeX経由でPDFを出力する際にコードブロックのフォントサイズをいじる


TL;DR

  • 適当な名前、例えばmytemplate.texというファイルに以下の内容を書く

コードブロックに背景色をつけない場合

mytemplate.tex
\newenvironment{Shaded}{\Huge}{}

コードブロックに背景色をつける場合

mytemplate.tex
\renewenvironment{Shaded}{\begin{snugshade}\Huge}{\end{snugshade}}
  • 先程指定したファイルを-Hオプションで指定する。例えば
pandoc test.md -o test.pdf --latex-engine=lualatex -V documentclass=ltjarticle -H mytemplate.tex

などとする。\Huge\smallとかにすればフォントサイズを好きにできる。

解説

もうTL;DRだけで話は尽きているんだけれども、一応何が起きているか解説します。

こんなマークダウンファイルを作ります。

# コードブロックのテスト

以下はコードブロックです。

```rb
puts "Hello World!"
```

これをこんな感じでPDFにします。

pandoc test.md -o test.pdf --latex-engine=lualatex -V documentclass=ltjarticle

出来上がったPDFがこちらです。

で、このコードブロックのフォントサイズを変えるために、pandocが吐くソースコードを見てみます。

$ pandoc test.md -s -o test.tex --latex-engine=lualatex -V documentclass=ltjarticle

すると、コードブロックはこんな感じになっています。

以下はコードブロックです。

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{puts }\StringTok{"Hello World!"}
\end{Highlighting}
\end{Shaded}

このShaded環境は、上の方に定義されています。

\newenvironment{Shaded}{}{}

これは背景色をつける環境なので、デフォルトでは何もしません。ここにフォントサイズを変更する命令を突っ込みます。

\newenvironment{Shaded}{\Huge}{}

で、コンパイルします。

$ lualatex test.tex 

できたPDFがこちらです。

無事にコードブロック内のフォントサイズが大きくなりました。

で、いちいちLaTeXソースを吐いてそれを修正するのは面倒なので、修正命令をファイルに書いておいて、後から命令を読み込ませることにします。一度\newenvironmentされたものを再定義する必要があるので、\renewenvironmentを使う必要があります。

mytemplate.tex
\newenvironment{Shaded}{\Huge}{}

これを-Hオプションで読み込ませれば、マークダウンからPDFに一気に変換しつつ、フォントサイズも変更できます。

$ pandoc test.md -o test.pdf --latex-engine=lualatex -V documentclass=ltjarticle -H mytemplate.tex

背景色について

先程の方法を使うと、コードブロックに背景色がある場合に、背景色が消えてしまいます。

例えば、ハイライトスキームとしてbreezeDarkを使うと、背景色は黒くなります。

$ pandoc test.md -o test.pdf --latex-engine=lualatex -V documentclass=ltjarticle --highlight-style=breezeDark

しかし、先程作ったテンプレートを読み込むと文字色はbreezeDarkのままですが、背景色が消えてしまいます。

これは、背景色がある場合のShaded環境がこのように定義されているからです。

\newenvironment{Shaded}{\begin{snugshade}}{\end{snugshade}}

このsnugshade環境が背景色をつけるので、その直後にフォントサイズ変更命令を突っ込みます。

mytemplate.tex
\renewenvironment{Shaded}{\begin{snugshade}\Huge}{\end{snugshade}}

背景色付きでフォントサイズが変化しました。

背景色の修正

ちなみに背景色は\definecolorで上書きできます。

mytemplate
\renewenvironment{Shaded}{\begin{snugshade}\Huge}{\end{snugshade}}
\definecolor{shadecolor}{RGB}{255,200,200}

まとめ

PandocでLaTeX経由でPDFを作る時に、コードブロックのフォントサイズをいじる方法をまとめました。若干アドホックですが、元のマークダウンファイルに手を入れないで修正できるのでまぁ良いんじゃないでしょうか。

参考

StackOverflowのHow to set the font size for code blocks in pandoc markdown?についた回答