This document presents a feature test for
LilyPond 2.0.3. 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.
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.
(DOCME)
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 should be staggered.
Quarter tone notation is supported, including
threequarters flat.
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.
accidental-unbroken-tie-spacing.ly
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.
By default, the ambitus grob is put before the clef. You can control
this behaviour through the The shape of the note heads to use can be changed via the
With \applycontext, \properties can be modified
procedurally. Applications include: checking bar numbers, smart
octavation.
This example prints a bar-number during processing on stdout.
The Here, the layout of a note head is changed depending on its vertical
position.
A square bracket on the left indicates that the player should not
arpeggiate the chord.
Arpeggio stays clear of accidentals and flipped note heads.
Arpeggios are supported, both cross-staff and broken single staff.
No auto beams will be put over (manual) repeat bars.
Automatic beaming is also done on tuplets.
Tuplet-spanner should not put (visible) brackets on
beams even if they're auto generated.
Test automatic beamer: the last measure should have a single beam.
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.
The padding should be increased, to prevent clashes at the start of the line.
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.
Beams can be printed across line breaks if forced.
Simple beams on middle staffline are allowed to be
slightly sloped, even if the notes have ledgers. 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.
Beams are less steep than the notes they encompass.
Beamed stems have standard lengths if possible. Quantization is switched off in this example.
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, complex configurations. According to
Paul Roberts, the first stem of a beam determines the direction of the
beam, and as such the way that following (kneed) stems attach to the
beam. This is in disagreement with the current algorithm.
Point-symmetric beams should receive the same
quanting. There is no up/down bias in the quanting code.
Beams should look the same.
Beaming can be overidden for individual stems.
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 on ledgered notes 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.
Stem lengths take precedence over beam quants: `forbidden'
quants are only avoided for 32nd beams when they are outside of
the staff. However, that leads to very long stems, which is even
worse.
Test beam quant positions for horizontal beams. Staff
lines should be covered in all cases. For 32nd beams, the free stem
lengths are between 2 and 1.5.
Quarter notes may be beamed: the beam is halted momentarily.
The number of beams doesn't change on a rest.
Seconds are tricky. We used to have problems with seconds being too
steep, or getting too long stems. In a file like this, showing
seconds, you'll spot something fishy very quickly.
Beams in unnatural direction, have shortened stems, but do not look too short.
Hairy case for beam, chord, and automatic knees.
Automatic beaming works also 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).
By inserting TeX commands between systems, you can force pagebreaks.
In reality, you'd use the LateX command
Breaks can be encouraged and discouraged using
Gregorian chant notation sometimes also uses commas and ticks, but in
smaller font size (we call it 'virgula' and 'caesura'). However, the
most common breathing signs are divisio minima/maior/maxima and
finalis, the latter three looking similar to bar glyphs.
Breathing signs are available in different tastes: commas (default),
ticks, vees and `railroad tracks' (caesura).
Property chordChanges: display chord names only when
there's a change in the chords scheme, but always display the
chord name after a line break.
The 11 is only added to natural-3 if it
is mentioned explicitly.
Test file for the new chordname entry code (
The property Putting the exceptions list encoded as
into Then,
adds the new exceptions to the default ones, which are defined in
ly/chord-modifier-init.ly.
The layout of the major 7 can be tuned with
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.
Tremolo repeats can be constructed for short tremolos (total duration smaller than 1/4) too. Only some of the beams are connected to the stems.
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.
In this example, each tremolo lasts exactly one measure.
(To ensure that the spacing engine is not confused we add some regular
notes as well.)
Jazz chords, unusual combinations.
Octavation signs may be added to clefs. These
octavation signs may be placed below or above (meaning an octave
higher or lower), and can take any value, including 15 for two octaves.
Clefs with
Clusters are a device to denote that a complete range of
notes is to be played.
Collisions for single head notes.
Collision resolution tries to put notes with dots
on the right side.
Note heads in collisions should be merged if
they have the same positions in the extreme note heads.
If
collision-merge-differently-dotted.ly
If NoteCollision has merge-differently-dotted set, note
heads that have differing dot counts may be merged anyway.
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
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.
Broken crescendi should 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.
Figured bass is created by the FiguredBass context which eats
figured bass requests and rest-requests. You must enter these using
the special You can also type letters by entering quoted strings, as demonstrated in the last example.
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.
When put across line breaks, only the part before the line break is
printed. The line-spanners connects to the Y position of the note on the next line.
The magnification can be set for any font. Note
that this doesn't change variable symbols such as beams or slurs.
Using other fonts can be done by setting font-name for
the appropriate object. This may include Postscript fonts that are
available through (La)TeX.
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.
Grace notes after the last note do not confuse the timing code.
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.
Another nested grace situation.
Another combination of grace note nesting.
Another nested grace situation.
Partcombiner and grace notes can go together.
Stripped version of trip.ly. Staffs should be of correct length.
Pieces may begin with grace notes.
Here startGraceMusic should set no-stem-extend to true;
the two grace beams should be the same here.
Grace notes in different voices/staves are synchronized.
Different grace types explained: the base grace switches to smaller type. The appoggiatura also inserts a slur, and the
acciaccatura inserts a slur and slashes the stem.
Grace notes and unfolded repeats.
Line breaks may happen before grace notes.
Graces at combined with volta repeats: a repeat
starting with a grace, following a repeat directly. The bars should be
merged into one :||:.
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 crescendi may be dashed.
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 staves kill themselves if they are empty. This
example really contains three staves, but as they progress, empty ones
are removed: this example has three staves, but some of them
disappear: note how the 2nd line only has the bar number 2. (That the
bar number is printed might be considered a bug, however, the scenario
of all staves disappearing doesn't happen in practice.)
Any staff brackets and braces are removed, both in the single staff
and no staff case.
This example was done with a pianostaff, which has fixed distance
alignment; this should not confuse the mechanism.
Instrument names are set with
Instrument names are also printed on partial starting measures.
0.1 Introduction
breakAlignOrder property of the score
context by redefining the order.
note-head-style property, which holds the glyph name of the
note head. The vertical line between the upper and lower head can be
switched on or off via the join-heads property.
\applyoutput expression is the most flexible way to
tune properties for individual grobs.
no-stem-extend.
\newpage instead of (pagebreak)
of course.
\break and
\noBreak.
\chords
mode): the suffixes are printed below the pitches.
chordNameExceptions can used
to store a list of special notations for specific chords.
\notes { <c f g bes>1\markup { \super "7" "wahh" } }
chordNameExceptions takes a little manoeuvring. The
following code transforms chExceptionMusic (which is a
sequential music) into a list of exceptions.
(sequential-music-to-chord-exceptions chExceptionMusic \#t)
(append
... ignatzekExceptions)
majorSevenSymbol.
full-size-change should be typeset in
full size. For octaviated clefs, the “8” should appear closely above
or below the clef respectively.
merge-differently-headed, then
open note heads may be merged with black noteheads, but only
if the black note heads are from 8th or shorter notes.
Completion_heads_engraver, notes that cross bar lines are split
into tied notes.
\figures { } mode, which allows you to type
numbers, like <<4 6+>>.
extra-offset of a grob.
\grace section.
Slurs that start within a grace section, but aren't ended are attached
to the next normal note. Grace notes have zero duration. If there
are tuplets, the grace notes won't be under the brace. Grace notes
can have accidentals, but they are (currently) spaced at a fixed
distance. Grace notes (of course) come before the accidentals of the
main note. Grace notes can also be positioned after the main note.
flagStyle is
not set. Main note scripts don't end up on the grace note.
Staff.instrument and
Staff.instr. You can enter markup texts to create more funky names,
including alterations.