\concat und (begin)

Begonnen von ingmar, Sonntag, 25. August 2019, 10:39

« vorheriges - nächstes »

ingmar

Hallo Freunde,


in der Kombination von \markup \concat und einem scheme-Abschnitt mit begin stoße ich auf Schwierigkeiten. Innerhalb dieses begin-Statements werden die verschiedeneren \markup-Anweisungen offenbar nicht zu LilyPond durchgereicht:

\version "2.19.83"
\markup \concat {
#(begin
#{ \markup "ja..." #}
#{ \markup " wirklich!" #}
)
}


Ich würde erwarten, dass der Text "ja... wirklich!" ausgedruckt wird. Tatsächlich scheint das zeit \markup das erste auszulöschen.

Was kann ich tun? : - )


Danke, Gruß,
--ingmar

ingmar

...es geht noch etwas seltsamer:
\version "2.19.83"
\markup \concat {
\markup "a"
#(begin
#{ \markup "b" #}
#{ \markup "c" #}
)
\markup "d"
\markup "e"
}


Hier werden die Statements in begin gar nicht eher beachtet.

Ist vielleicht \concat buggy?

--ingmar

Malte

Hallo ingmar,

das ist kein Fehler von LilyPond, sondern falsche Erwartungen an begin ;)

begin ist dafür da, mehrere Ausdrücke nacheinander auszuwerten, wie jede andere Funktion auch gibt sie aber nur einen Wert zurück, nämlich den Wert des letzten Ausdrucks. Dein zweites Beispiel scheint nicht einmal den zurückzugeben. Allerdings hast du \markup da auch falsch verwendet: Es müßte "a" heißen statt \markup "a", gleiches für die anderen Zeilen. Wenn du das korrigierst, wird ,,acde" ausgegeben.

Statt begin solltest du list verwenden. Damit gibt es immer noch nur einen Rückgabewert, aber der ist eine Liste von markups. \concat scheint damit klarzukommen, es gibt aber Situationen, wo LilyPond die Elemente der Liste einzeln verwenden muß; dafür heißt es dann #@ statt #:\version "2.19.83"

{
  #@(list       ; #(list reicht hier nicht
    #{ { c' } #}
    #{ { d' } #})
}