Markup am Score-Ende innerhalb des Score-Kontextes, analog scoreTitleMarkup

Begonnen von martinmagtenor, Samstag, 7. Juni 2025, 22:45

« vorheriges - nächstes »

martinmagtenor

Hallo,

ich stehe mal wieder auf dem Schlauch.

Ich brauche eine Testausgabe am Ende eines Score-Ausdrucks, so dass der Text nach der Musik ausgegeben wird, aber innerhalb des Score-Blocks, damit ein fromproperty den im Score-Header definierten Inhalt referenzieren kann. Im Grunde ein Gegenstück zu scoreTitleMarkup, nur eben für das Ende der Partitur (um  den deutschen Ausdruck zu verwenden).

Der folgende Beispielcode ist eine Skizze. Sie ist nicht kompilierbar, taugt aber vielleicht zur Verdeutlichung um was es mir geht. Im Ergebnis geht es um ein Werk mit mehr als 200 Seiten, in dem an die 200 Scores in unterschiedlicher Länge (zwischen 10 und 100 Takten und ein bis vier Stimmen) enthalten sind.

Die gewählte Segmentierung in Dateien ist dafür da, dass ich den gleichen Quellcode auch für Einzelausgaben verwenden kann:

\version "2.24.4"

\include "noten-a.ly"
\include "noten-b.ly"
\bookpart {
  \header {
    % die Deklarationen für den ersten Teil
    subtitle "Teil 1"
  }
  \include "score-a.ly"
  \include "score-b.ly"
}


\include "noten-c.ly"
\include "noten-d.ly"
\bookpart {
  \header {
    subtitle = "Teil 2"
  }
  \include "score-c.ly"
  \include "score-d.ly"
}

Innerhalb der score-x.ly-Dateien stehen innerhalb von \score { ... } wieder header-Elemente, in denen Festlegungen stehen, die sich auf den umgebenden score beziehen. Beispiel:

\score {
  \header {
    subsubtitle = "Lied 1" % oder Lied 2, ... (für scoreTitleMarkup)
    querverweis = "Hinweis auf ..." % soll NACH der Musik ausgegeben werden
  }
  <<
  % Musik
  >>
}
Wenn Lilypond den Quelltext eingelesen und der Scheme-Anteil verarbeitet wird, triggert, so meine Annahme, die Lilypond-Engine (C++) unter anderem die Ausführung der scoreTitleMarkup-Definition und im Anschluss den score-Inhalt. Das passiert für jeden Score im bookpart und dann geht's weiter zum nächsten bookpart usw.

Die Header-Definition im Bookpart kann ich für meinen Zweck nicht nutzen, denn da gewinnt der letzte Eintrag im bookpart.

Im Grunde bräuchte ich etwas, das analog zum scoreTitleMarkup am Ende des umgebenden Scores getriggert würde, z.B. könnte es  scoreEndMarkup oder scoreAfterMarkup (besser afterScoreMarkup) genannt werden.

Martin

Lilysetter

Lies Dir die folgenden Dateien durch und verstehe, wie z.B.
oddFooterMarkup = \markup {
  \column {
    \fill-line {
      %% Copyright header field only on first page in each bookpart.
      \if \on-first-page-of-part \fromproperty #'header:copyright
    }
    \fill-line {
      %% Tagline header field only on last page in the book.
      \if \on-last-page \fromproperty #'header:tagline
    }
  }
}
funktioniert. Dies kannst Du selbst anpassen, evtl. mit eigenen neuen Variablen, die z.B. nur einmal im Book definiert werden.
share\lilypond\2.25.24\ly\titling-init.ly
share\lilypond\2.25.24\ly\paper-defaults-init.ly
share\lilypond\2.25.24\scm\lily\define-paper-variables.scm
share\lilypond\2.25.24\scm\lily\define-markup-commands.scm
share\lilypond\2.25.24\scm\lily\page.scm
share\lilypond\2.25.24\scm\lily\paper.scm
share\lilypond\2.25.24\scm\lily\titling.scm

Siehe auch im notation-Handbuch bei "Custom layout for headers and footers".  footer ist Dein Stichwort.

martinmagtenor

Hallo,

Danke für die Hinweise.

Header und Footer kommen nach meinem Verständnis leider nicht infrage, denn in der Dokumentation steht (Zitat aus V2.23 creating-titles-headers-and-footers):

ZitatKopf- und Fußzeilen sind Textzeilen, die ganz oben und ganz unten auf der Seite stehen, unabhängig vom Textbereich eines Buches. Sie können mit folgenden \paper-Variablen kontrolliert werden:

    oddHeaderMarkup
    evenHeaderMarkup
    oddFooterMarkup
    evenFooterMarkup

Diese Beschriftungsvariablen können nur auf Textfelder einer Haupttitelumgebung ([...]) zugreifen und sind definiert in der Datei 'ly/titling-init.ly'. In den Standardeinstellungen

In der Auslassung steht: "eine \header-Umgebung auf höchster Ebene, die sich auf alle \score-Umgebungen einer Datei bezieht". Und damit sind Festlegungen am Score ausgeschlossen.

Und bei Header-Umgebungen gewinnt jeweils die letzte innerhalb einer Book- bzw. Bookpart vorkommende. Soweit mein Kenntnisstand.

Außerdem: Fußnoten (footer) landen per Definition am Ende der Seite und haben keinen Bezug zum jeweiligen Score/Partitur.

Aktuell trickse ich mit globalen Makros, deren Namen innerhalb des Dokuments bzw. der Dokumentenhierarchie eindeutig sind und bleiben und füge ein Markup direkt nach dem Score ein. Das funktioniert leidlich, solange Lilypond nicht meint, nach dem Score einen Seitenumbruch machen zu müssen. Dann steht mein markup auf der nächsten Seite, quasi ohne Bezug zum Notentext.

Mal sehen, das ist alles noch work-in-progress ...

Lilysetter

> Das funktioniert leidlich, solange Lilypond nicht meint, nach dem Score einen Seitenumbruch machen zu müssen.
Das kenne ich ...
The \pageBreak and \noPageBreak commands may also be inserted at top-level, between scores and top-level markups.
Within a score, automatic page breaks are prevented within music lying between \autoPageBreaksOff and \autoPageBreaksOn commands. Manual page breaks are unaffected by these commands.
Kannst Du doch mal ein Minimal-Beispiel oder ein konkretes pdf machen, aus dem hervorgeht, was Du wo stehen haben willst. Ich habe es nämlich noch nicht ganz verstanden.
Ich mache ganz gern Trixereien direkt in Postscript. Davon weiß Lily überhaupt nichts und pfuscht mir nicht drein:
\version "2.25.6"
\score{\relative{\repeat unfold 50 a' a_\markup
  \postscript"/testtext(Das ist der Testtext )def -35 -2 rmoveto /C059-Roman 2 selectfont testtext show(innerhalb des Scores.)show"}}
\score{\relative{\repeat unfold 50 a'}}
\markup\postscript"/C059-Roman 3 selectfont testtext show(ausserhalb der Scores.)show"