Sweave文档开发的建议

18

我想简化我的 Sweave 文档创建流程,想了解一下其他人当前的设置。我感觉最理想的情况应该是这样的:

  • 在屏幕一半上编辑 Rnw 代码
  • 单个按键编译 Sweave 文档并运行 pdflatex
  • 在另一半屏幕上查看 PDF;一旦编译完成,PDF 就会刷新并围绕你正在编辑的文档部分居中显示
  • 如果编译出现错误,则用编译的结果替换 PDF(例如 LaTeX 错误或 Sweave 错误)

我猜测/希望解决方案包括 Emacs/ESS 的组合,加上 Emacs 配置文件的一些代码和/或一个好的 Makefile。但我真的很想听听每个人创建 Sweave 和/或 Latex 文档的首选方式。

6个回答

9
我和其他几位R语言用户交流后,发现他们使用“一个项目一个目录”的配置方式,并配合使用简单的Makefile。正如你预料的那样,这种方式与Emacs/ESS很搭配。我倾向于调用一个名为“sweave”的简单shell脚本,该脚本是在添加“R CMD Sweave”之前编写的(因为我不喜欢重新创建或复制Makefile,但你可能有不同的看法)。我还使用Emacs和自动刷新的pdf阅读器(例如okular或kpdf)。Emacs23也可以直接预览pdf文件,但我还没有将工作流程切换到那里。
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

我在 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哈希- 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 中已经包含了它。

我喜欢直接使用Rscript!很多解决方案都需要调用shell来调用R...值得一提的是,使用strsplitpaste处理文件名扩展名并不必要 - Sweavepdflatex都会自动添加扩展名。 - Dav Clark
我认为在我写那篇文章的时候这是必要的,因为 TeX Shop 把整个文件名 File.Rnw 传递给引擎。Sweave 可以正常工作,但是 pdflatex 会出错。 - Sharpie
所以 - 你说你在.Rnw和.pdf文件之间使用cmd-click。你是否也必须通过这些步骤:http://cameron.bracken.bz/synctex-with-sweavepgfsweave-in-texshoptexworks - Dav Clark
不,我没有这样做 - 因此 SyncTeX 支持可能有点偏差。但是我倾向于编写许多小的 Sweave 片段而不是大块,因此 SyncTeX 将我带到“球场”,我没有注意到不使用 concordance 带来的问题。 - Sharpie

6

2
我同意。Sweave、StatET和Eclipse很好地协同工作。我写了一篇文章,描述了一种在Eclipse中配置Sweave的方法。http://bit.ly/adfhZ1 - Jeromy Anglim
(splusbook链接已损坏。但是我通过谷歌搜索,似乎以下替代方案对我有效:http://www.splusbook.com/RIntro/R_Eclipse_StatET.pdf) - isomorphismes

3

试试 RStudio

如之前所述,我是EmacsTeXShop的粉丝。

然而,Rstudio开始让我改变看法了。它是一个快速改进的专门用于R的IDE。绝对值得一试。

我仍然喜欢在mac上使用标准的R IDE进行某些仅限于R的开发任务。但是对于Sweave文档和同时进行的一些相关的R开发,RStudio更胜一筹。它几乎不需要调整即可使用。我不确定原问题后半部分的PDF相关功能。


2

在emacs中,有一个“自动插入”模式可以帮助我节省时间。我已经设置好每次打开一个新的.rnw文件时,emacs会自动设置一个基本文档模板,我只需要开始写我的报告。

更新:我已经停止使用自动插入,现在我使用“template.el”方法。


1

我也使用“每个项目一个目录”和Makefile方法。我还包括创建HTML输出的命令,然后可以使用tth将其转换为OOo和MS Word。这对我很重要,因为我的许多合作者都是MS Office用户,并且不愿意使用PDF输出。我从范德堡大学的Frank Harrell的twiki中学到了很多关于如何做到这一点的知识。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接