6.1.5 Stil-Dateien

Die Ausgabe, die LilyPond erstellt, kann sehr stark modifiziert werden, siehe @ref{Die Ausgabe verändern} für Einzelheiten. Aber wie kann man diese Änderungen auf eine ganze Serie von Dateien anwenden? Oder die Einstellungen von den Noten trennen? Das Verfahren ist ziemlich einfach.

Hier ist ein Beispiel. Es ist nicht schlimm, wenn Sie nicht auf Anhieb die Abschnitte mit den ganzen #() verstehen. Das wird im Kapitel @ref{Fortgeschrittene Optimierungen mit Scheme} erklärt.

mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
  #:line(#:dynamic "mp" #:text #:italic "dolce" )))

inst = #(define-music-function (parser location string) (string?)
  (make-music
    'TextScriptEvent
    'direction UP
    'text (markup #:bold (#:box string))))

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

[image of music]

Es treten einige Probleme mit überlappenden Symbolen auf. Sie werden beseitigt mit den Tricks aus dem Kapitel @ref{Verschieben von Objekten}. Aber auch die mpdolce und inst-Definitionen können verbessert werden. Sie produzieren das Ergebnis, das gewünscht ist, aber es wäre schön, sie auch in anderen Stücken verwenden zu können. Man könnte sie natürlich einfach kopieren und in die anderen Dateien einfügen, aber das ist lästig. Die Definitionen verbleiben auch in der Notendatei und diese #() sehen nicht wirklich schön aus. Sie sollen in einer anderen Datei versteckt werden:

%%% speichern in einer Datei "definitions.ily"
mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
  #:line(#:dynamic "mp" #:text #:italic "dolce" )))

inst = #(define-music-function (parser location string) (string?)
  (make-music
    'TextScriptEvent
    'direction UP
    'text (markup #:bold (#:box string))))

Auf diese Datei kann dann später mit dem \include-Befehl im oberen Teil der LilyPond-Datei zurückgegriffen werden. (Die Erweiterung .ily wird benutzt, um diese eingefügte Datei, die nicht alleine kompiliert werden kann, von der Hauptdatei zu unterscheiden.) Jetzt muss natürlich noch die Notendatei angepasst werden (gespeichert unter dem Namen ‘"music.ly"’).

\include "definitions.ily"

\relative c'' {
  \tempo 4=50
  a4.\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 es sind noch einige Verbesserungen möglich. Das Glissando ist schwer zu sehen, also soll es etwas dicker erscheinen und dichter an den Notenköpfen gesetzt werden. Das Metronom-Zeichen soll über dem Schlüssel erscheinen, nicht über der ersten Note. Und schließlich kann unser Kompositionsprofessor „C“-Taktangaben überhaupt nicht leiden, also müssen sie in „4/4“ verändert werden.

Diese Veränderungen sollten Sie aber nicht in der ‘music.ly’-Datei vornehmen. Ersetzen Sie die ‘definitions.ily’-Datei hiermit:

%%%  definitions.ily
mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
  #:line( #:dynamic "mp" #:text #:italic "dolce" )))

inst = #(define-music-function (parser location string) (string?)
  (make-music
    'TextScriptEvent
    'direction UP
    'text (markup #:bold (#:box string))))

\layout{
  \context { \Score
    \override MetronomeMark #'extra-offset = #'(-9 . 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 schon besser aus! Aber angenommen Sie möchten dieses Stück jetzt veröffentlichen. Ihr Kompositionsprofessor mag die „C“-Taktangaben nicht, aber Sie finden sie irgendwie schöner. Also kopieren Sie die Datei ‘definitions.ily’ nach ‘web-publish.ily’ und verändern diese. Weil die Noten in einer PDF-Datei auf dem Bildschirm angezeigt werden sollen, bietet es sich auch an, die gesamte Ausgabe zu vergrößern.

%%%  definitions.ily
mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
  #:line( #:dynamic "mp" #:text #:italic "dolce" )))

inst = #(define-music-function (parser location string) (string?)
  (make-music
    'TextScriptEvent
    'direction UP
    'text (markup #:bold (#:box string))))

#(set-global-staff-size 23)
\layout{
  \context { \Score
    \override MetronomeMark #'extra-offset = #'(-9 . 0)
    \override MetronomeMark #'padding = #'3
  }
  \context { \Staff
  }
  \context { \Voice
    \override Glissando #'thickness = #3
    \override Glissando #'gap = #0.1
  }
}

[image of music]

In der Notendatei muss jetzt nur noch \include "definitions.ily" durch \include "web-publish.ily" ausgetauscht werden. Das könnte man natürlich noch weiter vereinfachen. Also eine Datei ‘definitions.ily’, die nur die Definitionen von mpdolce und inst enthält, eine Datei ‘web-publish.ily’, die alle die Änderungen für den \layout-Abschnitt enthält und eine Datei ‘university.ily’ für eine Ausgabe, die den Wünschen des Professors entspricht. Der Anfang der ‘music.ly’-Datei würde dann so aussehen:

\include "definitions.ily"

%%%  Nur eine der beiden Zeilen auskommentieren!
\include "web-publish.ily"
%\include "university.ily"

Durch diese Herangehensweise kann auch bei der Erstellung von nur einer Ausgabeversion Arbeit gespart werden. Ich benutze ein halbes Dutzend verschiedener Stilvorlagen für meine Projekte. Jede Notationsdatei fängt an mit \include "../global.ily", welches folgenden Inhalt hat:

%%%   global.ly
\version "2.12.0"
#(ly:set-option 'point-and-click #f)
\include "../init/init-defs.ily"
\include "../init/init-layout.ily"
\include "../init/init-headers.ily"
\include "../init/init-paper.ily"

Programmbenutzung