2011-02-07 21 views
7

Sto avendo difficoltà a capire una risposta ad una domanda precedente ho chiesto qui su StackOverflow situato a:Makefile per i manichini? Mac OS X

More efficient R/Sweave/TeXShop work-flow?

La risposta, in particolare, da utente: las3rjock che suggerisce la creazione di un "Makefile" e eseguire il makefile per automatizzare la compilazione di un file .Rnw in R (Sweave) e poi in LaTeX. Non so cosa sia un makefile, o come usarlo in Terminal (?) Su Mac OS X. La mia ricerca su internet ha restituito cose al di sopra del mio livello di conoscenza. Credo di aver bisogno di una mano che tiene per creare ed eseguire un makefile.

Qualcuno potrebbe dare istruzioni "fittizie" su come creare un makefile per eseguire Sweave/LaTeX, o più al punto, utilizzare la risposta di las3rjock nella domanda precedente? Grazie!

risposta

10

ho scritto un post con i link su getting started with makefiles for Sweave.

da posta:

Ho anche pubblicato quattro documenti Sweave di esempio. Ognuno ha il codice sorgente completo disponibile su github. Ognuno utilizza un makefile. Nei primi due tutorial, dettagli del makefile sono descritti:

2

creare un file denominato Makefile in cui sono archiviati i documenti e aprirlo.

Copia/incolla il codice ha digitato nel vostro Makefile (e ricordarsi di sostituire myfile con il nome del file che si desidera generare)

Aprire una console nella directory documenti e digitare make pdf

6

A makefile è un file di testo in chiaro che specifica come rendere "target" dato un insieme di "dipendenze" attraverso una serie di azioni. Gli obiettivi sono le cose a sinistra con ":" dopo di loro, le dipendenze sono sul resto di quella linea. Le linee rientrate successive sono le azioni che dovrebbero rendere l'obiettivo.

Quindi, ad esempio nel caso LaTeX, il file .pdf è l'obiettivo finale e dipende dal file .tex. Quindi c'è un'azione che esegue pdflatex. Lo stesso .tex viene creato dal file .Rnw, quindi c'è un'altra regola per creare foo.tex da foo.Rnw eseguendo Sweave.

La bellezza di marca è che controlla i timestamp sulle dipendenze. Originariamente era pensato per compilare programmi C di grandi dimensioni, suddivisi in molti file. Durante la compilazione del programma finale non è necessario ricompilare tutto il .C che non è stato modificato, così il tuo Makefile compilerebbe semplicemente i file .C modificati e collegherà tutti i file .o in un file eseguibile.

Make è stato sfruttato molto al di là di questo schema originale, al punto che sono disponibili nuove soluzioni di compilazione automatizzata, quindi è possibile che vengano visualizzate citazioni di cmake, ant, maven e molte altre cose. Non so cosa siano la metà di loro.

3

Ho appena letto la domanda precedente e questa, ma qui c'è un piccolo script di shell che ho scritto per Mac OS X. Non sono sicuro che sia esattamente quello che vuoi, ma forse puoi imparare da questo:

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

Nel caso in cui non si conosce: si può fare questo script eseguibile da chmod +x yourscriptfile.sh e quindi eseguirlo da ./yourscript .La prima linea inizia la vostra creazione Sweave di file di .tex. Il ciclo for è facoltativo: viene utilizzato per ritagliare la grafica .pdf in una sottocartella. Ho trovato questo molto più facile di gestire il margine all'interno della trama di R - in particolare se voglio ottimizzare la posizione nel tuo rapporto .pdf.

Per quanto riguarda il flusso di lavoro, faccio quanto segue: 1. memorizza tutto ciò che è stampato in oggetti R (come risultati di funzioni e grafica). 2. Basta usare una piccola riga in Sweave che fornisce l'intera analisi. In questo modo il mio documento Sweave contiene pochissimo codice non LaTeX e rimane a portata di mano.Ogni volta che posso modificare il testo ho solo bisogno di modificare il file sweave (o se non ho bisogno i calcoli per essere aggiornati o anche bisogno solo il file .tex)

HTH