有没有人设法在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}
有什么建议吗?
答案 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)
This topic可能对你很有意思,因为它建议在R中加载SweaveListingUtils package以便于解决。