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