在RMarkdown中更改块背景颜色

时间:2016-12-08 01:49:43

标签: css r knitr r-markdown

我希望以不同的颜色(例如红色)突出显示某个代码块,以表明这是不好的做法。如果我使用.Rnw,我可以添加块选项background = 'red'并获得我想要的内容,但这似乎不适用于.Rmd。我的猜测是我需要制作一个自定义的css样式表(虽然选择器是什么,我不知道),也可能创建一个自定义钩子。我希望它基于每个块,而不是整个文档的整体更改。

5 个答案:

答案 0 :(得分:28)

我们可以使用代码块标头中的class.source选项为R Markdown提供自定义CSS。这在以下帖子中解释:

Add a CSS class to single code chunks in RMarkdown

综合一个例子,我可能会设置一个名为“badCode”的类,然后有一些CSS来改变你想要的背景。这是我的.Rmd

---
output: html_document
---

```{css}
.badCode {
background-color: red;
}
```

```{r mtcars}
summary(mtcars)
```

```{r cars, class.source="badCode"}
summary(cars)
```

答案 1 :(得分:27)

记住markdown支持代码块之外的HTML。

我会使用带有自定义类的div来包围代码块,该类可以根据我的需要设置样式。此示例将代码设置为蓝色,输出为浅蓝色

<style>
div.blue pre { background-color:lightblue; }
div.blue pre.r { background-color:blue; }
</style>

<div class = "blue">
```{r bluecars}
summary(cars)
```
</div>

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

enter image description here

答案 2 :(得分:7)

这个解决方案有点黑客,但它有效。它的要点是制作两个代码块,用唯一的类名交换{r}指示符。然后添加css代码来设置每个块的样式。

---
output: html_document
---

<style>
pre.bluecars {
    background-color: #aabbff !important;
}
pre.redcars {
    background-color: #ffbbbb !important;
}
</style>

## chunk-specific bg colors

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

- blue

```{bluecars}
summary(cars)
```

```{r, echo=FALSE}
summary(cars)
```

- normal

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

- red

```{redcars}
summary(cars)
```

```{r, echo=FALSE}
summary(cars)
```

screenshot

答案 3 :(得分:2)

我发现了以下方法来对我编织为PDF的Rmarkdown文档中的块进行着色(编码):

使用pandoc高亮显示方案作为基础

pandoc --print-highlight-style pygments > my.theme

然后使用正则表达式设置所有主题

"text-color": null

然后,您可以将此属性更改为您喜欢的任何颜色(此处为浅灰色)

"background-color": "#f8f8f8"

在.Rmd文档的YAML中的“ pdf_document”下,放置以下内容

pandoc_args: --highlight-style=my.theme

对于我的用例,这就是我所需要的。

答案 4 :(得分:1)

您还可以使用以下示例:

```{css, echo = F}
h1 { color: rgb(255, 125, 0); }
h2 { color: brown; }
div.yellow pre { background-color: lightyellow; }
div.yellow pre.r { background-color: lightblue; }
.my_pink1 { background-color: pink; }
.my_pink2 { background-color: rgb(255, 113, 181); color: white; border: 3px solid blue; }
.my_span  { background-color: orange; font-family: courier}
```

# 标题 1
## 标题 2

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

```{r yellow_cars2, class.source = "my_pink1", class.output = "my_pink2"}
summary(cars)
```

Test: <span class = "my_span">change properties</span> \
Roses are $\color{red}{\text{beautiful red}}$,
violets are $\color{blue}{\text{lovely blue}}$.

阅读更多在
Changing chunk background color in RMarkdown
https://bookdown.org/yihui/rmarkdown-cookbook/chunk-styling.html
How to change the font color?