ระยะห่างที่ไม่ดีกับ XeLatex และ polyglossia

Aug 20 2020

ฉันมีเอกสาร 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}

คำตอบ

1 moewe Aug 20 2020 at 23:07

ดังที่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}