Hey all, I’ve found weird behaviour with the completion heads engraver wrt. to forced accidentals:
%%%
\new Voice \with {
\remove Note_heads_engraver
\consists Completion_heads_engraver
} { cis''!1*3 }
%%%
What is happening here is that forced/cautionary accidentals work by setting an
event/grob
property (for which then the accidental engraver checks).
But the Competion heads engraver creates all note heads from copies of the same
event, which
means that indeed the above would be equivalent to
%%%
{ cis''!1~ cis''!1~ cis''!1 }
%%%
This I think is almost never what we’d actually want to see. Since I currently
use the Completion
heads engraver for a project I wrote a patch which simply sets the
forced-accidental/cautionary
properties to #f after creating a note head, meaning the properties would be
true at most until
the first note head.
This is probably not a good fix, but I don’t understand the code well enough to
quickly come up
with a better solution for now.
Leaving this here for discussion
1. Surely this is to be seen as a bug?
2. What would be a good fix? Potentially it would make sense to have an
Accidental event
attached to the note head or something?
*But even then, the problem does not appear for articulations and stuff like
this*
%%%
\new Voice \with {
\remove Note_heads_engraver
\consists Completion_heads_engraver
} { <cis''!>1*3-2 }
%%%
only because the script engraver looks for articulatons attached to note events
(that are not
handed during iteration) and then removed from the original event (which is
also not really that
much of a clean thing). In fact we see the same problem say here:
%%%
\new Voice \with {
\remove Note_heads_engraver
\consists Completion_heads_engraver
} { <cis''!-2>1*3 }
%%%
Not sure what’s the best thing to do here ...
Best regards,
Tina
signature.asc
Description: This is a digitally signed message part.
