Quarto
Sistema de publicación científica polilingüe y multi-formato
Sobre Quarto
Quarto es el sistema de publicación científica de Posit, sucesor explícito de RMarkdown. Mantiene la filosofía literate programming de Knuth (texto + código + resultados en un único documento fuente) y la arquitectura knitr → pandoc, pero rompe la dependencia exclusiva de R: el mismo .qmd puede ejecutarse con R (vía knitr), Python o Julia (vía Jupyter), e incluso Observable para piezas interactivas. Yihui Xie sigue al frente de knitr. El equipo de Quarto (Carlos Scheidegger, J.J. Allaire y otros) construye encima un front-end uniforme y multi-formato.
Instalación canónica y verificación:
# Quarto es una CLI independiente (no un paquete R).
# Descarga desde https://quarto.org/docs/get-started/
# o vía installers / chocolatey / homebrew.
# Verificación desde R:
quarto::quarto_version() # versión instalada
quarto::quarto_path() # binario detectado
system2("quarto", "check") # diagnóstico completo (R, Python, LaTeX...)Tres principios que conviene interiorizar antes de tocar nada serio:
- Un fuente, muchos formatos. Un
.qmdproduce HTML, PDF, Word, ePub, slides (reveal.js / beamer / pptx) y libros, cambiando únicamente la secciónformat:del YAML o del_quarto.yml. - Proyectos sobre documentos sueltos. A partir de tres o cuatro
.qmd, salir del documento aislado y declarar un proyecto (_quarto.yml) deja de ser opcional: centraliza formato, navegación, freeze y render. - Polilingüe real. Bloques R y Python conviven en el mismo documento. El engine (
knitrojupyter) se elige por documento o por proyecto. Esto es la diferencia operativa principal frente a RMarkdown.
Esta página cataloga las piezas que componen un flujo Quarto en R. El orden sigue jerarquía conceptual: primero la base (documento, proyecto, freeze), después los formatos de salida (HTML, PDF, slides, libros) y finalmente las aplicaciones avanzadas (informes parametrizados, manuscritos reproducibles).
Quarto Document
El documento Quarto (.qmd) es la unidad mínima de trabajo: un fichero de texto con front matter YAML, prosa en Markdown y chunks de código ejecutable. Es el reemplazo directo del .Rmd y el punto de entrada al resto del ecosistema.
A diferencia de RMarkdown, el motor de ejecución se elige explícitamente (engine: knitr o engine: jupyter). El resto de la pipeline (knitr → markdown intermedio → pandoc → formato final) se mantiene idéntica.
Cuándo usarlo
Cualquier análisis exploratorio, informe puntual, nota técnica o memo que mezcle código y prosa y vaya a producir UN solo fichero de salida. Si el documento es la unidad de trabajo (no parte de una web o de un libro), arranca aquí.
Cuándo NO usarlo
- Cuadernos puramente interactivos para ti mismo, sin intención de publicar: un
.Rcon# %%en RStudio / VS Code, o un.ipynbdirecto, es más ágil. - Aplicaciones interactivas reactivas. Shiny o Streamlit están pensadas para eso. Quarto soporta interactive documents (con Shiny o Observable) pero no es su terreno natural.
- Documentos sin código, donde no necesitas reproducibilidad: usar Markdown plano + pandoc, o LaTeX directamente, evita una dependencia.
Conceptos clave
- El YAML del front matter controla título, autores, formato(s) de salida y opciones de ejecución. Las opciones de chunk se prefieren en formato
#| key: valuedentro del bloque, no en el header{r}. format: html(u otro) puede recibir un sub-bloque con opciones específicas:toc,code-fold,theme,embed-resources…execute:a nivel de YAML aplica defaults a todos los chunks (echo,warning,cache,freeze).- El engine se autodetecta (R si hay
{r}, Jupyter si hay{python}/{julia}). Fíjalo conengine: knitrcuando quieras forzarlo. - Render desde R:
quarto::quarto_render("informe.qmd"). Desde CLI:quarto render informe.qmd --to html.
Patrón mínimo
---
title: "Informe trimestral"
author: "A. Navas"
date: today
format:
html:
toc: true
code-fold: true
embed-resources: true
execute:
echo: false
warning: false
---
## Introducción
```r
#| label: fig-ventas
#| fig-cap: "Ventas mensuales"
library(ggplot2)
ggplot(economics, aes(date, unemploy)) + geom_line()
```
El gráfico @fig-ventas muestra...Trampas habituales
- Working directory. Por defecto los chunks se ejecutan con el directorio del
.qmdcomocwd. Cambia conexecute-dir: projectcuando trabajes dentro de un proyecto conhere::here(). embed-resources: trueengorda el HTML. Imprescindible si vas a enviar el fichero por correo o subirlo suelto. Perjudicial si forma parte de una web (duplica CSS/JS en cada página).- Doble fuente para opciones de chunk.
{r, echo=FALSE}(estilo RMarkdown) sigue funcionando, pero el estilo#| echo: falsees el canónico en Quarto. Mezclar los dos en el mismo documento es ilegible.
Enlaces
Relacionados en esta página
Proyecto Quarto, siguiente paso cuando crecen los documentos.Freeze y caching, controla qué se re-ejecuta entre renders.
Proyecto Quarto
Un proyecto Quarto es un directorio con un fichero _quarto.yml en la raíz. Desde ese momento, Quarto trata todos los .qmd del árbol como parte de la misma unidad de publicación: comparten configuración por defecto, política de freeze, salida (_site/, _book/) y posibles perfiles (_quarto-prod.yml).
Es el modo de trabajo profesional. Cualquier salida que crezca por encima de uno o dos documentos debería estar en un proyecto.
Cuándo usarlo
- Web estática, libro, blog, curso, documentación interna, cualquier output multi-fichero.
- Un sólo documento pero con configuración compleja (paths absolutos, perfiles dev/prod, dependencias compartidas).
- Equipos: el
_quarto.ymlversionado en git garantiza quequarto renderproduce lo mismo en todas las máquinas.
Cuándo NO usarlo
Un único .qmd autocontenido para enviar a un colega. Crear un proyecto añade _quarto.yml + _freeze/ + _site/ y complica el versionado para nada.
Conceptos clave
project:declaratype(default,website,book,manuscript) youtput-dir(_sitepor defecto en web,_booken libros).format:en_quarto.ymlse mergea con el del documento individual. El del documento gana en caso de conflicto. Esto permite definir el tema globalmente y permitir overrides locales.- Perfiles (
profile:) habilitan combinaciones nombradas:quarto render --profile draftcarga_quarto-draft.ymlencima del base. resources:lista ficheros extra (datos, imágenes, descargables) que deben copiarse al output.quarto rendersin argumentos renderiza todo el proyecto.quarto render archivo.qmdrenderiza solo uno respetando la config global.
Patrón mínimo
# _quarto.yml
project:
type: website
output-dir: _site
resources:
- "data/*.csv"
website:
title: "Notas de análisis"
navbar:
left:
- href: index.qmd
text: Inicio
- href: about.qmd
text: Sobre
format:
html:
theme: cosmo
toc: true
code-fold: true
execute:
freeze: autoTrampas habituales
output-dirfuera del proyecto. Si lo apuntas a../public/, elresources:deja de funcionar como esperas y muchos paths relativos se rompen.- Conflictos entre YAML del proyecto y del documento. Cuando algo no se aplica, la primera comprobación es el merge: el documento puede estar sobrescribiendo silenciosamente.
quarto inspectayuda a verlo. - Renombrar el
.qmdraíz. En proyectosbookymanuscriptel nombre del fichero principal está acoplado a la salida. Renombrar requiere actualizar_quarto.ymly a vecesindex.qmdse sigue esperando explícitamente.
Enlaces
Relacionados en esta página
Quarto Document, unidad básica que el proyecto agrega.Website,Book,Manuscript, los tipos concretos de proyecto.
Freeze y caching
freeze y cache son los dos mecanismos que Quarto ofrece para evitar re-ejecutar código innecesariamente. Resuelven problemas distintos y se confunden con frecuencia:
cache(heredado de knitr) memoriza el resultado de un chunk concreto. Útil dentro de un mismo render iterativo.freezecongela todo el output computacional de un documento entre renders del proyecto. La salida intermedia se guarda en_freeze/y se versiona en git. Es lo que hace viable publicar una web con análisis pesados sin re-correrlos en cadaquarto render.
Cuándo usarlo
freeze: autopor defecto en cualquier web o libro con computación no trivial. Sin esto, regenerar el sitio al cambiar una sola página tipográfica re-ejecuta todo el cómputo del proyecto.freeze: true(siempre) cuando quieres garantizar que el HTML publicado refleja un análisis fechado y reproducible, útil para releases o entregables firmados.cache: truepor chunk en cómputos largos durante el desarrollo iterativo de un mismo documento.
Cuándo NO usarlo
- Documentos pensados para correr en CI con datos actualizados (e.g. dashboards diarios): congelar el output convierte el render en una operación cosmética. Aquí prefiere render manual programado, no
freeze.
Conceptos clave
freeze: autore-ejecuta sólo si el.qmdha cambiado.freeze: trueno re-ejecuta nunca (hay que invalidar a mano borrando_freeze/).- El directorio
_freeze/debe versionarse en git si quieres reproducibilidad real entre máquinas. Excepción: si lo regeneras en CI antes de publicar. cache: trueen chunks requiere identificar dependencias condependsoncuando un chunk depende de otro. En la práctica, conviene mantener los chunks independientes y dejarse llevar.- Invalidar todo:
quarto render --no-cache(no toca freeze) orm -r _freeze/(sí lo toca).
Patrón mínimo
# _quarto.yml
execute:
freeze: auto # re-ejecuta sólo si el .qmd cambió
cache: false # cache a nivel de chunk desactivado por defecto#| label: simulacion-pesada
#| cache: true
#| eval: true
# Forzar cache de chunk pesado durante el desarrollo
res <- simulacion_montecarlo(n = 1e6)Trampas habituales
_freeze/no versionado. Lo más común: añadir_freeze/a.gitignore“por higiene”. Resultado: el primerquarto renderen otra máquina re-ejecuta semanas de cómputo.freezeno captura cambios en datos externos. Si tu.qmdleedata.csvy el csv cambia pero el.qmdno,freeze: autono detecta nada. Toca invalidar manualmente o cambiar afreeze: falsepara ese documento.- Cache + variables globales.
cache: trueno rastrea cambios en objetos creados fuera del chunk. Si el chunk depende de undfdefinido arriba ydfcambia, el chunk cacheado seguirá devolviendo el resultado viejo.
Enlaces
Relacionados en esta página
Proyecto Quarto,freezese configura habitualmente a nivel de proyecto.
HTML
El formato HTML es el output por defecto y el más completo de Quarto. Soporta callouts, cross-references, código plegable, tabsets, panel layouts, theming basado en Bootstrap 5 (vía bslib), búsqueda y todo el ecosistema de widgets HTML (htmlwidgets, observable, plotly).
Cuándo usarlo
- Cualquier informe que vaya a leerse en pantalla (laptop, móvil).
- Documentos con gráficos interactivos, tablas filtrables (
DT,reactable) o mapas (leaflet). - Single source of truth del que después se puede derivar PDF para impresión.
Cuándo NO usarlo
- Documento que va a un comité / journal / regulador que exige PDF. Empieza por PDF y haz HTML secundario.
- Lectura offline a largo plazo en archivo institucional: el PDF tiene mejor garantía de fidelidad a 10 años vista.
Conceptos clave
embed-resources: trueproduce un HTML autocontenido (CSS, JS, imágenes inline). Imprescindible para envío por correo, prohibitivo en webs.theme:acepta nombre de Bootswatch (cosmo,flatly,darkly) o un fichero.scsspropio con variablesbslib.code-fold: true/code-tools: trueañaden plegado y botón “ver código”.toc:contoc-location: left|right|body,toc-depth:para controlar profundidad.- Callouts:
::: {.callout-note},callout-warning,callout-tip,callout-important. Mejor que> Nota:en blockquotes.
Patrón mínimo
format:
html:
theme:
light: cosmo
dark: darkly
toc: true
toc-location: left
toc-depth: 3
code-fold: true
code-tools: true
fig-width: 8
fig-height: 5
embed-resources: false # true sólo para envío sueltoTrampas habituales
embed-resources: trueen proyecto web. Hace que cada página duplique todo el CSS/JS, el sitio multiplica su peso por N páginas.- Tema dark mode con plots que no lo respetan.
ggplot2no detecta el modo del navegador. Necesitas controlarlo desde el chunk o usarthematic. - Tablas que rompen el ancho. Tablas anchas de
kableogtdesbordan el contenedor. Usar.column-pageo.column-screen-insetantes que pelearse con CSS.
Enlaces
Quarto compila PDF a través de LaTeX, normalmente con TinyTeX (distribución mínima de TeX Live mantenida por Yihui Xie). El motor LaTeX por defecto es xelatex, con buen soporte de fuentes del sistema y UTF-8.
Cuándo usarlo
- Documentos de archivo definitivo (informes regulados, tesis, papers).
- Tipografía clásica y control fino de página, márgenes, headers y footers.
- Salida que debe imprimirse con paginación predecible.
Cuándo NO usarlo (alternativas)
- HTML siempre que sea lectura digital: hipervínculos vivos, código interactivo, búsqueda. PDF es peor en pantalla.
- Documentos colaborativos en revisión activa: Word (
format: docx) y posteriormente export-to-pdf desde Word suele funcionar mejor con revisores no técnicos.
Conceptos clave
- TinyTeX se instala con
quarto install tinytexotinytex::install_tinytex()desde R. Resuelve la mayoría de instalaciones LaTeX en el portátil sin tocar MiKTeX / MacTeX completos. pdf-engine:puede serxelatex(default),lualatexopdflatex.xelatexes el sensato para español, acentos y fuentes del sistema.documentclass:aceptaarticle,report,book,scrartcl,scrreprt(KOMA-Script) y cualquier clase personalizada contemplate:.include-in-header:yinclude-before-body:insertan LaTeX bruto cuando el YAML no llega.mainfont:,monofont:,sansfont:requierenxelatexolualatex.
Patrón mínimo
format:
pdf:
documentclass: scrartcl
pdf-engine: xelatex
papersize: a4
geometry:
- margin=2.5cm
fontsize: 11pt
mainfont: "Source Serif Pro"
monofont: "Fira Code"
toc: true
number-sections: true
colorlinks: trueTrampas habituales
- Paquetes LaTeX que faltan. TinyTeX los instala bajo demanda, pero la primera ejecución de un documento exótico puede tardar. En CI offline esto rompe builds.
- Caracteres no soportados por la fuente. Si usas glifos chinos o griegos en mainfont latina, salen como caja. Configura una fallback font con
fontfamilyoptions:o usa LuaLaTeX. - Imágenes en
tiffowebp. LaTeX las rechaza. Conviértelas apng/pdfantes de incluirlas, o deja queknitrlas genere directamente desde el chunk. - Cross-references rotas.
@fig-foorequiere#| label: fig-fooy un caption (#| fig-cap: "..."). Sin el caption, el label no se registra.
Enlaces
reveal.js (slides HTML)
reveal.js es el formato de presentaciones HTML de Quarto. Soporta navegación por slides, speaker notes, fragmentos animados, columnas, chalkboard, y exportación a PDF para envío posterior. Cada slide es una sección Markdown nivel ##.
Cuándo usarlo
- Charlas técnicas con código en vivo, gráficos interactivos o vídeos embebidos.
- Slides que necesitan publicarse en una web (GitHub Pages, Netlify) con URL compartible.
- Recibirás preguntas que requieren saltar a slides concretas:
reveal.jstiene atajos (teclaopara overview,spara speaker notes) que PowerPoint no iguala.
Cuándo NO usarlo (alternativas)
- Audiencia corporativa que va a editarlas en PowerPoint: usa
format: pptxdesde Quarto y acepta perder algo de control tipográfico. - Presentación con animaciones complejas o transiciones cinematográficas: PowerPoint o Keynote rinden mejor en ese terreno.
- Posters académicos: Quarto tiene
format: poster(basado enbetterposter) o usaposterdown(RMarkdown). reveal.js no es la herramienta correcta. - Beamer (
format: beamer) si el contexto académico exige LaTeX puro (proceedings que distribuyen .tex).
Conceptos clave
- Cada
##arranca slide nueva.###es sub-slide vertical (navegable con flecha abajo). incremental: truerevela bullets de uno en uno automáticamente.. . .(tres puntos en línea propia) inserta una pausa manual.theme:admite los temas de reveal (simple,serif,solarized,dark) o un.scsspropio.- Columnas con
:::: {.columns}+::: {.column width="50%"}. - Speaker notes:
::: {.notes}. Visible cons. - Exportar a PDF: añadir
?print-pdfal URL en navegador y guardar como PDF.
Patrón mínimo
Front matter del documento:
title: "Resultados Q4"
format:
revealjs:
theme: simple
incremental: true
slide-number: true
chalkboard: true
code-line-numbers: falseCuerpo del documento:
## Introducción
- Punto 1
- Punto 2
. . .
Aparición manual tras pausa.
## Resultado principal
(chunk de código R con `#| echo: false` y un `plot(cars)`)
::: {.notes}
Comentar la pendiente positiva y la variabilidad en velocidades altas.
:::Trampas habituales
- Slides que desbordan en vertical. Reveal no auto-shrinkea. Las tablas y bloques largos quedan cortados. Usa
## Slide {.scrollable}o divide en sub-slides. - Imágenes que no caben.
fig-widthyfig-heightcontrolan el chunk. El slide tienewidth: 1050, height: 700por defecto. Ajustafig-width: 9oout-width: "80%". incremental: trueglobal engorroso. Si solo quieres bullets animados en algunas slides, prefiere::: {.incremental}puntual en lugar de activarlo global.
Enlaces
Relacionados en esta página
HTML, comparte motor de salida y theming.
Website
project: type: website produce una web estática multi-página con navegación, barra lateral, búsqueda integrada (lunr.js) y listings dinámicos. Es la herramienta natural para portfolios técnicos, documentación de paquetes, sitios de curso y wikis personales.
Cuándo usarlo
- Portfolio, blog técnico, sitio de paquete R, documentación interna del equipo.
- Cualquier colección de documentos que se beneficie de navegación común, búsqueda y listings.
- Reemplazo natural de
pkgdowncuando quieres más libertad de diseño.
Cuándo NO usarlo (alternativas)
pkgdownsigue siendo más automático para documentar paquetes R: parseaman/, vignettes y NEWS sin que tú configures nada.- Hugo / Astro / Eleventy si necesitas miles de páginas, taxonomías complejas o velocidad de build en sitios grandes. Quarto es perfectamente capaz hasta ~unos cientos de páginas. Más allá Hugo va más rápido.
- MkDocs (con
mkdocs-material) si tu output es documentación técnica de software puro sin computación: ecosistema Python más maduro para ese nicho. - Sphinx en entorno Python científico con cross-references densas tipo libro técnico (NumPy, SciPy, etc.).
Conceptos clave
website:definetitle,navbar,sidebar,page-footer,search.navbar:conleft:yright:para enlaces.sidebar:puede ser global o por sección (constyle: docked|floating).- Listings: una página con
listing:declara una colección que se popula desde un directorio (contents: posts/*.qmd). Genera índice paginado, ordenable, filtrable. - Búsqueda con
search: true(lunr) o Algolia para sitios grandes. - Despliegue: GitHub Pages (
quarto publish gh-pages), Netlify (quarto publish netlify), Quarto Pub.
Patrón mínimo
# _quarto.yml
project:
type: website
output-dir: _site
website:
title: "mi-portfolio"
navbar:
left:
- href: index.qmd
text: Inicio
- href: posts.qmd
text: Blog
- href: about.qmd
text: Sobre
page-footer:
left: "© 2026 A. Navas"
format:
html:
theme: cosmo
toc: true# posts.qmd
---
title: "Blog"
listing:
contents: posts
type: default
sort: "date desc"
categories: true
feed: true
---Trampas habituales
- Listing que no encuentra los posts.
contents:es relativo al.qmdque declara el listing, no a la raíz del proyecto. Confundirlo es la causa #1 de listings vacíos. href: posts/sinindex.qmddentro: 404. Cada directorio que aparezca en navegación necesita unindex.qmd.embed-resources: trueheredado del documento. En un proyecto web, esto multiplica el peso de la salida, desactívalo a nivel de_quarto.yml.
Enlaces
Relacionados en esta página
Proyecto Quarto, la web es un tipo de proyecto.Blog, variante con énfasis en listings cronológicos.Book, para colecciones lineales en lugar de en árbol.
Blog
Un blog Quarto es una website con un listing cronológico como página de entrada y posts en posts/. No es un tipo de proyecto separado, sino una variante de website con convenciones.
Cuándo usarlo
- Bitácora técnica personal o de equipo, con posts fechados.
- Cuando quieres
RSS feed, categorías, etiquetas y archivos por año “gratis”. - Sucesor moderno de distill (Posit lo discontinuó tras el lanzamiento de Quarto).
Cuándo NO usarlo (alternativas)
blogdown(Hugo dentro de R) si necesitas un tema Hugo específico ya construido y miles de páginas.- Hashnode, Substack, Medium si lo que quieres es la audiencia, no controlar el render. Quarto produce HTML estático, la distribución es problema tuyo.
Conceptos clave
- Posts en
posts/<slug>/index.qmd(recomendado), facilita imágenes adjuntas al post. listing.type:puede serdefault,grid,table.gridconimage:es el patrón visual típico.categories: trueen el listing genera filtros automáticos por categoría.feed: truegeneraindex.xml(RSS).feed: fullincluye contenido completo, no solo resumen.- Drafts: añade
draft: trueal front matter del post. Quedan excluidos del render salvo--profile draft.
Patrón mínimo
# index.qmd (página principal del blog)
---
title: "Notas"
listing:
contents: posts
sort: "date desc"
type: grid
categories: true
fields: [image, date, title, reading-time, categories]
feed: true
page-layout: full
---# posts/2026-05-quarto-tips/index.qmd
---
title: "Tres trucos de Quarto que uso a diario"
date: 2026-05-15
categories: [quarto, r, productividad]
image: thumbnail.png
---Trampas habituales
date: todayen posts: cambia cada vez que renderizas. Usa fecha literal2026-05-15para que el orden cronológico sea estable.- Imágenes por post pero ruta absoluta. Estructura recomendada:
posts/<slug>/index.qmdcon imágenes en la misma carpeta, paths relativosimage.pngfuncionan tanto en preview como en build. - RSS sin URL canónica: el
<link>del feed apunta alsite-urldefinido en_quarto.yml. Sinsite-url:el feed publicado tiene URLs rotas.
Enlaces
Relacionados en esta página
Website, base sobre la que se construye un blog.
Book
project: type: book compila un libro multi-capítulo a HTML, PDF y ePub desde la misma fuente. Es el sucesor directo de bookdown (RMarkdown), con TOC global, cross-references entre capítulos, numeración automática, índice analítico y descarga del libro completo en cada formato.
Cuándo usarlo
- Libros técnicos, manuales internos largos, tesis, documentación de curso de varias semanas.
- Cualquier output con jerarquía lineal de capítulos y secciones, donde la navegación es fundamentalmente prev/next.
Cuándo NO usarlo (alternativas)
- Documentación de software con muchas páginas independientes y árbol de navegación complejo:
websiteomkdocs-material(Python) son más adecuados. - Wiki / Knowledge base no lineal: una
websitecon sidebar pero sin orden estricto funciona mejor que un libro. - bookdown sigue siendo válido en proyectos vivos que ya están escritos en él. Migrar a Quarto es opcional. Para libros nuevos, Quarto es la apuesta.
Conceptos clave
book:declaratitle,author,date,chapters:(lista ordenada),appendices:.- Cada capítulo es un
.qmdindependiente.index.qmdes la portada/prefacio. format:puede declarar HTML, PDF y ePub simultáneamente,quarto rendergenera los tres.- Cross-references entre capítulos:
@sec-foo(con#| sec-id: sec-fooo## Titulo {#sec-foo}+number-sections: true). book.output-file:controla el nombre del PDF/ePub final.
Patrón mínimo
# _quarto.yml
project:
type: book
book:
title: "Manual de análisis"
author: "A. Navas"
date: "2026-05-18"
chapters:
- index.qmd
- intro.qmd
- metodos.qmd
- resultados.qmd
- references.qmd
appendices:
- apendice-a.qmd
format:
html:
theme: cosmo
pdf:
documentclass: scrreprt
pdf-engine: xelatexTrampas habituales
- Cross-references con
@sec-foono resuelven. Necesitasnumber-sections: trueYcrossref:configurado. Sin ambos, el render emite warnings silenciosos. references.qmdno rinde como capítulo de bibliografía. Necesitabibliography:apuntando a un.biby un### References {.unnumbered}final donde se inyecta la lista.- Numeración rota tras añadir capítulo. El orden en
chapters:manda. Si añades un fichero al directorio pero no a la lista, no aparece en el libro.
Enlaces
Relacionados en esta página
Proyecto Quarto,bookes un tipo de proyecto.PDF, el formato impreso del libro.
Informes parametrizados
Un informe parametrizado es un .qmd que declara parámetros en el YAML (params:) y se renderiza repetidamente con distintos valores, produciendo una salida distinta por combinación. Es la mecánica que reemplaza el patrón “for-loop que copia el .Rmd y cambia una variable”, pieza clave de cualquier sistema de reporting automatizado.
Cuándo usarlo
- Informes mensuales por cliente / centro / región producidos en lote.
- Plantilla única para distintas iteraciones (por trimestre, por experimento, por dataset).
- Pipeline de reporte ejecutado en CI (GitHub Actions, Airflow) con parámetros pasados como variables.
Cuándo NO usarlo (alternativas)
- Dashboard interactivo donde el usuario elige parámetros desde el navegador: usa Shiny o Streamlit, no Quarto parametrizado.
format: dashboard(Quarto >=1.4) si quieres una vista tipo BI estática con tarjetas y gráficos, parametrizada pero sin reactividad.
Conceptos clave
params:en el YAML declara nombre y default. Se accede en R comoparams$nombre.- Render con parámetros desde R:
quarto::quarto_render("informe.qmd", execute_params = list(region = "Norte")). - Render desde CLI:
quarto render informe.qmd -P region:Norte -P year:2026. - Para lotes: itera con
purrr::walk()sobre una lista de combinaciones, pasandooutput_fileúnico por combinación. - Caveat: el render con
execute_paramsarranca una sesión R nueva por defecto. Objetos en tu workspace no se ven.
Patrón mínimo
---
title: "Informe regional"
params:
region: "Norte"
year: 2026
threshold: 0.05
format: html
---#| label: setup
library(dplyr)
datos <- readr::read_csv("ventas.csv") |>
filter(region == params$region, year == params$year)# scripts/render_lote.R
regiones <- c("Norte", "Sur", "Centro")
purrr::walk(regiones, function(r) {
quarto::quarto_render(
"informe.qmd",
execute_params = list(region = r, year = 2026),
output_file = glue::glue("informe_{r}_2026.html")
)
})Trampas habituales
output_filecon extensión equivocada. Quarto la respeta literalmente: si pidesinforme.pdfpero el formato es HTML, falla en silencio o genera el HTML con nombre.pdf.paramsno aparece en la sesión interactiva. Cuando trabajas el.qmden RStudio sin renderizar,paramsno existe. Patrón:if (!exists("params")) params <- list(region = "Norte", year = 2026)al inicio.- Render concurrente sobre el mismo
.qmd. Quarto escribe ficheros intermedios al lado del fuente. Lanzar dos renders en paralelo desde el mismo directorio puede pisarse. Solución: copiar el.qmda un working dir único, o usarquarto_renderconoutput_dirdistinto por proceso.
Enlaces
Relacionados en esta página
Quarto Document, el informe parametrizado es un documento conparams.
Manuscript
project: type: manuscript (Quarto >=1.4) es un formato pensado para escribir papers académicos reproducibles. Produce simultáneamente la versión “journal-ready” (PDF con plantilla del journal, vía formatos como acm, elsevier, jasa) y una versión web navegable con código, datos y artefactos descargables, un companion site del paper.
Cuándo usarlo
- Paper de revista donde se exige reproducibilidad y companion code.
- Submission a journals que aceptan plantillas Quarto (creciendo: PLOS, BMJ, varios de Elsevier).
- Pre-prints en arXiv / bioRxiv donde quieres además publicar una web con el análisis.
Cuándo NO usarlo (alternativas)
- Revista que exige
.docxcon track changes para revisión: la realidad académica sigue siendo Word para muchos editores. Usaformat: docxdesde un.qmdsimple. - Overleaf colaborativo con coautores que solo aceptan LaTeX puro: Quarto produce LaTeX intermedio pero el ciclo edición↔︎compilación en Overleaf es más fluido escribiendo
.texdirecto. - rticles (paquete RMarkdown) sigue siendo el ecosistema con más plantillas de journal. Quarto está cerrando el hueco pero no las cubre todas.
Conceptos clave
manuscript:declaraarticle(el.qmdprincipal),notebooks(notebooks adjuntos cuyos outputs se publican en la versión web),resources.- Formatos típicos:
jss-pdf,acm-pdf,elsevier-pdf(vía la extensiónquarto-journals/<journal>). - La versión web incluye sidebar con “Notebooks”, cada uno renderizado individualmente y enlazado desde el paper principal.
freeze: truees prácticamente obligatorio: garantiza que el HTML/PDF publicado refleja exactamente el cómputo del análisis archivado.
Patrón mínimo
# _quarto.yml
project:
type: manuscript
manuscript:
article: index.qmd
notebooks:
- notebooks/01-eda.qmd
- notebooks/02-modelo.qmd
resources:
- data/
format:
html: default
jss-pdf:
keep-tex: true
docx: default
execute:
freeze: trueTrampas habituales
- Plantilla de journal como extensión externa.
quarto add quarto-journals/elsevierañade la extensión local. Commitea_extensions/al repo o el build en otra máquina fallará. bibliography:no encontrada en el PDF del journal. Las plantillas algunas veces sobrescriben dónde buscar.bib. Comprueba eltemplate-partialsespecífico.- Notebooks que tardan en re-ejecutar. Sin
freeze: true, cadaquarto renderrepite todo el análisis del paper.
Enlaces
Relacionados en esta página
Freeze y caching,freeze: truees el patrón canónico aquí.PDF, el formato de submission.Website, la versión navegable del manuscrito.
CheatSheets y referencia rápida
Posit mantiene un repositorio centralizado de cheatsheets de una página (PDF imprimible) para sus paquetes y para Quarto: ideal para tener pegado al monitor cuando estás aprendiendo y no recuerdas si la opción de chunk se llama echo o eval.
Cuándo usarlo
- Repaso rápido de sintaxis YAML, opciones de chunk, layouts de slide.
- Onboarding de personas nuevas al equipo: imprimir y dejar sobre la mesa.
Conceptos clave
- Cheatsheet oficial de Quarto: una página con YAML, formatos, slides, cross-refs y publicación.
- También hay cheatsheets de
dplyr,tidyr,ggplot2,purrr,rmarkdownmantenidas en paralelo. - Las versiones traducidas (incluido español) están en el mismo índice, contribuidas por la comunidad.