
При использовании 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, у которого есть оба вида. С пропорциональными числами старого стиля проблема возникает, но с числами старого стиля фиксированной ширины ее не возникает. (Спасибо Джейсону за указание на это.)
\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}}
Где числа здесь являются множителями для сотен, десятков и единиц соответственно. Обратите внимание, что множители для каждого набора разные, что приведет к неравномерному интервалу.
Поэтому один из способов решить эту проблему — просто изменить множитель длины \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}