Если вы используете xemacs, вы можете использовать mmmmode для подсветки синтаксиса. Я использую ESS со statweave, чтобы в качестве первого лица ответить, почему вы не используете ESS для выделения sybntax и не используете statweave для выполнения работы. Однако я не использую SAS, но использовал stata и R в одном файле, и они оба работают со своей подсветкой синтаксиса.
(требуется режим «ммм»)
(требуются ммм-переменные)
(setq mmm-global-mode 'возможно)
(setq mmm-submode-украшения-level 1)
(ттт-надстройку группа
«латекс-статистика
«((Г-тег
: подрежим r-mode
: face mmm-code-submode-face
: delimiter-mode nil
: front "begin {Rcode}"
: back "end {Rcode}"
: обратное смещение (backward-char -1)
: insert ((? R R-tag nil @ "\ begin {Rcode}"
@ "\ n" _ "\ n" @ "\ end {Rcode}" @))
)
(STA-тег
: подрежим STA-mode
: face mmm-code-submode-face
: delimiter-mode nil
: front "begin {Statacode}"
: back "end {Statacode}"
: обратное смещение (backward-char -1)
: вставить ((? S STATA-тег nil @ "\ begin {Statacode}"
@ "\ n" _ "\ n" @ "\ end {Statacode}" @))
)))
(добавить в список 'mmm-mode-ext-classes-alist
'(nil "-swv.tex" latex-stats))
Вам просто нужно перейти в SAS-режим (я думаю, если так он называется)
и у меня есть в моем файле latex.el (загружен с лямбда в init.el) следующее
(Локальный набор ключи
[
(контроль f1)]
'(лямбда ()
(Интерактивный)
(if (string-match "\ .tex" buffer-file-name)
(progn
(пусть (имя-файла имя-файла1 имя-файла-wihoutswv)
(setq имя-файла (имя-буфера))
(setq file-name1 (имя-файла-не-каталог-имя-файла))
(setq file-name-wihoutswv (replace-regexp-in-string "-swv" ""
Файл-name1))
(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»)
)))
и
(глобальный набор ключей [f1]
'(лямбда ()
(Интерактивный)
(Копи-буфер)
(if (string-match "-swv \ .tex" buffer-file-name)
(progn
(Интерактивный)
(Латекс-режим)
;; (шрифт-замок-раскрасить-буфер)
(Баланс-окно)
(Mylatex-удалить-отступы)
(Копи-буфер)
(save-window-excursion (run-current-statweave-file))
; (Mylatex-чистый)
)
(if (string-match "\ .tex" buffer-file-name)
(progn
(Интерактивный)
(Латекс-режим)
; (Шрифт-замок-раскрасить-буфер)
(Баланс-окно)
(Делать-PDF)
; (Mylatex-чистый)
)
(сообщение «это не TeX или SWV файл, и я не знаю, что делать, кроме как сохранить буфер в файл. Так я и сделал»)
))
)
)
(defun run-current-statweave-file ()
«Выполнить statweave для файла -swv.tex и запустить evince для просмотра результатов»
(Интерактивный)
(пусть (имя-файла-имя-файла1-имя-файла-wihoutswv cmd1-str cmd2-str статус)
(setq имя-файла (имя-буфера))
(setq file-name1 (имя-файла-не-каталог-имя-файла))
(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 "&"))
;; (команда оболочки cmd1-str)
(setq output-buffer " swvoutput ")
(save-window-excursion (setq status (выходной буфер команды-команды cmd1-str)))
;; (статус сообщения)
;; (let (status) ((выходной буфер shell-команды cmd1-str)))))
))
Это выглядит ужасно, и я не эксперт по LISP, поэтому я уверен, что у него много неэффективности, но это работает.