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