web-dev-qa-db-fra.com

Modification de la couleur d'arrière-plan des blocs dans RMarkdown

J'aimerais qu'un certain morceau de code soit mis en évidence dans une couleur différente (par exemple rouge) pour indiquer qu'il s'agit d'une mauvaise pratique. Si j'utilisais .Rnw, Je pourrais ajouter l'option de bloc background = 'red' et obtenir ce que je veux, mais cela ne semble pas fonctionner dans .Rmd. Je suppose que je dois créer une feuille de style CSS personnalisée (bien que ce que serait le sélecteur, je ne sais pas), et peut-être aussi créer un crochet personnalisé. Je voudrais que ce soit sur une base par morceau, pas un changement global pour l'ensemble du document.

31
AmeliaMN

Nous pouvons utiliser le class.source option dans l'en-tête du bloc de code pour fournir du CSS personnalisé à R Markdown. Ceci est expliqué dans le post suivant:

Ajouter une classe CSS à des morceaux de code unique dans RMarkdown

En rassemblant un exemple, je pourrais définir une classe appelée "badCode" puis avoir un peu de CSS pour changer l'arrière-plan comme vous le souhaitez. Voici mon .Rmd:

---
output: html_document
---

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

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

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

N'oubliez pas que le démarquage prend en charge le HTML en dehors des blocs de code.

J'entourerais les morceaux de code d'un div avec une classe personnalisée qui les styliserait comme je le voulais. Cet exemple met en forme le code en bleu, la sortie en bleu clair

<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

27
Jim

Cette solution est un peu piratée, mais elle fonctionne. L'essentiel est de faire deux morceaux de code, en échangeant l'indicateur {r} avec un nom de classe unique. Ajoutez ensuite du code CSS pour styliser chaque morceau.

---
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

7
mkearney