希腊字母:tonos 和 oxia

希腊字母:tonos 和 oxia

我有一种包含希腊字母的字体,其中单调字形与多调字形的重音略有不同。

然而,当我用 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}

相关内容