使用 XeTeX 模拟 Opentype 字体的 sups 功能?

使用 XeTeX 模拟 Opentype 字体的 sups 功能?

我正在尝试访问上标西里尔字母拉多加职业队Opentype 字体。我用 找不到它们\addfontfeature{VerticalPosition=Superior}。据我所知,它们不包含在 sups 查找表中。但它们在字体中的名称是原始字形的名称加上 .sup 后缀(西里尔文“м”= afii10078 -> afii10078.sup)。

那么我该如何编写一个宏来获取字体中字符参数的名称,添加 .sup 并使用 \XeTeXglyph\XeTeXglyphindex "name.sup" 打印生成的字形?

先感谢您

答案1

在尝试模拟之前,请先尝试VerticalPosition=ScientificSuperior。我见过不少字体不提供“正常”,而是提供“科学”的优越性。这可以解释为什么字符存在但无法通过查找访问。

此外,如果您购买了提供这些字符的字体,但没有这些字符的查找表,我会向字体供应商投诉。

无论如何,虽然我不推荐这样做,但可以按照您描述的方式编写宏。这分为多个步骤:

  1. 该宏接收一个字符参数,我们必须获取代码点。这很容易,TeX 通过反引号提供代码点。但在应用 XeTeX 的字体命令之前,我们必须将其转换为字体特定的字形槽,因此我们需要\XeTeXcharglyph。例如,可以使用查询第一个参数的字形代码(稍后我们将不使用,\the因为我们使用读取数字的 TeX 命令)
\the\XeTeXcharglyph`#1
  1. 现在我们需要字形名称。幸运的是,XeTeX 提供了\XeTeXglyphname访问特定字体中字形槽的字形名称的原语。这里\font代表当前字体,因此我们可以扩展上面的示例并得到
\XeTeXglyphname\font\XeTeXcharglyph`#1
  1. 当然,附加.sup很容易,这里我们将使用.superior它,因为它适用于 Linux Libertine。然后我们必须获取新字形的字形索引:\XeTeXglyphindex原始字形可以帮我们:给定一个字形名称,它为我们提供索引:
\XeTeXglyphindex"\XeTeXglyphname\font\XeTeXcharglyph`#1.superior"\relax
  1. 现在我们知道了所需字形的索引,因此我们可以用以下命令插入它\XeTeXglyph
\XeTeXglyph\XeTeXglyphindex"\XeTeXglyphname\font\XeTeXcharglyph`#1.superior"\relax

共同努力,

% WARNING: This is a purely academic example, if you actually want to use
% superiors with Linux Libertine, just activate the `sups` feature instead,
% e.g. with `\addfontfeature{VerticalPosition=Superior}`
\documentclass{article}
\usepackage{fontspec}
\setmainfont{LinLibertine_R.otf}
\begin{document}
\newcommand\mysup[1]{%
  \XeTeXglyph
    \XeTeXglyphindex"\XeTeXglyphname\font\XeTeXcharglyph`#1.superior"
}
abc\mysup a\mysup b\mysup 9XXX
\end{document}

在此处输入图片描述

相关内容