refactor: migrar reportes a Typst con plantilla compartida y scripts

- Reemplazar plantillas Markdown por template/report.typ y template/main.typ
- Agregar primer reporte: respuesta-observaciones-avance-1
- Agregar scripts build.sh, preview.sh y common.sh con salida en pdf/
- Actualizar README y AGENTS.md; simplificar .gitignore
This commit is contained in:
2026-10-28 09:53:53 -03:00
parent d5030bdc0d
commit 2009e91465
15 changed files with 310 additions and 112 deletions
+42
View File
@@ -0,0 +1,42 @@
#import "/template/report.typ": report, project
#show: report.with(
title: "Título del reporte",
subtitle: "Subtítulo opcional",
kind: "Informe técnico",
date: datetime(year: 2026, month: 10, day: 28),
version: "0.1",
authors: (
(name: "Nombre Apellido"),
),
history: (
(version: "0.1", date: "2026-10-28", author: "Nombre Apellido", changes: "Versión inicial."),
),
)
= Introducción
Contexto del reporte, objetivo y alcance. Los datos del proyecto están disponibles como
`project`, por ejemplo #project.code.
= Desarrollo
== Metodología
Describa los procedimientos, materiales y criterios utilizados.
== Resultados
#figure(
table(
columns: 3,
[Métrica], [Versión anterior], [Versión actual],
[Métrica A], [—], [—],
[Métrica B], [—], [—],
),
caption: [Ejemplo de tabla comparativa.],
)
= Conclusiones
Síntesis de los resultados y próximos pasos.
+101
View File
@@ -0,0 +1,101 @@
// Plantilla general de reportes del proyecto FONDEF IT24I0091 Manito.
#let project = (
code: "IT24I0091",
name: "Manito: Potenciando el aprendizaje inicial con IA y robótica colaborativa",
program: "FONDEF IT 2024 · ANID",
institution: "Universidad San Sebastián",
partner: "Servicio Local de Educación Pública Llanquihue",
)
// Typst no traduce los nombres de los meses al formatear fechas.
#let months = (
"enero", "febrero", "marzo", "abril", "mayo", "junio",
"julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre",
)
#let format-date(date) = [#date.day() de #months.at(date.month() - 1) de #date.year()]
#let title-page(title, subtitle, kind, date, version, authors) = page(header: none, footer: none)[
#set par(justify: false)
#text(size: 10pt, fill: luma(90))[#project.program #h(1fr) Proyecto #project.code]
#line(length: 100%, stroke: 0.5pt + luma(160))
#text(size: 12pt)[#project.name]
#v(1fr)
#text(size: 11pt, fill: luma(90), tracking: 0.08em)[#upper(kind)]
#v(0.4em)
#text(size: 24pt, weight: "bold")[#title]
#if subtitle != none {
v(0.2em)
text(size: 15pt)[#subtitle]
}
#v(1fr)
#table(
columns: (auto, 1fr),
stroke: none,
inset: (x: 0pt, y: 4pt),
column-gutter: 1.5em,
[*Versión*], [#version],
[*Fecha*], [#format-date(date)],
[*Autores*], [#authors.map(author => author.name).join(linebreak())],
[*Institución*], [#project.institution],
[*Entidad asociada*], [#project.partner],
)
]
#let report(
title: "Título del reporte",
subtitle: none,
kind: "Informe técnico",
date: datetime.today(),
version: "1.0",
authors: (),
history: (),
body,
) = {
set document(title: title, author: authors.map(author => author.name), date: date)
set page(paper: "us-letter", margin: (x: 2.5cm, top: 2.8cm, bottom: 2.5cm))
set text(font: "New Computer Modern", size: 11pt, lang: "es", region: "cl")
set par(justify: true, leading: 0.65em)
set heading(numbering: "1.1")
show heading.where(level: 1): set block(above: 1.8em, below: 1em)
set table(stroke: 0.5pt + luma(150), inset: 6pt)
show figure.where(kind: table): set figure.caption(position: top)
title-page(title, subtitle, kind, date, version, authors)
show table.cell.where(y: 0): set text(weight: "bold")
set page(
header: {
set text(size: 9pt, fill: luma(90))
grid(columns: (1fr, auto), [FONDEF #project.code · #kind], [#title])
line(length: 100%, stroke: 0.4pt + luma(160))
},
footer: context {
set text(size: 9pt, fill: luma(90))
align(center)[Página #counter(page).display() de #counter(page).final().first()]
},
)
counter(page).update(1)
if history.len() > 0 {
heading(numbering: none, outlined: false)[Control de versiones]
table(
columns: (auto, auto, auto, 1fr),
[Versión], [Fecha], [Autor], [Cambios],
..history.map(entry => (entry.version, entry.date, entry.author, entry.changes)).flatten(),
)
v(1.5em)
}
outline(title: [Índice], indent: auto)
pagebreak()
body
}