-New features in 2.12 since 2.10
+New features in 2.16 since 2.14
*******************************
- * Fret diagrams can now have variable string thickness:
+ * Support for cross-staff stems on chords, using `crossStaff' and
+ the `Span_stem_engraver'. This calculates the length of
+ cross-staff stems automatically.
[image of music]
- * A new fret diagram orientation, opposing-landscape, is available:
+ * 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 `_'.
- [image of music]
-
-
- * Unbeamed 128th notes are now supported:
-
- [image of music]
-
-
- * Extending LilyPond's existing support for microtones, there are
- now arrowed accidentals for the notation of microtonal alterations.
- To use them, redefine the `glyph-name-alist' property of
- `Accidental' as in the following example which uses quartertones
- to typeset arrowed accidentals. Alternatively, it is possible to
- define separate names for all notes with arrowed accidentals (see
- `ly/makam.ly' for boilerplate code).
-
- [image of music]
-
-
- * Straight flags (used in old scores of e.g. Bach, but also in
- different form in modern scores of e.g. Stockhausen) are now
- implemented:
-
- [image of music]
+ 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.
+ 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.
- * `\bookpart' blocks may be used to split a book into several parts,
- separated by a page break, in order to ease the page breaking, or
- to use different `\paper' settings in different parts.
+ * Support for Kievan square notation:
- \bookpart {
- \header {
- title = "Book title"
- subtitle = "First part"
- }
- \score { ... }
- ...
+ \new KievanVoice {
+ \cadenzaOn
+ c d e f g a bes
+ \bar "kievan"
}
- \bookpart {
- \header {
- subtitle = "Second part"
- }
- \score { ... }
- ...
- }
-
- * Nested contexts of the same type are now allowed. This deprecates
- `InnerStaffGroup' and `InnerChoirStaff'.
-
- [image of music]
-
-
- * Percent repeat counters can be shown at regular intervals using the
- context property `repeatCountVisibility'.
-
- [image of music]
+ [image of music]
- * In addition to the already existing `showLastLength' property,
- `showFirstLength' can now be set as well, rendering only the first
- measures of a piece. Both properties may be set at the same time:
+ * 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]
- * The file extension for MIDI can be set using the command-line
- program default `midi-extension'. For Windows, the default
- extension has been changed to `.mid'.
-
- * Two variations on the default double repeat bar line are now
- available.
-
- [image of music]
-
+ * A Scheme function to adjust the control points of curves such as
+ slurs and ties, developed by several users, is now included in
+ LilyPond.
- * Four automatic accidentals rules have been added: `neo-modern',
- `neo-modern-cautionary', `dodecaphonic' and `teaching'. The
- following example illustrates `neo-modern' rule.
+ g8->( bes,-.) d4
+ \shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
+ g8->( bes,!-.) d4
+ [image of music]
- [image of music]
+ * 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 }
- * Flags can now be generated with Scheme-code using the `'flag'
- `Stem' grob property. Existing scores will work without change.
+ * 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).
- [image of music]
+ * 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'
+ * `bezier-sandwich'
- * Harp pedalling diagrams were added:
+ * `bracket'
- [image of music]
+ * `dashed-slur'
+ * `dot'
- * Predefined, user-configurable, transposable fret diagrams are now
- available in the `FretBoards' context:
+ * `oval'
- [image of music]
+ * `repeat-slash'
+ * `zigzag-line'
- * The following syntax changes were made, in chronological order. In
- addition, fret diagram properties have been moved to
- `fret-diagram-details', and the `#'style' property is used to
- select solid/dashed lines instead of `#'dash-fraction'.
-
- 'break-align-symbol -> 'break-align-symbols
- scripts.caesura -> scripts.caesura.curved
- \setEasyHeads -> \easyHeadsOn
- \easyHeadsOff (new command)
- \fatText -> \textLengthOn
- \emptyText -> \textLengthOff
- \set hairpinToBarline -> \override Hairpin #'to-barline
- \compressMusic -> \scaleDurations
- \octave -> \octaveCheck
- \arpeggioUp -> \arpeggioArrowUp
- \arpeggioDown -> \arpeggioArrowDown
- \arpeggioNeutral -> \arpeggioNormal
- \setTextCresc -> \crescTextCresc
- \setTextDecresc -> \dimTextDecresc
- \setTextDecr -> \dimTextDecr
- \setTextDim -> \dimTextDim
- \setHairpinCresc -> \crescHairpin
- \setHairpinDecresc -> \dimHairpin
- \sustainUp -> \sustainOff
- \sustainDown -> \sustainOn
- \sostenutoDown -> \sostenutoOn
- \sostenutoUp -> \sostenutoOff
- 'infinite-spacing-height -> 'extra-spacing-height
- #(set-octavation oct) -> \ottava #oct
- \put-adjacent markup axis dir markup -> \put-adjacent axis dir markup markup
- \pointAndClickOn (new command)
- \pointAndClickOff (new command)
- \center-align -> \center-column
- \hcenter -> \center-align
- printallheaders -> print-all-headers
- \bigger -> \larger (already existing command)
- systemSeparatorMarkup -> system-separator-markup
-
- Moreover, some files in the `ly/' directory have been renamed; the
- *-init.ly filenames are now only used for files that are
- automatically included, while such files as `makam-init.ly' or
- `gregorian-init.ly' have been renamed to `makam.ly' or
- `gregorian.ly'.
-
- * The "tex" and "texstr" backends have been removed. Font are now
- accessed via the fontconfig library; the Pango library is used to
- display text strings.
-
- * Metronome marks can now also contain a textual description. The
- duration and count (if given) are shown in parentheses after the
- text.
+ * Flags are now treated as separate objects rather than as stem
+ parts.
[image of music]
- * In figured bass you can now also use a backslash through a number
- to indicate a raised 6th step.
+ * Two alternative methods for bar numbering can be set, especially
+ for when using repeated music;
[image of music]
- * Arpeggios may now use "parenthesis" style brackets:
+ * 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 following three items are consequences of this change.
+
+ * 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.
+
+ * String numbers and right hand fingerings on single notes now appear
+ without having to be written inside of chord brackets.
+
+ * 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
+
+ tonic=fis'
+ { <\tonic \transpose c g \tonic> }
+ [image of music]
+
+
+ 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.
+
+ * `\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:
+
+ <\tweak Accidental #'color #red cis4
+ \tweak Accidental #'color #green es
+ g>
+ [image of music]
+
+
+ * 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.
+
+ * 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.
+
+ * 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.
+
+ * Beams can now have their slopes preserved over line breaks.
[image of music]
- * Single-system scores are now naturally spaced instead of being
- stretched to fill the line width. This can be changed by setting
- `ragged-right = ##f'.
-
- * Enclosing text within boxes with rounded corners is now possible,
- using the `\rounded-box' markup command.
-
- * `lilypond-book' can run any program instead of `latex' to guess
- the line width, thanks to `--latex-program' command line option.
-
- * Underlining is now possible with the `\underline' markup command.
+ To do this, several callback functions are now deprecated.
+ * `ly:beam::calc-least-squares-positions'
- * It is now possible to specify, using the `page-count' variable in
- the paper block, the number of pages that will be used.
+ * `ly:beam::slope-damping'
- * A new page breaking function, `ly:minimal-breaking', is dedicated
- to books with many pages or a lot of text.
+ * `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.
- * A table of contents is included using `\markuplines
- \table-of-contents'. Elements are added to it using the
- `\tocItem' command.
+ * 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.
- * Text spreading over several pages is entered using the
- `\markuplines' keyword. Builtin markup list commands, such as
- `\justified-lines' or `\wordwrap-lines' may be used, and new ones
- created using the `define-markup-list-command' Scheme macro.
+ * Music functions (and their close relatives) can now be defined with
+ optional arguments.
- * Particular points of a book may be marked with the `\label'
- command. Then, the page where these points are placed can be
- referred to using the `\page-ref' markup command.
+ * For defining commands executed only for their side-effects,
+ `define-void-function' is now available.
- * Page breaking and page turning commands (`\pageBreak',
- `\noPageBreak', etc.) can be used at top-level, between scores and
- top-level markups.
+ * 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.
- * The following options are now changed as a `-d' sub-option:
- `--backend', `--safe', `--preview' and `--no-pages' (which became
- `-dno-print-pages'). The `-b' option does not exist any more.
+ dyn=#(define-event-function (parser location arg) (markup?)
+ (make-dynamic-script arg))
+ \relative c' { c\dyn pfsss }
+ [image of music]
- * Improved testing procedures now catch changes in CPU and memory
- performance, page layout, MIDI results and warnings. This helps to
- reduce the number of regression errors during development,
- resulting in more stable releases.
-
- See `INSTALL.html#Testing-LilyPond' for more information.
-
- * Nested properties, such as `'details' in `Slur', can be reverted
- as well. The syntax for this is
-
- \revert Slur #'(details closeness-factor)
-
- * All line spanners are more flexible now in the configuration of
- their end points. This includes glissando, voice followers, text
- crescendos and other text spanners. The old syntax for setting
- text on line spanners is no longer valid.
-
- [image of music]
+ * A list of ASCII aliases for special characters can be included.
- This feature was sponsored by Trevor Bača.
-
- * The environment variable `LILYPONDPREFIX' has been renamed
- `LILYPOND_DATADIR'.
-
- * Notes or rests, such as a typical end note, that fill an entire
- measure are preceded by some more space.
-
- [image of music]
-
-
- * All `\score's in a lilypond-book fragment are now inserted into
- the document. Also, toplevel markups don't result in an entire
- page.
-
- * Alterations (such as a sharp or flat) may now be arbitrary
- fractions. This allows some forms of microtonal music. For
- example, Turkish makam music uses 1/9th tone alterations.
+ \paper {
+ #(include-special-characters)
+ }
+ \markup "• † ©right; &OE; &ss; ¶"
+ [image of music]
+
+
+ * 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.
+
+ * 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.
+
+ * New command-line option `--loglevel=LEVEL' to control how much
+ output LilyPond creates. Possible values are ERROR, WARN,
+ BASIC_PROGRESS, PROGRESS, DEBUG.
+
+ * `\once \set' now correctly resets the property value to the
+ previous value.
[image of music]
- * Tie directions may be set with `^~' and `_~'.
-
- * Tablature now supports harmonics and slides:
+ * The alignment of dynamic spanners (hairpins, text crescendo, etc.)
+ is now automatically broken if a different direction is explicitly
+ given.
[image of music]
- This feature was sponsored by Mike Amundsen
-
- * Horizontal spacing now follows object outlines more accurately.
- This allows tighter horizontal spacing.
+ * 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]
- * Objects that belong outside of the staff are now positioned
- automatically to avoid collisions.
+ * To suppress the line on a crescendo text spanner (and other
+ similar spanners), LilyPond now fully supports the `#'style =
+ #'none' property.
[image of music]
- * Staves are spaced vertically using a skyline algorithm. This helps
- prevent uneven vertical spacing.
-
- [image of music]
+ * LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
+ * Glissandi can now span multiple lines.