\engine{latexmk}

latexmk Guía

latexmk automatiza el pipeline de compilación de LaTeX en varias pasadas. Calcula exactamente cuántas pasadas hacen falta, ejecuta bibtex o biber cuando es necesario y vigila los archivos fuente para detectar cambios. Deje de contar a mano las ejecuciones de pdflatex.

latexmk— automatización inteligente en varias pasadas

\section{Qué es latexmk}

¿Qué es latexmk?

latexmk es un script de Perl escrito por John Collins que actúa como un sistema de compilación inteligente para documentos LaTeX. Al ejecutar latexmk -pdf, examina los archivos .aux, .toc, .bbl y otros archivos auxiliares después de cada pasada para determinar si hace falta otra. Sigue ejecutándose hasta que el resultado se estabiliza: normalmente de dos a cuatro pasadas para un documento con bibliografía y referencias cruzadas.

Varias pasadas automáticas

Detecta cuándo hace falta otra pasada de pdflatex comparando las sumas de verificación de los archivos auxiliares.

Seguimiento de dependencias

Vigila .tex, .bib, imágenes y archivos incluidos. Recompila solo cuando algo cambia de verdad.

Configurable mediante .latexmkrc

Los archivos de configuración por proyecto y globales controlan la elección del motor, los directorios de salida y las reglas personalizadas.

\subsection{Uso básico}

Comandos básicos de latexmk

latexmk se incluye en toda instalación de TeX Live. Estos son los comandos que más usará, desde una compilación simple a PDF hasta la vigilancia de archivos.

Comandos de latexmk
# Compile with pdfLaTeX (default) — runs as many passes as needed
latexmk -pdf document.tex

# Compile with XeLaTeX
latexmk -xelatex document.tex

# Compile with LuaLaTeX
latexmk -lualatex document.tex

# Compile and open the resulting PDF
latexmk -pdf -pv document.tex

# Watch for file changes and recompile automatically
latexmk -pdf -pvc document.tex

# Clean up auxiliary files (.aux, .log, .toc, .out …)
latexmk -c document.tex

# Clean up ALL generated files including the PDF
latexmk -C document.tex
-pdfCompila a PDF con pdfLaTeX (motor predeterminado)
-xelatexCompila a PDF con XeLaTeX
-lualatexCompila a PDF con LuaLaTeX
-pvcVista previa continua: vigila los archivos y recompila al detectar cambios
-cLimpia los archivos auxiliares pero conserva el PDF
-CLimpia todos los archivos generados, incluido el PDF

\subsection{.latexmkrc}

Configurar latexmk con .latexmkrc

Un archivo .latexmkrc en la raíz de su proyecto indica a latexmk qué motor usar, dónde escribir los archivos de salida y cómo gestionar la bibliografía. Así se evita tener que usar opciones largas en la línea de comandos.

.latexmkrc
# .latexmkrc — project-level configuration
# Place this file in the same directory as your .tex file

# Use pdfLaTeX by default
$pdf_mode = 1;

# Or use XeLaTeX
# $pdf_mode = 5;

# Or use LuaLaTeX
# $pdf_mode = 4;

# Custom PDF viewer (optional)
$pdf_previewer = 'evince %S';

# Run biber instead of bibtex for bibliography
$biber = 'biber %O %S';

# Write output files to ./build directory
$out_dir = 'build';

# Extra extensions to clean with latexmk -c
@generated_exts = (@generated_exts, 'synctex.gz', 'run.xml', 'bcf');

# Extra dependencies to watch (e.g. bibliography files)
@default_files = ('document.tex');

Valores de $pdf_mode

$pdf_mode = 1 — pdfLaTeX $pdf_mode = 4 — LuaLaTeX $pdf_mode = 5 — XeLaTeX

\section{Integración con CI/CD}

latexmk en GitHub Actions

El patrón de CI/CD más habitual para LaTeX es compilar en cada push a main y subir el PDF como artefacto. El siguiente flujo de trabajo usa la acción teatimeguest/setup-texlive-action para instalar TeX Live, que incluye latexmk, en el runner.

.github/workflows/latex.yml
# .github/workflows/latex.yml
name: Compile LaTeX

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Install TeX Live
        uses: teatimeguest/setup-texlive-action@v3
        with:
          packages: scheme-small latexmk

      - name: Compile with latexmk
        run: |
          latexmk -pdf -interaction=nonstopmode -halt-on-error document.tex

      - name: Upload PDF artifact
        uses: actions/upload-artifact@v4
        with:
          name: document-pdf
          path: document.pdf

latexmk ejecuta tantas pasadas de pdflatex como haga falta; no es necesario contar las pasadas en su flujo de trabajo

Use -halt-on-error con -interaction=nonstopmode para que el trabajo de CI falle ante cualquier error de LaTeX

Suba el PDF como artefacto para poder descargarlo desde el resumen de la ejecución de Actions

Para ejecuciones de CI más rápidas, sustituya la instalación local de TeX Live por la API de FormaTeX: una solicitud HTTP, sin configurar TeX Live

\section{Comparison}

latexmk frente a pdflatex manual

Para un documento sencillo de una página, pdflatex manual es equivalente. Para cualquier documento con referencias cruzadas, bibliografía o índice, latexmk es claramente mejor.

Tarea
pdflatex manual
latexmk
Compilación de una sola pasadapdflatex document.texlatexmk -pdf document.tex
Resolver referencias cruzadasEjecutar pdflatex dos veces manualmenteAutomático: latexmk detecta los cambios en .aux
Bibliografía (bibtex/biber)pdflatex → bibtex → pdflatex → pdflatexAutomático: latexmk ejecuta bibtex/biber según haga falta
Índice de contenidosEjecutar pdflatex dos veces (o más)Automático: latexmk repite hasta que se estabiliza
Cambiar de motorSustituir el binario pdflatex en el comandoOpción -xelatex o -lualatex de latexmk
Modo de vigilancia (recompilación automática)No es nativo; requiere un vigilante externolatexmk -pvc (vigila todas las dependencias)
Limpiar archivos auxiliaresrm *.aux *.log *.toc … (lista manual)latexmk -c (sabe lo que ha generado)
Directorio de salidapdflatex -output-directory=./build$out_dir = 'build' en .latexmkrc

\subsection{Alternativa con FormaTeX}

Olvídese por completo de la instalación local de TeX

latexmk resuelve el problema de las varias pasadas en su equipo local. FormaTeX resuelve el problema de la infraestructura: sin TeX Live, sin latexmk, sin imágenes de Docker; solo una solicitud HTTP que devuelve un PDF.

Con latexmk local

  • Instalar TeX Live (~5 GB)
  • Configurar .latexmkrc en cada proyecto
  • Gestionar las actualizaciones de TeX Live
  • Configurar el runner de CI con la acción de TeX Live
  • Depurar localmente los fallos específicos de cada motor

Con la API de FormaTeX

  • Sin instalación: la llamada a la API devuelve el PDF
  • Elegir el motor mediante el campo engine
  • TeX Live siempre actualizado en el servidor
  • La CI se integra con un solo comando curl
  • El mismo motor y el mismo resultado, siempre
latexmk compatible a través de la API

Automatice la compilación de LaTeX a escala

FormaTeX gestiona la compilación en varias pasadas en el servidor. Pase "engine": "latexmk" para ejecutar el pipeline completo de latexmk: bibliografía, referencias cruzadas, todo resuelto en una sola llamada a la API.