Lied-Layout

In diesem Abschnitt der Doku zeigen wir Lösungen für Probleme oder Herausforderungen, die sich aus der Arbeit mit unserem System ergeben. Vieles davon wurde von tux entwickelt und befindet sich in den lilypond-common-includes, bei manchen Themen verweisen wir auch einfach nur auf die LilyPond-Doku. Dieser Teil ist fokussiert auf die Layout-Fragen.

Hinweis

Anmerkung: Die Codebeispiele sind teilweise vereinfacht und verkürzt, um die Probleme und Lösungen möglichst einfach zu erklären. Sie sind damit nicht zwangsläufig eins zu eins übertragbar und anwendbar (und finden sich teils nicht eins zu eins im Liederpool wieder).

Eingriffe ins „Musik“-Layout

Transponieren

Viele Lieder sind in verschiedenen Tonarten verbreitet. Im Liederpool sollte sich grundsätzlich an die Originaltonart gehalten werden. Wenn die Tonart in einem Liederbuch angepasst werden soll, funktioniert dies mit dem Befehl \transposeGlobal x y. Mit x und y wird dabei der Tonsprung bezeichnet. Es bietet sich an, dafür die Tonarten zu nutzen, tatsächlich ist aber lediglich der Abstand entscheidend. Der Befehl kann einfach irgendwo in der Datei aufgerufen werden, am besten nicht innerhalb anderer Teile/Variablen.

Beispiel: Wir wollen ein Lied statt in Fis-Dur in C-Dur setzen. Dann schreiben wir: \transposeGlobal fis c,. In diesem Falle müssen wir vermutlich die Tonhöhe anpassen, da der Sprung sehr groß ist. Das funktioniert wie in LilyPond gewohnt mit , bzw. '.

Römische Ziffern

Römische Ziffern (I, II etc.), um zum Beispiel Übersetzungen mit einem anderen System zu nummerieren als den Originaltext, können erreicht werden, in dem vor den Ausdruck #(stanza 1) die Funktion \romanStanza aufgerufen wird.

Beispiel:

TEXT = \markuplist {
  \group-verses {
    \chordlyrics { \romanStanza \firstVerse }
  }
}

Abstand der Akkorde voneinander

Bei vielen aufeinanderfolgenden Akkorden (zum Beispiel in Zwischenspielen) kann es vorkommen, dass es schöner aussähe, wenn diese in den Strophen mehr Abstand zueinander hätten. Das geht mit dem folgenden Befehl, der in der Layout-Datei in die \chords { }-Umgebung eingebaut werden muss.

\override ChordName.extra-spacing-width = #'(-0.5 . 0.5)

Durch die Anpassung der übergebenen Werte verändert sich dann der Abstand der Akkorde zueinander entsprechend. Um genau zu sein, wird der horizontale Abstand geändert.

Ein gekürztes Beispiel aus „Tout l’espoir“:

ref-chords = \chords { \override ChordName.extra-spacing-width = #'(-0.9 . 0.9) \refChords }
ref-voice = { \global \removeWithTag #'firstVerse \refVoice }
ref-breaks = { 
  s1 s s s \break
  s s s s \break
  s1 s
}

TEXT = \markuplist {
  \group-verses {
    \override #`(verse-chords . ,ref-chords)
    \override #`(verse-reference-voice . ,#{ \global \removeWithTag #'multiVerse \refVoice #})
    \override #`(verse-break-voice . ,ref-breaks)
    \chordlyrics \refLyrics
}

Elegantere Lösung und Lösung für einzelne Akkorde mit pushToTag

Eine etwas elegantere Lösung kann man mit \pushToTag erreichen. Dabei wird der Akkord in den Akkorden, ab dem mehr Platz benötigt wird, mit einem Tag (z.B. moreSpace) markiert, und dann im weiter unten Layout-Teil wird mittels \pushToTag das gewünschte Kommando inkludiert – das für einzelne Akkorde, die mehr Platz benötigen, auch nur einmal (\once) genutzt werden kann. Ein Beispiel aus „Banner“:

refChords = \chordmode {
  \repeat volta 2 {
    s4 \themeChords
    e2 \tag #'moreSpace { e:7 }
  }
}

Das E7 ist zu nah am E-Dur, deswegen braucht es mehr Abstand – allerdings betrifft das allein dieses E7. Deswegen markieren wir es mit dem Tag moreSpace.

MUSIC = {}

refChords =  \chordmode { \pushToTag #'moreSpace { \once \override ChordName.extra-spacing-width = #'(-2 . 0.1) } \refChords }

TEXT = {}

Unten überschreiben wir dann die refChords und nutzen \pushToTag, um vor den markierten Akkord den eingeklammerten Befehl zu inkludieren.

Barcheck-Warnung durch Midi-Auftakte beheben

In bestimmten Fällen kann es vorkommen, dass Barcheck-Warnungen durch die Midi-Datei hervorgerufen werden. Begründet ist das dann eigentlich immer durch einen Inline-Score. Wenn ein Lied ein Auftakt hat und eine Coda, die man sowohl als Inline-Score als auch im MUSIC-Teil notiert, kann es sein, dass der Auftakt in der Midi fehlt. Die Funktion hängt dem Midi einfach noch musikalischen Inhalt an, Beispiel „Winterlied“:

% muss weg, wenn die Coda nicht im MUSIC-Teil notiert ist
\fill-midi s16

Wie im Kommentar erwähnt, muss dieser Befehl weggelassen werden, wenn die Coda nicht im MUSIC-Teil notiert ist.

Layout der Strophen

Zeilenumbrüche in den Strophen

Problem: Verschiedene Liederbücher haben verschiedene Formate, weswegen es keinen idealen Zeilenumbruch für alle Liederbücher gibt.

Lösung: Versumbrüche werden in der Variable verse-breaks anhand von (unsichtbaren) Pausen (s)und \break-Befehlen bewirkt. Diese Variable wird dann mittels \override-Befehl vor den entsprechenden Versen im TEXT-Part eingebunden. Beispiel: \override #`(verse-break-voice . ,verse-breaks). verse-break-voice erstellt eine (unsichtbare) Stimme mit den Umbrüchen aus verse-breaks und wird auch für den Fall gesetzt, dass es Strophen und einen Refrain gibt. In dem Falle wird das \override immer vor den unterschiedlichen Strophen neu gesetzt.

Warnung

Achtung: \override gilt immer nur für das folgende Element, zum Beispiel ein Vers oder ein \group-verses-Ausdruck.

Für mehrere Ausdrücke kann stattdessen \override-lines genutzt werden. Das könnte mit dem unten stehenden Beispiel dann so aussehen:

TEXT = \markuplist {
  \override-lines #`(verse-break-voice . ,verse-breaks)
  {
  \group-verses {
    \chordlyrics \firstVerse
    \chordlyrics \secondVerse
    \override #`(verse-break-voice . ,ref-breaks)
    \chordlyrics \refLyrics
  }
  \group-verses {
    \chordlyrics \thirdVerse
  }
  }
}

Das zu Beginn gesetzte Override gilt nun auch für die unteren Group-Verses.

Codebeispiel, bei dem Refrain und Strophe auf eine Seite (und damit in ein \group-verses) gedruckt werden:

verse-breaks = {
  s2.*4 \break %s2.*4 bedeutet, dass s2. 4 mal wiederholt wird
  s2.*4 \break
  s2.*4 \break
}

ref-breaks = {
  s2.*2 \break
  s2.*2 \break
}

TEXT = \markuplist {
  \override #`(verse-break-voice . ,verse-breaks)
  \group-verses {
    \chordlyrics \firstVerse
    \chordlyrics \secondVerse
    \override #`(verse-break-voice . ,ref-breaks)
    \chordlyrics \refLyrics
    \chordlyrics \thirdVerse
  }
}

Strophentext kleiner machen

Der Strophentext im alten (!) System kann mit dem Befehl \fontsize #-1 verkleinert werden. Der Befehl kommt an den Anfang des Markup-Blocks.

Im neuen System verändert sich die Textgröße analog zur Score-Größe (siehe Kapitel 4.1).

TEXT = \markuplist {
  \fontsize #-1
  \group-verses {
    %
  }
}

Abstand zwischen Strophen

Zwischen Strophen oder auch gruppierten Strophen und ganz generell in Markup kann ein Abstand zwischen zwei Objekten mittels des Befehls \vspace #0 erzeugt werden, wobei die Zahl beliebig groß oder klein (auch negativ) gesetzt werden kann.

Abstand zwischen Strophen innerhalb der Group-Verse-Umgebung

Innerhalb eines \group-verses kann der Abstand zwischen den Strophen einheitlich mit dem Befehl \override #'(verse-vspace . 0.8) modifiziert werden. Der Standardwert beträgt 1. Werte können auch negativ sein. Der Override-Befehl wird vor die Group-Verses-Umgebung geschrieben.

TEXT = \markuplist {
  \override #'(verse-vspace . 0.8)
  \group-verses {
    %
  }
}

Zeilenabstand (Abstand innerhalb der Strophen)

Der Zeilenabstand, also der Abstand der Verse innerhalb der Strophen zueinander, kann mit dem Befehl \override #'(intraverse-vspace . 0.3) beeinflusst werden. Der Standardwert beträgt 0. Werte können auch negativ sein. Der Befehl muss vor die Group-Verses-Umgebung geschrieben werden.

TEXT = \markuplist {
  \override #'(intraverse-vspace . 0.3)
  \group-verses {
    %
  }
}

Spalten

Die Strophen können auch in Spalten gruppiert werden. Das funktioniert mit dem Befehl \override #'(verse-cols . 2). Die Zahl gibt die Anzahl der Spalten an. Die Anordnung erfolgt von oben nach unten und dann in der nächsten Spalte wieder von oben nach unten. Mit dem Befehl \override #'(verse-ordering-horizontal . #t) kann dieses Verhalten beeinflusst werden. Der Befehl \override #'(verse-hspace . -5) ermöglicht die Veränderung des Abstands zwischen den Spalten.

TEXT = \markuplist {
  \override #'(verse-cols . 3) % 3 Spalten
  \override #'(verse-ordering-horizontal . #t) % Verse horizontal fortlaufend anordnen
  \override #'(verse-hspace . -5) % Abstand zwischen Spalten geringer machen
  \group-verses {
    %
  }
}

Gepunktete Fülllinien

Gepunktete Fülllinien sehen in den Strophen etwas schicker aus. Deswegen gibt es dafür einen eigenen Befehl: \dottedExtender. Er kann einfach im TEXT-Block vor die betreffende Variable geschrieben werden. Ein Beispiel aus „Über das Meer“:

outroLyrics = \lyricmode {
  \ref
  "mmhh " __ \repeat unfold 14 { _ }
  " zu" se -- geln ü -- ber das Meer.
}

%

TEXT = \markuplist {
  \group-verses {
    \chordlyrics { \dottedExtender \outroLyrics }
  }
}

Nach dem mmhh und vor dem zu wurde zusätzlich noch ein Leerzeichen ergänzt, da das in der Ausgabe schöner aussieht.

Strophennummern überschreiben

Es kann vorkommen, dass man bestimmte Strophen nicht in seinem Liederbuch abdrucken will oder eine andere Reihenfolge der Strophen bevorzugt. Für diesen Fall kann die Strophennummer einfach überschrieben werden mit dem Befehl

\override-stanza #3

%alternative

#(override-stanza 3)

Der Befehl muss vor die entsprechende Lyrics-Variable abgerufen werden.

Strophen ohne Akkorde

Strophen können natürlich auch ohne Akkorde ausgedrückt werden. Dabei wird im alten System statt \chordverse \nochordverse geschrieben und im neuen System (unserem Standardsystem) \nochordlyrics statt \chordlyrics. Beispiel:

TEXT = \markuplist {
  \group-verses {
    \chordlyrics \firstVerse
    \chordlyrics \refLyrics
    \nochordlyrics \secondVerse
  }
}

Layout von Inline-Scores

Inline-Scores sind Notensätze (Scores), die innerhalb der TEXT-Umgebung genutzt werden, also zum Beispiel eine Bridge oder auch eine Coda.

Abstand der Notenzeilen

Der Abstand der Notenzeilen von Inline-Scores kann angepasst werden mit dem Befehl \override #'(baseline-skip . 1).

TEXT = \markuplist {
  \group-verses {
    \override #'(baseline-skip . 1)
    \score {
      \inline-score
      \BRIDGE
      \layout { \generalLayout}
    }
  }
}

Seitenlayout

Ausgabe-Größe

Um Platz zu sparen, kann es hilfreich sein, die Größe des Staffs (wozu effektiv fast alle Ausgabe-Elemente gehören: Noten, Lyrics, Akkorde und somit auch die Strophen) abweichend von den globalen Liederbucheinstellungen anzupassen. Das erfolgt mit der Ergänzung des LAYOUT-Blocks:

LAYOUT = \layout {
  \LAYOUT
  size = 15 %hier die gewünschte Größe anpassen
}

Das ergänzt den in den Skripten bereits existierenden LAYOUT-Block um die Staff-Size, die effektiv mit dem Scheme-Befehl #(layout-set-staff-size 13.8) überschrieben wird. Aus technischen Gründen funktioniert der nicht immer zuverlässig, weshalb es den oben genannten Befehl für diesen Zweck gibt.

Der \paper-Block

Im \paper-Block können etliche Schrauben am Layout gedreht werden. Dabei nutzen wir ausschließlich schon vorhandene LilyPond-Funktionen und verweisen an dieser Stelle jeweils auf die offizielle LilyPond-Doku.

Der \paper-Block ist Teil des HEADER’s und wird an die folgende Stelle in der Layout-Datei eingefügt:

HEADER = \bookpart {
  \paper {
    %hier kommt alles rein, was in den Paper-Block gehört
  }
  \header {
    \basicSongInfo
    %infotext = ""
  }
}

Seitenanzahl eines Liedes bestimmen

Wenn ein Lied auf eine Seite gequetscht werden soll, geht das mit dem Befehl page-count = #1, wobei die Nummer hinter dem #-Zeichen jeweils für die Anzahl der Seiten steht. Mehr dazu in der LilyPond-Doku.

Abstand zwischen Titel und Noten

Der Abstand zwischen Titel und Noten wird mit markup-system-spacing.padding = 4 definiert. Mehr dazu in der LilyPond-Doku.

Abstand zwischen Seitenrand und oberstem Notensystem

Das kann hilfreich sein, um zum Beispiel Noten auf der zweiten Seite weiter unten anfangen zu lassen. Wenn etwas anderes dort steht (z.B. Titel oder Text), greift das nicht. Der Befehl lautet: top-system-spacing.padding = 6. Mehr dazu in der LilyPond-Doku.

Abstand zwischen den Systemen

Der Abstand zwischen den Notensystemen kann mittels system-system-spacing.padding = 1 angepasst werden. Mehr dazu in der LilyPond-Doku.

Keine Seitennummer

Wenn die Seitennummer nicht geprintet werden soll, kann der Befehl print-page-number = ##f verwendet werden. Mehr dazu in der LilyPond-Doku.

Größe des Bildtitels

Wenn ein Lied anstatt eines Schrifttitels ein Bildtitel hat (also eine eps-Datei, die im Layout-Ordner liegt), dann kann die Größe dieser eps-Datei mittels der Variable titlesize = 11 angepasst werden, die in den Header eingefügt werden muss, also:

HEADER = \bookpart {
  \header {
    \basicSongInfo
    titlesize = 11 %hier die Zahl anpassen
  }
}

Abstand des Titels zum oberen Seitenrand

Der Abstand des Titels (egal ob Bild oder Schrift) zum oberen Seitenrand kann mittels der Variable titletopspace = 2 eingestellt werden, die ebenfalls in den Header muss:

HEADER = \bookpart {
  \header {
    \basicSongInfo
    titletopspace = 2 %hier die Zahl anpassen
  }
}

Zeilenumbrüche

Zeilenumbrüche können anhand einer Silentvoice hinzugefügt werden. Das geht, in dem eine neue Stimme in der Layout-Datei angelegt wird, in der die Umbrüche integriert werden (\break). Die Stimme muss dann im MUSIC-Part eingebunden werden. Beispiel:

breakVoice = {
  s1*5 \break
  s1*5 \break
  s1*5 \break
}

MUSIC = {
  <<
    \songChords
    \new ChoirStaff = "firstStaff"
    <<
      \new Voice = "firstVoice" { \melodyVoice }
      \addlyrics \firstVerse
      \new Voice { \breakVoice }
    >>
  >>
}

Im Beispiel wird also der Staff alle fünf Takte insgesamt dreimal umgebrochen.

Zeileneinzüge anpassen

Zeileneinzüge, also der Abstand einer einzelnen Notenzeile zum linken oder rechten Seitenrand, können ebenfalls angepasst werden. Dazu gibt es zwei Befehle: \pseudoIndent n und \pseudoIndents n n. Der Befehl macht quasi einen Break und die nächste Zeile bekommt dann die angegebenen Einzüge. Eine ausführliche Erklärung mit Bildern und Beispielen findet sich hier.

Illustrationen

Illustrationen bekommen im einfachsten Fall eine ganze imagepage. Das wird in der Liederbuchdatei bearbeitet. Wenn eine Illustration auf ein „Liedblatt“ drauf kommt, wird dies in der Layout-Datei des Liedes organisiert. Das Bild muss für diesen Fall im Ordner des Liedes gespeichert sein und idealerweise als EPS-Datei vorliegen (im Zweifel hilft Inkscape).

Objekte wie Illustrationen an die gewünschte Stelle zu verschieben, kann etwas frickelig sein, aber funktioniert mit verschiedenen Methoden.

Generell findet ihr alle Markup-Befehle in der LilyPond-Doku:

Verschieben von Objekten

Die Funktion \translate #'(x . y) verschiebt das nächste, was geprinted wird, nicht an die eigentliche Stelle, sondern verschiebt es um die Koordinaten x und y (jeweils numerische Werte). Ausprobieren hilft.

Mit \pad-x x markup kann ein Markup (markup) um x auf der x-Achse verschoben werden.