luaotfload 找不到字体

luaotfload 找不到字体

我在 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 上运行良好。

我想到的一些可能的区别:

  1. 我的路径中没有空格。
  2. 我有一个单用户安装。
  3. 至少有一台 PC 我使用的是 luaotfload 的不稳定版本
  4. 我有除您之外的其他字体:这会影响数据库的生成。

我认为您应该首先在命令行上运行mkluatexfontdb -vvv以查看实际搜索了哪些目录以及是否存在问题。

答案3

Linux如果您的新字体已经存在~/.fonts但未被以下程序识别,则此方法有效mkluatexfontdb

 OSFONTDIR=${HOME}/.fonts:/usr/share/fonts//:/usr/share/texmf/fonts// mkluatexfontdb --force --verbose=-1 -vvv

类似的东西也应该适用于 Windows......

相关内容