Domanda

Sto usando StatWeave per eseguire il codice SAS dai file LaTeX. Vorrei poter aprire un file in un editor di testo e visualizzare il documento LaTeX principale con l'evidenziazione della sintassi LaTeX e il SAS & Quot; blocchi di codice & Quot; con l'evidenziazione della sintassi SAS. (I & Quot; code chunks & Quot; sono codici reali (funzionanti), non solo per la visualizzazione, quindi non credo che il pacchetto di elenchi LaTeX funzionerà.) Sono sicuro che ci deve essere un modo per fallo con emacs, ma non so cosa sia ... A questo punto sono aperto a qualsiasi soluzione con qualsiasi editor.

Aggiornamento del 5 febbraio 2010: ho deciso che l'approccio migliore era in realtà quello di smettere di provare a usare StatWeave e SAS, e invece di imparare a usare Sweave e R. Sono contento dell'evidenziazione di Sweave in Vim, ma ne conosco altri persone che sono molto contente di ESS, quindi andrò avanti e accetterò quella risposta in modo da poter chiudere questa domanda.

È stato utile?

Soluzione

Forse una delle soluzioni nella pagina MultipleModes nella Wiki di Emacs aiuta. Inoltre, il manuale di Sweave afferma che Emacs Speaks Statistics può gestire i file Sweave, quindi poiché StatWeave sembra essere simile, forse potresti hackerare ESS per gestire anche quei file . ESS sembra già avere il supporto per SAS, quindi le modifiche richieste potrebbero non essere troppo grandi.

Altri suggerimenti

Sarebbe un'opzione non avere i file sas direttamente nel codice ma usare '\ input' anziché? Una cosa che faccio spesso con esempi di fonti è metterli in una sottodirectory campioni / e quindi usare " evidenziare " per creare file LaTeX che possono essere inclusi nel file principale. In questo modo posso eseguire i file di origine ogni volta che vengono modificati per verificare se funzionano correttamente. La (ri) generazione del codice tex può essere fatta da uno script di shell o da make se si tratta di un progetto più grande. Nella maggior parte dei casi un semplice script generate_tex.sh è stato sufficiente per i miei progetti che ho chiamato dopo aver modificato uno dei miei campioni. Il suo contenuto potrebbe essere qualcosa di simile

#!/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/

per un progetto web. Nel file tex principale quindi includere gli esempi usando

\input{filename.css}

UltaEdit potrebbe funzionare ma dovresti fare molta installazione

Se stai usando xemacs puoi usare mmmmode per evidenziare la sintassi. Uso ESS con statweave in modo che la prima persona risponda perché non usi ESS per evidenziare sybntax e usi statweave per fare il lavoro. Tuttavia, non utilizzo SAS ma ho usato Era e R nello stesso file ed entrambi funzionano con l'evidenziazione della sintassi.  (richiede 'mmm-mode) (richiede 'mmm-vars)  (forse setq mmm-global-mode ') (setq mmm-submode-decoration-level 1)

(mmm-add-gruppo   'latex-statistiche   '((R-tag      : sottomodalità r-mode      : face mmm-code-submode-face      : modalità delimitatore nulla      : front " inizio {Rcode} "      : back " end {Rcode} "      : back-offset (backward-char -1)      : insert ((? R R-tag nil @ " \ begin {Rcode} "     @ " \ n " _ " \ n " @ " \ end {Rcode} " @))      )     (STA-tag      : sottomodalità modalità STA      : face mmm-code-submode-face      : modalità delimitatore nulla      : front " inizio {Statacode} "      : back " end {Statacode} "      : back-offset (backward-char -1)      : insert ((? Tag STATA nil @ " \ begin {Statacode} "     @ " \ n " _ " \ n " @ " \ end {Statacode} " @))      )))

(aggiungi-alla-lista 'mmm-mode-ext-classes-alist        '(nil " -swv.tex " latex-stats))

Devi solo passare alla modalità SAS (penso che sia così che si chiama) e ho nel mio file latex.el (caricato con un lambda in init.el) il seguente (-Set-chiave locale  [   (controllo f1)]
 "(lambda ()     (Interattivo)     (if (stringa-corrispondenza " \. tex " buffer-file-nome)  (progn     (let (nome-file nome-file1 nome-file-wihoutswv)       (setq nome-file (nome-file-buffer))       (setq nome-file1 (nome-file-nome-directory non directory))       (setq nome-file-wihoutswv (sostituisci-regexp-in-string " -swv " " "       di file-nome1))       (setq nome-file-wihoutswv (sostituisci-regexp-in-string " \. tex " " "       file-name-wihoutswv))       (if (stringa-corrispondenza " -swv \ .tex " buffer-file-name)    (trova-file-altra-finestra (concat nome-file-wihoutswv " .tex "))  (trova-file-altro-finestra (concat nome-file-wihoutswv " -swv.tex "))  )       )     )       (messaggio " Sei in modalità Latex e questo non è né file swv né TeX. Impossibile aprire il file tex o sweave corrispondente ")  )))

e

(global-set-key [f1]
  "(lambda ()      (Interattivo)      (Save-buffer)      (if (stringa-corrispondenza " -swv \ .tex " buffer-file-name)   (progn     (Interattivo)     (Latex-mode)     ;; (font-lock-fontify-buffer)     (Bilancia finestre)     (Mylatex-delete-trattino)     (Save-buffer)     (save-window-excursion (file-run-current-statweave)) ; (Mylatex-pulito)     )        (if (stringa-corrispondenza " \. tex " buffer-file-nome)     (progn       (Interattivo)       (Latex-mode)       ; (Font-lock-fontify-buffer)       (Bilancia finestre)       (Do-pdf)  ; (Mylatex-pulito)       )   (messaggio " questo non è né file TeX né file SWV e non so cosa fare se non salvare il buffer nel file. Quindi ho fatto ")   ))      )

)

(defun run-current-statweave-file ()   " Esegue statweave su un file -swv.tex e avvia evince per visualizzare l'output "   (Interattivo)   (let (nome-file nome-file1 nome-file-wihoutswv cmd1-str cmd2-str stato)   (setq nome-file (nome-file-buffer))   (setq nome-file1 (nome-file-nome-directory non directory))   (setq nome-file-wihoutswv (sostituisci-regexp-in-string " -swv \ .tex " " .pdf " file-name1)) ;; (setq cmd1-str (concat " statweave " nome-file1 " & amp; & amp; evince " nome-file-wihoutswv " & amp; "))   (setq cmd1-str (concat " statweave " nome-file1))   (setq cmd2-str (concat " evince " nome-file-wihoutswv " amp &; ")) ;; (comando shell cmd1-str)   (setq output-buffer " swvoutput ")   (save-window-excursion (stato setq (buffer di comando cmd1-str shell-output)))   ;; (stato del messaggio) ;; (let (status) ((shell-command cmd1-str output-buffer))))) ))

Sembra orribile e non sono un esperto di lisp, quindi sono sicuro che ha molte inefficienze ma funziona.

Potresti provare la nuova classe StatReport LateX che funziona un po 'come Sweave, ma è implementata interamente in LaTeX.

Flusso di lavoro: Esegui una volta e ottieni il codice SAS, Esegui quel codice in SAS, esegui di nuovo laTeX e includi l'output.

Penso che colora il codice (usando la classe SASnRdisplay) se ricordo bene.

Consulta un documento qui: http://support.sas.com /resources/papers/proceedings12/324-2012.pdf E CTAN per la documentazione del pacchetto http: // mirror .switch.ch / ftp / mirror / tex / macro / latex / contrib / statrep / statrep.pdf

Alla risposta di dicuss jean: Il problema che ho sempre avuto con ESS è che non è supportata una funzionalità sufficiente su Windows (dove eseguo SAS).

Di conseguenza Statweave non mi è stato affatto utile.

Al giorno d'oggi esiste una versione SAS Linux, quindi immagino che potrebbe funzionare meglio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top