2010-05-30 14 views
6

estoy usando distro GNU/Linux (Arco, si es relevante), Emacs v23.2.1, ESS V5.9 y v11.86 auctex.ESS/auctex/integración Sweave

Quiero fijar auctex reconocer .Rnw archivos, por lo que puede ejecutar LaTeX en .Rnw archivos con C-c C-c y obtener .dvi archivo automáticamente. Creo que es bastante manejable editando el archivo .emacs, pero todavía no tengo un control firme sobre Elisp.

Sin embargo, otro problema es bastante molesto - de alguna manera, LaTeX no está reconociendo en \usepackage{Sweave} preámbulo, lo que en realidad necesita copiar Sweave.sty archivo (en mi caso se encuentra en /usr/share/R/texmf/Sweave.sty) al directorio donde se encuentra el archivo .Rnw (! y yo estoy cada vez más frustrados por el hecho de que se trata de errores comunes en las plataformas Windows)

Mi pregunta se reduce a dos problemas:

  • cómo hacer finales de los años X reconocen \usepackage{Sweave} (sin copiar Sweave.sty a "casa" carpeta cada vez) [Editar : lograron hacer esto; ver comentario después de la respuesta de Dirk]
  • cómo configurar auctex para compilar .Rnw archivos a .dvi

Respuesta

6

Eso son dos cuestiones diferentes.

Para la primera, mis paquetes Debian R se aseguran de que haya un enlace suave desde el directorio $RHOME/share/texmf/ en el árbol del sistema de archivos TeX, p. como /usr/share/texmf/tex/latex/R.

Para la segunda pregunta: dunno. Tiendo a ejecutar Sweave a través de un pequeño script de shell que diseñé hace años a pesar de que hago toda la edición en Emacs.

Editar, algunos meses después: Use ESS, en lugar de AucTeX. Entonces M-n s (es decir Alt-N seguido de s) se ejecuta el paso Sweave y M-n P ejecuta la compilación de LaTeX, con una llamada a Bibtex si es necesario.

+0

Gracias por la información sobre la primera. Logré hacerlo simplemente poniendo el archivo 'Sweave.sty' en'/usr/share/texmf-dist/tex/latex/Sweave', por lo que actualizo la base de datos de 'texconfig'. Entonces eso me deja con el # 2. Por cierto, vi tu script en SO, y estoy pensando en vincular un comando bash para ejecutar .Rnw como una solución 'hasta que descubra cómo hacer la parte de AucTeX. – aL3xa

5

Después de googlear breve y eficiente, he encontrado this link, y a primera vista, todo parece estar bien, pero el archivo pdf se confunde después de Sweaving ... Así que abordé este problema de otra manera: en caso de duda, vaya bash! Me he robado descaradamente la función de comprobación de errores del guión Sweep bash de Dirk disponible here. Básicamente, se trata de una solución: R CMD Sweave es ejecutado en .Rnw archivo, por lo tanto, látex entra en juego, y pdflatex después de eso ...

Voy a publicar un script bash que hace el trabajo para mí . Debo decir que no soy un programador de bash avanzado, además ni siquiera soy programador por vocación, por lo que hay una gran posibilidad de que este guión pueda ser optimizado/escrito correctamente.Aquí va:

#!/bin/bash 

FILEBASE=${1%.*} 
FILEXT=${1##*.} 
FILEPATH=${1%/*} 

TEXFILE=$FILEBASE.tex 
PDFFILE=$FILEBASE.pdf 

# errorexit 

function errorexit() { 
    echo "Error: $1" 
    exit 1 
} 

# check if file exists 
if [ ! -f $1 ]; then 
    errorexit "File $1 not found!" 
else 
# check for filename length 
    if [ ${#1} -lt 1 ]; then 
    errorexit "Need to specify argument file!" 
    else 
    # if filelength OK, check extension 
    if [ $FILEXT != "Rnw" ]; then 
     errorexit "You must pass Sweave (.Rnw) file!" 
     # finally, run Sweave 
    else 
     cd $FILEPATH && R CMD Sweave $1 
     # latex $TEXFILE 
     pdflatex $TEXFILE 
     # xdg-open $PDFFILE 
    fi 
    fi 
fi 

continuación, guardar/copiar/mover este script en cualquiera de echo $PATH carpetas (sigo mina en /usr/bin/), y asegúrese de que es llamado Sweave, o elegir el nombre que desee, a continuación, poner estas líneas en sus .emacs archivo:

(global-set-key (kbd "C-c s") 
     (lambda() 
      (interactive) 
      (shell-command (concat "sweave " buffer-file-name)))) 

por supuesto, puede cambiar la combinación de teclas para satisfacer sus necesidades, y asegúrese de cambiar Sweave con el nombre del script colocado en /usr/bin/.

Ten en cuenta que esto es no una respuesta, pero una solución. Si ha encontrado una forma de lidiar con la integración de AucTeX/ESS/Sweave, publíquelo y le daré una marca de verificación.

Antes de esta solución, tuve que hacer M-n s para Sweave, seguido de C-c C-c que es keybind predeterminado en AucTeX para la compilación de archivos LaTeX. El archivo producido es erróneo, así que tuve que probarlo con bash. Funciona para mí, si tienes alguna sugerencia, házmelo saber.

Saludos cordiales,
aL3xa

EDIT:
Insertada cd $FILEPATH

Cuestiones relacionadas