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