1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: 7b70644b95f383b4281e9ffa146d315d2ada11d3
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @node Standardeinstellungen verändern
13 @chapter Standardeinstellungen verändern
14 @translationof Changing defaults
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
28 @cindex Referenz der Interna
29 @cindex Internals Reference
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
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.
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}).
49 * Interpretationskontexte::
50 * Die Referenz der Programminterna erklärt::
51 * Eignschaften verändern::
52 * Nützliche Konzepte und Eigenschaften::
53 * Fortgeschrittene Optimierungen::
57 @node Interpretationskontexte
58 @section Interpretationskontexte
59 @translationof Interpretation contexts
61 Dieser Abschnitt erklärt, was Kontexte sind und wie man sie
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::
77 @rlearning{Kontexte und Engraver}.
80 @file{ly/@/engraver@/-init@/.ly},
81 @file{ly/@/performer@/-init@/.ly}.
84 @rlsr{Contexts and engravers}.
87 @rinternals{Contexts},
88 @rinternals{Engravers and Performers}.
91 @node Was sind Kontexte?
92 @subsection Was sind Kontexte?
93 @translationof Contexts explained
95 Kontexte sind hierarchisch geordnet:
98 * Score - der Vater aller Kontexte::
99 * Oberste Kontexte -- Container für Systeme::
100 * Mittlere Kontexte -- Systeme::
101 * Unterste Kontexte -- Stimmen::
104 @node Score - der Vater aller Kontexte
105 @unnumberedsubsubsec Score - der Vater aller Kontexte
106 @translationof Score - the master of all contexts
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.
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.
119 @node Oberste Kontexte -- Container für Systeme
120 @unnumberedsubsubsec Oberste Kontexte -- Container für Systeme
121 @translationof Top-level contexts - staff containers
123 @c Remark for German translation
124 Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier
125 als Systemgruppen bezeichnet (engl. staffgroup).
127 @strong{@emph{StaffGroup}}
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.
135 @strong{@emph{ChoirStaff}}
137 Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen
138 Systeme nicht vertikal miteinander verbunden sind.
140 @strong{@emph{GrandStaff}}
142 Gruppiert Systeme mit einer geschweiften Klammer zur Linken. Die
143 Taktlinien der enthaltenen Systeme werden vertikal verbunden.
145 @strong{@emph{PianoStaff}}
147 Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für
148 Instrumentenbezeichnungen zu Beginn jeder Systemgruppe.
151 @node Mittlere Kontexte -- Systeme
152 @unnumberedsubsubsec Mittlere Kontexte -- Systeme
153 @translationof Intermediate-level contexts - staves
155 Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme
158 @strong{@emph{Staff}}
160 Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen.
161 Er kann @code{Voice}-Kontexte enthalten.
163 @strong{@emph{RhythmicStaff}}
165 Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen
166 werden ignoriert und die Noten auf einer einzigen Linie ausgegeben.
168 @strong{@emph{TabStaff}}
170 Ein Kontext um Tabulaturen zu erstellen. Die Standardeinstellung ist
171 eine Gitarrentabulatur mit sechs Notenlinien.
173 @strong{@emph{DrumStaff}}
175 Ein Kontext zur Notation von Perkussion. Er kann
176 @code{DrumVoice}-Kontexte enthalten.
178 @strong{@emph{VaticanaStaff}}
180 Entspricht @code{Staff}, aber eignet sich besondert zum Notensatz des
181 Gregorianischen Chorals.
183 @strong{@emph{MensuralStaff}}
185 Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in
186 der Mensuralnotation.
189 @node Unterste Kontexte -- Stimmen
190 @unnumberedsubsubsec Unterste Kontexte -- Stimmen
191 @translationof Bottom-level contexts - voices
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.
197 @strong{@emph{Voice}}
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.
204 @strong{@emph{VaticanaVoice}}
206 Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz
207 des Gregorianischen Chorals.
209 @strong{@emph{MensuralVoice}}
211 Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation
214 @strong{@emph{Lyrics}}
216 Entspricht einer Stimme mit Gesangstext. Kümmert sich um den Satz
217 des Gesangstextes auf einer Zeile.
219 @strong{@emph{DrumVoice}}
221 Der Stimmenkontext in einem Perkussionssystem.
223 @strong{@emph{FiguredBass}}
225 Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte)
226 gesetzt werden, die in der @code{\figuremode}-Umgebung
229 @strong{@emph{TabVoice}}
231 Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext)
232 benutzt. Er wird normalerweise implizit erstellt.
234 @strong{@emph{CueVoice}}
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.
242 @strong{@emph{ChordNames}}
244 Ausgabe von Akkordsymbolen.
247 @node Kontexte erstellen
248 @subsection Kontexte erstellen
249 @translationof Creating contexts
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:
261 @cindex neue Kontexte
262 @cindex Kontexte erstellen
263 @cindex eigene Kontexte erstellen
268 Der einfachste Befehl ist @code{\new}. Er wird zusammen mit dem
269 Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa
272 \new @var{Kontext} @var{musik. Ausdruck}
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
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.
285 @lilypond[quote,verbatim,relative=2,ragged-right,fragment]
292 Der @code{\new}-Befehl kann den Kontext auch benennen:
295 \new @var{Kontext} = @var{ID} @var{musik. Ausdruck}
298 Dieser vom Benutzer definierte Name wird aber auch nur wirklich
299 benutzt, wenn nicht vorher schon der gleiche Name definiert worden
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:
308 \context @var{Kontext} = @var{ID} @var{musik. Ausdruck}
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
320 \context Voice = "@b{Tenor}" @var{musik. Ausdruck}
324 sodass der Text an den Noten ausgerichtet werden kann:
327 \new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext}
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:
338 Artik = @{ s4-. s4-> @}
342 Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext
347 \new Staff \context Voice = "A" \Noten
348 \context Voice = "A" \Artik
352 @lilypond[quote,ragged-right]
356 \new Staff \context Voice = "A" \music
357 \context Voice = "A" \arts
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.
367 Der dritte Befehl, um Kontexe zu erstellen, ist:
370 \context @var{Kontext} @var{musik. Ausdruck}
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.
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:
387 \applyOutput #'@var{Kontext} #@var{Funktion} % auf Voice anwenden
390 Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
391 interpretiert wird, muss folgende Form benutzt werden:
394 \applyOutput #'Score #@var{Funktion}
395 \applyOutput #'Staff #@var{Funktion}
402 @node Kontexte am Leben halten
403 @subsection Kontexte am Leben halten
404 @translationof Keeping contexts alive
406 @cindex Kontexte, am Leben erhalten
407 @cindex Kontexte, Lebensdauer
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.
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
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.
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.
444 @lilypond[quote,verbatim]
445 musicA = \relative c'' { d4 d d d }
446 musicB = \relative c'' { g4 g g g }
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
455 \context Voice = "A" {
459 \context Voice = "B" {
463 \context Voice = "A" { \musicA }
464 \context Voice = "B" { \musicB }
465 \context Voice = "A" { \musicA }
476 @cindex Gesangstext, an einer sporadischen Melodie ausrichten
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.
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 }
489 \new Staff = "music" {
491 \new Voice = "melody" {
493 s1*4 % Keep Voice "melody" alive for 4 bars
496 \new Voice = "accompaniment" {
501 \context Voice = "melody" { \melody }
502 \context Voice = "accompaniment" { \accompaniment }
504 \context Voice = "accompaniment" { \accompaniment }
506 \context Voice = "melody" { \melody }
507 \context Voice = "accompaniment" { \accompaniment }
512 \new Lyrics \with { alignAboveContext = #"music" }
513 \lyricsto "melody" { \words }
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:
522 @lilypond[quote,verbatim]
523 melody = \relative c'' {
529 accompaniment = \relative c' {
535 words = \lyricmode { These words fol -- low the mel -- o -- dy }
539 \new Staff = "music" {
541 \new Voice = "melody" {
545 \new Voice = "accompaniment" {
551 \new Lyrics \with { alignAboveContext = #"music" }
552 \lyricsto "melody" { \words }
559 @node Umgebungs-Plugins verändern
560 @subsection Umgebungs-Plugins verändern
561 @translationof Modifying context plug-ins
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
571 Eine vollständige Erklärung jedes Plugins findet sich in
573 @rinternals{Engravers and Performers}.
576 Refernz der Interna: @expansion{} Translation @expansion{} Engravers.
578 Alle Kontexte sind erklärt in
580 @rinternals{Contexts}
583 Referenz der Interna: @expansion{} Translation @expansion{} Context.
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:
594 \new @var{context} \with @{
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:
614 @lilypond[quote,relative=1,verbatim,fragment]
620 \remove "Time_signature_engraver"
621 \remove "Clef_engraver"
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}.
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:
644 @cindex polymetrische Partitur
645 @cindex Taktarten, mehrere in Partitur
646 @cindex Taktarten, unterschiedliche per System
648 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
650 \remove "Timing_translator"
651 \remove "Default_bar_line_engraver"
654 \consists "Timing_translator"
655 \consists "Default_bar_line_engraver"
661 \consists "Timing_translator"
662 \consists "Default_bar_line_engraver"
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.
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.
688 @node Die Standardeinstellungen von Kontexten ändern
689 @subsection Die Standardeinstellungen von Kontexten ändern
690 @translationof Changing context default settings
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.
700 Auch muss der @code{\set}-Befehl und der Kontext weggelassen
701 werden, wenn die Einstellungen für den Kontext auf diese Weise
704 @lilypond[quote,verbatim]
707 a4^"Really small, thicker stems, no time signature" a a a
714 \override Stem #'thickness = #4.0
715 \remove "Time_signature_engraver"
721 Hier zeigt der @code{\Staff}-Befehl an, dass die folgenden Einstellungen
722 sich auf alle Systeme in dieser Partitur erstrecken sollen.
724 Veränderungen können auch für den @code{Score}- oder alle
725 @code{Voice}-Kontexte auf gleiche Weise vorgenommen werden.
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
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:
742 \RemoveEmptyStaffContext
744 \override Stem #'thickness = #4.0
750 @node Neue Kontexte definieren
751 @subsection Neue Kontexte definieren
752 @translationof Defining new contexts
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.
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.
766 @lilypond[quote,ragged-right]
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
780 \accepts "ImproVoice"
784 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
785 c4 c^"ausziehen" c_"während des Spiels :)" c }
790 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
791 innerhalb der @code{\layout}-Umgebung definiert:
801 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
802 im vorigen Beispiel eingesetzt werden.
804 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
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:
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:
824 \consists Note_heads_engraver
825 \consists Text_engraver
829 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
832 \consists Pitch_squash_engraver
833 squashedPosition = #0
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
841 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
844 \override NoteHead #'style = #'slash
845 \override Stem #'transparent = ##t
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:
853 \type "Engraver_group"
856 Alles zusammen haben wir folgende Einstellungen:
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
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:
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.
894 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
905 \accepts "ImproVoice"
910 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
919 c c_"während des Spielens :)"
926 @node Kontexte aneinander ausrichten
927 @subsection Kontexte aneinander ausrichten
928 @translationof Aligning contexts
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:
936 @funindex alignAboveContext
937 @funindex alignBelowContext
939 @lilypond[quote,ragged-right]
942 \relative c' \new Staff = "main" {
945 \new Staff \with { alignAboveContext = #"main" } \ossia
952 @cindex verschachtelte Kontexte
953 @cindex Kontexte, verschachtelt
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:
971 @lilypond[verbatim,quote,relative=1]
974 \new Staff { e4 d c2 }
975 \addlyrics { Three blind mice }
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:
988 @lilypond[verbatim,quote,relative=1]
989 \new PianoStaff \with { \accepts Lyrics }
991 \new Staff { e4 d c2 }
992 \addlyrics { Three blind mice }
1000 Das Gegenteil von @code{\accepts} ist @code{\denies}; es bedeutet,
1001 dass ein Kontext aus der @code{\accepts}-Liste gestrichen wird.
1004 @node Die Referenz der Programminterna erklärt
1005 @section Die Referenz der Programminterna erklärt
1006 @translationof Explaining the Internals Reference
1009 * Zurechtfinden in der Programmreferenz::
1010 * Layout-Schnittstellen::
1011 * Die Grob-Eigenschaften::
1012 * Benennungskonventionen::
1016 @node Zurechtfinden in der Programmreferenz
1017 @subsection Zurechtfinden in der Programmreferenz
1018 @translationof Navigating the program reference
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
1026 Folgende Aufgabe wird bearbeitet: Der Fingersatz aus dem Beispiel
1027 unten soll verändert werden:
1029 @lilypond[quote,fragment,relative=2,verbatim]
1035 In der Dokumentation über Fingersatz (
1036 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1039 @strong{Siehe auch:}
1041 Referez der Interna: @rinternals{Fingering}.
1045 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1046 Oben auf der Seite findet sich:
1049 Fingering objects are created by: @rinternals{Fingering_engraver} and
1050 @rinternals{New_fingering_engraver}.
1053 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1054 verfolgen, wie LilyPond intern arbeitet:
1058 @item @rinternals{Fingering}:
1059 @rinternals{Fingering} objects are created by:
1060 @rinternals{Fingering_engraver}
1062 @item @rinternals{Fingering_engraver}:
1063 Music types accepted: @rinternals{fingering-event}
1065 @item @rinternals{fingering-event}:
1066 Music event type @code{fingering-event} is in Music expressions named
1067 @rinternals{FingeringEvent}
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}.
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.
1082 Die Referenz der Interna kann auch wie ein normales Dokument
1083 durchsucht werden. Sie enthält Kapitel über
1085 @rinternals{Music definitions},
1088 @code{Music definitions},
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.
1095 @node Layout-Schnittstellen
1096 @subsection Layout-Schnittstellen
1097 @translationof Layout interfaces
1099 @cindex Layout-Schnittstelle
1100 @cindex Schnittstellt, Layout-
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}.
1113 Die Seite zu @code{Fingering} enthält Definitionen für das
1114 @code{Fingering}-Objekt. Auf der Seite steht etwa:
1117 @code{padding} (dimension, in staff space):
1123 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1124 0.5 Notenlinienabstände beträgt.
1126 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1127 als auch als Notationselement einnehmen. Das Fingersatzobjekt
1128 beispielsweise hat folgende Aspekte:
1132 Seine Größe is unabhängig von der horizontalen Platzaufteilung,
1133 anders als etwa bei Legatobögen.
1136 Es handelt sich um Text, normalerweise sehr kurz.
1139 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1140 anders als bei Legatobögen.
1143 Der Mittelpunkt des Symbols sollte horizontal mit dem
1144 Mittelpunkt des Notenkopfes ausgerichtet werden.
1147 Vertikal wird das Objekt neben die Note und das Notensystem
1151 Die vertikale Position wird auch mit anderen Textelementen
1156 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1157 (engl. interface), die auf der @rinternals{Fingering}-Seite
1158 unten aufgelistet sind:
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}.
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.
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}):
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
1196 text-script-interface
1198 side-position-interface
1199 self-alignment-interface
1200 item-interface))))))
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.
1209 @node Die Grob-Eigenschaften
1210 @subsection Die Grob-Eigenschaften
1211 @translationof Determining the grob property
1213 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1215 @lilypond[quote,fragment,relative=2,verbatim]
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:
1227 @code{side-position-interface}
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?)
1234 @cindex Verschiebung
1237 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1242 (dimension, in staff space)
1244 Add this much extra space between objects that are next to each other.
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:
1253 \once \override Voice.Fingering #'padding = #3
1256 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1257 Fingersatz notiert ist, erhält man folgendes:
1259 @lilypond[quote,relative=2,fragment,verbatim]
1260 \once \override Voice.Fingering #'padding = #3
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:
1271 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1275 @node Benennungskonventionen
1276 @subsection Benennungskonventionen
1277 @translationof Naming conventions
1279 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1280 folgen bestimmten Regeln:
1285 Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1288 Scheme-Funktionen: ly:plus-scheme-stil
1291 Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1294 Grob-Schnittstellen: scheme-stil
1297 backend-Eigenschaften: scheme-stil (aber X und Y)
1300 Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1303 Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1306 Engraver: Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1310 @node Eignschaften verändern
1311 @section Eignschaften verändern
1312 @translationof Modifying properties
1315 * Überblick über verändernde Eigenschaften::
1317 * Der override-Befehl::
1318 * Der tweak-Befehl::
1319 * set versus override::
1323 @node Überblick über verändernde Eigenschaften
1324 @subsection Überblick über verändernde Eigenschaften
1325 @translationof Overview of modifying properties
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.
1332 Die Syntax hierzu lautet:
1335 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
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
1352 \override Staff.Stem #'thickness = #4.0
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:
1362 @lilypond[quote,verbatim,relative=2,fragment]
1364 \override Staff.Stem #'thickness = #4.0
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.
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:
1380 @lilypond[quote,fragment,verbatim,relative=2]
1382 \once \override Stem #'thickness = #4.0
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
1393 @lilypond[quote,fragment,verbatim,relative=2]
1394 \override Slur #'thickness = #3.0
1396 \override Beam #'thickness = #0.6
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
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.
1412 \override Voice.Stem #'thickness = #4.0
1413 \revert Staff.Stem #'thickness
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:
1421 @c leave this as a long long
1423 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1430 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1435 Referenz der Interna:
1436 @rinternals{OverrideProperty},
1437 @rinternals{RevertProperty},
1438 @rinternals{PropertySet},
1439 @rinternals{Backend},
1440 @rinternals{All layout objects}.
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.
1452 @node Der set-Befehl
1453 @subsection Der @code{\set}-Befehl
1454 @translationof The set command
1456 @cindex Eigenschaften
1457 @cindex Verändern von Eigenschaften
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:
1467 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1470 Das kann beispielsweise so aussehen:
1472 @lilypond[quote,verbatim,relative=2,fragment]
1474 \set Score.skipBars = ##t
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}.
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:
1489 @lilypond[quote,verbatim,relative=2,fragment]
1491 \set autoBeaming = ##f
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
1507 @lilypond[quote,verbatim,relative=2,fragment]
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.
1523 Es gibt auch einen @code{\unset}-Befehl:
1526 \unset @var{Kontext}.@var{Eigenschaft}
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:
1536 \set Staff.autoBeaming = ##f
1540 bezieht sich das auch auf die in dem @code{Staff} enthaltenen Stimmen.
1544 \unset Voice.autoBeaming
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:
1554 \unset Staff.autoBeaming
1557 Genauso wie für @code{\set}, muss auch für @code{\unset} der unterste
1558 Kontext nicht angegeben werden, die zwei Befehle
1561 \set Voice.autoBeaming = ##t
1562 \set autoBeaming = ##t
1566 bedeuten also das Gleiche.
1571 Einstellungen, die nur einmal vorgenommen werden sollen, können
1572 mit @code{\once} notiert werden, etwa:
1574 @lilypond[quote,verbatim,relative=2,fragment]
1576 \once \set fontSize = #4.7
1582 Damit wirkt sich die Änderung der Schriftgröße nur auf die zweite
1583 Note aus und wird automatisch wieder rückgängig gemacht.
1585 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1586 findet sich in der Referenz der Interna, siehe
1589 @rinternals{Tunable context properties}.
1592 @qq{Translation @expansion{} Tunable context properties}.
1597 @node Der override-Befehl
1598 @subsection Der \override-Befehl
1599 @translationof The override command
1601 Befehle, die die Ausgabe grundlegend verändern, haben folgende
1605 \override Voice.Stem #'thickness = #3.0
1609 Um derartige Einstellungen vorzunehmen, müssen folgende Informationen
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}.
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
1624 \override Stem #'(details beamed-lengths) = #'(4 4 3)
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
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.
1649 @node Der tweak-Befehl
1650 @subsection Der @code{\tweak}-Befehl
1651 @translationof The tweak command
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
1663 @lilypond[relative=2,verbatim]
1668 \tweak #'duration-log #1
1671 -\tweak #'padding #8
1675 @cindex Akkord, eine Note verändern
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.
1683 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
1684 sich in @rlearning{Optimierungsmethoden}.
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.
1701 An einem Beispiel demonstriert: Das funktioniert:
1704 @lilypond[relative=2,verbatim,quote]
1705 <\tweak #'color #red c>4
1711 @lilypond[relative=2,verbatim,quote]
1712 \tweak #'color #red c4
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:
1721 @c TODO expand to include any further uses of \tweak
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
1729 @c TODO add examples of these
1732 @code{\tweak} kann eingesetzt werden, um ein einzelnes Element aus der Gruppe
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.
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:
1749 @lilypond[verbatim,quote,relative=1]
1750 c-\tweak #'thickness #5 ( d e f)
1753 Mehrere @code{\tweak}-Befehle können vor ein Notatioselement
1754 gesetzt werden und alle werden interpretiert:
1756 @lilypond[verbatim,quote,relative=1]
1758 -\tweak #'style #'dashed-line
1759 -\tweak #'dash-fraction #0.2
1760 -\tweak #'thickness #3
1761 -\tweak #'color #red
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.
1774 Handbuch zum Lernen:
1775 @rlearning{Optimierungsmethoden}.
1778 @ref{Musikalische Funktionen darstellen}.
1782 @cindex tweak-Befehl in einer Variable
1783 @cindex Variable, tweak-Befehl benutzen
1785 Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden.
1787 @cindex tweaks-Befehl in Gesangstext
1788 @cindex lyrics und tweak-Befehl
1789 @cindex Gesangstext und tweak-Befehl
1791 Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden.
1793 @cindex Kontrollpunkte und tweak
1794 @cindex tweak und Kontrollpunkte
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.
1801 @node set versus override
1802 @subsection @code{\set} versus @code{\override}
1803 @translationof set versus override
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.
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}
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.
1831 @code{\override} ist eigentlich eine Abkürzung:
1834 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1838 entspricht mehr oder weniger:
1840 @c leave this long line -gp
1842 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
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.
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.
1859 @node Nützliche Konzepte und Eigenschaften
1860 @section Nützliche Konzepte und Eigenschaften
1861 @translationof Useful concepts and properties
1865 * Richtung und Platzierung::
1866 * Reihenfolge des Kontextlayouts::
1867 * Abstände und Maße::
1868 * Eigenschaften des Staff-Symbols::
1870 * Sichtbarkeit von Objekten::
1872 * Drehen von Objekten::
1877 @subsection Eingabe-Modi
1878 @translationof Input modes
1880 Die Art, wie die Notation einer Eingabedatei interpretiert
1881 wird, hängt vom aktuellen Eingabemodus ab.
1883 @strong{Chord (Akkordmodus)}
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.
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}.
1896 @strong{Drum (Schlagzeugmodus)}
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}.
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}.
1908 @strong{Figure (Ziffernmodus)}
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'}.
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}.
1920 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
1922 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
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}.
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}).
1937 @strong{Lyrics (Gesangstextmodus)}
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}.
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.
1949 @strong{Markup (Textbeschriftungsmodus)}
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}.
1955 @c silly work-around for texinfo broken-ness
1956 @c (@strong{Note...} causes a spurious cross-reference in Info)
1957 @b{Note (Notenmodus)}
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.
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.
1970 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
1971 Strophen zu setzen, muss man den Notenmodus betreten:
1973 @lilypond[verbatim,relative=2,quote]
1976 \notemode{ \set stanza = \markup{ \dynamic f 1. } }
1980 \notemode{ \set stanza = \markup{ \dynamic p 2. } }
1986 @node Richtung und Platzierung
1987 @subsection Richtung und Platzierung
1988 @translationof Direction and placement
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.
1999 @strong{Richtungseinstellung von Artikulationszeichen}
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.
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
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{--}
2023 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2025 @lilypond[verbatim,quote,relative=2]
2033 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2035 Die Position oder Richtung vieler Layoutobjekte wird von der
2036 @code{direction}-Eigenschaft kontrolliert.
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
2050 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2053 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2054 Standardausrichtung}. Siehe auch
2055 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
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}.
2065 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2066 rückgängig gemacht werden:
2068 @lilypond[verbatim,quote,relative=2]
2078 @node Reihenfolge des Kontextlayouts
2079 @subsection Reihenfolge des Kontextlayouts
2080 @translationof Context layout order
2082 @cindex Kontexte, Reihenfolge
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.
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.
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}.
2105 @rlearning{An extra staff appears}.
2108 @node Abstände und Maße
2109 @subsection Abstände und Maße
2110 @translationof Distances and measurements
2112 @cindex Abstände, absolut
2113 @cindex Abstände, skaliert
2120 In LilyPond gibt es zwei Arten von Abständen: absolute und
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}.
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}.
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}.
2170 Handbuch zum Lernen:
2171 @rlearning{Länge und Dicke von Objekten}.
2174 @ref{Seitenformatierung},
2175 @ref{Die Notensystemgröße einstellen}.
2178 @node Eigenschaften des Staff-Symbols
2179 @subsection Eigenschaften des Staff-Symbols
2180 @translationof Staff symbol properties
2182 @cindex Anpassen von staff symbol
2183 @cindex Notensystem, anpassen
2184 @cindex Veränderung des Notensystems
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:
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}.}
2197 @lilypond[verbatim,quote,relative=1]
2199 \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
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
2209 @lilypond[verbatim,quote,relative=1]
2211 \override StaffSymbol #'width = #23
2218 @subsection Strecker
2219 @translationof Spanners
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
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).
2238 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2240 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2241 die sich auf mehrere Strecker auswirken:
2243 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
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
2255 @lilypond[verbatim,quote,relative=2]
2258 % increase the length of the tie
2259 -\tweak #'minimum-length #5
2263 @lilypond[verbatim,quote,relative=2]
2265 \compressFullBarRests
2267 % increase the length of the rest bar
2268 \once \override MultiMeasureRest #'minimum-length = #20
2273 @lilypond[verbatim,quote,relative=2]
2275 % increase the length of the hairpin
2276 \override Hairpin #'minimum-length = #20
2280 Diese Veränderung kann auch eingesetzt werden, um die Länge
2281 von Legato- und Phrasierungsbögen zu verändern:
2283 @lilypond[verbatim,quote,relative=2]
2286 -\tweak #'minimum-length #5
2291 -\tweak #'minimum-length #5
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:
2303 @lilypond[verbatim,quote,relative=1]
2307 % not effective alone
2308 \once \override Glissando #'minimum-length = #20
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
2317 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2319 @lilypond[verbatim,quote,relative=1]
2320 % not effective alone
2321 \once \override Beam #'minimum-length = #20
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
2330 @strong{@i{Die @code{to-barline}-Eigenschaft}}
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:
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
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.
2353 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2355 Objekte, die das @code{line-spanner-interface} unterstützen,
2359 @item @code{DynamicTextSpanner}
2360 @item @code{Glissando}
2361 @item @code{TextSpanner}
2362 @item @code{TrillSpanner}
2363 @item @code{VoiceFollower}
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:
2377 @lilypond[relative=2,quote,verbatim]
2379 \once \override Glissando #'(bound-details left Y) = #3
2380 \once \override Glissando #'(bound-details right Y) = #-2
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.
2391 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2392 vertikalen Position des entsprechenden Anknüpfpunkts des
2393 Streckers errechnet.
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:
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
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:
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.
2418 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
2419 ist sein Wert mit 0 definiert.
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.
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.
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.
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
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
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:
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
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
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.
2481 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
2482 wird ein Pfeilkopf am Ende der Linie erstellt.
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.
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.
2499 @lilypond[verbatim,quote,ragged-right,relative=2,fragment]
2501 c2 \startTextSpan c2 c2
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.
2513 Referenz der Interna:
2514 @rinternals{TextSpanner},
2515 @rinternals{Glissando},
2516 @rinternals{VoiceFollower},
2517 @rinternals{TrillSpanner},
2518 @rinternals{line-spanner-interface}.
2521 @node Sichtbarkeit von Objekten
2522 @subsection Sichtbarkeit von Objekten
2523 @translationof Visibility of objects
2525 @cindex Objekte, Sichtbarkeit
2526 @cindex Grobs, Sichtbarkeit
2527 @cindex Sichtbarkeit von Objekten
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}.
2540 Es gibt auch einige weitere Techniken, die sich nur auf
2541 bestimmte Layout-Objekte beziehen. Sie werden im letzten
2542 Abschnitt behandelt.
2545 * Einen stencil entfernen::
2546 * Objekten unsichtbar machen::
2547 * Objekte weiß malen::
2548 * break-visibility (unsichtbar machen) benutzen::
2553 @node Einen stencil entfernen
2554 @unnumberedsubsubsec Einen stencil entfernen
2555 @translationof Removing the stencil
2557 @cindex stencil, entfernen
2558 @cindex Matrize, entfernen
2559 @cindex Stempel (stencil), entfernen
2560 @cindex Entfernen eines Stencil
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.
2570 @lilypond[quote,verbatim,relative=1]
2572 \override Score.BarLine #'stencil = ##f
2574 \revert Score.BarLine #'stencil
2579 @node Objekten unsichtbar machen
2580 @unnumberedsubsubsec Objekten unsichtbar machen
2581 @translationof Making objects transparent
2583 @cindex transparent, Objekte
2584 @cindex unsichtbar, Objekte
2585 @cindex durchsichtig, Objekte
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.
2593 @lilypond[quote,verbatim,relative=2]
2595 \once \override NoteHead #'transparent = ##t
2600 @node Objekte weiß malen
2601 @unnumberedsubsubsec Objekte weiß malen
2602 @translationof Painting objects white
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
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
2624 @lilypond[quote,verbatim,relative=2]
2625 \override Staff.Clef #'color = #white
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
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:
2648 @lilypond[quote,verbatim,relative=2]
2649 \override Staff.Clef #'color = #white
2650 \override Staff.Clef #'layer = #-1
2655 @node break-visibility (unsichtbar machen) benutzen
2656 @unnumberedsubsubsec break-visibility (unsichtbar machen) benutzen
2657 @translationof Using break-visibility
2659 @funindex break-visibility
2660 @cindex break-visibility
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.
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.
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.
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:
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
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
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:
2715 @multitable @columnfractions .3 .3 .4
2717 @headitem Layout-Objekt @tab Normaler Kontext @tab Standardeinstellung
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}
2740 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
2741 Sichtbarkeit von Taktlinien zu bestimmten:
2743 @lilypond[quote,verbatim,relative=1,ragged-right]
2746 % Remove bar line at the end of the current line
2747 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
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:
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.
2772 @node Besonderheiten
2773 @unnumberedsubsubsec Besonderheiten
2774 @translationof Special considerations
2776 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
2778 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
2779 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
2781 @funindex explicitKeySignatureVisibility
2782 @funindex explicitClefVisibility
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:
2793 @lilypond[quote,verbatim,relative=1,ragged-right]
2796 % Try to remove all key signatures
2797 \override Staff.KeySignature #'break-visibility = #all-invisible
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.
2820 @lilypond[quote,verbatim,relative=1,ragged-right]
2823 \set Staff.explicitKeySignatureVisibility = #all-invisible
2824 \override Staff.KeySignature #'break-visibility = #all-invisible
2831 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
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:
2837 @lilypond[quote,verbatim,relative=1,ragged-right]
2840 \set Staff.explicitKeySignatureVisibility = #all-invisible
2841 \set Staff.printKeyCancellation = ##f
2842 \override Staff.KeySignature #'break-visibility = #all-invisible
2849 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
2850 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
2852 @strong{@emph{Automatische Takte}}
2854 @funindex automaticBars
2856 @cindex Taktstriche, unterdrücken
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
2872 @strong{@emph{Oktavierte Schlüssel}}
2874 @cindex oktavierte Schlüssel, Sichtbarkeit
2875 @cindex Sichtbarkeit von oktavierten Schlüsseln
2876 @cindex Schlüssel, Sichtbarkeit der Oktavierung
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.
2885 Bei expliziten Schlüsseländerungn kontrolliert die
2886 @code{explicitClefVisibility}-Eigenschaft wohl das
2887 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
2890 Handbuch zum Lernen:
2891 @rlearning{Sichtbarkeit und Farbe von Objekten}
2895 @subsection Zeilenstile
2896 @translationof Line styles
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.
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.
2912 Hier einige Beispiele, welche Linienstile möglich sind
2913 und wie sie verändert werden können:
2915 @lilypond[relative=2,ragged-right,verbatim,fragment]
2917 \once \override Glissando #'style = #'dashed-line
2919 \override Glissando #'style = #'dotted-line
2921 \override Glissando #'style = #'zigzag
2923 \override Glissando #'style = #'trill
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:
2932 @lilypond[relative=2,ragged-right,verbatim,fragment]
2934 \once \override Glissando #'(bound-details right Y) = #-2
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.
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.
2946 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
2947 siehe @ref{Strecker}.
2950 @node Drehen von Objekten
2951 @subsection Drehen von Objekten
2952 @translationof Rotating objects
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.
2960 * Drehen von Objekten::
2961 * Textbeschriftung drehen::
2964 @node Drehen von Objekten
2965 @unnumberedsubsubsec Drehen von Objekten
2966 @translationof Rotating layout objects
2968 @cindex Drehen von Objekten
2969 @cindex Objekte, Drehen
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.
2980 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
2981 durch Ausprobieren herausgefunden werden.
2983 @cindex Crescendoklammern, gedreht
2984 @cindex gedrehte Crescendoklammern
2985 @cindex schräge Crescendoklammern
2986 @cindex Klammern, Crescendo, schräg
2988 Es gibt nur wenige Situationen, in welchen die Drehung eines
2989 Layout-Objektes sinnvoll ist. Das folgende Beispiel zeigt
2990 eine sinnvolle Anwendung:
2992 @lilypond[quote,verbatim,relative=1]
2994 \override Hairpin #'rotation = #'(20 -1 0)
2999 @node Textbeschriftung drehen
3000 @unnumberedsubsubsec Textbeschriftung drehen
3001 @translationof Rotating markup
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
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" }
3023 @node Fortgeschrittene Optimierungen
3024 @section Fortgeschrittene Optimierungen
3025 @translationof Advanced tweaks
3027 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3028 Aussehen des Notenbildes zu polieren.
3031 * Objekte ausrichten::
3032 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3033 * stencils verändern::
3034 * Formen verändern::
3039 Handbuch zum Lernen:
3040 @rlearning{Die Ausgabe verändern},
3041 @rlearning{Mehr Information}.
3044 @ref{Die Referenz der Programminterna erklärt},
3045 @ref{Eignschaften verändern},
3046 @ref{Schnittstellen für Programmierer}.
3048 Installierte Dateien:
3049 @file{scm/@/define@/-grobs@/.scm}.
3052 @rlsr{Tweaks and overrides}.
3054 Referenz der Interna:
3055 @rinternals{All layout objects}.
3058 @node Objekte ausrichten
3059 @subsection Objekte ausrichten
3060 @translationof Aligning objects
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}.
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.
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.
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.}
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.
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.
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}::
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
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}
3120 @lilypond[verbatim,quote,relative=2]
3123 -\tweak #'X-offset #0
3124 -\tweak #'Y-offset #0
3127 -\tweak #'X-offset #-1
3128 -\tweak #'Y-offset #1
3134 @node Das @code{side-position-interface} benutzen
3135 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3136 @translationof Using the @code{side-position-interface}
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.
3147 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3148 wo das Objekt platziert werden soll, wie in der Tabelle
3151 @c TODO add an example of each to the table
3153 @multitable @columnfractions .3 .3 .3
3154 @headitem @code{side-axis}- @tab @code{direction}- @tab
3155 @headitem Eigenschaft @tab Eigenschaft @tab Platzierung
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
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.
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.
3180 @node Das @code{self-alignment-interface} benutzen
3181 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3182 @translationof Using the @code{self-alignment-interface}
3184 @emph{Selbstausrichtende Objekte horizontal}
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.
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:
3208 @lilypond[quote,verbatim,relative=1]
3210 -\tweak #'self-alignment-X #-1
3212 -\tweak #'self-alignment-X #0
3214 -\tweak #'self-alignment-X #RIGHT
3216 -\tweak #'self-alignment-X #-2.5
3217 ^"aligned further to the right"
3221 @emph{Objekte vertikal automatisch ausrichten}
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
3242 @emph{Automatische Ausrichtung in beide Richtungen}
3244 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestllt
3245 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3248 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3249 ausrichtet, dass sie nah am Notenkopf bleibt.
3251 @lilypond[quote,verbatim,relative=2]
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
3262 @node Benutzung des @code{break-aligned-interface}
3263 @unnumberedsubsubsec Benutzung des @code{break-aligned-interface}
3264 @translationof Using the @code{break-alignable-interface}
3266 @cindex Ausrichtung an Objekten
3268 @funindex break-align-symbols
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}.
3276 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3277 über dem Objekt zentriert:
3279 @lilypond[verbatim,quote,relative=1]
3281 % the RehearsalMark will be centered above the Clef
3282 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3287 % the RehearsalMark will be centered above the TimeSignature
3288 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
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.
3306 @lilypond[verbatim,quote,relative=1]
3308 % the RehearsalMark will be centered above the Key Signature
3309 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
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)
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
3328 @lilypond[verbatim,quote,relative=1]
3329 % The RehearsalMark will be centered above the KeySignature
3330 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3336 % The RehearsalMark will be aligned with the left edge of the KeySignature
3337 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3341 % The RehearsalMark will be aligned with the right edge of the KeySignature
3342 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3348 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3349 verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen:
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
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
3369 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
3370 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
3371 @translationof Vertical grouping of grobs
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}.
3384 @node stencils verändern
3385 @subsection stencils verändern
3386 @translationof Modifying stencils
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}.
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
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}.
3412 Das folgende Beispiel zeigt diese Methode, indem das Symbol
3413 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
3416 @lilypond[verbatim,quote]
3418 \once \override NoteHead #'stencil = #ly:text-interface::print
3419 \once \override NoteHead #'text = \markup {
3421 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3422 \musicglyph #"noteheads.s2cross"
3430 Alle Schriftzeichen in der feta-Schriftart können
3431 mit dem @code{\musicglyph}-Befehl erreicht werden.
3432 Siehe auch @ref{Die Feta-Schriftart}.
3438 @ref{Graphische Notation innerhalb einer Textbeschriftung},
3439 @ref{Text formatieren},
3440 @ref{Text markup commands},
3441 @ref{Die Feta-Schriftart}.
3445 @node Formen verändern
3446 @subsection Formen verändern
3447 @translationof Modifying shapes
3453 @node Bögen verändern
3454 @unnumberedsubsubsec Bögen verändern
3455 @translationof Modifying ties and slurs
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
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.
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
3482 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
3483 erscheint, und wo auch @code{\tieDown} das Problem nicht
3486 @lilypond[verbatim,quote,relative=1]
3490 { r4 <g c,> <g c,> <g c,> }
3494 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
3495 Kontrollpunkte manuell zu verändern:
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
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.
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
3520 @lilypond[verbatim,quote,relative=1]
3524 #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3528 { r4 <g c,> <g c,> <g c,>4 }
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.