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 contexts 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 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 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 and RestCollision. 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 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.0 (stable-branch).