Jarak yang buruk dengan XeLatex dan poliglosia

Aug 20 2020

Saya memiliki dokumen Latex multibahasa yang menggunakan Xelatex dan fontspecpaket untuk rendering. Dokumen yang saya berikan menunjukkan spasi yang tidak memuaskan, terutama dalam bahasa Inggris: Seringkali spasi kosong setelah tanda baca dalam bentuk apa pun terlalu lebar. Saya tidak pernah mengalami masalah ini sebelumnya, dan oleh karena itu saya bertanya pada diri saya sendiri, apakah saya marah atau jika ada sesuatu yang berubah dengan beberapa pembaruan paket: Berikut ini contohnya:

Ini cukup mengejutkan, bahwa tidak ada tanda hubung yang terjadi. Tapi ini mungkin hanya kebetulan, karena nanti di dokumen ada kasus tanda hubung, tapi tidak banyak. Hasil saya dalam bahasa Jerman lebih baik. Adakah yang bisa membantu saya di sini.

Berikut adalah contoh kode:

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

Jawaban

1 moewe Aug 20 2020 at 23:07

Seperti yang dikatakan David Carlisle di komentar, ini adalah perilaku yang diharapkan: Secara default, TeX menyisakan sedikit lebih banyak spasi setelah tanda baca akhir kalimat daripada di antara kata. Perilaku ini dikenal dengan perintah TeX \nonfrenchspacing.

Meskipun hal ini umum (atau setidaknya tidak sepenuhnya tidak umum) dalam tipografi bahasa Inggris (meskipun saya mengumpulkan ada perdebatan tentang apakah ide yang baik untuk meninggalkan ruang yang lebih besar setelah periode dan sejenisnya), biasanya tidak dilakukan di tempat lain. bahasa. Untuk situasi tersebut TeX memiliki perintah \frenchspacing, yang menyebabkan spasi setelah tanda baca menjadi sama dengan spasi antar kata.

Jadi, Anda akan mengatakan \frenchspacinguntuk melawan perilaku ini jika Anda melihatnya.


Ketika paket lokalisasi menyukai babeldan polyglossiaterlibat, paket tersebut dapat mengubah \frenchspacing/ \nonfrenchspacingstate jika bahasa dialihkan sesuai dengan konvensi nasional.

Dengan versi modern polyglossiaada cara untuk sepenuhnya menonaktifkan \nonfrenchspacingdan memaksa \frenchspacingsetiap saat: Cukup tentukan ulang makro internal \polyglossia@lang@frenchspacing:nyang disetel \(non)frenchspacingke selalu masalah \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}

Tetapi ada alternatif untuk pendekatan ini, misalnya poliglosia: bagaimana menyetel `\ spasi perancis` untuk semua bahasa, di mana saja? .

Alternatif lain yang sangat radikal (yang mungkin berpotensi merusak barang) adalah

\def\nonfrenchspacing{\frenchspacing}
\AtBeginDocument{\frenchspacing}