Различные шрифты внутри и снаружи математического режима

Различные шрифты внутри и снаружи математического режима

При обработке простого файла:

\documentclass{report}

\begin{document}
1234567890

$1234567890$
\end{document}

с pdflatexодним получите PDF только с одним шрифтом (CMR10), но при обработке с любым из xelatexних lualatexполученный PDF-файл будет использовать Latin Modern Roman 10 вне математического режима и CMR10 внутри.

Каковы причины этого?

решение1

Начиная с TeX Live 2018 LaTeX теперь UTF-8 по умолчанию, поскольку «революция Unicode» была завершена 1. Это делает излишним добавление \usepackage[utf8]{inputenc}при использовании pdfLaTeX.

Однако поддержка UTF-8 в pdfLaTeX является фиктивной, и вы не можете рассчитывать на получение осмысленного вывода при вставке произвольных символов UTF-8 во входные данные, поскольку базовый движок pdfTeX изначально ограничен 8-битной кодировкой.

Совсем по-другому обстоит дело с Xe/LuaTeX. Эти движки поддерживают UTF-8 по умолчанию 2 . Традиционные шрифты TeX очень ограничены в предлагаемых ими глифах 3 . Этого определенно недостаточно для описания UTF-8, поэтому шрифт также должен охватывать весь диапазон UTF-8 4 . Для этого была введена кодировка TU.

По умолчанию LaTeX загружает семейство шрифтов Computer Modern (CM). Шрифт CMR10 недоступен в кодировке TU (и никогда не будет), поэтому вместо него загружается его ближайший родственник Latin Modern Roman 10.

Теперь остается вопрос, почему Latin Modern не используется в математическом режиме? Это потому, что в математическом режиме все немного сложнее. Традиционная настройка заключалась в том, чтобы иметь разные семейства и команды, такие как \mathbf, \mathcalи т. д., переключаемые на другое семейство. Это больше невозможно в Unicode, потому что все символы взяты из одного шрифта. Поэтому подход переключения семейства больше не работает и должен быть заменен гораздо более сложной системой, которая меняет математические коды туда и обратно. Это реализовано в пакете unicode-math. Вы также заметите, почему это проблематично, потому что с unicode-mathпакетом TeX внезапно стал намного медленнее из-за необходимости постоянно переназначать тысячи математических кодов. Вот почему в настоящее время сохраняется стандартная кодировка OML/OMS.


1 В настоящее время все хранят свои файлы в UTF-8, и большинство программ понимают UTF-8. Просто подумайте об эмодзи (они повсюду). Они являются частью UTF-8, поэтому все, что может отображать эмодзи, должно поддерживать UTF-8.
2 На самом деле LuaTeX отклонит ваш файл, если он не в UTF-8.
3 Кодировка T1 может кодировать только 256 глифов.
4 Другой вопрос, есть ли в шрифте требуемый глиф.

решение2

Настройка шрифтов для текста и математики — это довольно отдельные задачи в TeX: текстовые шрифты должны заботиться о таких вещах, как диакритические знаки и переносы, а математические шрифты — о большом количестве символов и правильном размещении надстрочных и верхних индексов.

В вашем примере используется всего несколько глифов, которые в pdftex можно взять из того же шрифта. Но если вы добавите, например, минус (-) или символы (abc), используемые шрифты будут разными внутри и снаружи математики. А если вы переключитесь на рекомендуемую кодировку T1 для текста, то \usepackage[T1]{fontenc}будут даже различия для чисел.

Для движков Unicode есть разница даже в настройках по умолчанию, поскольку использование шрифта Unicode в качестве текстового шрифта является более или менее обязательным для правильной расстановки акцентов и переносов (см., например,https://tex.stackexchange.com/a/470987/2388). Поэтому в начале 2017 года ядро ​​LaTeX изменило настройки по умолчанию для этого движка, чтобы пользователям больше не приходилось загружать fontspec.

В математике переносы и акцентированные символы не очень важны, поэтому устаревшая настройка математики работает в движке unicode. Но даже если настройка математики будет изменена для использования шрифта unicode, это будет не то же самое, что и textfont, а, например, латинская современная математика.

Связанный контент