如何为pandoc中的代码块添加边框?

How to add a border to code blocks in pandoc?

我正在编写一个包含代码块的 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 边距并包含目录。

输出看起来非常好,但我希望代码块周围有边框,使它们在视觉上与周围的文本分开。

This TeX StackExchange question 建议将突出显示样式更改为深色主题,但我的读者肯定会喜欢浅色。

This SO question 建议切换到 listings 包,但这会产生比 pandoc 的默认代码更丑陋的代码。 (那个post也6岁了,pandoc从那以后变化很大。)

有没有一种方法没有这些缺点之一?

对于 LaTeX,您可以使用高度可定制的 tcolorbox package to wrap the code block, inserting the necessary code via a Lua filter:

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 docs


Docx 更简单:修改“源代码”文本样式,然后将更改后的文档用作 --reference-doc