[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: \override multiple properties?
From: |
David Kastrup |
Subject: |
Re: \override multiple properties? |
Date: |
Sun, 02 Feb 2020 17:21:08 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
Aaron Hill <address@hidden> writes:
> On 2020-02-02 2:26 am, David Kastrup wrote:
>> Aaron Hill <address@hidden> writes:
>>
>>> Music functions certainly give you the most flexibility, although
>>> there are simple cases where you can use 2.19's \etc keyword as a
>>> shorthand to defining the function yourself:
>>> %%%%
>>> \version "2.19"
>>> stemColor = \override Stem.color = \etc
>>> { d'8 \stemColor #red e' f' \undo \stemColor ##f g' }
>>> %%%%
>>> Note the \undo command above is less ideal as one needs to provide
>>> a
>>> dummy argument to the function.
>> Why not \undo \stemColor #red here ? ##f makes no sense.
>
> I did not want to give the impression that the arguments *had* to
> match. One could just as easily say \undo \stemColor #blue and get
> the same outcome. \undo only seems to care about which properties are
> \overridden, not the specific values. So the argument to the music
> function in this case does not matter. My choice of "false" was
> purely arbitrary, but I guess it was too confusing.
>
> A scenario where the mismatch would make sense is using the function
> several times in a row:
>
> %%%%
> { d \stemColor #red e f \stemColor #blue g a
> \stemColor #green f c \undo \stemColor #'() d }
> %%%%
>
> This pattern reinforces that it is not required to \undo each
> application of the function.
That's just because you have not been using \temporary \stemColor here.
Non-\temporary overrides implicitly cancel the last existing override at
that level, so \undo \stemColor #green would be "correct" here. The
principal purpose of \undo is that it works even if you don't know the
details involved, so it seems self-defeating to use it in a manner
relying on knowing the details.
> If \undo \stemColor #'() proves to be undesirable, nothing stops a
> user just doing the \undo by hand with a manual \revert Stem.color or
> a suitably-defined \noStemColor.
Again, \undo is for those occasions where you are not really interested
in the details. It's always equivalent to something explicit, of course.
If you write
stemColor = \override Stem.color = \etc
\void \displayLilyMusic \undo \stemColor #red
you get the output
lilypond /tmp/baba.ly
GNU LilyPond 2.21.0
Processing `/tmp/baba.ly'
Parsing...
\revert Stem.color
And there is nothing wrong with that.
--
David Kastrup