【问题标题】:Getting Sweave code chunks inside some framed box?在某个框架框中获取 Sweave 代码块?
【发布时间】:2012-02-12 17:34:31
【问题描述】:

我想在生成的 pdf 中将一个 R 代码块(在 Sweave 中)打印在一个带框的框中。

有没有简单的解决方案?

【问题讨论】:

    标签: r latex tex sweave


    【解决方案1】:

    简短的回答是,是的,有一个简单的方法。只需在 Sweave 文档的序言中添加以下行或类似内容:

    \DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                                  frame=single}
    \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                                  frame=single}
    

    这是可行的,因为代码(和输出)块的外观由SinputSoutput 环境的定义控制。这些都是由 LaTeX 包fancyvrb 提供的Verbatim 环境。 (Click here 的 73 页 pdf 描述了fancyvrb 提供的众多选项)。

    快速查看文件Sweave.sty 会发现这两个环境的默认定义:

    \DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl}
    \DefineVerbatimEnvironment{Soutput}{Verbatim}{}
    \DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl}
    

    要更改这些定义,只需添加您自己设计的\DefineVerbatimEnvironment 语句: (a) 在Sweave.sty 文件的末尾;或 (b) 在您的 *.Snw 文档的开头。


    最后,这里有一个例子来展示它在实践中的样子:

    \documentclass[a4paper]{article}
    
    \usepackage{Sweave}
    
    \DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                                  frame=single}
    \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                                  frame=single}
    \title{Sweave with boxes}
    
    \begin{document}
    \maketitle
    
    <<echo=FALSE>>=
    options(width=60)
    @
    
    Here is an example of a code chunk followed by an output chunk,
    both enclosed in boxes.
    
    <<>>=
    print(rnorm(99))
    @
    
    \end{document}
    

    【讨论】:

    • 亲爱的乔希,我刚刚在这里对这个问题提出了一个后续问题:stackoverflow.com/questions/8907613/…我会为任何 cmets 感到高兴。再次感谢!
    • 不错的答案。如果我可能会问,如何让整个块适合框架?
    • @DominicComtois -- 好问题。从定义这些环境的方式来看(作为单独的 SinputSoutputScode,这似乎并不容易。Hacking Sweave 总是一个巨大的痛,这就是为什么一辉做knitr的原因,现在我已经用了几年了,我无法想象再回头!
    • 是的,我尝试将框架设置应用于整个 Schunk,但它根本没有给出预期的结果。 Knitr 在讨论中一次又一次地回来,我可能会试一试。
    • @DominicComtois -- 很高兴听到。我采用 knitr 有点慢,但从未后悔过。 Here's an example 我刚刚与 knitr 放在一起的相当复杂的东西,使用 Sweave 完全不可能。
    【解决方案2】:

    knitrSweave 的后继者,默认情况下输出所有回显的 R 代码在框中,并将其格式化为边缘。其他不错的功能包括语法着色和 PGF 集成。

    Sweave 平均复杂度的代码只需要很小的修改即可与knitr 一起运行。

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 2012-11-05
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多