问题

问题

我正在尝试使用KFGQPC 符号字体可从以下网址下载这里。我正在使用 LuaLaTeX,但我不知道如何让它显示。我在 XeLaTeX 中使用它时遇到了一些麻烦,但最终还是能够解决,这可以从我创建的参考文档中看出。

这是我的 MWE,

\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode,luaotfload,luatextra}

\setlength{\parindent}{0cm}

\setmainfont{Arial}

\newfontfamily\QPCSymbols{KFGQPC Arabic Symbols 01}

\newfontfamily\TNR
{Times New Roman}

\begin{document}
\section{Font Test}
Main font: This is a test.

Times New Roman: {\TNR Bite me "}

The Symbol: {\QPCSymbols !}
\end{document}

这是我的输出:

MWE 输出

问题

  1. 如何使其在 LuaLaTeX 中工作?
  2. 我如何编辑字体以使其更易于使用?例如,在 Microsoft Word 中,我只需键入参考字母并将字体更改为 Symbols 字体即可;类似于 Dingbat 字体。

答案1

XeTeXglyph据我所知,LuaTeX 中没有与该宏直接等效的宏。但\symbol只要您知道字体中的字形是如何编号的,就可以使用该宏。我使用了 ConTeXt 代码这个答案生成字形的代码点。

对于正常使用,为您想要的符号制作单独的宏可能是有意义的。\glyphnum本例中使用的宏使用您链接到的文档中显示的数字,然后在字体中生成适当的代码点。由于数字是大整数,我使用该bigintcalc包进行加法。我已经展示了如何制作宏以使用文档中的字形编号,或者您可以进一步将该宏包装到您自己的单独宏中,以获得您需要的字形。

\documentclass{article}
\usepackage{fontspec}
\usepackage[margin=1in]{geometry}
\usepackage{bigintcalc}
\usepackage{multicol}
\usepackage{pgffor}
\newfontfamily\QPC{KFGQPC Arabic Symbols 01}
\newcommand\glyphnum[1]{\bigintcalcAdd{#1}{983040}}
\newcommand\KFGQPCglyph[1]{\QPC\symbol{\glyphnum{#1}}}
\begin{document}

\begin{multicols}{3}
\foreach\x in {2,...,97}{
\parbox{2em}{\hfill\x~=} \glyphnum{\x}~=  {\QPC \symbol{\glyphnum{\x}}}\par
}
\end{multicols}

Example of use:

\KFGQPCglyph{12}
\KFGQPCglyph{42}
\KFGQPCglyph{70}
\end{document}

查找代码点的另一种方法

查找代码点的更简单方法(如注释中指出的)是查看.lua与字体关联的代码。这可以在 LuaTeX 的本地缓存文件夹中找到。在加载字体的文档的日志文件中,您将找到类似于以下内容的一行(确切路径取决于您的操作系统):

luaotfload | cache : Lookup cache loaded from /Users/alan/Library/texlive
/2017/texmf-var/luatex-cache/generic/names/luaotfload-lookup-cache.luc.(load
luc: /Users/alan/Library/texlive/2017/texmf-var/luatex-cache/generic
/font/otl/symbols1-ver02.luc)

最后一部分告诉你.luc字体文件的名称,在本例中是symbols1-ver02.luc。在同一个文件夹中会有一个相应的.lua文件symbols1-ver02.lua

如果你查看这个文件,你会看到如下几行:

 ["descriptions"]={
  [983040]={
   ["boundingbox"]=1,
   ["index"]=0,
   ["name"]="notdef",
   ["unicode"]=983040,
   ["width"]=1024,
  },
  [983041]={
   ["boundingbox"]=1,
   ["index"]=1,
   ["unicode"]=61472,
   ["width"]=600,
  }, 

  ...

  [983137]={
   ["boundingbox"]={ 98, -289, 2388, 1364 },
   ["index"]=97,
   ["unicode"]=61572,
   ["width"]=2498,
  },
 }

请注意,代码块中的第一个数字[descriptions]对应于我的宏中的起始数字\glyphnum,最后一个数字是该数字加上 97(文档中的字形数量)。

代码输出

答案2

正如 Alan Munn 所说,您需要用数字代码来调用符号。

我在 FontForge 中打开了字体。ASCII 或拉丁字符集中没有指定任何字符。因此,输入感叹号不会产生有效字符。

如果出于某种原因,您希望通过键入普通键盘字符来使用此字体,您可以在 FontForge 中打开它并将符号移动到 ASCII 位置,然后另存为不同的字体(具有不同的内部字体名称)。假设许可证允许这样做。我不建议这样做,因为这样只有您才能使用该字体,并且文本阅读器会将其字符视为 ASCII。

相关内容