Pergunta

Eu estou usando StatWeave para executar código SAS de dentro de arquivos de látex. Eu gostaria de ser capaz de abrir um arquivo em um editor de texto e exibir o documento LaTeX principal com LaTeX destaque de sintaxe e os embutidos SAS "pedaços de código" com destaque SAS sintaxe. (Os "pedaços de código" são código real (de trabalho), não só para exibição, então eu não acho que o pacote listagens LaTeX vai funcionar.) Tenho certeza de que deve haver uma maneira de fazer isso com o Emacs, mas eu don 't sabe o que é ... neste momento eu estou aberto a qualquer solução com qualquer editor.

05 de fevereiro de 2010 update: Eu decidi que a melhor abordagem seria realmente parar de tentar usar StatWeave e SAS e, em vez de aprender a usar Sweave e R. Estou feliz com o Sweave destacando no vim, mas eu sei que outra pessoas que estão muito felizes com ESS, então eu vou em frente e aceitar essa resposta para que possamos fechar esta questão.

Foi útil?

Solução

Talvez uma das soluções no href="http://www.emacswiki.org/emacs/MultipleModes" rel="nofollow noreferrer"> MultipleModes página no Emacs Wiki ajuda. Além disso, o manual para Sweave diz que Emacs Fala Estatísticas pode manipular arquivos Sweave, por isso desde StatWeave parece ser semelhante, talvez você poderia cortar ESS para lidar com esses arquivos, bem . ESS parece já ter suporte para SAS, então as mudanças necessárias pode não ser muito grande.

Outras dicas

Seria uma opção para não ter as sas arquivos diretamente no código, mas usar '\ input' em vez de? Uma coisa que eu freqüentemente fazer com exemplos de código é colocá-los em um subdiretório amostras / e, em seguida, usar o "destaque" para criar arquivos LaTeX que podem ser incluídos no arquivo principal. Dessa forma eu posso executar os arquivos de origem Toda vez que eles são alterados para verificar se eles funcionam corretamente. A (re) geração do código tex pode ser feito por um shell script ou de fazer se for um projeto maior. Na maioria dos casos um script generate_tex.sh simples foi suficiente para meus projetos que eu chamei depois que eu tinha mudado qualquer uma das minhas amostras. O conteúdo do que poderia ser algo 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 um projeto web. No arquivo tex principal, em seguida, incluir as amostras usando

\input{filename.css}

UltaEdit pode funcionar, mas você teria que fazer uma grande quantidade de configuração

Se você estiver usando xemacs você pode usar mmmmode de destaque de sintaxe. Eu uso ESS com statweave assim como a primeira resposta pessoa por que você não use ESS para destaque sybntax e uso statweave para fazer o trabalho. I no entanto não use SAS mas têm stata utilizado e R no mesmo arquivo e que ambos trabalham com o seu próprio destaque de sintaxe. (Requerem 'mmm-modo) (Requerem 'mmm-vars) (Setq mmm-global-mode 'talvez) (Setq mmm-submodo-Decoração de nível 1)

(-add-grupo mmm 'látex-stats '((R-tag : R-submodo modo : Cara mmm-code-submodo-face : Nil-mode delimitador : Frente "begin {rcode}" : De volta "end {rcode}" : Offset-costas (para trás no carvão -1) :? Inserção ((R R-tag nil @ "\ begin {rcode}" @ "\ N" _ "\ n" @ "\ end {rcode}" @)) ) (STA-tag : Submodo STA-mode : Cara mmm-code-submodo-face : Nil-mode delimitador : Frente "begin {Statacode}" : De volta "end {Statacode}" : Offset-costas (para trás no carvão -1) :? Inserção ((S STATA-tag nil @ "\ begin {Statacode}" @ "\ N" _ "\ n" @ "\ end {Statacode}" @)) )))

(add-to-list 'mmm-mode-ext-classes-alist '(Nulo "-swv.tex" látex-stats))

Você só precisa mudar a SAS-mode (acho que se é isso que ele é chamado) e eu tenho no meu arquivo latex.el (carregado com um lambda na init.el) o seguinte (-Set-key locais [ (F1 controle)]
'(Lambda () (interativo) (Se (string-match "\ .tex" buffer-file-name) (progn (Deixar (de nome de arquivo file-name1 file-name-wihoutswv) (Setq de nome de arquivo (tampão de nome de arquivo)) (Setq file-name1 (-file-name não diretório de nome de arquivo)) (Setq file-name-wihoutswv (substitua-regexp-in-string "-swv" "" file-name1)) (Setq file-name-wihoutswv (substitua-regexp-in-string "\ .tex" "" -File-name wihoutswv)) (Se (string-match "-swv \ .tex" buffer-file-name) (Find-file-outra-janela (concat file-name-wihoutswv ".tex")) (Find-file-outra-janela (concat file-name-wihoutswv "-swv.tex")) ) ) ) (Mensagem "Você está em Latex-mode e isso não é nem swv nem arquivo TeX. Não é possível abrir correspondente tex ou arquivo sweave") )))

e

(-set-chave global [F1]
'(Lambda () (interativo) (Excepto-tampão) (Se (string-match "-swv \ .tex" buffer-file-name) (progn (interativo) (Látex-modo) ;; (fonte de bloqueio-fontify-tampão) (saldo janelas) (Mylatex-delete-indent) (Excepto-tampão) (Save-window-excursão (atual-statweave arquivo run-)) ; (Mylatex-limpo) ) (Se (string-match "\ .tex" buffer-file-name) (progn (interativo) (Látex-modo) ; (Fonte-bloqueio fontify-tampão) (saldo janelas) (Fazer-pdf) ; (Mylatex-limpo) ) (Mensagem "isto não é qualquer arquivo TeX nem SWV e eu não sei o que fazer além de salvar o buffer para o arquivo. Então eu fiz") )) )

)

(defun run-atual-statweave-file () "Executar statweave em um arquivo -swv.tex e evince lançamento para saída de vista" (interativo) (Deixar (de nome de arquivo file-name1 file-name-wihoutswv cmd1-str estado cmd2-str) (Setq de nome de arquivo (tampão de nome de arquivo)) (Setq file-name1 (-file-name não diretório de nome de arquivo)) (Setq file-name-wihoutswv (substitua-regexp-in-string "-swv \ .tex" ".pdf" file-name1)) ;; (Setq cmd1-str (concat "statweave" file-name1 "&& evince" file-name-wihoutswv "&")) (Setq cmd1-str (concat "statweave" file-name1)) (Setq cmd2-str (concat "evince" file-name-wihoutswv "&")) ;; (shell-comando cmd1-str) (Setq saída de buffer " swvoutput ") (Excepto-janela-excursão (estado setq (shell-comando cmd1-str saída de tampão))) ;; (estado da mensagem) ;; (Deixe (status) ((shell-comando cmd1-str saída de tampão))))) ))

Parece horrível e eu não sou um especialista lisp então eu tenho certeza que ele tem um monte de ineficiências, mas ele funciona.

Você poderia tentar a nova classe StatReport látex que funciona um pouco como Sweave, mas é implementado inteiramente em LaTeX.

Fluxo de Trabalho: Executar uma vez e obter o código SAS, Executar esse código no SAS, látex corrida novamente e obter a saída incluídos.

Eu acho que cores o código (usando a classe SASnRdisplay) se me lembro bem.

Veja um artigo aqui: http://support.sas.com /resources/papers/proceedings12/324-2012.pdf E CTAN para a documentação do pacote http: // espelho .switch.ch / ftp / mirror / tex / macros / latex / contrib / statrep / statrep.pdf

A resposta de Para dicuss jean: O problema que eu sempre tive com ESS é que não funcionalidade suficiente é suportado no Windows (onde eu corro SAS).

Consequentemente Statweave não tem sido útil para mim em tudo.

Hoje em dia há uma versão SAS Linux então eu imagino que poderia funcionar melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top