这是这个问题关于排版孟加拉语。
正如两个答案所解释的那样,XeLaTeX 可以使用合适的字体排版孟加拉语多语和字体规格。 例如,
\documentclass[a4paper]{article}
\usepackage{geometry,fontspec,polyglossia}
\setmainlanguage[variant=british]{english}
\setotherlanguage{bengali}
\newfontfamily\bengalifont{Noto Sans Bengali}[Script=Bengali]
\begin{document}
x, y, z whatever\dots
\begin{bengali}
আমি
\end{bengali}
\end{document}
生产
[请注意 XeTeX 是必需的。LuaTeX 没有给出正确的结果。
正如我所解释的我的答案在本例中使用的字体实际上提供了两种不同版本的孟加拉语脚本,分别对应两种不同的孟加拉语 OpenType 脚本:
beng Bengali
bng2 Bengali v.2
如上所示,使用第一个很简单。
那第二个呢?Arun Debray 解释道在以下讨论中他的回答, 有在其他地方发帖这表明这是可能的,但展示如何实现这一可能性的例子已不再可用标示的位置也就是说,线索在此时中断了。
因此,阿伦·德布雷和我认为这个问题值得问:
第二个该怎么用呢?
免责声明:我对孟加拉语一无所知。有人告诉我上面的示例是孟加拉语,输出是正确的。但是,如果没有人告诉我这一点,它很可能是 Psyptizamen,我永远不会知道其中的区别。
虽然这个问题是关于孟加拉语的,但其他几种文字(例如天城文、泰米尔语)都有两个 OpenType 版本,因此它们之间的任何差异并不仅限于孟加拉语。
答案1
这个问题的评论已经回答了阿伦·德布雷(也另一个问题) 和作者:威尔·罗伯逊,fontspec 开发人员;只是把它变成一个“答案”,以使这个问题从未回答的列表中消失。
简而言之,在命令中
\newfontfamily\bengalifont{Noto Sans Bengali}[Script=孟加拉语]
这Script=Bengali
只是为了方便,是 fontspec 预定义的通用名称映射的一部分OpenType 脚本标签. 如 fontspec 手册的“定义新脚本和语言”部分所述,您可以使用 定义自己的脚本\newfontscript
。
因此,如果您愿意,您可以忘记默认的 fontspec-definedScript=Bengali
并明确定义您自己的:
\documentclass[a4paper]{article}
\usepackage{geometry,fontspec,polyglossia}
\setmainlanguage[variant=british]{english}
\setotherlanguage{bengali}
\newfontscript{BengaliOpenTypeOld}{beng}
\newfontscript{BengaliOpenTypeNew}{bng2}
\newfontfamily\bengalifont{Noto Sans Bengali}[Script=BengaliOpenTypeNew]
\begin{document}
x, y, z whatever\dots
\begin{bengali}
আমি
\end{bengali}
\end{document}
并根据需要在Script=BengaliOpenTypeNew
和之间切换。Script=BengaliOpenTypeOld
另外:这个答案的其余部分完全是离题的,但与提出这个问题的动机有些相关(看看另一个问题):需要 XeTeX 并且 LuaTeX 没有给出正确结果(目前)的原因是 XeTeX 使用了系统库——例如哈夫巴兹— 用于复杂的文本布局,又称文本整形(字形重新排序、字形定位等),而 LuaTeX 希望尽量减少外部依赖,并在 Lua 代码中实现一切,而这项工作(在我看来非常雄心勃勃)目前还没有针对印度语脚本完成,除了对梵文脚本的合理支持和对马拉雅拉姆语脚本的一些基本支持。(见ConTeXt 源代码中的 font-odv.lua。
例如,单词“আমি”由三个 Unicode“字符”(代码点)按以下顺序组成:
元音符号的字形需要放在辅音的左边。这是由 Harfbuzz 完成的(在 Windows 上,可能是 DirectWrite),
但在 LuaTeX 中,字形是从字体中挑选出来的,并且简单地一个接一个地毫无意义地放置: