如何在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。

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

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

This SO question建议切换到列表包,但是生成代码比pandoc的代码丑陋得多。 (该职位也已有6年历史,此后pandoc发生了很大变化。)

有没有没有这些缺点之一的方法

解决方法

对于LaTeX,您可以使用高度可定制的tcolorbox包来包装代码块,并通过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