LilyPond erweitern: 2.6 Schwierige Korrekturen

## 2.6 Schwierige Korrekturen

Hier finden sich einige Klassen an schwierigeren Anpassungen.

- Ein Typ der schwierigen Anpassungen ist die Erscheinung von Strecker-Objekten wie Binde- oder Legatobögen. Zunächst wird nur eins dieser Objekte erstellt, und sie können mit dem normalen Mechanismus verändert werden. In einigen Fällen reichen die Strecker jedoch über Zeilenumbrüche. Wenn das geschieht, werden diese Objekte geklont. Ein eigenes Objekt wird für jedes System erstellt, in dem es sich befindet. Sie sind Klone des originalen Objektes und erben alle Eigenschaften, auch `\override`-Befehle.

  Anders gesagt wirkt sich ein `\override` immer auf alle Stücke eines geteilten Streckers aus. Um nur einen Teil eines Streckers bei einem Zeilenumbruch zu verändern, ist es notwendig, in den Formatierungsprozess einzugreifen. Das Callback `after-line-breaking` enthält die Schemefunktion, die aufgerufen wird, nachdem Zeilenumbrüche errechnet worden sind und die Layout-Objekte über die unterschiedlichen Systeme verteilt wurden.

  Im folgenden Beispiel wird die Funktion `my-callback` definiert. Diese Funktion

  - bestimmt, ob das Objekt durch Zeilenumbrüche geteilt ist,
  - wenn ja, ruft sie alle geteilten Objekte auf,
  - testet, ob es sich um das letzte der geteilten Objekte handelt,
  - wenn ja, wird `extra-offset` gesetzt.

  Diese Funktion muss in Tie (Bindebogen) installiert werden, damit der letzte Teil eines gebrochenen Bindebogens neu ausgerichtet wird.

  >     #(define (my-callback grob)
  >       (let* (
  >              ; have we been split?
  >              (orig (ly:grob-original grob))

  >              ; if yes, get the split pieces (our siblings)
  >              (siblings (if (ly:grob? orig)
  >                          (ly:spanner-broken-into orig) '() )))

  >        (if (and (>= (length siblings) 2)
  >                  (eq? (car (last-pair siblings)) grob))
  >          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))

  >     \relative c'' {
  >       \override Tie #'after-line-breaking =
  >       #my-callback
  >       c1 ~ \break c2 ~ c
  >     }

  Wenn man diesen Trick anwendet, sollte das neue `after-line-breaking` auch das alte `after-line-breaking`-Callback aufrufen, wenn es vorhanden ist. Wenn diese Funktion etwa mit `Hairpin` (Crescendo-Klammer) eingesetzt wird, sollte auch `ly:spanner::kill-zero-spanned-time` aufgerufen werden.

- Manche Objekte können aus technischen Gründen nicht mit `\override` verändert werden. Beispiele hiervon sind `NonMusicalPaperColumn` und `PaperColumn`. Sie können mit der `\overrideProperty`-Funktion geändert werden, die ähnlich wie `\once \override` funktioniert, aber eine andere Syntax einsetzt.

  >     \overrideProperty
  >     #"Score.NonMusicalPaperColumn"  % Grob-Bezeichnung
  >     #'line-break-system-details     % Eigenschaftsbezeichnung
  >     #'((next-padding . 20))         % Wert

  Es sollte angemerkt werden, dass `\override`, wenn man es auf `NonMusicalPaperColumn` und `PaperColumn` anwendet, immer noch innerhalb der `\context`-Umgebung funktioniert.

Andere Sprachen: English, español.

#### LilyPond – Extending