Repositorios de contenido¶
Un repositorio de contenido es un repositorio de git corriente con una forma concreta dentro.
<repositorio>/
├── didacta.yaml ajustes del repositorio
├── taxonomy.yaml categorías, temas, subtemas y bloques
├── content/<categoría>/<tema>/<subtema>/<unidad>/
│ ├── unit.yaml id, título, sitio, idiomas, estado
│ ├── es.tex va.tex en.tex el mismo contenido, un fichero por idioma
│ └── figures/ sus imágenes
├── problems/<categoría>/<tema>/<subtema>/<unidad>/
│ ├── unit.yaml
│ └── es.tex va.tex en.tex enunciado + resultado + solución + corrección
├── courses/<asignatura>/
│ ├── course.yaml lo que no cambia entre cursos
│ └── <curso>/
│ ├── year.yaml selección, orden, estructura
│ └── <documento>.tex la composición
└── generated/ el catálogo que lee la aplicación
Se trabaja desde cualquier sitio dentro del repositorio: la raíz se localiza
subiendo hasta encontrar didacta.yaml, igual que hace git con .git.
Las tres carpetas¶
content/- La teoría. Definiciones, teoremas, ejemplos, demostraciones.
problems/- Los ejercicios. La misma forma que una unidad de teoría, pero con los cuatro campos de un problema.
courses/- Las composiciones. Aquí no hay materia: cada línea es una referencia a
algo de
content/o deproblems/.
didacta.yaml¶
Un curso académico¶
# courses/am-iii/2025-2026/year.yaml
course: am-iii
year: 2025-2026
group: A
language: es
documents:
- id: tema-1
kind: theory
title:
es: Tema 1. Espacios normados
profiles: [slides, notes]
structure:
- section:
es: Normas
- unit: analysis/normed/definition
- unit: analysis/normed/banach
# - unit: analysis/normed/dedekind
Las líneas comentadas son un estado, no basura
# - unit: … es material que existe y que este año no se da. Volver a
activarlo es quitar una almohadilla, y ésa es la edición más común al
preparar un curso.
Por eso Didacta edita estos ficheros sin pasarlos por un parser de YAML: un round trip se llevaría por delante los comentarios --y con ellos la lista de lo que quedó fuera-- en silencio y en la primera edición. Cuando no reconoce una forma, se niega y ofrece el editor de texto, en lugar de adivinar.
Duplicar un curso¶
Copia el fichero de estructura. Las unidades no se tocan: lo que se duplica es la selección y el orden.
Varios repositorios¶
Didacta abre todos los que le digas a la vez, cada uno con su color, y los enseña como una sola biblioteca. Cada cambio va al repositorio del que salió el fichero.
flowchart TB
subgraph D["Tu Didacta"]
L["Una sola biblioteca"]
end
R1["problemas-analisis<br/>todo el departamento"] --> L
R2["apuntes-javier<br/>solo tú"] --> L
R3["master-analisis<br/>los tres del máster"] --> L
Eso permite repartir el material según quién debe verlo, que es lo que en la práctica hace falta:
| Repositorio | Quién entra | Qué lleva |
|---|---|---|
problemas-analisis |
todo el departamento | la colección de problemas común |
apuntes-javier |
solo su autor | sus apuntes de teoría |
master-analisis |
los tres que dan el máster | una asignatura compartida |
Quién ve qué lo decide GitHub, con los permisos que ya tiene.
Lo que hay que saber si se reparte una asignatura¶
Dos cosas solo pueden ir mal con más de un repositorio abierto, y las dos las comprueba Didacta:
Los metadatos que discrepan. Una asignatura repartida se declara en los
dos course.yaml, y los dos tienen que decir lo mismo. Si uno pone «Análisis
Matemático I» y el otro «Analisis Matematico I», el que se enseña depende de
en qué orden se abrieron los repositorios.
Los documentos que llaman fuera de su repositorio. Un documento y las unidades que compone tienen que vivir en el mismo: LaTeX resuelve las rutas bajo una sola raíz, así que un documento que llama al de al lado compila en la máquina que tiene los dos abiertos y no compila en la de quien solo tiene uno. Eso no se descubre editando; se descubre cuando otra persona va a dar la clase.
El catálogo¶
generated/ lleva tres JSON con todo lo que la aplicación necesita para
enseñar la biblioteca sin abrir dos mil ficheros. Lo escribe el motor:
Son datos derivados: regenerarlos da los mismos bytes. La aplicación de escritorio los regenera sola cuando detecta que se han quedado viejos.
Para la biblioteca entera de 2147 unidades pesan 77 kB comprimidos, que es lo que permite publicarlos en una página estática sin ningún servidor detrás.

