![带空格的字体名称,使用 XeLaTeX 和 fontspec](https://linux22.com/image/256315/%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E5%AD%97%E4%BD%93%E5%90%8D%E7%A7%B0%EF%BC%8C%E4%BD%BF%E7%94%A8%20XeLaTeX%20%E5%92%8C%20fontspec.png)
我使用XeLaTeX
、、和amsmath
fontspec
unicode-math
standalone
创建一个方程然后我将其导入 Inkscape 制作海报。当使用带空格的字体名称时,XeLaTeX 会找到该字体,但在生成的 PDF 中,字体名称将保存为不带空格,例如Cambria Math
变成CambriaMath
。在 Inkscape 中打开 PDF 时,Inkscape 会抱怨缺少字体,因为 Inkscape 不知道CambriaMath
,而只知道Cambria Math
。
我应该如何指定字体名称才能保留空格字符?
我尝试了一些括号、引号、下划线……但找不到解决方案。
以下是 MWE:
% !TEX program = XeLaTeX
\documentclass{standalone}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{Rotis Serif Std}
\setsansfont{Rotis SemiSans Std}
\usepackage[]{unicode-math}
\unimathsetup{math-style=ISO}
\setmathfont{Cambria Math}
% ==== ==== ==== ====
\begin{document}
$\displaystyle
\mathrm{det}(J) =
\begin{vmatrix}
a & b & c \\
d & e & f \\
g & h & i
\end{vmatrix} =
aei+bfg+cdh-ceg-bdi-afh
$
\end{document}
PS:Inkscape 提供用“最相似的字体”替换字体,但这给我带来了其他麻烦,所以我宁愿不替换任何字体。
答案1
Inkscape 导入的 PDF 基本上是尝试导入文本字符串并自行呈现它们,因此它需要知道所使用的字体,但它似乎获取了字体的 PostScript 名称,该名称可能与系统字体服务识别的全名不匹配,因此它将无法找到该字体。
无论如何,从 PDF 导入文本通常不是一个好主意,而且会严重破坏数学。由于 Inkscape 不支持将文本导入为路径,因此另一种解决方案是使用pdf转svg命令行实用程序可以执行此操作并保留原始文本布局。
(pdf2svg 作者不提供任何二进制文件,在 Linux 上构建它很简单,对于 Windows,可以本地构建它或使用 MingW 进行交叉编译,大多数依赖项都由 GTK+ 在预构建的包中提供Windows 端口)。