Нумерация частей формул, совместимая с MathType
MathType — один из редакторов формул для Microsoft Office, расширенная версия редактора Equation, встроенного в выпуски Office по 2003 включительно. Он более удобен по ряду причин, хотя платный и обратно не совместим со своей базовой версией.
Одна из возможностей MathType — удобная в использовании автонумерация формул с возможностью расстановки перекрёстных ссылок в тексте. Автонумерация (всего: формул, таблиц, рисунков, списка литературы) существенно облегчает жизнь при редактировании текста, объединении нескольких текстов в один или разбивке текста на части. Она возможна и средствами самого MS Word без всяких настроек, но интерфейс той части программы не слишком дружелюбен. MathType же позволяет создавать номера и ссылки на них при помощи создаваемых при его установке меню и панели инструментов в один-два клика:
Разумеется, соглашаясь на эти удобства, пользователь получает вдобавок ограничения на формат номеров формул. Я пока встретил одно, но довольно существенное: нельзя нумеровать отдельные части формул, хотя иногда очень хочется. Приведу пример из черновика своей статьи: при этом хочется иметь возможность ссылаться как на всю формулу, так и на её части (см. рисунок), в идеале при помощи средств MathType.
Я нашёл не самый изящный, но вполне рабочий способ организовать такую нумерацию. Для примера присвоим формулам (25) и (26) на рисунке ниже номера (25.1) и (25.2).
Сначала создаём дубликаты номеров формул в первой и последней строках (в нашем примере промежуточные строки отсутствуют; можно также копипастить номера других формул; серые квадратные скобки означают, что на формулу в тексте стоит ссылка, либо она стояла в прошлом и была удалена). Кликаем на первом номере первой строки правой кнопкой мыши и выбираем пункт меню, подсвеченный на рисунке ниже: Поле должно принять вот такой вид (фигурные скобки в MS Word являются ограничителями полей):
Повторно разворачивая вложенное поле (25) в его код, получаем следующее (вездесущий MERGEFORMAT я везде заменил многоточиями для удобства чтения):
Вообще, насколько я помню, этот MERGEFORMAT достаточно куда-то поставить один раз, но при обновлении полей он волшебным образом воскресает везде. Microsoft любит вас.
Разберём, что делает этот код.
- MACROBUTTON, по всей видимости, нужен MathType’у для создания ссылок на формулы кликом на номере, просто примем эту команду как данность.
- SEQ MTEqn \h увеличивает значение переменной MTEqn на единицу, ключ \h подавляет вывод значения.
- SEQ MTEqn \c \* Arabic выводит значение переменной MTEqn арабскими цифрами, ключ \с подавляет её инкрементирование.
Оставим в стороне шуточки по поводу изящества как языка программирования, так и самого этого кода. Более того, как показала практика, чтобы MathType считал поле «своим», команду под номером 2 из списка выше изменять вообще нельзя. Получается, что номер формулы хранится в переменной MTEqn, а каждое поле, которое MathType считает номером формулы, должно обязательно инкрементировать эту переменную. Чтобы обойти эти ограничения, модифицируем код следующим образом (изменения выделены красным):
Внимание! Вместо многоточий везде подразумевается MERGEFORMAT.
Внимание! Нельзя просто так взять и поставить ещё одну пару фигурных скобок в эту формулу. Для этого нужно вызвать диалоговое окно Вставка — Поле. Можно написать код поля в этом же окне, предварительно выбрав в левом столбце Seq, а можно после вставки недоделанного вложенного поля переключить его в режим отображения кода (см. скриншот выше) и редактировать прямо в тексте. Оба способа осложнены тем, что копипаст работает криво.
Что же нового делает этот код?
- Код в круглых скобках (вы держитесь там, не путайтесь) присваивает свежепридуманной переменной SaveEqn значение переменной MTEqn (за это отвечает ключ \r), попутно его выводя (вывод переменной MTEqn по-прежнему подавляется ключом \c, чтобы номер не был написан дважды). Отдельное спасибо скажем компании Microsoft за то, что куда более понятный код < SEQ SaveEqn \r MTEqn \* Arabic \* … >работать отказывается.
- Код после круглых скобок присваивает переменной MTEqn нулевое значение (это не буква о, это ноль в местном стандартном шрифте), подавляя его вывод.
Таким образом, этот код выведет всё тот же номер (25), но запомнит его в другой переменной. Это поле нам нужно для организации ссылок на формулу (25) целиком, мы впоследствии сделаем выводимый им текст скрытым. Обнулённую переменную MTEqn мы будем в следующих полях (второе поле первой строки, поля промежуточных строк, первое поле последней строки) по-прежнему инкрементировать, организовав в них вывод в виде (SaveEqn.MTEqn). Для этого используем следующий код:
Полагаю, комментировать его не надо. Во втором поле последней строки осталось вернуть переменной MTEqn сохранённое в SaveEqn значение. Код похож на тот, что был написан в первом поле первой строки:
Обновляем поля, например, кнопкой или командой меню Update Equation Numbers (см. первый скриншот). Если не ошибаюсь, сделать это надо два раза, т. к. первый раз обновляются только номера, а ссылки на них в тексте остаются старыми. Смотрим, что у нас получилось: После этого выделяем номера (25) мышью (на скриншоте выше они подчёркнуты), вызываем меню Формат — Шрифт и делаем текст скрытым. Осталось корявые пары ссылок (25.1), (25.2) заменить на изящные ссылки на (25), для чего можно использовать любой из двух подчёркнутых номеров. Рекомендую один раз выбрать один из двух и всегда этого выбора придерживаться. Чтобы убедиться, что всё работает как надо, вызываем предварительный просмотр:
Всё работает. Правда, у нас нет возможности выравнивать отдельные строчки формулы (25) друг относительно друга. Если бы обе формулы были включены в один объект Mathtype, выравнивание бы работало. В заключение заметим, что, проделав вышеописанное иезуитство один раз, дальше можно просто копипастить номера чужих формул и обновлять поля после вставки. Именно так я и сделал добрую половину этого примера, а вторую половину не сделал только потому, что на поля с номерами формул уже стояли ссылки в тексте, при наборе с нуля всё было бы проще.