- PVSM.RU - https://www.pvsm.ru -
Наверное, многие, кто учился в техническом ВУЗе, сначала делали вычисления своих курсовых в Mathcad (или другом математическом пакете), а затем старательно набирали эти же формулы в MS Word с подстановкой чисел. Потом забыли про это.
Когда меня взяли конструктором по расчетам на прочность — пришлось вспомнить.
Нет, современные технологии МКЭ используются (SolidWorks, Ansys), но формулы с методиками по ГОСТ никто не отменял. Тут принципы не изменились, хотя со времен защиты моего диплома прошло более 10 лет. Люди сначала набирают формулы, уже набранные в Mathcad, а потом руками подставляют каждое число в формулу и записывают результат.
Зачем писать цифры после формулы, если результат считает компьютер?
Это спорное мнение, такие записи действительно иногда помогают найти ошибку. Просто нонсенс делать это руками. Люди пытались решить эту проблему с разных сторон, существуют TechEditor [1], CalcPad [2], NormCad [3], но не о них речь, на практике применяю только 2 решения:
Оформление прямо в Mathcad и распечатка как есть
Оформление в LibreOffice Writer [4] с плагином iMath [5] — он считает и подставляет числа
Подход 1 применим не для всех документов:
рамки ГОСТ, таблицы, автонумерацию рисунков, ссылок в Mathcad не особо реализуешь
для "оформленных" расчетов требуют подставлять числа и перечислять переменные с пояснением после формулы:
$$display$$ boxed{d=sqrt{8F_2iover πτ_2}=sqrt{8 · 200 · 5over3.14 · 900}=1.68}text{мм,}\ begin{align} text{где } & boxed{F_2=200}text{Н - рабочее усилие на пружине;}\ & boxed{i=5}text{ - индекс пружины;}\ & boxed{τ_2=900}text{МПа - допускаемое напряжение сдвига.} end{align} $$display$$
если подставить значения можно в старом Mathcad 15, то с присвоением значений после формулы — проблемы что в Mathcad 15, что в Mathcad Prime
общее ограничение оформительских возможностей, нельзя вывести значение переменной без её имени и знака равенства, например
Подход 2 тоже ограничен возможностями iMath, и иногда приходиться копипастить таблицы из Mathcad в LibreOffice Writer, но не приходится хотя бы каждую цифру руками набирать в каждой формуле.
Простой пример (серым показан исходный текст):
$$display$$ boxed{ color{gray}{text{%ii @nospace{%DELTA x}@ EQDEF nospace{%DELTA x}=10}}\ Delta x=10 } $$display$$
Многовато для переменной из 2-х символов. Но решается проблема просто, т.к. iMath поддерживает юникод и существуют программы, раскрывающие сниппеты не только в Вашем любимом текстовом редакторе, но вообще везде. С помощью них можно набирать греческие буквы просто и без мышки.
Назначим сниппеты по аналогии с Mathcad, где это делается так: D, Ctrl+G → Δ, у нас будет так: DG → Δ. Тогда и читать исходник формулы станет проще:
$$display$$ boxed{ color{gray}{text{%ii @Δx@ EQDEF Δx=10}}\ Delta x=10 } $$display$$
Из бесплатных программ остановился на этих, они решают проблему:
Проблема №1. Чтобы отобразить переменные после формулы, нужно просто присвоить их скрытно перед формулой и затем отобразить после формулы их значения (серым показан исходный текст)
$$display$$ boxed{smallcolor{silver}{ text{%%ii @F_2@ EQDEF* F_2=200}\ text{%%ii @i_{}@ EQDEF* i_{}=5}\ text{%%ii @τ_2@ EQDEF* τ_2=900} }} boxed{ smallcolor{silver}{ text{%%ii @d@ EQDEF d=sqrt{{8 · F_2 · i_{}}over{%pi · τ_2}}}\ text{%%ii TEXT =sqrt{{8 · _ii_VAL(F_2)_ii_ · _ii_VAL(i_{})_ii_}}\ text{over{_ii_VAL(%pi)_ii_ · _ii_VAL(τ_2)_ii_}}=_ii_VAL(d)_ii_} }\ d=sqrt{8F_2ioverπτ_2}=sqrt{8 · 200 · 5over3.142 · 900}=1.682 }text{мм,}\ begin{align} text{где } & boxed{smallcolor{silver}{text{%%ii PRINTVAL F_2}}\F_2=200}text{Н - рабочее усилие на пружине;}\ & boxed{smallcolor{silver}{text{%%ii PRINTVAL i_{}}}\i=5}text{ - индекс пружины;}\ & boxed{smallcolor{silver}{text{%%ii PRINTVAL τ_2}}\τ_2=900}text{МПа - допускаемое напряжение сдвига.} end{align} $$display$$
В чем проблема? А в подстановке значений. Здесь пришлось скопипастить d=sqrt{{8 · F_2 · i_{}}over{%pi · τ_2}}}
, немного изменить до вида =sqrt{{8 · F_2 · i_{}}over{%pi · τ_2}}}=d
и обернуть каждую переменную в _ii_VAL()_ii_
. На практике это быстрее чем вместо оборачивания выискивать значения и вписывать их. Но работа лишняя.
Автоматизировать эту подстановку в iMath проблематично, но можно зайти с другого конца — сделать эти правки с помощью макросов в текстовом редакторе.
Проблема №2. Вместе со сгенерированным текстом исходник формулы довольно тяжело воспринимается
%%ii @d@ EQDEF d=sqrt{{8 · F_2 · i_{}}over{%pi · τ_2}}
d=sqrt{{8 · F_2 · i_{}}over{%pi · τ_2}} %%gg
%%ii TEXT =sqrt{{8 · _ii_VAL(F_2)_ii_ · _ii_VAL(i_{})_ii_}over{_ii_VAL(%pi)_ii_ · _ii_VAL(τ_2)_ii_}}=_ii_VAL(d)_ii_
=sqrt{{8 · 200 · 5}over{3,142 · 900}}=1,682 %%gg
Лечится подсветкой сгенерированного отдельным цветом, опять же в текстовом редакторе.
Проблема №3. Часто приходится искать пропавшую скобочку. Во встроенном редакторе формул подсветку парных скобок никак не добавят. Тоже решается использованием внешнего редактора
Разработчик iMath, Jan Rheinlaender [9], пошел мне навстречу [10] и добавил редактирование формул из внешнего редактора. Дело за малым — выбрать его и настроить.
Требования к редактору такие:
Q_д=0.785 · D_сп^2 · p
Sublime Text [11]
Этот редактор выглядит привлекательнее остальных. Формально он не бесплатный, но напоминает об этом даже не каждый день и ничем больше не досаждает.
Смотрим, можно ли настроить подсветку своего синтаксиса. Да, у него есть возможность описать его в yaml [12]. Пишем файл подстветки [13], результат выглядит отлично:
Теперь записываем макросы: Ctrl+Q, Ctr+F, пишем регулярку для выделения переменной, выделяем, переводим курсор влево, пишем _ii_VAL(
, выделяем регуляркой опять, переводим курсор вправо, пишем )_ii_
, Ctrl+Q. Проверяем что получилось — запускаем макрос с помощью Ctrl+Shift+Q. И ничего. Не выделяется оно, и люди жалуются [14] с 2009. Да...
Ладно, разберёмся позже. Попробуем пока настроить Sublime, чтобы он сохранял файл без подтверждений и выходил по одной кнопке. И тут снова проблема — в Sublime нельзя назначить 2 действия на один шоткат. Окей, ставим плагин для поддержки назначения нескольких действий, но сохранить без подтверждений и закрыть редактор все равно не получается. Не проблема — у нас же есть макросы! Нажимаем Ctrl+Q, запись пошла, нажимаем Ctrl+S — сохранились, теперь выходим...
Ну окно закрылось, может быть даже закрытие записалось в макрос, но сам макрос то не сохранился. Что ж, не судьба, смотрим другие редакторы.
Vim [15]
Настроить его можно, но каково набирать русские подписи к переменным. Везде описываются решения с langmap и keymap, но они не достаточны. В статье Vim и переключение раскладок: о наболевшем [16] рекомендуется плагин, который переключает раскладку. Можно найти еще одно вроде бы рабочее решение [17].
Однако даже при решении проблемы с русской раскладкой остается вопрос: сколько инженеров использует vim в своей работе? Его даже из программистов только часть использует. Откладываем vim в сторону и ищем дальше.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
---|---|---|---|---|---|---|---|---|
[W]indows [L]inux [M]acOS | WLM | WLM | W__ | WLM | W__ | W__ | WLM | WLM |
поиск регулярками | + | + | + | + | + | + | + | + |
замена внутри выделения | + | + | + | + | + | + | + | + |
подстановки (, 1, ...) | + | - | + | + | + | + | + | + |
✎ добавить курсор мышью | + | + | +¹ | + | - | + | + | ? |
✎ добавить выделение совпадения | ^D | ^⇧D | - | ^⇧D | - | - | ^⇧D⁴ | +⁰ |
✎ выделить все совпадения | ⌥F3 | Ø | - | - | - | ^⇧␠ | - | ? |
✎ выделить все совпадения из диалога поиска | ⌥⏎ | ⌥E | - | - | - | - | - | ? |
✎ добавить курсор строкой ниже | ^⌥↓⁵ | ⌥⇧↓ | -⁶ | -⁶ | - | -⁶ | -⁶ | +⁰ |
⬤ макрос редактирования текста | + | +⁰ | + | - | +⁰ | - | + | + |
⬤ запись поиска | - | +⁰ | + | - | - | - | + | + |
подсветка парных скобок | +⁷ | +¹ | + | + | +⁰ | + | + | + |
возможность определить сложный синтаксис | + | + | ± | ? | ? | ? | + | ± |
удобство работы с русским текстом | + | + | + | +² | + | + | ±⁴ | ±⁰ |
поддержка плагинов | + | + | + | ± | + | - | + | + |
менеджер плагинов | + | + | + | - | + | - | - | +¹ |
палитра команд | ^⇧P | ^⇧P | ^M⁰³ | - | - | - | ^⇧E⁴ | - |
Клавиши (для Windows): ^ — Ctrl, ⇧ — Shift, ⌥ — Alt, ␠ — Space, ⏎ — Enter, ←↑↓→ — стрелки, Ø — не назначено
⁰ — делается плагинами
¹ — требует настройки
² — по умолчанию русский текст не отображается, нужно активировать code.page=65001
в файле настроек
³ — шоткат NppMenuSearch конфликтует с пометками, нужно перенастраивать
⁴ — шоткаты, содержацие буквы, работают только в английской раскладке
⁵ — конфликтует с шоткатом переворачивания экрана
⁶ — есть шоткат ⌥⇧↓, но на самом деле он выполняет прямоугольное выделение
⁷ — без настройки нижнее подчеркивание не очень заметно
Что тут можно обобщить? Удивляют 2 вещи: невозможность записи поиска в макросах Sublime и невозможность (или я плохо искал?) подстановки при поиске с заменой в Cuda. Тем не менее, выбора в общем-то и нет.
Logo | Название | Версия | Дата | Текстовый компонент | Решение |
---|---|---|---|---|---|
![]() |
Sublime Text | 3.2.2 | 01.10.19 | Cвой (на Skia) | ✘ Нужные макросы не записать |
![]() |
CudaText | 1.118.2.0 | 29.12.20 | Свой | Подходит |
![]() |
Notepad++ | 7.9.2 | 01.01.21 | Scientilla | ✘ Слабые возможности редактирования текста |
![]() |
SciTE | 4.4.6 | 01.12.20 | Scientilla | ✘ Макросов вообще не нашел |
![]() |
AkelPad | 4.9.8 | 18.07.16 | Scientilla | ✘ Нужные макросы не записать |
![]() |
Notepad3 | 5.20.915.1 | 15.09.20 | Scientilla | ✘ Блокнот я им заменил, но нужные макросы не записать |
![]() |
Textadept | 11.0 | 01.12.20 | Scientilla / Curses | ✘ Шоткаты на русской раскладке не работают |
![]() |
Vim | 8.2 | 10.12.20 | ? | ✘ Сколько инжеренов его знает? |
CudaText [18]
И так, берем CudaText. Он поставляется как portable zip-архив [19]. В wiki [20] что-то пишут про не portable версию, но инсталлятора я не нашел. Хорошо это или плохо? Устанавливающаяся версия кажется понятнее — все настройки лежат в %APPDATA% и их можно хранить в репозитории. А здесь? Окей, положим весь редактор в репозиторий, 25Мб — это не так много, зато на другой машине не надо будет устанавливать — запустил из репозитория и голову не забиваешь. Надо сказать, что настройки хоть и хранятся в той же папке, что и редактор, при заливке в нее новой версии не перетираются, неудобство только в том что нужно руками распаковать новую версию. Первый запуск:
Эстетически выглядит норм, но как-то не контрастно всё. Ладно, это настроим. Так, убираем все что нам не нужно для набора формул. Включаем подсветку парных скобок и перенос по словам. Так же убираем поведение с последней строкой вверху экрана при прокрутке до упора (не привычно), автозакрытие скобок (польза спорная, а записи макросов иногда мешает). Statusbar оставляем, чтобы видеть, когда включен режим записи макроса.
Выбираем Options → Settings default/user, пишем
{
"wrap_mode" : 1,
"wrap_indented" : false,
"ui_statusbar_show" : true,
"ui_sidebar_show" : true,
"find_hidden_buttons": "c",
"bracket_highlight" : true,
"ui_toolbar_show" : false,
"ui_theme" : "white",
"ui_theme_syntax" : "white",
"ui_font_name" : "default",
"ui_font_size" : 9,
"font_name" : "Lucida Console",
"font_size" : 10,
"ui_title_path" : true,
"ui_menu_show" : false,
"ui_tab_show" : false,
"gutter_show" : false,
"gutter_fold" : false,
"show_last_line_on_top" : false,
"log_sessions" : false,
"py_init_log" : false,
"auto_close_brackets": ""
}
Теперь команды меню доступны только по кнопке ' ⋮ ' слева вверху и через меню Ctrl+Shift+P (как в Sublime). Текущая вкладка, крестика которой теперь не видно, закрывается по Ctrl+W
Нужно выбрать тему поконтрастнее.
Но тратить время на это не придётся — светлая контрастная тема одна — white (вторая слева).
Из оригинального: если увеличить высоту окна, слева появится кнопка 'δ', которая показывает список специальных символов
Но нам это не нужно — мы используем aText для набора греческих и математических символов.
Теперь надо установить плагины: Auto_Save и Macros. Устанавливаются они как в Sublime: Plugins → Addons Manager → Install..., ну или через Ctrl+Shift+P и наборе чего-то типа plugin:Install+Enter. Через некоторое время появится список доступных плагинов
Тут все понятно. Надо только обратить внимание, что плагины разбиты по категориям. и для фильтрации можно набирать название этой категории с ':', например, 'theme:' — для просмотра всех неустановленных тем. И еще: установленные плагины не отображаются в списке, для них есть пункт меню Plugins → Addons Manager → Remove add-on...
Сначала повесим шоткаты на команды макроса (из коробки таких шоткатов нет). Если в Sublime это делалось правкой конфига через Preferences→Key Bindings, то здесь это делается оригинально:
Назначаем Ctrl+Q для "macros: start recording" и Ctrl+Shift+Q для "macros: stop recording".
Настройки эти сохраняются в файле settings/keys:
...
"2810" : {
"name" : "macros: start recording",
"s1" : [ "Ctrl+Q" ]
}
...
Но можно ли дописывать шоткаты прямо в файле и назначать произвольные цифровые айдишники — не ясно.
Основная задача — записать макрос iMath:explain EQDEF
, который будет копировать выражение, ставить переменную в конце после '=', оборачивать переменные в _ii_VAL(
и )_ii_
и еще будет переименовывать @метку@
. Задача большая, поэтому разобъем её на более мелкие. Здесь приведу запись только одной. Итак, записываем макрос, который обернет переменные в _ii_VAL(
и )_ii_
:
b(abs|acute|aleph|alignb...widetilde|widevec|wp|yellow)b
, жмем Alt+E, Esc — теперь у нас выделены все ключевые слова, жмем ←, вписываем @@
%%ii TEXT
с помощью регулярки (?<=^%%iis+TEXT).*$
(?<=[^%@'"])(d+.d+|%w+_{[^{}]*}|%w+|bw+_{[^{}]*}|bw+)(?!.*%%gg$)
_ii_VAL(
, Ctrl+V, )_ii_
@@
простой заменой по всему документуimath:_ii_VAL()_ii_ all
imath:_ii_VAL()_ii_ all
(не нажимая Enter), F9, назначаем Ctrl+Shift+VМакрос можно править (что я и делал), он лежит в settings/macros.json. Примерно такими же хитрыми манипуляциями записываем остальное. При записи макроса можно вызывать другой макрос.
Теперь настроим Auto_Save. Ctrl+Shift+P → ищем plugin:Auto Save: config
, правим конфиг
[op]
save_interval=30
save_before_closing_tab=1
on_deactivate=0
Теперь Cudа будет сохранять файлы ничего не спрашивая, таким образом правка формулы в Cuda будет происходить по той же логике, что и правка в LO Math. Ещё я назначил "file:quit program" шоткат F3 (у меня и в iMath редактор вызывается по F3) — чтобы открыть/закрыть двумя нажатиями одной кнопки.
Осталось настроить подсветку синтаксиса. Wiki [21] говорит, что чтобы создать свой лексер, нужно установить SynWrite [22] и потом, видимо, удалить и забыть про него. Действуем по этой инструкции.
Выбираем подходящие по смыслу стили и нажимаем ОК, лексер заработал:
Вот и все. Теперь заниматься оформителькой писаниной стало гораздо легче! Настройки можно взять здесь [23] (нужно распаковать в папку, в которую распаковали редактор)
Конечно, я пропустил много популярных редакторов (те же Atom [24] и Visual Studio Code [25]). Но все равно странно — казалось, подойдет любой продвинутый, а подошел только один, причём в других не хватало простых вещей. Хотелось поделиться обнаружением этого редактора. Еще хотел поделиться способом оформления расчетной документации (или курсовых) с помощью iMath (плагин еще тот по стабильности и эргономичности, но другого нет).
Страница скачивания LibreOffice [4] — тестировал на 7.0, но и 6.4 должен работать
Страница скачивания iMath [26] — скачивать нужно iMath-2.3.1~beta2.oxt
Обсуждение фичи iMath "open in external editor" на sourceforge.net [10] — про настройку iMath
Документация по iMath [27]
Страница скачивания CudaText [19]
Настройки CudaText для работы с iMath [23] (нужно распаковать в папку, в которую распаковали редактор)
CudaText на github.com [28]
CudaText на sourceforge.net [29] — здесь только плагины
Настройки aText для набора греческих символов и не только [7] — открываются по Ctrl+O из aText
Автор: cser
Источник [30]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/vim/360512
Ссылки в тексте:
[1] TechEditor: https://www.dystlab.store/index.php/ru/techeditor
[2] CalcPad: https://www.cesdb.com/calcpad.html
[3] NormCad: http://normcad.ru/s/normcad.php
[4] LibreOffice Writer: https://www.libreoffice.org/download/download/
[5] iMath: https://sourceforge.net/projects/ooo-imath/
[6] aText: https://www.trankynam.com/atext/
[7] Здесь: https://raw.githubusercontent.com/cser/images/master/post_files/engineers.csv
[8] espanso: https://github.com/federico-terzi/espanso
[9] Jan Rheinlaender: https://sourceforge.net/u/jrheinlaender/profile/
[10] пошел мне навстречу: https://sourceforge.net/p/ooo-imath/feature-requests/75/
[11] Sublime Text: https://www.sublimetext.com/3
[12] Да, у него есть возможность описать его в yaml: https://www.sublimetext.com/docs/3/syntax.html
[13] файл подстветки: https://sourceforge.net/p/ooo-imath/feature-requests/_discuss/thread/9d0adce625/541f/attachment/eqn.sublime-syntax
[14] жалуются: https://forum.sublimetext.com/t/using-find-in-macros/245
[15] Vim: https://www.vim.org/
[16] Vim и переключение раскладок: о наболевшем: https://habr.com/ru/post/321902/
[17] вроде бы рабочее решение: https://github.com/powerman/vim-plugin-ruscmd
[18] CudaText: https://sourceforge.net/projects/cudatext/files/release/
[19] portable zip-архив: https://www.fosshub.com/CudaText.html
[20] wiki: https://wiki.freepascal.org/CudaText#Location_of_folders_.27settings.27.2C_.27py.27.2C_.27data.27
[21] Wiki: https://wiki.freepascal.org/CudaText#Lexers
[22] SynWrite: https://sourceforge.net/projects/synwrite/
[23] здесь: https://github.com/cser/images/blob/master/post_files/cuda_text_iMath_settings_01.zip?raw=true
[24] Atom: https://atom.io/
[25] Visual Studio Code: https://code.visualstudio.com/
[26] Страница скачивания iMath: https://sourceforge.net/projects/ooo-imath/files/Beta%20versions/iMath-2.3.1/
[27] Документация по iMath: https://ooo-imath.sourceforge.io/wiki/index.php/Main_Page
[28] CudaText на github.com: https://github.com/Alexey-T/CudaText
[29] CudaText на sourceforge.net: https://sourceforge.net/projects/cudatext/
[30] Источник: https://habr.com/ru/post/536478/?utm_source=habrahabr&utm_medium=rss&utm_campaign=536478
Нажмите здесь для печати.