
Пакет 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 в исходный код и отправлю все это автору пакета.