将 CSS class 添加到 RMarkdown 中的单个代码块

Add a CSS class to single code chunks in RMarkdown

是否可以在某个代码块中添加CSS class?

假设文件如下:

---
title: "Untitled"
output: html_document
---


```{r cars}
summary(cars)
```

我想给标记为 'cars' 的块指定 CSS class,例如.myClass。 有没有可能像

```{r cars} {.myClass}
summary(cars)
```

左右?我知道一些黑客喜欢将整个块包装在另一个 <div> 中。我对直接的解决方案感兴趣。

编辑:此功能是在 knitr v.1.16 (05/18/17) 中引入的
class.sourceclass.output 选项将额外的 HTML classes 应用于源和输出块(参见 knitr documentation)。
添加 myClass 到源块:

```{r cars, class.source='myClass'}
summary(cars)
```  

启发了 class.source 选项的上一个答案(参见 here
您可以使用 fenced_code_attributes pandoc 的扩展添加 class(旨在向 <pre> 标签添加属性,请参阅 here) and a knitr output hook

以下示例运行良好:

---
title: "Untitled"
  output: 
    html_document:
      md_extensions: +fenced_code_attributes
---

```{r, include=FALSE}
knitr::knit_hooks$set(source = function(x, options) {
  return(paste0(
    "```{.r",
    ifelse(is.null(options$class),
      "", 
      paste0(" .", gsub(" ", " .", options$class))
    ),
    "}\n",
    x,
    "\n```"
  ))
})
```

```{r cars, class="myClass1 myClass2"}
summary(cars)
```

编织这个 .Rmd 文件后,HTML 文件看起来像这样:

<pre class="r myClass1 myClass2">
    <code>
        summary(cars)
    </code>
</pre>

默认启用 fenced_code_attributes 扩展:在标准情况下,您不需要在 YAML [=53] 中包含行 md_extensions: +fenced_code_attributes =].

我不知道是否有更直接的解决方案使用 knitr