LilyPond Internals Reference: 2.1.29 TabStaff

### 2.1.29 TabStaff

Context for generating tablature. It accepts only `TabVoice` contexts and handles the line spacing, the tablature clef etc. properly.

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, PianoPedalBracket, RestCollision, ScriptRow, SostenutoPedal, SostenutoPedalLineSpanner, StaffSpacing, StaffSymbol, SustainPedal, SustainPedalLineSpanner, TimeSignature, UnaCordaPedal, UnaCordaPedalLineSpanner and VerticalAxisGroup.

This context sets the following properties:

- Set grob-property `after-line-breaking` in RepeatTie to `repeat-tie::handle-tab-note-head`.
- Set grob-property `after-line-breaking` in Tie to `tie::handle-tab-note-head`.
- Set grob-property `avoid-note-head` in Stem to `#t`.
- Set grob-property `beam-thickness` in Beam to `0.32`.
- Set grob-property `beam-thickness` in StemTremolo to `0.32`.
- Set grob-property `beam-width` in StemTremolo to `stem-tremolo::calc-tab-width`.
- Set grob-property `bound-details.left` in Glissando to:

      '((attach-dir . 1) (padding . 0.3))

- Set grob-property `bound-details.right` in Glissando to:

      '((attach-dir . -1) (padding . 0.3))

- Set grob-property `details` in Stem to:

      '((lengths 0 0 0 0 0 0)
        (beamed-lengths 0 0 0)
        (beamed-minimum-free-lengths 0 0 0)
        (beamed-extreme-minimum-free-lengths 0 0)
        (stem-shorten 0 0))

- Set grob-property `extra-dy` in Glissando to `glissando::calc-tab-extra-dy`.
- Set grob-property `glyph-name` in TabNoteHead to `tab-note-head::calc-glyph-name`.
- Set grob-property `ignore-collision` in NoteColumn to `#t`.
- Set grob-property `length-fraction` in Beam to `0.62`.
- Set grob-property `length-fraction` in StemTremolo to `#<procedure #f (grob)>`.
- Set grob-property `no-stem-extend` in Stem to `#t`.
- Set grob-property `staff-space` in StaffSymbol to `1.5`.
- Set grob-property `stencil` in Arpeggio to `#f`.
- Set grob-property `stencil` in Beam to `#f`.
- Set grob-property `stencil` in Clef to `clef::print-modern-tab-if-set`.
- Set grob-property `stencil` in Dots to `#f`.
- Set grob-property `stencil` in DynamicTextSpanner to `#f`.
- Set grob-property `stencil` in DynamicText to `#f`.
- Set grob-property `stencil` in Flag to `#f`.
- Set grob-property `stencil` in Glissando to `glissando::draw-tab-glissando`.
- Set grob-property `stencil` in Hairpin to `#f`.
- Set grob-property `stencil` in LaissezVibrerTie to `#f`.
- Set grob-property `stencil` in MultiMeasureRestNumber to `#f`.
- Set grob-property `stencil` in MultiMeasureRestScript to `#f`.
- Set grob-property `stencil` in MultiMeasureRestText to `#f`.
- Set grob-property `stencil` in MultiMeasureRest to `#f`.
- Set grob-property `stencil` in PhrasingSlur to `#f`.
- Set grob-property `stencil` in RepeatTie to `#f`.
- Set grob-property `stencil` in Rest to `#f`.
- Set grob-property `stencil` in Script to `#f`.
- Set grob-property `stencil` in Slur to `slur::draw-tab-slur`.
- Set grob-property `stencil` in StemTremolo to `#f`.
- Set grob-property `stencil` in Stem to `#f`.
- Set grob-property `stencil` in TabNoteHead to `tab-note-head::whiteout-if-style-set`.
- Set grob-property `stencil` in TextScript to `#f`.
- Set grob-property `stencil` in TextSpanner to `#f`.
- Set grob-property `stencil` in Tie to `#f`.
- Set grob-property `stencil` in TimeSignature to `#f`.
- Set grob-property `stencil` in TupletBracket to `#f`.
- Set grob-property `stencil` in TupletNumber to `#f`.
- Set grob-property `style` in Flag to `'no-flag`.
- Set translator property `autoBeaming` to `#f`.
- Set translator property `clefGlyph` to `"clefs.tab"`.
- Set translator property `clefPosition` to `0`.
- Set translator property `createSpacing` to `#t`.
- Set translator property `handleNegativeFrets` to `'recalculate`.
- Set translator property `ignoreFiguredBassRest` to `#f`.
- Set translator property `instrumentName` to `'()`.
- Set translator property `localAlterations` to `'()`.
- Set translator property `ottavationMarkups` to:

      '((4 . "29")
        (3 . "22")
        (2 . "15")
        (1 . "8")
        (-1 . "8")
        (-2 . "15")
        (-3 . "22")
        (-4 . "29"))

- Set translator property `restrainOpenStrings` to `#f`.
- Set translator property `shortInstrumentName` to `'()`.

This is not a ‘Bottom’ context; search for such a one will commence after creating an implicit context of type TabVoice.

Context TabStaff can contain CueVoice, NullVoice and TabVoice.

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.

> `Merge_mmrest_numbers_engraver`

>   Engraver to merge multi-measure rest numbers in multiple voices.

>   This works by gathering all multi-measure rest numbers at a time step. If they all have the same text and there are at least two only the first one is retained and the others are hidden.

> `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.

> `Piano_pedal_engraver`

>   Engrave piano pedal symbols and brackets.

>   Music types accepted:

>   sostenuto-event, sustain-event and una-corda-event

>   Properties (read)

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

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

>   > `pedalSostenutoStrings` (list)

>   >   See `pedalSustainStrings`.

>   > `pedalSostenutoStyle` (symbol)

>   >   See `pedalSustainStyle`.

>   > `pedalSustainStrings` (list)

>   >   A list of strings to print for sustain-pedal. Format is `(up updown down)`, where each of the three is the string to print when this is done with the pedal.

>   > `pedalSustainStyle` (symbol)

>   >   A symbol that indicates how to print sustain pedals: `text`, `bracket` or `mixed` (both).

>   > `pedalUnaCordaStrings` (list)

>   >   See `pedalSustainStrings`.

>   > `pedalUnaCordaStyle` (symbol)

>   >   See `pedalSustainStyle`.

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

>   PianoPedalBracket, SostenutoPedal, SustainPedal and UnaCordaPedal.

> `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.

> `Tab_staff_symbol_engraver`

>   Create a tablature staff symbol, but look at `stringTunings` for the number of lines.

>   Properties (read)

>   > `stringTunings` (list)

>   >   The tablature strings tuning. It is a list of the pitches of each string (starting with the lowest numbered one).

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

>   StaffSymbol.

> `Time_signature_engraver`

>   Create a TimeSignature whenever `timeSignatureFraction` changes.

>   Music types accepted:

>   time-signature-event

>   Properties (read)

>   > `initialTimeSignatureVisibility` (vector)

>   >   break visibility for the initial time signature.

>   > `partialBusy` (boolean)

>   >   Signal that \partial acts at the current timestep.

>   > `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.22.2 (stable-branch).