2016-06-21 10 views
9

Ist es möglich, eine CSS-Klasse zu einem bestimmten Code-Chunk hinzuzufügen?Hinzufügen einer CSS-Klasse zu einzelnen Code-Chunks in RMarkdown

Nehmen wir die folgende Datei:

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


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

Ich möchte den Brocken geben etikettiert ‚Autos‘ eine bestimmte CSS-Klasse, z.B. .myClass. Gibt es eine Möglichkeit, wie

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

oder so? Ich bin mir der Hacks bewusst, die den ganzen Block in einem anderen <div> wickeln. Ich bin an einer einfachen Lösung interessiert.

Antwort

9

Edit: Diese Funktion wurde in knitr v.1.16 eingeführt (05/18/17)
class.source und class.output Optionen gelten zusätzliche HTML-Klassen beziehen und Ausgang Chunks (siehe knitr documentation).
Um myClass zu Quelle Brocken hinzu:

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

Zurück Antwort, die die class.source Optionen inspiriert (siehe here)
Sie eine Klasse hinzufügen, können mit der Nebenstelle des fenced_code_attributes pandoc (die hinzufügen soll Attribute zum <pre> Tag, siehe here) und knitroutput hook.

Das folgende Beispiel funktioniert:

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

diese .Rmd Datei Nach dem Stricken, das HTML Dokument sieht wie folgt aus:

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

Die fenced_code_attributes Erweiterung standardmäßig aktiviert ist: in Standardfällen, Sie müssen die Zeile md_extensions: +fenced_code_attributes in Ihrem Header YAML nicht einfügen.

Ich weiß nicht, ob es eine einfachere Lösung mit knitr gibt.