如何在Pandoc中给代码块添加边框?

3

我正在编写一个包含代码块的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的边距和包含目录的设置。
输出效果很好,但我希望代码块周围有边框,以使它们在视觉上与周围文本区分开来。
这个TeX StackExchange问题建议将高亮样式更改为黑色主题,但我的读者肯定会喜欢浅色主题。
这个SO问题建议切换到listings包,但那会产生比pandoc默认生成的更丑陋的代码。(该帖也已经是6年前的内容,而pandoc从那时起已经发生了很多变化。)
有没有一种方法不会有这些缺点?
1个回答

3

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


谢谢您的回复。我有同样的问题,但是针对docx格式。然而,我不确定我理解您最后关于如何修改源代码文本样式的评论。如果可能的话,您能否详细说明并提供一个示例呢?这将真正帮助我。谢谢! - StatsStudent
1
@StatsStudent 这篇文章比我能讲得更清楚:https://dev59.com/dMPra4cB1Zd3GeqPaS67 - tarleb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接