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.
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.
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.
--- 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.
![bg], sus tamaños y filtros, fondos divididos y las palabras clave de imagen que Marp entiende.
Encabezado, pie y paginación; notas del presentador a partir de comentarios; listas fragmentadas; <style scoped> para el CSS de una sola diapositiva.
default, gaia y uncover, que se eligen con theme: como en Marp.
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.
{{ .title }} lee el front matter, y su mapa data: guarda todo lo demás que la presentación necesite.
Un {{ range }} que emite --- es un generador de diapositivas: una por elemento, por ponente, por versión.
{{ page }} y {{ total }} solo se conocen una vez dividida la presentación, y se rellenan entonces.
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.
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.
title, section, content y blank, todos redefinibles.
En el kinds: del front matter, o en un archivo YAML de tipos que nombran todas las presentaciones de un equipo.
Cambiar de tipo borra lo que fijó el anterior, así que una clase o un pie no te siguen a la sección siguiente.
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.
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.
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.
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.
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.
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.
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í.
slides notes imprime las notas del presentador; slides kinds y slides themes listan lo que una presentación puede nombrar.
Un archivo de configuración para una carpeta de presentaciones: tipos compartidos, temas, datos de plantilla, opciones HTML e idioma.
--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, 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, 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.
$…$ y $$…$$ compuestos por go-tex, código delimitado resaltado por go-rouge — en la página HTML, las imágenes y el PDF.
--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).
# <!-- fit --> Title ocupa el ancho de la diapositiva en una sola línea, en la página y en cada exportación.
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 →
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 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 →
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.
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.
--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).
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 →
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 →
```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 →
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.
La documentación (Hugo + Hextra), que describe v0.13.0: primeros pasos, compatibilidad con Marp, plantillas, tipos y línea de comandos. Código →
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 →
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.
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 →