| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Modifying properties
| 5.3.1 Grundlagen zum Verändern von Eigenschaften | ||
5.3.2 Der \set-Befehl | ||
5.3.3 Der \\override-Befehl | ||
5.3.4 Der \tweak-Befehl | ||
5.3.5 \\set versus \\override | ||
| 5.3.6 Alisten verändern |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Overview of modifying properties
Jeder Kontext ist verantwortlich für die Erstellung bestimmter graphischer Objekte. Die Einstellungen für diese Objekte werden auch in dem Kontext gespeichert. Wenn man diese Einstellungen verändert, kann die Erscheinung der Objekte geändert werden.
Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften. Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext beziehen und seine Darstellung beinflussen. Grob-Eigenschaften dagegen wirken sich nur auf bestimmte graphische Objekte aus, die in einem Kontext dargestellt werden.
Die \set- und \unset-Befehle werden benutzt, um die Werte
von Kontexteigenschaften zu ändern. Die Befehle \override und
\revert hingegen verändern die Werte von Grob-Eigenschaften.
Referenz der Interna: (internals)OverrideProperty in Abschnitt ‘OverrideProperty’ in Referenz der Interna, (internals)RevertProperty in Abschnitt ‘RevertProperty’ in Referenz der Interna, (internals)PropertySet in Abschnitt ‘PropertySet’ in Referenz der Interna, (internals)Backend in Abschnitt ‘Backend’ in Referenz der Interna, (internals)All layout objects in Abschnitt ‘All layout objects’ in Referenz der Interna.
Das Back-end ist nicht sehr streng bei der Überprüfung der Typen von Objekteigenschaften. Auf sich selbst verweisende Bezüge in Scheme-Werten der Eigenschaften können Verzögerung oder einen Absturz des Programms hervorrufen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\set-Befehl@translationof The set command
Jeder Kontext kann unterschiedliche Eigenschaften besitzen,
Variablen, die in diesem Kontext definiert sind. Sie können
während der Interpretation des Kontextes verändert werden. Hierzu
wird der \set-Befehl eingesetzt:
\set Kontext.Eigenschaft = #Wert |
Wert ist ein Scheme-Objekt, weshalb ihm # vorangestellt
werden muss.
Kontexteigenschaften werden üblicherweise mit kleinGroßbuchstabe
benannt. Sie kontrollieren vor allem die Übersetzung von Musik in
Notation, wie etwa localAlterations, welche bestimmt, wann
ein Taktstrich gesetzt werden muss. Kontexteigenschaften können
ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
wird. Ein gutes Beispiel dafür ist measurePosition, was die
Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem
\set-Befehl verändert.
Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
Kontexteigenschaft skipBars (Takte überspringen) auf #t
(wahr) gesetzt wird:
R1*2 \set Score.skipBars = ##t R1*2
Wenn das Kontext-Argument ausgelassen wird, bezieht sich
der Befehl auf den gerade aktiven unterstmöglichen Kontext,
üblicherweise ChordNames, Voice oder
Lyrics.
\set Score.autoBeaming = ##f \relative { e''8 e e e \set autoBeaming = ##t e8 e e e } \\ \relative { c''8 c c c c8 c c c }
Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
Eigenschaft enthält, die verändert werden soll. Wenn man
beispielsweise skipBars aus dem oberen Beispiel
ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
keine Auswirkung, weil er sich auf den Voice-Kontext
bezieht, die Eigenschaft sich aber im Score-Kontext
befindet:
R1*2 \set skipBars = ##t R1*2
Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter
Kontext angegeben wird, etwa Staff, dann beziehen sich
die Änderungen auf alle Stimmen (Voice), die in diesem
Kontext enthalten sind.
Es gibt auch einen \unset-Befehl:
\unset Kontext.Eigenschaft |
der bewirkt, dass die vorgenommenen Definitionen für Eigenschaft
entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen
Kontext rückgängig. Wenn also im Staff-Kontext die
Bebalkung ausgeschaltet wird:
\set Score.autoBeaming = ##t \relative { \unset autoBeaming e''8 e e e \unset Score.autoBeaming e8 e e e } \\ \relative { c''8 c c c c8 c c c }
Wie für \set muss das Kontext-Argument für den untersten
Kontext nicht mitangegeben werden. Die zwei Versionen
\set Voice.autoBeaming = ##t \set autoBeaming = ##t |
verhalten sich gleich, wenn die gegenwärtige Basis der
Voice-Kontext ist.
Einstellungen, die nur einmal vorgenommen werden sollen, können
mit \once notiert werden, etwa:
c''4 \once \set fontSize = #4.7 c''4 c''4
Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften findet sich in der Referenz der Interna, siehe (internals)Tunable context properties in Abschnitt ‘Tunable context properties’ in Referenz der Interna.
Internals Reference:
(internals)Tunable context properties in Abschnitt ‘Tunable context properties’ in Referenz der Interna.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\\override-Befehl@translationof The override command
Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
Grob-Beschreibungen werden mit GroßGroßbuchstabe benannt. Sie
enthalten „Standardeinstellungen“ für ein bestimmtes Grob als eine
assoziative Liste. Siehe ‘scm/define-grobs.scm’ für die
Einstellungen aller Grob-Beschreibungen. Grob-Beschreibungen werden
mit \override verändert.
\override ist eigentlich eine Kurzform, der Befehl
\override Kontext.GrobBezeichnung #'Eigenschaft = #Wert |
ist äquivalent zu
\set Kontext.GrobBezeichnung =
#(cons (cons 'Eigenschaft Wert)
<vorheriger Wert von Kontext.GrobBezeichnung>)
|
Der Wert von Kontext.GrobBezeichnung (die assoz. Liste „alist“) wird benutzt um die Eigenschaften von individuellen Grobs
zu initialisieren. Grobs haben Eigenschaften, die im Scheme-Stil mit
bindestrich-wörtern benannt sind. Diese Werte der Grob-Eigenschaften
verändern sich während des Notensetzens: LilyPonds Notensatz heißt im
Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
man die thickness-Eigenschaft des Stem-Objekts verändert:
c4 c \override Voice.Stem.thickness = #3.0 c4 c
Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext benutzt:
{ \override Staff.Stem.thickness = #3.0 << { e4 e \override Stem.thickness = #0.5 e4 e } \\ { c4 c c c } >> }
Die Auswirkungen von \override können mit \revert wieder
rückgängig gemacht werden:
c4 \override Voice.Stem.thickness = #3.0 c4 c \revert Voice.Stem.thickness c4
Die Auswirkungen von \override und \revert wirken sich auf alle
Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
{ << { e4 \override Staff.Stem.thickness = #3.0 e4 e e } \\ { c4 c c \revert Staff.Stem.thickness c4 } >> }
\once kann zusammen mit \override benutzt werden,
um nur den aktuellen Zeitwert zu verändern:
{ << { \override Stem.thickness = #3.0 e4 e e e } \\ { c4 \once \override Stem.thickness = #3.0 c4 c c } >> }
Referenz der Interna: (internals)Backend in Abschnitt ‘Backend’ in Referenz der Interna.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\tweak-Befehl@translationof The tweak command
Wenn man Grob-Eigenschaften mit \override verändert, verändern sich
alle fraglichen Objekte zu dem gegebenen musikalischen Moment. Manchmal
will man allerdings nur ein Grob verändern, anstatt allen Grobs des
aktuellen Kontextes. Das kann mit dem \tweak-Befehl erreicht
werden, mit dem man Optimierungen vornehmen kann:
\tweak Layout-Objekt #'grob-eigenschaft #Wert |
Die Angabe von Layout-Objekt ist optional.
Der \tweak-Befehl wirkt sich auf das musikalische Objekt aus, dass direkt
auf Wert folgt.
Eine Einleitung der Syntax und Benutzungen des \tweak-(Optimierungs)-Befehls findet sich in
(learning)Optimierungsmethoden in Abschnitt ‘Optimierungsmethoden’ in Handbuch zum Lernen.
Wenn mehrere gleichartige Elemente zum gleichen musikalischen
Moment auftreten, kann der \override-Befehl nicht
benutzt werden, um nur einen von ihnen zu verändern: hier braucht
man den \tweak-Befehl. Elemente, die mehrfach zum
gleichen musikalischen Moment auftreten können sind unter Anderem:
In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines anderen Notenkopfes innerhalb eines Akkordes verändert:
< c'' \tweak color #red d'' g'' \tweak duration-log #1 a'' > 4
\tweak kann auch benutzt werden, um Bögen zu verändern:
\relative { c'-\tweak thickness #5 ( d e f) }
Damit der \tweak-Befehl funktioniert, muss er direkt vor dem
Objekt stehen, auf das er sich bezieht. Einen ganzen Akkord kann man
nicht mit \tweak verändern, weil der Akkord wie ein Kontainer
ist, in dem alle Layoutelemente aus Ereignissen innerhalb von
EventChord erstellt werden:
\tweak color #red <c e>4 <\tweak color #red c e>4
Der einfache \tweak-Befehl kann nicht eingesetzt werden, um
Elemente zu verändern, die nicht direkt aus der Eingabe erstellt werden.
Insbesondere Hälse, automatische Balken oder Versetzungszeichen lassen sich nicht
beeinflussen, weil diese später durch die Layoutobjekte des Notenkopfs erstellt
werden und nicht direkt durch
den Quelltext.
Derartige indirekt erstellt Layoutobjekte können mit \tweak verändert
werden, indem man die ausführliche Form des Befehls einsetzt:
\tweak Stem.color #red \tweak Beam.color #green c''8 e'' <c'' e'' \tweak Accidental.font-size #-3 ges''>4
\tweak kann auch nicht verwendet werden,
um Schlüssel oder Taktarten zu verändern, denn sie werden von
dem \tweak-Befehl während der Interpretation durch
automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
Mehrere \tweak-Befehle können vor ein Notationselement
gesetzt werden und alle werden interpretiert:
c' -\tweak style #'dashed-line -\tweak dash-fraction #0.2 -\tweak thickness #3 -\tweak color #red \glissando f''
Der Strom der musikalischen Ereignisse (engl. music stream), der aus
dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
Elemente gehören, kann betrachtet werden, siehe
(extending)Musikalische Funktionen darstellen in Abschnitt ‘Musikalische Funktionen darstellen’ in Extending. Das kann nützlich sein,
wenn man herausfinden will, was mit dem \tweak-Befehl
verändert werden kann.
Handbuch zum Lernen: (learning)Optimierungsmethoden in Abschnitt ‘Optimierungsmethoden’ in Handbuch zum Lernen.
Erweitern: (extending)Musikalische Funktionen darstellen in Abschnitt ‘Musikalische Funktionen darstellen’ in Extending.
Der \tweak-Befehl kann nicht benutzt werden, um die Kontrollpunkte
eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
wird der erste Bogen verändert, der in der Eingabedatei auftritt.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\\set versus \\override@translationof set versus override
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Modifying alists
Einige vom Benutzer einstellbare Eigenschaften sind intern als alists (Assoziative Listen) dargestellt, die Paare von Schlüsseln und Werten speichern. Die Struktur einer Aliste ist:
'((Schlüssel1 . Wert1) (Schlüssel2 . Wert2) (Schlüssel3 . Wert3) …) |
Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
\paper-Umgebung ist, können ihre Schlüssel einzeln verändert
werden, ohne andere Schlüssel zu beeinflussen.
Um beispielsweise den Freiraum zwischen benachbarten Systemen
in einer Systemgruppe zu verkleinern, kann man die
staff-staff-spacing-Eigenschaft des
+StaffGrouper-Grobs benutzen. Die Eigenschaft ist eine
Aliste mit vier Schlüsseln: : basic-distance (Grund-Abstand),
minimum-distance (minimaler Abstand), padding (Verschiebung)
und stretchability (Dehnbarkeit). Die Standardwerte dieser
Eigenschaft finden sich im Abschnitt „Backend“ der Referenz der
Interna (siehe
(internals)StaffGrouper in Abschnitt ‘StaffGrouper’ in Referenz der Interna):
'((basic-distance . 9) (minimum-distance . 7) (padding . 1) (stretchability . 5)) |
Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
ist es, der Wert des basic-distance-Schlüssels (9) zu
verändern, sodass der den gleichen Wert wie
minimum-distance (7) hat. Um einen einzelnen
Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
% default space between staves \new PianoStaff << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >> % reduced space between staves \new PianoStaff \with { % this is the nested declaration \override StaffGrouper.staff-staff-spacing.basic-distance = #7 } << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >>
Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
spezifische Schlüssel (basic-distance im obigen Beispiel) verändert,
ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das Überlappungen vorkommen. Die einfachste Möglichkeit, das zu tun, wäre es, alle vier Wert auf 0 zu setzen. Man muss jedoch nicht vier Werte definieren, sondern die Eigenschaft kann mit einem Aufruf als Aliste vollständig verändert werden:
\new PianoStaff \with { \override StaffGrouper.staff-staff-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 0) (stretchability . 0)) } << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >>
Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
Im Falle von staff-staff-spacing würden alle nicht genannten
Schlüsselwerte auf 0 gesetzt (außer stretchability, welche immer
den Wert von space hat, wenn sie nicht definiert ist). Somit sind
folgende Aufrufe äquivalent:
\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
(stretchability . 7))
|
Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
Standardwerte, die etwa in einer Initialisierungsdatei
zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
rückgängig gemacht werden. Im obigen Beispiel werden die
initialisierten Standardwerte für padding und minimum-distance
(definiert in ‘scm/define-grobs.scm’) auf den Standard zurückgesetzt,
den sie uninitialisiert hätten (0 in beiden Fällen). Wenn eine Eigenschaft oder
Variable in Form einer Aliste (jeder Größe) definiert wird, werden
immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
bewusst alle Werte zurücksetzen will.
Achtung: Geschachtelte Aufrufe funktionieren nicht mit
Kontexteigenschaften (wie etwa beamExceptions, keyAlterations,
timeSignatureSettings, usw.) Diese Eigenschaften können
nur verändert werden, indem man sie vollständig als Alisten umdefiniert.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] |
Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.
Andere Sprachen: English, català, español, français, italiano, 日本語.
Über die automatische Sprachauswahl.