Weihnachtsliederbuch (sic) und Seitenvorschübe

Begonnen von Rhaban, Montag, 28. Mai 2018, 11:35

« vorheriges - nächstes »

Rhaban

Hallo,

ich bin von Freunden, die ein christliches Gästehaus leiten, gebeten worden, ein Weihnachtsliederbuch mit Lilypond zu setzen. Ich habe nun alle Lieder gesetzt und wollte nun eine PDF-Datei mit Lilypond erzeugen, in welcher alle Lieddateien enthalten sind. (Bei den einzelnen Liedern gab es mit Lilypond keine unüberwindlichen Probleme.)

Da ich in den Weihnachtstagen die Lieder selbst am Klavier oder auf der Orgel spielen möchte, aber auch andere das Liederbuch verwenden möchten, ist mir Folgendes wichtig:

1. Lieder sollten nicht von der ungeraden (rechten) Seite auf die gerade (linke) Seite gehen, weil man während des Spiels ja nicht umblättern kann.

2. Es ist kein Problem, wenn ein Lied von der geraden (linken) auf die ungerade (rechte) Seite geht, da man ja da nicht umblättern muss.

Ich habe nun mit \include versucht, die einzelnen Lilyponddateien nacheinander aufzurufen und kompilieren zu lassen, habe mit \pageBreak Seitenvorschübe eingefügt ... leider will Lilypond oft nicht so, wie ich will.

Konkret: Meine Lieddateien heißen W_000.ly, W_001.ly bis (mit numerischen Lücken) W_416.ly. Jede einzelne Lilyponddatei ließ sich einzeln auch problemlos nach W_000.pdf usf. kompilieren.

Für meine ,,Gesamt-PDF-Datei" habe ich (via Shellscript; ich verwende Kubuntu) eine Lilypond-,,Stammdatei" erzeugt, in der alle zu kompilierenden Lilyponddateien hintereinander aufgeführt sind:

\version "2.18.2"
\include "papier_wlb.ly"
\include "W_000.ly"
\include "zeile.ly"
\allowPageTurn
\include "W_001.ly"
\include "zeile.ly"
\allowPageTurn
\include "W_002.ly"
\include "zeile.ly"
\allowPageTurn
\include "W_003.ly"
\include "zeile.ly"
\allowPageTurn


usf.

In papier_wlb.ly steht:

\paper {
    myStaffSize = #15  % alt: 20
    %    #(define fonts (make-pango-font-tree "Minion Pro" "Helvetica_Neue" "FreeMono" (/ myStaffSize 20)))
indent = 0\cm

        page-breaking = #ly:optimal-breaking
print-page-number = ##f
print-first-page-number = ##f
between-system-padding = #2.0 % alt: 1.6, dann: 2.0
left-margin = 20\mm
line-width = 172\mm
ragged-last-bottom = ##t
ragged-bottom = ##t % alt: ##f
oddFooterMarkup = ""
evenFooterMarkup = ""           
        #(set-global-staff-size 15)  % alt: 16
        %      annotate-spacing = ##t 
}


In zeile.ly (mit dem Ziel, etwas Leerraum zwischen den Liedern zu erzeugen:

\markup { " " }
\markup { " " }


Theoretisch könnte ich auch mit pdftk alle PDF-Dateien (die ja existieren) aneinander hängen, dann aber hätte man ― je nach Länge des Liedes ― oft viel Leerraum, der aber, aus Kostengründen, vermieden werden sollte.

Wenn mir jemand weiterhelfen könnte, die Lieddateien in der gewünschten Weise aneinanderzu hängen, wäre ich dankbar.

Rhaban

Arnold

Hallo,

entschuldige die knappe Antwort, aber:

Hilft Dir page-turn-breaking (statt optimal-breaking) weiter?

Arnold

Rhaban

Hallo, Arnold,

vielen Dank für Deine schnelle Antwort. Du schreibst: ,,Hilft Dir page-turn-breaking (statt optimal-breaking) weiter?".

Ich muss gestehen, dass ich die Datei paper_wlb.ly zu großen Teilen aus dem Internet kopiert habe; von wo genau, weiß ich leider nicht mehr. Da stand "optimal-breaking".

Ich will es aber gleich einmal mit page-turn-breaking versuchen.

(...)

Leider führt page-turn-breaking dazu, dass jetzt nach fast jeder Zeile ein Seitenumbruch erfolgt.

Viele Grüße

Rhaban

Manuela

Ich stand auch vor dem "Liederbuchproblem". Bisher habe ich noch keine andere Lösung gefunden als eine Menge Handarbeit.

Hier habe ich meine Erfahrungen zusammenfasst, vll. hilft dir das ja weiter
Danke für eure Hilfe
viele Grüße
-- Manuela

Hilflos-im-Code

Es entspricht zwar nicht dem Automatismusgedanken von Lilypond, aber als ich vor solch einem Problem stand, habe ich mir zusätzlich mit \bookpart geholfen. Vorraussetzung für das Verfahen ist, dass das Endprodukt für lange Zeit feststeht.

Also 1. Durchlauf ohne bookpart.
Ergebnis ansehen. Ab dem Punkt, wo ich mit all den Umbrechungskommandos mehr Schaden als Nutzen angerichtet habe, habe ich die bis dahin brauchbaren Anfangsstücke in ein  \bookpart {} gepackt. Notfalls in dieser \bookpart Umgebung die Seitenzahl mit \paper bestimmt.

Dann den nächsten Bereich einkapseln, den Lilypond einigermaßen vernünftig darstellt.

Für besonders kniffelige Sachen habe ich in jedem einzelnen Lied folgenden Layoutblock gehabt:

\layout {
       system-count = 6
    \context {
      \Score
      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/48)
    }


Aber entweder System-count verwenden oder den SpacingSpanner.

Wirkt kompliziert, aber ging schneller als herauszufinden, wie ich den Automatismus am besten einstelle.

Befegle \nopageTurn und \nopageBreak kennst Du?

harm6

Zitat von: Hilflos-im-Code
als ich vor solch einem Problem stand, habe ich mir zusätzlich mit \bookpart geholfen.
[...]
Wirkt kompliziert, aber ging schneller als herauszufinden, wie ich den Automatismus am besten einstelle.

Ich würde ähnlich vorgehen.

Der Vollständigkeit halber:
Du kannst aber auch versuchen das line-break-, page-break- und page-turn-Verhalten durch Gewichtungen zu beeinflussen.

Dafür gibts:

Das music-property:
break-penalty

Und die grob-properties von (NonMusical)PaperColumn:
line-break-penalty
page-break-penalty
page-turn-penalty

Anwendungsbeipiele sind aber kaum zu finden.
Hier eines von Torsten:
https://archiv.lilypondforum.de/index.php/topic,1356.msg7454.html#msg7454


Gruß,
  Harm

Ansgar

Ich habe auch lange an diesem Problem gesessen und gegrübelt. Aber durch den Link von Harm, habe ich eine einfache gut funktionierende Lösung gefunden:

\score {
  \relative c' { \key c \major \time 4/4
    \override Score.NonMusicalPaperColumn #'page-break-penalty = #10
    c4 d e2 \bar "|."
    \revert Score.NonMusicalPaperColumn #'page-break-penalty
  }
}

% Sowohl Möglichkeit für Lilypond einen "schöneren" Umbruch durchzuführen,
% als auch Abstandshalter zwischen Score und nachfolgende Überschrift:
\markup { " " }

Die beiden Zeilen mit override bzw revert habe ich gleich in meine Vorlage mit eingebaut. Jetzt funktionieren die automatischen Umbrüche nur nach einem Score (es sei denn der Score ist zu lang für eine Seite.) Wenn der Score zu lang sein sollte kann man äquivalent dazu mit turn-page-penalty verhindern, dass im Stück umgeblättert werden muss.
(Ich fand es sinnvoller, den ganzen Score mit einem Umbruchsmalus zu belegen als die Schlußnote mit einem Umbruchsbonus)