2013-02-04 18 views
9

Pracuję nad dokumentem obniżki w Rstudio, który porównuje Perl i R. To, co chciałbym, aby mógł mieć różne kolory tła bloku kodu w zależności od używanego języka . Przykładowozmiana koloru bloku kodu w knitr/markdown

blok kodowania R

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

kod Perl blok

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

Jeśli wygenerować plik HTML przy knitr z powyższego kodu, blok kodowania R ma stałe szare tło, podczas gdy wyjście z bloku kodu ma białe/przezroczyste tło.

Jednak blok i wyjście kodu Perla ma białe/przezroczyste tło, które wygląda na zagmatwane. Mam nadzieję, że jest elegancki sposób na zrobienie tego w markdown/knitr.

Odpowiedz

4

Dzieje się tak, ponieważ program RStudio zawiera tylko js i css wymagane do wyróżnienia kodu R po uruchomieniu knit2html. Możesz włączyć podświetlanie składni dla innych języków, włączając następujące pliki css i javascript do pliku 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> 

to nadal nie rozwiązuje problemu różnych środowisk, ponieważ oba są kontrolowane przez css motywu. Możesz jednak włączyć niestandardowe css, aby zapewnić inne tło dla wyjść.

Aktualizacja:

Dodawanie następujące dodatkowe linie pomogą dopasować kolor wyjściowy tła (wybrałem jasnożółte, ale można go dostosować zgodnie z oczekiwaniami)

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

dzięki za użyteczny wpis. Czy wiesz, czy możliwe jest użycie połączonego arkusza stylów ** tylko ** dla fragmentów kodu innego niż R?Podświetlanie kodu R w pakiecie z RStudio jest lepsze niż to, co zapewnia 'highlight.js'. –

4

myślę, że jest to kwestia dla RStudio. W tej chwili wydaje się, że obsługuje tylko dwa języki (dla podświetlania składni) - R i C++; być może możesz wysłać do nich zapytanie o funkcję lub możesz wyrenderować wyniki ze znacznikami za pomocą innych narzędzi, takich jak Pandoc, lub po prostu umieść pliki md na Github, które również podświetlają składnię dla Perla, np. przykład 028-engine-perl.md.

+0

Dzięki, rozmawiałem z supportem rstudio, byli bardzo pomocni. – iantist

7

Rozmawiałem ze wsparciem Rstudio zgodnie z sugestią Yihui. Wskazywali oni, że mogę w zasadzie powiedzieć, R, aby użyć własnego arkusza stylów z następującego kodu R:

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

„custom.css” musi znajdować się w katalogu roboczym. Pobrałem arkusz CSS pracowni R (link), aby wyszukać sekcję do modyfikacji. W obrębie arkusza stylów istnieje blok kodu

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

Jak Yihui wskazał to będzie tylko obsługiwać kolorowe bloki zakodowane dla R i C++. Szybka zmiana do następujących obejmuje perl: code.r, code.cpp, code.perl {background-color: # F8F8F8;} Lub inny kolor poprzez dodanie poniżej poniżej code.r blok tła.

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

Należy zauważyć, że to podejście nadal nie będzie zawierało kodu perl, ponieważ javascript wstawiany przez RStudio podświetla tylko kod R i CPP. – Ramnath