【问题标题】:How to add a border to code blocks in pandoc?如何为 pandoc 中的代码块添加边框?
【发布时间】:2020-08-29 15:02:07
【问题描述】:

我正在编写一个包含代码块的 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 建议切换到 listings 包,但这会产生比 pandoc 的默认代码更丑陋的代码。 (那个帖子也有 6 年了,从那以后 pandoc 发生了很大的变化。)

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

【问题讨论】:

    标签: pdf markdown pandoc


    【解决方案1】:

    对于 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 更简单:修改“Source Code”文本样式,然后使用修改后的文档作为--reference-doc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      相关资源
      最近更新 更多