使用 lualatex 在 TEXMF 树中使用 otf 文件

使用 lualatex 在 TEXMF 树中使用 otf 文件

我正在尝试使用 TEXMF 树中的 otf 文件,但却使用了另一个同名文件。

我从本地安装的 TexLive 2019 在此文件上运行 lualatex:

\documentclass{article}
\usepackage{fontspec}

\setmainfont [
  ItalicFont = LinLibertine_RI.otf,
  BoldFont = LinLibertine_RB.otf,
  ]{LinLibertine_R.otf}

\begin{document}
foo
\end{document}

并得到输出

This is LuaTeX, Version 1.10.0 (TeX Live 2019) 
 restricted system commands enabled.
(./whichfont.tex
LaTeX2e <2018-12-01>

luaotfload | main : initialization completed in 0.076 seconds
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2019/texmf-dist/tex/latex/fontspec/fontspec.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/expl3-code.tex)
(/usr/local/texlive/2019/texmf-dist/tex/latex/l3kernel/l3pdfmode.def)))
(/usr/local/texlive/2019/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2019/texmf-dist/tex/latex/base/tuenc.def))
(/usr/local/texlive/2019/texmf-dist/tex/latex/fontspec/fontspec.cfg)))
No file whichfont.aux.
[1{/usr/local/texlive/2019/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./whichfont.aux))
 410 words of node memory still in use:
   3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 5 attribute, 48 glue_spec
, 5 attribute_list, 1 write nodes
   avail lists: 2:15,3:4,4:1,5:22,6:1,7:16,9:7
</usr/share/texlive/texmf-dist/fonts/opentype/public/libertine/LinLibertine_R.o
tf>
Output written on whichfont.pdf (1 page, 2910 bytes).
Transcript written on whichfont.log.

如您所见,使用的是 Texlive 2019 安装中的文件,只是文件LinLibertine_R.otf来自其他位置。我想使用其中的版本/usr/local/texlive/2019/texmf-dist/fonts/opentype/public/libertine(或者更确切地说,是我在对文件进行 TeXing 时使用的 TEXMF 树中的版本)。

我认为这样做可以做到:

$ luaotfload-tool --cache=erase
$ luaotfload-tool --update --prefer-texmf

但即使在这些命令之后重复 lualatex,它仍使用相同的 otf 文件。我该怎么办?(Akpsewhich LinLibertine_R.otf符合/usr/local/texlive/2019/texmf-dist/fonts/opentype/public/libertine/LinLibertine_R.otf预期。)

我认为解决方法是使用显式路径,但实际上,在添加

Path = /usr/local/texlive/2019/texmf-dist/fonts/opentype/public/libertine/

它仍然选择另一个文件!(不过,我写的路径很重要,因为如果我给出另一个目录,它会抱怨找不到该文件!)

答案1

如果你只是想优先使用 texmf 目录中的字体而不是系统字体,你可以设置location_precedenceluaotfload 的“ ”:

\documentclass{article}
\usepackage{fontspec}
\directlua{
  fonts.names.set_location_precedence{
    "local", "texmf", "system" % The default is "local", "system", "texmf"
  }
}

\setmainfont [
  ItalicFont = LinLibertine_RI.otf,
  BoldFont = LinLibertine_RB.otf,
  ]{LinLibertine_R.otf}

\begin{document}
foo
\end{document}

这仍然使用 luaotfload 的数据库来查找字体。字体加载系统还允许加载字体以kpse:the_filname.otf明确请求使用 kpse,但这不会通过 fontspec 公开。

相关内容