はじめに
PandocでマークダウンをPDFに変換する際、--highlight-style
オプションでカラースキームを指定できる。指摘できるカラースキームは以下の通り。
- pygments (デフォルト)
- kate
- monochrome
- espresso
- zenburn
- haddock
- tango
これらのカラースキームはそれぞれ同名のシンタックスハイライトエンジンに由来するらしいのだが、公式マニュアルには、それぞれどんな色になるか例示がないみたいなので、ここにまとめておく。
コードは以下に置いておく。
https://github.com/kaityo256/pandoc_highlight
MarkdownからPDFへ
とりあえず日常の文書をMarkdownで書いて、なんか印刷したりメールで送ったりする時にPDFにする、という人は多いと思う。僕はVSCodeでMarkdown Previewでプレビューしながら書いて、Markdown PDFでPDFに変換している。しかし、デフォルトでは数式が変換されない。例えばこんなマークダウンを書いたとする。
# Fizz Buzzを書いてみる
数式はこちら。
$$
\textrm{Print} \quad
\begin{cases}
\textrm{FizzBuzz!} & \textrm{if} \quad i \bmod 15 =0 \\
\textrm{Fizz!} & \textrm{if} \quad i \bmod 3 =0 \\
\textrm{Buzz!} & \textrm{if} \quad i \bmod 5 =0 \\
i & \textrm{otherwise}
\end{cases}
$$
Pythonによるコード例はこちら。
```py
for i in range(1, 100):
if i % 3 is 0 and i % 5 is 0:
print("Fizz Buzz!")
elif i % 3 is 0:
print("Fizz!")
elif i % 5 is 0:
print("Buzz!")
else:
print(i)
```
これを、VSCodeのMarkdown PDFで変換するとこんな感じに、数式を変換してくれない。
というわけで、pandocを使って変換してみる。ついでに余白の調整とかもしれみよう。
pandoc test.md -s -o default.pdf --latex-engine=lualatex -V documentclass=ltjarticle -V geometry:margin=1in
これで変換したPDFはこんな感じになる。
数式もいい感じで、シンタックスハイライトもあるのだが、コードブロックに背景色がないため、どこからどこまでかが分かりづらい。で、カラースキームを変えることにしたのだが、どれがどんな感じになるか探したら海外にそれっぽいブログがあるだけっぽかったので、Qiitaにまとめておきましょう、というのが本稿の趣旨である。
Pandocのカラースキーム
Pandocで変換する際に--highlight-style=pygments
などとするとカラースキームを指定できる。これで同じマークダウンファイルを異なるスキームでPDFに変換してみよう。
僕は古い人間なので、なんでもmakefileでやる癖があるのだが、とりあえずこんなのを書いてみる。
PDF=pygments.pdf kate.pdf monochrome.pdf espresso.pdf zenburn.pdf haddock.pdf tango.pdf
PANDOCOPT=--latex-engine=lualatex -V documentclass=ltjarticle -V geometry:margin=1in
all: $(PDF)
%.pdf: test.md
pandoc $< -s -o $@ --highlight-style=$* $(PANDOCOPT)
.PHONY: clean
clean:
rm -f $(PDF)
入力となるtest.md
を、それぞれのカラースキームでPDFに変換するサンプルである。
pygments
デフォルトはpygments
で、こんな感じになる。
わりといい感じなのだが、背景色がないのでコードブロックの区切りが分かりづらい。
kate
kate
だとこんな感じになる。
文字列が赤く目立つかわり、for
やif
などの予約語が黒くなってますね。
monochrome
monochrome
は、文字通り白黒。
breezeDark
breezeDark
は、背景色が黒になり、色も独特な感じ。
espresso
espresso
はその名の通り、背景色がコーヒーっぽい色になっている。色も少し抑えめかな。
zenburn
zenburn
も背景は黒っぽい。色は淡い感じ。
haddock
haddock
の背景色は白。予約語が青というのは、なんとなく見慣れてる気がする。
tango
tango
は、haddock
に似ているが、背景色が淡いグレーになっている。それに伴い、予約語の色も少し控えめに。逆に数字などのリテラルが少し目立つかな。
まとめ
Pandocによるコードブロックのカラースキームをまとめた。個人的にはtango
が好きかな。「文書を何で書くか」はわりと面倒で、そういう意味では様々なフォーマット間の変換ができるPandocは便利ですね。