Проблемы со шрифтами в lualatex при использовании fontspec и polyglossia

Проблемы со шрифтами в lualatex при использовании fontspec и polyglossia

Я пытаюсь использовать lualatex для набора документа, который содержит смесь хинди и английского языков. Следующий MWE работает:

\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{hindi}
\setotherlanguage{english}
\usepackage{fontspec}
\newfontscript{Devanagari}{deva,dev2}
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Scale=1.1,Script=Devanagari]
\newfontfamily{\englishfont}{Noto Serif}
\begin{document}
 
This is a test.
 
 यह एक परीक्षा है।
\end{document} 

и дает правильный вывод.

введите описание изображения здесь

Однако если я изменю язык по умолчанию на английский, а другой язык на хинди, как в MWE ниже

\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hindi}
\usepackage{fontspec}
\newfontscript{Devanagari}{deva,dev2}
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Scale=1.1,Script=Devanagari]
\newfontfamily{\englishfont}{Noto Serif}
\begin{document}
 
This is a test.
 
 यह एक परीक्षा है।
\end{document} 

Символы хинди не отображаются. В чем проблема? введите описание изображения здесь

решение1

Polyglossia не определяет язык автоматически. (В Babel есть команда для этого.) Вы хотите выбрать его с помощью \texthindiили \textenglish. Так получилось, что ваш шрифт хинди также поддерживает английский, поэтому использование его по умолчанию сработало. Если вы проверите шрифты, вы увидите, что он использует только ваш шрифт Devanagari, а не указанный вами английский шрифт.

Если вы переключаете языки, вам следует добавить команду в верхней части исходного кода:

\tracinglostchars=3

Это делает ошибкой запрос глифа, которого нет в вашем текущем шрифте, вместо того, чтобы молча игнорировать его (с сообщением в середине файла .log). Вместо этого вы можете превратить это в предупреждение на консоли с помощью \tracinglostchars=2.

Следующее решение с Babel устанавливает английский язык в качестве основного и автоматически определяет, на каком языке вы печатаете:

\documentclass{article}
\tracinglostchars=3
\usepackage[english, bidi=basic]{babel}
\usepackage{fontspec}

\babelprovide[import=hi, onchar=fonts ids]{hindi}

\babelfont{rm}
          [Ligatures={Common, TeX}]{Noto Serif}
\babelfont[hindi]{rm}
          [Scale=MatchUppercase]{Noto Serif Devanagari}

\begin{document}

This is a test.
 
यह एक परीक्षा है।
\end{document}

Образец шрифта Noto Serif

Если ваш существующий источник использует такие команды, как \texthindiили \textdevanagari, вы также можете захотеть объявить \babeltagsо совместимости с Polyglossia.

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