Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Dienstag, 26. Mai 2020, 13:25

Titel: Wert von Scheme nach LilyPond - wie? [GELÖST]
Beitrag von: ingmar am Dienstag, 26. Mai 2020, 13:25
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
Titel: Antw:Wert von Scheme nach LilyPond - wie?
Beitrag von: Arnold am Mittwoch, 27. Mai 2020, 08:49
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
Titel: Antw:Wert von Scheme nach LilyPond - wie?
Beitrag von: Rudi Guggt am Mittwoch, 27. Mai 2020, 09:43
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
Titel: re: Wert von Scheme nach LilyPond - wie?
Beitrag von: ingmar am Mittwoch, 27. Mai 2020, 09:45
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
Titel: Antw:Wert von Scheme nach LilyPond - wie?
Beitrag von: harm6 am Mittwoch, 27. Mai 2020, 10:31
Hallo ingmar,


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


sollte klappen.


Gruß,
  Harm
Titel: re: Wert von Scheme nach LilyPond - wie?
Beitrag von: ingmar am Mittwoch, 27. Mai 2020, 10:36
upps, ach ja...

Hm, in scheme verhedder ich mich aber jedesmal!

Danke,
--i