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.
# .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.pdfxu-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.
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.pdfCuando 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-artifactse 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
latexmkconfigurado parauplatex+dvipdfmxdentro del contenedortexlive/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-errory conserva los registros para poder rastrear las advertencias.