
このパッケージは、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特有のコマンドです。これを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.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 を比較するテストをいくつか追加し、これをすべてパッケージの作成者に送信します。