3

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

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

4

6 回答 6

1

也许 Emacs Wiki 上的MultipleModes页面上的解决方案之一会有所帮助。此外,Sweave的手册说Emacs Speaks Statistics可以处理 Sweave 文件,因此由于 StatWeave 看起来很相似,也许您也可以破解 ESS 来处理这些文件。ESS 似乎已经支持 SAS,因此所需的更改可能不会太大。

于 2009-05-09T07:51:22.430 回答
1

是否可以选择不在代码中直接包含 sas 文件,而是使用 '\input' 代替?我经常对源示例做的一件事是将它们放在子目录 samples/ 中,然后使用“highlight”创建可以包含在主文件中的 LaTeX 文件。这样我就可以在每次更改源文件时执行它们以检查它们是否正常工作。tex 代码的(重新)生成可以通过 shell 脚本或 make 如果它是一个更大的项目来完成。在大多数情况下,一个简单的 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/

对于一个网络项目。然后在主 tex 文件中包含使用的示例

\input{filename.css}
于 2009-07-19T19:00:29.200 回答
0

UltaEdit 可能有效,但您必须进行大量设置

于 2009-09-29T06:05:13.153 回答
0

如果您使用的是 xemacs,则可以使用 mmmmode 来突出显示语法。我将 ESS 与 statweave 一起使用,因此第一人称回答为什么不使用 ESS 来突出显示并使用 statweave 来完成工作。然而,我不使用 SAS,但在同一个文件中使用了 stata 和 R,它们都使用自己的语法突出显示。(需要'mmm-mode)(需要'mmm-vars)(setq mmm-global-mode'也许)(setq mmm-submode-decoration-level 1)

(mmm-add-group 'latex-stats'((r-tag :submode r-mode :face mmm-code-submode-face :delimiter-mode nil :front "begin{Rcode}" :back "end{Rcode} " :back-offset (backward-char -1) :insert ((?R R-tag nil @ "\begin{Rcode}" @ "\n" _ "\n" @ "\end{Rcode}" @) ) ) (sta-tag :submode STA-mode :face mmm-code-submode-face :delimiter-mode nil :front "begin{Statacode}" :back "end{Statacode}" :back-offset (backward-char - 1) :insert ((?S STATA-tag nil @ "\begin{Statacode}" @ "\n" _ "\n" @ "\end{Statacode}" @)) )))

(添加到列表'mmm-mode-ext-classes-alist'(无“-swv.tex”乳胶统计))

您只需要更改为 SAS 模式(我想如果这就是所谓的),我在我的 latex.el 文件(在 init.el 中加载了一个 lambda)中有以下(local-set-key [(控制 f1)]
'(lambda () (interactive) (if (string-match "\.tex" buffer-file-name) (progn (let (file-name file-name1 file-name-wihoutswv) (setq file-name (buffer- file-name)) (setq file-name1 (file-name-nondirectory file-name)) (setq file-name-wihoutswv (replace-regexp-in-string "-swv" "" file-name1)) (setq file -name-wihoutswv (replace-regexp-in-string "\.tex" "" file-name-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 () (interactive) (save-buffer) (if (string-match "-swv\.tex" buffer-file-name) (progn (interactive) (latex-mode ) ;;(font-lock-fontify-buffer) (balance-windows) (mylatex-delete-indent) (save-buffer) (save-window-excursion (run-current-statweave-file)) ; (mylatex-clean ) ) (if (string-match "\.tex" buffer-file-name) (progn (interactive) (latex-mode) ;(font-lock-fontify-buffer) (balance-windows) (do-pdf) ; (mylatex-clean))(消息“这既不是 TeX 也不是 SWV 文件,除了将缓冲区保存到文件之外,我不知道该怎么做。所以我做了”))))

)

) (save-window-excursion (setq status (shell-command cmd1-str output-buffer))) ;;(消息状态) ;; (let (status) ((shell-command cmd1-str output-buffer)))))))

它看起来很糟糕,而且我不是 lisp 专家,所以我确信它有很多效率低下的地方,但它确实有效。

于 2010-07-20T00:39:50.357 回答
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/乳胶/contrib/statrep/statrep.pdf

于 2013-11-15T16:04:07.267 回答
0

讨论 jean 的回应:我一直遇到的 ESS 问题是 Windows(我运行 SAS 的地方)支持的功能不足。

因此,Statweave 对我一点用处都没有。

现在有一个 SAS Linux 版本,所以我想它可以更好地工作。

于 2013-11-15T16:08:24.017 回答