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