Quarto-Pandoc:MD转LaTeX时如何修改.cell与.cell-output格式?
问题:Quarto扩展中替换R代码块输出的verbatim环境为Verbatim环境
我正在为OA期刊开发Quarto扩展,需要修改Pandoc对R代码块及其输出的格式。渲染PDF时会保留MD文件与TEX文件,当前MD中的.cell及.cell-output代码块默认生成含verbatim环境的TEX代码,我需要将其替换为Verbatim环境,请问需修改tex-partial或其他配置文件吗?已查阅相关文档及GitHub仓库但未找到解决方案。
示例MD代码
::: {.cell} ```{.r .cell-code} sqrt(2)
::: {.cell-output .cell-output-stdout}
[1] 1.414214
:::
:::
## 默认生成的TEX代码 ```latex \begin{Shaded} \begin{Highlighting}[] \FunctionTok{sqrt}\NormalTok{(}\DecValTok{2}\NormalTok{)} \end{Highlighting} \end{Shaded} \begin{verbatim} [1] 1.414214 \end{verbatim}
解决方案
方法1:自定义LaTeX模板
- 执行
quarto pandoc --print-default-template latex导出Quarto默认的LaTeX模板 - 在模板中找到所有生成
verbatim环境的代码段,将\begin{verbatim}替换为\begin{Verbatim},\end{verbatim}替换为\end{Verbatim} - 在项目的
_quarto.yml中配置使用自定义模板:format: pdf: template: 你的自定义模板路径.tex
方法2:编写Lua过滤器(Quarto扩展推荐方式)
在你的Quarto扩展目录下创建Lua过滤器文件(如code-env-modifier.lua),写入以下逻辑:
function CodeBlock(el) -- 匹配cell-output-stdout类的代码输出块 if el.classes:includes("cell-output-stdout") then return pandoc.RawBlock("latex", string.format("\\begin{Verbatim}\n%s\n\\end{Verbatim}", el.text)) end -- 若需要修改代码块本身的环境,可在此添加对.cell-code类的处理 return el end
然后在扩展的_extension.yml中注册该过滤器:
filters: - code-env-modifier.lua
关键注意点
Verbatim环境依赖fancyvrb包,需确保LaTeX文档加载该包,可在_quarto.yml中配置:format: pdf: include-in-header: text: | \usepackage{fancyvrb}- 若要替换所有代码块的环境(包括高亮后的代码块),可在Lua过滤器中扩展处理逻辑,或修改模板中对应代码块的渲染部分。
内容的提问来源于stack exchange,提问作者Gunther Maier
相关产品推荐
相关产品推荐

