![ConTeXt 中的 Unicode 规范化和希伯来语](https://linux22.com/image/412424/ConTeXt%20%E4%B8%AD%E7%9A%84%20Unicode%20%E8%A7%84%E8%8C%83%E5%8C%96%E5%92%8C%E5%B8%8C%E4%BC%AF%E6%9D%A5%E8%AF%AD.png)
我正在使用 ConTeXt 排版一份希伯来语文档,其中包含指向(例如元音、shin 和 sin 点、dagesh 等)。我要排版的希伯来语文本已标准化为 Unicode 的 NFC 规范形式。众所周知,希伯来语点的 Unicode 规范排序与基于其功能的特定点的推荐标记排序相冲突(请参阅https://www.sbl-site.org/Fonts/SBLHebrewUserManual1.5x.pdf有关此主题的更多信息)。幸运的是,许多排版引擎会自动重新排序点,以确保它们根据许多字体的规格进行组合。我很确定 XeLaTeX 就是其中之一,因为即使希伯来语文本为 NFC 格式,它也能正确排版具有多个点的希伯来语字母。
我的问题是,ConTeXt 和 LuaTeX 能否正确处理同样的情况?在下面这个最小的例子中,当字符按照印刷推荐的顺序排列时,ConTeXt 可以正确地排版指向希伯来语,但当字符按照 Unicode 规范顺序排列时,则不能:
%Setup Hebrew text font:
\definefontfeature[f:pointedhebrew][default][
ccmp=yes,
mark=yes,
script=hebr
]
\definefontfamily[hebrew] [rm] [SBL Hebrew] [features=f:pointedhebrew]
%Set the body font:
\setupbodyfont[hebrew]
%Set up right-to-left alignment:
\setupalign[r2l]
\starttext
%Characters after normalization, in Unicode canonical order (bet + segol + dagesh + final nun):
בֶּן
%A word with characters in typographically recommended order (bet + dagesh + segol + final nun):
בֶּן
\stoptext
我使用 TeXLive 2020 发布的 ConTeXt 版本 2020.03.10 排版此文。我从https://www.sbl-site.org/educational/BiblicalFonts_SBLHebrew.aspx根据字体的用户手册(参见 MWE 上方的链接),字体应该能够组合标记以形成正确的字形,而不管它们在辅音后的顺序如何,但这似乎并非如此。
我是否需要在调用中启用 OpenType 功能来\definefontfeature
解决这个问题,或者我可以包含一些模块或选项来让 ConTeXt 排版 Unicode 规范化的希伯来语,就像 XeLaTeX 那样按照推荐的方式排序?我看到 uninormalize 模块在XeLaTeX、LuaLaTeX、fontspec、unicode 和规范化;可以与 ConTeXt 一起使用吗?
答案1
我在 ConTeXt 邮件列表中发布了这个问题(https://www.mail-archive.com/[电子邮件保护]/),从那里我了解到 ConTeXt 没有实现一种机制来重新排序希伯来语点,以便与大多数希伯来语字体中实现的替换规则配合使用。Hans Hagen 在几天的时间里慷慨地提供了帮助,并在标准功能集中添加了重新排序机制hebrew
。现在,如果将字体声明更改为,我的问题中的 MWE 将按预期工作\definefontfamily[hebrew] [rm] [SBL Hebrew] [features=hebrew]
。
该功能应在最新版本的 ConTeXt 中实现(http://www.pragma-ade.com/download-1.htm)。