2011-02-07 27 views
7

Estoy teniendo problemas para entender la respuesta a una pregunta anterior me pidió aquí en stackoverflow se encuentra en:Makefile para dummies? Mac OS X

More efficient R/Sweave/TeXShop work-flow?

La respuesta, en particular, es a partir de usuario: las3rjock que sugiere la creación de un "makefile" y ejecutando el archivo MAKE para automatizar la compilación de un .Rnw en R (Sweave) y luego en LaTeX. No sé qué es un archivo MAKE o cómo usarlo en Terminal (?) En Mac OS X. Mi búsqueda en Internet me ha devuelto cosas que están por encima de mi nivel de conocimiento. Creo que necesito algo de mano para crear y ejecutar un archivo MAKE.

¿Alguien podría dar instrucciones "ficticias" sobre cómo crear un archivo MAKE para ejecutar Sweave/LaTeX, o más al punto, utilizar la respuesta de las3rjock en la pregunta anterior? ¡Gracias!

Respuesta

10

me escribió un post con enlaces en getting started with makefiles for Sweave.

Desde el puesto de:

También publiqué cuatro documentos Sweave de ejemplo. Cada uno tiene el código fuente completo disponible en github. Cada uno usa un archivo MAKE. En los dos primeros tutoriales, se describen detalles del makefile:

2

cree un archivo llamado Makefile donde están almacenados sus documentos y ábralo.

Copia/pega el código que ha escrito en su Makefile (y recordar para reemplazar myfile por el nombre del archivo que desea generar)

Abrir una consola en el directorio de documentos y escriba make pdf

6

Un makefile es un archivo de texto plano que especifica cómo hacer 'objetivos' dado un conjunto de 'dependencias' mediante un conjunto de acciones. Los objetivos son los elementos de la izquierda con ":" después de ellos, las dependencias están en el resto de esa línea. Las líneas sangradas posteriores son las acciones que deben realizar el objetivo.

Por ejemplo, en su caso LaTeX, el archivo .pdf es su objetivo final, y eso depende de su archivo .tex. Entonces hay una acción que ejecuta pdflatex. El propio .tex se crea a partir del archivo .Rnw, por lo que hay otra regla para hacer foo.tex desde foo.Rnw ejecutando Sweave.

La belleza de make es que comprueba las marcas de tiempo en las dependencias. Originalmente fue diseñado para compilar grandes programas en C, divididos en muchos archivos. Al compilar el programa final no tiene sentido recompilar todo el .C que no ha cambiado, por lo que su Makefile simplemente compilará los archivos .C modificados y vinculará todos los archivos .o en un archivo ejecutable.

Make se ha aprovechado mucho más allá de ese esquema original, hasta el punto de que hay nuevas soluciones de construcción automatizadas disponibles, por lo que es posible que vea menciones de cmake, ant, maven y muchas otras cosas más. No sé cuál es la mitad de ellos.

3

Acabo de leer la pregunta anterior y esta, pero aquí hay un pequeño script de shell que escribí para Mac OS X. No estoy seguro de si eso es exactamente lo que quiere, pero tal vez pueda aprender de esto:

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

En caso de que no sabe: puede hacer que este script ejecutable por chmod +x yourscriptfile.sh y luego ejecutarlo por ./yourscript .La primera línea comienza su creación Sweave de archivo .tex. El bucle for es opcional: se usa para recortar gráficos .pdf en una subcarpeta. Encontré esto mucho más fácil que manejar el margen dentro del trazado de R, en particular si quiero optimizar la posición en su informe .pdf.

Flujo de trabajo: hago lo siguiente: 1. almaceno todo lo que se imprime en objetos R (como resultados de funciones y gráficos). 2. Solo usa una pequeña línea en Sweave que oriente todo el análisis. De esta forma, mi documento Sweave contiene apenas ningún código LaTeX y sigue siendo útil.Siempre que puedo editar el texto sólo hay que editar el archivo Sweave (o si no necesito los cálculos que se actualice o incluso sólo necesito el archivo .tex)

HTH