lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Contexts affected by \override and \overrideProperty


From: Urs Liska
Subject: Re: Contexts affected by \override and \overrideProperty
Date: Tue, 19 Feb 2019 12:50:00 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0


Am 19.02.19 um 12:27 schrieb David Kastrup:
Urs Liska <address@hidden> writes:

Am 18.02.19 um 17:30 schrieb David Kastrup:
Urs Liska <address@hidden> writes:

Can someone explain to me why \overrideProperty Staff.BarLine.color
#red colors the barlines in *all* staves while \override
Staff.BarLine.color = #red only affects the current Staff context?

I have just re-read
http://lilypond.org/doc/v2.19/Documentation/notation/set-versus-override
and am scratching my head. I do claim to have some experience by now
but this page isn't actually really helpful:

     "The commands ... |\overrideProperty| change grob properties by
     bypassing all context properties completely and, instead, catch
     grobs as they are being created, setting properties on them ... for
     a specific override."

This doesn't give a clue when \overrideProperty should (or must) be
used instead of \override or what the difference in behaviour actually
is.

\overrideProperty is also present on
http://lilypond.org/doc/v2.19/Documentation/notation/available-music-functions#index-overrideProperty-1

     |overrideProperty| [music] - grob-property-path (list of indexes or
     symbols) value (any type)
         Set the grob property specified by grob-property-path to value.
         grob-property-path is a symbol list of the form
         |Context.GrobName.property| or |GrobName.property|, possibly
         with subproperties given as well.

         As opposed to |\override| which overrides the context-dependent
         defaults with which a grob is created, this command uses
         |Output_property_engraver| at the grob acknowledge stage. This
         may be necessary for overriding values set after the initial
         grob creation.

This gives an indication for why it may in some cases be necessary to
use \overrideProperty but it doesn't explain why it seems to affect
objects in all contexts instead of just the one where it is used.
Because the respective engraver is only active at Score level and
overrides the properties in _all_ contexts of the given type.

So this means that if I'm in the situation where I'm forced to use
\overrideProperty this property will always be overridden on the Score
context?
No, just in all Staff contexts (if Staff is what you specified).  The
Score context property will remain unchanged.

This does not sound overly useful, does it?


It *does* sound useful, just not for the problem at hand. I'm dealing with annotating music, and I would often have loved to have the possibility to "clone" one annotation through all related contexst (e.g. the given example of a barline. If I annotate that the source used a double barline that I corrected to a single one I will often want to have it visible on all staves.) This is currently the behaviour for the non-rhythmic music events but not for others.

Knowing this it seems I have to find a way to avoide using \overrideProperty somewhere in my engraver, which seems somewhat daunting at this point. OTOH it may open up a way to *selectively* use this behaviour for *all* music types.

Urs






reply via email to

[Prev in Thread] Current Thread [Next in Thread]