]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/learning/tweaks.itely
953986ba5bc81b15cd4a395ddb8aab4b98d7155f
[lilypond.git] / Documentation / de / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: 8819d7cb0ba2ab359e4aa2276695afb9c1957c42
5
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.
9 @end ignore
10
11 @c \version "2.19.22"
12 @c Translators: ???, Michael Gerdau
13
14 @node Die Ausgabe verbessern
15 @chapter Die Ausgabe verbessern
16 @translationof Tweaking output
17
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.
21
22
23 @menu
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::
31 @end menu
32
33 @node Grundlagen für die Optimierung
34 @section Grundlagen für die Optimierung
35 @translationof Tweaking basics
36
37 @menu
38 * Grundlagen zur Optimierung::
39 * Objekte und Schnittstellen::
40 * Regeln zur Benennung von Objekten und Eigenschaften::
41 * Optimierungsmethoden::
42 @end menu
43
44 @node Grundlagen zur Optimierung
45 @subsection Grundlagen zur Optimierung
46 @translationof Introduction to tweaks
47
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
54 für die Notenausgabe.
55
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.
63
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.
69
70
71 @node Objekte und Schnittstellen
72 @subsection Objekte und Schnittstellen
73 @translationof Objects and interfaces
74
75 @cindex Objekte
76 @cindex Grobs
77 @cindex Spanners
78 @cindex Interfaces
79 @cindex Strecker
80 @cindex Schnittstellen
81 @cindex graphische Objekte (Grob)
82 @cindex Objekteigenschaften
83 @cindex Layout-Objekt
84 @cindex Objekt, Layout-
85 @cindex Eigenschaften von Objekten
86
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.
91
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.
106
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,
114 Farbe usw.
115
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)
122 bezeichnet.
123
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.
131
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.
147
148 Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung
149 kommen sollen.
150
151
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
155
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
161
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.
171
172 @multitable @columnfractions .33 .33 .33
173 @headitem Objekt-/Eigenschaftstyp
174   @tab Naming convention
175   @tab Beispiele
176 @item Kontexte
177   @tab Aaaa oder AaaaAaaaAaaa
178   @tab Staff, GrandStaff
179 @item Layout-Objekte
180   @tab Aaaa oder AaaaAaaaAaaa
181   @tab Slur, NoteHead
182 @item Engraver
183   @tab Aaaa_aaa_engraver
184   @tab Clef_engraver, Note_heads_engraver
185 @item Schnittstellen
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
194 @end multitable
195
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.
200
201
202 @node Optimierungsmethoden
203 @subsection Optimierungsmethoden
204 @translationof Tweaking methods
205
206 @cindex Optimierungsmethoden
207
208 @menu
209 * Der override-Befehl::
210 * Der revert-Befehl::
211 * Der once-Präfix::
212 * Der overrideProperty-Befehl::
213 * Der tweak-Befehl::
214 * Der single-Präfix::
215 @end menu
216
217 @node Der override-Befehl
218 @unnumberedsubsubsec Der @code{@bs{}override}-Befehl
219 @translationof The override command
220
221 @cindex override-Befehl
222 @funindex \override
223 @funindex override
224
225 @strong{Der \override-Befehl}
226
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.
234
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.
243
244 Die allgemeine Syntax dieses Befehles ist:
245
246 @example
247 \override @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft} = #@var{Wert}
248 @end example
249
250 @noindent
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
254 Wert @var{value}.
255
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.
262
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.
268
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}.
277
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:
282
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
287
288 @lilypond[quote,ragged-right,verbatim]
289 \relative {
290   c'4 d
291   \override NoteHead.color = #red
292   e4 f |
293   \override NoteHead.color = #green
294   g4 a b c |
295 }
296 @end lilypond
297
298
299 @node Der revert-Befehl
300 @unnumberedsubsubsec Der @code{@bs{}revert}-Befehl
301 @translationof The revert command
302
303 @cindex revert-Befehl
304
305 @funindex \revert
306 @funindex revert
307
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.
315
316 @example
317 \revert @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft}
318 @end example
319
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.
324
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
329
330 @lilypond[quote,ragged-right,verbatim]
331 \relative {
332   c'4 d
333   \override NoteHead.color = #red
334   e4 f |
335   \override NoteHead.color = #green
336   g4 a
337   \revert NoteHead.color
338   b4 c |
339 }
340 @end lilypond
341
342
343 @node Der once-Präfix
344 @unnumberedsubsubsec Der @code{@bs{}once}-Präfix
345 @translationof The once prefix
346
347 @funindex \once
348 @funindex once
349
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
357 geändert werden:
358
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
363
364 @lilypond[quote,verbatim]
365 \relative {
366   c'4 d
367   \override NoteHead.color = #red
368   e4 f |
369   \once \override NoteHead.color = #green
370   g4 a
371   \revert NoteHead.color
372   b c |
373 }
374 @end lilypond
375
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:
379
380 @lilypond[quote,verbatim]
381 \relative {
382   c'4( d)
383   \once \slurDashed
384   e4( f) |
385   g4( a)
386   \once \hideNotes
387   b( c) |
388 }
389 @end lilypond
390
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.
395
396
397 @node Der overrideProperty-Befehl
398 @unnumberedsubsubsec Der @code{@bs{}overrideProperty}-Befehl
399 @translationof The overrideProperty command
400
401 @cindex overrideProperty-Befehl
402
403 @funindex \overrideProperty
404 @funindex overrideProperty
405
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
412
413
414 @node Der tweak-Befehl
415 @unnumberedsubsubsec Der @code{@bs{}tweak}-Befehl
416 @translationof The tweak command
417
418 @cindex tweak-Befehl
419
420 @funindex \tweak
421 @funindex tweak
422
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.
431
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:
436
437 @cindex Schriftgröße, Beispiel
438 @cindex NoteHead, Beispiel für override
439 @cindex Notenkopf, Beispiel für Veränderung
440
441 @lilypond[quote,ragged-right,verbatim]
442 \relative {
443   <c' e g>4
444   \once \override NoteHead.font-size = #-3
445   <c e g>4
446   <c e g>4
447 }
448 @end lilypond
449
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.
456
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.
462
463 Um also zu unserem Beispiel zurückzukommen, könnte man die
464 mittlere Note eines Akkordes auf diese Weise ändern:
465
466 @cindex font-size-Eigenschaft, Beispiel
467 @cindex Schriftgröße, Beispiel
468 @cindex @code{\tweak}-Beispiel
469
470 @lilypond[quote,ragged-right,verbatim]
471 \relative {
472   <c' e g>4
473   <c \tweak font-size #-3 e g>4
474 }
475 @end lilypond
476
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
484
485 @example
486 \tweak @var{layout-eigenschaft} #@var{Wert}
487 @end example
488
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.
492
493 @cindex Farb-Eigenschaft, Beispiel
494 @cindex @code{\tweak}-Beispiel
495
496 @lilypond[quote,fragment,ragged-right,verbatim]
497 a'4^"Black"
498   -\tweak color #red ^"Red"
499   -\tweak color #green _"Green"
500 @end lilypond
501
502 @noindent
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.
508
509 @cindex @code{\tweak}, Versetzungszeichen
510 @cindex @code{\tweak}, bestimmtes Layout-Objekt
511
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:
517
518 @lilypond[quote,fragment,ragged-right,verbatim]
519 <\tweak Accidental.color #red   cis''4
520  \tweak Accidental.color #green es''
521  g''>
522 @end lilypond
523
524 Diese Langform des @code{\tweak}-Befehls kann wie folgend beschrieben werden:
525
526 @example
527 \tweak @var{layout-object}.@var{layout-property} @var{value}
528 @end example
529
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
536
537 @funindex TupletBracket
538
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
550 gesetzt wird.
551
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
557
558 @lilypond[quote,ragged-right,verbatim]
559 \relative c'' {
560   \tweak direction #up
561   \tuplet 3/4 {
562     \tweak color #red
563     \tuplet 3/2 { c8[ c c] }
564     \tuplet 3/2 { c8[ c c] }
565     \tuplet 3/2 { c8[ c c] }
566   }
567 }
568 @end lilypond
569
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:
573
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
580
581 @c NOTE Tuplet brackets collide if notes are high on staff
582 @c See issue 509
583 @lilypond[quote,ragged-right,verbatim]
584 \relative {
585   \tuplet 3/2 { c'8[ c c] }
586   \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
587   \tuplet 3/2 {
588     c8[ c]
589     c8[ c]
590     \once \override TupletNumber.transparent = ##t
591     \tuplet 3/2 { c8[ c c] }
592     \tuplet 3/2 { c8[ c c] }
593   }
594 }
595 @end lilypond
596
597
598 @seealso
599 Notationsreferenz:
600 @ruser{Der tweak-Befehl}.
601
602 @node Der single-Präfix
603 @unnumberedsubsubsec Der @code{@bs{}single}-Präfix
604 @translationof The single prefix
605
606 @funindex \single
607 @cindex tweak, von override erzeugt
608
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:
612
613 @lilypond[quote,verbatim]
614 emphNoteHead = {
615   \override NoteHead.color = #red
616   \override NoteHead.font-size = 2
617 }
618 \relative {
619   c''4 a \once \emphNoteHead f d |
620 }
621 @end lilypond
622
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:
630
631 @lilypond[quote,verbatim]
632 emphNoteHead = {
633   \override NoteHead.color = #red
634   \override NoteHead.font-size = 2
635 }
636 \relative {
637    <c'' a \single \emphNoteHead f d>4
638 }
639 @end lilypond
640
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
646 Objekte beträfe.
647
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.
652
653 @seealso
654 Handbuch zum Lernen:
655 @ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl},
656 @ref{Variablen für Layout Anpassungen einsetzen}.
657
658
659 @node Die Referenz der Programminterna
660 @section Die Referenz der Programminterna
661 @translationof The Internals Reference manual
662
663 @cindex Referenz der Programminterna
664 @cindex Programminterna, Referenz
665
666 @menu
667 * Eigenschaften von Layoutobjekten::
668 * Eigenschaften die Schnittstellen besitzen können::
669 * Typen von Eigenschaften::
670 @end menu
671
672 @node Eigenschaften von Layoutobjekten
673 @subsection Eigenschaften von Layoutobjekten
674 @translationof Properties of layout objects
675
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
682
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
697 konstruieren.
698
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.
708 @c For German users
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})
713  verwenden, in dem
714 die englischen Begriffe in viele andere Sprachen übersetzt sind.
715
716 @cindex Override-Beispiel
717 @cindex Referenz der Interna, Benutzung
718 @cindex IR (Referenz der Interna), Benutzung
719 @cindex @code{\addlyrics}-Beispiel
720
721 Das Vorgehen soll an einem konkreten Beispiel einer echten
722 Komposition demonstriert werden. Hier das Beispiel:
723
724 @c Mozart, Die Zauberflöte Nr. 7 Duett
725
726 @lilypond[quote,verbatim]
727 {
728   \key es \major
729   \time 6/8
730   \relative {
731     r4 bes'8 bes[( g]) g |
732     g8[( es]) es d[( f]) as |
733     as8 g
734   }
735   \addlyrics {
736     The man who | feels love's sweet e -- | mo -- tion
737   }
738 }
739 @end lilypond
740
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.
747
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.
758
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.
767
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
774 dort nachzuschlagen.
775
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:
782
783 @example
784 @code{thickness} (number)
785      @code{1.2}
786      Line thickness, generally measured in @code{line-thickness}
787 @end example
788
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.
795
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.
803
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:
809
810 @example
811 \override Slur.thickness = #5.0
812 @end example
813
814 Vergessen Sie nicht das@tie{}@code{#} vor dem neuen Wert!
815
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:
820
821 @cindex Legatobogen, Beispiel für Veränderung
822 @cindex thickness-Eigenschaft, Beispiel
823 @cindex Dicke-Eigenschaft, Beispiel
824
825 @lilypond[quote,verbatim]
826 {
827   \key es \major
828   \time 6/8
829   \relative {
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 |
834     as8 g
835   }
836   \addlyrics {
837     The man who | feels love's sweet e -- | mo -- tion
838   }
839 }
840 @end lilypond
841
842 @noindent
843 und wirklich wird der Legatobogen dicker.
844
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
851 erhalten.
852
853 @subsubsubheading Den Kontext finden
854
855 @cindex Kontext, Finden und identifizieren
856
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.
875
876 @subsubsubheading Nur einmal mit \override verändern
877
878 @cindex Override nur einmal
879 @cindex once override
880
881 @funindex \once
882 @funindex once
883
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:
894
895 @cindex Legatobogen, Beispiel zur Veränderung
896 @cindex thickness-Eigenschaft, Beispiel
897
898 @lilypond[quote,verbatim]
899 {
900   \key es \major
901   \time 6/8
902   \relative {
903     r4 bes'8
904     % Increase thickness of immediately following slur only
905     \once \override Slur.thickness = #5.0
906     bes8[( g]) g |
907     g8[( es]) es d[( f]) as |
908     as8 g
909   }
910   \addlyrics {
911     The man who | feels love's sweet e -- | mo -- tion
912   }
913 }
914 @end lilypond
915
916 @noindent
917 Jetzt bezieht er sich nur noch auf den ersten Legatobogen.
918
919 Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl
920 eingesetzt werden.
921
922 @subsubsubheading Rückgängig machen
923
924 @cindex Revert
925 @cindex Rückgängig machen
926 @cindex Wiederherstellen von Standardeinstellungen
927 @cindex Standardeinstellungen, Wiederherstellen
928
929 @funindex \revert
930 @funindex revert
931
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:
936
937 @cindex Legatobogen, Beispiel zur Veränderung
938 @cindex thickness-Eigenschaft, Beispiel
939
940 @lilypond[quote,verbatim]
941 {
942   \key es \major
943   \time 6/8
944   \relative {
945     r4 bes'8
946     % Increase thickness of immediately following slur only
947     \once \override Slur.thickness = #5.0
948     bes[( g]) g |
949     % Increase thickness of immediately following slur only
950     \once \override Slur.thickness = #5.0
951     g8[( es]) es d[( f]) as |
952     as8 g
953   }
954   \addlyrics {
955     The man who | feels love's sweet e -- | mo -- tion
956   }
957 }
958 @end lilypond
959
960 @noindent
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:
964
965 @cindex Legatobogen, Beispiel zur Veränderung
966 @cindex thickness-Eigenschaft, Beispiel
967
968 @lilypond[quote,verbatim]
969 {
970   \key es \major
971   \time 6/8
972   \relative {
973     r4 bes'8
974     % Increase thickness of all following slurs from 1.2 to 5.0
975     \override Slur.thickness = #5.0
976     bes[( g]) g |
977     g8[( es]) es
978     % Revert thickness of all following slurs to default of 1.2
979     \revert Slur.thickness
980     d8[( f]) as |
981     as8 g
982   }
983   \addlyrics {
984     The man who | feels love's sweet e -- | mo -- tion
985   }
986 }
987 @end lilypond
988
989 @noindent
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
994 Resultat.
995
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.
1002
1003
1004 @node Eigenschaften die Schnittstellen besitzen können
1005 @subsection Eigenschaften, die Schnittstellen besitzen können
1006 @translationof Properties found in interfaces
1007
1008 @cindex Interface-Eigenschaften
1009 @cindex Eigenschaften von Interfaces
1010 @cindex Schnittstellen, Eigenschaften von
1011 @cindex Eigenschaften von Schnittstellen
1012
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;
1025 in diesem Fall das
1026 @code{font-interface}.
1027
1028 Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden
1029 und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften
1030 benutzen.
1031
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}.
1038
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.
1044
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.
1060
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
1065 Kontext aus.
1066
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}.
1076
1077 Gut, der @code{\override}-Befehl, mit dem der Gesangstext
1078 kursiv gesetzt wird, lautet:
1079
1080 @example
1081 \override LyricText.font-shape = #'italic
1082 @end example
1083
1084 @noindent
1085 und er muss direkt vor den Text gesetzt werden, auf den er sich
1086 bezieht, etwa so:
1087
1088 @cindex font-shape-Eigenschaft, Beispiel
1089 @cindex LyricText, Beispiel zur Veränderung
1090 @cindex kursiv, Beispiel
1091 @cindex @code{\addlyrics}, Beispiel
1092
1093 @lilypond[quote,ragged-right,verbatim]
1094 {
1095   \key es \major
1096   \time 6/8
1097   \relative {
1098     r4 bes'8 bes[( g]) g |
1099     g8[( es]) es d[( f]) as |
1100     as8 g
1101   }
1102   \addlyrics {
1103     \override LyricText.font-shape = #'italic
1104     The man who | feels love's sweet e -- | mo -- tion
1105   }
1106 }
1107 @end lilypond
1108
1109 @noindent
1110 Jetzt wird der Text kursiv gesetzt.
1111
1112 @warning{Innerhalb von Gesangstext muss immer ein
1113 Leerzeichen zwischen der letzten Silbe und der schließenden
1114 Klammer gesetzt werden.}
1115
1116
1117 @seealso
1118 Erweitern: @rextend{Scheme-Tutorium}.
1119
1120
1121 @node Typen von Eigenschaften
1122 @subsection Typen von Eigenschaften
1123 @translationof Types of properties
1124
1125 @cindex Eigenschaftsarten
1126
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}.
1142
1143 @multitable @columnfractions .2 .45 .35
1144 @headitem Eigenschaftstyp
1145   @tab Regeln
1146   @tab Beispiele
1147 @item Boolesch
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}
1153 @item Richtung
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}}
1158 @item Integer
1159   @tab Eine ganze Zahl
1160   @tab @code{3}, @code{-1}
1161 @item Liste
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"}
1169 @item Moment
1170   @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
1171   konstruiert
1172   @tab @code{(ly:make-moment 1/4)},
1173        @code{(ly:make-moment 3/8)}
1174 @item Zahl
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)}
1181 @item Symbol
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}
1185 @item Unbekannt
1186   @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen)
1187   @tab @code{bend::print}, @code{ly:text-interface::print},
1188        @code{#f}
1189 @item Vektor
1190   @tab Konstanten, getrennt durch Leerzeichen, eingeschlossen in
1191   @code{#(}@dots{}@code{)}.
1192   @tab @code{#(#t #t #f)}
1193 @end multitable
1194
1195
1196 @seealso
1197 Erweitern: @rextend{Scheme-Tutorium}.
1198
1199
1200 @node Erscheinung von Objekten
1201 @section Erscheinung von Objekten
1202 @translationof Appearance of objects
1203
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.
1207
1208 @menu
1209 * Sichtbarkeit und Farbe von Objekten::
1210 * Größe von Objekten::
1211 * Länge und Dicke von Objekten::
1212 @end menu
1213
1214
1215 @node Sichtbarkeit und Farbe von Objekten
1216 @subsection Sichtbarkeit und Farbe von Objekten
1217 @translationof Visibility and color of objects
1218
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?
1226
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.
1240
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.
1257
1258 @menu
1259 * Die stencil-Eigenschaft::
1260 * Die break-visibility-Eigenschaft::
1261 * Die transparent-Eigenschaft::
1262 * Die color-Eigenschaft::
1263 @end menu
1264
1265 @node Die stencil-Eigenschaft
1266 @unnumberedsubsubsec Die @code{stencil}-Eigenschaft (Matrize)
1267 @translationof The stencil property
1268
1269 @cindex Stencil-Eigenschaft
1270 @cindex Matrizen-Eigenschaft
1271
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})
1278 auslassen:
1279
1280 @cindex Taktstrich, Beispiel zur Veränderung
1281 @cindex stencil-Eigenschaft, Beispiel
1282
1283 @lilypond[quote,ragged-right,verbatim]
1284 \relative {
1285   \time 12/16
1286   \override BarLine.stencil = ##f
1287   c''4 b8 c d16 c d8 |
1288   g,8 a16 b8 c d4 e16 |
1289   e8
1290 }
1291 @end lilypond
1292
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:
1309
1310 @cindex Taktstrich, Beispiel zur Veränderung
1311 @cindex stencil-Eigenschaft, Beispiel
1312
1313 @lilypond[quote,ragged-right,verbatim]
1314 \relative {
1315   \time 12/16
1316   \override Staff.BarLine.stencil = ##f
1317   c''4 b8 c d16 c d8 |
1318   g,8 a16 b8 c d4 e16 |
1319   e8
1320 }
1321 @end lilypond
1322
1323 @noindent
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}:
1327 @funindex \omit
1328
1329 @lilypond[quote,ragged-right,verbatim]
1330 \relative {
1331   \time 12/16
1332   \omit Staff.BarLine
1333   c''4 b8 c d16 c d8 |
1334   g,8 a16 b8 c d4 e16 |
1335   e8
1336 }
1337 @end lilypond
1338
1339
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:
1348
1349 @lilypond[quote,verbatim]
1350 \relative {
1351   c''4 c
1352   \once \override NoteHead.stencil = #point-stencil
1353   c4 c
1354 }
1355 @end lilypond
1356
1357 @node Die break-visibility-Eigenschaft
1358 @unnumberedsubsubsec The @code{break-visibility}-Eigenschaft (unsichtbar machen)
1359 @translationof The break-visibility property
1360
1361 @cindex break-visibility-Eigenschaft
1362 @cindex Unsichtbar machen (break-visibility)
1363
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.
1378
1379 @cindex Taktstrich, Beispiel zur Veränderung
1380 @cindex break-visibility-Eigenschaft, Beispiel
1381
1382 @lilypond[quote,ragged-right,verbatim]
1383 \relative {
1384   \time 12/16
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 |
1388   e8
1389 }
1390 @end lilypond
1391
1392 @noindent
1393 Auch auf diesem Weg gelingt es, die Taktstriche unsichtbar zu machen.
1394
1395 @node Die transparent-Eigenschaft
1396 @unnumberedsubsubsec Die @code{transparent}-Eigenschaft (durchsichtig)
1397 @translationof The transparent property
1398
1399 @cindex transparent-Eigenschaft
1400 @cindex Durchsichtig machen (transparent)
1401
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
1414 machen, ist also:
1415
1416 @cindex Taktart, Beispiel zur Veränderung
1417 @cindex transparent-Eigenschaft, Beispiel
1418
1419 @lilypond[quote,ragged-right,verbatim]
1420 \relative {
1421   \time 12/16
1422   \override Staff.TimeSignature.transparent = ##t
1423   c''4 b8 c d16 c d8 |
1424   g,8 a16 b8 c d4 e16 |
1425   e8
1426 }
1427 @end lilypond
1428
1429 @noindent
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}:
1432 @funindex \hide
1433
1434 @lilypond[quote,ragged-right,verbatim]
1435 \relative {
1436   \time 12/16
1437   \hide Staff.TimeSignature
1438   c''4 b8 c d16 c d8 |
1439   g,8 a16 b8 c d4 e16 |
1440   e8
1441 }
1442 @end lilypond
1443
1444 @noindent
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)
1451 gesetzt werden:
1452
1453 @cindex Taktart, Beispiel zur Veränderung
1454 @cindex stencil-Eigenschaft, Beispiel
1455
1456 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1457 {
1458   \time 12/16
1459   \override Staff.TimeSignature.stencil = ##f
1460   c4 b8 c d16 c d8 |
1461   g,8 a16 b8 c d4 e16 |
1462   e8
1463 }
1464 @end lilypond
1465
1466 @noindent
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.
1471
1472 @node Die color-Eigenschaft
1473 @unnumberedsubsubsec Die @code{color}-Eigenschaft (Farbe)
1474 @translationof The color property
1475
1476 @cindex color-Eigenschaft
1477 @cindex Farb-Eigenschaft
1478
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
1487 Beschränkung.)
1488
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:
1498
1499 @cindex Taktstrich, Beispiel zur Veränderung
1500 @cindex color-Eigenschaft, Beispiel
1501
1502 @lilypond[quote,ragged-right,verbatim]
1503 \relative {
1504   \time 12/16
1505   \override Staff.BarLine.color = #white
1506   c''4 b8 c d16 c d8 |
1507   g,8 a16 b8 c d4 e16 |
1508   e8
1509 }
1510 @end lilypond
1511
1512 @noindent
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.
1522
1523 @cindex Farben, X11
1524 @cindex X11-Farben
1525
1526 @funindex x11-color
1527
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:
1533
1534 @cindex Taktstrich, Beispiel zur Veränderung
1535 @cindex color-Eigenschaft, Beispiel
1536
1537 @lilypond[quote,ragged-right,verbatim]
1538 \relative {
1539   \time 12/16
1540   \override Staff.BarLine.color = #(x11-color 'white)
1541   c''4 b8 c d16 c d8 |
1542   g,8 a16 b8 c d4 e16 |
1543   e8
1544 }
1545 @end lilypond
1546
1547 @noindent
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.
1552
1553 @cindex RGB-Farben
1554 @cindex Farben, RGB
1555
1556 @funindex rgb-color
1557
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)}.
1565
1566 @cindex Taktstrich, Beispiel zur Veränderung
1567 @cindex color-Eigenschaft, Beispiel
1568
1569 @lilypond[quote,ragged-right,verbatim]
1570 \relative {
1571   \time 12/16
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 |
1575   e8
1576 }
1577 @end lilypond
1578
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:
1584
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
1598
1599 @lilypond[quote,ragged-right,verbatim]
1600 \relative {
1601   \time 12/16
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 |
1610   e8
1611 }
1612 @end lilypond
1613
1614 @noindent
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.
1624
1625
1626 @node Größe von Objekten
1627 @subsection Größe von Objekten
1628 @translationof Size of objects
1629
1630 @cindex Veränderung von Objektgrößen
1631 @cindex Objektgrößen, verändern
1632 @cindex Größen von Objekten verändern
1633
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}
1637 braucht.
1638
1639 @cindex alignAboveContext-Eigenschaft, Beispiel
1640 @cindex über dem System anordnen, Beispiel
1641 @cindex @code{\with}-Beispiel
1642
1643 @lilypond[quote,ragged-right,verbatim]
1644 \new Staff ="main" {
1645   \relative {
1646     r4 g'8 g c4 c8 d |
1647     e4 r8
1648     <<
1649       { f8 c c }
1650       \new Staff \with {
1651         alignAboveContext = #"main" }
1652       { f8 f c }
1653     >>
1654     r4 |
1655   }
1656 }
1657 @end lilypond
1658
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}:
1663
1664 @cindex alignAboveContext-Eigenschaft, Beispiel
1665 @cindex über dem System anordnen, Beispiel
1666 @cindex @code{\with}-Beispiel
1667 @funindex \omit
1668 @cindex Schlüssel, Beispiel zur Veränderung
1669 @cindex Taktart, Beispiel zur Veränderung
1670
1671 @lilypond[quote,ragged-right,verbatim]
1672 \new Staff ="main" {
1673   \relative {
1674     r4 g'8 g c4 c8 d |
1675     e4 r8
1676     <<
1677       { f8 c c }
1678       \new Staff \with {
1679         alignAboveContext = #"main"
1680       }
1681       {
1682         \omit Staff.Clef
1683         \omit Staff.TimeSignature
1684         { f8 f c }
1685       }
1686     >>
1687     r4 |
1688   }
1689 }
1690 @end lilypond
1691
1692 @noindent
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.
1696
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
1712 Standardwerte.
1713
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.
1723
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
1730 eine Fehlermeldung.
1731
1732 Das obige Beispiel könnte also auch so aussehen:
1733
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
1740
1741 @lilypond[quote,ragged-right,verbatim]
1742 \new Staff ="main" {
1743   \relative {
1744     r4 g'8 g c4 c8 d |
1745     e4 r8
1746     <<
1747       { f8 c c }
1748       \new Staff \with {
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
1754       }
1755       { f8 f c }
1756     >>
1757     r4 |
1758   }
1759 }
1760 @end lilypond
1761
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
1765 Fassung führt
1766
1767 @lilypond[quote,ragged-right,verbatim]
1768 \new Staff ="main" {
1769   \relative {
1770     r4 g'8 g c4 c8 d |
1771     e4 r8
1772     <<
1773       { f8 c c }
1774       \new Staff \with {
1775         alignAboveContext = #"main"
1776         % Don't print clefs in this staff
1777         \omit Clef
1778         % Don't print time signatures in this staff
1779         \omit TimeSignature
1780       }
1781       { f8 f c }
1782     >>
1783     r4 |
1784   }
1785 }
1786 @end lilypond
1787
1788 Nun können wir daran gehen, auch wirklich die
1789 Größe der Objekte zu ändern.
1790
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.
1805
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:
1810
1811 @example
1812 \override NoteHead.font-size = #-2
1813 @end example
1814
1815 @noindent
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.
1820
1821 @example
1822 \set fontSize = #-2
1823 @end example
1824
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.
1828
1829 Setzen wir das also in unserem Ossia-Beispiel ein:
1830
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
1837
1838 @lilypond[quote,ragged-right,verbatim]
1839 \new Staff ="main" {
1840   \relative {
1841     r4 g'8 g c4 c8 d |
1842     e4 r8
1843     <<
1844       { f8 c c }
1845       \new Staff \with {
1846         alignAboveContext = #"main"
1847         \omit Clef
1848         \omit TimeSignature
1849         % Verkleinere alle Fonts um ~24%
1850         fontSize = #-2
1851       }
1852       { f8 f c }
1853     >>
1854     r4 |
1855   }
1856 }
1857 @end lilypond
1858
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.
1864
1865
1866 @node Länge und Dicke von Objekten
1867 @subsection Länge und Dicke von Objekten
1868 @translationof Length and thickness of objects
1869
1870 @cindex Entfernungen
1871 @cindex Dicke
1872 @cindex Länge
1873 @funindex magstep
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
1878
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.
1890
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
1898 sie benutzt:
1899
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
1910
1911 @lilypond[quote,ragged-right,verbatim]
1912 \new Staff ="main" {
1913   \relative {
1914     r4 g'8 g c4 c8 d |
1915     e4 r8
1916     <<
1917       { f8 c c }
1918       \new Staff \with {
1919         alignAboveContext = #"main"
1920         \omit Clef
1921         \omit TimeSignature
1922         fontSize = #-2
1923         % Reduziere Halslängen und Notenlinienabstände in gleicher Weise
1924         \override StaffSymbol.staff-space = #(magstep -2)
1925       }
1926       { f8 f c }
1927     >>
1928     r4 |
1929   }
1930 }
1931 @end lilypond
1932
1933 @noindent
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.
1943
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
1946 werden.
1947
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.
1959
1960
1961 @node Positionierung von Objekten
1962 @section Positionierung von Objekten
1963 @translationof Placement of objects
1964
1965 @menu
1966 * Automatisches Verhalten::
1967 * within-staff (Objekte innerhalb des Notensystems)::
1968 * Objekte außerhalb des Notensystems::
1969 @end menu
1970
1971
1972 @node Automatisches Verhalten
1973 @subsection Automatisches Verhalten
1974 @translationof Automatic behavior
1975
1976 @cindex within-staff-Objekte
1977 @cindex outside-staff-Objekte
1978 @cindex Objekte innerhalb des Notensystems
1979 @cindex Objekte außerhalb des Notensystems
1980
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.
1985
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.
1995
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
2003 sollen.
2004
2005 Zuerst werden alle Innersystemobjekte von LilyPond gesetzt.
2006 Dann werden die Objekte außerhalb des Systems nach
2007 ihrer
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
2016 auftritt.
2017
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.
2022
2023 @cindex Textbeschriftungsbeispiel
2024
2025 @lilypond[quote,fragment,ragged-right,verbatim]
2026 c''2^"Text1"
2027 c''2^"Text2" |
2028 c''2^"Text3"
2029 c''2^"Text4" |
2030 @end lilypond
2031
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}.
2038
2039 @lilypond[quote,ragged-right,verbatim]
2040 <<
2041   \new Staff {
2042     \relative { c'4 a, }
2043   }
2044   \new Staff {
2045     \relative { c''''4 a, }
2046   }
2047 >>
2048 @end lilypond
2049
2050
2051 @node within-staff (Objekte innerhalb des Notensystems)
2052 @subsection within-staff (Objekte innerhalb des Notensystems)
2053 @translationof Within-staff objects
2054
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}.
2058 Diese Befehle
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.
2068
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
2074 wird.
2075
2076 @menu
2077 * Die direction-Eigenschaft::
2078 * Fingersatz::
2079 @end menu
2080
2081 @node Die direction-Eigenschaft
2082 @unnumberedsubsubsec The @code{direction}-Eigenschaft (Richtung)
2083 @translationof The direction property
2084
2085 @funindex down
2086 @funindex up
2087 @funindex center
2088 @funindex neutral
2089 @cindex hoch-Eigenschaft
2090 @cindex runter-Eigenschaft
2091 @cindex zentriert-Eigenschaft
2092 @cindex neutral-Eigenschaft
2093
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.
2099
2100 @cindex Legatobogen, Beispiel zur Veränderung
2101 @cindex Richtungseigenschaft, Beispiel
2102
2103 @lilypond[quote,fragment,verbatim]
2104 a'4( g') c''( a') |
2105 \override Slur.direction = #DOWN
2106 a'4( g') c''( a') |
2107 \override Slur.direction = #UP
2108 a'4( g') c''( a') |
2109 \revert Slur.direction
2110 a'4( g') c''( a') |
2111 @end lilypond
2112
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.
2120
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.
2124
2125 @multitable @columnfractions .2 .2 .25 .35
2126 @headitem Runter/Links
2127   @tab Rauf/Rechts
2128   @tab Rückgängig
2129   @tab Wirkung
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}
2135   @tab @code{\dotsUp}
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}
2147   @tab @code{\slurUp}
2148   @tab @code{\slurNeutral}
2149   @tab Befehl für Richtung von Legatobögen
2150 @item @code{\stemDown}
2151   @tab @code{\stemUp}
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}
2159   @tab @code{\tieUp}
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
2166 @end multitable
2167
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}
2174 machen würden.
2175
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:
2178
2179 @lilypond[quote,fragment,verbatim]
2180 a'4( g') c''( a') |
2181 a'4^( g') c''_( a') |
2182 @end lilypond
2183
2184 @node Fingersatz
2185 @unnumberedsubsubsec Fingersatz
2186 @translationof Fingering
2187
2188 @cindex Fingersatz, Positionierung
2189 @cindex Fingersatz, Akkorde
2190
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
2198 ihr sind.
2199
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}
2203 (hinauf).
2204
2205 @cindex Fingersatz, Beispiel zur Veränderung
2206 @cindex direction-Eigenschaft, Beispiel
2207
2208 @lilypond[quote,verbatim]
2209 \relative {
2210   c''4-5 a-3 f-1 c'-5 |
2211   \override Fingering.direction = #DOWN
2212   c4-5 a-3 f-1 c'-5 |
2213   \override Fingering.direction = #UP
2214   c4-5 a-3 f-1 c'-5 |
2215 }
2216 @end lilypond
2217
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:
2223
2224 @cindex Fingersatz-Beispiel
2225
2226 @lilypond[quote,verbatim]
2227 \relative {
2228   c''4-5 a-3 f-1 c'-5 |
2229   c4_5 a_3 f_1 c'_5 |
2230   c4^5 a^3 f^1 c'^5 |
2231 }
2232 @end lilypond
2233
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:
2238
2239 @cindex Fingersatz-Beispiel
2240
2241 @lilypond[quote,verbatim]
2242 \relative {
2243   <c''-5 g-3>4
2244   <c-5 g-3 e-2>4
2245   <c-5 g-3 e-2 c-1>4
2246 }
2247 @end lilypond
2248
2249 @noindent
2250 aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen
2251 nach oben oder unten zu zwingen:
2252
2253 @cindex Fingersatz-Beispiel
2254
2255 @lilypond[quote,verbatim]
2256 \relative {
2257   <c''-5 g-3 e-2 c-1>4
2258   <c^5 g_3 e_2 c_1>4
2259   <c^5 g^3 e^2 c_1>4
2260 }
2261 @end lilypond
2262
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
2266 lautet:
2267
2268 @example
2269 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2270 @end example
2271
2272 @noindent
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}.
2276
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.
2288
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
2292 werden.}
2293
2294 Hier ein paar Beispiele:
2295
2296 @cindex Fingersatz-Beispiel
2297 @cindex @code{\set}, Benutzungsbeispiel
2298 @cindex fingerOrientations-Eigenschaft, Beispiel
2299
2300 @lilypond[quote,ragged-right,verbatim]
2301 \relative {
2302   \set fingeringOrientations = #'(left)
2303   <f'-2>4
2304   <c-1 e-2 g-3 b-5>4
2305   \set fingeringOrientations = #'(left)
2306   <f-2>4
2307   <c-1 e-2 g-3 b-5>4 |
2308   \set fingeringOrientations = #'(up left down)
2309   <f-2>4
2310   <c-1 e-2 g-3 b-5>4
2311   \set fingeringOrientations = #'(up left)
2312   <f-2>4
2313   <c-1 e-2 g-3 b-5>4 |
2314   \set fingeringOrientations = #'(right)
2315   <f-2>4
2316   <c-1 e-2 g-3 b-5>4
2317 }
2318 @end lilypond
2319
2320 @noindent
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}}.
2326
2327 @lilypond[quote,ragged-right,verbatim]
2328 \relative {
2329   \override Fingering.font-size = #-7
2330   \set fingeringOrientations = #'(left)
2331   <f'-2>4
2332   <c-1 e-2 g-3 b-5>4
2333   \set fingeringOrientations = #'(left)
2334   <f-2>4
2335   <c-1 e-2 g-3 b-5>4 |
2336   \set fingeringOrientations = #'(up left down)
2337   <f-2>4
2338   <c-1 e-2 g-3 b-5>4
2339   \set fingeringOrientations = #'(up left)
2340   <f-2>4
2341   <c-1 e-2 g-3 b-5>4 |
2342   \set fingeringOrientations = #'(right)
2343   <f-2>4
2344   <c-1 e-2 g-3 b-5>4
2345 }
2346 @end lilypond
2347
2348 @node Objekte außerhalb des Notensystems
2349 @subsection Objekte außerhalb des Notensystems
2350 @translationof Outside-staff objects
2351
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.
2356
2357 @menu
2358 * Die outside-staff-priority-Eigenschaft::
2359 * Der textLengthOn-Befehl::
2360 * Positionierung von Dynamikzeichen::
2361 * Verändern der Größe von grobs::
2362 @end menu
2363
2364
2365 @node Die outside-staff-priority-Eigenschaft
2366 @unnumberedsubsubsec Die @code{outside-staff-priority}-Eigenschaft
2367 @translationof The outside-staff-priority property
2368
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.
2381
2382 @cindex spanners
2383 @cindex Strecker
2384
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
2397 beinhaltet.
2398
2399 @multitable @columnfractions .3 .3 .3
2400 @headitem Layout-Objekt
2401   @tab Priorität
2402   @tab Kontrolliert Position von:
2403 @item @code{RehearsalMark}
2404   @tab @code{1500}
2405   @tab Übungszeichen
2406 @item @code{MetronomeMark}
2407   @tab @code{1000}
2408   @tab Metronomzeichen
2409 @item @code{VoltaBracketSpanner}
2410   @tab @code{600}
2411   @tab Volta-Wiederholungsklammern
2412 @item @code{TextScript}
2413   @tab @code{450}
2414   @tab Textbeschriftung
2415 @item @code{MultiMeasureRestText}
2416   @tab @code{450}
2417   @tab Text über Ganztaktpausen
2418 @item @code{OttavaBracket}
2419   @tab @code{400}
2420   @tab Ottava (Oktavierungsklammern)
2421 @item @code{TextSpanner}
2422   @tab @code{350}
2423   @tab Text-Strecker
2424 @item @code{DynamicLineSpanner}
2425   @tab @code{250}
2426   @tab Alle Dynamik-Bezeichnungen
2427 @item @code{BarNumber}
2428   @tab @code{ 100}
2429   @tab Taktzahlen
2430 @item @code{TrillSpanner}
2431   @tab @code{50}
2432   @tab Triller-Strecker
2433 @end multitable
2434
2435 Hier ein Beispiel, das die Standardpositionierung von einigen
2436 Objekten zeigt.
2437
2438 @cindex Text-Strecker
2439 @cindex Text-Spanner
2440
2441 @funindex \startTextSpan
2442 @funindex \stopTextSpan
2443 @funindex startTextSpan
2444 @funindex stopTextSpan
2445
2446 @cindex Ottava-Klammer
2447 @cindex Oktavierungsklammer
2448
2449 @cindex TextSpanner, Beispiel zur Veränderung
2450 @cindex bound-details-Eigenschaft, Beispiel
2451
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
2457 \dynamicUp
2458 % Start Ottava Bracket
2459 \ottava #1
2460 c''4 \startTextSpan
2461 % Add Dynamic Text and hairpin
2462 c''4\pp\<
2463 c''4
2464 % Add Text Script
2465 c''4^Text |
2466 c''4 c''
2467 % Add Dynamic Text and terminate hairpin
2468 c''4\ff c'' \stopTextSpan |
2469 % Stop Ottava Bracket
2470 \ottava #0
2471 c'4 c' c' c' |
2472 @end lilypond
2473
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}.
2481
2482 Im Beispiel wird auch gezeigt, wie Oktavierungsklammern
2483 (Ottava) erstellt werden.
2484
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
2492
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
2503 erstellt wird:
2504
2505 @cindex TextSpanner, Beispiel zur Veränderung
2506 @cindex bound-details-Eigenschaft, Beispiel
2507
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
2513 \dynamicUp
2514 % Place following Ottava Bracket below Text Spanners
2515 \once \override Staff.OttavaBracket.outside-staff-priority = #340
2516 % Start Ottava Bracket
2517 \ottava #1
2518 c''4 \startTextSpan
2519 % Add Dynamic Text
2520 c''4\pp
2521 % Add Dynamic Line Spanner
2522 c''4\<
2523 % Add Text Script
2524 c''4^Text |
2525 c''4 c''
2526 % Add Dynamic Text
2527 c''4\ff c'' \stopTextSpan |
2528 % Stop Ottava Bracket
2529 \ottava #0
2530 c'4 c' c' c' |
2531 @end lilypond
2532
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.
2537
2538 @cindex Legatobögen und outside-staff-priority
2539 @cindex Legatobögen und Artikulationszeichen
2540 @cindex Artikulationszeichen und Legatobögen
2541
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:
2553
2554 @lilypond[quote,verbatim]
2555 \relative c'' {
2556   c4( c^\markup { \tiny \sharp } d4.) c8 |
2557   c4(
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 |
2563 }
2564 @end lilypond
2565
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:
2575
2576 @cindex TextScript, Beispiel zur Veränderung
2577 @cindex outside-staff-priority-Eigenschaft, Beispiel
2578
2579 @lilypond[quote,fragment,ragged-right,verbatim]
2580 c''2^"Text1"
2581 c''2^"Text2" |
2582 \once \override TextScript.outside-staff-priority = #500
2583 c''2^"Text3"
2584 c''2^"Text4" |
2585 @end lilypond
2586
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.
2594
2595 @node Der textLengthOn-Befehl
2596 @unnumberedsubsubsec Der @code{@bs{}textLengthOn}-Befehl (Textlänge berücksichtigen)
2597 @translationof The textLengthOn command
2598
2599 @cindex Noten, durch Text gespreizt
2600
2601 @funindex \textLengthOn
2602 @funindex textLengthOn
2603 @funindex \textLengthOff
2604 @funindex textLengthOff
2605
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:
2612
2613 @lilypond[quote,fragment,ragged-right,verbatim]
2614 \textLengthOn  % Cause notes to space out to accommodate text
2615 c''2^"Text1"
2616 c''2^"Text2" |
2617 c''2^"Text3"
2618 c''2^"Text4" |
2619 @end lilypond
2620
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.
2628
2629 @cindex Textbeschriftung, Vermeidung von Zusammenstößen
2630 @cindex Zusammenstöße vermeiden mit Textbeschriftung
2631
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:
2637
2638 @cindex Textbeschriftung, Beispiel zur Veränderung
2639 @cindex outside-staff-priority-Eigenschaft, Beispiel
2640
2641 @lilypond[quote,ragged-right,verbatim]
2642 \relative {
2643   % This markup is short enough to fit without collision
2644   c''2^"Tex" c'' |
2645   R1 |
2646
2647   % This is too long to fit, so it is displaced upwards
2648   c,,2^"Text" c'' |
2649   R1 |
2650
2651   % Turn off collision avoidance
2652   \once \override TextScript.outside-staff-priority = ##f
2653   c,,2^"Long Text   " c'' |
2654   R1 |
2655
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
2660   c''2 |
2661 }
2662 @end lilypond
2663
2664 @node Positionierung von Dynamikzeichen
2665 @unnumberedsubsubsec Positionierung von Dynamikzeichen
2666 @translationof Dynamics placement
2667
2668 @cindex Verändern der Positionierung von Dynamikzeichen
2669 @cindex Dynamikzeichen: Positionierung verändern
2670
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
2678 folgenden Beispiel:
2679
2680 @lilypond[quote,ragged-right,verbatim]
2681 \relative {
2682   \clef "bass"
2683   \key aes \major
2684   \time 9/8
2685   \dynamicUp
2686   bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2687   ees,2.~\)\mf ees4 r8 |
2688 }
2689 @end lilypond
2690
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:
2696
2697 @lilypond[quote,ragged-right,verbatim,fragment]
2698 \dynamicUp
2699 \relative { a'4\f b\mf a\mp b\p }
2700 @end lilypond
2701
2702 @noindent
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}
2710 konstruieren.
2711
2712 @node Verändern der Größe von grobs
2713 @unnumberedsubsubsec Verändern der Größe von grobs
2714 @translationof Grob sizing
2715
2716 @cindex Grob, Größenveränderung
2717 @cindex Größenveränderung von grobs
2718
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.
2732
2733 @cindex @code{extra-spacing-width}
2734
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:
2746
2747 @example
2748 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2749 @end example
2750
2751 @noindent
2752 Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
2753
2754 @cindex DynamicText, Beispiel zur Veränderung
2755 @cindex extra-spacing-width-Eigenschaft, Beispiel
2756
2757
2758 @lilypond[quote,ragged-right,verbatim,fragment]
2759 \dynamicUp
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 }
2763 @end lilypond
2764
2765 @noindent
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.
2771
2772
2773 @node Vertikale Abstände
2774 @section Vertikale Abstände
2775 @translationof Vertical spacing
2776
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:
2780
2781 @lilypond[quote,fragment,ragged-right]
2782 <<
2783   \new ChoirStaff
2784   <<
2785     \new Staff {
2786       \new Voice = "music" {
2787         b'2 c' c' c'
2788       }
2789     }
2790     \new Lyrics
2791     \lyricsto "music" {
2792       Here are some lyrics
2793     }
2794     \new Staff {
2795       \clef bass e'2 f e c
2796     }
2797   >>
2798   \new PianoStaff
2799   <<
2800     \new Staff {
2801       g''2 c'' c'' a''
2802     }
2803     \new Staff {
2804       \clef bass e2 f c e
2805     }
2806   >>
2807 >>
2808 @end lilypond
2809
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.
2816
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.
2827
2828 @lilypond[quote,fragment,ragged-right,verbatim]
2829 <<
2830   \new ChoirStaff
2831   <<
2832     \new Staff {
2833       \new Voice = "music" {
2834         b'2 c' c' c'
2835       }
2836     }
2837     \new Lyrics \with {
2838       \override VerticalAxisGroup.
2839         nonstaff-relatedstaff-spacing.padding = #5
2840       \override VerticalAxisGroup.
2841         nonstaff-unrelatedstaff-spacing.padding = #5
2842     }
2843     \lyricsto "music" {
2844       Here are some lyrics
2845     }
2846     \new Staff {
2847       \clef bass e'2 f e c
2848     }
2849   >>
2850   \new PianoStaff
2851   <<
2852     \new Staff {
2853       g''2 c'' c'' a''
2854     }
2855     \new Staff {
2856       \clef bass e2 f c e
2857     }
2858   >>
2859 >>
2860 @end lilypond
2861
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.
2866
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.
2872
2873 @lilypond[quote,fragment,ragged-right,verbatim]
2874 <<
2875   \new ChoirStaff \with {
2876     \override StaffGrouper.
2877       staffgroup-staff-spacing.basic-distance = #15
2878   }
2879   <<
2880     \new Staff {
2881       \new Voice = "music" {
2882         b'2 c' c' c'
2883       }
2884     }
2885     \new Lyrics \with {
2886       \override VerticalAxisGroup.
2887         nonstaff-relatedstaff-spacing.padding = #2
2888       \override VerticalAxisGroup.
2889         nonstaff-unrelatedstaff-spacing.padding = #2
2890     }
2891     \lyricsto "music" {
2892       Here are some lyrics
2893     }
2894     \new Staff {
2895       \clef bass e'2 f e c
2896     }
2897   >>
2898   \new PianoStaff
2899   <<
2900     \new Staff {
2901       g''2 c'' c'' a''
2902     }
2903     \new Staff {
2904       \clef bass e2 f c e
2905     }
2906   >>
2907 >>
2908 @end lilypond
2909
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.
2915
2916 @lilypond[quote,fragment,ragged-right,verbatim]
2917 <<
2918   \new ChoirStaff \with {
2919     \override StaffGrouper.
2920       staffgroup-staff-spacing.basic-distance = #15
2921   }
2922   <<
2923     \new Staff {
2924       \new Voice = "music" {
2925         b'2 c' c' c'
2926       }
2927     }
2928     \new Lyrics \with {
2929       \override VerticalAxisGroup.
2930         nonstaff-relatedstaff-spacing.padding = #2
2931       \override VerticalAxisGroup.
2932         nonstaff-unrelatedstaff-spacing.padding = #2
2933     }
2934     \lyricsto "music" {
2935       Here are some lyrics
2936     }
2937     \new Staff {
2938       \clef bass e'2 f e c
2939     }
2940   >>
2941   \new PianoStaff \with {
2942     \override StaffGrouper.staff-staff-spacing = #'(
2943                             (basic-distance . 0)
2944                             (padding . 0))
2945   }
2946   <<
2947     \new Staff {
2948       g''2 c'' c'' a''
2949     }
2950     \new Staff {
2951       \clef bass e2 f c e
2952     }
2953   >>
2954 >>
2955 @end lilypond
2956
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}
2960 ändern.
2961
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
2971 Details.
2972
2973 @node Kollision von Objekten
2974 @section Kollision von Objekten
2975 @translationof Collisions of objects
2976
2977 @menu
2978 * Verschieben von Objekten::
2979 * Überlappende Notation in Ordnung bringen::
2980 * Beispiel aus dem Leben::
2981 @end menu
2982
2983 @node Verschieben von Objekten
2984 @subsection Verschieben von Objekten
2985 @translationof Moving objects
2986
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
2992
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
2998 Platz erhalten.
2999
3000 Es gibt im Grunde drei Herangehensweisen, überlappende Notation
3001 zu verbessern.  Man sollte sie in der folgenden Reihenfolge
3002 anwenden:
3003
3004 @enumerate
3005 @item
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.
3014
3015 @item
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
3023 gehören:
3024
3025 @itemize
3026
3027 @item
3028 @code{direction} (Richtung)
3029
3030 Das wurde schon detailliert behandelt, siehe
3031 @ref{within-staff (Objekte innerhalb des Notensystems)}.
3032
3033 @item
3034 @code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung)
3035
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)
3042
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.
3053
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.
3067
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.
3082
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
3089 haben.
3090
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.
3096
3097 @item
3098 @code{self-alignment-X} (Selbstpositionierung)
3099
3100 @cindex self-alignment-X-Eigenschaft
3101 @cindex Selbstpositionierung von Objekten
3102 @cindex Ausrichtung von Objekten
3103
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.
3120
3121 @item
3122 @code{extra-spacing-width} (zusätzliche Breite)
3123
3124 @cindex extra-spacing-width-Eigenschaft
3125
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.
3136
3137 @item
3138 @code{staff-position} (Notensystempositionierung)
3139
3140 @cindex staff-position-Eigenschaft
3141
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
3149 zu lösen.
3150
3151 @item
3152 @code{horizontal-shift} (horizontale Verschiebung)
3153
3154 @cindex horizontal-shift-Eigenschaft
3155 @cindex Notenkolumne
3156 @cindex Notenkollisionen
3157 @cindex Kollision, Noten
3158 @cindex shift Befehl
3159 @funindex \shiftOff
3160 @funindex shiftOff
3161 @funindex \shiftOn
3162 @funindex shiftOn
3163 @funindex \shiftOnn
3164 @funindex shiftOnn
3165 @funindex \shiftOnnn
3166 @funindex shiftOnnn
3167
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.
3187
3188 @item
3189 @code{force-hshift} (horizontale Verschiebung erzwingen)
3190
3191 @cindex force-hshift-Eigenschaft
3192
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.
3208
3209 @end itemize
3210
3211 @item
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:
3226
3227 @table @code
3228 @item extra-offset (zusätzlicher Abstand)
3229
3230 @cindex extra-offset-Eigenschaft
3231
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.
3240
3241 @item positions (Position)
3242
3243 @cindex positions-Eigenschaft
3244
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
3255 nächsten kommt.
3256 @end table
3257
3258 @end enumerate
3259
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.
3263
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.
3268
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}
3281 @end multitable
3282
3283
3284 @node Überlappende Notation in Ordnung bringen
3285 @subsection Überlappende Notation in Ordnung bringen
3286 @translationof Fixing overlapping notation
3287
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
3291 werden können.
3292
3293 @menu
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::
3302 @end menu
3303
3304 @node Die padding-Eigenschaft
3305 @unnumberedsubsubsec Die @code{padding}-Eigenschaft (auffüllen)
3306 @translationof The padding property
3307
3308 @cindex padding (Verschiebungs-Eigenschaft)
3309 @cindex Überschneidende Notation korrigieren
3310 @cindex Korrigieren von überschneidender Notation
3311
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.
3315
3316 @cindex Script, Beispiel zur Veränderung
3317 @cindex Verschiebungs-Eigenschaft, Beispiel
3318 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3319
3320 @lilypond[quote,fragment,verbatim]
3321 c'2\fermata
3322 \override Script.padding = #3
3323 b2\fermata
3324 @end lilypond
3325
3326 @cindex MetronomMark, Beispiel zur Veränderung
3327 @cindex Verschiebungs-Eigenschaft, Beispiel
3328 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3329
3330 @lilypond[quote,fragment,verbatim]
3331 % This will not work, see below
3332 \override MetronomeMark.padding = #3
3333 \tempo 4 = 120
3334 c'1 |
3335 % This works
3336 \override Score.MetronomeMark.padding = #3
3337 \tempo 4 = 80
3338 d'1 |
3339 @end lilypond
3340
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}.
3346
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.
3352
3353
3354 @node Die right-padding-Eigenschaft
3355 @unnumberedsubsubsec Die @code{right-padding}-Eigenschaft (rechts auffüllen)
3356 @translationof The right-padding property
3357
3358 @cindex Verschiebung nach links
3359 @cindex right-padding-Eigenschaft (Verschiebung nach links)
3360
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:
3370
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
3378
3379 @lilypond[quote,ragged-right,verbatim]
3380 sesquisharp = \markup { \sesquisharp }
3381  \relative {
3382   c''4
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
3386   cis4 c
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
3391   cis4
3392 }
3393 @end lilypond
3394
3395 @noindent
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.
3405
3406 @node Die staff-padding-Eigenschaft
3407 @unnumberedsubsubsec The @code{staff-padding}-Eigenschaft (Systemfüllungseigenschaft)
3408 @translationof The staff-padding property
3409
3410 @cindex staff-padding-Eigenschaft
3411 @cindex Objekte an der Grundlinie ausrichten
3412 @cindex Ausrichten von Objekten an der Grundlinie
3413
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:
3424
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
3429
3430 @lilypond[quote,fragment,ragged-right,verbatim]
3431 \override DynamicLineSpanner.staff-padding = #3
3432 \relative { a'4\f b\mf a\p b\mp }
3433 @end lilypond
3434
3435
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
3439
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
3443 ausgerichtet wird:
3444
3445 @cindex StringNumber, Beispiel zur Veränderung
3446 @cindex self-alignment-X-Eigenschaft
3447 @cindex Selbstausrichtung-X-Eigenschaft
3448
3449 @lilypond[quote,fragment,ragged-right,verbatim]
3450 \voiceOne
3451 <a''\2>
3452 \once \override StringNumber.self-alignment-X = #RIGHT
3453 <a''\2>
3454 @end lilypond
3455
3456 @node Die staff-position-Eigenschaft
3457 @unnumberedsubsubsec Die @code{staff-position}-Eigenschaft (Position innerhalb des Systems)
3458 @translationof The staff-position property
3459
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
3464
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:
3473
3474 @lilypond[quote,verbatim,ragged-right]
3475 << \relative { c'4 c c c } \\ { R1 } >>
3476 @end lilypond
3477
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:
3487
3488 @cindex MultiMeasureRest, Beispiel zur Veränderung
3489 @cindex Ganztaktpausen, Beispiel zur Veränderung
3490 @cindex staff-position-Eigenschaft, Beispiel
3491
3492 @lilypond[quote,verbatim,ragged-right]
3493 <<
3494   \relative { c'4 c c c }
3495   \\
3496   \override MultiMeasureRest.staff-position = #-8
3497   { R1 }
3498 >>
3499 @end lilypond
3500
3501 Das ist besser, als etwa @code{extra-offset} zu benutzen, denn
3502 in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt.
3503
3504 @node Die extra-offset-Eigenschaft
3505 @unnumberedsubsubsec Die @code{extra-offset}-Eigenschaft (Genaues Positionieren)
3506 @translationof The extra-offset property
3507
3508 @cindex extra-offset-Eigenschaft
3509 @cindex Zusätzlicher Abstand, Positionierung
3510 @cindex Positionierung von Objekten
3511 @cindex Objekte, Positionierung
3512
3513 Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle
3514 über die Positionierung von Objekten in horizontaler und vertikaler
3515 Richtung.
3516
3517 Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach
3518 links und 1,8 Notenlinienabstände nach unten verschoben:
3519
3520 @cindex Fingersatz, Beispiel zur Veränderung
3521 @cindex extra-offset-Eigenschaft, Beispiel
3522
3523 @lilypond[quote,fragment,verbatim]
3524 f'4-5
3525 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3526 f'4-5
3527 @end lilypond
3528
3529
3530 @node Die positions-Eigenschaft
3531 @unnumberedsubsubsec Die @code{positions}-Eigenschaft (Ausrichtungseigenschaft)
3532 @translationof The positions property
3533
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
3542
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.
3546
3547 Im folgenden Beispiel überlappen der Legato- und er Phrasierungsbogen:
3548
3549 @lilypond[quote,verbatim,ragged-right]
3550 \relative { a'8 \( ( a'16 ) a \) }
3551 @end lilypond
3552
3553 @cindex Phrasierungsbogen, Beispiel zur Veränderung
3554 @cindex positions-Eigenschaft, Beispiel
3555 @cindex Positionierung, Beispiel
3556
3557 @noindent
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:
3563
3564 @lilypond[quote,verbatim,fragment,ragged-right]
3565 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3566 a'8 \( ( a''16 ) a'' \)
3567 @end lilypond
3568
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.
3578
3579 Hier noch ein weiteres Beispiel.  Wie zu sehen ist,
3580 stößt der Balken mit den oberen Bögen zusammen:
3581
3582 @lilypond[quote,verbatim,ragged-right]
3583 {
3584   \time 4/2
3585   <<
3586     \relative { c'1~ 2. e8 f }
3587     \\
3588     \relative {
3589       e''8 e e e
3590       e e e e
3591       f2 g
3592     }
3593   >>
3594   <<
3595     \relative { c'1~ 2. e8 f }
3596     \\
3597     \relative {
3598       e''8 e e e
3599       e e e e
3600       f2 g
3601     }
3602   >>
3603 }
3604 @end lilypond
3605
3606 @noindent
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:
3610
3611 @cindex Balken, Beispiel zur Veränderung
3612 @cindex positions-Eigenschaft, Beispiel
3613 @cindex Positionierung, Beispiel
3614
3615 @lilypond[quote,verbatim,ragged-right]
3616 {
3617   \time 4/2
3618   <<
3619     \relative { c'1~ 2. e8 f }
3620     \\
3621     \relative {
3622       \override Beam.positions = #'(-1 . -1)
3623       e''8 e e e
3624       e e e e
3625       f2 g
3626     }
3627   >>
3628   <<
3629     \relative { c'1~ 2. e8 f }
3630     \\
3631     \relative {
3632       e''8 e e e
3633       e e e e
3634       f2 g
3635       \revert Beam.positions
3636     }
3637   >>
3638 }
3639 @end lilypond
3640
3641 @noindent
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.
3647
3648 @node Die force-hshift-Eigenschaft
3649 @unnumberedsubsubsec Die @code{force-hshift}-Eigenschaft (horizontale Verschiebunseigenschaft)
3650 @translationof The force-hshift property
3651
3652 @cindex force-hshift-Eigenschaft
3653 @cindex Vertikale Verschiebung erzwingen
3654
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
3658 gebracht:
3659
3660 @lilypond[quote,verbatim,fragment,ragged-right]
3661 \new Staff \relative {
3662   \key aes \major
3663   <<
3664     { c''2 aes4. bes8 }
3665     \\
3666     { <ees, c>2 des }
3667     \\
3668     \\
3669     { aes'2 f4 fes }
3670   >> |
3671   <c ees aes c>1 |
3672 }
3673 @end lilypond
3674
3675 @noindent
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}.
3679
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
3690 schlechter Stil.
3691
3692 Hier das Endergebnis:
3693
3694 @cindex Notenkolumne, Beispiel zur Veränderung
3695 @cindex force-hshift-Eigenschaft, Beispiel
3696 @cindex vertikale Verschiebung, Beispiel
3697
3698 @lilypond[quote,verbatim,fragment,ragged-right]
3699 \new Staff \relative {
3700   \key aes \major
3701   <<
3702     { c''2 aes4. bes8 }
3703     \\
3704     { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
3705     \\
3706     \\
3707     { \once \shiftOff aes'2 \once \shiftOff f4 fes }
3708   >> |
3709   <c ees aes c>1 |
3710 }
3711 @end lilypond
3712
3713
3714 @node Beispiel aus dem Leben
3715 @subsection Beispiel aus dem Leben
3716 @translationof Real music example
3717
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.
3726
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.
3732
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 {
3738   \new Voice {
3739     r2 c''4.\( g8 |
3740     \once \override Tie.staff-position = #3.5
3741     bes1~ |
3742     \bar "||"
3743     \time 6/4
3744     \mergeDifferentlyHeadedOn
3745     \mergeDifferentlyDottedOn
3746     bes2.\tempo "Moderato" r8
3747     <<
3748       { c,8 d fis bes a }
3749       \new Voice {
3750         \voiceTwo
3751         c,8~
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
3756         \shiftOnn
3757         c2
3758       }
3759       \new Voice {
3760         \voiceThree
3761         s8
3762         % Stem on the d2 must be down to permit merging
3763         \stemDown
3764         % Stem on the d2 should be invisible
3765         \tweak Stem.transparent ##t
3766         d2
3767       }
3768       \new Voice {
3769         \voiceFour
3770         s4 fis4.
3771       }
3772     >> |
3773     \mergeDifferentlyHeadedOff
3774     \mergeDifferentlyDottedOff
3775     g2.\)
3776   }
3777 }
3778
3779 lhMusic = \relative {
3780   r2 <c' g ees>2( |
3781   <d g, d>1)\arpeggio |
3782   r2. d,,4 r4 r |
3783   r4
3784 }
3785
3786 \score {
3787   \new PianoStaff <<
3788     \new Staff = "RH"  <<
3789       \key g \minor
3790       \rhMusic
3791     >>
3792     \new Staff = "LH" <<
3793       \key g \minor
3794       \clef "bass"
3795       \lhMusic
3796     >>
3797   >>
3798 }
3799 @end lilypond
3800
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.
3814
3815
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
3819 erstellt:
3820
3821 @c line-width ensures no break
3822 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3823 rhMusic = \relative {
3824   \new Voice {
3825     r2 c''4. g8 |
3826     bes1~ |
3827     \time 6/4
3828     bes2. r8
3829     % Start polyphonic section of four voices
3830     <<
3831       { c,8 d fis bes a }  % continuation of main voice
3832       \new Voice {
3833         \voiceTwo
3834         c,8~ 2
3835       }
3836       \new Voice {
3837         \voiceThree
3838         s8 d2
3839       }
3840       \new Voice {
3841         \voiceFour
3842         s4 fis4.
3843       }
3844     >> |
3845     g2.  % continuation of main voice
3846   }
3847 }
3848
3849 lhMusic = \relative {
3850   r2 <c' g ees>2 |
3851   <d g, d>1 |
3852   r2. d,,4 r4 r |
3853   r4
3854 }
3855
3856 \score {
3857   \new PianoStaff <<
3858     \new Staff = "RH"  <<
3859       \key g \minor
3860       \rhMusic
3861     >>
3862     \new Staff = "LH" <<
3863       \key g \minor
3864       \clef "bass"
3865       \lhMusic
3866     >>
3867   >>
3868 }
3869 @end lilypond
3870
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:
3881
3882 @c line-width ensures no break
3883 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3884 rhMusic = \relative {
3885   \new Voice {
3886     r2 c''4.\( g8 |
3887     bes1~ |
3888     \time 6/4
3889     bes2. r8
3890     % Start polyphonic section of four voices
3891     <<
3892       { c,8 d fis bes a }  % continuation of main voice
3893       \new Voice {
3894         \voiceTwo
3895         c,8~ 2
3896       }
3897       \new Voice {
3898         \voiceThree
3899         s8 d2
3900       }
3901       \new Voice {
3902         \voiceFour
3903         s4 fis4.
3904       }
3905     >> |
3906     g2.\)  % continuation of main voice
3907   }
3908 }
3909
3910 lhMusic = \relative {
3911   r2 <c' g ees>2( |
3912   <d g, d>1) |
3913   r2. d,,4 r4 r |
3914   r4
3915 }
3916
3917 \score {
3918   \new PianoStaff <<
3919     \new Staff = "RH"  <<
3920       \key g \minor
3921       \rhMusic
3922     >>
3923     \new Staff = "LH" <<
3924       \key g \minor
3925       \clef "bass"
3926       \lhMusic
3927     >>
3928   >>
3929 }
3930 @end lilypond
3931
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:
3952
3953 @code{\once \override Tie.staff-position = #3.5}
3954
3955 Damit ist auch der zweite Takt vollständig:
3956
3957 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3958 rhMusic = \relative {
3959   \new Voice {
3960     r2 c''4.\( g8 |
3961     \once \override Tie.staff-position = #3.5
3962     bes1~ |
3963     \bar "||"
3964     \time 6/4
3965     bes2. r8
3966     % Start polyphonic section of four voices
3967     <<
3968       { c,8 d fis bes a }  % continuation of main voice
3969       \new Voice {
3970         \voiceTwo
3971         c,8~ 2
3972       }
3973       \new Voice {
3974         \voiceThree
3975         s8 d2
3976       }
3977       \new Voice {
3978         \voiceFour
3979         s4 fis4.
3980       }
3981     >> |
3982     g2.\)  % continuation of main voice
3983   }
3984 }
3985
3986 lhMusic = \relative {
3987   r2 <c' g ees>2( |
3988   <d g, d>1)\arpeggio |
3989   r2. d,,4 r4 r |
3990   r4
3991 }
3992
3993 \score {
3994   \new PianoStaff <<
3995     \new Staff = "RH"  <<
3996       \key g \minor
3997       \rhMusic
3998     >>
3999     \new Staff = "LH" <<
4000       \key g \minor
4001       \clef "bass"
4002       \lhMusic
4003     >>
4004   >>
4005 }
4006 @end lilypond
4007
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
4020
4021 @example
4022 \mergeDifferentlyHeadedOn
4023 \mergeDifferentlyDottedOn
4024 @end example
4025
4026 @noindent
4027 aus der Notationsreferenz, die wir an den Beginn unseres
4028 Abschnittes stellen und
4029
4030 @example
4031 \mergeDifferentlyHeadedOff
4032 \mergeDifferentlyDottedOff
4033 @end example
4034
4035 @noindent
4036 um das Verhalten wieder auszuschalten. Das sieht so aus:
4037
4038 @c line-width ensures no break
4039 @lilypond[quote,ragged-right,line-width=6\in]
4040 rhMusic = \relative {
4041   \new Voice {
4042     r2 c''4.\( g8 |
4043     \once \override Tie.staff-position = #3.5
4044     bes1~ |
4045     \bar "||"
4046     \time 6/4
4047     bes2.\tempo "Moderato" r8
4048     \mergeDifferentlyHeadedOn
4049     \mergeDifferentlyDottedOn
4050     % Start polyphonic section of four voices
4051     <<
4052       { c,8 d fis bes a }  % continuation of main voice
4053       \new Voice {
4054         \voiceTwo
4055         c,8~ 2
4056       }
4057       \new Voice {
4058         \voiceThree
4059         s8 d2
4060       }
4061       \new Voice {
4062         \voiceFour
4063         s4 fis4.
4064       }
4065     >> |
4066     \mergeDifferentlyHeadedOff
4067     \mergeDifferentlyDottedOff
4068     g2.\)  % continuation of main voice
4069   }
4070 }
4071
4072 lhMusic = \relative {
4073   r2 <c' g ees>2( |
4074   <d g, d>1)\arpeggio |
4075   r2. d,,4 r4 r |
4076   r4
4077 }
4078
4079 \score {
4080   \new PianoStaff <<
4081     \new Staff = "RH"  <<
4082       \key g \minor
4083       \rhMusic
4084     >>
4085     \new Staff = "LH" <<
4086       \key g \minor
4087       \clef "bass"
4088       \lhMusic
4089     >>
4090   >>
4091 }
4092 @end lilypond
4093
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
4111 aus:
4112
4113 @cindex Bindebogen, Beispiel zur Veränderung
4114 @cindex staff-position-Eigenschaft, Beispiel
4115
4116 @c line-width ensures no break
4117 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4118 rhMusic = \relative {
4119   \new Voice {
4120     r2 c''4.\( g8 |
4121     \once \override Tie.staff-position = #3.5
4122     bes1~ |
4123     \bar "||"
4124     \time 6/4
4125     bes2.\tempo "Moderato" r8
4126     \mergeDifferentlyHeadedOn
4127     \mergeDifferentlyDottedOn
4128     % Start polyphonic section of four voices
4129     <<
4130       { c,8 d fis bes a }  % continuation of main voice
4131       \new Voice {
4132         \voiceTwo
4133         % Move the c2 out of the main note column
4134         % so the merge will work
4135         c,8~ \shiftOnn c2
4136       }
4137       \new Voice {
4138         \voiceThree
4139         % Stem on the d2 must be down to permit merging
4140         s8 \stemDown d2
4141       }
4142       \new Voice {
4143         \voiceFour
4144         s4 fis4.
4145       }
4146     >> |
4147     \mergeDifferentlyHeadedOff
4148     \mergeDifferentlyDottedOff
4149     g2.\)  % continuation of main voice
4150   }
4151 }
4152
4153 lhMusic = \relative {
4154   r2 <c' g ees>2( |
4155   <d g, d>1)\arpeggio |
4156   r2. d,,4 r4 r |
4157   r4
4158 }
4159
4160 \score {
4161   \new PianoStaff <<
4162     \new Staff = "RH"  <<
4163       \key g \minor
4164       \rhMusic
4165     >>
4166     \new Staff = "LH" <<
4167       \key g \minor
4168       \clef "bass"
4169       \lhMusic
4170     >>
4171   >>
4172 }
4173 @end lilypond
4174
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:
4181
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
4187
4188 @c line-width ensures no break
4189 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4190 rhMusic = \relative {
4191   \new Voice {
4192     r2 c''4.\( g8 |
4193     \once \override Tie.staff-position = #3.5
4194     bes1~ |
4195     \bar "||"
4196     \time 6/4
4197     bes2.\tempo "Moderato" r8
4198     \mergeDifferentlyHeadedOn
4199     \mergeDifferentlyDottedOn
4200     % Start polyphonic section of four voices
4201     <<
4202       { c,8 d fis bes a }  % continuation of main voice
4203       \new Voice {
4204         \voiceTwo
4205         c,8~
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
4210         \shiftOnn
4211         c2
4212       }
4213       \new Voice {
4214         \voiceThree
4215         s8
4216         % Stem on the d2 must be down to permit merging
4217         \stemDown
4218         % Stem on the d2 should be invisible
4219         \tweak Stem.transparent ##t
4220         d2
4221       }
4222       \new Voice {
4223         \voiceFour
4224         s4 fis4.
4225       }
4226     >> |
4227     \mergeDifferentlyHeadedOff
4228     \mergeDifferentlyDottedOff
4229     g2.\)  % continuation of main voice
4230   }
4231 }
4232
4233 lhMusic = \relative {
4234   r2 <c' g ees>2( |
4235   <d g, d>1)\arpeggio |
4236   r2. d,,4 r4 r |
4237   r4
4238 }
4239
4240 \score {
4241   \new PianoStaff <<
4242     \new Staff = "RH"  <<
4243       \key g \minor
4244       \rhMusic
4245     >>
4246     \new Staff = "LH" <<
4247       \key g \minor
4248       \clef "bass"
4249       \lhMusic
4250     >>
4251   >>
4252 }
4253 @end lilypond
4254
4255
4256 @node Weitere Optimierungen
4257 @section Weitere Optimierungen
4258 @translationof Further tweaking
4259
4260 @menu
4261 * Andere Benutzung von Optimierungen::
4262 * Variablen für Layout Anpassungen einsetzen::
4263 * Formatvorlagen::
4264 * Mehr Information::
4265 * Fortgeschrittene Optimierungen mit Scheme::
4266 @end menu
4267
4268 @node Andere Benutzung von Optimierungen
4269 @subsection Andere Benutzung von Optimierungen
4270 @translationof Other uses for tweaks
4271
4272 @menu
4273 * Noten zwischen unterschiedlichen Stimmen überbinden::
4274 * Eine Fermate in MIDI simulieren::
4275 @end menu
4276
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
4285
4286 @node Noten zwischen unterschiedlichen Stimmen überbinden
4287 @unnumberedsubsubsec Noten zwischen unterschiedlichen Stimmen überbinden
4288 @translationof Tying notes across voices
4289
4290 @cindex Noten zwischen Stimmen über binden
4291 @cindex Über binden von Noten zwischen Stimmen
4292
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,
4299
4300 @lilypond[quote]
4301 << { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
4302 @end lilypond
4303
4304 @noindent
4305 und dann den ersten Hals nach oben unsichtbar macht,
4306 sieht es so aus, als ob die Überbindung zwischen
4307 den Stimmen stattfindet:
4308
4309 @cindex Hals, Beispiel zum Verstecken
4310 @cindex Notenhals, Beispiel zum Verstecken
4311 @cindex Fähnchen, Beispiel zum Verstecken
4312 @cindex transparent-Eigenschaft, Beispiel
4313 @funindex \omit
4314
4315 @lilypond[quote,verbatim]
4316 <<
4317   {
4318     \once \omit Stem
4319     \once \omit Flag
4320     b'8~ 8\noBeam
4321   }
4322 \\
4323   { b'8[ g'] }
4324 >>
4325 @end lilypond
4326
4327 @seealso
4328 Handbuch zum Lernen:
4329 @ref{Der once-Präfix,,Der @code{@bs{}once}-Präfix},
4330 @ref{Die stencil-Eigenschaft}.
4331
4332
4333 @node Eine Fermate in MIDI simulieren
4334 @unnumberedsubsubsec Eine Fermate in MIDI simulieren
4335 @translationof Simulating a fermata in MIDI
4336
4337 @cindex stencil-Eigenschaft, Benutzung
4338 @cindex Fermate, Benutzung in MIDI
4339 @cindex MIDI: Fermate erstellen
4340
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
4348 nicht beeinflusst.
4349
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:
4359
4360 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4361 @cindex transparent-Eigenschaft, Beispiel
4362
4363 @lilypond[quote,verbatim,ragged-right]
4364 \score {
4365   \relative {
4366     % Visible tempo marking
4367     \tempo 4=120
4368     a'4 a a
4369     \once \hide Score.MetronomeMark
4370     % Invisible tempo marking to lengthen fermata in MIDI
4371     \tempo 4=80
4372     a4\fermata |
4373     % New tempo for next section
4374     \tempo 4=100
4375     a4 a a a |
4376   }
4377   \layout { }
4378   \midi { }
4379 }
4380 @end lilypond
4381
4382 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4383 @cindex transparent-Eigenschaft, Beispiel
4384
4385 @lilypond[quote,verbatim,ragged-right]
4386 \score {
4387   \relative {
4388     % Visible tempo marking
4389     \tempo 4=120
4390     a'4 a a
4391     \once \omit Score.MetronomeMark
4392     % Invisible tempo marking to lengthen fermata in MIDI
4393     \tempo 4=80
4394     a4\fermata |
4395     % New tempo for next section
4396     \tempo 4=100
4397     a4 a a a |
4398   }
4399   \layout { }
4400   \midi { }
4401 }
4402 @end lilypond
4403
4404 @noindent
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.
4411
4412 @seealso
4413 Glossar:
4414 @rglos{system}.
4415
4416
4417 @node Variablen für Layout Anpassungen einsetzen
4418 @subsection Variablen für Layout Anpassungen einsetzen
4419 @translationof Using variables for layout adjustments
4420
4421 @cindex Variablen, Benutzung zur Optimierung
4422 @cindex Optimierung mit Variablen
4423
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
4428 sich befindet.
4429
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.
4440
4441 @example
4442 @code{\override Lyrics.LyricText.font-shape = #'italic}
4443 @code{\override Lyrics.LyricText.font-series = #'bold}
4444
4445 @code{\revert Lyrics.LyricText.font-shape}
4446 @code{\revert Lyrics.LyricText.font-series}
4447 @end example
4448
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:
4458
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
4463
4464 @lilypond[quote,verbatim]
4465 emphasize = {
4466   \override Lyrics.LyricText.font-shape = #'italic
4467   \override Lyrics.LyricText.font-series = #'bold
4468 }
4469 normal = {
4470   \revert Lyrics.LyricText.font-shape
4471   \revert Lyrics.LyricText.font-series
4472 }
4473
4474 global = { \key c \major \time 4/4 \partial 4 }
4475
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 }
4480
4481 VerseOne = \lyrics {
4482   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4483 }
4484
4485 VerseTwo = \lyricmode {
4486   O | \once \emphasize Christ, whose voice the | wa -- ters heard,
4487 }
4488
4489 VerseThree = \lyricmode {
4490   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4491 }
4492
4493 VerseFour = \lyricmode {
4494   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4495 }
4496
4497 \score {
4498   \new ChoirStaff <<
4499     \new Staff <<
4500       \clef "treble"
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 }
4507     >>
4508     \new Staff <<
4509       \clef "bass"
4510       \new Voice = "Tenor" { \voiceOne \TenorMusic }
4511       \new Voice = "Bass"  { \voiceTwo \BassMusic }
4512     >>
4513   >>
4514 }
4515 @end lilypond
4516
4517
4518 @node Formatvorlagen
4519 @subsection Formatvorlagen
4520 @translationof Style sheets
4521
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
4527 erreichen.
4528
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.
4532
4533 @lilypond[quote,verbatim,ragged-right]
4534 mpdolce =
4535   \tweak self-alignment-X #-0.6
4536   #(make-dynamic-script
4537     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4538
4539 inst =
4540 #(define-music-function
4541      (string)
4542      (string?)
4543    #{ <>^\markup \bold \box #string #})
4544
4545 \relative {
4546   \tempo 4=50
4547   a'4.\mpdolce d8 cis4--\glissando a |
4548   b4 bes a2 |
4549   \inst "Clarinet"
4550   cis4.\< d8 e4 fis |
4551   g8(\! fis)-. e( d)-. cis2 |
4552 }
4553 @end lilypond
4554
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
4562 wir sie also:
4563
4564 @example
4565 %%% in Datei "definitions.ily" speichern
4566 mpdolce =
4567   \tweak self-alignment-X #-0.6
4568   #(make-dynamic-script
4569     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4570
4571 inst =
4572 #(define-music-function
4573      (string)
4574      (string?)
4575    #@{ <>^\markup \bold \box #string #@})
4576 @end example
4577
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}).
4583
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.
4586
4587 @example
4588 \include "definitions.ily"
4589
4590 \relative @{
4591   \tempo 4=50
4592   a'4.\mpdolce d8 cis4--\glissando a |
4593   b4 bes a2 |
4594   \inst "Clarinet"
4595   cis4.\< d8 e4 fis |
4596   g8(\! fis)-. e( d)-. cis2 |
4597 @}
4598 @end example
4599
4600 @lilypond[quote,ragged-right]
4601 mpdolce =
4602   \tweak self-alignment-X #-0.6
4603   #(make-dynamic-script
4604     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4605
4606 inst =
4607 #(define-music-function
4608      (string)
4609      (string?)
4610    #{ <>^\markup \bold \box #string #})
4611
4612 \relative {
4613   \tempo 4=50
4614   a'4.\mpdolce d8 cis4--\glissando a |
4615   b4 bes a2 |
4616   \inst "Clarinet"
4617   cis4.\< d8 e4 fis |
4618   g8(\! fis)-. e( d)-. cis2 |
4619 }
4620 @end lilypond
4621
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}.
4628
4629 Ändern Sie jetzt jedoch nicht @file{music.ly}.  Ändern Sie die
4630 @file{definitions.ily} mit dem Folgenden:
4631
4632 @example
4633 %%%  definitions.ily
4634 mpdolce =
4635   \tweak self-alignment-X #-0.6
4636   #(make-dynamic-script
4637     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4638
4639 inst =
4640 #(define-music-function
4641      (string)
4642      (string?)
4643    #@{ <>^\markup \bold \box #string #@})
4644
4645 \layout@{
4646   \context @{
4647     \Score
4648     \override MetronomeMark.extra-offset = #'(-5 . 0)
4649     \override MetronomeMark.padding = #'3
4650   @}
4651   \context @{
4652     \Staff
4653     \override TimeSignature.style = #'numbered
4654   @}
4655   \context @{
4656     \Voice
4657     \override Glissando.thickness = #3
4658     \override Glissando.gap = #0.1
4659   @}
4660 @}
4661 @end example
4662
4663 @lilypond[quote,ragged-right]
4664 mpdolce =
4665   \tweak self-alignment-X #-0.6
4666   #(make-dynamic-script
4667     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4668
4669 inst =
4670 #(define-music-function
4671      (string)
4672      (string?)
4673    #{ <>^\markup \bold \box #string #})
4674
4675 \layout{
4676   \context {
4677     \Score
4678     \override MetronomeMark.extra-offset = #'(-5 . 0)
4679     \override MetronomeMark.padding = #'3
4680   }
4681   \context {
4682     \Staff
4683     \override TimeSignature.style = #'numbered
4684   }
4685   \context {
4686     \Voice
4687     \override Glissando.thickness = #3
4688     \override Glissando.gap = #0.1
4689   }
4690 }
4691
4692 \relative {
4693   \tempo 4=50
4694   a'4.\mpdolce d8 cis4--\glissando a |
4695   b4 bes a2 |
4696   \inst "Clarinet"
4697   cis4.\< d8 e4 fis |
4698   g8(\! fis)-. e( d)-. cis2 |
4699 }
4700 @end lilypond
4701
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
4707 global geändert.
4708
4709 @example
4710 %%%  web-publish.ily
4711 mpdolce =
4712   \tweak self-alignment-X #-0.6
4713   #(make-dynamic-script
4714     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4715
4716 inst =
4717 #(define-music-function
4718      (string)
4719      (string?)
4720    #@{ <>^\markup \bold \box #string #@})
4721
4722 #(set-global-staff-size 23)
4723
4724 \layout@{
4725   \context @{
4726     \Score
4727     \override MetronomeMark.extra-offset = #'(-5 . 0)
4728     \override MetronomeMark.padding = #'3
4729   @}
4730   \context @{
4731     \Staff
4732   @}
4733   \context @{
4734     \Voice
4735     \override Glissando.thickness = #3
4736     \override Glissando.gap = #0.1
4737   @}
4738 @}
4739 @end example
4740
4741 @lilypond[quote,ragged-right]
4742 mpdolce =
4743   \tweak self-alignment-X #-0.6
4744   #(make-dynamic-script
4745     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4746
4747 inst =
4748 #(define-music-function
4749      (string)
4750      (string?)
4751    #{ <>^\markup \bold \box #string #})
4752
4753 #(set-global-staff-size 23)
4754
4755 \layout{
4756   \context { \Score
4757     \override MetronomeMark.extra-offset = #'(-5 . 0)
4758     \override MetronomeMark.padding = #'3
4759   }
4760   \context { \Voice
4761     \override Glissando.thickness = #3
4762     \override Glissando.gap = #0.1
4763   }
4764 }
4765
4766 \relative {
4767   \tempo 4=50
4768   a'4.\mpdolce d8 cis4--\glissando a |
4769   b4 bes a2 |
4770   \inst "Clarinet"
4771   cis4.\< d8 e4 fis |
4772   g8(\! fis)-. e( d)-. cis2 |
4773 }
4774 @end lilypond
4775
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:
4786
4787 @example
4788 \include "definitions.ily"
4789
4790 %%%  nur eine der zwei Zeilen auskommentieren!
4791 \include "web-publish.ily"
4792 %\include "university.ily"
4793 @end example
4794
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
4799 einbindet:
4800
4801 @example
4802 %%%   global.ily
4803 \version @w{"@version{}"}
4804
4805 #(ly:set-option 'point-and-click #f)
4806
4807 \include "../init/init-defs.ly"
4808 \include "../init/init-layout.ly"
4809 \include "../init/init-headers.ly"
4810 \include "../init/init-paper.ly"
4811 @end example
4812
4813
4814
4815 @node Mehr Information
4816 @subsection Mehr Information
4817 @translationof Other sources of information
4818
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
4828 benutzen:
4829
4830 @subsubsubheading Von lilypond.org heruntergeladen
4831
4832 @itemize @bullet
4833 @item GNU/Linux
4834
4835 Wechseln Sie in das Verzeichnis
4836 @example
4837 @file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/}
4838 @end example
4839
4840 @item MacOS X
4841
4842 Wechseln Sie in das Verzeichnis
4843 @example
4844 @file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4845 @end example
4846
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}
4850 auswählen.
4851
4852 @item Windows
4853
4854 Wechseln Sie mit dem Windows Explorer ins Verzeichnis
4855 @example
4856 @file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/}
4857 @end example
4858
4859 @end itemize
4860
4861 @subsubsubheading Mit einem Paket-Manager installiert oder selber aus den Quellen kompiliert
4862
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.
4868
4869 @smallspace
4870
4871 In diesem Ordner sind die zwei interessanten Unterordner:
4872
4873 @itemize
4874 @item @file{ly/} - beinhaltet Dateien im LilyPond-Format
4875 @item @file{scm/} - beinhaltet Dateien im Scheme-Format
4876 @end itemize
4877
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:
4887
4888 @example
4889 tieDotted = @{
4890   \override Tie.dash-period = #0.75
4891   \override Tie.dash-fraction = #0.1
4892 @}
4893 @end example
4894
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.
4899
4900 Hier sind die wichtigsten Dateien, die sich im Ordner
4901 @file{ly/} befinden:
4902
4903 @multitable @columnfractions .4 .6
4904 @headitem Dateiname
4905   @tab Inhalt
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
4916 @end multitable
4917
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}).
4928
4929 Wenn Sie sich mit Scheme auskennen, sind hier mögliche
4930 interessante Dateien:
4931
4932 @multitable @columnfractions .4 .6
4933 @headitem Dateiname
4934   @tab Inhalt
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
4949 @end multitable
4950
4951
4952 @node Fortgeschrittene Optimierungen mit Scheme
4953 @subsection Fortgeschrittene Optimierungen mit Scheme
4954 @translationof Advanced tweaks with Scheme
4955
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}.
4964
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.
4973
4974 @cindex x11-Farben, Beispiel zur Benutzung
4975 @cindex Notenkopf, Beispiel zur Veränderung
4976 @cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt
4977
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)
4982                                7)))
4983      (case mod-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
4992        )))
4993
4994 \relative {
4995   % Arrange to obtain color from color-notehead procedure
4996   \override NoteHead.color = #color-notehead
4997   a2 b | c2 d | e2 f | g2 a |
4998 }
4999 @end lilypond
5000
5001 Weiter Beispiele, die die Benutzung dieser programmierbaren
5002 Schnittstelle zeigen, finden sich in @rextend{Callback-Funktionen}.