knitr 输出中 R 输入的纯代码块

Plain code chunks for R input in knitr output

目标

在我想转换为 LaTeX 的 R/Markdown 文档中,我想设置 knitr 选项,以便默认情况下整个文档对所有代码输入使用纯代码块。因此,对于带有

的 .Rmd 文档
```{r}
x <- 1 + 1
```

我要获取输出

```
x <- 1 + 1
```

使用高亮选项

我曾希望 highlight=FALSE 选项可以用于此目的,但这会生成文本块而不是普通块。更准确地说,对于上面的简单示例,knit() 默认生成一个 R-chunk(即 highlight = TRUE):

```r
x <- 1 + 1
```

设置 knitr::opts_chunk$set(highlight = FALSE) 后生成一个文本块:

```text
x <- 1 + 1
```

但是我想要一个没有任何特殊语言的普通块,请参见上文。

结合 lang 选项

我可以通过

得到我想要的
knitr::opts_chunk$set(highlight = TRUE, lang = "")

因此,我确实启用了突出显示,但将 lang 设置为空字符串。这确实产生了我想要的纯代码。

不过至少有一个缺点(除了这个解决方案相当老套的感觉)。也就是说,如果在同一文档中我确实想在一个特定块的选项中启用突出显示,我现在必须设置 lang = "r" 而不是 highlight = TRUE,例如

```{r, lang="r"}
x <- 1 + 1
```

所以我想知道是否有更好的解决方案?

背景

pandoc 的旧版本中(我尝试了 2。9.x)文本块在 LaTeX 输出中被转换为 {verbatim} 代码块。

然而,更新版本的 pandoc(我试过 2.17.x)文本块被转换为 {Shaded} 而只有普通块被转换为 {verbatim}.

我不确定我是否完全理解您想要什么,但是在 yaml header 中这样做对您有帮助吗?

---
output:
  html_document:
    theme: null
    highlight: null
---

另一个hacky解决方案是(我什至不敢解释):

```{r}
knitr::opts_hooks$set(highlight = function(options) {
  if (!options$highlight) {
    options$highlight = TRUE
    options$lang = ''
  }
  options
})

knitr::opts_chunk$set(highlight = FALSE)
```

```{r}
1 + 1
```

```{r, highlight=TRUE}
2 + 2
```

highlight = FALSE 时的语言名称 text 目前在 knitr 中是 hard-coded,因此您无法更改它:https://github.com/yihui/knitr/blob/907184f82/R/hooks-md.R#L171我愿意让它可配置,但我不确定如何配置(我希望在 highlight = FALSE 的情况下不添加用于设置语言的新块选项)。