При обработке простого файла:
\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, а, например, латинская современная математика.