使用企业用途或 Microsoft 符号区域中的字形

使用企业用途或 Microsoft 符号区域中的字形

自从昨天更新 TeX Live(luaotfload更新软件包之一,更新至版本 2.9,日期为 2018/09/24)以来,我在处理企业使用区域和微软符号区域中的字形时遇到了困难。

例如,以下是 Coelacanth 中的一个字形,FontForge 报告其名称为uniF58C

FontForge 屏幕截图

但是,以下操作会生成一个除页码外其余均为空白的页面:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Coelacanth}
\begin{document}

^^^^f58c

\symbol{"F58C}

\symbol{62860}% a converter called gbase tells me that f58c = 62860

\char62860
\end{document}

\fontchar描述为使用 LuaLaTeX 访问 OpenType 字体中的所有字符同样也会产生稀薄的空气。

搜索字形名称uniF58C没有coelacanth.lua结果。

自更新以来,我发现唯一有效的方法是制作字体表,如OpenType/TrueType 字体的字体表。然后我可以看到字形是U+0f0366,可以转换为 983910,并且\symbol{"0F0366}和都\symbol{983910}给出所需的字形。

我的问题是如何理解这个变化。这只是一个错误还是一个有意为之的变化?为什么 FontForge 提供的信息与从字体表获得的信息如此相似?

答案1

通用/上下文字体加载器将“字体中的所有私有字符移至专用私有范围”,从而破坏了对这些字形的访问。如果此更改是永久性的(尚不清楚),则访问此类字形的所有软件包和文档\char可能都必须调整其代码以适应 lualatex。

编辑 2018-10-04

随着今天 luaotfload 的更新,这个问题应该已经解决。

目前可用的解决方法

使用较旧的字体加载器

使用 lua 函数访问

\documentclass{book}

\usepackage{fontspec}
\setmainfont{Coelacanth}
\newcommand\byunicode[1]{\directlua{
      for k, v in pairs(fonts.hashes.identifiers[font.current()].characters) do
          if v.unicode == #1 then
              tex.print(utf.char(k))
              break
          end
      end
 }}


\begin{document}

\byunicode{62860} \byunicode{\number"F58C}

\end{document}

相关内容