是否有可能自动排版多种语言脚本的 Unicode 输入,而无需插入特殊命令?

是否有可能自动排版多种语言脚本的 Unicode 输入,而无需插入特殊命令?

我正在尝试用某些 LaTeX 变体创建词汇表,并且想要插入如下词源:

دَفْتَر • (daftar) m(复数 دَفَاتِر‎ (dafātir)):来自中波斯语 dptl (daftar),来自阿拉姆语 דפתרא‎ / ڕڦڬڪڐ‎,来自古希腊语 διφθέρα (diphthéra)。

原始文本在我的浏览器、Gedit 和终端中看起来都很好。字体都在那里。然而,当我尝试遵循各种指示在 LaTeX 中排版语言时,我遇到了问题。我应该使用 XeTeX,这没问题,但随后我必须运行一堆命令,例如\newfontfamily\setotherlanguage,然后在每次语言转换周围包裹“语言切换”命令,例如\textgreek和和\texthebrew\textarabic我甚至找不到\textaramaic命令,脚本有不同的名称吗?

我不太在意外观,我只想要一个可以打印格式化词汇表的东西,其中每种语言的各种单词都清晰可读。在 TeX 派生的排版语言中,没有“即插即用”的方法来处理多语言 Unicode 文本吗?

也许最好的解决方案是输出 HTML 并从浏览器打印?我猜另一种选择是使用 Perl 在检测到的每种语言周围插入 TeX 标记,使用一组正则表达式:qr/\p{Arabic}/。但这似乎很麻烦……

答案1

更新答案

从 TeX Live 2020 开始,babel能够根据你在源中使用的脚本自动选择正确的语言,命令如下

\babelprovide[import, onchar=ids fonts]{greek}

如果您随后选择\babelfont希腊语,它还将使用适当的Script=Language=选项选择该字体,例如

\babelfont{rm}[Ligatures=Common]{CMU Serif}

不幸的是,ucharclasses当前版本的 XeLaTeX 中存在问题,并且根本无法与其他引擎兼容。

原始答案

该包ucharclasses提供了一种实现类似功能的方法。如果你给它一个命令,例如

\usepackage{fontspec}

\defaultfontfeatures{Scale=MatchUppercase, Ligatures=TeX}

\newfontfamily{\defaultfont}{Latin Modern Roman}[Scale=1.0, Ligatures={Common, TeX}]
\newfontfamily{\malayalamfont}{Arial Unicode MS}

\usepackage[Malayalam]{ucharclasses}

\setDefaultTransitions{\defaultfont}{}
\setTransitionTo{Malayalam}{\malayalamfont}

然后您就可以开始用马拉雅拉姆语输入文字了。(如果您的字体包含 OpenType 脚本和语言支持,您可能也想将其打开。) 这是文档。

这并非在所有情况下都有效,因为相同的 Unicode 代码点在不同的语言(例如保加利亚语和俄语或日语和繁体中文)中可能具有不同的含义。您无法获得 Polyglossia 或 Babel 等提供的连字支持。我个人更喜欢语义标记。但是,您可以尽可能接近大多数文档所需的内容。

相关内容