2011-02-07 136 views
7

我无法理解的回答上一个问题我在这里问在位于计算器:Makefile for傻瓜? Mac OS X的

More efficient R/Sweave/TeXShop work-flow?

尤其答案是来自用户:las3rjock谁建议创建一个“Makefile文件”和运行makefile以自动编译R(Sweave)中的.Rnw,然后在LaTeX中编译.Rnw。我不知道什么是makefile,或者如何在Mac OS X的Terminal(?)中使用它。我的网络搜索已经返回了超出我知识水平的东西。我想我需要一些手来创建和运行makefile。

任何人都可以给出关于如何创建一个makefile来运行Sweave/LaTeX或者更重要的一点,在前面的问题中使用las3rjock的答案的“虚拟”指令?谢谢!

回答

10

我就写了一篇文章的链接getting started with makefiles for Sweave

从帖子:

我还发布了四个示例Sweave文档。 每个人都有完整的源代码在github上可用。 每个人都使用一个makefile。 在第一两个教程,描述生成文件的细节:

2

创建一个名为Makefile的文件,在其中存储文档并将其打开。

复制/粘贴他在Makefile键入的代码(记得要生成的文件的名称,以取代myfile

打开控制台在你的文档目录,然后键入make pdf

6

一makefile是一个纯文本文件,它指定了如何通过一系列操作给定一组'依赖关系'来创建'目标'。目标是左边的事物,后面跟着“:”,依赖关系在该行的其余部分。后续缩进行是应该制作目标的动作。

因此,例如在您的LaTeX案例中,.pdf文件是您的最终目标,并且取决于您的.tex文件。所以有一个运行pdflatex的动作。 .tex本身是从.Rnw文件创建的,所以还有另一个规则可以通过运行Sweave从foo.Rnw创建foo.tex。

make的美妙之处在于它检查依赖项上的时间戳。它最初是用来编译大型C程序,分成许多文件。在编译最终的程序时,没有必要重新编译所有没有更改过的.C,因此您的Makefile只会编译已更改的.C文件并将所有.o文件链接到可执行文件。

Make使用了超出原始方案的方式,以至于可以使用更新的自动构建解决方案,因此您可能会看到提及cmake,ant,maven等一系列其他内容。我不知道他们中的一半是什么。

3

我刚刚读了上一个问题和这一个,但这里是我为Mac OS X编写的一个小shell脚本。我不确定这是否正是您想要的,但也许您可以从中学习:

#!/bin/sh 
R CMD Sweave yourfile.Rnw 
for file in `ls pdfs`; 
do pdfcrop "$file" pdfs/"$file" 
done 
pdflatex yourfile.tex 
open yourfile.pdf 

如果你不知道:你可以通过chmod +x yourscriptfile.sh让这个脚本可执行文件,然后通过./yourscript运行它。第一行开始您的Sweave创作.tex文件。 for循环是可选的:它用于将.pdf图形裁剪到子文件夹。我发现这比在R的绘图中处理边距要容易得多 - 特别是如果我想优化.pdf报告中的位置。

工作流程方面我做了以下工作:1.将所有打印到R对象中的东西(例如函数结果和图形)存储起来。 2.只要在Sweave中使用一条小线,即可获得整个分析结果。这样,我的Sweave文档几乎不包含任何非LaTeX代码,并且仍然非常方便。每当我编辑文本我只需要编辑sweave文件(或者,如果我不需要被刷新,甚至计算只需要.tex文件)

HTH