Also gotta say that this is most likely not a good thing to do. Changing global scope variables like that can lead to confusing behaviour. Maybe if you can elaborate on what you want to achieve we might find a more ideomatic way to get there.
Am Mittwoch, 17. Mai 2023, 22:24:54 CEST schrieb Valentin Petzel: > Hello David, > > there is some confusing going on here about how certain things are > evaluated. When you do > > { ... something ... } > > this is evaluated pretty much as it is parsed, returning some music object. > So > > \keepWithTag #'textI \tag #'textII { #(define l "B") } > > this will first evaluate the expression { #(define l "B") } which returns an > empty music object and as side effect sets a variable, then it will call > \tag upon that music, and then call \keepWithTag on that Music. > > What you intend to do is in fact not possible with \tag. What you want to do > is to delay the evaluation until the point where you have the information > to make this decision. This can be done using a music function: > > \version "2.24.1" > > #(define l '()) > > musicfn = > #(define-music-function (tag) (symbol?) > #{ > #(if (equal? tag 'textI) (set! l "A")) > #(if (equal? tag 'textII) (set! l "B")) > c''1^\markup\l > #(if (equal? tag 'textI) (set! l "C")) > #(if (equal? tag 'textII) (set! l "D")) > c''1^\markup\l > #}) > > \musicfn textI > \musicfn textII > > Note that here it is necessary to first create the global binding using > #(define ...) and then use (set! ...) to change that binding. > > Cheers, > Valentin > > Am Mittwoch, 17. Mai 2023, 21:58:49 CEST schrieb dfro: > > I want to define and change variables mid-stream in a music expression, > > while also using tags. Below is an example of what I am trying; but, it > > does not work. > > > > > > \version "2.24.1" > > > > \keepWithTag #'textI > > %\keepWithTag #'textII > > > > > > { > > > > \tag #'textI { #(define l "A") } > > \tag #'textII { #(define l "B") } > > c''1 ^\markup \l > > \tag #'textI { #(define l "C") } > > \tag #'textII { #(define l "D") } > > c''1 ^\markup \l > > > > } > > > > > > The tags are not keeping lilypond from skipping the define's that are in > > \tag #'textII. Is there a way to make this work? > > > > Is there a way to define variables using lilypond syntax inside a music > > expression? > > > > > > Peace, > > > > David
signature.asc
Description: This is a digitally signed message part.