fontspec (Xe/Lua)

fontspec es el paquete que permite llamar por nombre a cualquier fuente OpenType o TrueType instalada en el sistema. Escribir \setmainfont{Some Font} cambia la tipografía del cuerpo, y funciones OpenType como ligaduras y estilos de cifras se activan con opciones key=value. La condición firme: requiere XeLaTeX o LuaLaTeX; no funciona con el antiguo pdfLaTeX. Esta página recorre cómo cargarlo, fijar las fuentes romana/sans/mono, definir familias extra y seleccionar fuentes por archivo y por función.

Qué es fontspec y qué motor necesita

El TeX tradicional solo podía usar fuentes en formatos especiales preparados para él, y no podía recurrir sin más a las tipografías ya instaladas en la máquina. fontspec es el paquete que permite usar fuentes OpenType y TrueType, instaladas en el sistema o colocadas dentro del proyecto, seleccionadas por nombre de tipografía o por nombre de archivo. Conecta esa selección con el NFSS de LaTeX, maneja el cambio automático a negrita e itálica y expone las funciones tipográficas más ricas de OpenType.

Antes de nada, ten en cuenta la restricción fuerte: fontspec solo funciona con XeLaTeX o LuaLaTeX, porque esos motores manejan Unicode y fuentes del sistema de forma nativa. No puede usarse con pdfLaTeX (pdftex): si pruebas \usepackage{fontspec} en pdfLaTeX obtendrás un error. Comprueba qué motor procesa tu documento y, si hace falta, compila con lualatex o xelatex. Si empiezas desde cero, LuaLaTeX es un valor por defecto seguro, también por su soporte de japonés.

Se carga simplemente con \usepackage{fontspec}. En XeLaTeX y LuaLaTeX a menudo ya está cargado por la clase u otro paquete; escribirlo explícitamente no hace daño.

Definir las fuentes romana, sans y mono

Las tres tipografías base del documento se fijan en el preámbulo con estos tres comandos. \setmainfont{…} define la romana (fuente por defecto del cuerpo), \setsansfont{…} la sans serif (la que seleccionan \textsf y \sffamily) y \setmonofont{…} la monoespaciada/typewriter (para \texttt y \ttfamily). El argumento es simplemente el nombre de la fuente registrado en el sistema.

document.tex
% xelatex か lualatex でコンパイルする
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}   % 本文(ローマン体)
\setsansfont{TeX Gyre Heros}    % サンセリフ体
\setmonofont{TeX Gyre Cursor}   % 等幅体
\begin{document}
This is the main font; \textsf{this is sans}; \texttt{this is mono}.
\end{document}

fontspec localiza automáticamente los miembros en negrita e itálica de una familia nombrada y los asigna a \textbf, \textit y su combinación. Escribe \textbf{…} y \emph{…} como siempre y obtendrás la negrita e itálica de la familia elegida. Ten en cuenta también que colocar estos comandos en el preámbulo hace que las mismas fuentes se apliquen dentro de matemáticas de tipo \mathrm (LaTeX congela las fuentes matemáticas en esta fase, así que solo una configuración en el preámbulo surte efecto). La tipografía matemática propiamente dicha se gestiona aparte, mediante unicode-math, más abajo.

Familias extra y fuentes puntuales

Cuando necesitas una tipografía más allá del trío romana/sans/mono, define un nuevo comando de cambio con \newfontfamily. Su primer argumento es el nombre del comando que quieres crear (un nombre con barra inversa elegido por ti) y el segundo es el nombre de la fuente.

document.tex
\usepackage{fontspec}
\newfontfamily\titlefont{TeX Gyre Bonum}
\newfontfamily\quotefont{TeX Gyre Schola}
% ...
\titlefont A heading in Bonum

{\quotefont A quoted passage in Schola.}

Un comando definido así, como \titlefont, es un cambio declarativo (al estilo de \rmfamily): aplica la fuente a todo lo que sigue. Para limitar su alcance, envuélvelo entre llaves, {\titlefont …}. Para una fuente usada una sola vez, puedes omitir la definición y aplicar \fontspec{Font Name} directamente como declaración en el lugar; aunque, como recarga la fuente cada vez, una cara usada repetidamente conviene definirla con \newfontfamily.

Seleccionar por nombre o por archivo

Hay dos formas de nombrar una fuente. Una es seleccionarla por el nombre de tipografía registrado en el sistema, escribiendo el nombre directamente como en \setmainfont{TeX Gyre Termes}. Es cómodo, pero la misma fuente debe estar también en la máquina de los demás. La otra es seleccionarla por archivo, incluyendo los archivos de fuente dentro del proyecto: la opción correcta cuando quieres una salida garantizada y reproducible.

Para seleccionar por archivo, das las opciones Path= (directorio que contiene las fuentes) y Extension= (sufijo como .otf o .ttf), y luego asignas cada peso y estilo con UprightFont=, BoldFont=, ItalicFont= y BoldItalicFont=. El asterisco * escrito en esos valores es un marcador que se sustituye por el nombre común de archivo (nombre base) dado en el segundo argumento.

document.tex
\usepackage{fontspec}
% プロジェクト内の fonts/ に置いた OTF を、ファイル名で指定する
\setmainfont{LibreBaskerville}[
  Path       = ./fonts/ ,
  Extension  = .otf ,
  UprightFont    = *-Regular ,
  BoldFont       = *-Bold ,
  ItalicFont     = *-Italic ,
  BoldItalicFont = *-BoldItalic ,
]

Aquí el nombre base LibreBaskerville se expande en cada valor, por lo que se cargan fonts/LibreBaskerville-Regular.otf, fonts/LibreBaskerville-Bold.otf, etc. La tabla siguiente compara los dos métodos de selección.

MétodoCómoCuándo conviene
By name\setmainfont{Font Name}; nombre registrado en el sistemaTrabajo rápido; borradores y documentos personales en tu máquina
By filePath / Extension / *Font apuntan a archivos incluidosReproducibilidad; colaboración, distribución, CI, fuentes propias o no registradas

Activar funciones OpenType

Las fuentes OpenType contienen funciones tipográficas como ligaduras, estilos de números y versalitas, y fontspec las activa mediante opciones key=value. Las más útiles son:

  • Ligatures= — controla las ligaduras. Ligatures=TeX activa las conversiones de entrada estilo TeX: `-- a raya ene, --- a raya eme y comillas estilo TeX a comillas curvas (a menudo activo por defecto en la configuración estándar). Otros valores son Common (ligaduras estándar fi, fl, etc.), Rare/Discretionary (ligaduras opcionales) y Historic`.
  • Numbers= — estilo de números. Combina OldStyle (cifras de texto, con ascendentes y descendentes) o Lining (cifras modernas de altura uniforme) con Proportional (anchuras proporcionales) o Monospaced (anchuras fijas).
  • Letters=SmallCaps — versalitas. También hay valores como Letters=Uppercase.
  • StylisticSet= — selecciona por número un conjunto estilístico de glifos alternativos que ofrece la fuente.
  • Scale= — factor de escala. Además de un número, Scale=MatchLowercase (igualar la altura x) y Scale=MatchUppercase (igualar la altura de mayúsculas) son útiles para ajustar una fuente secundaria a la principal.
  • Script= / Language= — selecciona escrituras no latinas o reglas de conformación propias de una lengua (por ejemplo Script=Arabic).

Se escriben en la opción (el segundo argumento entre corchetes) del comando que fija la fuente. Aquí está la fuente del cuerpo con ligaduras estilo TeX y cifras de estilo antiguo:

document.tex
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}[
  Ligatures = TeX ,
  Numbers   = OldStyle ,
]
% サンセリフは本文に大きさをそろえて読み込む
\setsansfont{TeX Gyre Heros}[Scale = MatchLowercase]

Para añadir una función solo a un tramo y no a todo el documento, usa \addfontfeature{…} (o \addfontfeatures{…} para varias). Esto añade localmente la función indicada a la fuente actual y solo surte efecto dentro de las llaves que la envuelven.

latex
In a table we want {\addfontfeature{Numbers={Lining,Monospaced}} 01234 56789} aligned.

Matemáticas y japonés: fuentes tratadas aparte

fontspec se encarga de las fuentes latinas del texto del cuerpo. Dos áreas se gestionan aparte.

Una es la tipografía matemática. Para llevar también las matemáticas a fuentes OpenType en XeLaTeX o LuaLaTeX, carga el paquete separado unicode-math y nombra una fuente matemática OpenType (Latin Modern Math, STIX Two Math, etc.) con \setmathfont{…}. Conviene recordar que \setmainfont para texto y \setmathfont para matemáticas tienen papeles distintos. Consulta la página de fuentes matemáticas para más detalles.

La otra área es japonés. \setmainfont solo define la cara latina y no afecta a la japonesa. En LuaLaTeX se usa luatexja-fontspec, en la práctica la contraparte japonesa de fontspec, y se fijan las fuentes japonesas con sus comandos “j (Japanese)”: \setmainjfont{…} (Mincho, cuerpo japonés), \setsansjfont{…} (Gothic), \newjfontfamily, etc., con opciones en gran parte compartidas con fontspec. En resumen, hay dos vías paralelas: \setmainfont para latín y \setmainjfont para japonés. Las fuentes japonesas se tratan en su propia página.