【问题标题】:Sweave syntax highlighting in output在输出中突出显示 Sweave 语法
【发布时间】:2011-01-26 17:55:18
【问题描述】:

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

有什么建议吗?

【问题讨论】:

    标签: r syntax-highlighting sweave


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        从@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 上)。

        【讨论】:

        • 顺便说一句,minted 需要 --shell-escape 东西,因为它在 Python 中进行语法高亮显示。
        • 在 r-studio 中,shell 转义是通过工具 - 全局选项 - Sweave - 启用 shell 转义命令完成的。 Minted 还需要 python 包“pygments”。在 Linux 上,通过“sudo pip2 install Pygments”安装
        【解决方案4】:

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

        【讨论】:

        • 谢谢。我似乎无法让SweaveListingUtils 工作,但我会试试\renewenvironment 的东西。
        • @Ken Williams:你能具体说明这个包有什么问题吗?我希望它可以作为一个简单易用的解决方案对您有用。如果错误仍然存​​在,祝你好运!
        猜你喜欢
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        • 2011-05-03
        • 2012-04-19
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多