如何循环遍历一系列 Unicode 字符以查找给定字形所代表的字符

如何循环遍历一系列 Unicode 字符以查找给定字形所代表的字符

我正在使用 XeLaTeX 和 OpenType 字体。

我想要使​​用具有给定名称的字形,该字形可以分配给不同字体中的不同 Unicode 字符(或者可能不存在于字体中,或者可能存在于字体中但可能未分配给任何字符)。

XeTeX 提供的\XeTeXglyphindex命令会告诉我字体中是否存在该字形,如果是,则返回其索引。

\XeTeXcharglyph命令以字符槽作为输入,并提供代表它的字形的索引(如果有)。

我需要的是代码

  1. 检查字形是否存在\XeTeXglyphindex并将索引存储在变量中
  2. 对给定的(可能很长的)Unicode 字符范围进行循环,应用于\XeTeXcharglyph每个字符,并将其与记忆的索引进行比较
  3. 如果循环找到相应的字符,则将其提供给\hyphenchar
  4. 如果不是,则为 提供不同的字符槽\hyphenchar

你知道我可以在哪里找到这样的代码(可能使用 LaTeX 的新expl3包?

(2 小时后)应 Ulrike 的要求,这里有一些用于单个 Unicode 插槽和单个字形名称的代码。在 Amiri-Regular 字体中,有一个(非常漂亮的)字形,称为uni0606Unicode 字符 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}

相关内容