更高效的R / Sweave / TeXShop工作流程?

时间:2011-02-07 14:31:20

标签: r latex sweave textwrangler

我现在已经可以在我的Mac OS X 10.6机器上正常工作,这样我就可以创建具有Sweave的漂亮的LaTeX文档,其中包括R代码,输出和LaTeX格式的片段。不幸的是,我觉得我的工作流程有点笨拙而效率低下:

  1. 使用TextWrangler,我在一个.Rnw文件中将LaTeX代码和R代码(由<<>> =上面和@下面的R代码块)包围在一起。

  2. 保存更改后,我使用Sweave命令从R调用.Rnw文件

    Sweave(file="/Users/mymachine/Documents/Assign4.Rnw", 
            syntax="SweaveSyntaxNoweb")
    

    作为回应,R输出以下消息:

      

    您现在可以在'Assign4.tex'上运行LaTeX

    然后我在R目录中找到.tex文件(Assign4.tex)并将其复制到我的文档~/Documents/中的文件夹,其中.Rnw文件就位(将所有内容保存在一个位置)

  3. 然后我在TeXShop中打开.tex文件(例如Assign4.tex)并将其编译成pdf格式。只有在这一点上,我才能看到我对文档所做的任何更改,看看它是否“看起来不错”。

  4. 有没有办法可以通过一键点击来编译所有内容?具体来说,直接从TextWrangler或TeXShop调用Sweave / R会很不错。我怀疑有可能在终端编写脚本来执行此操作,但我没有使用终端的经验。

    如果我能采取其他任何措施来简化或改善我的工作流程,请告诉我。

11 个答案:

答案 0 :(得分:12)

我使用以下表格的Makefile作为我的Sweave文档:

pdf: myfile.tex
    R CMD texi2pdf myfile.tex

myfile.tex: myfile.Rnw
    R CMD Sweave myfile.Rnw

然后我可以通过运行命令make pdf

在Mac OS终端中一步构建文档

我确信有一种方法可以让它更接近Mac OS X中的一键式目标,但这对我来说效果不错。

答案 1 :(得分:9)

使用Gregor Gorjanc的Sweave.sh脚本在TeXShop中轻松实现一键式Sweaving。 从http://cran.r-project.org/contrib/extra/scripts/Sweave.sh获取并将其放入~/Library/TeXShop/bin/文件夹。

然后将以下文件添加到~/Library/TeXShop/engines/文件夹:

作为Sweave.engine

#!/bin/bash
~/Library/TeXShop/bin/Sweave.sh  -ld "$1"

作为SweaveNoClean.engine

#!/bin/bash
~/Library/TeXShop/bin/Sweave.sh  -nc -ld "$1"

您必须设置Sweave.sh和两个引擎文件的权限才能执行。

要单击一下,在添加这些文件后重新启动TeXShop,打开Sweave文档(带有Rnw扩展名),然后在文档窗口上方的下拉菜单中,将其从LaTeX更改为Sweave或SweaveNoClean。

当心:“Sweave”选项将自行清理,删除LaTeX和Sweave创建的所有额外文件。如果您的文件名为myfile.Rnw,则会包含名为myfile.R和myfile.tex的文件。所以明智的一句话:确保你的Rnw文件的基名是唯一的;然后没有任何意外的事情会被写下来然后删除。

SweaveNoClean选项不会自行清理。这样可以确保您不会删除任何意外的内容;虽然如果你编写一个myfile.Rnw它仍然可以写一个名为myfile.tex的文件。这也不会删除任何已创建的图形,以防您想要将它们与完整的排版文档分开。

答案 2 :(得分:8)

在bash shell命令行上:

R CMD Sweave foo.Rnw && pdflatex foo.tex
运行Sweave,如果成功,则继续执行pdflatex。 Out pops pdf。如果你已经在bash终端中获得了这个,那么只需按下向上箭头即可将其恢复并再次执行。然后再次。再一次。

Makefile解决方案也很好。

答案 3 :(得分:8)

RStudio有一个按钮可以一次完成。需要注意的是,它在自己的会话中运行,因此您可能设置的任何工作空间变量都将被忽略。

the compile button

答案 4 :(得分:7)

请注意:您实际上可以使用texi2dvi(在工具包中)直接从R调用pdflatex等内容。例如:

Sweave(file="/Users/mymachine/Documents/Assign4.Rnw")

texi2pdf("Assign4.tex")

将您的Rnw文件编译为pdf。因此,无需离开R来处理tex-> pdf步骤。

答案 5 :(得分:2)

我将这些(保存为sweave.engine和sweavebibtex.engine)用于texshop中的自定义引擎。我通常在R中编写代码块,然后将块复制到我在texshop中打开的rnw文件中。我喜欢一个解决方案,它允许我在同一个文档(不是emacs)中对R和tex进行语法高亮和拼写校正。

#!/bin/bash
echo 'SWEAVE | PDFLATEX. Custom engine--Akasurak-16Nov2009'
export PATH=$PATH:/usr/texbin:/usr/local/bin
R CMD Sweave "$1"
pdflatex "${1%.*}"

和第二个,也是为了做bibtex:

#!/bin/bash
date
before="$(date +%s)"
echo 'SWEAVE | PDFLATEX | BIBTEX | PDFLATEX | PDFLATEX. Custom engine--Akasurak-16Nov2009'
#Updated 20Jul2010 for auto including Sweave.sty


export PATH=$PATH:/usr/texbin:/usr/local/bin

R CMD Sweave "$1"
R CMD pdflatex "${1%.*}"
bibtex  "${1%.*}.aux"
R CMD pdflatex "${1%.*}"
R CMD pdflatex "${1%.*}"


after="$(date +%s)"
elapsed_seconds="$(expr $after - $before)"
date
echo Elapsed time '(m:s)': $(date -r $elapsed_seconds +%M:%S)

不能说他们是最好的做事方式,但他们确实有效。

答案 6 :(得分:2)

我使用Aquamacs或Eclipse来编辑.Rnw文件,然后我使用以下shell函数来编译&查看它:

sweaveCache () {
  Rscript -e "library(cacheSweave); setCacheDir(getwd()); 
    Sweave('$1.Rnw', driver = cacheSweaveDriver)" && 
  pdflatex --shell-escape $1.tex && 
  open $1.pdf
}

请注意,我正在使用cacheSweave驱动程序,这有助于避免不断重新执行需要很长时间才能运行的代码段。

顺便说一句,我也试图切换到Babel而不是Sweave;不知道我最终会更频繁地使用它,但肯定有我喜欢的Babel方面。

答案 7 :(得分:2)

最好的解决方案是:为TeXShop创建一个新的* .engine,然后使用快捷方式或1按钮进行排版。

http://cameron.bracken.bz/sweave-for-texshop

Cameron也非常敏感,所以我强烈推荐他的解决方案。

答案 8 :(得分:1)

如果您愿意切换到(付费)解决方案,TextMate有一个Sweave插件,可以一步一步将.Rnw带到PDF:Sweave,typeset和view。结合Skim,可以配置为重新加载PDF,它可以很容易地调整文件。

答案 9 :(得分:1)

我有同样的问题(我使用Mac OSX),我选择下载Eclipse Classic 3.6.2。然后安装了StatET插件。设置它有点毛茸茸但是一旦你做这个环境很好,因为你可以使用pdflatex一键编译你的.Rwn Sweave文档并为你最喜欢的查看器设置选项,这样当你编译时会自动弹出.pdf在TeXShop中。您也可以在TeXShop中执行此操作,但TeXShop对于调试.Rnw文件很糟糕,并且它不会突出显示.Rwn文件中的R代码。在Eclipse中,您可以自定义语法高亮(不是Texclipse结尾的最佳语法,但确定),以便您可以轻松区分R和LaTeX代码。您还可以从Eclipse中启动R控制台,它具有图形对象浏览器。无论如何,我可以继续。如果您需要有关如何安装所有内容的详细信息,请给我留言。

答案 10 :(得分:1)

猜猜我参加派对已经迟到了,但是我整理了一个网页,记录了我基于Eclipse的Sweave工作流程(带一键式sweave):

http://www.stanford.edu/~messing/ComputationalSocialScienceWorkflow.html