XeLatexとpolyglossiaの間隔が悪い

Aug 20 2020

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

デビッド・カーライルはコメントで述べている、これは予想される動作です:デフォルトのTeXでは単語間よりも文末の句読点の後に少し大きめのスペースを残します。この動作は、TeXコマンドで認識され\nonfrenchspacingます。

これは英語のタイポグラフィでは一般的です(または少なくとも完全に珍しいことではありません)が(私は収集しますが、ピリオドなどの後に大きなスペースを残すのが良いかどうかについての議論があります)、通常は他の言語では行われません言語。このような状況では、TeXにコマンド\frenchspacingがあります。これにより、句読点の後のスペースが単語間のスペースと同じになります。

それで、あなたが\frenchspacingそれを見れば、あなたはこの振る舞いに対抗すると言うでしょう。


ローカライズパッケージが似た場合babelpolyglossia関与している、これらのパッケージは変更される可能性があり\frenchspacing/\nonfrenchspacing言語は、国家規則に従って切り替えられた場合の状態を。

の最新バージョンでpolyglossiaは、常に完全に無効に\nonfrenchspacingして強制する方法があります。常に発行するように設定されて\frenchspacingいる内部マクロ\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}

しかし、このアプローチに代わるものがあります。たとえば、ポリグロシア:すべての言語、どこでも「\ frenchspacing」を設定する方法は?。

別の非常に急進的な代替案(おそらく物事を壊す可能性がある)は

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