Как стать автором
Обновить

Готовим формулы красиво (Libre Office, MS Office и LaTeX)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров715

Как известно, есть программные пакеты тесно связанных друг с другом приложений, которые издревле называются «Офис». Эти пакеты»офисы» обычно состоят из вордпроцессора, процессора электронных таблиц, векторного редактора, редактора презентаций, морды к базам данных и прочих маловостребованных компонент. Из всего этого нас будет интересовать только возможность рендерить формулы в документах. Идеально было бы, чтобы результат этого рендеринга выглядел качественно и профессионально, как в приличных книгах и журналах.

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

Набрано в  "редакторе формул" из состава офиса
Набрано в "редакторе формул" из состава офиса

Как можно заметить, все без исключения скобки чуть‑ли не касаются символов, круглые скобки где‑то прямые, где‑то наклонены. Это как раз то, из‑за чего такие формулы не похожи на те, которые мы видим в книгах и профессиональных изданиях.

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

Красивый документ с формулами можно сверстать на LaTeX'е, однако есть причины, исключающие это. Они в отношении пользователя бываю внешними и внутренними. Внутренние художественно выведены в двух прекрасных мультиках — «Вовка в тридевятом царстве» и «Крылья, ноги и хвосты». Внешние причины включают:
1) частое отсутствие в требованиях к оформлению документов, содержащих формулы, возможности использования LaTeX'а. Последним особенно страдают материалы российских конференций и прочая техническая периодика, издаваемые, в том числе, и серьезными организациями, такими как, например, АО «Российские космические системы» — требования к оформлению у них такие, словно в начало 90-х вернулся;
2) отсутствие возможностей для набора и качественного рендеринга формул в офисных пакетах из коробки (LO) и вообще (MSO).

Все современные «офисные пакеты» так или иначе, отдельно или в составе какой-нибудь программы, содержат крайне неудобный, неэффективный, малофункциональный и выносящий мозг качеством результата редактор формул, производящий что-то похожее на представленное на картинке в начале статьи. Особо нужно отметить метод ввода, заключающийся в тыканьи мышкой или еще каким указателем в картинки. Это мне напоминает появление в Windows 3.0 "виртуальной клавиатуры", когда куча новоиспеченных "виндузятников" вместо использования удобнейшей механической клавиатуры на герконах с калиброванным нажатием (других тогда c IBM PC/AT/PS2 и их клонами не поставлялось) при наборе текстов захлебываясь от собственной "продвинутости" тыкала неудобнейшей мышкой в квадратики с буквами и цифрами.

Хотел сразу приступить к дополнению TexMaths к офисным пакетам Open/Libre Office, но решил провериться -- а вдруг в MSWORD завезли LaTeX. Набрал в поисковике "Альтернативы редактору формул в MS Word?" и выхлоп был прямо таки многообещающий:

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

Итак, поскольку до сих пор (июнь 2025) MSO не позволяет напрямую использовать LaTeX для рендеринга формул, приходится использовать многошаговый метод, если нужно в документе формата .docx иметь приличный вид формул. Кратко, предполагая, что LaTeX в системе присутствует, алгоритм следующий:

1) устанавливаем libreoffice и плагин TexMaths к нему;

2) регистрируем свою преамбулу -- да, TexMath позволяет использовать в формулах все доступное из texlive, включая пакеты AMS, русские стили и прочее полезное;

3) устанавливаем выхлоп в .png и 1200 dpi (поддержка .svg в MSO пока оставляет желать лучшего, однако, если нет задачи экспортировать документ в MSO, лучше выбирать .svg);

4) набираем формулы в LaTeX -- это работает во writer, impress и draw и они красиво рендерятся там;

5) поскольку сам код и преамбула сохраняются в документе, нет никаких проблем код редактировать и даже копипастить в другие документы как результат рендертнга и как код;
6) а теперь просто экспортируем свой .odt в формат .docx, но не обычный, а Word 2010-365.

Ниже приведены формулы из картинки в начале статьи, набранные в латехе из-под TexMaths и libreofficе. После набора файл был сохранен, как "Документ Word 2010-365", открыт в WINWORD.EXE из MSO 2022, после чего был сделан скриншот.

Поскольку TexMaths вызывает установленный в системе LaTeX для компиляции и рендеринга формул, результат будет всегда одинаков вне зависимости от платформы.

Моя преамбула для TexMaths
\usepackage{mathtext}
\usepackage[T1,T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{cancel}

%%\usepackage{txfonts}
%%\usepackage{setspace}

\usepackage[english,russian]{babel}

% Uncomment this line for sans-serif font
%\everymath{\mathsf{\xdef\mysf{\mathgroup\the\mathgroup\relax}}\mysf}

% Uncomment these lines for colored equations
% Caution! Background color breaks transparency!
%\definecolor{fgcolor}{RGB}{0,0,255}
%\definecolor{bgcolor}{RGB}{255,0,0}
%\pagecolor{bgcolor}\color{fgcolor}

%%\def\ttdefault{cmtt}
%%\def\rmdefault{cmr}

\usepackage{bm}
%% Прямые интегралы и греческие символы
\usepackage{fixint}
\usepackage{rumathgrk}
%\usepackage{rumathgrk1}
%% наклонные русские индесы по умолчанию 
\DeclareSymbolFont{T2Aletters}{T2A}{cmr}{m}{it}

\usepackage{color}
\def\red#1{{\color[rgb]{0.5,0,0}{#1}}}
\def\magenta#1{{\color[rgb]{0.5,0,0.5}{#1}}}
\def\blue#1{{\color[rgb]{0,0,0.5}{#1}}}
\def\green#1{{\color[rgb]{0,0.5,0}{#1}}}

\def\le{\leqslant}
\def\ge{\geqslant}

\DeclareMathOperator*{\Exp}{Exp}
\DeclareMathOperator*{\rnd}{rnd}
\DeclareMathOperator*{\scal}{scal}
\DeclareMathOperator*{\vect}{vect}
\DeclareMathOperator*{\sign}{sign}

Чтобы все это работало в MS Windows, кроме libreoffice и TexMaths требуется установить MikTeX -- это порт texlive для MS Windows.

Теги:
Хабы:
+11
Комментарии2

Публикации

Ближайшие события