fontspec と polyglossia を使用しているときに lualatex でフォントの問題が発生する

fontspec と polyglossia を使用しているときに lualatex でフォントの問題が発生する

私は 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。ヒンディー語フォントは英語もサポートしていたので、それをデフォルトとして使用するとうまくいきました。フォントを確認すると、指定した英語フォントではなく、デーヴァナーガリー フォントのみが使用されていることがわかります。

言語を切り替える場合は、ソースの先頭近くに次のコマンドを追加する必要があります。

\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既存のソースでやなどのコマンドを使用している場合は、 Polyglossia との互換性のために を\textdevanagari宣言することもできます。\babeltags

関連情報