(这有点像是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 更新)中得到修复。