Hallo,
zuerst mal mein Minimalbeispiel:
\version "2.20.0"
vertical-space = #(define-scheme-function (value) (integer?) #{
\markup { \vspace #( $value ) } #})
\vertical-space #4
Frage: Wie genau muss ich bei der Ausgabe eines in scheme vorhandenen Werts nach LilyPond vorgehen? ich hab ziemlich viele Varianten probiert, bei jeder gibt es eine leicht abweichende Fehlermeldung... : - )
Hintergrund: Im Ernstfall will ich mit der Funktion zwischen zwei Scores ein wenig Platz schaffen können:
\score { \relative { \repeat unfold 20 { c'4 d e f g } } }
\vertical-space #4
\score { \relative { \repeat unfold 20 { c''4 bes a g } } }
Danke! : - )
--ingmar
Hallo ingmar,
Dein »verical-space« sieht doch nach einem Markup-Command aus, also würde ich auch »define-markup-command« anstelle »define-scheme-command« nutzen.
Übrigens, im Installationsverzeichnis in der Datei ...\scm\define-markup-commands.scm sind alle (oder die meisten) markup-Commands definiert - daraus kann man sich schon mal bedienen, um eigene Varianten zu erstellen.
Wenn es nur um eine Zahlenfestlegung geht, kannst Du diese sicher auch im Inline-Scheme definieren, und später im markup verwenden.
Ohne dieses Beispiel ausprobiert zu haben:
\version "2.20.0"
M = { \repeat unfold 64 c'1 }
#(define Zwischenraum 4) %%--> Scheme-Variable definiert
\score { \M }
\markup {
\null
\vspace #Zwischenraum %%--> Scheme-Variable abgerufen
\null
}
\score { \M }
Arnold
Hallo,
Ich glaube, es geht Ingmar nicht um die Wiederverwendung immer derselben Zahl für den Zwischenraum, sondern um die Wiederverwendung des Befehls mit jweils neuem Wert. Da hilft es nicht, den Wert einmal festzulegen, sondern quasi einen Wert an die Funktion zu schicken. Also als Pseudo-Code:
#(define function (Zwischenraum Wert){
\markup {
\null
\vspace #Wert %%--> unterschiedliche Werte einsetzbar
\null
}
}
und dann später:
\score { \M }
\Zwischenraum 2 %%--> Hier nur wenig Platz
\score { \M }
\Zwischenraum 12 %%--> Hier ganz viel Platz
\score { \M }
So verstehe ich Ingmar, hab aber selbst Probleme das hinzukriegen :(
mfg
Rudi
Danke, Rudi! : - )
Hier nochmal, auf Basis von Rudis Code:
\version "2.20.0"
Musik = { \repeat unfold 64 c'1 }
#(define function (Zwischenraum Wert) () () #{
\markup {
\null
\vspace #( $Wert ) %%--> hier steckt das Problem! Wie kommt LilyPond an das scheme-Argument ran?
\null
}
#})
\score { \Musik }
\Zwischenraum #2 %%--> Hier nur wenig Platz
\score { \Musik }
\Zwischenraum #12 %%--> Hier ganz viel Platz
\score { \Musik }
Ich glaube, das schon in der Vergangenheit mal irgendwo gelöst zu haben, finde es aber nicht. : - (
Danke,
--ingmar
Hallo ingmar,
vertical-space =
#(define-scheme-function (value) (number?)
#{ \markup \vspace #value #})
sollte klappen.
Gruß,
Harm
upps, ach ja...
Hm, in scheme verhedder ich mich aber jedesmal!
Danke,
--i