我正在使用 XeLaTeX 和 OpenType 字体。
我想要使用具有给定名称的字形,该字形可以分配给不同字体中的不同 Unicode 字符(或者可能不存在于字体中,或者可能存在于字体中但可能未分配给任何字符)。
XeTeX 提供的\XeTeXglyphindex
命令会告诉我字体中是否存在该字形,如果是,则返回其索引。
该\XeTeXcharglyph
命令以字符槽作为输入,并提供代表它的字形的索引(如果有)。
我需要的是代码
- 检查字形是否存在
\XeTeXglyphindex
并将索引存储在变量中 - 对给定的(可能很长的)Unicode 字符范围进行循环,应用于
\XeTeXcharglyph
每个字符,并将其与记忆的索引进行比较 - 如果循环找到相应的字符,则将其提供给
\hyphenchar
- 如果不是,则为 提供不同的字符槽
\hyphenchar
。
你知道我可以在哪里找到这样的代码(可能使用 LaTeX 的新expl3
包?
(2 小时后)应 Ulrike 的要求,这里有一些用于单个 Unicode 插槽和单个字形名称的代码。在 Amiri-Regular 字体中,有一个(非常漂亮的)字形,称为uni0606
Unicode 字符 U+0606。这是一个最小的 XeLaTeX 文件,提供名称和字符插槽中的字形索引:
\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\arabicfont}[Script=Arabic,Extension=.ttf,Scale=1.2]{Amiri-Regular}
\begin{document}
\arabicfont
The glyph of name uni0606 is \the\XeTeXglyphindex "uni0606"
The glyph of character uni0606 is \the\XeTeXcharglyph"0606
If they are the same, assign this to hyphenchar
\end{document}
我需要一个循环,其中第二个操作 ( \the\XeTeXcharglyph"0606
) 被应用到例如“0000 和“FFFE 之间的所有槽位,直到其中一个槽位提供与第一个操作相等的字形索引。请注意,当槽位不是字体时,命令\the\XeTeXcharglyph
取值为 0。
答案1
如果我理解正确的话:
\documentclass{article}
\usepackage{fontspec}
\newfontfamily{\arabicfont}[Script=Arabic,Extension=.ttf,Scale=1.2]{Amiri-Regular}
\begin{document}
\arabicfont
The glyph of name uni0606 is \the\XeTeXglyphindex "uni0606"
The glyph of character uni0606 is \the\XeTeXcharglyph"0606
If they are the same, assign this to hyphenchar
\newcount\zz
\loop
\ifnum\XeTeXglyphindex "uni0606" =\XeTeXcharglyph\zz
you are looking for: Character: \the\zz\ \chardef\zzz\zz\meaning\zzz
\fi
\advance\zz1
\ifnum\zz<"FFFF
\repeat
\end{document}