ระยะห่างที่ไม่ดีกับ XeLatex และ polyglossia
ฉันมีเอกสาร Latex หลายภาษาซึ่งใช้ Xelatex และfontspec
แพ็คเกจสำหรับการแสดงผล เอกสารที่แสดงผลของฉันแสดงการเว้นวรรคที่ไม่น่าพอใจโดยเฉพาะในภาษาอังกฤษ: บ่อยครั้งที่ช่องว่างหลังเครื่องหมายวรรคตอนใด ๆ กว้างเกินไป ฉันไม่เคยมีปัญหานี้มาก่อนและด้วยเหตุนี้ฉันจึงถามตัวเองว่าฉันโมโหหรือมีอะไรเปลี่ยนแปลงไปกับการอัปเดตแพ็คเกจบางอย่าง: นี่คือตัวอย่าง:

มันค่อนข้างเตะตาไม่มียัติภังค์เกิดขึ้น แต่นี่อาจเป็นเพียงเรื่องบังเอิญเนื่องจากในเอกสารมีการใส่ยัติภังค์ในภายหลัง แต่ไม่มากนัก ผลลัพธ์ของฉันในภาษาเยอรมันดีขึ้น ใครสามารถช่วยฉันที่นี่ได้โปรด
นี่คือตัวอย่างโค้ด:
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{polyglossia}
\usepackage{xltxtra}
\usepackage{fontspec}
\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}{}
\setotherlanguages{english, french, italian, spanish, latin, portuguese}
\usepackage{blindtext}
\begin{document}
\blinddocument
\begin{english}
\blinddocument
\end{english}
\end{document}
คำตอบ
ดังที่David Carlisleกล่าวไว้ในความคิดเห็นสิ่งนี้เป็นพฤติกรรมที่คาดหวัง: โดยค่าเริ่มต้น TeX จะเว้นวรรคหลังเครื่องหมายวรรคตอนท้ายประโยคมากกว่าระหว่างคำ \nonfrenchspacing
ลักษณะการทำงานนี้เป็นที่รู้จักกันโดยคำสั่งเท็กซ์
แม้ว่าสิ่งนี้จะเป็นเรื่องธรรมดา (หรืออย่างน้อยก็ไม่ใช่เรื่องผิดปกติอย่างสิ้นเชิง) ในตัวพิมพ์ภาษาอังกฤษ (แม้ว่าฉันจะรวบรวมมีการถกเถียงกันว่าควรเว้นช่องว่างขนาดใหญ่หลังจากช่วงเวลาและสิ่งที่ชอบหรือไม่) แต่ก็มักจะไม่ทำในรูปแบบอื่น ภาษา สำหรับสถานการณ์เหล่านั้น TeX มีคำสั่ง\frenchspacing
ซึ่งทำให้ช่องว่างหลังเครื่องหมายวรรคตอนเหมือนกับช่องว่างระหว่างคำ
ดังนั้นคุณจะบอกว่า\frenchspacing
จะตอบโต้พฤติกรรมนี้ถ้าคุณเห็นมัน
เมื่อแพ็กเกจโลคัลไลเซชันต้องการbabel
และpolyglossia
เกี่ยวข้องแพ็กเกจเหล่านั้นอาจเปลี่ยน\frenchspacing
/ \nonfrenchspacing
สถานะหากมีการเปลี่ยนภาษาตามอนุสัญญาระดับชาติ
กับรุ่นที่ทันสมัยpolyglossia
มีวิธีที่จะสมบูรณ์ปิดการใช้งาน\nonfrenchspacing
และแรง\frenchspacing
ตลอดเวลา: เพียงแค่ redefine แมโครภายใน\polyglossia@lang@frenchspacing:n
ที่ชุดกับปัญหาเสมอ\(non)frenchspacing
\frenchspacing
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{polyglossia}
\usepackage{fontspec}
\makeatletter
\ExplSyntaxOn
\cs_set_nopar:Nn{\polyglossia@lang@frenchspacing:n}{\frenchspacing}
\ExplSyntaxOff
\makeatother
\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}{}
\setotherlanguages{english, french, italian, spanish, latin, portuguese}
\usepackage{blindtext}
\begin{document}
\blinddocument
\begin{english}
\blinddocument
\end{english}
\end{document}
แต่มีทางเลือกอื่นสำหรับแนวทางนี้เช่นpolyglossia: จะตั้งค่า "\ frenchspacing" สำหรับทุกภาษาได้อย่างไร? .
อีกทางเลือกหนึ่งที่รุนแรงมาก (ซึ่งอาจมีศักยภาพในการทำลายสิ่งของ) ก็คือ
\def\nonfrenchspacing{\frenchspacing}
\AtBeginDocument{\frenchspacing}