\setmainfont{Linux Libertine O} 使用 pfb 文件而不是 otf

\setmainfont{Linux Libertine O} 使用 pfb 文件而不是 otf

(这有点像是libertineotf 和 xelatex - 粗体小型大写字母坏了吗?,基于我之前注意到但还没弄清楚的一个问题。)

\documentclass{article}
\usepackage{fontspec}
    \setmainfont{Linux Libertine O}% 1
%   \setmainfont{LinLibertine_R_0.otf}% 2
%   \usepackage{libertineotf}% 3
\begin{document}
Foo bar. \textsc{Foo bar \textbf{baz!}}
\end{document}

输出

出乎意料的是,该文件不使用 中的 otf Linux Libertine O 文件C:\Windows\Fonts\,而是使用我的 texmf 树中的 pfb 文件(参见下面的日志片段)。我推测这就是为什么小写字母无法正常工作的原因,如赫伯特的回答在这里,以及为什么任何 OpenType 魔法都不起作用\addfontfeauture

我不太清楚问题出在哪里。变体 2 直接调用 otf 字体,可以运行,但不使用小型大写字母;我认为这是因为这个字体文件太具体,无法fontspec自动找到小型大写字母字体,所以我必须手动指定带有选项的文件SmallCapsFont。变体 3 运行良好,但如上面链接的问题所述,小型大写字母的调用存在问题(我想解决这个问题,而不是规避它)。

至于背景,我正在使用 MiKTeX 2.9,全部是最新版本;并且我安装了 Linux Libertine 字体 5.3 版本C:\Windows\Fonts\(独立于 LaTeX,这些是我希望fontspec使用的字体)。

日志文件(变体 1)中的一些看似相关的内容:

Requested font "Linux Libertine O" at 10.0pt
 -> C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/public/libertine/LinLibertine
O.pfb
Requested font "Linux Libertine O/ICU" at 10.0pt
 -> C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/public/libertine/LinLibertine
O.pfb

[以及许多类似的台词,但是:]

Requested font "Linux Libertine O/BI/ICU" at 10.0pt
 -> C:/Windows/Fonts/LinLibertine_RB.otf
Requested font "Linux Libertine O/BI/BI/ICU" at 10.0pt
 -> C:/Windows/Fonts/LinLibertine_RB.otf

我确实没有特别具体的问题,除了:这是怎么回事?我该如何解决?

答案1

由于某种原因,XeTeX 首先找到 Type1 字体1,您可以通过将类似这样的内容列入本地 FontConfig 配置文件中的黑名单来告诉 FontConfig 不要使用 Type1 字体(请参阅如何让 XeLaTeX 识别与 Windows 链接的字体?更多细节)。

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <selectfont>
    <rejectfont>
      <glob>C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/public/libertine/*</glob>
    </rejectfont>
  </selectfont>
</fontconfig>

TEXMF您甚至可以使用将树中的所有 Type1 字体列入黑名单C:/Program Files (x86)/MiKTeX 2.9/fonts/type1/*

1但本质上不是用它们进行排版,而是fontspec先加载字体以收集一些相关信息,然后再“真正”加载。要查看 PDF 中实际使用的字体,请尝试使用xelatex选项运行--output-driver="xdvipdfmx -v"以获取一些详细输出。

更新:这个问题现在在 XeTeX 中或多或少已经修复;TrueType/OpenType 的优先级高于 Type1,因此它应该在 TeX Live 2013(以及等效的 MiKTeX 更新)中得到修复。

相关内容