首页 > 解决方案 > 如何为 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 边距并包含 ToC。

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

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

这个 SO question建议切换到 listings 包,但这会产生比 pandoc 的默认值更丑陋的代码。(那个帖子也有 6 年了,从那时起 pandoc 发生了很大的变化。)

有没有没有这些缺点的方法?

标签: pdfmarkdownpandoc

解决方案


对于 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.


推荐阅读