1.2.3 Eingabe-Variablen und Scheme (LilyPond erweitern)

#### 1.2.3 Eingabe-Variablen und Scheme

Das Eingabeformat unterstützt die Notation von Variablen: Im folgenden Beispiel wird ein musikalischer Ausdruck einer Variablen mit der Bezeichnung `traLaLa` zugewiesen:

    traLaLa = { c'4 d'4 }

Variablen haben beschränkte Geltungsbereiche: im unten stehenden Beispiel enthält auch die `\layout`-Umgebung eine `traLaLa`-Variable, die sich aber von der `traLaLa`-Variable auf oberster Ebene unterscheidet:

    traLaLa = { c'4 d'4 }
    \layout { traLaLa = 1.0 }

Jede Eingabedatei ist solch ein Gültigkeitsbereich, und alle `\header`-, `\midi`- und `\layout`-Umgebungen sind Gültigkeitsbereiche, die in diesen obersten Gültigkeitsbereich eingebettet sind.

Sowohl Variablen als auch Gültigkeitsbereiche sind im Guile Modulsystem eingebaut. Ein anonymes Scheme-Modul wird jedem Gültigkeitsbereich angehängt. Eine Zuweisen in der Form von

    traLaLa = { c'4 d'4 }

wird intern in die Scheme-Definition

    (define traLaLa Scheme-Wert von `... ')

konvertiert.

Das bedeutet, dass LilyPond-Variablen und Scheme-Variablen frei gemischt werden können. Im folgenden Beispiel wird ein Notenfragment in der Variable `traLaLa` gespeichert und mit Scheme dupliziert. Das Resultat wird in eine `\score`-Umgebung mit einer weiteren Variable `twice` importiert:

    traLaLa = { c'4 d'4 }

    #(define newLa (map ly:music-deep-copy
      (list traLaLa traLaLa)))
    #(define twice
      (make-sequential-music newLa))

    \twice

Das ist ein interessantes Beispiel. Die Zuweisung findet erst statt, nachdem der Parser sichergestellt hat, dass nichts folgt, das Ähnlichkeit mit `\addlyrics` hat, sodass er prüfen muss, was als nächstes kommt. Er liest `#` und den darauf folgenden Scheme-Ausdruck, ohne ihn auszuwerten, so dass er weiterlesen und erst danach wird der Scheme-Code ohne Probleme ausführen kann.

#### LilyPond erweitern v2.26.0 (stable-branch).

- 1 Scheme-Tutorium
  - 1.1 Einleitung in Scheme
    - 1.1.1 Scheme-Sandkasten
    - 1.1.2 Scheme-Variablen
    - 1.1.3 Einfache Scheme-Datentypen
    - 1.1.4 Zusammengesetzte Scheme-Datentypen
    - 1.1.5 Berechnungen in Scheme
    - 1.1.6 Scheme-Prozeduren
    - 1.1.7 Scheme-Konditionale
  - 1.2 Scheme in LilyPond
    - 1.2.1 LilyPond Scheme-Syntax
    - 1.2.2 LilyPond-Variablen
    - 1.2.3 Eingabe-Variablen und Scheme
    - 1.2.4 Scheme in LilyPond importieren
    - 1.2.5 Objekteigenschaften
    - 1.2.6 Zusammengesetzte LilyPond-Variablen
    - 1.2.7 Interne musikalische Repräsentation
  - 1.3 Komplizierte Funktionen erstellen
    - 1.3.1 Musikalische Funktionen darstellen
    - 1.3.2 Eigenschaften von Musikobjekten
    - 1.3.3 Verdoppelung einer Note mit Bindebögen (Beispiel)
    - 1.3.4 Artikulationszeichen zu Noten hinzufügen (Beispiel)
- 2 Schnittstellen für Programmierer
  - 2.1 LilyPond-Codeabschnitte
  - 2.2 Scheme-Funktionen
    - 2.2.1 Definition von Scheme-Funktionen
    - 2.2.2 Benutzung von Scheme-Funktionen
    - 2.2.3 Leere Scheme-Funktionen
  - 2.3 Musikalische Funktionen
    - 2.3.1 Definition der musikalischen Funktionen
    - 2.3.2 Benutzung von musikalischen Funktionen
    - 2.3.3 Einfache Ersetzungsfunktionen
    - 2.3.4 Mittlere Ersetzungsfunktionen
    - 2.3.5 Mathematik in Funktionen
    - 2.3.6 Funktionen ohne Argumente
    - 2.3.7 Leere musikalische Funktionen
  - 2.4 Ereignisfunktionen
  - 2.5 Textbeschriftungsfunktionen
    - 2.5.1 Beschriftungskonstruktionen in Scheme
    - 2.5.2 Wie Beschriftungen intern funktionieren
    - 2.5.3 Neue Definitionen von Beschriftungsbefehlen
      - Syntax der Definition von Textbeschriftungsbefehlen
      - Über Eigenschaften
      - Ein vollständiges Bespiel
      - Eingebaute Befehle anpassen
    - 2.5.4 Neue Definitionen von Beschriftungslistenbefehlen
  - 2.6 Kontexte für Programmierer
    - 2.6.1 Kontextauswertung
    - 2.6.2 Eine Funktion auf alle Layout-Objekte anwenden
  - 2.7 Callback-Funktionen
  - 2.8 Scheme-Code innerhalb LilyPonds
  - 2.9 Schwierige Korrekturen
- 3 LilyPond Scheme-Schnittstellen
- Appendix A GNU Free Documentation License
- Appendix B Register