带空格的字体名称,使用 XeLaTeX 和 fontspec

带空格的字体名称,使用 XeLaTeX 和 fontspec

我使用XeLaTeX、、和amsmathfontspecunicode-mathstandalone创建一个方程然后我将其导入 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 端口)。

相关内容