8

我无法理解我在 stackoverflow 上提出的上一个问题的答案,该问题位于:

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

答案特别来自用户:las3rjock,他建议创建一个“makefile”并运行该makefile 以自动在R(Sweave)中编译.Rnw,然后在LaTeX 中编译。我不知道 makefile 是什么,或者如何在 Mac OS X 上的终端(?)中使用它。我的互联网搜索返回的内容超出了我的知识水平。我想我需要一些手来创建和运行一个makefile。

谁能给出关于如何创建一个生成文件来运行 Sweave / LaTeX 的“虚拟”说明,或者更确切地说,利用上一个问题中 las3rjock 的答案? 谢谢!

4

5 回答 5

11

我写了一篇文章,其中包含有关 Sweave 的 makefile 入门的链接。

从帖子:

我还发布了四个示例 Sweave 文档。每个都在 github 上提供了完整的源代码。每个人都使用一个makefile。在前两个教程中,描述了 makefile 的详细信息:

于 2011-02-08T05:46:18.667 回答
7

makefile 是一个纯文本文件,它指定如何通过一系列操作在给定一组“依赖项”的情况下制作“目标”。目标是左侧带有“:”的东西,依赖关系位于该行的其余部分。随后的缩进行是应该成为目标的动作。

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

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

Make 的利用方式超出了最初的方案,以至于可以使用更新的自动构建解决方案,因此您可能会看到提到 cmake、ant、maven 和一堆其他东西。我不知道其中一半是多少。

于 2011-02-07T16:55:22.670 回答
4

我刚刚阅读了上一个问题和这个问题,但这是我为 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 文件)

高温高压

于 2011-02-07T18:20:53.150 回答
3

创建一个名为Makefile您的文档存储位置的文件并打开它。

复制/粘贴他输入的代码Makefile(并记住替换myfile为您要生成的文件的名称)

在您的文档目录中打开一个控制台并输入make pdf

于 2011-02-07T16:40:17.713 回答
0

我来到这里是为了寻找一个 Makefile 的简单示例。所以这里有一个:

# Makefile

showme:
        ls

重要的是,这条线上的间隙 ls实际上是按一下 tab button 的 1 次由于奇怪的原因,它不能是空格。如果你确实使用了空格,你会得到这个错误:“Makefile:4: *** missing separator. Stop.”。

一旦你有一个文件调用Makefile了上面的一小段代码,在你的终端类型make showme中运行它。您应该会看到打印到终端的目录内容。

于 2022-01-29T13:26:04.553 回答