在 Linux 下使用 Mac OS X 字体的变体字形

在 Linux 下使用 Mac OS X 字体的变体字形

我想从 Linux 下的 fontspec 中获取变体选项。不幸的是,这个与 AAT 字体系统配合使用的选项与 Linux 下使用的 OpenType 字体机制不兼容。

但是,我转储了一个包含此类变体字形的 Mac OS X 字体,发现这些变体字形可以通过使用其名称轻松获得。事实上,它们的名称是这样组成的:"<name of the standard glyph>.<variant number>"。例如,要获得“d”的第二个变体,只需使用:\XeTeXglyph\XeTeXglyphindex "d.2"。对于“é”,则为:\XeTeXglyph\XeTeXglyphindex "eacute.2"等等。

因此,我开发了一个小命令来获取相应的变体(如果存在),否则使用默认变体:

\newcommand\variantChar[2]{%
  \@tempcnta=\XeTeXglyphindex "#1.#2"\relax
    \ifnum\@tempcnta>0
    \XeTeXglyph\@tempcnta
  \else
    #1
  \fi}

现在我想构造一个带有两个参数的命令:第一个参数是变体编号,第二个参数是使用该变体编写的句子。不幸的是,我不知道如何逐个字符地解析第二个参数并调用该\variantChar命令。

最后但并非最不重要的一点是,我有兴趣了解如何获取字形的名称,以便考虑复杂字形名称"eacute"或连字字形"ft"等。是否有这样的命令将字形作为参数并返回字形名称?

否则,您是否知道在 Linux 下使用 MacOS X 字体中可用的变体字形的其他方法?

答案1

我曾经使用 TeX 的尾递归实现了类似的事情。根据您的情况,我的宏定义如下:

\def\varianttext{%
 \begingroup
 \obeyspaces
 \@varianttext}
\def\@varianttext#1#2{%
 \endgroup
 \def\tempa{#1}
 \@@varianttext#2\end}
\def\@@varianttext#1#2{%
  \variantchar{#1}{\tempa}%
  \ifx#2\end%
    \let\next\@gobble%
  \else%
    \let\next\@@varianttext%
  \fi%
  \next#2}

该宏\@@varianttext只是迭代输入并应用于\variantchar每个字符。

编辑:我更新了解决方案以正确处理空格。

相关内容