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

Tal*_*ili 4 latex r tex sweave

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

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

Jos*_*ien 7

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

\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                              frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                              frame=single}
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为代码(和输出)块的外观由SinputSoutput环境的定义控制.这些都是VerbatimLaTeX包提供的环境fancyvrb.(点击此处查看73页pdf,描述fancyvrb提供的众多选项).

快速浏览文件可以看出Sweave.sty这两种环境的默认定义:

\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl}
Run Code Online (Sandbox Code Playgroud)

要更改这些定义,只需添加\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}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述