这肯定是一个真正的新手级问题(这有点令人尴尬,因为我在 1992 年使用纯 TeX 撰写了博士论文),但我找不到答案。即使这里有 500 万个类似的问题……所以,我的 MWE 是这样的:
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\dingbatsfont{Dingbats}
\newcommand\ding[1]{{\dingbatsfont\symbol{#1}}}
\begin{document}
\ding{115} % no output
{\dingbatsfont ❤} % error --- comment out to have a PDF file
\end{document}
...运行它时xelatex
第二行出现错误:
** WARNING ** 1 glyph names (out of 1) missing Unicode mapping.
** WARNING ** ToUnicode CMap "TZCCMX+Dingbats-UTF16" removed.
** ERROR ** pdf_ref_obj(): passed invalid object.
而如果我删除它,则不会出现错误,但什么\ding{115}
也没有给出。奇怪的是,生成的 PDF 文件(当我删除第二行时)似乎已加载字体:
(0)samsung-romano:~/education/LibroEje/tmp% pdffonts lalla.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
IPQPDZ+Dingbats-Identity-H CID Type 0C Identity-H yes yes yes 5 0
WPNUQB+LMRoman10-Regular-Identity-H CID Type 0C Identity-H yes yes yes 7 0
...字体在这里并且可以由 LibreOffice 使用:
我尝试115
用 Unicode 代码点替换"2773
,但再次出现上述错误。
我做错了什么?
答案1
\documentclass{article}
\usepackage{pifont}% load it first
\usepackage{fontspec}
\begin{document}
char: \ding{115}
\end{document}
还有 TrueType dingbats 字体。对于该字体,定义自己的字体是有意义的\ding
答案2
我找到了答案。大部分功劳应该归功于@Ulrike Fischer。
问题是我以为 Type1 字体可以像 opentype 或 ttf 字体一样处理。在latex
、 (即pdflatex
注释掉)和 中起作用的最小代码片段如下:fontspec
xelatex
\documentclass{article}
\usepackage{fontspec} % comment for pdflatex or latex
\begin{document}
\newcommand{\myding}[1]{{\fontfamily{pzd}\fontencoding{U}%
\fontseries{m}\fontshape{n}\selectfont\char#1}}
{char: \myding{115}}
\end{document}
...并且两个编译器都生成了相同的符号(黑色填充三角形,类似于 U+25B2)。 可能有更好的方法来实现这一点,但我对此很满意...