将 VerticalPosition 功能限制为仅限数字

将 VerticalPosition 功能限制为仅限数字

通过选择特征VerticalPosition = Numerator/Superior/Inferior等...可以改变数字和其他字符相对于基线的相对位置。

例如,此代码

\documentclass[12pt, a5paper]{memoir}

\usepackage[italian]{babel}
\usepackage{fontspec}

\setmainfont{Linux Biolinum}

\def\Text{1Inizio del Vangelo secondo me, che sono io. 2Come è scritto nel rotolo del professor Richard: Voce di uno che grida: 3Delle onde fate la trasformata!}

\begin{document}

\Text

\addfontfeature{VerticalPosition = Superior}
\Text

\end{document}

结果是:

在此处输入图片描述

如果您选择其他选项(如 Numerator),问题仍然存在。有没有办法将垂直位置限制为仅数字?

答案1

在 TeX Live 2016 中,您可以使用fonts.handlers来调整字体功能。在这里,我创建了一个新功能,我称之为nsup“数字上级”,仅定义数字的上级:

\documentclass[12pt,a5paper]{memoir}
\usepackage[italian]{babel}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature {
    name = "nsup",
    {
        type = "substitution",
        data = {
            one = "¹",
            two = "²",
            three = "³",
            four = "⁴",
            five = "⁵",
            six = "⁶",
            seven = "⁷",
            eight = "⁸",
            nine = "⁹",
            zero = "⁰",
        }
    },
    "superior numerals only"
  }
}
\setmainfont{linuxbiolinumo}% my system doesn’t recognize the name you used
\def\Text{1Inizio del Vangelo secondo me, che sono io. 2Come è scritto
  nel rotolo del professor Richard: Voce di uno che grida: 3Delle onde
  fate la trasformata!}
\begin{document}
\addfontfeature{RawFeature=+nsup}
\Text
\end{document}

输出

在 2016 年之前,您可以编写自己的功能文件,但我不再有旧系统可供使用,因此我不会提供该方法的示例(本网站其他地方有关于此问题的问题)。无论如何,最好学习新的。

这种方法luatex仅适用于,不适用于xetex

答案2

在我看来,您应该使用上标数字。

无论如何,使用 XeLaTeX 您可以使用 interchar 标记功能。

\documentclass[12pt, a5paper]{memoir}

\usepackage[italian]{babel}
\usepackage{fontspec}

\setmainfont{Linux Biolinum O}
\newfontfamily{\super}{Linux Biolinum O}[VerticalPosition = Superior]

\newXeTeXintercharclass\superior
\XeTeXcharclass`0=\superior
\XeTeXcharclass`1=\superior
\XeTeXcharclass`2=\superior
\XeTeXcharclass`3=\superior
\XeTeXcharclass`4=\superior
\XeTeXcharclass`5=\superior
\XeTeXcharclass`6=\superior
\XeTeXcharclass`7=\superior
\XeTeXcharclass`8=\superior
\XeTeXcharclass`9=\superior
\XeTeXinterchartoks 0 \superior = {\begingroup\super}
\XeTeXinterchartoks 4095 \superior = {\begingroup\super}
\XeTeXinterchartoks \superior 0 = {\endgroup}
\XeTeXinterchartoks \superior 4095 = {\endgroup}


\def\Text{%
  1Inizio del Vangelo secondo me, che sono io. 
  2Come è scritto nel rotolo del professor Richard: Voce di uno che grida: 
  3Delle onde fate la trasformata!%
}

\begin{document}

\Text

\XeTeXinterchartokenstate=1
\Text

\end{document}

在此处输入图片描述

相关内容