Заставляем лилиглифы работать в LuaTeX

Заставляем лилиглифы работать в 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")}}

Но когда я запускаю LuaLaTeX на MWE, я получаю следующую ошибку:

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

Я понятия не имею, что это значит, но я также не понимаю синтаксис моей попытки исправить ситуацию (я просто продолжаю вводить слова и символы, надеясь, что что-то сработает).

Так что я ищу версию LuaTeX этого куска кода XeLaTeX, который позволит пакету lilyglyphsработать с LuaLaTeX. Предполагая, конечно, что это правильный способ исправить это.

решение1

Хорошо, судя по всему, \directlua{fonts.otf.charбольше не поддерживается в LuaTeXэтот ответ. К счастью, они (@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 в исходный код и отправлю все это автору пакета.

Связанный контент