Loading…
Loading…
Rule
Gradus GE-145 · cite this code — it is permanent. Rule id spacing-minimum-notehead-floor
No note, however short, may be crushed below the space its notehead, stem, and immediate neighbor-clearance require — there is a hard floor beneath which noteheads visually collide. Ross and Gould both treat this as the innermost constraint the proportional curve sits on top of; SMuFL's `engravingDefaults` metadata encodes a font's minimum glyph advance widths at a given staff size, which is the authoritative source for this floor.
`MIN_NOTE_SPACE = 14` VF units (line 41) and `densityBeatW = MIN_NOTE_SPACE / Math.max(minDurBeats, 0.125)` (line 804) correctly implement the floor — but `densityCeiling = barsPerSystem ? densityBeatW : Math.min(densityBeatW, BEAT_W_MAX)` (line 827) caps that floor at BEAT_W_MAX=32 for any UNWRAPPED block (no `barsPerSystem` set). A block with a sixteenth note and no `barsPerSystem` gets `beatW` capped at 32 even though `densityBeatW` for a sixteenth is `14/0.25 = 56` — the code's own comment (lines 799-803) admits this is a deliberate compromise made to avoid widening 242 existing blocks: a known, accepted violation of the minimum-space rule in the common (unwrapped) case.
Ross, The Art of Music Engraving (minimum spacing unit beneath which notation collides); SMuFL `engravingDefaults` spec (per-glyph advance widths at a font's design size set the hard floor); Gradus's own code already encodes this insight explicitly as `MIN_NOTE_SPACE`.
This rule can be decided from pitches, durations and voices — no layout required. A validator can check it before anything is drawn.
Gradus GE-145 — Every notehead needs a minimum absolute width regardless of duration. Gradus Engraving Rulebook v1.0. https://gradusmusic.com/engraving/rule/spacing-minimum-notehead-floor
Rulebook v1.0 · text licensed CC-BY-4.0 · machine-readable at /api/v1/engraving/rules/spacing-minimum-notehead-floor