19

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

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

  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 格式。只有在这一点上,我才能看到我对文档所做的任何更改,看看它是否“看起来不错”。

有没有一种方法可以一键编译所有内容? 具体来说,直接从 TextWrangler 或 TeXShop 调用 Sweave / R 会很好。我怀疑可以在终端中编写一个脚本来执行此操作,但我没有使用终端的经验。

如果我可以做任何其他事情来简化或改进我的工作流程,请告诉我。

4

11 回答 11

12

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

pdf: myfile.tex
    R CMD texi2pdf myfile.tex

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

然后我可以通过运行命令在 Mac OS 终端中一步构建文档make pdf

我确信有一种方法可以让您在 Mac OS X 中更接近一键式目标,但这对我来说已经足够好了。

于 2011-02-07T14:59:46.390 回答
9

使用 Gregor Gorjanc 的 Sweave.sh 脚本在 TeXShop 中很容易实现一键编织。从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 和两个引擎文件的权限以允许执行。

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

注意:“Sweave”选项会自行清理,删除 LaTeX 和 Sweave 创建的所有额外文件。如果您的文件名为 myfile.Rnw,这将包括名为 myfile.R 和 myfile.tex 的文件。所以对聪明人说一句话:确保你的 Rnw 文件的基本名称是唯一的;然后不会有任何意外的内容被写入然后删除。

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

于 2011-02-07T16:33:42.710 回答
8

在 bash shell 命令行上:

R CMD Sweave foo.Rnw && pdflatex foo.tex

运行 Sweave,如果成功则继续执行 pdflatex。弹出一个pdf。如果您在 bash 终端中有此操作,则只需按向上箭头即可将其取回并再次执行。然后再次。然后再次。

Makefile 解决方案也不错。

于 2011-02-07T15:03:36.653 回答
8

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

编译按钮

于 2011-04-06T16:27:04.957 回答
7

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

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

texi2pdf("Assign4.tex")

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

于 2011-11-19T05:25:54.557 回答
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)

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

于 2011-03-11T18:31:49.497 回答
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 的某些方面。

于 2011-03-16T16:08:25.937 回答
2

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

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

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

于 2011-04-05T19:54:31.057 回答
1

如果您愿意切换到(付费)解决方案,TextMate有一个 Sweave 插件,可以一步将您从 .Rnw 转换为 PDF:Sweave、排版和查看。结合可以配置为重新加载 PDF 的 Skim,它使调整文件变得非常容易。

于 2011-02-07T16:08:44.677 回答
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 控制台,它有一个图形对象浏览器。无论如何,我可以继续。

于 2011-03-12T07:35:55.213 回答
1

猜猜我迟到了,但我整理了一个网页,记录了我基于 Eclipse 的 Sweave 工作流程(一键式 sweave):

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

于 2011-03-20T04:35:52.250 回答