### 4.4.3 Předměty vně notové osnovy

Předměty vně notové osnovy werden automatisch gesetzt, um Kollisionen zu vermeiden. Objekten mit einem geringeren Prioritätswert der Eigenschaft `outside-staff-priority` werden näher an das System gesetzt, und andere Objekte außerhalb des Systems werden dann soweit vom System entfernt gesetzt, dass Zusammenstöße vermieden werden. Die `outside-staff-priority`-Eigenschaft ist im `grob-interface` definiert und ist also eine Eigenschaft von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte auf falsch (`#f`) gesetzt; dieser Wert wird in einen numerischen Wert dem Objekt entsprechend geändert, wenn das Objekt für die Notenausgabe erstellt wird. Die Tabelle unten zeigt die Standardwerte für die meistbenutzten `outside-staff`-Objekte, die den Voreinstellungen nach im `Staff`- oder `Voice`-Kontext gesetzt werden.

Achtung bei einigen ungewöhnlichen Objektbezeichnungen: Strecker-Objekte werden automatisch erstellt, um die vertikale Position von Grobs zu kontrollieren, die an unterschiedlichen musikalischen Momenten beginnen und enden (könnten). Wenn also `outside-staff-priority` des darunterliegenden Grobs geändert wird, hat das keine Auswirkung. Zum Beispiel bringt das Ändern von `outside-staff-priority` des `Hairpin`-(Dynamikklammer)-Objekts keine Änderung in der vertikalen Position von Crescendo-Klammern – anstatt dessen muss `outside-staff-priority` des hiermit assoziierten `DynamicLineSpanne`-Objekts geändert werden. Dieser `\override`-Befehl muss zu Beginn des Streckers gesetzt werden, welcher womöglich mehrere verbundene Dynamikklammern und Dynamikbezeichnung beinhaltet.

Layout-Objekt | Priorität | Kontrolliert Position von:
--- | --- | ---
`MultiMeasureRestText` | `450` | Text über Ganztaktpausen
`TextScript` | `450` | Textbeschriftung
`OttavaBracket` | `400` | Ottava (Oktavierungsklammern)
`TextSpanner` | `350` | Text-Strecker
`DynamicLineSpanner` | `250` | Alle Dynamik-Bezeichnungen
`VoltaBracketSpanner` | `100` | Volta-Klammern
`TrillSpanner` | `50` | Triller-Strecker

Hier ein Beispiel, das die Standardpositionierung von einigen Objekten zeigt.

>     % Set details for later Text Spanner
>     \override TextSpanner.bound-details.left.text
>         = \markup { \small \bold Slower }
>     % Place dynamics above staff
>     \dynamicUp
>     % Start Ottava Bracket
>     \ottava #1
>     c'4 \startTextSpan
>     % Add Dynamic Text and hairpin
>     c4\pp\<
>     c4
>     % Add Text Script
>     c4^Text
>     c4 c
>     % Add Dynamic Text and terminate hairpin
>     c4\ff c \stopTextSpan
>     % Stop Ottava Bracket
>     \ottava #0
>     c,4 c c c

Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h. Text mit Bindestrichen, der sich über eine bestimmte Länge erstreckt. Der Strecker beginnt mit dem `\startTextSpan`-Befehl und endet mit dem `\stopTextSpan`-Befehl, und das Format des Textes wird mit dem `\override TextSpanner`-Befehl bestimmt. Mehr Einzelheiten siehe Text mit Verbindungslinien.

Im Beispiel wird auch gezeigt, wie Oktavierungsklammern (Ottava) erstellt werden.

Beachten Sie, dass Taktnummern, Metronombezeichnungen und Übungszeichen nicht gezeigt werden. Sie werden standardmäßig im `Score`-(Partitur)-Kontext erstellt und ihre `outside-staff-priority` wird in Bezug auf die Layout-Objekte, die im `Staff`-Kontext erstellt werden, ignoriert. Wenn Sie Taktnummern, Metronombezeichnungen oder Übungszeichen entsprechend ihrer Außersystem-Priorität setzen wollen, müssen Sie die entsprechenden Engraver (`Bar_number_engraver`, `Metronome_mark_engraver` oder `Mark_engraver`) vom `Score`-Kontext entfernen und dem `Staff`-Kontext hinzufügen. Wenn die Engraver so geändert werden, erhalten sie folgenden Werte für `outside-staff-priority`:

Layout-Objekt | Priorität
--- | ---
`RehearsalMark` | `1500`
`MetronomeMark` | `1000`
`BarNumber` | `100`

Wenn die Standardwerte der `outside-staff-priority` nicht die Positionierung hervorrufen, die Sie wünschen, kann die Priorität eines jeden Objektes geändert werden. Als Beispiel wollen wir zeigen, wie sich die Oktavierungsklammer unter den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen nur die Priorität des `OttavaBracket`-Objektes in der IR oder der Tabelle oben herausfinden und einen kleineren Wert angeben als der Wert, den das `TextSpanner`-(Strecker)-Objekt bekommt, wobei noch daran zu denken ist, dass `OttavaBracket` im `Staff`-Kontext erstellt wird:

>     % Set details for later Text Spanner
>     \override TextSpanner.bound-details.left.text
>         = \markup { \small \bold Slower }
>     % Place dynamics above staff
>     \dynamicUp
>     % Place following Ottava Bracket below Text Spanners
>     \once \override Staff.OttavaBracket.outside-staff-priority = #340
>     % Start Ottava Bracket
>     \ottava #1
>     c'4 \startTextSpan
>     % Add Dynamic Text
>     c4\pp
>     % Add Dynamic Line Spanner
>     c4\<
>     % Add Text Script
>     c4^Text
>     c4 c
>     % Add Dynamic Text
>     c4\ff c \stopTextSpan
>     % Stop Ottava Bracket
>     \ottava #0
>     c,4 c c c

Legatobögen werden als Innersystem-Objekte klassifiziert, aber sie erscheinen oft auch über dem System, wenn die Noten, an die sie verbunden sind, sehr hoch im System notiert sind. Dadurch können Außersystem-Objekte, wie Artikulationszeichen, zu hoch gerückt werden. Die `avoid-slur`-Eigenschaft hat nur eine Auswirkung, wenn auch die `outside-staff-priority` auf `#f` gesetzt ist. Alternativ kann die `outside-staff-priority` des Legatobogens auf einen numerischen Wert gesetzt werden, sodass er mit anderen Außersystem-Objekten anhand dieses Wertes gesetzt wird. Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:

>     c4( c^\markup { \tiny \sharp } d4.) c8
>     c4(
>     \once \override TextScript.avoid-slur = #'inside
>     \once \override TextScript.outside-staff-priority = ##f
>     c4^\markup { \tiny \sharp } d4.) c8
>     \once \override Slur.outside-staff-priority = #500
>     c4( c^\markup { \tiny \sharp } d4.) c8

Eine Änderung der `outside-staff-priority` kann auch dazu benutzt werden, die vertikale Plazierung von individuellen Objekten zu kontrollieren, auch wenn das Ergebnis nicht immer optimal ist. Im nächsten Beispiel soll „Text3“ oberhalb von „Text4“ gesetzt werden, das Beispiel wurde behandelt in automatickém chování. Der Wert der Priorität muss also für die Eigenschaft `TextScript` entweder in der IR oder in der Tabelle oben festgestellt werden und dann die Priorität für „Text3“ höher eingestellt werden:

>     c''2^"Text1"
>     c''2^"Text2" |
>     \once \override TextScript.outside-staff-priority = #500
>     c''2^"Text3"
>     c''2^"Text4" |

Damit wird zwar „Text3“ ganz richtig über „Text4“ platziert, aber auch über „Text2“, und „Text4“ wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle diese Anmerkungen gleichweit vom System entfernt sein. Dazu muss offensichtlich horizontal etwas Platz gemacht werden. Das kann erreicht werden mit dem `textLengthOn`-(Textlänge an)-Befehl.

### \textLengthOn (Textlänge berücksichtigen)

Standardmäßig wird Text, der mit dem Beschriftungsbefehl `\markup` bzw. Äquivalenten erstellt wird, kein zusätzlicher Platz in Bezug auf die Positionierung der Noten zugestanden. Der `\textLengthOn`-Befehl ändert dieses Verhalten, so dass die Noten gespreizt werden, wenn die Breite des Textes es erfordert:

>     \textLengthOn  % Cause notes to space out to accommodate text
>     c''2^"Text1"
>     c''2^"Text2" |
>     c''2^"Text3"
>     c''2^"Text4" |

Dieses Verhalten wird mit dem `\textLengthOff`-Befehl rückgängig gemacht. Erinnern Sie sich, dass `\once` nur mit `\override`, `\set`, `\revert` oder `unset` funktioniert, der Befehl kann also nicht zusammen mit `\textLengthOn` benutzt werden.

Textbeschriftung vermeidet auch Noten, die über das System hinausstehen. Wenn das nicht gewünscht ist, kann die automatische Verschiebung nach oben hin auch vollständig ausgeschaltet werden, indem die Priorität auf `#f` gesetzt wird. Hier ein Beispiel, wie eine Textbeschriftung mit diesen Noten reagiert:

>     \relative {
>       % This markup is short enough to fit without collision
>       c''2^"Tex" c'' |
>       R1 |

>       % This is too long to fit, so it is displaced upwards
>       c,,2^"Text" c'' |
>       R1 |

>       % Turn off collision avoidance
>       \once \override TextScript.outside-staff-priority = ##f
>       c,,2^"Long Text   " c'' |
>       R1 |

>       % Turn off collision avoidance
>       \once \override TextScript.outside-staff-priority = ##f
>       \textLengthOn        % and turn on textLengthOn
>       c,,2^"Long Text   "  % Spaces at end are honored
>       c''2 |
>     }

### Dynamik

Dynamikbezeichnung wird üblicherweise unter dem System gesetzt, kann aber auch nach oben mit dem Befehl `dynamicUp` gezwungen werden. Die Bezeichnung wird vertikal relativ zu der Note positioniert, an die sie angefügt wurde. Sie wird vertikal variabel gesetzt in Bezug zu Innersystemobjekten wie Bögen oder Taktnummern. Damit können oft recht gute Resultate erreicht werden, wie im folgenden Beispiel:

>     \clef "bass"
>     \key aes \major
>     \time 9/8
>     \dynamicUp
>     bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\!
>     ees,2.~\)\mf ees4 r8

Wenn aber Noten und Dynamikzeichen sehr dicht beieinander stehen, positioniert die automatische Kollisionsvermeidung später kommende Dynamikzeichen weiter weg, was allerdings nicht immer die beste Möglichkeit ist, wie in dem folgenden, etwas gewollten Beispiel zu sehen ist:

>     \dynamicUp
>     a4\f b\mf c\mp b\p |

Wenn eine ähnliche Situation in „echter“ Musik auftaucht, kann es nötig sein, die Noten etwas zu spreizen, damit die Dynamikzeichen alle auf der selben vertikalen Position gesetzt werden können. Dieses Verhalten war im Falle von Textbeschriftungen möglich mit dem `\textLengthOn`-Befehl, aber es gibt keinen entsprechenden Befehl für Dynamik. Wir müssen also unsere eigenen Befehle mit `\override` konstruieren.

### Verändern der Größe von grobs

Zuallererst müssen wir lernen, wie die Größe von Grobs verändert wird. Alle Grobs besitzen einen Referenzpunkt, der benutzt wird, um ihre Position in Relation zu ihnen übergeordneten Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann auf einer horizontalen Position (`X-offset`) und einer vertikalen Position (`Y-offset`) ausgerichtet, immer bezüglich des übergeordneten Objektes. Eine horizontale Strecke wird durch ein Zahlenpaar angegeben (`X-extent`), welche die linke und rechte Grenze relativ zum übergeordneten Objekt bezeichnen. Die vertikale Strecke wir genauso durch ein Zahlenpaar (`Y-extent`) definiert. Diese Eigenschaften gehören zu allen Grobs, die das `grob-interface` unterstützen.

Standardmäßig haben Außersystemobjekte eine Länge von Null, so dass sie sich in horizontaler Richtung überlappen können. Das geschieht, indem dem linken Rand Unendlich zugewiesen wird und dem rechten Rand minus Unendlich (der Code der `extra-spacing-width`-(zusätzliche Positionierungslänge)-Eigenschaft lautet: `'(+inf.0 . -inf.0)`). Damit sich diese Objekte also horizontal nicht überschneiden, muss der Wert von `extra-spacing-width` auf `'(0 . 0)` gesetzt werden, sodass die wirkliche Länge eines Objektes zur Geltung kommt. Mit diesem Befehl wird das für Dynamik-Zeichen erledigt:

>     \override DynamicText.extra-spacing-width = #'(0 . 0)

Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:

>     \dynamicUp
>     \override DynamicText.extra-spacing-width = #'(0 . 0)
>     a4\f b\mf c\mp b\p

Damit werden die Dynamik-Zeichen also wirklich nebeneinander gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten etwas weiter außeinander stehen und es wäre gut, wenn sie alle den gleichen Abstand zum System hätte. Das erste Problem ist einfach behoben. Anstatt der `extra-spacing-width`-Eigenschaft Null zuzuweisen, können wir auch einen etwas größeren Wert wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei Notenlinien, es scheint also gut, den rechten und linken Rand eine halbe Einheit zu vergrößern:

>     \dynamicUp
>     % Extend width by 1 staff space
>     \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
>     a4\f b\mf c\mp b\p

Das sieht schon besser aus, aber es wäre noch besser, wenn die Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt höher und tiefer zu sitzen. Das kann mit der `staff-padding`-Eigenschaft erreicht werden, die wir uns im folgenden Abschnitt genauer anschauen werden.

#### LilyPond – Learning Manual v2.22.1 (Stálá větev).