2016-06-21 58 views
9

È possibile aggiungere una classe CSS a un determinato blocco di codice?Aggiungere una classe CSS a blocchi di codice singolo in RMarkdown

Assumere il seguente file:

--- 
title: "Untitled" 
output: html_document 
--- 


```{r cars} 
summary(cars) 
``` 

voglio dare il pezzo marcato una certa classe CSS 'auto', ad esempio, .myClass. C'è qualche possibilità come

```{r cars} {.myClass} 
summary(cars) 
``` 

o giù di lì? Sono a conoscenza di hack come avvolgere l'intero blocco in un altro <div>. Sono interessato a una soluzione immediata.

risposta

9

Edit: questa funzione è stata introdotta nel knitr v.1.16 (05/18/17)
class.source e class.output opzioni si applicano le classi HTML aggiuntivi per sorgente e pezzi d'uscita (vedi knitr documentation).
Per aggiungere myClass al pezzo fonte:

```{r cars, class.source='myClass'} 
summary(cars) 
``` 

risposta precedente che ha ispirato le opzioni class.source (vedi here)
È possibile aggiungere una classe utilizzando l'estensione del fenced_code_attributes del Pandoc (che ha lo scopo di aggiungere attributi al tag <pre>, vedere here e uno knitroutput hook.

L'esempio seguente funziona bene:

--- 
title: "Untitled" 
    output: 
    html_document: 
     md_extensions: +fenced_code_attributes 
--- 

```{r, include=FALSE} 
knitr::knit_hooks$set(source = function(x, options) { 
    return(paste0(
    "```{.r", 
    ifelse(is.null(options$class), 
     "", 
     paste0(" .", gsub(" ", " .", options$class)) 
    ), 
    "}\n", 
    x, 
    "\n```" 
)) 
}) 
``` 

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

Dopo maglieria questo file .Rmd, il documento HTML assomiglia a questo:

<pre class="r myClass1 myClass2"> 
    <code> 
     summary(cars) 
    </code> 
</pre> 

L'estensione fenced_code_attributes è abilitato di default: in casi normali, non è necessario includere la riga md_extensions: +fenced_code_attributes nell'intestazione YAML.

Non so se c'è una soluzione più semplice che utilizza knitr.