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