lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: treble and bass clef simultaneously


From: Thomas Morley
Subject: Re: treble and bass clef simultaneously
Date: Thu, 28 Mar 2019 23:52:55 +0100

Am Do., 28. März 2019 um 08:02 Uhr schrieb Werner LEMBERG <address@hidden>:
>
>
> > here my factious approach: [...]
>
> Thanks a lot!  Attached is the same sample code as with Aaron's
> solution.  Do you see a possibility to make leading skips work in the
> second argument of \clefTst?
>
>
>     Werner

Probably like below.
Again: not tested beyond the given example!

\version "2.19.82"

\layout {
  \context {
    \Voice
    \name "ClefVoice"
    \alias "Voice"
    \consists "Clef_engraver"
    clefGlyph = #"clefs.F"
    middleCPosition = #6
    clefPosition = #-8
    explicitClefVisibility = ##(#f #t #t)
    \override Clef.full-size-change = ##t
    \override Clef.font-size = #-4
    \override Clef.space-alist.next-note = #'(fixed-space . 2)
    \override Clef.after-line-breaking =
      #(lambda (grob)
        (let ((col (ly:item-get-column grob)))
          (if (eqv? (ly:item-break-dir grob) 1)
              (ly:grob-translate-axis!
                grob
                (cdr (ly:grob-extent col col X))
                X))))
  }
  %% probably let ClefVoice be accepted by other contexts too
  \context {
      \Staff
      \accepts "ClefVoice"
  }
}


clefTst =
#(define-music-function (m1 m2) (ly:music? ly:music?)


(ly:music-set-property! m2 'elements
 (call-with-values
   (lambda ()
     (partition
       (lambda (m) (music-is-of-type? m 'skip-event))
       (ly:music-property m2 'elements)))
   (lambda (a b)
     (append
       a
       (list
         #{
           \context ClefVoice = "ClefVoice" {
             %% Mmmh, this is a Score-override, may cause problems ...
             \temporary \override Score.BreakAlignment.before-line-breaking =
               #(lambda (grob)
                 (if (eqv? (ly:item-break-dir grob) 0)
                     (ly:grob-set-property! grob 'break-align-orders
                         (make-vector 3 '(span-bar
                                           breathing-sign
                                           staff-bar
                                           key-cancellation
                                           key-signature
                                           time-signature
                                           clef)))))
                \voiceTwo
                %\set forceClef = ##t
                #(make-sequential-music b)
                \revert Score.BreakAlignment.before-line-breaking
           }
         #})))))

#{ << $m1 $m2 >> #})


\new PianoStaff <<
  \new Staff = "right" {
    \repeat unfold 8 { c'8_[ b''' b''' c'] } |
  }
  \new Staff = "left" \relative c'' {
    c8 g'' a g,, \clefTst { <fis ais cis> g } { c,,,4 } a'''8 g |
    \clefTst { <fis ais cis>8 g } { s cis,,,8 } a'''8 g c g a g |

    \break

    \clefTst { <fis ais cis>8 g } { c,,,4 } a'''8 g c g a g |
    c8 g'' a g,, \clefTst { <fis ais cis> g } { s ces,,,8 } a'''8 g |
  }
>>

Cheers,
  Harm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]