我想从 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
每个字符。
编辑:我更新了解决方案以正确处理空格。