lilypond-user
[Top][All Lists]
Advanced

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

Re: Center paper column


From: Víctor
Subject: Re: Center paper column
Date: Sat, 08 Aug 2015 12:36:14 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0

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




reply via email to

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