1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: e5a609e373eae846857f9a6d70a402a3d42b7d94
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. For details, see the Contributors'
8 Guide, node Updating translation committishes..
13 @c Translators: Till Paala
15 @node Standardeinstellungen verändern
16 @chapter Standardeinstellungen verändern
17 @translationof Changing defaults
19 Das Ziel von LilyPonds Design ist es, von sich aus gut gesetzte Noten
20 zu produzieren. Es kann aber trotzdem vorkommen, dass Sie diesen
21 Standardsatz ändern wollen. Das Layout kann mithilfe einer recht
22 großen Anzahl von @qq{Schaltern und Knöpfen} kontrolliert werden.
23 Sie werden als @qq{Eigenschaften} (engl. properties) bezeichnet.
24 Eine kurze Einführung und Übung, wie man auf diese Eigenschaften
25 zugreifen kann und sie verändern kann, findet sich im Handbuch
26 zum Lernen, siehe @rlearning{Die Ausgabe verändern}. Das Kapitel
27 sollte zuerst gelesen werden. In diesem Kapitel werden die gleichen
28 Themen behandelt, aber der Schwerpunkt liegt eher auf einer technischen
31 @cindex Referenz der Interna
32 @cindex Internals Reference
34 Die definitive Beschreibung der unterschiedlichen Einstellmöglichenkeiten
35 findet sich in einem eigenen Dokument: @rinternalsnamed{Top,der Referenz
36 der Interna}. Diese Referenz zeigt alle Variablen, Funktionen und Optionen,
37 die in LilyPond möglich sind. Es existiert als ein HTML-Dokumente, das
39 @c leave the @uref as one long line.
40 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
41 aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt.
43 Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur
44 zur Verfügung zu stellen. Wenn Layoutentscheidungen verändert werden
45 sollen, müssen auf die programminternen Prozesse zugegriffen werden,
46 wozu Scheme-Code benötigt wird. Scheme-Abschnitte werden in einer
47 LilyPond-Quelldatei mit einer Raute@tie{}@code{#} begonnen.@footnote{@rextend{Scheme-Übung} enthält eine kurze Übung, wie
48 man Zahlen, Listen, Zeichenketten und Symbole in Scheme notiert.}
52 * Interpretationskontexte::
53 * Die Referenz der Programminterna erklärt::
54 * Eigenschaften verändern::
55 * Nützliche Konzepte und Eigenschaften::
56 * Fortgeschrittene Optimierungen::
57 * Musikfunktionen benutzen::
61 @node Interpretationskontexte
62 @section Interpretationskontexte
63 @translationof Interpretation contexts
65 Dieser Abschnitt erklärt, was Kontexte sind und wie man sie
69 * Was sind Kontexte?::
70 * Kontexte erstellen::
71 * Kontexte am Leben halten::
72 * Umgebungs-Plugins verändern::
73 * Die Standardeinstellungen von Kontexten ändern::
74 * Neue Kontexte definieren::
75 * Reihenfolge des Kontextlayouts::
81 @rlearning{Kontexte und Engraver}.
84 @file{ly/engraver-init.ly},
85 @file{ly/performer-init.ly}.
88 @rlsr{Contexts and engravers}.
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
95 @node Was sind Kontexte?
96 @subsection Was sind Kontexte?
97 @translationof Contexts explained
99 Kontexte sind hierarchisch geordnet:
102 * Score -- der Vater aller Kontexte::
103 * Oberste Kontexte -- Container für Systeme::
104 * Mittlere Kontexte -- Systeme::
105 * Unterste Kontexte -- Stimmen::
108 @node Score -- der Vater aller Kontexte
109 @unnumberedsubsubsec Score -- der Vater aller Kontexte
110 @translationof Score - the master of all contexts
112 @code{Score} (Partitur) ist der höchste Notationskontext. Kein anderer Kontext
113 kann einen @code{Score}-Kontext enthalten. Im Normalfall kümmert
114 sich der @code{Score}-Kontext um die Verwaltung der Taktarten und sorgt
115 dafür, dass Elemente wie Schlüssel und Taktart- oder Tonartbezeichnungen
116 über die Systeme hinweg aneinander ausgerichtet sind.
118 Ein @code{Score}-Kontext wird eingerichtet, wenn eine
119 @code{\score @{@dots{}@}} oder @code{\layout @{@dots{}@}}-Umgebung
122 @node Oberste Kontexte -- Container für Systeme
123 @unnumberedsubsubsec Oberste Kontexte -- Container für Systeme
124 @translationof Top-level contexts - staff containers
126 @c Remark for German translation
127 Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier
128 als Systemgruppen bezeichnet (engl. staffgroup).
130 @strong{@emph{StaffGroup}}
132 Gruppiert Systeme und fügt eine eckige Klammer auf der linken Seite
133 hinzu. Die Taktstriche der enthaltenen Systeme werden vertikal
134 miteinander verbunden. @code{StaffGroup} besteht nur aus einer Ansammlung
135 von Systemen mit einer eckigen Klammer zu Beginn der Zeile und
136 durchgezogenen Taktstriche.
138 @strong{@emph{ChoirStaff}}
140 Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen
141 Systeme nicht vertikal miteinander verbunden sind.
143 @strong{@emph{GrandStaff}}
145 Gruppiert Systeme mit einer geschweiften Klammer zur Linken. Die
146 Taktlinien der enthaltenen Systeme werden vertikal verbunden.
148 @strong{@emph{PianoStaff}}
150 Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für
151 Instrumentenbezeichnungen zu Beginn jeder Systemgruppe.
154 @node Mittlere Kontexte -- Systeme
155 @unnumberedsubsubsec Mittlere Kontexte -- Systeme
156 @translationof Intermediate-level contexts - staves
158 Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme
161 @strong{@emph{Staff}}
163 Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen.
164 Er kann @code{Voice}-Kontexte enthalten.
166 @strong{@emph{RhythmicStaff}}
168 Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen
169 werden ignoriert und die Noten auf einer einzigen Linie ausgegeben.
171 @strong{@emph{TabStaff}}
173 Ein Kontext um Tabulaturen zu erstellen. Die Standardeinstellung ist
174 eine Gitarrentabulatur mit sechs Notenlinien.
176 @strong{@emph{DrumStaff}}
178 Ein Kontext zur Notation von Perkussion. Er kann
179 @code{DrumVoice}-Kontexte enthalten.
181 @strong{@emph{VaticanaStaff}}
183 Entspricht @code{Staff}, aber eignet sich besonders zum Notensatz des
184 Gregorianischen Chorals.
186 @strong{@emph{MensuralStaff}}
188 Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in
189 der Mensuralnotation.
192 @node Unterste Kontexte -- Stimmen
193 @unnumberedsubsubsec Unterste Kontexte -- Stimmen
194 @translationof Bottom-level contexts - voices
196 Stimmen-(@code{Voice}-Kontexte initialisieren bestimmte Eigenschaften
197 und laden bestimmte Engraver. Weil es sich bei Stimmen um die
198 untersten Kontexte handelt, können sie keine weiteren Kontexte enthalten.
200 @strong{@emph{Voice}}
202 Entspricht einer Stimme auf einem Notensystem. Der Kontext kümmert sich
203 um die Umsetzung von Noten, Dynamikzeichen, Hälsen, Balken, diversen Texten,
204 Bögen und Pausen. Wenn mehr als eine Stimme pro System benötigt wird,
205 muss dieser Kontext explizit initialisiert werden.
207 @strong{@emph{VaticanaVoice}}
209 Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz
210 des Gregorianischen Chorals.
212 @strong{@emph{MensuralVoice}}
214 Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation
217 @strong{@emph{Lyrics}}
219 Entspricht einer Stimme mit Gesangstext. Kümmert sich um den Satz
220 des Gesangstextes auf einer Zeile.
222 @strong{@emph{DrumVoice}}
224 Der Stimmenkontext in einem Perkussionssystem.
226 @strong{@emph{FiguredBass}}
228 Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte)
229 gesetzt werden, die in der @code{\figuremode}-Umgebung
232 @strong{@emph{TabVoice}}
234 Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext)
235 benutzt. Er wird normalerweise implizit erstellt.
237 @strong{@emph{CueVoice}}
239 Ein Stimmenkontext, der Noten in reduzierter Größe ausgibt und
240 vor allem dazu da ist, Stichnoten zu setzen. Siehe auch
241 @ref{Stichnoten formatieren}. Wird normalerweise implizit erstellt,
242 wenn Stichnoten gesetzt werden.
245 @strong{@emph{ChordNames}}
247 Ausgabe von Akkordsymbolen.
250 @node Kontexte erstellen
251 @subsection Kontexte erstellen
252 @translationof Creating contexts
254 In Partituren mit einer Stimme und einem System werden die Kontexte
255 normalerweise automatisch erstellt. In komplizierteren Partituren
256 muss man sie aber direkt erstellen. Es gibt drei Möglichkeiten,
257 Kontexte zu erstellen:
264 @cindex neue Kontexte
265 @cindex Kontexte erstellen
266 @cindex eigene Kontexte erstellen
271 Der einfachste Befehl ist @code{\new}. Er wird zusammen mit dem
272 Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa
275 \new @var{Kontext} @var{musik. Ausdruck}
279 wobei @var{Kontext} eine Kontextbezeichnung (wie @code{Staff} oder
280 @code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und
281 beginnt mit der Auswertung von @var{musik. Ausdruck} innerhalb
284 Eine praktische Anwendung von @code{\new} ist eine Partitur mit vielen
285 Systemen. Jede Stimme wird auf einem eigenen System notiert, das
286 mit @code{\new Staff} begonnen wird.
288 @lilypond[quote,verbatim,relative=2,ragged-right]
295 Der @code{\new}-Befehl kann den Kontext auch benennen:
298 \new @var{Kontext} = @var{ID} @var{musik. Ausdruck}
301 Dieser vom Benutzer definierte Name wird aber auch nur wirklich
302 benutzt, wenn nicht vorher schon der gleiche Name definiert worden
306 Ähnlich dem @code{\new}-Befehl wird auch mit dem @code{\context}-Befehl
307 ein musikalischer Ausdruck in einen Kontext umgeleitet. Diesem
308 Kontext wird ein expliziter Name zugewiesen. Die Syntax lautet:
311 \context @var{Kontext} = @var{ID} @var{musik. Ausdruck}
314 Diese Art von Befehl sucht nach einem existierenden Kontext vom Typus
315 @var{Kontext} mit der Bezeichnung @var{ID}. Wenn ein derartiger
316 Kontext nicht existiert, wird ein neuer Kontext mit der entsprechenden
317 Bezeichnung erstellt. Das ist nützlich, wenn auf den Kontext später
318 zurückverwiesen werden soll. Um etwa Gesangstext zu einer Melodie
319 hinzuzufügen, wird die Melodie in einem bezeichneten Kontext
323 \context Voice = "@b{Tenor}" @var{musik. Ausdruck}
327 sodass der Text an den Noten ausgerichtet werden kann:
330 \new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext}
334 Eine andere Möglichkeit für bezeichnete Kontexte ist es, zwei
335 unterschiedliche musikalische Ausdrücke in einen Kontext zu
336 verschmelzen. Im nächsten Beispiel werden Artikulationszeichen
337 und Noten getrennt notiert:
341 Artik = @{ s4-. s4-> @}
345 Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext
350 \new Staff \context Voice = "A" \Noten
351 \context Voice = "A" \Artik
355 @lilypond[quote,ragged-right]
359 \new Staff \context Voice = "A" \music
360 \context Voice = "A" \arts
364 Durch diesen Mechanismus ist es möglich eine Urtextausgabe zu
365 erstellen, mit der optionalen Möglichkeit, bestimmte zusätzliche
366 Artikulationszeichen zu den gleichen Noten hinzuzufügen und so
367 eine editierte Ausgabe zu erhalten.
369 @cindex Kontexte erstellen
372 Der dritte Befehl, um Kontexte zu erstellen, ist:
375 \context @var{Kontext} @var{musik. Ausdruck}
379 Dies entspricht dem @code{\context} mit @code{= @var{ID}}, aber hier
380 wird ein beliebiger Kontext des Typs @var{Kontext} gesucht und der
381 musikalische Ausdruck darin ausgewertet, unabhängig von der Bezeichnung,
382 die dem Kontext gegeben wurde.
384 Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf
385 verschiedenen Ebenen interpretiert werden können. Beispielsweise
386 der @code{\applyOutput}-Befehl (siehe
387 @rextend{Eine Funktion auf alle Layout-Objekte anwenden}). Ohne einen
388 expliziten @code{\context} wird die Ausgabe normalerweise einem
389 @code{Voice}-Kontext zugewiesen:
392 \applyOutput #'@var{Kontext} #@var{Funktion} % auf Voice anwenden
395 Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
396 interpretiert wird, muss folgende Form benutzt werden:
399 \applyOutput #'Score #@var{Funktion}
400 \applyOutput #'Staff #@var{Funktion}
407 @node Kontexte am Leben halten
408 @subsection Kontexte am Leben halten
409 @translationof Keeping contexts alive
411 @cindex Kontexte, am Leben erhalten
412 @cindex Kontexte, Lebensdauer
414 Kontexte werden normalerweise am ersten musikalischen Moment
415 beendet, an dem sie nichts mehr zu tun haben. Ein
416 @code{Voice}-Kontext stirbt also sofort, wenn keine Ereignisse
417 mehr auftreten, @code{Staff}-Kontexte sobald alle in ihnen
418 enthaltenen @code{Voice}-Kontexte keine Ereignisse mehr aufweisen
419 usw. Das kann Schwierigkeiten ergeben, wenn auf frühere
420 Kontexte verwiesen werden soll, die in der Zwischenzeit schon
421 gestorben sind, beispielsweise wenn man Systemwechsel mit
422 @code{\change}-Befehlen vornimmt, wenn Gesangstext einer
423 Stimme mit dem @code{\lyricsto}-Befehl zugewiesen wird oder
424 wenn weitere musikalische Ereignisse zu einem früheren Kontext
425 hinzugefügt werden sollen.
427 Es gibt eine Ausnahme dieser Regel: genau ein @code{Voice}-Kontext
428 innerhalb eines @code{Staff}-Kontextes oder in einer
429 @code{<<...>>}-Konstruktion bleibt immer erhalten bis zum Ende
430 des @code{Staff}-Kontextes oder der @code{<<...>>}-Konstruktion, der ihn einschließt, auch wenn es Abschnitte gibt, in der er nichts zu
431 tun hat. Der Kontext, der erhalten bleibt ist immer der erste,
432 der in der ersten enthaltenden @code{@{...@}}-Konstruktion
433 angetroffen wird, wobei @code{<<...>>}-Konstruktionen ignoriert
436 Jeder Kontext kann am Leben gehalten werden, indem man sicherstellt
437 dass er zu jedem musikalischen Moment etwas zu tun hat.
438 @code{Staff}-Kontexte werden am Leben gehalten, indem man sicherstellt,
439 dass eine der enthaltenen Stimmen am Leben bleibt. Eine Möglichkeit,
440 das zu erreichen, ist es, unsichtbare Pause zu jeder Stimme
441 hinzuzufügen, die am Leben gehalten werden soll. Wenn mehrere
442 Stimmen sporadisch benutzt werden sollen, ist es am sichersten,
443 sie alle am Leben zu halten und sich nicht auf die Ausnahmeregel
444 zu verlassen, die im vorigen Abschnitt dargestellt wurde.
446 Im folgenden Beispiel werden sowohl Stimme A als auch B auf diese
447 Weise für die gesamte Dauer des Stückes am Leben gehalten.
449 @lilypond[quote,verbatim]
450 musicA = \relative c'' { d4 d d d }
451 musicB = \relative c'' { g4 g g g }
454 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
455 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
460 \context Voice = "A" {
464 \context Voice = "B" {
468 \context Voice = "A" { \musicA }
469 \context Voice = "B" { \musicB }
470 \context Voice = "A" { \musicA }
481 @cindex Gesangstext, an einer sporadischen Melodie ausrichten
483 Das nächste Beispiel zeigt eine Melodie, die zeitweise unterbrochen
484 wird und wie man den entsprechenden Gesangstext mit ihr verknüpfen
485 kann, indem man die Stimme am Leben hält. In wirklichen Situationen
486 würden Begleitung und Melodie natürlich aus mehreren Abschnitten bestehen.
488 @lilypond[quote,verbatim]
489 melody = \relative c'' { a4 a a a }
490 accompaniment = \relative c' { d4 d d d }
491 words = \lyricmode { These words fol -- low the mel -- o -- dy }
494 \new Staff = "music" {
496 \new Voice = "melody" {
498 s1*4 % Keep Voice "melody" alive for 4 bars
501 \new Voice = "accompaniment" {
506 \context Voice = "melody" { \melody }
507 \context Voice = "accompaniment" { \accompaniment }
509 \context Voice = "accompaniment" { \accompaniment }
511 \context Voice = "melody" { \melody }
512 \context Voice = "accompaniment" { \accompaniment }
517 \new Lyrics \with { alignAboveContext = #"music" }
518 \lyricsto "melody" { \words }
523 Eine Alternative, die in manchen Umständen besser geeignet sein kann,
524 ist es, einfach unsichtbare Pausen einzufügen, um die Melodie
525 mit der Begleitung passend auszurichten:
527 @lilypond[quote,verbatim]
528 melody = \relative c'' {
534 accompaniment = \relative c' {
540 words = \lyricmode { These words fol -- low the mel -- o -- dy }
544 \new Staff = "music" {
546 \new Voice = "melody" {
550 \new Voice = "accompaniment" {
556 \new Lyrics \with { alignAboveContext = #"music" }
557 \lyricsto "melody" { \words }
564 @node Umgebungs-Plugins verändern
565 @subsection Umgebungs-Plugins verändern
566 @translationof Modifying context plug-ins
568 Notationskontexte (wie @code{Score} oder @code{Staff}) speichern
569 nicht nur Eigenschaften, sie enthalten auch Plugins (@qq{engraver}
570 genannt), die die einzelnen Notationselemente erstellen. Ein
571 @code{Voice}-Kontext enthält beispielsweise einen
572 @code{Note_heads_engraver}, der die Notenköpfe erstellt, und ein
573 @code{Staff}-Kontext einen @code{Key_engraver}, der die
576 Eine vollständige Erklärung jedes Plugins findet sich in
578 @rinternals{Engravers and Performers}.
581 Referenz der Interna: @expansion{} Translation @expansion{} Engravers.
583 Alle Kontexte sind erklärt in
585 @rinternals{Contexts},
588 Referenz der Interna: @expansion{} Translation @expansion{} Context,
590 wobei die in diesem Kontext vorkommenden Engraver aufgelistet sind.
592 Es kann teilweise nötig sein, diese Engraver umzupositionieren. Das
593 geschieht, indem man einen neuen Kontext mit @code{\new} oder
594 @code{\context} beginnt und ihn dann verändert:
600 \new @var{context} \with @{
613 @dots{} steht hier für die Bezeichnung des Engravers. @code{\consists}
614 fügt einen Engraver hinzu und @code{\remove} entfernt ihn.
615 Es folgt ein einfaches Beispiel, in dem der
616 @code{Time_signature_engraver} (Engraver für den Takt) und der
617 @code{Clef_engraver} (Engraver für den Schlüssel) aus dem
618 @code{Staff}-Kontext entfernt werden:
620 @lilypond[quote,relative=1,verbatim]
626 \remove "Time_signature_engraver"
627 \remove "Clef_engraver"
634 Das zweite Notensystem enthält keine Taktangabe und keinen Notenschlüssel.
635 Das ist eine recht brutale Methode, Objekte zu verstecken, weil es sich
636 auf das gesamte System auswirkt. Diese Methode beeinflusst auch die
637 Platzaufteilung, was erwünscht sein kann. Vielfältigere Methoden,
638 mit denen Objekte unsichtbar gemacht werden können, finden sich in
639 @rlearning{Sichtbarkeit und Farbe von Objekten}.
641 Das nächste Beispiel zeigt eine Anwendung in der Praxis. Taktstriche
642 und Taktart werden normalerweise in einer Partitur synchronisiert. Das
643 geschieht durch @code{Timing_translator} und @code{Default_bar_line_engraver}.
644 Diese Plugins sorgen sich um die Verwaltung der Taktzeiten und die
645 Stelle innerhalb des Taktes, zu dem eine Note erscheint usw. Indem
646 man diese Engraver aus dem @code{Score}-Kontext in den @code{Staff}-Kontext
647 verschiebt, kann eine Partitur erstellt werden, in welcher
648 jedes System eine unterschiedliche Taktart hat:
650 @cindex polymetrische Partitur
651 @cindex Taktarten, mehrere in Partitur
652 @cindex Taktarten, unterschiedliche per System
654 @lilypond[quote,verbatim]
658 \consists "Timing_translator"
659 \consists "Default_bar_line_engraver"
665 \consists "Timing_translator"
666 \consists "Default_bar_line_engraver"
675 \remove "Timing_translator"
676 \remove "Default_bar_line_engraver"
684 Die Reihenfolge, in der die Engraver definiert werden,
685 ist die Reihenfolge, in welcher sie aufgerufen werden, um
686 ihre Verarbeitung vorzunehmen. Normalerweise spielt die
687 Reihenfolge, in welcher die Engraver angegeben werden,
688 keine Rolle, aber in einigen Spezialfällen
689 ist die Reihenfolge sehr wichtig. Das kann beispielsweise
690 vorkommen, wenn ein Engraver eine Eigenschaft erstellt und
691 ein anderer von ihr liest, oder ein Engraver erstellt ein
692 Grob und ein anderer wertet es aus.
694 Folgende Reihenfolgen müssen beachtet werden:
698 der @code{Bar_engraver} muss normalerweise zuerst kommen,
701 der @code{New_fingering_engraver} muss vor dem
702 @code{Script_column_engraver} kommen,
705 der @code{Timing_translator} muss vor dem @code{Bar_number_engraver}
710 Installlierte Dateien:
711 @file{ly/engraver-init.ly}.
714 @node Die Standardeinstellungen von Kontexten ändern
715 @subsection Die Standardeinstellungen von Kontexten ändern
716 @translationof Changing context default settings
718 @cindex Standardkontexteigenschaften, ändern
719 @cindex Kontexteigenschaften, Einstellungen ändern
721 Kontext- und Grob-Eigenschaften können mit den Befehlen @code{\set}
722 und @code{\override} verändert werden, wie beschrieben in
723 @ref{Eigenschaften verändern}. Diese Befehle erstellen musikalische
724 Ereignisse, damit die Veränderungen zum Zeitpunkt der Verarbeitung
725 in den Noten erscheinen.
727 Dieser Abschnitt hingegen erklärt, wie man die @emph{Standardwerte} von
728 Kontext- und Grob-Eigenschaften zum Zeitpunkt, an dem der Kontext erstellt
729 wird, verändert. Es gibt hierzu zwei Möglichkeiten. Die eine verändert
730 die Standardeinstellungen aller Kontexte eines bestimmten Typs, die andere
731 verändert die Standardwerte nur eines bestimmten Kontextes.
734 * Alle Kontexte des gleichen Typs verändern::
735 * Nur einen bestimmten Kontext verändern::
736 * Rangfolge von Kontextwerten::
739 @node Alle Kontexte des gleichen Typs verändern
740 @unnumberedsubsubsec Alle Kontexte des gleichen Typs verändern
741 @translationof Changing all contexts of the same type
743 @cindex \context in \layout-Umgebung
747 Die Kontexteinstellungen, die standardmäßig in @code{Score}, @code{Staff},
748 @code{Voice} und anderen Kontexten eingesetzt werden, können in einer
749 @code{\context}-Umgebung innerhalb einer beliebigen @code{\layout}-Umgebung
750 spezifiziert werden. Die @code{\layout}-Umgebung sollte innerhalb der
751 @code{\score} (Partitur) stehen, auf die sie sich bezieht, nach den Noten.
757 [Kontexteinstellungen für alle Voice-Kontexte]
761 [Kontexteinstellungen für alle Staff-Kontexte]
766 Folgende Einstellungstypen können angegeben werden:
770 Ein @code{\override}-Befehl, aber ohne die Kontextbezeichnung:
772 @lilypond[quote,verbatim]
775 a4^"Thicker stems" a a a
781 \override Stem.thickness = #4.0
788 Eine Kontexteigenschaft kann direkt gesetzt werden:
790 @lilypond[quote,verbatim]
793 a4^"Smaller font" a a a
806 Ein vordefinierter Befehl wie etwa @code{\dynamicUp} oder ein
807 musikalischer Ausdruck wie @code{\accidentalStyle dodecaphonic}:
809 @lilypond[quote,verbatim]
812 a4^"Dynamics above" a a a
822 \accidentalStyle dodecaphonic
829 Eine vom Benutzer definierte Variable, die eine @code{\with}-Umgebung enthält;
830 zu Details der @code{\with}-Umgebung, siehe
831 @ref{Nur einen bestimmten Kontext verändern}.
833 @lilypond[quote,verbatim]
834 StaffDefaults = \with {
841 a4^"Smaller font" a a a
856 Befehle, die die Eigenschaften verändern, können in einer @code{\layout}-Umgebung
857 platziert werden, ohne von einer @code{\context}-Umgebung eingeschlossen zu werden.
858 Derartige Einstellungen verhalten sich äquivalet wie Eigenschaftsveränderungen,
859 die zu jedem Beginn eines bestimmten Kontextes angegeben werden. Wenn kein
860 Kontext angegeben wird, wird @emph{jeder} Kontext auf der untersten Ebene
861 beeinflusst, siehe auch @ref{Unterste Kontexte -- Stimmen}. Die Syntax eines
862 Befehls zu Einstellung von Eigenschaftseinstellungen in einer @code{\layout}-Umgebung
863 ist die gleiche wie für den Befehl direkt zwischen den Noten geschrieben.
865 @lilypond[quote,verbatim]
869 a4^"Smaller font" a a a
874 \accidentalStyle dodecaphonic
876 \override Voice.Stem.thickness = #4.0
882 @node Nur einen bestimmten Kontext verändern
883 @unnumberedsubsubsec Nur einen bestimmten Kontext verändern
884 @translationof Changing just one specific context
889 Die Kontexteigenschaften nur eines bestimmten Kontextes können mit einer
890 @code{\with}-Umgebung geändert werden. Alle anderen Vorkommen des
891 gleichen Kontexts behalten ihre Standardeinstellungen, möglicherweise
892 durch Einstellungn in @code{\layout}-Umgebungen verändert. Die
893 @code{\with}-Umgebung muss direkt nach dem Befehl @code{\new}
894 @var{Kontext-Typ} gesetzt werden:
899 [enthält Einstellungen nur für diesen spezifischen Kontext]
905 Folgende Arten von Einstellungen können angegeben werden:
909 Ein @code{\override}-Befehl, dessen Kontextbezeichnung ausgelassen wird:
911 @lilypond[quote,verbatim]
916 \override Stem.thickness = #4.0
920 a4^"Thick stems" a a a
929 Eine Kontexeigenschaft direkt einstellen:
931 @lilypond[quote,verbatim]
936 a4^"Default font" a a a
945 a4^"Smaller font" a a a
954 Ein vordefinierter Befehl wie etwa @code{\dynamicUp}
956 @lilypond[quote,verbatim]
962 a4^"Dynamics below" a a a
968 \with { \accidentalStyle dodecaphonic }
974 a4^"Dynamics above" a a a
986 @node Rangfolge von Kontextwerten
987 @unnumberedsubsubsec Rangfolge von Kontextwerten
988 @translationof Order of precedence
990 Der Wert einer Eigenschaft, die zu einer bestimmten Zeit aktiv ist, wird
991 wie folgend bestimmt:
995 wenn ein @code{\override}- oder @code{\set}-Befehl in der Eingabe aktiv ist,
996 wird dieser Wert benützt,
999 ansonsten wird der Standardwert aus einer @code{\with}-Umgebung zu
1000 Beginn des Kontextes benützt,
1003 ansonsten wied der Standardwert aus der letzten passenden
1004 @code{\context}-Umgebung in der letzten @code{\layout}-Umgebung benützt,
1007 ansonsten wird der Standardwert von LilyPond eingesetzt.
1011 Handbuch zum Lernen:
1012 @rlearning{Kontexteigenschaften verändern}.
1015 @ref{Was sind Kontexte?},
1016 @ref{Unterste Kontexte -- Stimmen},
1017 @ref{Der set-Befehl},
1018 @ref{Der override-Befehl},
1019 @ref{Die \layout-Umgebung}.
1022 @node Neue Kontexte definieren
1023 @subsection Neue Kontexte definieren
1024 @translationof Defining new contexts
1026 @cindex Kontexte, neue definieren
1027 @cindex Engraver, in Kontexte einfügen
1042 Bestimme Kontexte, wie @code{Staff} oder @code{Voice}, werden
1043 erstellt, indem man sie mit einer Musikumgebung aufruft. Es ist
1044 aber auch möglich, eigene neue Kontexte zu definieren, in denen
1045 dann unterschiedliche Engraver benutzt werden.
1047 Das folgende Beispiel zeigt, wie man etwa @code{Voice}-Kontexte
1048 von Grund auf neu bauen kann. Ein derartiger Kontext ähnelt
1049 @code{Voice}, es werden aber nur zentrierte Schrägstriche als
1050 Notenköpfe ausgegeben. Das kann benutzt werden, um Improvisation
1051 in Jazzmusik anzuzeigen.
1054 @lilypond[quote,ragged-right]
1055 \layout { \context {
1057 \type "Engraver_group"
1058 \consists "Note_heads_engraver"
1059 \consists "Rhythmic_column_engraver"
1060 \consists "Text_engraver"
1061 \consists "Pitch_squash_engraver"
1062 squashedPosition = #0
1063 \override NoteHead.style = #'slash
1068 \accepts "ImproVoice"
1072 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1073 c4 c^"ausziehen" c_"während des Spiels :)" c }
1078 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
1079 innerhalb der @code{\layout}-Umgebung definiert:
1089 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
1090 im vorigen Beispiel eingesetzt werden.
1092 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
1099 Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle,
1100 die in @code{Voice}-Kontexten funktionieren, auch
1101 in dem neuen Kontext funktionieren. Das wird erreicht, indem der
1102 Kontext als Alias @code{Voice} erhält:
1108 Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver
1109 hinzufügen, die für diese Aktionen zuständig sind:
1112 \consists "Note_heads_engraver"
1113 \consists "Text_engraver"
1117 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
1120 \consists "Pitch_squash_engraver"
1121 squashedPosition = #0
1124 Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom
1125 @code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale
1126 Position auf den Wert von @code{squashedPosition}, in diesem Fall ist
1127 das die Mittellinie.
1129 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
1132 \override NoteHead.style = #'slash
1136 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
1137 einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet
1138 werden muss. Dieser Typ solle immer @code{Engraver_group} lauten:
1141 \type "Engraver_group"
1144 Alles zusammen haben wir folgende Einstellungen:
1149 \type "Engraver_group"
1150 \consists "Note_heads_engraver"
1151 \consists "Text_engraver"
1152 \consists "Pitch_squash_engraver"
1153 squashedPosition = #0
1154 \override NoteHead.style = #'slash
1163 Kontexte sind hierarchisch. Wie wollen, dass @code{ImproVoice}
1164 sich als Unterkontext von @code{Staff} erkennt, wie eine normale
1165 Stimme. Darum wird die Definition von @code{Staff} mit dem
1166 @code{\accepts}-Befehl verändert:
1178 Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was
1179 manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
1180 wieder benutzt werden sollen.
1182 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
1193 \accepts "ImproVoice"
1198 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
1207 c c_"während des Spielens :)"
1214 @node Reihenfolge des Kontextlayouts
1215 @subsection Reihenfolge des Kontextlayouts
1216 @translationof Context layout order
1218 @cindex Kontext, Layoutreihenfolge
1222 Kontexte werden in einer Systemgruppe normalerweise von oben nach
1223 unten positioniert in der Reihenfolge, wie sie in der Quelldatei
1224 auftreten. Wenn Kontext verschachtelt ewrden, enthält der äußere
1225 Kontexte geschachtelte innere Kontexte, wie in der Quelldatei
1226 angegeben, vorausgesetzt, die inneren Kontexte befinden sich auch
1227 in der @qq{accepts}-Liste. Geschachtelte Kontexte, die nicht
1228 in dieser @qq{accepts}-Liste enthalten sind, werden unterhalb
1229 des äußeren Kontextes neu positioniert, anstatt innerhalb von ihm
1232 Die @qq{accepts}-Liste eines Kontextes kann mit dem Befehlen
1233 @code{\accepts} und @code{\denies} verändert werden. @code{\accepts}
1234 fügt einen Kontext zur @qq{accepts}-Liste, und @code{\denies}
1235 entfernt einen Kontext aus der Liste. Akkordbezeichnungen sollen
1236 beispielsweise normalerweise nicht innerhalb eines @code{Staff}-Kontextes
1237 geschachtelt werden, sodass der @code{ChordNames}-Kontext nicht
1238 automatisch in der @qq{accepts}-Liste des @code{Staff}-Kontextes
1239 geführt ist. Wenn er aber benötigt wird, kann er hinzugefügt werden:
1241 @lilypond[verbatim,quote]
1245 \chords { d1:m7 b1:min7.5- }
1250 @lilypond[verbatim,quote]
1254 \chords { d1:m7 b1:min7.5- }
1259 \accepts "ChordNames"
1265 @code{\denies} wird vorrangig eingesetzt, wenn ein neuer Kontext
1266 basierend auf einem existierenden erstellt wird, aber sein
1267 Schachtelungsverhalten sich unterscheidet. Der
1268 @code{VaticanaStaff}-Kontext beispielsweise basiert auf dem
1269 @code{Staff}-Kontext, hat aber den @code{VaticanaVoice}-Kontext
1270 anstellt des @code{Voice}-Kontexts in seiner @qq{accepts}-Liste.
1272 Zur Erinnerung: ein Kontext wird automatisch erstellt, wenn ein
1273 Befehl auftritt, der in den aktuellen Kontexten nicht enthalten
1274 sein kann. Dass kann zu unerwarteten neuen Systemgruppen oder Partituren
1277 @cindex alignAboveContext
1278 @cindex alignBelowContext
1279 @funindex alignAboveContext
1280 @funindex alignBelowContext
1282 Manchmal soll ein Kontext nur für einen kurzen Moment existieren,
1283 ein gutes Beispiel etwa ein System für ein Ossia. Das wird normalerweise
1284 erreicht, indem man die Kontextdefinition an der richtigen Stelle parallel
1285 mit dem existierenden Abschnitt der Hauptnoten anlegt. Standardmäßig wird
1286 der neue Kontext unter den existierenden Kontexten angelegt. Um ihn aber
1287 über dem Kontext mit der Bezeichnung @qq{Hauptstimme} zu positionieren,
1288 sollte er folgenderweise erstellt werden:
1291 @code{\new Staff \with @{ alignAboveContext = #"Hauptstimme" @} }
1294 Eine ähnliche Situation entsteht, wenn man einen zeitweiligen Gesangstext
1295 in einem Layout mit mehreren Notensystemen anlegen und positionieren will,
1296 etwa wenn eine zweite Strophe zu einem wiederholten Abschnitt in einem
1297 @code{ChoirStaff} hinzugefügt wird. Standardmäßig wird der neue Text unter
1298 dem untersten System angelegt. Wenn der Gesangstext mit der Eigenschaft
1299 @code{alignBelowContext} definiert wird, kann er korrekt unter dem
1300 (bezeichneten) Gesangstext positioniert werden, der die erste Strophe
1303 Beispiele, die diese Neuordnung von temporären Kontexten zeigen, finden sich
1304 an anderen Stellen; siehe @rlearning{Musikalische Ausdrücke ineinander verschachteln},
1305 @ref{Einzelne Systeme verändern} und @ref{Techniken für die Gesangstextnotation}.
1308 Handbuch zum Lernen:
1309 @rlearning{Musikalische Ausdrücke ineinander verschachteln}.
1312 @ref{Einzelne Systeme verändern},
1313 @ref{Techniken für die Gesangstextnotation}.
1315 Handbuch zur Benutzung:
1316 @rprogram{Ein zusätzliches System erscheint}.
1318 Installierte Dateien:
1319 @file{ly/engraver-init.ly}.
1322 @node Die Referenz der Programminterna erklärt
1323 @section Die Referenz der Programminterna erklärt
1324 @translationof Explaining the Internals Reference
1327 * Zurechtfinden in der Programmreferenz::
1328 * Layout-Schnittstellen::
1329 * Die Grob-Eigenschaften::
1330 * Benennungskonventionen::
1334 @node Zurechtfinden in der Programmreferenz
1335 @subsection Zurechtfinden in der Programmreferenz
1336 @translationof Navigating the program reference
1338 Arbeit mit der Referenz der Interna soll hier an
1339 einigen Beispiel illustriert werden. Die Referenz
1340 der Interna existiert nur auf Englisch,
1341 darum sind auch die Beispiele dieses Abschnittes nicht
1344 Folgende Aufgabe wird bearbeitet: Der Fingersatz aus dem Beispiel
1345 unten soll verändert werden:
1347 @lilypond[quote,relative=2,verbatim]
1353 In der Dokumentation über Fingersatz (in
1354 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1357 @strong{Siehe auch:}
1359 Referenz der Interna: @rinternals{Fingering}.
1363 @c all ignored text just left out
1366 Die Referenz der Interna gibt es als HTML-Dokument. Sie sollten sie als
1367 HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation
1368 herunterladen. Dieser Abschnitt ist sehr viel schwieriger zu verstehen,
1369 wenn Sie die PDF-Version verwenden.
1372 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1373 Oben auf der Seite findet sich:
1376 Fingering objects are created by: @rinternals{Fingering_engraver} and
1377 @rinternals{New_fingering_engraver}.
1380 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1381 verfolgen, wie LilyPond intern arbeitet:
1385 @item @rinternals{Fingering}:
1386 @rinternals{Fingering} objects are created by:
1387 @rinternals{Fingering_engraver}
1389 @item @rinternals{Fingering_engraver}:
1390 Music types accepted: @rinternals{fingering-event}
1392 @item @rinternals{fingering-event}:
1393 Music event type @code{fingering-event} is in Music expressions named
1394 @rinternals{FingeringEvent}
1397 @c translation of the above
1398 Fingersatz-Objekte werden also durch den @code{Fingering_engraver}
1399 erstellt, welcher folgende Musikereignistypen akzeptiert:
1400 @code{fingering-event}. Ein Musikereignis vom Typ
1401 @code{fingering-event} ist ein musikalischer Ausdruck mit der
1402 Bezeichnung @rinternals{FingeringEvent}.
1404 Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds
1405 Wirkungsweise: er beginnt bei der graphischen Ausgabe und
1406 arbeitet sich voran zur Eingabe. Man könnte auch mit einem
1407 Eingabe-Ereignis starten und dann die Links zurückverfolgen,
1408 bis man zum Ausgabe-Objekt gelangt.
1411 Die Referenz der Interna kann auch wie ein normales Dokument
1412 durchsucht werden. Sie enthält Kapitel über
1414 @rinternals{Music definitions},
1417 @code{Music definitions},
1419 über @rinternals{Translation} und @rinternals{Backend}. Jedes
1420 Kapitel listet alle die Definitionen und Eigenschaften auf,
1421 die benutzt und verändert werden können.
1424 @node Layout-Schnittstellen
1425 @subsection Layout-Schnittstellen
1426 @translationof Layout interfaces
1428 @cindex Layout-Schnittstelle
1429 @cindex Schnittstelle, Layout-
1432 Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde,
1433 beschreibt ein Layoutobjekt mit der Bezeichnung
1434 @code{Fingering}. Ein derartiges Objekt ist ein Symbol
1435 in der Partitur. Es hat Eigenschaften, die bestimmte
1436 Zahlen speichern (wie etwa Dicke und Richtung), aber auch
1437 Weiser auf verwandte Objekte. Ein Layoutobjekt wird auch
1438 als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches
1439 @emph{Ob}jekt. Mehr Information zu Grobs findet sich in
1440 @rinternals{grob-interface}.
1442 Die Seite zu @code{Fingering} enthält Definitionen für das
1443 @code{Fingering}-Objekt. Auf der Seite steht etwa:
1446 @code{padding} (dimension, in staff space):
1452 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1453 0.5 Notenlinienabstände beträgt.
1455 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1456 als auch als Notationselement einnehmen. Das Fingersatzobjekt
1457 beispielsweise hat folgende Aspekte:
1461 Seine Größe ist unabhängig von der horizontalen Platzaufteilung,
1462 anders als etwa bei Legatobögen.
1465 Es handelt sich um Text, normalerweise sehr kurz.
1468 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1469 anders als bei Legatobögen.
1472 Der Mittelpunkt des Symbols sollte horizontal mit dem
1473 Mittelpunkt des Notenkopfes ausgerichtet werden.
1476 Vertikal wird das Objekt neben die Note und das Notensystem
1480 Die vertikale Position wird auch mit anderen Textelementen
1485 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1486 (engl. interface), die auf der @rinternals{Fingering}-Seite
1487 unten aufgelistet sind:
1490 This object supports the following interfaces:
1491 @rinternals{item-interface},
1492 @rinternals{self-alignment-interface},
1493 @rinternals{side-position-interface}, @rinternals{text-interface},
1494 @rinternals{text-script-interface}, @rinternals{font-interface},
1495 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1498 Ein Klick auf einen der Links öffnet die Seite der entsprechenden
1499 Schnittstelle. Jede Schnittstelle hat eine Anzahl von Eigenschaften.
1500 Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne
1501 Eigenschaften}), andere aber können verändert werden.
1503 Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber
1504 eigentlich handelt es sich nicht um sehr viel. Die Initialisierungsdatei
1505 @file{scm/define-grobs.scm} zeigt den Inhalt dieses @qq{Objekts}
1506 (zu Information, wo diese Dateien sich finden siehe
1507 @rlearning{Mehr Information}):
1512 (avoid-slur . around)
1513 (slur-padding . 0.2)
1514 (staff-padding . 0.5)
1515 (self-alignment-X . 0)
1516 (self-alignment-Y . 0)
1517 (script-priority . 100)
1518 (stencil . ,ly:text-interface::print)
1519 (direction . ,ly:script-interface::calc-direction)
1520 (font-encoding . fetaText)
1521 (font-size . -5) ; don't overlap when next to heads.
1522 (meta . ((class . Item)
1523 (interfaces . (finger-interface
1525 text-script-interface
1527 side-position-interface
1528 self-alignment-interface
1529 item-interface))))))
1533 Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als
1534 eine Ansammlung von Variablen, und die Internetseite der
1535 Referenz der Interna ist direkt aus diesen Anweisungen generiert.
1538 @node Die Grob-Eigenschaften
1539 @subsection Die Grob-Eigenschaften
1540 @translationof Determining the grob property
1542 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1544 @lilypond[quote,relative=2,verbatim]
1550 Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist,
1551 müssen wir uns mit der Schnittstelle auseinander setzen, die diese
1552 Positionierung veranlasst. Das ist hier @code{side-position-interface}.
1553 Auf der Seite für diese Schnittstelle heißt es:
1556 @code{side-position-interface}
1558 Position a victim object (this one) next to other objects (the
1559 support). The property @code{direction} signifies where to put the
1560 victim object relative to the support (left or right, up or down?)
1563 @cindex Verschiebung
1566 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1571 (dimension, in staff space)
1573 Add this much extra space between objects that are next to each other.
1577 Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung
1578 weiter weg von der Note gesetzt werden. Dieser Befehl beispielsweise
1579 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
1582 \once \override Voice.Fingering.padding = #3
1585 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1586 Fingersatz notiert ist, erhält man folgendes:
1588 @lilypond[quote,relative=2,verbatim]
1589 \once \override Voice.Fingering.padding = #3
1595 In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext
1596 definiert werden. Das kann auch aus der Referenz der Interna entnommen
1597 werden, da die Seite des @rinternals{Fingering_engraver} schreibt:
1600 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1604 @node Benennungskonventionen
1605 @subsection Benennungskonventionen
1606 @translationof Naming conventions
1608 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1609 folgen bestimmten Regeln:
1614 Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1617 Scheme-Funktionen: ly:plus-scheme-stil
1620 Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1623 Grob-Schnittstellen: scheme-stil
1626 backend-Eigenschaften: scheme-stil (aber X und Y)
1629 Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1632 Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1635 Engraver: Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1641 @node Eigenschaften verändern
1642 @section Eigenschaften verändern
1643 @translationof Modifying properties
1646 * Grundlagen zum Verändern von Eigenschaften::
1648 * Der override-Befehl::
1649 * Der tweak-Befehl::
1650 * set versus override::
1651 * Alisten verändern::
1655 @node Grundlagen zum Verändern von Eigenschaften
1656 @subsection Grundlagen zum Verändern von Eigenschaften
1657 @translationof Overview of modifying properties
1659 Jeder Kontext ist verantwortlich für die Erstellung bestimmter
1660 graphischer Objekte. Die Einstellungen für diese Objekte werden
1661 auch in dem Kontext gespeichert. Wenn man diese Einstellungen
1662 verändert, kann die Erscheinung der Objekte geändert werden.
1664 Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten
1665 gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften.
1666 Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext
1667 beziehen und seine Darstellung beinflussen. Grob-Eigenschaften dagegen
1668 wirken sich nur auf bestimmte graphische Objekte aus, die in einem
1669 Kontext dargestellt werden.
1671 Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte
1672 von Kontexteigenschaften zu ändern. Die Befehle @code{\override} und
1673 @code{\revert} hingegen verändern die Werte von Grob-Eigenschaften.
1676 Die Syntax hierzu lautet:
1679 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1683 @var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts,
1684 wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und
1685 @var{Eigenschaft} ist eine interne Variable des Formatierungssystems
1686 (eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}). Diese
1687 Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich
1688 versehen werden. Wie die Felder @var{Bezeichnung}, @var{Eigenschaft}
1689 und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt
1690 @ref{Eigenschaften verändern}. Hier wird nur die Funktionalität des
1696 \override Staff.Stem.thickness = #4.0
1700 bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist
1701 1.3, die Dicke der Notenlinie entspricht dem Wert 1). Da der
1702 Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf
1703 das gerade aktuelle Notensystem aus. Andere Systeme behalten
1704 ihr normales Aussehen. Hier ein Beispiel mit diesem Befehl:
1706 @lilypond[quote,verbatim,relative=2]
1708 \override Staff.Stem.thickness = #4.0
1714 Der @code{\override}-Befehl verändert die Definitionen von
1715 @code{Stem} (Hals) innerhalb des aktuellen @code{Staff}
1716 (Notensystems). Nachdem der Befehl gelesen wurde, werden
1717 alle Hälse dicker gesetzt.
1719 Wie auch bei dem @code{\set}-Befehl kann auch hier der
1720 Kontext ausgelassen werden, wobei dann immer implizit der
1721 @code{Voice}-Kontext angenommen wird. Mit einem zusätzlichen
1722 @code{\once} wirkt sich die Änderung nur einmal aus:
1724 @lilypond[quote,verbatim,relative=2]
1726 \once \override Stem.thickness = #4.0
1731 Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt
1732 begonnen wird. Wenn also ein @emph{Strecker}-Objekt wie etwa
1733 ein Bogen verändert werden soll, muss der @code{\override}-Befehl
1734 schon geschrieben werden, bevor das Objekt begonnen wird. In dem
1737 @lilypond[quote,verbatim,relative=2]
1738 \override Slur.thickness = #3.0
1740 \override Beam.beam-thickness = #0.6
1745 ist der Bogen dicker, der Balken aber nicht. Das liegt daran, dass der Befehl
1746 zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken
1749 Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem
1750 @code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings
1751 nur Einstellungen betroffen, die sich im gleichen Kontext befinden. Der
1752 @code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts,
1753 weil er für den falschen Kontext gefordert wird.
1756 \override Voice.Stem.thickness = #4.0
1757 \revert Staff.Stem.thickness
1760 Einige veränderbare Optionen werden als Untereigenschaften (engl.
1761 subproperties) bezeichnet und befinden sich innerhalb von den
1762 normalen Eigenschaften. Wenn man sie verändern will, nimmt der
1763 Befehl folgende Form an:
1765 @c leave this as a long long
1767 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1774 \override Stem.details.beamed-lengths = #'(4 4 3)
1779 Referenz der Interna:
1780 @rinternals{OverrideProperty},
1781 @rinternals{RevertProperty},
1782 @rinternals{PropertySet},
1783 @rinternals{Backend},
1784 @rinternals{All layout objects}.
1789 Das Back-end ist nicht sehr streng bei der Überprüfung
1790 der Typen von Objekteigenschaften. Auf sich selbst verweisende
1791 Bezüge in Scheme-Werten der Eigenschaften können Verzögerung
1792 oder einen Absturz des Programms hervorrufen.
1796 @node Der set-Befehl
1797 @subsection Der @code{@bs{}set}-Befehl
1798 @translationof The set command
1800 @cindex Eigenschaften
1801 @cindex Verändern von Eigenschaften
1806 Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen,
1807 Variablen, die in diesem Kontext definiert sind. Sie können
1808 während der Interpretation des Kontextes verändert werden. Hierzu
1809 wird der @code{\set}-Befehl eingesetzt:
1812 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1815 @var{Wert} ist ein Scheme-Objekt, weshalb ihm@tie{}@code{#} vorangestellt
1818 Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
1819 benannt. Sie kontrollieren vor allem die Übersetzung von Musik in
1820 Notation, wie etwa @code{localAlterations}, welche bestimmt, wann
1821 ein Taktstrich gesetzt werden muss. Kontexteigenschaften können
1822 ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
1823 wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die
1824 Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem
1825 @code{\set}-Befehl verändert.
1827 Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
1828 Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t}
1829 (wahr) gesetzt wird:
1831 @lilypond[quote,verbatim,relative=2]
1833 \set Score.skipBars = ##t
1837 Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich
1838 der Befehl auf den gerade aktiven unterstmöglichen Kontext,
1839 üblicherweise @code{ChordNames}, @code{Voice} oder
1842 @lilypond[quote,verbatim,relative=2]
1843 \set Score.autoBeaming = ##f
1847 \set autoBeaming = ##t
1855 Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass
1856 diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
1858 Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
1859 Eigenschaft enthält, die verändert werden soll. Wenn man
1860 beispielsweise @code{skipBars} aus dem oberen Beispiel
1861 ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
1862 keine Auswirkung, weil er sich auf den @code{Voice}-Kontext
1863 bezieht, die Eigenschaft sich aber im @code{Score}-Kontext
1866 @lilypond[quote,verbatim,relative=2]
1872 Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter
1873 Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich
1874 die Änderungen auf alle Stimmen (@code{Voice}), die in diesem
1875 Kontext enthalten sind.
1880 Es gibt auch einen @code{\unset}-Befehl:
1883 \unset @var{Kontext}.@var{Eigenschaft}
1887 der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft}
1888 entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen
1889 Kontext rückgängig. Wenn also im @code{Staff}-Kontext die
1890 Bebalkung ausgeschaltet wird:
1892 @lilypond[quote,verbatim,relative=2]
1893 \set Score.autoBeaming = ##t
1898 \unset Score.autoBeaming
1906 Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten
1907 Kontext nicht mitangegeben werden. Die zwei Versionen
1910 \set Voice.autoBeaming = ##t
1911 \set autoBeaming = ##t
1914 verhalten sich gleich, wenn die gegenwärtige Basis der
1915 @code{Voice}-Kontext ist.
1920 Einstellungen, die nur einmal vorgenommen werden sollen, können
1921 mit @code{\once} notiert werden, etwa:
1923 @lilypond[quote,verbatim,relative=2]
1925 \once \set fontSize = #4.7
1930 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1931 findet sich in der Referenz der Interna, siehe
1933 @rinternals{Tunable context properties}.
1936 @qq{Translation @expansion{} Tunable context properties}.
1941 Internals Reference:
1943 @rinternals{Tunable context properties}.
1947 @node Der override-Befehl
1948 @subsection Der @code{\\override}-Befehl
1949 @translationof The override command
1951 @cindex Grob-Eigenschaften
1952 @cindex Eigenschaften von Grob
1953 @cindex graphische Objekte, Eigenschaften
1958 Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
1959 Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt. Sie
1960 enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine
1961 assoziative Liste. Siehe @file{scm/define-grobs.scm} für die
1962 Einstellungen aller Grob-Beschreibungen. Grob-Beschreibungen werden
1963 mit @code{\override} verändert.
1965 @code{\override} ist eigentlich eine Kurzform, der Befehl
1968 \override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1974 \set @var{Kontext}.@var{GrobBezeichnung} =
1975 #(cons (cons '@var{Eigenschaft} @var{Wert})
1976 <vorheriger Wert von @var{Kontext}.@var{GrobBezeichnung}>)
1979 Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs
1980 zu initialisieren. Grobs haben Eigenschaften, die im Scheme-Stil mit
1981 @code{bindestrich-wörtern} benannt sind. Diese Werte der Grob-Eigenschaften
1982 verändern sich während des Notensetzens: LilyPonds Notensatz heißt im
1983 Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
1985 Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
1986 man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
1988 @lilypond[quote, verbatim, relative=2]
1990 \override Voice.Stem.thickness = #3.0
1994 Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
1997 @lilypond[quote, verbatim, relative=2]
1998 { \override Staff.Stem.thickness = #3.0
2002 \override Stem.thickness = #0.5
2011 @cindex rückgängig machen von Kontextveränderungen
2012 @cindex Kontextveränderungen rückgängig machen
2013 @cindex override rückgängig machen
2014 @cindex \override rückgängig machen
2019 Die Auswirkungen von @code{\override} können mit @code{\revert} wieder
2020 rückgängig gemacht werden:
2022 @lilypond[quote, verbatim, relative=2]
2024 \override Voice.Stem.thickness = #3.0
2026 \revert Voice.Stem.thickness
2030 Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle
2031 Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
2033 @lilypond[quote, verbatim, relative=2]
2038 \override Staff.Stem.thickness = #3.0
2042 \revert Staff.Stem.thickness
2049 @cindex Veränderung von Kontexten nur einmal
2050 @cindex Einmal verändern von Kontexten
2051 @cindex Kontexte, einmal verändern
2052 @cindex \override, nur einmal
2057 @code{\once} kann zusammen mit @code{\override} benutzt werden,
2058 um nur den aktuellen Zeitwert zu verändern:
2060 @lilypond[quote, verbatim, relative=2]
2064 \override Stem.thickness = #3.0
2068 \once \override Stem.thickness = #3.0
2077 @cindex Referenz der Interna
2078 @cindex Grafische Objekte, Finden
2079 @cindex Finden von graphischen Objekten
2080 @cindex Beschreibung von graphischen Objekten
2081 @cindex Grafische Objekte, Beschreibung
2082 @cindex Grob, Beschreibung
2083 @cindex Veränderungen der Einstellungen
2084 @cindex Einstellungen verändern
2089 Viele Eigenschaften können unabhängig von der Art der Daten, die
2090 sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
2091 (@code{#f}) definiert. Dadurch wird diese Eigenschaft von LilyPond
2092 ignoriert. Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
2093 ausschalten will, die Probleme verursachen.
2099 Referenz der Interna:
2100 @rinternals{Backend}.
2103 @node Der tweak-Befehl
2104 @subsection Der @code{\\tweak}-Befehl
2105 @translationof The tweak command
2112 Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich
2113 alle fraglichen Objekte zu dem gegebenen musikalischen Moment. Manchmal
2114 will man allerdings nur ein Grob verändern, anstatt allen Grobs des
2115 aktuellen Kontextes. Das kann mit dem @code{\tweak}-Befehl erreicht
2116 werden, mit dem man Optimierungen vornehmen kann:
2119 \tweak @var{Layout-Objekt} #'@code{grob-eigenschaft} #@code{Wert}
2122 Die Angabe von @var{Layout-Objekt} ist optional.
2123 Der @code{\tweak}-Befehl wirkt sich auf das musikalische Objekt aus, dass direkt
2124 auf @code{Wert} folgt.
2127 In einigen Fällen ist es möglich, mit einem abgekürzten Befehl
2128 graphische Objekte zu verändern. Wenn Objekte direkt von einem
2129 Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl
2132 @lilypond[relative=2,verbatim]
2137 \tweak duration-log #1
2144 @cindex Akkord, eine Note verändern
2146 Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn
2147 man nur ein Element von einer Ansammlung an Elementen verändern
2148 will, die alle zum gleichen musikalischen Moment beginnen. Das
2149 kann eine Noten in einem Akkord sein, oder eine von mehreren
2150 Triolenklammern, die zur gleichen Zeit beginnen.
2152 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
2153 sich in @rlearning{Optimierungsmethoden}.
2155 Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden
2156 Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder
2157 des Kontextes angegeben werden muss. Damit das funktioniert, muss
2158 das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das
2159 er sich auswirken soll. Das ist in manchen Fällen nicht gegeben,
2160 da viele Objekte durch LilyPond automatisch eingesetzt werden.
2161 Wenn etwa eine Note interpretiert wird, die nicht Teil eines
2162 Akkords ist, fügt LilyPond implizit einen @code{ChordEvent}
2163 vor die Note ein, sodass der @code{\tweak}-Befehl von der
2164 Note getrennt wird. Wenn aber Akkord-Klammern um die Note
2165 und den @code{\tweak}-Befehl gesetzt werden, folgt der
2166 @code{ChordEvent} auf den @code{\tweak}-Befehl und befindet
2167 sich deshalb direkt vor der Note, auf die er einwirken soll,
2168 sodass die Veränderung funktioniert.
2170 An einem Beispiel demonstriert: Das funktioniert:
2173 @lilypond[relative=2,verbatim,quote]
2174 <\tweak color #red c>4
2180 @lilypond[relative=2,verbatim,quote]
2181 \tweak color #red c4
2186 Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}.
2188 Wenn mehrere gleichartige Elemente zum gleichen musikalischen
2189 Moment auftreten, kann der @code{\override}-Befehl nicht
2190 benutzt werden, um nur einen von ihnen zu verändern: hier braucht
2191 man den @code{\tweak}-Befehl. Elemente, die mehrfach zum
2192 gleichen musikalischen Moment auftreten können sind unter Anderem:
2194 @c TODO expand to include any further uses of \tweak
2196 @item Notenköpfe von Noten innerhalb eines Akkordes
2197 @item Artikulationszeichen an einer einzelnen Note
2198 @item Bindebögen zwischen Noten eines Akkordes
2199 @item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen
2202 @c TODO add examples of these
2204 @cindex Akkord, eine Noten verändern
2206 In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines
2207 anderen Notenkopfes innerhalb eines Akkordes verändert:
2209 @lilypond[relative=2,verbatim,quote]
2214 \tweak duration-log #1
2219 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
2221 @lilypond[verbatim,quote,relative=1]
2222 c-\tweak thickness #5 ( d e f)
2225 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
2226 Objekt stehen, auf das er sich bezieht. Einen ganzen Akkord kann man
2227 nicht mit @code{\tweak} verändern, weil der Akkord wie ein Kontainer
2228 ist, in dem alle Layoutelemente aus Ereignissen innerhalb von
2229 @code{EventChord} erstellt werden:
2231 @lilypond[relative=2,verbatim,quote]
2232 \tweak color #red <c e>4
2233 <\tweak color #red c e>4
2236 Der einfache @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
2237 Elemente zu verändern, die nicht direkt aus der Eingabe erstellt werden.
2238 Insbesondere Hälse, automatische Balken oder Versetzungszeichen lassen sich nicht
2239 beeinflussen, weil diese später durch die Layoutobjekte des Notenkopfs erstellt
2240 werden und nicht direkt durch
2243 Derartige indirekt erstellt Layoutobjekte können mit @code{\tweak} verändert
2244 werden, indem man die ausführliche Form des Befehls einsetzt:
2246 @lilypond[relative=2,verbatim,quote]
2247 \tweak Stem.color #red
2248 \tweak Beam.color #green c8 e
2249 <c e \tweak Accidental.font-size #-3 ges>4
2252 @code{\tweak} kann auch nicht verwendet werden,
2253 um Schlüssel oder Taktarten zu verändern, denn sie werden von
2254 dem @code{\tweak}-Befehl während der Interpretation durch
2255 automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
2257 Mehrere @code{\tweak}-Befehle können vor ein Notationselement
2258 gesetzt werden und alle werden interpretiert:
2260 @lilypond[verbatim,quote,relative=1]
2262 -\tweak style #'dashed-line
2263 -\tweak dash-fraction #0.2
2264 -\tweak thickness #3
2270 Der Strom der musikalischen Ereignisse (engl. music stream), der aus
2271 dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
2272 Elemente gehören, kann betrachtet werden, siehe
2273 @rextend{Musikalische Funktionen darstellen}. Das kann nützlich sein,
2274 wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
2275 verändert werden kann.
2278 Handbuch zum Lernen:
2279 @rlearning{Optimierungsmethoden}.
2282 @rextend{Musikalische Funktionen darstellen}.
2286 @cindex Kontrollpunkte und tweak
2287 @cindex tweak und Kontrollpunkte
2289 Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte
2290 eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
2291 wird der erste Bogen verändert, der in der Eingabedatei auftritt.
2294 @node set versus override
2295 @subsection @code{\\set} versus @code{\\override}
2296 @translationof set versus override
2298 @c TODO: überflüssig?
2301 Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen
2302 Eigenschaften verändert werden können: @code{\set} und
2303 @code{\override}. Im Grunde genommen gibt es auch zwei
2304 unterschiedliche Arten von Eigenschaften.
2306 Kontexte können Eigenschaften haben, deren Bezeichnungen
2307 üblicherweise dem Schema @code{kleinGroß} folgen. Derartige
2308 Eigenschaften sind vor allen Dingen für die Übersetzung der
2309 Musik in Notation zuständig, beispielsweise @code{localAlterations}
2310 (um zu bestimmen, ob Versetzungszeichen ausgegeben werden
2311 müssen), @code{measurePosition} (um zu bestimmen, ob eine
2312 Taktlinie gesetzt werden muss). Kontexteigenschaften können
2313 ihren Wert verändern, während ein Musikstück ausgewertet wird;
2314 @code{measurePosition} (Taktposition) ist ein gutes Beispiel
2315 hierfür. Kontexteigenschaften werden mit dem Befehl @code{\set}
2318 Dann gibt es einen Spezialtyp der Kontexeigenschaften: die
2319 Elementbeschreibung. Diese Eigenschaften werden mit
2320 @code{GroßGroß} benannt (beginnen also auch mit einem
2321 Großbuchstaben). Sie beinhalten die Standardeinstellungen
2322 für die besagten graphischen Objekte in Form einer
2323 Assosiationsliste. Siehe auch die Datei @file{scm/define-grobs.scm}
2324 für ein Beispiel zu diesen Einstellungen. Elementbeschreibungen
2325 können mit dem Befehl @code{\override} verändert werden.
2327 @code{\override} ist eigentlich eine Abkürzung:
2330 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
2334 entspricht mehr oder weniger:
2336 @c leave this long line -gp
2338 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
2341 Der Wert von @code{context} (die @qq{alist}) wird benutzt, um
2342 die Eigenschaften von einzelnen Grobs zu initiieren. Grobs haben
2343 auch Eigenschaften, die im Scheme-Stil benannt werden, also
2344 @code{wort-mit-bindestrich}. Die Werte der Grob-Eigenschaften
2345 ändern sich während des Formatierungsprozesses: Formatierung
2346 läuft im Prinzip darauf hinaus, Eigenschaften zu errechnen, indem
2347 Callback-Funktionen eingesetzt werden.
2349 @code{fontSize} ist eine besondere Eigenschaft: sie entspricht
2350 @code{\override ... #'font-size} für alle möglichen Objekte.
2351 Weil es sich hier um eine globale Änderung handelt, wurde
2352 die spezielle Form (die mit @code{\set} verändert wird) erstellt.
2356 @node Alisten verändern
2357 @subsection Alisten verändern
2358 @translationof Modifying alists
2360 Einige vom Benutzer einstellbare Eigenschaften sind intern als
2361 @emph{alists} (Assoziative Listen) dargestellt, die Paare von
2362 Schlüsseln und Werten speichern. Die Struktur einer Aliste ist:
2365 '((@var{Schlüssel1} . @var{Wert1})
2366 (@var{Schlüssel2} . @var{Wert2})
2367 (@var{Schlüssel3} . @var{Wert3})
2371 Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
2372 @code{\paper}-Umgebung ist, können ihre Schlüssel einzeln verändert
2373 werden, ohne andere Schlüssel zu beeinflussen.
2375 Um beispielsweise den Freiraum zwischen benachbarten Systemen
2376 in einer Systemgruppe zu verkleinern, kann man die
2377 @code{staff-staff-spacing}-Eigenschaft des
2378 +@code{StaffGrouper}-Grobs benutzen. Die Eigenschaft ist eine
2379 Aliste mit vier Schlüsseln: : @code{basic-distance} (Grund-Abstand),
2380 @code{minimum-distance} (minimaler Abstand), @code{padding} (Verschiebung)
2381 und @code{stretchability} (Dehnbarkeit). Die Standardwerte dieser
2382 Eigenschaft finden sich im Abschnitt @qq{Backend} der Referenz der
2383 Interna (siehe @rinternals{StaffGrouper}):
2386 '((basic-distance . 9)
2387 (minimum-distance . 7)
2389 (stretchability . 5))
2392 Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
2393 ist es, der Wert des @code{basic-distance}-Schlüssels (@code{9}) zu
2394 verändern, sodass der den gleichen Wert wie
2395 @code{minimum-distance} (@code{7}) hat. Um einen einzelnen
2396 Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
2398 @lilypond[quote,verbatim]
2399 % default space between staves
2401 \new Staff { \clef treble c''1 }
2402 \new Staff { \clef bass c1 }
2405 % reduced space between staves
2406 \new PianoStaff \with {
2407 % this is the nested declaration
2408 \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2410 \new Staff { \clef treble c''1 }
2411 \new Staff { \clef bass c1 }
2415 Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
2416 spezifische Schlüssel (@code{basic-distance} im obigen Beispiel) verändert,
2417 ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
2419 Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das
2420 Überlappungen vorkommen. Die einfachste Möglichkeit, das zu tun, wäre
2421 es, alle vier Wert auf 0 zu setzen. Man muss jedoch nicht vier
2422 Werte definieren, sondern die Eigenschaft
2423 kann mit einem Aufruf als Aliste vollständig verändert werden:
2425 @lilypond[quote,verbatim]
2426 \new PianoStaff \with {
2427 \override StaffGrouper.staff-staff-spacing =
2428 #'((basic-distance . 0)
2429 (minimum-distance . 0)
2431 (stretchability . 0))
2433 \new Staff { \clef treble c''1 }
2434 \new Staff { \clef bass c1 }
2438 Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
2439 Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
2440 gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
2441 Im Falle von @code{staff-staff-spacing} würden alle nicht genannten
2442 Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer
2443 den Wert von @code{space} hat, wenn sie nicht definiert ist). Somit sind
2444 folgende Aufrufe äquivalent:
2447 \override StaffGrouper.staff-staff-spacing =
2448 #'((basic-distance . 7))
2450 \override StaffGrouper.staff-staff-spacing =
2451 #'((basic-distance . 7)
2452 (minimum-distance . 0)
2454 (stretchability . 7))
2457 Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
2458 Standardwerte, die etwa in einer Initialisierungsdatei
2459 zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
2460 rückgängig gemacht werden. Im obigen Beispiel werden die
2461 initialisierten Standardwerte für @code{padding} und @code{minimum-distance}
2462 (definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt,
2463 den sie uninitialisiert hätten (0 in beiden Fällen). Wenn eine Eigenschaft oder
2464 Variable in Form einer Aliste (jeder Größe) definiert wird, werden
2465 immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
2466 Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
2467 bewusst alle Werte zurücksetzen will.
2469 @warning{Geschachtelte Aufrufe funktionieren nicht mit
2470 Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keyAlterations},
2471 @code{timeSignatureSettings}, usw.) Diese Eigenschaften können
2472 nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
2475 @node Nützliche Konzepte und Eigenschaften
2476 @section Nützliche Konzepte und Eigenschaften
2477 @translationof Useful concepts and properties
2481 * Richtung und Platzierung::
2482 * Abstände und Maße::
2483 * Eigenschaften des Staff-Symbols::
2485 * Sichtbarkeit von Objekten::
2487 * Drehen von Objekten::
2492 @subsection Eingabe-Modi
2493 @translationof Input modes
2495 Die Art, wie die Notation einer Eingabedatei interpretiert
2496 wird, hängt vom aktuellen Eingabemodus ab.
2498 @strong{Chord (Akkordmodus)}
2500 Man erreicht ihn durch den Befehl @code{\chordmode}. Hierdurch
2501 wird die Eingabe entsprechend der Syntax der Akkordnotation
2502 interpretiert, siehe @ref{Notation von Akkorden}. Akkorde werden als
2503 Noten auf einem System dargestellt.
2505 Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert.
2506 Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext
2507 erstellt, die Eingabe entsprechend der Syntax der Akkordnotation
2508 interpretiert und als Akkordbezeichnungen in einem
2509 @code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}.
2511 @strong{Drum (Schlagzeugmodus)}
2513 Man erreicht ihn mit dem Befehl @code{\drummode}. Die Eingabe
2514 wird entsprechend der Syntax der Schlagzeugnotation interpretiert,
2515 siehe @ref{Grundlagen der Schlagzeugnotation}.
2517 Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert.
2518 Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext
2519 erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation
2520 interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem
2521 dargestellt. Siehe @ref{Grundlagen der Schlagzeugnotation}.
2523 @strong{Figure (Ziffernmodus)}
2525 Man erreicht ihn mit dem Befehl @code{\figuremode}. Die Eingabe
2526 wird entsprechend der Syntax für Generalbass interpretiert, siehe
2527 @ref{Eingabe des Generalbass'}.
2529 Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert.
2530 Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext
2531 erstellt, die Eingabe entsprechend der Syntax für Generalbass
2532 interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext
2533 dargestellt. Siehe @ref{Grundlagen des Bezifferten Basses}.
2535 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
2537 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
2540 Um Tabulaturen zu erstellen, werden Noten oder Akkorde im
2541 Notenmodus notiert und dann in einem @code{TabStaff}-Kontext
2542 interpretiert, siehe
2543 @ref{Standardtabulaturen}.
2545 Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt
2546 es zwei Möglichkeiten. Man kann den @code{FretBoards}-Kontext
2547 einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können
2548 als Beschriftung über den Noten eingefügt werden, indem man
2549 den @code{\fret-diagram}-Befehl einsetzt (siehe
2550 @ref{Bund-Diagramm-Beschriftung}).
2552 @strong{Lyrics (Gesangstextmodus)}
2554 Man erreicht ihn mit dem Befehl @code{\lyricmode}. Die Eingabe
2555 wird entsprechend der Syntax für Silben eines Gesangstextes
2556 interpretiert, wobei optional Dauern und verknüpfte
2557 Gesangstextveränderer möglich sind, siehe @ref{Notation von Gesang}.
2559 Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics}
2560 aktiviert. Dadurch wird auch ein neuer @code{Lyrics}-Kontext
2561 erstellt und ein impliziter @code{\lyricsto}-Befehl, der den
2562 nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft.
2564 @strong{Markup (Textbeschriftungsmodus)}
2566 Man erreicht ihn mit dem Befehl @code{\markup}. Die Eingabe wird
2567 entsprechend der Syntax für Textbeschriftung interpretiert, siehe
2568 @ref{Textbeschriftungsbefehle}.
2570 @c silly work-around for texinfo broken-ness
2571 @c (@strong{Note...} causes a spurious cross-reference in Info)
2572 @b{Note (Notenmodus)}
2574 Das ist der Standardmodus. Er kann auch mit dem Befehl
2575 @code{\notemode} gefordert werden. Die Eingabe wird als Tonhöhen,
2576 Dauern, Beschriftung usw. interpretiert und als musikalische
2577 Notation auf einem Notensystem gesetzt.
2579 Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben,
2580 aber es kann in bestimmten Situationen durchaus nützlich sein,
2581 etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen
2582 Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus
2583 benutzt werden kann.
2585 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
2586 Strophen zu setzen, muss man den Notenmodus betreten:
2588 @lilypond[verbatim,relative=2,quote]
2591 \notemode{ \set stanza = \markup{ \dynamic f 1. } }
2595 \notemode{ \set stanza = \markup{ \dynamic p 2. } }
2601 @node Richtung und Platzierung
2602 @subsection Richtung und Platzierung
2603 @translationof Direction and placement
2605 Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine
2606 enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach
2607 oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere
2608 Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden,
2609 Text kann rechts, links oder mittig ausgerichtet werden usw. Die meisten
2610 dieser Entscheidungen können LilyPond direkt überlassen werden; in
2611 einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung
2612 oder eine Position zu erzwingen.
2614 @strong{Richtungseinstellung von Artikulationszeichen}
2616 Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet,
2617 wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen
2618 oben und unten wechseln, was vor allem von der Richtung der Notenhälse
2619 abhängt und etwa Bögen und Akzente betrifft.
2621 Die Standardeinstellungen können verändert werden, indem dem
2622 Artikulationszeichen ein Ausrichtungsmarkierer vorangeht. Drei
2623 derartige Ausrichtungsmarkierer sind vorhanden: @code{^} (bedeutet @qq{nach oben}), @code{_}
2624 (bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung}
2625 benutzen) normalerweise weggelassen werden. In diesem Fall wird
2626 @code{-} angenommen. Eine Richtungsanweisung ist jedoch
2627 @strong{immer} erforderlich vor
2630 @item @code{\tweak}-Befehlen
2631 @item @code{\markup}-(Textbeschriftungs-)Befehlen
2632 @item @code{\tag}-Befehlen
2633 @item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
2634 @item Fingersatzanweisungen: @w{@code{-1}}
2635 @item Abkürzungen von Artikulationen, wie @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2638 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2640 @lilypond[verbatim,quote,relative=2]
2648 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2650 Die Position oder Richtung vieler Layoutobjekte wird von der
2651 @code{direction}-Eigenschaft kontrolliert.
2653 Der Wert der @code{direction}-Eigenschaft kann auf den Wert
2654 @code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
2655 bzw. @qq{oberhalb} ist, oder auf den Wert @w{@code{-1}}, was
2656 @qq{nach unten} bzw. @qq{unterhalb} bedeutet. Die Symbole
2657 @code{UP} und @code{DOWN} können anstelle von @code{1}
2658 und @w{@code{-1}} benutzt werden. Die Standardausrichtung kann
2659 angegeben werden, indem @code{direction} auf den Wert
2660 @code{0} oder @code{CENTER} gesetzt wird. In vielen Fällen
2661 bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
2662 bestimmt werden kann. Sie haben die Form
2665 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2668 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2669 Standardausrichtung}. Siehe auch
2670 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2672 In wenigen Fällen, von denen Arpeggio das einzige häufiger
2673 vorkommende Beispiel darstellt, entscheidet der Wert von
2674 @code{direction}, ob das Objekt auf der rechten oder linken
2675 Seite das Ursprungsobjektes ausgegeben wird. In diesem Fall
2676 bedeutet @w{@code{-1}} oder @code{LEFT} @qq{auf der linken Seite}
2677 und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}. @code{0}
2678 oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
2681 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2682 rückgängig gemacht werden:
2684 @lilypond[verbatim,quote,relative=2]
2693 In polyphoner Musik ist es normalerweise besser, eine explizite
2694 Stimme (@code{voice} zu erstellen, als die Richtung eines Objektes zu
2695 ändern. Zu mehr Information siehe @ref{Mehrere Stimmen}.
2698 Handbuch zum Lernen:
2699 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2702 @ref{Mehrere Stimmen}.
2705 @node Abstände und Maße
2706 @subsection Abstände und Maße
2707 @translationof Distances and measurements
2709 @cindex Abstände, absolut
2710 @cindex Abstände, skaliert
2717 In LilyPond gibt es zwei Arten von Abständen: absolute und
2720 Absolute Abstände werden benutzt, um Ränder, Einzüge und andere
2721 Einzelheiten des Seitenlayouts zu bestimmen. Sie sind in den
2722 Standardeinstellungen in Millimetern definiert. Abstände können
2723 auch in anderen Einheiten definiert werden, indem folgende
2724 Befehle auf die Zahl folgen: @code{\mm}, @code{\cm},
2725 @code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27
2726 eines Zolls). Abstände des Seitenlayouts können auch in
2727 skalierbaren Einheiten (siehe folgenden Absatz) definiert
2728 werden, indem man den Befehl @code{\staff-space} an die
2729 Zahl hängt. Das Seitenlayout ist genauer beschrieben in
2732 Skalierbare Abstände werden immer in Einheiten von
2733 Notenlinienabständen angegeben, oder seltener in halben
2734 Notenlinienabständen. Ein Notenlinienabstand ist der
2735 Abstand zwischen zwei benachbarten Linien eines Notensystems.
2736 Der Standardwert dieser Einheit kann global geändert werden,
2737 indem man die globale Notensystemgröße ändert, oder sie
2738 kann lokal geändert werden, indem man die Eigenschaft
2739 @code{staff-space} des @code{StaffSymbol}-Objekts mit
2740 @code{\override} verändert. Skalierte Abstände verändern
2741 sich automatisch entsprechend, wenn der Notenlinienabstand
2742 entweder global oder lokal verändert wird, aber Schriftarten
2743 verändern ihre Größe nur, wenn der Notenlinienabstand
2744 global verändert wird. Mit dem globalen Notenlinienabstand
2745 kann man also auf einfach Art und Weise die gesamte Größe
2746 einer Partitur verändern. Zu Methoden, wie der globale
2747 Notenlinienabstand verändert werden kann, siehe
2748 @ref{Die Notensystemgröße einstellen}.
2752 Wenn nur eine ein Abschnitt einer Partitur in einer anderen
2753 Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer
2754 Fußnote, kann die globale Notensystemgröße nicht einfach
2755 geändert werden, weil sich diese Änderung auf die gesamte Partitur
2756 auswirken würde. In derartigen Fällen muss die Größenänderung
2757 vorgenommen werden, indem man sowohl die
2758 @code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch
2759 die Größe der Schriftarten verändert. Eine Scheme-Funktion,
2760 @code{magstep}, kann von einer Schriftartveränderung zu der
2761 entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen)
2762 konvertieren. Zu einer Erklärung und Beispielen zu ihrer
2763 Verwendung siehe @rlearning{Länge und Dicke von Objekten}.
2767 Handbuch zum Lernen:
2768 @rlearning{Länge und Dicke von Objekten}.
2772 @ref{Die Notensystemgröße einstellen}.
2775 @node Eigenschaften des Staff-Symbols
2776 @subsection Eigenschaften des Staff-Symbols
2777 @translationof Staff symbol properties
2779 @cindex Anpassen von staff symbol
2780 @cindex Notensystem, anpassen
2781 @cindex Veränderung des Notensystems
2783 Die vertikale Position der Notenlinien und die Anzahl der
2784 Notenlinien kann gleichzeitig definiert werden. Wie das
2785 folgende Beispiel zeigt, werden Notenpositionen nicht
2786 durch die Position der Notenlinien verändert:
2788 @warning{Die @code{'line-positions}-Eigenschaft
2789 verändert die @code{'line-count}-Eigenschaft. Die
2790 Anzahl der Notenlinien wird implizit definiert durch
2791 die Anzahl der Elemente in der Liste der Werte von
2792 @code{'line-positions}.}
2794 @lilypond[verbatim,quote,relative=1]
2796 \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
2801 Die Breite eines Notensystems kann verändert werden. Die Einheit
2802 ist in Notenlinienabständen. Die Abstände von Objekten
2803 in diesem Notensystem wird durch diese Einstellung nicht
2806 @lilypond[verbatim,quote,relative=1]
2808 \override StaffSymbol.width = #23
2815 @subsection Strecker
2816 @translationof Spanners
2818 Viele Objekte der Musiknotation erstrecken sich über mehrere
2819 Objekte oder gar mehrere Takte. Beispiele hierfür sind etwa
2820 Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen,
2821 Crescendo, Triller und Glissando. Derartige Objekte werden
2822 als @qq{Strecker} bezeichnet. Sie haben spezielle Eigenschaften,
2823 mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst
2824 werden kann. Einige dieser Eigenschaften gelten für alle
2825 Strecker, andere beschränken sich auf eine Untergruppe der
2828 Alle Strecker unterstützen das @code{spanner-interface}
2829 (Strecker-Schnittstelle).
2830 Ein paar, insbesondere die, die zwischen zwei Objekten eine
2831 gerade Linie ziehen, unterstützen auch das
2832 @code{line-spanner-interface} (Strecker-Linienschnittstelle).
2835 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2837 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2838 die sich auf mehrere Strecker auswirken:
2840 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
2842 Die Mindestlänge eines Streckers wird durch die
2843 @code{minimum-length}-Eigenschaft definiert. Wenn diese
2844 Eigenschaft vergrößert wird, muss in den meisten Fällen
2845 auch der Abstand der Noten zwischen den zwei Endpunkten
2846 eines Streckers verändert werden. Eine Veränderung dieser
2847 Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung,
2848 weil ihre Länge aus anderen Berechnungen hervorgeht.
2849 Einige Beispiele, wo die Eigenschaft benutzt wird, sind
2852 @lilypond[verbatim,quote,relative=2]
2855 % increase the length of the tie
2856 -\tweak minimum-length #5
2860 @lilypond[verbatim,quote,relative=2]
2862 \compressFullBarRests
2864 % increase the length of the rest bar
2865 \once \override MultiMeasureRest.minimum-length = #20
2870 @lilypond[verbatim,quote,relative=2]
2872 % increase the length of the hairpin
2873 \override Hairpin.minimum-length = #20
2877 Diese Veränderung kann auch eingesetzt werden, um die Länge
2878 von Legato- und Phrasierungsbögen zu verändern:
2880 @lilypond[verbatim,quote,relative=2]
2883 -\tweak minimum-length #5
2888 -\tweak minimum-length #5
2892 Im Falle einiger Layoutobjekte wirkt sich die
2893 @code{minimum-length}-Eigenschaft erst dann aus, wenn die
2894 @code{set-spacing-rods}-Prozedur explizit aufgerufen wird.
2895 Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft
2896 auf @code{ly:spanner::set-spacing-rods} gesetzt werden. Die
2897 Mindestlänge eines Glissandos etwa wird erst aktiv, wenn
2898 die @code{springs-and-rods}-Eigenschaft gesetzt ist:
2900 @lilypond[verbatim,quote,relative=1]
2904 % not effective alone
2905 \once \override Glissando.minimum-length = #20
2908 % effective only when both overrides are present
2909 \once \override Glissando.minimum-length = #20
2910 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
2914 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2916 @lilypond[verbatim,quote,relative=1]
2917 % not effective alone
2918 \once \override Beam.minimum-length = #20
2921 % effective only when both overrides are present
2922 \once \override Beam.minimum-length = #20
2923 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
2927 @strong{@i{Die @code{to-barline}-Eigenschaft}}
2929 Die zweite nützliche Eigenschaft des @code{spanner-interface} ist
2930 @code{to-barline} (bis zum Taktstrich). In den Standardeinstellungen
2931 ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass
2932 ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten
2933 eines Taktes beendet wird, sich nur bis zum vorhergehenden
2934 Taktstrich erstreckt. Wenn die Eigenschaft auf @qq{falsch} gesetzt
2935 wird, erstrecken sich die Strecker entsprechend über die Taktlinie
2936 hinüber und enden erst an der entsprechenden Note:
2938 @lilypond[verbatim,quote,relative=2]
2939 a \< a a a a \! a a a \break
2940 \override Hairpin.to-barline = ##f
2941 a \< a a a a \! a a a
2944 Diese Eigenschaft wirkt sich nicht auf alle Strecker aus. Im Falle
2945 von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft
2946 keinen Effekt. Das gilt auch für alle anderen Streckern, bei
2947 denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen.
2950 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2952 Objekte, die das @code{line-spanner-interface} unterstützen,
2956 @item @code{DynamicTextSpanner}
2957 @item @code{Glissando}
2958 @item @code{TextSpanner}
2959 @item @code{TrillSpanner}
2960 @item @code{VoiceFollower}
2963 Die Routine, die das Setzen der Matrizen dieser Strecker
2964 hervorruft, ist @code{ly:line-interface::print}. Diese
2965 Routine bestimmt die exakte Position der zwei Endpunkte
2966 und zeichnet eine Linie zwischen ihnen, in dem erforderlichen
2967 Stil. Die Position der zwei Endpunkte des Streckers wird
2968 in Echtzeit errechnet, aber es ist möglich, ihre
2969 Y-Koordinaten zu verändern. Die Eigenschaften, die angegeben
2970 werden müssen, sind zwei Ebenen in der Objekthierarchie
2971 tiefer angeordnet, aber die Syntax des @code{\override}-Befehls
2972 ist ziemlich einfach:
2974 @lilypond[relative=2,quote,verbatim]
2976 \once \override Glissando.bound-details.left.Y = #3
2977 \once \override Glissando.bound-details.right.Y = #-2
2981 Die Einheiten für die @code{Y}-Eigenschaft werden in
2982 Notenlinienabständen angegeben, wobei die Mittellinie des
2983 Notensystems die Null darstellt. Für das Glissando ist
2984 der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt
2985 entsprechend dem Mittelpunkt des Notenkopfes, wenn die
2986 Linie bis in die Noten hinein weitergeführt werden würde.
2988 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2989 vertikalen Position des entsprechenden Anknüpfpunkts des
2990 Streckers errechnet.
2992 Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte
2993 in den Unterlisten @code{left-broken} bzw. @code{right-broken}
2994 von @code{bound-details} abgelegt. Zum Beispiel:
2996 @lilypond[relative=2,ragged-right,verbatim,quote]
2997 \override Glissando.breakable = ##t
2998 \override Glissando.bound-details.right-broken.Y = #-3
2999 c1 \glissando \break
3003 Eine Anzahl weitere Eigenschaft der @code{left}- und
3004 @code{right}-Unterlisten der @code{bound-details}-Eigenschaft
3005 kann auf gleiche Weise wie @code{Y} verändert werden:
3009 Hiermit wird der Y-Koordinationspunkt des Endpunktes in
3010 Notenlinienabständen vom Mittelpunkt des Notensystems
3011 ausgehend angegeben. Der Endpunkt ist normalerweise
3012 der Mittelpunkt des Elternobjektes, sodass Glissandos
3013 vertikal auf den Mittelpunkt eines Notenkopfes weist.
3015 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
3016 ist sein Wert mit 0 definiert.
3019 Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
3020 relativ zum Elternobjekt. Ein Wert @w{@code{-1}} (oder
3021 @code{LEFT}) lässt die Linie an der linken Seite der Noten
3022 beginnen/enden, mit der sie verknüpft ist.
3025 Das ist der absolute X-Koordinatenpunkt des Endpunktes. Der
3026 Wert wird normalerweise in Echtzeit errechnet, und ihn zu
3027 verändern ist normalerweise nicht nützlich.
3030 Linienstrecker können Symbole am Ende oder zu Anfang des
3031 Streckers haben, die in dieser Untereigenschaft definiert
3032 werden. Die Eigenschaft ist für interne Benutzung, es
3033 wird empfohlen, die Eigenschaft @code{text} zu benutzen.
3036 Das ist eine Textbeschriftung, die ausgewertet wird und die
3037 @code{stencil}-Eigenschaft überschreibt. Sie wird eingesetzt,
3038 um @i{cresc.}, @i{tr} oder andere Texte an horizontale
3041 @lilypond[quote,ragged-right,relative=2,verbatim]
3042 \override TextSpanner.bound-details.left.text
3043 = \markup { \small \bold Slower }
3044 c2\startTextSpan b c a\stopTextSpan
3047 @item stencil-align-dir-y
3048 @item stencil-offset
3049 Wenn keine dieser beiden Eigenschaften gesetzt wird, wird
3050 die Matrize (engl. stencil) einfach am Endpunkt des Streckers,
3051 auf seiner Mittellinie (wie durch @code{X} und @code{Y}
3052 definiert) zentriert, ausgegeben. Wenn entweder
3053 @code{stencil-align-dir-y} oder @code{stencil-offset}
3054 gesetzt werden, wird das Symbol am Rand vertikal entsprechend
3055 des Endpunktes der Linie verschoben:
3057 @lilypond[relative=1,quote,verbatim]
3058 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3059 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3061 \override TextSpanner.bound-details.left.text = #"ggg"
3062 \override TextSpanner.bound-details.right.text = #"hhh"
3063 c4^\startTextSpan c c c \stopTextSpan
3066 Dabei sollte beachtet werden, dass negative Werte das Objekt
3067 nach @emph{oben} verschieben, anders als man erwarten könnte,
3068 weil der Wert @w{@code{-1}} oder @code{DOWN} bedeutet, dass
3069 die @emph{Unterkante} des Textes mit der Streckerlinie
3070 ausgerichtet wird. Ein Wert @code{1} oder @code{UP}
3071 richtet die Oberkante des Textes mit der Streckerlinie aus.
3074 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
3075 wird ein Pfeilkopf am Ende der Linie erstellt.
3078 Diese Eigenschaft kontrolliert den Abstand zwischen
3079 dem angegebenen Endpunkt der Linie und dem wirklichen Ende.
3080 Ohne Füllung (engl. padding) würde ein Glissando in der
3081 Mitte eines Notenkopfes beginnen und enden.
3085 Die musikalische Funktion @code{\endSpanners} beschließt
3086 den Strecker, der an der direkt folgenden Note beginnt,
3087 bevor er eigentlich zu ende wäre. Er wird exakt nach
3088 einer Note beendet, oder am nächsten Taktstrich, wenn
3089 @code{to-barline} auf wahr gesetzt ist und eine Taktlinie
3090 vor der nächsten Note erscheint.
3092 @lilypond[verbatim,quote,ragged-right,relative=2]
3094 c2 \startTextSpan c2 c2
3099 Wenn man @code{\endSpanners} benutzt, ist es nicht
3100 nötig, den Befehl \startTextSpan mit \stopTextSpan
3101 zu beenden, und es ist auch nicht nötig, Crescendo-Klammern
3102 mit @code{\!} zu beenden.
3106 Referenz der Interna:
3107 @rinternals{TextSpanner},
3108 @rinternals{Glissando},
3109 @rinternals{VoiceFollower},
3110 @rinternals{TrillSpanner},
3111 @rinternals{line-spanner-interface}.
3114 @node Sichtbarkeit von Objekten
3115 @subsection Sichtbarkeit von Objekten
3116 @translationof Visibility of objects
3118 @cindex Objekte, Sichtbarkeit
3119 @cindex Grobs, Sichtbarkeit
3120 @cindex Sichtbarkeit von Objekten
3122 Die Sichtbarkeit von Layout-Objekten kann auf vier Arten
3123 kontrolliert werden: Ihre Matrizen (engl stencil) können
3124 entfernt werden, sie können unsichtbar gemacht werden,
3125 sie können weiß eingefärbt werden und ihre
3126 @code{break-visibility}-Eigenschaft kann verändert werden.
3127 Die ersten drei Möglichkeiten beziehen sich auf alle
3128 Layout-Objekte, die letzte nur auf einige wenige, nämlich
3129 die @emph{zerteilbaren} Objekte. Das Handbuch zum Lernen
3130 führt in alle vier Möglichkeiten ein, siehe
3131 @rlearning{Sichtbarkeit und Farbe von Objekten}.
3133 Es gibt auch einige weitere Techniken, die sich nur auf
3134 bestimmte Layout-Objekte beziehen. Sie werden im letzten
3135 Abschnitt behandelt.
3138 * Einen stencil entfernen::
3139 * Objekten unsichtbar machen::
3140 * Objekte weiß malen::
3141 * break-visibility (unsichtbar machen) benutzen::
3146 @node Einen stencil entfernen
3147 @unnumberedsubsubsec Einen @code{stencil} entfernen
3148 @translationof Removing the stencil
3150 @cindex stencil, entfernen
3151 @cindex Matrize, entfernen
3152 @cindex Stempel (stencil), entfernen
3153 @cindex Entfernen eines Stencil
3155 Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft.
3156 Sie ist normalerweise definiert als die Funktion, die das
3157 entsprechende Objekt zeichnet. Wenn die Eigenschaft mit
3158 @code{\override} auf @code{#f} gesetzt wird, wird keine
3159 Funktion aufgerufen und also auch kein Objekt gezeichnet.
3160 Das Standardverhalten kann mit dem Befehl @code{\revert}
3161 wieder hergestellt werden.
3163 @lilypond[quote,verbatim,relative=1]
3167 \undo \omit Score.BarLine
3172 @node Objekten unsichtbar machen
3173 @unnumberedsubsubsec Objekten unsichtbar machen
3174 @translationof Making objects transparent
3176 @cindex transparent, Objekte
3177 @cindex unsichtbar, Objekte
3178 @cindex durchsichtig, Objekte
3180 Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft
3181 (@code{'transparent}),
3182 die normalerweise auf den Wert @code{#f} gesetzt ist. Wenn
3183 sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch
3184 den entsprechenden Platz ein, ist aber unsichtbar.
3186 @lilypond[quote,verbatim,relative=2]
3188 \once \hide NoteHead
3193 @node Objekte weiß malen
3194 @unnumberedsubsubsec Objekte weiß malen
3195 @translationof Painting objects white
3197 @cindex Objekte, einfärben
3198 @cindex Färben von Objekten
3199 @cindex Einfärben von Objekten
3200 @cindex Ebenen (layer)
3201 @cindex layer (Ebenen)
3202 @cindex Druckreihenfolge
3203 @cindex Objekte verändern
3204 @cindex verändern von Objekten
3205 @cindex Grobs, verändern
3207 Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die
3208 normalerweise schwarz (@code{black}) definiert ist. Wenn
3209 sie nach weiß (@code{white}) verändert wird, kann man das
3210 Objekt nicht mehr vom weißen Hintergrund unterscheiden.
3211 Wenn das Objekt jedoch andere Objekte überschneidet, wird
3212 die Farbe der Überschneidungen von der Reihenfolge entschieden,
3213 in welcher die Objekte gesetzt werden. Es kann also vorkommen,
3214 dass man die Umrisse des weißen Objektes erahnen kann, wie
3217 @lilypond[quote,verbatim,relative=2]
3218 \override Staff.Clef.color = #white
3222 Das kann man vermeiden, indem man die Satzreihenfolge der Objekte
3223 verändert. Alle Layout-Objekte haben eine @code{layer}-Eigenschaft,
3224 die auf eine ganze Zahl gesetzt sein muss. Objekte mit der
3225 niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst
3226 gesetzt, dann die nächsten Objekte in ansteigender Ordnung. Objekte
3227 mit höheren Werten überschneiden also Objekte mit niedrigeren
3228 Werten. Die meisten Objekte bekommen den Wert @code{1} zugewiesen,
3229 einige wenige Objekte, unter die auch @code{StaffSymbol} (die
3230 Notenlinien) gehört, jedoch den Wert @code{0}. Die Reihenfolge,
3231 in der Objekte mit demselben Wert gesetzt werden, ist nicht
3234 Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
3235 @code{1} für @code{layer} hat, nach den Notenlinien gesetzt
3236 (die einen Wert von @code{0} für @code{layer} haben) und
3237 überschneidet sie also. Um das zu ändern, muss dem @code{Clef}-Objekt
3238 (Notenschlüssel) ein niedrigerer Wert, etwa @w{@code{-1}}, gegeben
3239 werden, sodass es früher gesetzt wird:
3241 @lilypond[quote,verbatim,relative=2]
3242 \override Staff.Clef.color = #white
3243 \override Staff.Clef.layer = #-1
3248 @node break-visibility (unsichtbar machen) benutzen
3249 @unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen
3250 @translationof Using break-visibility
3252 @funindex break-visibility
3254 @cindex break-visibility
3256 Die meisten Layout-Objekte werden nur einmal gesetzt, aber
3257 einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und
3258 Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn
3259 die Zeile gewechselt wird: einmal am Ende des oberen Systems
3260 und ein zweites Mal zu Beginn des nächsten Systems.
3261 Derartige Objekte werden als @emph{trennbar} bezeichnet
3262 und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft,
3263 mit der ihre Sichtbarkeit an allen drei Positionen, an denen
3264 sie auftreten können, kontrolliert werden kann: zu Beginn
3265 einer Zeile, innerhalb einer Zeile, wenn sie verändert werden,
3266 und am Ende einer Zeile, wenn die Änderung hier stattfindet.
3268 Die Taktart wird beispielsweise standardmäßig nur zu Beginn des
3269 ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie
3270 sich ändert. Wenn diese Änderung am Ende eines Systems auftritt,
3271 wird die neue Taktart am Ende des aktuellen Systems als auch
3272 zu Beginn des nächsten Systems gesetzt.
3274 Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft
3275 kontrolliert, die erklärt wird in
3276 @c Leave this ref on a newline - formats incorrectly otherwise -td
3277 @rlearning{Sichtbarkeit und Farbe von Objekten}. Die Eigenschaft
3278 braucht einen Vektor von drei Booleschen Werten, die in ihrer
3279 Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile,
3280 b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt
3281 wird. Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen,
3282 wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.
3284 Die acht möglichen Kombinationen können auch durch vordefinierte
3285 Funktionen bestimmt werden, welche in der Datei @file{scm/output-lib.scm}
3286 definiert sind. Die letzten drei Spalten der folgenden Tabelle
3287 zeigen an, ob das Layout-Objekt an einer bestimmten Position
3288 sichtbar sein wird oder nicht:
3290 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {Vor} {Bei Nr.} {Nach}
3291 @headitem Funktion @tab Vektor @tab Vor @tab kein @tab Nach
3292 @headitem Form @tab Form @tab Umbruch @tab Umbruch @tab Umbruch
3294 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab ja @tab ja @tab ja
3295 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab nein @tab nein @tab ja
3296 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab nein @tab ja @tab nein
3297 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab ja @tab nein @tab nein
3298 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab ja @tab ja @tab nein
3299 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab ja @tab nein @tab ja
3300 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab nein @tab ja @tab ja
3301 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab nein @tab nein @tab nein
3304 Die Standardeinstellungen von @code{break-visibility} hängen vom
3305 Layout-Objekt ab. Die folgende Tabelle zeigt alle wichtigen Layout-Objekte,
3306 die mit @code{break-visibility} verändert werden können und die
3307 jeweiligen Standardeinstellungen der Eigenschaft:
3309 @multitable @columnfractions .3 .3 .4
3311 @headitem Layout-Objekt @tab Normaler Kontext @tab Standardeinstellung
3313 @c omit Ambitus as it appears not to be affected by break-visibility -td
3314 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3315 @item @code{BarLine} (Taktstrich) @tab @code{Score} @tab calculated
3316 @item @code{BarNumber} (Taktzahl) @tab @code{Score} @tab @code{begin-of-line-visible}
3317 @c omit the following item until it can be explained -td
3318 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated
3319 @item @code{BreathingSign} (Atemzeichen) @tab @code{Voice} @tab @code{begin-of-line-invisible}
3320 @item @code{Clef} (Schlüssel) @tab @code{Staff} @tab @code{begin-of-line-visible}
3321 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3322 @item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice} @tab @code{begin-of-line-invisible}
3323 @c omit KeyCancellation until it can be explained -td
3324 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3325 @item @code{KeySignature} (Tonart) @tab @code{Staff} @tab @code{begin-of-line-visible}
3326 @c omit LeftEdge until it can be explained -td
3327 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3328 @item @code{ClefModifier} (Oktavierungs-Acht) @tab @code{Staff} @tab @code{begin-of-line-visible}
3329 @item @code{RehearsalMark} (Übungszeichen) @tab @code{Score} @tab @code{end-of-line-invisible}
3330 @item @code{TimeSignature} (Taktart) @tab @code{Staff} @tab @code{all-visible}
3334 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
3335 Sichtbarkeit von Taktlinien zu bestimmten:
3337 @lilypond[quote,verbatim,relative=1,ragged-right]
3340 % Remove bar line at the end of the current line
3341 \once \override Score.BarLine.break-visibility = #'#(#f #t #t)
3347 Obwohl alle drei Bestandteile des Vektors, mit denen
3348 @code{break-visibility} definiert wird, vorhanden sein
3349 müssen, haben nicht alle eine Auswirkung auf jedes
3350 Layout-Objekt, und einige Kombinationen können sogar
3351 Fehler hervorrufen. Es gelten die folgenden Einschränkungen:
3355 Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
3358 Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt
3359 werden, außer wenn er nicht 1 ist.
3362 Schlüssel -- siehe unten.
3365 Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben
3366 oder alle unterdrückt. Mit @code{begin-of-line-invisible} werden
3367 sie ausgegeben, mit @code{all-invisible} unterdrückt.
3370 Tonart -- siehe unten.
3373 Oktavierungs-Acht -- siehe unten.
3378 @node Besonderheiten
3379 @unnumberedsubsubsec Besonderheiten
3380 @translationof Special considerations
3382 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
3384 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
3385 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
3387 @funindex explicitKeySignatureVisibility
3388 @funindex explicitClefVisibility
3390 Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit
3391 von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile,
3392 d.h. nach einem Zeilenumbruch. Sie hat keinen Einfluss auf die
3393 Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer
3394 expliziten Tonart- oder Schlüsseländerung in oder am Ende einer
3395 Zeile angezeigt werden. Im nächsten Beispiel ist die Tonartangabe
3396 nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
3397 @code{all-invisible} eingesetzt wurde:
3399 @lilypond[quote,verbatim,relative=1,ragged-right]
3402 % Try to remove all key signatures
3403 \override Staff.KeySignature.break-visibility = #all-invisible
3411 Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen
3412 wird von den @code{explicitKeySignatureVisibility}- und
3413 @code{explicitClefVisibility}-Eigenschaften kontrolliert. Sie
3414 entsprechen der @code{break-visibility}-Eigenschaft und beide
3415 brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten
3416 Funktionen als Argument, genau wie @code{break-visibility}.
3417 Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der
3418 Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set}
3419 eingesetzt werden. Beide sind standardmäßig auf die Funktion
3420 @code{all-visible} gesetzt. Diese Eigenschaften kontrollieren nur
3421 die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten
3422 Änderungen herrühren, und haben keinen Einfluss auf Tonarten und
3423 Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
3424 @code{break-visibility} benutzt werden.
3426 @lilypond[quote,verbatim,relative=1,ragged-right]
3429 \set Staff.explicitKeySignatureVisibility = #all-invisible
3430 \override Staff.KeySignature.break-visibility = #all-invisible
3437 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
3439 Um erinnernde Versetzungszeichen zu entfernen, die nach einer
3440 expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
3441 @code{printKeyCancellation} auf @code{#f} gesetzt werden:
3443 @lilypond[quote,verbatim,relative=1,ragged-right]
3446 \set Staff.explicitKeySignatureVisibility = #all-invisible
3447 \set Staff.printKeyCancellation = ##f
3448 \override Staff.KeySignature.break-visibility = #all-invisible
3455 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
3456 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
3458 @strong{@emph{Automatische Takte}}
3460 @funindex automaticBars
3462 @cindex Taktstriche, unterdrücken
3464 Ein Sonderfall sind die automatischen Taktstriche, die mit der
3465 Eigenschaft @code{automaticBars} im @code{Score}-Kontext
3466 ausgeschaltet werden können. Wenn sie auf @code{#f} gesetzt
3467 ist, werden Taktstrich nicht automatisch ausgegeben sondern
3468 müssen explizit mit dem @code{\bar}-Befehl eingegeben werden.
3469 Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte
3470 allerdings immer noch gezählt. Takterstellung wird später
3471 wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft
3472 wieder auf @code{#t} gesetzt wird. Wenn sie den Wert @code{#f}
3473 hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen
3478 @strong{@emph{Oktavierte Schlüssel}}
3480 @cindex oktavierte Schlüssel, Sichtbarkeit
3481 @cindex Sichtbarkeit von oktavierten Schlüsseln
3482 @cindex Schlüssel, Sichtbarkeit der Oktavierung
3484 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
3485 wird durch das @code{ClefModifier}-Layout-Objekt erstellt.
3486 Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt
3487 geerbt, sodass Veränderungen von @code{break-visibility}
3488 des @code{ClefModifier}-Layout-Objekts nicht auch noch
3489 für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.
3491 Bei expliziten Schlüsseländerungn kontrolliert die
3492 @code{explicitClefVisibility}-Eigenschaft wohl das
3493 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
3496 Handbuch zum Lernen:
3497 @rlearning{Sichtbarkeit und Farbe von Objekten}.
3501 @subsection Linienstile
3502 @translationof Line styles
3504 Einige Aufführungsanweisungen (z. B. @i{rallentando} und
3505 @i{accelerando} oder Triller werden als Text gesetzt und
3506 möglicherweise über mehrere Takte mit Linien fortgeführt,
3507 die teilweise gestrichelt oder gewellt sind.
3509 Alle benutzen die gleichen Routinen wie das Glissando,
3510 um Text und Linien zu produzieren, weshalb auch eine
3511 Veränderungen der Erscheinung auf gleiche Weise vonstatten
3512 geht. Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und
3513 die Routine, die ihn setzt, heißt @code{ly:line-interface::print}.
3514 Diese Routine bestimmt die exakte Position von zwei
3515 @i{Strecker-Punkten} und zeichnet eine Linie zwischen sie
3516 im gewünschten Linienstil.
3518 Hier einige Beispiele, welche Linienstile möglich sind
3519 und wie sie verändert werden können:
3521 @lilypond[relative=2,ragged-right,verbatim,quote]
3523 \once \override Glissando.style = #'dashed-line
3525 \override Glissando.style = #'dotted-line
3527 \override Glissando.style = #'zigzag
3529 \override Glissando.style = #'trill
3533 Die Position der Endpunkte des Streckers werden in
3534 Realzeit für jedes graphische Objekt errechnet, aber
3535 es ist möglich, sie manuell vorzugeben:
3538 @lilypond[relative=2,ragged-right,verbatim,quote]
3540 \once \override Glissando.bound-details.right.Y = #-2
3544 Der Wert von @code{Y} wird für den rechten Endpunkt auf
3545 @w{@code{-2}} gesetzt. Die linke Seite kann ähnlich angepasst
3546 werden, indem man @code{left} anstelle von @code{right} angibt.
3548 Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
3549 der vertikalen Position der linken und rechten Anbindepunkte
3550 des Streckers errechnet.
3552 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
3553 siehe @ref{Strecker}.
3556 @node Drehen von Objekten
3557 @subsection Drehen von Objekten
3558 @translationof Rotating objects
3560 Layout-Objekte und Textbeschriftungselemente können zu einem
3561 beliebigen Winkel um einen beliebigen Punkt herum gedreht
3562 werden, aber die Methode, mit der die Änderung vorgenommen
3563 werden muss, unterscheidet sich je nach Objekt.
3566 * Drehen von Layout-Objekten::
3567 * Textbeschriftung drehen::
3570 @node Drehen von Layout-Objekten
3571 @unnumberedsubsubsec Drehen von Layout-Objekten
3572 @translationof Rotating layout objects
3574 @cindex Drehen von Objekten
3575 @cindex Objekte, Drehen
3577 Alle Layout-Objekte, die das @code{grob-interface} unterstützen,
3578 können gedreht werden, indem man ihre @code{rotation}-Eigenschaft
3579 einstellt. Sie erhält eine Liste mit drei Einträgen: den
3580 Winkel der Drehung gegen den Uhrzeiger sowie die X- und
3581 Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts,
3582 um welchen herum die Drehung stattfinden soll. Der Winkel
3583 der Drehung wird in Grad angegeben, die Koordinaten in
3584 Notenlinienzwischenräumen.
3586 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
3587 durch Ausprobieren herausgefunden werden.
3589 @cindex Crescendoklammern, gedreht
3590 @cindex gedrehte Crescendoklammern
3591 @cindex schräge Crescendoklammern
3592 @cindex Klammern, Crescendo, schräg
3594 Es gibt nur wenige Situationen, in welchen die Drehung eines
3595 Layout-Objektes sinnvoll ist. Das folgende Beispiel zeigt
3596 eine sinnvolle Anwendung:
3598 @lilypond[quote,verbatim,relative=1]
3600 \override Hairpin.rotation = #'(20 -1 0)
3605 @node Textbeschriftung drehen
3606 @unnumberedsubsubsec Textbeschriftung drehen
3607 @translationof Rotating markup
3609 Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung
3610 der Befehl @code{\rotate} gesetzt wird. Der Befehl hat zwei
3611 Argumente: Den Winkel der Drehung in Grad gegen den Uhrzeiger und
3612 der Text, der gedreht dargestllt werden soll. Die Ausdehnung des
3613 Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten
3614 der x- und y-Koordinaten des gedrehten Textes. Im folgenden
3615 Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf
3616 @code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert
3617 werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
3620 @lilypond[quote,verbatim,relative=1]
3621 \override TextScript.outside-staff-priority = ##f
3622 g4^\markup { \rotate #30 "a G" }
3623 b^\markup { \rotate #30 "a B" }
3624 des^\markup { \rotate #30 "a D-Flat" }
3625 fis^\markup { \rotate #30 "an F-Sharp" }
3629 @node Fortgeschrittene Optimierungen
3630 @section Fortgeschrittene Optimierungen
3631 @translationof Advanced tweaks
3633 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3634 Aussehen des Notenbildes zu polieren.
3637 * Objekte ausrichten::
3638 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3639 * stencils verändern::
3640 * Formen verändern::
3641 * Reine und unreine Container::
3646 Handbuch zum Lernen:
3647 @rlearning{Die Ausgabe verändern},
3648 @rlearning{Mehr Information}.
3651 @ref{Die Referenz der Programminterna erklärt},
3652 @ref{Eigenschaften verändern}.
3655 @rextend{Schnittstellen für Programmierer}.
3657 Installierte Dateien:
3658 @file{scm/define-grobs.scm}.
3661 @rlsr{Tweaks and overrides}.
3663 Referenz der Interna:
3664 @rinternals{All layout objects}.
3667 @node Objekte ausrichten
3668 @subsection Objekte ausrichten
3669 @translationof Aligning objects
3671 Graphische Objekte, die das @code{self-alignment-interface} und/obder
3672 das @code{side-position-interface} unterstützen, können an einem
3673 vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden.
3674 Eine Liste derartiger Objekte findet sich in
3675 @rinternals{self-alignment-interface} und @rinternals{side-position-interface}.
3677 Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale
3678 Ausdehnung und eine vertikale Ausdehnung. Die horizontale Ausdehnung ist
3679 ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken
3680 ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen
3681 nach links mit negativen Zahlen notiert werden. Die vertikale Ausdehnung
3682 ist ein Zahlenpaar, das die Verschiebung der unteren und oberen
3683 Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach
3684 unten mit negativen Zahlen notiert werden.
3686 Die Position eines Objektes auf dem Notensystem wird mit Werten
3687 von @code{X-offset} und @code{Y-offset} angegeben. Der Wert von
3688 @code{X-offset} gibt die Verschiebung von der X-Koordinate des
3689 Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset}
3690 die Verschiebung ausgehend von der Mittellinie des Notensystemes.
3691 Die Werte von @code{X-offset} und @code{Y-offset} können direkt
3692 bestimmt werden oder durch Prozeduren errechnet werden, sodass
3693 eine Ausrichtung mit dem Elternobjekt erreicht werden kann.
3695 @warning{Viele Objekte brauchen besondere Überlegungen zu ihrer
3696 Position, weshalb in manchen Fällen manuell gesetzte Werte von
3697 @code{X-offset} oder @code{Y-offset} ignoriert oder verändert
3698 werden können, obwohl das Objekt das
3699 @code{self-alignment-interface} unterstützt. Wenn man @code{X-offset}
3700 oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende
3701 @code{self-alignment}-Eigenschaft ignoriert.}
3703 Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung
3704 von @code{Y-offset} verschoben werden, aber Änderungen von
3705 @code{X-offset} haben keine Auswirkung.
3707 Übungszeichen können an trennbaren Objekten (wie Taktstrichen,
3708 Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden.
3709 In @code{break-aligned-interface} finden sich besondere Eigenschaften,
3710 mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.
3715 @ref{Benutzung des break-alignable-interface}.
3718 @rextend{Callback functions}.
3722 * X-offset und Y-offset direkt setzen::
3723 * Das side-position-interface benutzen::
3724 * Das self-alignment-interface benutzen::
3725 * Benutzung des break-alignable-interface::
3728 @node X-offset und Y-offset direkt setzen
3729 @unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen
3730 @translationof Setting X-offset and Y-offset directly
3732 Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften
3733 vieler Objekte zugewiesen werden. Das folgende Beispiel zeigt
3734 drei Noten mit der Standardposition von Fingersatzanweisungen
3735 und die Positionen, wenn @code{X-offset} und @code{Y-offset}
3738 @lilypond[verbatim,quote,relative=2]
3745 -\tweak X-offset #-1
3752 @node Das side-position-interface benutzen
3753 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3754 @translationof Using the side-position-interface
3756 Ein Objekt, das die @code{side-position-interface}-Schnittstelle
3757 unterstützt, kann neben sein Elternobjekt gesetzt werden,
3758 sodass zwei definierte Enden der Objekte sich berühren.
3759 Das Objekt kann über, unter, rechts oder links vom
3760 Ursprungsobjekt positioniert werden. Das Ursprungsobjekt
3761 kann nicht definiert werden: es ergibt sich aus der Reihenfolge
3762 der Objekte in der Eingabe. Die meisten Objekte haben
3763 einen Notenkopf als Ursprung assoziiert.
3765 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3766 wo das Objekt platziert werden soll, wie in der Tabelle
3769 @c TODO add an example of each to the table
3771 @multitable @columnfractions .3 .3 .3
3772 @headitem @code{side-axis}- @tab @code{direction}- @tab
3773 @headitem Eigenschaft @tab Eigenschaft @tab Platzierung
3775 @item @code{0} @tab @code{-1} @tab links
3776 @item @code{0} @tab @code{1} @tab rechts
3777 @item @code{1} @tab @code{-1} @tab unten
3778 @item @code{1} @tab @code{1} @tab oben
3782 Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset}
3783 auf die Prozedur @code{ly:side-position-interface::x-aligned-side}
3784 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3785 @code{X-offset}, sodass das Objekt auf der rechten oder linken
3786 Seite des Ursprungs angeordnet wird, entsprechend dem Wert
3787 der @code{direction}-Eigenschaft.
3789 Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset}
3790 auf die Prozedur @code{ly:side-position-interface::y-aligned-side}
3791 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3792 @code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt
3793 angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft.
3798 @node Das self-alignment-interface benutzen
3799 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3800 @translationof Using the self-alignment-interface
3802 @emph{Selbstausrichtende Objekte horizontal}
3804 Die horizontale Ausrichtung eines Objektes, das die
3805 @code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle
3806 unterstützt, wird durch den Wert von @code{self-alignment-X}
3807 kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des
3808 Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self}
3809 gesetzt. @code{self-alignment-X} kann eine beliebige reale
3810 Zahl zugewiesen werden, in Einheiten der Hälfte der
3811 X-Gesamtausdehnung des Objekts. Negative Werte verschieben
3812 das Objekt nach rechts, positive nach links. Ein Wert von
3813 @code{0} zentriert das Objekt auf dem Referenzpunkt des
3814 Ursprungs, ein Wert von @w{@code{-1}} richtet die linke Ecke des
3815 Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
3816 Wert von @code{1} richtet die rechte Ecke des Objektes am
3817 Referenzpunkt des Ursprungsobjektes aus. Die Symbole
3818 @code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
3819 von @w{@code{-1}}, @code{0} und @code{1} eingesetzt werden.
3821 Normalerweise würde der @code{\override}-Befehl benutzt werden, um
3822 die Werte von @code{self-alignment-X} zu verändern, aber der
3823 @code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen
3824 an einer einzigen Note auszurichten:
3826 @lilypond[quote,verbatim,relative=1]
3828 -\tweak self-alignment-X #-1
3830 -\tweak self-alignment-X #0
3832 -\tweak self-alignment-X #RIGHT
3834 -\tweak self-alignment-X #-2.5
3835 ^"aligned further to the right"
3839 @emph{Objekte vertikal automatisch ausrichten}
3841 Objekte können auf ähnliche Weise auch vertikal aneinander
3842 ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft
3843 auf @code{ly:self-alignment-interface::y-aligned-on-self}
3844 gesetzt ist. Oft greifen jedoch auch andere Mechanismen
3845 bei der vertikalen Ausrichtung ein: Der Wert von
3846 @code{Y-offset} ist nur eine der Variablen, die für die
3847 Berechnung benutzt werden. Darum ist es kompliziert, den
3848 Wert für einige Objekte richtig anzupassen. Die Einheiten
3849 sind Halbe der vertikalen Ausdehnung des Objektes, welche
3850 normalerweise recht klein ist, sodass ziemlich große Werte
3851 erforderlich sein können. Der Wert @w{@code{-1}} richtet die
3852 untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
3853 aus, der Wert @code{0} richtet die Mitte des Objekts am
3854 Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
3855 richtet die Oberkante des Objektes am Referenzpunkt des
3856 Ursprungsobjektes aus. Die Symbole @code{DOWN}, @code{CENTER}
3857 und @code{UP} können anstelle von @w{@code{-1}}, @code{0}
3858 und @code{1} benutzt werden.
3860 @emph{Automatische Ausrichtung in beide Richtungen}
3862 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt
3863 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3866 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3867 ausrichtet, dass sie nah am Notenkopf bleibt.
3869 @lilypond[quote,verbatim,relative=2]
3871 -\tweak self-alignment-X #0.5 % move horizontally left
3872 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
3873 -\tweak self-alignment-Y #-1 % move vertically up
3880 @node Benutzung des break-alignable-interface
3881 @unnumberedsubsubsec Benutzung des @code{break-alignable-interface}
3882 @translationof Using the break-alignable-interface
3884 @cindex Ausrichtung an Objekten
3886 @funindex break-align-symbols
3888 Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich
3889 Taktstriche) ausgerichtet werden. Zu diesen Objekten gehören
3890 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
3891 @code{staff-bar}, @code{left-edge}, @code{key-cancellation},
3892 @code{key-signature} und @code{time-signature}.
3894 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3895 über dem Objekt zentriert:
3897 @lilypond[verbatim,quote,relative=1]
3898 % The RehearsalMark will be centered above the Clef
3899 \override Score.RehearsalMark.break-align-symbols = #'(clef)
3904 % The RehearsalMark will be centered above the TimeSignature
3905 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
3911 % The rehearsal mark will be centered above the Breath Mark
3912 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
3921 Eine Liste von möglichen Objekten zur Ausrichtung kann definiert
3922 werden. Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar
3923 ist (etwa durch Einstellung von @code{break-visibility} oder die
3924 expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen),
3925 werden Übungszeichen und Taktzahlen an dem ersten Objekt in der
3926 Liste ausgerichtet, dass sichtbar ist. Wenn keine Objekte in der
3927 Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet.
3928 Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle
3929 ausgerichtet, an der sich der Taktstrich befinden würde.
3931 @lilypond[verbatim,quote,relative=1]
3932 % The RehearsalMark will be centered above the Key Signature
3933 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3938 % The RehearsalMark will be centered above the Clef
3939 \set Staff.explicitKeySignatureVisibility = #all-invisible
3940 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3945 % The rehearsal mark will be centered above the Bar Line
3946 \set Staff.explicitKeySignatureVisibility = #all-invisible
3947 \set Staff.explicitClefVisibility = #all-invisible
3948 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3956 Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann
3957 verändert werden, wie das nächste Beispiel zeigt. In einer Partitur
3958 mit vielen Systemen würde man diese Einstellung für alle Systeme
3961 @lilypond[verbatim,quote,relative=1]
3962 % The RehearsalMark will be centered above the KeySignature
3963 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
3969 % The RehearsalMark will be aligned with the left edge of the KeySignature
3970 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
3974 % The RehearsalMark will be aligned with the right edge of the KeySignature
3975 \once \override Score.KeySignature.break-align-anchor-alignment = #RIGHT
3981 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3982 verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen:
3984 @lilypond[verbatim,quote,relative=1]
3985 % The RehearsalMark will be aligned with the left edge of the KeySignature
3986 % and then shifted right by 3.5 staff-spaces
3987 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
3988 \once \override Score.KeySignature.break-align-anchor = #3.5
3992 % The RehearsalMark will be aligned with the left edge of the KeySignature
3993 % and then shifted left by 2 staff-spaces
3994 \once \override Score.KeySignature.break-align-anchor = #-2
4002 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
4003 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
4004 @translationof Vertical grouping of grobs
4006 Die graphischen Objekte @code{VerticalAlignment} und
4007 @code{VerticalAxisGroup} funktionieren zusammen.
4008 @code{VerticalAxisGroup} gruppiert unterschiedliche Objekte
4009 wie Notensysteme, Gesangstext usw. zusammen.
4010 @code{VerticalAlignment} richtet die unterschiedlichen
4011 Objektgruppen dann aneinander aus. Es gibt normalerweise
4012 nur ein @code{VerticalAlignment} in einer Partitur, aber
4013 jedes Notensystem, Gesangstext usw. hat eine eigene
4014 @code{VerticalAxisGroup}.
4017 @node stencils verändern
4018 @subsection stencils verändern
4019 @translationof Modifying stencils
4021 Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft,
4022 die ein Teil von @code{grob-interface} ist. Diese Eigenschaft
4023 ist normalerweise als eine Funktion definiert, die auf das jeweilige
4024 Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild
4025 erscheint. Beispielsweise die Standardeinstellung für die
4026 @code{stencil}-Eigenschaft von @code{MultiMeasureRest}
4027 (Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}.
4029 Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man
4030 die @code{stencil}-Eigenschaft verändert, sodass sie auf eine
4031 andere, speziell geschriebene Prozedur verweist. Das erfordert
4032 einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt
4033 einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse
4036 Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die
4037 Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print}
4038 und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen,
4039 in welcher dann die Textbeschriftung definiert wird, mit der
4040 das entsprechende Symbol dargestellt wird. Aufgrund der
4041 Flexibilität der Textbeschriftung ist hier sehr viel möglich.
4042 Siehe zu Details insbesondere
4043 @ref{Graphische Notation innerhalb einer Textbeschriftung}.
4045 Das folgende Beispiel zeigt diese Methode, indem das Symbol
4046 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
4049 @lilypond[verbatim,quote]
4051 \once \override NoteHead.stencil = #ly:text-interface::print
4052 \once \override NoteHead.text = \markup {
4054 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4055 \musicglyph #"noteheads.s2cross"
4063 Alle Schriftzeichen in der feta-Schriftart können
4064 mit dem @code{\musicglyph}-Befehl erreicht werden.
4065 Siehe auch @ref{Die Feta-Schriftart}.
4069 @ref{Graphische Notation innerhalb einer Textbeschriftung},
4070 @ref{Text formatieren},
4071 @ref{Textbeschriftungsbefehle},
4072 @ref{Die Feta-Schriftart}.
4076 @node Formen verändern
4077 @subsection Formen verändern
4078 @translationof Modifying shapes
4084 @node Bögen verändern
4085 @unnumberedsubsubsec Bögen verändern
4086 @translationof Modifying ties and slurs
4088 @cindex Bögen, verändern
4089 @cindex Bindebögen, verändern
4090 @cindex Legatobögen, verändern
4091 @cindex Bézier-Kurven
4092 @cindex Kontrollpunkte, Bézier-Kurven
4094 Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven
4095 dritter Ordnung gezeichnet. Wenn die Form eines automatischen
4096 Bogens nicht optimal ist, kann sie manuell verändert werdne,
4097 indem man die vier erforderlichen Kontrollpunkte angibt.
4099 Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven
4100 bezeichnet) werden durch vier Kontrollpunkte definiert. Der
4101 erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve
4102 an. Die zwei Punkte dazwischen werden benutzt, um die Form
4103 der Kurve zu bestimmen. Im Internet gibt es Animationen,
4104 die illustrieren, wie eine derartige Kurve gezeichnet wird,
4105 aber die folgende Beschreibung kann hilfreich sein. Die
4106 Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten,
4107 wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt
4108 zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin
4109 krümmt. Die Form der Kurve wird vollständig von den vier
4112 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
4113 erscheint, und wo auch @code{\tieDown} das Problem nicht
4116 @lilypond[verbatim,quote,relative=1]
4120 { r4 <g c,> <g c,> <g c,> }
4124 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
4125 Kontrollpunkte manuell zu verändern:
4127 Die Koordinaten von Bézierkontrollpunkten werden in
4128 Notenlinienzwischenräumen angegeben. Die X-Achse
4129 ist relativ zum Referenzpunkt der Note, an die der Bogen
4130 angefügt wird, und die Y-Achse relativ zur Mittellinie
4131 des Notensystems. Die Koordinaten werden als eine Liste
4132 von vier Paaren an realen Dezimalzahlen eingegeben. Eine
4133 Möglichkeit ist es, die Koordinaten der zwei Endpunkte
4134 zu schätzen und dann die zwei Zwischenpunkte zu erraten.
4135 Die optimalen Werte können nur durch Ausprobieren gefunden
4138 Es lohnt sich daran zu denken, dass eine symmetrische Kurve
4139 symmetrische Kontrollpunkte benötigt, und dass Bézierkurven
4140 die nützliche Eigenschaft haben, dass eine Transformation
4141 der Kurve wie eine Übersetzung, Drehung oder Skalierung
4142 der Kurve erreicht werden kann, indem man die gleiche
4143 Skalierung auf die Kontrollpunkte anwendet.
4145 In dem obigen Beispiel geben folgende Werte einen
4146 zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt
4147 vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt
4150 @lilypond[verbatim,quote,relative=1]
4153 \once \override Tie.control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
4157 { r4 <g c,> <g c,> <g c,> }
4163 Es ist nicht möglich, die Form von Bögen anhand ihrer
4164 @code{control-points}-Eigenschaft zu verändern, wenn
4165 mehrere Binde- oder Legatobögen zum gleichen musikalischen Moment
4166 auftreten, nicht einmal mit dem @code{\tweak}-Befehl. Die Eigenschaft
4167 @code{tie-configuration} von @code{TieColumn} kann jedoch verändert
4168 werden, sodass Startlinie und Richtung wie benötigt platziert werden.
4171 Referenz der Interna:
4172 @rinternals{TieColumn}.
4175 @cindex Scheme, reine Container
4176 @cindex Scheme, unreine Container
4177 @cindex reine Container, Scheme
4178 @cindex unreine Container, Scheme
4179 @cindex horizontale Platzierung, verändern
4181 @node Reine und unreine Container
4182 @subsection Reine und unreine Container
4183 @translationof Unpure-pure containers
4185 Unreine und reine Container (engl. unpure/pure containers) sind
4186 nützlich, wenn man die Berechnungen der Platzierungen für die
4187 @emph{Y-Achse} verändern will, insbesondere für @code{Y-offset}
4188 und @code{Y-extent}. Mit diesen Containern kann die Veränderung
4189 durch eine Scheme-Funktion anstelle einer direkten Zahl oder eines
4190 Paares vorgenommen werden.
4192 Für bestimmte Grobs basiert die Eigenschaft @code{Y-extent} auf
4193 der @code{stencil}-Eigenschaft. Wenn diese mit @code{\override}
4194 verändert werden soll, braucht man eine zusätzliche Veränderung
4195 von @code{Y-extent} mit einem unreinen-reinen Container. Wenn eine
4196 Funktion @code{Y-offset} und/oder @code{Y-extent} verändert, wird
4197 angenommen, dass dadurch Zeilenumbruchsberechnungen zu früh während
4198 der Kompilation aufgerufen werden. Die Funktion wird also überhaupt
4199 nicht ausgewertet (und gibt also normalerweise den Wert @samp{0} oder
4200 @samp{'(0 . 0)} zurück), wodurch sich Zusammenstöße ergeben können.
4201 Eine @qq{saubere} Funktion beeinflusst keine Eigeschaften, Objekte
4202 oder Grob-Suizide, weshalb ihre Werte, die sich auf @code{Y-axis}
4203 beziehen, richtig berechnet werden.
4205 Es gibt zuzeit etwa 30 Funktionen, die schon als @qq{sauber} erachtet
4206 werden, und unsaubere-saubere Container sind eine Möglichkeit, auch
4207 Funktionen, die sich nicht auf dieser Liste befinden, als @qq{sauber}
4208 zu markieren. Die @qq{saubere} Funktion wird ausgewertet, @emph{bevor}
4209 Seitenumbruch stattfindet, sodass die horizontale Platzierung
4210 @qq{rechtzeitig} stattfindet. Die @qq{unsaubere} Funktion wird dann
4211 @emph{nach} dem Seitenumbruch ausgewertet.
4213 @warning{Da es schwierig ist, immer sicher zu sein, welche Funktionen sich
4214 auf dieser Liste befinden, wird empfohlen, dass die selbsterstellten
4215 @qq{sauberen} Funktionen nicht die Grobs @code{Beam} oder @code{VerticalAlignment}
4218 Ein unsauberer-sauberer Container wird wie folgend erstellt:
4220 @code{(ly:make-unpure-pure-container f0 f1)}
4222 wobei @code{f0} eine Fuktion ist, die @var{n} Arguments braucht
4223 (@var{n >= 1}) und deren erstes Argument immer der Grob sein muss.
4224 Das ist die Funktion, die das eigentliche Resultat ausgibt. @var{f1}
4225 ist die Funktion, die als @qq{sauber} bezeichnet wird, und braucht @var{n + 2}
4226 Argumente. Wiederum muss das erste Argument immer der Grob sein, aber
4227 das erste und zweite Argument sind @qq{Beginn-} und @qq{Endeargumente}.
4229 @var{start} (Beginn) und @var{end} (Ende) sind absichtlich
4230 nur Platzhalter, die nur für die Strecker gelten (etwa @code{Hairpin} oder
4231 @code{Beam}), die unterschiedliche Höhenberechnungen je nach beginnender und
4232 endender Note ausgeben können.
4234 Der Rest sind andere Argumente für die erste Funktion (es können auch
4235 Null sein, wenn @var{n = 1}).
4237 Die Ergebnisse der zweiten Funktion werden als Näherungswert des benötigten
4238 Wertes benutzt, welche dann von der ersten Funktion eingesetzt wird,
4239 um den wirklichen Wert auszugeben, mit dem dann sehr viel später im
4240 Layoutprozess die Platzierung justiert werden soll.
4242 @lilypond[verbatim,quote,ragged-right]
4243 #(define (square-line-circle-space grob)
4244 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4245 (notename (ly:pitch-notename pitch)))
4246 (if (= 0 (modulo notename 2))
4247 (make-circle-stencil 0.5 0.0 #t)
4248 (make-filled-box-stencil '(0 . 1.0)
4251 squareLineCircleSpace = {
4252 \override NoteHead.stencil = #square-line-circle-space
4255 smartSquareLineCircleSpace = {
4256 \squareLineCircleSpace
4257 \override NoteHead.Y-extent =
4258 #(ly:make-unpure-pure-container
4259 ly:grob::stencil-height
4260 (lambda (grob start end) (ly:grob::stencil-height grob)))
4263 \new Voice \with { \remove "Stem_engraver" }
4265 \squareLineCircleSpace
4267 \smartSquareLineCircleSpace
4272 Im ersten Takt weiß die Layoutmaschine ohne den unsauberen-sauberen
4273 Container nicht die Breite des Notenkopfes und lässt ihn deshalb mit
4274 den Versetzungszeichen zusammenstoßen. Im zweiten Takt, mit
4275 unreinen-reinen Containern, weiß die Layoutmaschine die Breite
4276 des Notenkopfes und vermeidet den Zusammenstoßf, indem die Zeile
4277 entsprechend verlängert wird.
4279 Normalerweise können für eine einfache Berechnungen fast identische
4280 Funktionen für den @qq{unsauberen} und @qq{sauberen} Teil benutzt
4281 werden, indem nur die Zahl der Argumente und die Reichweite der
4282 Funktion verändert wird.
4284 @warning{Wenn eine Funktion als @qq{sauber} bezeichnet ist und das aber
4285 nicht ist, können unerwartete Ergebnisse auftreten.}
4288 @node Musikfunktionen benutzen
4289 @section Musikfunktionen benutzen
4290 @translationof Using music functions
4292 @c TODO -- add @seealso, etc. to these subsections
4294 Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken
4295 wiederverwendet werden sollen, bietet es sich oft an, den
4296 @qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu
4297 erstellen. In diesem Abschnitt sollen nur @emph{Ersetzungen}
4298 erklärt werden, wo es darum geht, eine Variable mit einem Stück
4299 LilyPond-Code zu ersetzen. Andere komplexere Funktionen werden
4300 beschrieben in @rextend{Musikalische Funktionen}.
4303 * Syntax der Ersetzungsfunktion::
4304 * Beispiele der Ersetzungsfunktionen::
4307 @node Syntax der Ersetzungsfunktion
4308 @subsection Syntax der Ersetzungsfunktion
4309 @translationof Substitution function syntax
4311 Es ist einfach eine Funktion zu erstellen, die eine Variable
4312 in LilyPond-Code umwandelt. Die generelle Form dieser
4317 #(define-music-function
4318 (parser location @var{Arg1} @var{Arg2} @dots{})
4319 (@var{Typ1?} @var{Typ2?} @dots{})
4321 @var{@dots{}Noten@dots{}}
4328 @multitable @columnfractions .33 .66
4329 @item @code{@var{ArgN}}
4330 @tab @var{n}tes Argument
4332 @item @code{@var{TypN?}}
4333 @tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}}
4334 den Wert @code{#t} ausgibt.
4336 @item @code{@var{@dots{}Noten@dots{}}}
4337 @tab normale LilyPond-Eingabe, wobei @code{$} (wenn nur LilyPond-Konstruktionen
4338 erlaubt sind) oder @code{#} (um es als Scheme-Wert oder Argument einer
4339 musikalischen Funktionen oder als Noten innerhalb von Notenlisten einzusetzen) benutzt wird, um
4340 Argumente zu referenzieren (etwa @samp{$Arg1}).
4343 Die @code{parser} und @code{location}-Argumente sind zwingend und
4344 werden in einigen fortgeschrittenen Situationen benutzt, wie sie
4345 im @qq{Erweitern}-Handbuch beschrieben werden (siehe
4346 @rextend{Musikalische Funktionen}). In Ersetzungsfunktionen
4347 gehen Sie einfach sicher, dass sie die beiden Wörter auch mit
4350 Die Liste der Typenprädikate ist auch notwendig. Einige der
4351 häufigsten Typenprädikate, die in musikalischen Funktionen
4352 benutzt werden, sind:
4356 cheap-list? @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
4368 Eine Liste aller Typprädikate findet sich unter
4369 @ref{Vordefinierte Typprädikate}. Eigene Typprädikate
4376 @ref{Vordefinierte Typprädikate}.
4379 @rextend{Musikalische Funktionen}.
4381 Installierte Dateien:
4382 @file{lily/music-scheme.cc},
4384 @file{scm/lily.scm}.
4387 @node Beispiele der Ersetzungsfunktionen
4388 @subsection Beispiele der Ersetzungsfunktionen
4389 @translationof Substitution function examples
4391 Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen.
4392 Sie sind nicht vollständig, sondern sollen einige der
4393 Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.
4395 Im ersten Beispiel wird eine Funktione definiert, die
4396 das Verschieben von @code{TextScript} erleichtert:
4398 @lilypond[quote,verbatim,ragged-right]
4400 #(define-music-function
4401 (parser location padding)
4404 \once \override TextScript.padding = #padding
4408 c4^"piu mosso" b a b
4410 c4^"piu mosso" d e f
4412 c4^"piu mosso" fis a g
4416 Neben Zahlen können auch musikalische Ausdrücke wie Noten
4417 als Argumente für musikalische Funktionen eingesetzt werden:
4419 @lilypond[quote,verbatim,ragged-right]
4421 #(define-music-function
4422 (parser location note)
4425 \tweak NoteHead.stencil #ly:text-interface::print
4426 \tweak NoteHead.text
4427 \markup \musicglyph #"custodes.mensural.u0"
4428 \tweak Stem.stencil ##f
4432 \relative c' { c4 d e f \custosNote g }
4435 Ersetzungsfunktionen mit mehrfachen Argumenten können definiert
4438 @lilypond[quote,verbatim,ragged-right]
4440 #(define-music-function
4441 (parser location padding tempotext)
4444 \once \override Score.MetronomeMark.padding = #padding
4445 \tempo \markup { \bold #tempotext }
4449 \tempo \markup { "Low tempo" }
4451 \tempoPadded #4.0 "High tempo"