Formato YAML
Estructura general
Sección titulada «Estructura general»meta: portada: "Título visible en la portada" unidad: "Unidad 00" output: "00_nombre-fichero" # prefijo del fichero de salida
objetivos: - "Objetivo didáctico 1" - "Objetivo didáctico 2"
indice: - "Primera sección" - "Segunda sección"
secciones: - indice: 1 # referencia 1-based a la lista indice: slides: - tipo: texto texto: "Contenido introductorio."
conclusion: - "Punto de conclusión 1" - "Punto de conclusión 2"
referencias: - ["Nombre del recurso", "https://url.ejemplo.com"]Campos comunes a todos los slides
Sección titulada «Campos comunes a todos los slides»subtitulo: — texto en cursiva que aparece entre el indicador de sección y el contenido.
Disponible en bullets, texto, java, python y todos los demás tipos de código,
diagrama, terminal, salida, aviso, comparar_* y dos_columnas.
- tipo: bullets subtitulo: "Características principales" items: - "Punto uno" - "Punto dos"notas: — texto que se inserta en las notas del presentador del ODP
(visible en el modo presentación de LibreOffice). Disponible en cualquier slide.
- tipo: texto notas: "Recordar mencionar el caso práctico del proyecto." texto: "Contenido visible en la diapositiva."Tipos de slide
Sección titulada «Tipos de slide»Contenido básico
Sección titulada «Contenido básico»- tipo: texto texto: "Texto libre de la diapositiva."\n dentro del valor produce un salto de línea real en la slide:
- tipo: texto texto: "Primera línea.\nSegunda línea visible como párrafo separado."- tipo: bullets items: - "Punto uno" - "Punto dos"Auto-split: más de 14 ítems genera varias slides [N/M].
Tamaño de fuente automático: >6 ítems → 18 pt; >10 ítems → 13 pt.
- tipo: aviso nivel: warning # info | warning | tip texto: "Mensaje importante."nivel | Color | Uso |
|---|---|---|
warning | naranja | Algo que puede salir mal |
info | azul | Nota aclaratoria o contexto adicional |
tip | verde | Consejo o buena práctica |
- tipo: cita cita: "La simplicidad es la máxima sofisticación." autor: "Leonardo da Vinci" fuente: "Cuadernos, 1490" # opcionalCódigo fuente
Sección titulada «Código fuente»Todos los tipos de código admiten:
texto: |— bloque literal YAML (recomendado); respeta la indentación original.fichero:— opcional; muestra la ruta en gris encima del código.subtitulo:— texto en cursiva debajo del indicador de sección.- Auto-split: más de 25 líneas genera varias slides
[1/N]. - Auto-sizing de fuente: ≤12 líneas → 16 pt · 13-16 → 14 pt · 17-21 → 12 pt · 22-27 → 10 pt · >27 → 9 pt.
Tipos disponibles
Sección titulada «Tipos disponibles»tipo | Lenguaje | Resaltado |
|---|---|---|
java | Java | palabras clave, strings, comentarios, números, anotaciones @ |
python | Python | palabras clave, strings, comentarios, números, decoradores @ |
javascript | JavaScript | palabras clave, strings, comentarios, números |
typescript | TypeScript | igual que JS + interface, type, enum, readonly, abstract, tipos primitivos… |
xml / html | XML / HTML | etiquetas, atributos, valores, comentarios |
jsp | JSP | HTML + scriptlets <% %> + EL ${} |
css | CSS | selectores, propiedades, valores, at-rules |
json | JSON | claves, strings, números, booleanos |
yaml | YAML | claves, valores, comentarios, anchors |
dockerfile | Dockerfile | instrucciones, strings, comentarios, variables $VAR/${VAR} |
terraform / hcl | Terraform HCL | bloques, strings, comentarios, interpolaciones ${…} |
codigo | pseudocódigo | monoespaciado sin resaltado |
- tipo: java fichero: "src/main/java/com/empresa/Hola.java" # opcional texto: | @RestController public class HolaController {
@GetMapping("/hola") public String hola(@RequestParam String nombre) { return "Hola, " + nombre + "!"; } }- tipo: python fichero: "src/utils.py" # opcional texto: | from dataclasses import dataclass
@dataclass class Usuario: nombre: str email: str
def saludar(u: Usuario) -> str: return f"Hola, {u.nombre}!"- tipo: javascript fichero: "src/api/usuarios.js" # opcional texto: | const BASE = '/api/usuarios';
export async function getUsuario(id) { const res = await fetch(`${BASE}/${id}`); if (!res.ok) throw new Error('No encontrado'); return res.json(); }- tipo: typescript fichero: "src/services/UserService.ts" # opcional texto: | interface Usuario { id: number; nombre: string; roles: readonly string[]; }
@Injectable() export class UserService { constructor(private readonly repo: UserRepository) {}
async findById(id: number): Promise<Usuario | null> { return this.repo.findOne({ where: { id } }); } }- tipo: dockerfile fichero: "Dockerfile" # opcional texto: | FROM eclipse-temurin:21-jre-alpine AS base WORKDIR /app
FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline COPY src/ src/ RUN mvn package -DskipTests
FROM base ARG JAR_FILE=target/*.jar COPY --from=build /build/${JAR_FILE} app.jar EXPOSE 8080 ENV JAVA_OPTS="-Xmx512m" ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]- tipo: terraform fichero: "main.tf" # opcional texto: | terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } }
variable "region" { type = string default = "eu-west-1" }
resource "aws_instance" "app" { ami = "ami-0c02fb55956c7d316" instance_type = "t3.micro" tags = { Name = "app-${var.region}" } }Misma estructura (fichero: opcional + texto: |), cambiando tipo: por:
xml, html, jsp, css, json, yaml
- tipo: yaml fichero: "docker-compose.yml" texto: | services: app: image: mi-app:latest ports: - "8080:8080" environment: DB_HOST: db DB_PORT: "5432"Monoespaciado sin resaltado de sintaxis. Útil para pseudocódigo, configuraciones genéricas o cualquier texto de ancho fijo.
- tipo: codigo fichero: "config/settings.conf" # opcional texto: | server.port=8080 db.url=jdbc:postgresql://localhost/mydb db.pool.size=10Código con marcadores de color inline. Útil para resaltar líneas concretas
sin resaltado de lenguaje específico.
Los items: pueden ser strings o dicts con cmt: (gris) u ok: (verde).
- tipo: code items: - {cmt: "# Configuración del servidor"} - "server.port=8080" - {ok: "db.connected=true"} - "db.pool.size=10"Terminal y salida
Sección titulada «Terminal y salida»Sesión interactiva de shell. Los strings planos son comandos de usuario
(prompt verde $). Los dicts permiten variantes:
- tipo: terminal items: - {cmt: "Compilar el proyecto"} - "mvn clean package" - {out: "BUILD SUCCESS"} - {cmt: "Ejecutar"} - "java -jar target/app.jar" - {ok: "Servidor en puerto 8080"}| Dict | Estilo | Uso |
|---|---|---|
{cmt: "..."} | gris | Comentario descriptivo |
| string plano | verde con $ | Comando de usuario |
{root: "..."} | rojo con # | Comando como root |
{out: "..."} | blanco | Salida estándar |
{ok: "..."} | verde | Éxito o confirmación |
{err: "..."} | rojo | Error o aviso |
{cont: "..."} | blanco | Continuación de línea (sin prompt) |
Solo texto plano, sin prompt. Útil para mostrar logs o salida de proceso.
- tipo: salida items: - "Iniciando aplicación..." - {ok: "Base de datos conectada"} - {err: "WARN: variable no definida"} - "Servidor en puerto 8080"Diagrama ASCII con fuente monoespaciada. Útil para arquitecturas,
flujos y estructuras de datos. Usar texto: | para preservar la indentación.
El bloque se centra como unidad en el slide.
- tipo: diagrama texto: | ┌─────────────┐ ┌─────────────┐ │ Cliente │────▶│ Servidor │ └─────────────┘ └──────┬──────┘ │ ┌──────▼──────┐ │ BBDD │ └─────────────┘Auto-sizing por número de líneas (igual que código): ≤12 → tamaño base · 13-16 → base−1 pt · 17-21 → base−2 pt · >27 → 9 pt mínimo.
Layouts especiales
Sección titulada «Layouts especiales»Dos listas de texto en paralelo. Para comparaciones conceptuales: pros/contras, ventajas/inconvenientes, dos enfoques explicados con palabras. Los ítems son bullets de texto, sin resaltado de código.
- tipo: dos_columnas izquierda: - "Sencillo de aprender" - "Comunidad enorme" - "Ecosistema maduro" derecha: - "Tipado dinámico" - "GIL limita paralelismo" - "Lento en CPU-bound"Dos bloques de código enfrentados, con resaltado de sintaxis. Para antes/después, buena/mala práctica o dos implementaciones del mismo problema. Los ítems son líneas de código (strings planos), no bullets de texto.
El tipo base comparar usa resaltado Java. Variantes para otros lenguajes:
comparar_python, comparar_js, comparar_xml, comparar_html,
comparar_css, comparar_json, comparar_jsp
- tipo: comparar subtitulo: "Antes → Después" izquierda: - "// Bucle clásico" - "for (int i=0; i<list.size(); i++) {" - " process(list.get(i));" - "}" derecha: - "// Stream" - "list.forEach(this::process);"- tipo: tabla cabeceras: ["Columna A", "Columna B"] filas: - ["valor 1", "valor 2"] - ["valor 3", "valor 4"] colores: # opcional cabecera: "#1e3a5f" texto_cabecera: "#ffffff" texto: "#1a1a1a" borde: "#94a3b8"- tipo: imagen ruta: "assets/diagrama.png"Imagen a la izquierda y lista de bullets a la derecha.
- tipo: imagen_texto ruta: "assets/arquitectura.png" items: - "Capa de presentación (React)" - "API REST (Spring Boot)" - "Base de datos (PostgreSQL)"