我想在结果pdf中的一个框架内打印一个R代码块(在Sweave中)。
这样做有一个简单的解决方案吗?
答案 0 :(得分:7)
简短的回答是,有一种简单的方法。只需将以下行或类似内容添加到您的Sweave文档的前言中:
\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
frame=single}
这是有效的,因为代码(和输出)块的外观由Sinput
和Soutput
环境的定义控制。这些都是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}
答案 1 :(得分:2)
knitr
是Sweave
的后继者,默认情况下会在框中输出所有回显的R代码,并将其格式化为边距。其他不错的功能包括语法着色和PGF集成。
Sweave
平均复杂度代码只需要很小的调整就可以knitr
运行。