Cambiaste la tipografía del texto a Times y las matemáticas siguieron en Computer Modern: es el primer tropiezo de cualquiera que elija una fuente matemática en LaTeX. Lo peor viene después. Carga mathptmx, da por hecho que el documento ya es Times de principio a fin y pasa el PDF por pdffonts: CMEX10 sigue incrustado. Los signos de sumatorio e integral son, todavía hoy, los de Knuth. Esta página compara los paquetes de fuentes matemáticas para pdfLaTeX (newtxmath, mathpazo, fourier, kpfonts y demás) con unicode-math más \setmathfont en XeLaTeX y LuaLaTeX, contando cada vez qué acabó realmente dentro del PDF. Los comandos de alfabeto matemático (\mathbb, \bm y compañía) tienen su propia página; aquí la pregunta es cómo elegir la tipografía matemática para todo un documento.
Cambiar la fuente del texto no cambia las matemáticas
En LaTeX la fuente del texto y la del modo matemático se gestionan en sistemas completamente separados. Sustituye la tipografía del texto con una línea \usepackage{...} y las variables, los operadores y los subíndices seguirán en Computer Modern mientras no digas otra cosa. Es diseño, no descuido. Una fuente matemática debe llevar información que una fuente de texto sencillamente no tiene: la altura de los símbolos y la posición del eje, las piezas de extensión que permiten crecer a radicales y paréntesis, cuánto bajan los subíndices, el grosor del filete de fracción; decenas de dimensiones. No se puede reutilizar una tipografía de texto corriente para componer matemáticas. Cambiar la tipografía matemática significa, por tanto, traer una fuente construida para ello.
Qué se incrusta de verdad: contar con pdffonts
Saber si un paquete de fuentes matemáticas ha reemplazado de verdad a Computer Modern se resuelve al instante contando las fuentes incrustadas en el PDF. Basta con pasar el archivo al pdffonts de Poppler (viene en poppler-utils en la mayoría de los sistemas). Compilando un mismo documento breve —una línea de texto y una fórmula en display con una integral, un sumatorio, una griega minúscula y una griega mayúscula— con pdfLaTeX en TeX Live 2024, los resultados se separan limpiamente en tres grupos: los que reemplazan por completo (newtx, newpx, fourier, kpfonts, mathdesign), los que dejan atrás Computer Modern (mathptmx, mathpazo, eulervm) y, si no haces nada, Computer Modern en todas partes.
# the only honest way to check which math font you actually shipped
pdflatex paper.tex
pdffonts paper.pdf
# name type emb sub uni
# ------------------------------------ ----------------- --- --- ---
# QSPJFW+NimbusRomNo9L-Regu Type 1 yes yes yes
# CZKGAS+CMR10 Type 1 yes yes yes <- still Computer Modern
# UYVLXV+CMEX10 Type 1 yes yes yes <- the big operators| Qué se carga | Fuentes matemáticas reportadas por pdffonts | ¿Sobrevive CM? |
|---|---|---|
(none) | CMR10 CMMI10 CMSY7 CMEX10 CMMI7 CMR7 | Todo; el Computer Modern math por defecto |
mathptmx | NimbusRomNo9L StandardSymL CMR10 CMSY10 CMMI10 CMEX10 | Sí. + y = vienen de CMR10; \sum e \int, de CMEX10 |
mathpazo | URWPalladioL PazoMath CMR10 CMSY10 CMEX10 | Sí; los grandes operadores siguen en CMEX10 |
newtxmath | NewTXMI txsys txmiaX txexs NewTXMI7 | No. En el texto se obtiene TeXGyreTermesX-Regular |
newpxmath | NewPXMI pxsys pxmiaX txexs | No; la fuente de extensión es el mismo txexs que usa newtx, y se incrusta el subconjunto idéntico |
fourier | Fourier-Math-Symbols / -Extension / -Letters | No; el texto es Utopia. Una línea y listo |
kpfonts | Kp-Regular Kp-Italic Kp-Ex Kp-Sy | No; texto y matemáticas son todo Kp |
eulervm | EURM10 EUFM10 EUEX10 más CMR10 CMR7 | Sí; letras, símbolos y grandes operadores pasan a Euler, pero la familia operators (dígitos, romana vertical) conserva la fuente del texto |
mathdesign | Un juego completo MathDesign-CH-Regular | No; con [charter] el texto es CharterBT |
La vía heredada: emparejar texto y matemáticas con pdfLaTeX
El gesto estándar en pdfLaTeX consiste en cargar un paquete de texto y otro de matemáticas en pareja. La recomendación más fácil hoy es la familia newtx: pon \usepackage{newtxtext} junto a \usepackage{newtxmath} y tendrás texto tipo Times con matemáticas a juego. Pese al nombre, lo que newtxtext incrusta no es Times sino una TeX Gyre Termes ampliada: pdffonts informa de TeXGyreTermesX-Regular. Para Palatino se usa mathpazo, o bien newpxtext con newpxmath. Si quieres Charter, ten en cuenta que no existe ningún xcharter-math.sty: en pdfLaTeX se invoca como opción, \usepackage[xcharter]{newtxmath}, y al XCharter-Math.otf de OpenType se llega con el \setmathfont de la sección siguiente. El mismo patrón encaja con muchas otras tipografías de texto —libertine, libertinus, cochineal, erewhon, stix2, noto—, y ahí está la verdadera fuerza de newtxmath.
Si quieres cambiar texto y matemáticas de una sola línea, fourier (texto Utopia más matemáticas Fourier) y kpfonts (la familia Kepler) son apuestas seguras; en las mediciones anteriores ninguno dejó una sola fuente Computer Modern. El error a evitar es tomar un paquete solo de texto por un paquete matemático. Carga libertinus en pdfLaTeX, por ejemplo, y las matemáticas siguen en CM: el PDF lleva CMMI10, CMR10 y CMEX10 junto a LibertinusSerif-Regular. Esa medición concreta está en la página de fuentes occidentales. El otro accidente clásico es mezclar una tipografía de texto con una matemática que no le corresponde. Empareja newtxtext (tipo Times) con newpxmath (tipo Palatino) y ambas fuentes funcionan a la perfección, pero la página desafina: ni los anchos ni el gris tipográfico concuerdan.
% --- Times-like text and matching math (the easy recommendation) ---
\usepackage{newtxtext}
\usepackage{newtxmath}
% --- Palatino text and math, in one package ---
% \usepackage{mathpazo}
% --- one line for both, with no Computer Modern left behind ---
% \usepackage{fourier} % Utopia text + Fourier math
% \usepackage{kpfonts} % the Kepler family
% --- match math to another text face through newtxmath ---
% \usepackage{libertinus}
% \usepackage[libertinus]{newtxmath}La vía moderna: unicode-math y \setmathfont
En XeLaTeX o LuaLaTeX basta con cargar unicode-math y escribir una sola línea \setmathfont{…} para componer todas las matemáticas a partir de una única fuente matemática OpenType, barriendo el montón de paquetes. La restricción de motor es real: escribe \usepackage{unicode-math} en pdfLaTeX y se detiene con ! Package unicode-math Error: Cannot be run with pdftex!, seguido de (unicode-math) Use XeLaTeX or LuaLaTeX instead. Lo que lo hace posible es la tabla MATH de OpenType: un bloque normalizado dentro del archivo de fuente con todas las dimensiones que TeX necesita para componer matemáticas —grosor del filete de fracción, cuánto bajan los subíndices, el hueco sobre un radical, cómo se ensambla un paréntesis extensible a partir de piezas—. Como esos valores viven en la fuente, cambiar de fuente cambia con ella los parámetros de composición. Si no nombras ninguna fuente, se carga Latin Modern Math por defecto.
Hay una mina en el orden de carga. Carga amssymb después de unicode-math y obtendrás cuatro errores de la misma forma, encabezados por ! LaTeX Error: Command \eth already defined. y seguidos de \smallsetminus, \digamma y \backepsilon (medido en TeX Live 2024). unicode-math ya definió esos símbolos desde el lado Unicode, y amssymb choca al intentar redefinirlos. Invierte el orden —amsmath, luego amssymb, luego unicode-math— y el mismo documento compila sin un solo error. Recuerda la regla como «unicode-math va siempre después de los paquetes relacionados con fuentes» y evitarás la mayor parte de los problemas.
| Fuente matemática OpenType | Carácter y tipografía de texto que la acompaña |
|---|---|
Latin Modern Math | En la línea de Computer Modern; se carga por defecto. Casa con Latin Modern Roman |
TeX Gyre Termes Math | Tipo Times; casa con TeX Gyre Termes. También hay versiones Pagella, Bonum, Schola y DejaVu |
STIX Two Math | Cobertura muy amplia, pensada para la edición científica; casa con STIX Two Text. macOS la incluye |
Libertinus Math | La compañera matemática de Libertinus Serif: un emparejamiento que pdfLaTeX no puede dar |
XCharter-Math | La línea Charter. No hay xcharter-math.sty; al OTF se llega con \setmathfont |
NewCMMath-Regular | La cara matemática de New Computer Modern; el aspecto de CM con cobertura Unicode mucho más amplia |
Fira Math | Una fuente matemática sans serif; útil cuando diapositivas y pósteres quieren matemáticas a juego |
Asana-Math | Una fuente matemática cercana a Palatino; veterana junto a XITS, derivada de STIX |
The font "Latin Modern Math" cannot be found: XeLaTeX frente a LuaLaTeX
El mismo \setmathfont{Latin Modern Math} funciona en LuaLaTeX y falla en XeLaTeX con ! Package fontspec Error: The font "Latin Modern Math" cannot be found., medido en macOS con TeX Live 2024. La causa está en cómo resuelve cada motor un nombre de fuente. LuaTeX puede buscar una fuente por nombre dentro del árbol de directorios propio de TeX (el TDS), mientras que XeTeX consulta la base de datos de fuentes del sistema operativo, así que una fuente que viene con TeX Live pero no está registrada en el sistema puede resultar simplemente «no encontrada». En la misma prueba solo STIX Two Math se resolvió también en XeLaTeX, porque macOS incluye esa fuente en todo el sistema. La resolución de nombres motor por motor se trata a fondo en la página de fontspec; aquí van solo los remedios: dar el nombre de archivo (\setmathfont{latinmodern-math.otf}), añadir [Path=…] o pasarse a LuaLaTeX.
% compile with lualatex (or xelatex, but see the note on name lookup)
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb} % must come BEFORE unicode-math
\usepackage{unicode-math} % always after the font packages
\setmainfont{TeX Gyre Termes} % text, via fontspec
\setmathfont{TeX Gyre Termes Math} % the matching OpenType math font
% \setmathfont{latinmodern-math.otf} % by file name, if lookup by name fails
\begin{document}
\[ f(x) = \int_{-\infty}^{\infty} \hat f(\xi)\, e^{2\pi i x \xi}\, d\xi. \]
\end{document}Tomar solo una parte de otra fuente: range=
Cuando a la fuente matemática elegida le falta un carácter que necesitas, la opción range= de \setmathfont cubre el hueco desde otra fuente. range= acepta un rango Unicode, un símbolo suelto como range=\int, un estilo de alfabeto como range=\symbb (que también puede escribirse range=bb) y combinaciones de estilo y escritura como range=bfit/{greek,Greek}. El efecto es medible: añade \setmathfont{STIX Two Math}[range=\symbb] sobre una fuente principal Latin Modern Math y pdffonts informa de ambas, LatinModernMath-Regular y STIXTwoMath-Regular, llevando esta última solo el puñado de letras de pizarra. Como solo se cargan las casillas pedidas, mezclar así no infla el PDF. El único requisito es que ya se haya fijado una fuente matemática principal por la vía normal.
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math} % the main math font
\setmathfont{STIX Two Math}[range=\symbb] % blackboard bold only
\setmathfont{TeX Gyre Termes Math}[range=bfit/{greek,Greek}] % bold-italic Greek onlyEntonces, ¿cuál elegir? Empareja las matemáticas con el texto
El consejo se reduce a una regla: elige la fuente de texto y la matemática como pareja. Sea cual sea el motor, ese principio no se mueve. Si no haces nada obtienes Computer Modern (pdfLaTeX) o Latin Modern Math (el valor por defecto de unicode-math), que son bastante hermosas; mientras ninguna norma editorial nombre una tipografía, no hay razón para cambiar. Si cambias en pdfLaTeX, escoge cosas hechas la una para la otra: Times con newtxtext más newtxmath, Palatino con mathpazo o la pareja newpx, Utopia con fourier, Kepler con kpfonts. En XeLaTeX o LuaLaTeX, carga amsmath, amssymb, unicode-math en ese orden y pasa a \setmainfont y \setmathfont nombres de la misma familia. Y luego comprueba con pdffonts antes de enviar el archivo a ningún sitio. La fuente que crees haber entregado puede no ser la que entregaste: justo ahí empezó esta página.
- Si no haces nada, obtienes Computer Modern (pdfLaTeX) o Latin Modern Math (el valor por defecto de
unicode-math). Sin una norma que cumplir, no hace falta cambiar. - Cambiar en pdfLaTeX: usa paquetes pensados como pareja. Times es
newtxtextmásnewtxmath; Palatino,mathpazo; para una sola línea,fourierokpfonts. - En XeLaTeX o LuaLaTeX: carga
amsmath,amssymb,unicode-mathen ese orden y mantén\setmainfonty\setmathfonten la misma familia. - No mezcles una tipografía de texto con una matemática ajena (texto Times, matemáticas Palatino). Nada falla; la página lo delata.
- Termina siempre comprobando la incrustación con
pdffonts.mathptmxymathpazodejanCMEX10detrás.