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.
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:
\markuplist {
TEXT = \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“:
chords = \chords { \override ChordName.extra-spacing-width = #'(-0.9 . 0.9) \refChords }
ref-voice = { \global \removeWithTag #'firstVerse \refVoice }
ref-breaks = {
ref-1 s s s \break
s\break
s s s s 1 s
s}
\markuplist {
TEXT = \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 {
4 \themeChords
s2 \tag #'moreSpace { e:7 }
e}
}
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 =
{ \pushToTag #'moreSpace { \once \override ChordName.extra-spacing-width = #'(-2 . 0.1) } \refChords }
refChords = \chordmode
{ … } 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.
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:
\markuplist {
TEXT = \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:
breaks = {
verse-2.*4 \break %s2.*4 bedeutet, dass s2. 4 mal wiederholt wird
s2.*4 \break
s2.*4 \break
s}
breaks = {
ref-2.*2 \break
s2.*2 \break
s}
\markuplist {
TEXT = \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).
\markuplist {
TEXT = \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.
\markuplist {
TEXT = \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.
\markuplist {
TEXT = \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.
\markuplist {
TEXT = \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.
"}
…
%
\markuplist {
TEXT = \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:
\markuplist {
TEXT = \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)
.
\markuplist {
TEXT = \group-verses {
\override #'(baseline-skip . 1)
\score {
\inline-score
\BRIDGE
{ \generalLayout}
\layout}
}
}
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
hier die gewünschte Größe anpassen
size = 15 %}
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:
\bookpart {
HEADER = {
\paperhier 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:
\bookpart {
HEADER = {
\header\basicSongInfo
hier die Zahl anpassen
titlesize = 11 %}
}
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:
\bookpart {
HEADER = {
\header\basicSongInfo
hier die Zahl anpassen
titletopspace = 2 %}
}
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 = 1*5 \break
s1*5 \break
s1*5 \break
s}
{
MUSIC = <<
\songChords
\new ChoirStaff = "firstStaff"
<<
\new Voice = "firstVoice" { \melodyVoice }
\firstVerse
\addlyrics\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:
Textbeschriftungsbefehle: Für die Nutzung innerhalb eines
\markup { }
-Blocks.Textbeschriftungslistenbefehle: Für die Nutzung innerhalb eines
\markuplist { }
-Blocks.
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.