自从昨天更新 TeX Live(luaotfload
更新软件包之一,更新至版本 2.9,日期为 2018/09/24)以来,我在处理企业使用区域和微软符号区域中的字形时遇到了困难。
例如,以下是 Coelacanth 中的一个字形,FontForge 报告其名称为uniF58C
:
但是,以下操作会生成一个除页码外其余均为空白的页面:
\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 的更新,这个问题应该已经解决。
目前可用的解决方法
使用较旧的字体加载器
从以下位置获取 2018-07-20(或 2018-07-20-patched)字体加载器https://github.com/u-fischer/fontloader-archive/tree/master/archive
在搜索路径中创建 luaotfload.conf
[运行] fontloader=fontloader-reference-2018-07-20.lua;
使用 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}