pandocのコードブロックに境界線を追加するにはどうすればよいですか?
Aug 22 2020
コードブロックを含むMarkdownファイルを作成し、pandocを使用してDOCXとPDFの両方にビルドします。具体的には次のとおりです。
pandoc myfile.md --to=docx --defaults=defaults.yml -o myfile.docx
pandoc myfile.md --to=latex --defaults=defaults.yml -o myfile.pdf
このdefaults.yml
ファイルは、LaTeXマージンを指定し、目次を含めるだけです。
出力は非常に見栄えがしますが、コードブロックの周囲に境界線を付けて、周囲のテキストから視覚的に分離できるようにしたいと思います。
このTeXStackExchangeの質問は、ハイライトスタイルを暗いテーマに変更することを提案していますが、私の読者は間違いなく明るいテーマを好むでしょう。
このSOの質問は、listingsパッケージへの切り替えを示唆していますが、pandocのデフォルトよりもはるかに醜いコードが生成されます。(その投稿も6歳で、それ以来pandocは大きく変化しています。)
これらの欠点の1つがない方法はありますか?
回答
2 tarleb Aug 22 2020 at 00:04
LaTeXの場合、高度にカスタマイズ可能なtcolorboxパッケージを使用してコードブロックをラップし、Luaフィルターを介して必要なコードを挿入できます。
function raw_tex (t)
return pandoc.RawBlock('tex', t)
end
--- Wrap code blocks in tcolorbox environments
function CodeBlock (cb)
return {raw_tex'\\begin{tcolorbox}', cb, raw_tex '\\end{tcolorbox}'}
end
--- Ensure that the longfbox package is loaded.
function Meta (m)
m['header-includes'] = {raw_tex '\\usepackage{tcolorbox}'}
return m
end
詳細については、tcolorboxのドキュメントを参照してください。
Docxの方が簡単です。「ソースコード」テキストスタイルを変更してから、変更したドキュメントをとして使用し--reference-doc
ます。