使用 Lualatex + fontspec + babel 进行组合,传递希腊语的选项(如果我没记错的话)应该是:greek
,greek.polutoniko
和greek.ancient
。
现在,如您所知,字体中存在替换机制(某些类型的查找),可以通过文本中的某些选项(例如)或简单地调用某种语言来激活。一个例子是通过使用命令RawFeature=+calt
将语言设置为土耳其语将大写字母 < I > 转换为小写无点字母 < ı > 的机制。这是因为字体中有一个对 有效的替换查找。\selectlanguage{turkish}
\MakeLowercase{II}
latn{ TRK}
我在字体中创建了一个适用于多音希腊语的 = 替换查找,因此单音希腊语使用带重音符号 tonos 的元音,而多音希腊语使用带重音符号 oxia 的元音。当希腊语不是单音希腊语时,应激活grek{ PGR}
此查找(单个替换或)。'locl'
问题是,如果我设置\usepackage[greek.polutoniko]{babel}
该机制,它不起作用,也就是说,在这种情况下,Lualatex 似乎无法识别多音调希腊语,因此它应该应用替换规则。简而言之,当latn{ TRK}
语言是土耳其语时,字体标签会触发替换,但当语言是多音调希腊语时,字体标签grek{ PGR}
不会触发替换。
我问(如果我足够清楚的话)如何以某种方式标记文本,以便在文本内部调用字体内部的 PGR 语言系统功能查找。
谢谢
附录
最小(不)工作示例
\documentclass{article}
\usepackage{fontspec}
\usepackage[italian]{babel}
\babelprovide[import]{polytonicgreek}
\newfontlanguage{Polutoniko}{PGR}
\babelfont[italian]{rm}[Numbers={Proportional,OldStyle},RawFeature=+supkern,RawFeature=+calt]{SimonciniGaramondPro}
\babelfont[greek]{rm}[Language=Polutoniko,RawFeature=+calt]{SimonciniGaramondPro}
\begin{document}
quel ramo del lago di Como
\selectlanguage{greek}
ά ὰ έ ὲ
\end{document}
出口:
! Package babel Error: You haven't defined the language nil yet.
(babel) Perhaps you misspelled it or your installation
(babel) is not complete.
附录2
感谢您的指示,看来我设法解决了。如果我没有立即理解这些指示,我深表歉意。此外,由于我必须在字体查找和 Lualatex 代码之间创建正确的交互,因此问题变得复杂。
这是最终的代码:
\documentclass{article}
\usepackage{fontspec}
\usepackage[italian]{babel}
%\babelprovide[import, main]{italian}
\babelprovide[import]{polytonicgreek}
\babelprovide[import]{greek}
\babelfont{rm}[Numbers={Proportional,OldStyle},RawFeature=+calt]{SimonciniGaramondPro}
\babelfont[polytonicgreek]{rm}[RawFeature=+calt]{SimonciniGaramondPro}
\babelfont[greek]{rm}[RawFeature=+calt]{SimonciniGaramondPro}
\begin{document}
\selectlanguage{greek}
ά έ ή ί ό ώ ύ
\selectlanguage{polytonicgreek}
ά έ ή ί ό ώ ύ
ά ὰ έ ὲ
\end{document}
从图中可以看出,左侧的 Adobe Garamond Premiere Pro 本身就存在在多音调中使用单音调的尖音的问题,与多音调略有不同,导致渲染缺乏同质性(参见第三行)。右侧是我正在处理的字体的最终渲染。
最后一个问题:由于主要语言是意大利语,如果不使用,直接将其作为 babel 选项输入是否正确\babelprovide
?
感谢您的合作和耐心:)
答案1
嗯,我意识到你的问题与希腊字母:tonos 和 oxia。请不要忘记包含 MWE 和相关问题的链接:
\documentclass{article}
\usepackage{babel}
\babelprovide[import, main]{polytonicgreek}
\babelprovide[import]{greek}
\directlua {
fonts.handlers.otf.addfeature{
name = "tonosoxia",
features = {grek = {pgr = true}},
type = "substitution",
data = {
Alphatonos = 0x1FBB,
Epsilontonos = 0x1FC9,
Etatonos = 0x1FCB,
Iotatonos = 0x1FDB,
Omicrontonos = 0x1FF9,
Omegatonos = 0x1FFB,
Upsilontonos = 0x1FEB,
alphatonos = 0x1F71,
epsilontonos = 0x1F73,
etatonos = 0x1F75,
iotatonos = 0x1F77,
iotadieresistonos = 0x1FD3,
omicrontonos = 0x1F79,
omegatonos = 0x1F7D,
upsilontonos = 0x1F7B,
upsilondieresistonos = 0x1FE3,
},
}
}
\babelfont{rm}[RawFeature=+calt;+tonosoxia]{EB Garamond}
\babelfont[greek]{rm}[RawFeature=+calt]{EB Garamond}
\begin{document}
ά έ ή ί ό ώ ύ
\selectlanguage{greek}
ά έ ή ί ό ώ ύ
\end {document}
不幸的是,标准希腊风格加载语言的方式有点棘手,核心babel
无法捕捉到并设置字体语言系统,但基于的替代方法可以\babelprovide
正确设置它。
答案2
编辑
的维护者 Javier Bezosbabel
在评论中推荐了该命令
\babelprovide[import,main]{polytonicgreek}
这应该可以正确设置语言标签。main
如果它不是主要语言,则删除。
原始答案
如果您有字体特定的功能,您可以在通过 加载该字体时选择它们作为选项\babelfont
。如果程序中的每个希腊字体都应加载相同的 OpenType 语言标签,您也可以使用 加载希腊语\babelprovide[import, language=...]
。
fontspec
由于语言标签中没有预定义的接口PGR
,因此您需要使用以下命令来定义它:
\usepackage{fontspec}
\newfontlanguage{Polutoniko}{PGR}
加载后babel
、调用前
\babelfont[greek]{rm}
[Language=Polutoniko]{MyCustomFont.otf}