Fork me on GitHub

Foliensätze in Markdown,
gerendert in reinem Go.

slides liest das Markdown, das Marp liest — Direktiven, --- zwischen den Folien, ![bg]-Hintergründe, Referentennotizen, die eingebauten Themes — und ergänzt zwei Dinge, die Marp nicht kennt: Go-Templates im Deck und Folienarten, sodass eine Folie sagt, was sie ist, statt zu wiederholen, wie sie aussieht.

v0.13.0 — veröffentlichtHTML, expand, PNG/JPEG, barrierefreies Vektor-PDF, bearbeitbares PPTX und ODP, Formeln, Code mit Zeilennummern und Markierungen, Emoji, HCL, watch, serve, eine Referentenansicht und eine Übersichtsansicht schon heutekein Headless-Chrome
talk.md
---
marp: true
paginate: true
footer: {{ .talk }}
data:
  talk: Pure Go slides
  topics: [Why, How, Next]
---

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

{{ range .topics }}
---

# {{ . }}
{{ end }}
Eine Organisation, 4 Repositories
Kompatibilität

Ein Marp-Deck ist ein go-slides-Deck.

Die Syntax ist die von Marpit und Marp Core, kein Dialekt davon. Ein für Marp geschriebenes Deck wird hier genauso gelesen, und slides expand liefert reines Marp-Markdown zurück — nichts, was Sie mit den beiden Erweiterungen unten schreiben, sperrt Sie ein.

➗

Folien und Direktiven

--- trennt Folien. Globale, lokale und punktuelle (_class) Direktiven, im Front Matter oder in HTML-Kommentaren, mit Marps Vererbung von einer Folie zur nächsten.

🖼️

Bilder und Hintergründe

![bg], seine Größen und Filter, geteilte Hintergründe und die Bildschlüsselwörter, die Marp versteht.

🗒️

Rund um die Folie

Kopf-, Fußzeile und Seitenzahlen; Referentennotizen aus Kommentaren; schrittweise Listen; <style scoped> für das CSS einer einzelnen Folie.

🎨

Die eingebauten Themes

default, gaia und uncover, gewählt mit theme: wie in Marp.

Die erste Erweiterung

Go-Templates, im Deck.

Das Deck ist ein text/template, ausgewertet, bevor das Markdown geparst wird — ein Template kann also Folien erzeugen, und ein Deck kann aus Daten plus Layout bestehen.

🔤

Werte

{{ .title }} liest das Front Matter, und dessen data:-Mapping enthält alles Weitere, was das Deck braucht.

🔁

Folien aus Daten

Ein {{ range }}, das --- ausgibt, ist ein Foliengenerator: eine Folie pro Eintrag, pro Vortrag, pro Release.

#️⃣

Seite und Gesamtzahl

{{ page }} und {{ total }} sind erst bekannt, wenn das Deck in Folien geteilt ist, und werden dann eingesetzt.

🧾

Code bleibt unangetastet

Codeblöcke und Inline-Code werden standardmäßig nicht ausgewertet, sodass eine Folie über Go-Templates eines zeigen kann. include bindet eine weitere Datei ein.

Die zweite Erweiterung

Eine Folie sagt, was sie ist.

kind: section benennt ein Preset lokaler Direktiven — Kopfzeile, Fußzeile, Seitenzahl, Klasse, Hintergrund. kind: gilt für die Folie und die folgenden, _kind: für eine einzelne Folie. Direktiven auf der Folie selbst haben weiterhin Vorrang.

🏷️

Eingebaut

title, section, content und blank, jede neu definierbar.

📁

Einmal definiert, geteilt

Im kinds: des Front Matters oder in einer YAML-Datei mit Folienarten, die jedes Deck eines Teams nennt.

🧹

Nichts läuft über

Ein Wechsel der Folienart setzt zurück, was die vorige gesetzt hat — Klasse oder Fußzeile wandern also nicht in den nächsten Abschnitt.

Ausprobieren

Ein Deck in Ihrem Browser.

Der Playground ist go-slides selbst, zu WebAssembly kompiliert: links schreiben, rechts folgen die Folien. Es wird nichts installiert und nichts an einen Server gesendet. Die Oberfläche des Playgrounds ist auf Englisch.

⚡

Live

Die Folien werden beim Tippen in einem Worker gerendert, die Vorschau scrollt mit dem Editor, eine Minimap und eine Spalte mit Folienminiaturen folgen ihr, und die Präsentation läuft mit ihren Übergängen. „Present“ öffnet die Referentenansicht mit Ihren Notizen und einem Timer in einem zweiten Fenster.

💡

Hilfe eingebaut

Vervollständigung und Erklärungen für Direktiven, Folienarten und Template-Funktionen; Probleme in ihrer Zeile markiert; Beispiel-Decks, darunter Formeln, Bilder und Hintergründe (Bilddatei einfach in den Editor ziehen); Links zur Dokumentation. Ein Dateipanel hält das Projekt: Ihre Themes, Folienarten und Datendateien sowie die abgelegten Medien, im Layout, das der Befehl slides erwartet. Ein Tab „Format“ schreibt das Markdown für Sie, mit Undo: fett, kursiv, unterstrichen, Listen, eine Tabelle aus einem Raster, die Textausrichtung der Folie und Links. Jedes Panel ist in der Größe veränderbar.

🔗

Teilen, sichern, behalten

Ein Link trägt das Deck selbst, komprimiert in seinem #. Speichern Sie es als HTML, Vektor-PDF oder bearbeitbares PowerPoint- oder OpenDocument-Deck, alles in Ihrem Browser erzeugt, oder laden Sie das ganze Projekt als .zip herunter. Ihr Entwurf übersteht ein Neuladen, nur in Ihrem Browser.

Was es kann

Zuerst HTML. Der Rest ohne Browser, den man fernsteuern müsste.

marp-cli rendert Bilder und PDF, indem es einen Headless-Chrome steuert. Hier übernehmen das die Go-Bibliotheken der Flotte. Bilder und PDF kamen in v0.1.0, PPTX, Formeln und Hervorhebung in v0.2.0, ODP, einpassende Überschriften und HCL in v0.3.0, das Vektor-PDF (mit markierbarem Text) und Emoji in v0.4.0; in v0.5.0 wurden PPTX und ODP bearbeitbar, während das PPTX von marp-cli aus Bildern besteht; v0.6.0 bringt watch, serve, Übergänge und die Optionen von marp-cli, v0.7.0 die Referentenansicht — siehe die Dokumentation.

HTML v0.1.0

Eine Seite pro Deck, so wie Marp sie rendert: jede Folie ein SVG-gerahmtes <section>, das mit dem Fenster skaliert, das CSS des Themes und ein Tastatur-Viewer.

slides expand v0.1.0

Das Deck mit ausgewerteten Templates und in punktuelle Direktiven umgewandelten Folienarten, zurückgeschrieben als reines Marp-Markdown — damit jedes Marp-Werkzeug es weiterverarbeiten kann.

notes, kinds, themes v0.1.0

slides notes gibt die Referentennotizen aus; slides kinds und slides themes listen auf, was ein Deck benennen kann.

slides.yaml v0.1.0

Eine Konfigurationsdatei für einen Ordner mit Decks: gemeinsame Folienarten, Themes, Template-Daten, HTML-Optionen und Sprache.

PNG / JPEG v0.1.0

--images png|jpeg schreibt ein Bild pro Folie (deck.001.png, …), --image die erste Folie. Gerendert von go-webengine, einer Browser-Engine in Go — kein Headless-Chrome. --image-scale 2 rendert in doppelter Dichte.

PDF v0.1.0

--pdf oder -o deck.pdf: eine Seite pro Folie in der Foliengröße, mit einer Gliederung aus Folien und Überschriften, geschrieben von go-pdfkit. Schriften sind eingebettet; nichts greift aufs Netz zu. Seit v0.4.0 sind die Seiten Vektoren: markierbarer Text, scharfe Formen, 758 KiB für 100 Folien gegenüber 837 KiB bei marp-cli (--pdf-raster behält ein Bild pro Seite).

PPTX v0.2.0

--pptx oder -o deck.pptx: mit Referentennotizen und den Metadaten des Decks, geschrieben von go-ooxml. Seit v0.5.0 sind die Folien bearbeitbar — Textfelder in den eigenen (eingebetteten) Schriften des Decks, Formen, Verläufe, einmalig gespeicherte Bilder — während die von marp-cli Bilder sind (--pptx-raster behält sie bei). 100 Folien: 348 ms und 760 KiB, gegenüber 7,8 s und 7,2 MiB bei marp-cli.

Formeln und Hervorhebung v0.2.0

$…$ und $$…$$, gesetzt von go-tex, Codeblöcke hervorgehoben von go-rouge — in der HTML-Seite, in Bildern und im PDF.

ODP v0.3.0

--odp oder -o deck.odp: eine OpenDocument-Präsentation mit Referentennotizen — seit v0.5.0 bearbeitbar, wie das PPTX (--odp-raster für ein Bild pro Folie).

Einpassende Überschriften v0.3.0

# <!-- fit --> Title füllt die Folienbreite in einer Zeile, auf der Seite und in jedem Export.

Emoji v0.4.0

:smile:-Shortcodes und Unicode-Emoji (😄 👩‍💻 🇫🇷) werden zu Twemoji-Bildern, genau wie Marp Core sie schreibt — aber aus go-icons/twemoji eingebettet statt von einem CDN geladen, brauchen sie also kein Netz und erscheinen auf der Seite, in Bildern, PDF, PPTX und ODP. Emoji →

HCL v0.3.0

HCL2 überall dort, wo ein Deck YAML nimmt — ein ---hcl-Front-Matter, slides.hcl, Folienarten und Datendateien — für Ausdrücke und Funktionen: footer = "${upper(data.company)} · ${page()}/${total()}". slides expand schreibt das Front Matter als YAML zurück. HCL →

Watch, Serve, Vorschau v0.6.0

--watch baut Geändertes neu und lädt die offenen Seiten neu; --server dir stellt einen Ordner mit Decks bereit — deck.md als Seite, deck.md?pdf, ?pptx, ?png, ?notes auf Anfrage konvertiert — auf 127.0.0.1, mit Prüfung von Host und Origin, ohne je den Ordner zu verlassen; --preview öffnet den Browser. Die Routen und das Live-Reload von marp-cli, ohne dessen offenen Port. Kommandozeile →

Viele Decks v0.6.0

slides -I decks/ -o site/ konvertiert jedes Deck unter einem Ordner und spiegelt den Baum; mehrere Dateien, ein Ordner oder ein Muster auf einmal, -P gleichzeitig.

Übergänge v0.6.0

Das <!-- transition: fade 1s --> von marp-cli mit seinen 33 eingebauten Übergängen, abgespielt mit der View Transition API des Browsers; ein Bedienelement auf dem Bildschirm; --template bare.

Notizen im PDF, Metadaten, Optionen von marp-cli v0.6.0

--notes schreibt die Referentennotizen als Text, --pdf-notes legt sie auf die PDF-Seiten, --pdf-outlines setzt dessen Lesezeichen; --title, --author, --keywords, --url, --og-image, --theme; das .marprc und --config-file (JSON, YAML) von marp-cli werden gelesen.

Übersichtsansicht v0.8.0

Drücken Sie o: alle Folien in einem Raster, die Pfeiltasten wählen eine aus, Enter oder ein Klick springt hin — über der Seite oder über der Referentenansicht, mit den URLs und der Synchronisation von marp-cli, ohne Netz. Folien sind beschriftet und fokussierbar; die geschlossene Übersicht ist inaktiv. Kommandozeile →

Referentenansicht v0.7.0

Drücken Sie p auf der Seite: die aktuelle Folie, der nächste Schritt, Ihre Referentennotizen (maskiert, nie im Vorlesetext für das Publikum), eine Uhr und ein Timer, in einem zweiten Fenster, das dem ersten folgt und dem das erste folgt — mit den URLs und der Synchronisation von marp-cli, über localStorage, ohne Server und ohne Netz. Rund 10 KB pro Seite. Kommandozeile →

Zeilennummern und Code-Markierungen v0.8.0

```go {lineNumbers} nummeriert die Zeilen eines Codeblocks ({lineNumbers=10} beginnt bei 10); eine Markierung in einem Kommentar am Zeilenende (// <1>) gefolgt von einer nummerierten Liste ergibt eine nummerierte Scheibe an der Zeile und an ihrer Notiz — auf der Seite, in Bildern, PDF, PPTX und ODP. Nummern und Scheiben werden mit dem Code nicht kopiert. Formeln und Code →

Die Organisation

Repositories

slides v0.13.0

Der Befehl slides und seine Bibliothek: Marps Markdown, geparst und gerendert in Go, mit Go-Templates und Folienarten obendrauf. Veröffentlicht als v0.13.0: go install github.com/go-slides/slides/cmd/slides@latest.

docs v0.13

Die Dokumentation (Hugo + Hextra) zu v0.13.0: Einstieg, Marp-Kompatibilität, Templates, Folienarten und Kommandozeile. Quelltext →

vscode v0.3.0

Die VS-Code-Erweiterung, so wie Marp for VS Code die von Marp ist: Decks in der Markdown-Vorschau von VS Code, gerendert von zu WebAssembly kompiliertem go-slides (keine Binärdatei, läuft auf vscode.dev), synchron mit dem Editor scrollend, auch durch Templates hindurch, Fehler im Problems-Panel, Vervollständigung von Direktiven, Folienarten und Template-Funktionen, eine Übersichts- und eine Referentenansicht neben dem Editor, Export über slides. Installieren Sie die am GitHub-Release angehängte .vsix; die Veröffentlichung im Marketplace und auf Open VSX ist vorbereitet, aber noch nicht erfolgt. VS Code →

brand bereit

Das Zeichen — eine Folie auf ihrem Ständer, im Indigo der Dokumentenfamilie — und alle seine Formate: SVG, PNG, JPG, ICO, ICNS, Avatar und Social-Image.

Teil der Dokumentenfamilie.

Mit go-richdoc, go-ooxml, go-tex und go-docutils: Dokumente lesen, setzen und schreiben in Go, ganz ohne C.

Die Organisation auf GitHub →