[quote]
引用第12楼谢益辉于2007-11-02 00:40发表的“”:
改天我也研究一下这个Sweave:)[/quote]
从前在水木的emacs版上贴过,现转过来
另外,还是推荐使用 emacs,确实有许多的方便,比如要输入 “<-” ,在 emacs 里只需要按 “shift + - ”,而不用分别输入 “<” 和 “-”
不记得当初是怎么就用上 emacs 的了。据说把那Emacs 快速指南中文译本认真过一遍,也就基本上够用了,其它更多很fancy的东西就看个人的爱好和时间了
其实如果不是为了折腾,emacs 也很简单,我老婆到现在也只用光标键来上下移动,而不是 ctrl+n/p (每次看见她这么用我都气绝...),但是在 emacs 里写 Latex 和 运行 R 也是得心应手
发信人: momozilla (风), 信区: Emacs
标 题: emacs中Sweave的使用
发信站: 水木社区 (Fri Jun 23 19:04:46 2006), 站内
因为版上有同学问起emacs下如何使用Sweave及ess等,我大致把这些整理如下,
不足之处,欢迎指正,呵呵
1、设置:在dotemacs里加载sweave-site,以及其它一些设置
(load "sweave-site")
(defun Rnw-mode ()
(require 'ess-noweb)
(noweb-mode)
(if (fboundp 'R-mode)
(setq noweb-default-code-mode 'R-mode)))
(setq auto-mode-alist(append '(("\\.Rnw\\'" . Rnw-mode)) auto-mode-alist))
(setq auto-mode-alist(append '(("\\.Snw\\'" . Rnw-mode)) auto-mode-alist))
(setq reftex-file-extensions
'(("Snw" "Rnw" "nw" "tex" ".tex" ".ltx") ("bib" ".bib")))
(setq TeX-file-extensions
'("Snw" "Rnw" "nw" "tex" "sty" "cls" "ltx" "texi" "texinfo"))
2、使用:
(1) R应该已经用Alt-x R命令起动了。(如果只是编辑.Rnw文件,可以不用打开R-mode)
(2) 建立一个后缀为.Rnw或.Snw的文件(前者对应的是R,后者是S-Plus,不过在
R里都一样可以用Sweave)。这个文件的基本上与TeX文件一样,比如,有一个文
件名为example.Rnw,例如:
\documentclass[a4paper, 12pt]{article}
\begin{document}
\title{emacs \& Sweave}
\author{}
\maketitle
\section{}
<<>>=
blarblar...
@
\end{document}
(3) 在<<blarblar>>= 和 @ 之间的是R命令代码,比如:
<<>>=
library(survival)
raw <- read.table(....)
plot()
@
在emacs里Sweave已经设置得非常方便,当输入"<"时,''<<>>=''会自动完成,光
标在中间,这时一般需要输入一些参数的设置(见第(4)部分)。这时是在Rterm里,所写
的任何命令代码都可以用C-c C-j送到R-buffer里去执行,有时候这是需要的,比
如一张图,想先看一下效果,而不必等到最后来看,那时可能会有几十张图要看。
当这段R代码完成后,用“@”结束,文件样式又回到TeX。
在编辑好全部或部分完成的.Rnw或.Snw文件后,在R-buffer的提示符处输入:
> Sweave("example")
注:这里的example.Rnw最好在R的pwd下,因为在整个文件里有这样那样的计算
这时你会看到一些反馈信息,如果有错,也会有提示,说明在那里出错了。
注意:在Sweave()里只检查R命令行的正确与否,而不对TeX的语法进行检查!
随后,在同一个目录下你会发现一个TeX文件,除后缀外,文件名与.Rnw一样,比
如这里的example.tex,把这个文件编译成dvi、ps或pdf,如果LaTeX里有错,这
时的编译会有提示,这就跟平时编辑LaTeX文档一样。这个编辑好的文件中包含了
你想显示的R代码(如果有的话)和在R里作的图表,以及其它的LaTeX文本(比如你
对算法的说明,或是文章的其它部分)
这就是Sweave和ess(以及AUCTEX)一起协同工作的基本过程。一些具体的细节,
包括参数设置等,可以让我们对输出进行再好的控制。
(4)Sweave提供了一些设置来控制R代码及输出(如图表)在TEX里的表现。经常用到
有这么几个,其它更多的参见Sweave manual
echo=TRUE,在TEX文档里显示命令行;FALSE则不显示命令行
fig=T,则显示所属R命令行中所作的图,否则(F)不显示。
eval=T,有时你不希望某一段R命令不必在每次Sweave()时都被执行一次,这时
可以使用eval=F来避免这段命令被执行。
此外,还可以在.Rnw的preamble部分对整篇文档进行设置,比如
\SweaveOpts{echo=FALSE, prefix.string="blarblar"}
这里,把echo设成F,即所有的R代码都不显示,但是,如果有个别段的R代码需
要显示,则可以在那段的设置里把echo重新设置为T(TRUE)即可。
3. 几个有用的小tips,
-给每段命令行加个label是个好习惯。
-给每一个.Rnw文件(也许可是一个项目或一篇论文)一个子目录
-如果图形较多,则最好安装一个子目录来保存这些图形,并在
\SweaveOpts{prefix.string=location of directory},具体参见手册
-有时,我们不想对每张图形大小都逐一进行设定(图多的时候,很烦的),就可
以对其进行统一的设定:
\setkeys{Gin}{width=0.7\textwidth}
-另外,每次Sweave()后都得重新打开.tex文件是很不爽地,所以bind一个
revert,这样就只用在Sweave()后,对已经打开的.tex文件F9一下,即可
(global-set-key [f9] 'revert-buffer)
-还有就是.Rnw不支持AUCTEX里的preview
如何调整代码间(code-chunk)的行距(更新 2006-06-25)
有时需要较大的文本行距(二倍行距),这个行距也对代码有效,但是代码行距较
大,不太好看,也太占空间,可以用以下方法(可能还有更好的办法):
先找到这个文件
.../R-2.3.1/share/texmf/Sweave.sty
把其中的
\newenvironment{Schunk}{}{}
改为
\newenvironment{Schunk}{\renewcommand{\baselinestretch}{3}}{}
这里的数字 3 表明,代码的行距为正常值的三倍。你可以使用任何数字(包括浮
点,如0.75)来指明你希望的代码行距
url for Sweave :
http://www.ci.tuwien.ac.at/~leisch/Sweave/