Mats Bengtsson <[EMAIL PROTECTED]> writes:

> So far, there's no automatic support in LilyPond to avoid collisions
> between multi-measure rests and other objects. Their vertical
> position is determined by the staff-position property, which by
> default is set to zero. The \voiceOne macro sets staff-position to
> +4 and \voiceTwo sets it to -4. So, to merge the rests from two
> separate voices, just set the staff-position to the same value so
> that they will be printed on top of each other. What I proposed in
> the cited solution was to use \revert MultiMeasureRest
> #'staff-position after \voiceOne and \voiceTwo, which reverts the
> value of the property to the default 0. Of course, you probably
> still want to keep the raised and lowered positions of full bar
> rests in measures where the other voice has some music and
> unfortunately, I don't know any nice automatic solution for that,
> except for using the \partcombine function, which is known to have
> several other limitations and bugs.

You could also do the following:

% either this:
mmOneVoice = { \override MultiMeasureRest #'staff-position = 2 }

% or this, which also works with collapsed rests:
mmOneVoice = { \override MultiMeasureRest #'staff-position =
                #(lambda (grob)
                  (let ((elts (ly:grob-object grob 'elements)))
                   (if elts                 
                    (if (ly:grob-array? elts)
                     (let* ((mmrest (ly:grob-object     
                                    (ly:grob-array-ref elts 0)
                                    'multi-measure-rest))
                            (mcount (ly:grob-property mmrest 'measure-count)))
                      (if (= measure-count 1) 2 0)))
                    ;; it doesn't matter what I return otherwise, but still...
                    9)))
              }            

mmVoiceOne = { \override MultiMeasureRest #'staff-position = #4 }
mmVoiceTwo = { \override MultiMeasureRest #'staff-position = #-4 }


...and then you use \mmOneVoice when you know all the voices in the
staff will have the same rests, and \mmVoiceOne or \mmVoiceTwo when
they won't.


-- Arvid




_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to