答案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。