Cross-references, citas y bibliografía

quarto
reproducibilidad
Cómo referenciar figuras, tablas, secciones y ecuaciones de forma legible. Citas con archivos .bib, inserción rápida con DOIs, estilos CSL y los detalles que distinguen un informe profesional de uno artesanal.

Cross-references: el sistema básico

Quarto referencia cualquier elemento con @ + label. Tres reglas:

  1. El elemento debe tener un label con prefijo correcto.
  2. La referencia se hace en el texto con @prefijo-nombre.
  3. Quarto genera el número y el enlace automáticamente.

Prefijos válidos:

Prefijo Elemento
fig- Figura
tbl- Tabla
eq- Ecuación
sec- Sección
lst- Listing de código
thm-, lem-, def- Teorema, lema, definición

Referenciar figuras

Con un chunk:

`​`​`{r}
#| label: fig-tendencia
#| fig-cap: "Tendencia de ventas mensuales 2024."

plot(datos$mes, datos$ventas)
`​`​`

Desde el texto:

La figura @fig-tendencia muestra una tendencia creciente.

Output: “La figura Figura 1 muestra una tendencia creciente.” con enlace al elemento.

Para imágenes externas:

![Diagrama del pipeline.](figuras/pipeline.png){#fig-pipeline}

{#fig-pipeline} es el label. Mismo @fig-pipeline desde el texto.

Variantes útiles:

  • @fig-tendencia → “Figura 1”
  • -@fig-tendencia → “1” (solo el número, sin prefijo)
  • [@fig-tendencia; @fig-otra] → “Figuras 1, 2” (múltiples)

Referenciar tablas

Idéntico al patrón de figuras, con tbl-:

`​`​`{r}
#| label: tbl-resumen
#| tbl-cap: "Resumen por grupo."

knitr::kable(resumen)
`​`​`

Desde el texto:

Como aparece en @tbl-resumen, los grupos difieren significativamente.

Referenciar secciones

Las secciones se referencian añadiendo {#sec-xxx} al final del título:

## Resultados {#sec-resultados}

Texto...

## Discusión

Vemos en @sec-resultados que los datos confirman la hipótesis.

number-sections: true en el YAML añade numeración automática a las secciones (necesario para que el @sec-... muestre “Sección 2.1” en vez de solo el título).

Referenciar ecuaciones

$$
y = \beta_0 + \beta_1 x + \varepsilon
$$ {#eq-regresion}

La ecuación @eq-regresion describe el modelo.

Las ecuaciones se escriben en LaTeX entre $$ ... $$ (display) o $ ... $ (inline). El label va después de la ecuación.

Bibliografía con .bib

El sistema clásico de citas usa archivos BibTeX:

---
title: "Análisis sobre regulación de la expresión génica"
bibliography: references.bib
---

Y en references.bib:

@article{love2014,
  title   = {Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2},
  author  = {Love, Michael I and Huber, Wolfgang and Anders, Simon},
  journal = {Genome Biology},
  volume  = {15},
  pages   = {550},
  year    = {2014}
}

@book{wickham2023,
  title     = {R for Data Science},
  author    = {Wickham, Hadley and Çetinkaya-Rundel, Mine and Grolemund, Garrett},
  year      = {2023},
  publisher = {O'Reilly}
}

Citar en el texto

Sintaxis básica:

[@love2014]                  → (Love et al., 2014)
@love2014                    → Love et al. (2014)
[-@love2014]                 → (2014)
[@love2014; @wickham2023]    → (Love et al., 2014; Wickham et al., 2023)
[@love2014, p. 12]           → (Love et al., 2014, p. 12)
[see @love2014]              → (see Love et al., 2014)

Quarto genera automáticamente la lista de referencias al final del documento.

Estilos de cita: CSL

El estilo de cita lo controla csl:

---
bibliography: references.bib
csl: nature.csl
---

Estilos comunes (disponibles en github.com/citation-style-language/styles):

  • apa.csl: APA (psicología, ciencias sociales).
  • nature.csl: Nature.
  • cell.csl: Cell.
  • vancouver.csl: biomedical.
  • chicago-author-date.csl: humanidades.
  • ieee.csl: ingeniería.

Descargar el .csl que quieras y referenciar en YAML. Sin csl:, Quarto usa Chicago author-date por defecto.

Insertar citas desde DOI: el atajo moderno

Para no escribir BibTeX a mano, RStudio y VS Code (con la extensión Quarto) tienen inserción visual de citas:

  • En RStudio: Insert → Citation (Ctrl/Cmd+Shift+F8).
  • En VS Code: paleta de comandos → Quarto: Insert Citation.

Pegas un DOI (10.1186/s13059-014-0550-8) y el sistema:

  1. Resuelve la cita vía CrossRef.
  2. Añade la entrada al .bib.
  3. Inserta @love2014 en el texto.

Es el flujo más eficiente para construir bibliografía mientras escribes. Termina con un .bib limpio sin tocarlo a mano.

Cita inline desde Pandoc

Quarto también soporta sintaxis Pandoc para citas inline sin .bib:

@doi:10.1186/s13059-014-0550-8

Quarto resuelve el DOI al renderizar. Útil para citas puntuales sin gestionar .bib.

Bibliografía: secciones manuales

Por defecto la bibliografía aparece al final del documento. Si quieres ponerla en un sitio específico:

# Resultados {-}
Texto...

## Referencias {-}

::: {#refs}
:::

{-} quita la numeración de la sección. ::: {#refs} es el contenedor donde se inyectan las referencias.

Notas al pie con ^[ ]

Para notas que no son citas:

Texto principal.^[Esto es una nota al pie inline.]

O con clave separada:

Texto principal.[^nota1]

[^nota1]: Aquí va la nota.

Ambas formas funcionan. La inline es más compacta para notas cortas. La de clave separada para notas largas.

Glosario y términos

Para textos largos donde defines términos:

glossary: glossary.yml
# glossary.yml
- term: "RNA-seq"
  definition: "Técnica de secuenciación masiva de transcriptos..."
- term: "DESeq2"
  definition: "Paquete de Bioconductor para análisis diferencial..."

Funciona con la extensión glossary instalada (quarto add quarto-ext/glossary). Las menciones del término en el texto se convierten en enlaces al glosario.

Convenciones que ayudan

  • Una entrada .bib por publicación. Compartes el .bib entre proyectos.
  • Clave de cita memorable: apellido + año (love2014, wickham2023). Más fácil que IDs aleatorios de Zotero.
  • csl: consistente en el proyecto entero, no por documento.
  • Citas insertadas con el visual editor mejor que copiando BibTeX a mano. Menos errores tipográficos.

Integración con Zotero

Si gestionas referencias en Zotero:

  1. Instala el plugin Better BibTeX.
  2. Configura citation keys (Wickham2023 o apellido_año).
  3. Exporta tu biblioteca como references.bib (auto-export funciona en vivo).
  4. En Quarto, Insert → Citation detecta Zotero corriendo y permite buscar dentro.

Es el setup ideal para gente que ya usa Zotero. La biblioteca permanece sincronizada con el .bib del proyecto.

Trampas habituales

  • Cross-references sin prefijo. {#tendencia} no funciona. Necesita {#fig-tendencia}. El prefijo es lo que identifica el tipo.
  • Citar sin bibliography: en el YAML. Quarto no encuentra las entradas y deja @love2014 literal en el output. El error es obvio si miras el resultado.
  • @love2014 con love2014 no en el .bib. Quarto avisa con warning pero deja la cita rota. Render con warnings habilitados para detectarlo.
  • Olvidar number-sections: true con @sec-. Sin numeración, la cross-reference muestra solo el título de la sección, no “Sección 2.1”.
  • CSL mal escrito o que no existe. El render falla. Verifica que el .csl esté en el directorio del documento o usa la URL canónica.

En la siguiente entrega

Tienes el sistema de referencias. La siguiente entrega es parametrizar informes: el mismo .qmd con distintos parámetros (cliente, periodo, región) produce reports distintos automáticamente. Es lo que escala la producción de documentos del análisis ad-hoc al pipeline. Lo siguiente.