2011-02-07 37 views
7

tôi đang gặp khó khăn tìm hiểu câu trả lời cho một câu hỏi trước tôi hỏi ở đây trên stackoverflow nằm tại địa chỉ:Makefile for dummies? Mac OS X

More efficient R/Sweave/TeXShop work-flow?

Câu trả lời đặc biệt là từ người dùng: las3rjock người đề nghị tạo ra một "Makefile" và chạy makefile để tự động biên dịch một .Rnw trong R (Sweave) và sau đó trong LaTeX. Tôi không biết makefile là gì, hoặc làm thế nào để sử dụng nó trong Terminal (?) Trên Mac OS X. Tìm kiếm trên internet của tôi đã trả về những thứ trên mức kiến ​​thức của tôi. Tôi đoán tôi cần một số tay nắm giữ để tạo và chạy một makefile.

Bất kỳ ai cũng có thể đưa ra hướng dẫn "giả" về cách tạo tệp makefile để chạy Sweave/LaTeX hoặc nhiều hơn cho vấn đề, sử dụng câu trả lời từ las3rjock trong câu hỏi trước? Cảm ơn bạn!

Trả lời

10

Tôi đã viết một bài với các liên kết trên getting started with makefiles for Sweave.

Từ bài:

Tôi cũng đăng bốn tài liệu Sweave mẫu. Mỗi người có mã nguồn đầy đủ trên github. Mỗi người sử dụng một makefile. Trong hai hướng dẫn đầu tiên, chi tiết của makefile được mô tả:

2

tạo tệp có tên Makefile nơi tài liệu của bạn được lưu trữ và mở.

Copy/dán mã ông gõ vào Makefile của bạn (và nhớ để thay thế myfile bằng tên của tập tin bạn muốn tạo)

mở một giao diện điều khiển trong thư mục tài liệu của bạn và gõ make pdf

6

Một makefile là một tệp văn bản thuần túy chỉ rõ cách làm cho 'mục tiêu' được đưa ra một tập hợp các 'phụ thuộc' thông qua một loạt các hành động. Các mục tiêu là những thứ bên trái với ":" sau đó, các phụ thuộc nằm trên phần còn lại của dòng đó. Các dòng thụt lề tiếp theo là các hành động cần thực hiện mục tiêu.

Vì vậy, ví dụ trong trường hợp LaTeX của bạn, tệp .pdf là mục tiêu cuối cùng của bạn và tệp phụ thuộc vào tệp .tex của bạn. Vì vậy, có một hành động chạy pdflatex. Bản thân .tex được tạo từ tệp .Rnw, vì vậy có một quy tắc khác để tạo foo.tex từ foo.Rnw bằng cách chạy Sweave.

Vẻ đẹp của việc thực hiện là nó kiểm tra dấu thời gian trên các phụ thuộc. Nó ban đầu có nghĩa là để biên dịch các chương trình C lớn, chia thành nhiều tập tin. Khi biên dịch chương trình cuối cùng, không có điểm biên dịch lại tất cả .C mà bạn không thay đổi, vì vậy Makefile của bạn sẽ biên dịch các tệp .C đã thay đổi và liên kết tất cả các tệp .o thành một tệp thực thi.

Thực hiện đã được thừa hưởng cách vượt quá kế hoạch ban đầu đó, đến mức các giải pháp xây dựng tự động mới hơn có sẵn, vì vậy bạn có thể thấy đề cập về cmake, kiến, maven và một loạt các thứ khác. Tôi không biết một nửa số đó là gì.

3

Tôi chỉ đọc câu hỏi trước và câu hỏi này, nhưng đây là một kịch bản trình bao nhỏ mà tôi đã viết cho Mac OS X. Tôi không chắc đó có phải là chính xác những gì bạn muốn hay không, nhưng có thể bạn sẽ học được điều này:

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

trong trường hợp bạn không biết: bạn có thể làm cho kịch bản thực thi điều này bằng cách chmod +x yourscriptfile.sh và sau đó chạy nó bằng cách ./yourscript .Công dòng đầu tiên bắt đầu tạo Sweave bạn của file .tex. Vòng lặp for là tùy chọn: nó được sử dụng để cắt hình ảnh .pdf thành một thư mục con. Tôi thấy điều này dễ dàng hơn nhiều so với việc xử lý số dư trong âm mưu của R - đặc biệt nếu tôi muốn tối ưu hóa vị trí trong báo cáo .pdf của mình.

Làm việc khôn ngoan Tôi làm như sau: 1. lưu trữ mọi thứ được in vào đối tượng R (chẳng hạn như kết quả chức năng và đồ họa). 2. Chỉ cần sử dụng một dòng nhỏ trong Sweave mà nguồn toàn bộ phân tích. Bằng cách đó, tài liệu Sweave của tôi hầu như không chứa bất kỳ mã LaTeX nào và vẫn tiện dụng.Bất cứ khi nào tôi chỉnh sửa văn bản Tôi chỉ cần chỉnh sửa file sweave (hoặc nếu tôi không cần phải tính toán được làm mới hoặc thậm chí chỉ cần file .tex)

HTH