我无法判断以下内容是 LinuxLibertine OTF 文件中的错误还是 XeLaTeX 中的错误(或两者兼而有之?)。问题是:当我尝试以斜体和粗体排版西里尔文文本时,LinuxLibertine 中似乎找不到字形。
我曾尝试使用 * 我最新的 Arch Linux 运行 TeXLive 2013,使用我的发行版中的 libertine 包, * 相同的 TeXLive,带有从 LinuxLibertine 项目新下载的 OTF 文件, * 从 tug.org 安装的 vanilla TeXLive 2014,以及原始的 Libertine OTF 文件。
这是一个最小的工作示例(预期当前工作目录中的 OTF 文件;它们可以从https://sourceforge.net/projects/linuxlibertine/files/linuxlibertine/5.3.0/):
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\setmainfont[Path = /path/to/linuxlibertine/,
Extension = .otf,
BoldFont = LinLibertine_RB,
ItalicFont = LinLibertine_RI,
BoldItalicFont = LinLibertine_RBI
]{LinLibertine_R}
\raggedright
Regular: положим\\
Bold: \textbf{положим}\\
Italic: \textit{положим}\\
Bold+Italic: \textit{\textbf{положим}}
\end{document}
OTF 文件直接来自 LinLibertineOTF_5.3.0_2012_07_02.tgz。这是 XeTeX 3.1415926-2.5-0.9999.3-2014042815(TeX Live 2013/Arch Linux)。在最后一行(粗体+斜体)中,对于每个西里尔字母字形,我在生成的 PDF 文件中看到类似划掉的矩形的东西。(当我使用 LuaLatex 时,在应该出现粗体+斜体字形的地方什么也没看到。)
正如我所说,我无法判断这是 LinuxLibertine 还是 XeTeX 中的错误。我很高兴收到任何指示/解决方法,因为我希望尽快修复此问题。
答案1
显然,Linux Libertine 的粗斜体字体中没有西里尔字母,但半粗斜体字体中有。因此,一种解决方法是使用半粗体代替粗体:
\documentclass{article}
\usepackage{fontspec}
\begin{document}
\setmainfont[
Path = /usr/local/texlive/2014/texmf-dist/fonts/opentype/public/libertine/,
Extension = .otf,
BoldFont = LinLibertine_RZ,
ItalicFont = LinLibertine_RI,
BoldItalicFont = LinLibertine_RZI,
]{LinLibertine_R}
\raggedright
Regular: положим\\
Bold: \textbf{положим}\\
Italic: \textit{положим}\\
Bold+Italic: \textit{\textbf{положим}}
\end{document}
更新
情况已经发生了变化;使用 TeX Live 2017,以下文档无需特殊设置即可显示粗体斜体西里尔文。我还添加了 Libertinus Serif 的相同功能(当然,声明\setmainfont
应该只给出一次,并使用首选字体)。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
\raggedright
Regular: положим\\
Bold: \textbf{положим}\\
Italic: \textit{положим}\\
Bold+Italic: \textit{\textbf{положим}}
\setmainfont{Libertinus Serif}
Regular: положим\\
Bold: \textbf{положим}\\
Italic: \textit{положим}\\
Bold+Italic: \textit{\textbf{положим}}
\end{document}