问题描述
我正在编写其中包含代码块的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
。