Linguex で古い形式の数字を使用すると、99 を超える特定の値で数字と例の間のスペースが悪くなる

Linguex で古い形式の数字を使用すると、99 を超える特定の値で数字と例の間のスペースが悪くなる

linguex例の番号付けパッキングを使用する場合、 \defaultfontfeatures{Numbers=OldStyle}xetex または luatex を使用すると、特定の例の番号が 99 を超えると、例の番号とテキストの間にスペースがなくなります。

ここに画像の説明を入力してください

最小限の例 (番号を 99 以上にするために必要な実際の繰り返し例は省略しています):

\documentclass{article}[12pt] 
\usepackage{fontspec}
\defaultfontfeatures{Numbers=OldStyle} 
\setmainfont{Junicode}
\usepackage{linguex}

\begin{document}    
\ex. Hello, world! Quit. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

....

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\end{document}

古い形式の数字を使用しないこと以外に、この問題を回避する方法はありますか? Linguex のさまざまな値を試してみました\Exlabelwidthが、どの値でも違いはないようでした。

答え1

問題の原因

この問題は、Junicode フォントには真のプロポーショナル オールド スタイル数字があるのに対し、他のフォントには固定幅のオールド スタイル数字とプロポーショナル オールド スタイル数字の両方があるという事実によって発生します。パッケージは、linguex現在のフォントの最小幅の数字の倍数である内部長さを設定します。Junicode フォントの最小幅の数字は です1が、これはフォント内の他の数字の幅に比べて小さすぎるため、ラベル間隔の計算が間違ってしまいます。

この現象は、Junicode の旧スタイル数字の幅と、両方の種類がある Linux Libertine フォントの幅を比較することで確認できます。プロポーショナルな旧スタイル数字では問題が発生しますが、固定幅の旧スタイル数字では発生しません。(この点を指摘してくれた Jason に感謝します。)

\documentclass[varwidth]{standalone}
\usepackage{fontspec}

\newfontfamily\Junicode[Numbers=OldStyle]{Junicode}
\newfontfamily\LibertineFixed[Numbers=OldStyle]{Linux Libertine O}
\newfontfamily\LibertineProportional[Numbers={OldStyle,Proportional}]{Linux Libertine O}

\usepackage{linguex}

\usepackage{pgffor}

\newlength{\tmplen}

\newcommand{\displaywidthof}[1]
    {\settowidth{\tmplen}{#1}\parbox{.8in}{#1: \the\tmplen}}

\begin{document}

\foreach \x in {Junicode,LibertineProportional,LibertineFixed}{
\csname\x\endcsname

\x

\foreach \y in {0,...,9}{
\displaywidthof{\y}
}

\setcounter{ExNo}{99}

\ex. XXX.


\ex. YYY.

}

\end{document}

コードの出力

問題の解決策

幸いなことに、これを修正する方法があります。パッケージ内のドキュメント化されていないコマンドを使用すると、ラベルの間隔の幅を設定できます。の著者は、linguexドキュメントでこの問題についてヒントを出しています。

フォントが数字の幅の差を最小限にすることで協力的であることを願っています。そうしないと、\Exlabelwidth

実際、私は別のフォントで同様の問題を解決するのに協力しました。それがこのコードの元々の原因でした。コマンド:

\philabeldefault

次のことを行います。

\renewcommand{\philarge}{4\mindigitwidth}
\renewcommand{\philmiddle}{3\mindigitwidth}
\renewcommand{\philsmall}{2\mindigitwidth}}

ここでの数字は、それぞれ 100、10、1 の乗数です。乗数はセットごとに異なるため、間隔が均一にならないことに注意してください。

したがって、この問題を解決する 1 つの方法は、長さの乗数を変更することです\philarge

\renewcommand{\philarge}{4.5\mindigitwidth}

正常に動作します。

ただし、次のコマンドを使用して、3 つの長さすべてに固定の長さを指定することもできます。

\phlabelwidth

これはおそらくより良い解決策です。

\phlabelwidth{1.4em}

問題をうまく解決します。

\documentclass{article}[12pt] 
\usepackage{fontspec}
\defaultfontfeatures{Numbers=OldStyle} 
\setmainfont{Junicode}
\usepackage{linguex}
\phlabelwidth{1.4em}

\begin{document} 

\ex. Hello, world! Quit. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\setcounter{ExNo}{9}
\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.


\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\setcounter{ExNo}{99}
\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\ex. Hello, world! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.


\end{document}

コードの出力

関連情報