Comandos de compilación

Para convertir un archivo .tex en PDF se ejecuta un comando de compilación en la terminal. pdflatex, lualatex, xelatex, latex y los comandos japoneses platex / uplatex son todos “LaTeX”, pero el comando que eliges selecciona el motor subyacente, que a su vez decide el formato de salida (PDF o DVI) y qué fuentes y caracteres puedes usar. Esta página es un mapa práctico de cada comando y de las opciones que realmente se escriben.

El nombre del comando elige el motor

LaTeX es un formato (un sistema de comandos); el motor (el programa que lo procesa realmente) es otra cosa. El nombre del comando nombra la combinación: pdflatex es “motor pdfTeX + formato LaTeX”, lualatex es “LuaTeX + LaTeX”, etc. Todos se invocan igual: se pasa el archivo fuente como argumento; la extensión .tex es opcional.

terminal
pdflatex document.tex      # → document.pdf, document.aux, document.log
lualatex document          # 拡張子は省略可 / extension optional
xelatex  document.tex

Al ejecutar un comando se produce la salida principal (.pdf o .dvi) y archivos auxiliares: un .aux que acumula referencias cruzadas y datos del índice, un .log del proceso, entre otros. Para fijar numeración, referencias e índice normalmente se ejecuta el mismo comando dos veces: la primera pasada escribe números en .aux; la segunda los lee de vuelta en el texto. Herramientas como latexmk automatizan estas pasadas múltiples. El flujo completo se cubre en “De la fuente al PDF”.

Los tres que generan PDF directamente

pdflatex, lualatex y xelatex producen todos un PDF directamente. Se diferencian en cómo manejan Unicode y las fuentes, y en la velocidad.

pdflatex usa el motor pdfTeX. pdfTeX fue la extensión de TeX de Hàn Thế Thành durante su investigación doctoral sobre microtipografía (protrusión de caracteres en el margen, expansión sutil de fuentes); su rasgo principal fue producir PDF directamente, sin pasar por DVI. Es el más antiguo de los tres, con la mejor compatibilidad con paquetes existentes y la compilación más rápida. La contrapartida: su entrada es fundamentalmente orientada a bytes, sin Unicode nativo ni fuentes del sistema (LaTeX moderno acepta UTF-8 por defecto, pero las fuentes se limitan a las propias de TeX).

lualatex usa el motor LuaTeX. Asume UTF-8 desde el principio y, mediante el paquete fontspec, usa directamente las fuentes OpenType/TrueType instaladas en el sistema. Su rasgo definitorio es el lenguaje de scripting Lua integrado, que permite intervenir en el propio proceso de composición. Se promueve como la dirección estándar de LaTeX; la composición japonesa se maneja con el paquete luatexja.

xelatex usa el motor XeTeX, desarrollado por Jonathan Kew alrededor de 2004. También admite Unicode y fuentes del sistema, pero su implementación se apoya más en bibliotecas externas y es bastante distinta de LuaTeX. Internamente no escribe PDF directamente: produce un archivo .xdv, una versión extendida de DVI, que xdvipdfmx convierte automáticamente en PDF. Con -no-pdf se detiene en el .xdv antes de esa conversión.

ComandoMotorSalidaUnicode / fuentes
pdflatexpdfTeXPDF directoFuentes TeX; rápido, gran compatibilidad
lualatexLuaTeXPDF directoFuentes del sistema + Unicode + Lua
xelatexXeTeXPDF (vía .xdv internamente)Fuentes del sistema + Unicode

El comando latex produce DVI

El comando latex simple, en el TeX Live actual, ejecuta el motor pdfTeX en modo DVI y produce un archivo .dvi en lugar de un PDF. DVI (device-independent) es un formato intermedio no ligado a un dispositivo de salida concreto; como es incómodo verlo o imprimirlo tal cual, se convierte a PDF con dvipdfmx o a PostScript con dvips. Frente a pdflatex, que emite PDF directamente, este es un enfoque de dos pasos que separa “componer” de “hacer el PDF”.

¿Por qué seguir usando DVI? Algunas herramientas antiguas solo funcionan a través de DVI (partes de PSTricks, por ejemplo) y, como explica la sección siguiente, la composición japonesa ha pasado tradicionalmente por DVI. Para producir DVI desde LuaTeX, usa dvilualatex. La conversión desde DVI se trata con detalle en la página “Convertidores DVI”.

Comandos japoneses — platex / uplatex

platex es pLaTeX ejecutándose sobre el motor pTeX especializado en composición japonesa (desarrollado en ASCII Corporation; hoy e-pTeX). Maneja escritura vertical, espaciado de líneas y reglas de salto japonesas (*kinsoku*), y el espaciado entre texto japonés y latino. Su salida es DVI. La codificación de entrada por defecto varía según el entorno (Shift_JIS / EUC-JP / UTF-8); con -kanji=utf8 lee UTF-8. Aun así, pTeX solo puede tratar directamente el rango ASCII + JIS X 0208.

uplatex es upLaTeX sobre el motor upTeX (de Takuji Tanaka), cuyo procesamiento interno está basado en Unicode. Su entrada por defecto es UTF-8 y maneja caracteres fuera de JIS X 0208 (kanji raros de nombres, todos los ideogramas unificados CJK, etc.) sin paquetes extra, lo que lo convierte en el estándar para artículos japoneses modernos. Su salida también es DVI, y la opción -kanji puede cambiar la codificación de entrada.

terminal
# 日本語: 組版 → DVI → PDF / Japanese: typeset → DVI → PDF
uplatex -kanji=utf8 document.tex   # → document.dvi
dvipdfmx document.dvi              # → document.pdf

El DVI de (u)platex se convierte en PDF mediante dvipdfmx (el dvipdfmx de TeX Live ya entiende upTeX). Las versiones recientes de TeX Live usan UTF-8 por defecto, así que -kanji=utf8 a menudo puede omitirse; indicarlo explícitamente evita sorpresas entre entornos. Para UTF-8 sin BOM de forma fiable, combínalo con -no-guess-input-enc en uplatex. Como alternativa, lualatex + luatexja produce PDF directamente desde fuente japonesa, sin paso DVI.

Opciones que se usan de verdad

Pasa las opciones antes del nombre del archivo fuente. Estas funcionan con los comandos pdfTeX / XeTeX / LuaTeX:

OpciónQué hace
-synctex=1Emite datos SyncTeX para que editor y PDF puedan saltar entre sí
-interaction=nonstopmodeEjecuta hasta el final sin pausar en errores (batchmode es aún más silencioso)
-halt-on-errorSe detiene en el primer error
-file-line-errorInforma errores en formato file:line: (útil para IDE)
-output-directory=DIREscribe salidas en un directorio existente
-jobname=NAMEEstablece el nombre base de los archivos de salida
-shell-escapePermite ejecutar comandos externos mediante \write18 (ver advertencia)
-draftmodeNo escribe el PDF para una comprobación rápida (pdfTeX / LuaTeX)
terminal
pdflatex -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error document.tex

Para el formato de salida, pdfTeX y LuaTeX aceptan -output-format=dvi|pdf (XeTeX usa -no-pdf para .xdv). Ten cuidado con -shell-escape: paquetes como minted (resaltado de código) y algunos paquetes de dibujo lo necesitan para llamar programas externos, pero permite que un documento ejecute comandos de shell arbitrarios. No lo habilites nunca para fuentes en las que no confías.

Cuál deberías usar

  • Documento japonés nuevouplatex (→ dvipdfmx) o lualatex + luatexja.
  • Texto mayormente inglés / europeopdflatex; rápido y compatible.
  • Quieres usar las fuentes del sistemalualatex o xelatex.
  • Necesitas mecanismos solo para DVIlatex (→ dvipdfmx / dvips).

En la práctica, en vez de escribir estos comandos dos veces a mano, la mayoría delega el trabajo en una herramienta como latexmk, que ejecuta tantas pasadas como hagan falta e incluso maneja la conversión DVI. Para profundizar en los motores, consulta “Elegir motor y formato”.

Comprobación del comando antes de entregar

  • Primero prueba el comando solo: ejecuta una vez en la terminal el comando elegido (pdflatex, lualatex, uplatex, etc.) para demostrar que el fallo no depende del editor.
  • Valor por defecto para entregar: añade -halt-on-error -file-line-error -interaction=nonstopmode para que CI y logs apunten al primer error real.
  • Decisión para PDF japonés: con upLaTeX ejecuta uplatex y luego dvipdfmx; con LuaLaTeX emite PDF directamente. No mezcles las dos rutas por accidente.
  • Cómo leer el log: lee desde el primer !, no solo el final de .log, para volver al comando que causó la cascada.