我在 Windows 上使用 MiKTeX 2.9。luaotfload
找不到位于 MiKTeX 维护的根目录(位于C:\Program Files (x86)\MiKTeX 2.9\
我的系统上)中的字体,因此无法直接使用LuaLaTeX
和加载它们fontspec
。我的发行版和软件包似乎是最新的;问题可能出在哪里?
这是一个最小的工作示例:
\documentclass{minimal}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\setsansfont{Latin Modern Sans}
\setmonofont{Latin Modern Mono}
\begin{document}
Hello world.
\end{document}
我知道fontspec
加载拉丁现代字体作为默认字体,但手动指定它们应该可以工作;但是,我收到以下错误:
The font "LatinModernRoman" cannot be found.
The font "LatinModernSans" cannot be found.
The font "LatinModernMono" cannot be found.
看来它们确实不在数据库中otfl-names.lua
。MiKTeX 目录中的所有其他字体的情况也一样。但是,位于我本地的字体没有问题TEXMF
:它们确实出现在数据库中,我可以轻松访问它们(嗯……不是完全可以!——请参阅我的第二个问题)。我尝试使用OSFONTDIR
环境变量,但没有成功。使用 XɘTeX,前面的示例可以正常工作(尽管本地的字体TEXMF
“不能通过字体名称加载,只能通过文件名加载”[来自fontspec
文档])。
我有第二个关于字体的问题,这次,是数据库中,otfl-names.lua
但由于其参数不常见,无法通过其全名直接访问subfamily
。这个问题在这里和这里。看来情况还是没什么改变,不是吗?
欢迎对这些问题作出任何澄清。
答案1
我终于找到了一个解决方案(在 Ulrike Fischer 的提示下):只需编辑(具有管理员权限):
C:\Program Files (x86)\MiKTeX 2.9\tex\luatex\lualibs\lualibs-dir.lua
然后将以下几行粘贴到过滤器(大约第 95 行)的“P(1)”之前
P("(") / "%%(" +
P(")") / "%%)" +
括号将被转义,因此可以找到“program files(x86)/miktex”文件夹中的字体。
答案2
您的示例在我两台装有 miktex 2.9 的 PC 上运行良好。
我想到的一些可能的区别:
- 我的路径中没有空格。
- 我有一个单用户安装。
- 至少有一台 PC 我使用的是 luaotfload 的不稳定版本
- 我有除您之外的其他字体:这会影响数据库的生成。
我认为您应该首先在命令行上运行mkluatexfontdb -vvv
以查看实际搜索了哪些目录以及是否存在问题。
答案3
Linux
如果您的新字体已经存在~/.fonts
但未被以下程序识别,则此方法有效mkluatexfontdb
:
OSFONTDIR=${HOME}/.fonts:/usr/share/fonts//:/usr/share/texmf/fonts// mkluatexfontdb --force --verbose=-1 -vvv
类似的东西也应该适用于 Windows......