2011-02-07 17 views
19

Ahora tengo todo para que funcione correctamente en mi máquina Mac OS X 10.6 para que pueda crear documentos LaTeX de aspecto decente con Sweave que incluyen fragmentos de código R, salida y formato LaTeX juntos. Por desgracia, me siento como mi flujo de trabajo es un poco torpe e ineficiente:¿Flujo de trabajo R/Sweave/TeXShop más eficiente?

  1. Usando TextWrangler, escribo código LaTeX y código R (rodeado de < < >> = arriba y abajo @ R trozo de código) junto en un archivo .Rnw.

  2. Después de guardar los cambios, me llaman el archivo .Rnw de R usando el comando Sweave

    Sweave(file="/Users/mymachine/Documents/Assign4.Rnw", 
         syntax="SweaveSyntaxNoweb") 
    

    En respuesta, R emite el siguiente mensaje:

    Ahora puede ejecutar en LaTeX ' Assign4.tex '

    Entonces, encuentro el archivo .tex (Assign4.tex) en el directorio R y lo copio en la carpeta de mis documentos ~/Documents/ donde está el archivo .Rnw (para mantener todo en un solo lugar).

  3. Luego abro el archivo .tex (por ejemplo, Assign4.tex) en TeXShop y lo compilo en formato pdf. Solo en este punto puedo ver los cambios que he realizado en el documento y ver si se ve bien.

¿Hay una manera que puedo compilar todo con el clic de un botón? Específicamente, sería bueno llamar a Sweave/R directamente desde TextWrangler o TeXShop. Sospecho que podría ser posible codificar un script en Terminal para hacerlo, pero no tengo experiencia con Terminal.

Háganme saber si hay otras cosas que pueda hacer para agilizar o mejorar mi flujo de trabajo.

Respuesta

9

Hacer un clic con un solo clic es fácil de hacer en TeXShop usando el guión Sweave.sh de Gregor Gorjanc. Consíguelo desde http://cran.r-project.org/contrib/extra/scripts/Sweave.sh y póngalo en su carpeta ~/Library/TeXShop/bin/.

A continuación, agregue los siguientes archivos a la carpeta ~/Library/TeXShop/engines/:

Como Sweave.engine:

#!/bin/bash 
~/Library/TeXShop/bin/Sweave.sh -ld "$1" 

Como SweaveNoClean.engine:

#!/bin/bash 
~/Library/TeXShop/bin/Sweave.sh -nc -ld "$1" 

Vas a tener que establecer los permisos de Sweave.sh y los dos archivos del motor para permitir la ejecución.

Para barrer con un clic, reinicie TeXShop después de agregar estos archivos, abra el documento Sweave (con la extensión Rnw) y en el menú desplegable sobre la ventana del documento, cámbielo de LaTeX a Sweave o SweaveNoClean.

CUIDADO: La opción "Sweave" (Arreglar) borrará después de sí misma, borrando todos los archivos extra creados por LaTeX y Sweave. Si su archivo se llama myfile.Rnw, esto incluirá archivos llamados myfile.R y myfile.tex. Así que una palabra para el sabio: asegúrese de que el nombre de su archivo Rnw sea único; entonces nada inesperado se escribirá y luego se eliminará.

La opción SweaveNoClean no se limpia después de sí misma. Esto asegura que no elimines nada inesperado; aunque podría escribir sobre un archivo llamado myfile.tex si arrastras un myfile.Rnw. Esto tampoco borra ningún gráfico que haya sido creado, en caso de que quiera separarlos de su documento tipográfico completo.

+0

Gracias Aaron; Seguí tus instrucciones; sin embargo todavía no hay suerte. La consola de TeXShop escupe dos líneas (después de compilar con la opción Sweave en el menú desplegable): /Users/kg/Library/TeXShop/Engines/Sweave.engine: línea 2:/Users/kg/Library/TeXShop/bin/Sweave: No tal archivo o directorio –

+0

@ user594795: Intente modificar los dos archivos del motor para decir "Sweave.sh" en lugar de simplemente "Sweave"; He editado mi respuesta en consecuencia. – Aaron

+0

Usted mencionó anteriormente, necesito configurar los permisos. Lo tomé como el cambio de todos los archivos a "leer y escribir" después de hacer clic en "Obtener información" en los archivos. La razón por la que pregunto es que ahora recibo el siguiente mensaje (todavía en la consola de TeXShop): /Users/kg/Library/TeXShop/Engines/Sweave.engine: línea 2:/Users/kg/Library/TeXShop/bin/Sweave.sh: permiso denegado –

12

Puedo usar un Makefile de la siguiente forma para mis documentos Sweave:

pdf: myfile.tex 
    R CMD texi2pdf myfile.tex 

myfile.tex: myfile.Rnw 
    R CMD Sweave myfile.Rnw 

Entonces se puede construir el documento en un solo paso en el sistema operativo Mac terminal ejecutando el comando make pdf

estoy Seguro que hay una manera de acercar esto a tu objetivo de un clic en Mac OS X, pero esto funciona bastante bien para mí.

+0

También uso un makefile para Sweave; Publiqué varios ejemplos de makefiles para la compilación de Sweave: vea los enlaces al final de esta publicación: http://jeromyanglim.blogspot.com/2010/12/r-workflow-slides-from-talk-at.html –

8

En la línea de comandos shell bash:

R CMD Sweave foo.Rnw && pdflatex foo.tex 

Runs Sweave, y si tiene éxito que se va a hacer pdflatex. Aparece un pdf. Si tienes esto en un Terminal bash entonces solo presiona la flecha hacia arriba para recuperarlo y hacerlo de nuevo. Y otra vez. Y otra vez.

La solución Makefile también es buena.

+3

que uso esto también, pero un poco más (también puede soltar las extensiones de archivo). Básicamente solo agrega bibtex en la cadena y abre el pdf cuando está hecho: R CMD Sweave foo && R CMD pdflatex foo && R CMD bibtex foo && foo.pdf –

+0

¿No es posible decir R CMD Sweave --pdf foo. Rnw para obtener un pdf directamente? –

1

Si está abierto para cambiar a una solución (paga), TextMate tiene un complemento Sweave que lo lleva de .Rnw a PDF en un solo paso: Sweave, tipográficamente y ve. Combinado con Skim, que se puede configurar para recargar archivos PDF, hace que ajustar archivos sea bastante fácil.

2

Los uso (guardados como sweave.engine y sweavebibtex.engine) para motores personalizados en texshop. Normalmente trabajo un fragmento de código en R, luego copio el bloque en el archivo rnw que tengo abierto en texshop. Me encantaría una solución que me permita resaltar la sintaxis y la corrección ortográfica de R y tex en el mismo documento (eso no es emacs).

#!/bin/bash 
echo 'SWEAVE | PDFLATEX. Custom engine--Akasurak-16Nov2009' 
export PATH=$PATH:/usr/texbin:/usr/local/bin 
R CMD Sweave "$1" 
pdflatex "${1%.*}" 

y el segundo, para hacer bibtex así:

#!/bin/bash 
date 
before="$(date +%s)" 
echo 'SWEAVE | PDFLATEX | BIBTEX | PDFLATEX | PDFLATEX. Custom engine--Akasurak-16Nov2009' 
#Updated 20Jul2010 for auto including Sweave.sty 


export PATH=$PATH:/usr/texbin:/usr/local/bin 

R CMD Sweave "$1" 
R CMD pdflatex "${1%.*}" 
bibtex "${1%.*}.aux" 
R CMD pdflatex "${1%.*}" 
R CMD pdflatex "${1%.*}" 


after="$(date +%s)" 
elapsed_seconds="$(expr $after - $before)" 
date 
echo Elapsed time '(m:s)': $(date -r $elapsed_seconds +%M:%S) 

no se puede decir que son la mejor manera de hacer las cosas, pero funcionan.

1

Tuve el mismo problema (uso Mac OSX) y opté por descargar Eclipse Classic 3.6.2. y luego instalé el plugin StatET. Es un poco complicado configurarlo, pero una vez que lo haces, este entorno es agradable porque puedes hacer un clic para compilar tu documento .Rwn Sweave usando pdflatex y establecer opciones para tu visor favorito para que el .pdf aparezca automáticamente cuando compilas como lo hace en TeXShop. También puede hacerlo en TeXShop, pero TeXShop es pésimo para depurar archivos .Rnw y no resalta el código R en el archivo .Rwn. En Eclipse puede personalizar el resaltado de sintaxis (no el mejor del extremo de Texclipse, pero está bien) para que pueda distinguir fácilmente entre su código R y LaTeX. También puede iniciar la consola R desde dentro de Eclipse y tiene un buscador de objetos gráficos. De todos modos, podría continuar. Si quieres detalles sobre cómo instalarlo todo, envíame un mensaje.

2

Yo uso Aquamacs o Eclipse para hacer la edición del archivo .Rnw, entonces yo uso la siguiente función de shell para compilar & vista:

sweaveCache() { 
    Rscript -e "library(cacheSweave); setCacheDir(getwd()); 
    Sweave('$1.Rnw', driver = cacheSweaveDriver)" && 
    pdflatex --shell-escape $1.tex && 
    open $1.pdf 
} 

en cuenta que estoy usando el controlador cacheSweave, que ayuda a evitar constantemente la re-ejecución de secciones de código que tardan mucho tiempo en ejecutarse.

BTW, también estoy intentando cambiar a Babel en lugar de Sweave; No estoy seguro de qué usaré más seguido, pero definitivamente hay aspectos de Babel que me gustan.

2

La mejor solución es aquí: creas un nuevo * .engine para que lo use TeXShop, luego compuestas por el atajo o el botón 1.

http://cameron.bracken.bz/sweave-for-texshop

Cameron también es muy sensible, por lo que recomiendo encarecidamente su solución.

8

RStudio tiene un botón que hace esto de una vez. Una advertencia es que se ejecuta en su propia sesión, por lo que se ignoran todas las variables de espacio de trabajo que haya establecido.

the compile button

7

Sólo una nota: en realidad se puede llamar a las cosas como pdflatex etc. directamente de R utilizando texi2dvi (en el paquete de herramientas). Por ejemplo:

Sweave(file="/Users/mymachine/Documents/Assign4.Rnw") 

texi2pdf("Assign4.tex") 

compilaría su archivo Rnw en un pdf. Por lo tanto, no es necesario dejar R para manejar el paso tex-> pdf.