介绍

介绍

介绍

我正在使用 TeX Gyre Pagella 字体编写文档。遗憾的是,U+20AC此字体中欧元符号(UTF-8 字符)的字形不符合官方欧元符号规范

幸运的是,Martin Vogel 符号字体确实包含一个符号,其字形看起来没问题。

最小工作示例

欧元符号

\setupbodyfontenvironment[default][em=italic]
\usemodule[simplefonts][size=14pt]
\setmainfontfallback[DejaVu Serif][range={greekandcoptic, greekextended}, force=yes, rscale=auto]
\setmainfont[TeX Gyre Pagella]

% Martin Vogel Symbol font for euro sign
\usesymbols[mvs]
%\definesymbol[€][{\symbol[europe][EUR]}]

\starttext
\startitemize[packed]
\item € is the glyph of the TeX Gyre Pagella font.
\item \symbol[europe][EUR]~is the glyph of the Martin Vogel symbol font.
\stopitemize
\stoptext

问题

我如何重新定义 (€) 的编码U+20AC以使其与 Martin Vogel 字形相对应?

换句话说,我正在寻找一个前导命令,以便 MWE 中的第一行也能显示 Martin Vogel 符号字形。

我的注释掉的\definesymbol[€]尝试没有成功......

答案1

问题是 Martin Vogel 字体没有在正确的位置包含欧元符号,因此您不能只使用简单的字体回退,如 这个答案。我不知道是否有一种简单的方法可以将字体后备映射到另一种字体的不同插槽,而不会弄乱虚拟字体。

解决方案 1

这是一个简单的解决方法,只需将所有出现的“€”替换为插入其他字体中的特定字形的指令即可。这种方法不太可靠,可能会意外中断(例如在逐字环境中)。

\usemodule [translate]
\enableinputtranslation

\translateinput
  [€]
  [\getnamedglyphdirect{marvosym.ttf}{EUR}]

\starttext
\stoptext

解决方案 2

这是第二个解决方案,它比粗略的输入翻译更可靠。它使用常规字体回退和新的 simplefonts 模块(自 起成为核心的一部分)2013.09.30 20:05。欧元符号取自 Martin Vogel 字体。由于欧元符号使用了错误的插槽,因此使用替换来更正字体插槽,从而创建了字体功能。欧元符号取自 Martin Vogel 字体,尽管它确实存在于主字体中。

\startluacode
    fonts.handlers.otf.addfeature {
        name    = "euro",
        type    = "substitution",
        nocheck = true,
        data    = { [0x20AC] = "EUR" },
    }
\stopluacode

\definefontfeature
    [euro]
    [mode=node,
     euro=yes]

\definefallbackfamily [mainface] [serif] [MarVoSym] [range=0x20AC, features=euro, force=yes]
\definefontfamily     [mainface] [serif] [TeX Gyre Pagella]

\setupbodyfont [mainface]

\starttext
    The euro sign (€) is the currency sign used for the euro.
    In Unicode it is encoded at \type{U+20AC €} euro sign.
\stoptext

结果

相关内容