Математические шрифты и операторы

Урок про специальные математические алфавиты и про то, как вставлять обычный текст внутрь формулы.

Математические алфавиты (\mathbb, \mathcal, \mathrm) — особые начертания для множеств, операторов и обозначений, у которых есть устоявшийся смысл.

В математике начертание буквы несёт смысл: $\mathbb{R}$ — это множество вещественных чисел, а просто $R$ — какая-то переменная. LaTeX даёт алфавиты для каждой роли.

Главные алфавиты

КомандаВидТипичное применение
\mathbb{R}$\mathbb{R}$ (ажурные)числовые множества: $\mathbb{N}, \mathbb{Z}, \mathbb{Q}, \mathbb{R}, \mathbb{C}$
\mathcal{L}$\mathcal{L}$ (каллиграфия)преобразования, категории: $\mathcal{F}, \mathcal{L}$
\mathrm{d}$\mathrm{d}$ (прямой)дифференциал $\mathrm{d}x$, обозначения из нескольких букв
\mathbf{v}$\mathbf{v}$ (жирный)векторы и матрицы
\mathfrak{g}$\mathfrak{g}$ (готический)алгебры Ли, идеалы

Множество вещественных чисел и непрерывная функция на отрезке:

f \colon \mathbb{R} \to \mathbb{R}, \quad \mathcal{C}[0, 1]

$$f \colon \mathbb{R} \to \mathbb{R}, \quad \mathcal{C}[0, 1]$$

Прямой шрифт для многобуквенных обозначений

Если переменная состоит из нескольких букв (а не произведения), её ставят прямым шрифтом, иначе LaTeX наберёт курсивом как произведение:

v_{\mathrm{max}} \quad E_{\mathrm{kin}} \quad \mathrm{Re}, \mathrm{Im}

$$v_{\mathrm{max}} \quad E_{\mathrm{kin}} \quad \mathrm{Re}, \; \mathrm{Im}$$

Текст внутри формулы

Чтобы вставить в формулу обычные слова (с пробелами и прямым шрифтом), используют \text из amsmath:

x > 0 \quad \text{для всех } x \in S

$$x \gt 0 \quad \text{для всех } x \in S$$

Без \text слова «для всех» набрались бы как произведение букв-переменных в курсиве и без пробелов — нечитаемо.

Свои операторы — напоминание

Имена операторов (sin, det, и ваши собственные) набираются прямым шрифтом через готовые команды или \operatorname:

\det(A) \quad \gcd(a, b) \quad \operatorname{sign}(x)

$$\det(A) \quad \gcd(a, b) \quad \operatorname{sign}(x)$$

Как работает под капотом

Каждый математический алфавит — это отдельный шрифтовой набор, на который команда переключает свой аргумент. \mathbb и \mathfrak требуют пакета amssymb (или amsfonts), потому что ажурные и готические глифы лежат именно там. \text временно возвращает текстовый режим внутри математики: восстанавливаются пробелы и прямой шрифт основного текста. Разница между $R$ (курсив-переменная) и $\mathbb{R}$ (множество) — это разница глифов из разных наборов, и она семантически значима.

amssymb, amsfonts и что откуда

Стоит чётко понимать, какой пакет за какой алфавит отвечает, иначе ошибка «Undefined control sequence» будет преследовать вас регулярно. Сам по себе LaTeX знает \mathrm, \mathbf, \mathit и \mathcal — для них дополнительные пакеты не нужны. А вот ажурные буквы \mathbb и готические \mathfrak живут в наборе AMS: их подключает \usepackage{amssymb}, который, в свою очередь, опирается на amsfonts с самими описаниями шрифтов. На практике почти всегда пишут одну строку \usepackage{amssymb}, и этого достаточно. Если же ажурных букв нужно больше, чем заглавная латиница, или нужен ажурный строчный шрифт, подключают отдельный пакет bbold или dsfont с командой \mathds — стандартный \mathbb покрывает только прописные буквы.

Жирная математика: mathbf против boldsymbol

Команда \mathbf делает аргумент жирным, но при этом ставит его прямым шрифтом и теряет наклон — для латинских векторов это часто как раз то, что нужно. Однако \mathbf не действует на греческие буквы и на математические символы вроде знака суммы: написать жирную «бету» через него не получится. Для таких случаев есть \boldsymbol из пакета amsmath (точнее, подгружаемого им amsbsy): он делает жирным и сохраняет курсивный наклон, поэтому годится для жирных греческих букв, операторов и отдельных символов. Запомните разницу так: \mathbf — жирный и прямой, обычно для буквенных обозначений векторов; \boldsymbol — жирный с сохранением наклона, для всего остального, что \mathbf не берёт.

DeclareMathOperator и место объявления

Когда вы пишете свой оператор несколько раз — например, tr для следа матрицы или rank для ранга, — каждый раз вызывать \operatorname неудобно. Правильнее один раз объявить команду через \DeclareMathOperator{\tr}{tr}, и тогда \tr всюду будет печататься прямым шрифтом с корректными отступами вокруг. Ключевой момент: \DeclareMathOperator можно ставить только в преамбуле, до \begin{document}, а не в теле текста — это объявление, а не команда исполнения. Если оператору нужны нижние пределы, как у lim или max (чтобы условие уходило под знак в выключных формулах), используют звёздочку: \DeclareMathOperator*{\argmax}{arg\,max}. Разовый, нигде больше не встречающийся оператор проще набрать прямо в формуле через \operatorname и не засорять преамбулу.

Частые ошибки

  • \mathbb/\mathfrak без amssymb — ошибка «Undefined control sequence».
  • Многобуквенные обозначения курсивом — выглядят как произведение; ставьте \mathrm.
  • Русский текст в формуле без \text — каша из курсивных букв без пробелов.

Итоги

  • \mathbb — числовые множества, \mathcal — каллиграфия, \mathrm — прямой шрифт, \mathbf — векторы.
  • \text{...} вставляет обычные слова с пробелами внутрь формулы.
  • Имена операторов — прямым шрифтом через команды или \operatorname.
Проверьте себя
1. Чем команда \mathbb{R} отличается по смыслу от просто R?
AНичем
B\mathbb{R} — ажурное обозначение множества вещественных чисел, а R — обычная переменная
C\mathbb{R} печатает букву крупнее
DR нельзя писать в формуле
2. Как правильно вставить русские слова внутрь формулы?
AПросто написать их между $
BЧерез \text{...} из amsmath — с пробелами и прямым шрифтом
CКомандой \textbf
DСлова в формулу вставить нельзя
3. Зачем многобуквенное обозначение вроде v_max писать в \mathrm?
AЧтобы было жирным
BИначе буквы наберутся курсивом как произведение переменных, а не как единое имя
CЭто требование amssymb
DЧтобы появился индекс