针对 Texlive 2014 进行编辑

针对 Texlive 2014 进行编辑

luaotfload 使用一个内部数据库,该数据库会随 更新mkluatexfontdb。因此它知道我电脑上安装的许多字体。我该如何查询这个数据库?例如

luatexfontdb --list-fonts-on-my-computer-that-are-in-your-database

答案1

您可以在编辑器中打开数据库。它名为 otfl-names.lua,应该位于 中的一个 texmf-trees 中\luatex-cache\generic\names

基于 otfl-names.lua 制作列表也不是很困难。例如

旧版本(Texlive 2013?)

\documentclass{article}
\usepackage{luacode,luaotfload}
\begin{document}
\begin{luacode}
myfonts=dofile(fonts.names.path.localdir..'/otfl-names.lua')

for i,v in ipairs(myfonts.mappings) do
 tex.print(-2, v.familyname)
 tex.print(', ')
 tex.print(-2, v.fontname)
 tex.print('\\par')
end

\end{luacode}

\end{document}

2013 年 5 月编辑:使用较新的 luaotfload(如 TL2013(预测试)中的 luaotfload),应该将 myfonts 行替换为以下行,因为数据库的名称已更改:

 myfonts=dofile(fonts.names.path.path)

针对 Texlive 2014 进行编辑

我在 TL 2014(2014 年 6 月)中再次尝试。现在名称文件位于 .luc 中,访问名称再次更改。我还添加了一些“如果存在代码”,以避免在字体的表条目不存在时出现错误:

\documentclass{article}
\usepackage{luacode}
\usepackage{luaotfload}
\begin{document}
\begin{luacode}
myfonts=dofile(fonts.names.path.index.luc)

tex.sprint(fonts.names.path.index.luc)

---[[
for i,v in ipairs(myfonts.mappings) do
 if v.familyname then
 tex.print('\\par')
 tex.print(-2, v.familyname)
 end
 if v.fontname then 
 tex.print(', ')
 tex.print(-2, v.fontname)
 end
 tex.print('\\par')
end
--]]

\end{luacode}

\end{document}

2015 年 7 月针对 TeXlive 2015 / MiKTeX 进行编辑

获取名称文件的代码必须再次调整。现在这个似乎可以工作了。

\documentclass{article}
\usepackage{luacode}
\usepackage{luaotfload}
\begin{document}
\begin{luacode}
myfonts=dofile(config.luaotfload.paths.index_path_luc)

tex.sprint(config.luaotfload.paths.index_path_luc)

---[[
for i,v in ipairs(myfonts.mappings) do
 if v.familyname then
 tex.print('\\par')
 tex.print(-2, v.familyname)
 end
 if v.fontname then
 tex.print(', ')
 tex.print(-2, v.fontname)
 end
 tex.print('\\par')
end
--]]

\end{luacode}

\end{document}

答案2

根据 Ulrike 的回答:

因为我不想每次需要字体列表时都创建一个 TeX 文档,所以这里有一个简单的脚本:

#!/usr/bin/env texlua

kpse.set_program_name("listluatexfonts")

cachefile  = kpse.expand_var("$TEXMFVAR")  .. "/luatex-cache/generic/names/otfl-names.lua"
fontlist = dofile(cachefile)
assert(fontlist,"Could not load font name database")

local tmp = {}

for _,font in ipairs(fontlist.mappings) do
  tmp[#tmp + 1] = font.fontname
end
table.sort(tmp)

for _,fontname in ipairs(tmp) do
  print(fontname)
end

调用它

./listluatexfonts

更新:

替换cachefileTexLive 2014的名称:

cachefile  = kpse.expand_var("$TEXMFVAR")  .. "/luatex-cache/generic/names/luaotfload-names.luc"

这个对我有用。

答案3

 luafindfont -n "*"

列出所有可由xelatex/使用lualatex而无需特殊路径设置的字体。-n 表示“无符号名称列”

相关内容