Haz un fork en GitHub

Presentaciones en Markdown,
renderizadas en Go puro.

slides lee el Markdown que lee Marp — directivas, --- entre diapositivas, fondos ![bg], notas del presentador, los temas integrados — y añade dos cosas que Marp no tiene: plantillas de Go dentro de la presentación y tipos de diapositiva, para que una diapositiva diga qué es en lugar de repetir su aspecto.

v0.13.0 — publicadaHTML, expand, PNG/JPEG, PDF vectorial y accesible, PPTX y ODP editables, matemáticas, código con números de línea y llamadas, emoji, HCL, watch, serve, un presentador y una vista de resumen hoysin 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 }}
Una organización, 4 repositorios
Compatibilidad

Una presentación Marp es una presentación go-slides.

La sintaxis es la de Marpit y Marp Core, no un dialecto suyo. Una presentación escrita para Marp se lee igual aquí, y slides expand devuelve Markdown de Marp sin más, así que nada de lo escrito con las dos novedades siguientes queda atrapado.

➗

Diapositivas y directivas

--- separa las diapositivas. Directivas globales, locales y puntuales (_class), en el front matter o en comentarios HTML, con la herencia de Marp de una diapositiva a la siguiente.

🖼️

Imágenes y fondos

![bg], sus tamaños y filtros, fondos divididos y las palabras clave de imagen que Marp entiende.

🗒️

Alrededor de la diapositiva

Encabezado, pie y paginación; notas del presentador a partir de comentarios; listas fragmentadas; <style scoped> para el CSS de una sola diapositiva.

🎨

Los temas integrados

default, gaia y uncover, que se eligen con theme: como en Marp.

La primera novedad

Plantillas de Go, dentro de la presentación.

La presentación es un text/template, evaluado antes de analizar el Markdown — así una plantilla puede generar diapositivas, y una presentación puede ser datos más un diseño.

🔤

Valores

{{ .title }} lee el front matter, y su mapa data: guarda todo lo demás que la presentación necesite.

🔁

Diapositivas a partir de datos

Un {{ range }} que emite --- es un generador de diapositivas: una por elemento, por ponente, por versión.

#️⃣

Página y total

{{ page }} y {{ total }} solo se conocen una vez dividida la presentación, y se rellenan entonces.

🧾

El código se deja en paz

Los bloques delimitados y el código en línea no se evalúan por defecto, así que una diapositiva sobre plantillas de Go puede mostrar una. include incorpora otro archivo.

La segunda novedad

Una diapositiva dice lo que es.

kind: section nombra un conjunto predefinido de directivas locales — encabezado, pie, paginación, clase, fondo. kind: se aplica a la diapositiva y a las siguientes, _kind: a una sola. Las directivas escritas en la diapositiva siguen teniendo prioridad.

🏷️

Integrados

title, section, content y blank, todos redefinibles.

📁

Definidos una vez, compartidos

En el kinds: del front matter, o en un archivo YAML de tipos que nombran todas las presentaciones de un equipo.

🧹

Nada se filtra

Cambiar de tipo borra lo que fijó el anterior, así que una clase o un pie no te siguen a la sección siguiente.

Pruébalo

Una presentación en tu navegador.

El playground es el propio go-slides compilado a WebAssembly: escribes a la izquierda, las diapositivas te siguen a la derecha. No se instala nada y no se envía nada a ningún servidor. La interfaz del playground está en inglés.

⚡

En vivo

Las diapositivas se renderizan en un worker mientras escribes, la vista previa se desplaza con el editor, un minimapa y una columna de miniaturas la acompañan, y la presentación se reproduce con sus transiciones. Presentar abre la vista de presentador, con tus notas y un temporizador, en una segunda ventana.

💡

Ayuda integrada

Autocompletado y explicaciones de directivas, tipos y funciones de plantilla; problemas marcados en su línea; presentaciones de ejemplo, matemáticas, imágenes y fondos entre ellas (suelta un archivo de imagen en el editor); enlaces a la documentación. Un panel de archivos contiene el proyecto: tus temas, tipos y archivos de datos, y los medios que sueltes, con la estructura que construye el comando slides. Una pestaña Formato escribe el Markdown por ti, con Deshacer: negrita, cursiva, subrayado, listas, una tabla a partir de una cuadrícula, la alineación del texto de la diapositiva y enlaces. Todos los paneles se redimensionan.

🔗

Compartir, guardar, conservar

Un enlace lleva la propia presentación, comprimida en su #. Guárdala como HTML, PDF vectorial, o una presentación editable de PowerPoint u OpenDocument, todo generado en tu navegador, o descarga el proyecto entero como .zip. Tu borrador sobrevive a una recarga, solo en tu navegador.

Qué hace

Primero HTML. El resto sin un navegador que manejar.

marp-cli renderiza imágenes y PDF manejando un Chrome headless. Aquí lo hacen en su lugar las bibliotecas Go de la propia flota. Imágenes y PDF llegaron en v0.1.0, PPTX, matemáticas y resaltado en v0.2.0, ODP, títulos ajustados y HCL en v0.3.0, el PDF vectorial (con texto seleccionable) y los emoji en v0.4.0; en v0.5.0 el PPTX y el ODP pasaron a ser editables, mientras que el PPTX de marp-cli son imágenes; v0.6.0 añade watch, serve, transiciones y las opciones de marp-cli, v0.7.0 la vista de presentador — consulta la documentación.

HTML v0.1.0

Una página por presentación, tal como la renderiza Marp: cada diapositiva es una <section> con marco SVG que se adapta a la ventana, el CSS del tema y un visor con teclado.

slides expand v0.1.0

La presentación con sus plantillas evaluadas y sus tipos convertidos en directivas puntuales, reescrita como Markdown de Marp sin más — para que cualquier herramienta de Marp pueda continuar desde ahí.

notes, kinds, themes v0.1.0

slides notes imprime las notas del presentador; slides kinds y slides themes listan lo que una presentación puede nombrar.

slides.yaml v0.1.0

Un archivo de configuración para una carpeta de presentaciones: tipos compartidos, temas, datos de plantilla, opciones HTML e idioma.

PNG / JPEG v0.1.0

--images png|jpeg escribe una imagen por diapositiva (deck.001.png, …), --image la primera. Renderizado por go-webengine, un motor de navegador en Go — no un Chrome headless. --image-scale 2 renderiza al doble de densidad.

PDF v0.1.0

--pdf, o -o deck.pdf: una página por diapositiva con el tamaño de la diapositiva, con un índice de diapositivas y títulos, escrito por go-pdfkit. Las fuentes van incrustadas; nada toca la red. Desde v0.4.0 las páginas son vectoriales: texto seleccionable, formas nítidas, 758 KiB para 100 diapositivas frente a los 837 KiB de marp-cli (--pdf-raster conserva una imagen por página).

PPTX v0.2.0

--pptx, o -o deck.pptx: con sus notas del presentador y los metadatos de la presentación, escrito por go-ooxml. Desde v0.5.0 las diapositivas son editables — cuadros de texto con las fuentes de la propia presentación (incrustadas), formas, degradados, imágenes almacenadas una sola vez — mientras que las de marp-cli son imágenes (--pptx-raster las conserva). 100 diapositivas: 348 ms y 760 KiB, frente a los 7,8 s y 7,2 MiB de marp-cli.

Matemáticas y resaltado v0.2.0

$…$ y $$…$$ compuestos por go-tex, código delimitado resaltado por go-rouge — en la página HTML, las imágenes y el PDF.

ODP v0.3.0

--odp, o -o deck.odp: una presentación OpenDocument con sus notas del presentador — editable desde v0.5.0, como el PPTX (--odp-raster para una imagen por diapositiva).

Títulos ajustados v0.3.0

# <!-- fit --> Title ocupa el ancho de la diapositiva en una sola línea, en la página y en cada exportación.

Emoji v0.4.0

Los códigos :smile: y los emoji Unicode (😄 👩‍💻 🇫🇷) se convierten en imágenes Twemoji exactamente como las escribe Marp Core — pero incrustadas desde go-icons/twemoji en lugar de cargadas desde un CDN, así que no necesitan red y se dibujan en la página, las imágenes, el PDF, el PPTX y el ODP. Emoji →

HCL v0.3.0

HCL2 allí donde una presentación admite YAML — un front matter ---hcl, slides.hcl, archivos de tipos y de datos — para expresiones y funciones: footer = "${upper(data.company)} · ${page()}/${total()}". slides expand reescribe el front matter como YAML. HCL →

Watch, serve, preview v0.6.0

--watch vuelve a construir lo que cambia y recarga las páginas abiertas; --server dir sirve una carpeta de presentaciones — deck.md como página, deck.md?pdf, ?pptx, ?png, ?notes convertidos bajo demanda — en 127.0.0.1, comprobando Host y Origin, sin salir nunca de la carpeta; --preview abre el navegador. Las rutas y la recarga en vivo de marp-cli, sin su puerto abierto. Línea de comandos →

Muchas presentaciones v0.6.0

slides -I decks/ -o site/ convierte todas las presentaciones de una carpeta y replica el árbol; varios archivos, una carpeta o un patrón a la vez, -P en paralelo.

Transiciones v0.6.0

El <!-- transition: fade 1s --> de marp-cli, con sus 33 transiciones integradas, reproducidas con la View Transition API del navegador; un controlador en pantalla; --template bare.

Notas en PDF, metadatos, opciones de marp-cli v0.6.0

--notes escribe las notas del presentador como texto, --pdf-notes las coloca en las páginas del PDF, --pdf-outlines sus marcadores; --title, --author, --keywords, --url, --og-image, --theme; se leen el .marprc de marp-cli y --config-file (JSON, YAML).

Vista de resumen v0.8.0

Pulsa o: todas las diapositivas en una cuadrícula, las flechas eligen una, Intro o un clic va a ella — sobre la página o sobre la vista de presentador, con las URL de marp-cli y su sincronización, sin red. Las diapositivas están etiquetadas y son enfocables; el resumen cerrado es inerte. Línea de comandos →

Vista de presentador v0.7.0

Pulsa p en la página: la diapositiva actual, el paso siguiente, tus notas (escapadas, nunca en lo que lee el lector de pantalla del público), un reloj y un temporizador, en una segunda ventana que sigue a la primera y a la que la primera sigue — las URL y la sincronización de marp-cli, mediante localStorage, sin servidor y sin red. Unos 10 KB por página. Línea de comandos →

Números de línea y llamadas en el código v0.8.0

```go {lineNumbers} numera las líneas de un bloque de código ({lineNumbers=10} empieza en 10); un marcador en un comentario al final de una línea (// <1>) seguido de una lista numerada da un disco numerado en la línea y en su nota — en la página, las imágenes, el PDF, el PPTX y el ODP. Los números y los discos no se copian con el código. Matemáticas y código →

La organización

Repositorios

slides v0.13.0

El comando slides y su biblioteca: el Markdown de Marp analizado y renderizado en Go, con plantillas de Go y tipos de diapositiva encima. Publicado como v0.13.0: go install github.com/go-slides/slides/cmd/slides@latest.

docs v0.13

La documentación (Hugo + Hextra), que describe v0.13.0: primeros pasos, compatibilidad con Marp, plantillas, tipos y línea de comandos. Código →

vscode v0.3.0

La extensión de VS Code, como Marp for VS Code lo es de Marp: presentaciones con vista previa en el panel Markdown de VS Code gracias a go-slides compilado a WebAssembly (sin binario, funciona en vscode.dev), desplazamiento sincronizado con el editor a través de las plantillas, errores en el panel Problemas, autocompletado de directivas, tipos y funciones de plantilla, una vista de resumen y una de presentador junto al editor, exportación mediante slides. Instala el .vsix adjunto a la release de GitHub; la publicación en Marketplace y Open VSX está preparada, pero aún no está disponible. VS Code →

brand listo

La marca — una diapositiva en su soporte, en el índigo de la familia de documentos — y todos sus formatos: SVG, PNG, JPG, ICO, ICNS, avatar e imagen social.

Parte de la familia de documentos.

Junto con go-richdoc, go-ooxml, go-tex y go-docutils: documentos leídos, compuestos y escritos en Go, sin una sola línea de C.

La organización en GitHub →