2016-06-21 9 views
9

Czy jest możliwe dodanie klasy CSS do określonego fragmentu kodu?Dodaj klasę CSS do pojedynczych fragmentów kodu w RMarkdown

Załóżmy następujący plik:

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


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

Chcę dać kawałek oznaczony „Cars” pewnej klasy CSS, np .myClass. Czy jest jakaś możliwość podobna do:

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

lub coś podobnego? Zdaję sobie sprawę z hacków takich jak owijanie całego kawałka w innym <div>. Jestem zainteresowany prostym rozwiązaniem.

Odpowiedz

9

Edit: ta funkcja została wprowadzona w v.1.16 knitr (18.05.17)
class.source i class.output opcje dotyczą dodatkowych zajęć HTML do źródła i kawałki wyjściowe (patrz knitr documentation).
Aby dodać myClass do źródłowego fragmencie:

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

poprzedniej odpowiedzi, że zainspirowało opcje class.source (patrz here)
Możesz dodać klasę używając jego rozszerzenie fenced_code_attributes pandoc (która ma na celu dodanie atrybuty do znacznika <pre>, patrz here) i knitroutput hook.

Poniższy przykład działa dobrze:

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

Po dziania tego pliku .Rmd dokument HTML wygląda następująco:

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

Rozszerzenie fenced_code_attributes jest domyślnie włączona: w standardowych przypadkach nie musisz podawać linii md_extensions: +fenced_code_attributes w nagłówku YAML.

Nie wiem, czy istnieje bardziej proste rozwiązanie z użyciem knitr.