Den mån 11 apr. 2022 kl 12:30 skrev Jean Abou Samra <[email protected]>:
>
>
> Le 11/04/2022 à 11:50, Henrik Frisk a écrit :
> > Hi,
> >
> > I have not worked with scheme and lilypond for some years. I realize
> > that this is more of a scheme question than Lilypond, but perhaps
> > someone knows how to do this. I can generate four notes with the
> > following:
> >
> > \version "2.18.0"
> > \score {
> > {
> > $ (make-sequential-music
> > (map (lambda (x)
> > (make-music 'NoteEvent
> > 'pitch
> > (ly:make-pitch 0 x)
> > 'duration
> > (ly:make-duration 2)))
> > (list 1 2 3 4)))
> > }
> > }
> >
> > However, if I would like to add a markup to each note to each note I
> > fail. I would have guessed something like this would do it but it
> > generates an (almost) empty staff:
> >
> > \version "2.18.0"
> > \score {
> > {
> > $(make-sequential-music
> > (map (lambda (x)
> > (make-music 'NoteEvent
> > 'pitch
> > (ly:make-pitch 0 x)
> > 'duration
> > (ly:make-duration 2))
> > (make-music 'MarkEvent
> > 'label
> > (markup
> > #:line
> > (#:override (cons (quote font-size) -3) "10"))))
> > (list 1)))
> > }
> > }
>
>
>
> A Scheme lambda returns the value of the last expression
> inside. If there are other expressions before, they are
> evaluated for their side effects, but the result is thrown
> away. You want to combine both music events in a single
> music expressions.
>
> \version "2.22.2"
>
> {
> $(make-sequential-music
> (map (lambda (x)
> (make-sequential-music
> (list
> (make-music 'NoteEvent
> 'pitch
> (ly:make-pitch 0 x)
> 'duration
> (ly:make-duration 2))
> (make-music 'MarkEvent
> 'label
> (markup
> #:line
> (#:override (cons (quote font-size) -3)
> "10"))))))
> (list 1 2 3 4)))
> }
>
Thanks Jean,
It was the (make-sequential-music) after the lambda expression that I had
missed, without it it doesn't help to combine the two music events in one
list.
Very helpful!
/h