Документооборот: LaTeX to All, или Мы будем прогибаться под испорченный мир
Владимир Игнатов
🕛 16.06.2006, 14:46
От редактора: я позволил себе дать в скобках некоторые комментарии, выделенные вот таким образом - Алексей ФедорчукПредупреждение: Методика, которая предлагается вашему вниманию, кому-то может показаться столь же нелепой, как барабан работы Страдивари...
Отмазка: Обзор, который вы, надеюсь, все же дочитаете до конца, не претендует на звание HOWTO, поскольку основан исключительно на личном авторском опыте (сыне ошибок трудных) и личном же авторском ге... сорри :-). Статья постоянно находится в стадии UNDER CONSTRUCTION: "Это неописуемо!" - воскликнула собака глядя на баобаб. Автор надеется (но не обещает!), что, с помощью "бесовской силы", смелых экспериментов, и читательской критики, она будет дополняться и уточняться от версии к версии.
Аксиома: важнейшим из искусств для нас является LaTeX.
Задача: не используя новомодных GUI-евых офисных приложений, наладить обмен текстовой информацией между "чАкнутыми" пользователями LaTeX (и некоторых других языков разметки) под FreeBSD (впрочем, линуксоиды тоже подойдут) и теми редкими представителями homo computers, которые по старинке используют Окна (tm). По возможности - сохранив элементы форматирования во входящих и исходящих документах. Следует заметить, что ни одно из приведенных ниже ухищрений не сможет доподлинно сохранить форматирование в сложных документах, насыщенных таблицами, формулами, etc. Но, как правило, перед такими твореньями бессильны и доступные под *NIX (да и под прочими ОС - А.Ф.) визивиг-редакторы.
Резонен вопрос: зачем же "вырезать гланды автогеном через ж...", когда под *NIX уже давно существуют офисные пакеты, более-менее сносно работающие с "уставными" подоконников форматами *.doc и *.rtf? Мотиваций - множество. Навскидку: нежелание отдавать легионы мегабайт дискового пространства под OpenOffice, Crossover + MSOffice, AbiWord, KOffice и иже с ними, идиосинкразия к визивиг-редактированию, давняя и преданная любовь к языкам логической разметки, да, наконец, отсутствие Х'ов в системе, "оттюннингованной" под сервер.
Начнем от простого к сложному, ab ove ("от яйца" - lat.), как говаривали пошловатые римляне.
1.1 CATDOC
Ситуация типичная: на ваш e-mail наконец-то пришла долгожданная инструкция по применению памперсов, но - вложением, да еще - в формате Document Microsoft Office 2000/ME/XP ("док" - в просторечьи). Вы все еще кипятитесь по поводу идиотизма отправителя? Тогда мы идём к вам, засунув под мышку catdoc!
Автор этой замечательной утилиты - известный московский админ и программист Виктор "Витус" Вагнер. Так что, используя catdoc, мы поддерживаем отечественного производителя ;-). Под FreeBSD catdoc можно собрать из портов (/usr/ports/textproc/catdoc). Пользователям "нерусских" дистрибутивов OC Linux - качать с сайта автора:http://www.ice.ru/~vitus/catdoc. Функции программы отражены в ее названии: cat - многофункциональная команда *NIX для вывода данных файла на экран, принтер или в ASCII текст, а так же - "палач" на украинской мове (впрочем, и в москальском такое слово имеется - А.Ф.), doc - вышеупомянутый закрытый формат документов от "Большого Брата".
Запущенный из командной строки:
$ catdoc filename.doc > filename.txt
преобразователь выдаст ACSII текст в кодировке koi8-r, абзацы которого отформатированы по 72 знака в строке и разделены пустыми линиями. Результат вполне пригоден для прочтения с экрана, распечатки и разметки LaTeX или groff.
Умолчальные значения выходной кодировки и параметры форматирования для catdoc можно задать в файле настроек ${HOME}/.catdocrc. Желающим ощутить все богатство дополнительных опций командной строки catdoc, традиционная для *NIX рекомендация: RTFM (man catdoc.1)! Отмечу лишь такой жирный плюс catdoc, как поддержка им через опции -s charset -d charset ВСЕГО бардака российских кодировок.
HINT (он же ФИЧА): Специально для работающих в X Window System у catdoc имеется графический интерфейс - wordview, в котором большую часть операций по преобразованию можно проделать мышом. Для сборки wordview требует Tcl/Tk8*, для использования - наличия мозгов.
HINT2 (он же ФИЧА 2): В состав catdoc входит утилита xls2csv, которая конвертирует файлы *.xls табличного процессора MS Exсel в comma-separated текст (для понимания оных большинством нормальных табличных процессоров и СУБД - А.Ф.).
HINT3 (он же ФИЧА 3): Будучи установленным, catdoc внедряется в Midnight Commander в качестве просмотрщика документов MSOffice по умолчанию (по нажатию F3). Поковыряйтесь на предмет Microsoft Word в файле расширений ${HOME}/.mc/bindings.
Существуют и "буржуйские" аналоги catdoc. На момент написания данной версии протестированы два из них: antiword (трясти ветку /usr/ports/textproc/antiword) и wv (рядом: /usr/ports/textproc/wv).
1.2 Antiword
На мой вкус, Antiword, созданный Andri van Os - весьма достойный инструмент дококовырянья. Как и положено настоящему "антифашисту", он обеспечивает конвертацию документов от MS в приемлемые для *NIX форматы текст ASCII и XML (пока - только DocBook). Причем, при выводе в ASCII текст, прекрасно работает с "нашими" кодировками koi8-r, cp1251, cp866, utf-8 и koi8-u. Главное, не забыть указать карту кодировки (mapping files, которые находятся в каталоге /usr/local/share/antiword), в опциях запуска. Например:
$ antiword -m koi8-r.txt filename.doc > filename.txt
В итоге "на гора" выдается поабзацно форматированный на 75 знаков в строке плоский текст, готовый к выводу на экран или принтер. Правда, в отличие от catdoc, antiword НЕ РАЗДЕЛЯЕТ абзацы пустой линией, что для LaTeX'а не совсем кoшерно. Вывод в XML осуществляется добавлением при запуске опции -x db и, как ни печально, для русскоязычных документов возможен ТОЛЬКО в кодировке utf-8.
Среди возможностей antiword существует и вариант конвертации MS Word -> Postscript с включением внедренных в документ иллюстраций. Однако, как честно признается разработчик, antiword'ом поддерживается PS-вывод только в ISO 8859-1 и ISO 8859-2.
1.3 WV
Обилие возможностей, продекларированных разработчиками семейства wvWare (которые объединены в пакет wv), вынуждает срочно подставлять тазик под текущие слюни. Авторы уверяют, что их софтинка запросто преобразовывает документы MS Word в форматы ASCII Text, HTML, RTF, PS, PDF, LaTeX, DVI и ABW, грамотно работая с милыми русскому сердцу кодировками koi8-r и utf-8.
Но реалии оказываются куда скромнее. Не то, чтобы врут разработчики, просто для нормальной поддержки русского в конвертерах семейства wv придется устраивать "пляски с бубном и напильником" в конфигурационных файлах. Лично я, имея под рукой catdoc, "недотанцевал" :-(...
wvLateX, даже после принудительной русификации конфига /usr/local/share/wv/wvLaTeX.xml, упорно внедряет вместо знаков русского языка "умляуты", делая совершенно нечитаемыми как исходники LaTeX, так и полученные из них DVI, PS и PDF. Та же "петрушка" - и с документами формата RTF, полученными посредством обработки doc'ов wvRTF. Про качество формата ABW ничего не скажу, за неимением AbiWord'a в системе.
Опытным путем установлено, что полноценно русскоязычными, без предварительных усилий, на выходе у wv получаются только форматы ASCII Text:
$ wvText filename.doc filename.txt
и HTML 4.0:
$ wvWare -c koi8-r filename.doc > filename.html
Последний, правда, загажен лишней разметкой и по-скромному закомментированной рекламой wvWare в конце BODY :-).
LaTeX2RTF
Практика показывает, что на исходники LaTeX, насыщенные всяческими \usepackage{bla-bla-bla} и \begin{tram-pam-pam}, среднестатистический пользователь Виндовс смотрит, как баран на новые ворота, считая порождением враждебного разума. Параноики обыкновенно их удаляют, предварительно прогнав через все 9 установленных в системе антивирусников. Остальные - бегут за пивом для ближайшего виндовс-гуру, который, после принятия "на грудь", популярно объяснит, что данный файл - недоделанная веб-страничка...
Чтобы избежать подобных казусов, под *NIX вдоволь создано утилит, преобразующих исходники LaTeX в удобоваримые для подоконников и cибаритствующих макентоидов форматы. Их и опишем. Намеренному умолчанию будет подвергнут только формат PDF - про pdflatex, надеюсь, известно любому "ТеХнарю".
По нескромному мнению автора, latex2rtf - почти панацея от "оконной болезни". Как явствует из названия конвертера, он транслирует LaTeX в формат RTF. И, при этом, сносно работает с "великим и могучим" русским языцем, стилями, колонтитулами, таблицами и иллюстрациями в тексте. А уж грамотно образованный Rich Text Format прочитают и пресловутый MS Word любой степени древности, OpenWriter из OO, и даже - WordPad, не к ночи он будет помянут. Порт latex2rtf лежит в /usr/ports/print. Собранную программу пускать так:
$ latex2rtf [-options] filename.[tex]
Из опций пристальное внимание стоит обратить на:
-C codepage
Из "наших" кириллических кодировок поддерживаются koi8-r, koi8-u, cp1251, cp855, cp866, maccyr, и даже macukr. А вот на опцию:
-i language
русскоязычным можно наплевать - нативные имена теховских определений: "Part", "Section", "Reference", "Bibliography" и т.п. latex2rtf поддерживает только для English и German.
HINT (он же ФИЧА): Файл fonts.cfg в каталоге настроек latex2rtf устанавливает, какие шрифты в выходном документе RTF будут представлять теховскую разметку Roman \rm, Slanted \sl, Sans Serif \sf, Typewriter \tt. Несложно догадаться, что вместо дефолтных можно прописать свои по вкусу.