Предисловие

При написании инженерной документации и научных публикаций обычно используют либо офисные пакеты (MS Office, Open Office, Libre Office), либо различные реализации издательской системы TeX (LaTeX).

Первый вариант - простой и наглядный, позволяет очень быстро разрабатывать документы и имеет минимальный порог вхождения, но имеет сильно ограниченные иллюстративные возможности. Так же часто приходится выбирать именно его потому, что заказчик или публикатор требует предоставления документов строго в формате .doc или .docx. Второй вариант обладает непревзойдёнными возможностями форматирования и иллюстрирования документа, но требует много знаний, внимательности и трудозатрат.

Например, я работаю проектировщиком систем автоматического управления и телемеханики и мне постоянно надо быстро писать технические задания и пояснительные записки (быстро потому, что за них не платят и в сроки исполнения проекта времязатраты на них заказчики обычно не включают) и выдавать их обычно надо в формате .doc (так как мои заказчики - архитекторы, - потом вставляют мои тексты в свои общие техзадания и пояснительные записки). Поэтому я использую Libre Office. Но в создаваемые документы мне часто надо вставлять функциональные и электрические схемы, а рисовать их в Libre Office Draw крайне неудобно, а разрабатывать их, например, в KiCAD, экспортировать в графику и вставлять в документ - очень долго.

В то же время в системе LaTeX имеется замечательный графический пакет Pgf/TikZ, который внутри себя имеет и библиотеки для отрисовки электрических, логических и сетевых схем. Давно хотелось как то соединить возможности Libre Office и LaTeX... и решение было найдено!

А ларчик просто открывался

Несмотря на то, что в состав пакета Libre Office входит замечательная программа для ввода математических формул Math, среди расширений обнаружилось и такое: TexMaths И хотя формально оно предназначено для вставки в документ математических формул, набранных в формате LaTeX, внимательное его изучение показало, что это расширение способно на гораздо большее.

При вводе формулы мы видим вот такой интерфейс:

Основное окно TexMaths
Основное окно TexMaths

Если нажать на кнопку "Preamble...", то становится очевидным, что каждую формулу TexMaths вводит как полноценный документ в формате LaTeX, но в преамбулу его по умолчанию включает только математические пакеты:

Преамбула формулы TexMaths
Преамбула формулы TexMaths

Но, может быть, можно включать и другие пакеты LaTeX? Можно! Более того, подозреваю, что именно для этого преамбула и сделана редактируемой - хотя в документации к расширению об этом и не говорится.

Итак, добавляем в преамбулу пакет Pgf/TikZ и библиотеки TikZ circuits ee IEC и TikZ circuits logic IEC c европейскими условными графическими обозначениями электрических элементов:

Добавление пакета PGF/TikZ в преамбулу LaTeX
Добавление пакета PGF/TikZ в преамбулу LaTeX

Нажимаем "Save Local" для сохранения новой преамбулы в документе (вместо этого можно нажать "Apply" для применения изменений только к текущему рисунку или "Save Global" для сохранения такой преамбулы и для других документов) и можем рисовать электрическую схему:

Код электрической схемы на LaTeX Pgf/TikZ
Код электрической схемы на LaTeX Pgf/TikZ

Обратите внимание на выделенное желтым цветом - что бы библиотека Pgf/TikZ заработала в TexMaths, её необходимо не только загрузить в преамбуле, но и указать в заголовке окружения

Короткие команды LaTeX вида \tikz\draw (0, 0) to [diode={info={D_1}}] (3, 0) to [resistor={info={R_1}, info'={50\mu\Omega}}] (3, 2); в TexMaths не работают

В результате получим вот такую красивую схему:

Результат выполнения кода в документе Writer
Результат выполнения кода в документе Writer

Аналогично работают и другие окружения LaTeX, например, можно схему поместить в окружение Figure и с помощью команды \caption{} присвоить ей номер и подпись, а с помощью окружения Center разместить схему по центру рисунка:

Использование других окружений LaTeX
Использование других окружений LaTeX
Результат использования окружений Figure и Center
Результат использования окружений Figure и Center

Ну и, конечно, можно использовать все остальные графические и "программистские" возможности мощнейшего пакета Pgf/TikZ и PgfPlot, вставляя в документ Writer красивые схемы и иллюстрации полиграфического качества.

Подводные камни

Ну как же без них ;)

Каждый рисунок TexMaths оформляет как отдельный документ LaTeX - со своими преамбулой и окружением Document, соответственно, при этом сбрасываются все счётчики и все рисунки получают номер 1. Автоматического решения этой проблемы я (пока?) не нашёл и решаю ее "в лоб" - ведя нумерацию рисунков в ручную и вставляя перед командами \caption{} команды явной установки значения счётчика рисунков :(

TexMaths вставляет в документ откомпилированный рисунок в виде изображения в формате .svg или .png - поэтому изменить полученный рисунок просто "щёлкнув" по нему, увы, не получится. Редактировать его потом в векторных редакторах, конечно, возможно, но это как-то не комильфо... Однако, решение есть (хотя и не очень изящное - скорее выглядящее как "костыль"). TexMaths все же сохраняет в документе не только преамбулу, но и LaTeX-коды всех рисунков и к ним можно "откатиться", нажимая в окне TexMaths кнопку "<<". Найдя нужный код, его можно отредактировать и вставить заново вместо неправильного рисунка.

Однако, следует помнить, что сохранение LaTeX-кода работает только в формате .odt - если надо сохранить документ в формате MS Word, то рисунки в нём сохранятся, но вернуться к их редактированию уже не получится. Поэтому я, даже когда заказчик просит дать ему .doc, для себя вначале сохраняю документ в .odt, а потом делаю второй экземпляр в формате .doc для Заказчика.

Выводы

Оказывается, удобные офисные пакеты Open Office / Libre Office и мегакрутая издательская система LaTeX не конкуренты, а друзья - можно быстро и удобно набирать документ в WYSIWYG-редакторе Writer, вставляя в него расчёты с помощью расширения iMath, скрипты на VBA и Python, таблицы Calc, диаграммы Draw, а там, где это целесообразно, использовать LaTeX.

Комментарии (1)


  1. nerudo
    15.06.2025 20:46

    Очень интересный метод. Но не вполне понятно, зачем вставлять подпись внутри изображения? Это дело пакета верхнего уровня, т.е. либры. В конце концов, в документе же могут быть и другие рисунки - созданные другими средствами, хоть jpeg вставленный.

    С другой стороны, у меня ситуация строго обратная - средства рисования Draw или wysiwyg редактирование таблиц в офисном пакете мне очень нравятся. А вот невозможность хранить документ в текстовом файле со всеми плюсами версионного контроля и параллельной работы - совершенно нет :(