The easiest way to enter fragments with more than one voice on a staff
is to split chords using the separator \\. You can use it for
small, short-lived voices or for single chords:
\context Staff \relative c'' {
c4 << { f d e } \\ { b c2 } >>
c4 << g' \\ b, \\ f' \\ d >>
}
The separator causes Voice (lilypond-internals) contexts1
to be instantiated. They bear the names "1", "2", etc. In
each of these contexts, vertical direction of slurs, stems, etc. is set
appropriately.
This can also be done by instantiating Voice (lilypond-internals) contexts
by hand, and using \voiceOne, up to \voiceFour to assign
a stem directions and horizontal shift for each part:
\relative c''
\context Staff << \new Voice { \voiceOne cis2 b }
\new Voice { \voiceThree b4 ais ~ ais4 gis4 }
\new Voice { \voiceTwo fis4~ fis4 f ~ f } >>
Normally, note heads with a different number of dots are not merged, but
when the object property merge-differently-dotted is set in
the NoteCollision (lilypond-internals) object, they are merged:
\relative c'' \context Voice << {
g8 g8
\property Staff.NoteCollision \override
#'merge-differently-dotted = ##t
g8 g8
} \\ { g8.[ f16] g8.[ f16] }
>>
Similarly, you can merge half note heads with eighth notes, by setting
merge-differently-headed:
\context Voice << {
c8 c4.
\property Staff.NoteCollision
\override #'merge-differently-headed = ##t
c8 c4. } \\ { c2 c2 } >>
LilyPond also vertically shifts rests that are opposite of a stem:
\context Voice << c''4 \\ r4 >>
\oneVoice,
\voiceOne,
\voiceTwo,
\voiceThree,
\voiceFour.
The following commands specify in what chords of the current voice
should be shifted: the outer voice has \shiftOff, and the inner
voices have \shiftOn, \shiftOnn, etc.
\shiftOn,
\shiftOnn,
\shiftOnnn,
\shiftOff.
The objects responsible for resolving collisions are NoteCollision (lilypond-internals) and RestCollision (lilypond-internals). See also example files input/regression/collision-dots.ly, input/regression/collision-head-chords.ly, input/regression/collision-heads.ly, input/regression/collision-mesh.ly, and input/regression/collisions.ly.
Resolving collisions is a intricate subject, and only a few situations
are handled. When LilyPond cannot cope, the force-hshift
property of the NoteColumn (lilypond-internals) object and pitched rests can
be used to override typesetting decisions.
When using merge-differently-headed with an upstem 8th or a shorter
note, and a downstem half note, the 8th note gets the wrong offset.
|
This page is for LilyPond-2.0.3 (stable-branch). Report errors to <bug-lilypond@gnu.org>. |