### 2.1.5 DrumStaff

Handles typesetting for percussion.

This context also accepts commands for the following context(s):

Staff.

This context creates the following layout object(s):

BarLine, BassFigure, BassFigureAlignment, BassFigureAlignmentPositioning, BassFigureBracket, BassFigureContinuation, BassFigureLine, Clef, ClefModifier, CueClef, CueEndClef, DotColumn, FingeringColumn, InstrumentName, LedgerLineSpanner, NoteCollision, RestCollision, ScriptRow, SostenutoPedalLineSpanner, StaffSpacing, StaffSymbol, SustainPedalLineSpanner, TimeSignature, UnaCordaPedalLineSpanner and VerticalAxisGroup.

This context sets the following properties:

- Set grob-property `staff-padding` in Script to `0.75`.
- Set translator property `clefGlyph` to `"clefs.percussion"`.
- Set translator property `clefPosition` to `0`.
- Set translator property `createSpacing` to `#t`.
- Set translator property `ignoreFiguredBassRest` to `#f`.
- Set translator property `instrumentName` to `'()`.
- Set translator property `localKeySignature` to `'()`.
- Set translator property `shortInstrumentName` to `'()`.

Context DrumStaff can contain CueVoice, DrumVoice and NullVoice.

This context is built from the following engraver(s):

> `Axis_group_engraver`

>   Group all objects created in this context in a `VerticalAxisGroup` spanner.

>   Properties (read)

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   > `hasAxisGroup` (boolean)

>   >   True if the current context is contained in an axis group.

>   > `keepAliveInterfaces` (list)

>   >   A list of symbols, signifying grob interfaces that are worth keeping a staff with `remove-empty` set around for.

>   Properties (write)

>   > `hasAxisGroup` (boolean)

>   >   True if the current context is contained in an axis group.

>   This engraver creates the following layout object(s):

>   VerticalAxisGroup.

> `Bar_engraver`

>   Create barlines. This engraver is controlled through the `whichBar` property. If it has no bar line to create, it will forbid a linebreak at this point. This engraver is required to trigger the creation of clefs at the start of systems.

>   Properties (read)

>   > `whichBar` (string)

>   >   This property is read to determine what type of bar line to create.

>   >   Example:

>   >   >     \set Staff.whichBar = ".|:"

>   >   This will create a start-repeat bar in this staff only. Valid values are described in ‘`scm/bar-line.scm`’.

>   Properties (write)

>   > `forbidBreak` (boolean)

>   >   If set to `#t`, prevent a line break at this point.

>   This engraver creates the following layout object(s):

>   BarLine.

> `Clef_engraver`

>   Determine and set reference point for pitches.

>   Properties (read)

>   > `clefGlyph` (string)

>   >   Name of the symbol within the music font.

>   > `clefPosition` (number)

>   >   Where should the center of the clef symbol go, measured in half staff spaces from the center of the staff.

>   > `clefTransposition` (integer)

>   >   Add this much extra transposition. Values of 7 and -7 are common.

>   > `clefTranspositionStyle` (symbol)

>   >   Determines the way the ClefModifier grob is displayed. Possible values are ‘`default`’, ‘`parenthesized`’ and ‘`bracketed`’.

>   > `explicitClefVisibility` (vector)

>   >   ‘`break-visibility`’ function for clef changes.

>   > `forceClef` (boolean)

>   >   Show clef symbol, even if it has not changed. Only active for the first clef after the property is set, not for the full staff.

>   This engraver creates the following layout object(s):

>   Clef and ClefModifier.

> `Collision_engraver`

>   Collect `NoteColumns`, and as soon as there are two or more, put them in a `NoteCollision` object.

>   This engraver creates the following layout object(s):

>   NoteCollision.

> `Cue_clef_engraver`

>   Determine and set reference point for pitches in cued voices.

>   Properties (read)

>   > `clefTransposition` (integer)

>   >   Add this much extra transposition. Values of 7 and -7 are common.

>   > `cueClefGlyph` (string)

>   >   Name of the symbol within the music font.

>   > `cueClefPosition` (number)

>   >   Where should the center of the clef symbol go, measured in half staff spaces from the center of the staff.

>   > `cueClefTransposition` (integer)

>   >   Add this much extra transposition. Values of 7 and -7 are common.

>   > `cueClefTranspositionStyle` (symbol)

>   >   Determines the way the ClefModifier grob is displayed. Possible values are ‘`default`’, ‘`parenthesized`’ and ‘`bracketed`’.

>   > `explicitCueClefVisibility` (vector)

>   >   ‘`break-visibility`’ function for cue clef changes.

>   > `middleCCuePosition` (number)

>   >   The position of the middle C, as determined only by the clef of the cue notes. This can be calculated by looking at `cueClefPosition` and `cueClefGlyph`.

>   This engraver creates the following layout object(s):

>   ClefModifier, CueClef and CueEndClef.

> `Dot_column_engraver`

>   Engrave dots on dotted notes shifted to the right of the note. If omitted, then dots appear on top of the notes.

>   This engraver creates the following layout object(s):

>   DotColumn.

> `Figured_bass_engraver`

>   Make figured bass numbers.

>   Music types accepted:

>   bass-figure-event and rest-event

>   Properties (read)

>   > `figuredBassAlterationDirection` (direction)

>   >   Where to put alterations relative to the main figure.

>   > `figuredBassCenterContinuations` (boolean)

>   >   Whether to vertically center pairs of extender lines. This does not work with three or more lines.

>   > `figuredBassFormatter` (procedure)

>   >   A routine generating a markup for a bass figure.

>   > `ignoreFiguredBassRest` (boolean)

>   >   Don’t swallow rest events.

>   > `implicitBassFigures` (list)

>   >   A list of bass figures that are not printed as numbers, but only as extender lines.

>   > `useBassFigureExtenders` (boolean)

>   >   Whether to use extender lines for repeated bass figures.

>   This engraver creates the following layout object(s):

>   BassFigure, BassFigureAlignment, BassFigureBracket, BassFigureContinuation and BassFigureLine.

> `Figured_bass_position_engraver`

>   Position figured bass alignments over notes.

>   This engraver creates the following layout object(s):

>   BassFigureAlignmentPositioning.

> `Fingering_column_engraver`

>   Find potentially colliding scripts and put them into a `FingeringColumn` object; that will fix the collisions.

>   This engraver creates the following layout object(s):

>   FingeringColumn.

> `Font_size_engraver`

>   Put `fontSize` into `font-size` grob property.

>   Properties (read)

>   > `fontSize` (number)

>   >   The relative size of all grobs in a context.

> `Grob_pq_engraver`

>   Administrate when certain grobs (e.g., note heads) stop playing.

>   Properties (read)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . grob)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

>   Properties (write)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . grob)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

> `Instrument_name_engraver`

>   Create a system start text for instrument or vocal names.

>   Properties (read)

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   > `instrumentName` (markup)

>   >   The name to print left of a staff. The `instrumentName` property labels the staff in the first system, and the `shortInstrumentName` property labels following lines.

>   > `shortInstrumentName` (markup)

>   >   See `instrumentName`.

>   > `shortVocalName` (markup)

>   >   Name of a vocal line, short version.

>   > `vocalName` (markup)

>   >   Name of a vocal line.

>   This engraver creates the following layout object(s):

>   InstrumentName.

> `Ledger_line_engraver`

>   Create the spanner to draw ledger lines, and notices objects that need ledger lines.

>   This engraver creates the following layout object(s):

>   LedgerLineSpanner.

> `Output_property_engraver`

>   Apply a procedure to any grob acknowledged.

>   Music types accepted:

>   apply-output-event

> `Piano_pedal_align_engraver`

>   Align piano pedal symbols and brackets.

>   Properties (read)

>   > `currentCommandColumn` (graphical (layout) object)

>   >   Grob that is X-parent to all current breakable (clef, key signature, etc.) items.

>   This engraver creates the following layout object(s):

>   SostenutoPedalLineSpanner, SustainPedalLineSpanner and UnaCordaPedalLineSpanner.

> `Pure_from_neighbor_engraver`

>   Coordinates items that get their pure heights from their neighbors.

> `Rest_collision_engraver`

>   Handle collisions of rests.

>   Properties (read)

>   > `busyGrobs` (list)

>   >   A queue of `(end-moment . grob)` cons cells. This is for internal (C++) use only. This property contains the grobs which are still busy (e.g. note heads, spanners, etc.).

>   This engraver creates the following layout object(s):

>   RestCollision.

> `Script_row_engraver`

>   Determine order in horizontal side position elements.

>   This engraver creates the following layout object(s):

>   ScriptRow.

> `Separating_line_group_engraver`

>   Generate objects for computing spacing parameters.

>   Properties (read)

>   > `createSpacing` (boolean)

>   >   Create `StaffSpacing` objects? Should be set for staves.

>   Properties (write)

>   > `hasStaffSpacing` (boolean)

>   >   True if the current `CommandColumn` contains items that will affect spacing.

>   This engraver creates the following layout object(s):

>   StaffSpacing.

> `Staff_collecting_engraver`

>   Maintain the `stavesFound` variable.

>   Properties (read)

>   > `stavesFound` (list of grobs)

>   >   A list of all staff-symbols found.

>   Properties (write)

>   > `stavesFound` (list of grobs)

>   >   A list of all staff-symbols found.

> `Staff_symbol_engraver`

>   Create the constellation of five (default) staff lines.

>   Music types accepted:

>   staff-span-event

>   This engraver creates the following layout object(s):

>   StaffSymbol.

> `Time_signature_engraver`

>   Create a TimeSignature whenever `timeSignatureFraction` changes.

>   Properties (read)

>   > `implicitTimeSignatureVisibility` (vector)

>   >   break visibility for the default time signature.

>   > `timeSignatureFraction` (fraction, as pair)

>   >   A pair of numbers, signifying the time signature. For example, `'(4 . 4)` is a 4/4 time signature.

>   This engraver creates the following layout object(s):

>   TimeSignature.

#### Internals Reference v2.18.2 (稳定分支).