Thanks for that, Andrew. Your suggestion and my own continued thinking made me realize that scoping and evaluation order were the challenges I was facing.
Scoping is tricky because I'm outside the usual scopes--Score, Staff and Voice. But I am in a book (or bookpart) and so can set a property in the relevant paper block. As for evaluation order, since I want to use the property in a markup function and also be able to set different property values at different points in the file, I can write a markup function for setting those values. Neither of these solutions are super-elegant, but both work so I include illustrations below. In both cases, the property is named "xyzzy" and is first set to 1, then to 2, with a markup function named "what-is-xyzzy" illustrating that the value is as intended. ==== Solution 1 ==== \version "2.19.81" #(define-markup-command (what-is-xyzzy layout props) () (display (ly:output-def-lookup layout 'xyzzy)) (newline) (interpret-markup layout props #{\markup {} #})) \book { \bookpart { \paper { xyzzy = 1 } \markup \what-is-xyzzy } \bookpart { \paper { xyzzy = 2 } \markup \what-is-xyzzy } } ==== Solution 2 ==== \version "2.19.81" #(define xyzzy 0) #(define-markup-command (set-xyzzy layout props value) (integer?) (set! xyzzy value) (interpret-markup layout props #{\markup {} #})) #(define-markup-command (what-is-xyzzy layout props) () (display xyzzy) (newline) (interpret-markup layout props #{\markup {} #})) \markup \set-xyzzy #1 \markup \what-is-xyzzy \markup \set-xyzzy #2 \markup \what-is-xyzzy ==== Regards, Emilio -- Sent from: http://lilypond.1069038.n5.nabble.com/User-f3.html _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user