Перейти к содержимому

Шаблоны

Интерполяция text/template Go в презентации: значения, генерируемые слайды, номера страниц, include.

Презентация — это text/template Go, вычисляемый до разбора Markdown. Всё, что есть в языке шаблонов Go, — действия, конвейеры, if, range, with, переменные — работает в презентации.

Данные

Точка шаблона содержит ключи front matter, затем ключи его отображения data:, затем данные, переданные в командной строке или в slides.yaml, — каждый следующий слой переопределяет предыдущий.

---
marp: true
title: Quarterly review
data:
  team: Platform
---

# {{ .title }}

Presented by the {{ .team }} team.

Из командной строки:

ФлагЗадаёт
--data file.yamlфайл данных YAML или JSON (можно повторять)
--set key=valueодно значение (можно повторять)

Генерация слайдов

Всё тело — один шаблон, поэтому range, пишущий ---, пишет слайды:

{{ range .releases }}
---

# {{ .version }}

{{ range .changes }}- {{ . }}
{{ end }}
{{ end }}

Страница и общее число

{{ page }} и {{ total }} — номер слайда и число слайдов. Они становятся известны только после разделения презентации на слайды, поэтому подставляются тогда: сгенерированная презентация считает слайды, которые сгенерировала.

<!-- footer: "{{ page }} / {{ total }}" -->

Include

{{ include "parts/agenda.md" }} вставляет другой файл, путь к которому отсчитывается от презентации.

Код остаётся нетронутым

Блоки кода и фрагменты встроенного кода откладываются в сторону до запуска шаблона и возвращаются дословно, поэтому слайд о шаблонах Go может показать {{ .Name }} без экранирования.

Ограничения

У выполнения шаблонов есть бюджет шагов, чтобы презентация, шаблоны которой вкладывают range поверх больших списков данных, не могла занимать отрисовщик минутами. При превышении 1 048 576 шагов (итерации циклов и вызовы шаблонов, общие для всех include одного раскрытия) или 10 с презентация отклоняется с диагностикой template.limit вместо зависания. Шаг стоит около 260 нс, так что обычные презентации остаются далеко от предела. Начиная с v0.17.1.

Отключение

--no-template читает презентацию как обычный Marp: {{ — это текст.

Created on by tannevaled

Modified on by tannevaled