![]() |
GNU LilyPond-- -- |
||||||||||
|
IntroductionThis document presents a brief overview of LilyPond features. When the text correspond with the shown notation, we consider LilyPond Officially BugFree (tm). This document is intended for finding bugs, and documenting bugfixes. TODO: order of tests (file names!), test only one feature per test.
Smaller and neater tests.
Automatic beamer behaves nicely. Cautionary accidentals are indicated using either
parentheses (default) or smaller accidentals.
If two forced accidentals happen at the same time, only one
sharp sign is printed. Ledger lines are shortened when there are accidentals This shows how accidentals in different octaves are handled.
FIXME: Shorten and docu
Accidentals are placed as closely as possible.
Accidentals in corresponding octaves are aligned.
The top accidental should be nearest to the chord. The
flats in a sixth shoudl be staggered. A sharp sign after a double sharp sign, as well as a flat sign
after a double flat sign is automatically prepended with a
natural sign.
Tied accidentaled notes (which cause reminder accidentals) don't wreak havoc in
the spacing when unbroken. This shows how modern cross voice auto cautionary accidentals are handled.
The first two fisses get accidentals because they belong to different voices.
The first f gets cautionary natural because of previous measure.
The last f gets cautionary natural because fis was only in the other voice.
Accidentals work: the second note does not get a sharp. The third and
fourth show forced and courtesy accidentals.
This shows how accidentals are handled.
Ambituses indicate pitch ranges for voices. with \applycontext, \properties can be modified
procedurally. Applications include: checking bar numbers, smart
octavation. arpeggio stays clear of accidentals and flipped note heads.
Since Arpeggio engraver is Voice, it does nothing for voice collisions. Arpeggios are supported, both cross-staff and broken single staff.
The first two a8 notes should not be beamed.
Also, no automatic beaming accross bar lines.
Automatic beaming is also done on tuplets. Tuplet-spanner should not put (visible) brackets on
beams even if they're auto generated. Auto change piano staff switches voices between up
and down staves automatically rests are switched along with the coming
note. When central C is reached, we don't switch (by default).
Bar number settable and padding adjustable. Bar numbers
start counting after the anacrusis. COMMENTED-OUT Markings that are attached to (invisible) barlines are
delicate: the are attached to the rest of the score without the score
knowing it. Consequently, they fall over often.
Automatic kneeing. A knee is made when a horizontal
beam fits in a gap between note heads that is larger than a predefined
threshold.
Simple beams on middle staffline be allowed to be
slightly sloped. Beams reaching beyond middle line can have
bigger slope. Concave beams should be horizontal. informally spoken,
concave refers to the shape of the notes that are opposite a
beam. If an up-beam has high notes on its center stems, then we call
it concave. This example shows borderline cases. Only the beams
that are marked `horiz' should be printed horizontally. Automatic cross-staff knees also work (here we see them
with explicit staff switches). Cross staff (kneed) beams
don't cause extreme slopes Beams can be typeset over fixed distance aligned staves, beam
beautification doesn't really work, but knees do. Beams should be
behave well, wherever the switching point is.
Beamed stems have standard lengths if possible. Beams should behave reasonably well, even under extreme circumstances.
Stems may be short, but noteheads should never touch the beam. Note that
under normal circumstances, these beams would get knees here
Beam.auto-knee-gap was set to false.
French style beaming. In french beaming, the stems do not go to the outer beams. Funky kneed beams with beamlets also work. The beamlets
should be pointing to the note head.
Knee beaming. (funky) beams should look the same
Beam positions may be set by hand by overriding
positions. No processing (quanting, damping) whatsoever is done Kneed beams (often happens with cross-staff beams)
should look good when there are multiple beams: all the beams should
go on continuously at the staff change. Stems in both staffs reach up
to the last beam.
explicit beams may cross barlines. Beams should always reach the middle staff line. The second beam
counting from the note head side, should never be lower than the
second staff line. This does not hold for grace note beams.
Override with Beams and ties may be entered in postfix notation, separating the
notes and the brackets with a dash. Quarter notes may be beamed: the beam is halted momentarily. The number of beams doesn't change on a rest. Beams in unnatural direction, have shortened stems, but do not look too short. Hairy case for beam, chord, and automatic knees. automatic beaming also works in ternary time sigs. Beaming is generated automatically. Beams may cross bar lines. In that
case, line breaks are forbidden. Yet clef and key signatures are
hidden just as with breakable bar lines.
beams (simple) The same mechanism can be used to force pagebreaks.
Breaks can be encouraged and discouraged using Breathing signs, also used for phrasing, do normally not influence global spacing - only if space gets tight, notes are shifted to make room for the breathing sign. Breathing signs break beams running through their voice. In the following example, the notes in the first two measures all have the same distance from each other. Breathing signs are available in different tastes: commas (default),
ticks, vees and `railroad tracks' (caesura).
property chordChanges: only display chord names when
there's a change in the chords scheme, but always display the
chord name after a line break.
Test file for the new chordname entry code ( Test igatzek inversion and bass notes.
Above the staff: computed chord names. Below staff: entered chord name.
Scripts can also be attached to chord elements. Chord tremolos look like beams, but are a kind of repeat symbol. To avoid confusion, chord tremolo beams do not reach the stems, but leave a gap. Chord tremolo beams on half notes are not ambiguous, as half notes cannot appear in a regular beam, and should reach the stems. (To ensure that the spacing engine is not confused we add some regular notes as well.)
Jazz chords, unusual combinations. Chord names are generated from a list pitches. The
functions constructing the names are customisable. This file shows
Jazz chords, following [Ignatzek1995], page 17 and 18. The transparent clef should not occupy any space and with style
Clusters are a device to denote that a complete range of
notes is to be played. /home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/collision-2.ly
collision resolution tries to put notes with dots
on the right side. If Oppositely stemmed chords, meshing into each other,
are resolved. Normal collisions. We have support for polyphony, where the
middle voices are horizontally shifted.
Completion heads are broken across bar lines. This was
intended as a debugging tool, but it can be used to ease music entry.
Completion heads are not fooled by polyphony with a different rhythm.
If the Note_heads_engraver is replaced by the Completion_heads_engraver,
notes that cross bar lines are split into tied notes.
custodes in various styles. Dots move to the right when a collision with the (up)flag happens Noteheads can have dots, and rests can too. Augmentation dots should
never be printed on a staff line, but rather be shifted vertically. They
should go up, but in case of multiple parts, the down stems have down
shifted dots. (Wanske p. 186) In case of chords, all dots should be in
a column. The dots go along as rests are shifted to avoid collisions.
Drum notation, although kludgy, should work. Though, << chord >> does not work because the chords need to be split into threads. Broken crescendi should look be open on one side. Dynamic letters are kerned, and their weight
matches that of the hairpin signs. The dynamic scripts should be
horizontally centered on the note head. Scripts that should appear
closer to the note head (staccato, accent) are reckoned with.
Dynamics appear below or above the staff. If multiple
dynamics are linked with (de)crescendi, they should be on the same
line. Isolated dynamics may be forced up or down.
Crescendi may start off-notes. In that case, they should not collapse into flat lines. Ez-notation prints names in note heads.
You also get ledger lines, of course. Test figured bass. Figured bass is created by the FiguredBass context which eats
figured bass requests and rest-requests. You must enter these using
the special With the new chord syntax it's possible to associate
fingerings uniquely with notes. This makes horizontal fingering much
easier to process. Automatic fingering tries to put fingering instructions
next to noteheads.
The magnification can be set for any font. Note
that this doesn't change variable symbols such as beams or slurs. As a last resort, the placement of grobs can be adjusted manually, by
setting the Simple glissando lines between notes are supported. The first two glissandi are not consecutive. The engraver does no time-keeping, so it involves some trickery to get
< { s8 s8 s4 } { c4 \gliss d4 } > working correctly.
The autobeamer is not confused by grace notes. Bar line should come before the grace note. Grace notes do tricky things with timing. If a measure
starts with a grace note, the measure does not start at 0, but
earlier. Nevertheless, lily should not get confused. For example, line
breaks should be possible at grace notes, and the bar number should be
printed correctly.
Grace beams and normal beams may occur simultaneously.
Unbeamed grace notes are not put into normal beams.
Dynamics on grace notes are small and behave nicely (don't crash into to main note). grace code should not be confused by nested sequential musics, containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example. grace code should not be confused by nested sequential musics, containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example. grace code should not be confused by nested sequential musics, containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example. /home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/grace-nest3.ly
Another combination of grace note nesting. /home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/grace-nest5.ly
partcombiner and grace notes can go together Stripped version of trip.ly. Staffs should be of correct length. Pieces may begin with grace notes. startGraceMusic should no-stem-extend to true;
the two grace beams should be the same here.
grace notes in different voices/staves are synchronized. Grace notes and unfolded repeats.
Line breaks may happen before grace notes.
Repeated music can start with grace notes. Bar checks
preceding the grace notes do not cause synchronization effects. Grace notes are typeset as an encapsulated piece of music. You can
have beams, notes, chords, stems etc. within a Grace notes without beams should have a slash, if Hairpin dynamics start under notes if there are
no text-dynamics. If there are text dynamics, the hairpin does not run
into them. Hara kiri should not upset fixed distance alignment like in pianostaff. In this example the middle staff is harakiried. Hara kiri staves kill themselves if they are empty. This example really
contains two staves, but the second contains only spaces, and is
therefore removed. Also, any staff brackets and braces are removed.
Instrument names are set with Staff.instrument and
Staff.instr. You can enter markup texts to create more funky names,
including alterations. Staff margins are also markings attached to barlines. They should be
left of the staff, and be centered vertically wrt the staff. They may
be on normal staves, but also on compound staves, like the PianoStaff
Key signatures can be set per pitch
individually. This can be done bby setting Key signatures appear on key changes. They may also
appear without barlines. The restoration accidentals are not printed at
the start of the line. If Lyric alignment Lyric alignment is adjustable both interms of alignment between stanzas and on notehead. If the property alignment is not set, there is automatic determination of alignment type based on punctuation. (ee lyric-phrasing.ly)
polyphonic rhythms and rests don't disturb
Lyrics can be set to a melody automatically. Excess lyrics will be
discarded. Lyrics will not be set over rests. You can have melismata
either by setting a property melismaBusy, or by setting
automaticMelismas (which will set melismas during slurs and ties). If
you want a different order than first Music, then Lyrics, you must
precook a chord of staves/lyrics and label those. Of course
Lyric phrasing We find start and end of phrases, and align lyrics of multiple stanzas accordingly. Also, lyrics at start of melismata should be left aligned. (is that only lyrics that are followed by `__'? Because that seems to be the case now - jcn) | | | | | x| x| x| x| x| 1: Start sentence melisma end. 2: x x x______ x Only lyrics that are followed by '__' while there's a melisma,
are left-aligned, in this case the third x. Adding a Extenders that end a staff should not extend past the staff.
Also shown: a trick to get an extender at the end of the staff.
Lyrics syllables are aligned according to
punctuation. Stanza and stz set stanza numbers. Stacking of markup scripts. The Measure_grouping_engraver adds triangles and
brackets above beats when you set beatGrouping. This shows a fragment
of Steve Martland's Dance Works. There is limited support for mensural notation: note head
shapes are available. Mensural stems are centered on the note heads,
both for up and down stems. If NoteCollision has merge-differently-dotted set, note
heads that have differing dot counts may be merged anyway. If You can write molecule callbacks in Scheme, thus providing custom glyphs for notation elements. A simple example is adding parentheses to existing molecule callbacks. The parenthesized beam is less successful due to implementation of the
Beam. The note head is also rather naive, since the extent of the
parens are also not seen by accidentals.
The multimeasure rest is centered exactly between bar lines. Texts may be added to the rests by setting Multiple measure rests do not collide with barlines and clefs. They
are not expanded when you set Rests over measures during longer than 2 wholes use breve rests.
With New markup syntax. Text is set with empty horizontal dimensions. The boolean property
TextScript.no-spacing-rods is used to control the horizontal size of text.
Note grouping events are used to indicate where
brackets for analysis start and end.
Note heads are flipped on the stem to prevent collisions.
It also works for whole heads that have invisible stems.
Note head shapes are settable. The stem endings should be adjusted per note head. If you want different note head styles on one stem, you must create a special context called Thread. Harmonic notes have a different shape and different
dimensions. Nevertheless, noteheads in both styles can be combined, on
either up or down stems.
Note head lines (eg glissando)
run between centers of the note heads. The number of stafflines of a staff can be set. Ledger
lines both on note heads and rests are adjusted. Barlines also are
adjusted. Multi measure rests of second voice should not disappear. The partcombiner should not combine two small slurs into a big one. Piano pedal symbols merge stop and start. The strings are configurable.
Text style, bracket style, and a mixture of both are supported.
Brackets work across line breaks.
Percent repeats are not skipped, even when skipBars is set. Measure and beat repeats are supported. Slurs play well with phrasing slur. The A is atop an invisible barline. The barline
although invisible, is also translated because it is the last one of
the break alignment. prefatory spacing TODO: show all common combinations to check for spacing anomalies.
Once properties take effect during a single time step only. Rehearsal marks are printed over barlines. They
can be incremented automatically or manually. Folded. This doesn't make sense without alternatives, but it works.
Across linebreaks, the left edge of a first and second alternative
bracket should be equal
Repeats may be unfolded through the Scheme function LilyPond has three modes for repeats: folded, unfolded and semi-unfolded. Unfolded repeats are fully written out. Semi unfolded repeats have the body written and all alternatives sequentially. Folded repeats have the body written and all alternatives simultaneo.ly. If the number of alternatives is larger than the repeat count, the excess alternatives are ignored. If the number of alternatives is smaller, the first alternative is multiplied to get to the number of repeats. Unfolded behavior:
/home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/repeat-volta-skip-alternatives.ly
Volta (Semi folded) behavior. Voltas can start on non-barline moments.
If they don't barlines should still be shown.
Rests in collisions sit opposite of the note if no direction is
specified for the voice containing the rest. Rests should not collide with beams, stems and noteheads. Rests may
be under beams. Rests should be move by integral number of spaces
inside the staff, and by half spaces outside. Notice that the half
and whole rests just outside the staff get ledger lines in different
cases.
whole and half rests moving outside the staff should get
ledger lines Rests can have pitches-these will be affected by
transposition and relativization. If a rest has a pitch, rest
collision will leave it alone. Rests. Note that the dot of 8th, 16th and 32nd rests rest should be
next to the top of the rest. All rests except the whole rest are
centered on the middle staff line.
In rhythmic staffs, stems should go up, and bar lines have the size for a 5 line staff. The whole note hangs from the rhythmic staff. Scripts are put on the utmost head, so they are
positioned correctly when there are collisions. Scripts can be stacked. The order is determined by a
priority field, but when objects have the same priority, the input
order determines the order. Objects specified first are closest to the note.
Scripts may be stacked. Slurs should be attached to note heads, except when they would collide
with beams. Also see: ophee-slurs.
Across line breaks, slurs behave nicely. On the left, they extend to
just after the preferatory matter, and on the right to the end of the
staff. A slur should follow the same vertical direction it would have
in unbroken state.
The same goes for slurs. They behave decently when broken across
linebreak.
Slurs should not get confused by augmentation dots. We use a lot
of dots here, to make problems more visible. Slurs should look nice and symmetric. The curvature may increase
only to avoid noteheads, and as little as possible. Slurs never
run through noteheads or stems.
Slurs may be placed over rest. The slur will avoid colliding with
the rest
Manual hack for slur and staccato. Trend of broken slur with user-overridden stem attachment should also
follow the same vertical direction it would have had in unbroken state. /home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/slur-symmetry-1.ly
/home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/slur-symmetry.ly
Accidentals in different staffs don't effect the
spacing of the quarter notes here. Accidentals sticking out to the left
of a note will take a little more space, but only if the spacing is tight. Downstem notes following a barline are printed with some extra space. This is an optical correction similar to juxtaposed stems. Accidentals after the barline get some space as well.
clef changes at the start of a line get much more space
than clef changes halfway the line. Broken matter at the end of line does not upset the
space following rests and notes. A voicelet (a very short voice to get polyphonic chords correct)
should not confuse the spacing engine. A clef can be folded below notes in a different staff, if
this doesn't disrupt the flow of the notes. A clef can be folded below notes in a different staff, if
there is space enough. With Paper_column molecule callbacks we can
show where columns are in the score. Spacing uses the duration of the notes, but disregards
grace notes for this. In this example, the 8ths around the grace
are spaced exactly as the other 8th notes.
Grace note spacing. Should be tuned? For knees, the spacing correction is such that the
stems are put at regular distances.
Loose:
Natural:
The flags of 8th notes take some space, but not
too much: the space following a flag is less than the space
following a beamed 8th head Rests get a little less space, since they are narrower.
However, the feta quarter rest is relatively wide, causing this effect to be
very small.
Notes that are shorter than the common shortest note, Get a
space (i.e. without the space needed for the note) proportional to
their duration. So 16th notes get 1/2 of the space of an eigth note.
The total distance for a 16th is (including note head) is 3/4 of the
eighth note. Upstem notes before a barline are printed with some extra
space. This is an optical correction similar to juxtaposed stems.
LilyPond corrects for optical spacing of stems. The overlap between to
adjacent stems of different direction is used as a measure for how
much to correct. For juxtaposed chords with the same direction, a
slight optical correction is used. It is constant, and only works if
two chords have no common head-positions range. Even if a line is very tightly spaced, there will still be room
between prefatory matter and the following notes. The space after the
prefatory is rigid. In contrast, the space before the barline
must stretch like the space within the measure.
space from a normal note /barline to a grace note is
smaller than to a normal note. When tightly spaced, hinterfleisch -> 0.
Stems may touch the bar lines, opposite stems may touch eachother.
We need a mininum of about a note-width/interline space in these
situations, so that in tightly spaced music all vertical lines
are about equally spaced.
Span bars draw only in between staff bar lines, so setting those to transparent shows bar lines between systems only.
The staccato dot (and all scripts with follow-into-staff set), must
not be on staff lines.
The staff is a grob, and may be adjusted as well: this one
shows a staff with 6 thick line, and a slightly large staffspace.
Beams remain correctly quantized.
Stanza numbers may differ for the first and following systems. Similarly, if Beams, stems and noteheads often have communication troubles, since the two systems for y dimensions (1 unit = staffspace, 1 unit = 1 point) are mixed. Stems, beams, ties and slurs should behave similarly, when placed
on the middle staff line. Of course stem-direction is down for high
notes, and up for low notes.
In a limited number of cases, LilyPond corrects for optical spacing
effects. In this example, space for opposite pointed stems is adjuste
Stem tremolos or rolls are tremolo signs that look like beam segments
crossing stems. If the stem is in a beam, the tremolo must be parallel
to the beam. If the stem is invisible (eg. on a whole note), the
tremolo must be centered on the note.
LilyPond correctly determines the size of every
system. This includes postscript constructs such as slurs. The piano brace should be shifted horizontally if it is enclosed in a bracket.
/home/buchan/rpm/BUILD/lilypond-1.7.14/input/regression/text-spanner.ly
When tieing notes with accidentals across a bar boundary, the accidental must not be drawn on the note in the next bar. Unless the tie crosses a line break, in which case the accidental is repeated if it would be different from an untied note. The next note of the same pitch in this next bar should always show the accidental (even if it's natural). Slurring a accidentaled note to a natural one across bar boundaries should be explicit. Pitches can be verified by printing them with the First and second bes (tied across line break)
should get an accidental, but others should not.
Only first B should get natural sign. Tie engraver uses Tieing only parts of chords is possible. It requires
putting the Tie engraver at Thread level, and redirecting untied notes
to a different thread. When tieing chords, the outer slurs point outwards, the inner slurs
point away from the center of the staff. Override with
Ties should not collide with dots. Tieing a grace to the to a following grace or main note works. Ties are strictly horizontal. They are placed in between note heads.
The horizontal middle should not overlap with a staffline.
Simple beams. This broke somewhere < 1.3.110 DOCME ! what is this.
Tuplets are indicated by a bracket with a number. There should be no bracket if there is a beam exactly matching the length of the tuplet. The bracket does not interfere with the stafflines, and the number is centered in the gap in the bracket. The bracket stops at the end of the stems, if the stems have the same
direction as the
In combination with a beam, the bracket of the tuplet
bracket is removed. This only happens if there is one beam, as long as
the bracket. Manual hack for nested tuplets, move outer tuplet up. Tuplet bracket formatting supports numerous options:
NB should have no bracket, B should have bracket.
Horizontal tuplet brackets are shifted vertically
to avoid staff line collisions. Whenever a voice switches to another staff a line connecting the notes
can be printed automatically. This is enabled if the property
Broken volta spanners behave correctly at left edge in all cases. |
||||||||||
Go back to index of LilyPond.
Please send GNU LilyPond questions and comments to lilypond-user@gnu.org. Please send comments on these web pages to (address unknown) Copyright (c) 1997--2002 Han-Wen Nienhuys and Jan Nieuwenhuizen. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. |
This page was built from LilyPond-1.7.14 (development-branch) by