letzte Takt-Nummer rechts im Takt [gelöst]

Begonnen von rgree, Samstag, 6. Mai 2023, 09:48

« vorheriges - nächstes »

rgree

Hallo,

folgender Code

\version "2.20.0"
\book {
\paper {
    print-first-page-number = ##t
}
{
  % \set Score.currentBarNumber = 1
  \override Score.BarNumber  #'break-visibility = #end-of-line-invisible
  \set Score.barNumberVisibility = #(every-nth-bar-number-visible 1)
  \override Score.BarNumber.self-alignment-X = #LEFT
  c'1 1 1 1
  1 1 1 \override Score.BarNumber.self-alignment-X = #RIGHT 1
}
}

produziert - wie erwartet - Taktnummern am Taktanfang (links),
abgesehen davon, dass die 1. Taktnummer nicht angezeigt wird (keine Ahnung, warum nicht).

Aber mein Hauptproblem ist ein anderes : wenn ich im letzten Takt (und nur dort) die Taktnummer
am Taktende (rechts) haben will, warum wird sie dann in den vorletzten Takt geschoben ?

Bin für Hilfe dankbar.

Gruß,
Reinhard




juergen74

Hallo Reinhard,

die erste Taktnummer wird links vom Notenschlüssel angezeigt (v2.24.0).

self-alignment-X definiert die Ausrichtung der Taktnummer zum Taktstrich am Anfang des Taktes. Du kannst die Nummer manuell verschieben:
\version "2.24.0"
{
  \override Score.BarNumber.break-visibility = #end-of-line-invisible
  \set Score.barNumberVisibility = #(every-nth-bar-number-visible 1)
  \override Score.BarNumber.self-alignment-X = #LEFT
  c'1 1
  \override Score.BarNumber.self-alignment-X = #CENTER
  1 1
  \override Score.BarNumber.self-alignment-X = #RIGHT
  1 1
  \override Score.BarNumber.extra-offset  = #'( 8 . 0)
  1
}


Lässt sich vermutlich auch mit etwas scheme-magic automatisieren...

Grüße, Jürgen.

rgree


juergen74

Hier noch mit automatischer Berechnung des Offset:

\version "2.24.0"

% based on
% https://lists.gnu.org/archive/html/lilypond-user/2015-08/msg00517.html
#(define move-to-next-barline
   (lambda (grob)
     (let* ((sys (ly:grob-system grob))
            (all-elts (ly:grob-array->list (ly:grob-object sys 'all-elements)))
            (barlines (filter (lambda (elt)
                                (grob::has-interface elt 'bar-line-interface))
                              all-elts))
            (grob-pos (grob::rhythmic-location grob))
            (next (filter (lambda (b)
                            (rhythmic-location<? grob-pos (grob::rhythmic-location b)))
                          barlines))
            (next (reduce
                   (lambda (elem prev)
                     (if (rhythmic-location<?
                          (grob::rhythmic-location prev)
                          (grob::rhythmic-location elem))
                         prev
                         elem))
                   #f
                   next)))
       (if next
           (let* ((grob-x (ly:grob-relative-coordinate grob sys X))
                  (grob-x-ext (ly:grob-property grob 'X-extent))
                  (grob-width (- (cdr grob-x-ext) (car grob-x-ext)))
                  (next-X (ly:grob-relative-coordinate next sys X))
                  (next-x-ext (ly:grob-property next 'X-extent))
                  (next-width (- (cdr next-x-ext) (car next-x-ext)))
                  (offset (- (- next-X grob-x) grob-width)))
           
             (ly:grob-set-property! grob 'extra-offset (cons offset 0)))))))

{
  \override Score.BarNumber.break-visibility = #end-of-line-invisible
  \set Score.barNumberVisibility = #(every-nth-bar-number-visible 1)
  c'1 1 1 1 1
  \once \override Score.BarNumber.after-line-breaking = #move-to-next-barline
  1
}

ToDo: Position bei unterschiedlichen BarLines (Repeat, Segno, ...)?

Grüße, Jürgen.

rgree

Das ist natürlich noch besser ...  :)

Gruß,
Reinhard