Forkez-moi sur GitHub

Des présentations en Markdown,
rendues en Go pur.

slides lit le Markdown que lit Marp — directives, --- entre les diapositives, arrière-plans ![bg], notes de l'orateur, thèmes intégrés — et y ajoute deux choses que Marp n'a pas : des templates Go dans la présentation, et des types de diapositives, pour qu'une diapositive dise ce qu'elle est au lieu de répéter à quoi elle ressemble.

v0.13.0 — publiéeHTML, expand, PNG/JPEG, PDF vectoriel et accessible, PPTX et ODP modifiables, mathématiques, code avec numéros de ligne et annotations, emoji, HCL, watch, serve, une vue présentateur et une vue d'ensemble, dès aujourd'huisans Chrome headless
talk.md
---
marp: true
paginate: true
footer: {{ .talk }}
data:
  talk: Pure Go slides
  topics: [Why, How, Next]
---

<!-- _kind: title -->
# {{ .talk }}

{{ range .topics }}
---

# {{ . }}
{{ end }}
Une organisation, 4 dépôts
Compatibilité

Une présentation Marp est une présentation go-slides.

La syntaxe est celle de Marpit et de Marp Core, pas un dialecte. Une présentation écrite pour Marp se lit ici de la même façon, et slides expand restitue du Markdown Marp ordinaire : rien de ce qui est écrit avec les deux ajouts ci-dessous ne vous enferme.

➗

Diapositives et directives

--- sépare les diapositives. Directives globales, locales et ponctuelles (_class), dans l'en-tête ou dans des commentaires HTML, avec l'héritage de Marp d'une diapositive à la suivante.

🖼️

Images et arrière-plans

![bg], ses tailles et ses filtres, les arrière-plans partagés, et les mots-clés d'image que Marp comprend.

🗒️

Autour de la diapositive

En-tête, pied de page et pagination ; notes de l'orateur tirées des commentaires ; listes fragmentées ; <style scoped> pour le CSS d'une seule diapositive.

🎨

Les thèmes intégrés

default, gaia et uncover, choisis avec theme: comme dans Marp.

Premier ajout

Des templates Go, dans la présentation.

La présentation est un text/template, évalué avant l'analyse du Markdown — un template peut donc générer des diapositives, et une présentation peut n'être que des données et une mise en page.

🔤

Valeurs

{{ .title }} lit l'en-tête, dont la table data: contient tout ce dont la présentation a besoin par ailleurs.

🔁

Des diapositives à partir des données

Un {{ range }} qui émet --- est un générateur de diapositives : une par élément, par orateur, par version.

#️⃣

Page et total

{{ page }} et {{ total }} ne sont connus qu'une fois la présentation découpée, et sont remplis à ce moment-là.

🧾

Le code n'est pas touché

Les blocs délimités et le code en ligne ne sont pas évalués par défaut : une diapositive sur les templates Go peut en montrer un. include insère un autre fichier.

Second ajout

Une diapositive dit ce qu'elle est.

kind: section nomme un jeu prédéfini de directives locales — en-tête, pied de page, pagination, classe, arrière-plan. kind: s'applique à la diapositive et aux suivantes, _kind: à une seule. Les directives écrites sur la diapositive l'emportent toujours.

🏷️

Intégrés

title, section, content et blank, chacun redéfinissable.

📁

Définis une fois, partagés

Dans le kinds: de l'en-tête, ou dans un fichier YAML de types que toutes les présentations d'une équipe désignent.

🧹

Rien ne déborde

Changer de type efface ce que le précédent avait défini : une classe ou un pied de page ne vous suit pas dans la section suivante.

Essayez

Une présentation dans votre navigateur.

Le bac à sable, c'est go-slides lui-même, compilé en WebAssembly : écrivez à gauche, les diapositives suivent à droite. Rien à installer, rien n'est envoyé à un serveur. L'interface du bac à sable est en anglais.

⚡

En direct

Les diapositives se rendent dans un worker pendant la frappe, l'aperçu défile avec l'éditeur, une minimap et une colonne de vignettes le suivent, et le diaporama se lance avec ses transitions. Présenter ouvre la vue présentateur, avec vos notes et un minuteur, dans une seconde fenêtre.

💡

L'aide intégrée

Complétion et explications pour les directives, les types et les fonctions de template ; problèmes signalés sur leur ligne ; présentations d'exemple, dont mathématiques, images et arrière-plans (déposez une image dans l'éditeur) ; liens vers la documentation. Un panneau de fichiers contient le projet : vos thèmes, types et fichiers de données, et les médias déposés, selon l'arborescence que construit la commande slides. Un onglet Format écrit le Markdown pour vous, avec Annuler : gras, italique, souligné, listes, un tableau à partir d'une grille, l'alignement du texte et les liens. Chaque panneau se redimensionne.

🔗

Partager, enregistrer, conserver

Un lien transporte la présentation elle-même, compressée dans son #. Enregistrez-la en HTML, en PDF vectoriel ou en présentation PowerPoint ou OpenDocument modifiable, le tout produit dans votre navigateur, ou téléchargez le projet entier en .zip. Votre brouillon survit à un rechargement, dans votre navigateur seulement.

Ce qu'il fait

D'abord le HTML. Le reste sans navigateur à piloter.

marp-cli produit images et PDF en pilotant un Chrome headless. Ici, ce sont les bibliothèques Go de la flotte qui s'en chargent. Images et PDF sont arrivés en v0.1.0, PPTX, mathématiques et coloration en v0.2.0, ODP, titres ajustés et HCL en v0.3.0, le PDF vectoriel (texte sélectionnable) et les emoji en v0.4.0 ; en v0.5.0, PPTX et ODP sont devenus modifiables, là où le PPTX de marp-cli n'est que des images ; v0.6.0 ajoute watch, serve, les transitions et les options de marp-cli, v0.7.0 la vue présentateur — voir la documentation.

HTML v0.1.0

Une page par présentation, comme Marp la rend : chaque diapositive est une <section> encadrée en SVG qui s'adapte à la fenêtre, avec le CSS du thème et une visionneuse au clavier.

slides expand v0.1.0

La présentation, templates évalués et types convertis en directives ponctuelles, réécrite en Markdown Marp ordinaire — n'importe quel outil Marp peut prendre le relais.

notes, types, thèmes v0.1.0

slides notes affiche les notes de l'orateur ; slides kinds et slides themes listent ce qu'une présentation peut nommer.

slides.yaml v0.1.0

Un fichier de configuration pour un dossier de présentations : types et thèmes partagés, données de template, options HTML et langue.

PNG / JPEG v0.1.0

--images png|jpeg écrit une image par diapositive (deck.001.png, …), --image la première. Rendu par go-webengine, un moteur de navigateur en Go — pas un Chrome headless. --image-scale 2 rend en double densité.

PDF v0.1.0

--pdf, ou -o deck.pdf : une page par diapositive à sa taille, avec un sommaire des diapositives et des titres, écrit par go-pdfkit. Les polices sont incorporées ; rien ne passe par le réseau. Depuis v0.4.0, les pages sont vectorielles : texte sélectionnable, formes nettes, 758 Kio pour 100 diapositives contre 837 Kio pour marp-cli (--pdf-raster garde une image par page).

PPTX v0.2.0

--pptx, ou -o deck.pptx : avec les notes de l'orateur et les métadonnées, écrit par go-ooxml. Depuis v0.5.0, les diapositives sont modifiables — zones de texte dans les polices de la présentation (incorporées), formes, dégradés, images stockées une seule fois — là où celles de marp-cli sont des images (--pptx-raster les garde). 100 diapositives : 348 ms et 760 Kio, contre 7,8 s et 7,2 Mio pour marp-cli.

Maths et coloration v0.2.0

$…$ et $$…$$ composés par go-tex, code délimité coloré par go-rouge — dans la page HTML, les images et le PDF.

ODP v0.3.0

--odp, ou -o deck.odp : une présentation OpenDocument avec ses notes de l'orateur — modifiable depuis v0.5.0, comme le PPTX (--odp-raster pour une image par diapositive).

Titres ajustés v0.3.0

# <!-- fit --> Title remplit la largeur de la diapositive sur une ligne, dans la page et dans chaque export.

Emoji v0.4.0

Les codes :smile: et les emoji Unicode (😄 👩‍💻 🇫🇷) deviennent des images Twemoji exactement comme les écrit Marp Core — mais incorporées depuis go-icons/twemoji au lieu d'être chargées d'un CDN : aucun réseau, et elles s'affichent dans la page, les images, le PDF, le PPTX et l'ODP. Emoji →

HCL v0.3.0

HCL2 partout où une présentation accepte du YAML — un en-tête ---hcl, slides.hcl, les fichiers de types et de données — pour les expressions et les fonctions : footer = "${upper(data.company)} · ${page()}/${total()}". slides expand réécrit l'en-tête en YAML. HCL →

Watch, serve, aperçu v0.6.0

--watch reconstruit ce qui change et recharge les pages ouvertes ; --server dir sert un dossier de présentations — deck.md en page, deck.md?pdf, ?pptx, ?png, ?notes convertis à la demande — sur 127.0.0.1, en vérifiant Host et Origin, sans jamais sortir du dossier ; --preview ouvre le navigateur. Les routes et le rechargement à chaud de marp-cli, sans son port ouvert. Ligne de commande →

Plusieurs présentations v0.6.0

slides -I decks/ -o site/ convertit chaque présentation d'un dossier et en reproduit l'arborescence ; plusieurs fichiers, un dossier ou un motif à la fois, -P en parallèle.

Transitions v0.6.0

Le <!-- transition: fade 1s --> de marp-cli, avec ses 33 transitions intégrées, jouées par l'API View Transition du navigateur ; une télécommande à l'écran ; --template bare.

Notes dans le PDF, métadonnées, options de marp-cli v0.6.0

--notes écrit les notes de l'orateur en texte, --pdf-notes les place sur les pages du PDF, --pdf-outlines ses signets ; --title, --author, --keywords, --url, --og-image, --theme ; le .marprc et le --config-file (JSON, YAML) de marp-cli sont lus.

Vue d'ensemble v0.8.0

Appuyez sur o : toutes les diapositives en grille, les flèches en choisissent une, Entrée ou un clic y mène — par-dessus la page ou la vue présentateur, avec les URL et la synchronisation de marp-cli, sans réseau. Les diapositives sont étiquetées et focalisables ; la vue fermée est inerte. Ligne de commande →

Vue présentateur v0.7.0

Appuyez sur p dans la page : la diapositive courante, l'étape suivante, vos notes (échappées, jamais lues par le lecteur d'écran du public), une horloge et un minuteur, dans une seconde fenêtre synchronisée dans les deux sens — URL et synchronisation de marp-cli, via localStorage, sans serveur ni réseau. Environ 10 Ko par page. Ligne de commande →

Numéros de ligne et annotations de code v0.8.0

```go {lineNumbers} numérote les lignes d'un bloc de code ({lineNumbers=10} commence à 10) ; un repère en commentaire en fin de ligne (// <1>) suivi d'une liste numérotée place une pastille numérotée sur la ligne et sur sa note — dans la page, les images, le PDF, le PPTX et l'ODP. Numéros et pastilles ne sont pas copiés avec le code. Maths et code →

L'organisation

Dépôts

slides v0.13.0

La commande slides et sa bibliothèque : le Markdown de Marp analysé et rendu en Go, avec templates Go et types de diapositives en plus. Publiée en v0.13.0 : go install github.com/go-slides/slides/cmd/slides@latest.

docs v0.13

La documentation (Hugo + Hextra), qui décrit v0.13.0 : prise en main, compatibilité Marp, templates, types et ligne de commande. Source →

vscode v0.3.0

L’extension VS Code, comme Marp for VS Code l’est pour Marp : les présentations prévisualisées dans l’aperçu Markdown de VS Code par go-slides compilé en WebAssembly (sans binaire, fonctionne sur vscode.dev), défilement synchronisé avec l’éditeur même à travers les templates, erreurs dans le panneau Problèmes, complétion des directives, types et fonctions de template, vue d’ensemble et vue présentateur à côté de l’éditeur, export via slides. Installez le .vsix joint à la release GitHub ; la publication sur le Marketplace et Open VSX est prête, mais pas encore faite. VS Code →

brand prêt

Le logo — une diapositive sur son pied, dans l’indigo de la famille documentaire — et toutes ses déclinaisons : SVG, PNG, JPG, ICO, ICNS, avatar et image sociale.

Membre de la famille documentaire.

Avec go-richdoc, go-ooxml, go-tex et go-docutils : des documents lus, composés et écrits en Go, sans une ligne de C.

L'organisation sur GitHub →