输出中的Sweave语法高亮显示

时间:2011-01-26 17:55:18

标签: r syntax-highlighting sweave

有没有人设法在Sweave文档的输出中使用颜色语法高亮显示?我已经能够通过在Sweave.sty文件中添加框等来自定义输出样式,如下所示:

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

有什么建议吗?

4 个答案:

答案 0 :(得分:5)

是的,请查看Rcpp的一些插图(例如选择一个)Rcpp-FAQ pdf

我们使用Romain的highlight,它本身可以通过Andre Simon向hightlight二进制文件扩展。它使所有内容更加复杂 - 为小插图制作文件等 - 但我们从R和C / C ++代码获得了丰富多彩的输出。这值得。

答案 1 :(得分:5)

我有一个对我有用的解决方案,我没有在任何其他系统上尝试过,所以事情可能无法为您开箱即用。我在https://gist.github.com/797478发布了一些代码,这是一组修改后的Rweave驱动程序函数,它们使用了铸造块而不是逐字块。

要使用此驱动程序,只需在使用driver = RweaveLatexMinted()选项调用Sweave函数时指定它。

答案 2 :(得分:4)

从@daroczig的建议开始,这就是我最终解决问题的方法。

\usepackage{minted}

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

当我参与其中时,我需要让缓存工作,因为我正在使用大型数据集,而一个块需要大约3分钟才能完成。所以我编写了这个zsh shell函数来处理带有缓存的.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上)。

答案 3 :(得分:3)

tex.StackExchange上的

This topic可能对你很有意思,因为它建议在R中加载SweaveListingUtils package以便于解决。