Перевод документов из 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 комментариев: |высказаться!| RSS-лента дискуссии.|
Anatoly комментирует...

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

virens комментирует...

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

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

Unknown комментирует...

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

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

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

Big 40wt Svetlyak комментирует...

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

virens комментирует...

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

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

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

Unknown комментирует...

Вообще-то оно под винду :-)

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

Анонимный комментирует...

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

virens комментирует...

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

2 Sandinist

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

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

Анонимный комментирует...

По поводу кодировок в writer2latex.

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

don_alessandro комментирует...

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

virens комментирует...

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

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

don_alessandro комментирует...

Будет. Дайте срок.

Анонимный комментирует...

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

Unknown комментирует...

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

Сергей комментирует...

С кодировкой вопрос решается проще некуда:

w2l -inputencoding=cp1251 infile.odt
:)

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

Unknown комментирует...

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

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

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

Unknown комментирует...

Поставила из пакета, есть теперь такая утилита 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)

virens комментирует...

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

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

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

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


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

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

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

Анонимный комментирует...

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

Отправить комментарий

Подписаться на RSS-ленту комментариев к этому посту.