[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Contexts affected by \override and \overrideProperty
From: |
David Kastrup |
Subject: |
Re: Contexts affected by \override and \overrideProperty |
Date: |
Tue, 19 Feb 2019 12:27:58 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
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?
--
David Kastrup