"Box" aus zwei Taktstrichen mit Zahl darin [GELÖST]

Begonnen von ingmar, Dienstag, 6. März 2018, 20:13

« vorheriges - nächstes »

ingmar

Hallo Freunde,


ich hab hier ein kurzes Stück zweistimmiger Musik:
\version "2.19.64"
\score {
\new StaffGroup <<
\new Staff {
\relative {
c'4 d8[ e f g] \bar "|" \tempo "13" s4 \bar "|"
c,8[ d] e4 f8[ g] a4 \bar "|" \tempo "6" s4 \bar "|"
}
}
\new Staff {
\relative {
s4 c'4 c8[ e] \bar "|" \tempo "13" s4 \bar "|"
c2 e8[ e] d4 \bar "|" \tempo "6" s4 \bar "|"
}
}
>>

\layout {
\context {
\Score
timing = ##f
barAlways = ##t
defaultBarType = ""
}
\context {
\Staff
\omit TimeSignature
}
}
}


Also: Keine Taktart, aber in unregelmäßigen Abständen ziehe ich selber zwei Taktstriche mit einer Zahl dazwischen.

Was mich nun stört, sind folgende Dinge:
* Ich würde die Zahl lieber mitten in jedem der beiden Systeme sehen statt nur über dem obersten System - in jedem System dann mittig zwischen den beiden Taktstrichen.
* Ich würde das lieber mit einem einfachen Befehl tun, sagen wir \box 13 statt dem soviel umständlicheren \bar "|" \tempo "13" \bar "|".
* Am liebsten wär mir, ich brauchte das nur in einem der Systeme zu schreiben, es würde automatisch in die anderen übertragen. Dies ist aber nicht unbedingt nötig.

Tja, wie geh ich daran? : - )

Danke für Eure Hilfe,
--ingmar

harm6

Hallo ingmar,

ZitatTja, wie geh ich daran?

1) benutze \bar "||"
2) pass 'kern an, so daß die "Intarsie" reinpaßt
3) füge BarLine- und "Intarsien"-stencil zusammen.

Z.B.:


\version "2.19.65"

\layout {
  \override Score.BarNumber.break-visibility = ##(#t #t #t)
  %% center all, but line-starting BarNumbers over the BarLine
  \override Score.BarNumber.self-alignment-X =
    #(lambda (grob)
      (if (<= (ly:item-break-dir grob) 0)
          0
          1))
}

barAndMrkp =
#(define-music-function (nmbr)(markup?)
#{
  \once
  \override Score.BarLine.stencil =
    #(lambda (grob)
       (let* ((nmbr-stil
                (grob-interpret-markup grob nmbr))
              (nmbr-stil-x-ext (ly:stencil-extent nmbr-stil X)))
             
         ;; set 'kern to an appropriate value     
         (ly:grob-set-property! grob 'kern
           (/ (+ (cdr nmbr-stil-x-ext) (ly:grob-property grob 'padding 0))
              (ly:staff-symbol-line-thickness grob)))
         ;; put the markup between the two thin bar-lines
         (let* ((bar-stil (ly:bar-line::print grob))
                (bar-x-ext (ly:stencil-extent bar-stil X))
                (bar-x-length (- (cdr bar-x-ext) (car bar-x-ext))))
           (ly:stencil-add
             bar-stil
             (ly:stencil-translate-axis
               (centered-stencil nmbr-stil)
               (/ bar-x-length 2)
               X)))))
  \bar "||"
#})


\new StaffGroup
  <<
\new Staff {
      R1
      \barAndMrkp "1"
      R
      \once \override Score.BarLine.font-size = 3
      \once \override Score.BarLine.font-series = #'italic
      \barAndMrkp "1234"
      R
      \once \override Score.BarLine.font-series = #'bold
      %% more space, if desired
      \once \override Score.BarLine.padding = 2
      \barAndMrkp "1234"
      R
      \break
      \once \override Score.BarLine.padding = 2
      \barAndMrkp
        \markup
          \with-color #red
          \rotate #-90 ":-)"
      R
    }
\new Staff {
      \repeat unfold 5 R1
    }
  >>


padding, font-size, font-series, etc ist einstellbar, andere markups sind möglich.

Gruß,
  Harm

ingmar

Danke! Die Antwort erfüllt bei meinen bisherigen Versuchen alle Anforderungen!

--ingmar