让 lilyglyphs 在 LuaTeX 中工作

让 lilyglyphs 在 LuaTeX 中工作

包裹lilyglyphs提供了一组宏,可轻松将 Lilypond 字体合并到 XeLaTeX 文件中。该软件包现已可用这里。我正在使用 TeXLive 2013。

通过以下 MWE,它可以与 XeLaTeX 一起正常运行:

\documentclass{memoir}
\usepackage{fontspec}
\usepackage{lilyglyphs}
\begin{document}
\lilyTimeC
\end{document}

使用 LuaLaTeX 运行它会导致以下错误:

! Undefined control sequence. \lilyGetGlyph #1^^@-\XeTeXglyph
\XeTeXglyphindex "#1"

我追溯到core/genericAccess.inp包含以下行的文件:

\newcommand*{\lilyGetGlyph}[1]{\XeTeXglyph\XeTeXglyphindex"#1" }

好的,这是 XeTeX 专用命令。我需要 LuaTeX 版本才能让这个命令与 LuaLaTeX 配合使用。我发现这个答案这表明:

\def\lilyGetGlyph#1{\directlua{fonts.otf.char("#1")}}

但是当我在 MWE 上运行 LuaLaTeX 时出现以下错误:

! LuaTeX error [string "\directlua "]:1: attempt to index field 'otf' (a nil value)
stack traceback:
[string "\directlua "]:1: in main chunk.
\lilyGetGlyph ...\directlua {fonts.otf.char("#1")}

我不知道这意味着什么,但我也不理解我尝试修复的语法(我只是不断输入文字和符号,希望能够起到作用)。

因此,我正在寻找 XeLaTeX 代码的 LuaTeX 版本,以便该包能够lilyglyphs与 LuaLaTeX 配合使用。当然,前提是这是解决此问题的正确方法。

答案1

好吧,显然\directlua{fonts.otf.charLuaTeX 不再支持这个答案。幸运的是他们(@phg)也提供了解决方案:

\usepackage{luaotfload,luacode}
\begin{luacode}
documentdata = documentdata or { }

local stringformat = string.format
local texsprint = tex.sprint
local slot_of_name = luaotfload.aux.slot_of_name

documentdata.fontchar = function (chr)
local chr = slot_of_name(font.current(), chr, false)
if chr and type(chr) == "number" then
texsprint
(stringformat ([[\char"%X"]], chr))
end
end
\end{luacode}
\def\lilyGetGlyph#1{\directlua{documentdata.fontchar "#1"}}

我将其添加到core/genericAccess.inp 文件中,现在一切都正常了。我在原始代码中添加了一些测试来检查 LuaTeX 与 XeTeX,并将所有这些发送给包的作者。

相关内容