Я пытаюсь использовать 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}
Если ваш существующий источник использует такие команды, как \texthindi
или \textdevanagari
, вы также можете захотеть объявить \babeltags
о совместимости с Polyglossia.