2011-02-07 82 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