LaTeX no te muestra el resultado mientras escribes. Escribe un archivo .tex de texto plano y lo compila para obtener un PDF, un modelo de “escribir y luego procesar todo de una vez”. Hay dos rutas: una pasa por un archivo DVI intermedio y la otra produce PDF directamente.
¿Por qué no es WYSIWYG?
TeX optimiza el salto de línea mirando el párrafo completo a la vez. Por lo tanto, agregar un solo carácter al final de un párrafo puede cambiar el lugar donde se rompe la primera línea. Rehacer eso con cada pulsación de tecla sería demasiado costoso.
Entonces, en lugar de un procesador de textos WYSIWYG que vuelve a pintar a medida que escribe, TeX usa procesamiento por lotes: escribe todo el documento de una sola vez. Renuncia a la vista previa en vivo, pero obtiene una composición tipográfica globalmente óptima, un formato uniforme en todo el documento y la automatización que el texto sin formato hace posible.
De la fuente a la salida: dos rutas
Un motor procesa el .tex que escribiste. Hay dos familias de salida. En la ruta moderna, pdfTeX, XeTeX y LuaTeX producen PDF directamente. XeTeX y LuaTeX en particular leen la entrada Unicode y pueden usar las fuentes OpenType ya instaladas en su sistema.
En la ruta heredada, el motor primero emite un archivo DVI. DVI significa *independiente del dispositivo*: una descripción pura de la página que no está vinculada a ningún dispositivo de salida en particular. Luego, un controlador dvi lo convierte: dvipdfmx a PDF, dvips a PostScript, dvisvgm a SVG. Un controlador que se muestra en la pantalla se llama visor dvi. Los formatos japoneses pLaTeX y upLaTeX utilizan esta ruta DVI.
# Direct PDF (modern engines)
lualatex document.tex # → document.pdf
# Via DVI (legacy route, e.g. Japanese upLaTeX)
uplatex document.tex # → document.dvi
dvipdfmx document.dvi # → document.pdfComo excepción, pdfLaTeX mantiene el estilo de entrada antiguo (en gran parte no Unicode) pero genera PDF directamente, sin DVI. Es útil tratar “DVI vs PDF directo” y “Unicode / fuentes del sistema o no” como dos ejes separados.
| motor | Salida | Entrada y fuentes | Formatos de imagen |
|---|---|---|---|
latex | DVI (necesita un controlador dvi) | Mayormente ASCII | EPS, PS |
pdflatex | PDF (directo) | Limitado Unicode | PNG, JPG, PDF (EPS con conversión automática) |
xelatex | PDF (directo) | Unicode, sistema OpenType (fontspec) | PNG, JPG, PDF, EPS |
lualatex | PDF (directo) | Unicode, fuentes del sistema, Lua | PNG, JPG, PDF, EPS |
Archivos auxiliares y la regla de "compilar dos veces"
La compilación produce, además de PDF, archivos auxiliares como .aux (etiquetas y datos de referencia), .toc (la tabla de contenido) y .log (un registro). Las referencias cruzadas y la tabla de contenidos necesitan dos pasadas: la primera pasada escribe números y posiciones (“¿en qué página está el Capítulo 3?”) en .aux, y la segunda pasada los lee nuevamente para completar \ref y la lista de contenidos.
Entonces, cuando vea ?? en el resultado, o una advertencia como *Vuelva a ejecutar para obtener las referencias cruzadas correctas*, la solución es simplemente compilar nuevamente. Las bibliografías (BibTeX/biber) y los índices (makeindex) añaden aún más pases.
Dónde buscar cuando se detiene una construcción
Cuando se detiene una compilación, lea el primer error en .log, no en PDF. TeX intenta continuar después del primer problema, por lo que la docena de errores que siguen a menudo son consecuencias. ! Undefined control sequence normalmente significa un comando mal escrito o un paquete faltante; File ... not found apunta a la búsqueda de imágenes, clases o paquetes; LaTeX Warning: Label(s) may have changed significa que se necesita otra ejecución. Diagnosticar por la etapa del pipeline donde aparece el mensaje.
- Si solo las referencias cruzadas son incorrectas, deje que
latexmkse vuelva a ejecutar primero antes de eliminar los archivos.auxo.toc. - Si falta una imagen, verifique si la ruta es directa PDF o DVI y elija los formatos de imagen en consecuencia.
- Elimine
.aux,.toc,.outy sus amigos solo cuando los archivos auxiliares obsoletos sean la causa probable.
Deja de contar pases: latexmk y editores
Contar pases a mano es tedioso. latexmk observa archivos como .aux y vuelve a ejecutar el motor exactamente tantas veces como sea necesario, invocando BibTeX/biber y makeindex cuando sea necesario, y deteniéndose una vez que la salida sea estable. De forma predeterminada, se repetirá hasta cinco veces ($max_repeat = 5) antes de decidir que está en bucle; ese límite es suficiente para prácticamente todos los documentos reales.
latexmk -lualatex document.tex # LuaLaTeX, as many passes as needed
latexmk -pdf document.tex # pdfLaTeX
latexmk -c # clean .aux/.log and friendsLos editores y servicios como VS Code (LaTeX Workshop), TeXShop y Overleaf suelen llamar a latexmk de forma oculta, por lo que simplemente presiona "compilar". Y cuando SyncTeX está habilitado, puede hacer clic para saltar entre una línea en la fuente y el lugar coincidente en PDF.