我正在尝试使用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}
这是我的输出:
问题
- 如何使其在 LuaLaTeX 中工作?
- 我如何编辑字体以使其更易于使用?例如,在 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。