Как ONLYOFFICE помирил два поколения формул Microsoft

    Когда мы разрабатывали наши редакторы документов, мы хотели дать пользователю возможность удобно работать с любым объектом. Одним из препятствий, возникших на пути к редактированию всего и сразу и прямо в этом окне, стали формулы, а точнее — их двойственность. Студенты технических вузов сталкивались с этим явлением почти со стопроцентной вероятностью: речь идет о существовании «старых» (бинарный .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, но теперь работать с ним стало еще удобнее). В общем, оставайтесь с нами  : )
    ONLYOFFICE
    54.55
    Компания
    Share post

    Comments 19

      0
      А разве MathType не позволяет конвертировать формулы из одного вида в другой? По крайней мере мы им пользуемся, чтобы перегнать все формулы (и старого и нового вида) в tex, а потом отображать через MathJAX или mimetex.
        +1
        MathType конвертирует все формулы только в свой формат. Экспортить он умеет только в графические форматы типа gif/wmf и т.д.
          0
          Люто, бешено реквестирую Ваш рецепт по переводу вордовских документов в ТеХ!
          Существующие проблемы:
          rtf2latex2e иногда оставляет формулы картинками (баги репортить некому — заброшен);
          writer2latex, как нетрудно догадаться, конвертирует только непосредственно из ODT, в который ещё надо корректно перевести DOCX, кроме того, последний апдейт — где-то год назад.
          Чем корректно сконвертировать EMF во что-нибудь человекоimagemagick-читаемое на Linux — неизвестно (LibreOffice размещает EMF-рисунок посреди листа А4).

          Итого для одних документов используем rtf2latex2e, для других — LibreOffice + writer2latex (подбирается экспериментально, т. е. наобум).
          Если поделитесь методом экспорта формул с использованием mathtype — тоже буду очень-очень рад и благодарен. И думаю, не только я один.
          А уж если код преобразователя формул в docx (на вход — файл, на выход — файл) если в опенсорс выложите (или покажете, где лежит) — вообще праздник будет!
            +1
            На на выходе нужен html документ, потому делаем в 2 этапа:
            1) ручками запускаем преобразование формул, как описано в http://tex.stackexchange.com/questions/233963/convert-mathtype-and-ms-word-equations-equations-to-latex
            2) при загрузке на сервер, скармливаем через unoconv документ LibreOffice

            Формулы показываем через MathJax. Он пришел на замену mimetex.

            C TeX долго морочились, но, в конце-концов, печатные копии стали рендрить через wkhtmltopdf
          +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?
            0
            Поддержка различных полей у нас в планах есть. Из поддерживаемых полей сейчас только: нумерация страниц и поля для Mail Merge. Поэтому поля с формулами мы пока не поддерживаем (но в будущем обязательно реализуем).
              +1
              Моё почтение специалисту! Такие формулы удобно редактировать программно.
              Есть другой тип поля «FORMTEXT» (используется в шаблонах 1C), его вставить через горячие клавиши CTRL+F9 нельзя. Программно на VBA поле создаётся:
              ActiveDocument.FormFields.Add Range:=Selection.Range, Type:=wdFieldFormTextInput
              0
              Старый формат формул до сих пор требуется в большинстве российских научных журналах. Нарушение автором таких требований, как правило, влечет отклонение работы даже без рассмотрения рецензентами. Так что безальтернативный отказ от старого формата может воспрепятствовать пользованию продуктом некоторой доле людей. Может, есть какая-то возможность оставлять их в виде объектов?
              Да, это жутко тормознутая сфера, там и .docx лишь относительно недавно начали позволять использовать.
                0
                Если у вас файл изначально с формулами в старом формате, и вы их не планируете редактировать, то они так и останутся в старом формате.
                0
                А КомьюнитиЭдишен редактор документов в обозримом будущем не планируете обновить? Не до последней версии конечно, но хоть сколько-нибудь? :)
                  0
                  Пока таких планов нет.
                  +10
                  Ради того, чтобы не иметь дела с формулами в Word, я на первом курсе института изучил LaTeX. И ни разу не пожалел :)
                    0
                    А там временем одни из топовых российских журналов до сих пор принимают статьи в формате .doc :(

                    «Математическое моделирование», например.
                      0
                      Мне как-то сказали «принесите нам doc!» (правда, не в журнале, конечно, а в типографии помельче). Я просто спросил их, в какой формат они это верстают в итоге, попросил шаблон и переверстал всё сам. Получилось и красиво, и им проще, и мне приятнее.Правда, боюсь, в серьезном издании такого не добиться…
                        0
                        По собственному опыту: «Математические заметки» Стекловки очень даже принимают ТеХ. И очень его приветствуют. Сибматжурнал — аналогично. А вообще надо подумать, может быть, на волне импортозамещения можно какими-то административными методами добиться того, чтобы в DOC требовать было запрещено.
                        Аргументы:
                        1. Есть ГОСТ Р ИСО/МЭК 26300-2010, он же ODF. Стандарт, между прочим. Государственный! В спорном случае (формула не так открылась) всегда можно открыть официальный документ и осмотреть, кто прав. А в случае DOC/DOCX такого документа нет, из-за ошибки в формуле могут пострадать дети!
                        2. Вообще, DOC — это формат американского word. Необходимо срочно избавиться от буржуазной диктатуры в науке. А все издания, требующие делать файл в word, проверить на продажность госдепу. Не ровен час ГМО-мракобесие публикуют!..
                    0
                    В спорном случае (формула не так открылась) всегда можно открыть официальный документ и осмотреть, кто прав

                    В одной из версий Excel был забавный баг, когда, в некоторых случаях, при печати значения на графиках отличались от значений в исходном файле.
                      0
                      В опубликованной десктопной версии формулы вообще редактировать можно?
                        0
                        Конечно можно. Если они в старом формате (equation 3.0) — то отобразятся как картинка. По двойному клику — сконвертируются в новый формат. Если в новом — то откроется сразу готовое к редактированию. Если еще более старые формулы — то откроем просто картинку. И не дадим возможности редактировать. Но таких файлов — один на миллион.
                          0
                          Судя по всему у меня один на миллион. Остальные действительно открывает. Спасибо. Редактор лучше либры на первый взгляд. Тормозит только шибко, а работает прилично.

                      Only users with full accounts can post comments. Log in, please.