5.7.3 Formatvorlagen

Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe zu Einzelheiten Die Ausgabe verbessern. Aber was ist, wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen erfahren sollen? Oder wenn Sie einfach nur die Anpassungen von der eigentlichen Musik trennen wollen? Das lässt sich recht einfach erreichen.

Schauen wir uns ein Beispiel an. Sorgen Sie sich nicht, wenn Sie den Abschnitt mit den vielen #() nicht verstehen. Das wird in Fortgeschrittene Optimierungen mit Scheme erklärt.

mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

Vielleicht können die Definitionen von mpdolce und inst noch etwas verbessert werden. Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht auch in einem anderen Stück verwenden. Wir könnten sie immer wieder kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig. Dadurch werden die Definitionen auch in der Eingabedatei belassen, und ich finde diese #() irgendwie hässlich. Verstecken wir sie also:

%%% in Datei "definitions.ily" speichern
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

Diese Datei wir mit dem \include-Befehl ziemlich weit oben in der Datei eingefügt. (Die Erweiterung .ily wird benutzt, um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die man nicht alleinstehend kompilieren kann). Jetzt ändern wir die Noten (in der Datei music.ly).

\include "definitions.ily"

\relative {
  \tempo 4=50
  a'4.\mpdolce d8 cis4--\glissando a |
  b4 bes a2 |
  \inst "Clarinet"
  cis4.\< d8 e4 fis |
  g8(\! fis)-. e( d)-. cis2 |
}

[image of music]

Das sieht schon besser aus, aber einige Änderungen könnten wir noch vornehmen. Das Glissando ist kaum sichtbar, machen wir es also etwas dicker und näher an den Notenkopf. Die Metronombezeichnung soll über dem Schlüssel stehen, anstatt über der ersten Note. Und schließlich mag mein Kompositionsprofessor keine „C“-Taktangaben, das ändern wir also in „4/4“.

Ändern Sie jetzt jedoch nicht music.ly. Ändern Sie die definitions.ily mit dem Folgenden:

%%%  definitions.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
    \override TimeSignature.style = #'numbered
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

Das sieht besser aus! Aber nehmen wir an, Ich will dieses Stück publizieren. Mein Professor mag die „C“-Taktangabe nicht, mir gefällt sie aber sehr gut. Kopieren wir also die Datei definitions.ily nach web-publish.ily und verändern diese. Weil die Noten als PDF auf dem Monitor dargestellt werden sollen, wird auch die Notengröße global geändert.

%%%  web-publish.ily
mpdolce =
  \tweak self-alignment-X #-0.6
  #(make-dynamic-script
    #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})

inst =
#(define-music-function
     (string)
     (string?)
   #{ <>^\markup \bold \box #string #})

#(set-global-staff-size 23)

\layout{
  \context {
    \Score
    \override MetronomeMark.extra-offset = #'(-5 . 0)
    \override MetronomeMark.padding = #'3
  }
  \context {
    \Staff
  }
  \context {
    \Voice
    \override Glissando.thickness = #3
    \override Glissando.gap = #0.1
  }
}

[image of music]

In der Eingabedatei muss jetzt nur noch die Zeile \include "definitions.ily" mit \include "web-publish.ily" ersetzt werden. Das könnte man natürlich noch besser machen. Es könnte eine Datei definitions.ily mit allen Definitionen (also mpdolce und inst) geben, eine Datei web-publish.ily, die nur die \layout-Veränderung enthält und eine Datei university.ily, die nur die Prozedur enthält, die Ausgabe meinem Professor angenehm zu machen. Der Anfang von music.ly würde dann folgendermaßen aussehen:

\include "definitions.ily"

%%%  nur eine der zwei Zeilen auskommentieren!
\include "web-publish.ily"
%\include "university.ily"

Diese Herangehensweise kann auch schon nützlich sein, wenn man nur ein paar Stimmen schreiben will. Ich habe eine ganze Anzahl an „Formatvorlagen“ (engl. Stylesheets) für meine Projekte. Ich fange jede Datei mit der Zeile \include "../global.ily" an, die etwa folgendes einbindet:

%%%   global.ily
\version "2.25.22"

#(ly:set-option 'point-and-click #f)

\include "../init/init-defs.ly"
\include "../init/init-layout.ly"
\include "../init/init-headers.ly"
\include "../init/init-paper.ly"

LilyPond Handbuch zum Lernen v2.25.22 (development-branch).