Если вы работаете в крупной компании, где утвержден корпоративный шаблон презентаций, скорее всего, он выполнен в PowerPoint или Keynote. Цвета, шрифты, логотипы, фоновые изображения описаны в брендбуке. Но многие инженерные доклады, лекции, отчеты по научным работам удобнее верстать в LaTeX.
Работая в YADRO, я много выступаю как на внешних конференциях, так и на собственных мероприятиях компании. В какой-то момент я поняла, что мне удобнее делать презентации в LaTex и взяла все в свои руки: разработала стилевой файл для LaTeX на базе корпоративного брендбука и pptx-шаблона. Шаблон оказался очень востребованным, и я решила поделиться опытом и наработками с сообществом.
Главная цель статьи — не дать готовый «черный ящик», а объяснить, по какому принципу устроен файл YourPres.cls, чтобы вы могли адаптировать его под корпоративный стиль или настроить его на свой вкус для личного использования. Весь описанный шаблон с демонстрацией целиком выложен на GitHub, поэтому его можно сразу попробовать в деле.
Предполагается, что у читателя есть базовое представление о LaTeX и Beamer. Если это не так, нестрашно: вы все равно можете клонировать готовый репозиторий и адаптировать его под свои цвета и шрифты по инструкции в тексте с помощью стилевого файла
YourPres.cls. В конце текста я также привела список литературы для дальнейшего погружения в тему.
LaTeX — это язык верстки и система подготовки документов на основе набора макросов TeX. Вы пишете текст своей статьи или презентации в plain-файле с разметкой, а затем компилируете его в PDF. В отличие от Word и PowerPoint верстка — шрифты, отступы, цвета, расположение элементов — задается отдельно либо встроенными командами, либо подключаемыми классами и стилями.
LaTex сильно упрощает набор сложных «многоэтажных» формул с выделением важных частей цветами, рамками, подчеркиваниями (кстати, в статьях на Хабре тоже можно вставлять LaTeX-формулы!), подгрузку листингов кода с подсветкой синтаксиса, вставку псевдокода алгоритмов. Таблицы и рисунки нумеруются автоматически, как и оглавление. А чтобы преобразовать статью в презентацию и обратно, достаточно просто заменить стилевой файл. Одним словом — праздник. Еще и версионировать удобно, потому что стиль и презентация — текстовые файлы. Вы можете работать с презентацией как с кодом: фиксировать изменения, откатывать неудачные правки и т.д.
При таком подходе текст презентации и стиль — это два разных файла, что позволяет вам набирать только текст (tex-файл), а корпоративный стиль применять автоматически при компиляции. Нет шансов случайно использовать не тот шрифт, не тот цвет, не те отступы, не тот стиль таблицы или нечаянно изменить макет страницы — ее поля, положение заголовков, отступы. Стиль может обновляться, но вам достаточно просто подтянуть из репозитория обновленный стилевой файл и один раз нажать на кнопку компиляции — перекомпилированный PDF будет соответствовать обновленному стилю. Вам не нужно ничего править в тексте презентации! Если у вас уже есть презентация или статья в LaTeX, то достаточно перекомпилировать ее с корпоративным стилевым файлом — и вуаля!
Как обычно, дьявол кроется в мелочах: в том, чтобы из корпоративного брендбука и pptx-шаблона сделать этот самый стилевой файл для LaTeX. По собственному опыту могу сказать, что это требует времени, очень тонкой настройки шаблона и даже замеров отступов в pptx линеечкой. Три года назад я сделала такой файл для себя, скопировав корпоративный стиль нашей компании в LaTeX-класс. Потом поделилась с коллегами — и даже забыла об этом.
Недавно я узнала, что мой шаблон активно используют для докладов и целых образовательных курсов, дописывают в него свои ветки, читают лекции. В общем, он явно живет свою лучшую жизнь! «Класс, что же вы молчали, я бы раньше восхитилась!» — сказала я активистам, на что коллеги резонно заметили: «Ну ты же не пишешь Линусу Торвальдсу, что используешь Linux» (с). И правда! Хотя, наверное, стоило бы, прости нас, Линус, если что не так.
Даже не ожидала, что, решая свою проблему, я сделала такую востребованную вещицу, перерыв много документации. Поэтому решила поделиться историей и показать на примере реально работающего шаблона и файла YourPres.cls в репозитории, как, опираясь на мои наработки, с минимальными модификациями сделать стилевик для презентаций на свой вкус или корпоративный дизайн, не погружаясь при этом в нюансы настроек Beamer-стилей и переопределения LaTeX-команд.
Конкретные цвета, шрифты и логотипы в моем примере заменены на generic-значения в фиолетовых тонах, потому что я их люблю (простим мне это), но архитектура и приемы полностью рабочие. Вы сможете легко модифицировать шаблон для своего дизайна, просто подставив свои шрифты, палитры, иконки, логотипы, значения отступов и многое другое.
Структура LaTeX-шаблона
Репозиторий с примером имеет следующую структуру:
project/ YourPres.cls // сам класс (774 строки с комментариями) YourStyle/ // визуальные ресурсы: logo.png // * логотип; titlepage.png // * фон титульного слайда; finalslide.png // * фон финального слайда; icons/ // * 33 иконки Material Design Icons (512×512, белый контур) fonts/ // папка с TTF-шрифтами (Inter, JetBrains Mono, Open Sans) img/ // изображения для демо-презентации code/ // примеры кода для демо-презентации video/ // PNG-кадры для анимаций в демо-презентации Example.tex // текст демо-презентации Example.pdf // скомпилированная демо-презентация
Весь LaTeX-стиль для Beamer реализован в файле YourPres.cls. Это LaTeX-класс: в tex-файле с презентацией достаточно указать \documentclass{YourPres} — и стиль подтянется. Не нужно устанавливать файлы в TeX-дистрибутив или править texmf. Можно добавить шаблон как подмодуль в любой проект и получать обновления стиля автоматически.
Давайте разберемся, из чего состоит YourPres.cls и, главное, что в нем нужно поменять, чтобы переделать файл под свой дизайн.
Инструментарий: XeLaTeX и пакеты
Первый шаг при создании любого LaTeX-класса — сообщить системе, что это .cls, а не пакет, и зарегистрировать его имя и версию:
\NeedsTeXFormat{LaTeX2e} % если LaTeX слишком старый, компиляция остановится с ошибкой \ProvidesClass{YourPres}[08/08/2026 V.2.0.0]
\ProvidesClass{YourPres}[...] задает имя класса, дату и номер версии. Дата позволяет LaTeX проверять, не устарела ли версия класса относительно подключенных пакетов.
Класс загружается поверх Beamer и требует XeLaTeX:
\LoadClass[hyperref=xetex, final,8pt, width=33.867,height=19.05,scale=1,aspectratio=169]{beamer} \setbeamersize{text margin left=0.75cm, text margin right=0.75cm}
Параметры \LoadClass:
hyperref=xetex — гиперссылки через драйвер XeTeX (без этого параметра ссылки могут не работать);
final — финальный режим (не draft — здесь присутствуют все рисунки и элементы);
8pt — базовый размер шрифта (Beamer по умолчанию использует более крупные шрифты, 8pt для слайдов 16:9 дает комфортное соотношение);
width/height — ширина и высота слайда в мм (33.867×19.05 мм соответствует пропорции 16:9, 13"×7.5", при scale=1);
aspectratio=169 — явно указывает Beamer, что слайд широкоформатный (классический widescreen);
scale=1 — масштаб 1:1 (можно было бы 0.5 для «сжатого» просмотра, но не нужно).
Почему не pdfLaTeX? XeLaTeX умеет напрямую загружать .otf/.ttf-шрифты из указанной папки (Path=fonts/) без системной установки. Единственное ограничение: ваш файл презентации должен быть строго в кодировке UTF-8, иначе шрифты не подтянутся.
Далее задаем горизонтальные отступы текста от краев слайда:
\setbeamersize{text margin left=0.75cm, text margin right=0.75cm}
Меняйте эти значения, если нужно сдвинуть текст к краям или от краев.
Далее подключаются все необходимые пакеты:
Пакет | Назначение |
|---|---|
| Подключение TTF/OTF-шрифтов по пути |
| Для копирования кириллицы из PDF |
| Русский/английский язык (замена babel для XeLaTeX) |
| Unicode-подстановки для XeTeX |
| Цветовая палитра |
| Круглые фото авторов (path picture) |
| Подсветка кода |
| Анимация из последовательности PNG-кадров ( |
| Стилизация таблиц с автораскраской строк и колонками |
| Стандартная математика |
| Псевдокод алгоритмов |
| Научная нотация чисел |
| Красивый математический шрифт для операторов |
| Пиктограммы — буллиты, крестики, галочки |
| Вставка изображений ( |
| Вставка таблиц и объединение ячеек в них по строкам/столбцам |
| Размещение плавающих рисунков и таблиц |
| Подписи к рисункам/таблицам |
| Преобразование регистра ( |
| Условные операторы внутри стилевого файла |
| Для изменения чужих макросов |
Отключаем увеличенные пробелы после точки при помощи \frenchspacing и разрешаем использовать в гиперссылках unicode и цвет, создавать закладки:
\hypersetup{unicode=true, colorlinks=true, bookmarks=true}
Цветовая палитра
В любом корпоративном шаблоне есть набор «фирменных» цветов. В YourPres.cls палитра в десятом разделе файла состоит из одного базового цвета и серии производных, подобранных в единой гамме:
% YourBase — основной брендовый цвет (темно-фиолетовый). % Используется: заголовки фреймов, шапка таблиц, фон титула, блоки, буллиты. \definecolor{YourBase}{HTML}{5B2C8C} % YourSectionShaded — цвет неактивных разделов в содержании (светло-фиолетовый). \definecolor{YourSectionShaded}{HTML}{B59AD9} % YourBlock — фон блоков и четных строк таблиц (светлая лаванда). \definecolor{YourBlock}{HTML}{F3EEF7} % YourBad — цвет «плохо» (для статусов, ошибок). \definecolor{YourBad}{HTML}{C41E3A} % YourNeutral — цвет «нейтрально» (янтарный). \definecolor{YourNeutral}{HTML}{CF9900} % YourGood — цвет «хорошо» (зеленый). \definecolor{YourGood}{HTML}{008F6B} % YourAccent — акцентный цвет (маджента-фиолетовый). \definecolor{YourAccent}{HTML}{B324D1} % YourParam ... YourParam5 — параметры графиков (серия фиолетовых оттенков). \definecolor{YourParam}{HTML}{8E44AD} \definecolor{YourParam2}{HTML}{75389C} \definecolor{YourParam3}{HTML}{A569BD} \definecolor{YourParam4}{HTML}{6C3483} \definecolor{YourParam5}{HTML}{FF794C}
Выделите HEX-код (например, 5B2C8C) и замените на корпоративный цвет. Если делаете просто стиль для себя, то для подбора палитры можно воспользоваться ресурсом. Полезно добавлять комментарии с назначением — это шпаргалка для коллег и самодокументирование.
На основе палитры настраиваются Beamer-темы:
% Заголовок блока: белый текст на YourBase \setbeamercolor{block title}{fg=white,bg=YourBase} % Тело блока: фон YourBlock \setbeamercolor{block body}{bg=YourBlock} % Заголовок фрейма: цвет YourBase \setbeamercolor{frametitle}{fg=YourBase} % Подписи к рисункам: цвет YourFigureCaption \setbeamercolor{caption}{fg=YourFigureCaption} % Цвета буллитов и нумераторов в списках % По умолчанию Beamer использует синий — перекрашиваем в YourBase (фиолетовый) % Меняйте YourBase на другой цвет (например YourParam), чтобы сменить оттенок \setbeamercolor{itemize item}{fg=YourBase} \setbeamercolor{itemize subitem}{fg=YourBase} \setbeamercolor{itemize subsubitem}{fg=YourBase} \setbeamercolor{enumerate item}{fg=YourBase} \setbeamercolor{enumerate subitem}{fg=YourBase} \setbeamercolor{enumerate subsubitem}{fg=YourBase}
Принцип простой: изменили HEX-код в определении цвета YourBase — перекрасили сразу frametitle, block title, шапку таблицы, маркеры списков, буллиты и фон титульного слайда. Изменили цвет YourBlock — сменился фон подложки у блоков и т.д.
Шрифты: локальные TTF через Path=fonts/
Корпоративные шрифты обычно поставляются как OTF- или TTF-файлы. Я кладу их в папку fonts/ в репозитории и подключаю через параметр Path=. Поэтому шрифты не нужно устанавливать в систему: при компиляции LaTeX подхватит их прямо из репозитория. Новый разработчик клонирует проект и сразу может его скомпилировать — не нужно разыскивать корпоративные шрифты по всей компании.
В качестве примера в папке fonts/ лежат Inter (Regular, Bold, Italic, BoldItalic), JetBrainsMono (Regular, Bold), OpenSans (Regular, Bold). Для смены шрифтов во всей презентации достаточно добавить новые шрифты в эту папку и прописать имена новых файлов в блоке подключения:
% Глобальные настройки fontspec \defaultfontfeatures{Ligatures={TeX},Mapping=tex-text} % Основной шрифт — Inter (Regular / Bold / Italic / BoldItalic) \setmainfont[Path=fonts/, BoldFont=Inter-Bold.ttf, ItalicFont=Inter-Italic.ttf, BoldItalicFont=Inter-BoldItalic.ttf]{Inter-Regular.ttf} \setromanfont[Path=fonts/, ...]{Inter-Regular.ttf} \setsansfont[Path=fonts/, ...]{Inter-Regular.ttf} % Моноширинный — JetBrains Mono \setmonofont[Path=fonts/, BoldFont=JetBrainsMono-Bold.ttf]{JetBrainsMono-Regular.ttf}
Для кириллицы polyglossia требует явного указания шрифтов:
% \cyrillicfont — обязательная команда polyglossia для кириллического основного шрифта \newfontfamily{\cyrillicfont}[Path=fonts/, ...]{Inter-Regular.ttf} % \cyrillicfonttt — кириллический моноширинный шрифт \newfontfamily{\cyrillicfonttt}[Path=fonts/, ...]{JetBrainsMono-Regular.ttf} % \cyrillicfontsf — кириллический гротеск (sans-serif) \newfontfamily{\cyrillicfontsf}[Path=fonts/, ...]{Inter-Regular.ttf} % \cyrillicfontrm — кириллический римский шрифт \newfontfamily{\cyrillicfontrm}[Path=fonts/, ...]{Inter-Regular.ttf}
Каркас слайда: шапка (headline), подвал (footline), заголовок (frametitle)
Навигационные кнопки (section navigation) Beamer глобально отключаем командой \beamertemplatenavigationsymbolsempty. Оставляем в шапке только логотип в правом верхнем углу:
% Верхний колонтитул: логотип справа вверху % \vspace*{0.5cm} — отступ сверху от логотипа % \vspace*{-0.85cm} — компенсация, чтобы основной текст не съехал вниз \setbeamertemplate{headline}{\vspace*{0.5cm}\hspace*{.5cm}\scriptsize{ \hspace*{50pt} \hfill \includegraphics[width=0.95cm]{YourStyle/logo.png}\hspace*{.7cm}}\vspace*{-0.85cm}}
Меняйте 0.5cm (отступ сверху), 0.95cm (ширина логотипа) и -0.85cm (компенсация), чтобы подогнать положение логотипа под свой макет.
В подвале оставляем только номер текущего слайда, обернутый в цветной прямоугольник цвета YourBlock:
% Нижний колонтитул: номер страницы в цветном боксе справа внизу % \fcolorbox{YourBlock}{YourBlock}{...} — рамка и заливка одним цветом \setbeamertemplate{footline}{\hspace*{.5cm}\scriptsize{ \hspace*{50pt} \hfill\fcolorbox{YourBlock}{YourBlock}{\hspace*{.25cm}\insertframenumber\hspace*{.25cm}}\hspace*{.7cm}}}
Определяем стиль заголовков и подзаголовков слайдов:
\defbeamertemplate*{frametitle}{my theme} {% % Если подзаголовок не задан явно, используем название текущего раздела \ifx\insertframesubtitle\empty \let\insertframesubtitle\secname \fi \begin{beamercolorbox}{frame title}% % Если подзаголовок пустой — показываем только заголовок \ifx\insertframesubtitle\@empty% % ОТСТУП СВЕРХУ, когда есть только заголовок % Увеличьте до 0.45cm, чтобы опустить заголовок ниже \vspace*{0.45cm}\\ \insertframetitle \else% % ОТСТУП СВЕРХУ, когда есть и заголовок, и подзаголовок % Увеличьте до 0.35cm, чтобы опустить всю группу ниже \vspace*{0.35cm}\\ % Печатаем подзаголовок (название раздела) — маленьким шрифтом, заглавными \usebeamercolor[fg]{framesubtitle}\usebeamerfont{framesubtitle} \hspace*{0.03cm}\MakeTextUppercase{\insertframesubtitle}\vspace*{-0.1cm}\\ % Печатаем заголовок фрейма — крупно \usebeamercolor[fg]{frametitle}\usebeamerfont{frametitle}\insertframetitle \fi % Отступ снизу после заголовка перед содержимым % Увеличьте до 0.25cm, чтобы добавить воздуха между заголовком и текстом \vspace*{0.25cm} \end{beamercolorbox}% }
Подзаголовок (subtitle) автоматически переводится в верхний регистр (\MakeTextUppercase), поэтому в tex-файле его можно писать в любом регистре. Если subtitle не передан явно, автоматически подставляется название секции (\secname). Это экономит время и делает навигацию единообразной. Отступы сверху вынесены в отдельные \vspace*, их легко менять под свой макет.
Полноэкранные изображения, титульный и финальный слайды
Чтобы показывать в презентации полноэкранные изображения без колонтитулов и заголовков на слайде, определим команду:
\newcommand{\FullSlideImage}[1] { { \usebackgroundtemplate{\includegraphics[width=\paperwidth]{#1}} \setbeamertemplate{footline}{} \setbeamertemplate{headline}{} \setbeamertemplate{frametitle}{}{} \begin{frame}{} \end{frame} } }
Теперь слайд с полноэкранным изображением img/diagram.png можно создать, просто написав \FullSlideImage{img/diagram.png}.
Для генерации финального слайда с полноэкранным фоновым изображением YourStyle/finalslide.png используйте команду \Yourfinalslide. Не забудьте заменить фон финального слайда в папке YourStyle на свой.
На титульный слайд поместим полноэкранное фоновое изображение YourStyle/titlepage.png. Также замените его в папке YourStyle на фон из вашего дизайна, и поверх него выведем название презентации и имя автора:
\newcommand{\Yourtitlepage}{ { \usebackgroundtemplate{ \includegraphics[width=\paperwidth,height=\paperheight]{YourStyle/titlepage.png} } \setbeamertemplate{footline}{} \setbeamertemplate{headline}{} \setbeamertemplate{frametitle}{}{} \begin{frame} \hspace*{1.5cm} \begin{minipage}[h]{0.77\linewidth} \vspace*{5cm} {\color{white} {\Huge\sffamily{\bfseries\inserttitle} } \\ \vskip1pt \insertauthor } \end{minipage} \end{frame} } }
Значения \vspace*{5cm} (отступ сверху) и \hspace*{1.5cm} (отступ слева), а также шрифт, используемый для названия и автора, можно менять под свой макет.
Например, напишем ультракороткую презентацию из одного титульного слайда:
\documentclass{YourPres} % XeLaTeX, UTF-8 \title{Оптимизация расчетов на GPU} \author{Денис Денисов} \begin{document} \Yourtitlepage \end{document}
Сохраним этот tex-файл и скомпилируем. Появится pdf-файл из одной страницы такого вида:

Слайд с информацией об авторе
В классе определена команда \roundpic, которая делает круглую обрезку фотографии с помощью TikZ:
\newcommand{\roundpic}[2] { \tikz\node [circle, minimum width = #1, path picture = { \node [anchor=center] at (path picture bounding box.center) { \includegraphics[width=#1]{#2}}; }] {};}
Эта команда используется в \bioTune, которая размещает фото автора и четыре пункта с информацией о нем в блоках с регулируемыми пропорциями:
% \bioTune{photo}{name}{title}{fact1}{fact2}{photo_width}{text_width} % — базовая команда для размещения фото и текста про автора. % Аргументы 6 и 7 регулируют соотношение ширины фото и текста. % Размер круглой обрезки фото задается множителем 0.65\linewidth внутри % minipage шириной #6\linewidth. Меняйте 0.65 на большее (например 0.85), % чтобы кружок был крупнее, или на меньшее (0.5), чтобы он был мельче. \newcommand{\bioTune}[7] { \mbox{ }\hfill \begin{minipage}[h]{#6\linewidth} \hfill\roundpic{0.65\linewidth}{#1}\hfill \end{minipage}\hspace*{0.5cm} \begin{minipage}[h]{#7\linewidth} {\color{white}{\huge{\textbf{#2}}}\\ #3\\ \vskip2pt \begin{itemize} \item #4 \item #5 \end{itemize} } \end{minipage} \hfill\mbox{ } }
У \bioTune есть две обертки с пропорциями для случая одного автора и двух:
% Один автор: фото 25% ширины, текст 42% \newcommand{\bio}[5]{\bioTune{#1}{#2}{#3}{#4}{#5}{0.25}{0.42}} % Пара авторов: фото 16% ширины, текст 62% \newcommand{\bioPair}[5]{\bioTune{#1}{#2}{#3}{#4}{#5}{0.16}{0.62}}
Можно редактировать пропорции в них, а также добавлять больше авторов.
Добавим команды для создания слайдов с информацией об авторах с использованием этих оберток:
\newcommand{\SingleAuthorPage}[5] { { % Фон страницы — YourBase (темно-фиолетовый) \setbeamercolor{background canvas}{bg=YourBase} % Убираем колонтитулы \setbeamertemplate{footline}{} \setbeamertemplate{headline}{} \setbeamertemplate{frametitle}{}{} % Белые буллиты \setbeamertemplate{itemize item}{\color{white}$\bullet$} \setbeamercolor{itemize/enumerate body}{fg=white} \begin{frame}\vskip0.75cm \bio{#1}{#2}{#3}{#4}{#5} \end{frame} } } \newcommand{\PairCoAuthorsPage}[2] { { \setbeamercolor{background canvas}{bg=YourBase} \setbeamertemplate{footline}{} \setbeamertemplate{headline}{} \setbeamertemplate{frametitle}{}{} \setbeamertemplate{itemize item}{\color{white}$\bullet$} \setbeamercolor{itemize/enumerate body}{fg=white} \begin{frame}\vskip0.75cm #1\\ \vskip1cm #2 \end{frame} } }
В качестве примера добавим такой слайд к нашей ультракороткой презентации из предыдущего пункта:
\SingleAuthorPage{img/author.png}{Денис Денисов} {Инженер-исследователь, Компания Н} {Опыт в HPC — 8 лет} {Автор 10+ публикаций}
После компиляции в pdf-файле появится вторая страница:

Примеры для двух авторов представлены в демо-презентации. Для изменения вида таких страниц отредактируйте в командах выше значения отступов, цветов и т.д.
Секционные слайды — автосодержание
Одна из самых удобных фич Beamer — \AtBeginSection. Я использую ее, чтобы при каждом вызове \section{Название} автоматически вставлялся слайд с оглавлением, где выделен текущий раздел. В примере для этого я использовала цепочку стрелок — семь $\blacktriangleright$ слева от названия, а также цвет и жирное начертание шрифта, «затенив» остальные разделы оглавления с помощью полупрозрачного YourSectionShaded:
% Патч: убираем \vfill в содержании, заменяем на \vspace{0.6cm}, % чтобы секции не разъезжались по всей высоте. \patchcmd{\beamer@sectionintoc} {\vfill} {\vspace{0.6cm}} {} {} \AtBeginSection{ { % Темно-фиолетовый фон всего слайда \setbeamercolor{background canvas}{bg=YourBase} % Убираем колонтитулы \setbeamertemplate{footline}{} \setbeamertemplate{headline}{} \setbeamertemplate{frametitle}{}{} % Шрифт активного раздела — крупный, жирный \setbeamerfont{section in toc}{size=\Large, series=\bfseries} % Шрифт неактивных разделов — крупный, обычный \setbeamerfont{section in toc shaded}{size=\Large, series=\mdseries} % Активный раздел — белый \setbeamercolor{section in toc}{fg=alerted text.fg, fg=white} % Неактивные разделы — полупрозрачный фон + цвет YourSectionShaded \setbeamercolor{section in toc shaded}{bg=YourSectionShaded!20, fg=YourSectionShaded} % Шаблон неактивного раздела — просто название \setbeamertemplate{section in toc shaded}{\inserttocsection} % Шаблон активного раздела — цепочка стрелок от левого края \setbeamertemplate{section in toc}{\hspace{-2.35cm}\makebox[2.35cm][l]{\color{white}$\blacktriangleright$$\blacktriangleright$$\blacktriangleright$$\blacktriangleright$$\blacktriangleright$$\blacktriangleright$$\blacktriangleright$}\inserttocsection} \begin{frame} \vfill \hspace*{1.6cm}\begin{minipage}[h]{0.75\linewidth}\linespread{1.6} \tableofcontents[currentsection] \end{minipage} \vfill \end{frame} } }
Автоматически сгенерированные в начале секций оглавления есть и в демо-презентации:

Вы можете заменить цепочку стрелок в \setbeamertemplate{section in toc}{...} на подчеркивание, любые другие символы либо убрать совсем, если того требует ваш брендбук.
Подсветка кода (listings)
Настройки listings подгоняются под цветовую палитру:
\lstset{ basicstyle=\small\ttfamily, % основной шрифт кода commentstyle=\color{YourGood}, % комментарии — зеленый keywordstyle=\color{YourBase}, % ключевые слова — основной цвет basicstyle=\Yourcode, % используется \Yourcode (\small\ttfamily) numbers=left, % нумерация строк слева xleftmargin=2em, % отступ слева под номера frame=single, % рамка вокруг листинга framexleftmargin=1.5em, % отступ рамки слева numberstyle=\tiny\color{YourFigureCaption}, % стиль номеров строк stepnumber=1, % нумеровать каждую строку numbersep=5pt, % отступ номера от кода backgroundcolor=\color{YourBlock}, % фон — как у Beamer-блоков rulecolor=\color{YourBlock}, % рамка сливается с фоном stringstyle=\color{YourBad}, % строки — красный emphstyle=\color{YourAccent}, % выделенные функции — акцентный showspaces=false, % не показывать пробелы showstringspaces=false, % не показывать пробелы в строках showtabs=false, % не показывать табуляцию tabsize=2, % размер табуляции = 2 пробела captionpos=t, % подпись сверху breaklines=true, % перенос длинных строк breakatwhitespace=false, % переносить в любом месте (не только по пробелу) escapeinside={\%*}{*)} % экранирование в LaTeX внутри кода }
Все цвета (YourGood, YourBase, YourBlock, YourBad, YourAccent) можно заменить на свои — подсветка перестроится автоматически.
Можно определять свои стили для диалектов. Например, в классе определен стиль CUDA для языка C++ с подсветкой CUDA-специфичных функций:
\lstdefinestyle{CUDA}{language=C++, emph={ cudaMalloc, cudaFree, __global__, __shared__, __device__, __host__, __syncthreads, __umul24, } }
Использование:
\begin{lstlisting}[language=C++, style=CUDA] // ваш код \end{lstlisting}
Можно подгружать код прямо из файлов, указывать нужные номера строк и т.д. Например, как в демо-презентации:
\lstinputlisting[language=Python, linerange={2-4,6-13,32-35},title=Вставка из example.py]{code/example.py}
В итоге в презентации все листинги стилизованы и имеют автоподсветку кода:

Таблицы с автораскраской
Таблицы — частая боль в LaTeX. Я сделала так, чтобы строки окрашивались автоматически с чередованием белого и цвета YourBlock. А шапка — всегда на YourBase-фоне с белым текстом:
% Шапка: фон YourBase, белый жирный текст \def \YourTableHeadRow {\rowcolor{YourBase}\rowstyle{\bfseries\color{white}}} % Авточередование цветов строк \newcommand{\Yourtable}[1][oddheadrows]{ \ifthenelse{\equal{evenheadrows}{#1}} {\rowcolors{1}{}{YourBlock}} {\rowcolors{1}{YourBlock}{}} \renewcommand{\arraystretch}{1.5} }
Для автостилизации таблиц необходимо перед окружением таблицы использовать команду Yourtable. Если шапка таблицы состоит из четного числа строк, то \Yourtable[evenheadrows]. Перед каждой строкой шапки нужно использовать команду YourTableHeadRow.
Есть нюанс: \rowcolor применяется ко всем столбцам строки. Если в шапке есть объединенные ячейки или мультиряд, нужно уметь «сбрасывать» стиль. Для этого определены два специальных типа колонок:
% = сбрасывает \rowstyle (первый столбец) \newcolumntype{=}{>{\gdef\@rowstyle{}}} % + применяет \rowstyle (остальные столбцы) \newcolumntype{+}{>{\@rowstyle}}
Как это работает:
=ставится в преамбуле таблицы перед типом первого столбца — это сбрасывает стиль предыдущей строки;+ставится в преамбуле таблицы перед типом каждого следующего столбца — это вставляет сохраненный\@rowstyle, который был установлен через\rowstyleвнутри\YourTableHeadRow.
Для примера наберем самую простую табличку:
\Yourtable \begin{tabular}{=c|+c|+c|+c} \YourTableHeadRow Заголовок 1 & Заголовок 2 & Заголовок 3 & Заголовок 4 \\ данные 1 & данные 2 & данные 3 & данные 4 \\ данные 5 & данные 6 & данные 7 & данные 8 \\ \end{tabular}
На слайде она будет выглядеть так:

Дополнительно в классе настроены:
% Цвет линий-разделителей в таблицах — белый % Так как строки цветные, линии должны быть не видны \arrayrulecolor{white} % Толщина линий \setlength{\arrayrulewidth}{0.5pt} % Отступ текста от краев ячейки \setlength{\tabcolsep}{0.75em}
Цвет, толщину линий и размер отступов смело меняйте на свои.
Иконки, блоки, карточки
Иконки собраны в папке YourStyle/icons/. В текущем наборе 33 иконки в стиле «белый контур на прозрачном фоне» (512×512 px, PNG). Они взяты из Material Design Icons (MDI) — свободной библиотеки под лицензией Apache 2.0. Подмените их на иконки из вашего дизайна или выберите иконки на свой вкус с этого же или других бесплатных ресурсов:
IconFinder — iconfinder.com (фильтр Free);
SVG Repo — svgrepo.com (CC0 / MIT);
Flaticon — flaticon.com (Free с указанием автора);
Font Awesome — fontawesome.com (Free-пак).
Для удобного доступа к иконкам сделаны две команды-обертки:
% [размер]{имя файла} — по умолчанию стандартный размер 24pt \newcommand{\icon}[2][24pt]{\includegraphics[width=#1, height=#1]{YourStyle/icons/#2.png}} % {имя файла} — сокращенная версия, размером всегда 20pt \newcommand{\iconS}[1]{\icon[20pt]{#1}}
\icon[32pt]{tools} вставляет иконку tools размером 32×32pt, \icon{tools} — размером 24×24pt, а \iconS{tools} — размером 20×20pt.
В демо-презентации на 11-м слайде есть каталог, где все иконки собраны в виде таблицы с названиями:

Штатные Beamer-блоки (block) переопределим, чтобы добавить опциональную иконку в заголовок:
\renewenvironment<>{block}[2][]{% \begin{actionenv}% \def\insertblocktitle{\par\vspace{-0.1em}\leftskip=0.45em\rightskip=0.45em \normalsize\textbf{\ifstrempty{#1}{#2}{\raisebox{-.5\height}{\hspace{-3pt}\icon{#1}}\hspace*{0.1cm}\raisebox{-0.5\height}{\hbox{#2}}}}\vspace*{0.1cm} } \par \usebeamertemplate{block begin}\leftskip=0.45em\rightskip=0.45em \vspace{0.1em}% } {\par\vspace*{0.1cm}\usebeamertemplate{block end} \end{actionenv}}
Внутри блока добавлен горизонтальный отступ. Его можно менять на свое значение, чтобы текст не упирался в края:
\addtobeamertemplate{block begin}{\hspace*{0.1cm}\begin{minipage}[t]{\linewidth-0.1cm}\addtolength{\leftmargini}{0.17cm}}{} \addtobeamertemplate{block end}{}{\end{minipage}\vspace*{0.05cm}}
Чтобы сверстать блок с иконкой tools, набираем \begin{block}[tools]{Заголовок} ... \end{block}. Если иконка не нужна, пишем как обычно: \begin{block}{Заголовок} ... \end{block}.
В демо-презентации можно увидеть, как выглядят блоки с иконками:

И без иконок:

Для верстки списков преимуществ, характеристик и т.п. удобно использовать карточки с иконками и без. Они определены в классе следующим образом:
% \Yourcard[icon]{width}{title}{description} — карточка с опциональной иконкой % width — доля \linewidth (например, 0.27 для трех карточек в ряд и 0.4 — для двух) \newcommand{\Yourcard}[4][]{ \begin{minipage}[t]{#2\linewidth} % Цветной квадратик слева вверху — с иконкой, если она есть, или пустой, если ее нет \colorbox{YourBase}{\ifstrempty{#1}{\makebox(4,4){}}{\makebox(16,16){\iconS{#1}}}} \vspace{0.2cm}\\ \textbf{#3}\\ #4 \end{minipage} }
В презентации элементы-карточки выглядят так:

Анимации из последовательности кадров
Стандартные методы вставки видео в PDF работают нестабильно. А Flash Player в Adobe Reader с 2020 года вовсе не поддерживается. Альтернатива — разбить видео на PNG-кадры c помощью простого скрипта или онлайн-конвертера и вставить их как анимацию через пакет animate с методом method=ocg (Optional Content Groups):
% Анимация без элементов управления (циклический автопросмотр, как GIF) \newcommand{\FramesAsGIF}[6]{\animategraphics[loop,autoplay,method=ocg,width=#2,height=#3,keepaspectratio]{#4}{#1}{#5}{#6}} % С кнопками play/stop \newcommand{\FramesAsVideoPlayer}[6]{ \animategraphics[loop,method=ocg,controls={play,stop},width=#2,height=#3,keepaspectratio]{#4}{#1}{#5}{#6} } % С полным набором кнопок управления \newcommand{\FramesAsVideoExtraPlayer}[6]{ \animategraphics[loop,method=ocg,controls,width=#2,height=#3,keepaspectratio]{#4}{#1}{#5}{#6} }
Аргументы этих команд:
Путь до кадров (с префиксом имени файла без номера и расширения),
Ширина,
Высота,
Частота кадров (fps),
Номер первого кадра,
Номер последнего кадра.
Примеры использования из демо-презентации:
% Анимация без элементов управления (циклический автопросмотр, как GIF) \FramesAsGIF{video/resonans/Re100Pair0_85Resonans-}{2.4cm}{2.4cm}{4}{0}{28} % С кнопками play/stop \FramesAsVideoPlayer{video/resonans/Re100Pair0_85Resonans-}{2.4cm}{2.4cm}{4}{0}{28} % С полным набором кнопок управления \FramesAsVideoExtraPlayer{video/resonans/Re100Pair0_85Resonans-}{2.4cm}{2.4cm}{4}{0}{28}
На слайде выглядят так (слева направо):

Для просмотра анимаций скачайте демо-презентацию и откройте в любой программе для просмотра PDF на девятом слайде.
Последние штрихи: гиперссылки, отступы в списках, полезные мелочи
Ссылки настроим так, чтобы в PDF не было цветных рамок вокруг текста ссылки. Вместо них сделаем подчеркивание:
\makeatletter \Hy@AtBeginDocument{% \def\@pdfborder{0 0 1}% \def\@pdfborderstyle{/S/U/W 1}% } \makeatother
Цвет URL-ссылок привязан к YourBase (в примере это фиолетовый), а внутренние ссылки не перекрашиваются:
\hypersetup{colorlinks,linkcolor=,urlcolor=YourBase,linkbordercolor=YourBase,urlbordercolor=YourBase} \urlstyle{same}
\urlstyle{same} устанавливает, что URL печатаются тем же шрифтом, что и основной текст, а не моноширинным по умолчанию. Если ваш корпоративный стиль требует другого цвета ссылок, достаточно поменять YourBase в urlcolor=YourBase на нужный.
По умолчанию Beamer использует большие отступы в itemize / enumerate. В классе они уменьшены и настраиваются отдельно для каждого уровня вложенности:
% Отступ слева для первого уровня \setlength\leftmargini{1.4em} % Отступ между маркером и текстом \setlength\labelsep{7pt}
Дополнительно через \xpatch переопределены внутренние макросы Beamer, чтобы можно было менять межстрочный интервал только внутри списков:
\newcommand\setlistsep[3]{% \setlength{\my@beamer@itemsepi}{#1}% первый уровень \setlength{\my@beamer@itemsepii}{#2}% второй уровень \setlength{\my@beamer@itemsepiii}{#3}% третий уровень }
После этого переопределения в классе можно указать \setlistsep{2ex}{1.5ex}{1ex}, и межстрочные расстояния в списках изменятся по всей презентации. Если хочется более плотные списки, уменьшайте значения в фигурных скобках.
В класс можно добавлять свои команды для ускорения повседневного форматирования текста на слайдах. Например, сейчас определено несколько таких коротких команд:
% Моноширинный шрифт для вставки LaTeX-команд в тексте \def \Yourcode {\small\ttfamily} % Зеленая галочка \def \YourCheckedbox {\color{YourGood}\Checkedbox} % Красный крестик \def \YourCrossedbox {\color{YourBad}\Crossedbox} % Фиолетовая pointing hand \def \YourHandRight {\color{YourBase}\HandRight} % Цветной бокс вокруг текста (рамка YourBase, заливка 20%) \newcommand{\Yourcolorbox}[1]{\fcolorbox{YourBase}{YourBase!20}{#1}}
\Yourcode удобен, когда нужно вставить имя LaTeX-команды прямо в текст: \Yourcode{\textbackslash section{...}}. Галочка и крестик пригодятся в списках «плюсов и минусов», \Yourcolorbox для выделения ключевого термина цветным фоном. Размер шрифта в \Yourcode регулируется: замените \small на \footnotesize, если шрифт кажется крупным.
В самом конце \YourPres.cls добавляем:
\setbeamercovered{dynamic}— скрытые элементы (например, на оверлеях) не просто исчезают, а плавно затемняются. Глаз не теряет контекст.\setcounter{secnumdepth}{5}— глубокая нумерация разделов (до subparagraph), хотя на практике в презентациях используется редко.\def\emptyset{\varnothing}— более красивый символ пустого множества вместо стандартного\emptyset.\mode<presentation>/\mode<all>— гарантирует, что класс работает только в режиме презентации Beamer.

Подведем итоги
Мы разобрали минимальный, но достаточный набор, чтобы превратить корпоративный брендбук в самодостаточный LaTeX-класс.
Дальше можно добавлять:
SVG-иконки — заменить PNG на вектор для четкости на Retina-экранах или использовать команды Font Awesome или MDI напрямую через пакеты;
автогенерацию каталога иконок — написать скрипт, который сканирует папку и генерирует LaTeX-таблицу;
поддержку светлой/темной темы через
\newcommand{\LightTheme}{...}/\DarkTheme;событийные варианты — например, переопределять титульный слайд для конференций или мероприятий;
разбивку на модули — можно выделить
colors.sty,fonts.sty,tables.styи подключать их из основного класса;динамическую загрузку шрифтов через
\IfFileExists;и целую кучу всего.
Можно дописать еще хоть 10 000 строк кода, добавив десятки новых функций, реорганизовав код — и все равно будет, что улучшать. Но ядро корпоративного стиля — цвета, шрифты, каркас слайда, блоки, таблицы, иконки, авторские страницы — умещается здесь, в одном достаточно компактном файле. Сейчас это ~800 строк с комментариями, из которых ~500 строк кода, который мы полностью разобрали в статье.
Начать работать с шаблоном можно прямо по демо-презентации даже тем, кому LaTeX в новинку. Если вы еще не используете систему контроля версий для своих презентаций, попробуйте такой подход:
Вынесите шаблон в отдельный репозиторий.
Подключите его к репозиторию с презентацией как submodule:
git submodule add https://github.com/vvp-cfd/beamer-template-kit.git company-pres-templateGit автоматически добавит информацию о submodule в
.gitmodules.Подключите класс в презентации через
\documentclass{YourPres}.И спокойно пишите презентацию, не отвлекаясь на оформление.
Когда шаблон обновляется, сделайте git submodule update —remote в своих проектах с презентациями.
Надеюсь, статья оказалась полезной и для тех, кто только осваивает LaTeX/Beamer, и для тех, кто давно хотел разобраться с созданием классов и стилевых файлов, но все не доходили руки. А если после прочтения вы поняли, что хотите больше узнать в целом про LaTeX или в частности про Beamer, вот подборка литературы:
Львовский С.М. Набор и верстка в системе LaTeX.
Балдин Е.М. Компьютерная типография LaTeX.
Кузнецов А.В. Основы LaTeX.
Столяров А.В. Сверстай диплом красиво: LaTeX за три дня.
Knuth D.E. The TeXbook.
