使用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 的乘数。请注意,每组的乘数都不同,这将导致间距不均匀。
因此,解决该问题的一种方法是改变长度的乘数\philarge
:
\renewcommand{\philarge}{4.5\mindigitwidth}
工作正常。
但是,您也可以使用以下命令为所有三种长度指定固定长度:
\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}