讓 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,並將所有這些發送給套件的作者。

相關內容