![XeLaTex:'字体形状未定义'](https://linux22.com/image/302956/XeLaTex%EF%BC%9A'%E5%AD%97%E4%BD%93%E5%BD%A2%E7%8A%B6%E6%9C%AA%E5%AE%9A%E4%B9%89'.png)
我正在尝试使用自定义字体,但无法让它工作。使用 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
这是一个老问题,但我会扩展评论以获得真正的答案。
您不应该使用fontenc
with fontspec
。只需删除该行即可\usepackage[T1]{fontenc}
。
您没有说明为什么除了 Unicode 字体之外还需要加载 8 位旧字体。Unicode 是所有旧编码的严格超集,其中的任何字符也都是 Unicode。
如果出于某种原因,您确实需要在同一文档中使用旧版 8 位字体和现代字体,则需要安装 8 位版本的字体,查找其 NFSS 字体系列(例如),lmr
然后将选项添加NFSSFamily=lmr
到 Fontspec 样式字体定义中。另一种方法是,substitutefont
当您告诉 LaTeX 切换到主字体没有的编码时,选择替换字体。在这些情况下,您需要先设置 T1 编码,然后加载 Unicode(TU)作为默认编码。使用\textencoding{T1}
进行切换。