在RMarkdown中为单个代码块添加CSS类

26

如何给一个特定的代码块添加CSS类?

假设有如下文件:

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


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

我想给标记为“cars”的块分配某个CSS类,例如.myClass。是否有可能实现?

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

或者说呢?我知道像将整块内容包装在另一个<div>中这样的方法。我对一种直截了当的解决方案感兴趣。

1个回答

29

编辑:此功能是在knitr v.1.16中引入的(05/18/17)
class.sourceclass.output选项向源代码块和输出块应用附加的HTML类(请参见knitr文档)。
要向源代码块添加myClass

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

前面的回答启发了 class.source 选项 (参见这里)
您可以使用 fenced_code_attributes pandoc 扩展添加类 (旨在向 <pre> 标签添加属性,参见这里) 和一个 knitr 输出钩子

以下示例可正常工作:

---
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头中包含行md_extensions: +fenced_code_attributes

我不知道是否有更简单的解决方案,可以使用knitr


1
有没有办法确保类被添加到代码块输出的img中?或者我可以以其他方式将其添加到<img>中吗? - bthorne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接