コンテンツにスキップ

テンプレート

スライドデッキでの Go text/template による埋め込み:値、スライドの生成、ページ番号、インクルード。

スライドデッキは Go の text/template であり、 Markdown の解析 前 に評価されます。Go のテンプレート言語が備えるもの (アクション、パイプライン、if、range、with、変数)は、すべて スライドデッキの中で使えます。

データ

テンプレートのドットには、フロントマターのキー、次にその data: マッピングのキー、さらにコマンドラインまたは slides.yaml で与えたデータが、 この順に入ります。後のものが前のものを上書きします。

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

# {{ .title }}

Presented by the {{ .team }} team.

コマンドラインからは次のように指定します。

フラグ与えるもの
--data file.yamlデータを記述した YAML または JSON ファイル(複数回指定可)
--set key=value1 つの値(複数回指定可)

スライドを生成する

本文全体が 1 つのテンプレートなので、--- を書き出す range はスライドを書き出すことになります。

{{ range .releases }}
---

# {{ .version }}

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

ページ番号と総数

{{ page }} と {{ total }} は、そのスライドの番号とスライドの総数です。 これらはスライドデッキが分割されて初めて決まるため、その時点で埋め込まれます。 生成されたスライドデッキでは、生成されたスライドも数えられます。

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

インクルード

{{ include "parts/agenda.md" }} は、スライドデッキからの相対パスで指定した別のファイルを 挿入します。

コードはそのまま

フェンスで囲んだコードブロックとインラインコードは、テンプレートの実行前に取り分けられ、 そのまま元に戻されます。そのため、Go テンプレートについてのスライドでも {{ .Name }} をエスケープせずに表示できます。

制限

テンプレートの実行にはステップ数の上限があります。大きなデータのリストに対して range を 入れ子にしたテンプレートを持つスライドデッキが、レンダラーを何分も占有し続けることを防ぐためです。 1,048,576 ステップ(ループの反復とテンプレート呼び出しの合計で、1 回の展開内の include と 共有されます)または 10 秒を超えると、スライドデッキはハングする代わりに、診断 template.limit を出して拒否されます。1 ステップのコストは約 260 ns なので、通常の スライドデッキが上限に近づくことはありません。v0.17.1 以降。

無効にする

--no-template を指定すると、スライドデッキをプレーンな Marp として読み込みます。{{ はただのテキストになります。

Created on by tannevaled

Modified on by tannevaled