Подтвердить что ты не робот

Изменение цвета фона фрагмента в RMarkdown

Я хотел бы, чтобы определенный фрагмент кода был выделен другим цветом (например, красный), чтобы указать, что это плохая практика. Если бы я использовал .Rnw, я мог бы добавить опцию chunk background = 'red' и получить то, что хочу, но это не работает в .Rmd. Я предполагаю, что мне нужно создать пользовательскую таблицу стилей CSS (хотя это был бы селектор, я не знаю) и, возможно, также создаю пользовательский крючок. Я бы хотел, чтобы это было на уровне каждого фрагмента, а не общее изменение для всего документа.

4b9b3361

Ответ 1

Помните, что 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)
```

введите описание изображения здесь

Ответ 2

Я сейчас пробовал это сам; это была моя отправная точка:

Добавить класс CSS в отдельные фрагменты кода в RMarkdown

Я могу установить класс под названием "badCode", а затем немного css, чтобы изменить фон, как вам может понравиться.

Здесь мой Rmd

---
title: Background color
output: 
  html_document:
    css: badCode.css
---

```{r, include=FALSE}
knitr::knit_hooks$set(source = function(x, options) {

  str_class <- 
    ifelse(
      is.null(options$class),
      "",
      paste0(".", options$class, collapse = " ")
    )


  c(
    paste0("```{.r ", str_class, "}\n"),
    x,
    "\n```"
  )
})
```

```{r mtcars}
library("magrittr")

mtcars %>%
  summary()
```

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

Здесь badCode.css:

.badCode {
  background-color: red;
}

Я уверен, что это можно сделать более-чисто.

Ответ 3

Это решение немного взломанно, но оно работает. Суть его состоит в том, чтобы сделать два куска кода, заменив обозначение {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