Thank you for your answer Stephen. I've already used a similar solution, but I really need a more automated one, since I'm working in a very large project with about 300 pieces, and would like to avoid fixing every tie in this condition manually.

Víctor.

El 08/08/15 a las 12:32, Stephen MacNeil escribió:
you could use shape!

\version "2.18.2"

#(define center-column

(lambda (col)

(let* ((sys (ly:grob-system col))

(all-cols

(ly:grob-array->list

(ly:grob-object sys 'columns)))

(measure-no

(car (ly:grob-property col 'rhythmic-location)))

; we need to find out if there is another

; PaperColumn in the measure. If there is,

; we make no adjustments.

(in-company?

; is there a column...

(any

(lambda (c)

(and

; which is NOT our column...

(not (eq? col c))

; which is a PaperColumn...

(not (eq? #t (ly:grob-property c 'non-musical)))

; which is in the same measure

(eq?

(car (ly:grob-property c 'rhythmic-location))

measure-no)))

all-cols))

(alone? (not in-company?))) ;

(if alone?

(let* ((left-col (ly:grob-object col 'left-neighbor))

(right-col (ly:grob-object col 'right-neighbor))

(elts-list

(ly:grob-array->list (ly:grob-object col 'elements)))

(note-cols

(filter

(lambda (elt)

(grob::has-interface elt 'note-column-interface))

elts-list))

(all-rests

(map (lambda (c)

(ly:grob-object c 'rest))

note-cols))

(all-rests (filter ly:grob? all-rests))

(all-notes

(map

(lambda (c)

(ly:grob-object c 'note-heads))

note-cols))

(all

(map (lambda (ga)

(if (ly:grob-array? ga)

(ly:grob-array->list ga)

'()))

all-notes))

(all (flatten-list all))

(all (append all all-rests))

(same-dur?

(every (lambda (o)

(equal?

(ly:grob-property o 'duration-log)

(ly:grob-property (car all)

'duration-log)))

all)))

(if same-dur?

(let* ((col-center (interval-center

(ly:grob-extent col sys X)))

(left-right-X

(cdr (ly:grob-extent left-col sys X)))

(right-left-X

(car (ly:grob-extent right-col sys X)))

(middle-X

(- (average left-right-X right-left-X)

col-center)))

(ly:grob-translate-axis! col middle-X X))))))))


centerSolitaryPaperColumn =

\override Score.PaperColumn.after-line-breaking = #center-column


\score{

<<

\new Staff \relative c' { \time 3/4 \repeat unfold 9 f4 \break

\shape #'(( 0 . 0) (2 . -.3) (-4 . .3) (-4.5 . 0)) Tie

f2.~ f4 \repeat unfold 7 f4


\shape #'(( 0 . 0) (0 . 0) (3 . -.3) (4.5 . 0)) Tie


f~ f2. }

\new Staff \relative c' { \time 3/4 \repeat unfold 9 f4 \break

f2.~ f4 \repeat unfold 7 f4 f~ f2. }

>>

}


\layout{

\centerSolitaryPaperColumn

}


Stephen



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

Reply via email to