3/12/2007

Перевод документов из Word / OpenOffice.org в LaTeX

Задача: чтобы перейти на прогрессивный ЛаТеХ с ЗлоВорда / другого форматированного текста, нужно перевести набранные там документы в формат LaTeX. Как это сделать в открытых системах?
Решение: есть несколько свободных утилит, позволяющих это делать.

Введение
Обычно теме перевода научных документов из неправильных форматов в ЛаТеХ уделяют не так много внимания - дескать, кто вкусил ЛаТеХа и пользуется им, у того нет неправильных документов. Но что делать, если вы решили переходить к использованию ЛаТеХа и не хочется снова перенабирать формулы? Есть несколько утилит для перевода документов в ЛаТеХ, в том числе и открытых. Ниже приводятся примеры конвертации документа с формулами и рисунками:



OpenOffice.org -> SXW -> writer2latex + Java = LaTeX
Вот такая хитрая цепочка, дающая очень приличный результат. Да, скрипты writer2latex встроены в ОпенОфис, начиная с версии 2.0.4, но работают они там пока как-то странно. Посему проще всего просто скачать эти утилиты, распаковать в домашнем каталоге (чтобы не править конфиг внутри скрипта) и дать права на исполнение.

Реализация
Для конвертации нужна Java (у меня работает с java 1.4), которую можно установить из репозитория. После этого открываем вордовый документ, сохраняем его в формат SXW в каталог writer2latex04. Теперь осталось зайти в этот каталог и набрать:
~/writer2latex04$ ./w2l имя_документа
На что вам ответят:
This is Writer2LaTeX, Version 0.4 (2005-07-01)

Starting conversion...
Done!
Всё, в каталоге появится такой же файл с расширением имя_документа.tex - его можно открыть, например, в Kile и скомпилировать.

Результат
Формулы набираются почти без нареканий, оформление передаётся прекрасно, и на рисунки вставляются ссылки. Проблему кодировок создатели этих скриптов обошли просто: кириллические символы набираются тэгами:
{\centering\selectlanguage{russian}\bfseries
{\textquotedbl}{\CYRC}{\cyri}{\cyrf}{\cyrr}{\cyro}{\cyrv}{\cyro}{\cyre}
{\cyrv}{\cyro}{\cyrs}{\cyrs}{\cyrt}{\cyra}{\cyrn}{\cyro}{\cyrv}{\cyrl}{\cyre}{\cyrn}{\cyri}{\cyre}
{\cyri}{\cyrz}{\cyro}{\cyrb}{\cyrr}{\cyra}{\cyrzh}{\cyre}{\cyrn}{\cyri}{\cyrishrt},
{\cyrz}{\cyra}{\cyrk}{\cyro}{\cyrd}{\cyri}{\cyrr}{\cyro}{\cyrv}{\cyra}{\cyrn}{\cyrn}{\cyrery}{\cyrh}
{\cyro}{\cyrp}{\cyrt}{\cyri}{\cyrch}{\cyre}{\cyrs}{\cyrk}{\cyri}{\cyrm}
{\cyrm}{\cyre}{\cyrt}{\cyro}{\cyrd}{\cyro}{\cyrm}{\textquotedbl}
\par}
Выглядит жутко, но при компиляции документа всё смотрится хорошо, что видно на рисунке:


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

Плюсы:
+ Прекрасный перевод формул, набранных в ЗлоВорде или ОпенОфисе в ЛаТеХ.
+ Отличное сохранение форматирования, таблиц, точных размеров (важно для титульных листов)
+ Одно из лучших свободных средств конвертирования в ЛаТеХ, наравне с лучшими проприетарными аналогами.

Минусы:
- Кириллица в тэгах, для редактирования текста придётся переконвертировать в текст текущей кодировки.


OpenOffice.org -> HTML -> gnuhtml2latex = LaTeX
Вариант проще и с несколько иной "заточкой", предназначенный прежде всего для перевода в ЛаТеХ форматированного текста. Утилита gnuhtml2latex входит в дистрибутив Дебиан и представляет собой перловый скрипт, который переводит форматирование HTML в ЛаТеХ 2е.

Реализация
Для работы этого скрипта Java не нужна, но нужен Perl - который должен быть в системе любого линуксоида. Скрипт имеет мало параметров
$ gnuhtml2latex имя_документа
В текущем каталоге появится теховский файл. Но качество перевода математических документов, конечно, ниже среднего: текст есть, не в тэгах, но формулы не набраны (даже рисунками), часть текста может быть в другой кодировке, код ужасен и требует напильника крупного калибра. Всё-таки, справедливости ради, скрипт писался не для того: прежде всего, целью программы был перевод форматированных документов в ЛаТеХ. С текстами типа блоггерских записей он справляется прекрасно, но математика, конечно, выше его сил.

Результат
Говоря кратко, для перевода математических документов gnuhtml2latex просто непригоден. Только форматированный текст, и то после этого код нуждается в напильнике.


Вот что осталось от математики: одни обломки.

Плюсы:
+ Хорошее сохранение форматирования, пригоден для текстов несложного оформления.

Минусы:
- Математические тексты не переводит, часть текста может запросто оказаться в другой кодировке.
- Выдаваемый код довольно жуткий, потребуется крупный напильник.


AbiWord -> LaTeX
Чуть не забыли старика-Абиворда, и очень зря. В былые годы это был чуть ли не единственный текстовый процессор, способный читать и конвертировать много форматов, в том числе ЗлоВорд. AbiWord имеет свои конвертеры для многих форматов, в том числе для злоВорда, ЛаТеХа и ОпенОфиса (в версии 2.2.7, что в Сарже) формата SXW. Так что при совсем безысходных случаях можно и АбиВорд использовать.

Реализация
Это графическое приложение, так что как тыкать по кнопкам, думаю, объяснять не надо. Просто открываем документ (SXW, HTML или даже вордовый), ищем в перечне типов файлов latex и сохраняем.

Результат
Мягко говоря, результат страшноват, но лучше того, что сделал с математикой gnuhtml2latex. AbiWord даже набрал греческие символы, но длинные формулы всё-таки запорол: во всяком случае, индексы он набирает отступами и точным позиционированием текста.


Результат не впечатляет, и по коду после этого придётся елозить напильником.

Плюсы:
+ Графическое приложение, кнопочки.
+ Вменяемо сохраняет форматирование и греческие буквы.

Минусы:
- Код страшен и "в лоб" не скомпилируется, требует применения напильника, паяльника и мощной кувалды.


catdoc -> LaTeX
Эта небольшая, но очень полезная утилита способна читать и декодировать форматы ЗлоВорда, вплоть до ЗлоВорда2000. Очень маленькая, но позволяет сохранять файл ворда либо в простом тексте, либо (с небольшими добавками) формат ЛаТеХ.

Реализация
После установки приложения apt-get install catdoc можно выполнять команду конвертации:
catdoc -t PredDiplomPractice.doc > PredDiplomPracticeCAT.tex
Утилита имеет несколько параметров, но всё-таки больше пригодна не для перевода в ЛаТеХ документов (так как математика в этом случае почти в полном объёме уходит лесом), а для включения в скрипты и анализа документов.


Результат
Только текст с некоторыми примесями тэгов ЛаТеХа. Почти нет форматирования, не говоря уже о формулах и рисунках. Только в крайнем случае при очень простых текстах.



Результат - только текст с небольшими вкраплениями формул.

Плюсы:
+ Маленькая и быстрая утилита.

Минусы:
- Всё остальное: нет формул, картинок, сносок и прочего. Только слегка отформатированный текст.


wv -> LaTeX
Группа утилит, которые по мере своих скромных сил справляются с засильем документов ЗлоВорда: с 6 до 200 версии включительно. Входит в Дебиан, тянет за собой tetex-base и ImageMagick. Утилит много

wvAbw wvDVI wvPDF wvText
wvCleanLatex wvHtml wvPS wvVersion
wvConvert wvLatex wvRTF wvWare
wvDocBook wvMime wvSummary wvWml

Реализация
После установки apt-get install wv выполняем команду конвертации:
wvLatex PredDiplomPractice.doc PredDiplomPracticeWV.tex
Утилита имеет несколько параметров, но всё-таки больше пригодна не для перевода в ЛаТеХ документов (так как математика в этом случае почти
в полном объёме уходит лесом), а для включения в скрипты и анализа
документов.


Результат
Только текст с некоторыми примесями тэгов ЛаТеХа. Почти нет форматирования, не говоря уже о формулах и рисунках. Только в крайнем случае при очень простых текстах.



Результат - только текст с небольшими вкраплениями формул.

Плюсы:
+ Маленькая и быстрая утилита.

Минусы:
- Всё остальное: мало формул, картинок, сносок и прочего. Только слегка отформатированный текст.


Заключение
При том количестве свободных утилит, которые способны переводить документы из закрытого, проприетарного и патентованного формата ЗлоВорд в формат LaTeX, конвертация осуществима и практически без потерь форматирования, формул и денег.

19 комментариев:

  1. Как всегда, четко, ясно и актуально :) Но, в начале, по-моему, опечатка. Формат OpenOffice.org - не SWX, а SXW.

    ОтветитьУдалить
  2. 2 Anatoly said...
    Как всегда, четко, ясно и актуально :)
    Спасибо :-)

    Но, в начале, по-моему, опечатка. Формат OpenOffice.org - не SWX, а SXW.
    Точно - спасибо, исправил. А комментаторы, как всегда, точны и соколиным взором отыскивают мои огрехи :-) За что огромное спасибо!

    ОтветитьУдалить
  3. Design Science TeXaide™ от производителя MathType (чья урезанная версия называется MS Equation Editor), совершенно бесплатный продукт:

    http://www.dessci.com/en/products/TeXaide/default.asp

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

    ОтветитьУдалить
  4. Ну вот, а я в свое время столкнулся с совершенно обратной проблемой — сверстал диплов в TeX'е, а потом завкафедрой не хотел его принимать, ему, видите ли нужен был "нормальный" документ, который можно читать и исправлять. Пришлось в зловордь конвертировать. Ох и намучался я тогда, особенно с формулами!

    ОтветитьУдалить
  5. 2 jankkhvej
    Design Science TeXaide™ от производителя MathType
    Вообще-то оно под винду :-) Но всё равно спасибо, попробую.

    2 Alexander
    Ну вот, а я в свое время столкнулся с совершенно обратной проблемой — сверстал диплов в TeX'е, а потом завкафедрой не хотел его принимать, ему, видите ли нужен был "нормальный" документ, который можно читать и исправлять.
    У меня была такая же проблема, только внутри лаборатории: мне сказали - верстай, в чём хочешь, но версия в ворде должна быть. Хоть умри. Ладно, говорю, без проблем: latex2rtf, подправил рисунки и поля. ВСЁ, сказал я: тест в вёрде есть? Править можете? Формулы видно? Хотите секса с вордом? Получайте :-) А я верстаю в ЛаТеХе до сих пор....

    Если у кого есть ещё мысли - буду чрезвычайно благодарен!

    ОтветитьУдалить
  6. Вообще-то оно под винду :-)

    ну так и документы ж ворда тоже не в вакууме создавались? ;-)

    ОтветитьУдалить
  7. в описании wv -> LaTeX написано:
    После установки apt-get install catdoc ...

    ОтветитьУдалить
  8. 2 jankkhvej
    ну так и документы ж ворда тоже не в вакууме создавались? ;-)
    Согласен. Спасибо за ссылку - посмотрю.

    2 Sandinist

    в описании wv -> LaTeX написано:
    После установки apt-get install catdoc

    Ой, описка - большое спасибо, устранил. Мелкие стилистические баги пофиксены :-)

    ОтветитьУдалить
  9. По поводу кодировок в writer2latex.

    Для проги есть файл конфигурации, где можно много чего настроить.
    Описание есть на сайте автора http://www.hj-gym.dk/%7Ehj/writer2latex/doc/user-manual-screen.pdf
    У меня получилось создать файл, в котором можно спокойно редактировать русский и украинский текст.

    ОтветитьУдалить
  10. На сайте
    http://peooc.donntu.edu.ua/aladin/
    в категории "Квалификационная работа (КР)"
    можно преобразовать в нормальную кириллицу
    то, что получилось в tex-файле после write2latex.

    ОтветитьУдалить
  11. 2 Анонимный пишет...
    По поводу кодировок в writer2latex.
    Большое спасибо вам за мануал! Буду его читать :-)

    2 don_alessandro пишет...
    На сайте в категории "Квалификационная работа (КР)"
    Ну вы и загнули, благородный дон Алессандро! :-) А нет ли такого же, но с перламутровыми пуговица^W в виде локального скрипта? А то каждый раз на ваш сайт заходить...

    ОтветитьУдалить
  12. Ещё одна идея: в ворде с PDFCreator или в опенофисе встроенными средствами конвертируем в PDF, PDF режется на страницы (pdftk или pypdf) и страницы вставляются как изображения в документ LaTeX. Таким образом хотя изменять вордовый текст и нельзя, зато можно воспроизвести его фотографически достоверно, включая «особенности» вордовой вёрстки.

    ОтветитьУдалить
  13. Есть прекрасный способ перевода word документов используя гугловый переводчик

    ОтветитьУдалить
  14. С кодировкой вопрос решается проще некуда:

    w2l -inputencoding=cp1251 infile.odt
    :)

    За текст спасибо - сэкономил мне кучу времени.

    ОтветитьУдалить
  15. Привет. Я скачала утилитку вот отсюда
    http://extensions.services.openoffice.org/project/writer2latex

    Распаковала, но там нет скрипта w2l.

    Ну, и соответсвенно, ничего не получилось.

    ОтветитьУдалить
  16. Поставила из пакета, есть теперь такая утилита w2l. Но конвертация все равно не работает. Правда изначально мой файл создавался в ворде, он с формулами. Возможно из-за этого.
    Говорит:


    This is Writer2LaTeX, Version 1.0 (2008-09-21)

    Starting conversion...
    Converting model.sxw
    Exception in thread "main" java.lang.NullPointerException
    at writer2latex.util.Misc.getChildByTagName(Misc.java:260)
    at writer2latex.latex.MathmlConverter.convert(MathmlConverter.java:74)
    at writer2latex.latex.DrawConverter.handleDrawObject(DrawConverter.java:157)
    at writer2latex.latex.DrawConverter.handleDrawElement(DrawConverter.java:115)
    at writer2latex.latex.InlineConverter.traverseOrdinaryInlineText(InlineConverter.java:240)
    at writer2latex.latex.InlineConverter.traverseInlineText(InlineConverter.java:183)
    at writer2latex.latex.ParConverter.handleParagraph(ParConverter.java:162)
    at writer2latex.latex.BlockConverter.traverseBlockText(BlockConverter.java:138)
    at writer2latex.latex.ConverterPalette.convertInner(ConverterPalette.java:205)
    at writer2latex.base.ConverterBase.convert(ConverterBase.java:97)
    at writer2latex.base.ConverterBase.convert(ConverterBase.java:81)
    at writer2latex.Application.doConversion(Application.java:230)
    at writer2latex.Application.main(Application.java:86)

    ОтветитьУдалить
  17. @jetxee комментирует...
    в ворде с PDFCreator или в опенофисе встроенными средствами конвертируем в PDF, PDF режется на страницы (pdftk или pypdf) и страницы вставляются как изображения в документ LaTeX
    Вот это не лучшая идея, надо сказать. Надо, чтобы текст был с оформлением.

    @rvnikita комментирует...
    Есть прекрасный способ перевода word документов используя гугловый переводчик
    Если бы всё было так просто, Никита, поста бы не было :-)

    @Сергей комментирует...
    С кодировкой вопрос решается проще некуда:
    Я про w2l не в курсе. Буду рад, если кто добавит инструкцию - опубликую в посте.

    @Елена комментирует...
    Привет. Я скачала утилитку вот отсюда
    То есть это расширение ОпенОфиса?


    Поставила из пакета, есть теперь такая утилита w2l. Но конвертация все равно не работает. Правда изначально мой файл создавался в ворде, он с формулами. Возможно из-за этого.
    Я помню как-то ковырял нечто подобное от уныния и отчаяния. Оно не взлетело. В моём варианте не работала кириллица и вывод был страшен, как ядерная война.

    Exception in thread "main" java.lang.NullPointerException
    Хех, джава! :-)

    Елена, а вы можете запостить сюда ключи, которыми вы пользовались при вызове скрипта? Может кто поможет...

    ОтветитьУдалить
  18. writer2latex очень даже расширение
    в ОО по дефолту встроена старая его версия, а на http://extensions.services.openoffice.org/project/writer2latex лежит более новая
    конвертация - через меню Файл/Экспорт
    кстати, русский оно теперь понимает нормально
    сама утилита валяется вместе с Writer2BibTeX, Writer2xhtml и Calc2xhtml тут writer2latex.sourceforge.net

    ОтветитьУдалить