XeLaTex:'字体形状未定义'

XeLaTex:'字体形状未定义'

我正在尝试使用自定义字体,但无法让它工作。使用 XeLaTex 进行编译

\documentclass[a4paper]{article} 

\usepackage{fontspec}
\usepackage[T1]{fontenc} 
\usepackage[usenames,dvipsnames]{xcolor}

\definecolor{primary}{HTML}{2b2b2b}

\setmainfont[Color=primary, 
Path = fonts/lato/,
BoldItalicFont=Lato-RegIta,
BoldFont=Lato-Reg,
ItalicFont=Lato-LigIta]{Lato-Lig}

\begin{document}

Test example

\end{document}

构建日志输出:

LaTeX Font Warning: Font shape `T1/Lato-Lig(0)/m/n' undefined
(Font)              using `T1/cmr/m/n' instead on input line 13.

文件夹结构(ls -R)

fonts  test.tex   
./fonts: lato
./fonts/lato: Lato-BlaIta.ttf  Lato-Bol.ttf     Lato-LigIta.ttf  Lato-Reg.ttf Lato-Bla.ttf     Lato-HaiIta.ttf  Lato-Lig.ttf Lato-BolIta.ttf  Lato-Hai.ttf     Lato-RegIta.ttf

答案1

Deedy 恢复 2018 年第四季度解决的问题。过去 4 年中,一个或多个相关软件包可能发生了一些变化。为了解决相关问题,我不得不编辑 .cls 文件以进行 (a) 字体访问和 (b) 编译,一般来说 [例如。,其中两个\\}应该\\ }在 openfont.cls 文件中。

关于字体的具体问题,以 openfont .cls 文件为例,通过以下方式编辑 .cls 文件

  • (A)删除所有Path =片段,并
  • (B)使用特定的字体文件名,例如{Lato-Lig.ttf},,,,{Lato-Bol.ttf}并 在字体分配中使用类似的细节,{Raleway-ExtraLight.otf}例如,,{Raleway-Medium.otf}BoldItalicFont=Lato-RegIta.ttf

然后

  • (C)手动将字体添加到已知的 texlive 结构中(如果尚未存在)[最好将.ttf文件放在truetype文件夹中,然后将.otf文件放在opentype文件夹中 [当然,接下来是mktexlsr从命令行fc-cache -fv]],

使 .cls 文件变得有效。还有一个\custombold命令可能在其他地方定义。用 替换它即可\bfseries

是的,xelatex应该能够找到系统的字体文件 [/System/Library/Fonts/Library/Fonts](mac 结构)。xelatex也可能仍然有“一次且仅一次定义字体”的偏好。

如果说 Deedy Resume 活动是一个阶段,那么这就是一项学术活动。如果可能(仍然)有兴趣,可以随时添加特定代码。

答案2

这是一个老问题,但我会扩展评论以获得真正的答案。

您不应该使用fontencwith fontspec。只需删除该行即可\usepackage[T1]{fontenc}

您没有说明为什么除了 Unicode 字体之外还需要加载 8 位旧字体。Unicode 是所有旧编码的严格超集,其中的任何字符也都是 Unicode。

如果出于某种原因,您确实需要在同一文档中使用旧版 8 位字体和现代字体,则需要安装 8 位版本的字体,查找其 NFSS 字体系列(例如),lmr然后将选项添加NFSSFamily=lmr到 Fontspec 样式字体定义中。另一种方法是,substitutefont当您告诉 LaTeX 切换到主字体没有的编码时,选择替换字体。在这些情况下,您需要先设置 T1 编码,然后加载 Unicode(TU)作为默认编码。使用\textencoding{T1}进行切换。

相关内容