Loading…
Loading…
Rule
Gradus GE-187 · cite this code — it is permanent. Rule id shared-stave-notehead-second-offset
When two voices sharing a staff sound pitches a second apart at the same onset, the noteheads must be offset left/right so they don't overlap or read as a single notehead with two stems. The offset is decided by momentary PITCH order, not by fixed voice role: the higher-sounding of the two notes shifts to the right (away from the shared stem column), the lower-sounding note keeps the normal (left) position. Because the JSX renderer's forced stem role is fixed to voice identity while pitch order can invert during a voice crossing (see voice-crossing-definition-and-tolerance), the side that shifts right can belong to EITHER the up-stem or the down-stem voice depending on the instant — it tracks pitch, not role.
Two voices' seconds-apart noteheads drawn at the exact same horizontal position, so they visually merge into one notehead with contradictory stems; or the offset applied on the wrong side (lower note pushed right instead of the higher one), which would read as backwards to anyone checking notehead order against pitch.
Gould, Behind Bars, and Read, Music Notation, ch. on combined parts, both describe the standard 'seconds' notehead-offset resolution for shared-stave writing, with the higher note conventionally displaced right of the lower; this is also VexFlow's and Dorico's built-in automatic behavior when voices are formatted together via a shared ModifierContext (VexFlow: `fmt.joinVoices`).
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-187 — Noteheads a step (second) apart on a shared stave must be horizontally offset — the HIGHER-PITCHED note of the pair moves right, the lower stays put, and Gradus verifies the grouping but not the side. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/shared-stave-notehead-second-offset
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/shared-stave-notehead-second-offset