通过选择特征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}