我正在尝试用某些 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 等提供的连字支持。我个人更喜欢语义标记。但是,您可以尽可能接近大多数文档所需的内容。