LilyPond Benutzerhandbuch: 4.4.1 Flexible vertikale Abstände in Systemgruppen

### 4.4.1 Flexible vertikale Abstände in Systemgruppen

Drei unterschiedliche Mechanismen kontrollieren das flexible Abstandaufteilung in Systemgruppen, einer für jede der folgenden Kathegorien:

- ungruppierte Systeme,
- Systemgruppen (Systeme innerhalb einer `staff-group` wie etwa `ChoirStaff` usw.) und
- Nicht-Notensystemzeilen (wie etwa `Lyrics` (Gesangstext), `ChordNames` (Akkordbezeichnungen) usw.).

Die Höhe jeder Systemgruppe wird in zwei Schritten bestimmt. Zunächst werden alle Systeme anhand des vorhandenen Platzes aufgeteilt. Dann werden die nicht-Notensysteme (also Akkorde oder Gesangstext) zwischen den Systemen verteilt.

Es ist zu beachten, dass der Platzverteilungsmechanismus, der in diesem Abschnitt behandelt wird, nur die vertikale Platzierung von Systemen und nicht-Systemzeilen in einzelnen Systemgruppen behandelt. Die vertikale Platzierung zwischen einzelnen Systemgruppen, Partituren, Beschriftungen usw. und den Rändern wird durch `\paper`-Variablen kontrolliert, die Vertikale `\paper`-Variablen mit flexiblen Abständen.

#### Eigenschaften für Abstände innerhalb von Systemgruppen

Der vertikalen Platzierungsmechanismen für Abstände innerhalb von Systemgruppen werden durch zwei Gruppen von Grob-Eigenschaften kontrolliert. Die erste Gruppe ist mit dem `VerticalAxisGroup`-Grob verknüpft, der von allen Notensystemen und Nicht-Notensystemzeilen erstellt wird. Die zweite Gruppe ist mit dem `StaffGrouper`-Grob verknüpft, der von Systemgruppen erstellt werden kann, aber nur, wenn das explizit verlangt wird. Die einzelnen Eigenschaften werden am Ende dieses Abschnitts beschrieben.

Die Bezeichnungen dieser Eigenschaften (mit Außnahmen von `staff-affinity`) haben das Format `Element1-Element2-spacing`, wobei `Element1` und `Element2` die Elemente sind, deren Abstände eingestellt werden sollen. Dabei ist allerdings zu beachten, dass `Element2` sich nicht notwendigerweise unterhalb von `Element1` befindet; beispielsweise `nonstaff-relatedstaff-spacing` (Nicht-Notensystem-verwandtesNotensystem) misst von dem Nicht-Notensystem nach oben, wenn `staff-affinity` (Richtung, an der sich ein System ausrichtet) auf `UP` (nach oben) eingestellt ist.

Jeder Abstand wird zwischen den Referenzpunkten der zwei Objekten gemessen. Der Referenzpunkt eines Notensystems ist die vertikale Mitte seines `StaffSymbol`-Objekts (also die Mittellinie, wenn `line-count` (Notenlinienzähler) ungrade ist, oder der mittlere Zwischenraum, wenn `line-count` grade ist). Die Referenzpunkte für einzelne Nicht-Notensystemzeilen ergibt sich aus der folgenden Tabelle:

Nicht-Notensystemzeile | Referenzpunkt
--- | ---
`ChordNames` | Grundlinie
`NoteNames` | Grundlinie
`Lyrics` | Grundlinie
`Dynamics` | vertikale Mitte
`FiguredBass` | höchster Punkt
`FretBoards` | Oberlinie

Im nächsten Bild zeigen horizontale Striche die Positionen dieser Referenzpunkte an:

Jeder der vertikalen Platzierungs-Grobeigenschaften (außer `staff-affinity`) benutzt die gleiche Alistenstruktur wie die `\paper`-Variablen, behandelt in Vertikale `\paper`-Variablen mit flexiblen Abständen. Besondere Methoden um Alisten zu verändern finden sich in Alisten verändern. Grob-Eigenschaften sollten mit dem `\override`-Befehle innerhalb einer `\score`- oder `\layout`-Umgebung angepasst werden, nicht innerhalb einer `\paper`-Umgebung.

Das folgende Beispiel zeigt die beiden Arten, Alisten zu modifizieren. Der erste Aufruf verändert nur einen Schlüsselwert einzlen, während der zweite die Eigenschaft komplett neu definiert:

>     \new Staff \with {
>       \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
>     } { … }

>     \new Staff \with {
>       \override VerticalAxisGroup.default-staff-staff-spacing =
>         #'((basic-distance . 10)
>            (minimum-distance . 9)
>            (padding . 1)
>            (stretchability . 10))
>     } { … }

Um Platzierungseinstellungen global vorzunehmen, müssen sie in der `\layout`-Umgebung vorgenommen werden:

>     \layout {
>       \context {
>         \Staff
>         \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
>       }
>     }

Standardeinstellungen für die vertikalen Platzierungs-Grobeigenscahften finden sich in VerticalAxisGroup und StaffGrouper aufgelistet. Standardveränderungen für bestimmte Typen von Nicht-Notensystemzeilen finden sich im relevanten Abschnitt in in Contexts aufgelistet.

#### Eigenschaften des `VerticalAxisGroup`-Grobs

`VerticalAxisGroup`-Eigenschaften werden normalerweise mit einem `\override`-Befehl auf `Staff`-(Notensystem-)Ebene (oder entsprechend) vorgenommen.

`staff-staff-spacing`

  System-System-Platzierung

  Wird benutzt, um den Abstand zwischen dem aktuellen Notensystem und dem Notensystem direkt darunter in der gleichen Notensystemgruppe zu bestimmen, auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa `Lyrics`) dazwischen stehen. Gilt nicht für das unterste System einer Systemgruppe.

  Die Eigenschaft `staff-staff-spacing` einer `VerticalAxisGroup` ist eine Scheme-Funktion, welche die Eigenschaften vom `StaffGrouper`-Grob den Notensystemen zuweist, wenn sie einer Systemgruppe angehören, bzw. die `default-staff-staff-spacing`-Eigenschaft bei einem einzelnen Notensystem. Dadurch können Systeme unterschiedlich in Abhängigkeit von ihrer Zugehörigkeit zu einer Gruppe (StaffGroup) platziert werden. Wenn gleichmäßige Aufteilung ohne Berücksichtigung von Gruppierungen gewünscht ist, kann diese Funktion durch eine flexible Platzierungs-Aliste ersetzt werden, wobei man die vollständige Redefinition auf die oben gezeigte Weise vornehmen muss.

`default-staff-staff-spacing`

  Normale-System-System-Platzierung

  Eine flexible Platzierungs-Aliste, die den Wert von `staff-staff-spacing` für ungruppierte Notensysteme einstellt, es sei denn, `staff-staff-spacing` wirde explizit mit `\override` eingestellt.

`staff-affinity`

  System-Anziehung

  Die Richtung des Systems, die benutzt wird, um die aktuelle Nicht-Notensystemzeile zu platzieren. Mögliche Werte sind `UP` (nach oben), `DOWN` (nach unten) und `CENTER` (mittig). Wenn `CENTER` wird die Nicht-Notensystemzeile vertikal mittig zwischen den beiden nächsten Systemen oben und unten platziert, außer Zusammenstöße und andere Platzierungsprobleme verhindern das. Aufeinanderfolgende Nicht-Notensystemzeilen sollten nicht-aufsteigende `staff-affinity` von oben nach unten haben; also ein Nicht-Notensystemzeile mit `UP` sollte nicht direkt auf eine mit `DOWN` folgen. Nicht-Notensystemzeilen über einem Notensystem sollten `DOWN` benutzen, unter einem Notensystem dagegen `UP`. Wenn `staff-affinity` für eine Notensystem eingestellt wird, wird es wie eine Nicht-Notensystemzeile behandelt. Wenn `staff-affinity` auf `#f` gesetzt wird, wird eine Nicht-Notensystemzeile wie ein Notensystem behandelt. Wird `staff-affinity` auf `UP`, `CENTER` oder `DOWN` gesetzt, wird das Notensystem als Nicht-Notensystemzeile plaziert.

`nonstaff-relatedstaff-spacing`

  Nicht-Notensystem-verwandtesSystem-Platzierung

  Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und dem nächsten Notensystem in der Richtung von `staff-affinity`, wenn keine Nicht-Notensystemzeilen dazwischen auftreten und `staff-affinity` entweder `UP` oder `DOWN` ist. Wenn `staff-affinity` `CENTER` ist, dann wird `nonstaff-relatedstaff-spacing` für die nächsten Notensysteme auf beiden Seiten benutzt, auch wenn andere Nicht-Notensystemzeilen zwischen der aktuellen und einem der Notensystem auftreten. Das heißt, dass die Platzierung eine Nicht-Notensystemzeile sowohl von den umliegenden Notensystemen als auch den umliegenden Nicht-Notensystemzeilen abhängt. Wenn `stretchability` einer dieser Platzierungstypen auf einen kleinen Wert gesetzt wird, dominiert diese Platzierung. Wird es dagegen auf einen großen Wert gesetzt, hat die Platzierung dieses Objekts nur einen kleinen Einfluss.

`nonstaff-nonstaff-spacing`

  Nicht-Notensystemzeile-Nicht-Notensystemzeile-Platzierung

  Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und der Nicht-Notensystemzeile in der Richtung von `staff-affinity`, wenn beide sich auf der gleichen Seite des verwandten Notensystems befinden und `staff-affinity` entweder `UP` oder `DOWN` ist.

`nonstaff-unrelatedstaff-spacing`

  Nicht-Notensystemzeile-Nicht-verwandtesSystem-Platzierung

  Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und dem Notensystem in der gegenüberliegenden Richtung von `staff-affinity`, wenn keine anderen Nicht-Notensystemzeilen dazwischen auftreten und `staff-affinity` entweder `UP` oder `DOWN` ist. Das kann benutzt werden, um einen Minimalfüllabstand (padding) zwischen einer `Lyrics`-Gesangstextzeile und dem zugehörigen Notensystem zu verlangen.

#### Eigenschaften des `StaffGrouper`-Grobs

`StaffGrouper`-Eigenschaften werden normalerweise mit einem `\override`-Befehl auf `StaffGroup`-Ebene (oder entsprechend) eingestellt.

`staff-staff-spacing`

  Notensystem-Notensystem-Abstand

  Der Abstand zwischen zwei aufeinanderfolgenden Notensystemen in der aktuellen `StaffGroup`. Die `staff-staff-spacing`-Eigenschaft des `VerticalAxisGroup`-Grobs eines einzelnen Notensytems kann mit `\override` in andere Platzierungswerte für dieses Notensystem geändert werden.

`staffgroup-staff-spacing`

  Systemgruppe-System-Abstand

  Der Abstand zwischen dem letzten Notensystem der aktuellen `StaffGroup` und dem Notensystem dirket darunter in der selben Notensystemgruppe, auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa Gesangstext) zwischen den zwei Notensystemen vorkommen. Gilt nicht für das letzte Notensystem einer Systemgruppe. Die `staff-staff-spacing`-Eigenschaft des `VerticalAxisGroup`-Grobs individueller Notensysteme kann mit `\override` in andere Platzierungswerte für dieses Notensystem geändert werden.

#### Siehe auch

Notationsreferenz: Vertikale `\paper`-Variablen mit flexiblen Abständen, Alisten verändern.

Installierte Dateien: ‘`ly/engraver-init.ly`’, ‘`scm/define-grobs.scm`’.

Referenz der Interna: Contexts, VerticalAxisGroup, StaffGrouper.

#### Abstände von nicht gruppierten Notensystemen

Notensysteme (wie etwa `Staff`, `DrumStaff`, `TabStaff` usw.) sind Kontexte, die eine oder mehrere Stimmen-Kontexte enthalten, aber keine anderen Notensysteme enthalten können.

Folgende Eigenschaften beeinflussen die Abstände von nicht gruppierten Notensystemen:

- `VerticalAxisGroup`-Eigenschaften:
  - `default-staff-staff-spacing`
  - `staff-staff-spacing`

Diese Eigenschaften sind einzlen oben behandelt worden, siehe Eigenschaften für Abstände innerhalb von Systemgruppen.

Zusätzliche Eigenschaften kommen hinzu für Notensysteme, die Teil einer Gruppieren (`StaffGroup`) werden, siehe Abstände von gruppierten Notensystemen.

Folgendes Beispiel zeigt, wie die `default-staff-staff-spacing`-Eigenschaft sich auf die Platzierung von nicht-gruppierten Notensystemen auswirken kann. Wenn man die gleichen `\override`-Befehle auf `staff-staff-spacing` anwendet, ergäbe das den selben Effekt, würde sich aber auch in Fällen auswirken, in denen die Systeme gruppiert sind.

>     \layout {
>       \context {
>         \Staff
>         \override VerticalAxisGroup.default-staff-staff-spacing =
>           #'((basic-distance . 8)
>              (minimum-distance . 7)
>              (padding . 1))
>       }
>     }

>     <<
>       % The very low note here needs more room than 'basic-distance
>       % can provide, so the distance between this staff and the next
>       % is determined by 'padding.
>       \new Staff { b,2 r | }

>       % Here, 'basic-distance provides enough room, and there is no
>       % need to compress the space (towards 'minimum-distance) to make
>       % room for anything else on the page, so the distance between
>       % this staff and the next is determined by 'basic-distance.
>       \new Staff { \clef bass g2 r | }

>       % By setting 'padding to a negative value, staves can be made to
>       % collide.  The lowest acceptable value for 'basic-distance is 0.
>       \new Staff \with {
>         \override VerticalAxisGroup.default-staff-staff-spacing =
>           #'((basic-distance . 3.5)
>              (padding . -10))
>       } { \clef bass g2 r | }
>       \new Staff { \clef bass g2 r | }
>     >>

#### Siehe auch

Installierte Dateien: ‘`scm/define-grobs.scm`’.

Schnipsel: Spacing.

Referenz der Interna: VerticalAxisGroup.

#### Abstände von gruppierten Notensystemen

In Orchesterpartituren und anderen großen Partituren werden Notensysteme normalerweise in Gruppen zusammengefasst. Der Platz zwischen Gruppen ist normalerweise größer als der Zwischenraum zwischen einzlenen Notensystemen der gleichen Gruppe.

Gruppierte Notensysteme (wie `StaffGroup`, `ChoirStaff`, `GrandStaff` usw.) sind Kontexte, die mehr als ein Notensystem gleichzeitig enthalten können.

Folgende Eigenschaften beeinflussen die Platzierung von Notensystemen innerhalb von Gruppen:

- `VerticalAxisGroup`-Eigenschaften:
  - `staff-staff-spacing`
- `StaffGrouper`-Eigenschaften:
  - `staff-staff-spacing`
  - `staffgroup-staff-spacing`

Diese Grob-Eigenschaften sind weiter oben einzeln beschrieben, siehe Eigenschaften für Abstände innerhalb von Systemgruppen.

Das folgende Beispiel zeigt, wie Eigenscchaften des `StaffGrouper`-Grobs die Platzierung von gruppierten Notensystemen beeinflussen kann:

>     \layout {
>       \context {
>         \Score
>         \override StaffGrouper.staff-staff-spacing.padding = #0
>         \override StaffGrouper.staff-staff-spacing.basic-distance = #1
>       }
>     }

>     <<
>       \new PianoStaff \with {
>         \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
>       } <<
>         \new Staff { c'1 }
>         \new Staff { c'1 }
>       >>

>       \new StaffGroup <<
>         \new Staff { c'1 }
>         \new Staff { c'1 }
>       >>
>     >>

#### Siehe auch

Installierte Dateien: ‘`scm/define-grobs.scm`’.

Schnipsel: Spacing.

Referenz der Interna: VerticalAxisGroup, StaffGrouper.

#### Abstände von nicht-Notensystemzeilen

Nicht-Notensystemzeilen (wie `Lyrics`, `ChordNames` usw.) sind Kontexte, deren Layoutobjekte wie Notensysteme gesetzt werden (also als horizontale Zeilen zwischen Notensystemen). Genau gesagt sind Nicht-Notensystemzeilen Nicht-Notensystemkontexte, die ein `VerticalAxisGroup`-Layoutobjekt erstellen.

Folgende Eigenschaften beeinflussen die Abstände von Nicht-Notensystemzeilen:

- `VerticalAxisGroup`-Eigenschaften:
  - `staff-affinity`
  - `nonstaff-relatedstaff-spacing`
  - `nonstaff-nonstaff-spacing`
  - `nonstaff-unrelatedstaff-spacing`

Diese Grob-Eigenschaften sind weiter oben einzlen beschrieben; siehe Eigenschaften für Abstände innerhalb von Systemgruppen.

Das folgende Beispiel zeigt, wie die `nonstaff-nonstaff-spacing`-Eigenschaft die Platzierung von aufeinanderfolgenden Nicht-Notensystemzeilen beeinflussen kann. Indem hier der Wert von `stretchability` auf einen sehr hohen Wert gesetzt wird, kann der Gesangstext sehr viel weiter als normal gespreizt werden:

>     \layout {
>       \context {
>         \Lyrics
>         \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
>       }
>     }

>     \new StaffGroup
>     <<
>       \new Staff \with {
>         \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
>       } { c'1 }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #UP
>       } \lyricmode { up }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #CENTER
>       } \lyricmode { center }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #DOWN
>       } \lyricmode { down }
>       \new Staff { c'1 }
>     >>

#### Siehe auch

Installierte Dateien: ‘`ly/engraver-init.ly`’, ‘`scm/define-grobs.scm`’.

Schnispel: Spacing.

Referenz der Interna: Contexts, VerticalAxisGroup.

#### LilyPond – Notationsreferenz v2.22.2 (stabiler Zweig).