Фетиш 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 можно в обзорной статье.

Удачи!

Источник