在RMarkdown

时间:2016-06-21 12:16:55

标签: css r knitr r-markdown

是否可以将CSS类添加到某个代码块?

假设以下文件:

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


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

我想给那些标有“汽车”字样的块。某个CSS类,例如.myClass。 有没有可能像

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

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

1 个答案:

答案 0 :(得分:16)

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

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

以前的答案启发了class.source选项(请参阅here
您可以使用fenced_code_attributes pandoc扩展程序(用于向<pre>标记添加属性,请参阅here)和knitr {{ 3}}。

以下示例正常工作:

---
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扩展程序:在标准情况下,您不需要在md_extensions: +fenced_code_attributes标题中加入YAML行。

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