LilyPond Regression Tests


This document presents proofs for LilyPond 2.12.2). When the text corresponds with the shown notation, we consider LilyPond Officially BugFree (tm). This document is intended for finding bugs and for documenting bugfixes.

In the web version of this document, you can click on the file name or figure for each example to see the corresponding input file.

TODO: order of tests (file names!), test only one feature per test. Smaller and neater tests.

Regression test cases Accidentals are available in different ancient styles, which all are collected here.

[image of music] When a tie is broken, the spacing engine must consider the accidental after the line break, to prevent a collision from occurring.

[image of music] Cautionary accidentals may be indicated using either parentheses (default) or smaller accidentals.

[image of music] Accidentals are reset for clef changes.

[image of music] accidentals avoid stems of other notes too.

[image of music] Several automatic accidental rules aim to reproduce contemporary music notation practices:

Both scores should show the same accidentals.

[image of music] If two forced accidentals happen at the same time, only one sharp sign is printed.

[image of music] Cautionary accidentals applied to tied notes after a bar line are valid for the whole measure.

[image of music] Accidentals can be forced with ! and ? even if the notes are tied.

[image of music] Ledger lines are shortened when there are accidentals. This happens only for the single ledger line close to the note head, and only if the accidental is horizontally close to the head.

[image of music]

This shows how accidentals in different octaves are handled. The note names are also automatically printed but the octavation has been dropped out.

[image of music] In piano accidental style, notes in both staves influence each other. In this example, each note should have an accidental.

[image of music] 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.

[image of music] Quarter tone notation is supported, including threequarters flat.

[image of music]

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.

[image of music] setting the suggestAccidentals will print accidentals vertically relative to the note. This is useful for denoting Musica Ficta.

[image of music] The second and third notes should not get accidentals, because they are tied to a note. However, an accidental is present if the line is broken at the tie, which happens for the G sharp.

[image of music] Tied accidentaled notes (which cause reminder accidentals) do not wreak havoc in the spacing when unbroken.

[image of music]

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.

[image of music]

Accidentals work: the second note does not get a sharp. The third and fourth show forced and courtesy accidentals.

[image of music] Newly created contexts can be inserted anywhere in the vertical alignment.

[image of music] Alignments may be changed pre system by setting alignment-offsets in the line-break-system-details property

[image of music] By setting properties in NonMusicalPaperColumn, vertical spacing of alignments can be adjusted per system.

By setting alignment-extra-space or fixed-alignment-extra-space an individual system may be stretched vertically.

For technical reasons, overrideProperty has to be used for setting properties on individual object. \override in a \context block may still be used for global overrides.

[image of music] Adding ambitus to percussion contexts does not cause crashes, since the Ambitus_engraver will only acknowledge pitched note heads.

[image of music] Ambituses use actual pitch not lexicographic ordering.

[image of music] Ambituses indicate pitch ranges for voices.

Accidentals only show up if they’re not part of key signature. AmbitusNoteHead grobs also have ledger lines.

[image of music] With \applyContext, \properties can be modified procedurally. Applications include: checking bar numbers, smart octavation.

This example prints a bar-number during processing on stdout.

[image of music] The \applyOutput expression is the most flexible way to tune properties for individual grobs.

Here, the layout of a note head is changed depending on its vertical position.

[image of music]

A square bracket on the left indicates that the player should not arpeggiate the chord.

[image of music] Arpeggio stays clear of accidentals and flipped note heads.

[image of music] Arpeggios do not overshoot the highest note head. The first chord in this example simulates overshoot using 'positions for comparison with the correct behaviour.

[image of music] There is a variant of the arpeggio sign that uses a ‘vertical slur’ instead of the wiggle.

[image of music] Span arpeggios within one staff also work

[image of music]

Arpeggios are supported, both cross-staff and broken single staff.

[image of music] Augmentum dots are accounted for in horizontal spacing.

[image of music] No auto beams will be put over (manual) repeat bars.

[image of music] Autobeamer remembers subdivideBeams and other beaming pattern related functions at the start of an autobeam.

[image of music] Autobeaming will break beams according to beatGrouping if the total length of the beat groups is equal to measureLength. Otherwise, it will break beams according to beatLength.

[image of music] The autobeamer may be switched off for a single note with \noBeam.

[image of music] Automatic beaming is also done on tuplets.

[image of music] Tuplet-spanner should not put (visible) brackets on beams even if they’re auto generated.

[image of music] Beams are placed automatically; the last measure should have a single beam.

[image of music] 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, staff is not yet switched (by default).

[image of music] Excercise all output functions

[image of music]

[image of music] With balloon texts, objects in the output can be marked, with lines and explanatory text added.

[image of music] The meaning of | is stored in the identifier pipeSymbol.

[image of music] The dashes in a dashed bar line covers staff lines exactly. Dashed barlines between staves start and end on a half dash precisely.

[image of music] The dots in a dotted bar line are in spaces.

[image of music] A ticked bar line is a short line of the same length as a staff space, centered on the top-most barline.

[image of music] Bar numbers may be set and their padding adjusted individually. The counting of bar numbers is started after the anacrusis.

To prevent clashes at the beginning of a line, the padding may have to be increased.

[image of music]

Markings can be attached to (invisible) barlines.

[image of music] A knee is made automatically when a horizontal beam fits in a gap between note heads that is larger than a predefined threshold.

[image of music] There are presets for the auto-beam engraver in the case of common time signatures.

[image of music] beamlets don’t run to end of line if there are no other beamlets on the same height.

[image of music] Beamlets in grace notes remain readable.

[image of music] Beaming patterns obey the beatGrouping property.

[image of music] Broken beams have sane endings even if grobs are not present at the broken end.

[image of music] Beams can be printed across line breaks, if forced.

[image of music] 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.

[image of music]

[image of music] Beams that are not strictly concave are damped according to their concaveness.

[image of music] Fully 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.

If a beam is fails a test, the desired slope is printed next to it.

[image of music] Automatic cross-staff knees work also (here they were produced with explicit staff switches).

[image of music] scripts don’t trigger beam formatting. If this does happen, we can have a cyclic dependency on Y-positions of staves.

[image of music] Cross staff (kneed) beams do not cause extreme slopes.

[image of music]

Beams can be typeset over fixed distance aligned staves, beam beautification does not really work, but knees do. Beams should be behave well, wherever the switching point is.

[image of music] Beams are less steep than the notes they encompass.

[image of music] Beamed stems have standard lengths if possible. Quantization is switched off in this example.

[image of music]

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 was set to false.

[image of music] In feathered beams, stems in knees reach up to the feathered part correctly.

[image of music] Specifying grow-direction on a beam, will cause feathered beaming. The \featherDurations function can be used to adjust note durations.

[image of music] Even very flat but slanted patterns should give slanted beams.

[image of music] In French style beaming, the stems do not go between beams.

[image of music] Funky kneed beams with beamlets also work. The beamlets should be pointing to the note head.

[image of music] In complex configurations of knee beaming, 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.

[image of music]

Beams can be placed across a PianoStaff.

[image of music] Point-symmetric beams should receive the same quanting. There is no up/down bias in the quanting code.

[image of music]

Beams should look the same.

[image of music] Beaming can be overidden for individual stems.

[image of music] 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 staves reach up to the last beam.

[image of music] When a beam goes over a rest, there should not be any beamlets pointing towards the rest unless absolutely necessary.

[image of music] Beams may overshoot stems. This is also controlled with break-overshoot.

[image of music] Explicit beams may cross barlines.

[image of music] 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 no-stem-extend.

[image of music] This file tests a few standard beam quants, taken from Ted Ross’ book. If LilyPond finds another quant, the correct quant is printed over the beam.

[image of music] 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.

[image of music] In this test for 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.

[image of music] Quarter notes may be beamed: the beam is halted momentarily.

[image of music] The number of beams does not change on a rest.

[image of music] Engraving second intervals is 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.

[image of music] Beams in unnatural direction, have shortened stems, but do not look too short.

[image of music] Single stem beams are also allowed. For such beams, clip-edges is switched off automatically.

[image of music] For slope calculations, stemlets are treated as invisible stems.

[image of music] By setting max-beam-connect, it is possible to create pairs of unconnected beamlets.

[image of music] Automatic beaming works also in ternary time sigs. In this case, the 8th is a beat, so the 16ths are split into two groups. This can be avoided by overriding beatLength to be three 8th notes.

[image of music]

Beaming is generated automatically. Beams may cross bar lines. In that case, line breaks are forbidden.

[image of music] Beaming can be also given explicitly.

[image of music] Falls and doits can be created with bendAfter. They run to the next note, or to the next barline. Microtone bends (i.e. \bendAfter #3.5) are also supported.

[image of music] Bends avoid dots, but only if necessary.

[image of music] A book can be split into several parts with different paper settings, using \bookpart.

Fonts are loaded into the top-level paper. Page labels are also collected into the top-level paper.

[image of music] The default callback for break-align-anchor in clefs and time/key signatures reads the break-align-anchor-aligment property to align the anchor to the extent of the break-aligned grob.

[image of music] The break-align-anchor property of a break-aligned grob gives the horizontal offset at which other grobs should attach.

[image of music]

Breaks can be encouraged and discouraged using \break and \noBreak.

[image of music]

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.

[image of music]

Breathing signs are available in different tastes: commas (default), ticks, vees and ‘railroad tracks’ (caesura).

[image of music] 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.

[image of music] The 11 is only added to major-13 if it is mentioned explicitly.

[image of music] Chords can be produced with the chordname entry code (\chordmode mode), using a pitch and a suffix. Here, the suffixes are printed below pitches.

[image of music] The property chordNameExceptions can used to store a list of special notations for specific chords.

[image of music] The layout of the major 7 can be tuned with majorSevenSymbol.

[image of music] In ignatzek inversions, a note is dropped down to act as the bass note of the chord. Bass note may be also added explicitly. Above the staff: computed chord names. Below staff: entered chord name.

[image of music] The english naming of chords (default) can be changed to german (\germanChords replaces B and Bes to H and B), semi-german (\semiGermanChords replaces B and Bes to H and Bb), italian (\italianChords uses Do Re Mi Fa Sol La Si), or french (\frenchChords replaces Re to RĂ©).

[image of music] Scripts can also be attached to chord elements.

[image of music]

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.

[image of music] Chord tremolos on a single note.

[image of music] Stem directions influence positioning of whole note tremolo beams.

[image of music] chord tremolos don’t collide with whole notes.

[image of music]

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.)

[image of music] Jazz chords may have unusual combinations.

[image of music] staffLineLayoutFunction is used to change the position of the notes. This sets staffLineLayoutFunction to ly:pitch-semitones to produce a chromatic scale with the distance between a consecutive space and line equal to one semitone.

[image of music] 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.

[image of music] Ottava brackets and clefs both modify Staff.middleCPosition, but they don’t confuse one another.

[image of music] Unknown clef name warning displays available clefs

[image of music] Clefs with full-size-change should be typeset in full size.

[image of music] Clipping snippets from a finished score


This file needs to be run separately with -dclip-systems; the collated-files.html of the regression test does not adequately show the results.

The result will be files named ‘base-from-start-to-end[-count].eps’.

[image of music] Clusters behave well across line breaks.

[image of music] Clusters can be written across staves.

[image of music] don’t crash on single chord clusters.

[image of music] Clusters behave well across line breaks.

[image of music] Clusters are a device to denote that a complete range of notes is to be played.

[image of music] Single head notes may collide.

[image of music] Notes in different staves should be aligned to the left-most note, in case of collisions.

[image of music] When notes are colliding, the resolution depends on the dots: notes with dots should go to the right, if there could be confusion to which notes the dots belong.

[image of music] If dotted note heads must remain on the left side, collision resolution moves the dots to the right.

[image of music] For collisions where the upper note is dotted and in a space, the upper is moved to right. This behavior can be tuned by prefer-dotted-right.

[image of music] Collision resolution tries to put notes with dots on the right side.

[image of music] Note heads in collisions should be merged if they have the same positions in the extreme note heads.

[image of music] The FA note (a triangle) is merged to avoid creating a block-shaped note.

[image of music] Open and black note heads are not merged by default.

[image of music] Collision resolution may be forced manually with force-hshift.

[image of music] If NoteCollision has merge-differently-dotted = ##t note heads that have differing dot counts may be merged anyway. Dots should not disappear when merging similar note heads.

[image of music] If merge-differently-headed is enabled, then open note heads may be merged with black noteheads, but only if the black note heads are from 8th or shorter notes.

[image of music] When merging heads, the dots are merged too.

[image of music] Oppositely stemmed chords, meshing into each other, are resolved.

[image of music] Seconds do not confuse the collision algorithm too much. The best way to format this would be to merge the two Ds, but we will be happy for now if the upstem D does not collide with the downstem C.

[image of music] Mixed collisions with whole notes require asymmetric shifts.

[image of music]

In addition to normal collision rules, there is support for polyphony, where the collisions are avoided by shifting middle voices horizontally.

[image of music] Each grob can have a color assigned to it. Use the \override and \revert expressions to set the color property.

[image of music] You can put lyrics under completion heads.

[image of music]

The Completion_heads_engraver correctly handles notes that need to be split into more than 2 parts.

[image of music] 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.

[image of music] Completion heads will remember ties, so they are started on the last note of the split note.

[image of music]

If the Note_heads_engraver is replaced by the Completion_heads_engraver, notes that cross bar lines are split into tied notes.

[image of music] a staff should die if there is reference to it.

[image of music] Contexts of the same type can be nested.

[image of music] Custodes may be engraved in various styles.

[image of music] This is a test of the display-lily-music unit. Problems are reported on the stderr of this run.

[image of music] Dot columns do not trigger beam slanting too early.

[image of music] Dots move to the right when a collision with the (up)flag happens.

[image of music] Dotted rests connected with beams do not trigger premature beam calculations. In this case, the beam should be sloped, and there should be no programming_error() warnings.

[image of music] in collisions, the stems of outer voice are added to the dot support of the inner voices.

[image of music] Both noteheads and rests can have dots. 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. In case of chords, all dots should be in a column. The dots follow the shift of rests when avoiding collisions.

The priorities to print the dots are (ranked in importance):

[image of music] For volte, the style of double repeats can be set using doubleRepeatType.

[image of music] Three types of double repeat bar line are supported.

[image of music] In drum notation, there is a special clef symbol, drums are placed to their own staff positions and have note heads according to the drum, an extra symbol may be attached to the drum, and the number of lines may be restricted.

[image of music] Broken crescendi should be open on one side.

[image of music] 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.

[image of music] Hairpins extend to the extremes of the bound if there is no adjacent hairpin or dynamic-text. If there is, the hairpin extends to the center of the column or the bound of the text respectively.

[image of music] 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.

[image of music] left attach dir for text crescendi starting on an absolute dynamic is changed, so cresc. and the absolute dynamic don’t overstrike.

[image of music] The 2nd half of the cresc. stays at a reasonable distance from the notes.

[image of music] Crescendi may start off-notes, however, they should not collapse into flat lines.

[image of music] Easy-notation (or Ez-notation) prints names in note heads. You also get ledger lines, of course.

[image of music]

Fermatas over multimeasure rests are positioned as over normal rests.

[image of music] Bass figures can carry alterations.

[image of music] Pairs of congruent figured bass extender lines are vertically centered if figuredBassCenterContinuations is set to true.

[image of music] By adorning a bass figure with \!, an extender may be forbidden.

[image of music] Figured bass extender lines shall be broken when a figure has a different alteration, augmentation or diminishment.

[image of music] Figured bass extender lines run between repeated bass figures. They are switched on with useBassFigureExtenders

[image of music] Implicit bass figures are not printed, but they do get extenders.

[image of music]

[image of music] Figured bass can also be added to Staff context directly. In that case, the figures must be entered with \figuremode and be directed to an existing Staff context.

Since these engravers are on Staff level, properties controlling figured bass should be set in Staff context.

[image of music] Figured bass is created by the FiguredBass context which responds to figured bass events and rest events. You must enter these using the special \figuremode { } mode, which allows you to type numbers, like <4 6+> and add slashes, backslashes and pluses.

You can also enter markup strings. The vertical alignment may also be tuned.

[image of music] The fill-line markup command should align texts in columns. For example, the characters in the center should form one column.

[image of music] Scripts left of a chord avoid accidentals.

[image of music] Ordering of the fingerings depends on vertical ordering of the notes, and is independent of up/down direction.

[image of music] It is possible to associate fingerings uniquely with notes. This makes it possible to add horizontal fingerings to notes.

[image of music] Fingerings work correctly with cross-staff beams.

[image of music] Automatic fingering tries to put fingering instructions next to noteheads.

[image of music] Default flag styles: ’(), ’mensural and ’no-flag. Compare all three methods to print them: (1) C++ default implementation, (2) Scheme implementation using the ’flag-style grob property and (3) setting the ’flag property explicitly to the desired Scheme function. All three systems should be absolutely identical.

[image of music] The ’flag property of the Stem grob can be set to a custom scheme function to generate the glyph for the flag.

[image of music]

[image of music] Straight flag styles.

[image of music]

The line-spanners connects to the Y position of the note on the next line. When put across line breaks, only the part before the line break is printed.

[image of music] The voice follower is not confused when set for consecutive sets of staff switches.

[image of music] TM and No should not be changed into trademark/number symbols. This may happen with incorrect font versions.

[image of music] The default font families for text can be overridden with make-pango-font-tree

[image of music] Text set in TrueType Fonts that contain kerning tables, are kerned.

[image of music] Other fonts can be used by setting font-name for the appropriate object. The string should be a Pango font description without size specification.

[image of music] This file demonstrates how to load different (postscript) fonts. The file ‘font.scm’ shows how to define the scheme-function make-century-schoolbook-tree.

[image of music] Frets can be assigned automatically. The results will be best when one string number is indicated in advance

[image of music]

A capo indicator can be added with a fret-diagram-verbose string, and its thickness can be changed.

[image of music]

Dots indicating fingerings can be changed in location, size, and coloring.

[image of music]

Finger labels can be added, either in dots or below strings. Dot color can be changed, and fingering label font size can be adjusted.

[image of music]

The label for the lowest fret can be changed in location, size, and number type.

[image of music]

Fret diagrams can be presented in landscape mode.

[image of music]

Fret diagrams can be presented in landscape mode.

[image of music]

Number of frets and number of strings can be changed from the defaults.

[image of music]

String thickness can be changed, and diagrams can have variable string thickness.

[image of music]

The label for the lowest fret can be changed in location, size, and number type.

[image of music] This file tests various Scheme utility functions.

[image of music]

As a last resort, the placement of grobs can be adjusted manually, by setting the extra-offset of a grob.

[image of music] If broken, Glissandi anticipate on the pitch of the next line.

[image of music] Glissandi are not broken. Here a \break is ineffective. Use breakable grob property to override.

[image of music] Between notes, there may be simple glissando lines. Here, 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.

[image of music] The autobeamer is not confused by grace notes.

[image of music] Bar line should come before the grace note.

[image of music] 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.

[image of music] Grace beams and normal beams may occur simultaneously. Unbeamed grace notes are not put into normal beams.

[image of music] The \voiceOne setting is retained after finishing the grace section.

[image of music] Grace notes at the end of an expression don’t cause crashes.

[image of music] Grace notes after the last note do not confuse the timing code.

[image of music] Grace code should not be confused by nested sequential music containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example.

[image of music] Grace code should not be confused by nested sequential music containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example.

[image of music] In nested syntax, graces are still properly handled.

[image of music] Also in the nested syntax here, grace notes appear rightly.

[image of music] Graces notes may have the same duration as the main note.

[image of music] Grace notes may be put in a partcombiner.

[image of music] A \partial may be combined with a \grace.

[image of music] Stripped version of Staves should be of correct length.

[image of music] Pieces may begin with grace notes.

[image of music] Stem lengths for grace notes should be shorter than normal notes, if possible. They should never be longer, even if that would lead to beam quanting problems.

[image of music] Here startGraceMusic should set no-stem-extend to true; the two grace beams should be the same here.

[image of music] Grace notes in different voices/staves are synchronized.

[image of music] There are three different kinds of grace types: the base grace switches to smaller type, the appoggiatura inserts also a slur, and the acciaccatura inserts a slur and slashes the stem.

[image of music] When grace notes are entered with unfolded repeats, line breaks take place before grace notes.

[image of music] A volta repeat may begin with a grace. Consecutive ending and starting repeat bars are merged into one :||:.

[image of music] Repeated music can start with grace notes. Bar checks preceding the grace notes do not cause synchronization effects.

[image of music] You can have beams, notes, chords, stems etc. within a \grace section. If there are tuplets, the grace notes will not be under the brace.

Main note scripts do not end up on the grace note.

[image of music] The graphviz feature draws dependency graphs for grob properties.

[image of music] With grid lines, vertical lines can be drawn between staves synchronized with the notes.

[image of music] With the \tweak function, individual grobs that are directly caused by events may be tuned directly.

[image of music] If a hairpin ends on the first note of a new stave, we do not print that ending. But on the previous line, this hairpin should not be left open, and should end at the bar line.

[image of music] Hairpins can have circled tips. A decrescendo del niente followed by a crescendo al niente should only print one circle.

[image of music] Hairpin crescendi may be dashed.

[image of music] Hairpin dynamics start under notes if there are no text-dynamics. If there are text dynamics, the hairpin does not run into them.

[image of music] ’to-barline is not confused by very long marks.

[image of music] Hairpins whose end note is preceded by a bar line should end at that bar line.

[image of music] Hairpins end at the left edge of a rest.

[image of music] Staves with percent repeats are not killed.

[image of music] 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 does not 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.

[image of music] stanza numbers remain, even on otherwise empty lyrics lines.

[image of music] The harp-pedal markup function does some sanity checks. All the diagrams here violate the standard (7 pedals with divider after third), so a warning is printed out, but they should still look okay.

[image of music] Harp pedals can be tweaked through the size, thickness and harp-pedal-details properties of TextScript.

[image of music] Basic harp diagram functionality, including circled pedal boxes. The third diagram uses an empty string, the third contains invalid characters. Both cases will create warnings, but should still not fail with an error.

[image of music] Horizontal brackets connect over line breaks.

[image of music] Note grouping events are used to indicate where analysis brackets start and end.

[image of music] Identifiers following a chordmode section are not interpreted as chordmode tokens. In the following snippet, the identifier ‘m’ is not interpreted by the lexer as as a minor chord modifier.

[image of music] test identifiers.

[image of music] Incipit can be printed using an InstrumentName grob.

[image of music]

Instrument names (aligned on axis group spanners) ignore dynamic and pedal line spanners.

[image of music] PianoStaff.instrument and PianoStaff.instr are removed when the staves are killed off.

In this example, the 2nd staff (marked by the barnumber 2) disappears as does the instrument name.

[image of music] Instrument names are set with Staff.instrument and Staff.instr. You can enter markup texts to create more funky names, including alterations.

[image of music] Instrument names are also printed on partial starting measures.

[image of music] Instrument names horizontal alignment is tweaked by changing the Staff.Instrument #'self-alignment-X property. The \layout variables indent and short-indent define the space where the instrument names are aligned before the first and the following systems, respectively.

[image of music]

Staff margins are also markings attached to barlines. They should be left of the staff, and be centered vertically with respect to the staff. They may be on normal staves, but also on compound staves, like the PianoStaff.

[image of music] The switchInstrument music function modifies properties for an in staff instrument switch.

[image of music] Each clef has its own accidental placing rules.

[image of music] If extraNatural is set then keys that are not altered farther away (eg from sharp to double sharp) are cancelled. Otherwise only keys that do not occur in the new key signature are cancelled.

[image of music] Key cancellation signs consists of naturals for pitches that are not in the new key signature. Naturals get a little padding so the stems don’t collide.

[image of music] With the padding-pairs property, distances between individual key signature items can be adjusted.

[image of music] By setting Staff.keySignature directly, key signatures can be set invidually per pitch.

[image of music]

Key signatures may appear on key changes, even without a barline. In the case of a line break, the restoration accidentals are printed at end of a line. If createKeyOnClefChange is set, key signatures are created also on a clef change.

[image of music] \laissezVibrer ties on beamed notes don’t trigger premature beam slope calculation.

[image of music]

l.v. ties should avoid dots and staff lines, similar to normal ties. They have fixed size. Their formatting can be tuned with tie-configuration.

[image of music] Scores may be printed in landcape mode.

[image of music] When ledgered notes are very close, for example, in grace notes, they are kept at a minimum distance to prevent the ledgers from disappearing.

[image of music] Ledger lines are shortened when they are very close. This ensures that ledger lines stay separate.

[image of music] Ledger lines should appear at every other location for a variety of staves using both line-count and line-positions.

[image of music] The ligature bracket right-end is not affected by other voices.

[image of music] LilyPond syntax can be used inside scheme to build music expressions, with the #{ ... #} syntax. Scheme forms can be introduced inside these blocks by escaping them with a $, both in a LilyPond context or in a Scheme context.

In this example, the \withpaddingA, \withpaddingB and \withpaddingC music functions set different kinds of padding on the TextScript grob.

[image of music] Arrows can be applied to text-spanners and line-spanners (such as the Glissando)

[image of music] Generate valid postscript even if dash-period is small compared to line thickness.

[image of music] The period of a dashed line is adjusted such that it starts and ends on a full dash.

[image of music] Setting 'zigzag style for spanners does not cause spacing problems: in this example, the first text markup and zigzag trillspanner have the same outside staff positioning as the second markup and default trillspanner.

[image of music] Cover all line styles available

[image of music] With the \lyricsto mechanism, individual lyric lines can be associated with one melody line. Each lyric line can be tuned to either follow or ignore melismata.

[image of music] Polyphonic rhythms and rests do not disturb \lyricsto.

[image of music] switching voices in the middle of the lyrics is possible using lyricsto.

[image of music] Switching the melody to a different voice works even if the switch occurs together with context instantiation.

[image of music] 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, the lyrics ignore any other rhythms in the piece.

[image of music] Lyric extenders run to the end of the line if it continues the next line. Otherwise, it should run to the last note of the melisma.

[image of music] Extender engraver also notices the lack of note heads. Here the extender ends on the 2nd quarter note, despite the grace note without a lyric attached.

[image of music] If extendersOverRests is set, an extender is not terminated upon encountering a rest.

[image of music] Extenders will not protrude into the right margin

[image of music] A LyricExtender may span several notes. A LyricExtender does not extend past a rest, or past the next lyric syllable.

[image of music] Hyphens are printed at the beginning of the line only when they go past the first note.

[image of music] The minimum distance between lyrics is determined by the minimum-distance of LyricHyphen and LyricSpace.

The ideal length of a hyphen is determined by its length property, but it may be shortened down to minimum-length in tight situations. If in this it still does not fit, the hyphen will be omitted.

Like all overrides within \lyricsto and \addlyrics, the effect of a setting is delayed is one syllable.

[image of music] In lyrics, hyphens may be used.

[image of music] Melisma’s may be entered manually by substituting _ for lyrics on notes that are part of the melisma.

[image of music] When lyrics are not associated with specific voices, the lyric placement should follow lyric rhythms. In particular, the second syllable here should not be attached to the first note of the first staff.

[image of music]

Normally, the lyric is centered on the note head. However, on melismata, the text is left aligned on the left-side of the note head.

[image of music] Tildes in lyric syllables are converted to tie symbols.

[image of music] Lyrics are ignored for aftergrace notes.

[image of music]

Adding a Bar_engraver to the Lyrics context makes sure that lyrics do not collide with barlines.

[image of music] Melismata are triggered by manual beams.

[image of music] Lyric syllables without note attachment are not centered. Centering may cause unintended effects when the paper column is very wide.

[image of music] Lyrics are not lowered despite the presence of an octavation 8.

[image of music] The feta font has arrow heads

[image of music] A single pango string is considered to have one direction. The hebrew in this example (including punctuation) is set right-to-left, with the first word (containing 1) on the right.

[image of music] Fixed horizontal alignment of columns of text can be set using \left-column, \center-column and \right-column.

[image of music] test various markup commands.

[image of music] The epsfile markup command reads an EPS file

[image of music] The thickness setting between markup lines and other lines is consistent.

[image of music] Text that can spread over pages is entered with the \markuplines command.

[image of music] Reset fontname for musicglyph. For unknown glyphs, we print a warning.

[image of music] A dotted whole note displayed via the \note command must separate the note head and the dot. The dot avoids the upflag.

[image of music] The note markup function may be used to make metronome markings. It works for a variety of flag, dot and duration settings.

[image of music] There is a Scheme macro markup to produce markup texts using a similar syntax as \markup.

[image of music] Use \score block as markup command.

[image of music] Markup scripts may be stacked.

[image of music] Demo of markup texts, using LilyPond syntax.

[image of music] Users may define non-standard markup commands using the define-markup-command scheme macro.

[image of music] The markup commands \wordwrap and \justify produce simple paragraph text.

[image of music] The Measure_grouping_engraver adds triangles and brackets above beats when the beats of a time signature are grouped.

[image of music] Mensural ligatures show different shapes, depending on the rhythmical pattern and direction of the melody line.

[image of music] 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.

[image of music] Here \tempo directives are printed as metronome markings.

The marking is left aligned with the time signature, if there is one.

[image of music]

Using an empty text in the metronome marks, one can generate parenthesized tempo marks.

[image of music]

The tempo command supports text markup and/or duration=count. Using the Score.hideTempoNote, one can hide the duration=count in the tempo mark.

[image of music] Midi can create drums.

[image of music] Midi also handles crescendo and decrescendo, either starting and ending from specified or unspecified sound level.

[image of music] Grace notes don’t intrroduce syncing problems: the last note off will appear at tick 768 (2 * 384).

[image of music] Lyrics in MIDI are aligned to ties and beams: this examples causes no bar checks in MIDI.

[image of music] Microtonal shifts should be corrected before the start of the next (possibly grace) note.

[image of music] The pitch wheel is used for microtones.

[image of music] MIDI and partial measures work together.

[image of music] Pedals. Run timidity -idvvv file.midi |grep Midi to see midi events.

[image of music] Converting LilyPond input to MIDI and then again back with is a reversible procedure in some simple cases, which mean that the original .ly -file and the one converted back from the generated .midi -file do not differ. Here are produced some scales.

[image of music] should deliver f’ in MIDI

[image of music]

Midi2ly tuplet test.

  python scripts/ --duration-quant=32 \
      --allow-tuplet=4*2/3 \
      --allow-tuplet=8*2/3 \
      --allow-tuplet=4*3/5 \
      --allow-tuplet=8*3/5 \

[image of music] The full orchestra plays a note, where groups stop one after another. Use this to tune equalizer settings.

[image of music]

If Score.skipBars is set, the signs for four, two, and one measure rest are combined to produce the graphical representation of rests for up to 10 bars. The number of bars will be written above the sign.

[image of music] The multimeasure rest is centered exactly between bar lines.

[image of music] The existence of a text mark does not affect the placement of a multimeasure rest.

[image of music] Multi-measure rests are centered also in the case of grace notes.

[image of music] There are both long and short instrument names. Engraving instrument names should not be confused by the multimeasure rests.

[image of music] The centering of multi-measure rests is independent on prefatory matter in other staves.

[image of music] By setting texts starting with a multi-measure rest, an extra spacing column is created. This should not cause problems.

[image of music]

Texts may be added to the multi-measure rests.

By setting the appropriate spacing-procedure, we can make measures stretch to accomodate wide texts.

[image of music] For longer measure lengths, the breve rest is used.

[image of music]

Multi-measure rests do not collide with barlines and clefs. They are not expanded when you set Score.skipBars. Although the multi-measure-rest is a Spanner, minimum distances are set to keep it colliding from barlines.

Rests over measures during longer than 2 wholes use breve rests. When more than 10 or more measures (tunable through expand-limit) are used then a different symbol is used.

[image of music] the endSpanners music function inserts end span events at the end of a note.

[image of music] Music functions are generic music transformation functions, which can be used to extend music syntax seamlessly. Here we demonstrate a \myBar function, which works similar to \bar, but is implemented completely in Scheme.

[image of music] With music-map, you can apply functions operating on a single piece of music to an entire music expression. In this example, the the function notes-to-skip changes a note to a skip. When applied to an entire music expression in the 1st measure, the scripts and dynamics are left over. These are put onto the 2nd measure.

[image of music] newlyrics, multiple stanzas, multiple lyric voices.

[image of music] The printing of the staff lines may be suppressed by removing the corresponding engraver.

[image of music] Bar lines are positioned correctly when using custom staves which are not centered around position 0.

[image of music] By default, text is set with empty horizontal dimensions. The boolean property no-spacing-rods in TextScript is used to control the horizontal size of text.

[image of music] Note heads are flipped on the stem to prevent collisions. It also works for whole heads that have invisible stems.

[image of music]

Dots on harmonic note heads can be shown by setting the property harmonicDots.

[image of music] A harmonic note head must be centered if the base note is a whole note.

[image of music] The handling of stems for harmonic notes must be completely identical to normal note heads.

Harmonic heads do not get dots. If harmonicAccidentals is unset, they also don’t get accidentals.

[image of music] With shapeNoteStyles, the style of the note head is adjusted according to the step of the scale, as measured relative to the tonic property.

[image of music]

Note head shapes may be set from several choices. The stem endings should be adjusted according to the note head. If you want different note head styles on one stem, you must create a special context.

Harmonic notes have a different shape and different dimensions.

[image of music] Note head lines (e.g. glissando) run between centers of the note heads.

[image of music] The number of stafflines of a staff can be set. Ledger lines both on note heads and rests, as well as barlines, are adjusted accordingly.

[image of music] The optimal page breaker will stretch the systems horizontally so that the vertical spacing will be more acceptable. The page-spacing-weight parameter controls the relative importance of vertical/horizontal spacing. Because ragged-last-bottom is on, only the first page should be horizontally stretched.

[image of music] Print the option help text, for comparison against previous releases.

[image of music] At line breaks, ottava brackets have no vertical line and their horizontal line does not stick out. The dashed line runs until the end of the line (regardless of prefatory matter).

[image of music] Both edge heights of an ottava bracket can be specified.

[image of music] Ottava brackets are supported, through the use of the music function \ottava.

The spanner should go below a staff for 8va bassa, and the ottavation markup can be tuned with Staff.ottavation.

[image of music] Sublist of grob property lists may be also tuned. In the next example, the beamed-lengths property of the Stem grob is tweaked.

[image of music] Page breaks work when they are placed at the end of a score, or between scores.

[image of music] Page breaking and page turning commands (\pageBreak, \noPageBreak, etc), can be used at top level.

[image of music] If a page break is forced where it is forbidden, a warning is printed.

[image of music] The number of pages in a score can be forced by setting page-count in the (book-level) paper block.

[image of music] The number of pages in a score can be forced by setting page-count in the (book-level) paper block. If there are too few systems for the number of pages, we append blank pages.

[image of music] The number of pages in a score can be forced by setting page-count in the (book-level) paper block. Even if there are too many systems for that number of pages, we will squeeze them in.

[image of music] Stress optimal page breaking. This should look nice and even on 4 a6 pages.

[image of music] Page labels may be placed inside music or at top-level, and refered to in markups.

[image of music] By setting Y-offset and X-offset for the line-break-system-details of NonMusicalPaperColumn, systems may be placed absolutely on the printable area of the page.

[image of music] Page breaking details can be stored for later reference.

[image of music] This shows how different settings on \paper modify the general page layout. Basically \paper will set the values for the whole paper while \layout for each \score block.

This file is best viewed outside the collated files document.

[image of music] The space between systems can be limited when there is too much space left on the page by setting page-limit-inter-system-space.

[image of music] Minimal page breaker: special case when the last system is moved to an other page when there is not enough space because of the tagline.

[image of music] The minimal page breaker stacks as many lines on pages, only accounting for manual page break commands.

[image of music] By setting properties in NonMusicalPaperColumn, vertical spacing of page layout can be adjusted.

For technical reasons, overrideProperty has to be used for setting properties on individual object. \override may still be used for global overrides.

By setting annotate-spacing, we can see the effect of each property.

[image of music] By setting page-top-space, the Y position of the first system can be forced to be uniform.

[image of music] By default, we start with page 1, which is on the right hand side of a double page. In this example, auto-first-page-number is set to ##t and the music won’t fit on a single page, so we should automatically set the first page number to 2 in order to avoid a bad page turn.

[image of music] By default, we start with page 1, which is on the right hand side of a double page. In this example, auto-first-page-number is set to ##t. ALthough the music will fit on a single page, it would require stretching the first page badly, so we should automatically set the first page number to 2 in order to avoid a bad page turn.

[image of music] If there are no good places to have a page turn, the optimal-breaker will just have to recover gracefully. This should appear on 3 pages.

[image of music] The page-turn engraver will not count potential page turns if they occur in the middle of a repeat unless there is a long gap at the beginning or at the end of the repeat.

[image of music] The page-turn breaker will put a page turn after a rest unless there is a ’special’ barline within the rest, in which case the turn will go after the special barline.

[image of music] The parenthesize function should also work on single notes (not inside chords), rests and on whole chords (each note of the chord is parenthesized). Also, parenthesizing articulations, dynamics and text markup is possible. On all other music expressions, parenthesize does not have an effect.

Measure 1: Three parenthesized notes (staccato not parenthesized), one note with staccato in parentheses; Measure 2: Chord and two rests in parentheses (accent and markup not); Measure 3: note (no parentheses) with \p in parentheses, with text in parentheses, and note in parentheses with p not in parentheses, rest (no parentheses); Measure 4: shows that \parenthesize does not apply to other expressions like SequentialMusic

[image of music] The parenthesize function is a special tweak that encloses objects in parentheses. The associated grob is Score.ParenthesesItem.

[image of music] The a2 string is printed only on notes (i.e. not on rests), and only after chords, solo or polyphony.

[image of music] The part combiner stays apart for crossing voices.

[image of music] The analysis of the part combiner is non-local: in the following example, the decision for using separate voices in the 1st measure is made on the 2nd note, but influences the 1st note.

In the 2nd measure, the pattern without the tie, leads to combined voices.

[image of music] Part combine texts accept markup.

[image of music] Multimeasure rests are printed after solos, both for solo1 and for solo2.

[image of music] SOLO is printed even if the solo voice ends before the other one. Unfortunately, the multi-rest of the 1st voice (which is 2 bars longer than the 2nd voice) does not get printed.

[image of music] In this example, solo1 should not be printed over the 1st note, because of the slur which is present from the one-voice to the two-voice situation.

[image of music] A solo string can only be printed when a note starts. Hence, in this example, there is no Solo-2 although the 2nd voice has a dotted quarter, while the first voice has a rest.

A Solo indication is only printed once; (shared) rests do not require reprinting a solo indication.

Solo 1/2 can not be used when a spanner is active, so there is no solo over any of the tied notes.

[image of music] The part combiner detects a2, solo1 and solo2, and prints texts accordingly.

[image of music] End tuplets events are sent to the starting context, so even after a switch, a tuplet ends correctly.

[image of music] Tuplets in combined parts only print one bracket.

[image of music] The new part combiner stays apart from:

[image of music] The brackets of a piano pedal should start and end at the left side of the note. If a note is shared between two brackets, these ends are flared.

At a line-break, there are no vertical endings.

[image of music] Unterminated piano pedal brackets run to the end of the piece.

[image of music] The standard piano pedals style comes with Ped symbols. The pedal string can be also tuned, for example, to a shorter tilde/P variant at the end of the melody.

[image of music]

The appearance of phrasing slurs may be changed from solid to dotted or dashed.

[image of music] PhrasingSlurs go over normal slurs.

[image of music] Phrasing slurs do not collide with tuplet numbers.

[image of music]

[image of music] The A is atop an invisible barline. The barline, although invisible, is also translated because it is the last one of the break alignment.

[image of music] Distances between prefatory items (e.g. clef, bar, etc.) are determined by engraving standards. These distances depend on which items are combined. Mid-line, the order for clef and bar-line is different from the start of line.

[image of music]

heavily mutilated Edition Peters Morgenlied by Schubert

[image of music] Property overrides and reverts from \grace do not interfere with the overrides and reverts from polyphony.

[image of music] Nested properties may be overridden using Scheme list syntax. This test performs two property overrides: the first measure uses standard \override syntax; the second uses a list.

[image of music] nested properties may also be reverted. This uses Scheme list syntax.

[image of music] Once properties take effect during a single time step only.

[image of music] The cueDuring form of quotation will set stem directions on both quoted and main voice, and deliver the quoted voice in the cue Voice. The music function \killCues can remove all cue notes.

Spanners run to the end of a cue section, and are not started on the last note.

[image of music] Two quoted voices may refer to each other. In this example, there are notes with each full-bar rest.

[image of music] With \cueDuring and \quoteDuring, fragments of previously entered music may be quoted. quotedEventTypes will determines what things are quoted. In this example, a 16th rest is not quoted, since rest-event is not in quotedEventTypes.

[image of music] Quotes may contain grace notes. The grace note leading up to an unquoted note is not quoted.

[image of music] Voices from different cues must not be tied together. In this example, the first note has a tie. This note should not be tied to the 2nd note.

[image of music] Quotations take into account the transposition of both source and target. In this example, all instruments play sounding central C, the target is a instrument in F. The target part may be \transposed. In this case, all the pitches (including the quoted ones) will transposed as well.

[image of music] Tuplet bracket ends properly when quoting.

[image of music] In cue notes, Tuplet stops are handled before new tuplets start.

[image of music] With \quote, fragments of previously entered music may be quoted. quotedEventTypes will determines what things are quoted. In this example, a 16th rest is not quoted, since rest-event is not in quotedEventTypes.

[image of music] For a one-page score, ragged-bottom should have the same effect as ragged-last-bottom.

[image of music] When a score takes up only a single line and it is compressed, it is not printed as ragged.

[image of music] When ragged-right is specifically disabled, a score with only one line will not be printed as ragged.

[image of music] When a score takes up only a single line and it is stretched, it is printed as ragged by default.

[image of music] When the break-align-symbols property is given as a list, the alignment depends on which symbols are visible.

[image of music] RehearsalMarks still align correctly if Mark_engraver is moved to another context.

[image of music] The rehearsal mark is put on top a breakable symbol, according to the value of break-align-symbols value of the RehearsalMark. The same holds for BarNumber grobs.

[image of music] Rehearsal marks in letter style: the I is skipped, and after Z, double letters are used. The mark may be set with \mark NUMBER, or with Score.rehearsalMark.

[image of music]

Marks can be printed as numbers. By setting markFormatter we may choose a different style of mark printing. Also, marks can be specified manually, with a markup argument.

[image of music] Relative mode for repeats uses order of entry.

[image of music]

Across linebreaks, the left edge of a first and second alternative bracket should be equal.

[image of music]

Percent repeat counters can be shown at regular intervals by setting repeatCountVisibility.

[image of music] Percent repeats get incremental numbers when countPercentRepeats is set, to indicate the repeat counts, but only if there are more than two repeats.

[image of music] Percent repeats are also centered when there is a grace note in a parallel staff.

[image of music] The positioning of dots and slashes in percent repeat glyphs can be altered using dot-negative-kern and slash-negative-kern.

[image of music] Percent repeats are not skipped, even when skipBars is set.

[image of music] Measure repeats may be nested with beat repeats.

[image of music] Within a bar, beat repeats denote that a music snippet should be played again.

[image of music] Repeat ties are only connected on the right side to a note head.

[image of music] Each of the staves here should have four tremolo beams.

[image of music] Dots are added to tremolo notes if the durations involved require them.

[image of music] Volta repeats may be unfolded through the music function \unfoldRepeats.

[image of music] Unfolding tremolo repeats. All fragments fill one measure with 16th notes exactly.

[image of music] LilyPond has two modes for repeats: unfolded and semi-unfolded. Unfolded repeats are fully written out. Semi unfolded repeats have the body written and all alternatives sequentially. 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:

[image of music] When too few alternatives are present, the first alternative is repeated, by printing a range for the 1st repeat.

[image of music]

Volta (Semi folded) behavior. Voltas can start on non-barline moments. If they don’t barlines should still be shown.

[image of music] Beam/rest collision resolution and normal rest/note collisions can be combined.

[image of music] Rests under beams are moved by whole staff spaces.

[image of music] Beam/rest collision takes offset due to Rest #'direction into account properly.

[image of music] Rests under beams are shifted upon collision.

[image of music] Vertical rest positions in a multi-voice staff should obey the duration of notes; this is, they shouldn’t return to a default position too early.

[image of music]

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.

[image of music] Dots of rests should follow the rest positions.

[image of music] Whole and half rests moving outside the staff should get ledger lines.

[image of music] In rest-note collisions, the rest moves in discrete steps, and inside the staff, it moves in whole staff spaces.

[image of music] Rests can have pitches–these will be affected by transposition and relativization. If a rest has a pitch, rest/rest and beam/rest collision resolving will leave it alone.

[image of music] Pitched rests under beams.

[image of music] In polyphonic situations, rests are moved down even if there is no opposite note or rest. The amount is two staff-spaces.

[image of music]

There is a big variety of 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.

[image of music] In rhythmic staves stems should go up, and bar lines have the size for a 5 line staff. The whole rest hangs from the rhythmic staff.

[image of music] This should not survive lilypond –safe-mode

[image of music] Markup texts are rendered above or below a score.

[image of music] Scripts on chords with seconds remain centered on the extremal note head

[image of music] Scripts are put on the utmost head, so they are positioned correctly when there are collisions.

[image of music] Horizontal scripts don’t have avoid-slur set.

[image of music] The toward-stem-shift property controls the precise horizontal location of scripts that are placed above an upstem or below a downstem note (0.0 means centered on the note head, 1.0 means centered on the stem).

[image of music] horizontal scripts are ordered, so they do not overlap. The order may be set with script-priority.

The scripts should not be folded under the time signature.

[image of music] 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.

[image of music] Scripts may be stacked.

[image of music] Scripts avoid stem tremolos even if there is no visible stem.

[image of music] Semi tie directions may be forced from the input.

[image of music]

Different text styles are used for various purposes.

[image of music]

Different text styles are used for various purposes.

[image of music]

Different text styles are used for various purposes.

[image of music]

Different text styles are used for various purposes.

[image of music]

Different text styles are used for various purposes.

[image of music]

Different text styles are used for various purposes.

[image of music] skip-of-length and mmrest-of-length create skips and rests that last as long as their arguments.

[image of music] skipTypesetting doesn’t affect bar checks.

[image of music] showFirstLength and showLastLength may be set at the same time; both the beginning and the end of the score will be printed.

[image of music] showFirstLength will only show the first bit of a score

[image of music] showLastLength will only show the last bit of a score

[image of music] Tuplet brackets are also skipped with skipTypesetting.

[image of music] -ddebug-skyline draws the outline of the skyline used.

[image of music] Grobs that have outside-staff-priority set are positioned using a skyline algorithm so that they don’t collide with other objects.

[image of music] We use a skyline algorithm to determine the distance to the next system instead of relying only on bounding boxes. This keeps gaps between systems more uniform.

[image of music]

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.

[image of music] Slurs avoid clefs, but don’t avoid barlines.

[image of music] Slurs that depend on a cross-staff beam are not calculated until after line-breaking.

[image of music]

Slurs behave decently when broken across a linebreak.

[image of music] The appearance of slurs may be changed from solid to dotted or dashed.

[image of music] Slurs should not get confused by augmentation dots. With a lot of dots, the problems becomes more visible.

[image of music] Some composers use slurs both above and below chords. This can be typeset by setting doubleSlurs

[image of music] Dynamics avoid collision with slur.

[image of music]

Extreme slurs are scaled to fit the pattern, but only symmetrically. Asymmetric slurs are created by setting eccentricity.

[image of music] Setting positions overrides the automatic positioning of the slur. It selects the slur configuration closest to the given pair.

[image of music]

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.

[image of music] Slurs may be placed over rests. The slur will avoid colliding with the rests.

[image of music] Slur formatting is based on scoring. A large number of slurs are generated. Each esthetic aspect gets demerits, the best configuration (with least demerits) wins. This must be tested in one big file, since changing one score parameter for one situation may affect several other situations.

Tunable parameters are in ‘scm/slur.scm’.

[image of music] Slurs avoid scripts with avoid-slur set to inside, scripts avoid slurs with avoid-slur set to around. Slurs and scripts keep a distance of slur-padding.

[image of music] A slur avoids collisions with scripts, which are placed either inside or outside the slur, depending on the script. The slur responds appropriately if a script is moved.

[image of music] Symmetric figures should lead to symmetric slurs.

[image of music] Symmetric figures should lead to symmetric slurs.

[image of music] The attachment point for strongly sloped slurs is shifted horizontally slightly. Without this correction, slurs will point into one note head, and point over another note head.

[image of music] TupletNumber grobs are always inside slurs. This may not work if the slur starts after the tuplet.

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music]

[image of music] Accidentals in different staves do not affect the spacing of the eighth notes here.

[image of music] Accidentals do not influence the amount of stretchable space. The accidental does add a little non-stretchable space.

[image of music] Horizontal spacing works as expected on tied notes with accidentals. No space is reserved for accidentals that end up not being printed, but accidentals that are printed don’t collide with anything.

[image of music] Accidentals sticking out to the left of a note will take a little more space, but only if the spacing is tight.

[image of music] An accidental following a bar gets space so the left edge of the acc is at 0.3 - 0.6 staff space of the bar line

[image of music] An arpeggio following a bar gets space

[image of music] Downstem notes following a barline are printed with some extra space. This is an optical correction similar to juxtaposed stems.

The bar upstem should be approx 1.1 staff space, the bar downstem 1.3 to 1.5 staff space.

[image of music] Notes that fill a whole measure are preceded by extra space.

[image of music] Clef changes at the start of a line get much more space than clef changes halfway the line.

[image of music] Broken engraving of a bar at the end of a line does not upset the space following rests and notes.

[image of music]

A voicelet (a very short voice to get polyphonic chords correct) should not confuse the spacing engine.

[image of music] Clefs are also folded under cross staff constructs.

[image of music] A clef can be folded below notes in a different staff, if this does not disrupt the flow of the notes.

[image of music] A clef can be folded below notes in a different staff, if there is space enough. With Paper_column stencil callbacks we can show where columns are in the score.

[image of music] Voices that go back and forth between staves do not confuse the spacing engine.

[image of music] 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.

[image of music] Grace note runs have their own spacing variables in Score.GraceSpacing. So differing grace note lengths inside a run are spaced accordingly.

[image of music] Skyline horizontal spacing may fold non-adjacent columns together, but they still do not collide. In this case, the arpeggio and the barline do not collide.

[image of music] accidentals may be folded under preceding notes.

[image of music] Spacing corrections for kneed beams still work when compression is involved.

[image of music] For knees, the spacing correction is such that the stems are put at regular distances. This effect takes into account the width of the note heads and the thickness of the stem.

[image of music] Even in case of incorrect contexts (eg. shortlived contexts) that break linking of columns through spacing wishes, strict-note-spacing defaults to a robust solution.

[image of music] If a floating grace spacing section attaches to a note across a line break, it gets attached to the end of line.

[image of music] With strict-grace-spacing, grace notes don’t influence spacing.

[image of music] Width of marks does not affect spacing.

[image of music] Horizontal spacing is bounded by the current measure length. This means that the 3/8 setting does not affect the whole rest spacing.

[image of music] Concurrent tuplets should be equidistant on all staves. Such equidistant spacing is at odds with elegant engraver spacing; hence it must be switched on explicitly with the uniform-stretching property of SpacingSpanner.

[image of music] In the absence of NoteSpacings, wide objects still get extra space. In this case, the slash before the barline gets a little more space.

[image of music] The spacing engine avoids collisions between non-adjacent columns.

[image of music] The spacing engine avoids collisions between non-adjacent columns.

[image of music] 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.

[image of music]

In packed mode, pack notes as tight as possible. This makes sense mostly in combination with ragged-right mode: the notes are then printed at minimum distance. This is mostly useful for ancient notation, but may also be useful for some flavours of contemporary music. If not in ragged-right mode, lily will pack as many bars of music as possible into a line, but the line will then be stretched to fill the whole linewidth.

[image of music] Proportional notation can be created by setting proportionalNotationDuration. Notes will be spaced proportional to the distance for the given duration.

[image of music] If ragged-last is set, the systems are broken similar to paragraph formatting in text: the last line is unjustified.

[image of music] Rests get a little less space, since they are narrower. However, the quarter rest in feta font is relatively wide, causing this effect to be very small.

[image of music] New sections for spacing can be started with ewSpacingSection. In this example, a section is started at the 4/16, and a 16th in the second section takes as much space as a 8th in first section.

[image of music] 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, the 16th notes get 1/2 of the space of an eigth note. The total distance for a 16th (which includes note head) is 3/4 of the eighth note.

[image of music] When space-to-barline is false, we measure the space between the note and the start of the clef. When space-to-barline is true, we measure the space between the note and the start of the barline.

[image of music] Upstem notes before a barline are printed with some extra space. This is an optical correction similar to juxtaposed stems.

[image of music]

There are optical corrections to the spacing of stems. The overlap between two adjacent stems of different direction is used as a measure for how much to correct.

[image of music] For juxtaposed chords with the same direction, a slight optical correction is used. It is constant, and works only if two chords have no common head-positions range.

[image of music] If keep-inside-line is set for the relevant PaperColumn, LilyPond will space a line to prevent text sticking out of the right margin.

[image of music] If strict-note-spacing is set, then spacing of notes is not influenced by bars and clefs half-way on the system. Rather, they are put just before the note that occurs at the same time. This may cause collisions.

[image of music] With strict-note-spacing spacing for grace notes (even multiple ones), is floating as well.

[image of music] An empty barline does not confuse the spacing engine too much. The two scores should look approximately the same.

[image of music] Space from a normal note (or barline) to a grace note is smaller than to a normal note.

[image of music] Notes are spaced exactly according to durations, if uniform-stretching is set. Accidentals are ignored, and no optical-stem spacing is performed.

[image of music] At the beginning of a system, the |: repeat barline is drawn between the staves, but the :| is not.

[image of music] Span bars can be turned on/off on a staff-by-staff basis.

[image of music] SpanBars participate in the horizontal collision system; the accidentals should not collide with the bar lines.

[image of music] Span bars are drawn only between staff bar lines. By setting bar lines to transparent, they are shown only between systems.

Setting SpanBar transparent removes the barlines between systems.

[image of music] Spanners parts that extend beyond their parents are killed in case of line breaks.

[image of music] The break-overshoot property sets the amount that a spanner (in this case: the beam) in case of a line break extends beyond the rightmost column and extends to the left beyond the prefatory matter.

[image of music] Some scripts must have quantized postions. VErtical position descend monotonously for a descending scale. The staccato dot is close to the notehead. If the head is in a space, then the dot is in the space next to it.

[image of music] Staves can be started and stopped at command.

[image of music] The vertical positions of staff lines may be specified individually, by setting the line-positions property of the StaffSymbol.

[image of music] Staves may be present in several sizes within a score. This is achieved with an internal scaling factor. If the scaling factor is forgotten in some places, objects generally become too thick or too large on smaller staves.

[image of music] Symbols that need on-staffline info (like dots and ties) continue to work in absence of a staff-symbol.

[image of music] The staff is a grob (graphical object) which may be adjusted as well, for example, to have 6 thick lines and a slightly large staff-space. However, beams remain correctly quantized.

[image of music] Stanza numbers are put left of their lyric. They are aligned in a column.

[image of music] Stem directions for notes on the middle staff line are determined by the directions of their neighbors.

[image of music]

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.

[image of music] If note head is ‘over’ the center line, the stem is shortened. This happens with forced stem directions, and with some chord configurations.

[image of music] Stemlets don’t cause stems on whole notes.

[image of music] Stemlets are small stems under beams over rests. Their length can be set with stemlet-length.

[image of music]

[image of music] Tremolos are positioned a fixed distance from the end of the beam. Tremolo flags are shortened and made rectangular on beamed notes or on stem-up notes with a flag. Tremolo flags are tilted extra on stem-down notes with a flag.

[image of music] stem tremolo vertical distance also obeys staff-space settings.

[image of music]

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 (e.g. on a whole note), the tremolo must be centered on the note. If the note has a flag (eg. an unbeamed 8th note), the tremolo should be shortened if the stem is up and tilted extra if the stem is down.

The tremolos should be positioned a fixed distance from the end of the stems unless there is no stem, in which case they should be positioned a fixed distance from the note head.

[image of music] Combinations of rotation and color do work.

[image of music] You can write stencil callbacks in Scheme, thus providing custom glyphs for notation elements. A simple example is adding parentheses to existing stencil 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.

[image of music] String numbers should only be moved outside slurs when there is a collision.

[image of music] String numbers can be added to chords. They use the same positioning mechanism as finger instructions.

[image of music] The size of every system is correctly determined; this includes postscript constructs such as slurs.

[image of music] By setting between-system-padding to a negative value, it is possible to eliminate the anti-collision constraints. Then setting between-system-space to a low (nonzero) value, print systems in overstrike.

Unfortunately, this does not show in the colllated texinfo document. Run this example stand-alone to see the effect.

[image of music] System separators may be defined as markups in the system-separator-markup field of the paper block. They are centered between the boundary staves of each system.

[image of music] A piano context included within a staff group should cause the piano brace to be drawn to the left of the staff angle bracket.

[image of music] A heavy-bar system start delimiter may be created by tuning the SystemStartBar grob.

[image of music] Deeply nested system braces, brackets, etc., may be created with the systemStartDelimiterHierarchy property.

[image of music] Tablature may also be tuned for banjo.

[image of music] Harmonics get angled brackets in tablature

[image of music] Tab supports slides.

[image of music] For other tunings, it is sufficient to set stringTunings. The number of staff lines is adjusted accordingly.

[image of music] A sample tablature, with both normal staff and tab.

Tablature is done by overriding the note-head formatting function, and putting it on a 6-line staff. A special engraver takes care of going from string-number + pitch to number.

String numbers can be entered as note articulations (inside a chord) and chord articulations (outside a chord)

[image of music] The \tag command marks music expressions with a name. These tagged expressions can be filtered out later. This mechanism can be used to make different versions of the same music. In this example, the top stave displays the music expression with all tags included. The bottom two staves are filtered: the part has cue notes and fingerings, but the score has not.

[image of music] This file gives a different result each time it is run, so it should always show up in the output-distance testing.

[image of music] Text and trill spanners are attached to note columns, so attachments in other staves have no effect on them.

[image of music] The order of setting nested properties does not influence text spanner layout.

[image of music] Text spanners should not repeat start text when broken.

[image of music]

lilypond should flip the tie’s direction to avoid a collision with the sharp.

[image of music] Advanced tie chord formatting also works with arpegiated ties. Due to arpeggios, tie directions may be changed relative to the unarpegiated case.

[image of music] when tieWaitForNote is set, the right-tied note does not have to follow the lef-tied note directly. When tieWaitForNote is set to false, any tie will erase all pending ties.

[image of music] Broken ties honor minimum-length also. This tie has a minimum-length of 5.

[image of music] Broken tie lengths are not affected by clefs in other staves.

[image of music] Ties behave properly at line breaks.

[image of music]

Tie detail property multi-tie-region-size controls how many variations are tried for the extremal ties in a chord.

[image of music] Switching on debug-tie-scoring annotates the tie scoring decisions made.

[image of music] Individual chord notes can also be tied

[image of music] In chords, ties keep closer to the note head vertically, but never collide with heads or stems. Seconds are formatted up/down; the rest of the ties are positioned according to their vertical position.

The code does not handle all cases. Sometimes ties will printed on top of or very close to each other. This happens in the last chords of each system.

[image of music] In the single tie case, broken ties peek across line boundaries to determine which direction to take.

[image of music] Tie directions can be set with _ and ^. This makes correction in complex chords easier.

[image of music] Ties avoid collisions with dots.

[image of music] Tying a grace to a following grace or main note works.

[image of music] If using integers, the tie will vertically tuned for staff line avoidance. If using a floating point number, this is taken as the exact location.

[image of music] Tie formatting may be adjusted manually, by setting the tie-configuration property. The override should be placed at the second note of the chord.

You can leave a Tie alone by introducing a non-pair value (eg. #t) in the tie-configuration list.

[image of music] Like normal ties, single semities (LaissezVibrerTie or RepeatTie) get their direction from the stem direction, and may be tweaked with #'direction.

[image of music] Tie directions are also scored. In hairy configurations, the default rule for tie directions is overruled.

[image of music] Individual ties may be formatted manually by specifying their direction and/or staff-position.

[image of music] Formatting for isolated ties.

[image of music] For whole notes, the inside ties do not cross the center of the note head, horizontally.

[image of music] The input representation is generic, and may be translated to XML.

[image of music] A table of contents is included using \markuplines \table-of-contents. The toc items are added with the \tocItem command.

[image of music]

A TrillSpanner crossing a line break should restart exactly above the first note on the new line.

[image of music] Trill spanner can end on a grace note

[image of music] Pitched trills on consecutive notes with the same name and octave should not lose accidentals; in the following example, accidentals should be visible for all trill-pitches.

[image of music] Pitched trill accidentals can be forced.

[image of music] Pitched trills are denoted by a small note head in parentheses following the main note. This note head is properly ledgered, and parentheses include the accidental.

[image of music] The trill symbol and the wavy line are neatly aligned: the wavy line should appear to come from the crook of the r

[image of music] 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.

[image of music] Cross-staff tuplets are drawn correctly, even across multiple staves.

[image of music] Broken tuplets are adorned with little arrows. The arrows come from the edge-text property, and thus be replaced with larger glyphs or other text.

[image of music] With full-length-to-extent, the extent of the attaching column for a full-length tuplet bracket can be ignored.

[image of music] tuplet can be made to run to prefatory matter or the next note, by setting tupletFullLengthNote.

[image of music] If tupletFullLength is set, tuplets end at the start of the next non-tuplet note.

[image of music] The size of the tuplet bracket gap is adjusted to the width of the text.

[image of music] Nested tuplets do collision resolution, also when they span beams.

[image of music] Tuplets may be nested.

[image of music] Removing Stem_engraver doesn’t cause crashes.

[image of music] Tuplet bracket formatting supports numerous options, for instance, bracketed (B) and non-bracketed (NB).

[image of music] Tuplets may contain rests.

[image of music] Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don’t show a bracket. Make sure that tuplets without any notes don’t show any number, either.

[image of music] Tuplet brackets stay clear of the staff. The slope is determined by the graphical characteristic of the notes, but if the musical pattern does not follow graphical slope, then the bracket is horizontal

The bracket direction is determined by the dominating stem direction.

[image of music] Horizontal tuplet brackets are shifted vertically to avoid staff line collisions.

[image of music]

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 bracket. The endings can be adjusted with bracket-flare.

[image of music] words in mixed font in a single string are separated by spaces as in the input string. Here a Russian word followed by a roman word.

[image of music] Various scripts may be used for texts (like titles and lyrics) introduced by entering them in UTF-8 encoding, and using a Pango based backend. Depending on the fonts installed, this fragment will render Bulgarian (Cyrillic), Hebrew, Japanese and Portuguese.

[image of music]

Whenever a voice switches to another staff a line connecting the notes can be printed automatically. This is enabled if the property followVoice is set to true.

[image of music] Broken volta spanners behave correctly at their left edge in all cases.

[image of music] Volte using repeatCommands can have markup text.

[image of music] By putting Volta_engraver in a staff context, one can get volta brackets on staves other than the topmost one.

[image of music] By default, the volta brackets appear only in the topmost staff.

[image of music] If you specify two different key signatures at one point, a warning is printed.

[image of music] The whiteout command underlays a white box under a markup. The whitening effect only is only guaranteed for staff lines, since staff lines are in a lower layer than most other grobs.

[image of music]

About This Document

This document was generated by Han-Wen Nienhuys on January 20, 2009 using texi2html 1.79.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ << ] FastBack Beginning of this chapter or previous chapter 1
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  
[ >> ] FastForward Next chapter 2
[ < ] Back Previous section in reading order 1.2.2
[ Up ] Up Up section 1.2
[ > ] Forward Next section in reading order 1.2.4

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

LilyPond Regression Tests