-New features in 2.14 since 2.12
+New features in 2.18 since 2.16
*******************************
- * Lilypond now helps beams avoid collisions with other grobs! This
- feature works completely with manual beams. It also works for all
- automatic beams that do not end right before a change in staff.
- For this special case, please use manual beams.
+ * The PostScript functionality of stroke adjustment is no longer
+ applied automatically but left to the discretion of the PostScript
+ device (by default, Ghostscript uses it for resolutions up to
+ 150dpi when generating raster images). When it is enabled, a more
+ complex drawing algorithm designed to benefit from stroke
+ adjustment is employed mostly for stems and bar lines.
- * The Articulate script by Peter Chubb, which is GPLv3 licensed, is
- now a part of the distribution. It allows easy generation of
- improved MIDI files that perform non-legato by default, legato
- slurs, staccato, tempo markings, trills, etc.
+ Stroke adjustment can be forced by specifying the command line
+ option `-dstrokeadjust' to LilyPond. When generating `PDF' files,
+ this will usually result in markedly better looking `PDF' previews
+ but significantly larger file size. Print quality at high
+ resolutions will be unaffected.
- \include "articulate.ly"
- \articulate <<
- all the rest of the score...
- >>
-
- * Single beat repeats for sixteenth or shorter notes and beat
- repeats for measures containing notes of varying durations are now
- supported.
-
- [image of music]
-
- * Lilypond now engraves woodwind fingering charts.
-
- [image of music]
-
- * MIDI output has been improved
- * the option `\set Score.midiChannelMapping = #'voice' puts
- each voice on its own midi MIDI channel
-
- * the option `\set Score.midiChannelMapping = #'instrument'
- puts identical instruments on the same MIDI channel. This
- means that e.g. for a full orchestral score there are always
- 16 (15 plus percussion) differently sounding instruments
- available, unrestricted by the number of staves or voices.
- (Some MIDI players will cut off notes, however, if two voices
- play the same pitch simultaneously on the same channel.) This
- option also stores each voice in a separate track in the MIDI
- file.
-
- * the default, `\set Score.midiChannelMapping = #'staff',
- assigns one MIDI channel per staff. This setting allows
- instrument changes (implemented as MIDI program changes) to
- re-use single MIDI channel.
-
- * dynamics are now rendered as note velocities, no longer as
- midi volume. This improves the sound on [high end] midi
- renderers.
-
- * MIDI-import through Midi2ly is improved
- * Midi2ly now also works on Windows systems
-
- * MIDI-files with more than 32 tracks are now handled
-
- * notes on certain simultaneous voices no longer ignored
-
- * notes overrunning a bar line are no longer truncated
-
- * initial key signature and time signature are respected
-
- * a problem with octaves in subsequent tracks/voices is fixed
-
- * initial support for multiple voices notated on one staff
-
- * the instrumentName is set from track data
-
- * new -skip option, rests are displayed by default
-
- * rests overrunning a bar line are not truncated
-
- * new -include-header option for setting titles
-
- * new -preview option for big MIDI-files
- The first feature was sponsored by Valentin Villenave, the other
- features were sponsored by Image-Line Software for FL Studio.
+ * There is now a new context type called `NullVoice' which, while not
+ appearing in the printed output, can be used to align lyrics.
+ This can be particularly convenient when used in parallel with a
+ `\partcombine' construct.
- * A new `Completion_rest_engraver' is available for automatically
- converting long rests which overrun bar lines, matching the
- `Completion_heads_engraver' for notes
- \layout {
- \context {
- \Voice
- \remove "Note_heads_engraver"
- \consists "Completion_heads_engraver"
- \remove "Rest_engraver"
- \consists "Completion_rest_engraver"
- }
- }
- This feature was sponsored by Image-Line Software for FL Studio.
+ soprano = \relative c' { c e g c }
+ alto = \relative c' { a c e g }
+ verse = \lyricmode { This is my song }
- * Dots can be added to the table of contents items using:
- \paper {
- tocItemMarkup = \tocItemWithDotsMarkup
+ \score {
+ \new Staff <<
+ \partcombine \soprano \alto
+ \new NullVoice = "aligner" \soprano
+ \new Lyrics \lyricsto "aligner" \verse
+ >>
+ \layout {}
}
+ [image of music]
- * New markup commands `\pattern' and `\fill-with-pattern' are
- available. [image of music]
-
- * A minimal composer toolkit of modal transformations is provided.
- A motif may be transposed, inverted and/or converted to its
- retrograde within any scale.
-
- [image of music]
-
- * Added minimal support for black mensural notation.
-
- * Enhanced support for obliqua shapes within white mensural
- ligatures.
-
- [image of music]
-
- * New markup functions `\with-link' and `\page-link' that add
- hyperlinks to a given label or a given page number. This works in
- the PDF backend only. All entries to the table of contents now
- automatically add hyperlinks to the pages they are referring to.
-
- * Compound time signatures are now supported by the `\compoundMeter'
- command, which can be used instead of `\time':
-
- [image of music]
-
- * Lyrics above a staff must have their `staff-affinity' set to
- `DOWN' or must have their `alignAboveContext' property set in
- order to be properly aligned. For more information, see *note
- Placing lyrics vertically: (lilypond-notation)Placing lyrics
- vertically.
-
- * `stringTunings' property values have changed from a list of
- semitones above middle C to a list of LilyPond pitch values.
- convert-ly will handle the change automatically where the value of
- `stringTunings' is set to a Scheme constant value.
-
- New commands `makeStringTuning' and `contextStringTuning' allow
- the creation of string tunings in the form of a Lilypond chord
- construct.
-
- * By using `\cueDuringWithClef', cue notes can now also have their
- own clef, which is correctly reset at the end of the cue notes.
- At the begin of each line, the standard clef is still displayed,
- but the cue clef is shown after the time/key signature in smaller
- size.
-
- [image of music]
-
- * Note names can be selected with a new `\language "italiano"'
- command, which can be used in safe mode. The old `\include
- "italiano.ly"' syntax is still supported for now, but will be
- deprecated in the future.
-
- * autobeaming is now disabled by `\cadenzaOn' and enabled by
- `\cadenzaOff'. Beaming in cadenzas should be indicated manually.
- Also, if a cadenza is used in a piece with autobeaming disabled, it
- will need to be disabled again after the cadenza.
-
- * The user is now able to specify the name of the predefined
- fretboard table. This allows the use of multiple tables, with
- switching between them based on user input.
-
- * The part-combiner's decision to combine/not combine notes can now
- be customized
-
- [image of music]
-
-
- * Tablature staves show fret numbers only by default. To get the
- former style, `\tabFullNotation' is provided.
-
- * Funk-style and Walker-style shape notes have been added.
-
- * Rests will no longer keep a staff alive if
- `\RemoveEmptyStaffContext' is used.
-
- * New option `-dinclude-settings=INCLUDEFILE.ly', which causes
- lilypond to include the given file before the score is processed.
- This allows the user to change global settings without the need to
- change the score itself. That way, several different
- editions/version (e.g. different page sizes) can be generated from
- a file without having to modify the score for each version.
-
- * The autobeaming settings syntax has been changed. beatLength,
- beatGrouping, beamSettings, and measureGrouping have all been
- eliminated. Autobeaming is now controlled by baseMoment,
- beatStructure, and beamExceptions. Default settings for each of
- these properties can be stored for any time signature in
- time-signature-settings, so that when the time signature is
- changed, the autobeaming will automatically change. The new
- syntax should be much easier and require fewer overrides.
-
- * The SVG backend has optional support for WOFF fonts
- (http://www.w3.org/Submission/WOFF). Using the Scheme option `-d
- svg-woff' together with the SVG backend selection `-d
- backend=svg', produces SVG output with CSS WOFF font selection.
-
- * The LilyPond G clef has been rotated 1.5 degrees clockwise for
- improved balance. The old and new versions can be compared by
- looking at the documentation: old version
- (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/The-Feta-font.html#Clef-glyphs),
- new version
- (http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#Clef-glyphs).
-
- * Text crescendo spanners can now be added directly using `\cresc',
- `\dim' and `\decresc'.
- [image of music]
+ * Several articulations can be put into a single variable or
+ returned from an event function:
+ sempreStacc = -. ^\markup \italic sempre
+ \relative { c''4\sempreStacc c c c }
+ [image of music]
- * The documented syntax of `lilypond' environments in the LaTeX mode
- of `lilypond-book' has been changed to conform with standard LaTeX
- syntax: options now come after the environment name:
- \begin{lilypond}[OPTIONS] ...
- The previous syntax with options after `\begin' is still accepted
- by `lilypond-book' but deprecated. Something like
- sed -i '/begin\[/s/begin\(\[[^]]*]\)\({lilypond}\)/begin\2\1/'
+ * The baseline of score markups is now taken from the reference
+ point (usually the middle of the staff) of the first bottom system
+ rather than the top of the bounding rectangle. The following
- might do the trick for conversion.
+ \markup {
+ violin: \score { \new Staff { <g d' a' e''>1 }
+ \layout { indent=0 } } ,
+ cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+ \layout { indent=0 } }
+ }
+ [image of music]
- * Aesthetics of shape note heads have been enhanced. Variable line
- thicknesses have been implemented. All note widths have been made
- consistent. Minor shape note commands that use the relative major
- key for scale steps have been added.
- * A variant of the Segno sign is provided:
+ previously looked like
[image of music]
- * Context modifications (`\with' blocks) can be stored in variables
- and inserted into contexts or other `\with' blocks:
-
- coloredheads = \with { \override NoteHead #'color = #red }
- noclef = \with { \remove "Clef_engraver" }
- \score {
- \new Staff {
- \new Voice \with { \coloredheads } \relative c' { c4 e g c }
+ without a reliable way to get both scores to line up.
+
+ * LilyPond no longer automatically infers a `\defaultchild' context
+ in a context definition with `\accepts' clauses. Any context
+ definition without an explicit or inherited `\defaultchild'
+ definition counts as a `Bottom' context and will be eligible for
+ rhythmic events and overrides without causing the implicit
+ creation of other contexts. Be sure to specify a `\defaultchild'
+ for non-`Bottom' contexts when defining them from scratch.
+
+ * There is now extensive support for both discant and bass accordion
+ register symbols in the `scm accreg' module, see *note Accordion
+ Registers: (lilypond-notation)Accordion Registers.
+
+ #(use-modules (scm accreg))
+ \new PianoStaff
+ <<
+ \new Staff \relative
+ { \clef "treble" \discant "10"
+ r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+ \discant "121"
+ << { r16 <f bes> r <e a> r <d g> } \\
+ { d r a r bes r } >> |
+ <cis e a>1
}
- \layout {
- \context {
- \Staff
- \noclef
- }
+ \new Staff \relative
+ { \clef "treble" \freeBass "1"
+ r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+ \clef "bass" \stdBass "Master"
+ << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+ <e a cis>1^"a" } \\
+ { d8_"D" c_"C" bes_"B" | a1_"A" }
+ >>
}
- }
+ >>
[image of music]
- * A half-open articulation was added:
+ * New commands `markLengthOn' and `markLengthOff' control the
+ allowance of horizontal space for tempo and rehearsal marks.
[image of music]
- This is sometimes used to indicate half-open hi-hats.
+ * Rehearsal marks at the beginning of a line are now placed to the
+ right of the clef and key signature by default. As in previous
+ versions, the `break-alignable-interface' controls the behavior.
- * The Unicode Bidirectional Algorithm is now fully supported for
- single-line markup due to enhanced integration with Pango.
-
- * LilyPond is now licensed under the GNU GPL v3+.
+ [image of music]
- * In tablature, frets can be indicated with labels other than
- numbers:
- \new TabStaff
- \with {
- stringTunings = #`(,(ly:make-pitch 1 3 NATURAL)
- ,(ly:make-pitch 1 1 NATURAL)
- ,(ly:make-pitch 0 5 NATURAL)
- ,(ly:make-pitch 0 3 NATURAL)
- ,(ly:make-pitch 0 1 NATURAL)
- ,(ly:make-pitch -1 5 NATURAL))
- tablatureFormat = #fret-letter-tablature-format
- }
- \new TabVoice {
- \set fretLabels = #`(,(markup #:with-color red "a")
- "b"
- ,(markup #:italic #:smaller "c"))
- <f d>4. <bes>8 <g e>4
- }
+ * Decimal numbers can now be written directly in music, without a
+ hash sign. Together with the previous change in the way object
+ properties are specified, the code to change the length of stems
+ has changed from this:
+ \override Stem #'length = #5.6
+ e' f' g' a'
+ to this:
+ \override Stem.length = 5.6
+ e' f' g' a'
+
+ One has to write a digit on both sides of the dot - values like
+ `4.' or `-.3' are not allowed.
+
+ Decimal fractions are also not accepted in `\chordmode'.
+
+ * A number of shorthands like `(', `)', `|', `[', `]', `~', `\(',
+ `\)' and others can now freely be redefined like normal commands.
+ An example would be
+
+ "\\{" = (
+ "\\}" = )
+ "(" = \melisma
+ ")" = \melismaEnd
+
+ \new Staff <<
+ \relative c' {
+ c8 \{ d e f \} % slurred
+ g ( a b c ) % no slur, but with melisma
+ c,1 \bar "|."
+ }
+ \addlyrics { Li -- ly -- pond. }
+ >>
[image of music]
- * Layout objects can be printed over a white background, which
- whites-out objects in lower layers which lie beneath:
+ * The articulation shorthand for `\staccatissimo' has been renamed
+ from `-|' to `-!'.
- \time 3/4
- \override Staff.StaffSymbol #'layer = #4
- \once \override Tie #'layer = #2
- b'2.~
- \once \override Staff.TimeSignature #'whiteout = ##t
- \once \override Staff.TimeSignature #'layer = #3
- \time 5/4
- b4
- [image of music]
+ * Tempo change ranges are now written as `\tempo 4 = 60 - 68' rather
+ than `\tempo 4 = 60 ~ 68'.
+ * Grob `OctavateEight' was renamed to `ClefModifier'. Related
+ context properties were renamed from `xxxOctavationyyy' to
+ `xxxTranspositionyyy'.
- * Chords can be repeated using the `q' shortcut:
+ * There is a new `\absolute' command explicitly marking music as
+ being entered in absolute pitch. While this has been the default
+ previously, an explicit `\absolute' also prevents reinterpretation
+ when the passage is placed inside of `\relative':
- <c e g>8.-^ q16 q4-^
+ \relative c { c'4 \absolute { f'' g'' } c }
[image of music]
- * With two-sided mode, margins for odd and even pages can be set
- using `inner-margin' and `outer-margin':
-
- \paper {
- two-sided = ##t
- inner-margin = 10 \mm
- outer-margin = 20 \mm
- }
+ * When `\relative' is used without an explicit reference pitch, the
+ reference pitch now is the middle of the first octave, making the
+ first entered pitch indistinguishable from absolute pitch.
+ Previously, omitting the reference pitch would have lead to a
+ default of `c''. Since that choice was somewhat arbitrary,
+ recommended usage was to always specify the reference pitch.
- * Paper margin defaults, as specified in
- `ly/paper-defaults-init.ly', apply to the default paper size (a4)
- and are automatically scaled according to the paper size chosen.
+ * A new command `\single' can be used for converting a property
+ override into a tweak to be applied on a single music expression:
- * All combinations of `left-margin', `right-margin' and `line-width'
- work now. There is no more need to set `line-width' manually
- unless you explicitly want to.
+ <a \single\voiceTwoStyle e' a>1
+ [image of music]
- * Support for using an alternative music font, such as Gonville, is
- now added.
- * In addition to the existing `\hspace' markup command, a new
- `\vspace' command has been added to provide an easy and flexible
- way to add vertical space in markups.
+ * Two ways of letting graphical objects not appear in the output are
+ overriding its `transparent' property with `#t' (retaining the
+ original spacing) or overriding its `stencil' property with `#f'
+ (not using any space at all). Those two operations now have the
+ shorthands `\hide' and `\omit', respectively. They can either be
+ given a music expression to tweak, or the name of a graphical
+ object for which an override should be created (for specifying
+ both, use `\single' on the override form):
- * The direction of manual beams can be set with `^[' and `_['.
+ \new Staff \with { \omit Clef }
+ \relative c'' <a e' \hide a>1
+ [image of music]
- * A version of the breve note head has been added with two vertical
- lines on each side.
- [image of music]
+ * A new command `\temporary' can be applied to overrides in order to
+ not have them replace previous property settings. If a `\revert'
+ is applied to the same property subsequently, the previous setting
+ reappears:
+ \override NoteHead.color = #red c4
+ \override NoteHead.color = #green d
+ \revert NoteHead.color e2
+ \override NoteHead.color = #red c4
+ \temporary\override NoteHead.color = #green d
+ \revert NoteHead.color e
+ \revert NoteHead.color c
+ [image of music]
- * Instrument names and vocal names now take into account the extent
- of system start delimiters in other staves for their positioning,
- resulting in improved default alignment for left-, center- and
- right-aligned names.
- [image of music]
+ This is mainly useful for writing music functions that need to
+ have some property changed just for the duration of the function.
+
+ * `\tag', `\removeWithTag', and `\keepWithTag' can now accept a list
+ of symbols rather than just a single symbol for marking, removing,
+ and keeping music with any of multiple tags. This is particularly
+ important for `\keepWithTag' since one cannot achieve the same
+ effect by using multiple consecutive `\keepWithTag' commands.
+
+ * The `-d old-relative' option has been removed. Not actually
+ accessible from the command line any more, its remaining use was
+ for interpretating `\relative' in LilyPond files converted
+ automatically from version 1.8 or older. It is unclear how much
+ of this was actually still operative.
+
+ * The meaning of `instrumentTransposition' has been reversed. After
+ \set instrumentTransposition = #{ b #}
+ a written `c'' now sounds like `b'. Previously, this would have
+ been the other way round. This and the following change should
+ make dealing with transposing instruments more straightforward.
+
+ * The music generated by `\set' and `\override' commands is no
+ longer affected by `\transpose'. The main consequence is that
+ `\transpose' will transpose audible/concert pitch and printed
+ pitch by the same amount even when the transposed music contains
+ `\transposition'. Previously,
+ \transpose c' f' \transposition bes'
+ was equivalent to `\transposition f''. Now it stays equivalent to
+ `\transposition bes''.
+
+ * When checking for collisions, LilyPond no longer treats objects as
+ rectangles. Instead, the actual shape of objects is approximated
+ using an integral-like approach. This generally results in more
+ even and snug positioning of objects and systems:
+ [image of music]
- * Braces in markup can now be selected by point size using the
- markup commands `\left-brace' and `\right-brace'.
+ Previously, the above snippet looked like this:
- [image of music]
+ [image of music]
+ Affected objects include `Accidentals', `Beams', `Clefs',
+ `Dynamics', `FiguredBass', `Flags', `Glissandos', `Lyrics',
+ `MetronomeMarks', `OttavaBrackets', `Pedals', `RehearsalMarks',
+ `Rests', `Scripts', `TextScripts', `Ties', `Tuplets' and
+ `VoltaBrackets'.
- * Intermediate .ps files which are created by LilyPond during
- compilation are now deleted by default. To keep them, add the
- following line to your input files:
- #(ly:set-option 'delete-intermediate-files #f)
+ * Tuplets are now created with the `\tuplet' command, which takes a
+ fraction `T/N' to specify that T notes are played in the time
+ usually allowed for N. One `\tuplet' command can create several
+ tuplet groups if their duration is typed after the fraction.
- * Dashed and dotted slurs, phrasing slurs, and ties have been made
- variable thickness, and partially dashed slurs are now available:
+ \tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+ \tuplet 3/2 4 { c8 d e f e d } c2
+ [image of music]
- [image of music]
+ The `\times' command with its inverted fraction order `N/T' is
+ still available.
+
+ * Introducing two new markup-commands; `\draw-dashed-line' and
+ `\draw-dotted-line'.
+
+ The dashed-line extends to the whole length given by DEST, if
+ `full-length' is set to `#t' (this is the default) without any
+ space at the beginning or end. `off' will then be altered to fit.
+ To insist on the given (or default) values of `on', `off' use
+ `\override #'(full-length . #f)'. Manual settings for `on', `off'
+ and `phase' are possible.
+
+ The dotted-line always extends to the whole length given by DEST,
+ without any space at the beginning or end. Manual settings for
+ `off' are possible to get larger or smaller space between the dots.
+ The given (or default) value of `off' will be altered to fit the
+ line-length.
+
+ \markup {
+ \draw-dashed-line #'(5.1 . 2.3)
+ \override #'(on . 0.3)
+ \override #'(off . 0.5)
+ \draw-dashed-line #'(5.1 . 2.3)
+ \draw-dotted-line #'(5.1 . 2.3)
+ \override #'(thickness . 2)
+ \override #'(off . 0.2)
+ \draw-dotted-line #'(5.1 . 2.3)
+ }
+ [image of music]
- * An eyeglasses markup was added, indicating strongly to look at the
- conductor for instructions:
- [image of music]
+ * Starting with version 2.17.10, error messages or the `textedit'
+ URI used for point-and-click functionality specify column numbers
+ starting with 1 rather than 0. The byte offset (also part of
+ `textedit' URIs) still starts at 0.
+ * The `\clef' command supports optional transposition:
- * A snap-pizzicato (also known as Bartok-pizzicato) articulation was
- added:
-
- [image of music]
+ \clef "treble_(8)"
+ c2 c
+ \clef "bass^[15]"
+ c2 c
+ [image of music]
- * Tuplet number formatting functions are now available to print
- other fractions and to add notes to the number or fraction:
+ * The LilyPond syntax of dot-separated words `Voice.Accidental' has
+ been made interchangeable with `#'(Voice Accidental)', a Scheme
+ list of symbols. As one result, code like
+ \override Voice.TextSpanner #'(bound-details left text) = "rit."
+ is now equivalent to
+ \override Voice.TextSpanner bound-details.left.text = "rit."
+ or even
+ \override #'(Voice TextSpanner) bound-details.left.text = "rit."
+
+ * Grob and grob property path no longer need to be specified as two
+ separate arguments to commands like `\override' and `\revert',
+ allowing for the syntax
+ \override Voice.TextSpanner.bound-details.left.text = "rit."
+ Since complementary music functions like `\overrideProperty'
+ cannot support forms with and without separating space at the same
+ time, using a single dotted path is now the preferred form.
+ Specifying grob path and grob property path separately, currently
+ still supported with `\override' and `\revert' for compatibility
+ reasons, is deprecated.
+
+ * Due to words now being accepted as symbol function arguments, the
+ interfaces of `\accidentalStyle', `\alterBroken', `\footnote' and
+ `\tweak' had to be redesigned where optional symbol arguments were
+ involved. Please check the respective music function
+ documentation for details.
+
+ * Several commands now accept symbol lists (conveniently entered as
+ dot-separated words) for various kinds of arguments. These
+ include `\accidentalStyle', `\alterBroken', `\footnote', `\hide',
+ `\omit', `\overrideProperty', `\shape', and `\tweak'.
+
+ * The bar line user interface has changed. Bar glyphs now resemble
+ the appearance of the bar line, so a left repeat sign has to be
+ coded as `.|:'. The command `\defineBarLine' provides an easy way
+ to define additional bar line styles.
+
+ * Accidentals in the key signature may be printed in octaves other
+ than their traditional positions, or in multiple octaves.
[image of music]
- * FretBoards now have a chordChanges property to keep repeated
- FretBoard objects from being typeset.
-
- * The vertical spacing engine has been drastically changed, making
- it more flexible and easier to control. The spacing between
- staves within a system can now change to better use the space on
- the page. User-defined contexts may participate in this flexible
- spacing, depending on how their `staff-affinity' is defined. Some
- page formatting variables (`page-top-space', `between-system-space
- -padding', and `before- between- after-title-space') have been
- replaced by flexible vertical dimensions.
-
\1f