[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

4.2 Die Referenz der Programminterna

@translationof The Internals Reference manual


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

4.2.1 Eigenschaften von Layoutobjekten

@translationof Properties of layout objects

Angenommen, in Ihrer Partitur tritt ein Legatobogen auf, der Ihrer Meinung nach zu dünn ausgefallen ist. Sie würden ihn gerne etwas schwerer gezeichnet sehen. Wie gehen Sie vor? Von den Anmerkungen in früheren Abschnitten wissen Sie schon, dass LilyPond sehr flexibel ist und eine derartige Modifikation möglich sein sollte, und Sie erraten vielleicht, dass ein \override-Befehl angebracht ist. Aber gibt es eine Eigenschaft für die Dicke eines Legatobogens (engl. slur), und wenn es sie gibt, auf welche Weise lässt sie sich verändern? Hier kommt die Referenz der Interna zur Geltung. Dort finden sich alle Informationen, um den beschriebenen und alle anderen \override-Befehle zu konstruieren.

Bevor Sie jetzt in die Referenz der Interna wechseln, ist eine Warnung angebracht. Es handelt sich um ein Referenzdokument, was heißt, dass es sehr wenig oder gar keine Erklärungen enthält: seine Aufgabe ist es, Information klar und genau darzustellen. Das bedeutet, dass es auf den ersten Blick entmutigend wirkt. Die Einführung und Erklärung in diesem Abschnitt wird Ihnen aber schnell ermöglichen, genau die Information aus der Referenz zu entnehmen, die Sie benötigen. Beachten Sie, dass die Referenz der Interna nur auf Englisch existiert. Um die Eigenschaftsbezeichnung eines bestimmten Objektes zu finden, können Sie das Glossar (siehe (music-glossary)Top in Abschnitt ‘Musikglossar’ in Glossar) verwenden, in dem die englischen Begriffe in viele andere Sprachen übersetzt sind.

Das Vorgehen soll an einem konkreten Beispiel einer echten Komposition demonstriert werden. Hier das Beispiel:

 
{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

Angenommen also, wir wollen die Legatobögen etwas dicker setzten. Ist das möglich? Die Legatobögen sind mit Sicherheit ein Layout-Objekt, die Frage muss also lauten: „Gibt es eine Eigenschaft von Legatobögen, die die Dicke bestimmt?“ Um diese Frage zu beantworten, müssen wir in der Referenz der Interna ( kurz IR) nachschauen.

Die IR für die LilyPond-Version, die Sie benutzen, findet sich auf der LilyPond-Webseite unter der Adresse https://lilypond.org. Gehen Sie zur Dokumentationsseite und klicken Sie auf den Link zur Referenz der Interna. Die Sprache ändert sich ab hier nach englisch. Für diese Übung sollten Sie die HTML-Version benutzen, nicht die „auf einer großen Seite“ oder die PDF-Version. Damit Sie die nächsten Absätze verstehen können, müssen Sie genauso vorgehen, während Sie weiterlesen.

Unter der Überschrift Top befinden sich fünf Links. Wählen Sie den Link zum Backend, wo sich die Information über Layout-Objekte befindet. Hier, unter der Überschrift Backend, wählen Sie den Link All layout objects. Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte, die in Ihrer LilyPond-Version benutzt werden, in alphabetischer Ordnung. Wählen Sie den Link Slur und die Eigenschaften der Legatobögen (engl. slur) werden aufgelistet.

Eine alternative Methode, auf diese Seite zu gelangen, ist von der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen findet sich ein Link zur Referenz der Interna. Dieser Link führt Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben, wie die Bezeichnung des Layout-Objektes lauten könnte, das sie ändern wollen, ist es oft schneller, direkt zur IR zu gehen und dort nachzuschlagen.

Der Slur-Seite in der IR können wir entnehmen, dass Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt werden. Dann werden die Standardeinstellungen aufgelistet. Schauen Sie sich die Liste an, ob sie eine Eigenschaft enthält, mit der die Dicke von Legatobögen kontrolliert werden kann. Sie sollten folgendes finden:

 
thickness (number)
     1.2
     Line thickness, generally measured in line-thickness

Das sieht ganz danach aus, als ob damit die Dicke geändert werden kann. Es bedeutet, dass der Wert von thickness einfach eine Zahl (number) ist, dass der Standardwert 1.2 ist, und dass die Einheit für die Dicke eine andere Eigenschaft mit der Bezeichnung line-thickness ist.

Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen in der IR, aber wir haben schon genug Informationen, um zu versuchen, die Dicke eines Legatobogens zu ändern. Die Bezeichnung des Layout-Objekts ist offensichtlich Slur und die Bezeichnung der Eigenschaft, die geändert werden soll thickness. Der neue Wert sollte etwas mehr als 1.2 sein, denn der Bogen soll ja dicker werden.

Den benötigten \override-Befehl können wir jetzt einfach konstruieren, indem wir die Werte für die Bezeichnungen in den Modellbefehl einfügen und den Kontext auslassen. Setzen wir einmal einen sehr großen Wert für die Dicke um zu sehen, ob der Befehl auch funktioniert. Also:

 
\override Slur.thickness = #5.0

Vergessen Sie nicht das # vor dem neuen Wert!

Die nächste Frage ist nun: „Wohin soll dieser Befehl geschrieben werden?“ Solange wir uns noch im Lernstadium befinden, ist die beste Antwort: „Innerhalb der Noten, vor den ersten Legatobogen und nahe bei ihm.“ Also etwa so:

 
{
  \key es \major
  \time 6/8
  \relative {
    % Increase thickness of all following slurs from 1.2 to 5.0
    \override Slur.thickness = #5.0
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

und wirklich wird der Legatobogen dicker.

Das ist also die grundlegende Herangehensweise, \override-Befehl zu formulieren. Es gibt einige zusätzliche Komplikationen, denen wir uns später widmen werden, aber Sie haben jetzt das Handwerkszeug, um Ihre eigenen Befehle zu konstruieren – wenn Sie auch noch etwas Übung benötigen. Die sollen Sie durch die folgenden Übungen erhalten.

Den Kontext finden

Manchmal muss dennoch der Kontext spezifiziert werden. Welcher aber ist der richtige Kontext? Wir könnten raten, dass Legatobögen sich im Voice-Kontext befinden, denn sie sind immer einzelnen Melodielinien zugewiesen. Aber wir können uns dessen nicht sicher sein. Um unsere Annahme zu überprüfen, gehen wir wieder zu der Seite im IR, die die Legatobögen beschreibt und die Überschrift Slur hat. Dort steht: „Slur objects are created by: Slur engraver“. Legatobögen werden also in dem Kontext erstellt, in dem sich der Slur_engraver befindet. Folgen Sie dem Link zu der Slur_engraver-Seite. Unten auf der Seite steht, dass der Slur_engraver sich in fünf Stimmen-Kontexten befindet, unter anderem auch im normalen Voice-Kontext. Unsere Annahme war also richtig. Und weil Voice einer der Kontexte der untersten Ebene ist, welcher eindeutig schon dadurch definiert ist, dass wir Noten eingeben, kann er an dieser Stelle auch weggelassen werden.

Nur einmal mit \override verändern

Im Beispiel oben wurden alle Legatobögen dicker gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen dicker haben. Das können Sie mit dem \once-Befehl erreichen. Er wird direkt vor den \override-Befehl gesetzt und bewirkt, dass nur der Bogen geändert wird, der unmittelbar an der nächsten Note beginnt. Wenn die nächste Note keinen Bogenbeginn hat, dann passiert gar nichts – der Befehl wird nicht gespeichert, sondern einfach vergessen. Der Befehl, mit \once zusammen benutzt, muss also wie folgt positioniert werden:

 
{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % Increase thickness of immediately following slur only
    \once \override Slur.thickness = #5.0
    bes8[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

Jetzt bezieht er sich nur noch auf den ersten Legatobogen.

Der \once-Befehl kann übrigens auch vor einem \set-Befehl eingesetzt werden.

Rückgängig machen

Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen, jeden mit dem \once-Präfix und direkt vor die entsprechende Note gestellt, an welcher der Bogen beginnt:

 
{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % Increase thickness of immediately following slur only
    \once \override Slur.thickness = #5.0
    bes[( g]) g |
    % Increase thickness of immediately following slur only
    \once \override Slur.thickness = #5.0
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

Wir könnten aber auch den \once-Befehl weglassen und anstelle dessen später den \revert-Befehl einsetzen, um die thickness-Eigenschaft wieder auf ihren Standardwert zurückzusetzen:

 
{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8
    % Increase thickness of all following slurs from 1.2 to 5.0
    \override Slur.thickness = #5.0
    bes[( g]) g |
    g8[( es]) es
    % Revert thickness of all following slurs to default of 1.2
    \revert Slur.thickness
    d8[( f]) as |
    as8 g
  }
  \addlyrics {
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

Der \revert-Befehl kann benutzt werden, um eine beliebige Eigenschaft, die mit \override geändert worden ist, wieder in ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche Resultat.

Damit endet die Einleitung in die Referenz der Interna (IR) und die grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten zu geben, die relevante Information dort zu finden. Die Beispiele werden Schritt für Schritt immer weniger Erklärungen beinhalten.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

4.2.2 Eigenschaften, die Schnittstellen besitzen können

@translationof Properties found in interfaces

Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für ein \override-Befehl wird dazu benötigt? Schauen wir uns zunächst das Inhaltsverzeichnis in der IR an: „All layout objects“, wie auch schon zuvor. Welches Objekt könnte die Darstellung des Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag LyricText, das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften an, die verändert werden können. Dazu gehört font-series und font-size, aber nichts, womit man kursiven Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften zusammen in einem Interface – einer Schnittstelle – verortet; in diesem Fall das font-interface.

Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften benutzen.

Schauen Sie sich noch einmal die Seite in der IR an, die LyricText beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version der IR) an Eigenschaften, die von LyricText unterstützt werden. Diese Liste enthält sieben Einträge, darunter auch font-interface. Ein Klick hierauf bringt uns zu den Eigenschaften, die mit dieser Schnittstelle verbunden sind, also auch LyricText.

Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann, um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch font-shape(symbol), wobei symbol auf die Werte upright (gerade), italics (kursiv) oder caps (Kapitälchen) gesetzt werden kann.

Sie werden gemerkt haben, dass font-series und font-size hier auch aufgelistet sind. Es stellt sich die Frage, warum diese allgemeinen Schriftarteigenschaften font-series und font-size sowohl unter der Überschrift LyricText als unter dem font-interface aufgelistet sind, aber font-shape befindet sich nur im font-interface? Die Antwort ist: Die globalen Einstellungen von font-series und font-size werden geändert, wenn ein LyricText-Objekt erstellt wird, aber font-shape wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der Überschrift LyricText beinhalten dann die Werte der Standardeinstellungen dieser zwei Eigenschaften, wenn es sich um ein LyricText-Objekt handelt. Andere Objekte, die auch das font-interface unterstützen, setzen diese Eigenschaften anders, wenn sie erstellt werden.

Versuchen wir nun einen \override-Befehl zu konstruieren, der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung LyricText, die Eigenschaft ist font-shape und der Wert italic. Wie vorher schon lassen wir den Kontext aus.

Am Rande sei auf das wichtige Detail hingewiesen, dass die Werte für manche Eigenschaften Symbole sind, wie z.B. italic und dass diese mit einem Apostroph (') gekennzeichnet werden müssen. Symbole sind besondere Bezeichnungen, die LilyPond intern bekannt sind. Im Unterschied hierzu gibt es auch beliebige Zeichenketten, die immer mit Anführungszeichen, also als "Zeichenkette" auftreten. Für weitere Einzelheiten zu Zeichenketten und Werten, siehe (extending)Scheme-Tutorium in Abschnitt ‘Scheme-Tutorium’ in Extending.

Gut, der \override-Befehl, mit dem der Gesangstext kursiv gesetzt wird, lautet:

 
\override LyricText.font-shape = #'italic

und er muss direkt vor den Text gesetzt werden, auf den er sich bezieht, etwa so:

 
{
  \key es \major
  \time 6/8
  \relative {
    r4 bes'8 bes[( g]) g |
    g8[( es]) es d[( f]) as |
    as8 g
  }
  \addlyrics {
    \override LyricText.font-shape = #'italic
    The man who | feels love's sweet e -- | mo -- tion
  }
}

[image of music]

Jetzt wird der Text kursiv gesetzt.

Achtung: Innerhalb von Gesangstext muss immer ein Leerzeichen zwischen der letzten Silbe und der schließenden Klammer gesetzt werden.

Siehe auch

Erweitern: (extending)Scheme-Tutorium in Abschnitt ‘Scheme-Tutorium’ in Extending.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]         [Anfang] [Inhalt] [Index] [ ? ]

4.2.3 Typen von Eigenschaften

@translationof Types of properties

Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu tun: number (Zahl) und symbol. Damit ein Befehl funktioniert, muss der Wert einer Eigenschaft vom richtigen Typ sein und die Regeln befolgen, die für diesen Typ gelten. Der Eigenschaftstyp ist in der IR in Klammern hinter der Eigenschaftsbezeichnung angegeben. Hier eine Liste der Typen, die Sie vielleicht benötigen werden, mit den Regeln, die für den jeweiligen Typ gelten und einigen Beispielen. Sie müssen immer ein Rautenzeichen (#) vor den Typeintrag setzen, wenn sie in einem \override-Befehl benutzt werden, auch dann, wenn der Wert selbst bereits mit # anfängt. Alle Beispiele verwenden ausschließlich Konstanten. Für die Verwendungen von mit Scheme berechneten Werten siehe (extending)Berechnungen in Scheme in Abschnitt ‘Berechnungen in Scheme’ in Extending.

EigenschaftstypRegelnBeispiele
BooleschEntweder wahr oder falsch, dargestellt als #t oder #f#t, #f
Dimension (in Notenlinienabständen)Eine Dezimalzahl (in Notenlinienabstand-Einheiten)2.5, 0.34
RichtungEine gültige Richtungskonstante oder das numerische Äquivalent (0 or CENTER bezeichnen eine neutrale Richtung)LEFT, CENTER, UP, 1, -1
IntegerEine ganze Zahl3, -1
ListeEine Folge von Konstanten oder Symbolen in Klammern, angeführt von einem Apostroph; Einträge durch Leerzeichen voneinander getrennt'(left-edge staff-bar), '(1), '(), '(1.0 0.25 0.5)
Textbeschriftung (markup)Beliebige gültige Beschriftung\markup { \italic "cresc." }, "bagpipe"
MomentEin Bruch einer ganzen Note, mit der make-moment-Funktion konstruiert(ly:make-moment 1/4), (ly:make-moment 3/8)
ZahlEine beliebige positive oder negative Dezimalzahl3, -2.45
Paar (Zahlenpaar)Zwei Zahlen getrennt durch „Leerzeichen . Leerzeichen“, eingeklammert und angeführt von einem Apostroph'(2 . 3.5), '(0.1 . -3.2)
SymbolEine beliebige Anzahl von Symbolen, die für die Eigenschaft gültig sind, angeführt von einem Apostroph'italic, 'inside
UnbekanntEine Prozedur oder #f (um keine Aktion hervorzurufen)bend::print, ly:text-interface::print, #f
VektorKonstanten, getrennt durch Leerzeichen, eingeschlossen in #(…).#(#t #t #f)

Siehe auch

Erweitern: (extending)Scheme-Tutorium in Abschnitt ‘Scheme-Tutorium’ in Extending.


[ < ] [ > ]   [ << ] [ Nach oben ] [ >> ]

Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.

Andere Sprachen: English, català, česky, español, français, italiano, 日本語, nederlands.
Über die automatische Sprachauswahl.