Hacer que los lirios funcionen en LuaTeX

Hacer que los lirios funcionen en LuaTeX

El paquete lilyglyphsproporciona un conjunto de macros para incorporar fácilmente fuentes Lilypond en archivos XeLaTeX. Ese paquete esta disponibleaquí. Estoy usando TeXLive 2013.

Con el siguiente MWE funciona como se esperaba con XeLaTeX:

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

Ejecutarlo con LuaLaTeX produce el siguiente error:

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

Rastreé esto hasta el core/genericAccess.inparchivo que contiene la siguiente línea:

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

Bien, ese es un comando específico de XeTeX. Necesito la versión de LuaTeX para que esto funcione con LuaLaTeX. encontréesta respuestalo que sugiere algo como esto:

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

Pero cuando ejecuto LuaLaTeX en MWE aparece el siguiente error:

! 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")}

No tengo idea de lo que eso significa, pero tampoco entiendo la sintaxis de mi intento de solución (sigo ingresando palabras y símbolos con la esperanza de que algo funcione).

Entonces, lo que estoy buscando es la versión LuaTeX de ese fragmento de código XeLaTeX que permitirá que el paquete lilyglyphsfuncione con LuaLaTeX. Suponiendo, por supuesto, que esa sea la forma correcta de solucionar este problema.

Respuesta1

Bien, aparentemente \directlua{fonts.otf.charya no es compatible con LuaTeX segúnesta respuesta. Afortunadamente, ellos (@phg) también proporcionaron una solución:

\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"}}

Lo cual agregué al core/genericAccess.inp archivo y ahora todo funciona como debería. Agregué algunas pruebas para verificar LuaTeX vs. XeTeX al código original y enviaré todo esto al autor del paquete.

información relacionada