Příručka k učení se: 4.5.1 Přesouvání předmětů

### 4.5.1 Přesouvání předmětů

Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht perfekt. Einige Notationselemente können sich überschneiden. Das ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben werden – sie könnten besser aussehen, wenn sie etwas zusätzlichen Platz erhalten.

Es gibt im Grunde drei Herangehensweisen, überlappende Notation zu verbessern. Man sollte sie in der folgenden Reihenfolge anwenden:

1. Die Richtung eines der überlappenden Objekte kann geändert werden, indem die vordefinierten Befehle für Innersystemobjekte verwendet werden, wie beschrieben in předmětech uvnitř notové osnovy). Hälse, Bögen, Balken, Dynamik-Zeichen und Triolen können auf diese Weise einfach umgeordnet werden. Beschränkt ist diese Methode insofern, als es nur zwei Möglichkeiten zur Veränderung gibt: oben oder unten.
2. Die Objekteigenschaft, die LilyPond benutzt um die Layout-Objekte zu platzieren, können mit dem `\override`-Befehl positioniert werden. Die Vorteile von Änderungen dieser Art sind a) dass einige Objekte automatisch verschoben werden, wenn es nötig ist Platz zu schaffen und b) ein einziges `\override` sich auf alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften gehören:
   - `direction` (Richtung)

     Das wurde schon detailliert behandelt, siehe předměty uvnitř notové osnovy.

   - `padding`, `right-padding`, `staff-padding` (Verschiebung)

     Wenn ein Objekt platziert wird, bestimmt der Wert seiner `padding`-(Füllungs)-Eigenschaft die Größe des Abstandes, der zwischen dem Objekt selber und dem Objekt, relativ zu welchem es positioniert wird, gelassen werden muss. Dabei zählt der `padding`-Wert des Objektes, das platziert werden soll, der `padding`-Wert des Objektes, das schon gesetzt wurde, wird hingegen ignoriert. Abstände mit `padding` können zu allen Objekten hinzugefügt werden, die das `side-position-interface` unterstützen.

     Anstelle von `padding` wird die Position von Versetzungszeichengruppen durch die Eigenschaften `right-padding` bestimmt. Diese Eigenschaft wird im `AccidentalPlacement`-(Versetzungszeichen-Positionierungs)-Objekt gefunden, das sich innerhalb des Staff-Kontexts befindet. Während des Notensatzes werden die Notenköpfe zuerst gesetzt und dann die Versetzungszeichen, wenn denn welche gesetzt werden, durch die `right-padding`-Eigenschaft auf die linke Seite der Notenköpfe positioniert, um die Entfernung von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu bestimmen. Also nur die `right-padding`-(Verschiebung nach rechts)-Eigenschaft des `AccidentalPlacement`-Objekts hat Einfluss auf die Positionierung der Versetzungszeichen.

     Die `staff-padding`-(Verschiebung zum System)-Eigenschaft ist sehr ähnlich wie die `padding`-Eigenschaft: `padding` bestimmt den Minimalabstand zwischen einem Objekt, das das `side-position-interface` unterstützt, und dem nächsten anderen Objekt (normalerweise die Note oder Notenlinie); `staff-padding` dagegen wirkt nur auf Objekte die immer außerhalb des Notensystems sind – damit wird der minimale Abstand bestimmt, der zwischen dem Objekt und dem Notensystem gelassen werden soll. `staff-padding` hat also keinen Einfluss auf Objekte, die relativ zu einer Note positioniert werden, sondern nur auf solche, die zum System relativ stehen. Wenn es mit einem anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber der Befehl hat auch keine Auswirkungen.

     Um herauszufinden, welche `padding`-Eigenschaft für das bestimmte Objekt nötig, ist, das Sie verschieben wollen, müssen Sie in der IR nach den Objekt-Eigenschaften schauen. Dabei sollten Sie bedenken, dass sich die `padding`-Eigenschaften nicht unbedingt in dem Objekt selber befinden, schauen Sie also auch in Objekten nach, die offensichtlich Ähnlichkeiten haben.

     Alle `padding`-Werte werden in Notenlinienabständen gemessen. Für die meisten Objekte ist der Wert ungefähr auf 1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt). Der Wert kann geändert werden, wenn ein größerer (oder kleinerer) Abstand gewünscht wird.

   - `self-alignment-X` (Selbstpositionierung)

     Diese Eigenschaft kann benutzt werden, um ein Objekt nach links, rechts oder zentriert an dem Referenzpunkt des Objekts auszurichten, an das es verknüpft ist. Es kann bei allen Objekten benutzt werden, die das `self-alignment-interface` unterstützen. Das sind üblicherweise Objekte, die Text enthalten. Die möglichen Werte der Eigenschaft sind `LEFT`, `RIGHT` oder `CENTER`. Alternativ kann ein numerischer Wert zwischen `-1` und `+1` bestimmt werden: `-1` heißt linksbündig, `+1` rechtsbündig und Zahlen dazwischen bewegen den Text schrittweise von links nach rechts. Zahlen größer als `1` können angegeben werden, um den Text noch weiter nach links zu bewegen, oder weniger als `-1`, um ihn weiter nach rechts zu schieben. Eine Änderung um `1` des Wertes entspricht einer Bewegung um die halbe Textbreite.

   - `extra-spacing-width` (zusätzliche Breite)

     Diese Eigenschaft steht für alle Objekte zur Verfügung, die das `item-interface` unterstützen. Es braucht zwei Zahlen als Argument, die erste wird zur rechten Ausdehnung, die zweite zur linken Ausdehnung hinzugerechnet. Negative Zahlen verschieben die Ausdehnung nach rechts, positive nach links, um also ein Objekt zu verbreitern, muss die erste Zahl negativ und die zweite positiv sein. Allerdings beachten nicht alle Objekte beide Zahlen. Das `accidental`-(Versetzungszeichen)-Objekt etwa beachtet nur erste Zahl für die linke Ausdehnung.

   - `staff-position` (Notensystempositionierung)

     `staff-position` ist eine Eigenschaft des `staff-symbol-referencer-interface`, die von Objekten unterstützt wird, die relativ zum Notensystem (engl. staff) positioniert werden. Hiermit wird die vertikale Position eines Objekts relativ zur Mittellinie des Systems in halben Notenlinienabständen angegeben. Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen zu lösen.

   - `force-hshift` (vertikale Verschiebung erzwingen)

     Eng beieinander stehende Noten in einem Akkord oder Noten, die zum gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen zu umgehen. Diese Kolumnen werden Notenkolumnen genannt; ein `NoteColumn`-Objekt wird erstellt um die Noten in den Kolumnen zu setzen.

     Die `force-hshift`-(erzwinge horizontale Verschiebung)-Eigenschaft ist eine Eigenschaft von `NoteColumn` (bzw. vom `note-column-interface`). Eine Veränderung dieser Eigenschaft macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden, in denen die normalen `\shiftOn`-Befehle (siehe auch Přesně vyjádřené začátky hlasů) das Problem nicht beseitigen. Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die `extra-offset`-Eigenschaft, weil man die richtige Entfernung nicht in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen.

3. Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch manuell positioniert werden, entweder vertikal in Bezug auf die Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit auf eine neue Position verschoben werden. Der Nachteil ist, dass die richtigen Werte für eine gute Position manuell ausprobiert werden müssen, meistens durch Herantasten an den richtigen Wert, und das für jedes einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt. Am schwerwiegendsten ist aber die Tatsache, dass die Verschiebungskoordinaten wahrscheinlich neu errechnet oder ausprobiert werden müssen, wenn sich an den Noten und deren Layout später irgend etwas ändert. Die Eigenschaften, die für diese Arte der manuellen Verschiebung verwendet werden können, sind:
   `extra-offset (zusätzlicher Abstand)`

     Diese Eigenschaft gehört zu jedem Layout-Objekt, das das `grob-interface` unterstützt. Sie braucht ein Zahlenpaar, das die exakte Verschiebung in horizontaler und vertikaler Richtung bezeichnet. Negative Zahlen verschieben das Objekt nach links oder unten. Die Einheit sind Notenlinienabstände. Die zusätzliche Positionierung wird vorgenommen, nachdem alle anderen Objekte platziert sind, weshalb ein Objekt irgendwohin verschoben werden kann, ohne den restlichen Satz zu beeinflussen.

   `positions (Position)`

     Diese Eigenschaft ist am sinnvollsten, um die Steigung und die Höhe von Balken, Bögen und Triolenklammern anzupassen. Sie braucht ein Zahlenpaar, das die Position des rechten und linken Endes relativ zur Mittellinie des Notensystems bestimmt. Die Einheit sind Notenlinienabstände. Bögen allerdings können nicht beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine Liste an möglichen Positionen für den Bogen und findet normalerweise die Version, die „am besten aussieht“. Wenn die `positions`-Eigenschaft verändert worden ist, wird der Bogen aus der Liste gewählt, der der gewünschten Position am nächsten kommt.

Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften. Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften ein bestimmtes Objekt unterstützt.

Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer Kollision beteiligt sind, daneben findet sich die Bezeichnung des Objektes, mit der Sie es in der IR finden, um zu bestimmen, welche Eigenschaften benutzt werden können, um es zu verschieben.

Objekttyp | Objektbezeichnung
--- | ---
Articulationszeichen | `Script`
Balken | `Beam`
Dynamikzeichen (vertikal) | `DynamicLineSpanner`
Dynamikzeichen (horizontal) | `DynamicText`
Fingersatz | `Fingering`
Übungs-/Textmarken | `RehearsalMark`
Legatobögen | `Slur`
Text z. B. `^"text"` | `TextScript`
Bindebögen | `Tie`
N-tolen | `TupletBracket`

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