Luatex1.12:使用 Babel、fontspec 和 Renderer HarfBuzz 呈现阿拉伯语

Luatex1.12:使用 Babel、fontspec 和 Renderer HarfBuzz 呈现阿拉伯语

作为我的后续行动上一篇我现在尝试了一下当前版本的 texlive。我测试了texlive2020

\documentclass{article}
\usepackage{fontspec}
\usepackage[bidi=basic]{babel}
\babelprovide[import=ur,mapdigits]{urdu}
\babelfont[urdu]{rm}[Renderer=HarfBuzz]{Amiri}


\begin{document}
Quick test with Urdu

\selectlanguage{urdu}

    یہ ایک جملہ ہے

\end{document}

还有一些问题:

  1. 无论我是否指定了 HarfBuzz,结果似乎都是相同的。也许文本太短了,但我也用较长的文本进行了测试,并没有看到太多明显的差异。这只是我的感觉,还是它们真的没有区别?
  2. Babel 文档Harbuzz只提到过一次这个词,它的书写方式是低位字母B,我想知道这是否会产生影响?虽然我没有看到太大的差异。
    • 它引用了的文档fontspec,并且Harfbuzz是渲染器之一
    • OpenType与渲染器一样好用(并且似乎具有相同的结果)
    • 但是,给出的样本AAT却失败了(没有写入文本)。这是故意的还是缺少了什么?Graphite
  3. Babel 文档中提到它支持多种语言。但对于字体渲染来说,以阿拉伯语为基线来书写乌尔都语、普什图语和阿拉伯语是否足够?这是否类似于英语和德语,其中连字符和段落的某些样式不同,但字体布局保持不变?

老实说,我很困惑,因为\babelfont现在有一个但是是关于字体功能还是关于内容的处理?

答案1

在大多数情况下,结果应该无论是否使用 HarfBuzz,两者的字体都是相同的。毕竟,两者都试图解释相同的字体指令并尝试遵循相同的规范。只有当两个系统对某些内容的解释不同(这至少可能是一方的错误)或其中一个系统不支持某些功能时,才会出现差异。

在这里,无论您写“Harfbuzz”还是“HarfBuzz”(前者是旧字体规范版本的拼写错误,但仍然支持作为兼容性的别名),我建议使用更正确的“HarfBuzz”。无论哪种方式,您都不需要指定“OpenType”、“AAT”或“Graphite”。这些之间的选择取决于实际使用的字体,但通常 HarfBuzz 会自动选择最佳可用选项。只有在自动选择因某种原因中断的极少数情况下,才需要明确设置它们。

但指定正确的语言很重要。OpenType 字体可以提供不同的字体功能,虽然拉丁字体并不常用,但很多阿拉伯字体似乎都使用它。例如,“Amiri”为克什米尔语、马来语、信德语和乌尔都语指定了特殊的字体功能。选择错误的字体功能可能会导致渲染不正确或至少不理想。(我无法向您展示示例,因为我完全没有用任何语言读写阿拉伯语文本的能力,但对于 Amiri,一些受影响的字符是阿拉伯数字和阿拉伯逗号 U+060C,因此您可以在不同的语言设置下尝试它们)

相关内容