Lulatex - ข้อผิดพลาดอักขระ Unicode
ฉันใช้เอกสาร \ LaTeX โดยใช้ทั้งฟอนต์ Devnagari และละติน
คำสั่งที่ใช้คือ: 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}
คำตอบ
มีปัญหาสองประการในการเล่นที่นี่: ปัญหาหลักคือแบบอักษรที่เลือกไม่มีอักขระที่เป็นปัญหาปัญหาอื่น ๆ คือการใช้คำสั่ง fontloading fontspec โดยไม่ระบุสคริปต์และภาษาเริ่มต้นอย่างชัดเจนเป็นสคริปต์ละตินดังนั้นจึงไม่มีการบ่งชี้รูปร่าง สคริปต์อย่างถูกต้อง
หากคุณไม่ต้องการกังวลเกี่ยวกับพารามิเตอร์สคริปต์ / ภาษาที่ถูกต้องสำหรับฟอนต์สเปคคุณสามารถใช้ตัวตัดฟอนต์สเปคของ babel \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 หรือใหม่กว่า) ดังนั้นอาจไม่ทำงานในระบบของคุณหรือหยุดทำงานหากคุณพยายามรวบรวมเอกสารของคุณในระบบอื่น:
หากคุณไม่สามารถแทรกคำสั่งการสลับภาษาดังกล่าวได้จริงๆคุณใช้เพียงภาษาเดียวจากทุกระบบสคริปต์และคุณไม่สนใจเกี่ยวกับการเว้นวรรคที่เหมาะสมในข้อความเทวนาครี (เช่นเพราะส่วนใหญ่เป็นภาษาละติน) คุณยังสามารถใช้onchar=ids fonts:
\usepackage[hindi, english]{babel}
ด้วย
\usepackage[english]{babel}
\babelprovide[import, onchar=ids fonts]{hindi}
จากนั้นบาเบลจะสลับแบบอักษรและรูปแบบการยัติภังค์เป็นภาษาฮินดีโดยอัตโนมัติเมื่อพบอักขระเทวนาครี (แน่นอนคุณสามารถเปลี่ยนenglishและhindiถ้าคุณมีข้อความภาษาฮินดีเป็นส่วนใหญ่)
ยินดีต้อนรับสู่ TeX.SX!
LuaTeX shaper dev2มีปัญหาเล็กน้อยกับสคริปต์ Indic แต่มีรุ่นอื่นที่เรียกว่าdevaดังที่กล่าวไว้ในhttps://tex.stackexchange.com/a/362738/90407. อย่างไรก็ตามเมื่อเร็ว ๆ นี้ LuaTeX ได้สนับสนุนเพิ่มเติมให้ใช้ HarfBuzz shaper แทนในตัว ตัวแปรทั้งสองควรให้ผลลัพธ์ที่เทียบเคียงกันได้แม้ว่าจะมีความแตกต่างกันเล็กน้อย อย่างไรก็ตามในทั้งสองกรณีเราจำเป็นต้องสร้างสวิตช์แบบอักษรสำหรับตระกูลแบบอักษรใหม่ การใช้ 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}
ผลลัพธ์คือ:
LuaTeX กับ HarfBuzz (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}
ซึ่งให้ผลตอบแทน:
การใช้เบราว์เซอร์ของฉันเป็นข้อมูลอ้างอิงสิ่งนี้ดูค่อนข้างโอเคสำหรับฉัน
หากคุณไม่สนใจเกี่ยวกับระยะห่างที่เหมาะสมคุณสามารถทำได้โดยไม่ต้องมี polyglossia ด้วยสิ่งนี้:
\usepackage[Devanagari]{ucharclasses}
\setTransitionsFor{Devanagari}{\devanagarifont}
อย่างไรก็ตามการดำเนินการนี้จะเป็นการสลับแบบอักษรและไม่ใช้การปรับเปลี่ยนภาษาอื่น ๆ ที่ใช้โดย polyglossia