如何使用 Lua(La)TeX 从 OTF 访问非 Unicode 字形?

如何使用 Lua(La)TeX 从 OTF 访问非 Unicode 字形?

我打开了索比卡FontForge 中的字体,其中有一些字形我猜不是用 Unicode 编码的(如果我理解正确的话)。例如,看看下面的插槽。

1

我从中猜测我选择的插槽是非 Unicode 位置,因为我看到U+????。有没有办法通过调用65664/ 0x10080/来加载此形状BhaRa.dv?免责声明:我不知道它们都是什么意思,我只是猜测它们是此形状的不同类型的标识符。TeX(尤其是 LuaTeX)可以理解这些标识符中的哪些?我发现解决方案,但它对我想要的字形不起作用。

答案1

您可以slot_of_name使用luaotfload

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Shobhika}
\begin{document}
The BhaRa.dv character is:
\directlua{tex.sprint("\\char" .. luaotfload.aux.slot_of_name(font.current(), [[BhaRa.dv]]))}
\end{document}

在此处输入图片描述


如果您知道插槽号,也可以直接输入代码\char[code]。我不太确定代码如何与 FontForge 显示的值相对应。不过,您可以使用\char以下代码打印出字体表,其中包含可以理解的数字,该代码改编自https://tex.stackexchange.com/a/666152/(改编自https://tex.stackexchange.com/a/98789/slot_of_name)。该代码基本上是对每个字符进行 for 循环。

\documentclass[a5paper]{article}
\usepackage{luacode}
\usepackage[margin=0.5cm]{geometry}
\usepackage{fontspec}
\usepackage{multicol}
\setlength{\columnsep}{0.3cm} \setlength{\columnseprule}{1pt}
\setmainfont{Shobhika Regular}

\newfontface\OD{Shobhika-Regular.otf}
\begin{document}
\begin{multicols}{4}\noindent
\begin{luacode*}
local f = fontloader.open('/usr/share/texlive/texmf-dist/fonts/opentype/public/shobhika/Shobhika-Regular.otf')
local glyphs = {}
for i = 0, f.glyphmax - 1 do
   local g = f.glyphs[i]
   if g then
       table.insert(glyphs, {name = g.name, unicode = g.unicode})
   end
end
table.sort(glyphs, function (a,b) return (a.unicode < b.unicode) end)

for i = 1, #glyphs do
   if (glyphs[i].unicode > 0) then
      tex.sprint(glyphs[i].unicode .. ": ")
      tex.sprint("{\\OD\\char" .. glyphs[i].unicode .. "}");
   else
      local charcode = luaotfload.aux.slot_of_name(font.current(), glyphs[i].name)
      tex.sprint("{\\tiny " .. tostring(charcode) .. ":}")
      if (charcode ~= false) then
         tex.sprint("{\\OD\\char" .. charcode .. "}")
      end
   end
   tex.sprint("\\ {\\small(" .. string.gsub(glyphs[i].name, "_", "\\_") .. ")}\\\\")
end
fontloader.close(f)
\end{luacode*}
\end{multicols}
\end{document}

输出的一小部分:

在此处输入图片描述

现在例如可以使用\char984278等等来打印ShaVa.dv。

相关内容