2015-04-28 10 views
7

Próbuję wygenerować raport HTML za pomocą RStudio, R Markdown i knitr. W raporcie chciałbym wyświetlić kod bash. Nie chcę uruchamiać kodu, ale chciałbym go podświetlić.Podkreślanie kodu bash za pomocą knitr/rmarkdown

Zostało wspomniane w another question, ale sugestia nie działa dla mnie. Oto, co próbowałem do tej pory:

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

Żadne z nich nie podświetla mnie w dokumencie HTML. Wiem, że to możliwe, ponieważ pamiętam, że widziałem go gdzieś tydzień temu, ale już go nie mogę znaleźć! Czy ktoś wie, jak mogę to osiągnąć?

Dzięki za czytanie,

Tom

Edit: Właśnie znalazłem this answer, co sugeruje zastosowanie następujący blok kodu w .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> 

Działa to dla kodu w bash dokument, ale zabija podświetlanie kodu 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

O [Przykłady Yihui dotyczących GitHub] (http://yihui.name/knitr/demo/engines/), wydaje się GitHub renderuje [liczbę języków na własny] (http: // stackoverflow.com/a/14697529/322912). Możesz dodać własny plik [css] (http://stackoverflow.com/a/14710957/322912). Trzecią opcją byłoby renderowanie pliku md przy użyciu np. pandoc. –

+0

Aby użyć pandoc, użyłbyś 'pandoc -s 027-engine-bash.md -t html -o bash.html', ale zobacz [demos] (http://pandoc.org/demos.html) dla miriady opcji. –

+0

@Roman Tak, kod dodany do mojego pytania używa pliku css z 'highlight.js'. Działa całkiem nieźle, ale podkreślenie R z 'highlight.js' nie jest tak miłe jak podświetlenie z' RStudio'. Muszę teraz zrobić, aby plik css ** był stosowany ** do fragmentów kodu innego niż R. Jeszcze raz dziękuję za odpowiedzi. –

Odpowiedz

19

Domyślny motyw podświetlania składni nie działa dobrze w przypadku fragmentów kodu innych niż R, a można używać innych kompozycji, np. pygments

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

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

Znacznie łatwiejsze niż moja odpowiedź. [Domyślny motyw] (http://pandoc.org/README.html#general-writer-options) dla 'pandoc' ** to **' pygments', więc domyślam się, że moje działa tylko przez głupie szczęście. –

2

OK, wymyśliłem to dzięki komentarzom. Wygląda na to, że to RStudio, które nie gra z podświetleniem. Kiedy utrzymanie pośredniego plik markdown jak 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 
``` 

następnie przekształcić na HTML pandoc pomocą np CSS z 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 

uzyskać ładny kod Podświetlanie R i bash.

Dzięki!

Powiązane problemy