Problemas de fonte no lualatex ao usar fontspec e polyglossia

Problemas de fonte no lualatex ao usar fontspec e polyglossia

Estou tentando usar lualatex para compor um documento que contém uma mistura dos idiomas hindi e inglês. O seguinte MWE funciona:

\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} 

e fornece a saída correta.

insira a descrição da imagem aqui

No entanto, se eu alterar o idioma padrão para inglês e o outro idioma para hindi, como no MWE abaixo

\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} 

os caracteres Hindi não aparecem. Qual é o problema? insira a descrição da imagem aqui

Responder1

A Polyglossia não detecta automaticamente o idioma. (Babel tem um comando para fazer isso.) Você deseja selecioná-lo com \texthindiou \textenglish. Acontece que sua fonte Hindi também suporta inglês, então usá-la como padrão funcionou. Se você verificar as fontes, verá que está usando apenas a fonte Devanagari, não a fonte em inglês que você especificou.

Se você estiver trocando de idioma, adicione o comando próximo ao topo da sua fonte:

\tracinglostchars=3

Isso torna um erro solicitar um glifo que sua fonte atual não possui, em vez de ignorá-lo silenciosamente (com uma mensagem no meio do .logarquivo). Em vez disso, você poderia transformá-lo em um aviso no console com \tracinglostchars=2.

A solução a seguir com Babel define o idioma principal como inglês e detecta automaticamente em qual idioma você está digitando:

\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}

Amostra Noto Serif

Se sua fonte existente usa comandos como \texthindiou \textdevanagari, você também pode declarar \babeltagscompatibilidade com Polyglossia.

informação relacionada