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