You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:25:06