Pregunta

Estoy usando StatWeave para ejecutar código SAS desde archivos LaTeX. Me gustaría poder abrir un archivo en un editor de texto y ver el documento principal de LaTeX con resaltado de sintaxis de LaTeX y el SAS & Quot; trozos de código & Quot; con resaltado de sintaxis SAS. (Los & Quot; fragmentos de código & Quot; son códigos reales (de trabajo), no solo para mostrar, por lo que no creo que el paquete de listados de LaTeX funcione.) Estoy seguro de que debe haber una manera de hacer esto con emacs, pero no sé qué es ... En este momento estoy abierto a cualquier solución con cualquier editor.

Actualización del 5 de febrero de 2010: decidí que el mejor enfoque era dejar de intentar usar StatWeave y SAS y, en cambio, aprender a usar Sweave y R. Estoy contento con el resaltado de Sweave en Vim, pero conozco otros personas que están muy contentas con ESS, así que seguiré adelante y aceptaré esa respuesta para que podamos cerrar esta pregunta.

¿Fue útil?

Solución

Quizás una de las soluciones en la página MultipleModes en la Wiki de Emacs sea de ayuda. Además, el manual de Sweave dice que Emacs Speaks Statistics puede manejar archivos Sweave, por lo tanto, dado que StatWeave parece ser similar, quizás podría piratear ESS para manejar esos archivos también . Parece que ESS ya tiene soporte para SAS, por lo que los cambios requeridos podrían no ser demasiado grandes.

Otros consejos

¿Sería una opción no tener los archivos sas directamente en el código sino usar '\ input' ¿en lugar? Una cosa que hago con frecuencia con ejemplos fuente es póngalos en un subdirectorio samples / y luego use " resalte " para crear archivos LaTeX que se pueden incluir en el archivo principal. De esa manera puedo ejecutar los archivos fuente cada vez que se cambian para verificar si funcionan correctamente. La (re) generación del código de texto puede realizarse mediante un script de shell o desde make si se trata de un proyecto más grande. En la mayoría de los casos, un simple script generate_tex.sh fue suficiente para mis proyectos que llamé después de haber cambiado cualquiera de mis muestras. El contenido podría ser algo así como

#!/bin/bash
highlight -L -f --wrap-simple *.css --outdir ../input/
highlight -L -f --wrap-simple *.html --outdir ../input/
highlight -L -f --wrap-simple *.php --outdir ../input/

para un proyecto web. En el archivo tex principal, incluya las muestras usando

\input{filename.css}

UltaEdit podría funcionar, pero tendrías que hacer una gran cantidad de configuración

Si está utilizando xemacs, puede usar mmmmode para resaltar la sintaxis. Uso ESS con statweave, así que como la primera persona responde por qué no usas ESS para resaltar la sintaxis y usas statweave para hacer el trabajo. Sin embargo, no uso SAS, pero he usado stata y R en el mismo archivo y ambos trabajan con su propio resaltado de sintaxis.  (requiere 'modo mmm) (requiere 'mmm-vars)  (setq mmm-global-mode 'tal vez) (setq mmm-submode-decoration-level 1)

(mmm-add-group   'estadísticas de látex   '((etiqueta-r      : modo r submodo      : cara mmm-code-submode-face      : modo delimitador nulo      : front " begin {Rcode} "      : atrás " end {Rcode} "      : retroceso (backward-char -1)      : insert ((? R R-tag nil @ " \ begin {Rcode} "     @ " \ n " _ " \ n " @ " \ end {Rcode} " @))      )     (sta-tag      : modo secundario del modo STA      : cara mmm-code-submode-face      : modo delimitador nulo      : front " begin {Statacode} "      : atrás " end {Statacode} "      : retroceso (backward-char -1)      : insert ((? S STATA-tag nil @ " \ begin {Statacode} "     @ " \ n " _ " \ n " @ " \ end {Statacode} " @))      )))

(agregar a la lista 'mmm-mode-ext-classes-alist        '(nil " -swv.tex " latex-stats))

Solo necesita cambiar al modo SAS (creo que si así se llama) y tengo en mi archivo latex.el (cargado con un lambda en init.el) lo siguiente (clave-set-local  [   (control f1)]
 '(lambda ()     (interactivo)     (if (string-match " \. tex " buffer-file-name)  (progn     (let (nombre-archivo nombre-archivo1 nombre-archivo-wihoutswv)       (nombre de archivo setq (nombre de archivo del búfer))       (setq nombre-archivo1 (nombre-archivo-no-directorio nombre-archivo))       (setq nombre-archivo-wihoutswv (replace-regexp-in-string " -swv " " "       nombre-archivo1))       (setq nombre-archivo-wihoutswv (replace-regexp-in-string " \. tex " " "       nombre-archivo-wihoutswv))       (if (string-match " -swv \ .tex " buffer-file-name)    (find-file-other-window (concat file-name-wihoutswv " .tex "))  (find-file-other-window (concat file-name-wihoutswv " -swv.tex "))  )       )     )       (mensaje " Estás en modo Latex y este no es un archivo swv ni TeX. No se puede abrir el archivo tex o sweave correspondiente ")  )))

y

(global-set-key [f1]
  '(lambda ()      (interactivo)      (guardar-buffer)      (if (string-match " -swv \ .tex " buffer-file-name)   (progn     (interactivo)     (modo látex)     ;; (font-lock-fontify-buffer)     (ventanas de equilibrio)     (mylatex-delete-indent)     (guardar-buffer)     (guardar-ventana-excursión (run-current-statweave-file)) ; (mylatex-clean)     )        (if (string-match " \. tex " buffer-file-name)     (progn       (interactivo)       (modo látex)       ; (font-lock-fontify-buffer)       (ventanas de equilibrio)       (do-pdf)  ; (mylatex-clean)       )   (mensaje & "; esto no es un archivo TeX ni SWV y no sé qué hacer aparte de guardar el búfer en el archivo. Así que hice &";)   ))      )

)

(defun run-current-statweave-file ()   " Ejecute statweave en un archivo -swv.tex y ejecute evince para ver la salida "   (interactivo)   (let (nombre-archivo nombre-archivo1 nombre-archivo-wihoutswv cmd1-str cmd2-str estado)   (nombre de archivo setq (nombre de archivo del búfer))   (setq nombre-archivo1 (nombre-archivo-no-directorio nombre-archivo))   (setq file-name-wihoutswv (replace-regexp-in-string " -swv \ .tex " " .pdf " file-name1)) ;; (setq cmd1-str (concat " statweave " file-name1 " & amp; & amp; evince " file-name-wihoutswv " & amp; "))   (setq cmd1-str (concat " statweave " file-name1))   (setq cmd2-str (concat " evince " file-name-wihoutswv " & amp; ")) ;; (comando de shell cmd1-str)   (setq output-buffer " swvoutput ")   (save-window-excursion (estado setq (shell-command cmd1-str output-buffer)))   ;; (estado del mensaje) ;; (let (estado) ((shell-command cmd1-str output-buffer))))) ))

Parece horrible y no soy un experto en lisp, así que estoy seguro de que tiene muchas ineficiencias, pero funciona.

Puede probar la nueva clase StatReport LateX que funciona un poco como Sweave, pero se implementa completamente en LaTeX.

Flujo de trabajo: Ejecute una vez y obtenga el código SAS, ejecute ese código en SAS, ejecute laTeX nuevamente y obtenga la salida incluida.

Creo que colorea el código (usando la clase SASnRdisplay) si no recuerdo mal.

Vea un documento aquí: http://support.sas.com /resources/papers/proceedings12/324-2012.pdf Y CTAN para la documentación del paquete http: // mirror .switch.ch / ftp / mirror / tex / macros / latex / contrib / statrep / statrep.pdf

A la respuesta de dicuss jean: El problema que siempre tuve con ESS es que no se admite suficiente funcionalidad en Windows (donde ejecuto SAS).

En consecuencia, Statweave no me ha sido útil en absoluto.

En estos días hay una versión SAS Linux, así que imagino que podría funcionar mejor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top