我是 TeX 新手。我遇到以下问题:如何从位于项目根目录的目录中的文件加载字体?
假设我有类似的东西:
/项目 /字体 DancingScript-Regular.ttf 主文本 DancingScript-Regular.ttf
当它位于根目录时加载它似乎有效。
%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode
\documentclass[a4paper,12pt]{book}
\usepackage{fontspec}
\setromanfont{DancingScript-Regular.ttf}
\begin{document}
hello world
\end{document}
但是我不知道如何在fonts
目录中加载它。我试过./fonts/DancingScript-Regular.ttf
、fonts/DancingScript-Regular.ttf
和。它们"fonts/DancingScript-Regular.ttf"
都file:./fonts/DancingScript-Regular.ttf
不起作用。
所有指南似乎都侧重于某种“如何安装字体”,但我无法接受这一点,因为字体可能会(定期)更改,并会导致某种字体版本地狱;它也不太适合版本控制。LaTeX WikiBook 中的字体部分似乎也没有涵盖使用您自己的字体。
另外,我可以将字体加载为某种预设/别名吗?由于很多字体我基本上都有字体系列,所以大约有 10 种变体(倾斜、粗体、粗倾斜、常规等)。如果可能的话,我想避免重复声明。
答案1
以下解决方案适用于 XeLaTeX 和 LuaLaTeX。
该手册第 7 页fontspec
写道:
要加载不在默认搜索路径中的字体,必须使用路径功能指定其在文件系统中的位置:
\fontspec [ Path = /Users/will/Fonts/, UprightFont = *-regular, BoldFont = *-bold, ...] {texgyrepagella}
路径不必绝对指定,因此如果您的字体在例如 texsource/fonts 中并且您的源在 texsource 中,则您可以使用:
\fontspec [ Path = fonts/, ... ] { } % note that the trailing '/' is required
由于通常不建议\fontspec
直接使用该命令,因此更常见的做法是使用主要字体选择命令之一,或者\newfontfamily
。
\setmainfont [ Path = fonts/, ... ] { }
\setsansfont [ Path = fonts/, ... ] { }
\setmonofont [ Path = fonts/, ... ] { }
\newfontfamily [ Path = fonts/, ... ] { }
请注意,UprightFont 等规范后面的部分必须与您使用的实际字体的名称相匹配。例如,如果您的字体文件被命名为
MyFont-Roman.ttf
和MyFont-Italic.ttf
加载它们的命令将使用:
\fontspec [Path = fonts/,
UprightFont = *-Roman,
ItalicFont = *-Italic
]
{MyFont}
ETC。
记得你不需要\fontspec
专门使用命令。任何其他字体选择命令(fontspec
例如\setmainfont
或 )\newfontfamily
也可以与路径规范一起使用,如前所述。
除非您特别需要本地字体,否则最简单的方法是将它们安装到您的系统中(在 Mac 上/Library/Fonts
),然后它们就会被自动找到。
答案2
我补充一点,如果你读过这篇文章但仍然有问题……代码查找的 ttf 与 tex 文档中指定的字体名称相同。因此,如果字体名称有空格,则 ttf 文件名也必须有空格!例如我有这个:
\newfontfamily{\rim}[Path=./fonts/, Scale=1.5]{Rat Infested Mailbox}
字体名称是 RatInfestedMailbox.ttf,而 xelatex 找不到该字体。当我将字体重命名为“Rat Infested Mailbox.ttf”时,xelatex 找到了它,并且很高兴。事实上,ttf 文件的名称必须与字体名称完全相同(包括例如特殊字符,如 &,如果它们在字体名称中,并且区分大小写(在 Linux 上))。
因此看起来对 ttf 文件的搜索根本没有做任何聪明的事情(例如,如果无法直接找到具有给定名称的 .ttf,则扫描字体路径中的所有 ttf 以寻找正确的字体名称)。