Lulatex-Unicode文字エラー

Sep 23 2020

デーバナーガリーフォントとラテン語フォントの両方を使用する\ LaTeXドキュメントを使用しています。

使用されるコマンドは次のとおりです。 lualatex -shell-escape -interaction nonstopmode

ただし、適切なフォントを選択したにもかかわらず。最小限のコードは次のとおりです。

また、polyglossiaパッケージを使用してみました( https://tex.stackexchange.com/a/24731/50653)、しかしそれでも違いはありません。

\documentclass[10pt]{article}

\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hindi}

% From https://tex.stackexchange.com/a/37251
\usepackage{fontspec}
\setmainfont{Noto Serif} % sets the roman font
\setsansfont{Noto Sans} % sets the sans font
\setmonofont{Fira Code} % sets the monospace font
\defaultfontfeatures{Ligatures=TeX} % makes this a feature for all selected fonts

\newfontfamily\hindifont[Script=Devanagari]{Noto Serif Devanagari}
\newfontfamily\hindifontsf[Script=Devanagari]{Noto Sans Devanagari}

\begin{document}

All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।
\end{document}

得られた結果は次のとおりです。

デーバナーガリー文字もレンダリングされることを期待していますが。

私も以前に試しました

\documentclass[10pt]{article}

\usepackage[hindi, english]{babel}

% From https://tex.stackexchange.com/a/37251
\usepackage{fontspec}
\setmainfont{Noto Serif} % sets the roman font
\setsansfont{Noto Sans} % sets the sans font
\setmonofont{Fira Code} % sets the monospace font
\defaultfontfeatures{Ligatures=TeX} % makes this a feature for all selected fonts

\begin{document}

All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।
\end{document}

回答

8 MarcelKrüger Sep 23 2020 at 13:32

ここでは2つの問題が発生します。主な問題は、選択したフォントに問題の文字が含まれていないことです。もう1つの問題は、スクリプトと言語のデフォルトをラテン文字に明示的に指定せずにfontspec fontloadingコマンドを使用するため、インデックスを形成しないことです。スクリプトを正しく。

fontspecの正しいスクリプト/言語パラメーターについて心配したくない場合は、babelのfontspecラッパー\babelfontを使用して言語のフォントを指定できます。これが正しく機能するためには(特に言語固有のシェーピングが機能するために)\selectlanguage、\foreignlanguageまたはotherlanguage/otherlanguage*環境を使用してドキュメント内の言語の変更を示す必要があります。段落全体を別の言語で書く場合は\selectlanguage{new-language}、を使用できます\foreignlanguage{new-language}{text-in-new-language}。段落の一部には。があります。

これらすべての詳細については、babelマニュアル、セクション1.2(多言語ドキュメント)、セクション1.7&1.8(基本/補助言語セレクター)、およびセクション1.14(フォントの選択)を参照してください。

\documentclass[10pt]{article}

\usepackage[hindi, english]{babel}

\babelfont{rm}{Noto Serif} % sets the roman font
\babelfont{sf}{Noto Sans} % sets the sans font
\babelfont{tt}{Fira Code} % sets the monospace font
\babelfont[hindi]{rm}{Noto Serif Devanagari}
\babelfont[hindi]{sf}{Noto Sans Devanagari}

\begin{document}

All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
\foreignlanguage{hindi}{येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।}
More English.

\selectlanguage{hindi}

येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए। येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।
येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए। येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।
येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए। येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।

\selectlanguage{english}

And English again.
\end{document}

Davislorがコメントで述べたように、以下はかなり最新のTeXインストール(2020年2月以降に更新)を必要とするため、別のシステムでドキュメントをコンパイルしようとすると、システムで動作しないか、破損する可能性があります。

このような言語切り替えコマンドを実際に挿入できない場合は、すべてのスクリプトシステムから1つの言語のみを使用し、デーバナーガリーテキストの適切な段落間隔を気にしません(たとえば、ほとんどがラテン語であるため)。次も使用できますonchar=ids fonts。置換

\usepackage[hindi, english]{babel}

と

\usepackage[english]{babel}
\babelprovide[import, onchar=ids fonts]{hindi}

次に、デーバナーガリー文字に遭遇すると、babelはフォントとハイフネーションパターンをヒンディー語に自動的に切り替えます。(もちろん、あなたは切り替えることができますenglishし、hindiあなたが主にヒンディー語のテキストを持っている場合。)

1 ljrk Sep 23 2020 at 14:38

TeX.SXへようこそ!

LuaTeXシェイパーdev2は、インドのスクリプトでは少し面倒ですがdeva、で述べたように、別のバージョンが呼び出されていますhttps://tex.stackexchange.com/a/362738/90407。ただし、最近、LuaTeXは、組み込みのシェーパーの代わりにHarfBuzzシェイパーを使用することを追加でサポートしています。わずかな違いはありますが、どちらのバリアントでも同等の結果が得られるはずです。ただし、どちらの場合も、新しいフォントファミリのフォントスイッチを作成する必要があります。polyglossiaを使用して、別の言語を追加し、その言語の新しいフォントファミリを定義して、sans-serifとserifの間のすべてのフォント切り替えを自動的に処理できます。

LuaTeX deva

\documentclass{article}

\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hindi}

\usepackage{fontspec}
% define Devanagari script using `deva' backend
\newfontscript{Devanagari}{deva,dev2}

\setmainfont{Noto Serif}
\setsansfont{Noto Sans}
% Create font switches for Devanagari font
% These are hard-coded into polyglossia, if we name them differently
% we get:
%     Package polyglossia Error: The current latin font [...] does
%     not contain the "Devanagari" script!
%     Please define \devanagarifont with \newfontfamily command.
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Script=Devanagari]
\newfontfamily{\devanagarifontsf}{Noto Sans Devanagari}[Script=Devanagari]

\defaultfontfeatures{Ligatures=TeX}

\begin{document}

All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
\texthindi{येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।}


All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
\texthindi{\textsf{येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।}}
\end{document}

結果は次のとおりです。

HarfBuzzを使用したLuaTeX(LuaHBTeX)

または、新しいスクリプトを定義せずに、HarfBuzzに手間のかかる作業を依頼するだけです。

\documentclass{article}

\usepackage{polyglossia}
\setdefaultlanguage{english}

\usepackage{fontspec}

\setmainfont{Noto Serif}
\setsansfont{Noto Sans}
% Create font switches for Devanagari font
% These are hard-coded into polyglossia, if we name them differently
% we get:
%     Package polyglossia Error: The current latin font [...] does
%     not contain the "Devanagari" script!
%     Please define \devanagarifont with \newfontfamily command.
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Script=Devanagari,Renderer=Harfbuzz]
\newfontfamily{\devanagarifontsf}{Noto Sans Devanagari}[Script=Devanagari,Renderer=Harfbuzz]

\defaultfontfeatures{Ligatures=TeX}

\begin{document}

All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
\texthindi{येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।}


All the places marked with red triangles are \emph{sites} from which archaeologists have found evidence of hunter-gatherers. (Hunter-gatherers lived in many more places. Only some are shown on the map). Many sites were located near sources of water, such as rivers and lakes.
\texthindi{\textsf{येह एक प्रयोग है हिन्दी की लिखावट देखने के लिए।}}
\end{document}

どちらが得られますか:


私のブラウザのレンダリングを参考にすると、これは私にはまったく問題ないように見えます。


適切な間隔を気にしない場合は、次のように、ポリグロシアなしでこれを行うことができます。

\usepackage[Devanagari]{ucharclasses}

\setTransitionsFor{Devanagari}{\devanagarifont}

ただし、これはフォントを切り替えるだけであり、polyglossiaによって実装されている他の言語調整は不要になります。