Lulatex - erro de caractere Unicode
Estou usando um documento \ LaTeX com fontes Devnagari e Latin.
O comando usado é: lualatex -shell-escape -interaction nonstopmode
No entanto, apesar de selecionar as fontes apropriadas. O código mínimo é:
Eu também tentei usar o pacote poliglossia, (conforme https://tex.stackexchange.com/a/24731/50653), mas ainda não há diferença.
\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}
O resultado obtido é:
Enquanto se espera que os personagens Devanagari sejam renderizados também.
Eu também tentei anteriormente
\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}
Respostas
Existem dois problemas em jogo aqui: O principal problema é que a fonte selecionada não contém os caracteres em questão, o outro problema é que usar os comandos fontspec fontloading sem especificar explicitamente um script e idioma padrão para script latino e, portanto, não indica forma scripts corretamente.
Se você não quiser se preocupar com os parâmetros de script / idioma corretos para fontspec, você pode usar o wrapper fontspec do babel \babelfontpara especificar as fontes para seus idiomas. Para que isso funcione corretamente (especialmente para moldar linguagem específica para o trabalho), você tem que indicar as alterações de linguagem em seu documento usando \selectlanguage, \foreignlanguageou os otherlanguage/ otherlanguage*ambientes. Se você escrever um parágrafo inteiro em outro idioma, poderá usar \selectlanguage{new-language}, para partes de um parágrafo, existe \foreignlanguage{new-language}{text-in-new-language}.
Você pode encontrar detalhes sobre tudo isso no manual da babel , seção 1.2 (Documentos multilíngues), seção 1.7 e 1.8 (seletores de idioma básico / auxiliar) e seção 1.14 (Seleção de fontes).
\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}
Como Davislor mencionou em um comentário, o seguinte requer uma instalação bastante moderna do TeX (atualizado em fevereiro de 2020 ou mais tarde) e, portanto, pode não funcionar em seu sistema ou quebrar se você tentar compilar seu documento em outro sistema:
Se você realmente não consegue inserir tais comandos de troca de idioma, você só usa um idioma de cada sistema de script e não se preocupa com o espaçamento adequado entre parágrafos no texto Devanagari (por exemplo, porque é principalmente latino), você também pode usar onchar=ids fonts: Substituir
\usepackage[hindi, english]{babel}
com
\usepackage[english]{babel}
\babelprovide[import, onchar=ids fonts]{hindi}
Em seguida, o babel muda automaticamente os padrões de fonte e hifenização para hindi quando encontra caracteres Devanagari. (Claro, você pode mudar englishe, hindise tiver principalmente texto em hindi.)
Bem-vindo ao TeX.SX!
O shaper LuaTeX dev2tem sido um pouco problemático com scripts índicos, mas houve outra versão chamada deva, conforme mencionado emhttps://tex.stackexchange.com/a/362738/90407. No entanto, recentemente, LuaTeX tem suporte adicional para usar o shaper HarfBuzz em vez do integrado. Ambas as variantes devem fornecer resultados comparáveis, embora com pequenas diferenças. Em ambos os casos, precisamos criar opções de fonte para a nova família de fontes. Usando poliglossia, podemos adicionar outro idioma e definir novas famílias de fontes para esse idioma, que tratará de toda a alternância de fontes entre sans-serif e serif automaticamente:
Deva LuaTeX
\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}
O resultado é:
LuaTeX com HarfBuzz (LuaHBTeX)
Como alternativa, não definimos um novo script, mas simplesmente pedimos ao HarfBuzz para fazer o trabalho pesado:
\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}
O que produz:
Tomando a renderização do meu navegador como referência, isso parece muito bom para mim.
Se você não se preocupa com o espaçamento adequado, você pode fazer isso sem poliglossia, com algo assim:
\usepackage[Devanagari]{ucharclasses}
\setTransitionsFor{Devanagari}{\devanagarifont}
No entanto, isso apenas mudará a fonte e eliminará quaisquer outros ajustes de idioma implementados de outra forma pela poliglossia.