一段时间以来,我一直在 Sharelatex 中处理一个大型文档,但一直收到字体规范错误,提示无法找到字体文件。然而,尽管出现此错误消息,但文档仍能正常编译,直到我将字体切换为 Garamond。现在,文档将仅编译文档的无衬线部分。
下面是没有无衬线部分的 MWE。
\documentclass[12pt]{scrbook}
\usepackage[paperwidth=7.5in, paperheight=9.25in, top=1in, bottom=1.375in, left=1in, right=1in]{geometry}
\setlength{\parindent}{2em}
%Fonts
\usepackage{fontspec}
%This is ShareLaTeX Specific (or if the fonts are not installed in your system)
%-----------------------------------------------------------------------
% Garamond
\setmainfont[BoldFont=GARABD.otf,ItalicFont=GARAIT.otf]{GARAMOND.otf}
\begin{document}
Something is wrong! I am momentarily blinded and confused by moving, overlapping, translucent images that overwhelm my vision of the book I am reading. The room I sit in is visually a frenetic whirling mess. Abject fear grips me, first at the base of my spine, then it rips up my spine to my cortex and beyond. \par
\end{document}
有什么办法可以解决这个问题吗?我尝试过更改文件名,但是没有效果。
答案1
与setmainfont
您一起建设区分大小写字体路径。
- Path=字体的工作目录
- BoldFont=文件名路径段
- ItalicFont=文件名路径段
- 扩展名=路径的文件扩展名
你的代码不起作用,因为你告诉 fontspec 在所有路径中查找这样的(示例显示粗体字体的路径):
/usr/local/texlive/2016/texmf-dist/fonts/opentype/GARABD.otf/GARAMOND.otf
/usr/local/texlive/2016/texmf-dist/fonts/truetype/GARABD.otf/GARAMOND.otf
/usr/local/texlive/2016/texmf-dist/fonts/type1/GARABD.otf/GARAMOND.otf
... any other font directory in your environment/GARABD.otf/GARAMOND.otf
TeX 默认已知字体路径段
在基于 Unix 的计算机上,你可以使用以下命令找出 TeX 字体文件夹:
cat $(kpsewhich -var-value TEXMFSYSVAR)/fonts/conf/texlive-fontconfig.conf
其计算结果/home/texlive/2016/texmf-var/fonts/conf
为 2016 年,或您所安装版本的相应年份。
否则,fontspec
确实有一个针对系统字体的自动路径查找机制,您只需执行即可\setmainfont{Arial}
,但这并不明确,因此根据我的经验,会导致跨平台或跨计算机兼容性问题。
让您自己动手
找到文件所在的文件夹(不知道你的操作系统,我只能编造一些东西)
给定的字体位于同一文件夹中,其名称如下:
/Library/Fonts/GARABD.otf
/Library/Fonts/GARAIT.otf
/Library/Fonts/GARAMOND.otf
我该如何fontspec
为此做准备?
\usepackage{fontspec}
\setmainfont[%
Path = /Library/Fonts/ ,
UprightFont = MOND ,
BoldFont = BD ,
ItalicFont = IT ,
Extension = .otf
]{GARA} % {contains only what is common among all file names (usually basename of font family)}
笔记
许多专业字体在其文件名中使用破折号来分隔变体,因此您经常会看到以下内容:
/Library/Fonts/DejaVuSansCondensed.ttf
/Library/Fonts/DejaVuSans.ttf
/Library/Fonts/DejaVuSans-ExtraLight.ttf
/Library/Fonts/DejaVuSansCondensed-Bold.ttf
/Library/Fonts/DejaVuSans-BoldOblique.ttf
/Library/Fonts/DejaVuSansCondensed-Oblique.ttf
/Library/Fonts/DejaVuSansCondensed-BoldOblique.ttf
/Library/Fonts/DejaVuSans-Oblique.ttf
/Library/Fonts/DejaVuSans-Bold.ttf
我该如何设置?嗯,不幸的是,fontspec
它不能同时支持所有这些字体,所以我要么选择较少的字体,\setmainfont
要么将它们分成系列来加载它们,例如\newfontfamily\dejavucondensed
\newfontfamily\dejavu
\newfontfamily\dejavulight
。
\usepackage{fontspec}
\newfontfamily\dejavu[%
Path = /Library/Fonts/ ,
UprightFont = ,
BoldFont = -Bold ,
ItalicFont = -Oblique ,
Extension = .ttf
]{DejaVuSans} % {contains only what is common among all file names (usually basename of font family)}
答案2
命令\set*font
应接受指向包含文件的目录的参数Path=[Path]
。这仅在使用系统未知的字体时才有意义。否则,您应该提供字体系列的名称,如 bernard 所述(第一条评论)。