Lulatex - Unicode karakter hatası

Sep 23 2020

Hem Devnagari hem de Latin yazı tiplerini kullanan bir \ LaTeX belgesi kullanıyorum.

Kullanılan komut şudur: lualatex -shell-escape -interaction nonstopmode

Ancak, uygun yazı tiplerini seçmesine rağmen. Asgari kod:

Polyglossia paketini de kullanmayı denedim (göre https://tex.stackexchange.com/a/24731/50653), ancak yine de fark yok.

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

Elde edilen sonuç:

Devanagari karakterlerinin de işlenmesini beklerken.

Daha önce de denedim

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

Yanıtlar

8 MarcelKrüger Sep 23 2020 at 13:32

Burada işlenen iki konu var: Birincil sorun, seçilen yazı tipinin söz konusu karakterleri içermemesi, diğer sorun ise yazı tipi belirleme yazı tipi yükleme komutlarının Latin alfabesi için varsayılan olarak bir komut dosyası ve dil varsayılanı açıkça belirtilmeden kullanılması ve bu nedenle belirtilmemesidir. doğru komut dosyaları.

\babelfontYazı tipi belirtimi için doğru betik / dil parametreleri hakkında endişelenmek istemiyorsanız, dilleriniz için yazı tiplerini belirtmek için babel'in yazı tipi belirtme sarmalayıcısını kullanabilirsiniz. Bu (özellikle işe dile özgü şekillendirme için) düzgün çalışması için dil kullanarak belgedeki değişiklikleri göstermek zorunda \selectlanguage, \foreignlanguageya otherlanguage/ otherlanguage*ortamlar. Başka bir dilde bir paragrafın tamamını yazarsanız \selectlanguage{new-language}, bir paragrafın bazı kısımları için kullanabilirsiniz \foreignlanguage{new-language}{text-in-new-language}.

Tüm bunlarla ilgili ayrıntıları babel el kitabının 1.2 (Çok dilli belgeler), bölüm 1.7 ve 1.8 (Temel / Yardımcı dil seçicileri) ve bölüm 1.14'te (Yazı tiplerinin seçilmesi) bulabilirsiniz.

\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'un bir yorumda bahsettiği gibi, aşağıdakiler oldukça modern bir TeX kurulumu gerektirir (Şubat 2020'de veya daha sonra güncellenmiştir) ve bu nedenle, belgenizi başka bir sistemde derlemeye çalışırsanız sisteminizde çalışmayabilir veya çalışmayabilir:

Bu tür dil değiştirme komutlarını gerçekten, gerçekten ekleyemiyorsanız, her betik sisteminden yalnızca bir dil kullanırsınız ve Devanagari metninde uygun paragraf aralığı bırakmayı umursamıyorsanız (örneğin çoğunlukla latin olduğu için) şunu da kullanabilirsiniz onchar=ids fonts: Değiştir

\usepackage[hindi, english]{babel}

ile

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

Daha sonra babel, Devanagari karakterleriyle karşılaştığında yazı tipi ve tireleme desenlerini otomatik olarak Hintçe'ye geçirir. (Elbette geçiş yapabilirsiniz englishve hindiçoğunlukla Hintçe metniniz varsa.)

1 ljrk Sep 23 2020 at 14:38

TeX.SX'e hoş geldiniz!

LuaTeX biçimlendiricisi dev2Hint alfabelerinde biraz sorun yarattı , ancak başka bir sürüm devadaha var.https://tex.stackexchange.com/a/362738/90407. Bununla birlikte, son zamanlarda LuaTeX, yerleşik olan yerine HarfBuzz şekillendiriciyi kullanmayı da destekliyor. Her iki varyant, küçük farklılıklar da olsa, karşılaştırılabilir sonuçlar vermelidir. Her iki durumda da yeni yazı tipi ailesi için yazı tipi anahtarları oluşturmamız gerekir. Polyglossia'yı kullanarak başka bir dil ekleyebilir ve bu dil için sans-serif ve serif arasındaki tüm yazı tipi geçişini otomatik olarak gerçekleştirecek yeni yazı tipi aileleri tanımlayabiliriz:

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}

Sonuç:

HarfBuzz ile LuaTeX (LuaHBTeX)

Alternatif olarak, yeni bir komut dosyası tanımlamıyoruz, sadece HarfBuzz'dan işin zor kısmını yapmasını istiyoruz:

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

Hangi sonuç:


Tarayıcılarımı referans olarak alırsak, bu bana oldukça uygun görünüyor.


Doğru boşluk bırakmayı umursamıyorsanız, bunu polyglossia olmadan, bunun gibi bir şeyle yapabilirsiniz:

\usepackage[Devanagari]{ucharclasses}

\setTransitionsFor{Devanagari}{\devanagarifont}

Ancak, bu yalnızca yazı tipini değiştirecek ve polyglossia tarafından aksi takdirde uygulanan diğer dil ayarlamalarını ortadan kaldıracaktır.