Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 更改RMarkdown中的块背景色_Css_R_Knitr_R Markdown - Fatal编程技术网

Css 更改RMarkdown中的块背景色

Css 更改RMarkdown中的块背景色,css,r,knitr,r-markdown,Css,R,Knitr,R Markdown,我希望用不同的颜色(例如红色)突出显示某个代码块,以表明这是一种不好的做法。如果我使用的是.Rnw,我可以添加chunk选项background='red',然后得到我想要的,但这在.Rmd中似乎不起作用。我的猜测是,我需要制作一个定制的css样式表(虽然选择器是什么,我不知道),也许还需要创建一个定制的钩子。我希望它是基于每个区块的,而不是整个文档的整体更改。我们可以使用代码区块标题中的class.source选项来提供自定义CSS到R标记。下文对此进行了解释: 结合一个例子,我可能会设置一

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

我们可以使用代码区块标题中的
class.source
选项来提供自定义CSS到R标记。下文对此进行了解释:

结合一个例子,我可能会设置一个名为“badCode”的类,然后使用一些CSS来更改背景。这是我的
.Rmd

---
output: html_document
---

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

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

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

这个解决方案有点老套,但它是有效的。其要点是生成两个代码块,用唯一的类名交换{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)
```
---
输出:html\u文档
---
前蓝车{
背景色:#aabbff!重要;
}
前红车{
背景色:#ffbbbb!重要;
}
##块特定bg颜色
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=TRUE)
```
-蓝色的
```{bluecars}
摘要(车辆)
```
```{r,echo=FALSE}
摘要(车辆)
```
-正常的
```{r}
摘要(车辆)
```
-红色的
```{redcars}
摘要(车辆)
```
```{r,echo=FALSE}
摘要(车辆)
```

记住,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)
```

div.blue pre{背景色:浅蓝色;}
div.blue pre.r{背景色:蓝色;}
```{r bluecars}
摘要(车辆)
```
```{r正规}
摘要(车辆)
```

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

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

pandoc --print-highlight-style pygments > my.theme
然后使用正则表达式设置所有

"text-color": null
然后,您可以将此属性更改为您喜欢的任何颜色(这里的颜色为浅灰色)

在.Rmd文档的YAML中的“pdf_文档”下,输入以下内容

pandoc_args: --highlight-style=my.theme

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

您也可以使用以下示例:

```{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\u cars2,class.source=“my\u pink1”,class.output=“my\u pink2”}
摘要(车辆)
```
测试:更改属性\
玫瑰是$\color{red}{\text{beautifuly red}}$,,
紫罗兰是$\color{blue}{\text{lavely blue}}$。
阅读更多信息,例如在



最近,出于不同的原因,我几乎问过同样的问题。我想根据区块是“可选”(即仅打印和探索对象)还是“任务关键型”(即分配给下游使用的对象),对区块进行不同的格式化。我很高兴能够判断这一点,并明确地设置了块选项。这将是方便的展览。非常好。您能解释一下对
paste0()
的第二个调用在做什么吗?我不知道
{.r…}
(周围有三个反勾号)是做什么的,以及它是如何被处理的。你已经揭示了让一件事情工作几次和真正理解发生了什么之间的区别:)我会尽我所能处理后者。我认为
{.r…}
符号是一个信号,指示pandoc将这些作为html类处理。对
paste0()
的第二个调用只是将
options$class
的内容作为
{.r…}
中的
..
插入。FWIW,我的调试方法是查看
.md
文件(在RStudio中,使用“keep md file”选项)。啊哈——这很有帮助。看起来它是Pandoc markdown extensions
backtick\u code\u块
fenced\u code\u属性
的组合,可用于在包装标签中插入各种属性。有关文件。还感谢您提供的调试提示。我曾尝试在YAML标题中设置
keep_md:true
,但由于某些原因,在这里不起作用。下次我遇到麻烦时,我会从RStudio尝试。谢谢你的回复!很好,但它似乎把代码块的文本包装搞得一团糟。我在别处找到了一篇写有你名字的帖子:。我想把它作为一个新的答案发布,但我更新了你的答案,因为我觉得我在偷:)这很聪明。出于某种原因,我记得在包装代码块时遇到了问题。但现在我想起来了,那可能是我尝试使用slidify围绕幻灯片进行包装的时候;我也可以在pre.js中使用它。要运行第一个命令,您需要一个unix终端,并且必须在您的计算机中安装pandoc。这对我的情况很有帮助,我可以将
文本颜色
更改为我想要的任何颜色+PDF文件的漂亮灰色背景。
```{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}
```
```{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}}$.