Help us understand the problem. What is going on with this article?

Pandocのシンタックスハイライトのカラースキーム

More than 1 year has passed since last update.

はじめに

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で変換するとこんな感じに、数式を変換してくれない。

image.png

というわけで、pandocを使って変換してみる。ついでに余白の調整とかもしれみよう。

pandoc test.md -s -o default.pdf --latex-engine=lualatex -V documentclass=ltjarticle -V geometry:margin=1in

これで変換したPDFはこんな感じになる。

image.png

数式もいい感じで、シンタックスハイライトもあるのだが、コードブロックに背景色がないため、どこからどこまでかが分かりづらい。で、カラースキームを変えることにしたのだが、どれがどんな感じになるか探したら海外にそれっぽいブログがあるだけっぽかったので、Qiitaにまとめておきましょう、というのが本稿の趣旨である。

Pandocのカラースキーム

Pandocで変換する際に--highlight-style=pygmentsなどとするとカラースキームを指定できる。これで同じマークダウンファイルを異なるスキームでPDFに変換してみよう。

僕は古い人間なので、なんでもmakefileでやる癖があるのだが、とりあえずこんなのを書いてみる。

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で、こんな感じになる。

pygments.png

わりといい感じなのだが、背景色がないのでコードブロックの区切りが分かりづらい。

kate

kateだとこんな感じになる。

kate.png

文字列が赤く目立つかわり、forifなどの予約語が黒くなってますね。

monochrome

monochromeは、文字通り白黒。

monochrome.png

breezeDark

breezeDarkは、背景色が黒になり、色も独特な感じ。

breezedark.png

espresso

espressoはその名の通り、背景色がコーヒーっぽい色になっている。色も少し抑えめかな。

espresso.png

zenburn

zenburnも背景は黒っぽい。色は淡い感じ。

zenburn.png

haddock

haddockの背景色は白。予約語が青というのは、なんとなく見慣れてる気がする。

haddock.png

tango

tangoは、haddockに似ているが、背景色が淡いグレーになっている。それに伴い、予約語の色も少し控えめに。逆に数字などのリテラルが少し目立つかな。

tango.png

まとめ

Pandocによるコードブロックのカラースキームをまとめた。個人的にはtangoが好きかな。「文書を何で書くか」はわりと面倒で、そういう意味では様々なフォーマット間の変換ができるPandocは便利ですね。

kaityo256
記事中に明示されていない場合、私の記事はCC-BY 4.0で、記事に含まれるソースコードはMITライセンスで公開します。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away