当我尝试使用 Lato-Regular ttf 字体和 Lato-Bold ttf 字体时,XeLaTeX 会生成一个 pdf,其中某些字符会相互叠加,但是当使用例如 Lato-Italic、Lato-BoldItalic、Lato-Black、Lato-BlackItalic 时,字符的排版会符合预期。
一个最小的工作示例
\documentclass[a4paper]{article}
\usepackage{fontspec}
\newfontfamily\fontLato[
Mapping=tex-text,
UprightFont=*-Regular,
ItalicFont=*-Italic,
BoldFont=*-Bold,
BoldItalicFont=*-BoldItalic,
]{Lato}
\newfontfamily\fontLatoHeavy[
Mapping=tex-text,
UprightFont=*-Bold,
ItalicFont=*-BoldItalic,
BoldFont=*-Black,
BoldItalicFont=*-BlackItalic,
]{Lato}
\begin{document}
default font:\par
Test\par
Lato-Regular:\par
{\fontLato Test}\par
Lato-Bold:\par
{\fontLato \bfseries Test}\par
Lato-Italic:\par
{\fontLato \itshape Test}\par
Lato-BoldItalic:\par
{\fontLato \bfseries \itshape Test}\par
Lato-Black:\par
{\fontLatoHeavy \bfseries Test}\par
Lato-BlackItalic:\par
{\fontLatoHeavy \bfseries \itshape Test}\par
\end{document}
使用 xelatex 产生以下输出
有人知道如何让 xelatex 正确排版 Lato Regular 和 Lato Bold 吗?
背景介绍
我最近刚刚安装了新版本的 Debian(升级了我的硬盘),这意味着我的字体目录是新安装的。在安装 Debian 时,我还从旧机器上的 TexLive 2017(XeTeX 3.14159265-2.6-0.99998 和 fontspec 2017/11/09 v2.6g)升级到了 TexLive 2018(也是 XeTeX 3.14159265-2.6-0.99999,但使用 fontspec 2019/02/12 v2.7b)。在此安装之前,我对任何 Lato 字体都没有问题。
当我列出可用的字体时,我发现可用的字体文件类型与不可用的字体文件类型没有区别:
>>fc-list | grep 'Lato-Regular'
/usr/local/texlive/2018/texmf-dist/fonts/type1/typoland/lato/Lato-Regular.pfb: Lato:style=Regular
/usr/share/fonts/truetype/lato/Lato-Regular.ttf: Lato:style=Regular
/usr/local/texlive/2018/texmf-dist/fonts/truetype/typoland/lato/Lato-Regular.ttf: Lato:style=Regular
>>fc-list | grep 'Lato-Black\.'
/usr/local/texlive/2018/texmf-dist/fonts/truetype/typoland/lato/Lato-Black.ttf: Lato,Lato Black:style=Black,Regular
/usr/share/fonts/truetype/lato/Lato-Black.ttf: Lato,Lato Black:style=Black,Regular
/usr/local/texlive/2018/texmf-dist/fonts/type1/typoland/lato/Lato-Black.pfb: Lato Black:style=Regular
但是,当我将 fonspec 写入日志文件的输出与我在旧系统上使用 xelatex 生成的一些文档进行比较时,发现存在细微差异(我发现了,可能还有一些我没有发现的)。以下是我在旧系统上生成的 CV 日志文件的摘录,其中我使用的 Lato 字体定义方式与上述 mwe 中相同:
.................................................
. fontspec info: "defining-font"
.
. Font family 'Lato(0)' created for font 'Lato' with options
. [Mapping=tex-text,UprightFont=*-Regular,ItalicFont=*-Italic,BoldFont=*-Bold,BoldItalicFont=*-BoldItalic].
.
. This font family consists of the following NFSS series/shapes:
.
. - 'normal' (m/n) with NFSS spec.:
. <->"Lato-Regular/OT:script=latn;language=DFLT;mapping=tex-text;"
. - 'small caps' (m/sc) with NFSS spec.:
. - 'bold' (bx/n) with NFSS spec.:
. <->"Lato-Bold/OT:script=latn;language=DFLT;mapping=tex-text;"
. - 'bold small caps' (bx/sc) with NFSS spec.:
. - 'italic' (m/it) with NFSS spec.:
. <->"Lato-Italic/OT:script=latn;language=DFLT;mapping=tex-text;"
. - 'italic small caps' (m/itsc) with NFSS spec.:
. - 'bold italic' (bx/it) with NFSS spec.:
. <->"Lato-BoldItalic/OT:script=latn;language=DFLT;mapping=tex-text;"
. - 'bold italic small caps' (bx/itsc) with NFSS spec.:
.................................................
以下是 mwe 日志文件的输出
Package fontspec Info: Font family 'Lato(0)' created for font 'Lato' with
(fontspec) options
(fontspec) [Mapping=tex-text,UprightFont=*-Regular,ItalicFont=*-Italic,BoldFont=*-Bold,BoldItalicFont=*-BoldItalic].
(fontspec)
(fontspec) This font family consists of the following NFSS
(fontspec) series/shapes:
(fontspec)
(fontspec) - 'normal' (m/n) with NFSS spec.:
(fontspec) <->"Lato-Regular/OT:mapping=tex-text;"
(fontspec) - 'small caps' (m/sc) with NFSS spec.:
(fontspec) - 'bold' (bx/n) with NFSS spec.:
(fontspec) <->"Lato-Bold/OT:mapping=tex-text;"
(fontspec) - 'bold small caps' (bx/sc) with NFSS spec.:
(fontspec) - 'italic' (m/it) with NFSS spec.:
(fontspec) <->"Lato-Italic/OT:mapping=tex-text;"
(fontspec) - 'italic small caps' (m/itsc) with NFSS spec.:
(fontspec) - 'bold italic' (bx/it) with NFSS spec.:
(fontspec) <->"Lato-BoldItalic/OT:mapping=tex-text;"
(fontspec) - 'bold italic small caps' (bx/itsc) with NFSS spec.:
除此之外,输出布局略有不同,据我所知,唯一的区别是对于 mwe(其中 lato regular 和 lato bold 失败),字符串“/OT:mapping=tex-text;”省略了附加设置“/OT:script=latn;language=DFLT;mapping=tex-text;”,这些设置存在于 CV 日志中(其中所有 lato 字体都排版正确)。
但是,对于排版错误的字体和正确设置的字体,这都缺失了。我猜 OT 是 OpenType 设置的缩写,但从字体规范手册来看,似乎应该只为 OpenType 字体 (.otf) 设置脚本和语言,而不是像 Lato 那样为 .ttf 设置脚本和语言。此外,如果我尝试在 mwe 中设置脚本,我会收到警告,并且它会被忽略。
补充:我还尝试在 LibreOffice 中使用 Lato 字体(并尝试从 LibreOffice 导出 pdf)。在这种情况下没有问题。
答案1
您似乎同时拥有 pfb 和 ttf 版本的字体 - 这常常会带来麻烦:根据内部字体名称和随机效果(例如首先找到哪个),xetex 可以使用(错误的)pfb。
通过文件名选择字体并明确添加扩展名。