はじめに
pandoc-crossrefフィルタとEisvogelを併用すると下記のようなエラーが発生する。
Error producing PDF. ! LaTeX Error: Environment lstlisting undefined. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.403 \begin{lstlisting}
エラーレポートはよく見かけるが、そのものズバリな解決策が見つけられないので調べた。
- pandoc-crossref: pandoc-latex-templateの--listingsオプションと併用できない
- Captions for code listings produce \begin{codelisting} which is not in the listings package
Eisvogelというよりは、\usepackage{listings}
を含むpandoc-latex-templateとpandoc-crossrefを併用すると、このエラーに遭遇するらしい。
P.S. You also seem to be including \usepackage{listings} in your template. If you want to use that one, pandoc-crossref supports that, but needs some coercion. See https://github.com/lierdakil/pandoc-crossref#customization (in particular, listings metadata attribute)
このような記載があるが、なにをどうしたらよいのかよく分からん。
解決策
実はこのリポジトリのdemoにしれっと回避策が提供されている。
docs/demo/Makefileの例のように-M listings
をコマンドラインに追加すると良い。
例えばこんな感じ。
pandoc test.md \ --filter pandoc-crossref \ --template eisvogel \ --pdf-engine lualatex \ -M listings \ --listings \ -o test.pdf
結論
Eisvogelに限らず、pandoc-crossrefと\usepackage{listings}
を含むpandoc-latex-templateとpandoc-crossrefを併用すると、エラーが発生する。
-M listings
をコマンドラインに追加すると回避できる。