Fazendo líglifos funcionarem no LuaTeX

Fazendo líglifos funcionarem no LuaTeX

O pacote lilyglyphsfornece um conjunto de macros para incorporar facilmente fontes Lilypond em arquivos XeLaTeX. Esse pacote está disponívelaqui. Estou usando o TeXLive 2013.

Com o seguinte MWE funciona conforme esperado com o XeLaTeX:

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

Executá-lo com LuaLaTeX resulta no seguinte erro:

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

Rastreei isso até o core/genericAccess.inparquivo que contém a seguinte linha:

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

OK, esse é um comando específico do XeTeX. Eu preciso da versão LuaTeX para fazer isso funcionar com LuaLaTeX. eu encontreiesta respostaque sugere algo assim:

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

Mas quando executo LuaLaTeX no MWE recebo o seguinte erro:

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

Não tenho ideia do que isso significa, mas também não entendo a sintaxe da minha tentativa de correção (continuo inserindo palavras e símbolos esperando que algo funcione).

Então o que estou procurando é a versão LuaTeX daquele trecho de código XeLaTeX que permitirá que o pacote lilyglyphsfuncione com LuaLaTeX. Supondo, é claro, que essa seja a maneira correta de consertar isso.

Responder1

OK, então aparentemente \directlua{fonts.otf.charnão é mais suportado no LuaTeX de acordo comesta resposta. Felizmente eles (@phg) também forneceram uma solução:

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

Que adicionei ao core/genericAccess.inp arquivo e agora tudo funciona como deveria. Adicionei alguns testes para verificar LuaTeX vs. XeTeX ao código original e enviarei tudo isso para o autor do pacote.

informação relacionada