Loading…
Loading…
Rule
Gradus GE-392 · cite this code — it is permanent. Rule id vs-accidental-cross-voice-collision
When two independent voices (not one chord) sound a note requiring an accidental at the same onset on a shared stave, both accidentals sit to the left of their respective noteheads at roughly the same x — exactly the same column-collision risk vs-accidental-chord-stagger solves for one chord, but ACROSS voices, where VexFlow's own per-voice ModifierContext does not automatically coordinate them the way `fmt.joinVoices()` coordinates noteheads (per vs-cross-voice-unison-collision).
Soprano and alto both carry a chromatic alteration at the same onset (e.g. soprano C#5, alto C#4 an octave+ apart in pitch but rendered at nearly the same x since they share a stave); their two accidental glyphs render in the same horizontal column because each was staggered only against its OWN chord, never checked against the other voice's accidental.
Gould, Behind Bars, ch. 'Accidentals'; Ross, The Art of Music Engraving on part-combining — the general principle that anything joined for notehead collision-avoidance must also be checked for its attached modifiers, since joining voices resolves notehead x-position but does not by itself guarantee two DIFFERENT voices' accidentals (each still owned by its own note's ModifierContext membership) clear each other.
This rule needs the notated content and the rendered result together — the score says what should happen, the page says whether it did.
Gradus GE-392 — Two voices sharing a stave must not stack their accidentals at the same onset without staggering. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/vs-accidental-cross-voice-collision
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/vs-accidental-cross-voice-collision