
Das Paket lilyglyphs
enthält eine Reihe von Makros, mit denen sich Lilypond-Schriftarten problemlos in XeLaTeX-Dateien integrieren lassen. Das Paket ist verfügbarHier. Ich verwende TeXLive 2013.
Mit folgendem MWE funktioniert es wie erwartet mit XeLaTeX:
\documentclass{memoir}
\usepackage{fontspec}
\usepackage{lilyglyphs}
\begin{document}
\lilyTimeC
\end{document}
Die Ausführung mit LuaLaTeX führt zu folgendem Fehler:
! Undefined control sequence. \lilyGetGlyph #1^^@-\XeTeXglyph
\XeTeXglyphindex "#1"
Ich habe dies auf die Datei zurückgeführt, core/genericAccess.inp
die die folgende Zeile enthält:
\newcommand*{\lilyGetGlyph}[1]{\XeTeXglyph\XeTeXglyphindex"#1" }
OK, das ist ein XeTeX-spezifischer Befehl. Ich brauche die LuaTeX-Version, damit das mit LuaLaTeX funktioniert. Ich fanddiese Antwortwas in etwa Folgendes suggeriert:
\def\lilyGetGlyph#1{\directlua{fonts.otf.char("#1")}}
Aber wenn ich LuaLaTeX auf dem MWE ausführe, erhalte ich die folgende Fehlermeldung:
! 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")}
Ich habe keine Ahnung, was das bedeutet, aber ich verstehe auch nicht die Syntax meines Lösungsversuchs (ich gebe einfach immer wieder Wörter und Symbole ein und hoffe, dass etwas funktioniert).
Ich suche also nach der LuaTeX-Version dieses XeLaTeX-Codeteils, die es dem Paket ermöglicht, lilyglyphs
mit LuaLaTeX zu arbeiten. Vorausgesetzt natürlich, das ist die richtige Art, das Problem zu beheben.
Antwort1
OK, also anscheinend \directlua{fonts.otf.char
wird das in LuaTeX nicht mehr unterstützt gemäßdiese Antwort. Glücklicherweise haben sie (@phg) auch eine Lösung bereitgestellt:
\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"}}
Das habe ich der core/genericAccess.inp
Datei hinzugefügt und jetzt funktioniert alles wie es soll. Ich habe dem Originalcode einige Tests hinzugefügt, um zu prüfen, ob LuaTeX mit XeTeX vergleicht und werde das alles an den Autor des Pakets senden.