О слайдах для презентаций
Этот пост мог бы быть совсем коротким и состоять из одной ссылки на remarkjs, но я хочу в нём рассказать не только о том, каким инструментом пользуюсь, но и почему, и ещё всякий контекст. Я сам не уверен, для кого этот пост, но подумал, что кому-то он может показаться интересным.
За последние пару лет я научился готовить слайды к выступлениям значительно быстрее, чем у меня получалось раньше. Этот пост — о том, как я это делаю, и почему считаю свой подход более удобным, чем Powerpoint или Keynote.app.
Раньше подготовка колоды из 30-40 слайдов занимала у меня несколько часов мучительного тюнинга стилей, отступов, подгонки разных слайдов друг к другу, чтобы элементы не скакали при перелистывании. Я часто ударяюсь в перфекционизм и мне было сложно позволить себе не исправлять режущие глаз детали.
Если структура презентации ещё не была продумана до конца, я обычно решал, что можно делать всё одновременно: и содержание слайдов, и структуру, и дизайн. Это большая ошибка. Это значило, что в периоды повышенной когнитивной сложности (в наиболее содержательных местах, в которых надо принять ключевые решения о структуре доклада) соблазн переключиться на рутинные задачи (подбор оптимального размера шрифта и отступов) оказывался значительным и непреодолимым.
При этом у меня всегда было оправдание: зачем делать одну и ту же работу дважды? Я не хочу писать черновик, а потом всё копипастить из черновика в слайды! Я сразу сяду и сделаю всё начисто и хорошо.
Вероятно, в мире есть люди-неперфекционисты, умнее и прагматичнее, чем я, у которых такой проблемы нет. (Зависть).
Anyway. Изменить среду так, чтобы она помогала, а не отвлекала, проще, чем изменить себя. Я стал искать более подходящий инструмент, с которым моё внимание расходовалось бы на важные дела, а не на допиливание мелочей.
WYSIWYG или не WYSIWYG
Если вы умеете писать код или хотя бы не боитесь простых языков разметки, то в подобных задачах у вас есть два возможных решения:
- WYSIWYG — визуальные редакторы, в которых вы делаете всё мышкой (те же Powerpoint и Keynote.app).
- Текстовая разметка, которая компилируется в итоговый документ.
Эта дилемма существует не только для презентаций. Аналогичный выбор у вас есть, если вы пишете текстовые документы, выбираете таск-трекер, ведёте заметки или записываете расходы.
Какой вариант лучше?
В идеальном мире (в котором у меня бы было неограниченное время на освоение всех инструментов, все люди в моих проектах не боялись их осваивать, и инструменты обоих видов были бы одинаково хорошо проработаны) я бы всегда решал эту дилемму в пользу второго варианта.
Текстовую разметку проще редактировать, проще конвертировать в другие форматы, она прозрачнее и легковеснее.
К сожалению, в реальном мире у подхода «только опенсорс и консольные инструменты, все данные в текстовом формате» есть множество минусов. В частности:
- Затраты на освоение. Например, не знаю LaTeX (язык для вёрстки сложных документов), и не могу позволить себе выделить несколько дней, чтобы начать в нём ориентироваться.
- Сложность в командной работе. Даже если бы я знал LaTeX и Beamer (расширение LaTeX для презентаций), другие люди в моих проектах вероятно отказались бы изучать его, чтобы исправлять мои слайды.
- Эстетика. По умолчанию Beamer выглядит довольно вырвиглазно; это в принципе исправимо, но, насколько я понимаю, исправление само по себе требует немало усилий.
В общем, прагматичные решения требуют компромиссов. Я не считаю, что всегда надо брать unix-way, command-line, programmer-friendly, open-source, self-hosted тулзы.
Конкретно в случае со слайдами, к счастью, получилось найти хороший баланс.
Чем хорош gnab/remark
Я не хочу пересказывать официальную документацию, так что сходите на remarkjs.com и пролистайте заглавную презентацию там, чтобы понять, как это работает. (Вкратце: вы описываете слайды в markdown-подобном синтаксисе, заворачиваете их в простой html-файл, и загружаете его в браузере).
Ключевые плюсы для меня:
- Я пишу слайды в простой текстовой разметке и они получаются достаточно приятными на вид.
- У меня есть полный контроль над внешним видом слайдов, и я могу применить стили одновременно ко всем страницам презентации или даже к множеству существующих презентаций с помощью кастомного css.
- Remark достаточно простой, чтобы другие тренеры из команды Кочерги тоже могли им пользоваться и не страдать.
- И главное — remark не отвлекает меня от написания содержательной части; по сути, я могу взять черновой план выступления и превратить его в слайды, не выходя из текстового редактора.
Суммарно на подготовку одной колоды из 30-40 слайдов у меня теперь уходит 15-30 минут.
В некоторых случаях мне пришлось немного допилить remark для своего удобства:
- У меня есть стандартный css-файл, который я подгружаю во все слайды; для слайдов, которые мы показываем на воркшопах, он выглядит так: https://gist.github.com/berekuk/ea5dadb528fc7a438d93d25158266ffb. В нём есть стандартные шрифты и несколько кастомных css-классов. Наиболее важный класс в этом файле —
.center-image-wide
, он позволяет подогнать картинку по размеру слайда, вместо того чтобы пытаться её перемасштабировать заранее. - Разметку для слайдов можно встроить прямо в html-файл, а можно хранить снаружи в отдельном md-файле. Для воркшопных слайдов мы используем второй способ. Чтобы не копировать одинаковый html-файл для каждой отдельной презентации, я написал простой скрипт, который копирует одинаковый index.html во все папки со слайдами.
Но суммарно оба эти пункта не заняли у меня много времени.
remark vs remark
Разделение содержания и представления — это хорошо, и на этом бы этот пост и закончился, но не так давно выяснилось, что у меня есть запросы, которые remark не решает.
Дело в том, что на воркшопах мы не только показываем слайды, но и раздаём участникам рабочие тетради, материал которых в значительной мере пересекаются со слайдами. Синхронизировать слайды и тетради вручную — довольно муторное занятие.
Так что я начал думать о системе, которая из единых исходников генерировала бы документы в разных форматах.
Решение, которое я придума (но ещё не реализовал), включает в себя другую js-библиотеку... которая тоже называется remark. Да, это один из самых кошмарных примеров коллизий имён, который я когда-либо встречал.
В этом посте выше я писал о gnab/remark, инструменте для создания презентаций.
Но ещё есть remarkjs/remark, парсер маркдауна и экосистема для плагинов для парсинга маркдауна.
remarkjs/remark предоставляет только возможность из разметки получить AST (синтаксическое дерево). Это не полноценный инструмент для создания презентаций, и собственно презентационный слой придётся собирать самому из других библиотек (я смотрю в сторону spectacle). Но зато из AST можно собрать много что ещё, кроме слайдов (документы для печати, PDF для рассылок), и remarkjs/remark позволяет добавлять расширения синтаксиса.
В разметке могут быть макросы, упрощающие типовые действия (например, генерирующие разлиновку строк для упражнений в рабочих тетрадях). Или указатели «в этом месте надо завести таймер на 5 минут на время упражнения». Или возможность пометить какой-то блок как «только для слайдов» или «только для тетрадей».
У меня уже есть proof-of-concept для генерации markdown -> docx, который оказался не очень сложным, так что и остальное должно сойтись.
PS. Существует некий неназванный закон, по которому чем проще задача, тем большее число людей переизобретут для её решения велосипед. Написать свой генератор статических сайтов, например, очень легко, и поэтому их тысячи. Написать свой чат тоже несложно, и их десятки.
От того, чтобы написать свой таск-трекер, я пока что сдержался. А вот от написания движка для презентаций, похоже, не удержусь.
Впрочем, для обычных презентаций я собираюсь продолжать использовать gnab/remark в любом случае.