Как при подготовке документов избежать медлительных офисных пакетов, пользоваться любимым текстовым редактором, отделить содержание от представления, обеспечить высокую читаемость и прозрачность документов для VCS, легко сравнивать версии текстов?
Недавно комментировал извещение о выходе нового LibreOffice и решил, что следует оформить соображения более связно.
Представим, что мы получили по e-mail документ в формате MS Word, должны его заполнить/поправить и распечатать/переслать дальше. Скорее всего, этот документ нам будут периодически присылать снова и/или нам нужно будет на его основе и далее готовить обновленные тексты.
Проблема №1: на нашем GNU/Linux, естественно, отсутствует MS Office, а OpenOffice и его наследники страшно тормозят (особенно если мы привыкли к Vim и др. легким программам).
Проблема №2: очень часто верстка входящих файлов — катастрофическая (отбивка пробелами, форматирование без стилей и т.д.), так что приходится практически переделывать весь документ, чтобы нормально внести изменения.
Проблема №3: формат MS Word непрозрачен, а OpenDocument условно-прозрачен. Другими словами, даже открытый формат невозможно легко читать простыми средствами: нужно разархивировать кучку файлов и парсить XML. А значит, и для контроля версий такие документы непрозрачны.
Что же делать? На помощь приходит юникс-вей в виде простых программок, работающих с простым текстом.
Готово, красивый PDF можно посмотреть и распечатать. Кстати, удобно в процессе редактирования исходника держать PDF открытым, скажем, в Okular. При экспорте из reST в PDF (а это можно делать и автоматически) Okular сразу же обновит содержимое, не сбрасывая открытую страницу. Получается почти моментальный предпросмотр. И там же (в Okular) можно распечатать документ.
Я обычно добавляю еще файл стилей (один и тот же более-менее подходит всем документам, можно расширить под конкретный документ). Стили для rst2pdf пишутся в JSON (см. документацию).
Проблема №1 решена: используются кроссплатформенные, лёгкие, быстрые и ненавязчивые средства.
Проблема №2 решена: кошмарная исходная верстка сразу убивается, вместо нее мы получаем сам текст, который уже без труда можно привести в reST-порядок. При необходимости результат можно довести в LaTeX'е.
Проблема №3 решена: все документы (и стили) полностью прозрачны для VCS и могут быть прочитаны без спецсредств. В точности как программный код. Значит, если что-то изменилось в официальном документе, вы всегда будете иметь читабельные диффы для любых дат. Для входящих можно тоже хранить исходные версии (желательно вывод antiword), чтобы диффать именно их и легко переносить только изменения в правильные reST-файлы.
Недавно комментировал извещение о выходе нового LibreOffice и решил, что следует оформить соображения более связно.
Представим, что мы получили по e-mail документ в формате MS Word, должны его заполнить/поправить и распечатать/переслать дальше. Скорее всего, этот документ нам будут периодически присылать снова и/или нам нужно будет на его основе и далее готовить обновленные тексты.
Проблема №1: на нашем GNU/Linux, естественно, отсутствует MS Office, а OpenOffice и его наследники страшно тормозят (особенно если мы привыкли к Vim и др. легким программам).
Проблема №2: очень часто верстка входящих файлов — катастрофическая (отбивка пробелами, форматирование без стилей и т.д.), так что приходится практически переделывать весь документ, чтобы нормально внести изменения.
Проблема №3: формат MS Word непрозрачен, а OpenDocument условно-прозрачен. Другими словами, даже открытый формат невозможно легко читать простыми средствами: нужно разархивировать кучку файлов и парсить XML. А значит, и для контроля версий такие документы непрозрачны.
Что же делать? На помощь приходит юникс-вей в виде простых программок, работающих с простым текстом.
Инструменты
- Antiword — утилита для извлечения текста из формата MS Word;
- reStructuredText (reST) — очень простой и достаточно мощный язык семантической разметки текста;
- Docutils tools (rst2latex, rst2html, rst2odt, rst2xml) и rst2pdf — утилиты для экспорта текста из reST в распространенные форматы для верстки, веба и печати;
- Бонус: rst2a (онлайн-конвертер с API!)
Workflow
- antiword читает .doc и выводит простой текст;
- редактируем простой текст;
- утилиты rst2* конвертируют текст из reST-разметки в произвольные форматы.
$ antiword смета.doc > смета.txt $ vim смета.txt $ rst2pdf смета.txt -o смета.pdf
Готово, красивый PDF можно посмотреть и распечатать. Кстати, удобно в процессе редактирования исходника держать PDF открытым, скажем, в Okular. При экспорте из reST в PDF (а это можно делать и автоматически) Okular сразу же обновит содержимое, не сбрасывая открытую страницу. Получается почти моментальный предпросмотр. И там же (в Okular) можно распечатать документ.
Я обычно добавляю еще файл стилей (один и тот же более-менее подходит всем документам, можно расширить под конкретный документ). Стили для rst2pdf пишутся в JSON (см. документацию).
Результаты
Проблема №1 решена: используются кроссплатформенные, лёгкие, быстрые и ненавязчивые средства.
Проблема №2 решена: кошмарная исходная верстка сразу убивается, вместо нее мы получаем сам текст, который уже без труда можно привести в reST-порядок. При необходимости результат можно довести в LaTeX'е.
Проблема №3 решена: все документы (и стили) полностью прозрачны для VCS и могут быть прочитаны без спецсредств. В точности как программный код. Значит, если что-то изменилось в официальном документе, вы всегда будете иметь читабельные диффы для любых дат. Для входящих можно тоже хранить исходные версии (желательно вывод antiword), чтобы диффать именно их и легко переносить только изменения в правильные reST-файлы.
Примечания
- Предлагаемый стек утилит заткнет не все дыры. Прелесть юникс-вея в том, что вы можете спокойно заменять компоненты.
- Между прочим, Antiword «is able to convert Word documents to plain text, to PostScript, to PDF and to XML/DocBook», так что в ряде случаев можно даже избежать reST.
- Эта заметка написана на reST и экспортирована через rst2html. ;-)
- UPD: спасибо ingspree за поправку: правильно не ReST, а reST :)