]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/notation/changing-defaults.itely
Imported Upstream version 2.16.0
[lilypond.git] / Documentation / de / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: 06f227dd80f3a30cbf33c879b7c125079dfaf5c3
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.16.0"
12
13 @c Translators: Till Paala
14
15 @node Standardeinstellungen verändern
16 @chapter Standardeinstellungen verändern
17 @translationof Changing defaults
18
19 Das Ziel von LilyPonds Design ist es, von sich aus gut gesetzte Noten
20 zu produzieren.  Es kann aber trotzdem vorkommen, dass Sie diesen
21 Standardsatz ändern wollen.  Das Layout kann mithilfe einer recht
22 großen Anzahl von @qq{Schaltern und Knöpfen} kontrolliert werden.
23 Sie werden als @qq{Eigenschaften} (engl. properties)  bezeichnet.
24 Eine kurze Einführung und Übung, wie man auf diese Eigenschaften
25 zugreifen kann und sie verändern kann, findet sich im Handbuch
26 zum Lernen, siehe @rlearning{Die Ausgabe verändern}.  Das Kapitel
27 sollte zuerst gelesen werden.  In diesem Kapitel werden die gleichen
28 Themen behandelt, aber der Schwerpunkt liegt eher auf einer technischen
29 Darstellung.
30
31 @cindex Referenz der Interna
32 @cindex Internals Reference
33
34 Die definitive Beschreibung der unterschiedlichen Einstellmöglichenkeiten
35 findet sich in einem eigenen Dokument: @rinternalsnamed{Top,der Referenz
36 der Interna}.  Diese Referenz zeigt alle Variablen, Funktionen und Optionen,
37 die in LilyPond möglich sind.  Es existiert als ein HTML-Dokumente, das
38 sich
39 @c leave the @uref as one long line.
40 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
41 aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt.
42
43 Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur
44 zur Verfügung zu stellen.  Wenn Layoutentscheidungen verändert werden
45 sollen, müssen auf die programminternen Prozesse zugegriffen werden,
46 wozu Scheme-Code benötigt wird.  Scheme-Abschnitte werden in einer
47 LilyPond-Quelldatei mit einer Raute@tie{}@code{#} begonnen.@footnote{@rextend{Scheme-Übung} enthält eine kurze Übung, wie
48 man Zahlen, Listen, Zeichenketten und Symbole in Scheme notiert.}
49
50
51 @menu
52 * Interpretationskontexte::
53 * Die Referenz der Programminterna erklärt::
54 * Eigenschaften verändern::
55 * Nützliche Konzepte und Eigenschaften::
56 * Fortgeschrittene Optimierungen::
57 * Musikfunktionen benutzen::
58 @end menu
59
60
61 @node Interpretationskontexte
62 @section Interpretationskontexte
63 @translationof Interpretation contexts
64
65 Dieser Abschnitt erklärt, was Kontexte sind und wie man sie
66 verändern kann.
67
68 @menu
69 * Was sind Kontexte?::
70 * Kontexte erstellen::
71 * Kontexte am Leben halten::
72 * Umgebungs-Plugins verändern::
73 * Die Standardeinstellungen von Kontexten ändern::
74 * Neue Kontexte definieren::
75 * Reihenfolge des Kontextlayouts::
76 @end menu
77
78
79 @seealso
80 Handbuch zum Lernen:
81 @rlearning{Kontexte und Engraver}.
82
83 Installierte Dateien:
84 @file{ly/engraver-init.ly},
85 @file{ly/performer-init.ly}.
86
87 Schnipsel:
88 @rlsr{Contexts and engravers}.
89
90 Referenz der Interna:
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
93
94
95 @node Was sind Kontexte?
96 @subsection Was sind Kontexte?
97 @translationof Contexts explained
98
99 Kontexte sind hierarchisch geordnet:
100
101 @menu
102 * Score -- der Vater aller Kontexte::
103 * Oberste Kontexte -- Container für Systeme::
104 * Mittlere Kontexte -- Systeme::
105 * Unterste Kontexte -- Stimmen::
106 @end menu
107
108 @node Score -- der Vater aller Kontexte
109 @unnumberedsubsubsec Score -- der Vater aller Kontexte
110 @translationof Score - the master of all contexts
111
112 @code{Score} (Partitur) ist der höchste Notationskontext.  Kein anderer Kontext
113 kann einen @code{Score}-Kontext enthalten.  Im Normalfall kümmert
114 sich der @code{Score}-Kontext um die Verwaltung der Taktarten und sorgt
115 dafür, dass Elemente wie Schlüssel und Taktart- oder Tonartbezeichnungen
116 über die Systeme hinweg aneinander ausgerichtet sind.
117
118 Ein @code{Score}-Kontext wird eingerichtet, wenn eine
119 @code{\score @{@dots{}@}} oder @code{\layout @{@dots{}@}}-Umgebung
120 interpretiert wird.
121
122 @node Oberste Kontexte -- Container für Systeme
123 @unnumberedsubsubsec Oberste Kontexte -- Container für Systeme
124 @translationof Top-level contexts - staff containers
125
126 @c Remark for German translation
127 Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier
128 als Systemgruppen bezeichnet (engl. staffgroup).
129
130 @strong{@emph{StaffGroup}}
131
132 Gruppiert Systeme und fügt eine eckige Klammer auf der linken Seite
133 hinzu.  Die Taktstriche der enthaltenen Systeme werden vertikal
134 miteinander verbunden. @code{StaffGroup} besteht nur aus einer Ansammlung
135 von Systemen mit einer eckigen Klammer zu Beginn der Zeile und
136 durchgezogenen Taktstriche.
137
138 @strong{@emph{ChoirStaff}}
139
140 Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen
141 Systeme nicht vertikal miteinander verbunden sind.
142
143 @strong{@emph{GrandStaff}}
144
145 Gruppiert Systeme mit einer geschweiften Klammer zur Linken.  Die
146 Taktlinien der enthaltenen Systeme werden vertikal verbunden.
147
148 @strong{@emph{PianoStaff}}
149
150 Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für
151 Instrumentenbezeichnungen zu Beginn jeder Systemgruppe.
152
153
154 @node Mittlere Kontexte -- Systeme
155 @unnumberedsubsubsec Mittlere Kontexte -- Systeme
156 @translationof Intermediate-level contexts - staves
157
158 Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme
159 (engl. staff) dar.
160
161 @strong{@emph{Staff}}
162
163 Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen.
164 Er kann @code{Voice}-Kontexte enthalten.
165
166 @strong{@emph{RhythmicStaff}}
167
168 Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen
169 werden ignoriert und die Noten auf einer einzigen Linie ausgegeben.
170
171 @strong{@emph{TabStaff}}
172
173 Ein Kontext um Tabulaturen zu erstellen.  Die Standardeinstellung ist
174 eine Gitarrentabulatur mit sechs Notenlinien.
175
176 @strong{@emph{DrumStaff}}
177
178 Ein Kontext zur Notation von Perkussion.  Er kann
179 @code{DrumVoice}-Kontexte enthalten.
180
181 @strong{@emph{VaticanaStaff}}
182
183 Entspricht @code{Staff}, aber eignet sich besonders zum Notensatz des
184 Gregorianischen Chorals.
185
186 @strong{@emph{MensuralStaff}}
187
188 Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in
189 der Mensuralnotation.
190
191
192 @node Unterste Kontexte -- Stimmen
193 @unnumberedsubsubsec Unterste Kontexte -- Stimmen
194 @translationof Bottom-level contexts - voices
195
196 Stimmen-(@code{Voice}-Kontexte initialisieren bestimmte Eigenschaften
197 und laden bestimmte Engraver.  Weil es sich bei Stimmen um die
198 untersten Kontexte handelt, können sie keine weiteren Kontexte enthalten.
199
200 @strong{@emph{Voice}}
201
202 Entspricht einer Stimme auf einem Notensystem.  Der Kontext kümmert sich
203 um die Umsetzung von Noten, Dynamikzeichen, Hälsen, Balken, diversen Texten,
204 Bögen und Pausen.  Wenn mehr als eine Stimme pro System benötigt wird,
205 muss dieser Kontext explizit initialisiert werden.
206
207 @strong{@emph{VaticanaVoice}}
208
209 Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz
210 des Gregorianischen Chorals.
211
212 @strong{@emph{MensuralVoice}}
213
214 Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation
215 setzen zu können.
216
217 @strong{@emph{Lyrics}}
218
219 Entspricht einer Stimme mit Gesangstext.  Kümmert sich um den Satz
220 des Gesangstextes auf einer Zeile.
221
222 @strong{@emph{DrumVoice}}
223
224 Der Stimmenkontext in einem Perkussionssystem.
225
226 @strong{@emph{FiguredBass}}
227
228 Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte)
229 gesetzt werden, die in der @code{\figuremode}-Umgebung
230 notiert werden.
231
232 @strong{@emph{TabVoice}}
233
234 Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext)
235 benutzt.  Er wird normalerweise implizit erstellt.
236
237 @strong{@emph{CueVoice}}
238
239 Ein Stimmenkontext, der Noten in reduzierter Größe ausgibt und
240 vor allem dazu da ist, Stichnoten zu setzen.  Siehe auch
241 @ref{Stichnoten formatieren}.  Wird normalerweise implizit erstellt,
242 wenn Stichnoten gesetzt werden.
243
244
245 @strong{@emph{ChordNames}}
246
247 Ausgabe von Akkordsymbolen.
248
249
250 @node Kontexte erstellen
251 @subsection Kontexte erstellen
252 @translationof Creating contexts
253
254 In Partituren mit einer Stimme und einem System werden die Kontexte
255 normalerweise automatisch erstellt.  In komplizierteren Partituren
256 muss man sie aber direkt erstellen.  Es gibt drei Möglichkeiten,
257 Kontexte zu erstellen:
258
259 @funindex \new
260 @funindex \context
261 @funindex new
262 @funindex context
263
264 @cindex neue Kontexte
265 @cindex Kontexte erstellen
266 @cindex eigene Kontexte erstellen
267
268 @itemize
269
270 @item
271 Der einfachste Befehl ist @code{\new}.  Er wird zusammen mit dem
272 Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa
273
274 @example
275 \new @var{Kontext} @var{musik. Ausdruck}
276 @end example
277
278 @noindent
279 wobei @var{Kontext} eine Kontextbezeichnung (wie @code{Staff} oder
280 @code{Voice}) ist.  Dieser Befehl erstellt einen neuen Kontext und
281 beginnt mit der Auswertung von @var{musik. Ausdruck} innerhalb
282 dieses Kontextes.
283
284 Eine praktische Anwendung von @code{\new} ist eine Partitur mit vielen
285 Systemen.  Jede Stimme wird auf einem eigenen System notiert, das
286 mit @code{\new Staff} begonnen wird.
287
288 @lilypond[quote,verbatim,relative=2,ragged-right]
289 <<
290   \new Staff { c4 c }
291   \new Staff { d4 d }
292 >>
293 @end lilypond
294
295 Der @code{\new}-Befehl kann den Kontext auch benennen:
296
297 @example
298 \new @var{Kontext} = @var{ID} @var{musik. Ausdruck}
299 @end example
300
301 Dieser vom Benutzer definierte Name wird aber auch nur wirklich
302 benutzt, wenn nicht vorher schon der gleiche Name definiert worden
303 ist.
304
305 @item
306 Ähnlich dem @code{\new}-Befehl wird auch mit dem @code{\context}-Befehl
307 ein musikalischer Ausdruck in einen Kontext umgeleitet.  Diesem
308 Kontext wird ein expliziter Name zugewiesen.  Die Syntax lautet:
309
310 @example
311 \context @var{Kontext} = @var{ID} @var{musik. Ausdruck}
312 @end example
313
314 Diese Art von Befehl sucht nach einem existierenden Kontext vom Typus
315 @var{Kontext} mit der Bezeichnung @var{ID}.  Wenn ein derartiger
316 Kontext nicht existiert, wird ein neuer Kontext mit der entsprechenden
317 Bezeichnung erstellt.  Das ist nützlich, wenn auf den Kontext später
318 zurückverwiesen werden soll.  Um etwa Gesangstext zu einer Melodie
319 hinzuzufügen, wird die Melodie in einem bezeichneten Kontext
320 notiert:
321
322 @example
323 \context Voice = "@b{Tenor}" @var{musik. Ausdruck}
324 @end example
325
326 @noindent
327 sodass der Text an den Noten ausgerichtet werden kann:
328
329 @example
330 \new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext}
331 @end example
332
333
334 Eine andere Möglichkeit für bezeichnete Kontexte ist es, zwei
335 unterschiedliche musikalische Ausdrücke in einen Kontext zu
336 verschmelzen.  Im nächsten Beispiel werden Artikulationszeichen
337 und Noten getrennt notiert:
338
339 @example
340 Noten = @{ c4 c4 @}
341 Artik = @{ s4-. s4-> @}
342 @end example
343
344 @noindent
345 Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext
346 zugewiesen werden:
347
348 @example
349 <<
350   \new Staff \context Voice = "A" \Noten
351   \context Voice = "A" \Artik
352 >>
353 @end example
354
355 @lilypond[quote,ragged-right]
356 music = { c4 c4 }
357 arts = { s4-. s4-> }
358 \relative c'' <<
359   \new Staff \context Voice = "A" \music
360   \context Voice = "A" \arts
361 >>
362 @end lilypond
363
364 Durch diesen Mechanismus ist es möglich eine Urtextausgabe zu
365 erstellen, mit der optionalen Möglichkeit, bestimmte zusätzliche
366 Artikulationszeichen zu den gleichen Noten hinzuzufügen und so
367 eine editierte Ausgabe zu erhalten.
368
369 @cindex Kontexte erstellen
370
371 @item
372 Der dritte Befehl, um Kontexte zu erstellen, ist:
373
374 @example
375 \context @var{Kontext} @var{musik. Ausdruck}
376 @end example
377
378 @noindent
379 Dies entspricht dem @code{\context} mit @code{= @var{ID}}, aber hier
380 wird ein beliebiger Kontext des Typs @var{Kontext} gesucht und der
381 musikalische Ausdruck darin ausgewertet, unabhängig von der Bezeichnung,
382 die dem Kontext gegeben wurde.
383
384 Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf
385 verschiedenen Ebenen interpretiert werden können.  Beispielsweise
386 der @code{\applyOutput}-Befehl (siehe
387 @rextend{Eine Funktion auf alle Layout-Objekte anwenden}).  Ohne einen
388 expliziten @code{\context} wird die Ausgabe normalerweise einem
389 @code{Voice}-Kontext zugewiesen:
390
391 @example
392 \applyOutput #'@var{Kontext} #@var{Funktion}   % auf Voice anwenden
393 @end example
394
395 Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
396 interpretiert wird, muss folgende Form benutzt werden:
397
398 @example
399 \applyOutput #'Score #@var{Funktion}
400 \applyOutput #'Staff #@var{Funktion}
401 @end example
402
403 @end itemize
404
405
406
407 @node Kontexte am Leben halten
408 @subsection Kontexte am Leben halten
409 @translationof Keeping contexts alive
410
411 @cindex Kontexte, am Leben erhalten
412 @cindex Kontexte, Lebensdauer
413
414 Kontexte werden normalerweise am ersten musikalischen Moment
415 beendet, an dem sie nichts mehr zu tun haben.  Ein
416 @code{Voice}-Kontext stirbt also sofort, wenn keine Ereignisse
417 mehr auftreten, @code{Staff}-Kontexte sobald alle in ihnen
418 enthaltenen @code{Voice}-Kontexte keine Ereignisse mehr aufweisen
419 usw.  Das kann Schwierigkeiten ergeben, wenn auf frühere
420 Kontexte verwiesen werden soll, die in der Zwischenzeit schon
421 gestorben sind, beispielsweise wenn man Systemwechsel mit
422 @code{\change}-Befehlen vornimmt, wenn Gesangstext einer
423 Stimme mit dem @code{\lyricsto}-Befehl zugewiesen wird oder
424 wenn weitere musikalische Ereignisse zu einem früheren Kontext
425 hinzugefügt werden sollen.
426
427 Es gibt eine Ausnahme dieser Regel: genau ein @code{Voice}-Kontext
428 innerhalb eines @code{Staff}-Kontextes oder in einer
429 @code{<<...>>}-Konstruktion bleibt immer erhalten bis zum Ende
430 des @code{Staff}-Kontextes oder der @code{<<...>>}-Konstruktion, der ihn einschließt, auch wenn es Abschnitte gibt, in der er nichts zu
431 tun hat.  Der Kontext, der erhalten bleibt ist immer der erste,
432 der in der ersten enthaltenden @code{@{...@}}-Konstruktion
433 angetroffen wird, wobei @code{<<...>>}-Konstruktionen ignoriert
434 werden.
435
436 Jeder Kontext kann am Leben gehalten werden, indem man sicherstellt
437 dass er zu jedem musikalischen Moment etwas zu tun hat.
438 @code{Staff}-Kontexte werden am Leben gehalten, indem man sicherstellt,
439 dass eine der enthaltenen Stimmen am Leben bleibt.  Eine Möglichkeit,
440 das zu erreichen, ist es, unsichtbare Pause zu jeder Stimme
441 hinzuzufügen, die am Leben gehalten werden soll.  Wenn mehrere
442 Stimmen sporadisch benutzt werden sollen, ist es am sichersten,
443 sie alle am Leben zu halten und sich nicht auf die Ausnahmeregel
444 zu verlassen, die im vorigen Abschnitt dargestellt wurde.
445
446 Im folgenden Beispiel werden sowohl Stimme A als auch B auf diese
447 Weise für die gesamte Dauer des Stückes am Leben gehalten.
448
449 @lilypond[quote,verbatim]
450 musicA = \relative c'' { d4 d d d }
451 musicB = \relative c'' { g4 g g g }
452 keepVoicesAlive = {
453   <<
454     \new Voice = "A" { s1*5 }  % Keep Voice "A" alive for 5 bars
455     \new Voice = "B" { s1*5 }  % Keep Voice "B" alive for 5 bars
456   >>
457 }
458
459 music = {
460   \context Voice = "A" {
461     \voiceOneStyle
462     \musicA
463   }
464   \context Voice = "B" {
465     \voiceTwoStyle
466     \musicB
467   }
468   \context Voice = "A" { \musicA }
469   \context Voice = "B" { \musicB }
470   \context Voice = "A" { \musicA }
471 }
472
473 \score {
474   \new Staff <<
475     \keepVoicesAlive
476     \music
477   >>
478 }
479 @end lilypond
480
481 @cindex Gesangstext, an einer sporadischen Melodie ausrichten
482
483 Das nächste Beispiel zeigt eine Melodie, die zeitweise unterbrochen
484 wird und wie man den entsprechenden Gesangstext mit ihr verknüpfen
485 kann, indem man die Stimme am Leben hält.  In wirklichen Situationen
486 würden Begleitung und Melodie natürlich aus mehreren Abschnitten bestehen.
487
488 @lilypond[quote,verbatim]
489 melody = \relative c'' { a4 a a a }
490 accompaniment = \relative c' { d4 d d d }
491 words = \lyricmode { These words fol -- low the mel -- o -- dy }
492 \score {
493   <<
494     \new Staff = "music" {
495       <<
496         \new Voice = "melody" {
497           \voiceOne
498           s1*4  % Keep Voice "melody" alive for 4 bars
499         }
500         {
501           \new Voice = "accompaniment" {
502             \voiceTwo
503             \accompaniment
504           }
505           <<
506             \context Voice = "melody" { \melody }
507             \context Voice = "accompaniment" { \accompaniment }
508           >>
509           \context Voice = "accompaniment" { \accompaniment }
510           <<
511             \context Voice = "melody" { \melody }
512             \context Voice = "accompaniment" { \accompaniment }
513           >>
514         }
515       >>
516     }
517     \new Lyrics \with { alignAboveContext = #"music" }
518     \lyricsto "melody" { \words }
519   >>
520 }
521 @end lilypond
522
523 Eine Alternative, die in manchen Umständen besser geeignet sein kann,
524 ist es, einfach unsichtbare Pausen einzufügen, um die Melodie
525 mit der Begleitung passend auszurichten:
526
527 @lilypond[quote,verbatim]
528 melody = \relative c'' {
529   s1  % skip a bar
530   a4 a a a
531   s1  % skip a bar
532   a4 a a a
533 }
534 accompaniment = \relative c' {
535   d4 d d d
536   d4 d d d
537   d4 d d d
538   d4 d d d
539 }
540 words = \lyricmode { These words fol -- low the mel -- o -- dy }
541
542 \score {
543   <<
544     \new Staff = "music" {
545       <<
546         \new Voice = "melody" {
547           \voiceOne
548           \melody
549         }
550         \new Voice = "accompaniment" {
551           \voiceTwo
552           \accompaniment
553         }
554       >>
555     }
556     \new Lyrics \with { alignAboveContext = #"music" }
557     \lyricsto "melody" { \words }
558   >>
559 }
560 @end lilypond
561
562
563
564 @node Umgebungs-Plugins verändern
565 @subsection Umgebungs-Plugins verändern
566 @translationof Modifying context plug-ins
567
568 Notationskontexte (wie @code{Score} oder @code{Staff}) speichern
569 nicht nur Eigenschaften, sie enthalten auch Plugins (@qq{engraver}
570 genannt), die die einzelnen Notationselemente erstellen.  Ein
571 @code{Voice}-Kontext enthält beispielsweise einen
572 @code{Note_heads_engraver}, der die Notenköpfe erstellt, und ein
573 @code{Staff}-Kontext einen @code{Key_engraver}, der die
574 Vorzeichen erstellt.
575
576 Eine vollständige Erklärung jedes Plugins findet sich in
577 @ifhtml
578 @rinternals{Engravers and Performers}.
579 @end ifhtml
580 @ifnothtml
581 Referenz der Interna: @expansion{} Translation @expansion{} Engravers.
582 @end ifnothtml
583 Alle Kontexte sind erklärt in
584 @ifhtml
585 @rinternals{Contexts},
586 @end ifhtml
587 @ifnothtml
588 Referenz der Interna: @expansion{} Translation @expansion{} Context,
589 @end ifnothtml
590 wobei die in diesem Kontext vorkommenden Engraver aufgelistet sind.
591
592 Es kann teilweise nötig sein, diese Engraver umzupositionieren.  Das
593 geschieht, indem man einen neuen Kontext mit @code{\new} oder
594 @code{\context} beginnt und ihn dann verändert:
595
596 @funindex \with
597 @funindex with
598
599 @example
600 \new @var{context} \with @{
601   \consists @dots{}
602   \consists @dots{}
603   \remove @dots{}
604   \remove @dots{}
605   @emph{etc.}
606 @}
607 @{
608   @emph{..Noten..}
609 @}
610 @end example
611
612 @noindent
613 @dots{} steht hier für die Bezeichnung des Engravers.  @code{\consists}
614 fügt einen Engraver hinzu und @code{\remove} entfernt ihn.
615 Es folgt ein einfaches Beispiel, in dem der
616 @code{Time_signature_engraver} (Engraver für den Takt) und der
617 @code{Clef_engraver} (Engraver für den Schlüssel) aus dem
618 @code{Staff}-Kontext entfernt werden:
619
620 @lilypond[quote,relative=1,verbatim]
621 <<
622   \new Staff {
623     f2 g
624   }
625   \new Staff \with {
626      \remove "Time_signature_engraver"
627      \remove "Clef_engraver"
628   } {
629     f2 g2
630   }
631 >>
632 @end lilypond
633
634 Das zweite Notensystem enthält keine Taktangabe und keinen Notenschlüssel.
635 Das ist eine recht brutale Methode, Objekte zu verstecken, weil es sich
636 auf das gesamte System auswirkt.  Diese Methode beeinflusst auch die
637 Platzaufteilung, was erwünscht sein kann.  Vielfältigere Methoden,
638 mit denen Objekte unsichtbar gemacht werden können, finden sich in
639 @rlearning{Sichtbarkeit und Farbe von Objekten}.
640
641 Das nächste Beispiel zeigt eine Anwendung in der Praxis.  Taktstriche
642 und Taktart werden normalerweise in einer Partitur synchronisiert.  Das
643 geschieht durch @code{Timing_translator} und @code{Default_bar_line_engraver}.
644 Diese Plugins sorgen sich um die Verwaltung der Taktzeiten und die
645 Stelle innerhalb des Taktes, zu dem eine Note erscheint usw.  Indem
646 man diese Engraver aus dem @code{Score}-Kontext in den @code{Staff}-Kontext
647 verschiebt, kann eine Partitur erstellt werden, in welcher
648 jedes System eine unterschiedliche Taktart hat:
649
650 @cindex polymetrische Partitur
651 @cindex Taktarten, mehrere in Partitur
652 @cindex Taktarten, unterschiedliche per System
653
654 @lilypond[quote,verbatim]
655 \score {
656   <<
657     \new Staff \with {
658       \consists "Timing_translator"
659       \consists "Default_bar_line_engraver"
660     } {
661         \time 3/4
662         c4 c c c c c
663     }
664   \new Staff \with {
665     \consists "Timing_translator"
666     \consists "Default_bar_line_engraver"
667   } {
668       \time 2/4
669       c4 c c c c c
670   }
671 >>
672 \layout {
673   \context {
674     \Score
675     \remove "Timing_translator"
676     \remove "Default_bar_line_engraver"
677     }
678   }
679 }
680 @end lilypond
681
682 @knownissues
683
684 Normalerweise spielt es keine Rolle, in welcher Reihenfolge
685 Engraver angegeben werden, aber in einigen Spezialfällen
686 ist die Reihenfolge sehr wichtig.  Das kann beispielsweise
687 vorkommen, wenn ein Engraver eine Eigenschaft erstellt und
688 ein anderer von ihr liest, oder ein Engraver erstellt ein
689 Grob und ein anderer wertet es aus.  Die Reihenfolge, in der
690 Engraver angegeben werden, ist die Reihenfolge, in der sie
691 aufgerufen werden, um ihre Tätigkeiten auszuführen.
692
693 Folgende Reihenfolgen müssen beachtet werden: der
694 @code{Bar_engraver} muss normalerweise zuerst kommen, und
695 der @code{New_fingering_engraver} muss vor dem
696 @code{Script_column_engraver} kommen.  Es gibt möglicherweise weitere
697 Abhängigkeiten von der Reihenfolge geben.
698
699
700 @node Die Standardeinstellungen von Kontexten ändern
701 @subsection Die Standardeinstellungen von Kontexten ändern
702 @translationof Changing context default settings
703
704 Die Kontexteinstellungen, die standardmäßig in
705 @code{Score}, @code{Staff} und @code{Voice}-Kontexten
706 benutzt werden, können in einer @code{\layout}-Umgebung
707 eingestellt werden, wie das folgende Beispiel zeigt.  Die
708 @code{\layout}-Umgebung sollte innerhalb der
709 @code{\score}-Umgebung gesetzt werden, auf die sie sich
710 auswirken soll, aber außerhalb von Notation.
711
712 Auch muss der @code{\set}-Befehl und der Kontext weggelassen
713 werden, wenn die Einstellungen für den Kontext auf diese Weise
714 vorgenommen werden:
715
716 @lilypond[quote,verbatim]
717 \score {
718   \relative c'' {
719     a4^"Really small, thicker stems, no time signature" a a a
720     a a a a
721   }
722   \layout {
723     \context {
724       \Staff
725       fontSize = #-4
726       \override Stem #'thickness = #4.0
727       \remove "Time_signature_engraver"
728     }
729   }
730 }
731 @end lilypond
732
733 Hier zeigt der @code{\Staff}-Befehl an, dass die folgenden Einstellungen
734 sich auf alle Systeme in dieser Partitur erstrecken sollen.
735
736 Veränderungen können auch für den @code{Score}- oder alle
737 @code{Voice}-Kontexte auf gleiche Weise vorgenommen werden.
738
739 Kontextänderungen können in eine Variable geschrieben werden und dann
740 einer @code{\context}-Definition zu gewiesen werden, indem man der
741 Veränderung ein @code{\with} voranstellt:
742
743 @lilypond[quote,verbatim]
744 blubb = \with {
745   fontSize = #-4
746   \override Stem #'thickness = #4.0
747   \remove "Time_signature_engraver"
748 }
749
750 bla = \with {
751   fontSize = #3
752   \override Stem #'thickness = #-2.0
753 }
754
755 melody = \relative c'' {
756   a4 a a a |
757   a4 a a a |
758 }
759
760 \score {
761   <<
762     \new Staff <<
763       \melody
764       s1*0^"Small, thicker stems, no time signature"
765     >>
766     \new Staff \bla <<
767       \melody
768       s1*0^"Different"
769     >>
770   >>
771   \layout {
772     \context {
773       \Staff
774       \blubb
775     }
776   }
777 }
778 @end lilypond
779
780  @c TODO: add \with in here.
781  
782
783 @node Neue Kontexte definieren
784 @subsection Neue Kontexte definieren
785 @translationof Defining new contexts
786
787 @cindex Kontexte, neue definieren
788 @cindex Engraver, in Kontexte einfügen
789
790 @funindex \alias
791 @funindex alias
792 @funindex \name
793 @funindex name
794 @funindex \type
795 @funindex type
796 @funindex \consists
797 @funindex consists
798 @funindex \accepts
799 @funindex accepts
800 @funindex \denies
801 @funindex denies
802
803 Bestimme Kontexte, wie @code{Staff} oder @code{Voice}, werden
804 erstellt, indem man sie mit einer Musikumgebung aufruft.  Es ist
805 aber auch möglich, eigene neue Kontexte zu definieren, in denen
806 dann unterschiedliche Engraver benutzt werden.
807
808 Das folgende Beispiel zeigt, wie man etwa @code{Voice}-Kontexte
809 von Grund auf neu bauen kann.  Ein derartiger Kontext ähnelt
810 @code{Voice}, es werden aber nur zentrierte Schrägstriche als
811 Notenköpfe ausgegeben.  Das kann benutzt werden, um Improvisation
812 in Jazzmusik anzuzeigen.
813
814 @c KEEP LY
815 @lilypond[quote,ragged-right]
816 \layout { \context {
817   \name ImproVoice
818   \type "Engraver_group"
819   \consists "Note_heads_engraver"
820   \consists "Rhythmic_column_engraver"
821   \consists "Text_engraver"
822   \consists Pitch_squash_engraver
823   squashedPosition = #0
824   \override NoteHead #'style = #'slash
825   \override Stem #'transparent = ##t
826   \override Flag #'transparent = ##t
827   \alias Voice
828 }
829 \context { \Staff
830   \accepts "ImproVoice"
831 }}
832
833 \relative c'' {
834   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
835    c4 c^"ausziehen" c_"während des Spiels :)" c }
836   a1
837 }
838 @end lilypond
839
840 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
841 innerhalb der @code{\layout}-Umgebung definiert:
842
843 @example
844 \layout @{
845   \context @{
846     @dots{}
847   @}
848 @}
849 @end example
850
851 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
852 im vorigen Beispiel eingesetzt werden.
853
854 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
855 definieren:
856
857 @example
858 \name ImproVoice
859 @end example
860
861 Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle,
862 die in @code{Voice}-Kontexten funktionieren, auch
863 in dem neuen Kontext funktionieren.  Das wird erreicht, indem der
864 Kontext als Alias @code{Voice} erhält:
865
866 @example
867 \alias Voice
868 @end example
869
870 Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver
871 hinzufügen, die für diese Aktionen zuständig sind:
872
873 @example
874 \consists Note_heads_engraver
875 \consists Text_engraver
876 @end example
877
878 @noindent
879 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
880
881 @example
882 \consists Pitch_squash_engraver
883 squashedPosition = #0
884 @end example
885
886 Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom
887 @code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale
888 Position auf den Wert von @code{squashedPosition}, in diesem Fall ist
889 das die Mittellinie.
890
891 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
892
893 @example
894 \override NoteHead #'style = #'slash
895 \override Stem #'transparent = ##t
896 \override Flag #'transparent = ##t
897 @end example
898
899 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
900 einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet
901 werden muss.  Dieser Typ solle immer @code{Engraver_group} lauten:
902
903 @example
904 \type "Engraver_group"
905 @end example
906
907 Alles zusammen haben wir folgende Einstellungen:
908
909 @example
910 \context @{
911   \name ImproVoice
912   \type "Engraver_group"
913   \consists "Note_heads_engraver"
914   \consists "Text_engraver"
915   \consists Pitch_squash_engraver
916   squashedPosition = #0
917   \override NoteHead #'style = #'slash
918   \override Stem #'transparent = ##t
919   \override Flag #'transparent = ##t
920   \alias Voice
921 @}
922 @end example
923
924 @funindex \accepts
925 @funindex accepts
926
927 Kontexte sind hierarchisch.  Wie wollen, dass @code{ImproVoice}
928 sich als Unterkontext von @code{Staff} erkennt, wie eine normale
929 Stimme.  Darum wird die Definition von @code{Staff} mit dem
930 @code{\accepts}-Befehl verändert:
931
932 @example
933 \context @{
934   \Staff
935   \accepts ImproVoice
936 @}
937 @end example
938
939 @funindex \denies
940 @funindex denies
941
942 Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was
943 manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
944 wieder benutzt werden sollen.
945
946 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
947 werden:
948
949 @example
950 \layout @{
951   \context @{
952     \name ImproVoice
953     @dots{}
954   @}
955   \context @{
956     \Staff
957     \accepts "ImproVoice"
958   @}
959 @}
960 @end example
961
962 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
963 notiert werden:
964
965 @example
966 \relative c'' @{
967   a4 d8 bes8
968   \new ImproVoice @{
969     c4^"ad lib" c
970     c4 c^"ausziehen"
971     c c_"während des Spielens :)"
972   @}
973   a1
974 @}
975 @end example
976
977
978 @node Reihenfolge des Kontextlayouts
979 @subsection Reihenfolge des Kontextlayouts
980 @translationof Context layout order
981
982 @cindex Kontext, Layoutreihenfolge
983 @funindex \accepts
984 @funindex \denies
985
986 Kontexte werden in einer Systemgruppe normalerweise von oben nach
987 unten positioniert in der Reihenfolge, wie sie in der Quelldatei
988 auftreten.  Wenn Kontext verschachtelt ewrden, enthält der äußere
989 Kontexte geschachtelte innere Kontexte, wie in der Quelldatei
990 angegeben, vorausgesetzt, die inneren Kontexte befinden sich auch
991 in der @qq{accepts}-Liste.  Geschachtelte Kontexte, die nicht
992 in dieser @qq{accepts}-Liste enthalten sind, werden unterhalb
993 des äußeren Kontextes neu positioniert, anstatt innerhalb von ihm
994 gesetzt zu werden.
995
996 Die @qq{accepts}-Liste eines Kontextes kann mit dem Befehlen
997 @code{\accepts} und @code{\denies} verändert werden.  @code{\accepts} 
998 fügt einen Kontext zur @qq{accepts}-Liste, und @code{\denies}
999 entfernt einen Kontext aus der Liste.  Akkordbezeichnungen sollen
1000 beispielsweise normalerweise nicht innerhalb eines @code{Staff}-Kontextes
1001 geschachtelt werden, sodass der @code{ChordNames}-Kontext nicht
1002 automatisch in der @qq{accepts}-Liste des @code{Staff}-Kontextes
1003 geführt ist.  Wenn er aber benötigt wird, kann er hinzugefügt werden:
1004
1005 @lilypond[verbatim,quote]
1006 \score {
1007   \new Staff {
1008     c' d' e' f'
1009     \chords { d1:m7 b1:min7.5- }
1010   }
1011 }
1012 @end lilypond
1013
1014 @lilypond[verbatim,quote]
1015 \score {
1016   \new Staff {
1017     c' d' e' f'
1018     \chords { d1:m7 b1:min7.5- }
1019   }
1020   \layout {
1021     \context {
1022       \Staff
1023       \accepts "ChordNames"
1024     }
1025   }
1026 }
1027 @end lilypond
1028
1029 @code{\denies} wird vorrangig eingesetzt, wenn ein neuer Kontext
1030 basierend auf einem existierenden erstellt wird, aber sein 
1031 Schachtelungsverhalten sich unterscheidet.  Der
1032 @code{VaticanaStaff}-Kontext beispielsweise basiert auf dem
1033 @code{Staff}-Kontext, hat aber den @code{VaticanaVoice}-Kontext
1034 anstellt des @code{Voice}-Kontexts in seiner @qq{accepts}-Liste.
1035
1036 Zur Erinnerung: ein Kontext wird automatisch erstellt, wenn ein
1037 Befehl auftritt, der in den aktuellen Kontexten nicht enthalten
1038 sein kann.  Dass kann zu unerwarteten neuen Systemgruppen oder Partituren
1039 führen.
1040
1041 @seealso
1042 Handbuch zur Benutzung:
1043 @rprogram{Ein zusätzliches System erscheint}.
1044
1045 Installierte Dateien:
1046 @file{ly/engraver-init.ly}.
1047
1048
1049 @node Die Referenz der Programminterna erklärt
1050 @section Die Referenz der Programminterna erklärt
1051 @translationof Explaining the Internals Reference
1052
1053 @menu
1054 * Zurechtfinden in der Programmreferenz::
1055 * Layout-Schnittstellen::
1056 * Die Grob-Eigenschaften::
1057 * Benennungskonventionen::
1058 @end menu
1059
1060
1061 @node Zurechtfinden in der Programmreferenz
1062 @subsection Zurechtfinden in der Programmreferenz
1063 @translationof Navigating the program reference
1064
1065 Arbeit mit der Referenz der Interna soll hier an
1066 einigen Beispiel illustriert werden.  Die Referenz
1067 der Interna existiert nur auf Englisch,
1068 darum sind auch die Beispiele dieses Abschnittes nicht
1069 übersetzt.
1070
1071 Folgende Aufgabe wird bearbeitet:  Der Fingersatz aus dem Beispiel
1072 unten soll verändert werden:
1073
1074 @lilypond[quote,relative=2,verbatim]
1075 c-2
1076 \stemUp
1077 f
1078 @end lilypond
1079
1080 In der Dokumentation über Fingersatz (in
1081 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1082
1083 @quotation
1084 @strong{Siehe auch:}
1085
1086 Referenz der Interna: @rinternals{Fingering}.
1087
1088 @end quotation
1089
1090 @c all ignored text just left out
1091
1092 @ifnothtml
1093 Die Referenz der Interna gibt es als HTML-Dokument.  Sie sollten sie als
1094 HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation
1095 herunterladen.  Dieser Abschnitt ist sehr viel schwieriger zu verstehen,
1096 wenn Sie die PDF-Version verwenden.
1097 @end ifnothtml
1098
1099 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1100 Oben auf der Seite findet sich:
1101
1102 @quotation
1103 Fingering objects are created by: @rinternals{Fingering_engraver} and
1104 @rinternals{New_fingering_engraver}.
1105 @end quotation
1106
1107 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1108 verfolgen, wie LilyPond intern arbeitet:
1109
1110 @itemize
1111
1112 @item @rinternals{Fingering}:
1113 @rinternals{Fingering} objects are created by:
1114 @rinternals{Fingering_engraver}
1115
1116 @item @rinternals{Fingering_engraver}:
1117 Music types accepted: @rinternals{fingering-event}
1118
1119 @item @rinternals{fingering-event}:
1120 Music event type @code{fingering-event} is in Music expressions named
1121 @rinternals{FingeringEvent}
1122 @end itemize
1123
1124 @c translation of the above
1125 Fingersatz-Objekte werden also durch den @code{Fingering_engraver}
1126 erstellt, welcher folgende Musikereignistypen akzeptiert:
1127 @code{fingering-event}.  Ein Musikereignis vom Typ
1128 @code{fingering-event} ist ein musikalischer Ausdruck mit der
1129 Bezeichnung @rinternals{FingeringEvent}.
1130
1131 Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds
1132 Wirkungsweise: er beginnt bei der graphischen Ausgabe und
1133 arbeitet sich voran zur Eingabe.  Man könnte auch mit einem
1134 Eingabe-Ereignis starten und dann die Links zurückverfolgen,
1135 bis man zum Ausgabe-Objekt gelangt.
1136
1137
1138 Die Referenz der Interna kann auch wie ein normales Dokument
1139 durchsucht werden.  Sie enthält Kapitel über
1140 @ifhtml
1141 @rinternals{Music definitions},
1142 @end ifhtml
1143 @ifnothtml
1144 @code{Music definitions},
1145 @end ifnothtml
1146 über @rinternals{Translation} und @rinternals{Backend}.  Jedes
1147 Kapitel listet alle die Definitionen und Eigenschaften auf,
1148 die benutzt und verändert werden können.
1149
1150
1151 @node Layout-Schnittstellen
1152 @subsection Layout-Schnittstellen
1153 @translationof Layout interfaces
1154
1155 @cindex Layout-Schnittstelle
1156 @cindex Schnittstelle, Layout-
1157 @cindex Grob
1158
1159 Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde,
1160 beschreibt ein Layoutobjekt mit der Bezeichnung
1161 @code{Fingering}.  Ein derartiges Objekt ist ein Symbol
1162 in der Partitur.  Es hat Eigenschaften, die bestimmte
1163 Zahlen speichern (wie etwa Dicke und Richtung), aber auch
1164 Weiser auf verwandte Objekte.  Ein Layoutobjekt wird auch
1165 als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches
1166 @emph{Ob}jekt.  Mehr Information zu Grobs findet sich in
1167 @rinternals{grob-interface}.
1168
1169 Die Seite zu @code{Fingering} enthält Definitionen für das
1170 @code{Fingering}-Objekt.  Auf der Seite steht etwa:
1171
1172 @quotation
1173 @code{padding} (dimension, in staff space):
1174
1175 @code{0.5}
1176 @end quotation
1177
1178 @noindent
1179 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1180 0.5 Notenlinienabstände beträgt.
1181
1182 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1183 als auch als Notationselement einnehmen.  Das Fingersatzobjekt
1184 beispielsweise hat folgende Aspekte:
1185
1186 @itemize
1187 @item
1188 Seine Größe ist unabhängig von der horizontalen Platzaufteilung,
1189 anders als etwa bei Legatobögen.
1190
1191 @item
1192 Es handelt sich um Text, normalerweise sehr kurz.
1193
1194 @item
1195 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1196 anders als bei Legatobögen.
1197
1198 @item
1199 Der Mittelpunkt des Symbols sollte horizontal mit dem
1200 Mittelpunkt des Notenkopfes ausgerichtet werden.
1201
1202 @item
1203 Vertikal wird das Objekt neben die Note und das Notensystem
1204 gesetzt.
1205
1206 @item
1207 Die vertikale Position wird auch mit anderen Textelementen
1208 abgeglichen.
1209
1210 @end itemize
1211
1212 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1213 (engl. interface), die auf der @rinternals{Fingering}-Seite
1214 unten aufgelistet sind:
1215
1216 @quotation
1217 This object supports the following interfaces:
1218 @rinternals{item-interface},
1219 @rinternals{self-alignment-interface},
1220 @rinternals{side-position-interface}, @rinternals{text-interface},
1221 @rinternals{text-script-interface}, @rinternals{font-interface},
1222 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1223 @end quotation
1224
1225 Ein Klick auf einen der Links öffnet die Seite der entsprechenden
1226 Schnittstelle.  Jede Schnittstelle hat eine Anzahl von Eigenschaften.
1227 Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne
1228 Eigenschaften}), andere aber können verändert werden.
1229
1230 Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber
1231 eigentlich handelt es sich nicht um sehr viel.  Die Initialisierungsdatei
1232 @file{scm/define-grobs.scm} zeigt den Inhalt dieses @qq{Objekts}
1233 (zu Information, wo diese Dateien sich finden siehe
1234 @rlearning{Mehr Information}):
1235
1236 @example
1237 (Fingering
1238   . ((padding . 0.5)
1239      (avoid-slur . around)
1240      (slur-padding . 0.2)
1241      (staff-padding . 0.5)
1242      (self-alignment-X . 0)
1243      (self-alignment-Y . 0)
1244      (script-priority . 100)
1245      (stencil . ,ly:text-interface::print)
1246      (direction . ,ly:script-interface::calc-direction)
1247      (font-encoding . fetaText)
1248      (font-size . -5)           ; don't overlap when next to heads.
1249      (meta . ((class . Item)
1250      (interfaces . (finger-interface
1251                     font-interface
1252                     text-script-interface
1253                     text-interface
1254                     side-position-interface
1255                     self-alignment-interface
1256                     item-interface))))))
1257 @end example
1258
1259 @noindent
1260 Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als
1261 eine Ansammlung von Variablen, und die Internetseite der
1262 Referenz der Interna ist direkt aus diesen Anweisungen generiert.
1263
1264
1265 @node Die Grob-Eigenschaften
1266 @subsection Die Grob-Eigenschaften
1267 @translationof Determining the grob property
1268
1269 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1270
1271 @lilypond[quote,relative=2,verbatim]
1272 c-2
1273 \stemUp
1274 f
1275 @end lilypond
1276
1277 Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist,
1278 müssen wir uns mit der Schnittstelle auseinander setzen, die diese
1279 Positionierung veranlasst.  Das ist hier @code{side-position-interface}.
1280 Auf der Seite für diese Schnittstelle heißt es:
1281
1282 @quotation
1283 @code{side-position-interface}
1284
1285 Position a victim object (this one) next to other objects (the
1286 support).  The property @code{direction} signifies where to put the
1287 victim object relative to the support (left or right, up or down?)
1288 @end quotation
1289
1290 @cindex Verschiebung
1291
1292 @noindent
1293 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1294
1295 @quotation
1296 @table @code
1297 @item padding
1298 (dimension, in staff space)
1299
1300 Add this much extra space between objects that are next to each other.
1301 @end table
1302 @end quotation
1303
1304 Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung
1305 weiter weg von der Note gesetzt werden.  Dieser Befehl beispielsweise
1306 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
1307
1308 @example
1309 \once \override Voice.Fingering #'padding = #3
1310 @end example
1311
1312 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1313 Fingersatz notiert ist, erhält man folgendes:
1314
1315 @lilypond[quote,relative=2,verbatim]
1316 \once \override Voice.Fingering #'padding = #3
1317 c-2
1318 \stemUp
1319 f
1320 @end lilypond
1321
1322 In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext
1323 definiert werden.  Das kann auch aus der Referenz der Interna entnommen
1324 werden, da die Seite des @rinternals{Fingering_engraver} schreibt:
1325
1326 @quotation
1327 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1328 @end quotation
1329
1330
1331 @node Benennungskonventionen
1332 @subsection Benennungskonventionen
1333 @translationof Naming conventions
1334
1335 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1336 folgen bestimmten Regeln:
1337
1338 @itemize
1339
1340 @item
1341     Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1342
1343 @item
1344     Scheme-Funktionen: ly:plus-scheme-stil
1345
1346 @item
1347     Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1348
1349 @item
1350     Grob-Schnittstellen: scheme-stil
1351
1352 @item
1353     backend-Eigenschaften: scheme-stil (aber X und Y)
1354
1355 @item
1356     Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1357
1358 @item
1359     Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1360
1361 @item
1362     Engraver:  Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1363 @end itemize
1364
1365 @c todos left out
1366
1367
1368 @node Eigenschaften verändern
1369 @section Eigenschaften verändern
1370 @translationof Modifying properties
1371
1372 @menu
1373 * Grundlagen zum Verändern von Eigenschaften::
1374 * Der set-Befehl::
1375 * Der override-Befehl::
1376 * Der tweak-Befehl::
1377 * set versus override::
1378 * Alisten verändern::
1379 @end menu
1380
1381
1382 @node Grundlagen zum Verändern von Eigenschaften
1383 @subsection Grundlagen zum Verändern von Eigenschaften
1384 @translationof Overview of modifying properties
1385
1386 Jeder Kontext ist verantwortlich für die Erstellung bestimmter
1387 graphischer Objekte.  Die Einstellungen für diese Objekte werden
1388 auch in dem Kontext gespeichert.  Wenn man diese Einstellungen
1389 verändert, kann die Erscheinung der Objekte geändert werden.
1390
1391 Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten
1392 gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften.
1393 Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext
1394 beziehen und seine Darstellung beinflussen.  Grob-Eigenschaften dagegen
1395 wirken sich nur auf bestimmte graphische Objekte aus, die in einem
1396 Kontext dargestellt werden.
1397
1398 Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte
1399 von Kontexteigenschaften zu ändern.  Die Befehle @code{\override} und
1400 @code{\revert} hingegen verändern die Werte von Grob-Eigenschaften.
1401
1402 @ignore
1403 Die Syntax hierzu lautet:
1404
1405 @example
1406 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1407 @end example
1408
1409
1410 @var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts,
1411 wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und
1412 @var{Eigenschaft} ist eine interne Variable des Formatierungssystems
1413 (eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}).  Diese
1414 Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich
1415 versehen werden.  Wie die Felder @var{Bezeichnung}, @var{Eigenschaft}
1416 und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt
1417 @ref{Eigenschaften verändern}.  Hier wird nur die Funktionalität des
1418 Befehls betrachtet.
1419
1420 Der Befehl
1421
1422 @verbatim
1423 \override Staff.Stem #'thickness = #4.0
1424 @end verbatim
1425
1426 @noindent
1427 bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist
1428 1.3, die Dicke der Notenlinie entspricht dem Wert 1).  Da der
1429 Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf
1430 das gerade aktuelle Notensystem aus.  Andere Systeme behalten
1431 ihr normales Aussehen.  Hier ein Beispiel mit diesem Befehl:
1432
1433 @lilypond[quote,verbatim,relative=2]
1434 c4
1435 \override Staff.Stem #'thickness = #4.0
1436 c4
1437 c4
1438 c4
1439 @end lilypond
1440
1441 Der @code{\override}-Befehl verändert die Definitionen von
1442 @code{Stem} (Hals) innerhalb des aktuellen @code{Staff}
1443 (Notensystems).  Nachdem der Befehl gelesen wurde, werden
1444 alle Hälse dicker gesetzt.
1445
1446 Wie auch bei dem @code{\set}-Befehl kann auch hier der
1447 Kontext ausgelassen werden, wobei dann immer implizit der
1448 @code{Voice}-Kontext angenommen wird.  Mit einem zusätzlichen
1449 @code{\once} wirkt sich die Änderung nur einmal aus:
1450
1451 @lilypond[quote,verbatim,relative=2]
1452 c4
1453 \once \override Stem #'thickness = #4.0
1454 c4
1455 c4
1456 @end lilypond
1457
1458 Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt
1459 begonnen wird.  Wenn also ein @emph{Strecker}-Objekt wie etwa
1460 ein Bogen verändert werden soll, muss der @code{\override}-Befehl
1461 schon geschrieben werden, bevor das Objekt begonnen wird.  In dem
1462 folgenden Beispiel
1463
1464 @lilypond[quote,verbatim,relative=2]
1465 \override Slur #'thickness = #3.0
1466 c8[( c
1467 \override Beam #'beam-thickness = #0.6
1468 c8 c])
1469 @end lilypond
1470
1471 @noindent
1472 ist der Bogen dicker, der Balken aber nicht.  Das liegt daran, dass der Befehl
1473 zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken
1474 schon begonnen hat.
1475
1476 Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem
1477 @code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings
1478 nur Einstellungen betroffen, die sich im gleichen Kontext befinden.  Der
1479 @code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts,
1480 weil er für den falschen Kontext gefordert wird.
1481
1482 @example
1483 \override Voice.Stem #'thickness = #4.0
1484 \revert Staff.Stem #'thickness
1485 @end example
1486
1487 Einige veränderbare Optionen werden als Untereigenschaften (engl.
1488 subproperties) bezeichnet und befinden sich innerhalb von den
1489 normalen Eigenschaften.  Wenn man sie verändern will, nimmt der
1490 Befehl folgende Form an:
1491
1492 @c leave this as a long long
1493 @example
1494 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1495 @end example
1496
1497 @noindent
1498 wie beispielsweise
1499
1500 @example
1501 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1502 @end example
1503 @end ignore
1504
1505 @seealso
1506 Referenz der Interna:
1507 @rinternals{OverrideProperty},
1508 @rinternals{RevertProperty},
1509 @rinternals{PropertySet},
1510 @rinternals{Backend},
1511 @rinternals{All layout objects}.
1512
1513
1514 @knownissues
1515
1516 Das Back-end ist nicht sehr streng bei der Überprüfung
1517 der Typen von Objekteigenschaften.  Auf sich selbst verweisende
1518 Bezüge in Scheme-Werten der Eigenschaften können Verzögerung
1519 oder einen Absturz des Programms hervorrufen.
1520
1521
1522
1523 @node Der set-Befehl
1524 @subsection Der @code{@bs{}set}-Befehl
1525 @translationof The set command
1526
1527 @cindex Eigenschaften
1528 @cindex Verändern von Eigenschaften
1529
1530 @funindex \set
1531 @funindex set
1532
1533 Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen,
1534 Variablen, die in diesem Kontext definiert sind.  Sie können
1535 während der Interpretation des Kontextes verändert werden.  Hierzu
1536 wird der @code{\set}-Befehl eingesetzt:
1537
1538 @example
1539 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1540 @end example
1541
1542 @var{Wert} ist ein Scheme-Objekt, weshalb ihm@tie{}@code{#} vorangestellt
1543 werden muss.
1544
1545 Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
1546 benannt.  Sie kontrollieren vor allem die Übersetzung von Musik in
1547 Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann
1548 ein Taktstrich gesetzt werden muss.  Kontexteigenschaften können
1549 ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
1550 wird.  Ein gutes Beispiel dafür ist @code{measurePosition}, was die
1551 Position der Noten im Takt angibt.  Kontexteigenschaften werden mit dem
1552 @code{\set}-Befehl verändert.
1553
1554 Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
1555 Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t}
1556 (wahr) gesetzt wird:
1557
1558 @lilypond[quote,verbatim,relative=2]
1559 R1*2
1560 \set Score.skipBars = ##t
1561 R1*2
1562 @end lilypond
1563
1564 Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich
1565 der Befehl auf den gerade aktiven unterstmöglichen Kontext,
1566 üblicherweise @code{ChordNames}, @code{Voice} oder
1567 @code{Lyrics}.
1568
1569 @lilypond[quote,verbatim,relative=2]
1570 \set Score.autoBeaming = ##f
1571 <<
1572   {
1573     e8 e e e
1574     \set autoBeaming = ##t
1575     e8 e e e
1576   } \\ {
1577     c8 c c c c8 c c c
1578   }
1579 >>
1580 @end lilypond
1581
1582 Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass
1583 diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
1584
1585 Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
1586 Eigenschaft enthält, die verändert werden soll.  Wenn man
1587 beispielsweise @code{skipBars} aus dem oberen Beispiel
1588 ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
1589 keine Auswirkung, weil er sich auf den @code{Voice}-Kontext
1590 bezieht, die Eigenschaft sich aber im @code{Score}-Kontext
1591 befindet:
1592
1593 @lilypond[quote,verbatim,relative=2]
1594 R1*2
1595 \set skipBars = ##t
1596 R1*2
1597 @end lilypond
1598
1599 Kontexte sind hierarchisch angeordnet.  Wenn ein übergeordneter
1600 Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich
1601 die Änderungen auf alle Stimmen (@code{Voice}), die in diesem
1602 Kontext enthalten sind.
1603
1604 @funindex \unset
1605 @funindex unset
1606
1607 Es gibt auch einen @code{\unset}-Befehl:
1608
1609 @example
1610 \unset @var{Kontext}.@var{Eigenschaft}
1611 @end example
1612
1613 @noindent
1614 der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft}
1615 entfernt werden.  Dieser Befehl macht nur Einstellungen im richtigen
1616 Kontext rückgängig.  Wenn also im @code{Staff}-Kontext die
1617 Bebalkung ausgeschaltet wird:
1618
1619 @lilypond[quote,verbatim,relative=2]
1620 \set Score.autoBeaming = ##t
1621 <<
1622   {
1623     \unset autoBeaming
1624     e8 e e e
1625     \unset Score.autoBeaming
1626     e8 e e e
1627   } \\ {
1628     c8 c c c c8 c c c
1629   }
1630 >>
1631 @end lilypond
1632
1633 Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten
1634 Kontext nicht mitangegeben werden.  Die zwei Versionen
1635
1636 @example
1637 \set Voice.autoBeaming = ##t
1638 \set autoBeaming = ##t
1639 @end example
1640
1641 verhalten sich gleich, wenn die gegenwärtige Basis der
1642 @code{Voice}-Kontext ist.
1643
1644 @funindex \once
1645 @funindex once
1646
1647 Einstellungen, die nur einmal vorgenommen werden sollen, können
1648 mit @code{\once} notiert werden, etwa:
1649
1650 @lilypond[quote,verbatim,relative=2]
1651 c4
1652 \once \set fontSize = #4.7
1653 c4
1654 c4
1655 @end lilypond
1656
1657 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1658 findet sich in der Referenz der Interna, siehe
1659 @ifhtml
1660 @rinternals{Tunable context properties}.
1661 @end ifhtml
1662 @ifnothtml
1663 @qq{Translation @expansion{} Tunable context properties}.
1664 @end ifnothtml
1665
1666 @seealso
1667
1668 Internals Reference:
1669
1670 @rinternals{Tunable context properties}.
1671
1672
1673
1674 @node Der override-Befehl
1675 @subsection Der @code{\\override}-Befehl
1676 @translationof The override command
1677
1678 @cindex Grob-Eigenschaften
1679 @cindex Eigenschaften von Grob
1680 @cindex graphische Objekte, Eigenschaften
1681
1682 @funindex \override
1683 @funindex override
1684
1685 Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
1686 Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt.  Sie
1687 enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine
1688 assoziative Liste.  Siehe @file{scm/define-grobs.scm} für die
1689 Einstellungen aller Grob-Beschreibungen.  Grob-Beschreibungen werden
1690 mit @code{\override} verändert.
1691
1692 @code{\override} ist eigentlich eine Kurzform, der Befehl
1693
1694 @example
1695 \override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1696 @end example
1697
1698 ist äquivalent zu
1699
1700 @example
1701 \set @var{Kontext}.@var{GrobBezeichnung}  =
1702   #(cons (cons '@var{Eigenschaft} @var{Wert})
1703          <vorheriger Wert von @var{Kontext}.@var{GrobBezeichnung}>)
1704 @end example
1705
1706 Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs
1707 zu initialisieren.  Grobs haben Eigenschaften, die im Scheme-Stil mit
1708 @code{bindestrich-wörtern} benannt sind.  Diese Werte der Grob-Eigenschaften
1709 verändern sich während des Notensetzens:  LilyPonds Notensatz heißt im
1710 Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
1711
1712 Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
1713 man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
1714
1715 @lilypond[quote, verbatim, relative=2]
1716 c4 c
1717 \override Voice.Stem #'thickness = #3.0
1718 c4 c
1719 @end lilypond
1720
1721 Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
1722 benutzt:
1723
1724 @lilypond[quote, verbatim, relative=2]
1725 { \override Staff.Stem #'thickness = #3.0
1726   <<
1727     {
1728       e4 e
1729       \override Stem #'thickness = #0.5
1730       e4 e
1731     } \\ {
1732       c4 c c c
1733     }
1734   >>
1735 }
1736 @end lilypond
1737
1738 @cindex rückgängig machen von Kontextveränderungen
1739 @cindex Kontextveränderungen rückgängig machen
1740 @cindex override rückgängig machen
1741 @cindex \override rückgängig machen
1742
1743 @funindex \revert
1744 @funindex revert
1745
1746 Die Auswirkungen von @code{\override} können mit @code{\revert} wieder
1747 rückgängig gemacht werden:
1748
1749 @lilypond[quote, verbatim, relative=2]
1750 c4
1751 \override Voice.Stem #'thickness = #3.0
1752 c4 c
1753 \revert Voice.Stem #'thickness
1754 c4
1755 @end lilypond
1756
1757 Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle
1758 Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
1759
1760 @lilypond[quote, verbatim, relative=2]
1761 {
1762   <<
1763     {
1764       e4
1765       \override Staff.Stem #'thickness = #3.0
1766       e4 e e
1767     } \\ {
1768       c4 c c
1769       \revert Staff.Stem #'thickness
1770       c4
1771     }
1772   >>
1773 }
1774 @end lilypond
1775
1776 @cindex Veränderung von Kontexten nur einmal
1777 @cindex Einmal verändern von Kontexten
1778 @cindex Kontexte, einmal verändern
1779 @cindex \override, nur einmal
1780
1781 @funindex \once
1782 @funindex once
1783
1784 @code{\once} kann zusammen mit @code{\override} benutzt werden,
1785 um nur den aktuellen Zeitwert zu verändern:
1786
1787 @lilypond[quote, verbatim, relative=2]
1788 {
1789   <<
1790     {
1791       \override Stem #'thickness = #3.0
1792       e4 e e e
1793     } \\ {
1794       c4
1795       \once \override Stem #'thickness = #3.0
1796       c4 c c
1797     }
1798   >>
1799 }
1800 @end lilypond
1801
1802
1803 @ignore
1804 @cindex Referenz der Interna
1805 @cindex Grafische Objekte, Finden
1806 @cindex Finden von graphischen Objekten
1807 @cindex Beschreibung von graphischen Objekten
1808 @cindex Grafische Objekte, Beschreibung
1809 @cindex Grob, Beschreibung
1810 @cindex Veränderungen der Einstellungen
1811 @cindex Einstellungen verändern
1812
1813 @funindex override
1814 @funindex \override
1815
1816 Viele Eigenschaften können unabhängig von der Art der Daten, die
1817 sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
1818 (@code{#f}) definiert.  Dadurch wird diese Eigenschaft von LilyPond
1819 ignoriert.  Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
1820 ausschalten will, die Probleme verursachen.
1821 @end ignore
1822
1823
1824 @seealso
1825
1826 Referenz der Interna:
1827 @rinternals{Backend}.
1828
1829
1830 @node Der tweak-Befehl
1831 @subsection Der @code{\\tweak}-Befehl
1832 @translationof The tweak command
1833
1834 @funindex \tweak
1835 @funindex tweak
1836
1837 @cindex Optimieren
1838
1839 Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich
1840 alle fraglichen Objekte zu dem gegebenen musikalischen Moment.  Manchmal
1841 will man allerdings nur ein Grob verändern, anstatt allen Grobs des
1842 aktuellen Kontextes.  Das kann mit dem @code{\tweak}-Befehl erreicht
1843 werden, mit dem man Optimierungen vornehmen kann:
1844
1845 @example
1846 \tweak #'@code{grob-eigenschaft} #@code{Wert}
1847 @end example
1848
1849 Der @code{\tweak}-Befehl wirkt sich auf das Objekt aus, dass direkt auf
1850 @code{Wert} folgt.
1851
1852 @ignore
1853 In einigen Fällen ist es möglich, mit einem abgekürzten Befehl
1854 graphische Objekte zu verändern.  Wenn Objekte direkt von einem
1855 Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl
1856 eingesetzt werden:
1857
1858 @lilypond[relative=2,verbatim]
1859 < c
1860   \tweak #'color #red
1861   d
1862   g
1863   \tweak #'duration-log #1
1864   a
1865 > 4
1866 -\tweak #'padding #8
1867 -^
1868 @end lilypond
1869
1870 @cindex Akkord, eine Note verändern
1871
1872 Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn
1873 man nur ein Element von einer Ansammlung an Elementen verändern
1874 will, die alle zum gleichen musikalischen Moment beginnen.  Das
1875 kann eine Noten in einem Akkord sein, oder eine von mehreren
1876 Triolenklammern, die zur gleichen Zeit beginnen.
1877
1878 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
1879 sich in @rlearning{Optimierungsmethoden}.
1880
1881 Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden
1882 Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder
1883 des Kontextes angegeben werden muss.  Damit das funktioniert, muss
1884 das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das
1885 er sich auswirken soll.  Das ist in manchen Fällen nicht gegeben,
1886 da viele Objekte durch LilyPond automatisch eingesetzt werden.
1887 Wenn etwa eine Note interpretiert wird, die nicht Teil eines
1888 Akkords ist, fügt LilyPond implizit einen @code{ChordEvent}
1889 vor die Note ein, sodass der @code{\tweak}-Befehl von der
1890 Note getrennt wird.  Wenn aber Akkord-Klammern um die Note
1891 und den @code{\tweak}-Befehl gesetzt werden, folgt der
1892 @code{ChordEvent} auf den @code{\tweak}-Befehl und befindet
1893 sich deshalb direkt vor der Note, auf die er einwirken soll,
1894 sodass die Veränderung funktioniert.
1895
1896 An einem Beispiel demonstriert:  Das funktioniert:
1897
1898
1899 @lilypond[relative=2,verbatim,quote]
1900 <\tweak #'color #red c>4
1901 @end lilypond
1902
1903 @noindent
1904 und das nicht:
1905
1906 @lilypond[relative=2,verbatim,quote]
1907 \tweak #'color #red c4
1908 @end lilypond
1909
1910 @end ignore
1911
1912 Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}.
1913
1914 Wenn mehrere gleichartige Elemente zum gleichen musikalischen
1915 Moment auftreten, kann der @code{\override}-Befehl nicht
1916 benutzt werden, um nur einen von ihnen zu verändern: hier braucht
1917 man den @code{\tweak}-Befehl.  Elemente, die mehrfach zum
1918 gleichen musikalischen Moment auftreten können sind unter Anderem:
1919
1920 @c TODO expand to include any further uses of \tweak
1921 @itemize
1922 @item Notenköpfe von Noten innerhalb eines Akkordes
1923 @item Artikulationszeichen an einer einzelnen Note
1924 @item Bindebögen zwischen Noten eines Akkordes
1925 @item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen
1926 @end itemize
1927
1928 @c TODO add examples of these
1929
1930 @cindex Akkord, eine Noten verändern
1931
1932 In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines
1933 anderen Notenkopfes innerhalb eines Akkordes verändert:
1934
1935 @lilypond[relative=2,verbatim,quote]
1936 < c
1937   \tweak #'color #red
1938   d
1939   g
1940   \tweak #'duration-log #1
1941   a
1942 > 4
1943 @end lilypond
1944
1945 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
1946
1947 @lilypond[verbatim,quote,relative=1]
1948 c-\tweak #'thickness #5 ( d e f)
1949 @end lilypond
1950
1951 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
1952 Objekt stehen, auf das er sich bezieht.  Manchmal kommt es vor, dass
1953 LilyPond während der Kompilierung der Datei zusätzliche Elemente
1954 einfügt, die dann zwischen der Optimierung und dem Objekt stehen.
1955 Noten, auch einzlene Noten, werden beispielsweise intern von LilyPond
1956 immer wie Akkorde behandelt, sodass auch ein @code{\tweak}-Befehl
1957 für eine einzelne Note innerhalb von Akkordzeichen notiert werden
1958 muss:
1959
1960 @lilypond[relative=2,verbatim,quote]
1961 \tweak #'color #red c4
1962 <\tweak #'color #red c>4
1963 @end lilypond
1964
1965 Der @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
1966 Elemente zu verändern, die sich nicht direkt im Notentext befinden.
1967 Insbesondere Hälse, Balken oder Versetzungszeichen lassen sich nicht
1968 beeinflussen, weil diese später durch den Notenkopf erstellt werden
1969 und nicht direkt durch
1970 den Quelltext.  @code{\tweak} kann auch nicht verwendet werden,
1971 um Schlüssel oder Taktarten zu verändern, denn sie werden von
1972 dem @code{\tweak}-Befehl während der Interpretation durch
1973 automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
1974
1975 Mehrere @code{\tweak}-Befehle können vor ein Notationselement
1976 gesetzt werden und alle werden interpretiert:
1977
1978 @lilypond[verbatim,quote,relative=1]
1979 c
1980 -\tweak #'style #'dashed-line
1981 -\tweak #'dash-fraction #0.2
1982 -\tweak #'thickness #3
1983 -\tweak #'color #red
1984  \glissando
1985 f'
1986 @end lilypond
1987
1988 Der Strom der musikalischen Ereignisse (engl. music stream), der aus
1989 dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
1990 Elemente gehören, kann betrachtet werden, siehe
1991 @rextend{Musikalische Funktionen darstellen}.  Das kann nützlich sein,
1992 wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
1993 verändert werden kann.
1994
1995 @seealso
1996 Handbuch zum Lernen:
1997 @rlearning{Optimierungsmethoden}.
1998
1999 Erweitern:
2000 @rextend{Musikalische Funktionen darstellen}.
2001
2002 @knownissues
2003
2004 @cindex tweak-Befehl in einer Variable
2005 @cindex Variable, tweak-Befehl benutzen
2006 @cindex Optimierung innerhalb einer Variable
2007
2008 Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden.
2009
2010 @cindex tweaks-Befehl in Gesangstext
2011 @cindex lyrics und tweak-Befehl
2012 @cindex Gesangstext und tweak-Befehl
2013
2014 Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden.
2015
2016 @cindex Kontrollpunkte und tweak
2017 @cindex tweak und Kontrollpunkte
2018
2019 Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte
2020 eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
2021 wird der erste Bogen verändert, der in der Eingabedatei auftritt.
2022
2023
2024 @node set versus override
2025 @subsection @code{\\set} versus @code{\\override}
2026 @translationof set versus override
2027
2028 @c TODO: überflüssig?
2029
2030 @ignore
2031 Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen
2032 Eigenschaften verändert werden können: @code{\set} und
2033 @code{\override}.  Im Grunde genommen gibt es auch zwei
2034 unterschiedliche Arten von Eigenschaften.
2035
2036 Kontexte können Eigenschaften haben, deren Bezeichnungen
2037 üblicherweise dem Schema @code{kleinGroß} folgen.  Derartige
2038 Eigenschaften sind vor allen Dingen für die Übersetzung der
2039 Musik in Notation zuständig, beispielsweise @code{localKeySignature}
2040 (um zu bestimmen, ob Versetzungszeichen ausgegeben werden
2041 müssen), @code{measurePosition} (um zu bestimmen, ob eine
2042 Taktlinie gesetzt werden muss).  Kontexteigenschaften können
2043 ihren Wert verändern, während ein Musikstück ausgewertet wird;
2044 @code{measurePosition} (Taktposition) ist ein gutes Beispiel
2045 hierfür.  Kontexteigenschaften werden mit dem Befehl @code{\set}
2046 verändert.
2047
2048 Dann gibt es einen Spezialtyp der Kontexeigenschaften: die
2049 Elementbeschreibung.  Diese Eigenschaften werden mit
2050 @code{GroßGroß} benannt (beginnen also auch mit einem
2051 Großbuchstaben).  Sie beinhalten die Standardeinstellungen
2052 für die besagten graphischen Objekte in Form einer
2053 Assosiationsliste.  Siehe auch die Datei @file{scm/define-grobs.scm}
2054 für ein Beispiel zu diesen Einstellungen.  Elementbeschreibungen
2055 können mit dem Befehl @code{\override} verändert werden.
2056
2057 @code{\override} ist eigentlich eine Abkürzung:
2058
2059 @example
2060 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
2061 @end example
2062
2063 @noindent
2064 entspricht mehr oder weniger:
2065
2066 @c  leave this long line -gp
2067 @example
2068 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
2069 @end example
2070
2071 Der Wert von @code{context} (die @qq{alist}) wird benutzt, um
2072 die Eigenschaften von einzelnen Grobs zu initiieren.  Grobs haben
2073 auch Eigenschaften, die im Scheme-Stil benannt werden, also
2074 @code{wort-mit-bindestrich}.  Die Werte der Grob-Eigenschaften
2075 ändern sich während des Formatierungsprozesses: Formatierung
2076 läuft im Prinzip darauf hinaus, Eigenschaften zu errechnen, indem
2077 Callback-Funktionen eingesetzt werden.
2078
2079 @code{fontSize} ist eine besondere Eigenschaft: sie entspricht
2080 @code{\override ... #'font-size} für alle möglichen Objekte.
2081 Weil es sich hier um eine globale Änderung handelt, wurde
2082 die spezielle Form (die mit @code{\set} verändert wird) erstellt.
2083 @end ignore
2084
2085
2086 @node Alisten verändern
2087 @subsection Alisten verändern
2088 @translationof Modifying alists
2089
2090 Einige vom Benutzer einstellbare Eigenschaften sind intern als
2091 @emph{alists} (Assoziative Listen) dargestellt, die Paare von
2092 Schlüsseln und Werten speichern.  Die Struktur einer Aliste ist:
2093
2094 @example
2095 '((@var{Schlüssel1} . @var{Wert1})
2096   (@var{Schlüssel2} . @var{Wert2})
2097   (@var{Schlüssel3} . @var{Wert3})
2098   @dots{})
2099 @end example
2100
2101 Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
2102 @code{\paper}-Umgebung ist, können ihre Schlüssel einzeln verändert
2103 werden, ohne andere Schlüssel zu beeinflussen.
2104
2105 Um beispielsweise den Freiraum zwischen benachbarten Systemen
2106 in einer Systemgruppe zu verkleinern, kann man die
2107 @code{staff-staff-spacing}-Eigenschaft des
2108 +@code{StaffGrouper}-Grobs benutzen.  Die Eigenschaft ist eine
2109 Aliste mit vier Schlüsseln: : @code{basic-distance} (Grund-Abstand),
2110 @code{minimum-distance} (minimaler Abstand), @code{padding} (Verschiebung)
2111 und @code{stretchability} (Dehnbarkeit).  Die Standardwerte dieser
2112 Eigenschaft finden sich im Abschnitt @qq{Backend} der Referenz der
2113 Interna (siehe @rinternals{StaffGrouper}):
2114
2115 @example
2116 '((basic-distance . 9)
2117   (minimum-distance . 7)
2118   (padding . 1)
2119   (stretchability . 5))
2120 @end example
2121
2122 Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
2123 ist es, der Wert des  @code{basic-distance}-Schlüssels (@code{9}) zu
2124 verändern, sodass der den gleichen Wert wie
2125 @code{minimum-distance} (@code{7}) hat.  Um einen einzelnen
2126 Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
2127
2128 @lilypond[quote,verbatim]
2129 % default space between staves
2130 \new PianoStaff <<
2131   \new Staff { \clef treble c''1 }
2132   \new Staff { \clef bass   c1   }
2133 >>
2134
2135 % reduced space between staves
2136 \new PianoStaff \with {
2137   % this is the nested declaration
2138   \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2139 } <<
2140   \new Staff { \clef treble c''1 }
2141   \new Staff { \clef bass   c1   }
2142 >>
2143 @end lilypond
2144
2145 Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
2146 spezifische Schlüssel (@code{basic-distance} im obigen Beispiel) verändert,
2147 ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
2148
2149 Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das
2150 Überlappungen vorkommen.  Die einfachste Möglichkeit, das zu tun, wäre
2151 es, alle vier Wert auf 0 zu setzen.  Man muss jedoch nicht vier
2152 Werte definieren, sondern die Eigenschaft
2153 kann mit einem Aufruf als Aliste vollständig verändert werden:
2154
2155 @lilypond[quote,verbatim]
2156 \new PianoStaff \with {
2157   \override StaffGrouper #'staff-staff-spacing =
2158     #'((basic-distance . 0)
2159        (minimum-distance . 0)
2160        (padding . 0)
2161        (stretchability . 0))
2162 } <<
2163   \new Staff { \clef treble c''1 }
2164   \new Staff { \clef bass   c1   }
2165 >>
2166 @end lilypond
2167
2168 Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
2169 Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
2170 gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
2171 Im Falle von @code{staff-staff-spacing} würden alle nicht genannten
2172 Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer
2173 den Wert von @code{space} hat, wenn sie nicht definiert ist).  Somit sind
2174 folgende Aufrufe äquivalent:
2175
2176 @example
2177 \override StaffGrouper #'staff-staff-spacing =
2178   #'((basic-distance . 7))
2179
2180 \override StaffGrouper #'staff-staff-spacing =
2181   #'((basic-distance . 7)
2182      (minimum-distance . 0)
2183      (padding . 0)
2184      (stretchability . 7))
2185 @end example
2186
2187 Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
2188 Standardwerte, die etwa in einer Initialisierungsdatei
2189 zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
2190 rückgängig gemacht werden.  Im obigen Beispiel werden die
2191 initialisierten Standardwerte für @code{padding} und @code{minimum-distance}
2192 (definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt,
2193 den sie uninitialisiert hätten (0 in beiden Fällen).  Wenn eine Eigenschaft oder
2194 Variable in Form einer Aliste (jeder Größe) definiert wird, werden
2195 immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
2196 Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
2197 bewusst alle Werte zurücksetzen will.
2198
2199 @warning{Geschachtelte Aufrufe funktionieren nicht mit
2200 Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature},
2201 @code{timeSignatureSettings}, usw.)  Diese Eigenschaften können
2202 nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
2203
2204
2205 @node Nützliche Konzepte und Eigenschaften
2206 @section Nützliche Konzepte und Eigenschaften
2207 @translationof Useful concepts and properties
2208
2209 @menu
2210 * Eingabe-Modi::
2211 * Richtung und Platzierung::
2212 * Abstände und Maße::
2213 * Eigenschaften des Staff-Symbols::
2214 * Strecker::
2215 * Sichtbarkeit von Objekten::
2216 * Linienstile::
2217 * Drehen von Objekten::
2218 @end menu
2219
2220
2221 @node Eingabe-Modi
2222 @subsection Eingabe-Modi
2223 @translationof Input modes
2224
2225 Die Art, wie die Notation einer Eingabedatei interpretiert
2226 wird, hängt vom aktuellen Eingabemodus ab.
2227
2228 @strong{Chord (Akkordmodus)}
2229
2230 Man erreicht ihn durch den Befehl @code{\chordmode}.  Hierdurch
2231 wird die Eingabe entsprechend der Syntax der Akkordnotation
2232 interpretiert, siehe @ref{Notation von Akkorden}.  Akkorde werden als
2233 Noten auf einem System dargestellt.
2234
2235 Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert.
2236 Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext
2237 erstellt, die Eingabe entsprechend der Syntax der Akkordnotation
2238 interpretiert und als Akkordbezeichnungen in einem
2239 @code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}.
2240
2241 @strong{Drum (Schlagzeugmodus)}
2242
2243 Man erreicht ihn mit dem Befehl @code{\drummode}.  Die Eingabe
2244 wird entsprechend der Syntax der Schlagzeugnotation interpretiert,
2245 siehe @ref{Grundlagen der Schlagzeugnotation}.
2246
2247 Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert.
2248 Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext
2249 erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation
2250 interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem
2251 dargestellt.  Siehe @ref{Grundlagen der Schlagzeugnotation}.
2252
2253 @strong{Figure (Ziffernmodus)}
2254
2255 Man erreicht ihn mit dem Befehl @code{\figuremode}.  Die Eingabe
2256 wird entsprechend der Syntax für Generalbass interpretiert, siehe
2257 @ref{Eingabe des Generalbass'}.
2258
2259 Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert.
2260 Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext
2261 erstellt, die Eingabe entsprechend der Syntax für Generalbass
2262 interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext
2263 dargestellt.  Siehe @ref{Grundlagen des Bezifferten Basses}.
2264
2265 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
2266
2267 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
2268 Tabulaturen.
2269
2270 Um Tabulaturen zu erstellen, werden Noten oder Akkorde im
2271 Notenmodus notiert und dann in einem @code{TabStaff}-Kontext
2272 interpretiert, siehe
2273 @ref{Standardtabulaturen}.
2274
2275 Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt
2276 es zwei Möglichkeiten.  Man kann den @code{FretBoards}-Kontext
2277 einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können
2278 als Beschriftung über den Noten eingefügt werden, indem man
2279 den @code{\fret-diagram}-Befehl einsetzt (siehe
2280 @ref{Bund-Diagramm-Beschriftung}).
2281
2282 @strong{Lyrics (Gesangstextmodus)}
2283
2284 Man erreicht ihn mit dem Befehl @code{\lyricmode}.  Die Eingabe
2285 wird entsprechend der Syntax für Silben eines Gesangstextes
2286 interpretiert, wobei optional Dauern und verknüpfte
2287 Gesangstextveränderer möglich  sind, siehe @ref{Notation von Gesang}.
2288
2289 Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics}
2290 aktiviert.  Dadurch wird auch ein neuer @code{Lyrics}-Kontext
2291 erstellt und ein impliziter @code{\lyricsto}-Befehl, der den
2292 nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft.
2293
2294 @strong{Markup (Textbeschriftungsmodus)}
2295
2296 Man erreicht ihn mit dem Befehl @code{\markup}.  Die Eingabe wird
2297 entsprechend der Syntax für Textbeschriftung interpretiert, siehe
2298 @ref{Textbeschriftungsbefehle}.
2299
2300 @c silly work-around for texinfo broken-ness
2301 @c (@strong{Note...} causes a spurious cross-reference in Info)
2302 @b{Note (Notenmodus)}
2303
2304 Das ist der Standardmodus.  Er kann auch mit dem Befehl
2305 @code{\notemode} gefordert werden.  Die Eingabe wird als Tonhöhen,
2306 Dauern, Beschriftung usw. interpretiert und als musikalische
2307 Notation auf einem Notensystem gesetzt.
2308
2309 Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben,
2310 aber es kann in bestimmten Situationen durchaus nützlich sein,
2311 etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen
2312 Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus
2313 benutzt werden kann.
2314
2315 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
2316 Strophen zu setzen, muss man den Notenmodus betreten:
2317
2318 @lilypond[verbatim,relative=2,quote]
2319 { c4 c4 c4 c4 }
2320 \addlyrics {
2321   \notemode{ \set stanza = \markup{ \dynamic f 1. } }
2322   To be sung loudly
2323 }
2324 \addlyrics {
2325   \notemode{ \set stanza = \markup{ \dynamic p 2. } }
2326   To be sung quietly
2327 }
2328 @end lilypond
2329
2330
2331 @node Richtung und Platzierung
2332 @subsection Richtung und Platzierung
2333 @translationof Direction and placement
2334
2335 Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine
2336 enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach
2337 oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere
2338 Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden,
2339 Text kann rechts, links oder mittig ausgerichtet werden usw.  Die meisten
2340 dieser Entscheidungen können LilyPond direkt überlassen werden; in
2341 einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung
2342 oder eine Position zu erzwingen.
2343
2344 @strong{Richtungseinstellung von Artikulationszeichen}
2345
2346 Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet,
2347 wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen
2348 oben und unten wechseln, was vor allem von der Richtung der Notenhälse
2349 abhängt und etwa Bögen und Akzente betrifft.
2350
2351 Die Standardeinstellungen können verändert werden, indem dem
2352 Artikulationszeichen ein Ausrichtungsmarkierer vorangeht.  Drei
2353 derartige Ausrichtungsmarkierer sind vorhanden:  @code{^} (bedeutet @qq{nach oben}), @code{_}
2354 (bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung}
2355 benutzen) normalerweise weggelassen werden.  In diesem Fall wird
2356 @code{-} angenommen.  Eine Richtungsanweisung ist jedoch
2357 @strong{immer} erforderlich vor
2358
2359 @itemize
2360 @item @code{\tweak}-Befehlen
2361 @item @code{\markup}-(Textbeschriftungs-)Befehlen
2362 @item @code{\tag}-Befehlen
2363 @item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
2364 @item Fingersatzanweisungen: @w{@code{-1}}
2365 @item Abkürzungen von Artikulationen, wie @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2366 @end itemize
2367
2368 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2369
2370 @lilypond[verbatim,quote,relative=2]
2371 c2( c)
2372 c2_( c)
2373 c2( c)
2374 c2^( c)
2375 @end lilypond
2376
2377
2378 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2379
2380 Die Position oder Richtung vieler Layoutobjekte wird von der
2381 @code{direction}-Eigenschaft kontrolliert.
2382
2383 Der Wert der @code{direction}-Eigenschaft kann auf den Wert
2384 @code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
2385 bzw. @qq{oberhalb} ist, oder auf den Wert @w{@code{-1}}, was
2386 @qq{nach unten} bzw. @qq{unterhalb} bedeutet.  Die Symbole
2387 @code{UP} und @code{DOWN} können anstelle von @code{1}
2388 und @w{@code{-1}} benutzt werden.  Die Standardausrichtung kann
2389 angegeben werden, indem @code{direction} auf den Wert
2390 @code{0} oder @code{CENTER} gesetzt wird.  In vielen Fällen
2391 bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
2392 bestimmt werden kann.  Sie haben die Form
2393
2394 @noindent
2395 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2396
2397 @noindent
2398 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2399 Standardausrichtung}.  Siehe auch
2400 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2401
2402 In wenigen Fällen, von denen Arpeggio das einzige häufiger
2403 vorkommende Beispiel darstellt, entscheidet der Wert von
2404 @code{direction}, ob das Objekt auf der rechten oder linken
2405 Seite das Ursprungsobjektes ausgegeben wird.  In diesem Fall
2406 bedeutet @w{@code{-1}} oder @code{LEFT} @qq{auf der linken Seite}
2407 und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}.  @code{0}
2408 oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
2409
2410 @c ignore left out
2411 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2412 rückgängig gemacht werden:
2413
2414 @lilypond[verbatim,quote,relative=2]
2415 c2( c)
2416 \slurDown
2417 c2( c)
2418 c2( c)
2419 \slurNeutral
2420 c2( c)
2421 @end lilypond
2422
2423 In polyphoner Musik ist es normalerweise besser, eine explizite
2424 Stimme (@code{voice} zu erstellen, als die Richtung eines Objektes zu
2425 ändern.  Zu mehr Information siehe @ref{Mehrere Stimmen}.
2426
2427 @seealso
2428 Handbuch zum Lernen:
2429 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2430
2431 Notationsreferenz:
2432 @ref{Mehrere Stimmen}.
2433
2434
2435 @node Abstände und Maße
2436 @subsection Abstände und Maße
2437 @translationof Distances and measurements
2438
2439 @cindex Abstände, absolut
2440 @cindex Abstände, skaliert
2441
2442 @funindex \mm
2443 @funindex \cm
2444 @funindex \in
2445 @funindex \pt
2446
2447 In LilyPond gibt es zwei Arten von Abständen: absolute und
2448 skalierte.
2449
2450 Absolute Abstände werden benutzt, um Ränder, Einzüge und andere
2451 Einzelheiten des Seitenlayouts zu bestimmen.  Sie sind in den
2452 Standardeinstellungen in Millimetern definiert.  Abstände können
2453 auch in anderen Einheiten definiert werden, indem folgende
2454 Befehle auf die Zahl folgen: @code{\mm}, @code{\cm},
2455 @code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27
2456 eines Zolls).  Abstände des Seitenlayouts können auch in
2457 skalierbaren Einheiten (siehe folgenden Absatz) definiert
2458 werden, indem man den Befehl @code{\staff-space} an die
2459 Zahl hängt.  Das Seitenlayout ist genauer beschrieben in
2460 @ref{Seitenlayout}.
2461
2462 Skalierbare Abstände werden immer in Einheiten von
2463 Notenlinienabständen angegeben, oder seltener in halben
2464 Notenlinienabständen.  Ein Notenlinienabstand ist der
2465 Abstand zwischen zwei benachbarten Linien eines Notensystems.
2466 Der Standardwert dieser Einheit kann global geändert werden,
2467 indem man die globale Notensystemgröße ändert, oder sie
2468 kann lokal geändert werden, indem man die Eigenschaft
2469 @code{staff-space} des @code{StaffSymbol}-Objekts mit
2470 @code{\override} verändert.  Skalierte Abstände verändern
2471 sich automatisch entsprechend, wenn der Notenlinienabstand
2472 entweder global oder lokal verändert wird, aber Schriftarten
2473 verändern ihre Größe nur, wenn der Notenlinienabstand
2474 global verändert wird.  Mit dem globalen Notenlinienabstand
2475 kann man also auf einfach Art und Weise die gesamte Größe
2476 einer Partitur verändern.  Zu Methoden, wie der globale
2477 Notenlinienabstand verändert werden kann, siehe
2478 @ref{Die Notensystemgröße einstellen}.
2479
2480 @funindex magstep
2481
2482 Wenn nur eine ein Abschnitt einer Partitur in einer anderen
2483 Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer
2484 Fußnote, kann die globale Notensystemgröße nicht einfach
2485 geändert werden, weil sich diese Änderung auf die gesamte Partitur
2486 auswirken würde.  In derartigen Fällen muss die Größenänderung
2487 vorgenommen werden, indem man sowohl die
2488 @code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch
2489 die Größe der Schriftarten verändert.  Eine Scheme-Funktion,
2490 @code{magstep}, kann von einer Schriftartveränderung zu der
2491 entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen)
2492 konvertieren.  Zu einer Erklärung und Beispielen zu ihrer
2493 Verwendung siehe @rlearning{Länge und Dicke von Objekten}.
2494
2495
2496 @seealso
2497 Handbuch zum Lernen:
2498 @rlearning{Länge und Dicke von Objekten}.
2499
2500 Notationsreferenz:
2501 @ref{Seitenlayout},
2502 @ref{Die Notensystemgröße einstellen}.
2503
2504
2505 @node Eigenschaften des Staff-Symbols
2506 @subsection Eigenschaften des Staff-Symbols
2507 @translationof Staff symbol properties
2508
2509 @cindex Anpassen von staff symbol
2510 @cindex Notensystem, anpassen
2511 @cindex Veränderung des Notensystems
2512
2513 Die vertikale Position der Notenlinien und die Anzahl der
2514 Notenlinien kann gleichzeitig definiert werden.  Wie das
2515 folgende Beispiel zeigt, werden Notenpositionen nicht
2516 durch die Position der Notenlinien verändert:
2517
2518 @warning{Die @code{'line-positions}-Eigenschaft
2519 verändert die @code{'line-count}-Eigenschaft.  Die
2520 Anzahl der Notenlinien wird implizit definiert durch
2521 die Anzahl der Elemente in der Liste der Werte von
2522 @code{'line-positions}.}
2523
2524 @lilypond[verbatim,quote,relative=1]
2525 \new Staff \with {
2526   \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2527 }
2528 { a4 e' f b | d1 }
2529 @end lilypond
2530
2531 Die Breite eines Notensystems kann verändert werden.  Die Einheit
2532 ist in Notenlinienabständen.  Die Abstände von Objekten
2533 in diesem Notensystem wird durch diese Einstellung nicht
2534 beeinflusst.
2535
2536 @lilypond[verbatim,quote,relative=1]
2537 \new Staff \with {
2538   \override StaffSymbol #'width = #23
2539 }
2540 { a4 e' f b | d1 }
2541 @end lilypond
2542
2543
2544 @node Strecker
2545 @subsection Strecker
2546 @translationof Spanners
2547
2548 Viele Objekte der Musiknotation erstrecken sich über mehrere
2549 Objekte oder gar mehrere Takte.  Beispiele hierfür sind etwa
2550 Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen,
2551 Crescendo, Triller und Glissando.  Derartige Objekte werden
2552 als @qq{Strecker} bezeichnet.  Sie haben spezielle Eigenschaften,
2553 mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst
2554 werden kann.  Einige dieser Eigenschaften gelten für alle
2555 Strecker, andere beschränken sich auf eine Untergruppe der
2556 Strecker.
2557
2558 Alle Strecker unterstützen das @code{spanner-interface}
2559 (Strecker-Schnittstelle).
2560 Ein paar, insbesondere die, die zwischen zwei Objekten eine
2561 gerade Linie ziehen, unterstützen auch das
2562 @code{line-spanner-interface} (Strecker-Linienschnittstelle).
2563
2564
2565 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2566
2567 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2568 die sich auf mehrere Strecker auswirken:
2569
2570 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
2571
2572 Die Mindestlänge eines Streckers wird durch die
2573 @code{minimum-length}-Eigenschaft definiert.  Wenn diese
2574 Eigenschaft vergrößert wird, muss in den meisten Fällen
2575 auch der Abstand der Noten zwischen den zwei Endpunkten
2576 eines Streckers verändert werden.  Eine Veränderung dieser
2577 Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung,
2578 weil ihre Länge aus anderen Berechnungen hervorgeht.
2579 Einige Beispiele, wo die Eigenschaft benutzt wird, sind
2580 unten dargestellt.
2581
2582 @lilypond[verbatim,quote,relative=2]
2583 a~a
2584 a
2585 % increase the length of the tie
2586 -\tweak #'minimum-length #5
2587 ~a
2588 @end lilypond
2589
2590 @lilypond[verbatim,quote,relative=2]
2591 a1
2592 \compressFullBarRests
2593 R1*23
2594 % increase the length of the rest bar
2595 \once \override MultiMeasureRest #'minimum-length = #20
2596 R1*23
2597 a1
2598 @end lilypond
2599
2600 @lilypond[verbatim,quote,relative=2]
2601 a \< a a a \!
2602 % increase the length of the hairpin
2603 \override Hairpin #'minimum-length = #20
2604 a \< a a a \!
2605 @end lilypond
2606
2607 Diese Veränderung kann auch eingesetzt werden, um die Länge
2608 von Legato- und Phrasierungsbögen zu verändern:
2609
2610 @lilypond[verbatim,quote,relative=2]
2611 a( a)
2612 a
2613 -\tweak #'minimum-length #5
2614 ( a)
2615
2616 a\( a\)
2617 a
2618 -\tweak #'minimum-length #5
2619 \( a\)
2620 @end lilypond
2621
2622 Im Falle einiger Layoutobjekte wirkt sich die
2623 @code{minimum-length}-Eigenschaft erst dann aus, wenn die
2624 @code{set-spacing-rods}-Prozedur explizit aufgerufen wird.
2625 Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft
2626 auf @code{ly:spanner::set-spacing-rods} gesetzt werden.  Die
2627 Mindestlänge eines Glissandos etwa wird erst aktiv, wenn
2628 die @code{springs-and-rods}-Eigenschaft gesetzt ist:
2629
2630 @lilypond[verbatim,quote,relative=1]
2631 % default
2632 e \glissando c'
2633
2634 % not effective alone
2635 \once \override Glissando #'minimum-length = #20
2636 e, \glissando c'
2637
2638 % effective only when both overrides are present
2639 \once \override Glissando #'minimum-length = #20
2640 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2641 e, \glissando c'
2642 @end lilypond
2643
2644 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2645
2646 @lilypond[verbatim,quote,relative=1]
2647 % not effective alone
2648 \once \override Beam #'minimum-length = #20
2649 e8 e e e
2650
2651 % effective only when both overrides are present
2652 \once \override Beam #'minimum-length = #20
2653 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2654 e8 e e e
2655 @end lilypond
2656
2657 @strong{@i{Die @code{to-barline}-Eigenschaft}}
2658
2659 Die zweite nützliche Eigenschaft des @code{spanner-interface} ist
2660 @code{to-barline} (bis zum Taktstrich).  In den Standardeinstellungen
2661 ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass
2662 ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten
2663 eines Taktes beendet wird, sich nur bis zum vorhergehenden
2664 Taktstrich erstreckt.  Wenn die Eigenschaft auf @qq{falsch} gesetzt
2665 wird, erstrecken sich die Strecker entsprechend über die Taktlinie
2666 hinüber und enden erst an der entsprechenden Note:
2667
2668 @lilypond[verbatim,quote,relative=2]
2669 a \< a a a a \! a a a \break
2670 \override Hairpin #'to-barline = ##f
2671 a \< a a a a \! a a a
2672 @end lilypond
2673
2674 Diese Eigenschaft wirkt sich nicht auf alle Strecker aus.  Im Falle
2675 von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft
2676 keinen Effekt.  Das gilt auch für alle anderen Streckern, bei
2677 denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen.
2678
2679
2680 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2681
2682 Objekte, die das @code{line-spanner-interface} unterstützen,
2683 sind unter Anderem:
2684
2685 @itemize
2686 @item @code{DynamicTextSpanner}
2687 @item @code{Glissando}
2688 @item @code{TextSpanner}
2689 @item @code{TrillSpanner}
2690 @item @code{VoiceFollower}
2691 @end itemize
2692
2693 Die Routine, die das Setzen der Matrizen dieser Strecker
2694 hervorruft, ist @code{ly:line-interface::print}.  Diese
2695 Routine bestimmt die exakte Position der zwei Endpunkte
2696 und zeichnet eine Linie zwischen ihnen, in dem erforderlichen
2697 Stil.  Die Position der zwei Endpunkte des Streckers wird
2698 in Echtzeit errechnet, aber es ist möglich, ihre
2699 Y-Koordinaten zu verändern.  Die Eigenschaften, die angegeben
2700 werden müssen, sind zwei Ebenen in der Objekthierarchie
2701 tiefer angeordnet, aber die Syntax des @code{\override}-Befehls
2702 ist ziemlich einfach:
2703
2704 @lilypond[relative=2,quote,verbatim]
2705 e2 \glissando b
2706 \once \override Glissando #'(bound-details left Y) = #3
2707 \once \override Glissando #'(bound-details right Y) = #-2
2708 e2 \glissando b
2709 @end lilypond
2710
2711 Die Einheiten für die @code{Y}-Eigenschaft werden in
2712 Notenlinienabständen angegeben, wobei die Mittellinie des
2713 Notensystems die Null darstellt.  Für das Glissando ist
2714 der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt
2715 entsprechend dem Mittelpunkt des Notenkopfes, wenn die
2716 Linie bis in die Noten hinein weitergeführt werden würde.
2717
2718 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2719 vertikalen Position des entsprechenden Anknüpfpunkts des
2720 Streckers errechnet.
2721
2722 Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte
2723 in den Unterlisten @code{left-broken} bzw. @code{right-broken}
2724 von @code{bound-details} abgelegt.  Zum Beispiel:
2725
2726 @lilypond[relative=2,ragged-right,verbatim,quote]
2727 \override Glissando #'breakable = ##t
2728 \override Glissando #'(bound-details right-broken Y) = #-3
2729 c1 \glissando \break
2730 f1
2731 @end lilypond
2732
2733 Eine Anzahl weitere Eigenschaft der @code{left}- und
2734 @code{right}-Unterlisten der @code{bound-details}-Eigenschaft
2735 kann auf gleiche Weise wie  @code{Y} verändert werden:
2736
2737 @table @code
2738 @item Y
2739 Hiermit wird der Y-Koordinationspunkt des Endpunktes in
2740 Notenlinienabständen vom Mittelpunkt des Notensystems
2741 ausgehend angegeben.  Der Endpunkt ist normalerweise
2742 der Mittelpunkt des Elternobjektes, sodass Glissandos
2743 vertikal auf den Mittelpunkt eines Notenkopfes weist.
2744
2745 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
2746 ist sein Wert mit 0 definiert.
2747
2748 @item attach-dir
2749 Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
2750 relativ zum Elternobjekt.  Ein Wert @w{@code{-1}} (oder
2751 @code{LEFT}) lässt die Linie an der linken Seite der Noten
2752 beginnen/enden, mit der sie verknüpft ist.
2753
2754 @item X
2755 Das ist der absolute X-Koordinatenpunkt des Endpunktes.  Der
2756 Wert wird normalerweise in Echtzeit errechnet, und ihn zu
2757 verändern ist normalerweise nicht nützlich.
2758
2759 @item stencil
2760 Linienstrecker können Symbole am Ende oder zu Anfang des
2761 Streckers haben, die in dieser Untereigenschaft definiert
2762 werden.  Die Eigenschaft ist für interne Benutzung, es
2763 wird empfohlen, die Eigenschaft @code{text} zu benutzen.
2764
2765 @item text
2766 Das ist eine Textbeschriftung, die ausgewertet wird und die
2767 @code{stencil}-Eigenschaft überschreibt.  Sie wird eingesetzt,
2768 um @i{cresc.}, @i{tr} oder andere Texte an horizontale
2769 Strecker zu setzen.
2770
2771 @lilypond[quote,ragged-right,relative=2,verbatim]
2772 \override TextSpanner #'(bound-details left text)
2773    = \markup { \small \bold Slower }
2774 c2\startTextSpan b c a\stopTextSpan
2775 @end lilypond
2776
2777 @item stencil-align-dir-y
2778 @item stencil-offset
2779 Wenn keine dieser beiden Eigenschaften gesetzt wird, wird
2780 die Matrize (engl. stencil) einfach am Endpunkt des Streckers,
2781 auf seiner Mittellinie (wie durch @code{X} und @code{Y}
2782 definiert) zentriert, ausgegeben.  Wenn entweder
2783 @code{stencil-align-dir-y} oder @code{stencil-offset}
2784 gesetzt werden, wird das Symbol am Rand vertikal entsprechend
2785 des Endpunktes der Linie verschoben:
2786
2787 @lilypond[relative=1,quote,verbatim]
2788 \override TextSpanner
2789   #'(bound-details left stencil-align-dir-y) = #-2
2790 \override TextSpanner
2791   #'(bound-details right stencil-align-dir-y) = #UP
2792
2793 \override TextSpanner
2794   #'(bound-details left text) = #"ggg"
2795 \override TextSpanner
2796   #'(bound-details right text) = #"hhh"
2797 c4^\startTextSpan c c c \stopTextSpan
2798 @end lilypond
2799
2800 Dabei sollte beachtet werden, dass negative Werte das Objekt
2801 nach @emph{oben} verschieben, anders als man erwarten könnte,
2802 weil der Wert @w{@code{-1}} oder @code{DOWN} bedeutet, dass
2803 die @emph{Unterkante} des Textes mit der Streckerlinie
2804 ausgerichtet wird.  Ein Wert @code{1} oder @code{UP}
2805 richtet die Oberkante des Textes mit der Streckerlinie aus.
2806
2807 @item arrow
2808 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
2809 wird ein Pfeilkopf am Ende der Linie erstellt.
2810
2811 @item padding
2812 Diese Eigenschaft kontrolliert den Abstand zwischen
2813 dem angegebenen Endpunkt der Linie und dem wirklichen Ende.
2814 Ohne Füllung (engl. padding) würde ein Glissando in der
2815 Mitte eines Notenkopfes beginnen und enden.
2816
2817 @end table
2818
2819 Die musikalische Funktion @code{\endSpanners} beschließt
2820 den Strecker, der an der direkt folgenden Note beginnt,
2821 bevor er eigentlich zu ende wäre.  Er wird exakt nach
2822 einer Note beendet, oder am nächsten Taktstrich, wenn
2823 @code{to-barline} auf wahr gesetzt ist und eine Taktlinie
2824 vor der nächsten Note erscheint.
2825
2826 @lilypond[verbatim,quote,ragged-right,relative=2]
2827 \endSpanners
2828 c2 \startTextSpan c2 c2
2829 \endSpanners
2830 c2 \< c2 c2
2831 @end lilypond
2832
2833 Wenn man @code{\endSpanners} benutzt, ist es nicht
2834 nötig, den Befehl \startTextSpan mit \stopTextSpan
2835 zu beenden, und es ist auch nicht nötig, Crescendo-Klammern
2836 mit @code{\!} zu beenden.
2837
2838
2839 @seealso
2840 Referenz der Interna:
2841 @rinternals{TextSpanner},
2842 @rinternals{Glissando},
2843 @rinternals{VoiceFollower},
2844 @rinternals{TrillSpanner},
2845 @rinternals{line-spanner-interface}.
2846
2847
2848 @node Sichtbarkeit von Objekten
2849 @subsection Sichtbarkeit von Objekten
2850 @translationof Visibility of objects
2851
2852 @cindex Objekte, Sichtbarkeit
2853 @cindex Grobs, Sichtbarkeit
2854 @cindex Sichtbarkeit von Objekten
2855
2856 Die Sichtbarkeit von Layout-Objekten kann auf vier Arten
2857 kontrolliert werden: Ihre Matrizen (engl stencil) können
2858 entfernt werden, sie können unsichtbar gemacht werden,
2859 sie können weiß eingefärbt werden und ihre
2860 @code{break-visibility}-Eigenschaft kann verändert werden.
2861 Die ersten drei Möglichkeiten beziehen sich auf alle
2862 Layout-Objekte, die letzte nur auf einige wenige, nämlich
2863 die @emph{zerteilbaren} Objekte.  Das Handbuch zum Lernen
2864 führt in alle vier Möglichkeiten ein, siehe
2865 @rlearning{Sichtbarkeit und Farbe von Objekten}.
2866
2867 Es gibt auch einige weitere Techniken, die sich nur auf
2868 bestimmte Layout-Objekte beziehen.  Sie werden im letzten
2869 Abschnitt behandelt.
2870
2871 @menu
2872 * Einen stencil entfernen::
2873 * Objekten unsichtbar machen::
2874 * Objekte weiß malen::
2875 * break-visibility (unsichtbar machen) benutzen::
2876 * Besonderheiten::
2877 @end menu
2878
2879
2880 @node Einen stencil entfernen
2881 @unnumberedsubsubsec Einen @code{stencil} entfernen
2882 @translationof Removing the stencil
2883
2884 @cindex stencil, entfernen
2885 @cindex Matrize, entfernen
2886 @cindex Stempel (stencil), entfernen
2887 @cindex Entfernen eines Stencil
2888
2889 Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft.
2890 Sie ist normalerweise definiert als die Funktion, die das
2891 entsprechende Objekt zeichnet.  Wenn die Eigenschaft mit
2892 @code{\override} auf @code{#f} gesetzt wird, wird keine
2893 Funktion aufgerufen und also auch kein Objekt gezeichnet.
2894 Das Standardverhalten kann mit dem Befehl @code{\revert}
2895 wieder hergestellt werden.
2896
2897 @lilypond[quote,verbatim,relative=1]
2898 a1 a
2899 \override Score.BarLine #'stencil = ##f
2900 a a
2901 \revert Score.BarLine #'stencil
2902 a a a
2903 @end lilypond
2904
2905
2906 @node Objekten unsichtbar machen
2907 @unnumberedsubsubsec Objekten unsichtbar machen
2908 @translationof Making objects transparent
2909
2910 @cindex transparent, Objekte
2911 @cindex unsichtbar, Objekte
2912 @cindex durchsichtig, Objekte
2913
2914 Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft
2915 (@code{'transparent}),
2916 die normalerweise auf den Wert @code{#f} gesetzt ist.  Wenn
2917 sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch
2918 den entsprechenden Platz ein, ist aber unsichtbar.
2919
2920 @lilypond[quote,verbatim,relative=2]
2921 a4 a
2922 \once \override NoteHead #'transparent = ##t
2923 a a
2924 @end lilypond
2925
2926
2927 @node Objekte weiß malen
2928 @unnumberedsubsubsec Objekte weiß malen
2929 @translationof Painting objects white
2930
2931 @cindex Objekte, einfärben
2932 @cindex Färben von Objekten
2933 @cindex Einfärben von Objekten
2934 @cindex Ebenen (layer)
2935 @cindex layer (Ebenen)
2936 @cindex Druckreihenfolge
2937 @cindex Objekte verändern
2938 @cindex verändern von Objekten
2939 @cindex Grobs, verändern
2940
2941 Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die
2942 normalerweise schwarz (@code{black}) definiert ist.  Wenn
2943 sie nach weiß (@code{white}) verändert wird, kann man das
2944 Objekt nicht mehr vom weißen Hintergrund unterscheiden.
2945 Wenn das Objekt jedoch andere Objekte überschneidet, wird
2946 die Farbe der Überschneidungen von der Reihenfolge entschieden,
2947 in welcher die Objekte gesetzt werden.  Es kann also vorkommen,
2948 dass man die Umrisse des weißen Objektes erahnen kann, wie
2949 in diesem Beispiel:
2950
2951 @lilypond[quote,verbatim,relative=2]
2952 \override Staff.Clef #'color = #white
2953 a1
2954 @end lilypond
2955
2956 Das kann man vermeiden, indem man die Satzreihenfolge der Objekte
2957 verändert.  Alle Layout-Objekte haben eine @code{layer}-Eigenschaft,
2958 die auf eine ganze Zahl gesetzt sein muss.  Objekte mit der
2959 niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst
2960 gesetzt, dann die nächsten Objekte in ansteigender Ordnung.  Objekte
2961 mit höheren Werten überschneiden also Objekte mit niedrigeren
2962 Werten.  Die meisten Objekte bekommen den Wert @code{1} zugewiesen,
2963 einige wenige Objekte, unter die auch @code{StaffSymbol} (die
2964 Notenlinien) gehört, jedoch den Wert @code{0}.  Die Reihenfolge,
2965 in der Objekte mit demselben Wert gesetzt werden, ist nicht
2966 definiert.
2967
2968 Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
2969 @code{1} für @code{layer} hat, nach den Notenlinien gesetzt
2970 (die einen Wert von @code{0} für @code{layer} haben) und
2971 überschneidet sie also.  Um das zu ändern, muss dem @code{Clef}-Objekt
2972 (Notenschlüssel) ein niedrigerer Wert, etwa @w{@code{-1}}, gegeben
2973 werden, sodass es früher gesetzt wird:
2974
2975 @lilypond[quote,verbatim,relative=2]
2976 \override Staff.Clef #'color = #white
2977 \override Staff.Clef #'layer = #-1
2978 a1
2979 @end lilypond
2980
2981
2982 @node break-visibility (unsichtbar machen) benutzen
2983 @unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen
2984 @translationof Using break-visibility
2985
2986 @funindex break-visibility
2987
2988 @cindex break-visibility
2989
2990 Die meisten Layout-Objekte werden nur einmal gesetzt, aber
2991 einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und
2992 Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn
2993 die Zeile gewechselt wird: einmal am Ende des oberen Systems
2994 und ein zweites Mal zu Beginn des nächsten Systems.
2995 Derartige Objekte werden als @emph{trennbar} bezeichnet
2996 und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft,
2997 mit der ihre Sichtbarkeit an allen drei Positionen, an denen
2998 sie auftreten können, kontrolliert werden kann: zu Beginn
2999 einer Zeile, innerhalb einer Zeile, wenn sie verändert werden,
3000 und am Ende einer Zeile, wenn die Änderung hier stattfindet.
3001
3002 Die Taktart wird beispielsweise standardmäßig nur zu Beginn des
3003 ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie
3004 sich ändert.  Wenn diese Änderung am Ende eines Systems auftritt,
3005 wird die neue Taktart am Ende des aktuellen Systems als auch
3006 zu Beginn des nächsten Systems gesetzt.
3007
3008 Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft
3009 kontrolliert, die erklärt wird in
3010 @c Leave this ref on a newline - formats incorrectly otherwise -td
3011 @rlearning{Sichtbarkeit und Farbe von Objekten}.  Die Eigenschaft
3012 braucht einen Vektor von drei Booleschen Werten, die in ihrer
3013 Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile,
3014 b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt
3015 wird.  Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen,
3016 wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.
3017
3018 Die acht möglichen Kombinationen können auch durch vordefinierte
3019 Funktionen bestimmt werden, welche in der Datei @file{scm/output-lib.scm}
3020 definiert sind.  Die letzten drei Spalten der folgenden Tabelle
3021 zeigen an, ob das Layout-Objekt an einer bestimmten Position
3022 sichtbar sein wird oder nicht:
3023
3024 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {ja} {ja} {ja}
3025 @headitem Funktion                   @tab Vektor                  @tab Vor @tab kein    @tab Nach
3026 @headitem Form                       @tab Form                    @tab Umbruch  @tab Umbruch    @tab Umbruch
3027
3028 @item @code{all-visible}             @tab @code{'#(#t #t #t)}     @tab ja    @tab ja      @tab ja
3029 @item @code{begin-of-line-visible}   @tab @code{'#(#f #f #t)}     @tab nein  @tab nein       @tab ja
3030 @item @code{center-visible}          @tab @code{'#(#f #t #f)}     @tab nein    @tab ja      @tab nein
3031 @item @code{end-of-line-visible}     @tab @code{'#(#t #f #f)}     @tab ja   @tab nein       @tab nein
3032 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)}     @tab ja    @tab ja       @tab nein
3033 @item @code{center-invisible}        @tab @code{'#(#t #f #t)}     @tab ja    @tab nein       @tab ja
3034 @item @code{end-of-line-invisible}   @tab @code{'#(#f #t #t)}     @tab nein     @tab ja     @tab ja
3035 @item @code{all-invisible}           @tab @code{'#(#f #f #f)}     @tab nein   @tab nein       @tab nein
3036 @end multitable
3037
3038 Die Standardeinstellungen von @code{break-visibility} hängen vom
3039 Layout-Objekt ab.  Die folgende Tabelle zeigt alle wichtigen Layout-Objekte,
3040 die mit @code{break-visibility} verändert werden können und die
3041 jeweiligen Standardeinstellungen der Eigenschaft:
3042
3043 @multitable @columnfractions .3 .3 .4
3044
3045 @headitem Layout-Objekt   @tab Normaler Kontext  @tab Standardeinstellung
3046
3047 @c omit Ambitus as it appears not to be affected by break-visibility -td
3048 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3049 @item @code{BarLine} (Taktstrich)            @tab @code{Score}          @tab calculated
3050 @item @code{BarNumber} (Taktzahl)          @tab @code{Score}          @tab @code{begin-of-line-visible}
3051 @c omit the following item until it can be explained -td
3052 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3053 @item @code{BreathingSign} (Atemzeichen)       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3054 @item @code{Clef}  (Schlüssel)              @tab @code{Staff}          @tab @code{begin-of-line-visible}
3055 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3056 @item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3057 @c omit KeyCancellation until it can be explained -td
3058 @c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
3059 @item @code{KeySignature} (Tonart)       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3060 @c omit LeftEdge until it can be explained -td
3061 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3062 @item @code{OctavateEight} (Oktavierungs-Acht)      @tab @code{Staff}          @tab @code{begin-of-line-visible}
3063 @item @code{RehearsalMark} (Übungszeichen)      @tab @code{Score}          @tab @code{end-of-line-invisible}
3064 @item @code{TimeSignature} (Taktart)      @tab @code{Staff}          @tab @code{all-visible}
3065
3066 @end multitable
3067
3068 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
3069 Sichtbarkeit von Taktlinien zu bestimmten:
3070
3071 @lilypond[quote,verbatim,relative=1,ragged-right]
3072 f4 g a b
3073 f4 g a b
3074 % Remove bar line at the end of the current line
3075 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3076 \break
3077 f4 g a b
3078 f4 g a b
3079 @end lilypond
3080
3081 Obwohl alle drei Bestandteile des Vektors, mit denen
3082 @code{break-visibility} definiert wird, vorhanden sein
3083 müssen, haben nicht alle eine Auswirkung auf jedes
3084 Layout-Objekt, und einige Kombinationen können sogar
3085 Fehler hervorrufen.  Es gelten die folgenden Einschränkungen:
3086
3087 @itemize @bullet
3088 @item
3089 Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
3090
3091 @item
3092 Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt
3093 werden, außer wenn er nicht 1 ist.
3094
3095 @item
3096 Schlüssel -- siehe unten.
3097
3098 @item
3099 Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben
3100 oder alle unterdrückt.  Mit @code{begin-of-line-invisible} werden
3101 sie ausgegeben, mit @code{all-invisible} unterdrückt.
3102
3103 @item
3104 Tonart -- siehe unten.
3105
3106 @item
3107 Oktavierungs-Acht -- siehe unten.
3108
3109 @end itemize
3110
3111
3112 @node Besonderheiten
3113 @unnumberedsubsubsec Besonderheiten
3114 @translationof Special considerations
3115
3116 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
3117
3118 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
3119 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
3120
3121 @funindex explicitKeySignatureVisibility
3122 @funindex explicitClefVisibility
3123
3124 Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit
3125 von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile,
3126 d.h. nach einem Zeilenumbruch.  Sie hat keinen Einfluss auf die
3127 Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer
3128 expliziten Tonart- oder Schlüsseländerung in oder am Ende einer
3129 Zeile angezeigt werden.  Im nächsten Beispiel ist die Tonartangabe
3130 nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
3131 @code{all-invisible} eingesetzt wurde:
3132
3133 @lilypond[quote,verbatim,relative=1,ragged-right]
3134 \key g \major
3135 f4 g a b
3136 % Try to remove all key signatures
3137 \override Staff.KeySignature #'break-visibility = #all-invisible
3138 \key bes \major
3139 f4 g a b
3140 \break
3141 f4 g a b
3142 f4 g a b
3143 @end lilypond
3144
3145 Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen
3146 wird von den @code{explicitKeySignatureVisibility}- und
3147 @code{explicitClefVisibility}-Eigenschaften kontrolliert.  Sie
3148 entsprechen der @code{break-visibility}-Eigenschaft und beide
3149 brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten
3150 Funktionen als Argument, genau wie @code{break-visibility}.
3151 Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der
3152 Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set}
3153 eingesetzt werden.  Beide sind standardmäßig auf die Funktion
3154 @code{all-visible} gesetzt.  Diese Eigenschaften kontrollieren nur
3155 die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten
3156 Änderungen herrühren, und haben keinen Einfluss auf Tonarten und
3157 Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
3158 @code{break-visibility} benutzt werden.
3159
3160 @lilypond[quote,verbatim,relative=1,ragged-right]
3161 \key g \major
3162 f4 g a b
3163 \set Staff.explicitKeySignatureVisibility = #all-invisible
3164 \override Staff.KeySignature #'break-visibility = #all-invisible
3165 \key bes \major
3166 f4 g a b \break
3167 f4 g a b
3168 f4 g a b
3169 @end lilypond
3170
3171 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
3172
3173 Um erinnernde Versetzungszeichen zu entfernen, die nach einer
3174 expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
3175 @code{printKeyCancellation} auf @code{#f} gesetzt werden:
3176
3177 @lilypond[quote,verbatim,relative=1,ragged-right]
3178 \key g \major
3179 f4 g a b
3180 \set Staff.explicitKeySignatureVisibility = #all-invisible
3181 \set Staff.printKeyCancellation = ##f
3182 \override Staff.KeySignature #'break-visibility = #all-invisible
3183 \key bes \major
3184 f4 g a b \break
3185 f4 g a b
3186 f4 g a b
3187 @end lilypond
3188
3189 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
3190 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
3191
3192 @strong{@emph{Automatische Takte}}
3193
3194 @funindex automaticBars
3195
3196 @cindex Taktstriche, unterdrücken
3197
3198 Ein Sonderfall sind die automatischen Taktstriche, die mit der
3199 Eigenschaft @code{automaticBars} im @code{Score}-Kontext
3200 ausgeschaltet werden können.  Wenn sie auf @code{#f} gesetzt
3201 ist, werden Taktstrich nicht automatisch ausgegeben sondern
3202 müssen explizit mit dem @code{\bar}-Befehl eingegeben werden.
3203 Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte
3204 allerdings immer noch gezählt.  Takterstellung wird später
3205 wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft
3206 wieder auf @code{#t} gesetzt wird.  Wenn sie den Wert @code{#f}
3207 hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen
3208 auftreten.
3209
3210 @c TODO Add example
3211
3212 @strong{@emph{Oktavierte Schlüssel}}
3213
3214 @cindex oktavierte Schlüssel, Sichtbarkeit
3215 @cindex Sichtbarkeit von oktavierten Schlüsseln
3216 @cindex Schlüssel, Sichtbarkeit der Oktavierung
3217
3218 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
3219 wird durch das @code{OctavateEight}-Layout-Objekt erstellt.
3220 Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt
3221 geerbt, sodass Veränderungen von @code{break-visibility}
3222 des @code{OctavateEight}-Layout-Objekts nicht auch noch
3223 für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.
3224
3225 Bei expliziten Schlüsseländerungn kontrolliert die
3226 @code{explicitClefVisibility}-Eigenschaft wohl das
3227 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
3228
3229 @seealso
3230 Handbuch zum Lernen:
3231 @rlearning{Sichtbarkeit und Farbe von Objekten}.
3232
3233
3234 @node Linienstile
3235 @subsection Linienstile
3236 @translationof Line styles
3237
3238 Einige Aufführungsanweisungen (z. B. @i{rallentando} und
3239 @i{accelerando} oder Triller werden als Text gesetzt und
3240 möglicherweise über mehrere Takte mit Linien fortgeführt,
3241 die teilweise gestrichelt oder gewellt sind.
3242
3243 Alle benutzen die gleichen Routinen wie das Glissando,
3244 um Text und Linien zu produzieren, weshalb auch eine
3245 Veränderungen der Erscheinung auf gleiche Weise vonstatten
3246 geht.  Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und
3247 die Routine, die ihn setzt, heißt @code{ly:line-interface::print}.
3248 Diese Routine bestimmt die exakte Position von zwei
3249 @i{Strecker-Punkten} und zeichnet eine Linie zwischen sie
3250 im gewünschten Linienstil.
3251
3252 Hier einige Beispiele, welche Linienstile möglich sind
3253 und wie sie verändert werden können:
3254
3255 @lilypond[relative=2,ragged-right,verbatim,quote]
3256 d2 \glissando d'2
3257 \once \override Glissando #'style = #'dashed-line
3258 d,2 \glissando d'2
3259 \override Glissando #'style = #'dotted-line
3260 d,2 \glissando d'2
3261 \override Glissando #'style = #'zigzag
3262 d,2 \glissando d'2
3263 \override Glissando #'style = #'trill
3264 d,2 \glissando d'2
3265 @end lilypond
3266
3267 Die Position der Endpunkte des Streckers werden in
3268 Realzeit für jedes graphische Objekt errechnet, aber
3269 es ist möglich, sie manuell vorzugeben:
3270
3271 @c TODO Complete
3272 @lilypond[relative=2,ragged-right,verbatim,quote]
3273 e2 \glissando f
3274 \once \override Glissando #'(bound-details right Y) = #-2
3275 e2 \glissando f
3276 @end lilypond
3277
3278 Der Wert von @code{Y} wird für den rechten Endpunkt auf
3279 @w{@code{-2}} gesetzt.  Die linke Seite kann ähnlich angepasst
3280 werden, indem man @code{left} anstelle von @code{right} angibt.
3281
3282 Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
3283 der vertikalen Position der linken und rechten Anbindepunkte
3284 des Streckers errechnet.
3285
3286 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
3287 siehe @ref{Strecker}.
3288
3289
3290 @node Drehen von Objekten
3291 @subsection Drehen von Objekten
3292 @translationof Rotating objects
3293
3294 Layout-Objekte und Textbeschriftungselemente können zu einem
3295 beliebigen Winkel um einen beliebigen Punkt herum gedreht
3296 werden, aber die Methode, mit der die Änderung vorgenommen
3297 werden muss, unterscheidet sich je nach Objekt.
3298
3299 @menu
3300 * Drehen von Layout-Objekten::
3301 * Textbeschriftung drehen::
3302 @end menu
3303
3304 @node Drehen von Layout-Objekten
3305 @unnumberedsubsubsec Drehen von Layout-Objekten
3306 @translationof Rotating layout objects
3307
3308 @cindex Drehen von Objekten
3309 @cindex Objekte, Drehen
3310
3311 Alle Layout-Objekte, die das @code{grob-interface} unterstützen,
3312 können gedreht werden, indem man ihre @code{rotation}-Eigenschaft
3313 einstellt.  Sie erhält eine Liste mit drei Einträgen: den
3314 Winkel der Drehung gegen den Uhrzeiger sowie die X- und
3315 Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts,
3316 um welchen herum die Drehung stattfinden soll.  Der Winkel
3317 der Drehung wird in Grad angegeben, die Koordinaten in
3318 Notenlinienzwischenräumen.
3319
3320 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
3321 durch Ausprobieren herausgefunden werden.
3322
3323 @cindex Crescendoklammern, gedreht
3324 @cindex gedrehte Crescendoklammern
3325 @cindex schräge Crescendoklammern
3326 @cindex Klammern, Crescendo, schräg
3327
3328 Es gibt nur wenige Situationen, in welchen die Drehung eines
3329 Layout-Objektes sinnvoll ist.  Das folgende Beispiel zeigt
3330 eine sinnvolle Anwendung:
3331
3332 @lilypond[quote,verbatim,relative=1]
3333 g4\< e' d' f\!
3334 \override Hairpin #'rotation = #'(20 -1 0)
3335 g,,4\< e' d' f\!
3336 @end lilypond
3337
3338
3339 @node Textbeschriftung drehen
3340 @unnumberedsubsubsec Textbeschriftung drehen
3341 @translationof Rotating markup
3342
3343 Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung
3344 der Befehl @code{\rotate} gesetzt wird.  Der Befehl hat zwei
3345 Argumente:  Den Winkel der Drehung in Grad gegen den Uhrzeiger und
3346 der Text, der gedreht dargestllt werden soll.  Die Ausdehnung des
3347 Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten
3348 der x- und y-Koordinaten des gedrehten Textes.  Im folgenden
3349 Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf
3350 @code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert
3351 werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
3352 würden.
3353
3354 @lilypond[quote,verbatim,relative=1]
3355 \override TextScript #'outside-staff-priority = ##f
3356 g4^\markup { \rotate #30 "a G" }
3357 b^\markup { \rotate #30 "a B" }
3358 des^\markup { \rotate #30 "a D-Flat" }
3359 fis^\markup { \rotate #30 "an F-Sharp" }
3360 @end lilypond
3361
3362
3363 @node Fortgeschrittene Optimierungen
3364 @section Fortgeschrittene Optimierungen
3365 @translationof Advanced tweaks
3366
3367 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3368 Aussehen des Notenbildes zu polieren.
3369
3370 @menu
3371 * Objekte ausrichten::
3372 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3373 * stencils verändern::
3374 * Formen verändern::
3375 * Reine und unreine Container::
3376 @end menu
3377
3378
3379 @seealso
3380 Handbuch zum Lernen:
3381 @rlearning{Die Ausgabe verändern},
3382 @rlearning{Mehr Information}.
3383
3384 Notationsreferenz:
3385 @ref{Die Referenz der Programminterna erklärt},
3386 @ref{Eigenschaften verändern}.
3387
3388 Erweitern:
3389 @rextend{Schnittstellen für Programmierer}.
3390
3391 Installierte Dateien:
3392 @file{scm/define-grobs.scm}.
3393
3394 Schnipsel:
3395 @rlsr{Tweaks and overrides}.
3396
3397 Referenz der Interna:
3398 @rinternals{All layout objects}.
3399
3400
3401 @node Objekte ausrichten
3402 @subsection Objekte ausrichten
3403 @translationof Aligning objects
3404
3405 Graphische Objekte, die das @code{self-alignment-interface} und/obder
3406 das @code{side-position-interface} unterstützen, können an einem
3407 vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden.
3408 Eine Liste derartiger Objekte findet sich in
3409 @rinternals{self-alignment-interface} und @rinternals{side-position-interface}.
3410
3411 Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale
3412 Ausdehnung und eine vertikale Ausdehnung.  Die horizontale Ausdehnung ist
3413 ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken
3414 ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen
3415 nach links mit negativen Zahlen notiert werden.  Die vertikale Ausdehnung
3416 ist ein Zahlenpaar, das die Verschiebung der unteren und oberen
3417 Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach
3418 unten mit negativen Zahlen notiert werden.
3419
3420 Die Position eines Objektes auf dem Notensystem wird mit Werten
3421 von @code{X-offset} und @code{Y-offset} angegeben.  Der Wert von
3422 @code{X-offset} gibt die Verschiebung von der X-Koordinate des
3423 Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset}
3424 die Verschiebung ausgehend von der Mittellinie des Notensystemes.
3425 Die Werte von @code{X-offset} und @code{Y-offset} können direkt
3426 bestimmt werden oder durch Prozeduren errechnet werden, sodass
3427 eine Ausrichtung mit dem Elternobjekt erreicht werden kann.
3428
3429 @warning{Viele Objekte brauchen besondere Überlegungen zu ihrer
3430 Position, weshalb in manchen Fällen manuell gesetzte Werte von
3431 @code{X-offset} oder @code{Y-offset} ignoriert oder verändert
3432 werden können, obwohl das Objekt das
3433 @code{self-alignment-interface} unterstützt.  Wenn man @code{X-offset}
3434 oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende
3435 @code{self-alignment}-Eigenschaft ignoriert.}
3436
3437 Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung
3438 von @code{Y-offset} verschoben werden, aber Änderungen von
3439 @code{X-offset} haben keine Auswirkung.
3440
3441 Übungszeichen können an trennbaren Objekten (wie Taktstrichen,
3442 Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden.
3443 In @code{break-aligned-interface} finden sich besondere Eigenschaften,
3444 mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.
3445
3446 @seealso
3447
3448 Notationshandbuch:
3449 @ref{Benutzung des break-alignable-interface}.
3450
3451 Erweitern:
3452 @rextend{Callback functions}.
3453
3454
3455 @menu
3456 * X-offset und Y-offset direkt setzen::
3457 * Das side-position-interface benutzen::
3458 * Das self-alignment-interface benutzen::
3459 * Benutzung des break-alignable-interface::
3460 @end menu
3461
3462 @node X-offset und Y-offset direkt setzen
3463 @unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen
3464 @translationof Setting X-offset and Y-offset directly
3465
3466 Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften
3467 vieler Objekte zugewiesen werden.  Das folgende Beispiel zeigt
3468 drei Noten mit der Standardposition von Fingersatzanweisungen
3469 und die Positionen, wenn @code{X-offset} und @code{Y-offset}
3470 verändert werden.
3471
3472 @lilypond[verbatim,quote,relative=2]
3473 a-3
3474 a
3475 -\tweak #'X-offset #0
3476 -\tweak #'Y-offset #0
3477 -3
3478 a
3479 -\tweak #'X-offset #-1
3480 -\tweak #'Y-offset #1
3481 -3
3482 @end lilypond
3483
3484
3485
3486 @node Das side-position-interface benutzen
3487 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3488 @translationof Using the side-position-interface
3489
3490 Ein Objekt, das die @code{side-position-interface}-Schnittstelle
3491 unterstützt, kann neben sein Elternobjekt gesetzt werden,
3492 sodass zwei definierte Enden der Objekte sich berühren.
3493 Das Objekt kann über, unter, rechts oder links vom
3494 Ursprungsobjekt positioniert werden.  Das Ursprungsobjekt
3495 kann nicht definiert werden: es ergibt sich aus der Reihenfolge
3496 der Objekte in der Eingabe.  Die meisten Objekte haben
3497 einen Notenkopf als Ursprung assoziiert.
3498
3499 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3500 wo das Objekt platziert werden soll, wie in der Tabelle
3501 zu sehen:
3502
3503 @c TODO add an example of each to the table
3504
3505 @multitable @columnfractions .3 .3 .3
3506 @headitem @code{side-axis}-  @tab @code{direction}-  @tab
3507 @headitem Eigenschaft          @tab Eigenschaft          @tab Platzierung
3508
3509 @item     @code{0}          @tab @code{-1}         @tab links
3510 @item     @code{0}          @tab @code{1}          @tab rechts
3511 @item     @code{1}          @tab @code{-1}         @tab unten
3512 @item     @code{1}          @tab @code{1}          @tab oben
3513
3514 @end multitable
3515
3516 Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset}
3517 auf die Prozedur @code{ly:side-position-interface::x-aligned-side}
3518 gesetzt werden.  Diese Prozedur errechnet den richtigen Wert für
3519 @code{X-offset}, sodass das Objekt auf der rechten oder linken
3520 Seite des Ursprungs angeordnet wird, entsprechend dem Wert
3521 der @code{direction}-Eigenschaft.
3522
3523 Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset}
3524 auf die Prozedur @code{ly:side-position-interface::y-aligned-side}
3525 gesetzt werden.  Diese Prozedur errechnet den richtigen Wert für
3526 @code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt
3527 angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft.
3528
3529
3530
3531
3532 @node Das self-alignment-interface benutzen
3533 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3534 @translationof Using the self-alignment-interface
3535
3536 @emph{Selbstausrichtende Objekte horizontal}
3537
3538 Die horizontale Ausrichtung eines Objektes, das die
3539 @code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle
3540 unterstützt, wird durch den Wert von @code{self-alignment-X}
3541 kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des
3542 Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self}
3543 gesetzt.  @code{self-alignment-X} kann eine beliebige reale
3544 Zahl zugewiesen werden, in Einheiten der Hälfte der
3545 X-Gesamtausdehnung des Objekts.  Negative Werte verschieben
3546 das Objekt nach rechts, positive nach links.  Ein Wert von
3547 @code{0} zentriert das Objekt auf dem Referenzpunkt des
3548 Ursprungs, ein Wert von @w{@code{-1}} richtet die linke Ecke des
3549 Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
3550 Wert von @code{1} richtet die rechte Ecke des Objektes am
3551 Referenzpunkt des Ursprungsobjektes aus.  Die Symbole
3552 @code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
3553 von @w{@code{-1}}, @code{0} und @code{1} eingesetzt werden.
3554
3555 Normalerweise würde der @code{\override}-Befehl benutzt werden, um
3556 die Werte von @code{self-alignment-X} zu verändern, aber der
3557 @code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen
3558 an einer einzigen Note auszurichten:
3559
3560 @lilypond[quote,verbatim,relative=1]
3561 a'
3562 -\tweak #'self-alignment-X #-1
3563 ^"left-aligned"
3564 -\tweak #'self-alignment-X #0
3565 ^"center-aligned"
3566 -\tweak #'self-alignment-X #RIGHT
3567 ^"right-aligned"
3568 -\tweak #'self-alignment-X #-2.5
3569 ^"aligned further to the right"
3570 @end lilypond
3571
3572
3573 @emph{Objekte vertikal automatisch ausrichten}
3574
3575 Objekte können auf ähnliche Weise auch vertikal aneinander
3576 ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft
3577 auf @code{ly:self-alignment-interface::y-aligned-on-self}
3578 gesetzt ist.  Oft greifen jedoch auch andere Mechanismen
3579 bei der vertikalen Ausrichtung ein:  Der Wert von
3580 @code{Y-offset} ist nur eine der Variablen, die für die
3581 Berechnung benutzt werden.  Darum ist es kompliziert, den
3582 Wert für einige Objekte richtig anzupassen.  Die Einheiten
3583 sind Halbe der vertikalen Ausdehnung des Objektes, welche
3584 normalerweise recht klein ist, sodass ziemlich große Werte
3585 erforderlich sein können.  Der Wert @w{@code{-1}} richtet die
3586 untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
3587 aus, der Wert @code{0} richtet die Mitte des Objekts am
3588 Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
3589 richtet die Oberkante des Objektes am Referenzpunkt des
3590 Ursprungsobjektes aus.  Die Symbole @code{DOWN}, @code{CENTER}
3591 und @code{UP} können anstelle von @w{@code{-1}}, @code{0}
3592 und @code{1} benutzt werden.
3593
3594 @emph{Automatische Ausrichtung in beide Richtungen}
3595
3596 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt
3597 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3598 werden.
3599
3600 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3601 ausrichtet, dass sie nah am Notenkopf bleibt.
3602
3603 @lilypond[quote,verbatim,relative=2]
3604 a
3605 -\tweak #'self-alignment-X #0.5  % move horizontally left
3606 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3607 -\tweak #'self-alignment-Y #-1  % move vertically up
3608 -3  % third finger
3609 @end lilypond
3610
3611
3612
3613
3614 @node Benutzung des break-alignable-interface
3615 @unnumberedsubsubsec Benutzung des @code{break-alignable-interface}
3616 @translationof Using the break-alignable-interface
3617
3618 @cindex Ausrichtung an Objekten
3619
3620 @funindex break-align-symbols
3621
3622 Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich
3623 Taktstriche) ausgerichtet werden.  Zu diesen Objekten gehören
3624 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
3625 @code{staff-bar}, @code{left-edge}, @code{key-cancellation},
3626 @code{key-signature} und @code{time-signature}.
3627
3628 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3629 über dem Objekt zentriert:
3630
3631 @lilypond[verbatim,quote,relative=1]
3632 % The RehearsalMark will be centered above the Clef
3633 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3634 \key a \major
3635 \clef treble
3636 \mark "↓"
3637 e1
3638 % The RehearsalMark will be centered above the TimeSignature
3639 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3640 \key a \major
3641 \clef treble
3642 \time 3/4
3643 \mark "↓"
3644 e2.
3645 % The rehearsal mark will be centered above the Breath Mark
3646 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3647 \key a \major
3648 \clef treble
3649 \time 4/4
3650 e1
3651 \breathe
3652 \mark "↓"
3653 @end lilypond
3654
3655 Eine Liste von möglichen Objekten zur Ausrichtung kann definiert
3656 werden.  Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar
3657 ist (etwa durch Einstellung von @code{break-visibility} oder die
3658 expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen),
3659 werden Übungszeichen und Taktzahlen an dem ersten Objekt in der
3660 Liste ausgerichtet, dass sichtbar ist.  Wenn keine Objekte in der
3661 Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet.
3662 Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle
3663 ausgerichtet, an der sich der Taktstrich befinden würde.
3664
3665 @lilypond[verbatim,quote,relative=1]
3666 % The RehearsalMark will be centered above the Key Signature
3667 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3668 \key a \major
3669 \clef treble
3670 \mark "↓"
3671 e1
3672 % The RehearsalMark will be centered above the Clef
3673 \set Staff.explicitKeySignatureVisibility = #all-invisible
3674 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3675 \key a \major
3676 \clef bass
3677 \mark "↓"
3678 gis,,1
3679 % The rehearsal mark will be centered above the Bar Line
3680 \set Staff.explicitKeySignatureVisibility = #all-invisible
3681 \set Staff.explicitClefVisibility = #all-invisible
3682 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3683 \key a \major
3684 \clef treble
3685 \mark "↓"
3686 e''1
3687
3688 @end lilypond
3689
3690 Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann
3691 verändert werden, wie das nächste Beispiel zeigt.  In einer Partitur
3692 mit vielen Systemen würde man diese Einstellung für alle Systeme
3693 vornehmen.
3694
3695 @lilypond[verbatim,quote,relative=1]
3696 % The RehearsalMark will be centered above the KeySignature
3697 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3698 \key a \major
3699 \clef treble
3700 \time 4/4
3701 \mark "↓"
3702 e1
3703 % The RehearsalMark will be aligned with the left edge of the KeySignature
3704 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3705 \mark "↓"
3706 \key a \major
3707 e1
3708 % The RehearsalMark will be aligned with the right edge of the KeySignature
3709 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3710 \key a \major
3711 \mark "↓"
3712 e1
3713 @end lilypond
3714
3715 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3716 verschoben werden.  Die Einheiten sind in Notenlinienzwischenräumen:
3717
3718 @lilypond[verbatim,quote,relative=1]
3719 % The RehearsalMark will be aligned with the left edge of the KeySignature
3720 % and then shifted right by 3.5 staff-spaces
3721 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3722 \once \override Score.KeySignature #'break-align-anchor = #3.5
3723 \key a \major
3724 \mark "↓"
3725 e1
3726 % The RehearsalMark will be aligned with the left edge of the KeySignature
3727 % and then shifted left by 2 staff-spaces
3728 \once \override Score.KeySignature #'break-align-anchor = #-2
3729 \key a \major
3730 \mark "↓"
3731 e1
3732 @end lilypond
3733
3734
3735
3736 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
3737 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
3738 @translationof Vertical grouping of grobs
3739
3740 Die graphischen Objekte @code{VerticalAlignment} und
3741 @code{VerticalAxisGroup} funktionieren zusammen.
3742 @code{VerticalAxisGroup} gruppiert unterschiedliche Objekte
3743 wie Notensysteme, Gesangstext usw. zusammen.
3744 @code{VerticalAlignment} richtet die unterschiedlichen
3745 Objektgruppen dann aneinander aus.  Es gibt normalerweise
3746 nur ein @code{VerticalAlignment} in einer Partitur, aber
3747 jedes Notensystem, Gesangstext usw. hat eine eigene
3748 @code{VerticalAxisGroup}.
3749
3750
3751 @node stencils verändern
3752 @subsection stencils verändern
3753 @translationof Modifying stencils
3754
3755 Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft,
3756 die ein Teil von @code{grob-interface} ist.  Diese Eigenschaft
3757 ist normalerweise als eine Funktion definiert, die auf das jeweilige
3758 Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild
3759 erscheint.  Beispielsweise die Standardeinstellung für die
3760 @code{stencil}-Eigenschaft von @code{MultiMeasureRest}
3761 (Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}.
3762
3763 Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man
3764 die @code{stencil}-Eigenschaft verändert, sodass sie auf eine
3765 andere, speziell geschriebene Prozedur verweist.  Das erfordert
3766 einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt
3767 einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse
3768 erzielen kann.
3769
3770 Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die
3771 Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print}
3772 und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen,
3773 in welcher dann die Textbeschriftung definiert wird, mit der
3774 das entsprechende Symbol dargestellt wird.  Aufgrund der
3775 Flexibilität der Textbeschriftung ist hier sehr viel möglich.
3776 Siehe zu Details insbesondere
3777 @ref{Graphische Notation innerhalb einer Textbeschriftung}.
3778
3779 Das folgende Beispiel zeigt diese Methode, indem das Symbol
3780 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
3781 wird.
3782
3783 @lilypond[verbatim,quote]
3784 XinO = {
3785   \once \override NoteHead  #'stencil = #ly:text-interface::print
3786   \once \override NoteHead #'text = \markup {
3787     \combine
3788       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3789       \musicglyph #"noteheads.s2cross"
3790   }
3791 }
3792 \relative c'' {
3793   a a \XinO a a
3794 }
3795 @end lilypond
3796
3797 Alle Schriftzeichen in der feta-Schriftart können
3798 mit dem @code{\musicglyph}-Befehl erreicht werden.
3799 Siehe auch @ref{Die Feta-Schriftart}.
3800
3801 @seealso
3802 Notationsreferenz:
3803 @ref{Graphische Notation innerhalb einer Textbeschriftung},
3804 @ref{Text formatieren},
3805 @ref{Textbeschriftungsbefehle},
3806 @ref{Die Feta-Schriftart}.
3807
3808
3809
3810 @node Formen verändern
3811 @subsection Formen verändern
3812 @translationof Modifying shapes
3813
3814 @menu
3815 * Bögen verändern::
3816 @end menu
3817
3818 @node Bögen verändern
3819 @unnumberedsubsubsec Bögen verändern
3820 @translationof Modifying ties and slurs
3821
3822 @cindex Bögen, verändern
3823 @cindex Bindebögen, verändern
3824 @cindex Legatobögen, verändern
3825 @cindex Bézier-Kurven
3826 @cindex Kontrollpunkte, Bézier-Kurven
3827
3828 Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven
3829 dritter Ordnung gezeichnet.  Wenn die Form eines automatischen
3830 Bogens nicht optimal ist, kann sie manuell verändert werdne,
3831 indem man die vier erforderlichen Kontrollpunkte angibt.
3832
3833 Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven
3834 bezeichnet) werden durch vier Kontrollpunkte definiert.  Der
3835 erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve
3836 an.  Die zwei Punkte dazwischen werden benutzt, um die Form
3837 der Kurve zu bestimmen.  Im Internet gibt es Animationen,
3838 die illustrieren, wie eine derartige Kurve gezeichnet wird,
3839 aber die folgende Beschreibung kann hilfreich sein.  Die
3840 Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten,
3841 wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt
3842 zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin
3843 krümmt.  Die Form der Kurve wird vollständig von den vier
3844 Punkten definiert.
3845
3846 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
3847 erscheint, und wo auch @code{\tieDown} das Problem nicht
3848 lösen würde.
3849
3850 @lilypond[verbatim,quote,relative=1]
3851 <<
3852   { e1~ e }
3853 \\
3854   { r4 <g c,> <g c,> <g c,> }
3855 >>
3856 @end lilypond
3857
3858 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
3859 Kontrollpunkte manuell zu verändern:
3860
3861 Die Koordinaten von Bézierkontrollpunkten werden in
3862 Notenlinienzwischenräumen angegeben.  Die X-Achse
3863 ist relativ zum Referenzpunkt der Note, an die der Bogen
3864 angefügt wird, und die Y-Achse relativ zur Mittellinie
3865 des Notensystems.  Die Koordinaten werden als eine Liste
3866 von vier Paaren an realen Dezimalzahlen eingegeben.  Eine
3867 Möglichkeit ist es, die Koordinaten der zwei Endpunkte
3868 zu schätzen und dann die zwei Zwischenpunkte zu erraten.
3869 Die optimalen Werte können nur durch Ausprobieren gefunden
3870 werden.
3871
3872 Es lohnt sich daran zu denken, dass eine symmetrische Kurve
3873 symmetrische Kontrollpunkte benötigt, und dass Bézierkurven
3874 die nützliche Eigenschaft haben, dass eine Transformation
3875 der Kurve wie eine Übersetzung, Drehung oder Skalierung
3876 der Kurve erreicht werden kann, indem man die gleiche
3877 Skalierung auf die Kontrollpunkte anwendet.
3878
3879 In dem obigen Beispiel geben folgende Werte einen
3880 zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt
3881 vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt
3882 wird.
3883
3884 @lilypond[verbatim,quote,relative=1]
3885 <<
3886   {
3887   \once \override Tie
3888     #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3889   e1~ e1
3890   }
3891 \\
3892   { r4 <g c,> <g c,> <g c,>  }
3893 >>
3894 @end lilypond
3895
3896 @knownissues
3897
3898 Es ist nicht möglich, die Form von Bögen anhand ihrer
3899 @code{control-points}-Eigenschaft zu verändern, wenn
3900 mehrere Binde- oder Legatobögen zum gleichen musikalischen Moment
3901 auftreten, nicht einmal mit dem @code{\tweak}-Befehl.  Die Eigenschaft
3902 @code{tie-configuration} von @code{TieColumn} kann jedoch verändert
3903 werden, sodass Startlinie und Richtung wie benötigt platziert werden.
3904
3905 @seealso
3906 Referenz der Interna:
3907 @rinternals{TieColumn}.
3908
3909
3910 @cindex Scheme, reine Container
3911 @cindex Scheme, unreine Container
3912 @cindex reine Container, Scheme
3913 @cindex unreine Container, Scheme
3914 @cindex horizontale Platzierung, verändern
3915
3916 @node Reine und unreine Container
3917 @subsection Reine und unreine Container
3918 @translationof Unpure-pure containers
3919
3920 Unreine und reine Container (engl. unpure/pure containers) sind
3921 nützlich, wenn man die Berechnungen der Platzierungen für die
3922 @emph{Y-Achse} verändern will, insbesondere für @code{Y-offset}
3923 und @code{Y-extent}.  Mit diesen Containern kann die Veränderung
3924 durch eine Scheme-Funktion anstelle einer direkten Zahl oder eines
3925 Paares vorgenommen werden.
3926
3927 Für bestimmte Grobs basiert die Eigenschaft @code{Y-extent} auf
3928 der @code{stencil}-Eigenschaft.  Wenn diese mit @code{\override}
3929 verändert werden soll, braucht man eine zusätzliche Veränderung
3930 von @code{Y-extent} mit einem unreinen-reinen Container.  Wenn eine
3931 Funktion @code{Y-offset} und/oder @code{Y-extent} verändert, wird
3932 angenommen, dass dadurch Zeilenumbruchsberechnungen zu früh während
3933 der Kompilation aufgerufen werden.  Die Funktion wird also überhaupt
3934 nicht ausgewertet (und gibt also normalerweise den Wert @samp{0} oder
3935 @samp{'(0 . 0)} zurück), wodurch sich Zusammenstöße ergeben können.
3936 Eine @qq{saubere} Funktion beeinflusst keine Eigeschaften, Objekte
3937 oder Grob-Suizide, weshalb ihre Werte, die sich auf @code{Y-axis}
3938 beziehen, richtig berechnet werden.
3939
3940 Es gibt zuzeit etwa 30 Funktionen, die schon als @qq{sauber} erachtet
3941 werden, und unsaubere-saubere Container sind eine Möglichkeit, auch
3942 Funktionen, die sich nicht auf dieser Liste befinden, als @qq{sauber}
3943 zu markieren.  Die @qq{saubere} Funktion wird ausgewertet, @emph{bevor}
3944 Seitenumbruch stattfindet, sodass die horizontale Platzierung
3945 @qq{rechtzeitig} stattfindet.  Die @qq{unsaubere} Funktion wird dann
3946 @emph{nach} dem Seitenumbruch ausgewertet.
3947
3948 @warning{Da es schwierig ist, immer sicher zu sein, welche Funktionen sich
3949 auf dieser Liste befinden, wird empfohlen, dass die selbsterstellten
3950 @qq{sauberen} Funktionen nicht die Grobs @code{Beam} oder @code{VerticalAlignment}
3951 einsetzen.}
3952
3953 Ein unsauberer-sauberer Container wird wie folgend erstellt:
3954
3955 @code{(ly:make-unpure-pure-container f0 f1)}
3956
3957 wobei @code{f0} eine Fuktion ist, die @var{n} Arguments braucht
3958 (@var{n >= 1}) und deren erstes Argument immer der Grob sein muss.
3959 Das ist die Funktion, die das eigentliche Resultat ausgibt.  @var{f1}
3960 ist die Funktion, die als @qq{sauber} bezeichnet wird, und braucht @var{n + 2}
3961 Argumente.  Wiederum muss das erste Argument immer der Grob sein, aber
3962 das erste und zweite Argument sind @qq{Beginn-} und @qq{Endeargumente}.
3963
3964
3965
3966 @var{start} (Beginn) und @var{end} (Ende) sind absichtlich
3967 nur Platzhalter, die nur für die Strecker gelten (etwa @code{Hairpin} oder
3968 @code{Beam}), die unterschiedliche Höhenberechnungen je nach beginnender und
3969 endender Note ausgeben können.
3970
3971 Der Rest sind andere Argumente für die erste Funktion (es können auch
3972 Null sein, wenn @var{n = 1}).
3973
3974 Die Ergebnisse der zweiten Funktion werden als Näherungswert des benötigten
3975 Wertes benutzt, welche dann von der ersten Funktion eingesetzt wird,
3976 um den wirklichen Wert auszugeben, mit dem dann sehr viel später im
3977 Layoutprozess die Platzierung justiert werden soll.
3978
3979 @lilypond[verbatim,quote,ragged-right]
3980 #(define (square-line-circle-space grob)
3981 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
3982       (notename (ly:pitch-notename pitch)))
3983  (if (= 0 (modulo notename 2))
3984      (make-circle-stencil 0.5 0.0 #t)
3985      (make-filled-box-stencil '(0 . 1.0)
3986                               '(-0.5 . 0.5)))))
3987
3988 squareLineCircleSpace = {
3989   \override NoteHead #'stencil = #square-line-circle-space
3990 }
3991
3992 smartSquareLineCircleSpace = {
3993   \squareLineCircleSpace
3994   \override NoteHead #'Y-extent =
3995    #(ly:make-unpure-pure-container
3996       ly:grob::stencil-height
3997       (lambda (grob start end) (ly:grob::stencil-height grob)))
3998 }
3999
4000 \new Voice \with { \remove "Stem_engraver" }
4001 \relative c'' {
4002   \squareLineCircleSpace
4003   cis4 ces cisis c
4004   \smartSquareLineCircleSpace
4005   cis4 ces cisis c
4006 }
4007 @end lilypond
4008
4009 Im ersten Takt weiß die Layoutmaschine ohne den unsauberen-sauberen
4010 Container nicht die Breite des Notenkopfes und lässt ihn deshalb mit
4011 den Versetzungszeichen zusammenstoßen.  Im zweiten Takt, mit
4012 unreinen-reinen Containern, weiß die Layoutmaschine die Breite
4013 des Notenkopfes und vermeidet den Zusammenstoßf, indem die Zeile
4014 entsprechend verlängert wird.
4015
4016 Normalerweise können für eine einfache Berechnungen fast identische
4017 Funktionen für den @qq{unsauberen} und @qq{sauberen} Teil benutzt
4018 werden, indem nur die Zahl der Argumente und die Reichweite der
4019 Funktion verändert wird.
4020
4021 @warning{Wenn eine Funktion als @qq{sauber} bezeichnet ist und das aber
4022 nicht ist, können unerwartete Ergebnisse auftreten.}
4023
4024
4025 @node Musikfunktionen benutzen
4026 @section Musikfunktionen benutzen
4027 @translationof Using music functions
4028
4029 @c TODO -- add @seealso, etc. to these subsections
4030
4031 Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken
4032 wiederverwendet werden sollen, bietet es sich oft an, den
4033 @qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu
4034 erstellen.  In diesem Abschnitt sollen nur @emph{Ersetzungen}
4035 erklärt werden, wo es darum geht, eine Variable mit einem Stück
4036 LilyPond-Code zu ersetzen.  Andere komplexere Funktionen werden
4037 beschrieben in @rextend{Musikalische Funktionen}.
4038
4039 @menu
4040 * Syntax der Ersetzungsfunktion::
4041 * Beispiele der Ersetzungsfunktionen::
4042 @end menu
4043
4044 @node Syntax der Ersetzungsfunktion
4045 @subsection Syntax der Ersetzungsfunktion
4046 @translationof Substitution function syntax
4047
4048 Es ist einfach eine Funktion zu erstellen, die eine Variable
4049 in LilyPond-Code umwandelt.  Die generelle Form dieser
4050 Funktionen ist:
4051
4052 @example
4053 Funktion =
4054 #(define-music-function
4055      (parser location @var{Arg1} @var{Arg2} @dots{})
4056      (@var{Typ1?} @var{Typ2?} @dots{})
4057    #@{
4058      @var{@dots{}Noten@dots{}}
4059    #@})
4060 @end example
4061
4062 @noindent
4063 wobei
4064
4065 @multitable @columnfractions .33 .66
4066 @item @code{@var{ArgN}}
4067 @tab @var{n}tes Argument
4068
4069 @item @code{@var{TypN?}}
4070 @tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}}
4071 den Wert @code{#t} ausgibt.
4072
4073 @item @code{@var{@dots{}Noten@dots{}}}
4074 @tab normale LilyPond-Eingabe, wobei @code{$} (wenn nur LilyPond-Konstruktionen
4075 erlaubt sind) oder @code{#} (um es als Scheme-Wert oder Argument einer
4076 musikalischen Funktionen einzusetzen) benutzt wird, um
4077 Argumente zu referenzieren (etwa @samp{$Arg1}).
4078 @end multitable
4079
4080 Die @code{parser} und @code{location}-Argumente sind zwingend und
4081 werden in einigen fortgeschrittenen Situationen benutzt, wie sie
4082 im @qq{Erweitern}-Handbuch beschrieben werden (siehe
4083 @rextend{Musikalische Funktionen}).  In Ersetzungsfunktionen
4084 gehen Sie einfach sicher, dass sie die beiden Wörter auch mit
4085 aufnehmen.
4086
4087 Die Liste der Typenprädikate ist auch notwendig.  Einige der
4088 häufigsten Typenprädikate, die in musikalischen Funktionen
4089 benutzt werden, sind:
4090
4091 @example
4092 boolean?
4093 cheap-list?  @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
4094 ly:duration?
4095 ly:music?
4096 ly:pitch?
4097 markup?
4098 number?
4099 pair?
4100 string?
4101 symbol?
4102 @end example
4103
4104 @noindent
4105 Eine Liste aller Typprädikate findet sich unter
4106 @ref{Vordefinierte Typprädikate}.  Eigene Typprädikate
4107 sind auch erlaubt.
4108
4109
4110 @seealso
4111
4112 Notationsreferenz:
4113 @ref{Vordefinierte Typprädikate}.
4114
4115 Erweitern:
4116 @rextend{Musikalische Funktionen}.
4117
4118 Installierte Dateien:
4119 @file{lily/music-scheme.cc},
4120 @file{scm/c++.scm},
4121 @file{scm/lily.scm}.
4122
4123
4124 @node Beispiele der Ersetzungsfunktionen
4125 @subsection Beispiele der Ersetzungsfunktionen
4126 @translationof Substitution function examples
4127
4128 Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen.
4129 Sie sind nicht vollständig, sondern sollen einige der
4130 Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.
4131
4132 Im ersten Beispiel wird eine Funktione definiert, die
4133 das Verschieben von @code{TextScript} erleichtert:
4134
4135 @lilypond[quote,verbatim,ragged-right]
4136 padText =
4137 #(define-music-function
4138      (parser location padding)
4139      (number?)
4140    #{
4141      \once \override TextScript #'padding = #padding
4142    #})
4143
4144 \relative c''' {
4145   c4^"piu mosso" b a b
4146   \padText #1.8
4147   c4^"piu mosso" d e f
4148   \padText #2.6
4149   c4^"piu mosso" fis a g
4150 }
4151 @end lilypond
4152
4153 Neben Zahlen können auch musikalische Ausdrücke wie Noten
4154 als Argumente für musikalische Funktionen eingesetzt werden:
4155
4156 @c TODO: use a better example (the music argument is redundant).
4157
4158 @lilypond[quote,verbatim,ragged-right]
4159 custosNote =
4160 #(define-music-function
4161      (parser location note)
4162      (ly:music?)
4163    #{
4164      \once \override Voice.NoteHead #'stencil =
4165        #ly:text-interface::print
4166      \once \override Voice.NoteHead #'text =
4167        \markup \musicglyph #"custodes.mensural.u0"
4168      \once \override Voice.Stem #'stencil = ##f
4169      $note
4170    #})
4171
4172 \relative c' { c4 d e f \custosNote g }
4173 @end lilypond
4174
4175 Ersetzungsfunktionen mit mehrfachen Argumenten können definiert
4176 werden:
4177
4178 @lilypond[quote,verbatim,ragged-right]
4179 tempoPadded =
4180 #(define-music-function
4181      (parser location padding tempotext)
4182      (number? string?)
4183    #{
4184      \once \override Score.MetronomeMark #'padding = #padding
4185      \tempo \markup { \bold #tempotext }
4186    #})
4187
4188 \relative c'' {
4189   \tempo \markup { "Low tempo" }
4190   c4 d e f g1
4191   \tempoPadded #4.0 #"High tempo"
4192   g4 f e d c1
4193 }
4194 @end lilypond
4195
4196