2011-01-26 52 views
5

是否有人設法在Sweave文檔的輸出中使用顏色語法高亮顯示?我已經能夠通過添加盒等自定義輸出樣式在Sweave.sty文件,如下所示:Sweave語法在輸出中突出顯示

\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontseries=bc,frame=single} 
\DefineVerbatimEnvironment{Soutput}{Verbatim}{frame=leftline} 
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontseries=bc} 

而且我可以得到minted包做逐字代碼塊的語法高亮顯示在我的文檔一樣所以:

\begin{minted}{perl} 
use Foo::Bar; 
... 
\end{minted} 

但我不知道如何結合兩個R輸入部分。我試過以下內容:

\DefineVerbatimEnvironment{Sinput}{minted}{r} 
\DefineVerbatimEnvironment{Scode}{minted}{r} 

有什麼建議嗎?

回答

3

This topic on tex.StackExchange可能對您有意思,因爲它建議您在R中加載SweaveListingUtils package以獲得簡單的解決方案。

+0

謝謝。我似乎無法讓`SweaveListingUtils`工作,但我會嘗試`\ renewenvironment`的東西。 – 2011-01-26 19:23:03

+0

@Ken Williams:你能指定包裝有什麼問題嗎?我希望它可以爲你工作,作爲一個不錯的和簡單的解決方案。如果錯誤仍然存​​在,祝你好運與其他選擇! – daroczig 2011-01-26 19:55:03

5

是的,看看Rcpp的一些小插圖,例如(只選一個)Rcpp-FAQ pdf

我們使用Romain的highlight,它本身可以用於安德烈西蒙的hightlight二進制文件。它使得所有事情都變得更加複雜 - 製作文件等等 - 但是我們從R和C/C++代碼中獲得豐富多彩的輸出。這使得它值得。

4

下面是我最終解決它的方法,從@ daroczig的建議開始。

\usepackage{minted} 

\renewenvironment{Sinput}{\minted[frame=single]{r}}{\endminted} 
\DefineVerbatimEnvironment{Soutput}{Verbatim}{frame=leftline} 
\DefineVerbatimEnvironment{Scode}{Verbatim}{} 

當我在這,我需要得到緩存工作,因爲我使用的是大型數據集和一個大塊被取約3分鐘即可完成。所以我寫了這個zsh外殼函數來處理一個.Rnw文件,緩存:

function sweaveCache() { 
    Rscript -e "library(cacheSweave); setCacheDir(getwd()); Sweave('$1.Rnw', driver = cacheSweaveDriver)" && 
    pdflatex --shell-escape $1.tex && 
    open $1.pdf 
} 

現在我只是做sweaveCache myFile和我在預覽打開(在OS X)的結果。

5

我有一個解決方案已經爲我工作,我還沒有嘗試過任何其他系統,儘管如此,事情可能不適合你。我已經在https://gist.github.com/797478上發佈了一些代碼,它是一組修改的Rweave驅動程序函數,它們利用鑄造塊代替逐字塊。

要使用此驅動程序,只需在使用driver = RweaveLatexMinted()選項調用Sweave函數時指定它即可。