Hallo
juppes,Lilypond stört sich am Ausdruck "#not-part-first-page". Stimmt mit dem Code etwas nicht?
Zu recht, denn der Code fehlt bestimmt.
#not-part-first-page ist in Lily nicht eingebaut, sondern muss – wie in einer meiner vorherigen Antworten – extra definiert werden:
#(define (not-part-first-page layout props arg)
(if (= (chain-assoc-get 'page:page-number props -1)
(ly:output-def-lookup layout 'first-page-number))
empty-stencil
(interpret-markup layout props arg)))
Diese Funktion ermittelt also, ob es sich
nicht um die
erste Seite eines
\bookpart handelt (kurz: alle übrigen Seiten eines
\bookpart) und wendet daraufhin definiertes Markup an.
Es gibt eine ganze Reihe undokumentierter Funktionen (zumindest in 2.12.3), für die entsprechende Pendants definiert werden können. Ein typisches Beispiel ist die Abfrage, ob Lily auf der
ersten Seite
ist: \on-the-fly #first-page ist eingebaut, in der NR aber nicht dokumentiert. Ebenso funktioniert das Ermitteln, ob es sich
nicht um die erste Seite handelt:
\on-the-fly #not-first-page sucht man vergeblich in den Docs. Was fehlt jetzt noch? Richtig:
\on-the-fly #last-page. Ebenfalls implementiert, trotzdem undokumentiert.
Wenn man nun ein wenig in der verantwortlichen Datei schmökert (
ly/titling-init.ly) oder sich auf eine (Foren-)Suche begibt, stellt man mehr oder weniger flugs fest, was genau Lily eigentlich noch unter der Haube hat – oder was nicht

Es gab aber bereits viele schlaue Leute vor mir, die sich selbiges fragten und die fehlenden Funktionen in diversen Foren (meist auf der
englischen Liste natürlich) ergänzten. Dazu zählt eben auch das fehlende
not-part-first-page (das streng genommen
part-not-first-page heißen müsste, aber das kannst du ja umbenennen), welches sich aus den Definitionen für
part-first-page und
part-last-page ableiten ließ. Ich habe das alles seit Erscheinen von 2.12 für mich zusammengetragen und kann nun Footer und Header gezielt gestalten.
Ich habe noch eine andere Variante eruiert […] Das Ergebnis sind unten auf der Seite zentrierte Seitennummern.
Das ist das Snippet aus der NR, oder? Es definiert ja gerade
zentrierte Seitenzahlen im
Footer:
oddFooterMarkup = \markup {
\fill-line {
\bold \fontsize #3
\on-the-fly #print-page-number-check-first
\fromproperty #'page:page-number-string
}
}
evenFooterMarkup = \markup {
\fill-line {
\bold \fontsize #3
\on-the-fly #print-page-number-check-first
\fromproperty #'page:page-number-string
}
}#print-page-number-check-first überprüft
vor der Ausgabe („on-the-fly“), ob auf der jeweiligen Seite überhaupt eine Seitenzahl gedruckt werden darf:
print-page-number = ##t – ja, generell;
print-first-page-number = ##t – ja, auch auf der ersten Seite. Ich bin von dieser Lösung bewusst abgewichen, da diese Abfrage eben nur für
Seitenzahlen gilt (und ich nicht weiß, ob es ähnliche Abfragen für andere
\header-Elemente, wie z.B.
print-instrument, gibt). Die möglichen Abfragen nach „erster (Bookpart-)Seite“, „letzter (Bookpart)-Seite“ und „nicht-erster (Bookpart)-Seite“ (also aller anderen Seiten) erlauben eine weitaus mächtigere Kontrolle!
Leider bringen sie mir wieder die Instrumentenbezeichnung in der Kopfzeile zum Verschwinden.
Tja, das ist die Kehrseite der Medaille und Schlüssel zu allen weiteren Überlegungen: damit die Seitenzahlen nicht doppelt ausgegeben werden (per default in der Kopfzeile und nun zusätzlich in der Fußzeile), muss die Kopfzeile (in der die Seitenzahlen sonst erscheinen würden), mit leerem Markup überschrieben werden:
oddHeaderMarkup = \markup \fill-line { " " }
evenHeaderMarkup = \markup \fill-line { " " }Trage ich in den leeren Markups eine Instrumentenbezeichnung ein, habe ich sie auf der ersten Seite dann doppelt, es sei denn, ich trage im Header bei "instrument" nichts ein.
Richtig, denn aus der Beschreibung für die
instrument-Headervariable
Name of the instrument, centered below the subsubtitle. Also centered at the top of pages (other than the first page)
ergibt sich, dass auf der ersten Seite die Headervariablen wie angegeben ausgegeben werden, auf den anderen Seiten außer der ersten („other than the first page“) aber anders. Damit eine Ausgabe aber überhaupt erfolgt, muss sie durch irgendeine Angabe ausgelöst werden; in deinem Beispiel die Definition eines Instruments.
Doppelt ist die Instrumentenbezeichnung auf der ersten Seite allein deswegen, weil eine
zusätzliche Kopfzeileninformation definiert wurde, also
instrument +
oddHeaderMarkup! Auf den Folgeseiten wird die Kopfzeile dann wie gesagt mit leerem Markup überschrieben.
Für alle, die es noch nicht wussten bzw. als Gedankenstütze für Vergessliche: Falls
evenHeader|FooterMarkup nicht definiert ist, wird die Definition aus
oddHeader|FooterMarkup angewandt. Wenn zwischen geraden und ungeraden Seiten also nicht unterschieden werden braucht, genügt die einmalige Definition für
oddHeader|FooterMarkup …
Zu deinem Problem nun kurz und knapp: Wenn du die book-bookpart-Konstruktion nicht verwendest, streiche einfach den
part-Teil aus den Abfragen. Genau genommen behandelt Lily einen alleinigen
\score-Block wie ein
\book, das nur aus
einem \bookpart besteht, ohne extra
not-part-first-page definieren zu müssen (siehe
ly/titling-init.ly). Ich wollte das nur der Vollständigkeit halber erwähnen …
Am elegantesten, weil üblich und gewohnt und bewährt, ist/bleibt für mich folgende Gestaltung:
• erste Seite (nicht Titelseite!): alle Angaben zu Werk, Komponist, Texter, Widmung etc.
ohne Seitenzahl; evtl. Editions-/Verlagsnummer zentriert in der Fußzeile
• alle weiteren Seiten:
(1) Kopfzeile: Seitenzahl abwechselnd links/rechts (ungerade [odd] immer rechts; gerade [even] immer links; allgemein: außen); wenn zusätzlich Instrument/Stimme: zentriert; falls zusätzlich Komponist → s. Fußzeile; falls zusätzlich Werk → s. Fußzeile
(2) Fußzeile: allgemein leer (Mindestabstand beachten, damit Systeme nicht optisch „unten aus der Seite fallen“; quasi Passepartout); falls durchgängig Ed.-Nummer/Verlag: zentriert; falls zusätzlich Komponist: links auf geraden Seiten als eindeutiger (Kurz)Name (z.B. Mendelssohn oder C. P. E. Bach); falls zusätzlich Werk: rechts auf ungeraden Seiten in Kurzform (z.B. Psalm 43)
Alle Verlage haben ihre eigenen Editionsrichtlinien, bei denen man sich immer was abgucken kann! Und das allerschönste ist immer noch: Lily kann das alles mitmachen

Ich erzähle immer wieder gern – und heute schreibe ich es auch einmal –, wie ich vor ein paar Jahren (es war mit der Entwicklerversion 2.11.x kurz vor 2.12) zum „Kennenlernen“ einen kurzen dreistimmigen Chorsatz abtippte und Lilys Ergebnis
beängstigend dem Druck glich, den ich da eben als Fingerübung eingegeben hatte – spooky

Und sofort war ich „angefixt“ und stürzte mich in alle Untiefen der Userschnittstellen, um meine Partituren auch in allen anderen Punkten gestalterisch den Ausgaben der Verlagsplatzhirsche anzupassen – der helle Wahnsinn und andauernde Überraschung, was noch alles „drin“ war und immer noch ist. Selbst heute, im dritten Jahr aktivsten „Lilypondens“, schnorchel ich zwar weit unter der Oberfläche, aber jeder neue Tauchgang ist ein Vorstoß in unerforschte Tiefen des Tümpels. Ich brauche kein teures und kein preiswertes Noten
schreibprogramm, ich brauche nur
ein einziges, dazu noch kostenloses Noten
satzprogramm: Lily – I love you!
Forever yours,
Robert