5

有没有人设法在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

4 回答 4

5

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

我们使用 Romain 的highlight本身可以移植到 Andre Simon的hightlight二进制文件。它使一切都更加复杂——用于小插图等 pp 的 Makefiles——但我们从 R 和 C/C++ 代码中获得了丰富多彩的输出。这使它值得。

于 2011-01-26T20:35:59.617 回答
5

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

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

于 2011-01-26T21:24:43.300 回答
4

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

\usepackage{minted}

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

当我这样做时,我需要让缓存工作,因为我使用的是大型数据集,而一个块大约需要 3 分钟才能完成。所以我写了这个zshshell函数来处理一个.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 上)。

于 2011-01-26T21:02:19.217 回答
3

tex.StackExchange 上的这个主题可能对您来说很有趣,因为它建议在 R 中加载SweaveListingUtils 包以便于解决。

于 2011-01-26T18:16:40.293 回答