web-dev-qa-db-fra.com

Comment changer la couleur de la police?

Dans RMarkdown, existe-t-il un moyen de spécifier la couleur de la police?

Il ne semble pas y avoir d’option lors de la navigation dans le options de bloc

62
xiaodai

La réponse donnée sur le lien fourni par @Ben Bolker:

Roses are <span style="color:red">red</span>, 
violets are <span style="color:blue">blue</span>.

ne fonctionne si vous sélectionnez HTML (ioslides) comme format de sortie.

Cependant, cela ne fonctionne pas si vous sélectionnez le format de sortie pdf (beamer). Si vous voulez créer un pdf, utilisez la syntaxe LaTeX:

    Roses are \textcolor{red}{red}, violets are \textcolor{blue}{blue}.
80
Nadja Simons

Je crée une fonction comme celle-ci:

#Color Format
colFmt = function(x,color){
  outputFormat = knitr::opts_knit$get("rmarkdown.pandoc.to")
  if(outputFormat == 'latex')
    paste("\\textcolor{",color,"}{",x,"}",sep="")
  else if(outputFormat == 'html')
    paste("<font color='",color,"'>",x,"</font>",sep="")
  else
    x
}

Vous pouvez ensuite l’utiliser en ligne comme ceci: `r colFmt("MY RED TEXT",'red')`, et le texte en couleur sera restitué, qu’il s’agisse de travailler sur un document latex ou HTML.

36

Cela semble très bien fonctionner dans les deux formats de sortie, pdf et html:

Roses are $\color{red}{\text{beautiful red}}$, 
violets are $\color{blue}{\text{lovely blue}}$.

J'espère que ça aide.

10
amanas

J'ai utilisé essentiellement la réponse de Nicholas Hamilton, mais parce que j’avais utilisé xtable et print, j’ai eu quelques problèmes avec l’échappement de certaines séquences de latex. À savoir, \\textcolor _ étant transformé en $\backslash$textcolor. J'ai réussi à bien faire les choses en évitant de désinfecter de la manière suivante:

```{r results='asis'}
tbl = data.frame(a = letters[1:10], b = 1:10 / 10)
tbl$b = ifelse(tbl$b < 0.5, colFmt(tbl$b, "red"), colFmt(tbl$b, "green"))
print(xtable(tbl), sanitize.text.function = identity)
```

Je devais ensuite aller désinfecter manuellement quelques caractères comme % mais au moins \textcolor a été correctement appliqué. Bien sûr, cela pourrait être évité en développant votre propre fonction d'assainissement.

4
Midnighter

D'autres ont fourni des réponses pour une sortie autre que Word. Pour Word, vous pouvez utiliser la syntaxe de style personnalisé Pandoc pour ce faire à l'aide d'un document Word de référence. Tout d'abord, dans votre modèle reference.docx, créez un nouveau style Word avec un nom court et distinct. Si vous souhaitez que votre couleur de police s'applique à un paragraphe complet, vous pouvez utiliser le type de style par défaut, "Paragraphe et caractère liés". Si vous souhaitez uniquement mettre en valeur certains mots dans un paragraphe de couleur, vous devez sélectionner le type de style "Caractère". Changez la couleur de la police (et tout autre style dont vous avez besoin) et enregistrez le fichier reference.docx.

Ensuite, dans votre fichier .Rmd, vous pouvez utiliser la balise comme suit:

<div custom-style=“DivCol”>Whole paragraph of colored text</div>

Just a <span custom-style=“SpanCol”>few words</span> of colored text

Un mot concernant les noms de style - pour des raisons que je ne comprends pas, ce processus n’a pas fonctionné avec le nom de style “Span_Add”, mais “SpanAdd” n’a pas posé de problème.

3
ErinMcJ

Une solution agnostique au format de sortie consisterait à utiliser la fonction dédiée text_spec() dans le package kableExtra:

Roses are `r kableExtra::text_spec("red", color = "red")`,

violets are `r kableExtra::text_spec("blue", color = "blue")`
3
Droplet