开发 Sweave 文档的建议

Recommendations for developing Sweave documents

提问人:Christopher DuBois 提问时间:9/4/2009 更新时间:2/21/2012 访问量:2625

问:

我希望简化我的 Sweave 文档创建,我想听听人们当前的设置。我觉得圣杯是这样的:

  • 在一半的 屏幕
  • 单键绑定编译 Sweave 文档并运行 pdflatex
  • 查看 PDF 在屏幕的另一半;一次 编译后,PDF 将刷新并围绕您正在编辑的文档部分居中
  • 如果编译有错误,请用编译结果替换 PDF(例如 latex 错误或 Sweave 错误)

我猜测/希望解决方案是 Emacs/ESS 的一部分,结合 Emacs 配置文件的一些代码和/或一个漂亮的 Makefile。但我真的很想听听每个人喜欢的创建 Sweave 和/或 Latex 文档的方式。

Emacs R 乳胶 Sweave ESS

评论


答:

9赞 Dirk is no longer here 9/4/2009 #1

我采访过的其他一些 R 用户使用“每个项目一个目录”的设置和简单的 Makefile。正如你所怀疑的,这在 Emacs/ESS 上效果很好。

我倾向于只调用我之前在添加“R CMD Sweave”之前编写的简单 shell 脚本(因为我发现重新创建或复制 Makefile 没有吸引力,YMMV)。我还使用 Emacs 和自动刷新的 pdf 查看器(如 或 )。Emacs23 也可以直接预览 pdf 文件,但我还没有将我的工作流程切换到它。sweaveokularkpdf

edd@ron:~$ cat bin/sweave
#!/bin/bash -e

function errorexit () {
    echo "Error: $1"
    exit 1
}

function filetest () {
    if [ ! -f $1 ]; then
       errorexit "File $1 not found"
    fi
    return 0
}


if [ "$#" -lt 1 ]; then
    errorexit "Need to specify argument file"
fi


BASENAME=$(basename $1 .Rnw)

RNWFILE=$BASENAME.Rnw
filetest $RNWFILE
echo "library(tools); Sweave(\"$RNWFILE\")" \
      | R --no-save --no-restore --slave

LATEXFILE=$BASENAME.tex
filetest $LATEXFILE && pdflatex $LATEXFILE
6赞 Shane 9/5/2009 #2

你可以用 Eclipse 的 StatET 插件做你建议的一切。这就是我用于 Sweave 开发的方法;它对 latex 和 R 都非常了解,包括语法高亮等。

你可以在这里得到它:http://www.walware.de/goto/statet

Longhow Lam 写了一个很好的指南:http://www.splusbook.com/Rintro/R_Eclipse_StatET.pdf

http://www.statalgo.com/?p=93

评论

2赞 Jeromy Anglim 2/23/2010
我同意。Sweave、StatET 和 Eclipse 可以很好地协同工作。我写了一篇文章,描述了一种使用 Eclipse 配置 Sweave 的方法 bit.ly/adfhZ1
0赞 isomorphismes 9/9/2011
(splusbook 链接已损坏。 但是我用谷歌搜索了一下,以下看似等效的替代方案对我有用: splusbook.com/RIntro/R_Eclipse_StatET.pdf)
1赞 Abhijit 9/5/2009 #3

我也使用“每个项目一个目录”和 Makefile 方法。我还包含用于在 HTML 中创建输出的命令,然后可以使用 tth 将其转换为 OOo 和 MS Word。这对我来说很重要,因为我的很多合作者都是 MS Office 用户,并且抵制使用 PDF 输出。我从范德比尔特的弗兰克·哈雷尔(Frank Harrell)的twiki中学到了很多东西。

就我个人而言,我使用 gvim 作为我选择的编辑器,从那里运行 make 非常简单,就像它来自 Emacs 一样。

6赞 Sharpie 9/24/2009 #4

我在 OS X 上使用 TeXShop 来生成我所有的 LaTeX 和 Sweave 报告。对我来说,一个新的编译管道就像添加一个文件一样简单,调用该文件包含以下内容:Sweave.engine~/Library/TeXShop/Engines/

#!/usr/bin/env Rscript
args <- commandArgs(T)

fname <- strsplit(args[1],'\\.')[[1]][2]

Sweave(paste(fname,'Rnw',sep='.'))

system(paste('pdflatex',paste(fname,'tex',sep='.')))

Sweave 现在是一种在 TeXShop 中编译文档的可选方法。我可以通过在文件顶部添加以下 TeX hash-bang 将其设置为文档的默认值:

% !TEX TS-program = Sweave

按 Cmd-T 将对文档进行排版 - pdf 会自动在单独的窗口中弹出。TeXShop 还集成了 SyncTeX 技术,因此 Rnw 源中的 Cmd-Click 将突出显示 PDF 窗口中的相应输出,而 PDF 窗口中的 Cmd-Click 将突出显示 Rnw 源中的相应输入。

TeXShop 仅适用于 Mac,但基于 Qt/poppler 的克隆 TeXworks 可用于 Linux、Windows 和 Mac,并支持许多相同的功能——包括 TeX hash-bangs 和 SyncTeX。TeXworks 已经达到了一个成熟度,它包含在 Windows 的 MikTeX 软件包的 2.8 版中。

评论

0赞 Dav Clark 2/11/2011
我喜欢直接使用 Rscript!如此多的解决方案调用 shell 来调用 R...作为记录,处理文件扩展名的 和 不是必需的 - 两者都会自动添加扩展名。strsplitpasteSweavepdflatex
0赞 Sharpie 2/11/2011
我认为在我写那篇博文的时候是必要的,因为 TeX Shop 将整个文件名传递给了引擎。 没问题,但会窒息。File.RnwSweavepdflatex
0赞 Dav Clark 7/2/2011
所以 - 你说你有 cmd-click 在你的 .Rnw 和 .pdf 文件。你是否也必须跳过这些箍:cameron.bracken.bz/......
0赞 Sharpie 7/2/2011
不,我没有 - 所以 SyncTeX 支持可能有点偏离。但是我倾向于写很多小的 Sweave 块而不是位块,所以 SyncTeX 让我“陷入了困境”,我没有注意到与不使用一致性相关的问题。
2赞 Kevin Wright 11/3/2009 #5

为我节省了一些时间的一件事是 emacs 中的“自动插入”模式。我设置了它,以便每次打开一个新的 .rnw 文件时,emacs 都会自动设置一个基本的文档模板,我需要做的就是开始编写我的报告。

更新:我已不再使用自动插入。现在我使用“template.el”方法。

3赞 Paul 'Joey' McMurdie 9/10/2011 #6

试用 RStudio

正如之前的回答中提到的,我一直是 EmacsTeXShop 的粉丝。

然而,Rstudio 开始赢得我的青睐。这是一个快速改进的 R 专用 IDE,绝对值得一试。

我仍然喜欢在适用于 Mac 的标准 R IDE 中执行某些仅限 R 的开发任务。但对于 Sweave 文档和一些相关的 R 开发,RStudio 胜出。它几乎无需任何调整即可工作。我不确定原始问题后半部分的 PDF 相关功能。