Когда мы разрабатывали наши редакторы документов, мы хотели дать пользователю возможность удобно работать с любым объектом. Одним из препятствий, возникших на пути к редактированию всего и сразу и прямо в этом окне, стали формулы, а точнее — их двойственность. Студенты технических вузов сталкивались с этим явлением почти со стопроцентной вероятностью: речь идет о существовании «старых» (бинарный .doc) и «новых» (прогрессивный XML) формул в редакторах пакета MS Office.

В этой статье мы расскажем, как эта проблема решается в редакторах ONLYOFFICE. Ответ прост: К – «Конвертация». Мы конвертируем старые формулы в доступные для редактирования новые формулы и крайне довольны своей идеей. Почему мы пошли таким путем и как устроена конвертация, читайте далее.



Дуализм формул



В редакторах Microsoft до сих пор можно набирать формулы двух разных форматов.

Старый формат формул — это формулы, которые создавались в MS Office до 2007 года с помощью надстройки Microsoft Equation. Например, чтобы создать такую формулу в Word'е, пользователь вызывает сторонний редактор через меню (Вставка -> Объект -> Microsoft Equation). По этой команде открывается редактор формул, который на самом деле является урезанной версией программы Math Type от компании Design Science.

Таким образом, старые формулы являются объектами OLE. Word просто отдает определенную область документа другому приложению, даже не подозревая, чем это приложение в ней занимается. После закрытия MS Equation Word относится к созданным в нем формулам как к картинкам, встроенным в текст. Их нельзя отредактировать в самом тексте — нужно вновь вызывать редактор формул.

В 2007 году начался переход на docx. Вместе с ним у Microsoft появился свой редактор формул, возможности которого гораздо шире. Во-первых, в нем больше математических символов и шаблонов. Во-вторых, новый редактор позволяет Word'у работать с формулами как с частью текста, а не как с картинками. Таким образом, новый редактор формул — это WYSIWYG редактор.

Казалось, что жизнь математиков и все, кому нужны были формулы, должна была упроститься с появлением нового редактора. Но возникла проблема. Переход на формат docx не произошел мгновенно — остался большой массив документов в формате doc. Более того — многие упорно продолжают сохранять документы в doc. И это неудивительно — у многих остались старые компьютеры и старые версии MS Office.

Итак, пользователи до сих пор сохраняют файлы как в docx, так и в doc. Кроме того, существует гигантское число документов формата doc, которые никогда не будут сконвертированы в docx, и гигантское число людей, которым приходится иметь дело с этими документами и созданными в них формулами.

Как решают проблему разные редакторы документов



  • Два редактора. Microsoft на всякий пожарный держит два редактора формул — новый на панели инструментов и старый по тому же адресу (меню Вставка -> Объект). Логично, что старый редактор уже не развивается. Он просто существует на случай открытия документа в формате doc или файла docx, содержащего старые формулы.
  • Ноль редакторов. Онлайн-версия Word'а формулы не поддерживает в принципе. Она покажет их в просмотрщике, но в режиме редактирования на месте формул будет показана загадочная надпись «Equation».
  • Поддержка новых формул. Google Docs отображает старые формулы картинками, а новые позволяет редактировать. О подходе Google к редактированию формул мы писали в одной из предыдущих статей. Если кратко, то редактирование сложных формул в этом редакторе физически невозможно. Во-первых, создавая формулы, пользователь работает в одной строке (нельзя работать с матрицами, системами уравнений и т.д.). Во-вторых, чтобы отобразить или набрать формулы используются символы существующих шрифтов.
  • Конвертация в собственный формат. OpenOffice конвертирует оба типа формул в свой собственный формат и работает исключительно с ним.


Подход ONLYOFFICE



Естественно, мы хотели поддерживать оба типа формул. В то же время нам казалось логичным брать за основу именно новые формулы. Нашим основным форматом всё-таки является docx.

Нам не хотелось делать два редактора, как Microsoft, — это ресурсозатратно и бесперспективно. К тому же, мы и так можем идеально отобразить старые формулы, сохраненные в docx. Писать отдельный редактор для них было бы совсем странно, и вот что мы решили: даем пользователю делать с новыми формулами всё, что он хочет, а старые показываем в виде векторных картинок. Но это не значит, что теперь он ничего не сможет в них поменять — одно элегантное движение мышкой (также известное как двойной щелчок) и старые формулы сконвертируются в новые, полностью доступные для редактирования.

Как устроена конвертация



Старая формула хранится в документе docx в двух вариантах — в виде векторной картинки wmf и в виде OLE объекта (бинарника со старой формулой). Если к нам в документе пришла старая формула, мы показываем её как картинку, такую, как записал Word. Поэтому в редакторах ONLYOFFICE файл со старыми формулами откроется точно также как и в Word'е.

При конвертации кое-что в форматировании может поехать, т.е. измениться, поскольку форматы старых и новых формул кардинально отличаются. Но это легко можно поправить, ведь теперь все объекты документа доступны для редактирования.

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

Здесь нас можно назвать оригинальными: никто не конвертит старый формат в новый вообще. Даже Word. Редакторы ONLYOFFICE позволяют поправить формулы в doc, затем перевести всё в docx и больше никогда не думать об этом.

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

Трудности



Единственная трудность, которая может возникнуть при конвертации старых формул в новые — это несовместимость форматов друг с другом. В таких случаях нам приходилось потрудиться, чтобы перевести одну формулу в похожую.

Например, рассмотрим систему из трех уравнений в старом формате



Для уравнений задается выравнивание по левому краю (по центру/по правому краю) в новом формате такого выравнивания нет (уравнения размещаются по центру)



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



В принципе приемлемый результат конвертации. После конвертации, если нужно, можно еще немного подредактировать систему, разместив & в нужных местах перед переменными, получим результат, который сложно сделать в старых формулах



Вместо заключения



Мы старались сделать работу с формулами максимально удобной для пользователей ONLYOFFICE и вполне довольны результатом. Надеемся, что, сделав конвертацию формул старого формата в новый, мы внесли свой вклад во всеобщий переход на docx. Просто забирайте формулы из doc'ов и больше никогда туда не возвращайтесь.

А еще — мы не перестаем улучшать наши редакторы. Главным приоритетом в ближайшее время станет работа над сносками. Кроме того, совсем скоро выйдет большой пакет обновлений по всем модулям ONLYOFFICE. В числе главных — предоставление документа docx c правами на рецензирование (оно появилось еще в версии редакторов 3.6, но теперь работать с ним стало еще удобнее). В общем, оставайтесь с нами  : )

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


  1. potapuff
    07.04.2016 12:39

    А разве MathType не позволяет конвертировать формулы из одного вида в другой? По крайней мере мы им пользуемся, чтобы перегнать все формулы (и старого и нового вида) в tex, а потом отображать через MathJAX или mimetex.


    1. xkorolx
      07.04.2016 13:51
      +1

      MathType конвертирует все формулы только в свой формат. Экспортить он умеет только в графические форматы типа gif/wmf и т.д.


  1. farPtr
    07.04.2016 12:54
    +2

    Забыли про еще один формат формул — через поля Word. Появился если не раньше варианта через OLE, то где-то одновременно с ним. И поддерживается во всех версиях Office. Возможности у полей меньше, чем у полноценных редакторов, но их хватает для многих технических документов. Есть интегралы, матрицы, скобки, наложение, корни, дроби, индексы, альфы… Формат получается не растровый. Формулы можно редактировать в документе в текстовом представлении, но нужно знать коды полей (учатся за пару минут, использование интуитивное).

    Например: дробь {Eq \F(1;x)}, матрица с корнями в скобах {Eq \B(\A(\R(x);\F(1;4)))}. Сtrl-shift-q конвертирует выделенный латинский текст в альфу-бету-гамму, ctrl+(shift)+"=" — верхний/нижний индексы. Вставка поля — ctrl+f9. Производительность при использовании таких формул выше, чем при двух других вариантах.

    Достоинства формул через поля — реагируют на стили, отображаются быстро, нет геморроя с размерами как у «современных docx» формул Office (выделил, убрал выделение, и — бац! — 12-й шрифт вместо 14-го для всей формулы), работают в древних Office (начинал с Win95 и какой там был Office), совместимы с doc и docx.

    Office 2010 всё еще чудит при попытках конвертации формул через поля в «современные docx» или в Math Type ({Eq \F(1;3)} — «Формула слишком велика для преобразования»). А как обстоят дела с такими полями у ONLYOFFICE?


    1. xkorolx
      07.04.2016 13:55

      Поддержка различных полей у нас в планах есть. Из поддерживаемых полей сейчас только: нумерация страниц и поля для Mail Merge. Поэтому поля с формулами мы пока не поддерживаем (но в будущем обязательно реализуем).


    1. bopoh13
      07.04.2016 16:30
      +1

      Моё почтение специалисту! Такие формулы удобно редактировать программно.
      Есть другой тип поля «FORMTEXT» (используется в шаблонах 1C), его вставить через горячие клавиши CTRL+F9 нельзя. Программно на VBA поле создаётся:
      ActiveDocument.FormFields.Add Range:=Selection.Range, Type:=wdFieldFormTextInput


  1. topa
    07.04.2016 13:24

    Старый формат формул до сих пор требуется в большинстве российских научных журналах. Нарушение автором таких требований, как правило, влечет отклонение работы даже без рассмотрения рецензентами. Так что безальтернативный отказ от старого формата может воспрепятствовать пользованию продуктом некоторой доле людей. Может, есть какая-то возможность оставлять их в виде объектов?
    Да, это жутко тормознутая сфера, там и .docx лишь относительно недавно начали позволять использовать.


    1. xkorolx
      07.04.2016 13:56

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


  1. WayMax
    07.04.2016 13:28

    А КомьюнитиЭдишен редактор документов в обозримом будущем не планируете обновить? Не до последней версии конечно, но хоть сколько-нибудь? :)


    1. hellonadya
      07.04.2016 13:34

      Пока таких планов нет.


  1. bigfatbrowncat
    07.04.2016 13:50
    +10

    Ради того, чтобы не иметь дела с формулами в Word, я на первом курсе института изучил LaTeX. И ни разу не пожалел :)


    1. 0xd34df00d
      08.04.2016 01:51

      А там временем одни из топовых российских журналов до сих пор принимают статьи в формате .doc :(

      «Математическое моделирование», например.


      1. bigfatbrowncat
        09.04.2016 23:42

        Мне как-то сказали «принесите нам doc!» (правда, не в журнале, конечно, а в типографии помельче). Я просто спросил их, в какой формат они это верстают в итоге, попросил шаблон и переверстал всё сам. Получилось и красиво, и им проще, и мне приятнее.Правда, боюсь, в серьезном издании такого не добиться…