Hi, wie kann ich einer Variablen in diesem Fall einen Wert zuordnen? Statt
transposeTo = bes,
\transpose c \transposeTo { f' }
würde ich gerne
#(if (not (defined? 'transposeTo)) (define transposeTo bes))
\transpose c \transposeTo { f' }
verwenden. Die Variable soll nur initialisiert werden, wenn es sie noch nicht. Gibt es irgendwo eine Beschreibung zu diesen Datentypen? Konkret suche ich noch die Syntax für boolean:
#(if (not (defined? 'headerBreakbefore)) (define headerBreakbefore ##t))
\header {
breakbefore = \headerBreakbefore
}
Das funktioniert nämlich leider auch nicht.
Hallo,
Du schmeißt LilyPond-Syntax und scheme (genauer: guile) durcheinander.
Das geht natürlich, aber man muß schon korrekt anzeigen wo man sein möchte.
Zum ersten Beispiel (pitch):
bes ist ein Notenname in lily-syntax, in guile ist er nicht definiert.
Am einfachsten kann man das ans Laufen kriegen, indem man lily-syntax in guile mittels #{ #} aufruft:
#(if (not (defined? 'transposeTo)) (define transposeTo #{ bes #}))
\transpose c \transposeTo { f' }
Zum zweiten Beispiel:
##t ist quasi das lily-boolean für true.
#t ist das guile-boolean für true.
Sobald der Lilyparser ein #-Zeichen sieht schickt er was folgt zum guile-interpreter.
Ich schrieb quasi, denn LilyPond kriegt ##t gar nicht zu sehen, was nachdem ersten # kommt ist guile.
Wegen dem rot markierten #-Zeichen bist Du also in guile, dann ist das grün markierte aber in der falschen "Sprache".
#(if (not (defined? 'headerBreakbefore)) (define headerBreakbefore ##t))
In guile ist ##t nicht definiert!
Also entweder #{ ##t #} (aber warum der Umstand) oder gleich #t.
Führt zu:
#(if (not (defined? 'headerBreakbefore)) (define headerBreakbefore #t))
\header {
title = "This is my Title"
subtitle = "This is my Subtitle"
copyright = "This is the bottom of the first page"
}
\score {
\repeat unfold 4 { e'' e'' e'' e'' }
\header {
piece = "This is the Music"
breakbefore = \headerBreakbefore
}
}
Gruß,
Harm
Vielen Dank Harm! Konnte es umsetzen. Und diesen konkreten Fall habe ich auch begriffen, was natürlich nicht heisst, dass ich das nächste mal wieder über dasselbe stolpere...