2013-02-04 26 views
9

Sto lavorando su un documento markdown in Rstudio che confronta Perl e R. Ciò che vorrei essere in grado di fare è avere diversi colori di sfondo del blocco di codice a seconda della lingua utilizzata . Per esempiocambia colore blocco codice in knitr/markdown

blocco di codice R

```{r} 
dog <- 1 
cat <- 2 
dog + cat 
``` 

Perl blocco di codice

```{r, engine='perl'} 
$dog = 1; 
$cat = 2; 
print $dog + $cat; 
``` 

Se si genera un file html utilizzando knitr con il codice di cui sopra, il blocco di codice R ha un sfondo grigio uniforme mentre l'output dal blocco di codice ha uno sfondo bianco/trasparente.

Tuttavia, il blocco di codice Perl e l'output hanno uno sfondo bianco/trasparente che sembra confuso. La mia speranza è che ci sia un modo elegante per farlo in markdown/knitr.

risposta

4

Il motivo è che RStudio raggruppa solo js e css necessario per evidenziare il codice R quando si esegue knit2html. È possibile abilitare l'evidenziazione della sintassi per altre lingue includendo i seguenti css e javascript nel proprio file Rmd.

<link rel="stylesheet" href="http://yandex.st/highlightjs/7.3/styles/default.min.css"> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
<script src="http://yandex.st/highlightjs/7.3/highlight.min.js"></script> 
<script> 
$(document).ready(function() { 
    $('pre code').each(function(i, e) {hljs.highlightBlock(e)}); 
}); 
</script> 

Questo ancora non risolve il problema di sfondi diversi, poiché entrambi sono controllati dal tema CSS. Puoi comunque includere css personalizzati per fornire uno sfondo diverso per le uscite.

Aggiornamento:

aggiungendo le seguenti linee aggiuntive aiuterà regolare il colore di sfondo di uscita (ho scelto lightyellow, ma è possibile personalizzare come desiderato)

<style> 
pre code.bash { 
    background: lightyellow; 
} 
</style> 
+0

grazie per questo utile post. Sai se è possibile utilizzare il foglio di stile collegato ** solo ** per blocchi di codice non R?L'evidenziazione del codice R in bundle con RStudio è migliore di quella fornita da 'highlight.js'. –

4

Penso che sia una domanda per RStudio. Al momento sembra supportare solo due lingue (per l'evidenziazione della sintassi) - R e C++; forse puoi presentare una richiesta di funzione a loro, oppure puoi renderizzare il tuo markdown in uscita con altri strumenti come Pandoc, o semplicemente mettere i file md su Github che fa anche l'evidenziazione della sintassi per Perl, ad es. esempio 028-engine-perl.md.

+0

Grazie, ho parlato con il supporto rstudio ragazzi sono stati molto utili. – iantist

7

Ho parlato con il supporto Rstudio secondo il suggerimento di Yihui. Hanno sottolineato che potevo dire in sostanza, R per usare il mio foglio di stile con il seguente codice R:

options(rstudio.markdownToHTML = 
function(inputFile, outputFile) {  
require(markdown) 
markdownToHTML(inputFile, outputFile, stylesheet='custom.css') 
} 
) 

'custom.css' deve essere nella directory di lavoro. Ho scaricato la scheda CSS di R Studio (link) per cercare una sezione da modificare. All'interno del foglio di stile c'è un blocco di codice

code.r, code.cpp { background-color: #F8F8F8;} 

Come Yihui sottolineato questo sarebbe solo supportare colore blocchi codificati per R e C++. Una rapida modifica di perl: code.r, code.cpp, code.perl {background-color: # F8F8F8;} Oppure crea un colore diverso aggiungendo quanto segue sotto il blocco di background code.r.

code.perl { 
background-color: #B53389; 
} 
+1

Si noti che questo approccio non ancora sintatticamente evidenzia il codice perl, dal momento che il javascript inserito da RStudio evidenzia solo il codice R e CPP. – Ramnath