我有一种包含希腊字母的字体,其中单调字形与多调字形的重音略有不同。
然而,当我用 Lualatex 以多音调形式创作时,“双重”字形无论如何都是从单音调形式中取出的。更准确地说,带有音调的字形而不是带有氧的字形也用于多音调形式:这导致文本缺乏同质性。
因此,我对 EB Garamond 进行了一个实验(其中单调和多音调重音略有不同),通过用项目符号替换单调重音来更好地突出显示问题,并在使用多音调选项填充时,用尖锐重音的元音作为项目符号。
所以我使用了替换规则:
\documentclass{article}
\usepackage{fontspec}
\usepackage[greek.polutoniko]{babel}
%\usepackage[greek.ancient]{babel}
\babelfont{rm}[Numbers={Proportional,OldStyle},RawFeature=+calt]{EB Garamond}
\newfontfamily\sinoxia {EB Garamond}
\newfontfamily\oxia [RawFeature={+tonosoxia}]{EB Garamond}
\directlua {
fonts.handlers.otf.addfeature{
name = "tonosoxia",
type = "substitution",
data = {
alphatonos = "ά",
epsilontonos = "έ",
etatonos = "ή",
iotatonos = "ί",
omicrontonos = "ό",
omegatonos = "ώ",
upsilontonos = "ύ",
},
}
}
\begin{document}
\sinoxia
ά έ ή ί ό ώ ύ
\oxia
ά έ ή ί ό ώ ύ
\end {document}
然而,什么也没有发生:替换规则似乎没有任何后果。
是规则本身有问题,还是由于其他原因而无法进行替换?
谢谢
答案1
在许多情况下,您的编辑器和/或操作系统会将您的输入标准化为某种 Unicode 范式(通常是 NFC)。在 Unicode 中,带有 tonos 和 oxia 的字符在规范上是等价的,因此您的输出中始终会出现 tonos。
添加替换规则是恢复 oxia 的好主意,但您必须确保替换本身没有标准化。一种方法是通过 Unicode 代码点数字指定替换,而不是键入实际字符:
\documentclass{article}
\usepackage{fontspec}
\usepackage[greek.polutoniko]{babel}
%\usepackage[greek.ancient]{babel}
\babelfont{rm}[Numbers={Proportional,OldStyle},RawFeature=+calt]{EB Garamond}
\newfontfamily\sinoxia {EB Garamond}
\newfontfamily\oxia [RawFeature={+tonosoxia}]{EB Garamond}
\directlua {
fonts.handlers.otf.addfeature{
name = "tonosoxia",
% features = {grek = {pgr = true}}, % Restrict the change to Polytonic Greek. Doesn't work here because babel only sets the language to greek
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,
},
}
}
\begin{document}
\showoutput
\sinoxia
ά έ ή ί ό ώ ύ
\oxia
ά έ ή ί ό ώ ύ
\end {document}