Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Sonntag, 25. August 2019, 10:39

Titel: \concat und (begin)
Beitrag von: ingmar am Sonntag, 25. August 2019, 10:39
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
Titel: re: \concat und (begin)
Beitrag von: ingmar am Sonntag, 25. August 2019, 11:12
...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
Titel: Antw:\concat und (begin)
Beitrag von: Malte am Sonntag, 25. August 2019, 22:46
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' } #})
}