2013-02-04 39 views
9

我正在使用Rstudio中的一個Markdown文檔來比較Perl和R.我想要 能夠做的是根據使用的語言使用不同的代碼塊背景顏色。 例如在knitr/markdown中更改代碼塊顏色

R代碼裏面塊

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

Perl代碼塊

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

如果使用knitr與上面的代碼生成一個HTML文件時,R代碼塊具有固體灰色背景,而代碼塊的輸出具有白色/透明背景。

但是,Perl代碼塊和輸出具有白色/透明背景,看起來很混亂。我希望在markdown/knitr中有這樣一個優雅的方法。

回答

4

發生這種情況的原因是因爲當您運行knit2html時,RStudio僅捆綁了jscss以突出顯示R代碼。您可以通過在您的Rmd文件中包含以下css和javascript來爲其他語言啓用語法高亮顯示。

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

這仍然不能解決不同背景的問題,因爲兩者都受到主題CSS的控制。但是,您可以包含自定義CSS來爲輸出提供不同的背景。

更新:

添加以下附加線將幫助調整輸出的背景顏色(我選擇了淺黃色,但您可以根據需要定製)

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

感謝這篇有用的文章。你知道是否可以使用鏈接的樣式表**僅用於非R代碼塊?與RStudio捆綁在一起的R代碼突出顯示優於'highlight.js'提供的內容。 –

4

我覺得這是一個問題對於RStudio。目前,它似乎只支持兩種語言(用於語法高亮顯示) - R和C++;也許你可以向他們發送一個功能請求,或者你可以使用其他工具(如Pandoc)渲染你的markdown輸出,或者只是把md文件放在Github上,它也爲Perl提供語法高亮顯示,例如。示例028-engine-perl.md

+0

謝謝,我跟rstudio支持人員交談,他們非常有幫助。 – iantist

7

按照Yihui的建議,我和Rstudio支持人員交談。他們指出,我基本上可以讓R能夠用我自己的樣式表與下列R-代碼:

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

「custom.css」必須在你的工作目錄。我下載了R studio的CSS表格(link)以查找要修改的部分。在樣式表中有一塊代碼

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

正如Yihui指出的那樣,它只支持R和C++的顏色編碼塊。對以下內容的快速更改包括perl: code.r,code.cpp,code.perl {background-color:#F8F8F8;} 或者通過在code.r背景塊下面添加以下內容來製作不同的顏色。

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

請注意,此方法仍不會語法高亮顯示perl代碼,因爲RStudio插入的JavaScript只突出顯示R和CPP代碼。 – Ramnath