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.
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?
Antwort1
Polyglossia erkennt die Sprache nicht automatisch. (Babel hat einen Befehl dafür.) Sie möchten sie mit \texthindi
oder 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 .log
Datei). 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}
Wenn Ihre vorhandene Quelle Befehle wie \texthindi
oder verwendet \textdevanagari
, möchten Sie dies möglicherweise auch \babeltags
aus Kompatibilitätsgründen mit Polyglossia deklarieren.