Mise en évidence de la syntaxe pour plusieurs langues dans le même fichier: StatWeave / SAS / LaTeX

StackOverflow https://stackoverflow.com/questions/841831

Question

J'utilise StatWeave pour exécuter du code SAS à partir de fichiers LaTeX. J'aimerais pouvoir ouvrir un fichier dans un éditeur de texte et afficher le document LaTeX principal avec la coloration syntaxique LaTeX et les fragments de code SAS & Intégrés & ";" avec mise en évidence de la syntaxe SAS. (Les & "; Fragments de code &" Sont de vrais codes (fonctionnels), pas seulement pour l'affichage, donc je ne pense pas que le package de listes LaTeX fonctionnera.) Je suis sûr qu'il doit exister un moyen de faites cela avec emacs, mais je ne sais pas ce que c'est ... À ce stade, je suis ouvert à toute solution avec n'importe quel éditeur.

Mise à jour du 5 février 2010: j’ai décidé que la meilleure approche consistait en fait à cesser d’utiliser StatWeave et SAS, mais plutôt à apprendre à utiliser Sweave et R. Je suis satisfait de la mise en évidence de Sweave dans Vim, mais je connais d’autres les gens qui sont très heureux avec ESS, donc je vais aller de l'avant et accepter cette réponse afin que nous puissions clore cette question.

Était-ce utile?

La solution

Peut-être l'une des solutions de la page MultipleModes du wiki Wiki d'Emacs aide-t-elle. De plus, le manuel de Sweave indique que Les statistiques d'Emacs peuvent gérer les fichiers Sweave. Par conséquent, puisque StatWeave semble être similaire, vous pouvez peut-être pirater ESS pour gérer ces fichiers également. . ESS semble prendre déjà en charge SAS. Par conséquent, les modifications requises ne seront peut-être pas trop volumineuses.

Autres conseils

Serait-ce une option de ne pas avoir les fichiers sas directement dans le code mais d'utiliser '\ input' au lieu? Une chose que je fais fréquemment avec des exemples de source est de placez-les dans un sous-répertoire samples / puis utilisez " mettez en surbrillance " créer des fichiers LaTeX pouvant être inclus dans le fichier principal. De cette façon, je peux exécuter les fichiers source chaque fois qu'ils sont modifiés pour vérifier s'ils fonctionnent correctement. La (re) génération du code tex peut être effectuée par un script shell ou à partir de make si le projet est plus gros. Dans la plupart des cas, un simple script generate_tex.sh suffisait à mes projets que j'appelais après avoir modifié l'un de mes échantillons. Le contenu de celui-ci pourrait être quelque chose comme

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

pour un projet Web. Dans le fichier tex principal, incluez ensuite les échantillons en utilisant

\input{filename.css}

UltaEdit pourrait fonctionner, mais vous devrez faire beaucoup d’installation

Si vous utilisez des xemacs, vous pouvez utiliser mmmmode pour mettre en évidence la syntaxe. J'utilise ESS avec statweave afin que la première personne réponde, pourquoi n'utilisez-vous pas ESS pour sybntax souligner et utiliser statweave pour effectuer le travail. Cependant, je n’utilise pas SAS, mais j’ai utilisé stata et R dans le même fichier et ils travaillent tous les deux avec leur propre coloration syntaxique.  (nécessite 'mmm-mode) (nécessite 'mmm-vars)  (setq mmm-global-mode 'peut-être) (setq mmm-submode-decoration-level 1)

(mmm-add-group   'latex-stats   '((r-tag      : sous-mode r-mode      : face mmm-code-submode-face      : mode délimiteur nil      : front " commencer {Rcode} "      : retour " fin {Rcode} "      : décalage arrière (caractère arrière -1)      : insert ((? R R-tag nil @ " \ begin {Rcode} "     @ " \ n " _ " \ n " @ " \ end {Rcode} " @))      )     (sta-tag      : sous-mode STA-mode      : face mmm-code-submode-face      : mode délimiteur nil      : avant " commencer {Statacode} "      : retour " fin {Statacode} "      : décalage arrière (caractère arrière -1)      : insert ((? S STATA-tag nil @ " \ begin {Statacode} "     @ " \ n " _ " \ n " @ " \ end {Statacode} " @))      )))

(add-to-list 'mmm-mode-ext-classes-alist        '(nil " -swv.tex " latex-stats))

Il vous suffit de passer en mode SAS (je pense que si c'est ainsi que ça s'appelle) et j'ai dans mon fichier latex.el (chargé avec un lambda dans init.el) le suivant (local-set-key  [   (control f1)]
 '(lambda ()     (interactif)     (if (string-match " \. tex " tampon-nom-fichier)  (progn     (let (nom-fichier nom-fichier1 nom-fichier-wihoutswv)       (setq nom-fichier (nom-fichier-tampon))       (setq nom-fichier1 (nom-fichier-non-répertoire nom-fichier))       (setq nom-fichier-wihoutswv (remplace-expression-dans-chaîne & "; -swv &" & "&"; "       nom-fichier1))       (setq nom-fichier-wihoutswv (remplace-expression-dans-chaîne & "; \. tex &" & "&";       nom-fichier-wihoutswv))       (if (string-match " -swv \ .tex " nom-fichier-tampon))    (find-file-other-window (concat fichier-nom-wihoutswv " .tex "))  (find-file-other-window (concat fichier-nom-wihoutswv " -swv.tex "))  )       )     )       (message " vous êtes en mode Latex et ce n'est ni un fichier swv, ni un fichier TeX. Impossible d'ouvrir le fichier tex ou sweave correspondant ")  )))

et

(global-set-key [f1]
  '(lambda ()      (interactif)      (sauvegarde-tampon)      (if (string-match " -swv \ .tex " nom-fichier-tampon))   (progn     (interactif)     (mode latex)     ;; (font-lock-fontify-buffer)     (balance-windows)     (mylatex-delete-indent)     (sauvegarde-tampon)     (save-window-excursion (run-current-statweave-file)) ; (mylatex-clean)     )        (if (string-match " \. tex " tampon-nom-fichier)     (progn       (interactif)       (mode latex)       ; (font-lock-fontify-buffer)       (balance-windows)       (do-pdf)  ; (mylatex-clean)       )   (message " il ne s'agit ni d'un fichier, ni de TeX ni de fichier SWV, et je ne sais pas quoi faire si ce n'est de sauvegarder le tampon dans le fichier. J'ai donc ")   ))      )

)

(désactive run-current-statweave-file ()   " Exécutez statweave sur un fichier -swv.tex et lancez evince pour afficher le résultat "   (interactif)   (let (nom-fichier nom-fichier1 nom-fichier-wihoutswv cmd1-str cmd2-str status)   (setq nom-fichier (nom-fichier-tampon))   (setq nom-fichier1 (nom-fichier-non-répertoire nom-fichier))   (setq nom-fichier-wihoutswv (remplace-expression-chaîne-chaîne & "; -swv \ .tex &" & ".pdf &" nom-fichier1)) ;; setq cmd1-str "; & amp; ")))   (setq cmd1-str (concat & "; statweave &"; nom-fichier1))   (setq cmd2-str (concat & «evince &« nom_fichier_wihoutswv " & amp; ")) ;; (shell-command cmd1-str)   (setq output-buffer " swvoutput ")   (save-window-excursion (setq status (commande de shell cmd1-str output-buffer))))   ;; (statut du message) ;; (let (status) ((shell-command cmd1-str output-buffer)))))) ))

Cela a l'air horrible et je ne suis pas un expert de Lisp, donc je suis sûr qu'il y a beaucoup d'inefficiences, mais cela fonctionne.

Vous pouvez essayer la nouvelle classe StatReport LateX qui fonctionne un peu comme Sweave, mais est entièrement implémenté dans LaTeX.

Flux de travail: Exécutez une fois et obtenez le code SAS. Exécutez ce code dans SAS, exécutez à nouveau laTeX et obtenez la sortie incluse.

Je pense que cela colore le code (à l'aide de la classe SASnRdisplay) si je me souviens bien.

Voir un article ici: http://support.sas.com /resources/papers/proceedings12/324-2012.pdf Et CTAN pour la documentation du paquet http: // mirror .switch.ch / ftp / mirror / tex / macros / latex / contrib / statrep / statrep.pdf

Pour discuter de la réponse de jean: Le problème que j’ai toujours eu avec ESS est que pas assez de fonctionnalités sont supportées sous Windows (où j’exécute SAS).

Par conséquent, Statweave ne m’a pas du tout été utile.

Ces jours-ci, il existe une version SAS Linux et j'imagine que cela pourrait fonctionner mieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top