Hallo allerseits,
ich habe ein Problem beim Definieren einer Funktion mit mehr als 3 Parametern (lilypond-Version 2.12.2).
Die Funktion sieht folgendermaßen aus:
#(define-markup-command (fourCards layout props letterOne letterTwo letterThree letterFour) (string? string? string? string?)
"Print a line of four cards."
(interpret-markup layout props
(markup
#:left-column (
#:line(
#:column (#:hcenter-in 40 (#:card letterOne))
#:hspace 1
#:column (#:hcenter-in 40 (#:card letterTwo))
#:hspace 1
#:column (#:hcenter-in 40 (#:card letterThree))
#:hspace 1
#:column (#:hcenter-in 40 (#:card letterFour)))))))
Die Methode #:card zeichnet eine Box mit dem angegebenen Buchstaben als Inhalt, d.h. mit der Methode fourCards
sollte eigentlich eine Zeile mit 4 Karten entstehen.
Aufruf:
\markup \fourCards #"A" #"B" #"C" #"D"
Der Aufruf ergibt den Fehler: "no parser tag defined for this markup signature"
und in der betreffenden Aufrufzeile entsteht die Meldung:
"syntax error, unexpected SCM_TOKEN
\markup \fourCards
#"A" #"B" #"C" #"D"
"
Jetzt könnte ich noch an falsche Syntax glauben.
Sowie ich aber den 4. Parameter weglasse und beispielsweise #:card letterFour mit #:card letterThree ersetze,
(und natürlich beim Aufruf nur bis zum "C" übergebe), habe ich (fast) genau das, was ich wollte:
eine Zeile mit 4 Karten, worin die ersten 3 Buchstaben angezeigt werden, der dritte dank meiner Ersetzung doppelt.
Gibt es etwa eine ungeschriebene Regel, die sagt: nicht mehr als 3 Parameter bei markups?
So einen Fehler habe ich bislang noch nie beobachtet - ich bin ziemlich ratlos...
Was ebenfalls nicht funktioniert, ist, den 4. Parameter nicht als string, sondern z.B. als Nummer zu übergeben
(und weiter zu ignorieren). Ich kann machen, was ich will: sowie ich den 4. Parameter hinzu nehme, erscheinen o.g. Fehlermeldungen.
Hat jemand schon mal so was Verrücktes gesehen?
-