如何访问超出 utf8 范围的 unicode 编码字符,例如 \symbol{"110367}?

如何访问超出 utf8 范围的 unicode 编码字符,例如 \symbol{"110367}?

一些 OpenType 字体在无法通过 Unicode 访问的插槽中提供了一些最有趣的字形(限制为 0x10FFFF)。例如:字体系列分别在插槽和中EB Garamond提供了称为f.short和的字形。(如果您好奇:这些字形是字形和的变体——后者是连字——它们的“臂”较短,即,与“常规”字形和的臂相比,臂向右突出的程度要小得多。)f_f.short0x1103670x110360ffffff

附言:我通过在 FontForge 中打开 otf 文件0x110367获得了插槽号。0x110360

如果我尝试f.short通过\symbol{"110367}或进行访问\symbol{1114983},我会收到以下错误消息:

! Bad character code (1114983)

除了游说字体设计师停止在超出 Unicode 范围的位置放置诸如f.short和之类的字形ff.short之外,如何访问这些字形呢?

以防万一不清楚:我对基于 LuaLaTeX 的解决方案感兴趣。如果解决方案与软件包兼容fontspec,那就更好了。


完整的 MWE(使用 LuaLaTeX 进行编译):

\documentclass{article}
\usepackage{fontspec}
\setmainfont{EB Garamond}
\begin{document}
\symbol{"110367} % "f.short" 
\end{document}

答案1

我无法重现您的问题。EB Garamond 12 Regular 中的最后一个字符位于插槽 中0xF0477,而f.short和分别f_f.short位于插槽0xF0367和中0xF0360。确实,

\documentclass{article}
\usepackage{fontspec}

\setmainfont{EB Garamond}

\begin{document}

f \symbol{"F0367} ff \symbol{"F0360}

\end{document}

生产

在此处输入图片描述

以下为相关摘录ebgaramond12-regular.lua

  [983904]={
   ["boundingbox"]=449,
   ["index"]=2822,
   ["name"]="f_f.short",
   ["unicode"]={ 102, 102 },
   ["width"]=579,
  },

  [983911]={
   ["boundingbox"]={ 24, -3, 332, 706 },
   ["index"]=2829,
   ["name"]="f.short",
   ["unicode"]=102,
   ["width"]=317,
  },

   ["f.short"]=983911,

   ["f_f.short"]=983904,

使用 XeLaTeX 编译的相同输入不会显示“短”字形。可以通过按名称寻址来使用 XeLaTeX 获取字形:

\documentclass{article}
\usepackage{fontspec}

\setmainfont{EB Garamond}

\begin{document}

f \XeTeXglyph\XeTeXglyphindex"f.short"\ %
ff \XeTeXglyph\XeTeXglyphindex"f_f.short"

\end{document}

相关内容