YAML Format
General structure
Section titled "General structure"meta: portada: "Title shown on the cover slide" unidad: "Unit 00" output: "00_filename-prefix" # output filename prefix
objetivos: - "Learning objective 1" - "Learning objective 2"
indice: - "First section" - "Second section"
secciones: - indice: 1 # 1-based reference to the indice: list slides: - tipo: texto texto: "Introductory content."
conclusion: - "Conclusion point 1" - "Conclusion point 2"
referencias: - ["Resource name", "https://example.url.com"]Fields common to all slides
Section titled "Fields common to all slides"subtitulo: — italic text shown between the section indicator and the slide content.
Available on bullets, texto, java, python and all other code types,
diagrama, terminal, salida, aviso, comparar_* and dos_columnas.
- tipo: bullets subtitulo: "Key features" items: - "Point one" - "Point two"notas: — text inserted into the ODP presenter notes
(visible in LibreOffice presentation mode). Available on any slide.
- tipo: texto notas: "Remember to mention the practical case study." texto: "Content visible on the slide."Slide types
Section titled "Slide types"Basic content
Section titled "Basic content"- tipo: texto texto: "Free text for the slide."\n inside the value produces a real line break in the slide:
- tipo: texto texto: "First line.\nSecond line shown as a separate paragraph."- tipo: bullets items: - "Point one" - "Point two"Auto-split: more than 14 items generates multiple [N/M] slides.
Automatic font size: >6 items → 18 pt; >10 items → 13 pt.
- tipo: aviso nivel: warning # info | warning | tip texto: "Important message."nivel | Colour | Use |
|---|---|---|
warning | orange | Something that can go wrong |
info | blue | Clarifying note or extra context |
tip | green | Advice or best practice |
- tipo: cita cita: "Simplicity is the ultimate sophistication." autor: "Leonardo da Vinci" fuente: "Notebooks, 1490" # optionalSource code
Section titled "Source code"All code types support:
texto: |— YAML literal block (recommended); preserves original indentation.fichero:— optional; shows the file path in grey above the code.subtitulo:— italic text below the section indicator.- Auto-split: more than 25 lines generates multiple
[1/N]slides. - Auto font sizing: ≤12 lines → 16 pt · 13-16 → 14 pt · 17-21 → 12 pt · 22-27 → 10 pt · >27 → 9 pt.
Available types
Section titled "Available types"tipo | Language | Highlighting |
|---|---|---|
java | Java | keywords, strings, comments, numbers, @ annotations |
python | Python | keywords, strings, comments, numbers, @ decorators |
javascript | JavaScript | keywords, strings, comments, numbers |
typescript | TypeScript | same as JS + interface, type, enum, readonly, abstract, primitive types… |
xml / html | XML / HTML | tags, attributes, values, comments |
jsp | JSP | HTML + scriptlets <% %> + EL ${} |
css | CSS | selectors, properties, values, at-rules |
json | JSON | keys, strings, numbers, booleans |
yaml | YAML | keys, values, comments, anchors |
dockerfile | Dockerfile | instructions, strings, comments, variables $VAR/${VAR} |
terraform / hcl | Terraform HCL | blocks, strings, comments, interpolations ${…} |
codigo | pseudocode | monospaced, no highlighting |
- tipo: java fichero: "src/main/java/com/example/Hello.java" # optional texto: | @RestController public class HelloController {
@GetMapping("/hello") public String hello(@RequestParam String name) { return "Hello, " + name + "!"; } }- tipo: python fichero: "src/utils.py" # optional texto: | from dataclasses import dataclass
@dataclass class User: name: str email: str
def greet(u: User) -> str: return f"Hello, {u.name}!"- tipo: javascript fichero: "src/api/users.js" # optional texto: | const BASE = '/api/users';
export async function getUser(id) { const res = await fetch(`${BASE}/${id}`); if (!res.ok) throw new Error('Not found'); return res.json(); }- tipo: typescript fichero: "src/services/UserService.ts" # optional texto: | interface User { id: number; name: string; roles: readonly string[]; }
@Injectable() export class UserService { constructor(private readonly repo: UserRepository) {}
async findById(id: number): Promise<User | null> { return this.repo.findOne({ where: { id } }); } }- tipo: dockerfile fichero: "Dockerfile" # optional 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" # optional 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}" } }Same structure (fichero: optional + texto: |), changing tipo: to:
xml, html, jsp, css, json, yaml
- tipo: yaml fichero: "docker-compose.yml" texto: | services: app: image: my-app:latest ports: - "8080:8080" environment: DB_HOST: db DB_PORT: "5432"Monospaced text without syntax highlighting. Useful for pseudocode, generic configuration files or any fixed-width text.
- tipo: codigo fichero: "config/settings.conf" # optional texto: | server.port=8080 db.url=jdbc:postgresql://localhost/mydb db.pool.size=10Code with inline colour markers. Useful for highlighting specific lines
without language-specific syntax highlighting.
items: can be strings or dicts with cmt: (grey) or ok: (green).
- tipo: code items: - {cmt: "# Server configuration"} - "server.port=8080" - {ok: "db.connected=true"} - "db.pool.size=10"Terminal and output
Section titled "Terminal and output"Interactive shell session. Plain strings are user commands
(green $ prompt). Dicts allow variants:
- tipo: terminal items: - {cmt: "Build the project"} - "mvn clean package" - {out: "BUILD SUCCESS"} - {cmt: "Run"} - "java -jar target/app.jar" - {ok: "Server listening on port 8080"}| Dict | Style | Use |
|---|---|---|
{cmt: "..."} | grey | Descriptive comment |
| plain string | green with $ | User command |
{root: "..."} | red with # | Root command |
{out: "..."} | white | Standard output |
{ok: "..."} | green | Success or confirmation |
{err: "..."} | red | Error or warning |
{cont: "..."} | white | Line continuation (no prompt) |
Plain text only, no prompt. Useful for showing logs or process output.
- tipo: salida items: - "Starting application..." - {ok: "Database connected"} - {err: "WARN: variable not defined"} - "Server on port 8080"ASCII diagram with monospaced font. Useful for architectures,
flows and data structures. Use texto: | to preserve indentation.
The block is centred as a unit on the slide.
- tipo: diagrama texto: | ┌─────────────┐ ┌─────────────┐ │ Client │────▶│ Server │ └─────────────┘ └──────┬──────┘ │ ┌──────▼──────┐ │ DB │ └─────────────┘Auto font sizing by line count (same as code): ≤12 → base size · 13-16 → base−1 pt · 17-21 → base−2 pt · >27 → 9 pt minimum.
Special layouts
Section titled "Special layouts"Two text lists side by side. For conceptual comparisons: pros/cons, advantages/disadvantages, two approaches explained in words. Items are text bullets, with no code highlighting.
- tipo: dos_columnas izquierda: - "Easy to learn" - "Huge community" - "Mature ecosystem" derecha: - "Dynamic typing" - "GIL limits parallelism" - "Slow for CPU-bound tasks"Two code blocks side by side, with syntax highlighting. For before/after, good/bad practice or two implementations of the same problem. Items are lines of code (plain strings), not text bullets.
The base type comparar uses Java highlighting. Variants for other languages:
comparar_python, comparar_js, comparar_xml, comparar_html,
comparar_css, comparar_json, comparar_jsp
- tipo: comparar subtitulo: "Before → After" izquierda: - "// Classic loop" - "for (int i=0; i<list.size(); i++) {" - " process(list.get(i));" - "}" derecha: - "// Stream" - "list.forEach(this::process);"- tipo: tabla cabeceras: ["Column A", "Column B"] filas: - ["value 1", "value 2"] - ["value 3", "value 4"] colores: # optional cabecera: "#1e3a5f" texto_cabecera: "#ffffff" texto: "#1a1a1a" borde: "#94a3b8"- tipo: imagen ruta: "assets/diagram.png"Image on the left, bullet list on the right.
- tipo: imagen_texto ruta: "assets/architecture.png" items: - "Presentation layer (React)" - "REST API (Spring Boot)" - "Database (PostgreSQL)"