[Из песочницы] Фетиш WYSIWYG или Как правильно скрещивать ужа с ежом
Поводом к появлению этой заметки послужила вполне реальная история. Всё началось с того, что мой хороший знакомый, химик по образованию, роду деятельности и складу ума, обратился ко мне за помощью. Помощь заключалась в подготовке публикации на некую околохимическую тему, с формулами, таблицам, диаграммами и прочими атрибутами Серьёзного Научного Труда (СНТ), причём химия подразумевалась — органической, и, следовательно, формулы — структурными и раскидистыми, а таблицы — километровыми. Публикация была нужна, как водится, вчера, свёрстанная и оформленная по жёстким требованиям неведомой мне организации, с аннотацией, списком литературы о множестве наименований, со ссылками, сносками, цитатами, эпиграфами…
Уяснив стартовые данные, я впал в лёгкое уныние. Больше всего в тот момент мне хотелось сослаться на обстоятельства непреодолимой силы, перегруженность, невменяемость, сезонное обострение ящура — короче говоря, найти любой повод и — на волю, в пампасы! Но сакраментальное «ты ж программист!» и осторожное «буду должен… » уже прозвучали, вздохи химика становились все тяжелее, размеренно падая на и без того узкую тропку к отступлению, химиковы глаза за толстыми стёклами очков давали изрядную фору фирменному взгляду Кота-в-сапогах из «Шрека»…
Пути назад не было. Квест начался.
Химик пришел не с пустыми руками. Он принёс множество листиков с зачем-то уже напечатанным текстом и формулами, тщательно нарисованными шариковой ручкой в специально сделанных пропусках между абзацами. Впрочем, тут же выяснилось, что большая часть СНТ всё ещё пребывает в недрах могучего химикова ума, а листочки — это так, наброски, черновики и вообще — проба пера.
Ситуация вырисовывалась невесёлая. Химик весьма уверенно набирал текст в notepad«е и даже, кажется, знал, как выделить строчку в Word«е курсивом. Я совершенно точно помнил формулы воды, этилового спирта и был убеждён, что лить воду в серную кислоту ни в коем случае нельзя. Или наоборот? Неважно, главное — на этом пересечение наших познаний исчерпывалось. Вопрос вырисовывался один, но глобальный: как? Как организовать работу так, чтобы химик мог излить ещё не рождённый СНТ на бумагу… то есть, в какой-то текстовый формат, а я мог бы разобраться в структуре документа и сверстать его надлежащим образом, вставив в нужные места все упомянутые выше красоты?
Word отпал, когда к концу следующего дня химик прислал первые наброски нашего с ним великого творения, в порядке здоровой инициативы набранные с помощью именно это редактора. По привычке он набирал в нём текст как в блокноте: абзацные отступы, состряпанные из ядрёной смеси пробелов и табуляций, ряды пустых абзацев, долженствующие перенести текст на следующую страницу, нумерованные вручную списки, колонки текста, выровненные все теми же многострадальными пробелами и переносами строк в самых неожиданных местах… Химик блистал! К сожалению, он совсем забыл про поля, и когда я выставил их ширину в требуемые значения, всё это великолепие рассыпалось в совершенно невзрачные и не поддающиеся восстановлению ошмётки. What you see оказалось не совсем what you get, а говоря по правде — совсем не.
Править все присылаемые химиком черновики и наброски — присваивать нужные стили абзацам и заголовкам, делать списки списками, разрывы страниц — разрывами, вычищать ненужные пробелы и т.д. и т.п. — мне совершенно не улыбалось. Кроме того, я абсолютно не представлял (что уж там, я и сейчас пребываю в счастливом неведении) как изобразить в этом самом Word«е хотя бы структурную формулу какого-нибудь бензола, не говоря уже о чём-то посложнее — не рисовать же, в самом деле, картинки?
Решение пришло после короткого гугления: Markdown! Прикинув, что возможности этого простого, как табуретка, языка разметки перекрывают потребности химика по оформлению текстовой части его работы на 99%, я подыскал внятное руководство и переправил его химику с предложением обсудить этот вариант по скайпу. На удивление, химик воспринял идею без особого сопротивления: как потом выяснилось, вольная борьба с Word«ом изрядно поднадоела ему самому.
По обсуждении, план совместной работы над документом сводился к следующему:
- Химик, используя подходящий Markdown-редактор, готовит текстовую часть документа, соблюдая его структуру, вводя разделы, подразделы и т.п.
- Простые формулы вписываются непосредственно в Markdown-разметку, сложные и структурные рисуются от руки, сканы пересылаются мне; место в тексте для них маркируется.
- Данные для таблиц, диаграмм и графиков присылаются мне в сыром виде (как оказалось, это были в основном CSV-файлы); место в тексте для них также маркируется.
- Я подготавливаю сложную вёрстку (титульник, формулы, таблицы, диаграммы и графики, библиографию и т.д.) как компоненты составного документа LaTeX.
- После подготовки и вычитки всех материалов я верстаю их в единый документ LaTeX, добавляю содержание, приложения и т.п.
- Профит!
И работа пошла, пусть поначалу со скрипом и неровно, но пошла! После нескольких дней ошибок, химик на удивление неплохо приноровился к незатейливому синтаксису Markdown, благо, редактор не слишком отличался от его излюбленного блокнота. Для удобства, текст публикации был разбит на несколько md-файлов, по числу основных разделов. Во избежание случайной утраты данных проект был помещён под контроль VCS; правда, мне приходилось рулить проектом сразу на двух машинах: на своём и, в ипостаси альтер-эго химика посредством TeamViewer — на его компьютере.
Предлагая к использованию Markdown, я планировал воспользоваться всеми любимым pandoc«ом и просто-напросто преобразовать md-файлы в исходники LaTeX, но время поджимало, и компоновку итогового документа пришлось начать, не дожидаясь полного завершения работ химиком. И вот тут-то… Оказалось, я здорово недооценил перфекционизм и энтузиазм моего соавтора: просматривая очередной коммит проекта, я заметил массовые и довольно объёмные изменения в md-файлах, которые были давно вычитаны, исправлены, преобразованы в LaTeX и щедро нафаршированы формулами, таблицами и прочими кулинарными ингредиентами. Как выяснилось, в порыве творческого экстаза химик в очередной раз перечитал уже набранные разделы, остался не весьма ими доволен и, ничтоже сумняшеся, тут же устранил недочёты. «Всю ночь возился!» — горделиво заявил он по скайпу в ответ на мои робкие попытки узнать, что же произошло.
Признаюсь, я начал закипать. Вариантов оставалось два: отследить изменения в новообретенных текстах и вручную перенести их в исходники LaTeX или опять расчехлить pandoc, преобразовать оные тексты в LaTeX и, засучив рукава, снова нашпиговать их утраченными красивостями, практически вернувшись к той самой печке, от которой удалось отплясать уже довольно далеко.
Из этих двух вариантов всё более хотелось выбрать третий: пампасы! Тем более, что химик явно недоумевал, почему я не разделяю восторгов по поводу улучшений и украшений, несомненно нашёптанных ему его органико-химической музой в, разумеется, лучшие творческие минуты его жизни, что не оставляло сомнений в том, что муза посетит его ещё не раз и процесс внесения правок и изменений приобретает мрачноватую перспективу стать перманентным и всеобъемлющим.
И вдруг! Покопавшись в пакетах LaTeX, я с удивлением обнаружил среди прочих пакет с многообещающим названием markdown. Ещё не веря в удачу, я начал читать описание… Да! Этот пакет позволял включать Markdown-файлы в документ LaTeX «as is», без сторонних утилит, без дополнительных правок или излишних телодвижений, при этом позволяя использовать в Markdown-разметке конструкции LaTeX!
Теперь мне оставалось только прописать в md-текстах химика включение иллюстраций по месту (в виде tex-разметки), залить эти изменения на его компьютер и строго-настрого запретить ему править или выкидывать «вот эти вот непонятные закорючечки». Остальной — химиков — текст ему позволялось изменять как угодно, в любое время дня и ночи, на пару с музой или без содействия оной. Простая пересборка LaTeX«ом подтягивала в итоговый документ все изменения, никак не отражающиеся на уже проделанной работе. Система контроля версий довершала глубоко эшелонированную линию обороны от возможных деструктивных поползновений.
Публикация была готова не совсем в срок, но до дедлайна уложиться удалось.
Ф-ф-у-у-у-ух.
Повторюсь, это вполне реальная история. Да, есть ещё люди, которые используют Word (или LibreOffice Writer, или AbiWord, или…) как пишущую машинку, не заморачиваясь стилями, параметрами абзацев и тому подобными, совершенно бессмысленными с их точки зрения, штуками. А почему нет? Это же вовсеушипрожужжанный WYSIWYG, они же видят перед собой что-то, вполне себе читаемое. Да, при этом они могут быть вполне успешными профессионалами в своей области. Да, им непросто объяснить суть проблемы, а научить «правильной» вёрстке — непросто вдвойне. И да, порой им приходится готовить публикации…
Надеюсь, мой опыт работы в тандеме подобного толка пригодится ещё кому-то в сходной ситуации, или натолкнёт на нужное решение в какой-то иной. Более подробно ознакомиться с возможностями пакета markdown можно в обзорной статье.
Удачи!