Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: jpv am Freitag, 7. August 2009, 12:08

Titel: Vertical Spacing Verständnisfrage
Beitrag von: jpv am Freitag, 7. August 2009, 12:08
Hallo allerseits,

ich setze derzeit einige Chorsätze, die für uns bisher nur handschriftlich vorliegen. Dabei tritt in einem Stück immer wieder ein seltsames Phänomen auf:

Es handelt sich um eine SATB-Partitur, in der alle Stimmen teilweise in Stimme I und II geteilt sind, wobei der Text etwas kleiner vertical versetzt unter dem System steht. Ich habe mit #(set-global-staff-size 16) die Größe gesetzt, so daß eigentlich immer 3 Systeme auf eine (Din-A4) Seite passen. Allerdings bleibt nun immer mittendrin auf einer Seite die Mitte weiß. Wenn ich die globale (Staff-)Größe auf 15 ändere, tritt dies an zwei anderen Stellen auf. Mit annotate-spacing=#t sind Abstände zu sehen, die es eigentlich zulassen würden, auf allen Seiten 3 Systeme abzubilden.
Ich habe in den Kontexten Staff und Lyrics schon sehr viel an der Vertical-Axis-Group gedreht, aber das ändert dieses Verhalten nicht. Des weiteren habe ich dynamische Zeichen und Stimmverteilungshinweise in stanza-Anweisungen verpackt um vertikal Platz zu sparen.
Die Menge der Systeme habe ich nicht gesetzt, da ich mehrere Stücke in einem Buch zusammenfassen möchte.

Welche Möglichkeiten gibt es noch, dieses Verhalten zu beeinflussen?

Mit besten Grüßen,
jpv
Titel: Re: Vertical Spacing Verständnisfrage
Beitrag von: etilli33 am Freitag, 7. August 2009, 12:27
Hmm, das ist jetzt ein Rätselraten meinerseits: ich erinnere mich dumpf, dass in der neuesten Entwicklungsversion (oder auch der, die jetzt erst erscheinen soll, 2.13.4) eine Möglichkeit geschaffen wurde, die Systeme pro Seite zu bestimmen.

Gruss
till
Titel: Re: Vertical Spacing Verständnisfrage
Beitrag von: RobUr am Freitag, 7. August 2009, 16:25
Hallo jpv,

das mit dem "eigentlich passen" ist halt so eine Sache ... Wenn ich bei meinen Geschichten das Spacing anzeigen lasse, kann ich nur auch manchmal den Kopf schütteln, warum in aller Welt das eine verdammte System partout nicht auf die Seite will, wo doch rechnerisch Platz sein müsste!

Aber wie kann ich dir helfen: mit dem Gefrickel an der Vertical-Axis-Group leider nicht, da ich Lily hier immer noch nicht folgen kann. Meine Hauptansatzpunkte, um Lily zu schönem Spacing zu überreden, sind folgende:

Wenn du mehrere Sätze in einem Buch zusammenfassen möchtest, kannst du aber trotzdem das Seitenlayout individuell anpassen, indem du jeden Satz in einen eigenen bookpart-Block packst. Damit sind pro Block alle layoutspezifischen Angaben umdefinierbar, ohne die globalen Einstellungen ändern zu müssen. Hier ein Schema:
\version "2.12.2"
\include "deutsch.ly"
#(ly:set-option 'point-and-click #f)
#(ly:set-option 'delete-intermediate-files #t)
#(set-global-staff-size 15.87)

% Variablen mit Musik und Text definieren
SopranNotenErstesStueck = \relative { ... }
    ...
BassNotenErstesStueck = \relative { \clef "bass" ... }

SopranTextErstesStueck = \lyricmode { ... }
    ...
BassTextErstesStueck = \lyricmode { ... }

SopranNotenZweitesStueck = \relative { ... }
   ...
BassNotenZweitesStueck = \relative { \clef "bass" ... }

SopranTextZweitesStueck = \lyricmode { ... }
    ...
BassTextZweitesStueck = \lyricmode { ... }

\book { % erzeugt einen Buchblock
    \header { % hier die globalen Titelangaben für den aktuellen Buchblock definieren
        title = "Mein Liederbuch"
    } % beendet \header

    \paper { % hier die globale Seitenformatierung für den aktuellen Buchblock definieren
        left-margin = 20\mm
        line-width = 170\mm
    } % beendet \paper

    \bookpart { % neuer Buchteil für erstes Stück;
                % hierin werden die Systeme definiert und abweichende Layoutangaben gemacht
        \score { % Systeme definieren
            \new ChoirStaff
            <<
                \new Staff = Sopran
                    \new Voice = "Sopran" { \SopranNotenErstesStueck }
                    \new Lyrics \with { alignBelowContext = Sopran }
                    \lyricsto "Sopran" { \SopranTextErstesStueck }
                ...
                \new Staff = Bass
                    \new Voice = "Bass" { \BassNotenErstesStueck }
                    \new Lyrics \with { alignBelowContext = Bass }
                    \lyricsto "Bass" { \BassTextErstesStueck }
            >>

            \header { % hier abweichende Titelangaben machen
                title = "In einem kühlen Grunde"
            } % beendet \header

            \layout { % veranlasst die Ausgabe der Systeme
                system-count = #6 % versucht, Musik auf 6 Systeme zu verteilen
                page-count = #2   % und zwar auf 2 Seiten
            } % beendet \layout
        } % beendet \score

        \paper { % hier abweichende Layoutangaben machen
            head-separation = 0\mm % default: 4 mm
            foot-separation = 2\mm % default: 4 mm
            page-top-space = 5\mm  % default: 12 mm
        } % beendet \paper
    } % beendet \bookpart

    \bookpart { % neuer Buchteil für zweites Stück; erzeugt Seitenumbruch
        \score {
            \new ChoirStaff
            <<
                \new Staff = Sopran
                    \new Voice = "Sopran" { \SopranNotenZweitesStueck }
                    \new Lyrics \with { alignBelowContext = Sopran }
                    \lyricsto "Sopran" { \SopranTextZweitesStueck }
                ...
                \new Staff = Bass
                    \new Voice = "Bass" { \BassNotenZweitesStueck }
                    \new Lyrics \with { alignBelowContext = Bass }
                    \lyricsto "Bass" { \BassTextZweitesStueck }
            >>

            \header { % hier abweichende Titelangaben machen
                title = "Ich weiß nicht, was soll es bedeuten"
            } % beendet \header

            \layout { % veranlasst die Ausgabe der Systeme
                system-count = #3 % versucht, Musik auf 3 Systeme zu verteilen
                page-count = #1   % und zwar auf 1 Seite
            } % beendet \layout
        } % beendet \score

        \paper { % hier abweichende Layoutangaben machen
            left-margin = 15\mm % überschreibt globale Angabe für den aktuellen Block
            line-width = 180\mm % dito
            head-separation = 0\mm   % default: 4\mm
            foot-separation = 2\mm   % default: 4\mm
            page-top-space = 5\mm    % default: 12\mm
            after-title-space = 0\mm % default: 5\mm
        } % beendet \paper
    } % beendet \bookpart
} % beendet \book

Jeder weitere \bookpart erzeugt wieder einen eigenen Abschnitt in derselben Ausgabedatei.
Jedes weitere \book erzeugt eine eigene neue Ausgabedatei. Sehr praktisch, um ganz bequem Einzelstimmen zu erzeugen. Für umfangreichere Bücher ist es ratsam, die Variablen mit Musik und Text in eigene Eingabedateien auszulagern und per \include "ErstesStueck.ly" o.ä. einzubinden. Die Zeilenanzahl würde sonst einfach nicht überschaubar bleiben. Wichtig ist, dass Variablen eindeutig benannt und vor der Verwendung definiert sind.

Du kannst auch gern einmal eine Datei von dir posten, die man sich anschauen kann.

Beste Grüße,
Robert
Titel: Re: Vertical Spacing Verständnisfrage
Beitrag von: jpv am Montag, 10. August 2009, 18:29
Hallo,
vielen Dank für die umfangreichen Antworten!  :) und Entschuldigung, dass ich erst jetzt wieder reagiere!

@til: Aha, verstehe ... ich hatte den Hinweis auf diese Funktion mit Google schon gefunden, den Versions-Hinweis allerdings übersehen. Ich freu mich schon auf die nächsten Versionen. Zur Zeit verwende ich 2.13.3 unter MacOSX 10.5 und 2.12.1 unter Ubuntu 9.04.

@Robert: Vielen Dank für die schöne Übersicht der Spacing-Funktionen und das Template!

Ich füge in meinem Projekt mehrere Chorstücke zusammen, indem ich in eine Gesamtdatei die einzelnen Stücke importiere:
\include "papier.ly"
\markup {
\fill-line {
\center-column {
\fontsize #10 "Der Komponist"
\fontsize #7 "Die Chormusik"
}
}
}
\markuplines \table-of-contents

\include "stück1.ly"
\include "stück2.ly"
\include "stück3.ly"

In der Datei papier.ly definiere ich, wie der Name sagt, das Papier. Diese Datei importiere ich auch in die einzelnen Stücke:
\include "papier.ly"
meta = {
\tocItem \markup { "Der Titel des Stückes" }
\time 4/4 \tempo "schnell"
s4*148
\time 6/8 \tempo "ruhig"
}
...
\score {
...
}

Auf diese Weise kann ich die einzelnen Stücke auch einzeln bauen.
Hier die papier.ly
date = #(strftime "%d.%m.%Y" (localtime (current-time)))

\paper {
%annotate-spacing = ##t
between-system-padding = #1.6
left-margin = 25\mm
line-width = 160\mm
top-margin = 15\mm
bottom-margin = 15\mm
ragged-last-bottom = ##t
ragged-bottom = ##f
oddHeaderMarkup = ""
evenHeaderMarkup = ""
oddFooterMarkup = \markup {
\fontsize #-2 \fill-line { "LilyPond 2.13.3" \date \fromproperty #'header:title \fromproperty #'page:page-number-string } }
evenFooterMarkup = \markup {
\fontsize #-2 \fill-line { \fromproperty #'page:page-number-string \fromproperty #'header:title \date "LilyPond 2.13.3" }
}
}

#(set-global-staff-size 16)

Die Lösung für mein Problem waren tatsächlich die beiden ragged-statements. Diese stehen ja in der papier.ly und diese hatte ich aus einer älteren Version eines der Stücke geholt, in der ich die Ränder anders definiert hatte. Es gab eine Version, in der ich dieses Stück auf 6 Seiten gedrückt habe, was mit ragged-last-bottom = ##f besser aussah. Nun habe ich nachträglich die Ränder verbreitert, damit der gemeine Chorsänger auch eine Chance hat diese Noten in eine Mappe zu *klemmen* ;)

Vielen Dank noch einmal für Eure Hinweise, damit kann ich mein Projekt auf jeden Fall noch optimiern!.

Musikalische Grüße,
jpv