LuaTeX でリリグリフを動作させる

LuaTeX でリリグリフを動作させる

このパッケージは、lilyglyphsLilypondフォントを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特有のコマンドです。これをLuaLaTeXで動作させるにはLuaTeXバージョンが必要です。この答えこれは次のようなことを示唆しています:

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

それが何を意味するのか全く分かりませんが、私が試みた修正の構文も理解していません (何かが機能することを期待して、ただ単語と記号を入力し続けています)。

私が探しているのは、パッケージが LuaLaTeX で動作できるようにする、XeLaTeX コードの LuaTeX バージョンですlilyglyphs。もちろん、これがこの問題を解決する適切な方法であると仮定します。

答え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 を比較するテストをいくつか追加し、これをすべてパッケージの作成者に送信します。

関連情報