1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: 8819d7cb0ba2ab359e4aa2276695afb9c1957c42
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. For details, see the Contributors'
8 Guide, node Updating translation committishes.
12 @c Translators: ???, Michael Gerdau
14 @node Die Ausgabe verbessern
15 @chapter Die Ausgabe verbessern
16 @translationof Tweaking output
18 In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern
19 kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
20 Notenfragment kann geändert werden.
24 * Grundlagen für die Optimierung::
25 * Die Referenz der Programminterna::
26 * Erscheinung von Objekten::
27 * Positionierung von Objekten::
28 * Vertikale Abstände::
29 * Kollision von Objekten::
30 * Weitere Optimierungen::
33 @node Grundlagen für die Optimierung
34 @section Grundlagen für die Optimierung
35 @translationof Tweaking basics
38 * Grundlagen zur Optimierung::
39 * Objekte und Schnittstellen::
40 * Regeln zur Benennung von Objekten und Eigenschaften::
41 * Optimierungsmethoden::
44 @node Grundlagen zur Optimierung
45 @subsection Grundlagen zur Optimierung
46 @translationof Introduction to tweaks
48 @qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die
49 verschiedenen Methoden, die Aktionen zu beeinflussen, die während
50 der Kompilation einer Notationsdatei vorgenommen werden sowie auf
51 das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr
52 einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das
53 System an Optimierungen so gut wie alle möglichen Erscheinungsformen
56 In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt,
57 um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen
58 Befehlen bereitgestellt werden, die einfach in die Quelldatei
59 kopiert werden können um den selben Effekt wie im Beispiel
60 zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle
61 konstruiert werden, so dass Sie in der Lage sein werden, eigene
62 Befehle auf dieser Grundlage zu entwickeln.
64 Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den
65 Abschnitt @ref{Kontexte und Engraver} interessieren, dann
66 Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
67 verknüpft sind, sind die Voraussetzung, um die Funktionsweise
68 von Optimierungen verstehen zu können.
71 @node Objekte und Schnittstellen
72 @subsection Objekte und Schnittstellen
73 @translationof Objects and interfaces
80 @cindex Schnittstellen
81 @cindex graphische Objekte (Grob)
82 @cindex Objekteigenschaften
84 @cindex Objekt, Layout-
85 @cindex Eigenschaften von Objekten
87 Optimierung bedeutet, die internen Operationen und Strukturen
88 des LilyPond-Programms zu verändern, darum sollen hier
89 zunächst die wichtigsten Begriffe erklärt werden, die zur
90 Beschreibung dieser Operationen und Strukturen benutzt werden.
92 Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem
93 die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond
94 während der Bearbeitung des Quelltextes erstellt. Wenn etwa
95 ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt
96 vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält
97 dann alle Eigenschaften, die mit diesem speziellen Notensystem
98 verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und
99 spezifische Angaben über die Engraver, die innerhalb dieses Systems
100 eingesetzt werden. Für alle anderen Kontexte gibt es genauso
101 Objekte, die deren Eigenschaften beinhalten, beispielsweise für
102 @code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte,
103 aber auch für Objekte, die Notationselemente wie die Taktstriche,
104 Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
105 Objekt hat eine eigene Gruppe an Eigenschaftswerten.
107 Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die
108 Notationselemente der gesetzten Ausgabe repräsentieren, also
109 Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden
110 @qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt.
111 Daraus resultiert die künstliche Abkürzung @qq{Grob}.
112 Diese sind auch Objekte im allgemeinen Sinn und haben genauso
113 Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position,
116 Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen,
117 Crescendo-Klammern, Oktavierungszeichen und viele andere
118 Grobs sind nicht an einer Stelle platziert -- sie haben vielmehr
119 einen Anfangspunkt, einen Endpunkt und eventuell noch andere
120 Eigenschaften, die ihre Form bestimmen. Objekte mit solch
121 einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners)
124 Darüber hinaus gibt es @q{abstrakte} Grobs, die selbst keinen Ausdruck
125 irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder
126 verwalten andere Grobs. Typische Beispiele hierfür sind
127 @code{DynamicLineSpanner}, @code{BreakAlignment},
128 @code{NoteColumn}, @code{VerticalAxisGroup},
129 @code{NonMusicalPaperColumn} und Ähnliche. Wir werden uns später
130 mit einigen von ihnen noch näher befassen.
132 Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen}
133 (engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
134 sind, haben sie doch oft gemeinsame Eigenschaften, die auf
135 die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise
136 haben eine Farbe, eine Größe, eine Position usw. und alle
137 diese Eigenschaften werden von LilyPond auf die gleiche Weise
138 verarbeitet, während der Quelltext in Notensatz umgesetzt wird.
139 Um die internen Operationen zu vereinfachen, sind alle diese
140 gemeinsamen Prozesse und Eigenschaften in einem Objekt
141 mit der Bezeichnung @code{grob-interface} (Schnittstelle eines
142 graphischen Objektes) zusammengefasst. Es gibt viele andere
143 Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
144 besitzen, welche auf @code{-interface} endet. Insgesamt
145 gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
146 was es damit auf sich hat.
148 Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung
152 @node Regeln zur Benennung von Objekten und Eigenschaften
153 @subsection Regeln zur Benennung von Objekten und Eigenschaften
154 @translationof Naming conventions of objects and properties
156 @cindex Benennungskonventionen für Objekte
157 @cindex Benennungskonventionen für Eigenschaften
158 @cindex Objekte, Benennungskonventionen
159 @cindex Eigenschaften, Benennungskonventionen
160 @cindex Regeln zur Benennung von Objekten/Eigenschaften
162 Es wurden schon früher einige Regeln zur Benennung von
163 Objekten vorgestellt, siehe
164 @ref{Kontexte und Engraver}. Hier eine Referenzliste der
165 häufigsten Objekt- und Eigenschaftsbezeichnungen mit
166 den Regeln für ihre Bezeichnung und
167 illustrierenden echten Bezeichnungen. Es wurde @qq{A}
168 für einen beliebigen Großbuchstaben und @qq{aaa} für eine
169 beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere
170 Zeichen werden explizit angegeben.
172 @multitable @columnfractions .33 .33 .33
173 @headitem Objekt-/Eigenschaftstyp
174 @tab Naming convention
177 @tab Aaaa oder AaaaAaaaAaaa
178 @tab Staff, GrandStaff
180 @tab Aaaa oder AaaaAaaaAaaa
183 @tab Aaaa_aaa_engraver
184 @tab Clef_engraver, Note_heads_engraver
186 @tab aaa-aaa-interface
187 @tab grob-interface, break-aligned-interface
188 @item Kontext-Eigenschaften
189 @tab aaa oder aaaAaaaAaaa
190 @tab alignAboveContext, skipBars
191 @item Layout-Objekt-Eigenschaften
192 @tab aaa oder aaa-aaa-aaa
193 @tab direction, beam-thickness
196 Es wird bald ersichtlich werden, dass die Eigenschaften von
197 unterschiedlichen Objekttypen mit unterschiedlichen Befehlen
198 geändert werden. Deshalb ist es nützlich, bereits am Namen
199 den Typ und die Eigenschaften eines Objekts zu erkennen.
202 @node Optimierungsmethoden
203 @subsection Optimierungsmethoden
204 @translationof Tweaking methods
206 @cindex Optimierungsmethoden
209 * Der override-Befehl::
210 * Der revert-Befehl::
212 * Der overrideProperty-Befehl::
214 * Der single-Präfix::
217 @node Der override-Befehl
218 @unnumberedsubsubsec Der @code{@bs{}override}-Befehl
219 @translationof The override command
221 @cindex override-Befehl
225 @strong{Der \override-Befehl}
227 Wir haben uns schon mit den Befehlen @code{\set}
228 und @code{\with} bekannt gemacht, mit welchen
229 Eigenschaften von @strong{Kontexten} verändert
230 und @strong{Engraver} entfernt oder hinzugefügt
231 werden können. Siehe dazu
232 @ref{Kontexteigenschaften verändern} und @ref{Engraver hinzufügen und entfernen}. Jetzt wollen wir uns weitere
233 wichtige Befehle anschauen.
235 Der Befehl, um die Eigenschaften von @strong{Layout-Objekten}
236 zu ändern, ist @code{\override}. Weil dieser Befehl interne
237 Eigenschaften tief in der Programmstruktur von LilyPond
238 verändern muss, ist seine Syntax nicht so einfach wie die der
239 bisherigen Befehle. Man muss genau wissen, welche Eigenschaft
240 welches Objektes in welchem Kontext geändert werden soll,
241 und welches der neu zu setzende Wert dann ist. Schauen wir
242 uns an, wie das vor sich geht.
244 Die allgemeine Syntax dieses Befehles ist:
247 \override @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft} = #@var{Wert}
251 Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property}
252 das Layout-Objektes mit der Bezeichnung@var{LayoutObject},
253 welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den
256 Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen
257 werden, wenn der benötigte Kontext eindeutig impliziert ist und einer
258 der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames}
259 oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen
260 werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich
261 definiert werden muss.
263 Spätere Abschnitte behandeln umfassend Eigenschaften und ihre
264 Werte, siehe @ref{Typen von Eigenschaften}. Aber um ihre Funktion und ihr
265 Format zu demonstrieren,
266 werden wir hier nur einige einfache Eigenschaften und Werte einsetzen,
267 die einfach zu verstehen sind.
269 LilyPond's hauptsächliche Ausdrücke sind musikalische Dinge wie Noten,
270 Notendauern und Markierungen. Diesen zugrunde liegende Ausdrücke wie
271 Zahlen, Zeichenketten und Listen werden im @q{Scheme Modus} verarbeitet.
272 Der Präfix @samp{#} leitet diesen Modus ein. Einige dieser Werte haben
273 manchmal eine gültige Repräsentation in LilyPond's Musik Modus, in diesem
274 Handbuch werden wir aus Gründen der Einheitlichkeit immer das @samp{#}
275 für ihre Eingabe verwenden. Weiterführende Informationen zu LilyPond's
276 Scheme mode finden sie unter @rextend{LilyPond Scheme-Syntax}.
278 @code{\override} ist der bei Optimierungen am häufigsten verwendete Befehl.
279 Daher wird der Rest dieses Kapitels im Wesentlichen aus Anwendungsbeispielen
280 dieses Befehls bestehen. Hier kommt gleich ein einfaches Beispiel
281 zur Änderung der Farbe von Notenköpfen:
283 @cindex color-Eigenschaft, Beispiel
284 @cindex Farb-Eigenschaft, Beispiel
285 @cindex NoteHead, Beispiel für override
286 @cindex Notenkopf, Beispiel für Veränderung
288 @lilypond[quote,ragged-right,verbatim]
291 \override NoteHead.color = #red
293 \override NoteHead.color = #green
299 @node Der revert-Befehl
300 @unnumberedsubsubsec Der @code{@bs{}revert}-Befehl
301 @translationof The revert command
303 @cindex revert-Befehl
308 Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr
309 neuer Wert so lange bewahrt, bis er noch einmal überschrieben
310 wird oder ein @code{\revert}-Befehl vorkommt. Der
311 @code{\revert}-Befehl hat die folgende Syntax und setzt den
312 Wert der Eigenschaft zurück auf den Standardwert, nicht
313 jedoch auf den vorigen Wert, wenn mehrere
314 @code{\override}-Befehle benutzt wurden.
317 \revert @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft}
320 Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl,
321 wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden
322 Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes
323 wieder auf den Standardwert für die letzten zwei Noten gesetzt.
325 @cindex color-Eigenschaft, Beispiel
326 @cindex Farb-Eigenschaft, Beispiel
327 @cindex NoteHead, Beispiel für override
328 @cindex Notenkopf, Beispiel für Veränderung
330 @lilypond[quote,ragged-right,verbatim]
333 \override NoteHead.color = #red
335 \override NoteHead.color = #green
337 \revert NoteHead.color
343 @node Der once-Präfix
344 @unnumberedsubsubsec Der @code{@bs{}once}-Präfix
345 @translationof The once prefix
350 Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit
351 dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird
352 der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen
353 Musik-Moment wirksam, bevor sich wieder der vorherige Zustand herstellt
354 (dieser kann sich vom Standard unterscheiden, wenn etwa noch ein anderer
355 @code{\override}-Befehl aktiv ist). Am gleichen
356 Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes
359 @cindex color-Eigenschaft, Beispiel
360 @cindex Farb-Eigenschaft, Beispiel
361 @cindex NoteHead, Beispiel für override
362 @cindex Notenkopf, Beispiel für Veränderung
364 @lilypond[quote,verbatim]
367 \override NoteHead.color = #red
369 \once \override NoteHead.color = #green
371 \revert NoteHead.color
376 Der @code{\once} Präfix eignet sich also dazu, die Geltungsdauer eines
377 anderen vordefinierten Befehls, dem er vorangestellt ist, auf ein
378 einziges musikalisches Ereignis zu beschränken:
380 @lilypond[quote,verbatim]
391 Allerdings funktioniert das nicht bei vordefinierten Befehlen wie
392 @code{\@dots{}Neutral}, @code{\@dots{}Off} oder @code{\un@dots{}}, weil
393 diese intern @code{\revert} verwenden und nicht @code{\override}, sodass
394 ein @code{\once} Präfix hier keine Auswirkungen hat.
397 @node Der overrideProperty-Befehl
398 @unnumberedsubsubsec Der @code{@bs{}overrideProperty}-Befehl
399 @translationof The overrideProperty command
401 @cindex overrideProperty-Befehl
403 @funindex \overrideProperty
404 @funindex overrideProperty
406 Es gibt eine andere Form des @code{override}-Befehls,
407 @code{\overrideProperty} (überschreibe Eigenschaft),
408 welcher ab und zu benötigt wird. Es wird hier nur der
409 Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert
410 in @rextend{Schwierige Korrekturen}.
411 @c Maybe explain in a later iteration -td
414 @node Der tweak-Befehl
415 @unnumberedsubsubsec Der @code{@bs{}tweak}-Befehl
416 @translationof The tweak command
423 Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak}
424 (engl. optimieren). Er wird eingesetzt um Eigenschaften
425 nur eines Objektes von mehreren Objekten zu verändern,
426 die zum selben Musik-Zeitpunkt
427 auftreten, wie etwa die Noten eines Akkordes. Ein
428 @code{\override} würde alle Noten des Akkords beeinflussen,
429 während mit @code{\tweak} nur das nächste Objekt der
430 Eingabe geändert wird.
432 Hier ein Beispiel. Angenommen, die Größe des mittleren
433 Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert
434 werden. Schauen wir zuerst, was wir mit
435 @code{\once \override} erhalten:
437 @cindex Schriftgröße, Beispiel
438 @cindex NoteHead, Beispiel für override
439 @cindex Notenkopf, Beispiel für Veränderung
441 @lilypond[quote,ragged-right,verbatim]
444 \once \override NoteHead.font-size = #-3
450 Wie man sehen kann, beeinflusst @code{override} @emph{alle}
451 Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten
452 eines Akkordes zum selben Musik-Moment auftreten und
453 die Funktion von @code{\once} ist es, die Optimierung auf
454 an allen Objekten auszuführen, die zum selben Musik-Moment
455 auftreten wie der @code{\override}-Befehl.
457 Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich
458 auf das direkt folgende Element in der Eingabe-Datei. In seiner
459 einfachsten Form ist der Befehl nur an Objekten wirksam, die direkt
460 vom vorhergehenden Element erstellt worden sind, insbesondere
461 Notenköpfe und Artikulation.
463 Um also zu unserem Beispiel zurückzukommen, könnte man die
464 mittlere Note eines Akkordes auf diese Weise ändern:
466 @cindex font-size-Eigenschaft, Beispiel
467 @cindex Schriftgröße, Beispiel
468 @cindex @code{\tweak}-Beispiel
470 @lilypond[quote,ragged-right,verbatim]
473 <c \tweak font-size #-3 e g>4
477 Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
478 von der des @code{\override}-Befehls unterscheidet. Der
479 Kontext dürfen nicht angegeben werden, denn
480 das würde zu einem Fehler führen. Sowohl Kontext als auch das Layout-Objekt sind
481 durch das folgende Element im Inputstream impliziert. Hier sollte auch
482 kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte
483 Syntax des @code{\tweak}-Befehls ist also
486 \tweak @var{layout-eigenschaft} #@var{Wert}
489 Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur
490 eine von mehreren Artikulationen zu ändern, wie im nächsten
491 Beispiel zu sehen ist.
493 @cindex Farb-Eigenschaft, Beispiel
494 @cindex @code{\tweak}-Beispiel
496 @lilypond[quote,fragment,ragged-right,verbatim]
498 -\tweak color #red ^"Red"
499 -\tweak color #green _"Green"
503 Beachten Sie, dass ein Artikulationsmodifikator vor dem @code{\tweak}-Befehl
504 geschrieben werden muss, weil auch der @code{\tweak}-Ausdruck als
505 Artikulation angefügt wird. Im Falle von mehreren Richtungsmodifikatoren
506 (@code{^} or @code{_}) gilt der Modifikator links außen, weil er als
507 letzter angefügt wird.
509 @cindex @code{\tweak}, Versetzungszeichen
510 @cindex @code{\tweak}, bestimmtes Layout-Objekt
512 Objekte wie Hälse und Versetzungszeichen werden später erstellt und nicht
513 direkt aus dem vorhergehenden Ereignis. Es ist dennoch möglich, @code{\tweak}
514 mit solchen indirekt erstelltn Objekten zu verwenden, indem man die
515 Layout-Objekte direkt benennt, vorausgesetzt dass LilyPond ihre Herkunft
516 bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
518 @lilypond[quote,fragment,ragged-right,verbatim]
519 <\tweak Accidental.color #red cis''4
520 \tweak Accidental.color #green es''
524 Diese Langform des @code{\tweak}-Befehls kann wie folgend beschrieben werden:
527 \tweak @var{layout-object}.@var{layout-property} @var{value}
530 @cindex Triolen, geschachtelt
531 @cindex N-tolen, geschachtelt
532 @cindex Klammer, Triole
533 @cindex Triolenklammer
534 @cindex N-tolenklammer
535 @cindex Komplizierte Rhythmen, Schachtelung von
537 @funindex TupletBracket
539 Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das
540 Aussehen einer vor mehreren geschachtelten Triolenklammern
541 geändert werden soll, die zum selben Zeitpunkt beginnen.
542 Im folgenden Beispiel beginnen die lange Klammer und die
543 erste Triolenklammer zum selben Zeitpunkt, sodass ein
544 @code{\override}-Befehl sich auf beide beziehen würde.
545 In dem Beispiel wird @code{\tweak} benutzt, um zwischen
546 ihnen zu unterscheiden. Der erste @code{\tweak}Befehl
547 gibt an, dass die lange Klammer über den Noten gesetzt
548 werden soll, und der zweite, dass die Zahl der rhythmischen
549 Aufteilung für die erste der kurzen Klammern in rot
552 @cindex Farb-Eigenschaft, Beispiel
553 @cindex @code{\tweak}-Beispiel
554 @cindex Richtungs-Eigenschaft, Beispiel
555 @cindex color-Eigenschaft, Beispiel
556 @cindex direction-Eigenschaft, Beispiel
558 @lilypond[quote,ragged-right,verbatim]
563 \tuplet 3/2 { c8[ c c] }
564 \tuplet 3/2 { c8[ c c] }
565 \tuplet 3/2 { c8[ c c] }
570 Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt
571 beginnen, kann ihr Aussehen auf die übliche Art mit dem
572 @code{\override}-Befehl geändert werden:
574 @cindex text-Eigenschaft, Beispiel
575 @cindex tuplet-number-Funktion, Beispiel
576 @cindex transparent-Eigenschaft, Beispiel
577 @cindex TupletNumber, Beispiel zur Veränderung
578 @cindex Triolennummer, Beispiel zur Veränderung
579 @cindex Triolen-Nummer-Funktion, Beispiel
581 @c NOTE Tuplet brackets collide if notes are high on staff
583 @lilypond[quote,ragged-right,verbatim]
585 \tuplet 3/2 { c'8[ c c] }
586 \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
590 \once \override TupletNumber.transparent = ##t
591 \tuplet 3/2 { c8[ c c] }
592 \tuplet 3/2 { c8[ c c] }
600 @ruser{Der tweak-Befehl}.
602 @node Der single-Präfix
603 @unnumberedsubsubsec Der @code{@bs{}single}-Präfix
604 @translationof The single prefix
607 @cindex tweak, von override erzeugt
609 Nehmen wir einmal an, wir möchten bestimmte Noten betonen, indem wir ihre
610 Köpfe rot einfärben und sie außerdem vergrößern. Damit das einfach zu
611 machen ist nehmen wir ferner an, wir hätten dafür eine Funktion definiert:
613 @lilypond[quote,verbatim]
615 \override NoteHead.color = #red
616 \override NoteHead.font-size = 2
619 c''4 a \once \emphNoteHead f d |
623 Der @code{\once} Präfix funktioniert wunderbar, wenn es darum geht einzelne
624 Noten oder ganze Akkorde zu betonen, jedoch versagt er, gilt es eine einzelne
625 Note @emph{innerhalb} eines Akkordes zu betonen. Wir haben schon gesehen,
626 wie @code{\tweak} dennoch dazu gebracht werden kann, siehe
627 @ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl}. Aber
628 @code{\tweak} kann nicht auf eine Funktion angewandt werden; hier
629 kommt @code{\single} ins Spiel:
631 @lilypond[quote,verbatim]
633 \override NoteHead.color = #red
634 \override NoteHead.font-size = 2
637 <c'' a \single \emphNoteHead f d>4
641 Zusammenfassend kann man sagen, @code{\single} wandelt overrides in tweaks
642 sodass bei mehreren zeitgleichen musiklaischen Objekten (wie die Notenköpfe
643 eines Akkords), man mit @code{\single} lediglich ein einzelnes Objekt
644 beeinflusst, nämlich dasjenige, was im direkt folgenden musikalischen
645 Ausdruck steckt. Das ist anders, als @code{\once}, welches alle diese
648 Man kann so @code{\single} dafür verwenden, jede kleine Funktion, die
649 lediglich overrides enthält auf einzelne Noten innerhalb eines Akkords
650 anzuwenden. Es sei jedoch darauf hingewiesen, @code{\single} wandelt
651 weder @code{\revert}, noch noch @code{\set} oder @code{\unset} in tweaks.
655 @ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl},
656 @ref{Variablen für Layout Anpassungen einsetzen}.
659 @node Die Referenz der Programminterna
660 @section Die Referenz der Programminterna
661 @translationof The Internals Reference manual
663 @cindex Referenz der Programminterna
664 @cindex Programminterna, Referenz
667 * Eigenschaften von Layoutobjekten::
668 * Eigenschaften die Schnittstellen besitzen können::
669 * Typen von Eigenschaften::
672 @node Eigenschaften von Layoutobjekten
673 @subsection Eigenschaften von Layoutobjekten
674 @translationof Properties of layout objects
676 @cindex Eigenschaften von Layout-Objekten
677 @cindex Eigenschaften von Grobs
678 @cindex Grobs, Eigenschaften von
679 @cindex Layout-Objekte, Eigenschaften von
680 @cindex Property (Layout-Objekte, Grobs)
681 @cindex Regerenz der Interna
683 Angenommen, in Ihrer Partitur tritt ein Legatobogen
684 auf, der Ihrer Meinung nach zu dünn ausgefallen ist.
685 Sie würden ihn gerne etwas schwerer gezeichnet
686 sehen. Wie gehen Sie vor? Von den Anmerkungen in
687 früheren Abschnitten wissen Sie schon, dass LilyPond
688 sehr flexibel ist und eine derartige Modifikation
689 möglich sein sollte, und Sie erraten vielleicht,
690 dass ein @code{\override}-Befehl angebracht ist.
691 Aber gibt es eine Eigenschaft für die Dicke eines
692 Legatobogens (engl. slur), und wenn es sie gibt,
693 auf welche Weise lässt sie sich verändern? Hier
694 kommt die Referenz der Interna zur Geltung. Dort
695 finden sich alle Informationen, um den beschriebenen
696 und alle anderen @code{\override}-Befehle zu
699 Bevor Sie jetzt in die Referenz der Interna wechseln, ist
700 eine Warnung angebracht. Es handelt sich um ein
701 @strong{Referenz}dokument, was heißt, dass es sehr
702 wenig oder gar keine Erklärungen enthält: seine Aufgabe
703 ist es, Information klar und genau darzustellen. Das
704 bedeutet, dass es auf den ersten Blick entmutigend
705 wirkt. Die Einführung und Erklärung in diesem Abschnitt
706 wird Ihnen aber schnell ermöglichen, genau die Information
707 aus der Referenz zu entnehmen, die Sie benötigen.
709 Beachten Sie, dass die Referenz der Interna nur auf Englisch
710 existiert. Um die Eigenschaftsbezeichnung eines bestimmten
711 Objektes zu finden, können Sie das Glossar (siehe
712 @rglosnamed{Top,Musikglossar})
714 die englischen Begriffe in viele andere Sprachen übersetzt sind.
716 @cindex Override-Beispiel
717 @cindex Referenz der Interna, Benutzung
718 @cindex IR (Referenz der Interna), Benutzung
719 @cindex @code{\addlyrics}-Beispiel
721 Das Vorgehen soll an einem konkreten Beispiel einer echten
722 Komposition demonstriert werden. Hier das Beispiel:
724 @c Mozart, Die Zauberflöte Nr. 7 Duett
726 @lilypond[quote,verbatim]
731 r4 bes'8 bes[( g]) g |
732 g8[( es]) es d[( f]) as |
736 The man who | feels love's sweet e -- | mo -- tion
741 Angenommen also, wir wollen die Legatobögen etwas
742 dicker setzten. Ist das möglich? Die Legatobögen sind mit
743 Sicherheit ein Layout-Objekt, die Frage muss also lauten:
744 @qq{Gibt es eine Eigenschaft von Legatobögen, die die
745 Dicke bestimmt?} Um diese Frage zu beantworten, müssen
746 wir in der Referenz der Interna ( kurz IR) nachschauen.
748 Die IR für die LilyPond-Version, die Sie benutzen, findet sich
749 auf der LilyPond-Webseite unter der Adresse
750 @uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite
751 und klicken Sie auf den Link zur Referenz der Interna.
752 @c Addition for German users
753 Die Sprache ändert sich ab hier nach englisch. Für diese Übung
754 sollten Sie die HTML-Version benutzen, nicht die
755 @qq{auf einer großen Seite} oder die PDF-Version.
756 Damit Sie die nächsten Absätze verstehen können, müssen Sie
757 genauso vorgehen, während Sie weiterlesen.
759 Unter der Überschrift @strong{Top} befinden sich fünf Links.
760 Wählen Sie den Link zum @emph{Backend}, wo sich die Information
761 über Layout-Objekte befindet. Hier, unter der Überschrift
762 @strong{Backend}, wählen Sie den Link @emph{All layout objects}.
763 Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte,
764 die in Ihrer LilyPond-Version benutzt werden, in alphabetischer
765 Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften
766 der Legatobögen (engl. slur) werden aufgelistet.
768 Eine alternative Methode, auf diese Seite zu gelangen, ist von
769 der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen
770 findet sich ein Link zur Referenz der Interna. Dieser Link führt
771 Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben,
772 wie die Bezeichnung des Layout-Objektes lauten könnte, das sie
773 ändern wollen, ist es oft schneller, direkt zur IR zu gehen und
776 Der Slur-Seite in der IR können wir entnehmen, dass
777 Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt
778 werden. Dann werden die Standardeinstellungen aufgelistet.
779 Schauen Sie sich die Liste an, ob sie eine Eigenschaft
780 enthält, mit der die Dicke von Legatobögen kontrolliert werden kann.
781 Sie sollten folgendes finden:
784 @code{thickness} (number)
786 Line thickness, generally measured in @code{line-thickness}
789 Das sieht ganz danach aus, als ob damit die Dicke geändert
790 werden kann. Es bedeutet, dass der Wert von
791 @code{thickness} einfach eine Zahl (@emph{number}) ist,
792 dass der Standardwert 1.2 ist, und dass die Einheit
793 für die Dicke eine andere Eigenschaft mit der
794 Bezeichnung @code{line-thickness} ist.
796 Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen
797 in der IR, aber wir haben schon genug Informationen, um
798 zu versuchen, die Dicke eines Legatobogens zu ändern. Die
799 Bezeichnung des Layout-Objekts ist offensichtlich @code{Slur}
800 und die Bezeichnung der Eigenschaft, die geändert werden soll
801 @code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein,
802 denn der Bogen soll ja dicker werden.
804 Den benötigten @code{\override}-Befehl können wir jetzt einfach
805 konstruieren, indem wir die Werte für die Bezeichnungen in den
806 Modellbefehl einfügen und den Kontext auslassen. Setzen wir
807 einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
808 Befehl auch funktioniert. Also:
811 \override Slur.thickness = #5.0
814 Vergessen Sie nicht das@tie{}@code{#} vor dem neuen Wert!
816 Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben
817 werden?} Solange wir uns noch im Lernstadium befinden, ist
818 die beste Antwort: @qq{Innerhalb der Noten, vor den ersten
819 Legatobogen und nahe bei ihm.} Also etwa so:
821 @cindex Legatobogen, Beispiel für Veränderung
822 @cindex thickness-Eigenschaft, Beispiel
823 @cindex Dicke-Eigenschaft, Beispiel
825 @lilypond[quote,verbatim]
830 % Increase thickness of all following slurs from 1.2 to 5.0
831 \override Slur.thickness = #5.0
832 r4 bes'8 bes[( g]) g |
833 g8[( es]) es d[( f]) as |
837 The man who | feels love's sweet e -- | mo -- tion
843 und wirklich wird der Legatobogen dicker.
845 Das ist also die grundlegende Herangehensweise,
846 @code{\override}-Befehl zu formulieren. Es gibt einige
847 zusätzliche Komplikationen, denen wir uns später widmen
848 werden, aber Sie haben jetzt das Handwerkszeug, um Ihre
849 eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas
850 Übung benötigen. Die sollen Sie durch die folgenden Übungen
853 @subsubsubheading Den Kontext finden
855 @cindex Kontext, Finden und identifizieren
857 Manchmal muss dennoch der Kontext spezifiziert werden.
858 Welcher aber ist der richtige Kontext? Wir könnten raten,
859 dass Legatobögen sich im @code{Voice}-Kontext befinden,
860 denn sie sind immer einzelnen Melodielinien zugewiesen.
861 Aber wir können uns dessen nicht sicher sein. Um unsere
862 Annahme zu überprüfen, gehen wir wieder zu der Seite im
863 IR, die die Legatobögen beschreibt und die Überschrift
864 @emph{Slur} hat. Dort steht: @qq{Slur objects are created
865 by: Slur engraver}. Legatobögen werden also in dem Kontext
866 erstellt, in dem sich der @code{Slur_engraver} befindet.
867 Folgen Sie dem Link zu der @code{Slur_engraver}-Seite.
868 Unten auf der Seite steht, dass der @code{Slur_engraver}
869 sich in fünf Stimmen-Kontexten befindet, unter anderem
870 auch im normalen @code{Voice}-Kontext. Unsere Annahme
871 war also richtig. Und weil @code{Voice} einer der Kontexte
872 der untersten Ebene ist, welcher eindeutig schon dadurch
873 definiert ist, dass wir Noten eingeben, kann er an dieser Stelle
874 auch weggelassen werden.
876 @subsubsubheading Nur einmal mit \override verändern
878 @cindex Override nur einmal
879 @cindex once override
884 Im Beispiel oben wurden @emph{alle} Legatobögen dicker
885 gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen
886 dicker haben. Das können Sie mit dem @code{\once}-Befehl
887 erreichen. Er wird direkt vor den @code{\override}-Befehl
888 gesetzt und bewirkt, dass nur der Bogen geändert wird, der
889 @strong{unmittelbar an der nächsten Note beginnt.} Wenn
890 die nächste Note keinen Bogenbeginn hat, dann passiert
891 gar nichts -- der Befehl wird nicht gespeichert, sondern einfach
892 vergessen. Der Befehl, mit @code{\once} zusammen benutzt,
893 muss also wie folgt positioniert werden:
895 @cindex Legatobogen, Beispiel zur Veränderung
896 @cindex thickness-Eigenschaft, Beispiel
898 @lilypond[quote,verbatim]
904 % Increase thickness of immediately following slur only
905 \once \override Slur.thickness = #5.0
907 g8[( es]) es d[( f]) as |
911 The man who | feels love's sweet e -- | mo -- tion
917 Jetzt bezieht er sich nur noch auf den ersten Legatobogen.
919 Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl
922 @subsubsubheading Rückgängig machen
925 @cindex Rückgängig machen
926 @cindex Wiederherstellen von Standardeinstellungen
927 @cindex Standardeinstellungen, Wiederherstellen
932 Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen
933 dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen,
934 jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende
935 Note gestellt, an welcher der Bogen beginnt:
937 @cindex Legatobogen, Beispiel zur Veränderung
938 @cindex thickness-Eigenschaft, Beispiel
940 @lilypond[quote,verbatim]
946 % Increase thickness of immediately following slur only
947 \once \override Slur.thickness = #5.0
949 % Increase thickness of immediately following slur only
950 \once \override Slur.thickness = #5.0
951 g8[( es]) es d[( f]) as |
955 The man who | feels love's sweet e -- | mo -- tion
961 Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle
962 dessen später den @code{\revert}-Befehl einsetzen, um die
963 @code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen:
965 @cindex Legatobogen, Beispiel zur Veränderung
966 @cindex thickness-Eigenschaft, Beispiel
968 @lilypond[quote,verbatim]
974 % Increase thickness of all following slurs from 1.2 to 5.0
975 \override Slur.thickness = #5.0
978 % Revert thickness of all following slurs to default of 1.2
979 \revert Slur.thickness
984 The man who | feels love's sweet e -- | mo -- tion
990 Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige
991 Eigenschaft, die mit @code{\override} geändert worden ist, wieder in
992 ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können
993 Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche
996 Damit endet die Einleitung in die Referenz der Interna (IR) und die
997 grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren
998 Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten
999 der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten
1000 zu geben, die relevante Information dort zu finden. Die Beispiele werden
1001 Schritt für Schritt immer weniger Erklärungen beinhalten.
1004 @node Eigenschaften die Schnittstellen besitzen können
1005 @subsection Eigenschaften, die Schnittstellen besitzen können
1006 @translationof Properties found in interfaces
1008 @cindex Interface-Eigenschaften
1009 @cindex Eigenschaften von Interfaces
1010 @cindex Schnittstellen, Eigenschaften von
1011 @cindex Eigenschaften von Schnittstellen
1013 Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für
1014 ein @code{\override}-Befehl wird dazu benötigt? Schauen wir
1015 uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects},
1016 wie auch schon zuvor. Welches Objekt könnte die Darstellung des
1017 Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText},
1018 das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften
1019 an, die verändert werden können. Dazu gehört
1020 @code{font-series} und @code{font-size}, aber nichts, womit man kursiven
1021 Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen
1022 Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen
1023 Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften
1024 zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet;
1026 @code{font-interface}.
1028 Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden
1029 und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften
1032 Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText}
1033 beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version
1034 der IR) an Eigenschaften, die von @code{LyricText} unterstützt
1035 werden. Diese Liste enthält sieben Einträge, darunter auch
1036 @code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften,
1037 die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}.
1039 Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann,
1040 um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch
1041 @code{font-shape(symbol)}, wobei @code{symbol} auf die Werte
1042 @code{upright} (gerade), @code{italics} (kursiv) oder @code{caps}
1043 (Kapitälchen) gesetzt werden kann.
1045 Sie werden gemerkt haben, dass @code{font-series} und @code{font-size}
1046 hier auch aufgelistet sind. Es stellt sich die Frage, warum diese
1047 allgemeinen Schriftarteigenschaften @code{font-series} und
1048 @code{font-size} sowohl unter der Überschrift
1049 @code{LyricText} als unter dem @code{font-interface} aufgelistet
1050 sind, aber @code{font-shape} befindet sich nur im
1051 @code{font-interface}? Die Antwort ist: Die globalen Einstellungen
1052 von @code{font-series} und @code{font-size} werden geändert, wenn
1053 ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape}
1054 wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der
1055 Überschrift @code{LyricText} beinhalten dann die Werte der
1056 Standardeinstellungen dieser zwei Eigenschaften, wenn es sich
1057 um ein @code{LyricText}-Objekt handelt. Andere Objekte,
1058 die auch das @code{font-interface} unterstützen, setzen diese
1059 Eigenschaften anders, wenn sie erstellt werden.
1061 Versuchen wir nun einen @code{\override}-Befehl zu konstruieren,
1062 der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung
1063 @code{LyricText}, die Eigenschaft ist @code{font-shape}
1064 und der Wert @code{italic}. Wie vorher schon lassen wir den
1067 Am Rande sei auf das wichtige Detail hingewiesen, dass die Werte für
1068 manche Eigenschaften Symbole sind, wie z.B. @code{italic} und dass
1069 diese mit einem Apostroph (@code{'}) gekennzeichnet werden müssen.
1070 Symbole sind besondere Bezeichnungen, die LilyPond intern
1071 bekannt sind. Im Unterschied hierzu gibt es auch beliebige
1072 Zeichenketten, die immer mit Anführungszeichen, also
1073 als @code{"Zeichenkette"} auftreten. Für weitere
1074 Einzelheiten zu Zeichenketten und Werten, siehe
1075 @rextend{Scheme-Tutorium}.
1077 Gut, der @code{\override}-Befehl, mit dem der Gesangstext
1078 kursiv gesetzt wird, lautet:
1081 \override LyricText.font-shape = #'italic
1085 und er muss direkt vor den Text gesetzt werden, auf den er sich
1088 @cindex font-shape-Eigenschaft, Beispiel
1089 @cindex LyricText, Beispiel zur Veränderung
1090 @cindex kursiv, Beispiel
1091 @cindex @code{\addlyrics}, Beispiel
1093 @lilypond[quote,ragged-right,verbatim]
1098 r4 bes'8 bes[( g]) g |
1099 g8[( es]) es d[( f]) as |
1103 \override LyricText.font-shape = #'italic
1104 The man who | feels love's sweet e -- | mo -- tion
1110 Jetzt wird der Text kursiv gesetzt.
1112 @warning{Innerhalb von Gesangstext muss immer ein
1113 Leerzeichen zwischen der letzten Silbe und der schließenden
1114 Klammer gesetzt werden.}
1118 Erweitern: @rextend{Scheme-Tutorium}.
1121 @node Typen von Eigenschaften
1122 @subsection Typen von Eigenschaften
1123 @translationof Types of properties
1125 @cindex Eigenschaftsarten
1127 Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu
1128 tun: @code{number} (Zahl) und @code{symbol}. Damit
1129 ein Befehl funktioniert, muss der Wert einer Eigenschaft
1130 vom richtigen Typ sein und die Regeln befolgen, die
1131 für diesen Typ gelten. Der Eigenschaftstyp ist in der
1132 IR in Klammern hinter der Eigenschaftsbezeichnung
1133 angegeben. Hier eine Liste der Typen, die Sie vielleicht
1134 benötigen werden, mit den Regeln, die für den jeweiligen
1135 Typ gelten und einigen Beispielen. Sie müssen immer
1136 ein Rautenzeichen (@code{#}) vor den Typeintrag setzen,
1137 wenn sie in einem @code{\override}-Befehl benutzt werden,
1138 auch dann, wenn der Wert selbst bereits mit@tie{}@code{#}
1139 anfängt. Alle Beispiele verwenden ausschließlich Konstanten.
1140 Für die Verwendungen von mit Scheme berechneten Werten siehe
1141 @rextend{Berechnungen in Scheme}.
1143 @multitable @columnfractions .2 .45 .35
1144 @headitem Eigenschaftstyp
1148 @tab Entweder wahr oder falsch, dargestellt als @code{#t} oder @code{#f}
1149 @tab @code{#t}, @code{#f}
1150 @item Dimension (in Notenlinienabständen)
1151 @tab Eine Dezimalzahl (in Notenlinienabstand-Einheiten)
1152 @tab @code{2.5}, @code{0.34}
1154 @tab Eine gültige Richtungskonstante oder das numerische Äquivalent
1155 (@code{0} or @code{CENTER} bezeichnen eine neutrale Richtung)
1156 @tab @code{LEFT}, @code{CENTER}, @code{UP},
1157 @code{1}, @w{@code{-1}}
1159 @tab Eine ganze Zahl
1160 @tab @code{3}, @code{-1}
1162 @tab Eine Folge von Konstanten oder Symbolen in Klammern, angeführt von einem Apostroph;
1163 Einträge durch Leerzeichen voneinander getrennt
1164 @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
1165 @code{'(1.0 0.25 0.5)}
1166 @item Textbeschriftung (markup)
1167 @tab Beliebige gültige Beschriftung
1168 @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
1170 @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
1172 @tab @code{(ly:make-moment 1/4)},
1173 @code{(ly:make-moment 3/8)}
1175 @tab Eine beliebige positive oder negative Dezimalzahl
1176 @tab @code{3}, @w{@code{-2.45}}
1177 @item Paar (Zahlenpaar)
1178 @tab Zwei Zahlen getrennt durch @qq{Leerzeichen . Leerzeichen}, eingeklammert
1179 und angeführt von einem Apostroph
1180 @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1182 @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft
1183 gültig sind, angeführt von einem Apostroph
1184 @tab @code{'italic}, @code{'inside}
1186 @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen)
1187 @tab @code{bend::print}, @code{ly:text-interface::print},
1190 @tab Konstanten, getrennt durch Leerzeichen, eingeschlossen in
1191 @code{#(}@dots{}@code{)}.
1192 @tab @code{#(#t #t #f)}
1197 Erweitern: @rextend{Scheme-Tutorium}.
1200 @node Erscheinung von Objekten
1201 @section Erscheinung von Objekten
1202 @translationof Appearance of objects
1204 In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der
1205 vorigen Abschnitte in der Praxis angewandt werden können,
1206 um das Aussehen des Musiksatzes zu beeinflussen.
1209 * Sichtbarkeit und Farbe von Objekten::
1210 * Größe von Objekten::
1211 * Länge und Dicke von Objekten::
1215 @node Sichtbarkeit und Farbe von Objekten
1216 @subsection Sichtbarkeit und Farbe von Objekten
1217 @translationof Visibility and color of objects
1219 In Unterrichtsmaterial für den Musikunterricht wird oft
1220 eine Partitur dargestellt, in der bestimmte Notationselemente
1221 fehlen, so dass der Schüler die Aufgabe bekommt, die
1222 nachzutragen. Ein einfaches Beispiel ist etwa, die
1223 Taktstriche zu entfernen, damit der Schüler sie selber zeichnen
1224 kann. Aber die Taktstriche werden normalerweise automatisch
1225 eingefügt. Wie verhindern wir, dass sie ausgegeben werden?
1227 Bevor wir uns hieran machen, sei daran erinnert, dass
1228 Objekteigenschaften in sogenannten @emph{Schnittstellen}
1229 -- engl. interface -- gruppiert sind, siehe auch
1230 @ref{Eigenschaften die Schnittstellen besitzen können}. Das dient ganz einfach
1231 dazu, die Eigenschaften zusammenzufassen, die üblicherweise
1232 zusammen benötigt werden -- wenn eine davon für ein Objekt
1233 gilt, dann auch die anderen. Manche Objekte brauchen die
1234 Eigenschaften von der einen Schnittstelle, andere von einer
1235 anderen. Die Schnittstellen, die die Eigenschaften von einem
1236 bestimmten Grob beinhalten, sind in der IR unten auf der
1237 Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften
1238 können betrachtet werden, indem die Seite der entsprechenden
1239 Schnittstelle geöffnet wird.
1241 Zu Information, wie man Eigenschaften von Grobs findet, siehe
1242 @ref{Eigenschaften von Layoutobjekten}. Wir benutzen also jetzt
1243 die selbe Methode um in der IR das Layout-Objekt zu finden,
1244 dass für die Taktstriche zuständig ist. Über die Überschriften
1245 @emph{Backend} und @emph{All layout objects} kommen
1246 wir zu einem Layout-Objekt mit der Bezeichnung
1247 @code{BarLine} (engl. Taktstrich). Seine Eigenschaften
1248 beinhalten zwei, die über die Sichtbarkeit entscheiden:
1249 @code{break-visibility} und @code{stencil}.
1250 @code{BarLine} unterstützt auch einige Schnittstellen,
1251 unter anderem @code{grob-interface}, wo wir eine
1252 @code{transparent} und eine @code{color}-Eigenschaft
1253 finden. Alle können die Sichtbarkeit von Taktstriche (und
1254 natürlich auch die Sichtbarkeit von vielen anderen Objekten)
1255 beeinflussen. Schauen wir uns diese Eigenschaften eine
1256 nach der anderen an.
1259 * Die stencil-Eigenschaft::
1260 * Die break-visibility-Eigenschaft::
1261 * Die transparent-Eigenschaft::
1262 * Die color-Eigenschaft::
1265 @node Die stencil-Eigenschaft
1266 @unnumberedsubsubsec Die @code{stencil}-Eigenschaft (Matrize)
1267 @translationof The stencil property
1269 @cindex Stencil-Eigenschaft
1270 @cindex Matrizen-Eigenschaft
1272 Diese Eigenschaft kontrolliert die Erscheinung der Taktstriche,
1273 indem sie das Symbol bestimmt, das ausgegeben werden soll.
1274 Wie bei vielen anderen Eigenschaften auch, kann sie so
1275 eingestellt werden, dass sie nichts ausgibt, indem ihr Wert
1276 auf @code{#f} (falsch) gesetzt wird. Ein Versuch also,
1277 wie vorher, indem wir den impliziten Kontext (@code{Voice})
1280 @cindex Taktstrich, Beispiel zur Veränderung
1281 @cindex stencil-Eigenschaft, Beispiel
1283 @lilypond[quote,ragged-right,verbatim]
1286 \override BarLine.stencil = ##f
1287 c''4 b8 c d16 c d8 |
1288 g,8 a16 b8 c d4 e16 |
1293 Die Taktstriche werden aber immer noch angezeigt. Was ist da
1294 falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf
1295 die Seite, die die Eigenschaften für @code{BarLine} angibt.
1296 Oben auf der Seite steht: @qq{Barline objects are created
1297 by: Bar_engraver}. Schauen Sie sich die
1298 @code{Bar_engraver}-Seite an. Unten auf der Seite steht
1299 eine Liste der Kontexte, in denen der Takt-Engraver
1300 funktioniert. Alle Kontexte sind @code{Staff}-Typen (also
1301 Notensystem-Typen). Der Grund, warum der
1302 @code{\override}-Befehl nicht funktioniert hat, liegt
1303 also darin, dass das Taktstrich-Objekt (@code{BarLine}) sich nicht
1304 im @code{Voice}-Kontext befindet. Wenn der Kontext
1305 falsch angegeben wird, bewirkt der Befehl einfach gar
1306 nichts. Keine Fehlermeldung wird ausgegeben und auch
1307 nichts in die Log-Datei geschrieben. Versuchen wir also,
1308 den richtigen Kontext mit anzugeben:
1310 @cindex Taktstrich, Beispiel zur Veränderung
1311 @cindex stencil-Eigenschaft, Beispiel
1313 @lilypond[quote,ragged-right,verbatim]
1316 \override Staff.BarLine.stencil = ##f
1317 c''4 b8 c d16 c d8 |
1318 g,8 a16 b8 c d4 e16 |
1324 Jetzt sind die Taktstriche wirklich verschwunden. Setzen der
1325 @code{stencil}-Eigenschaft auf @code{#f} wird derart häufig verwendet,
1326 dass es dafür einen eigenen Befehl gibt, @code{\omit}:
1329 @lilypond[quote,ragged-right,verbatim]
1333 c''4 b8 c d16 c d8 |
1334 g,8 a16 b8 c d4 e16 |
1340 Es sollte jedoch beachtet werden, dass das Setzen der
1341 @code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen
1342 kann, wenn die Dimensionen des Objekts für die richtige Behandlung
1343 benötigt werden. Zum Beispiel werden Fehler ausgegeben, wenn
1344 die @code{stencil}-Eigenschaft des @code{NoteHead}-Objekts auf
1345 @code{#f} gesetzt wird. Wenn dieser Fall auftritt, kann anstatt
1346 dessen die @code{point-stencil}-Funktion benutzt werden, welche
1347 den Stencil auf ein Objekt mit der Größe Null setzt:
1349 @lilypond[quote,verbatim]
1352 \once \override NoteHead.stencil = #point-stencil
1357 @node Die break-visibility-Eigenschaft
1358 @unnumberedsubsubsec The @code{break-visibility}-Eigenschaft (unsichtbar machen)
1359 @translationof The break-visibility property
1361 @cindex break-visibility-Eigenschaft
1362 @cindex Unsichtbar machen (break-visibility)
1364 Aus der Beschreibung der Eigenschaften für @code{BarLine}
1365 in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft
1366 einen Vektor mit drei Booleschen Werten benötigt. Diese
1367 kontrollieren jeweils, ob die Taktstriche am Ende einer Zeile,
1368 in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben
1369 werden. Wenn also alle Taktstriche unsichtbar sein sollen, wie in
1370 unserem Beispiel, brauchen wir den Wert @code{#(#f #f #f)}, (den es auch
1371 unter dem symbolischen Namen @code{all-invisible} gibt).
1372 Versuchen wir es also, und berücksichtigen wir auch den
1373 @code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{##}
1374 vor der öffnenden Klammer schreiben müssen:
1375 @code{#} wird benötigt als Teil des Wertes, um einen Vektor zu
1376 signalisieren, und das erste@tie{}@code{#} wird benötigt, um
1377 den Wert in einem @code{\override}-Befehl anzuführen.
1379 @cindex Taktstrich, Beispiel zur Veränderung
1380 @cindex break-visibility-Eigenschaft, Beispiel
1382 @lilypond[quote,ragged-right,verbatim]
1385 \override Staff.BarLine.break-visibility = ##(#f #f #f)
1386 c''4 b8 c d16 c d8 |
1387 g,8 a16 b8 c d4 e16 |
1393 Auch auf diesem Weg gelingt es, die Taktstriche unsichtbar zu machen.
1395 @node Die transparent-Eigenschaft
1396 @unnumberedsubsubsec Die @code{transparent}-Eigenschaft (durchsichtig)
1397 @translationof The transparent property
1399 @cindex transparent-Eigenschaft
1400 @cindex Durchsichtig machen (transparent)
1402 Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite
1403 in der IR geht hervor, dass die @code{transparent}-Eigenschaft
1404 boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig
1405 gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig
1406 gemacht werden, anstatt die Taktstriche durchsichtig zu machen.
1407 Wir brauchen also wieder die Grob-Bezeichnung für die Taktart.
1408 Auf der @qq{All layout objects}-Seite in der IR müssen wir die
1409 Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen
1410 Das Objekt wird vom @code{Time_signature_engraver} erstellt,
1411 der sich auch im @code{Staff}-Kontext befindet und genauso das
1412 @code{grob-interface} unterstützt, wie Sie sich
1413 überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu
1416 @cindex Taktart, Beispiel zur Veränderung
1417 @cindex transparent-Eigenschaft, Beispiel
1419 @lilypond[quote,ragged-right,verbatim]
1422 \override Staff.TimeSignature.transparent = ##t
1423 c''4 b8 c d16 c d8 |
1424 g,8 a16 b8 c d4 e16 |
1430 Auch das Setzen der @code{transparent}-Eigenschaft ist ein recht häufige
1431 Operation und so gibt es auch hierfür eine Kurzform names @code{\hide}:
1434 @lilypond[quote,ragged-right,verbatim]
1437 \hide Staff.TimeSignature
1438 c''4 b8 c d16 c d8 |
1439 g,8 a16 b8 c d4 e16 |
1445 In beiden Fällen ist die Taktangabe ist verschwunden, aber mit diesem Befehl
1446 bleibt freier Platz, wo sich die Taktangabe eigentlich befinden
1447 würde. Das braucht man vielleicht für eine Schulaufgabe, in der
1448 die richtige Taktangabe eingefügt werden soll, aber in anderen
1449 Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen,
1450 muss stattdessen die Matrize (stencil) der Taktangabe auf @code{#f} (falsch)
1453 @cindex Taktart, Beispiel zur Veränderung
1454 @cindex stencil-Eigenschaft, Beispiel
1456 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1459 \override Staff.TimeSignature.stencil = ##f
1461 g,8 a16 b8 c d4 e16 |
1467 Und der Unterschied wird deutlich: Setzen des stencil auf @code{#f} (ggf.
1468 mittels @code{\omit}) entfernt das gesamte Objekt, während man mit
1469 @code{transparent} (was auch mittels @code{\hide} eingestellt werden kann)
1470 ein Objekt unsichtbar machen kann, es aber an seinem Platz gelassen wird.
1472 @node Die color-Eigenschaft
1473 @unnumberedsubsubsec Die @code{color}-Eigenschaft (Farbe)
1474 @translationof The color property
1476 @cindex color-Eigenschaft
1477 @cindex Farb-Eigenschaft
1479 Abschließend wollen wir die Taktstriche unsichtbar machen, indem
1480 wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße
1481 Taktstrich übermalt manchmal die Taktstriche, wo sie sie kreuzt,
1482 manchmal aber auch nicht. Sie können in den Beispielen unten
1483 sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum
1484 das passiert und wie sie es kontrollieren können, werden dargestellt
1485 in @ruser{Objekte weiß malen}. Im Moment wollen wir lernen, wie
1486 man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die
1489 Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft
1490 eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das
1491 sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in
1492 internen Einheiten, aber damit Sie nicht wissen müssen, wie diese
1493 aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste
1494 Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der
1495 Tabelle in @ruser{Liste der Farben} aufgelistet sind. Beachten Sie,
1496 dass die Bezeichnungen auf Englisch sind. Um die Taktstriche auf
1497 weiß zu setzen, können Sie schreiben:
1499 @cindex Taktstrich, Beispiel zur Veränderung
1500 @cindex color-Eigenschaft, Beispiel
1502 @lilypond[quote,ragged-right,verbatim]
1505 \override Staff.BarLine.color = #white
1506 c''4 b8 c d16 c d8 |
1507 g,8 a16 b8 c d4 e16 |
1513 und die Taktstriche verschwinden in der Tat. Beachten Sie,
1514 dass @emph{white} nicht mit einem Apostroph angeführt
1515 wird -- es ist kein Symbol, sondern eine @emph{Variable}.
1516 Wird sie ausgewertet, stellt sie eine Liste mit internen
1517 Werten zu Verfügung, mit welcher die Farbe auf weiß
1518 gestellt wird. Die anderen Farben in der Liste sind auch
1519 Funktionen. Um sich zu überzeugen, dass der Befehl auch
1520 wirklich funktioniert, können Sie die Farbe auf eine der
1521 anderen Variablen dieser Liste abändern.
1528 Die zweite Art die Farbe zu ändern geschieht, indem die Liste
1529 der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste
1530 in @ruser{Liste der Farben}. Diese Namen werden durch die Funktion
1531 @code{x11-color} durch die tatsächlichen internen Farbwerte ersetzt.
1532 Das geschieht wie folgt:
1534 @cindex Taktstrich, Beispiel zur Veränderung
1535 @cindex color-Eigenschaft, Beispiel
1537 @lilypond[quote,ragged-right,verbatim]
1540 \override Staff.BarLine.color = #(x11-color 'white)
1541 c''4 b8 c d16 c d8 |
1542 g,8 a16 b8 c d4 e16 |
1548 In diesem Fall hat die Funktion @code{x11-color} ein Symbol
1549 als Argument, darum muss dem Symbol ein Apostroph vorangestellt
1550 werden, damit es nicht als Variable interpretiert wird. Beide
1551 zusammen müssen in Klammern gesetzt werden.
1558 Es gibt noch eine weitere Funktion, die RGB-Werte in die
1559 internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie
1560 braucht drei Argumente, um die Stärke von Rot, Grün und
1561 Blau darzustellen. Die Werte befinden sich zwischen
1562 0 und 1. Um also die Farbe Rot darzustellen, muss der
1563 Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß
1564 würde sein: @code{(rgb-color 1 1 1)}.
1566 @cindex Taktstrich, Beispiel zur Veränderung
1567 @cindex color-Eigenschaft, Beispiel
1569 @lilypond[quote,ragged-right,verbatim]
1572 \override Staff.BarLine.color = #(rgb-color 1 1 1)
1573 c''4 b8 c d16 c d8 |
1574 g,8 a16 b8 c d4 e16 |
1579 Schließlich gibt es noch eine Grauskala, die zu den X11-Farben
1580 gehört. Sie reicht von schwarz (@code{'grey0}) bis
1581 weiß (@code{'grey100}), in Einerschritten. Wir wollen das
1582 illustrieren, indem alle Layout-Objekte im Beispiel
1583 verschiedene Grauschattierungen erhalten:
1585 @cindex StaffSymbol, Beispiel zur Veränderung
1586 @cindex TimeSignature, Beispiel zur Veränderung
1587 @cindex Schlüssel, Beispiel zur Veränderung
1588 @cindex Notenhals, Beispiel zur Veränderung
1589 @cindex Taktstrich, Beispiel zur Veränderung
1590 @cindex Farbeigenschaft, Beispiel
1591 @cindex x11-Farben, Beispiel
1592 @cindex Taktstriche, Beispiel zur Veränderung
1593 @cindex Taktart, Beispiel zur Veränderung
1594 @cindex Clef, Beispiel zur Veränderung
1595 @cindex Stem, Beispiel zur Veränderung
1596 @cindex NoteHead, Beispiel zur Veränderung
1597 @cindex Notenkopf, Beispiel zur Veränderung
1599 @lilypond[quote,ragged-right,verbatim]
1602 \override Staff.StaffSymbol.color = #(x11-color 'grey30)
1603 \override Staff.TimeSignature.color = #(x11-color 'grey60)
1604 \override Staff.Clef.color = #(x11-color 'grey60)
1605 \override Voice.NoteHead.color = #(x11-color 'grey85)
1606 \override Voice.Stem.color = #(x11-color 'grey85)
1607 \override Staff.BarLine.color = #(x11-color 'grey10)
1608 c''4 b8 c d16 c d8 |
1609 g,8 a16 b8 c d4 e16 |
1615 Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt
1616 verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen,
1617 damit die Befehle funktionieren. Denken Sie daran, dass der
1618 Kontext sich daran orientiert, wo sich der entsprechende
1619 Engraver befindet. Den Standardkontext für Engraver finden
1620 Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver
1621 gehen, der es produziert und auf der Seite des Engravers in der
1622 IR finden Sie Information, in welchem Kontext sich der
1623 Engraver normalerweise befindet.
1626 @node Größe von Objekten
1627 @subsection Größe von Objekten
1628 @translationof Size of objects
1630 @cindex Veränderung von Objektgrößen
1631 @cindex Objektgrößen, verändern
1632 @cindex Größen von Objekten verändern
1634 Als Startpunkt wollen wir wieder ein früheres Beispiel
1635 wählen, siehe @ref{Musikalische Ausdrücke ineinander verschachteln}. Hier wurde
1636 ein neues Notensystem erstellt, wie man es für ein @rglos{ossia}
1639 @cindex alignAboveContext-Eigenschaft, Beispiel
1640 @cindex über dem System anordnen, Beispiel
1641 @cindex @code{\with}-Beispiel
1643 @lilypond[quote,ragged-right,verbatim]
1644 \new Staff ="main" {
1651 alignAboveContext = #"main" }
1659 Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe
1660 geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt.
1661 Wie man Schlüssel und Taktangabe entfernt, wissen wir schon:
1662 wir setzen den Stencil von beiden auf @code{#f}:
1664 @cindex alignAboveContext-Eigenschaft, Beispiel
1665 @cindex über dem System anordnen, Beispiel
1666 @cindex @code{\with}-Beispiel
1668 @cindex Schlüssel, Beispiel zur Veränderung
1669 @cindex Taktart, Beispiel zur Veränderung
1671 @lilypond[quote,ragged-right,verbatim]
1672 \new Staff ="main" {
1679 alignAboveContext = #"main"
1683 \omit Staff.TimeSignature
1693 wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion
1694 erforderlich ist um sicherzugehen, dass die Modifikation und
1695 die Noten sich auch auf das Ossia-System beziehen.
1697 Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext
1698 mit @code{\with} verändert, oder ob man die Stencils mit
1699 @code{\override} oder wie in diesem Fall mit @code{\omit} beeinflusst?
1700 Der größte Unterschied liegt
1701 darin, dass Änderungen, die mit @code{\with} eingeführt werden,
1702 während der Erstellung des Kontextes mit erzeugt werden und
1703 als @strong{Standardeinstellungen} für diesen Kontext während seiner
1704 gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle
1705 dynamisch in die Noten eingebettet werden -- sie führen die
1706 Änderungen synchron mit einem bestimmten Zeitpunkt in
1707 der Musik aus. Wenn die Änderungen mit @code{\unset}
1708 oder @code{\revert} rückgängig gemacht werden, werden
1709 wieder die Standardwerte eingesetzt, die also die sind, die
1710 mit einer @code{\with}-Konstruktion definiert wurden, oder
1711 wenn hier keine definiert worden sind, die normalen
1714 Manche Kontexteigenschaften können nur ein einer
1715 @code{\with}-Konstruktion verändert werden. Das sind
1716 Eigenschaften, die nicht sinnvoll mitten im System geändert
1717 werden können. @code{alignAboveContext} (Orientierung
1718 über dem Kontext) und die Parallele,
1719 @code{alignBelowContext} (Orientierung unter dem Kontext)
1720 sind zwei derartige Eigenschaften -- wenn das Notensystem
1721 einmal erstellt wurde, ist die Orientierung schon bestimmt
1722 und es wäre nicht sinnvoll, sie später zu ändern.
1724 Die Standardwerte für Layout-Objekt-Eigenschaften können
1725 auch in der @code{\with}-Konstruktion gesetzt werden.
1726 Benutzen Sie einfach den normalen @code{\override}-Befehl
1727 ohne den Kontext, denn der Kontext ist eindeutig definiert
1728 durch die Stelle, an welcher sich @code{\with} befindet.
1729 Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond
1732 Das obige Beispiel könnte also auch so aussehen:
1734 @cindex alignAboveContext-Eigenschaft, Beispiel
1735 @cindex über dem System anordnen, Beispiel
1736 @cindex @code{\with}-Beispiel
1737 @cindex stencil-Eigenschaft, Beispiel
1738 @cindex Schlüssel, Beispiel zur Veränderung
1739 @cindex Taktart, Beispiel zur Veränderung
1741 @lilypond[quote,ragged-right,verbatim]
1742 \new Staff ="main" {
1749 alignAboveContext = #"main"
1750 % Don't print clefs in this staff
1751 \override Clef.stencil = ##f
1752 % Don't print time signatures in this staff
1753 \override TimeSignature.stencil = ##f
1762 Es zeigt sich, dass wir hier ebenso die Kurzformen @code{\hide}
1763 und @code{\omit} zum Setzen der @code{transparent}-Eigenschaft und
1764 zum Entfernen des @code{stencil} verwenden können, was zu folgender
1767 @lilypond[quote,ragged-right,verbatim]
1768 \new Staff ="main" {
1775 alignAboveContext = #"main"
1776 % Don't print clefs in this staff
1778 % Don't print time signatures in this staff
1788 Nun können wir daran gehen, auch wirklich die
1789 Größe der Objekte zu ändern.
1791 Manche Layout-Objekte werden aus Glyphen erstellt,
1792 die sich in einer Schriftartdatei befinden. Dazu gehören
1793 die Notenköpfe, Versetzungszeichen, Text, Schlüssel,
1794 Taktbezeichnung, Dynamik und Gesangstext. Ihre
1795 Größe wird verändert, indem die
1796 @code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie
1797 wir bald sehen werden. Andere Layout-Objekte, wie
1798 Bögen -- oder allgemein Strecker-Objekte -- werden
1799 individuell gezeichnet, es gibt dazu also keine
1800 @code{font-size}, die mit ihnen verknüpft wäre.
1801 Weitere Eigenschaften wie die Länge von Hälsen und
1802 Taktstriche, Dicke von Balken und anderen Linien und
1803 der Abstand der Notenlinien voneinander müssen auf
1804 spezielle Weise verändert werden.
1806 In unserem Ossia-Beispiel wollen wir zuerst die
1807 Schriftgröße verändern. Das ist auf zwei Arten möglich.
1808 Entweder wir ändern die Schriftgröße für jede Objektart
1809 mit einem eigenen Befehl, etwa:
1812 \override NoteHead.font-size = #-2
1816 oder wir ändern die Größe aller Schriftobjekte, indem wir
1817 den Wert einer besonderen Eigenschaft, @code{fontSize},
1818 mit dem @code{\set}-Befehl bestimmen oder sie in
1819 eine @code{\with}-Konstruktion (ohne @code{\set} einschließen.
1825 Beide Beispiele reduzieren die Schriftgröße um zwei Schritte
1826 im Vergleich zum vorigen Wert, wobei jeder Schritt die
1827 Schriftgröße um etwa 12% verändert.
1829 Setzen wir das also in unserem Ossia-Beispiel ein:
1831 @cindex alignAboveContext-Eigenschaft, Beispiel
1832 @cindex über dem System anordnen, Beispiel
1833 @cindex @code{\with}-Beispiel
1834 @cindex stencil-Eigenschaft, Beispiel
1835 @cindex Schlüssel, Beispiel zur Veränderung
1836 @cindex Taktart, Beispiel zur Veränderung
1838 @lilypond[quote,ragged-right,verbatim]
1839 \new Staff ="main" {
1846 alignAboveContext = #"main"
1849 % Verkleinere alle Fonts um ~24%
1859 Das sieht aber immer noch nicht richtig aus. Die Notenköpfe
1860 und Fähnchen sind kleiner, aber die Hälse im Vergleich
1861 dazu zu lang und die Notenlinien zu weit auseinander.
1862 Sie müssen auch proportional zur Schriftart verkleinert
1863 werden. Der nächste Abschnitt behandelt diese Anpassung.
1866 @node Länge und Dicke von Objekten
1867 @subsection Länge und Dicke von Objekten
1868 @translationof Length and thickness of objects
1870 @cindex Entfernungen
1874 @cindex Größe, verändern
1875 @cindex Notenhalslänge, verändern
1876 @cindex Hälse, Länge verändern
1877 @cindex Notenlinien, Länge verändern
1879 Abstände und Längen werden in LilyPond üblicherweise
1880 in Notenlinienabständen (engl. staff-spaces) gemessen.
1881 Das ist der Abstand zwischen zwei Notenlinien im System.
1882 Die meisten Dicken (engl. thickness) dagegen werden in
1883 einer internen Einheit Linien-Dicke (engl. line-thickness)
1884 gemessen. Die Linien von Dynamikklammern zum Beispiel
1885 haben standardmäßig eine Dicke von einer Einheit
1886 @code{line-thickness}, während die Dicke eines
1887 Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich
1888 manche Dicken anders verhalten: die Dicke von
1889 Balken etwa wird in Notenlinienabständen gemessen.
1891 Wie also werden Längen skaliert um der Schriftgröße
1892 zu entsprechen? Das kann mit einer besonderen Funktion
1893 @code{magstep} vorgenommen werden, die genau für
1894 diesen Zweck vorhanden ist. Sie nimmt ein Argument auf,
1895 die Änderung der Schriftgröße (#-2 im obigen Beispiel)
1896 und gibt einen Skalierungsfaktor aus, der dazu dient,
1897 Objekte proportional zueinander zu verändern. So wird
1900 @cindex alignAboveContext-Eigenschaft, Beispiel
1901 @cindex über dem System anordnen, Beispiel
1902 @cindex @code{\with}-Beispiel
1903 @cindex stencil-Eigenschaft, Beispiel
1904 @cindex Schlüssel, Beispiel zur Veränderung
1905 @cindex Taktart, Beispiel zur Veränderung
1906 @cindex Notenlinienabstände verändern
1907 @cindex staff-space-Eigenschaft verändern
1908 @cindex magstep-Funktion, Beispiel
1909 @cindex Schriftart-Eigenschaft, Beispiel
1911 @lilypond[quote,ragged-right,verbatim]
1912 \new Staff ="main" {
1919 alignAboveContext = #"main"
1923 % Reduziere Halslängen und Notenlinienabstände in gleicher Weise
1924 \override StaffSymbol.staff-space = #(magstep -2)
1934 Da die Länge eines Halses und viele andere Längeneigenschaften
1935 relativ zum Wert des Notenlinienabstands (@code{staff-space})
1936 errechnet werden, werden sie auch automatisch verkleinert.
1937 Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias
1938 aus -- die horizontale Skala ist durch das Layout des Haupsystems
1939 bestimmt und wird also von diesen Größenänderungen nicht
1940 betroffen. Wenn natürlich die Größe der gesamten Noten reduziert
1941 würde, würde sich auch die horizontalen Abstände ändern. Dass
1942 wird später im Layout-Abschnitt betrachtet.
1944 Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen
1945 aller anderen Objekte können auf analoge Weise geändert
1948 Für kleine Größenänderungen, wie in dem obigen Beispiel,
1949 braucht die Dicke der verschiedenen Linien, wie Taktstriche,
1950 Notenlinien, Balken, Dynamikklammern usw. normalerweise
1951 keine spezielle Anpassung. Wenn die Dicke eines bestimmten
1952 Layout-Objektes angepasst werden muss, kann man das erreichen,
1953 indem die entsprechende @code{thickness}-Eigenschaft des
1954 Objekts mit @code{\override} verändert wird. Ein Beispiel,
1955 wie man die Dicke von Bögen ändert, wurde schon gezeigt,
1956 siehe @ref{Eigenschaften von Layoutobjekten}. Die Dicke aller
1957 gezeichneten Objekte (die also nicht aus einer Schriftart
1958 stammen) können auf gleiche Weise geändert werden.
1961 @node Positionierung von Objekten
1962 @section Positionierung von Objekten
1963 @translationof Placement of objects
1966 * Automatisches Verhalten::
1967 * within-staff (Objekte innerhalb des Notensystems)::
1968 * Objekte außerhalb des Notensystems::
1972 @node Automatisches Verhalten
1973 @subsection Automatisches Verhalten
1974 @translationof Automatic behavior
1976 @cindex within-staff-Objekte
1977 @cindex outside-staff-Objekte
1978 @cindex Objekte innerhalb des Notensystems
1979 @cindex Objekte außerhalb des Notensystems
1981 Es gibt Objekte der Notation, die zum Notensystem gehören, und
1982 andere, die außerhalb des Systems gesetzt werden müssen. Sie
1983 werden @code{within-staff}-Objekte bzw.
1984 @code{outside-staff}-Objekte genannt.
1986 @code{within-staff}-Objekte werden innerhalb des Notensystems
1987 (engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen
1988 usw. Ihre Position ist üblicherweise durch die notierte Musik
1989 bestimmt -- sie werden vertikal auf bestimmten Linien notiert
1990 oder sind an andere Objekte gebunden, die vertikal festgelegt
1991 sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen
1992 werden normalerweise automatisch vermieden. Es gibt
1993 Befehle, um dieses automatische Verhalten zu verändern, wie
1994 unten gezeigt werden soll.
1996 Objekte, die außerhalb des Notensystems gesetzt werden, sind
1997 unter Anderem Übungsmarkierungen, Text und Dynamikzeichen.
1998 LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie
1999 möglich am Notensystem zu setzen, aber nicht so nah, dass
2000 sie mit anderen Objekten kollidieren. Dabei wird die
2001 @code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft
2002 eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden
2005 Zuerst werden alle Innersystemobjekte von LilyPond gesetzt.
2006 Dann werden die Objekte außerhalb des Systems nach
2008 @code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte
2009 werden dann nacheinander gesetzt, mit der niedrigsten
2010 Priorität beginnend, und so gesetzt, dass sie nicht mit anderen
2011 Objekten kollidieren, die schon gesetzt wurden. Wenn also zwei
2012 @code{outside-staff}-Objekte um den selben Platz streiten,
2013 wird das mit der geringeren @code{outside-staff-priority} näher
2014 am System gesetzt werden. Wenn zwei Objekte die selbe Priorität
2015 haben, wird das näher am System gesetzt, welches zuerst
2018 Im folgenden Beispiel haben alle Textbeschriftungen die gleiche
2019 Priorität (weil sie nicht explizit gesetzt worden ist). Beachten Sie,
2020 dass @qq{Text3} wieder dicht am System gesetzt wurde, weil
2021 er unter @qq{Text2} passt.
2023 @cindex Textbeschriftungsbeispiel
2025 @lilypond[quote,fragment,ragged-right,verbatim]
2032 Notensysteme werden in den Standardeinstellungen auch so dicht
2033 beieinander gesetzt wie es möglich ist (mit einem minimalen Abstand).
2034 Wenn Noten sehr weit aus einem System herausragen, zwingen sie
2035 das nächste System weiter weg, wenn eine Kollision drohen würde.
2036 Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen
2037 @qq{ineinander greifen}.
2039 @lilypond[quote,ragged-right,verbatim]
2042 \relative { c'4 a, }
2045 \relative { c''''4 a, }
2051 @node within-staff (Objekte innerhalb des Notensystems)
2052 @subsection within-staff (Objekte innerhalb des Notensystems)
2053 @translationof Within-staff objects
2055 Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung
2056 von Bögen, Fingersatz und allen anderen Objekten beeinflusst,
2057 die von der Richtung der Notenhälsen abhängen -- siehe @ref{Stimmen explizit beginnen}.
2059 sind nötig, wenn polyphone Musik geschrieben wird, damit sich
2060 die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit
2061 zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das
2062 kann entweder für ganze Abschnitte, aber genauso auch nur für eine
2063 einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung
2064 bestimmt, ist die @code{direction}-Eigenschaft eines jeden Layout-Objekts.
2065 Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl
2066 an fertigen Befehlen für die üblicheren Situationen präsentiert werden,
2067 mit denen Sie gleich loslegen können.
2069 Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich
2070 oder zeigen entweder nach oben oder nach unten, andere, wie
2071 Hälse und Fähnchen, verändern auch die Position rechts oder links,
2072 je nach der Richtung, in die sie zeigen. Das wird automatisch
2073 berücksichtigt, wenn die @code{direction}-Eigenschaft verändert
2077 * Die direction-Eigenschaft::
2081 @node Die direction-Eigenschaft
2082 @unnumberedsubsubsec The @code{direction}-Eigenschaft (Richtung)
2083 @translationof The direction property
2089 @cindex hoch-Eigenschaft
2090 @cindex runter-Eigenschaft
2091 @cindex zentriert-Eigenschaft
2092 @cindex neutral-Eigenschaft
2094 Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung
2095 für Legatobögen, die bei hohen Noten oberhalb, bei tiefen Noten indessen
2096 unterhalb platziert werden. Im nächsten Takt werden beide Bögen nach
2097 unten gezwungen, im darauf folgenden Takt nach oben, um schließlich
2098 wieder auf den Standard eingestellt zu werden.
2100 @cindex Legatobogen, Beispiel zur Veränderung
2101 @cindex Richtungseigenschaft, Beispiel
2103 @lilypond[quote,fragment,verbatim]
2105 \override Slur.direction = #DOWN
2107 \override Slur.direction = #UP
2109 \revert Slur.direction
2113 Wir haben hier die Konstanten @code{DOWN} und @code{UP}
2114 eingesetzt. Sie haben die Werte @w{@code{-1}} bzw. @code{+1}, und
2115 diese numerischen Werte können ebenso benutzt werden. Auch
2116 der Wert @code{0} kann in manchen Fällen benutzt werden. Er
2117 bedeutet für die Legatobögen das gleiche wie @code{UP}, für einige
2118 andere Objekte jedoch @qq{zentriert}. Es gibt hierzu die Konstante
2119 @code{CENTER}, die den Wert @code{0} hat.
2121 Es gibt aber einfachere Befehle, die normalerweise benutzt werden.
2122 Hier eine Tabelle der häufigsten. Die Bedeutung des Befehls wird
2123 erklärt, wenn sie nicht selbstverständlich ist.
2125 @multitable @columnfractions .2 .2 .25 .35
2126 @headitem Runter/Links
2130 @item @code{\arpeggioArrowDown}
2131 @tab @code{\arpeggioArrowUp}
2132 @tab @code{\arpeggioNormal}
2133 @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil
2134 @item @code{\dotsDown}
2136 @tab @code{\dotsNeutral}
2137 @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden
2138 @item @code{\dynamicDown}
2139 @tab @code{\dynamicUp}
2140 @tab @code{\dynamicNeutral}
2141 @tab Position der Dynamik-Bezeichnung relativ zum System
2142 @item @code{\phrasingSlurDown}
2143 @tab @code{\phrasingSlurUp}
2144 @tab @code{\phrasingSlurNeutral}
2145 @tab Befehl für Richtung von Phrasierungsbögen
2146 @item @code{\slurDown}
2148 @tab @code{\slurNeutral}
2149 @tab Befehl für Richtung von Legatobögen
2150 @item @code{\stemDown}
2152 @tab @code{\stemNeutral}
2153 @tab Befehl für Richtung von Hälsen
2154 @item @code{\textSpannerDown}
2155 @tab @code{\textSpannerUp}
2156 @tab @code{\textSpannerNeutral}
2157 @tab Position von Textbeschriftungen, die als Strecker eingegeben werden
2158 @item @code{\tieDown}
2160 @tab @code{\tieNeutral}
2161 @tab Befehl für Richtung von Bindebögen
2162 @item @code{\tupletDown}
2163 @tab @code{\tupletUp}
2164 @tab @code{\tupletNeutral}
2165 @tab Befehl für Richtung von Klammern/Zahlen der N-tolen
2168 Die neutralen/normalen Varianten dieser Befehle verwenden intern
2169 @code{\revert} und können daher @strong{nicht} mit einem
2170 vorangestellten @code{\once} benutzt werden. Wenn Sie die
2171 Wirkung eines der anderen Befehle (die intern @code{\override} verwenden)
2172 auf eine einzige Noten begrenzen wollen, müssen Sie ihm ein @code{\once}
2173 voranstellen, genauso wie Sie es auch bei einem expliziten @code{\override}
2176 Falls nur ein einziges Layout Objekt nach oben oder unten gezwungen werden
2177 soll, können auch die Richtungsindikatoren @code{^} oder @code{_} verwendet werden:
2179 @lilypond[quote,fragment,verbatim]
2181 a'4^( g') c''_( a') |
2185 @unnumberedsubsubsec Fingersatz
2186 @translationof Fingering
2188 @cindex Fingersatz, Positionierung
2189 @cindex Fingersatz, Akkorde
2191 Die Positionierung von Fingersatz kann auch durch den Wert
2192 seiner @code{direction}-Eigenschaft beeinflusst werden, aber
2193 eine Veränderung von @code{direction} hat keinen Einfluss auf
2194 Akkorde. es gibt auch hier
2195 besondere Befehle, mit denen der Fingersatz von einzelnen
2196 Noten in Akkorden kontrolliert werden kann, wobei mögliche
2197 Positionen über, unter der Note und rechts bzw. links von
2200 Zunächst die Wirkungsweise von @code{direction} auf
2201 den Fingersatz: im ersten Takt der Standard, dann
2202 die Wirkung von @code{DOWN} (runter) und @code{UP}
2205 @cindex Fingersatz, Beispiel zur Veränderung
2206 @cindex direction-Eigenschaft, Beispiel
2208 @lilypond[quote,verbatim]
2210 c''4-5 a-3 f-1 c'-5 |
2211 \override Fingering.direction = #DOWN
2213 \override Fingering.direction = #UP
2218 Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch
2219 nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder
2220 unter das System zu setzen. Normalerweise bietet es sich an,
2221 @code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl
2222 zu benutzen. Hier das vorherigen Beispiel mit dieser Methode:
2224 @cindex Fingersatz-Beispiel
2226 @lilypond[quote,verbatim]
2228 c''4-5 a-3 f-1 c'-5 |
2234 Die @code{direction}-Eigenschaft wirkt sich nicht auf
2235 Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren.
2236 Standardmäßig wird der Fingersatz automatisch entweder
2237 über oder unter dem Akkord gesetzt:
2239 @cindex Fingersatz-Beispiel
2241 @lilypond[quote,verbatim]
2250 aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen
2251 nach oben oder unten zu zwingen:
2253 @cindex Fingersatz-Beispiel
2255 @lilypond[quote,verbatim]
2257 <c''-5 g-3 e-2 c-1>4
2263 Noch bessere Kontrolle über die Positionierung von Fingersatz für
2264 einzelne Noten in einem Akkord ist mit dem
2265 @code{\set fingeringOrientations}-Befehl möglich. Die Syntax
2269 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2273 @code{\set}wird benutzt, weil @code{fingeringOrientations} eine
2274 Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt
2275 vom @code{New_fingering_engraver}.
2277 Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen
2278 haben. Damit wird bestimmt, ob Fingersatz oberhalb gesetzt
2279 werden kann (wenn @code{up} in der Liste auftaucht), darunter
2280 (wenn@code{down} auftaucht), links (wenn @code{left} auftaucht)
2281 oder rechts (wenn @code{right} auftaucht). Wenn andererseits
2282 ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung
2283 gesetzt. LilyPond nimmt diese Beschränkung als Bedingung und
2284 errechnet die besten Positionen für die Noten des nächsten Akkordes.
2285 Die seitliche Positionierung kann nur auf einer Seite des Akkordes
2286 geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder
2287 @code{left} oder @code{right} auftreten, nicht beide gleichzeitig.
2289 @warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden
2290 kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben
2291 werden, indem einfache spitze Klammern um die Note positioniert
2294 Hier ein paar Beispiele:
2296 @cindex Fingersatz-Beispiel
2297 @cindex @code{\set}, Benutzungsbeispiel
2298 @cindex fingerOrientations-Eigenschaft, Beispiel
2300 @lilypond[quote,ragged-right,verbatim]
2302 \set fingeringOrientations = #'(left)
2305 \set fingeringOrientations = #'(left)
2307 <c-1 e-2 g-3 b-5>4 |
2308 \set fingeringOrientations = #'(up left down)
2311 \set fingeringOrientations = #'(up left)
2313 <c-1 e-2 g-3 b-5>4 |
2314 \set fingeringOrientations = #'(right)
2321 Wenn die Fingersatzbezeichnung zu gedrungen aussieht,
2322 kann auch die Schriftgröße (@code{font-size}) verringert
2323 werden. Der Standardwert kann aus dem
2324 @code{Fingering}-Objekt in der IR entnommen werden,
2325 er ist @w{@code{-5}}, versuchen wir es also mit @w{@code{-7}}.
2327 @lilypond[quote,ragged-right,verbatim]
2329 \override Fingering.font-size = #-7
2330 \set fingeringOrientations = #'(left)
2333 \set fingeringOrientations = #'(left)
2335 <c-1 e-2 g-3 b-5>4 |
2336 \set fingeringOrientations = #'(up left down)
2339 \set fingeringOrientations = #'(up left)
2341 <c-1 e-2 g-3 b-5>4 |
2342 \set fingeringOrientations = #'(right)
2348 @node Objekte außerhalb des Notensystems
2349 @subsection Objekte außerhalb des Notensystems
2350 @translationof Outside-staff objects
2352 Objekte außerhalb des Notensystems werden automatisch gesetzt,
2353 um Kollisionen zu vermeiden. Es gibt eine ganze Reihe von Möglichkeiten
2354 die Platzierung zu beeinflussen, sollte die Automatik kein optimales
2355 Resultat produzieren.
2358 * Die outside-staff-priority-Eigenschaft::
2359 * Der textLengthOn-Befehl::
2360 * Positionierung von Dynamikzeichen::
2361 * Verändern der Größe von grobs::
2365 @node Die outside-staff-priority-Eigenschaft
2366 @unnumberedsubsubsec Die @code{outside-staff-priority}-Eigenschaft
2367 @translationof The outside-staff-priority property
2369 Objekten mit einem geringeren
2370 Prioritätswert der Eigenschaft @code{outside-staff-priority}
2371 werden näher an das System gesetzt, und andere Objekte außerhalb
2372 des Systems werden dann soweit vom System entfernt gesetzt, dass
2373 Zusammenstöße vermieden werden. Die
2374 @code{outside-staff-priority}-Eigenschaft ist im
2375 @code{grob-interface} definiert und ist also eine Eigenschaft
2376 von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte
2377 auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen
2378 Wert dem Objekt entsprechend geändert, wenn das Objekt für die
2379 Notenausgabe erstellt wird. Die Tabelle unten zeigt die
2380 Standardwerte für die meistbenutzten @code{outside-staff}-Objekte.
2385 Achtung bei einigen ungewöhnlichen Objektbezeichnungen: Strecker-Objekte
2386 werden automatisch erstellt, um die vertikale Position von Grobs
2387 zu kontrollieren, die an unterschiedlichen musikalischen Momenten
2388 beginnen und enden (könnten). Wenn also @code{outside-staff-priority}
2389 des darunterliegenden Grobs geändert wird, hat das keine Auswirkung.
2390 Zum Beispiel bringt das Ändern von @code{outside-staff-priority}
2391 des @code{Hairpin}-(Dynamikklammer)-Objekts keine Änderung in der
2392 vertikalen Position von Crescendo-Klammern -- anstatt dessen muss
2393 @code{outside-staff-priority} des hiermit assoziierten
2394 @code{DynamicLineSpanne}-Objekts geändert werden. Dieser
2395 @code{\override}-Befehl muss zu Beginn des Streckers gesetzt werden,
2396 welcher womöglich mehrere verbundene Dynamikklammern und Dynamikbezeichnung
2399 @multitable @columnfractions .3 .3 .3
2400 @headitem Layout-Objekt
2402 @tab Kontrolliert Position von:
2403 @item @code{RehearsalMark}
2406 @item @code{MetronomeMark}
2408 @tab Metronomzeichen
2409 @item @code{VoltaBracketSpanner}
2411 @tab Volta-Wiederholungsklammern
2412 @item @code{TextScript}
2414 @tab Textbeschriftung
2415 @item @code{MultiMeasureRestText}
2417 @tab Text über Ganztaktpausen
2418 @item @code{OttavaBracket}
2420 @tab Ottava (Oktavierungsklammern)
2421 @item @code{TextSpanner}
2424 @item @code{DynamicLineSpanner}
2426 @tab Alle Dynamik-Bezeichnungen
2427 @item @code{BarNumber}
2430 @item @code{TrillSpanner}
2432 @tab Triller-Strecker
2435 Hier ein Beispiel, das die Standardpositionierung von einigen
2438 @cindex Text-Strecker
2439 @cindex Text-Spanner
2441 @funindex \startTextSpan
2442 @funindex \stopTextSpan
2443 @funindex startTextSpan
2444 @funindex stopTextSpan
2446 @cindex Ottava-Klammer
2447 @cindex Oktavierungsklammer
2449 @cindex TextSpanner, Beispiel zur Veränderung
2450 @cindex bound-details-Eigenschaft, Beispiel
2452 @lilypond[quote,fragment,ragged-right,verbatim]
2453 % Set details for later Text Spanner
2454 \override TextSpanner.bound-details.left.text
2455 = \markup { \small \bold Slower }
2456 % Place dynamics above staff
2458 % Start Ottava Bracket
2461 % Add Dynamic Text and hairpin
2467 % Add Dynamic Text and terminate hairpin
2468 c''4\ff c'' \stopTextSpan |
2469 % Stop Ottava Bracket
2474 Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h.
2475 Text mit Bindestrichen, der sich über eine bestimmte Länge
2476 erstreckt. Der Strecker beginnt mit dem
2477 @code{\startTextSpan}-Befehl und endet mit dem
2478 @code{\stopTextSpan}-Befehl, und das Format des Textes
2479 wird mit dem @code{\override TextSpanner}-Befehl bestimmt.
2480 Mehr Einzelheiten siehe @ruser{Text mit Verbindungslinien}.
2482 Im Beispiel wird auch gezeigt, wie Oktavierungsklammern
2483 (Ottava) erstellt werden.
2485 @cindex Taktzahlposition verändern
2486 @cindex Verändern der Taktzahlposition
2487 @cindex Position der Taktzahl, verändern
2488 @cindex Metronom-Bezeichnungsposition verändern
2489 @cindex Verändern der Metronom-Bezeichnungsposition
2490 @cindex Übungszeichenposition verändern
2491 @cindex Verändern der Übungszeichenposition
2493 Wenn die Standardwerte der @code{outside-staff-priority} nicht
2494 die Positionierung hervorrufen, die Sie wünschen, kann die
2495 Priorität eines jeden Objektes geändert werden. Als Beispiel
2496 wollen wir zeigen, wie sich die Oktavierungsklammer unter
2497 den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen
2498 nur die Priorität des
2499 @code{OttavaBracket}-Objektes in der IR oder der Tabelle oben
2500 herausfinden und einen kleineren Wert angeben als der Wert, den
2501 das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran
2502 zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext
2505 @cindex TextSpanner, Beispiel zur Veränderung
2506 @cindex bound-details-Eigenschaft, Beispiel
2508 @lilypond[quote,fragment,ragged-right,verbatim]
2509 % Set details for later Text Spanner
2510 \override TextSpanner.bound-details.left.text
2511 = \markup { \small \bold Slower }
2512 % Place dynamics above staff
2514 % Place following Ottava Bracket below Text Spanners
2515 \once \override Staff.OttavaBracket.outside-staff-priority = #340
2516 % Start Ottava Bracket
2521 % Add Dynamic Line Spanner
2527 c''4\ff c'' \stopTextSpan |
2528 % Stop Ottava Bracket
2533 Beachten Sie, dass einige dieser Objekte, insbesondere Taktzahlen,
2534 Metronomzeichen und Übungszeichen standardmäßig im @code{Score}-Kontext
2535 zu Hause sind; benutzen Sie also den richtigen Kontext, wenn sie
2536 deren Einstellungen verändern wollen.
2538 @cindex Legatobögen und outside-staff-priority
2539 @cindex Legatobögen und Artikulationszeichen
2540 @cindex Artikulationszeichen und Legatobögen
2542 Legatobögen werden als Innersystem-Objekte klassifiziert, aber
2543 sie erscheinen oft auch über dem System, wenn die Noten, an die
2544 sie verbunden sind, sehr hoch im System notiert sind. Dadurch
2545 können Außersystem-Objekte, wie Artikulationszeichen, zu hoch
2546 gerückt werden. Die @code{avoid-slur}-Eigenschaft hat nur
2547 eine Auswirkung, wenn auch die @code{outside-staff-priority}
2548 auf @code{#f} gesetzt ist. Alternativ kann die
2549 @code{outside-staff-priority} des Legatobogens auf einen
2550 numerischen Wert gesetzt werden, sodass er mit anderen
2551 Außersystem-Objekten anhand dieses Wertes gesetzt wird.
2552 Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
2554 @lilypond[quote,verbatim]
2556 c4( c^\markup { \tiny \sharp } d4.) c8 |
2558 \once \override TextScript.avoid-slur = #'inside
2559 \once \override TextScript.outside-staff-priority = ##f
2560 c4^\markup { \tiny \sharp } d4.) c8 |
2561 \once \override Slur.outside-staff-priority = #500
2562 c4( c^\markup { \tiny \sharp } d4.) c8 |
2566 Eine Änderung der @code{outside-staff-priority} kann auch dazu
2567 benutzt werden, die vertikale Platzierung von individuellen Objekten
2568 zu kontrollieren, auch wenn das Ergebnis nicht immer optimal
2569 ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4}
2570 gesetzt werden, das Beispiel wurde behandelt in
2571 @ref{Automatisches Verhalten}. Der Wert der Priorität muss also für
2572 die Eigenschaft @code{TextScript} entweder in der IR oder in der
2573 Tabelle oben festgestellt werden und dann die Priorität für
2574 @qq{Text3} höher eingestellt werden:
2576 @cindex TextScript, Beispiel zur Veränderung
2577 @cindex outside-staff-priority-Eigenschaft, Beispiel
2579 @lilypond[quote,fragment,ragged-right,verbatim]
2582 \once \override TextScript.outside-staff-priority = #500
2587 Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4}
2588 platziert, aber auch über @qq{Text2}, und @qq{Text4}
2589 wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle
2590 diese Anmerkungen gleich weit vom System entfernt sein.
2591 Dazu muss offensichtlich horizontal etwas Platz gemacht
2592 werden. Das kann erreicht werden mit dem
2593 @code{textLengthOn}-(Textlänge an)-Befehl.
2595 @node Der textLengthOn-Befehl
2596 @unnumberedsubsubsec Der @code{@bs{}textLengthOn}-Befehl (Textlänge berücksichtigen)
2597 @translationof The textLengthOn command
2599 @cindex Noten, durch Text gespreizt
2601 @funindex \textLengthOn
2602 @funindex textLengthOn
2603 @funindex \textLengthOff
2604 @funindex textLengthOff
2606 Standardmäßig wird Text, der mit dem Beschriftungsbefehl
2607 @code{\markup} bzw. Äquivalenten erstellt wird, kein
2608 zusätzlicher Platz in Bezug auf die Positionierung der Noten
2609 zugestanden. Der @code{\textLengthOn}-Befehl ändert
2610 dieses Verhalten, so dass die Noten gespreizt werden, wenn
2611 die Breite des Textes es erfordert:
2613 @lilypond[quote,fragment,ragged-right,verbatim]
2614 \textLengthOn % Cause notes to space out to accommodate text
2621 Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl
2622 rückgängig gemacht. Alternativ kann auch @code{\once} zusammen mit
2623 @code{\textLengthOn} benutzt werden, um die Auswirkung auf einen
2624 einzigen musikalisches Zeitpunkt zu begrenzen. Das entsprechende
2625 Verhalten bzgl. des horizontalen Platzes für Übungzeichen und
2626 Tempomarkierungen kann hiervon unabhängig durch die Befehle
2627 @code{\markLengthOn} und @code{\markLengthOff} analog gesteuert werden.
2629 @cindex Textbeschriftung, Vermeidung von Zusammenstößen
2630 @cindex Zusammenstöße vermeiden mit Textbeschriftung
2632 Textbeschriftung vermeidet auch Noten, die über das System hinausstehen.
2633 Wenn das nicht gewünscht ist, kann die automatische Verschiebung
2634 nach oben hin auch vollständig ausgeschaltet werden, indem die
2635 Priorität auf @code{#f} gesetzt wird. Hier ein Beispiel, wie
2636 eine Textbeschriftung mit diesen Noten reagiert:
2638 @cindex Textbeschriftung, Beispiel zur Veränderung
2639 @cindex outside-staff-priority-Eigenschaft, Beispiel
2641 @lilypond[quote,ragged-right,verbatim]
2643 % This markup is short enough to fit without collision
2647 % This is too long to fit, so it is displaced upwards
2651 % Turn off collision avoidance
2652 \once \override TextScript.outside-staff-priority = ##f
2653 c,,2^"Long Text " c'' |
2656 % Turn off collision avoidance
2657 \once \override TextScript.outside-staff-priority = ##f
2658 \textLengthOn % and turn on textLengthOn
2659 c,,2^"Long Text " % Spaces at end are honored
2664 @node Positionierung von Dynamikzeichen
2665 @unnumberedsubsubsec Positionierung von Dynamikzeichen
2666 @translationof Dynamics placement
2668 @cindex Verändern der Positionierung von Dynamikzeichen
2669 @cindex Dynamikzeichen: Positionierung verändern
2671 Dynamikbezeichnung wird üblicherweise unter dem System
2672 gesetzt, kann aber auch nach oben mit dem Befehl
2673 @code{\dynamicUp} gezwungen werden. Die Bezeichnung
2674 wird vertikal relativ zu der Note positioniert, an die sie angefügt
2675 wurde. Sie wird vertikal variabel gesetzt in Bezug zu
2676 Innersystemobjekten wie Bögen oder Taktnummern. Damit
2677 können oft recht gute Resultate erreicht werden, wie im
2680 @lilypond[quote,ragged-right,verbatim]
2686 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2687 ees,2.~\)\mf ees4 r8 |
2691 Wenn aber Noten und Dynamikzeichen sehr dicht beieinander
2692 stehen, positioniert die automatische Kollisionsvermeidung
2693 später kommende Dynamikzeichen weiter weg, was allerdings
2694 nicht immer die beste Möglichkeit ist, wie in dem folgenden,
2695 etwas gewollten Beispiel zu sehen ist:
2697 @lilypond[quote,ragged-right,verbatim,fragment]
2699 \relative { a'4\f b\mf a\mp b\p }
2703 Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht,
2704 kann es nötig sein, die Noten etwas zu spreizen, damit die
2705 Dynamikzeichen alle auf der selben vertikalen Position
2706 gesetzt werden können. Dieses Verhalten war im Falle von
2707 Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl,
2708 aber es gibt keinen entsprechenden Befehl für Dynamik. Wir
2709 müssen also unsere eigenen Befehle mit @code{\override}
2712 @node Verändern der Größe von grobs
2713 @unnumberedsubsubsec Verändern der Größe von grobs
2714 @translationof Grob sizing
2716 @cindex Grob, Größenveränderung
2717 @cindex Größenveränderung von grobs
2719 Zuallererst müssen wir lernen, wie die Größe von Grobs verändert
2720 wird. Alle Grobs besitzen einen Referenzpunkt, der
2721 benutzt wird, um ihre Position in Relation zu ihnen übergeordneten
2722 Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann
2723 auf einer horizontalen Position (@code{X-offset}) und einer
2724 vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich
2725 des übergeordneten Objektes. Eine horizontale Strecke wird
2726 durch ein Zahlenpaar angegeben (@code{X-extent}), welche
2727 die linke und rechte Grenze relativ zum übergeordneten Objekt
2728 bezeichnen. Die vertikale Strecke wir genauso durch ein
2729 Zahlenpaar (@code{Y-extent}) definiert. Diese Eigenschaften
2730 gehören zu allen Grobs, die das
2731 @code{grob-interface} unterstützen.
2733 @cindex @code{extra-spacing-width}
2735 Standardmäßig haben Außersystemobjekte eine Länge von Null,
2736 so dass sie sich in horizontaler Richtung überlappen können. Das
2737 geschieht, indem dem linken Rand Unendlich zugewiesen wird
2738 und dem rechten Rand minus Unendlich, d.h. die
2739 @code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft
2740 wird auf den Wert @code{'(+inf.0 . -inf.0)} gesetzt.
2741 Damit sich diese Objekte also horizontal nicht überschneiden, muss
2742 der Wert von @code{extra-spacing-width} überschrieben werden um den
2743 Objekten ein wenig zusätzlich Platz zuzuweisen. Die Einheit ist der
2744 Abstand zwischen zwei Notenlinien, also sollte es reichen die linke
2745 und rechte Kante je eine halbe Einheit nach links bzw. rechts zu verschieben:
2748 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2752 Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
2754 @cindex DynamicText, Beispiel zur Veränderung
2755 @cindex extra-spacing-width-Eigenschaft, Beispiel
2758 @lilypond[quote,ragged-right,verbatim,fragment]
2760 % Extend width by 1 staff space
2761 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2762 \relative { a'4\f b\mf a\mp b\p }
2766 Das sieht schon besser aus, aber es wäre noch besser, wenn die
2767 Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt
2768 höher und tiefer zu sitzen. Das kann mit der
2769 @code{staff-padding}-Eigenschaft erreicht werden,
2770 die wir uns im folgenden Abschnitt genauer anschauen werden.
2773 @node Vertikale Abstände
2774 @section Vertikale Abstände
2775 @translationof Vertical spacing
2777 In aller Regel ist die vertikale Platzierung von Objekten durch LilyPond
2778 ziemlich gut. Schauen wir uns das an einem einfachen Lied mit zwei Stimmen
2779 und Klavierbegleitung etwas näher an:
2781 @lilypond[quote,fragment,ragged-right]
2786 \new Voice = "music" {
2792 Here are some lyrics
2795 \clef bass e'2 f e c
2810 An der vertikalen Platzierung ist nichts auszusetzen. Nehmen wir aber einmal
2811 an, wir arbeiten mit einem Verleger zusammen, der spezielle Wünsche bzgl.
2812 des Abstands von Systemen und Text hat: Der Text soll weit weg von allen
2813 Noten und die Klavierbegleitung soll weit weg von den Gesangslinien.
2814 Schließlich soll das Klaviersystem noch etwas enger zusammen geschoben
2815 werden. Fangen wir mit dem Liedtext an.
2817 Gesangstext wird innerhalb eines Systems platziert. Daher finden sich die
2818 Befehle zu seiner Platzierung in
2819 @ruser{Flexible vertikale Abstände in Systemgruppen}. Dort erfahren wir,
2820 das Gesangstext vom Typ @code{non-staff lines} ist und wir daher die
2821 Eigenschaft @code{nonstaff} anpassen müssen. Den Text weiter weg vom
2822 darüber liegenden System zu schieben verwendet die
2823 @code{relatedstaff}-Eigenschaft. Für den Abstand nach unten greifen
2824 wir auf die @code{unrelatedstaff}-Eigenschaft zurück. Gesangsstimmen
2825 gehören zu einer @code{VerticalAxisGroup}, also setzen wir deren
2826 Eigenschaften. Mal sehen, wie das klappt.
2828 @lilypond[quote,fragment,ragged-right,verbatim]
2833 \new Voice = "music" {
2838 \override VerticalAxisGroup.
2839 nonstaff-relatedstaff-spacing.padding = #5
2840 \override VerticalAxisGroup.
2841 nonstaff-unrelatedstaff-spacing.padding = #5
2844 Here are some lyrics
2847 \clef bass e'2 f e c
2862 Nun ja, es klappt. Aber vielleicht war das doch des Guten zu viel.
2863 Wenn wir @code{padding} auf 5 setzen, dann fügt LilyPond 5 System Abstände
2864 zum Abstand zwischen den Objekten hinzu, was im vorliegenden Fall
2865 eindeutig zu viel ist. Wir werden 2 verwenden.
2867 Als nächstes verschieben wir die Klavierbegleitung weiter weg von den
2868 Gesangsstimmen. Die Gesangsstimmen sind ein @code{ChoirStaff}, also werden
2869 wir den Abstand zwischen diesem und dem darunter liegenden Klaviersystem
2870 vergrößern. Das geschieht indem wir die @code{basic-distance} des
2871 @code{StaffGrouper}'s @code{staffgroup-staff-spacing} anpassen.
2873 @lilypond[quote,fragment,ragged-right,verbatim]
2875 \new ChoirStaff \with {
2876 \override StaffGrouper.
2877 staffgroup-staff-spacing.basic-distance = #15
2881 \new Voice = "music" {
2886 \override VerticalAxisGroup.
2887 nonstaff-relatedstaff-spacing.padding = #2
2888 \override VerticalAxisGroup.
2889 nonstaff-unrelatedstaff-spacing.padding = #2
2892 Here are some lyrics
2895 \clef bass e'2 f e c
2910 Wunderbar. Jetzt kümmern wir uns noch um die letzte Anforderung, die
2911 Klaviersysteme enger zusammen zu schieben. Auch hierfür passen wir
2912 wieder die Eigenschaften des @code{StaffGrouper} an, aber dieses Mal
2913 werden wir sowohl die @code{basic-distance} als auch das @code{padding}
2914 reduzieren. Wie genau sehen Sie unten.
2916 @lilypond[quote,fragment,ragged-right,verbatim]
2918 \new ChoirStaff \with {
2919 \override StaffGrouper.
2920 staffgroup-staff-spacing.basic-distance = #15
2924 \new Voice = "music" {
2929 \override VerticalAxisGroup.
2930 nonstaff-relatedstaff-spacing.padding = #2
2931 \override VerticalAxisGroup.
2932 nonstaff-unrelatedstaff-spacing.padding = #2
2935 Here are some lyrics
2938 \clef bass e'2 f e c
2941 \new PianoStaff \with {
2942 \override StaffGrouper.staff-staff-spacing = #'(
2943 (basic-distance . 0)
2957 Damit sind die echt eng beieinander -- aber das ist es, was der
2958 Verleger wollte. Wir könnten sie bei Bedarf wieder ein wenig auseinander
2959 schieben, indem wir @code{padding} oder @code{basic-distance}
2962 Es gibt viele Arten die vertikalen Abstände zu verändern. Im Grunde
2963 brauchen wir uns lediglich zu merken, dass der Abstand zwischen Objekten
2964 in einer @code{StaffGroup} (wie @code{GrandStaff} oder @code{PianoStaff}
2965 Gruppen) durch die Platzierungsvariablen des @code{StaffGrouper}
2966 kontrolliert wird. Wohingegen die Abstände von nicht gruppierten
2967 Systemen (wie @code{Lyrics} und @code{Staff}) von den Variablen der
2968 @code{VerticalAxisGroup} kontrolliert werden. Siehe
2969 @ruser{Flexible vertical spacing paper variables} und
2970 @ruser{Flexible vertikale Abstände in Systemgruppen} für weitere
2973 @node Kollision von Objekten
2974 @section Kollision von Objekten
2975 @translationof Collisions of objects
2978 * Verschieben von Objekten::
2979 * Überlappende Notation in Ordnung bringen::
2980 * Beispiel aus dem Leben::
2983 @node Verschieben von Objekten
2984 @subsection Verschieben von Objekten
2985 @translationof Moving objects
2987 @cindex Verschieben von überschneidenden Objekten
2988 @cindex Verschieben von Zusammenstößen
2989 @cindex Zusammenstöße vermeiden
2990 @cindex Objekte, verschieben von Zusammenstößen
2991 @cindex Vermeiden von Zusammenstößen
2993 Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
2994 perfekt. Einige Notationselemente können sich überschneiden. Das
2995 ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen
2996 die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben
2997 werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen
3000 Es gibt im Grunde drei Herangehensweisen, überlappende Notation
3001 zu verbessern. Man sollte sie in der folgenden Reihenfolge
3006 Die @strong{Richtung} eines der überlappenden Objekte kann
3007 geändert werden, indem die vordefinierten Befehle für
3008 Innersystemobjekte verwendet werden, wie beschrieben in
3009 @ref{within-staff (Objekte innerhalb des Notensystems)}.
3010 Hälse, Bögen, Balken, Dynamik-Zeichen
3011 und Triolen können auf diese Weise einfach umgeordnet
3012 werden. Beschränkt ist diese Methode insofern, als es nur
3013 zwei Möglichkeiten zur Veränderung gibt: oben oder unten.
3016 Die @strong{Objekteigenschaft}, die LilyPond benutzt um die
3017 Layout-Objekte zu platzieren, können mit dem
3018 @code{\override}-Befehl positioniert werden. Die Vorteile
3019 von Änderungen dieser Art sind a) dass einige Objekte
3020 automatisch verschoben werden, wenn es nötig ist Platz zu
3021 schaffen und b) ein einziges @code{\override} sich auf
3022 alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften
3028 @code{direction} (Richtung)
3030 Das wurde schon detailliert behandelt, siehe
3031 @ref{within-staff (Objekte innerhalb des Notensystems)}.
3034 @code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung)
3036 @cindex Padding-Eigenschaft
3037 @cindex right-padding-Eigenschaft
3038 @cindex staff-padding-Eigenschaft
3039 @cindex Verschieben (padding)
3040 @cindex Füllung (padding)
3041 @cindex padding (Füllung)
3043 Wenn ein Objekt platziert wird, bestimmt der Wert seiner
3044 @code{padding}-(Füllungs)-Eigenschaft die Größe des
3045 Abstandes, der zwischen dem Objekt selber und dem
3046 Objekt, relativ zu welchem es positioniert wird, gelassen
3047 werden muss. Dabei zählt der @code{padding}-Wert
3048 des Objektes, das platziert werden soll, der @code{padding}-Wert
3049 des Objektes, das schon gesetzt wurde, wird hingegen
3050 ignoriert. Abstände mit @code{padding} können zu
3051 allen Objekten hinzugefügt werden, die das
3052 @code{side-position-interface} unterstützen.
3054 Anstelle von @code{padding} wird die Position von
3055 Versetzungszeichengruppen durch die Eigenschaften
3056 @code{right-padding} bestimmt. Diese Eigenschaft wird im
3057 @code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt
3058 gefunden, das sich innerhalb des @strong{Staff}-Kontexts
3059 befindet. Während des Notensatzes werden die Notenköpfe
3060 zuerst gesetzt und dann die Versetzungszeichen, wenn denn
3061 welche gesetzt werden, durch die @code{right-padding}-Eigenschaft
3062 auf die linke Seite der Notenköpfe positioniert, um die Entfernung
3063 von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu
3064 bestimmen. Also nur die @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft
3065 des @code{AccidentalPlacement}-Objekts hat Einfluss auf die
3066 Positionierung der Versetzungszeichen.
3068 Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft
3069 ist sehr ähnlich wie die @code{padding}-Eigenschaft:
3070 @code{padding} bestimmt den Minimalabstand zwischen
3071 einem Objekt, das das @code{side-position-interface}
3072 unterstützt, und dem nächsten anderen Objekt (normalerweise
3073 die Note oder Notenlinie); @code{staff-padding} dagegen
3074 wirkt nur auf Objekte die immer außerhalb des Notensystems
3075 sind -- damit wird der minimale Abstand bestimmt, der
3076 zwischen dem Objekt und dem Notensystem gelassen werden
3077 soll. @code{staff-padding} hat also @strong{keinen Einfluss}
3078 auf Objekte, die relativ zu einer Note positioniert werden, sondern
3079 nur auf solche, die zum System relativ stehen. Wenn es mit einem
3080 anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber
3081 der Befehl hat auch keine Auswirkungen.
3083 Um herauszufinden, welche @code{padding}-Eigenschaft für
3084 das bestimmte Objekt nötig, ist, das Sie verschieben wollen,
3085 müssen Sie in der IR nach den Objekt-Eigenschaften schauen.
3086 Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften
3087 nicht unbedingt in dem Objekt selber befinden, schauen Sie
3088 also auch in Objekten nach, die offensichtlich Ähnlichkeiten
3091 Alle @code{padding}-Werte werden in Notenlinienabständen
3092 gemessen. Für die meisten Objekte ist der Wert ungefähr auf
3093 1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt).
3094 Der Wert kann geändert werden, wenn ein größerer (oder
3095 kleinerer) Abstand gewünscht wird.
3098 @code{self-alignment-X} (Selbstpositionierung)
3100 @cindex self-alignment-X-Eigenschaft
3101 @cindex Selbstpositionierung von Objekten
3102 @cindex Ausrichtung von Objekten
3104 Diese Eigenschaft kann benutzt werden, um ein Objekt
3105 nach links, rechts oder zentriert an dem Referenzpunkt des Objekts
3106 auszurichten, an das es verknüpft ist. Es kann bei allen
3107 Objekten benutzt werden, die das @code{self-alignment-interface}
3108 unterstützen. Das sind üblicherweise Objekte, die Text
3109 enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT},
3110 @code{RIGHT} oder @code{CENTER}. Alternativ kann ein
3111 numerischer Wert zwischen @w{@code{-1}} und @code{+1}
3112 bestimmt werden: @w{@code{-1}} heißt linksbündig, @code{+1}
3113 rechtsbündig und Zahlen dazwischen bewegen den Text
3114 schrittweise von links nach rechts. Zahlen größer als
3115 @code{1} können angegeben werden, um den Text
3116 noch weiter nach links zu bewegen, oder weniger als @w{@code{-1}},
3117 um ihn weiter nach rechts zu schieben. Eine Änderung
3118 um @code{1} des Wertes entspricht einer Bewegung um
3119 die halbe Textbreite.
3122 @code{extra-spacing-width} (zusätzliche Breite)
3124 @cindex extra-spacing-width-Eigenschaft
3126 Diese Eigenschaft steht für alle Objekte zur Verfügung, die
3127 das @code{item-interface} unterstützen. Es braucht zwei
3128 Zahlen als Argument, die erste wird zur rechten Ausdehnung,
3129 die zweite zur linken Ausdehnung hinzugerechnet. Negative
3130 Zahlen verschieben die Ausdehnung nach rechts, positive nach
3131 links, um also ein Objekt zu verbreitern, muss die erste
3132 Zahl negativ und die zweite positiv sein. Allerdings beachten
3133 nicht alle Objekte beide Zahlen. Das
3134 @code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet
3135 nur erste Zahl für die linke Ausdehnung.
3138 @code{staff-position} (Notensystempositionierung)
3140 @cindex staff-position-Eigenschaft
3142 @code{staff-position} ist eine Eigenschaft des
3143 @code{staff-symbol-referencer-interface}, die von Objekten unterstützt
3144 wird, die relativ zum Notensystem (engl. staff) positioniert werden.
3145 Hiermit wird die vertikale Position eines Objekts relativ zur
3146 Mittellinie des Systems in halben Notenlinienabständen angegeben.
3147 Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten
3148 wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen
3152 @code{horizontal-shift} (horizontale Verschiebung)
3154 @cindex horizontal-shift-Eigenschaft
3155 @cindex Notenkolumne
3156 @cindex Notenkollisionen
3157 @cindex Kollision, Noten
3158 @cindex shift Befehl
3165 @funindex \shiftOnnn
3168 Innerhalb einer Stimme werden alle Noten, die zeitgleich stattfinden,
3169 zu einer Gruppe zusammen gefasst, einem sog. @code{NoteColumn} Objekt.
3170 Dieses Objekt dient dem Zweck, diese Gruppe von Noten horizontal zu
3171 positionieren (siehe auch @qq{Notenkolumnen} in @ref{Stimmen explizit beginnen}).
3172 @emph{Genau dann, wenn} zwei oder mehr Notenkolumnen innerhalb eines
3173 Systemkontexts, die beide jeweils die Hälse in die gleiche Richtung haben
3174 und auch zur gleichen Zeit stattfinden, werden die Werte ihrer
3175 @code{horizontal-shift}-Eigenschaften nach Größe sortiert und die Objekte
3176 dann mit einer Ordnungsnummer versehen. Je größer diese Ordnungsnummer,
3177 desto stärker wird ein Objekt verschoben um eine Kollision der Notenköpfe
3178 zu vermeiden. Diese Eigenschaft wird mit den @code{\voiceXXX}-Befehlen
3179 gesetzt und kann direkt durch einen @code{\override}-Befehl, oder was für
3180 gewöhnlich häufiger vorkommt, durch einen @code{\shiftOn}-Befehl gesetzt
3181 werden. Bedenken sie bitte, diese Eigenschaft dient lediglich dazu, den
3182 Notenkolumnen eine @emph{Ordnungsnummer} zuzuweisen - sie bestimmt in
3183 keinster Weise die Größe der jeweiligen Verschiebung. Die steigt mit
3184 zunehmender Ordnungsnummer in festen Schritten. Die Schrittweite ist
3185 für gewöhnlich eine halbe Notenkopfbreite. Bei sehr eng platzierten Notengruppen
3186 kann sie aber auch mal eine ganze Notenkopfbreite betragen.
3189 @code{force-hshift} (horizontale Verschiebung erzwingen)
3191 @cindex force-hshift-Eigenschaft
3193 Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft
3194 ist eine Eigenschaft von @code{NoteColumn} (bzw. vom
3195 @code{note-column-interface}). Eine Veränderung dieser Eigenschaft
3196 macht es möglich, eine Notenkolumne zu verschieben, wenn sie mit anderen
3197 überlappt. Diese Eigenschaft hat keinerlei Auswirkungen, wenn keine
3198 Überlappung vorliegt. Veränderungen werden in einer Einheit angegeben,
3199 die zu der Notenkolumne passt, d.h. der Breite des Notenkopfes der Note
3200 der ersten Stimme. Diese Eigenschaft sollte in denjenigen komplexen
3201 Fällen verwendet werden, die sich nicht mit dem normalen @code{\shiftOn}-Befehle
3202 (siehe auch @ref{Stimmen explizit beginnen}) lösen lassen.
3203 Sie ist auf jeden Fall der Verwendung der @code{extra-offset}-Eigenschaft
3204 vorzuziehen, weil man die richtige Entfernung nicht
3205 in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine
3206 Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere
3207 Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen.
3212 Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch
3213 manuell positioniert werden, entweder vertikal in Bezug auf die
3214 Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit
3215 auf eine neue Position verschoben werden. Der Nachteil ist, dass die
3216 richtigen Werte für eine gute Position manuell ausprobiert werden müssen,
3217 meistens durch Herantasten an den richtigen Wert, und das für jedes
3218 einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen
3219 werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als
3220 Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt.
3221 Am schwerwiegendsten ist aber die Tatsache, dass die
3222 Verschiebungskoordinaten wahrscheinlich neu errechnet oder
3223 ausprobiert werden müssen, wenn sich an den Noten und deren
3224 Layout später irgend etwas ändert. Die Eigenschaften, die für diese
3225 Arte der manuellen Verschiebung verwendet werden können, sind:
3228 @item extra-offset (zusätzlicher Abstand)
3230 @cindex extra-offset-Eigenschaft
3232 Diese Eigenschaft gehört zu jedem Layout-Objekt, das das
3233 @code{grob-interface} unterstützt. Sie braucht ein Zahlenpaar,
3234 das die exakte Verschiebung in horizontaler und vertikaler Richtung
3235 bezeichnet. Negative Zahlen verschieben das Objekt nach links oder
3236 unten. Die Einheit sind Notenlinienabstände. Die zusätzliche
3237 Positionierung wird vorgenommen, nachdem alle anderen Objekte
3238 platziert sind, weshalb ein Objekt irgendwohin verschoben werden
3239 kann, ohne den restlichen Satz zu beeinflussen.
3241 @item positions (Position)
3243 @cindex positions-Eigenschaft
3245 Diese Eigenschaft ist am sinnvollsten, um die Steigung und die
3246 Höhe von Balken, Bögen und Triolenklammern anzupassen.
3247 Sie braucht ein Zahlenpaar, das die Position des rechten und linken
3248 Endes relativ zur Mittellinie des Notensystems bestimmt. Die
3249 Einheit sind Notenlinienabstände. Bögen allerdings können nicht
3250 beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine
3251 Liste an möglichen Positionen für den Bogen und findet normalerweise
3252 die Version, die @qq{am besten aussieht}. Wenn die
3253 @code{positions}-Eigenschaft verändert worden ist, wird der
3254 Bogen aus der Liste gewählt, der der gewünschten Position am
3260 Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften.
3261 Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften
3262 ein bestimmtes Objekt unterstützt.
3264 Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer
3265 Kollision beteiligt sind, daneben findet sich die Bezeichnung des
3266 Objektes, mit der Sie es in der IR finden, um zu bestimmen,
3267 welche Eigenschaften benutzt werden können, um es zu verschieben.
3269 @multitable @columnfractions .5 .5
3270 @headitem Objekttyp @tab Objektbezeichnung
3271 @item Articulationszeichen @tab @code{Script}
3272 @item Balken @tab @code{Beam}
3273 @item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner}
3274 @item Dynamikzeichen (horizontal) @tab @code{DynamicText}
3275 @item Fingersatz @tab @code{Fingering}
3276 @item Übungs-/Textmarken @tab @code{RehearsalMark}
3277 @item Legatobögen @tab @code{Slur}
3278 @item Text z. B. @code{^"text"} @tab @code{TextScript}
3279 @item Bindebögen @tab @code{Tie}
3280 @item N-tolen @tab @code{TupletBracket}
3284 @node Überlappende Notation in Ordnung bringen
3285 @subsection Überlappende Notation in Ordnung bringen
3286 @translationof Fixing overlapping notation
3288 Hier soll nun gezeigt werden, wie die Eigenschaften, die im
3289 vorigen Abschnitt vorgestellt wurden, bei der Problemlösung
3290 mit sich überschneidenden Notationselementen eingesetzt
3294 * Die padding-Eigenschaft::
3295 * Die right-padding-Eigenschaft::
3296 * Die staff-padding-Eigenschaft::
3297 * Die self-alignment-X-Eigenschaft::
3298 * Die staff-position-Eigenschaft::
3299 * Die extra-offset-Eigenschaft::
3300 * Die positions-Eigenschaft::
3301 * Die force-hshift-Eigenschaft::
3304 @node Die padding-Eigenschaft
3305 @unnumberedsubsubsec Die @code{padding}-Eigenschaft (auffüllen)
3306 @translationof The padding property
3308 @cindex padding (Verschiebungs-Eigenschaft)
3309 @cindex Überschneidende Notation korrigieren
3310 @cindex Korrigieren von überschneidender Notation
3312 Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt
3313 werden, um den Abstand zwischen Symbolen zu vergrößern (oder
3314 zu verkleinern), die über oder unter den Noten gesetzt werden.
3316 @cindex Script, Beispiel zur Veränderung
3317 @cindex Verschiebungs-Eigenschaft, Beispiel
3318 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3320 @lilypond[quote,fragment,verbatim]
3322 \override Script.padding = #3
3326 @cindex MetronomMark, Beispiel zur Veränderung
3327 @cindex Verschiebungs-Eigenschaft, Beispiel
3328 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3330 @lilypond[quote,fragment,verbatim]
3331 % This will not work, see below
3332 \override MetronomeMark.padding = #3
3336 \override Score.MetronomeMark.padding = #3
3341 Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen
3342 Kontext anzugeben. Weil das @code{MetronomeMark}-Objekt
3343 sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen
3344 im @code{Voice}-Kontext einfach ignoriert. Für mehr Einzelheiten siehe
3345 @ruser{Eigenschaften verändern}.
3347 Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das
3348 sich in einem Stapel von Objekten befindet, die nach ihrer
3349 Außersystempriorität (@code{outside-staff-priority}) positioniert werden,
3350 werden das Objekt und alle, die sich außerhalb davon befinden,
3351 entsprechend verschoben.
3354 @node Die right-padding-Eigenschaft
3355 @unnumberedsubsubsec Die @code{right-padding}-Eigenschaft (rechts auffüllen)
3356 @translationof The right-padding property
3358 @cindex Verschiebung nach links
3359 @cindex right-padding-Eigenschaft (Verschiebung nach links)
3361 Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand
3362 zwischen einem Versetzungszeichen und der Note, auf das sie sich
3363 bezieht, aus. Sie wird nicht sehr oft benötigt, aber die
3364 Standardanordnung kann für einige spezielle Versetzungszeichen-Glyphen
3365 oder Kombinationsglyphen,
3366 wie sie für Mikrotonale Musik benutzt werden, falsch sein. Derartige
3367 Glyphen müssen notiert werden, indem man den Stencil des
3368 Versetzungszeichens mit einer Textbeschriftung (Markup) ersetzt,
3369 wie im folgenden Beispiel:
3371 @cindex Versetzungszeichen, Beispiel zur Veränderung
3372 @cindex Accidental, Beispiel zur Veränderung
3373 @cindex Text-Eigenschaft, Beispiel
3374 @cindex stencil-Eigenschaft, Beispiel
3375 @cindex AccidentalPlacement, Beispiel zur Veränderung
3376 @cindex right-padding-Eigenschaft, Beispiel
3377 @cindex Verschiebung nach rechts (rigth-padding), Beispiel
3379 @lilypond[quote,ragged-right,verbatim]
3380 sesquisharp = \markup { \sesquisharp }
3383 % This prints a sesquisharp but the spacing is too small
3384 \once \override Accidental.stencil = #ly:text-interface::print
3385 \once \override Accidental.text = #sesquisharp
3387 % This improves the spacing
3388 \once \override Score.AccidentalPlacement.right-padding = #0.6
3389 \once \override Accidental.stencil = #ly:text-interface::print
3390 \once \override Accidental.text = #sesquisharp
3396 Dazu ist aber ein @code{\override}-Befehl für den Stencil des
3397 Versetzungszeichens nötig, der bisher nicht behandelt wurde.
3398 Der Typ des Stencils muss eine Prozedur sein, die hier geändert
3399 wurde, um den Inhalt der @code{text}-Eigenschaft des
3400 @code{Accidental} (Versetzungszeichen)-Objekts zu setzen. Die
3401 @code{text}-Eigenschaft wiederum wird als @code{sesquisharp}-Glyph
3402 definiert. Dieser Glyph wird dann weiter vom Notenkopf entfernt
3403 durch die Veränderung von @code{right-padding} mit einem
3404 @code{\override}-Befehl.
3406 @node Die staff-padding-Eigenschaft
3407 @unnumberedsubsubsec The @code{staff-padding}-Eigenschaft (Systemfüllungseigenschaft)
3408 @translationof The staff-padding property
3410 @cindex staff-padding-Eigenschaft
3411 @cindex Objekte an der Grundlinie ausrichten
3412 @cindex Ausrichten von Objekten an der Grundlinie
3414 @code{staff-padding} kann
3415 verwendet werden um Objekte wie Dynamikzeichen an einer
3416 Grundlinie mit einem festen (Mindest-) Abstand zum System auszurichten,
3417 wenn keine anderen Notationsobjekte einen noch weiteren Abstand erfordern.
3418 Diese Verschiebung ist keine Eigenschaft
3419 von @code{DynamicText}, sondern von @code{DynamicLineSpanner}.
3420 Das liegt daran, dass die Grundlinie sich gleicherweise auf
3421 @strong{alle} Dynamikzeichen beziehen soll, also auch auf die,
3422 die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen
3423 aus dem Beispiel des vorigen Abschnitts auszurichten:
3425 @cindex DynamikText, Beispiel zur Veränderung
3426 @cindex extra-spacing-width-Eigenschaft, Beispiel
3427 @cindex DynamicLineSpanner, Beispiel zur Veränderung
3428 @cindex staff-padding-Eigenschaft, Beispiel
3430 @lilypond[quote,fragment,ragged-right,verbatim]
3431 \override DynamicLineSpanner.staff-padding = #3
3432 \relative { a'4\f b\mf a\p b\mp }
3436 @node Die self-alignment-X-Eigenschaft
3437 @unnumberedsubsubsec Die @code{self-alignment-X}-Eigenschaft (Selbstausrichtung-X-Eigenschaft)
3438 @translationof The self-alignment-X property
3440 Das nächste Beispiel zeigt, wie man die Position einer
3441 Fingersatzbezeichnung relativ zu einem Notenhals justieren kann,
3442 indem dessen rechte Kante an dem Referenzpunkt der zugehörigen Note
3445 @cindex StringNumber, Beispiel zur Veränderung
3446 @cindex self-alignment-X-Eigenschaft
3447 @cindex Selbstausrichtung-X-Eigenschaft
3449 @lilypond[quote,fragment,ragged-right,verbatim]
3452 \once \override StringNumber.self-alignment-X = #RIGHT
3456 @node Die staff-position-Eigenschaft
3457 @unnumberedsubsubsec Die @code{staff-position}-Eigenschaft (Position innerhalb des Systems)
3458 @translationof The staff-position property
3460 @cindex staff-position-Eigenschaft
3461 @cindex Notensystem-Position-Eigenschaft
3462 @cindex Kollision von Objekten im System
3463 @cindex Zusammenstöße von Objekten im System
3465 Mehrtaktpausen in einer Stimmen können mit Noten in anderen
3466 Stimmen kollidieren. Da diese Pausen zentriert zwischen den
3467 Taktstriche gesetzt werden, würde es für LilyPond eine recht große
3468 Anstrengung bedeuten herauszufinden, welche Noten mit ihnen
3469 zusammenstoßen könnten, denn alle Kollisionsvermeidung
3470 für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die
3471 zur selben Zeit auftreten. Hier ein typisches Beispiel für eine
3472 Kollision dieser Art:
3474 @lilypond[quote,verbatim,ragged-right]
3475 << \relative { c'4 c c c } \\ { R1 } >>
3478 Die beste Lösung ist es hier, die Ganztaktpause nach unten zu
3479 schieben, denn die Pause ist in der zweiten Stimme. Per
3480 Standardeinstellung für die zweite Stimme (@code{\voiceTwo},
3481 also die zweite Stimme in der
3482 @code{<<@{@dots{}@} \\ @{@dots{}@}>>}-Konstruktion) wird die
3483 Position auf dem System (@code{staff-position}) auf -4
3484 für @code{MultiMeasureRest}, in unserem Beispiel muss
3485 es also bspw. auf die Position @w{@code{-8}} gesetzt werden,
3486 d.h. vier halbe Notenlinienabstände weiter nach unten:
3488 @cindex MultiMeasureRest, Beispiel zur Veränderung
3489 @cindex Ganztaktpausen, Beispiel zur Veränderung
3490 @cindex staff-position-Eigenschaft, Beispiel
3492 @lilypond[quote,verbatim,ragged-right]
3494 \relative { c'4 c c c }
3496 \override MultiMeasureRest.staff-position = #-8
3501 Das ist besser, als etwa @code{extra-offset} zu benutzen, denn
3502 in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt.
3504 @node Die extra-offset-Eigenschaft
3505 @unnumberedsubsubsec Die @code{extra-offset}-Eigenschaft (Genaues Positionieren)
3506 @translationof The extra-offset property
3508 @cindex extra-offset-Eigenschaft
3509 @cindex Zusätzlicher Abstand, Positionierung
3510 @cindex Positionierung von Objekten
3511 @cindex Objekte, Positionierung
3513 Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle
3514 über die Positionierung von Objekten in horizontaler und vertikaler
3517 Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach
3518 links und 1,8 Notenlinienabstände nach unten verschoben:
3520 @cindex Fingersatz, Beispiel zur Veränderung
3521 @cindex extra-offset-Eigenschaft, Beispiel
3523 @lilypond[quote,fragment,verbatim]
3525 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3530 @node Die positions-Eigenschaft
3531 @unnumberedsubsubsec Die @code{positions}-Eigenschaft (Ausrichtungseigenschaft)
3532 @translationof The positions property
3534 @cindex positions-Eigenschaft
3535 @cindex Kontrolle über Triolen, Bögen und Balken manuell
3536 @cindex manuelle Kontrolle über Triolen, Bögen, Balken
3537 @cindex Balken, manuelle Kontrolle
3538 @cindex Bögen, manuelle Kontrolle
3539 @cindex Legatobögen, manuelle Kontrolle
3540 @cindex Phrasierungsbögen, manuelle Kontrolle
3541 @cindex Triolen-Klammer, manuelle Kontrolle
3543 Die @code{positions}-Eigenschaft ermöglicht es, die vertikale Position
3544 und damit implizit die Neigung von N-tolen, Legato- und Phrasierungsbögen
3545 sowie Balken manuell zu steuern.
3547 Im folgenden Beispiel überlappen der Legato- und er Phrasierungsbogen:
3549 @lilypond[quote,verbatim,ragged-right]
3550 \relative { a'8 \( ( a'16 ) a \) }
3553 @cindex Phrasierungsbogen, Beispiel zur Veränderung
3554 @cindex positions-Eigenschaft, Beispiel
3555 @cindex Positionierung, Beispiel
3558 Ein Möglichkeit wäre es, die beiden Endpunkte des Phrasierungsbogen
3559 weiter nach oben zu verschieben. Wir probieren einmal das linke
3560 Ende 2.5 Staff-Einheiten über die Mittellinie und das rechte Ende
3561 4.5 Einheiten darüber zu fixieren und überlassen es LilyPond, einen
3562 zu diesen Endpunkten passenden Phrasierungsbogen auszuwählen:
3564 @lilypond[quote,verbatim,fragment,ragged-right]
3565 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3566 a'8 \( ( a''16 ) a'' \)
3569 Auf jeden Fall eine Verbesserung, aber warum das rechte Ende des
3570 Legatobogens nicht ein wenig nach unten verschieben? Wenn Sie es
3571 versuchen werden sie feststellen, es ist auf diesem Wege nicht
3572 möglich, und das liegt daran, dass LilyPond von sich aus keinen
3573 Bogen erzeugt, der niedriger läge, als der, den es bereits auswählt.
3574 In solch einem Fall hat eine Änderung der @code{positions}-Eigenschaft
3575 keinerlei Auswirkung. Allerdings @emph{können} Binde-, Legato- und
3576 Phrasierungsbögen bei Bedarf sehr exakt positioniert und auch geformt
3577 werden. Unter @ruser{Bögen verändern} können sie lernen, wie.
3579 Hier noch ein weiteres Beispiel. Wie zu sehen ist,
3580 stößt der Balken mit den oberen Bögen zusammen:
3582 @lilypond[quote,verbatim,ragged-right]
3586 \relative { c'1~ 2. e8 f }
3595 \relative { c'1~ 2. e8 f }
3607 Das kann manuell gelöst werden, indem beide Enden des Balkens
3608 von ihrer Position 1.81 Notenlinienabstände unter der Mittellinie
3609 hoch geschoben werden, etwa auf 1:
3611 @cindex Balken, Beispiel zur Veränderung
3612 @cindex positions-Eigenschaft, Beispiel
3613 @cindex Positionierung, Beispiel
3615 @lilypond[quote,verbatim,ragged-right]
3619 \relative { c'1~ 2. e8 f }
3622 \override Beam.positions = #'(-1 . -1)
3629 \relative { c'1~ 2. e8 f }
3635 \revert Beam.positions
3642 Hier ist zu beobachten, dass die Veränderung sich auch auf den
3643 die zweite Stimme des weiteren Taktes mit Achtelnoten auswirkt,
3644 während sie keine Auswirkung auf die Hälse der ersten Stimme hat.
3645 Sobald das override nicht mehr benötigt wird, sollte es wie
3646 zu sehen reverted werden.
3648 @node Die force-hshift-Eigenschaft
3649 @unnumberedsubsubsec Die @code{force-hshift}-Eigenschaft (horizontale Verschiebunseigenschaft)
3650 @translationof The force-hshift property
3652 @cindex force-hshift-Eigenschaft
3653 @cindex Vertikale Verschiebung erzwingen
3655 An diesem Punkt können wir den letzten Feinschliff an unserem
3656 Chopin-Beispiel vornehmen, das wir behandelt haben in
3657 @ref{Ich höre Stimmen}. Wir hatten es in folgende Form
3660 @lilypond[quote,verbatim,fragment,ragged-right]
3661 \new Staff \relative {
3676 Die inneren Noten des ersten Akkordes (also das As in der vierten Stimme)
3677 müssen nicht mit shift verschoben aus der Noten-Kolumne der höheren Stimme
3678 verschoben werden, daher verwenden wir @code{\shiftOff}.
3680 Im zweiten Akkord wollen wir, dass das F sich am As orientiert und die
3681 tiefste Note leicht nach rechts verschoben wird, damit ein Zusammenstoß
3682 der Hälse vermieden wird. Das erreicht man mit @code{force-hshift} in
3683 @code{NoteColumn} des unteren Des, um es einen halben
3684 Notenlinienzwischenraum nach rechts zu verschieben und gleichzeitig
3685 @code{force-hshift} für das F auf Null.
3686 Ihnen ist sicher aufgefallen, dass wir @code{\once} verwenden damit
3687 die Veränderung nicht über den konkreten Fall hinaus wirkt, auch wenn
3688 im konkreten kleinen Beispiel @code{\once} und das zweite @code{\override}
3689 in der vierten Stimme weggelassen werden könnte. Das wäre aber
3692 Hier das Endergebnis:
3694 @cindex Notenkolumne, Beispiel zur Veränderung
3695 @cindex force-hshift-Eigenschaft, Beispiel
3696 @cindex vertikale Verschiebung, Beispiel
3698 @lilypond[quote,verbatim,fragment,ragged-right]
3699 \new Staff \relative {
3704 { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
3707 { \once \shiftOff aes'2 \once \shiftOff f4 fes }
3714 @node Beispiel aus dem Leben
3715 @subsection Beispiel aus dem Leben
3716 @translationof Real music example
3718 Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel
3719 beendet werden, in dem verschiedene Optimierungen vorgenommen
3720 werden müssen, bis das Ergebnis gut aussieht. Das Beispiel wurde
3721 ganz bewusst gewählt um die Benutzung der Notationsreferenz
3722 zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden
3723 müssen. Es ist nicht repräsentativ für normale Notationsprojekte,
3724 lassen Sie sich also nicht durch dieses Beispiel entmutigen! Zum
3725 Glück sind Probleme wie die hier gezeigten nicht sehr häufig.
3727 Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte
3728 6--9, der Übergang vom Lento der Einleitung zum Moderato.
3729 Hier zunächst der Satz, wie er aussehen soll, allerdings ohne
3730 Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht
3731 zu kompliziert zu machen.
3733 @c The following should appear as music without code
3734 @c This example should not be indexed
3735 @c line-width ensures no break
3736 @lilypond[quote,ragged-right,line-width=6\in]
3737 rhMusic = \relative {
3740 \once \override Tie.staff-position = #3.5
3744 \mergeDifferentlyHeadedOn
3745 \mergeDifferentlyDottedOn
3746 bes2.\tempo "Moderato" r8
3752 % Reposition the c2 to the right of the merged note
3753 \once \override NoteColumn.force-hshift = #1.0
3754 % Move the c2 out of the main note column
3755 % so the merge will work
3762 % Stem on the d2 must be down to permit merging
3764 % Stem on the d2 should be invisible
3765 \tweak Stem.transparent ##t
3773 \mergeDifferentlyHeadedOff
3774 \mergeDifferentlyDottedOff
3779 lhMusic = \relative {
3781 <d g, d>1)\arpeggio |
3788 \new Staff = "RH" <<
3792 \new Staff = "LH" <<
3801 Die erste Überlegung ist, dass das System für die rechte Hand
3802 im dritten Takt vier Stimmen braucht. Das sind die fünf
3803 Achtelnoten mit Balken, das übergebundene C, die Halbe D, die
3804 mit der Achtel D verschmolzen ist, und die punktierte Viertel
3805 Fis, die auch mit einer Achtelnote verschmolzen ist. Alles
3806 andere ist eine einzige Stimme, es ist also am einfachsten, die
3807 zusätzlichen drei Stimmen nur zeitweise zu erstellen, wenn sie
3808 auftreten. Wenn Sie vergessen haben, wie man das anstellt,
3809 schauen Sie sich nochmal den Abschnitt @ref{Ich höre Stimmen}
3810 und @ref{Stimmen explizit beginnen} an. Hier wollen wir explizit
3811 begonnene Stimmen für die polyphone Stelle benutzen, weil LilyPond
3812 Kollisionen besser vermeidet, wenn alle Stimmen auf diese Weise
3813 explizit begonnen werden.
3816 Wir wollen anfange, indem wir die Noten in zwei Variablen
3817 notieren und dann die Systemstruktur in einer
3818 @code{\score}-Umgebung erstellen. Das ist, was LilyPond
3821 @c line-width ensures no break
3822 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3823 rhMusic = \relative {
3829 % Start polyphonic section of four voices
3831 { c,8 d fis bes a } % continuation of main voice
3845 g2. % continuation of main voice
3849 lhMusic = \relative {
3858 \new Staff = "RH" <<
3862 \new Staff = "LH" <<
3871 Alle Noten sind richtig, aber die Positionierung sehr
3872 verbesserungsbedürftig. Der Bindebogen kollidiert mit
3873 der veränderten Taktart zusammen, einige Noten werden nicht
3874 verschmolzen und einige Notationselemente fehlen ganz.
3875 Behandeln wir zunächst die einfacheren Dinge. Der
3876 Balken kann durch eine manuelle Begrenzung einfach
3877 korrigiert werden, und auch der Legatobogen der linken
3878 Hand und der Phrasierungsbogen der rechten Hand
3879 sind schnell gesetzt, denn sie wurden schon in der
3880 Übung erklärt. Damit haben wir folgendes Notenbild:
3882 @c line-width ensures no break
3883 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3884 rhMusic = \relative {
3890 % Start polyphonic section of four voices
3892 { c,8 d fis bes a } % continuation of main voice
3906 g2.\) % continuation of main voice
3910 lhMusic = \relative {
3919 \new Staff = "RH" <<
3923 \new Staff = "LH" <<
3932 Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein
3933 Arpeggio und wird mit einem doppelten Taktstrich beschlossen.
3934 Wie können wir diese notieren, denn sie sind im Handbuch zum
3935 Lernen nicht vorgekommen? Hier brauchen wir jetzt die
3936 Notationsreferenz. Ein Blick in den Index zeigt uns die
3937 Einträge für @qq{Arpeggio} und @qq{Taktstriche}: ein
3938 Arpeggio also erstellt man mit dem Befehl @code{\arpeggio}
3939 hinter einem Akkord und einen doppelten Taktstrich wird mit dem
3940 Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes
3941 muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung
3942 gelöst werden. Das geht am besten, indem wir den Bogen nach
3943 oben verschieben. Wie man Objekte verschiebt wurde schon
3944 behandelt in @ref{Verschieben von Objekten}, wo stand, dass Objekte
3945 die relativ zum System positioniert werden, vertikal verschoben werden
3946 können, indem ihre @code{staff-position}-Eigenschaft
3947 geändert wird, die in halben Notenlinienabständen relativ
3948 zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl
3949 also, direkt vor die erste über gebundene Note gestellt, verschiebt
3950 den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
3951 über die Mittellinie:
3953 @code{\once \override Tie.staff-position = #3.5}
3955 Damit ist auch der zweite Takt vollständig:
3957 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3958 rhMusic = \relative {
3961 \once \override Tie.staff-position = #3.5
3966 % Start polyphonic section of four voices
3968 { c,8 d fis bes a } % continuation of main voice
3982 g2.\) % continuation of main voice
3986 lhMusic = \relative {
3988 <d g, d>1)\arpeggio |
3995 \new Staff = "RH" <<
3999 \new Staff = "LH" <<
4008 In Takt drei beginnt der Moderato-Abschnitt. In der
4009 Übung wurde behandelt, wie man ein Tempobezeichnung mittels des
4010 @code{\tempo}-Befehls eingibt. Damit ist das hinzufügen des
4011 @qq{Moderato} einfach. Wie aber werden Noten
4012 verschmolzen? Hier nehmen wir wieder die Notationsreferenz
4013 zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge)
4014 im Index führt uns zu den Befehlen, um Noten mit
4015 unterschiedlichen Köpfen und unterschiedlichen Punkten
4016 zu verschmelzen, in @ruser{Auflösung von Zusammenstößen}. In unserem
4017 Beispiel müssen sowohl unterschiedliche Köpfe also auch
4018 unterschiedliche Punktierung verschmolzen werden, wir
4019 brauchen also die Befehle
4022 \mergeDifferentlyHeadedOn
4023 \mergeDifferentlyDottedOn
4027 aus der Notationsreferenz, die wir an den Beginn unseres
4028 Abschnittes stellen und
4031 \mergeDifferentlyHeadedOff
4032 \mergeDifferentlyDottedOff
4036 um das Verhalten wieder auszuschalten. Das sieht so aus:
4038 @c line-width ensures no break
4039 @lilypond[quote,ragged-right,line-width=6\in]
4040 rhMusic = \relative {
4043 \once \override Tie.staff-position = #3.5
4047 bes2.\tempo "Moderato" r8
4048 \mergeDifferentlyHeadedOn
4049 \mergeDifferentlyDottedOn
4050 % Start polyphonic section of four voices
4052 { c,8 d fis bes a } % continuation of main voice
4066 \mergeDifferentlyHeadedOff
4067 \mergeDifferentlyDottedOff
4068 g2.\) % continuation of main voice
4072 lhMusic = \relative {
4074 <d g, d>1)\arpeggio |
4081 \new Staff = "RH" <<
4085 \new Staff = "LH" <<
4094 Mit diesen Veränderungen wurden die beiden Fis-Noten
4095 verschmolzen, aber nicht die zwei Ds. Warum nicht? Die
4096 Antwort befindet sich im gleicher Abschnitt der Notationsreferenz:
4097 Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte
4098 Richtungen aufweisen und zwei Noten können nicht verschmolzen
4099 werden, wenn eine dritte Noten in der gleichen Kolumne
4100 stört. In unserem Fall weisen beide Hälse nach oben und es
4101 befindet sich zur gleichen Zeit auch noch eine dritte Note, das C.
4102 Wie die Richtung von Hälsen geändert wird, wissen wir schon:
4103 mit @code{\stemDown}, und in der Notationsreferenz findet
4104 sich auch Information, wie das C verschoben werden kann: mit
4105 dem @code{\shift}-Befehl. Aber welcher von ihnen? Das C
4106 befindet sich in der zweiten Stimme, die @qq{shift off} hat,
4107 die zwei Ds sind in den Stimmen eins und drei, die @qq{shift
4108 off} bzw. @qq{shift on} haben. Das C muss also noch eine
4109 Stufe weiter verschoben werden mit @code{\shiftOnn}, damit
4110 es die Verschmelzung der Ds nicht stört. Das sieht jetzt so
4113 @cindex Bindebogen, Beispiel zur Veränderung
4114 @cindex staff-position-Eigenschaft, Beispiel
4116 @c line-width ensures no break
4117 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4118 rhMusic = \relative {
4121 \once \override Tie.staff-position = #3.5
4125 bes2.\tempo "Moderato" r8
4126 \mergeDifferentlyHeadedOn
4127 \mergeDifferentlyDottedOn
4128 % Start polyphonic section of four voices
4130 { c,8 d fis bes a } % continuation of main voice
4133 % Move the c2 out of the main note column
4134 % so the merge will work
4139 % Stem on the d2 must be down to permit merging
4147 \mergeDifferentlyHeadedOff
4148 \mergeDifferentlyDottedOff
4149 g2.\) % continuation of main voice
4153 lhMusic = \relative {
4155 <d g, d>1)\arpeggio |
4162 \new Staff = "RH" <<
4166 \new Staff = "LH" <<
4175 Fast schon geschafft. Nur noch ein Problem ist übrig: Der Hals nach
4176 unten des verschmolzenen sollte nicht da sein, und das C sähe
4177 besser auf der rechten Seite des Ds aus. Beides können wir mit den
4178 gelernten Optimierungsmethoden erreichen. Den Hals machen
4179 wir durchsichtig und das C verschieben wir mit der
4180 @code{force-hshift}-Eigenschaft. Hier ist das Endergebnis:
4182 @cindex Notenkolumne, Beispiel zur Veränderung
4183 @cindex force-hshift-Eigenschaft, Beispiel
4184 @cindex Hals, Beispiel zur Veränderung
4185 @cindex Notenhals, Beispiel zur Veränderung
4186 @cindex transparent-Eigenschaft, Beispiel
4188 @c line-width ensures no break
4189 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4190 rhMusic = \relative {
4193 \once \override Tie.staff-position = #3.5
4197 bes2.\tempo "Moderato" r8
4198 \mergeDifferentlyHeadedOn
4199 \mergeDifferentlyDottedOn
4200 % Start polyphonic section of four voices
4202 { c,8 d fis bes a } % continuation of main voice
4206 % Reposition the c2 to the right of the merged note
4207 \once \override NoteColumn.force-hshift = #1.0
4208 % Move the c2 out of the main note column
4209 % so the merge will work
4216 % Stem on the d2 must be down to permit merging
4218 % Stem on the d2 should be invisible
4219 \tweak Stem.transparent ##t
4227 \mergeDifferentlyHeadedOff
4228 \mergeDifferentlyDottedOff
4229 g2.\) % continuation of main voice
4233 lhMusic = \relative {
4235 <d g, d>1)\arpeggio |
4242 \new Staff = "RH" <<
4246 \new Staff = "LH" <<
4256 @node Weitere Optimierungen
4257 @section Weitere Optimierungen
4258 @translationof Further tweaking
4261 * Andere Benutzung von Optimierungen::
4262 * Variablen für Layout Anpassungen einsetzen::
4264 * Mehr Information::
4265 * Fortgeschrittene Optimierungen mit Scheme::
4268 @node Andere Benutzung von Optimierungen
4269 @subsection Andere Benutzung von Optimierungen
4270 @translationof Other uses for tweaks
4273 * Noten zwischen unterschiedlichen Stimmen überbinden::
4274 * Eine Fermate in MIDI simulieren::
4277 @cindex Transparente Objekte
4278 @cindex Entfernen von Objekten
4279 @cindex Verstecken von Objekten
4280 @cindex Unsichtbare Objekte
4281 @cindex transparent-Eigenschaft, Benutzung
4282 @cindex Objekte unsichtbar machen
4283 @cindex Objekte entfernen
4284 @cindex Objekte verstecken
4286 @node Noten zwischen unterschiedlichen Stimmen überbinden
4287 @unnumberedsubsubsec Noten zwischen unterschiedlichen Stimmen überbinden
4288 @translationof Tying notes across voices
4290 @cindex Noten zwischen Stimmen über binden
4291 @cindex Über binden von Noten zwischen Stimmen
4293 Das nächste Beispiel zeigt, wie man Noten von verschiedenen
4294 Stimmen miteinander verknüpfen kann, indem man Bindebögen
4295 für Überbindungen benutzt. Normalerweise können nur zwei
4296 Noten der gleichen Stimme über gebunden werden. Wenn
4297 man zwei Stimmen benutzt, wobei die überbundenen Noten
4298 sich in der selben befinden,
4301 << { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
4305 und dann den ersten Hals nach oben unsichtbar macht,
4306 sieht es so aus, als ob die Überbindung zwischen
4307 den Stimmen stattfindet:
4309 @cindex Hals, Beispiel zum Verstecken
4310 @cindex Notenhals, Beispiel zum Verstecken
4311 @cindex Fähnchen, Beispiel zum Verstecken
4312 @cindex transparent-Eigenschaft, Beispiel
4315 @lilypond[quote,verbatim]
4328 Handbuch zum Lernen:
4329 @ref{Der once-Präfix,,Der @code{@bs{}once}-Präfix},
4330 @ref{Die stencil-Eigenschaft}.
4333 @node Eine Fermate in MIDI simulieren
4334 @unnumberedsubsubsec Eine Fermate in MIDI simulieren
4335 @translationof Simulating a fermata in MIDI
4337 @cindex stencil-Eigenschaft, Benutzung
4338 @cindex Fermate, Benutzung in MIDI
4339 @cindex MIDI: Fermate erstellen
4341 Für Objekte außerhalb des Notensystems ist es normalerweise
4342 besser, die @code{stencil}-Eigenschaft anstelle der
4343 @code{transparent}-Eigenschaft zu verändern, wenn man
4344 sie vom fertigen Notensatz entfernen will. Indem die
4345 @code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt
4346 wird, wird das entsprechende Objekt vollständig entfernt.
4347 Das bedeutet, dass es die Positionierung der anderen Objekte
4350 Auf diese Art kann etwa das Tempo geändert werden, damit
4351 in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass
4352 im Notensatz etwas von diesen Tempoänderungen zu sehen
4353 ist. Die Metronombezeichnung soll auch nicht die Position
4354 von Text an der gleichen Stelle oder die Abstände zwischen
4355 zwei Systemen beeinflussen. Darum ist es am besten,
4356 @code{stencil} auf @code{#f} zu setzen. Im Beispiel wird
4357 der Unterschied zwischen einem unsichtbaren Objekt und
4358 einem entfernten Objekt gezeigt:
4360 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4361 @cindex transparent-Eigenschaft, Beispiel
4363 @lilypond[quote,verbatim,ragged-right]
4366 % Visible tempo marking
4369 \once \hide Score.MetronomeMark
4370 % Invisible tempo marking to lengthen fermata in MIDI
4373 % New tempo for next section
4382 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4383 @cindex transparent-Eigenschaft, Beispiel
4385 @lilypond[quote,verbatim,ragged-right]
4388 % Visible tempo marking
4391 \once \omit Score.MetronomeMark
4392 % Invisible tempo marking to lengthen fermata in MIDI
4395 % New tempo for next section
4405 Mit beiden Methoden wird die Tempobezeichnung entfernt, mit
4406 der die Fermate verlängert wird, und beide beeinflussen die
4407 MIDI-Ausgabe wie gewünscht. Die unsichtbare Metronombezeichnung
4408 schiebt aber die folgende Bezeichnung in die Höhe, während
4409 das im zweiten Beispiel, in dem der @code{stencil} entfernt
4410 wurde, nicht passiert.
4417 @node Variablen für Layout Anpassungen einsetzen
4418 @subsection Variablen für Layout Anpassungen einsetzen
4419 @translationof Using variables for layout adjustments
4421 @cindex Variablen, Benutzung zur Optimierung
4422 @cindex Optimierung mit Variablen
4424 @code{\override}-Befehle sind oft lang und mühsam zu
4425 tippen, und sie müssen immer absolut richtig sein. Wenn
4426 derselbe Befehl mehrere Male benutzt werden muss, lohnt
4427 es sich oft schon, eine Variable zu definieren, in der er
4430 Als Beispiel sollen einige Worte im
4431 Gesangstext fett und kursiv hervorgehoben werden.
4432 Die Befehle @code{\italic} und @code{\bold} funktionieren
4433 im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern,
4434 auf die sie angewendet werden sollen, zusätzlich
4435 in eine @code{\markup}-Umgebung eingeschlossen
4436 werden. Durch diese Einbettung können einzelne Wörter nicht
4437 einfach zu einer Variable umgeformt werden. Als
4438 Alternative versuchen wir, einen Befehl mit
4439 @code{\override} und @code{\revert} zu konstruieren.
4442 @code{\override Lyrics.LyricText.font-shape = #'italic}
4443 @code{\override Lyrics.LyricText.font-series = #'bold}
4445 @code{\revert Lyrics.LyricText.font-shape}
4446 @code{\revert Lyrics.LyricText.font-series}
4449 Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
4450 Hervorhebung benötigen. Anstelle dieser Befehlsketten @emph{können}
4451 wir jedoch zwei Variablen definieren. Mit ihnen und dem entsprechenden
4452 Wort in geschweiften Klammern erreichen wir den gewünschten Effekt.
4453 Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichen um die
4454 Punkte herum nicht benötigt werden, weil sie nicht innerhalb des
4455 @code{lyricmode}-Kontextes interpretiert werden. Hier ein Beispiel;
4456 die Bezeichnungen können natürlich auch kürzer sein,
4457 um noch weniger schreiben zu müssen:
4459 @cindex LyricText, Beispiel zur Veränderung
4460 @cindex Gesangstext, Beispiel zur Veränderung
4461 @cindex font-shape-Eigenschaft, Beispiel
4462 @cindex font-series-Eigenschaft, Beispiel
4464 @lilypond[quote,verbatim]
4466 \override Lyrics.LyricText.font-shape = #'italic
4467 \override Lyrics.LyricText.font-series = #'bold
4470 \revert Lyrics.LyricText.font-shape
4471 \revert Lyrics.LyricText.font-series
4474 global = { \key c \major \time 4/4 \partial 4 }
4476 SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g }
4477 AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e }
4478 TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 }
4479 BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 }
4481 VerseOne = \lyrics {
4482 E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4485 VerseTwo = \lyricmode {
4486 O | \once \emphasize Christ, whose voice the | wa -- ters heard,
4489 VerseThree = \lyricmode {
4490 O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4493 VerseFour = \lyricmode {
4494 O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4501 \new Voice = "Soprano" { \voiceOne \global \SopranoMusic }
4502 \new Voice = "Alto" { \voiceTwo \AltoMusic }
4503 \new Lyrics \lyricsto "Soprano" { \VerseOne }
4504 \new Lyrics \lyricsto "Soprano" { \VerseTwo }
4505 \new Lyrics \lyricsto "Soprano" { \VerseThree }
4506 \new Lyrics \lyricsto "Soprano" { \VerseFour }
4510 \new Voice = "Tenor" { \voiceOne \TenorMusic }
4511 \new Voice = "Bass" { \voiceTwo \BassMusic }
4518 @node Formatvorlagen
4519 @subsection Formatvorlagen
4520 @translationof Style sheets
4522 Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe
4523 zu Einzelheiten @ref{Die Ausgabe verbessern}. Aber was ist,
4524 wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen
4525 erfahren sollen? Oder wenn Sie einfach nur die Anpassungen von
4526 der eigentlichen Musik trennen wollen? Das lässt sich recht einfach
4529 Schauen wir uns ein Beispiel an. Sorgen Sie sich nicht, wenn Sie
4530 den Abschnitt mit den vielen @code{#()} nicht verstehen. Das wird
4531 in @ref{Fortgeschrittene Optimierungen mit Scheme} erklärt.
4533 @lilypond[quote,verbatim,ragged-right]
4535 \tweak self-alignment-X #-0.6
4536 #(make-dynamic-script
4537 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4540 #(define-music-function
4543 #{ <>^\markup \bold \box #string #})
4547 a'4.\mpdolce d8 cis4--\glissando a |
4551 g8(\! fis)-. e( d)-. cis2 |
4555 Vielleicht können die Definitionen von @code{mpdolce} und @code{inst} noch
4556 etwas verbessert werden.
4557 Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht
4558 auch in einem anderen Stück verwenden. Wir könnten sie immer wieder
4559 kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig.
4560 Dadurch werden die Definitionen auch in der Eingabedatei belassen,
4561 und ich finde diese @code{#()} irgendwie hässlich. Verstecken
4565 %%% in Datei "definitions.ily" speichern
4567 \tweak self-alignment-X #-0.6
4568 #(make-dynamic-script
4569 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4572 #(define-music-function
4575 #@{ <>^\markup \bold \box #string #@})
4578 Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben
4579 in der Datei eingefügt. (Die Erweiterung @file{.ily} wird benutzt,
4580 um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die
4581 man nicht alleinstehend kompilieren kann). Jetzt ändern wir die
4582 Noten (in der Datei @file{music.ly}).
4584 @c We have to do this awkward example/lilypond-non-verbatim
4585 @c because we can't do the \include stuff in the manual.
4588 \include "definitions.ily"
4592 a'4.\mpdolce d8 cis4--\glissando a |
4596 g8(\! fis)-. e( d)-. cis2 |
4600 @lilypond[quote,ragged-right]
4602 \tweak self-alignment-X #-0.6
4603 #(make-dynamic-script
4604 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4607 #(define-music-function
4610 #{ <>^\markup \bold \box #string #})
4614 a'4.\mpdolce d8 cis4--\glissando a |
4618 g8(\! fis)-. e( d)-. cis2 |
4622 Das sieht schon besser aus, aber einige Änderungen könnten wir noch vornehmen.
4623 Das Glissando ist kaum sichtbar, machen wir es also etwas dicker und
4624 näher an den Notenkopf. Die Metronombezeichnung soll über dem
4625 Schlüssel stehen, anstatt über der ersten Note. Und schließlich
4626 mag mein Kompositionsprofessor keine @qq{C}-Taktangaben, das ändern
4627 wir also in @qq{4/4}.
4629 Ändern Sie jetzt jedoch nicht @file{music.ly}. Ändern Sie die
4630 @file{definitions.ily} mit dem Folgenden:
4635 \tweak self-alignment-X #-0.6
4636 #(make-dynamic-script
4637 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4640 #(define-music-function
4643 #@{ <>^\markup \bold \box #string #@})
4648 \override MetronomeMark.extra-offset = #'(-5 . 0)
4649 \override MetronomeMark.padding = #'3
4653 \override TimeSignature.style = #'numbered
4657 \override Glissando.thickness = #3
4658 \override Glissando.gap = #0.1
4663 @lilypond[quote,ragged-right]
4665 \tweak self-alignment-X #-0.6
4666 #(make-dynamic-script
4667 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4670 #(define-music-function
4673 #{ <>^\markup \bold \box #string #})
4678 \override MetronomeMark.extra-offset = #'(-5 . 0)
4679 \override MetronomeMark.padding = #'3
4683 \override TimeSignature.style = #'numbered
4687 \override Glissando.thickness = #3
4688 \override Glissando.gap = #0.1
4694 a'4.\mpdolce d8 cis4--\glissando a |
4698 g8(\! fis)-. e( d)-. cis2 |
4702 Das sieht besser aus! Aber nehmen wir an, Ich will dieses Stück publizieren.
4703 Mein Professor mag die @qq{C}-Taktangabe nicht, mir gefällt sie aber sehr
4704 gut. Kopieren wir also die Datei @file{definitions.ily} nach
4705 @file{web-publish.ily} und verändern diese. Weil die Noten als PDF
4706 auf dem Monitor dargestellt werden sollen, wird auch die Notengröße
4712 \tweak self-alignment-X #-0.6
4713 #(make-dynamic-script
4714 #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4717 #(define-music-function
4720 #@{ <>^\markup \bold \box #string #@})
4722 #(set-global-staff-size 23)
4727 \override MetronomeMark.extra-offset = #'(-5 . 0)
4728 \override MetronomeMark.padding = #'3
4735 \override Glissando.thickness = #3
4736 \override Glissando.gap = #0.1
4741 @lilypond[quote,ragged-right]
4743 \tweak self-alignment-X #-0.6
4744 #(make-dynamic-script
4745 #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4748 #(define-music-function
4751 #{ <>^\markup \bold \box #string #})
4753 #(set-global-staff-size 23)
4757 \override MetronomeMark.extra-offset = #'(-5 . 0)
4758 \override MetronomeMark.padding = #'3
4761 \override Glissando.thickness = #3
4762 \override Glissando.gap = #0.1
4768 a'4.\mpdolce d8 cis4--\glissando a |
4772 g8(\! fis)-. e( d)-. cis2 |
4776 In der Eingabedatei muss jetzt nur noch die Zeile
4777 @code{\include "definitions.ily"} mit
4778 @code{\include "web-publish.ily"} ersetzt werden. Das könnte
4779 man natürlich noch besser machen. Es könnte eine Datei
4780 @file{definitions.ily} mit allen Definitionen (also
4781 @code{mpdolce} und @code{inst}) geben, eine Datei
4782 @file{web-publish.ily}, die nur die @code{\layout}-Veränderung
4783 enthält und eine Datei @file{university.ily}, die nur die
4784 Prozedur enthält, die Ausgabe meinem Professor angenehm zu machen.
4785 Der Anfang von @file{music.ly} würde dann folgendermaßen aussehen:
4788 \include "definitions.ily"
4790 %%% nur eine der zwei Zeilen auskommentieren!
4791 \include "web-publish.ily"
4792 %\include "university.ily"
4795 Diese Herangehensweise kann auch schon nützlich sein, wenn man
4796 nur ein paar Stimmen schreiben will. Ich habe eine ganze Anzahl
4797 an @qq{Formatvorlagen} (engl. Stylesheets) für meine Projekte. Ich fange jede Datei mit
4798 der Zeile @code{\include "../global.ily"} an, die etwa folgendes
4803 \version @w{"@version{}"}
4805 #(ly:set-option 'point-and-click #f)
4807 \include "../init/init-defs.ly"
4808 \include "../init/init-layout.ly"
4809 \include "../init/init-headers.ly"
4810 \include "../init/init-paper.ly"
4815 @node Mehr Information
4816 @subsection Mehr Information
4817 @translationof Other sources of information
4819 Die Programmreferenz enthält sehr viel Information über LilyPond, aber
4820 noch mehr Information findet sich in den internen
4821 LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst
4822 das richtige Verzeichnis auf Ihrem System finden. Die Position
4823 hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten
4824 Version von der LilyPond-Internetseite vorgenommen wurde oder Sie
4825 die Version durch Ihren Paketmanager installiert haben (also
4826 z. B. in einer GNU/Linux-Distribution oder unter fink oder cygwin
4827 installiert), und b) auf welchem Betriebssystem Sie das Programm
4830 @subsubsubheading Von lilypond.org heruntergeladen
4835 Wechseln Sie in das Verzeichnis
4837 @file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/}
4842 Wechseln Sie in das Verzeichnis
4844 @file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4847 indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus
4848 in das Verzeichnis wechseln, oder mit Control-Klick auf das
4849 LilyPond-Programmsymbol gehen und @qq{Show Package Contents}
4854 Wechseln Sie mit dem Windows Explorer ins Verzeichnis
4856 @file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/}
4861 @subsubsubheading Mit einem Paket-Manager installiert oder selber aus den Quellen kompiliert
4863 Wechseln Sie in das Verzeichnis
4864 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei
4865 @var{PREFIX} bei Ihrem Paket-Manager oder dem
4866 @code{configure}-Skript gesetzt wird, und @var{X.Y.Z}
4867 die LilyPond-Versionsnummer.
4871 In diesem Ordner sind die zwei interessanten Unterordner:
4874 @item @file{ly/} - beinhaltet Dateien im LilyPond-Format
4875 @item @file{scm/} - beinhaltet Dateien im Scheme-Format
4878 Schauen wir uns zuerst einige Dateien in @file{ly/} an.
4879 Öffnen Sie @file{ly/property-init.ly} in einem Texteditor.
4880 Der, den Sie normalerweise für @file{.ly}-Dateien benutzen,
4881 genügt. Diese Datei enthält die Definitionen aller vordefinierten
4882 Befehle für LilyPond, wie etwa @code{\stemUp} und
4883 @code{\slurDotted}. Sie können sehen, dass es sich um
4884 nichts mehr handelt als Definitionen von Variablen, die eine
4885 oder mehrere @code{\override}-Befehle enthalten. Der
4886 Befehl @code{\tieDotted} etwa wird folgendermaßen definiert:
4890 \override Tie.dash-period = #0.75
4891 \override Tie.dash-fraction = #0.1
4895 Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht
4896 mögen, können Sie sie ganz einfach umdefinieren, genauso wie
4897 jede andere Variable auch, indem Sie sie an den Anfang Ihrer
4898 Quelldatei schreiben.
4900 Hier sind die wichtigsten Dateien, die sich im Ordner
4901 @file{ly/} befinden:
4903 @multitable @columnfractions .4 .6
4906 @item @file{ly/engraver-init.ly}
4907 @tab Definitionen von Engraver-Kontexten
4908 @item @file{ly/paper-defaults-init.ly}
4909 @tab Spezifikationen von Voreinstellungen für Papiermaße
4910 @item @file{ly/performer-init.ly}
4911 @tab Definitionen von Performer-Kontexten
4912 @item @file{ly/property-init.ly}
4913 @tab Definitionen aller vordefinierten Befehle
4914 @item @file{ly/spanner-init.ly}
4915 @tab Definitionen aller vordefinierten Strecker-Befehle
4918 Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen)
4919 sind in @file{.scm}-(Scheme)-Dateien gespeichert. Die
4920 Scheme-Programmiersprache wird benutzt, um eine
4921 programmierbare Schnittstelle zu den internen Operationen von
4922 LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist
4923 im Moment außerhalb des Rahmens dieses Handbuchs, denn
4924 sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung
4925 ist hier angebracht, dass des ein gutes technisches Verständnis
4926 oder sehr viel Zeit braucht, um Scheme und diese
4927 Dateien zu verstehen (siehe auch @rextend{Scheme-Tutorium}).
4929 Wenn Sie sich mit Scheme auskennen, sind hier mögliche
4930 interessante Dateien:
4932 @multitable @columnfractions .4 .6
4935 @item @file{scm/auto-beam.scm}
4936 @tab Sub-Balken-Voreinstellungen
4937 @item @file{scm/define-grobs.scm}
4938 @tab Voreinstellungen für Grob-Eigenschaften
4939 @item @file{scm/define-markup-commands.scm}
4940 @tab Definition aller Markup-Beschriftungsbefehle
4941 @item @file{scm/midi.scm}
4942 @tab Voreinstellung für die MIDI-Ausgabe
4943 @item @file{scm/output-lib.scm}
4944 @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw.
4945 @item @file{scm/parser-clef.scm}
4946 @tab Definitionen der unterstützten Schlüssel
4947 @item @file{scm/script.scm}
4948 @tab Voreinstellungen für Artikulationszeichen
4952 @node Fortgeschrittene Optimierungen mit Scheme
4953 @subsection Fortgeschrittene Optimierungen mit Scheme
4954 @translationof Advanced tweaks with Scheme
4956 Auch wenn viele Sachen mit @code{\override} und @code{\tweak}
4957 möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die
4958 Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle
4959 zu beeinflussen. Code, der in der Scheme-Programmiersprache
4960 geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond
4961 eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein
4962 grundlegendes Verständnis von Scheme. Eine Einleitung finden
4963 Sie in der @rextend{Scheme-Tutorium}.
4965 Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine
4966 Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine
4967 Scheme-Prozedur gesetzt werden kann, die dann jedes Mal
4968 aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt
4969 wird. Die Eigenschaft kann damit dynamisch auf einen Wert
4970 gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt
4971 wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend
4972 zu ihrer Position innerhalb der Tonleiter gesetzt.
4974 @cindex x11-Farben, Beispiel zur Benutzung
4975 @cindex Notenkopf, Beispiel zur Veränderung
4976 @cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt
4978 @lilypond[quote,verbatim,ragged-right]
4979 #(define (color-notehead grob)
4980 "Color the notehead according to its position on the staff."
4981 (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4984 ;; Return rainbow colors
4985 ((1) (x11-color 'red )) ; for C
4986 ((2) (x11-color 'orange )) ; for D
4987 ((3) (x11-color 'yellow )) ; for E
4988 ((4) (x11-color 'green )) ; for F
4989 ((5) (x11-color 'blue )) ; for G
4990 ((6) (x11-color 'purple )) ; for A
4991 ((0) (x11-color 'violet )) ; for B
4995 % Arrange to obtain color from color-notehead procedure
4996 \override NoteHead.color = #color-notehead
4997 a2 b | c2 d | e2 f | g2 a |
5001 Weiter Beispiele, die die Benutzung dieser programmierbaren
5002 Schnittstelle zeigen, finden sich in @rextend{Callback-Funktionen}.