Как однажды Emacs из Octave в Latex формулы таскал

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

    Отчет в двадцать страниц, из которых пятнадцать — расчетов. Никакой разумной деятельности, только тупой и кропотливый набор формул пальчиками.

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


    Latex, Octave, Emacs



    Если кто не знает — в Word отвратительный набор формул. Чуть лучше ситуация
    обстоит в OpenOffice, где формулы надо набирать на специальном языке.

    В обоих этих приложениях надо загружать здоровенную и, соответственно,
    медленную программу, мучаться с использованием мыши; никак нельзя
    автоматизировать сборку документов. Поэтому для набора отчетов я использую
    Latex.

    Latex, если не использовать умных слов, это такой язык разметки научных
    текстов. Весь документ набирается простым текстом, который потом скармливается
    парсеру и выдает какой-нибудь удобный для печати или чтения формат; в моем
    случае — pdf.

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

    Для автоматизации дипломных расчетов разумно использовать Octave — бесплатный
    клон Matlab. В программе используется очень простой язык, полностью совместимый
    с языком оригинальной программы; дополнительных усилий по освоению мне не
    потребовалось.

    Ну и объединяется все это особым клеем — универсальным супер-пупер редактором
    Емаксом, в котором я пишу весь свой код и текст. В нем в качестве дочернего
    процесса запускается интерпретатор кода Octave, а для набора и предпросмотра
    формул — специальный режим Auctex.

    Емакс представляет собой так называемую Лисп-машину. Все его возможности, даже
    самые базовые, скриптуются на упрощенной версии функционального языка Лисп. В
    любой момент можно написать небольшую функцию, скормить Емаксу и тут же
    закрепить за какой-нибудь клавишей для использования.

    Подзадачи



    Итак, программа должна решать следующие задачи:
    • разбирать выбранные выражения в Octave, выделять конструкции, которые требуют замены;
    • выделять названия переменных; выделять в них часть, опускаемую в нижний индекс в символьном виде (например, в x_2 выделить x и 2, первое число должно быть названием, второе — нижним индексом);
    • определять элементарные математические функции и заменять их при необходимости на удобный для чтения вид (например, функцию abs() заменять на модуль — пару вертикальных палок);
    • после составления символьного выражения, необходимо каждую из переменных заменить в нем ее значением;
    • вычислить значение формулы и привести результат.


    Решение



    Первые три пункта решает простенький парсер на Elisp; последний пункт очень
    легко выполняется, так как в стандартный поток любого дочернего процесса( в
    данном случае — интерпретатора Octave) можно послать любую строку, и получить
    стандартный выход. То есть, после того, как был выполнен в Octave мой файл с
    рассчетами, можно просто послать названия переменных, и получить их численные
    значения.

    Вот и все. Ставишь курсор на строку с формулой в файле Octave, жмешь пару
    клавиш — в файл отчета вставляется формула в виде символов, затем в виде
    чисел, и, наконец, результат.

    Смотрим иллюстрации!

    Так было

    Так стало

    Предпросмотр формулы в Емаксе

    Возможные улучшения



    Для вставки одной формулы, таким образом, надо просто навести курсор и нажать
    пару клавиш. В принципе, можно было бы пойти еще дальше и сделать сборку отчета
    совсем уж независимой от меня. Скажем, отмечать специальным комментарием с
    примером в отчете место, куда надо вставить формулу, а в файле расчетов тот же
    пример ставить рядом с вычисляемым выражением. Тогда будет достаточно писать
    команду «build-report», а после — смотреть, как заполняется документ.

    Но как-то руки не дошли… :) Да и с универом я вроде пока заканчиваю, в
    дальнейшем программа не пригодится. Но опыт однозначно положительный, диплом
    стал продвигаться значительно быстрее. Жаль только, факультет у меня не о
    программировании, за такие вещи по голове никто и не думает погладить.

    В общем, за коллекцией документации по Latex, кодом на Elisp и пояснениями к
    нему, можно обратиться ко мне лично по соответствующему адресу. С удовольствием
    помогу с Emacs по мере возможности; хотя, конечно, до уровня гуру мне еще очень
    и очень далеко; проблема — вообще первый опыт программирования на Elisp.

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 720 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 3

      0
      Отличный пост! Спасибо
        0
        Вот даже не знаю, куда именно пихнуть пост... Оставить в "Линукс для все", или все-таки в "Емакс"?
          0
          В Emacs думаю лучше. И еще бы поподробнее как используешь это все в emacs! И код привести прямо здесь )

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое