2015-04-28 8 views
7

Ich versuche, einen HTML-Bericht mit RStudio, R Markdown und Knitr generieren. In dem Bericht möchte ich einige bash Code anzeigen. Ich möchte den Code nicht ausführen, aber ich möchte, dass er hervorgehoben wird.Hervorhebung Bash-Code mit Knitr/Rmarkdown

Es wurde in another question erwähnt, aber der Vorschlag dort funktioniert nicht für mich. Hier ist, was ich bisher versucht habe:

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

Keine von diesen gibt mir Hervorhebung im HTML-Dokument. Ich weiß, dass es möglich ist, weil ich mich erinnere, es vor einer Woche oder so irgendwo gesehen zu haben, aber ich kann es nicht mehr finden! Weiß jemand, wie ich es erreichen kann?

Dank für das Lesen,

Tom

Edit: Ich habe gerade this answer, die in der den folgenden Codeblock in der .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> 

Dies funktioniert für die Bash-Code schlägt mit Dokument aber tötet die Hervorhebung für den R-Code!

## 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

über [Yihui der Beispiele auf GitHub] (http://yihui.name/knitr/demo/engines/), so scheint es GitHub rendert eine [Anzahl der Sprachen auf seiner eigenen] (http: // stackoverflow.com/a/14697529/322912). Was Sie tun könnten, ist Ihre eigene [CSS-Datei] (http://stackoverflow.com/a/14710957/322912) hinzufügen. Eine dritte Option wäre, die MD-Datei unter Verwendung von z.B. Pandora. –

+0

Um Pandoc zu verwenden, würdest du 'pandoc -s 027-engine-bash.md -t html -o bash.html' benutzen, aber [demos] (http://pandoc.org/demos.html) für die Myriaden sehen von Optionen. –

+0

@Roman Ja, der Code, den ich zu meiner Frage hinzugefügt habe, verwendet eine CSS-Datei mit 'highlight.js'. Es funktioniert ziemlich gut, aber die R-Hervorhebung von 'highlight.js' ist nicht so schön wie die Hervorhebung von' RStudio'. Was ich jetzt tun muss, ist, dass die CSS-Datei ** nur ** auf die Nicht-R-Code-Chunks angewendet wird. Nochmals vielen Dank für die Antworten. –

Antwort

19

Das standardmäßige Syntaxhervorhebungsthema funktioniert nicht gut für Nicht-R-Codeabschnitte, und Sie können andere Themen verwenden, z. pygments

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

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

Viel einfacher als meine Antwort. Das [Standardthema] (http://pandoc.org/README.html#general-writer-options) für 'pandoc' ** ist **' pegments', also denke ich, dass meins nur durch dummes Glück funktioniert hat. –

2

OK, habe es dank der Kommentare herausgefunden. Es scheint, dass es RStudio ist, die mit der Hervorhebung nicht nett spielt. Wenn ich die Zwischen Abschlags-Datei als in.md halten:

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

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

dann konvertieren mit pandoc mit zum Beispiel html die CSS von 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 

ich nett Code bekommen für R und bash hervorheben.

Danke!