2.5.4 Neue Definitionen von Beschriftungslistenbefehlen (LilyPond erweitern)

#### 2.5.4 Neue Definitionen von Beschriftungslistenbefehlen

Beschriftungslistenbefehle können mit dem Scheme-Makro `define-markup-list-command` definiert werden, welches sich ähnlich verhält wie das `define-markup-command`-Makro, das schon beschrieben wurde in Neue Definitionen von Beschriftungsbefehlen. Ein Unterschied ist, dass bei diesem Listen-Makro eine ganze Liste an Stencils ausgegeben wird.

Im folgenden Beispiel wird ein `\paragraph`-Beschriftungslistenbefehl definiert, welcher eine Liste von Zeilen im Blocksatz ausgibt, von denen die erste Zeile eingerückt ist. Der Einzug wird aus dem `props`-Argument entnommen.

    #(define-markup-list-command (paragraph layout props args) (markup-list?)
       #:properties ((par-indent 2))
       (interpret-markup-list layout props
         #{\markuplist \justified-lines { \hspace #par-indent #args } #}))

Die Version nur in Scheme ist etwas komplexer:

    #(define-markup-list-command (paragraph layout props args) (markup-list?)
       #:properties ((par-indent 2))
       (interpret-markup-list layout props
         (make-justified-lines-markup-list (cons (make-hspace-markup par-indent)
                                                 args))))

Neben den üblichen `layout` und `props`-Argumenten nimmt der `paragraph`-Beschriftungslistenbefehl als Argument eine Beschriftungsliste, die `args` genannt wird. Das Prädikat für Beschriftungslisten ist `markup-list?`.

Zuerst errechnet die Funktion die Breite des Einzugs, eine Eigenschaft mit der Bezeichnung `par-indent` anhand der Eigenschaftsliste `props`. Wenn die Eigenschaft nicht gefunden wird, ist der Standardwert `2`. Danach wird eine Liste von Zeilen im Blocksatz erstellt, wobei der eingebaute `\justified-lines`-Beschriftungslistenbefehl eingesetzt wird, der verwandt ist mit der `make-justified-lines-markup-list`-Funktion. Horizontaler Platz wird zu Beginn eingefügt mit `\hspace` (oder der `make-hspace-markup`-Funktion). Zuletzt wird die Beschriftungsliste ausgewertet durch die `interpret-markup-list`-Funktion.

Dieser neue Beschriftungslistenbefehl kann wie folgt benutzt werden:

    \markuplist {
      \paragraph {
        Die Kunst des Notensatzes wird auch als \italic {Notenstich} bezeichnet. Dieser
        Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa
        20 Jahren wurden Noten erstellt, indem man sie in eine Zink- oder
        Zinnplatte schnitt oder mit Stempeln schlug.
      }
      \override-lines #'(par-indent . 4) \paragraph {
        Diese Platte wurde dann mit Druckerschwärze versehen, so dass sie
        in den geschnittenen und gestempelten Vertiefungen blieb. Diese
        Vertiefungen schwärzten dann ein auf die Platte gelegtes Papier.
        Das Gravieren wurde vollständig von Hand erledigt.
      }
    }

#### 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