Подсветка синтаксиса для нескольких языков в одном файле: StatWeave / SAS / LaTeX - PullRequest
3 голосов
/ 09 мая 2009

Я использую StatWeave для запуска кода SAS из файлов LaTeX. Я хотел бы иметь возможность открыть файл в текстовом редакторе и просмотреть основной документ LaTeX с подсветкой синтаксиса LaTeX и встроенными «кусками кода» SAS с подсветкой синтаксиса SAS. («Куски кода» - это реальный (рабочий) код, а не только для отображения, поэтому я не думаю, что пакет списков LaTeX будет работать.) Я уверен, что должен быть способ сделать это с помощью emacs, но я не Не знаю, что это ... На данный момент я открыт для любого решения с любым редактором.

5 февраля 2010 г. обновление: я решил, что лучше всего на самом деле перестать пытаться использовать StatWeave и SAS, а вместо этого научиться использовать Sweave и R. Я доволен выделением Sweave в Vim, но я знаю другие люди, которые очень довольны ESS, поэтому я продолжу и приму этот ответ, чтобы мы могли закрыть этот вопрос.

Ответы [ 6 ]

1 голос
/ 19 июля 2009

Будет ли вариант не иметь файлы sas непосредственно в коде, а использовать '\ input' вместо? Одна вещь, которую я часто делаю с примерами источников, это поместите их в подкаталог сэмплов / и затем используйте «выделение» для создания файлов LaTeX, которые могут быть включены в основной файл. Таким образом, я могу выполнять исходные файлы каждый раз, когда они меняются, чтобы проверить, работают ли они правильно. (Пере) генерация tex-кода может быть выполнена скриптом оболочки или из 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/

для веб-проекта. Затем в основной текстовый файл включите образцы, используя

\input{filename.css}
1 голос
/ 09 мая 2009

Возможно, поможет одно из решений на странице MultipleModes в Emacs Wiki. Кроме того, в руководстве для Sweave говорится, что Emacs Speaks Statistics может обрабатывать файлы Sweave, поэтому, поскольку StatWeave, похоже, похож, возможно, вы могли бы взломать ESS для обработки этих файлов. В ESS, похоже, уже есть поддержка SAS, поэтому требуемые изменения могут быть не слишком большими.

0 голосов
/ 15 ноября 2013

Чтобы обсудить ответ Джин: Проблема, с которой я всегда сталкивался в ESS, заключается в том, что в Windows (где я запускаю SAS) поддерживается недостаточно функций.

Следовательно, Statweave мне вообще не пригодился.

В наши дни существует версия SAS для Linux, поэтому я думаю, что она могла бы работать лучше.

0 голосов
/ 15 ноября 2013

Вы можете попробовать новый класс StatReport LateX, который немного похож на Sweave, но полностью реализован в LaTeX.

Workflow: Запустите один раз и получите код 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

0 голосов
/ 20 июля 2010

Если вы используете 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, поэтому я уверен, что у него много неэффективности, но это работает.

0 голосов
/ 29 сентября 2009

UltaEdit может работать, но вам придется выполнить много настроек

...