Schriftartprobleme in Lualatex bei Verwendung von Fontspec und Polyglossia

Schriftartprobleme in Lualatex bei Verwendung von Fontspec und Polyglossia

Ich versuche, mit Lualatex ein Dokument zu setzen, das eine Mischung aus Hindi und Englisch enthält. Das folgende MWE funktioniert:

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

und gibt die richtige Ausgabe.

Bildbeschreibung hier eingeben

Wenn ich jedoch die Standardsprache auf Englisch und die andere Sprache auf Hindi ändere, wie im MWE unten

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

die Hindi-Zeichen werden nicht angezeigt. Was ist das Problem? Bildbeschreibung hier eingeben

Antwort1

Polyglossia erkennt die Sprache nicht automatisch. (Babel hat einen Befehl dafür.) Sie möchten sie mit \texthindioder auswählen \textenglish. Es stellte sich heraus, dass Ihre Hindi-Schriftart auch Englisch unterstützt, sodass es funktionierte, diese als Standard zu verwenden. Wenn Sie die Schriftarten überprüfen, werden Sie feststellen, dass nur Ihre Devanagari-Schriftart verwendet wird, nicht die von Ihnen angegebene englische Schriftart.

Wenn Sie die Sprache wechseln, sollten Sie den Befehl oben in Ihrer Quelle hinzufügen:

\tracinglostchars=3

Dadurch wird die Anforderung eines Glyphs, den Ihre aktuelle Schriftart nicht hat, zu einem Fehler, anstatt ihn stillschweigend zu ignorieren (mit einer Meldung in der Mitte der .logDatei). Sie können ihn stattdessen mit in eine Warnung auf der Konsole umwandeln \tracinglostchars=2.

Die folgende Lösung mit Babel stellt die Hauptsprache auf Englisch ein und erkennt automatisch, in welcher Sprache Sie tippen:

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

Wenn Ihre vorhandene Quelle Befehle wie \texthindioder verwendet \textdevanagari, möchten Sie dies möglicherweise auch \babeltagsaus Kompatibilitätsgründen mit Polyglossia deklarieren.

verwandte Informationen