2015-04-28 14 views
7

Sto provando a generare un report HTML utilizzando RStudio, R Markdown e knitr. Nel report mi piacerebbe visualizzare il codice bash. Non voglio eseguire il codice ma vorrei che fosse evidenziato.Evidenzia codice bash con knitr/rmarkdown

E 'stato menzionato in another question ma il suggerimento non funziona per me. Ecco cosa ho provato fino ad ora:

--- 
title: "bash highlighting?" 
output: html_document 
--- 
```{r, engine = 'bash', eval = FALSE} 
for foo in (ls bar) 
do 
    echo $foo 
done 
``` 

```{bash, eval = FALSE} 
for foo in (ls bar) 
do 
    echo $foo 
done 
``` 

Nessuno di questi mi consente di evidenziare nel documento HTML. So che è possibile perché ricordo di averlo visto da qualche settimana circa, ma non riesco più a trovarlo! Qualcuno sa come posso ottenerlo?

Grazie per la lettura,

Tom

Edit: Ho appena trovato this answer, che suggerisce di utilizzare il seguente blocco di codice nel .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 funziona per il codice bash nella documenta ma uccide l'evidenziazione per il codice R!

## R version 3.2.0 (2015-04-16) 
## Platform: x86_64-pc-linux-gnu (64-bit) 
## Running under: Ubuntu 14.04.2 LTS 
## 
## locale: 
## [1] LC_CTYPE=en_AU.UTF-8  LC_NUMERIC=C    
## [3] LC_TIME=en_AU.UTF-8  LC_COLLATE=en_AU.UTF-8  
## [5] LC_MONETARY=en_AU.UTF-8 LC_MESSAGES=en_AU.UTF-8 
## [7] LC_PAPER=en_AU.UTF-8  LC_NAME=C     
## [9] LC_ADDRESS=C    LC_TELEPHONE=C    
## [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C  
## 
## attached base packages: 
## [1] stats  graphics grDevices utils  datasets methods base  
## 
## loaded via a namespace (and not attached): 
## [1] formatR_1.2  tools_3.2.0  htmltools_0.2.6 yaml_2.1.13  
## [5] rmarkdown_0.5.1 knitr_1.10  stringr_0.6.2 digest_0.6.8 
## [9] evaluate_0.7 
+0

Chi [esempi di yihui su GitHub] (http://yihui.name/knitr/demo/engines/), sembrerebbe GitHub rende un [numero di lingue sul proprio] (http: // stackoverflow.com/a/14697529/322912). Quello che potresti fare è aggiungere il tuo [file css] (http://stackoverflow.com/a/14710957/322912). Una terza opzione sarebbe quella di rendere il file md usando ad es. Pandoc. –

+0

Per usare pandoc, si usa 'pandoc -s 027-engine-bash.md -t html -o bash.html', ma si veda [demo] (http://pandoc.org/demos.html) per la miriade di opzioni. –

+0

@Roman Sì, il codice che ho aggiunto alla mia domanda utilizza un file css con 'highlight.js'. Funziona piuttosto bene ma l'evidenziazione R di 'highlight.js' non è bella come l'evidenziazione di' RStudio'. Quello che devo fare ora è che il file css si applica ** solo ** ai pezzi del codice non-R. Grazie ancora per le risposte. –

risposta

19

Il tema di evidenziazione della sintassi predefinito non funziona bene per i blocchi di codice non R e puoi utilizzare altri temi, ad es. pygments

--- 
title: "Bash Highlighting" 
output: 
    html_document: 
    highlight: pygments 
--- 

```{r, engine = 'bash', eval = FALSE} 
for foo in (ls bar) 
do 
    echo $foo 
done 
``` 
+0

Molto più facile della mia risposta. Il [tema predefinito] (http://pandoc.org/README.html#general-writer-options) per 'pandoc' ** è **' pygments', quindi immagino che il mio abbia funzionato solo per pura fortuna. –

2

OK, capito grazie ai commenti. Sembra che sia RStudio che non sta giocando bene con l'evidenziazione. Quando ho mantenere il file Markdown intermedio come in.md:

--- 
title: "Bash Highlighting" 
output: 
    html_document: 
    keep_md: true 
--- 

```{r, engine = 'bash', eval = FALSE} 
for foo in (ls bar) 
do 
    echo $foo 
done 
``` 

poi convertire in HTML con pandoc utilizzando esempio il CSS da BioConductor:

pandoc -s in.md \ 
    -c https://hedgehog.fhcrc.org/bioconductor/branches/RELEASE_3_1/madman/Rpacks/BiocStyle/inst/resources/html/bioconductor.css \ 
    -t html -o out.html 

ottengo bel codice evidenziando per R e bash.

Grazie!