-New features in 2.14 since 2.12
+New features in 2.16 since 2.14
*******************************
- * 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.
+ * Support for cross-staff stems on chords, using `crossStaff' and
+ the `Span_stem_engraver'. This calculates the length of
+ cross-staff stems automatically.
- * 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.
-
- \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
+ [image of music]
- * the instrumentName is set from track data
- * new -skip option, rests are displayed by default
+ * The syntax of words (character sequences recognized without
+ enclosing quotes) and commands (now always a backslash `\'
+ followed by a word) has been unified across all modes: it now
+ consists of alphabetic characters, possibly enclosing isolated
+ dashes `-' and underlines `_'.
- * rests overrunning a bar line are not truncated
+ As one consequence, using unquoted text scripts like (literally!)
+ { c-script c\f_script }
+ will now tend to result in invalid music. Omitting quote marks
+ for arbitrary text rather than keywords has never been good
+ practice or even documented, and it is unlikely to have seen
+ significant use.
- * new -include-header option for setting titles
+ Staying with established conventions (like not using dashes or
+ underlines for command names intended to be used inside of music)
+ remains advisable. The reason for this change is more robust
+ recognition of LilyPond's lexical units for LilyPond itself as
+ well as external tools interpreting its syntax.
- * 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.
+ * Support for Kievan square notation:
- * 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.
-
- * Dots can be added to the table of contents items using:
- \paper {
- tocItemMarkup = \tocItemWithDotsMarkup
+ \new KievanVoice {
+ \cadenzaOn
+ c d e f g a bes
+ \bar "kievan"
}
+ [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.
+ * Augmentation dots now avoid the other voice in two-voice polyphony
+ so that users can move the `Dot_column_engraver' to set dots
+ independently for each `Voice'.
- [image of music]
+ [image of music]
- * Added minimal support for black mensural notation.
- * Enhanced support for obliqua shapes within white mensural
- ligatures.
+ * A Scheme function to adjust the control points of curves such as
+ slurs and ties, developed by several users, is now included in
+ LilyPond.
- [image of music]
+ g8->( bes,-.) d4
+ \shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
+ g8->( bes,!-.) d4
+ [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':
+ * Use of `\tempo' specifications in `\midi' blocks (removed in
+ 2.9.16 in favor of explicit `tempoWholesPerMinute' settings) has
+ seen a revival: now any kind of property-setting music is turned
+ into context definitions within output specifications, allowing for
+ declarations like
+ \layout { \accidentalStyle modern }
+ \midi { \tempo 4. = 66 }
- [image of music]
+ * The LilyPond G clef has been redesigned - upper loop is now more
+ balanced, bottom crook sticks out less and the "spine" (main
+ vertical line) is more evenly curved. The old and new versions can
+ be compared by looking at the documentation: old version
+ (http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs),
+ new version
+ (http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs).
- * 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.
+ * Lilypond's stencil commands have been simplified to allow for less
+ code duplication and better height approximations of graphical
+ objects. The following stencil commands have been eliminated:
+ * `beam'
- * `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.
+ * `bezier-sandwich'
- New commands `makeStringTuning' and `contextStringTuning' allow
- the creation of string tunings in the form of a Lilypond chord
- construct.
+ * `bracket'
- * 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.
+ * `dashed-slur'
- [image of music]
+ * `dot'
- * 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.
+ * `oval'
- * 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.
+ * `repeat-slash'
- * 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.
+ * `zigzag-line'
- * The part-combiner's decision to combine/not combine notes can now
- be customized
+ * Flags are now treated as separate objects rather than as stem
+ parts.
[image of music]
- * Tablature staves show fret numbers only by default. To get the
- former style, `\tabFullNotation' is provided.
+ * Two alternative methods for bar numbering can be set, especially
+ for when using repeated music;
- * Funk-style and Walker-style shape notes have been added.
+ [image of music]
- * 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 following is a fundamental change in LilyPond's music
+ representation: Rhythmic events like `LyricEvent' and `NoteEvent'
+ are no longer wrapped in `EventChord' unless they have been
+ actually entered as part of a chord in the input. If you
+ manipulate music expressions in Scheme, the new behavior may
+ require changes in your code. Calling the music function
+ `\eventChords' or the Scheme function `event-chord-wrap!'
+ converts to the old representation; using one of those might be
+ easiest for keeping legacy code operative.
- * 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 following three items are consequences of this change.
- * 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 repetitive chord entry aid `q' has been reimplemented.
+ Repeated chords are now replaced right before interpreting a music
+ expression. In case the user wants to retain some events of the
+ original chord, he can run the repeat chord replacement function
+ `\chordRepeats' manually.
- * 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).
+ * String numbers and right hand fingerings on single notes now appear
+ without having to be written inside of chord brackets.
- * Text crescendo spanners can now be added directly using `\cresc',
- `\dim' and `\decresc'.
+ * Music functions now work the same when used inside or outside of
+ chords, including all the possibilities of argument parsing.
+ Music variables can be used inside of chords: a construct like
- [image of music]
+ tonic=fis'
+ { <\tonic \transpose c g \tonic> }
+ [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] ...
+ now works as expected. One can use `#{...#}' for constructing
+ chord constituents. `\tweak' now works on single notes without
+ needing to wrap them in a chord. Using it on command events and
+ lyrics is now possible, but not likely to give results yet.
- 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/'
+ * `\tweak' now takes an optional layout object specification. It can
+ be used for tweaking layout objects that are only indirectly
+ caused by the tweaked event, like accidentals, stems, and flags:
- might do the trick for conversion.
+ <\tweak Accidental #'color #red cis4
+ \tweak Accidental #'color #green es
+ g>
+ [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:
+ * Scheme expressions inside of embedded Lilypond (`#{...#}') are now
+ executed in lexical closure of the surrounding Scheme code. `$'
+ is no longer special in embedded Lilypond. It can be used
+ unconditionally in Lilypond code for immediate evaluation of Scheme
+ expressions, similar to how `ly:export' could previously be used.
+ `ly:export' has been removed. As a consequence, `#' is now free
+ to delay evaluation of its argument until the parser actually
+ reduces the containing expression, greatly reducing the potential
+ for premature evaluation. There are also `splicing' operators `$@'
+ and `#@' for interpreting the members of a list individually.
- [image of music]
+ * To reduce the necessity for using `$', Scheme expressions written
+ with `#' are interpreted as music inside of music lists, and as
+ markups or markup lists inside of markups.
+ * Support for jazz-like chords has been improved: Lydian and altered
+ chords are recognised; separators between chord modifiers are now
+ treated independently of separators between "slash" chords and
+ their bass notes (and by default, slashes are now only used for
+ the latter type of separator); additional pitches are no longer
+ prefixed with "add" by default; and the "m" in minor chords can be
+ customized. *note Customizing chord names:
+ (lilypond-notation)Customizing chord names. for more information.
- * 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 }
- }
- \layout {
- \context {
- \Staff
- \noclef
- }
- }
- }
- [image of music]
+ * The `\markuplines' command has been renamed to `\markuplist' for a
+ better match with its semantics and general Lilypond nomenclature.
+ * The interface for specifying string tunings in tablature has been
+ simplified considerably and employs the scheme function
+ `\stringTuning' for most purposes.
- * A half-open articulation was added:
+ * Beams can now have their slopes preserved over line breaks.
[image of music]
- This is sometimes used to indicate half-open hi-hats.
+ To do this, several callback functions are now deprecated.
+ * `ly:beam::calc-least-squares-positions'
- * The Unicode Bidirectional Algorithm is now fully supported for
- single-line markup due to enhanced integration with Pango.
+ * `ly:beam::slope-damping'
- * LilyPond is now licensed under the GNU GPL v3+.
+ * `ly:beam::shift-region-to-valid'
+ Furthermore, `ly:beam::quanting' now takes an additional argument
+ to help calculations over line breaks. All of these functions are
+ now automatically called when setting the `positions' parameter.
- * In tablature, frets can be indicated with labels other than
- numbers:
+ * In function arguments music, markups and Scheme expressions (as
+ well as several other syntactic entities) have become mostly
+ interchangeable and are told apart only by evaluating the
+ respective predicate. In several cases, the predicate is
+ consulted by the parser, like when deciding whether to interpret
+ `-3' as a number or a fingering event.
- \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
- }
- [image of music]
+ * Music functions (and their close relatives) can now be defined with
+ optional arguments.
+ * For defining commands executed only for their side-effects,
+ `define-void-function' is now available.
- * Layout objects can be printed over a white background, which
- whites-out objects in lower layers which lie beneath:
+ * There is a new `define-event-function' command in analogy to
+ `define-music-function' that can be used for defining music
+ functions acting as post events without requiring a direction
+ specifier (`-', `^', or `_') placed before them.
- \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
+ dyn=#(define-event-function (parser location arg) (markup?)
+ (make-dynamic-script arg))
+ \relative c' { c\dyn pfsss }
[image of music]
- * Chords can be repeated using the `q' shortcut:
+ * A list of ASCII aliases for special characters can be included.
- <c e g>8.-^ q16 q4-^
+ \paper {
+ #(include-special-characters)
+ }
+ \markup "• † ©right; &OE; &ss; ¶"
[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
- }
-
- * 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.
-
- * 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.
+ * There is a new `define-scheme-function' command in analogy to
+ `define-music-function' that can be used to define functions
+ evaluating to Scheme expressions while accepting arguments in
+ Lilypond syntax.
- * 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.
-
- * The direction of manual beams can be set with `^[' and `_['.
-
- * A version of the breve note head has been added with two vertical
- lines on each side.
-
- [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]
-
-
- * Braces in markup can now be selected by point size using the
- markup commands `\left-brace' and `\right-brace'.
-
- [image of music]
+ * The construct `#{ ... #}' can now be used not just for
+ constructing sequential music lists, but also for pitches
+ (distinguished from single note events by the absence of a
+ duration or other information that can't be part of a pitch),
+ single music events, void music expressions, post events, markups
+ (mostly freeing users from having to use the `markup' macro),
+ markup lists, number expressions, context definitions and
+ modifications, and a few other things. If it encloses nothing or
+ only a single music event, it no longer returns a sequential music
+ list but rather a void music expression or just the music event
+ itself, respectively.
+ * Pitches can be used on the right side of assignments. They are
+ distinguished from single note events by the absence of a duration
+ or other information that can't be part of a pitch.
- * 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)
+ * New command-line option `--loglevel=LEVEL' to control how much
+ output LilyPond creates. Possible values are ERROR, WARN,
+ BASIC_PROGRESS, PROGRESS, DEBUG.
- * Dashed and dotted slurs, phrasing slurs, and ties have been made
- variable thickness, and partially dashed slurs are now available:
+ * `\once \set' now correctly resets the property value to the
+ previous value.
[image of music]
- * An eyeglasses markup was added, indicating strongly to look at the
- conductor for instructions:
+ * The alignment of dynamic spanners (hairpins, text crescendo, etc.)
+ is now automatically broken if a different direction is explicitly
+ given.
[image of music]
- * A snap-pizzicato (also known as Bartok-pizzicato) articulation was
- added:
+ * Appoggiaturas and acciaccaturas now also work inside a slur, not
+ only inside a phrasing slur. Also, a function `\slashedGrace' was
+ added that does not use a slur from the acciaccatura note.
[image of music]
- * Tuplet number formatting functions are now available to print
- other fractions and to add notes to the number or fraction:
+ * To suppress the line on a crescendo text spanner (and other
+ similar spanners), LilyPond now fully supports the `#'style =
+ #'none' property.
[image of music]
- * FretBoards now have a chordChanges property to keep repeated
- FretBoard objects from being typeset.
+ * LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
- * 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.
+ * Glissandi can now span multiple lines.