lilypond-user
[Top][All Lists]
Advanced

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

Re: Moving notes in a chord to the opposite side of the stem?


From: David Nalesnik
Subject: Re: Moving notes in a chord to the opposite side of the stem?
Date: Mon, 9 Apr 2012 18:12:08 -0500

Hi Paul,

On Mon, Apr 9, 2012 at 4:47 PM, Nick Payne <address@hidden> wrote:
On 10/04/12 06:56, Paul Morris wrote:
Thomas Morley wrote:
Am 9. April 2012 03:25 schrieb Paul Morris <address@hidden>:
Hello,  Is there a way to manually move some of the notes in a chord to the
opposite side of the stem, overriding the default placement?

I have looked through the docs and did not find a simple way to do this (the
NoteColumn #'force-hshift property only works with notes in different
voices, and trying to \override NoteHead #'X-offset  within a chord just
returned an error).  The best thing I came up with was this snippet:
http://lsr.dsi.unimi.it/LSR/Item?id=505

Following its example I was able to get the results I needed by doing this:


shiftR = {
  \once \override Stem #'X-offset = #.6
  \once \override NoteHead #'X-offset = #.6
}

<c' e' g' >4
<< { <c' e'> } \\ { \voiceThree \shiftR g' } >>

<d' f' a'>
<< { d' } \\ { \voiceThree  \shiftR < f' a'> } >>


See attached screenshot.  But it seems like there should be a way to do this
without having to introduce another voice?
Use a tweak.

Perhaps:

\version "2.14.2"

horOff =
#(define-music-function (parser location x-off music) (number? ly:music?)
         (set! (ly:music-property music 'tweaks)
	(acons 'extra-offset (cons x-off 0)
         (ly:music-property music 'tweaks)))
   music)

%shiftR = {
%  \once \override Stem #'X-offset = #.6
%  \once \override NoteHead #'X-offset = #.6
%}

{
<c' e' \horOff #1.2 g' >4
%<< { <c' e'> } \\ { \voiceThree \shiftR g' } >>

<d' \horOff #1.2 f' \horOff #1.2 a'>
%<< { d' } \\ { \voiceThree  \shiftR < f' a'> } >>
}

HTH,
  Harm

Thank you!  This works, but unfortunately (like the Hydra's heads) it introduces two other problems, one with horizontal spacing collisions and one with ledger lines.

1. Because the spacing engine does not take into account this low-level tweak, the tweaked notes sometimes collide with bar/measure lines and sometimes with other adjacent notes.  Is there a way to use Scheme to also increase the horizontal space given to the chord?  (I am still a beginner at Scheme.)

Can't help with the second problem, but for the first you could add additional horizontal space to either the barline or stem to increase their separation:

\version "2.15.36"

barspace = #(define-music-function (parser location extent) (pair?) #{
    \once \override Staff.BarLine #'extra-spacing-width = #extent
#})

stemspace = #(define-music-function (parser location extent) (pair?) #{
    \once \override Staff.Stem #'X-extent = #extent
#})

\relative c'' {
    c2 c c c \barspace #'(0 . 2)
    c c
    \stemspace #'(-2 . 0) c c
}

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


This seems to do the trick as far as horizontal spacing is concerned:

\version "2.15.36"

#(define ((shift offsets) grob)
  (let ((note-heads (ly:grob-array->list (ly:grob-object grob 'note-heads))))
    (map
      (lambda (p q) (set! (ly:grob-property p 'X-offset) q))
      note-heads offsets)))

displaceHeads =
#(define-music-function (parser location offsets) (list?)
  #{
    \once \override NoteColumn #'before-line-breaking = #(shift offsets)
  #}
)

{
  \displaceHeads #'(0 1.2 0)
  <c' e' g'>4
  \displaceHeads #'(0 1.2 1.2)
  <d' f' a'>
}

Hope this helps!

-David

reply via email to

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