Hi,

I'm adding back the list in CC. Please always keep it so that everyone can 
participate.


Le dimanche 07 mai 2023 à 10:45 -0400, dfro a écrit :
>  
> Jean,
>  
> Thank you, for the fast reply and the clear explanation! Perhaps, this 
> insight could be put in the Learning Manual, 2.4.1 Organizing pieces with 
> variables; or, somewhere else on using Scheme in
> Lilypond.
>  
> If I may also ask about the last example in that section of the manual:
>  
> 
>  
> <code start>
>  
> \version "2.24.1"
> 
> myWidth = 60      % a number to pass to a \paper variable
>                   % (the unit is millimeter)
> myName = "Wendy"  % a string to pass to a markup
> aFivePaper = \paper { #(set-paper-size "a5") }
> 
> \paper {
>   \aFivePaper
>   line-width = \myWidth
> }
> 
> {
>   c4^\myName
> }
>  
> <code end>
>  
> 
>  
> Why can the # symbol be left off of the myWidth variable and other \paper 
> block variables,



Only \markup mode is special. In normal mode, a number is interpreted as a 
number. In markup mode, a number is not interpreted specially so that \markup { 
42 is the answer } works.



> and why must the aFivePaper variable be enclosed within '\paper { ... }'?


Unlike TeX macros if you are used to that, LilyPond variables don't just 
"insert something in the input" at the point they are used. A variable is  
variable in the true programming sense. It is
associated with a value (which has a type). In this case, it does not work to do

aFivePaper = #(set-paper-size "a5")

because that calls set-paper-size immediately, not at the point where the 
variable is used, but at the point it is defined. This does nothing since 
set-paper-size doesn't have an effect outside of a
\paper block. And since set-paper-size doesn't return a meaningful value, which 
in Guile means that it returns a dummy value called “*unspecified*”, your 
variable aFivePaper just ends up containing
this dummy value.

With \paper, the variable contains a paper block, and LilyPond will merge it 
with the outer paper block if you reference the variable inside such a block.

Best,

Jean

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to