CI (GitHub Actions, etc.)

CI (continuous integration, integración continua) significa que un servidor construye automáticamente tu PDF en cada push. Siempre tienes la salida más reciente sin compilar localmente, y los problemas de “funciona en mi máquina” aparecen pronto. Para LaTeX, la opción habitual es GitHub Actions: hace checkout del repositorio, compila en un entorno TeX Live y guarda el PDF resultante como artifact.

Por qué compilar en CI

En cada push, el documento se construye automáticamente en un entorno TeX Live limpio y reproducible. Ventajas: detectas pronto errores que dependían de tu configuración local, el documento se mantiene en un estado conocido como compilable, coautores y revisores sin TeX instalado pueden obtener el PDF más reciente, y puedes publicarlo como release si hace falta. La compilación se define en un archivo workflow (YAML) dentro de .github/workflows/.

Un workflow mínimo de GitHub Actions

Coloca el siguiente YAML como .github/workflows/build.yml y funcionará: actions/checkout obtiene el código fuente, xu-cheng/latex-action lo compila y actions/upload-artifact guarda el PDF. Las versiones mayores de GitHub Actions cambian con el tiempo; este ejemplo usa las líneas mayores vigentes en 2026: checkout v6 y upload-artifact v7.

terminal
# .github/workflows/build.yml
name: Build LaTeX
on: [push]
permissions:
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: xu-cheng/latex-action@v4
        with:
          root_file: main.tex
      - uses: actions/upload-artifact@v7
        with:
          name: PDF
          path: main.pdf

xu-cheng/latex-action requiere root_file y usa pdfLaTeX por defecto. Para cambiar de motor, establece latexmk_use_xelatex: true o latexmk_use_lualatex: true. Para workflows como upLaTeX + dvipdfmx, que necesitan pasos más detallados, confirma una .latexmkrc y deja que la action lea la misma configuración que tu compilación local.

Este YAML es la forma mínima para comprobar si el PDF puede producirse. Para una tesis o un artículo colaborativo, ejecútalo tanto en push como en pull_request para detectar un PDF roto antes de la revisión. Las versiones mayores de las actions avanzan con el tiempo; para una plantilla de larga vida, acepta PR de actualización de dependencias o programa una revisión anual de los README oficiales.

El entorno TeX Live — la imagen texlive/texlive

La compilación necesita TeX Live, y latex-action incluye uno. Cuando quieras controlar con detalle el entorno (paquetes concretos, japonés, etc.), puedes usar directamente la imagen Docker texlive/texlive de Island of TeX. Como latest se reconstruye con el tiempo, fija un tag con fecha o un tag de año de TeX Live para entregas reproducibles, y usa latest para comprobaciones diarias. Declárala como container: del job y ejecuta latexmk tú mismo.

terminal
jobs:
  build:
    runs-on: ubuntu-latest
    container: texlive/texlive:latest
    steps:
      - uses: actions/checkout@v6
      - run: latexmk -pdf main.tex
      - uses: actions/upload-artifact@v7
        with:
          name: PDF
          path: main.pdf

Cuando CI falle, lee el registro

Primero divide los fallos de CI en tres grupos: error de LaTeX, paquete faltante o ruta de artifact incorrecta. Si el registro muestra ! LaTeX Error o Undefined control sequence, depura el documento. Si File ... not found indica un paquete de TeX Live faltante, ajusta la imagen o el paso de instalación. Si upload-artifact dice que no hay archivos, compara path: con el nombre real de salida. Cuando pasa en local pero falla en CI, sospecha de fuentes, imágenes o archivos .bbl generados que solo existen en tu máquina.

PDF como artifact y como release

  • El PDF guardado por actions/upload-artifact se puede descargar desde la página del workflow run (se conserva por ejecución).
  • Para distribuir una versión pública, puedes adjuntar el PDF a un GitHub Release (por ejemplo, activado al hacer push de un tag).
  • Para japonés, compila con latexmk configurado para uplatex + dvipdfmx dentro del contenedor texlive/texlive.
  • Incluye la configuración de compilación (.latexmkrc, etc.) en el repositorio para que local y CI sigan los mismos pasos.
  • Para un workflow de entrega, activa -halt-on-error y conserva los registros para poder rastrear las advertencias.