Wert von Scheme nach LilyPond - wie? [GELÖST]

Begonnen von ingmar, Dienstag, 26. Mai 2020, 13:25

« vorheriges - nächstes »

ingmar

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

Arnold

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

Rudi Guggt

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

ingmar

#3
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

harm6

Hallo ingmar,


vertical-space = 
#(define-scheme-function (value) (number?)
#{ \markup \vspace #value #})


sollte klappen.


Gruß,
  Harm

ingmar

upps, ach ja...

Hm, in scheme verhedder ich mich aber jedesmal!

Danke,
--i