\compare{xelatex-vs-lualatex}

XeLaTeX frente a LuaLaTeX

Ambos motores hablan Unicode de forma nativa y cargan fuentes del sistema mediante fontspec. La diferencia real es el motor de scripting Lua integrado en LuaLaTeX y su canal superior de conformado de texto. Esta guía cubre todas las distinciones relevantes.

XeLaTeX— rápido, Unicode, fuentes del sistemaLuaLaTeX— scripting con Lua + HarfBuzz
Use XeLaTeX cuando…
  • La velocidad de compilación es una prioridad
  • Necesita fuentes del sistema con funciones OpenType
  • Escrituras RTL (árabe, hebreo) con el paquete bidi
  • No necesita scripting con Lua en tiempo de compilación
Use LuaLaTeX cuando…
  • Necesita scripting con Lua dentro de su documento
  • Necesita conformado de texto avanzado (HarfBuzz)
  • Generación de tablas dinámicas o contenido calculado
  • Necesita las funciones de luacolor o luatextra

\section{Diferencias técnicas}

Qué difiere realmente por dentro

Motor de scripting Lua

XeLaTeX

XeLaTeX no tiene lenguaje de scripting integrado. La lógica del documento debe expresarse íntegramente con macros o paquetes de TeX. Es suficiente para casi todas las tareas de composición, pero limita la generación de contenido dinámico en tiempo de compilación.

LuaLaTeX

LuaLaTeX integra un intérprete completo de Lua 5.3 accesible desde el propio documento mediante luacode. Puede calcular valores, iterar sobre datos, llamar a bibliotecas externas de Lua e incorporar los resultados al flujo de composición de TeX en tiempo de compilación.

Conformado de texto y escrituras complejas

XeLaTeX

XeLaTeX usa las bibliotecas de conformado de texto ICU y SIL a través del motor XeTeX. Las escrituras complejas (árabe, devanagari, tailandés) se admiten mediante los paquetes bidi y polyglossia. En la práctica, esto cubre la mayoría de los requisitos de composición multilingüe.

LuaLaTeX

LuaLaTeX integra HarfBuzz (mediante LuaHarfBuzz), el mismo motor de conformado que usan los navegadores, Android y macOS. HarfBuzz ofrece una cobertura de escrituras más amplia y una aplicación más precisa de las funciones OpenType, lo que lo convierte en la mejor opción para documentos con requisitos de escrituras complejas o sustitución avanzada de glifos.

Velocidad de compilación

XeLaTeX es sistemáticamente más rápido que LuaLaTeX. La diferencia se debe a la sobrecarga de inicialización de la máquina virtual de Lua en LuaLaTeX y al canal de conformado de HarfBuzz. En documentos sencillos la diferencia es pequeña; en documentos grandes y con muchas fuentes, LuaLaTeX puede ser entre un 30 % y un 50 % más lento.

XeLaTeX

~1.5s

documento típico de una sola pasada

LuaLaTeX

~2.0s

documento típico de una sola pasada

Compatibilidad de paquetes

XeLaTeX

La mayoría de los paquetes de CTAN que funcionan con pdfLaTeX también funcionan con XeLaTeX, salvo los paquetes de bajo nivel específicos de pdfLaTeX. Los paquetes fontspec y unicode-math son ciudadanos de primera clase.

LuaLaTeX

LuaLaTeX ofrece la misma compatibilidad de paquetes que XeLaTeX, además de acceso al ecosistema de Lua. Paquetes como luacode, luacolor y luatextra son exclusivos de LuaLaTeX.

\subsection{Matriz de funciones}

Comparación lado a lado

Función
XeLaTeX
LuaLaTeX
Entrada Unicode
Nativa
Nativa
Fuentes del sistema (fontspec)
Sí
Sí
Scripting con Lua
No
Sí (luacode)
Velocidad de compilación
Rápida (~1.5 s)
Moderada (~2 s)
Matemáticas OpenType
Sí (unicode-math)
Sí (unicode-math)
Idiomas de derecha a izquierda (RTL)
Sí (bidi)
Parcial (luabidi)
Contenido dinámico
No
Sí (Lua en tiempo de ejecución)
Compat. de paquetes
Buena
Buena
LuaHarfBuzz (conformado de texto)
No
Sí
Uso de memoria
Moderado
Mayor

\section{Recommendations}

¿Qué motor para qué tipo de documento?

El motor adecuado depende de sus requisitos concretos, no de una clasificación universal.

Artículo académico (texto latino)

XeLaTeX

Compilación más rápida, excelente compatibilidad con fontspec y unicode-math completo para fuentes matemáticas modernas.

Informe multilingüe (escrituras complejas)

LuaLaTeX

El conformado de HarfBuzz gestiona el árabe, el devanagari y el tailandés con más precisión que el motor ICU de XeLaTeX.

Generación automatizada de informes

LuaLaTeX

El scripting con Lua permite recorrer datos y generar tablas o secciones en tiempo de compilación, sin preprocesamiento externo.

Tesis / disertación

XeLaTeX

Iteración más rápida al escribir, amplia compatibilidad con plantillas y fontspec cubre todos los requisitos habituales de fuentes.

Libro o documento extenso

LuaLaTeX

Los callbacks de Lua permiten una personalización microtipográfica más allá de lo que permiten las macros de TeX. HarfBuzz mejora la calidad de los glifos con fuentes personalizadas.

Currículum

XeLaTeX

Documento corto, compilación rápida y fontspec gestiona todas las fuentes de marca personalizadas que pueda necesitar.

\begin{examples}

Ejemplos mínimos funcionales

Ambos ejemplos se compilan con FormaTeX. Pruébelos directamente en el playground.

XeLaTeX
% XeLaTeX — Unicode native, system fonts via fontspec
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}

\setmainfont{Linux Libertine O}
\setmathfont{XITS Math}

\begin{document}
XeLaTeX handles Unicode natively: α β γ — no inputenc needed.
Arabic: \textarabic{مرحبا} \quad Greek: Αλφαβητικό

$\int_0^\infty e^{-x^2}\, dx = \frac{\sqrt{\pi}}{2}$
\end{document}
LuaLaTeX
% LuaLaTeX — Lua scripting + modern font loading
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}

\setmainfont{Linux Libertine O}

% Generate content with Lua at compile time
\begin{luacode*}
  local items = {"Introduction", "Methods", "Results", "Discussion"}
  for i, v in ipairs(items) do
    tex.print(i .. ". " .. v .. "\\\\")
  end
\end{luacode*}

\begin{document}
LuaLaTeX: Unicode + Lua scripting in a single engine.
$f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n$
\end{document}

\section{FAQ}

Preguntas frecuentes

XeLaTeX y LuaLaTeX, ambos disponibles

Compile con el motor que prefiera

FormaTeX ejecuta XeLaTeX, LuaLaTeX, pdfLaTeX y latexmk. Cambie de motor modificando un solo campo de la API, sin infraestructura.