GNU LilyPond Handbuch zum Lernen: 5.1.4 Saving typing with variables and functions

### 5.1.4 Saving typing with variables and functions

Bis jetzt haben Sie immer etwa solche Noten gesehen:

>     hornNotes = \relative c'' { c4 b dis c }
>     \score {
>       {
>         \hornNotes
>       }
>     }

Das könnte auch nützlich in Minimal-Music sein:

>     fragmentA = \relative c'' { a4 a8. b16 }
>     fragmentB = \relative c'' { a8. gis16 ees4 }
>     violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
>     \score {
>       {
>         \violin
>       }
>     }

Sie können diese Bezeichner oder Variablen aber auch für (eigene) Einstellungen verwenden:

>     dolce = \markup{ \italic \bold dolce }
>     padText = { \once \override TextScript #'padding = #5.0 }
>     fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
>     violin = \relative c'' {
>       \repeat volta 2 {
>         c4._\dolce b8 a8 g a b |
>         \padText
>         c4.^"hi there!" d8 e' f g d |
>         c,4.\fthenp b8 c4 c-. |
>       }
>     }
>     \score {
>       {
>         \violin
>       }
>     \layout{ragged-right=##t}
>     }

Die Variablen haben in diesem Beispiel deutlich die Tipparbeit erleichtert. Aber es lohnt sich, sie zu einzusetzen, auch wenn man sie nur einmal anwendet, denn sie vereinfachen die Struktur. Hier ist das vorangegangene Beispiel ohne Variablen. Es ist sehr viel komplizierter zu lesen, besonders die letzte Zeile.

>     violin = \relative c'' {
>       \repeat volta 2 {
>         c4._\markup{ \italic \bold dolce } b8 a8 g a b |
>         \once \override TextScript #'padding = #5.0
>         c4.^"hi there!" d8 e' f g d |
>         c,4.\markup{ \dynamic f \italic \small { 2nd }
>           \hspace #0.1 \dynamic p } b8 c4 c-. |
>       }
>     }

Bis jetzt wurde nur statische Substitution vorgestellt – wenn LilyPond den Befehl `\padText` findet, wird er ersetzt durch durch unsere vorherige Definition (alles, was nach dem `padtext =` kommt).

LilyPond kennt aber auch nicht-statische Substitutionen (man kann sie sich als Funktionen vorstellen).

>     padText =
>     #(define-music-function (parser location padding) (number?)
>       #{
>         \once \override TextScript #'padding = #$padding
>       #})

>     \relative c''' {
>       c4^"piu mosso" b a b
>       \padText #1.8
>       c4^"piu mosso" d e f
>       \padText #2.6
>       c4^"piu mosso" fis a g
>     }

Die Benutzung von Variablen hilft auch, viele Schreibarbeit zu vermeiden, wenn die Eingabesyntax von LilyPond sich verändert (siehe auch Updating old files). Wenn nur eine einzige Definition (etwa `\dolce`) für alle Dateien verwendet wird (vgl. Style sheets), muss nur diese einzige Definition verändert werden, wenn sich die Syntax ändert. Alle Verwendungen des Befehles beziehen sich dann auf die neue Definition.

Other languages: English, français, español.

#### Handbuch zum Lernen