![如何访问 LuaLaTeX/Fontspec 中的特定字形?](https://linux22.com/image/263001/%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%20LuaLaTeX%2FFontspec%20%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E5%AD%97%E5%BD%A2%EF%BC%9F.png)
Minion Pro 的 OTF 版本包含几个我想要访问的 Dingbats 字形。其中一些不是 unicode,所以我不能直接将我想要访问的特定 unicode 字符复制到我的文本编辑器中。
具体来说,我正在寻找本文档第 3 页上的粗体 Moon:
http://www.adobe.com/type/browser/pdfs/1719.pdf
经过搜索,我还是搞不清楚如何将字体中的特定字符包含到我的文档中。我发现我可以使用命令\symbol{glyph number}
,但不知道该如何获取该数字。
因此,我更笼统地提出我的问题:如何使用 LuaLaTeX 使用字体中的特定字形?
答案1
在我的 Minion Pro 版本中,我使用
\documentclass{article}
\usepackage{fontspec}%
\setmainfont{Minion Pro}
\begin{document}
blub \symbol{57529} \symbol{57530}
\end{document}
我是这样找到这些数字的:
我打开了 temp-minionpro-regular.lua(日志文件中提到了该路径)
我找到以 开始的部分
unicodes={
(大约在第 590.000 行左右),然后浏览字形名称,直到我找到["orn.001"]=57525,
听起来像装饰品名称的名称。
答案2
[以下内容适用于 XeLaTeX 和 LuaLaTeX]
除了 Urike说-- 另一种可能更实用的查找特定字形的方法是使用 Windows 的字符映射表之类的工具(或操作系统中的等效工具)。如果您想要 Minion 的粗体新月,则首先要在 ›私人使用区域‹ 中查找它,这是存放特殊内容的常见位置。
现在,您可以将unicode编号与 一起使用\symbol
,也可以将该字形直接复制到(unicode感知)编辑器中的 TeX 文档中:
...可能会或可能不会正确显示(这是使用 Courier New 的 WinEdt 7)。但如果字形存在于您的字体中,则输出应该没问题。
附言:
我不能只复制我想要访问的特定 Unicode 字符
我想说,使用这种方法,将不存在你无法复制的 Unicode 字符:)
答案3
您可以使用上下文文档显示字体中的某些字形(假设该字体名为whatever.otf
):
\definefontsynonym[Dummy][file:whatever.otf][features=default]
\starttext
\showfont[Dummy]
\stoptext
这将显示您可以在 Latex 中使用的偏移数字\symbol
,用于字体中的前 256 个字形。
后记
以下代码遍历给定 OTF 文件中的所有字符。出于某些我不清楚的原因,这通常似乎包含大量与字形无关的字符实体。
%%Define font name and font path here
\def\fontname{Jerusalem}
\def\filename{/usr/X11/lib/X11/fonts/OTF/SyrCOMJerusalem.otf}
\startluacode
charset={}
function fonttablechars (f)
local cs, r = f.characters, {}
for c in pairs(cs) do
r[1+#r]=c
end
table.sort(r)
return r
end
function setcharset ()
charset = fonttablechars(font.fonts[font.current()])
return charset
end
function printcharset ()
local step=9
context "\\bTABLE[split=yes] "
for i=1,#charset,step do
context "\\bTR "
for j=0,step-1 do
local v, cstr = i+j, tostring(charset[i+j])
if not charset[v] then break end
context ('\\bTD \\ppno{%s} \\eTD \\bTD \\glyph{%s} \\eTD ', cstr, cstr)
end
context "\\eTR "
end
context "\\eTABLE "
end
\stopluacode
\definefontsynonym[\fontname][file:\filename][features=default]
\def\glyph#1{\getglyph{\fontname}{#1}}
\def\ppno#1{#1\relax}
\starttext
\section{Print font \fontname\ from \filename}
\setupbodyfont [\fontname]
\directlua0{setcharset()}
\setupbodyfont [mainface]
\directlua0{printcharset()}
\stoptext
答案4
我只想在 Nils L 的回答中补充几句话:我个人在 Windows 7 上使用 NexusFont,它可以按类别(Latin1 Supplement、Cyrillic、Basic Greek 等)显示整个字符表,并提供单个字符的缩放功能。这样可以更轻松地找到所需内容。以下是 NexusFont 运行的屏幕截图: