Пакет 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 для улучшенной типографики