So bringen Sie Lilyglyphs in LuaTeX zum Laufen

So bringen Sie Lilyglyphs in LuaTeX zum Laufen

Das Paket lilyglyphsenthä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.inpdie 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, lilyglyphsmit LuaLaTeX zu arbeiten. Vorausgesetzt natürlich, das ist die richtige Art, das Problem zu beheben.

Antwort1

OK, also anscheinend \directlua{fonts.otf.charwird 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.

verwandte Informationen