在一些框架框内获取Sweave代码块?

时间:2012-01-17 22:36:05

标签: r latex tex sweave

我想在结果pdf中的一个框架内打印一个R代码块(在Sweave中)。

这样做有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:7)

简短的回答是,有一种简单的方法。只需将以下行或类似内容添加到您的Sweave文档的前言中:

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

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

快速查看文件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}

enter image description here

答案 1 :(得分:2)

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

Sweave平均复杂度代码只需要很小的调整就可以knitr运行。