Emacs 关于编制Sweave文件的建议

Emacs 关于编制Sweave文件的建议,emacs,r,latex,sweave,ess,Emacs,R,Latex,Sweave,Ess,我希望简化我的文档创建,我想听听人们当前的设置。我觉得圣杯是这样的: 在服务器的一半上编辑Rnw代码 屏风 单键绑定编译 保存文档并运行pdflatex 查看PDF 在屏幕的另一半上;一旦 编译后,PDF将刷新,并以您正在编辑的文档部分为中心 如果编译有错误,请将PDF替换为编译结果(例如latex错误或Swave错误) 我猜测/希望解决方案是将Emacs/ESS的一部分与Emacs概要文件的一些代码和/或一个漂亮的Makefile结合起来。但我真的很想听听大家喜欢用什么方法来创建Swave

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

  • 在服务器的一半上编辑Rnw代码 屏风
  • 单键绑定编译 保存文档并运行pdflatex
  • 查看PDF 在屏幕的另一半上;一旦 编译后,PDF将刷新,并以您正在编辑的文档部分为中心
  • 如果编译有错误,请将PDF替换为编译结果(例如latex错误或Swave错误)

我猜测/希望解决方案是将Emacs/ESS的一部分与Emacs概要文件的一些代码和/或一个漂亮的Makefile结合起来。但我真的很想听听大家喜欢用什么方法来创建Swave和/或Latex文档。

与我交谈过的其他一些R用户使用“每个项目一个目录”设置和一个简单的Makefile。正如您所怀疑的,这在Emacs/ESS中运行良好

我倾向于只调用一个简单的shell脚本
swave
,它是我在添加'R CMD swave'之前编写的(因为我发现重新创建或复制Makefile没有吸引力,YMMV)。我还使用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

您可以使用用于Eclipse的StatET插件来完成所有建议。这就是我用于Swave开发的东西;它非常理解latex和R,包括语法突出显示等

你可以在这里找到它:

林隆豪写了一本很好的指南:

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

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

我使用OS X生成所有LaTeX和Swave报告。对我来说,新的编译管道非常简单,只需将名为
swave.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='.')))
点击Cmd-T将对文档进行排版-pdf将自动在单独的窗口中弹出。TeXShop还采用了技术,因此Rnw源中的Cmd单击将突出显示PDF窗口中的相应输出,PDF窗口中的Cmd单击将突出显示Rnw源中的相应输入


TeXShop只是mac,但它是一个基于Qt/poppler的伟大克隆,可用于Linux、Windows和mac,并支持许多相同的功能,包括TeX hash bangs和SyncTeX。TeXworks已达到成熟程度,它已包含在Windows软件包的2.8版中。

一件节省了我一些时间的事情是emacs中的“自动插入”模式。我对它进行了设置,这样每当我打开一个新的.rnw文件时,emacs就会自动设置一个基本的文档模板,我所需要做的就是开始编写我的报告

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

试试

正如前面的回答中所提到的,我一直是一名粉丝

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


我仍然喜欢在for mac中执行某些仅限R的开发任务。但同时对于Swave文档和一些相关的R-devel,RStudio获胜。它几乎可以进行零调整。我不确定原问题后半部分中与PDF相关的功能。

我同意。swave、StatET和Eclipse可以很好地协同工作。我写了一篇文章,描述了用Eclipse配置Swave的一种方法(splusbook链接已断开。不过我在谷歌上搜索了它,以下看似等效的替代方法对我有效:)我喜欢直接使用Rscript!这么多解决方案调用一个shell来调用R。。。作为记录,处理文件扩展名的
strsplit
paste
是不必要的,
swave
pdflatex
都会自动添加扩展名。我认为在我写这篇文章时是必要的,因为TeX Shop将整个文件名
File.Rnw
传递给了引擎
swave
可以,但是
pdflatex
会阻塞。所以-你说你在.Rnw和.pdf文件之间有cmd click。你也必须跳过这些障碍吗:不,我没有,所以SyncTeX的支持可能有点不对劲。但是我倾向于写很多小的swave块,而不是比特块,所以SyncTeX让我“在球场上”,我没有注意到与不使用一致性相关的问题。
% !TEX TS-program = Sweave