在 xaringan 中为 input/output 个块自定义 css

Customize css for input/output chunks in xaringan

我使用 xaringan 进行演示,并希望为输入和输出 R 块自定义 CSS。

最初,我认为我可以使用 knitr 中的 class.sourceclass.output 参数来设置 CSS 类.

knitr::opts_chunk$set(class.source = "foobar", 
                      class.output = "bg-warning")

但是,这些全局操作似乎不能很好地与 xaringen 配合使用。以下最小示例

---
title: Change the chunk style
output:
  xaringan::moon_reader
---


```{r}
knitr::opts_chunk$set(class.source = "foobar", 
                      class.output = "bg-warning")
```

```{r}
mtcars[1:5, "mpg"]
```

生成以下渲染图

如果输出设置为 htlm_document 那么一切都可以正常播放,但这并不能解决 xaringan 演示文稿的问题。

这些块选项不适用于 xaringan,因为 xaringan 不使用 Pandoc 的 Markdown 语法,而是 remark.js'秒。也就是说,它们生成 ```{.r .class},仅适用于 Pandoc 的 Markdown。我没有时间在 xaringan 支持他们,但如果你想在 Github 上贡献一个拉取请求,这里是开始的地方:https://github.com/yihui/xaringan/blob/2ad2a6d/R/render.R#L195-L204基本上,您将 source/output 字符串包装在 .class[] 中,这是 remark.js 用于向元素添加 classes 的语法。

如果没有补丁,您只能将 class 名称应用于整个输出,并在 class 内设置代码块的样式,例如,

---
title: Change the chunk style
output:
  xaringan::moon_reader
---

```{css, echo=FALSE}
/* R code */
.foobar code.r {
  font-weight: bold;
}
/* code without language names */
.foobar code[class="remark-code"] {
  display: block;
  border: 1px solid red;
}
```

.foobar[
```{r}
mtcars[1:5, "mpg"]
```
]