Header-Zeile [gelöst]

Begonnen von rgree, Dienstag, 29. Juli 2025, 17:29

« vorheriges - nächstes »

rgree

Hallo,

ich habe das Problem, das ich in einer Header-Zeile links oben unterschiedliche Inhalte stehen haben
will abhängig davon, ob es die erste Seite ist oder eine der Folgeseiten.

\version "2.43.3"
inst = "Violine 1"
xxx = "xxx"
\book {
  \paper {
    print-page-number = ##t
    print-first-page-number = ##t
    oddHeaderMarkup = \markup
    {
      \fill-line {
        \on-the-fly \first-page \inst
        \on-the-fly \not-first-page \xxx
        " "
        \fromproperty #'page:page-number-string
      }
    }
    evenHeaderMarkup = \oddHeaderMarkup
    oddFooterMarkup = ""
    evenFooterMarkup = ""
  }
  \score {
    \new Staff {
      s1 \break s1 \break s1
      \pageBreak
      s1 \break s1 \break s1
    }
  }
}

Die Sequenz "\on-the-fly \first-page \inst" scheint zu bedeuten: setze auf der 1. Seite links oben den Inhalt von "\inst", andernfalls lasse es leer.
Ich möchte aber dagegen, dass die Seite links oben alternativ mit \inst oder \xxx gefüllt wird.

Jemand eine Idee ?

Gruß,
Reinhard

harm6

Zitat\version "2.43.3"

Das ist wohl ein Tippfehler...
Welche Version verwendest du tatsächlich?
Im Bereich der page-header/footer hat 2.25.x neue/andere Möglichkeiten.


Gruß,
  Harm

harm6

ZitatIm Bereich der page-header/footer hat 2.25.x neue/andere Möglichkeiten.

Das sind vor allem die markup-commands \if und \unless.
\if gibt das Argument zurück, falls die condition true - \unless, falls die condition false ist. Ansonsten kommt ein empty-stencil zurück.

Am einfachsten kommen wir weiter mit einem markup-command welches zwei markup-Argumente nimmt und abhängig von der condition das eine oder das andere zurück gibt.

#(define-markup-command (if-else layout props condition? arg1 arg2)
  (procedure? markup? markup?)
  #:category conditionals
  (interpret-markup layout props (if (condition? layout props) arg1 arg2)))

\version "2.24.3"
inst = "Violine 1"
xxx = "xxx"
\book {
  \paper {
    print-page-number = ##t
    print-first-page-number = ##t
    oddHeaderMarkup = \markup
    {
      \fill-line {
        \if-else \on-first-page-of-part \inst \xxx
        " "
        \fromproperty #'page:page-number-string
      }
    }
    evenHeaderMarkup = \oddHeaderMarkup
    oddFooterMarkup = ""
    evenFooterMarkup = ""
  }
  \score {
    \new Staff {
      s1 \break s1 \break s1
      \pageBreak
      s1 \break s1 \break s1
    }
  }
}

Da if-else hier definiert ist funktioniert es bereits mit 2.24.

Gruß,
  Harm

rgree

Hallo,

ich habe die Version "2.24.4" installiert und die erste Kompilation läuft auf den Fehler:
/----------------------------------------------------------------------------------------------------
Starte lilypond.exe 2.24.4 [violinI.ly]...
Processing `C:/LilyPond/myLy/Krommer_Franz/Streichquartette/op_068-wicky/Kunzelmann_v24/#1/violinI.ly'
Parsing...
Interpreting music...[8][16][24][32][40][48][56][64][72][80][88][96][104][112][120][128][136][144][152][160][168][176][184][192][200][208][216][224][232]
Preprocessing graphical objects...
Interpreting music...[8][16][24][32][40][48][56][64][72][80][88][96][104][112][120]
Preprocessing graphical objects...
Interpreting music...[8][16][24][32][40][48][56][64][72][80][88]
Preprocessing graphical objects...
Interpreting music...[8][16][24][32][40][48][56][64][72][80][88][96][104][112][120][128][136][144][152][160][168][176][184][192]
Preprocessing graphical objects...
Finding the ideal number of pages...
C:/LilyPond-2.24.4/share/lilypond/2.24.4/ly/init.ly:65:2: error: Guile signaled an error for the expression beginning here
#
 (let ((book-handler (if (defined? 'default-toplevel-book-handler)
Wrong number of arguments to #<procedure 452c460 at ice-9/eval.scm:336:13 (a b)>
Wurde mit dem Return-Code 1 beendet.

/----------------------------------------------------------------------------------------------------

Der Fehler scheint wohl bekannt zu sein, aber leider habe ich weder Zeit noch Nerven noch genug Lilypond-Expertise, einen Klärungsprozess in Gang zu setzen.  :)
Daher meine Frage, die auch dem obigen Minimal-Beispiel zugrundeliegt:
gibt es eine Möglichkeit mit der Syntax von Version <= "2.22.xx" folgendes einfaches Problem zu lösen:

(1)
In den Noten einer Violin-Einzelstimme soll in der Header-Zeile das Instrument und die Seitenzahl stehen.
Auf ungeradzahligen Seiten soll rechts die Seitennummer stehen, in der Mitte das Instrument.
Auf geradzahligen Seiten soll links die Seitennummer stehen, in der Mitte das Instrument.
Einzige Ausnahme:
auf der ersten Seite (in meinem Fall eine geradzahlige, d.h. die Noten beginnen mit Seitennummer 2)
soll links der Instrumenten-Name stehen, sonst nichts.
Ich kann natürlich nicht ausschließen, dass ich was übersehe :( .

(2)
Wenn das nicht geht, käme meine nächste Frage.
Bekanntlich kann man den im Header referenzierten Feldern noch Attribute mitgeben,
z.B. "\sans\larger\with-color #red \fromproperty #'page:page-number-string"
Wenn man auch die Y-Position eines solchen Feldes verändern könnte, wäre ein Workaround,
eine 2. Headerzeile zu definieren, was etwa so geht:

evenHeaderMarkup = \markup {
 \center-column {
  \fill-line {
      "links 1. Zeile"
      "mitte 1. Zeile"
      "rechts 1. Zeile"
  }
  \fill-line {
      "links 2. Zeile"
      "mitte 2. Zeile" % immer leer
      "rechts 2. Zeile" % immer leer
  }
 }
}

und dann unter der Bedingung "first-page" das Feld "links 1. Zeile" leer machen
und das Feld "links 2. Zeile" nach oben verschieben.
Nun die Frage: Gibt es eine Möglichkeit, das Feld zu verschieben ?!
-\tweak Y-offset n funktioniert leider nicht.

Gruß,
Reinhard






 






rgree

Ich schließe das hier mal ab.
Vielleicht habe ich einen anderen Weg gefunden .

Gruß,
Reinhard

harm6

ZitatIch schließe das hier mal ab.

Und ich wollte gerade antworten ;)
Mach ich trotzdem:

Zitatich habe die Version "2.24.4" installiert und die erste Kompilation läuft auf den Fehler:
[...]
ZitatWrong number of arguments to #<procedure 452c460 at ice-9/eval.scm:336:13 (a b)>
Ein Syntax-error, entweder in der Anwendung oder eine Situation, die mein vorheriges Coding nicht berücksichtigt.

ZitatIn den Noten einer Violin-Einzelstimme soll in der Header-Zeile das Instrument und die Seitenzahl stehen.
Auf ungeradzahligen Seiten soll rechts die Seitennummer stehen, in der Mitte das Instrument.
Auf geradzahligen Seiten soll links die Seitennummer stehen, in der Mitte das Instrument.

Das ist sowieso der default.

ZitatEinzige Ausnahme:
auf der ersten Seite (in meinem Fall eine geradzahlige, d.h. die Noten beginnen mit Seitennummer 2)
soll links der Instrumenten-Name stehen, sonst nichts.

Man kann den default erweitern, aber dann würde ich das instrument aus dem bookTitleMarkup enfernen (s.u.).

Zitatgibt es eine Möglichkeit mit der Syntax von Version <= "2.22.xx" folgendes einfaches Problem zu lösen:

Mir ist unverständlich warum du 2.22-Syntax haben willst, wenn du mit 2.24. arbeitest...

Aber gut:
\version "2.22.2"

#(set-default-paper-size "a6")

\paper {
  first-page-number = 2
  %% bookTitleMarkup without header:instrument, otherwise default
  bookTitleMarkup = \markup {
    \override #'(baseline-skip . 3.5)
    \column {
      \fill-line { \fromproperty #'header:dedication }
      \override #'(baseline-skip . 3.5)
      \column {
        \fill-line {
          \huge \larger \larger \bold
          \fromproperty #'header:title
        }
        \fill-line {
          \large \bold
          \fromproperty #'header:subtitle
        }
        \fill-line {
          \smaller \bold
          \fromproperty #'header:subsubtitle
        }
        \fill-line {
          \fromproperty #'header:poet
          \fromproperty #'header:composer
        }
        \fill-line {
          \fromproperty #'header:meter
          \fromproperty #'header:arranger
        }
      }
    }
  }
  %% odd/evenHeaderMarkup with #'header:instrument at left of part-first-page,
  %% otherwise default.
  oddHeaderMarkup =
    \markup {
      \on-the-fly #part-first-page \fromproperty #'header:instrument
      \oddHeaderMarkup
    }

  evenHeaderMarkup =
    \markup {
      \on-the-fly #part-first-page \fromproperty #'header:instrument
      \evenHeaderMarkup
    }
}

\header {
  title = "MY-TITLE"
  instrument = "Instrument"
}

\repeat unfold 5 { b1 \pageBreak }

HTH,
  Harm





rgree

Trotzdem danke für die Antwort!

Gruß,
Reinhard