LilyPond Internals Reference: 3.1.60 KeySignature

### 3.1.60 KeySignature

KeySignature objects are created by: Key_engraver.

Standard settings:

> `avoid-slur` (symbol):

>   `'inside`

>   Method of handling slur collisions. Choices are `inside`, `outside`, `around`, and `ignore`. `inside` adjusts the slur if needed to keep the grob inside the slur. `outside` moves the grob vertically to the outside of the slur. `around` moves the grob vertically to the outside of the slur only if there is a collision. `ignore` does not move either. In grobs whose notational significance depends on vertical position (such as accidentals, clefs, etc.), `outside` and `around` behave like `ignore`.

> `break-align-anchor` (number):

>   `ly:break-aligned-interface::calc-extent-aligned-anchor`

>   Grobs aligned to this breakable item will have their X-offsets shifted by this number. In bar lines, for example, this is used to position grobs relative to the (visual) center of the bar line.

> `break-align-anchor-alignment` (number):

>   `1`

>   Read by `ly:break-aligned-interface::calc-extent-aligned-anchor` for aligning an anchor to a grob’s extent.

> `break-align-symbol` (symbol):

>   `'key-signature`

>   This key is used for aligning, ordering, and spacing breakable items. See break-alignment-interface.

> `break-visibility` (vector):

>       #(#f #f #t)

>   A vector of 3 booleans, `#(end-of-line unbroken begin-of-line)`. `#t` means visible, `#f` means killed.

> `extra-spacing-height` (pair of numbers):

>   `pure-from-neighbor-interface::extra-spacing-height-including-staff`

>   In the horizontal spacing problem, we increase the height of each item by this amount (by adding the ‘car’ to the bottom of the item and adding the ‘cdr’ to the top of the item). In order to make a grob infinitely high (to prevent the horizontal spacing problem from placing any other grobs above or below this grob), set this to `(-inf.0 . +inf.0)`.

> `extra-spacing-width` (pair of numbers):

>       '(0.0 . 1.0)

>   In the horizontal spacing problem, we pad each item by this amount (by adding the ‘car’ on the left side of the item and adding the ‘cdr’ on the right side of the item). In order to make a grob take up no horizontal space at all, set this to `(+inf.0 . -inf.0)`.

> `flat-positions` (list):

>       '(2 3 4 2 1 2 1)

>   Flats in key signatures are placed within the specified ranges of staff-positions. The general form is a list of pairs, with one pair for each type of clef, in order of the staff-position at which each clef places C: `(alto treble tenor soprano baritone mezzosoprano bass)`. If the list contains a single element it applies for all clefs. A single number in place of a pair sets accidentals within the octave ending at that staff-position.

> `glyph-name-alist` (list):

>       '((0 . "accidentals.natural")
>         (-1/2 . "accidentals.flat")
>         (1/2 . "accidentals.sharp")
>         (1 . "accidentals.doublesharp")
>         (-1 . "accidentals.flatflat")
>         (3/4
>          .
>          "accidentals.sharp.slashslash.stemstemstem")
>         (1/4 . "accidentals.sharp.slashslash.stem")
>         (-1/4 . "accidentals.mirroredflat")
>         (-3/4 . "accidentals.mirroredflat.flat"))

>   An alist of key-string pairs.

> `non-musical` (boolean):

>   `#t`

>   True if the grob belongs to a `NonMusicalPaperColumn`.

> `sharp-positions` (list):

>       '(4 5 4 2 3 2 3)

>   Sharps in key signatures are placed within the specified ranges of staff-positions. The general form is a list of pairs, with one pair for each type of clef, in order of the staff-position at which each clef places C: `(alto treble tenor soprano baritone mezzosoprano bass)`. If the list contains a single element it applies for all clefs. A single number in place of a pair sets accidentals within the octave ending at that staff-position.

> `space-alist` (list):

>       '((ambitus extra-space . 1.15)
>         (time-signature extra-space . 1.15)
>         (staff-bar extra-space . 1.1)
>         (cue-clef extra-space . 0.5)
>         (right-edge extra-space . 0.5)
>         (first-note fixed-space . 2.5))

>   An alist that specifies distances from this grob to other breakable items, using the format:

>   >     '((break-align-symbol . (spacing-style . space))
>   >       (break-align-symbol . (spacing-style . space))
>   >       ...)

>   Standard choices for `break-align-symbol` are listed in break-alignment-interface. Additionally, three special break-align symbols available to `space-alist` are:

>   > `first-note`

>   >   used when the grob is just left of the first note on a line

>   > `next-note`

>   >   used when the grob is just left of any other note; if not set, the value of `first-note` gets used

>   > `right-edge`

>   >   used when the grob is the last item on the line (only compatible with the `extra-space` spacing style)

>   Choices for `spacing-style` are:

>   > `extra-space`

>   >   Put this much space between the two grobs. The space is stretchable when paired with `first-note` or `next-note`; otherwise it is fixed.

>   > `minimum-space`

>   >   Put at least this much space between the left sides of both grobs, without allowing them to collide. The space is stretchable when paired with `first-note` or `next-note`; otherwise it is fixed. Not compatible with `right-edge`.

>   > `fixed-space`

>   >   Only compatible with `first-note` and `next-note`. Put this much fixed space between the grob and the note.

>   > `minimum-fixed-space`

>   >   Only compatible with `first-note` and `next-note`. Put at least this much fixed space between the left side of the grob and the left side of the note, without allowing them to collide.

>   > `semi-fixed-space`

>   >   Only compatible with `first-note` and `next-note`. Put this much space between the grob and the note, such that half of the space is fixed and half is stretchable.

>   Rules for this spacing are much more complicated than this. See [Wanske] page 126–134, [Ross] page 143–147.

> `stencil` (stencil):

>   `ly:key-signature-interface::print`

>   The symbol to print.

> `vertical-skylines` (pair of skylines):

>   `#<unpure-pure-container #<primitive-procedure ly:grob::vertical-skylines-from-stencil> >`

>   Two skylines, one above and one below this grob.

> `Y-extent` (pair of numbers):

>   `#<unpure-pure-container #<primitive-procedure ly:grob::stencil-height> >`

>   Extent (size) in the Y direction, measured in staff-space units, relative to object’s reference point.

> `Y-offset` (number):

>   `#<unpure-pure-container #<primitive-procedure ly:staff-symbol-referencer::callback> >`

>   The vertical amount that this object is moved relative to its Y-parent.

This object supports the following interface(s): break-aligned-interface, font-interface, grob-interface, item-interface, key-signature-interface, pure-from-neighbor-interface and staff-symbol-referencer-interface.

#### Internals Reference v2.22.2 (stable-branch).