如何访问 LuaLaTeX/Fontspec 中的特定字形?

如何访问 LuaLaTeX/Fontspec 中的特定字形?

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}

我是这样找到这些数字的:

  1. 我打开了 temp-minionpro-regular.lua(日志文件中提到了该路径)

  2. 我找到以 开始的部分unicodes={(大约在第 590.000 行左右),然后浏览字形名称,直到我找到["orn.001"]=57525,听起来像装饰品名称的名称。

答案2

[以下内容适用于 XeLaTeX 和 LuaLaTeX]

除了 Urike-- 另一种可能更实用的查找特定字形的方法是使用 Windows 的字符映射表之类的工具(或操作系统中的等效工具)。如果您想要 Minion 的粗体新月,则首先要在 ›私人使用区域‹ 中查找它,这是存放特殊内容的常见位置。

在此处输入图片描述

现在,您可以将unicode编号与 一起使用\symbol,也可以将该字形直接复制到(unicode感知)编辑器中的 TeX 文档中:

在此处输入图片描述

...可能会或可能不会正确显示(这是使用 Courier New 的 WinEdt 7)。但如果字形存在于您的字体中,则输出应该没问题。

在此处输入图片描述

附言:

我不能只复制我想要访问的特定 Unicode 字符

我想说,使用这种方法,将不存在你无法复制的 Unicode 字符:)

有关的: 如何在我的文档中输入任意 Unicode 代码点?在 LaTeX 中输入 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 运行的屏幕截图: 在此处输入图片描述

相关内容