Подсветка синтаксиса для нескольких языков в одном файле:StatWeave/SAS/Латекс

StackOverflow https://stackoverflow.com/questions/841831

Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

Можно ли было бы не размещать файлы sas непосредственно в коде, а использовать '\input' вместо этого?Одна вещь, которую я часто делаю с исходными примерами, - это поместить их в подкаталог samples /, а затем использовать "выделить" для создания файлов 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}

UltaEdit может сработать, но вам придется проделать большую настройку

Если вы используете xemacs, вы можете использовать mmmmode для выделения синтаксиса.Я использую ESS с statweave, поэтому в качестве ответа от первого лица, почему бы вам не использовать ESS для выделения sybntax и не использовать statweave для выполнения работы.Я, однако, не использую SAS, но использовал stata и R в одном файле, и они оба работают со своей собственной подсветкой синтаксиса.(требуется 'mmm-режим) (требуется 'mmm-переменные) (возможно, установить mmm-глобальный режим') (установить mmm-подрежим-оформление-уровень 1)

(mmm-добавить-группу 'latex-статистика '((r-тег : r-режим подрежима : грань mmm-кода-грань подрежима :разделитель-режим нулевой :спереди "begin{Rcode}" : сзади "end{Rcode}" :смещение назад (обратный символ -1) :вставить ((?R R-tag nil @ "\begin{Rcode}" @ " " _ " " @ "\end{Rcode}" @)) ) (sta-tag :подрежимный STA-режим :начальный mmm-код-подрежим-грань : режим-разделитель равен нулю :начальный "begin{Statacode}" :обратный "конец{Statacode}" : обратное смещение (обратный символ -1) :вставить ((?S STATA-tag nil @ "\begin{Statacode}" @ " " _ " " @ "\end{Statacode}" @)) )))

(добавить в список 'mmm-mode-ext-classes-список '(ноль "-swv.tex" latex-статистика))

Вам просто нужно перейти в SAS-режим (я думаю, если это так называется) и у меня есть в моем файле latex.el (загруженном с помощью лямбда-символа в init.el) следующее (local-set-key [ (control f1)]
'(лямбда () (интерактивный) (если (строка соответствует имени буферного файла "\.tex") (прогноз (пусть (имя файла file-name1 file-name-wihoutswv) (задайте имя файла (buffer-file-name)) (setq file-name1 (имя файла-имя файла вне каталога)) (задайте имя файла-wihoutswv (замените регулярное выражение в строке "-swv" "" имя файла1)) (задайте имя файла-wihoutswv (замените регулярное выражение в строке "\.tex" "" имя файла-wihoutswv)) (если (строка-соответствует "-swv\.tex" имени буферного файла) (найти-файл-другое-окно (объединить имя файла-wihoutswv ".tex")) (найти-файл-другое-окно (объединить имя файла-wihoutswv "-swv.tex")) ) ) ) (сообщение "Вы находитесь в Latex-режиме, и это не swv-файл и не TeX-файл.Не удается открыть соответствующий файл tex или sweave") )))

и

(глобальная настройка-клавиша [f1]
'(лямбда () (интерактивный) (сохранить вбуфере) (если (строка соответствует имени буфера "-swv\.tex") (прогноз (интерактивный) (latex-режим) ;;(шрифт-блокировка-шрифт-буфер) (баланс-windows) (mylatex-удаление-отступ) (сохранить-буфер) (сохранить-окно-экскурсию (выполнить-текущий-statweave-файл)) ;(mylatex-очистить) ) (если (строка соответствует имени буферного файла "\.tex") (прогнозируемый (интерактивный) (latex-режим) ;(шрифт-блокировка-шрифт-буфер) (баланс-Windows) (do-pdf) ;(mylatex-очистить) ) (сообщение "это не текстовый файл и не SWV-файл, и я не знаю, что делать, кроме как сохранить буфер в файл.Так я и сделал") )) )

)

(отменить запуск-current-statweave-file () "Выполнить statweave в файле -swv.tex и запустить evince для просмотра выходных данных" (интерактивный) (пусть (имя файла file-name1 file-name-wihoutswv cmd1-str статус cmd2-str) (задайте имя файла (buffer-file-name)) (setq file-name1 (имя файла-имя файла вне каталога)) (setq file-name-wihoutswv (заменить регулярное выражение в строке "-swv\.tex" ".pdf" file-name1)) ;;(setq cmd1-str (объединить "statweave " file-name1 " &и указать " file-name-wihoutswv " &" )) (setq cmd1-str (объединить файл "statweave "-name1 )) (setq cmd2-str (сопоставлять "evince " имя файла-wihoutswv " &")) ;;(командная оболочка cmd1-str) (setq output-буфер "swvoutput вывод") (сохранить-окно-экскурсию (установить статус (shell-command cmd1-str output-buffer))) ;;(статус сообщения) ;;(пусть (статус) ((командная оболочка cmd1-выводstr-буфера))))) ))

Это выглядит ужасно, и я не специалист по lisp, поэтому я уверен, что в нем много недостатков, но это работает.

Вы могли бы попробовать новый класс 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

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

Следовательно, Statweave вообще не был мне полезен.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top