在同一文件中突出显示多种语言的语法:StatWeave / SAS / LaTeX

时间:2009-05-08 21:17:02

标签: latex editor syntax-highlighting sas

我正在使用StatWeave从LaTeX文件中运行SAS代码。我希望能够在文本编辑器中打开一个文件,并使用LaTeX语法高亮显示主要的LaTeX文档,并使用SAS语法高亮显示嵌入式SAS“代码块”。 (“代码块”是真实的(工作)代码,不仅仅是用于显示,所以我认为LaTeX列表包不会起作用。)我确信必须有一种方法可以用emacs来做,但我不知道我不知道它是什么......在这一点上,我对任何编辑器都有任何解决方案。

2010年2月5日更新:我认为最好的方法实际上是停止尝试使用StatWeave和SAS,而是学习使用Sweave和R.我对Vim中的Sweave突出显示很满意,但我知道其他那些对ESS非常满意的人,所以我会继续接受这个答案,这样我们就可以解决这个问题了。

6 个答案:

答案 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版本,所以我想这可能会更好。