Пакет fontspec - Управление кодировками шрифтов в XeLaTeX

Полное руководство по пакету fontspec для XeLaTeX и LuaLaTeX

Введение в fontspec

Пакет fontspec предоставляет мощную систему выбора и настройки шрифтов для движков XeTeX и LuaTeX. Он заменяет традиционный подход с использованием fontenc и inputenc, предлагая прямую работу со шрифтами системы через Unicode.

Основные возможности

  • Доступ к любым системным шрифтам (OTF, TTF)
  • Полная поддержка Unicode
  • Гибкое управление начертаниями шрифтов
  • Настройка параметров шрифтов
  • Работа с OpenType-функциями

Установка и загрузка

\usepackage{fontspec} % В преамбуле документа

Основные команды

1. Установка основного шрифта

\setmainfont{<название шрифта>}[<опции>]

Пример:

\setmainfont{TeX Gyre Termes}[
  Path = /usr/local/texlive/texmf-local/fonts/opentype/,
  Extension = .otf,
  UprightFont = *-regular,
  BoldFont = *-bold,
  ItalicFont = *-italic,
  BoldItalicFont = *-bolditalic
]

2. Установка моноширинного шрифта

\setmonofont{<название шрифта>}[<опции>]

3. Установка шрифта без засечек

\setsansfont{<название шрифта>}[<опции>]

4. Временное изменение шрифта

\newfontfamily\<команда>{<название шрифта>}[<опции>]

Пример:

\newfontfamily\cyrillicfont{PT Serif}
\newfontfamily\cyrillicfontsf{PT Sans}
\newfontfamily\cyrillicfonttt{PT Mono}

Основные опции шрифтов

Пути и файлы

Опция Описание
Path Путь к файлам шрифтов
Extension Расширение файлов
UprightFont Обычное начертание
BoldFont Полужирное начертание
ItalicFont Курсивное начертание
BoldItalicFont Полужирный курсив

Характеристики шрифта

Опция Описание
Ligatures Управление лигатурами
Numbers Стиль цифр
Scale Масштабирование
Color Цвет шрифта
WordSpace Межсловные пробелы

OpenType-функции

Опция Описание
Renderer Рендерер (Basic/Node)
Script Скрипт (Cyrillic, Latin и др.)
Language Язык
FeatureFile Файл с OpenType-фичами

Примеры конфигураций

Базовая настройка для русского/английского

\usepackage{polyglossia}
\setmainlanguage{russian}
\setotherlanguage{english}

\setmainfont{PT Serif}[
  Ligatures=TeX,
  Extension=.ttf,
  UprightFont=*-Regular,
  BoldFont=*-Bold,
  ItalicFont=*-Italic,
  BoldItalicFont=*-BoldItalic
]

\setsansfont{PT Sans}[
  Ligatures=TeX,
  Extension=.ttf,
  UprightFont=*-Regular,
  BoldFont=*-Bold,
  ItalicFont=*-Italic,
  BoldItalicFont=*-BoldItalic
]

\setmonofont{PT Mono}[
  Scale=0.9,
  Extension=.ttf,
  UprightFont=*-Regular
]

Использование разных шрифтов для разных языков

\usepackage{polyglossia}
\setdefaultlanguage{russian}
\setotherlanguage{english}

\defaultfontfeatures{Ligatures=TeX}

\setmainfont{EB Garamond}[
  Language=English,
  Script=Latin
]

\newfontfamily\cyrillicfont{PT Serif}[
  Language=Russian,
  Script=Cyrillic
]

OpenType-фичи

Включение дополнительных возможностей

\setmainfont{Some Font}[
  RawFeature={
    +ss01; % Альтернативные глифы
    +onum; % Старостильные цифры
    +frac; % Дроби
    +c2sc; % Капитель из прописных
  }
]

Доступные OpenType-фичи

  • +liga - стандартные лигатуры
  • +dlig - декоративные лигатуры
  • +tnum - табличные цифры
  • +pnum - пропорциональные цифры
  • +smcp - капитель из строчных
  • +c2sc - капитель из прописных
  • +frac - дроби
  • +ss01-+ss20 - альтернативные наборы глифов

Работа с математическими шрифтами

\usepackage{unicode-math} % Должен загружаться после fontspec

\setmathfont{TeX Gyre Termes Math}
\setmathfont{XITS Math}[range={\mathcal,\mathbfcal}]
\setmathfont{STIX Two Math}[range={\mathscr}]

Продвинутые техники

Динамическое изменение шрифтов

\newfontfamily\headfont{Helvetica Neue}[Scale=1.2]
\newcommand{\heading}[1]{{\headfont\Large #1}}

Использование символов за пределами Unicode BMP

\newfontface\emojifont{Segoe UI Emoji}[Renderer=Harfbuzz]
\newcommand{\showemoji}[1]{{\emojifont #1}}

Вертикальное выравнивание

\newfontfamily\vertfont{SomeFont}[Vertical=RotatedGlyphs]

Решение проблем

Шрифт не находится

\setmainfont{Arial}[
  Path=/Users/username/Library/Fonts/,
  Extension=.ttf
]

Конфликты кодировок

\usepackage{fontspec}
% Не загружать fontenc или inputenc!

Проблемы с переносами

\usepackage{polyglossia}
\setmainlanguage{russian}
\setmainfont{Some Font}[Language=Russian]

Заключение

Пакет fontspec предоставляет:

  1. Полный доступ к системным шрифтам
  2. Гибкую систему настройки шрифтов
  3. Поддержку современных OpenType-возможностей
  4. Удобную работу с многоязычными документами
  5. Интеграцию с математическими шрифтами через unicode-math

Для максимальной эффективности используйте fontspec в сочетании с:

  • polyglossia для языковой поддержки
  • unicode-math для математических шрифтов
  • microtype для улучшенной типографики