我正在使用StatWeave从LaTeX文件中运行SAS代码。我希望能够在文本编辑器中打开一个文件,并使用LaTeX语法高亮显示主要的LaTeX文档,并使用SAS语法高亮显示嵌入式SAS“代码块”。 (“代码块”是真实的(工作)代码,不仅仅是用于显示,所以我认为LaTeX列表包不会起作用。)我确信必须有一种方法可以用emacs来做,但我不知道我不知道它是什么......在这一点上,我对任何编辑器都有任何解决方案。
2010年2月5日更新:我认为最好的方法实际上是停止尝试使用StatWeave和SAS,而是学习使用Sweave和R.我对Vim中的Sweave突出显示很满意,但我知道其他那些对ESS非常满意的人,所以我会继续接受这个答案,这样我们就可以解决这个问题了。
答案 0 :(得分:1)
也许Emacs Wiki上MultipleModes页面上的解决方案之一有所帮助。另外,Sweave的手册说Emacs Speaks Statistics可以处理Sweave文件,所以由于StatWeave看起来很相似,也许你也可以破解ESS来处理这些文件。 ESS似乎已经支持SAS,因此所需的更改可能不会太大。
答案 1 :(得分:1)
是否可以选择不直接在代码中使用sas文件,而是使用'\ input' 代替?我经常对源代码示例做的一件事是 将它们放在子目录samples /中,然后使用“highlight”创建可包含在主文件中的LaTeX文件。这样我可以在每次更改源文件时执行它们以检查它们是否正常工作。如果它是一个更大的项目,可以通过shell脚本或make来完成(重新)生成tex代码。在大多数情况下,一个简单的generate_tex.sh脚本足以支持我在更改任何样本后调用的项目。它的内容可能类似于
#!/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/
用于Web项目。在主tex文件中,然后使用
包含样本\input{filename.css}
答案 2 :(得分:0)
UltaEdit可能有效,但您必须进行大量设置
答案 3 :(得分:0)
如果您使用的是xemacs,则可以使用mmmmode语法高亮显示。我使用带有statweave的ESS,以便第一个回答为什么你不使用ESS来突出sybntax并使用statweave来完成工作。然而,我不使用SAS,但在同一个文件中使用了stata和R,它们都使用自己的语法高亮显示。 (需要'mmm模式) (需要'mmm-vars) (setq mmm-global-mode'也许) (setq mmm-submode-decoration-level 1)
(MMM-添加组 “乳胶统计 “((R-标签 :submode r-mode :face mmm-code-submode-face :delimiter-mode nil :前面“开始{Rcode}” :返回“结束{Rcode}” :back-offset(backward-char -1) :insert((?R R-tag nil @“\ begin {Rcode}” @“\ n”_“\ n”@“\ end {Rcode}”@)) ) (STA-标签 :submode STA模式 :face mmm-code-submode-face :delimiter-mode nil :前面“开始{Statacode}” :返回“结束{Statacode}” :back-offset(backward-char -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))
您只需要更改为SAS模式(我想如果这就是它的名称)
我有我的latex.el文件(在init.el中加载了lambda)以下内容
(本地组键
[
(控制f1)]
'(lambda()
(互动)
(if(string-match“\。tex”buffer-file-name)
(progn这个
(let(file-name file-name1 file-name-wihoutswv)
(setq文件名(buffer-file-name))
(setq file-name1(file-name-nondirectory file-name))
(setq file-name-wihoutswv(replace-regexp-in-string“-swv”“”
文件名1))
(setq file-name-wihoutswv(replace-regexp-in-string“\。tex”“”
文件名称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”))
)
)
)
(消息“你处于Latex模式,这既不是swv也不是TeX文件。无法打开相应的tex或sweave文件”)
)))
和
(global-set-key [f1]
'(lambda()
(互动)
(保存缓冲器)
(if(string-match“-swv \ .tex”buffer-file-name)
(progn这个
(互动)
(胶乳模式)
;;(字体锁-fontify缓冲器)
(平衡视窗)
(mylatex-删除缩进)
(保存缓冲器)
(save-window-excursion(run-current-statweave-file))
; (mylatex清洁)
)
(if(string-match“\。tex”buffer-file-name)
(progn这个
(互动)
(胶乳模式)
;(字体锁-fontify缓冲器)
(平衡视窗)
(DO-PDF)
; (mylatex清洁)
)
(消息“这不是TeX也不是SWV文件,除了将缓冲区保存到文件之外我不知道该怎么办。所以我做了”)
))
)
)
(defun run-current-statweave-file() “在-swv.tex文件上执行statweave并启动evince以查看输出” (互动) (let(file-name file-name1 file-name-wihoutswv cmd1-str cmd2-str status) (setq文件名(buffer-file-name)) (setq file-name1(file-name-nondirectory file-name)) (setq file-name-wihoutswv(replace-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-command cmd1-str) (setq output-buffer“ swvoutput ”) (save-window-excursion(setq status(shell-command cmd1-str output-buffer))) ;;(消息状态) ;; (let(status)((shell-command cmd1-str output-buffer))))) ))
它看起来很糟糕,我不是一个lisp专家,所以我确信它有很多低效率,但它确实有效。
答案 4 :(得分:0)
您可以尝试新的StatReport LateX类,它有点像Sweave,但完全在LaTeX中实现。
<强>工作流:强> 运行一次并获取SAS代码,在SAS中运行该代码,再次运行laTeX并获得包含的输出。
如果我没记错的话,我认为它会为代码着色(使用SASnRdisplay类)。
请在此处查看论文:http://support.sas.com/resources/papers/proceedings12/324-2012.pdf 和CTAN一起提供包文档http://mirror.switch.ch/ftp/mirror/tex/macros/latex/contrib/statrep/statrep.pdf
答案 5 :(得分:0)
要说明牛仔的回应: 我一直对ESS的问题是Windows上没有足够的功能(我运行SAS)。
因此,Statweave对我一直没用。
现在有一个SAS Linux版本,所以我想这可能会更好。