четверг, 21 мая 2009 г.

Настройка рабочего окружения EMaxima, или как подружить Emacs, Maxima, EMaxuma, AUCTeX, LaTeX, ecb с Пользователем.

- Я не умею, - признался я. - Не умею летать.
- А вы пробовали? - спросил человек, делая плавный поворот влево. Он, по всей видимости, наслаждался полетом.
- Нет, не пробовал. Но мне кажется, что я не умею.
Человек покачал головой, и все тело его при этом также покачивалось.
- Мне не хочется вас убеждать, - сказал он. - Маршрут у меня сегодня легкий. Могли бы попробовать. Вы не представляете, как это хорошо!
- Представляю, - сказал я. - Это, наверное, полезно?
- Нет ничего более бесполезного! - заявил человек...

Александр Житинский. Искушение.


Взявшись за всякое дело хорошо бы заручиться ответом на ряд вопросов.
  1. Зачем? Зачем все это нужно? Тут сложно подобрать правильный ответ. Пусть каждый его сам себе выберет. Я использовал эту связку при подготовки части материалов для статьи, впрочем одних средств LaTeX с избытком хватает для подготовки не только что целой статьи, но и диссертации.
  2. Для кого? Для любого, кому может потребоваться подготовка материалов математического характера, но по каким-либо причинам не устраивают используемые средства. Я просто буду считать, что эти заметки делаются не зря, если от них будет польза хоть для одного человека.
  3. А что в анонсе? Автоматизация символьных преобразований, представление результатов в наглядном виде, взаимодействие с Word, использование текстовых форматов, впрочем всего не пересказать. Тут скорее так: кто знает что это такое и зачем нужно - объяснять излишне, кто не знает - объяснять бесполезно.

Сразу оговорюсь, что не являюсь знатоком ни одной из перечисленных выше программ/систем/пакетов расширений/<вписать свое>. Однако, так как найти в сети такого комплексного обзора не получилось, попытаюсь привести то, что собрать все же удалось.

Все пассы по вызову дождя были выполнены в ОС Windows XP SP2. Впрочем, к моменту завершения выведения жизнеспособного плодовитого поколения горных хвостосвистящих раков, обязуюсь непременно описать как этого же достичь в одном из Linux-ов (впрочем, как раз у линуксоидов с этим проблем возникнуть не должно).

Итак, в путь!

Maxima


Система компьютерной алгебры Maxima. Официальный сайт:
http://maxima.sourceforge.net/
Вся необходимая документация и/или ссылки на нее присутствует там же:
http://maxima.sourceforge.net/ru/documentation.html
Скачиваем последнюю версию, устанавливаем.
Необходимо убедиться, что путь к файлу maxima.bat прописан в переменной PATH. Если не так - исправить (в моем случае это C:\Program Files\Maxima-5.18.1\bin\).

LaTeX


LaTeX, наиболее популярный набор макрорасширений TeX. Я использовал дистрибутив TeXLive. Официальный сайт:
http://www.tug.org/texlive/
Хорошая подборка ссылок на разнообразную документацию по LaTeX и не только приводится на:
http://forum.ru-board.com/topic.cgi?forum=5&topic=30211
Скачиваем iso-образ дистрибутива, прожигаем DVD, устанавливаем. Для Windows, как правило, припасен графический инсталлятор.
Необходимо убедиться, что путь к файлу pdflatex.exe прописан в переменной PATH. Если не так - исправить (в моем случае это C:\TeXLive2007\bin\win32\).

emacs


Развитый, самодокументированный, настраиваемый, расширяемый экранный редактор реального времени Emacs. Нет нужды комментировать последнюю строчку, таких комментариев уже было сделано предостаточно.
Официальный сайт:
http://www.gnu.org/software/emacs/
Подборка хорошей документации для Emacs - тема отдельного обсуждения. Пока приведу лишь следующую ссылку:
http://www.emacs.uniyar.ac.ru/
Для Emacs выбор используемой версии - задача не столь тривиальная, как в случае с обозначенными выше программными пакетами. Итак, существуют 3 основные сборки Emacs для Windows:
  1. официальная сборка emacs 22.3 для платформы win32 http://www.gnu.org/software/emacs/
  2. emacs 23, собранный из cvs (который, в свою очередь, подразделяется на пропатченный и непропатченный) http://ourcomments.org/Emacs/EmacsW32.html
  3. ntemacs находящийся по адресу http://ntemacs.sourceforge.net/

Первая представляет собой официальную и наиболее стабильную, в то же время, наименее требовательную к ресурсам и быстродействию сборку, применимую для разнопланового использования.
Вторая содержит в себе все последние доработки и исправления. Пропатченная версия, кроме того, имеет наименьшие глюки при скроллинге русского текста (подробнее об этом в дальнейщих заметках), а кроме того, там удобно реализованы server и client.
Третья является официальной версией, используемый для тестирования imaxima под Windows (подробнее об imaxima будет сказано ниже).

В конечном итоге, я остановился на официальной версии emacs 22.3, впрочем наставать на правильности этого решения не следует.
Процесс установки ограничен простой распаковкой архива и выполнением файла addpm.exe, расположенного в директории bin.

Конфигурация emacs - процесс перманентный, здесь я не буду приводить весь процесс настройки, все необходимые корректировки будем обговаривать по ходу добавления тех или иных пакетов расширений. Собственно файл конфигурации находится:
C:\Documents and Settings\{user name}\Application Data\.emacs
если его там нет, то необходимо такой фал добавить. Пакеты расширений в принципе могут находиться где угодно. Для определенности будем использовать:
C:\Documents and Settings\{user name}\Application Data\.emacs.d\

Моя версия конфигурации имеет в основе конфигурацию, взятую с http://www.emacs.uniyar.ac.ru/. Она доступна в googlecode, Mercural-репозитарии. Получить ее можно, выполнив команду
hg clone http://kostafey-emacs-config.googlecode.com/hg/ kostafey-emacs-config

AUCTeX


Всесторонняя, настраиваемая интегрированная среда для редактирования файлов TeX/LaTeX/ConTeXt/Texinfo используя Emacs или XEmacs.
Официальный сайт:
http://www.gnu.org/software/auctex/
Статья по работе с пакетом:
http://xtalk.msk.su/~ott/ru/writings/emacs-tex/AUCTeX.html
При установке я просто распаковал архив пекета auctex-11.85-e22.3-msw.zip в директорию, в которой установлен собственно emacs, благо структура директорий у них совпадает. Конфигурация emacs для AucTeX добросовестно скопирована с http://www.emacs.uniyar.ac.ru/
Данные строчки должны быть добавлены в .emacs:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;Настройки AucTeX
;;
(require 'tex-mik)
(add-hook 'LaTeX-mode-hook 'LaTeX-install-toolbar)
(setq TeX-parse-self t) ; Enable parse on load.
(setq TeX-auto-save t) ; Enable parse on save.
(setq-default TeX-master nil) ; Query for master file.
(setq TeX-PDF-mode t)
(setq TeX-interactive-mode t)
(setq TeX-source-specials-mode 1)
;;модифицируем меню
;;; some more menu entries in the command list:
;;; see tex-mik.el from package auctex: %v is defined in tex-mik.el
;;; other variables are defined in tex.el from auctex
;;; the meaning of some auctex-varibles:
;symbols defined in tex.el and tex-mik.el:
;%b name slave tex-file %t name master tex-file
;%d dvi-file %f ps-file
;%l "latex --src-specials"
;%n line number %p printcommand %q "lpq"
;%r (TeX-style-check TeX-print-style)
;%s master-file-name without extention
;%v yap command view line
(eval-after-load "tex"
'(progn
(add-to-list 'TeX-command-list
(list "->PS landscape for pdf"
"dvips %d -N0 -Ppdf -G0 -T 297mm,210mm -o %f "
'TeX-run-command nil t))
(add-to-list 'TeX-command-list
(list "All Texify run-viewer"
"texify --tex-opt=--src --run-viewer --clean %s.tex"
'TeX-run-command nil t))))
;;
;;Настройки PreviewLatex
(load "preview-latex.el" nil t t)
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ecb


ecb - Emacs Code Browser. Пакет расширений для Emacs, используемый для повышения удобства навигации по редактируемым файлам.
Официальный сайт:
http://ecb.sourceforge.net/
Данный пакет имеет зависимость от другого - cedet.
cedet - Collection of Emacs Development Environment Tools
Официальный сайт:
http://cedet.sourceforge.net/
Скачиваем данные пакеты и распаковываем (в моем случае это cedet-1.0pre6 и ecb-2.40) в директорию
C:\Documents and Settings\{user name}\Application Data\.emacs.d\

Прописываем добавленные пакеты в .emacs. Конфигурация пакетов может иметь вид:
;;-----------------------------------------------------------------------------
;; Cedet
(setq semantic-load-turn-useful-things-on t)
(load-file "~/.emacs.d/cedet-1.0pre6/common/cedet.el")
(global-set-key [?\C- ] 'semantic-ia-complete-symbol)

(defun my-semantic-hook ()
(semantic-tag-folding-mode 1))
(add-hook 'semantic-init-hooks 'my-semantic-hook)
;;-----------------------------------------------------------------------------

;;-----------------------------------------------------------------------------
;; ECB
(add-to-list 'load-path "~/.emacs.d/ecb-2.40/")
(require 'ecb)
(global-set-key (kbd "\e\el") 'ecb-toggle-ecb-windows)
(global-set-key (kbd "C-x C-a") 'ecb-activate)
(global-set-key (kbd "C-x C-q") 'ecb-deactivate)
(global-set-key "\M-m" 'ecb-goto-window-methods)
;Перезагрузка окна методов после каждого сохранения
(setq imenu-auto-rescan 1)
;;-----------------------------------------------------------------------------

;Длинные строки всегда разбивать при отображении
(setq truncate-lines nil)
(setq truncate-partial-width-windows nil)


Кроме того, для удобства использования ecb в раздел custom-set-variables .emacs необходимо вписать:
(custom-set-variables
...
'(ecb-auto-activate t)
'(ecb-options-version "2.40")
'(ecb-primary-secondary-mouse-buttons (quote mouse-1--C-mouse-1))
'(ecb-source-path (quote ("c:")))
'(ecb-tar-setup (quote cons))
'(ecb-tip-of-the-day nil)
...
'(speedbar-tag-split-minimum-length 200)
...
)

Интерфейсы Maxima, предоставляемые Emacs


Более подробно об интерфейсах Maxima рассказано в статье Тихона Тарнавского http://maxima.sourceforge.net/ru/maxima-tarnavsky-2.html. Здесь пойдет речь лишь об интерфейсах Maxima, предоставляемых Emacs:
  1. maxima - интерактивный режим, аналогичен консольной версии Maxima или интерфейсу Xmaxima. Кроме того, через него осуществляется взаимодействие с процессом Maxima в интерфейсе maxima-mode.
  2. maxima-mode - пакетный режим, аналогично обработке файлов Maxima. Удобство режима залючается в том, что на выполнение можно отправлять как весь файл (или буфер) так и отдельную его часть или одну строку. При первом вызове порождается процесс Maxima, взаимодействие с которым осуществляется через описанный выше интерфейс.
  3. imaxima - интерактивный режим, аналогичен режиму maxima за исключением того, что вывод осуществляется не в текстовом, а в графическом виде, навроде интерфейса wxMaxima.
  4. emaxima - интерфейс, реализуемый внутри LaTeX - документа.


maxima и maxima-mode


Подключение первых двух интерфейсов осуществляется стандартным образом. Файлы расширений Emacs предоставляются самой системой Maxima, необходимо лишь правильно указать путь к ним. Кроме того, необходимо, чтобы режим maxima-mode включался автоматически при редактировании *.mxm - файлов. Добавляем в .emacs:
;; Подключаем Maxima
;; указываем где будут лежать файлы расширений
(add-to-list 'load-path "c:/Program Files/Maxima-5.18.1/share/maxima/5.18.1/emacs/")
(autoload 'maxima "maxima" "Maxima interaction" t)
(autoload 'maxima-mode "maxima" "Maxima mode" t)
(setq auto-mode-alist (cons '("\\.mxm" . maxima-mode) auto-mode-alist))

Команды maxima-mode:
C-c C-C - выполнить строку
C-c C-r - выполнить выделенный блок
C-c C-b - выполнить буфер (т.е. файл)

imaxima


Описание настройки интерфейса находится на сайте разработчика http://members3.jcom.home.ne.jp/imaxima/Site/Easy_Install_on_Windows_XP___Vista.html, новая версия сайта, по-видимому будет здесь http://sites.google.com/site/imaximaimath/download-and-install/easy-install-on-windows-xp

Ниже приведу фрагмент перевода этого описания плюс некоторые специфические особенности настройки imaxima для TeXLive в Windows.

LaTeX (MiKTeX или TeXLive)

Согласно инструкциям необходимо установить MiKTeX 2.7 в путь по умолчанию. Можно использовать и TeXLive дистрибутив LaTeX, но для этого необходимо выполнить еще несколько действий. Будем считать, что TeXLive уже успешно установлен (подробнее об этом - в начале заметки).

Теперь необходимо установить пакет mh. Его можно скачать с CTAN (файл mh.tar.lzma),
(http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=mh)
затем распаковать архив (файлы *.sty) в соответствующие директории, в которых располагаюся эти файлы в вашей установленной верси TeXLive.
Затем, запускаем на выполнение команду texhash ~/texmf

Правильность ручной установки пакета mh может быть проверена командой
kpsewhich breqn.sty
которая вернет путь к файлу breqn.sty.
Она находится в директории
{TeXLive installation directory}\bin\win32\kpsewhich.exe

GPL Ghostscript


Прежде всего, необходимо удалить установленные более ранние версии GhostScript. Он может быть уже установлен и не отдельно, а в составе другого приложения, например PDFCreator.
Заходим на http://www.cs.wisc.edu/~ghost/ скачиваем последнюю версию Ghostscript (в моем случае это 8.63), собранную для Windows. Ссылка для скачивания http://prdownloads.sourceforge.net/ghostscript/. Устанавливаем gs863w32.exe, установка должна быть произведена в путь по умолчанию.

Maxima

Она у нас также уже установлена.

NTEmacs 23

Тут следовало бы написать "внимание" с 3 восклицательными знаками, т.к. именно версия, взятая из http://ntemacs.sourceforge.net/ используется для тестирования imaxima под Windows. Впрочем, с imaxima прекрасно работают и последние версии других сборок Emacs. Однако, в случае обнаружения ошибок, прежде чем клепать гневные баг-репорты разработчику imaxima, следует выполнить тестирование именно в NTEmacs.

Открываем файл setup-imaxima-imath.el. Строки
(defvar *imaxima-miktex-bin-dir*
(file-name-directory (car (file-expand-wildcards "c:/Program Files/MiKTeX*/miktex/bin/latex.exe")))
"MiKTeX bin directory, added to exec-path")

должны быть соответствующим образом откорректированы:
(defvar *imaxima-miktex-bin-dir*
(file-name-directory (car (file-expand-wildcards "c:/{TeXLive installation directory}/bin/win32/latex.exe")))
"MiKTeX bin directory, added to exec-path")

Создаем директорию
c:\Windows\tmp

Добавляем следуюшие строчки в файл .emacs:
(load "c:/Program Files/Maxima-5.17.0/share/maxima/5.17.0/emacs/setup-imaxima-imath.el")
(setq imaxima-tmp-dir "C:\\Windows\\tmp")

Запускаем emacs. M-x imaxima [Ret]. Набираем, например, что-то вроде:
(%i1) x^2; [Ret]

emaxima


Настройка emaxima теперь сводится лишь к указанию в файле .emacs:
(autoload 'emaxima-mode "emaxima" "EMaxima" t)
(add-hook 'emaxima-mode-hook 'emaxima-mark-file-as-emaxima)

Все!

Таким образом, настройка всех режимов может быть прописана в виде:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Настройка Maxima
;;
(load "c:/Program Files/Maxima-5.18.1/share/maxima/5.18.1/emacs/setup-imaxima-imath.el")
(setq imaxima-tmp-dir "C:\\Windows\\tmp")
;; Подключаем Maxima
;; указываем где будут лежать файлы расширений
(add-to-list 'load-path "c:/Program Files/Maxima-5.18.1/share/maxima/5.18.1/emacs/")
(autoload 'maxima "maxima" "Maxima interaction" t)
(autoload 'maxima-mode "maxima" "Maxima mode" t)
; C-c C-C - выполнить строку
; C-c C-r - выполнить выделенный блок
; C-c C-b - выполнить буфер (т.е. файл)
(setq auto-mode-alist (cons '("\\.mxm" . maxima-mode) auto-mode-alist))
;; M-X emaxima-mode
(autoload 'emaxima-mode "emaxima" "EMaxima" t)
(add-hook 'emaxima-mode-hook 'emaxima-mark-file-as-emaxima)
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Заметки о работе с ecb

Наличие окна с названиями секций и подсекций с возможностью перехода к выбранной - очень удобная возможность. Ключи по умолчанию довольно длинные. Можно использовать следующую привязку:

(global-set-key "\M-m" 'ecb-goto-window-methods)

Выбрав нужную секцию, переходим к ее редактированию нажатием [RET].

Построение того, что называется "окно методов" (window-methods), в нашем случае - содержание LaTeX - документа осуществляется внешними по отношению к ecb средствами, поэтому для корректировки содержания при каждом сохранении необходимо указать:

;Перезагрузка окна методов после каждого сохранения
(setq imenu-auto-rescan 1)


Кроме того, установка ecb отменяет установленные по умолчанию переносы строк, которые не помещаются в окне редактора, на новую строку. Т.к. EMaxima может генерировать довольно длинные TeX - формулы в строку это бывает довольно неудобно. Для того чтобы вернуть перенос строк, нужно теперь указать это явно:

;Длинные строки всегда разбивать
(setq truncate-lines nil)
(setq truncate-partial-width-windows nil)

суббота, 16 мая 2009 г.

Графики в EMaxima

Что же необходимо для того чтобы уметь удобный способ добавления графиков?

Если используется pdflatex, то лучше не применять формат eps. Необходимо использовать png (или подобный графический формат). В случае использования latex все с точностью до наоборот.

Примеры из документации к Maxima:

plot2d (sin(x), [x, 0, 2*%pi], [psfile, "sin.eps"])$
plot2d (sin(x), [x, 0, 2*%pi], [gnuplot_term, png], [gnuplot_out_file, "sin.png"])$


Неприятность заключается в том, что знак "$" - есть начало (или конец) формулы в tex. Соответственно, подсветкой синтаксиса AUCTeX он именно так и воспринимается, сбивая с толку. Достаточно замкнуть формулу еще одним значком "$". Но то что формула для tex, для Maxima - ввод, который должен быть непустым. Достаточно вставить значение последнего вывода, которое, очевидно, будет пустым "%".

Имя файла с рисунком желательно писать лишь однажды, чтобы в случае необходимости его изменения не приходилось вносить правки во всем файле. Для этого используем текстовую переменную.

Функция Maxima print() вставляет пробелы между выводимыми фрагментами строки, поэтому воспользуемся конкатенацией.

Кроме того, если промежуточные действия Maxima в результирующем файле не нужны, то достаточно в объявлении ячейки EMaxima вставить звездочки "*".

В результате ячейка может иметь вид:

\begin{maxima*}
OutFile : "img/graph.png"$%$
plot2d (sin(x), [x, 0, 2*%pi], [gnuplot_term, png], [gnuplot_out_file, OutFile])$%$
print(concat("\\includegraphics[width=15cm]{",OutFile,"}"))$%$
\end{maxima*}


После вычисления данной ячейки (C-c C-u c) в директорию img (данная директория к этому моменту должна существовать), находящийся в той же директории, что и редактируемый файл будет выведен график функции, а в редактируемый файл выведется инструкция для tex по добавлению рисунка, для использования которого достаточно вынести его из окружения ячейки EMaxima:

\includegraphics[width=15cm]{img/graph.png}

пятница, 15 мая 2009 г.

Открытие блога

Применив к организму i+1 порцию Позитивно Интенсифицирующего Водосодержащего Отупителя было принято решение об открытии блога.

Не всегда можно заставить Maxima представлять результат
в том виде, в котором ожидается.

Так, исходное выражение в Maxima:
(1 - exp(-((lambda_xi_1 + lambda_xi_2))*t))

Ожидаем:
\left(1-e^{-\left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t}\right)

\left(1-e^{-\left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t}\right)

Однако, на выходе имеем:
\left(1-e^{\left(-\lambda_{\xi_2}-\lambda_{\xi_1}\right)\,t}\right)

\left(1-e^{\left(-\lambda_{\xi_2}-\lambda_{\xi_1}\right)\,t}\right)

Попробовав привести к желаемому, например через
ratsimp(1 - exp(-((lambda_xi_1 + lambda_xi_2))*t))

Получим:
e^ {- \left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t }\,\left(e^{\left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t}-1\right)

e^ {- \left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t }\,\left(e^{\left(\lambda_{\xi_2}+\lambda_{\xi_1}\right)\,t}-1\right)

Другие функции не приведут к ожидаемому виду.
Использование знака " ' " который отменяет вычисления
также не помогает.

В этом случае, генерируемую формулу приходится
редактировать вручную...