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.
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.
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.
--- 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.
![bg], ses tailles et ses filtres, les arrière-plans partagés, et les mots-clés d'image que Marp comprend.
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.
default, gaia et uncover, choisis avec theme: comme dans Marp.
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.
{{ .title }} lit l'en-tête, dont la table data: contient tout ce dont la présentation a besoin par ailleurs.
Un {{ range }} qui émet --- est un générateur de diapositives : une par élément, par orateur, par version.
{{ page }} et {{ total }} ne sont connus qu'une fois la présentation découpée, et sont remplis à ce moment-là.
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.
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.
title, section, content et blank, chacun redéfinissable.
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.
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.
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.
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.
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.
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.
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.
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.
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.
slides notes affiche les notes de l'orateur ; slides kinds et slides themes listent ce qu'une présentation peut nommer.
Un fichier de configuration pour un dossier de présentations : types et thèmes partagés, données de template, options HTML et langue.
--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, 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, 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.
$…$ et $$…$$ composés par go-tex, code délimité coloré par go-rouge — dans la page HTML, les images et le PDF.
--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).
# <!-- fit --> Title remplit la largeur de la diapositive sur une ligne, dans la page et dans chaque export.
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 →
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 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 →
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.
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 é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.
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 →
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 →
```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 →
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.
La documentation (Hugo + Hextra), qui décrit v0.13.0 : prise en main, compatibilité Marp, templates, types et ligne de commande. Source →
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 →
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.
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 →