]> git.donarmstrong.com Git - lilypond.git/blobdiff - NEWS.txt
Imported Upstream version 2.19.45
[lilypond.git] / NEWS.txt
index a0cefcd144f8ca4e2c64e3f92b3e43aa99bed69d..33fc4d64f84ac48b87889e36a38cf6752a46af39 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
-New features in 2.18 since 2.16
+New features in 2.20 since 2.18
 *******************************
 
-   * 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.
+   * Blocks introduced with `\header' can be stored in variables and
+     used as arguments to music and scheme functions and as the body of
+     `#{...#}' constructs.  They are represented as a Guile module.
+
+     While `\book', `\bookpart', `\score', `\with', `\layout', `\midi',
+     `\paper' blocks can be passed around in similar manner, they are
+     represented by different data types.
+
+   * Dot-separated symbol lists like `FretBoard.stencil' were already
+     supported as of version 2.18.  They may now also contain unsigned
+     integers, and may alternatively be separated by commata.  This
+     allows usage such as
+
+          { \time 2,2,1 5/8  g'8 8 8 8 8 }
+           [image of music]
+
+
+     and
+     \tagGroup violin,oboe,bassoon
+
+   * Such lists may also be used in expressions for assignments, sets,
+     and overrides.  This allows usage such as
+
+          { \unset Timing.beamExceptions
+            \set Timing.beatStructure = 1,2,1
+            g'8 8 8 8 8 8 8 8 }
+           [image of music]
 
-     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.
 
-   * 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.
+   * Association list elements could previously be assigned values
+     individually (for example, paper variables like
+     `system-system-spacing.basic-distance').  They may now be also
+     referenced in this manner, as with
+     \paper {
+       \void \displayScheme \system-system-spacing.basic-distance
+     }
 
-          soprano = \relative c' { c e g c }
-          alto = \relative c' { a c e g }
-          verse = \lyricmode { This is my song }
+     In combination with the previously mentioned changes, this allows
+     setting and referencing pseudovariables like `violin.1'.
+
+   * LilyPond source files may now be embedded inside the generated PDF
+     files.  This experimental feature is disabled by default and may
+     be regarded as unsafe, as PDF documents with hidden content tend
+     to present a security risk.  Please note that not all PDF viewers
+     have the ability to handle embedded documents (if not, the PDF
+     output will appear normally and source files will remain
+     invisible).  This feature only works with the PDF backend.
+
+   * French note names are now defined specifically instead of being
+     aliased to Italian note names: in addition to the generic
+     Italian-derived syntax, the D pitch may be entered as `rĂ©'.
+     Double sharps may also be entered using the `-x' suffix.
+
+   * Additional bass strings (for lute tablature) are supported.
+
+          m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
 
           \score {
-            \new Staff <<
-              \partcombine \soprano \alto
-              \new NullVoice = "aligner" \soprano
-              \new Lyrics \lyricsto "aligner" \verse
-            >>
-            \layout {}
+            \new TabStaff \m
+            \layout {
+              \context {
+                \Score
+                tablatureFormat = #fret-letter-tablature-format
+              }
+              \context {
+                \TabStaff
+                stringTunings = \stringTuning <a, d f a d' f'>
+                additionalBassStrings = \stringTuning <c, d, e, fis, g,>
+                fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+              }
+            }
           }
            [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 }
+   * The markup-list-command `\table' is now available.  Each column
+     may be aligned differently.
+
+          \markuplist {
+              \override #'(padding . 2)
+              \table
+                #'(0 1 0 -1)
+                {
+                  \underline { center-aligned right-aligned center-aligned left-aligned }
+                  one "1" thousandth "0.001"
+                  eleven "11" hundredth "0.01"
+                  twenty "20" tenth "0.1"
+                  thousand "1000" one "1.0"
+                }
+          }
            [image of music]
 
 
-   * 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
+   * A new markup-command, `\with-dimensions-from', makes
+     `\with-dimensions' easier to use by taking the new dimensions from
+     a markup object, given as first argument.
 
           \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 } }
+            \pattern #5 #Y #0 "x"
+            \pattern #5 #Y #0 \with-dimensions-from "x" "f"
+            \pattern #5 #Y #0 \with-dimensions-from "x" "g"
+            \override #'(baseline-skip . 2)
+            \column {
+              \pattern #5 #X #0 "n"
+              \pattern #5 #X #0 \with-dimensions-from "n" "m"
+              \pattern #5 #X #0 \with-dimensions-from "n" "!"
+            }
           }
            [image of music]
 
 
-     previously looked like
-
-          [image of music]
+   * A new page breaking function `ly:one-line-auto-height-breaking'
+     places a whole score on a single line and changes the page width
+     to match, just like `ly:one-line-breaking'.  The difference is that
+     it also automatically modifies the height of the page to fit the
+     height of the music.
 
+   * Markup-command `\draw-squiggle-line' is now available.
+     Customizing is possible with overrides of `thickness',
+     `angularity', `height' and `orientation'
 
-     without a reliable way to get both scores to line up.
+          \markup
+            \overlay {
+              \draw-squiggle-line #0.5 #'(3 . 3) ##t
 
-   * 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.
+              \translate #'(3 . 3)
+              \override #'(thickness . 4)
+              \draw-squiggle-line #0.5 #'(3 . -3) ##t
 
-   * 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.
+              \translate #'(6 . 0)
+              \override #'(angularity . -5)
+              \draw-squiggle-line #0.5 #'(-3 . -3) ##t
 
-          #(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
+              \translate #'(3 . -3)
+              \override #'(angularity . 2)
+              \override #'(height . 0.3)
+              \override #'(orientation . -1)
+              \draw-squiggle-line #0.2 #'(-3 . 3) ##t
             }
-            \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 new command, `\RemoveAllEmptyStaves', has been made available,
+     which acts exactly like `\RemoveEmptyStaves', except for also
+     removing empty staves on the first system in a score.
+
+   * Markup-commands `\undertie' and `\overtie' are now available, as
+     well as the generic markup-command `\tie'.
+
+          \markup {
+            \undertie "undertied"
+            \overtie "overtied"
+          }
+
+          m = {
+            c''1 \prall -\tweak text \markup \tie "131" -1
+          }
+
+          { \voiceOne \m \voiceTwo \m }
+           [image of music]
+
+
+   * `TabStaff' is now able to print micro-tones for bendings etc.
+
+          \layout {
+            \context {
+              \Score
+              supportNonIntegerFret = ##t
             }
+          }
+
+          mus = \relative { c'4 cih d dih }
+
+          <<
+            \new Staff << \clef "G_8" \mus >>
+            \new TabStaff \mus
           >>
            [image of music]
 
 
-   * New commands `markLengthOn' and `markLengthOff' control the
-     allowance of horizontal space for tempo and rehearsal marks.
+   * Two new styles of whiteout are now available.  The `outline' style
+     approximates the contours of a glyph's outline, and its shape is
+     produced from multiple displaced copies of the glyph.  The
+     `rounded-box' style produces a rounded rectangle shape.  For all
+     three styles, including the default `box' style, the whiteout
+     shape's `thickness', as a multiple of staff-line thickness, can be
+     customized.
+
+          \markup {
+            \combine
+              \filled-box #'(-1 . 15) #'(-3 . 4) #1
+              \override #'(thickness . 3)
+              \whiteout whiteout-box
+          }
+          \markup {
+            \combine
+              \filled-box #'(-1 . 24) #'(-3 . 4) #1
+              \override #'(style . rounded-box)
+              \override #'(thickness . 3)
+              \whiteout whiteout-rounded-box
+          }
+          \markup {
+            \combine
+              \filled-box #'(-1 . 18) #'(-3 . 4) #1
+              \override #'(style . outline)
+              \override #'(thickness . 3)
+              \whiteout whiteout-outline
+          }
+          \relative {
+            \override Staff.Clef.whiteout-style = #'outline
+            \override Staff.Clef.whiteout = 3
+            g'1
+          }
+           [image of music]
+
+
+   * All of `\override', `\revert', `\set', and `\unset' now work with
+     the `\once' prefix for making one-time settings.
+
+          \relative {
+            c'4 d
+            \override NoteHead.color = #red
+            e4 f |
+            \once \override NoteHead.color = #green
+            g4 a
+            \once \revert NoteHead.color
+            b c |
+            \revert NoteHead.color
+            f2 c |
+          }
+           [image of music]
+
+
+   * When outputting MIDI, LilyPond will now store the `title' defined
+     in a score's `\header' block (or, if there is no such definition
+     on the `\score' level, the first such definition found in a
+     `\header' block of the score's enclosing `\bookpart', `\book', or
+     top-level scope) as the name of the MIDI sequence in the MIDI
+     file.  Optionally, the name of the MIDI sequence can be overridden
+     using the new `midititle' `\header' field independently of `title'
+     (for example, in case `title' contains markup code which does not
+     render as plain text in a satisfactory way automatically).
+
+   * Music (and scheme and void) functions and markup commands that
+     just supply the final parameters to a chain of overrides, music
+     function and markup command calls can now be defined in the form
+     of just writing the expression cut short with `\etc'.
+
+          bold-red-markup = \markup \bold \with-color #red \etc
+          highlight = \tweak font-size 3 \tweak color #red \etc
+
+          \markup \bold-red "text"
+          \markuplist \column-lines \bold-red { One Two }
+
+          { c' \highlight d' e'2-\highlight -! }
+           [image of music]
+
+
+   * LilyPond functions defined with `define-music-function',
+     `define-event-function', `define-scheme-function' and
+     `define-void-function' can now be directly called from Scheme as
+     if they were genuine Scheme procedures.  Argument checking and
+     matching will still be performed in the same manner as when
+     calling the function through LilyPond input.  This includes the
+     insertion of defaults for optional arguments not matching their
+     predicates.  Instead of using `\default' in the actual argument
+     list for explicitly skipping a sequence of optional arguments,
+     `*unspecified*' can be employed.
+
+   * Current input location and parser are now stored in GUILE fluids
+     and can be referenced via the function calls `(*location*)' and
+     `(*parser*)'.  Consequently, a lot of functions previously taking
+     an explicit `parser' argument no longer do so.
+
+     Functions defined with `define-music-function',
+     `define-event-function', `define-scheme-function' and
+     `define-void-function' no longer use `parser' and `location'
+     arguments.
+
+     With those particular definitions, LilyPond will try to recognize
+     legacy use of `parser' and `location' arguments, providing
+     backwards-compatible semantics for some time.
+
+   * In the "english" notename language, the long notenames for pitches
+     with accidentals now contain a hyphen for better readability.  You
+     now have to write
+     \key a-flat \major
+     instead of the previous
+     \key aflat \major
+
+     Double accidentals do not get another hyphen, so the Dutch `cisis'
+     has the long English notename `c-sharpsharp'.
+
+   * The visual style of tremolo slashes (shape, style and slope) is
+     now more finely controlled.
 
           [image of music]
 
 
-   * 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.
+   * Multi-measure rests have length according to their total duration,
+     under the control of `MultiMeasureRest.space-increment'.
 
           [image of music]
 
 
-   * 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'
+   * Page numbers may now be printed in roman numerals, by setting the
+     `page-number-type' paper variable.
 
-     One has to write a digit on both sides of the dot - values like
-     `4.' or `-.3' are not allowed.
+   * It is now possible to use `\time' and `\partial' together to
+     change the time signature in mid measure.
 
-     Decimal fractions are also not accepted in `\chordmode'.
+          \override Score.BarNumber.break-visibility = #end-of-line-invisible
+          \partial 4 \time 3/4 f4 | 2 4 | 2 \bar "||"
+          \time 9/8 \partial 4. f8 8 8 | 2. 8 8 8 |
+           [image of music]
 
-   * A number of shorthands like `(', `)', `|', `[', `]', `~', `\(',
-     `\)' and others can now freely be redefined like normal commands.
-     An example would be
 
-          "\\{" = (
-          "\\}" = )
-          "(" = \melisma
-          ")" = \melismaEnd
+   * It is now possible to override the `text' property of chord names.
 
-          \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. }
+          <<
+          \new ChordNames \chordmode {
+            a' b c:7
+            \once \override ChordName.text = #"foo"
+            d
+          }
           >>
            [image of music]
 
 
-   * The articulation shorthand for `\staccatissimo' has been renamed
-     from `-|' to `-!'.
+   * Improved horizontal alignment when using `TextScript', with
+     `DynamicText' or `LyricText'.
+
+   * A new command `\magnifyStaff' has been added which scales staff
+     sizes, staff lines, bar lines, beamlets and horizontal spacing
+     generally at the `Staff' context level.  Staff lines are prevented
+     from being scaled smaller than the default since the thickness of
+     stems, slurs, and the like are all based on the staff line
+     thickness.
+
+   * `InstrumentName' now supports `text-interface'.
+
+   * There is now support for controlling the `expression level' of
+     MIDI channels using the `Staff.midiExpression' context property.
+     This can be used to alter the perceived volume of even sustained
+     notes (albeit in a very `low-level' way) and accepts a number
+     value between `0.0' and `1.0'.
+
+     \score {
+       \new Staff \with {
+         midiExpression = #0.6
+         midiInstrument = #"clarinet"
+       }
+       <<
+         { a'1~ a'1 }
+         {
+           \set Staff.midiExpression = #0.7 s4\f\<
+           \set Staff.midiExpression = #0.8 s4
+           \set Staff.midiExpression = #0.9 s4
+           \set Staff.midiExpression = #1.0 s4
+
+           \set Staff.midiExpression = #0.9 s4\>
+           \set Staff.midiExpression = #0.8 s4
+           \set Staff.midiExpression = #0.7 s4
+           \set Staff.midiExpression = #0.6 s4\!
+         }
+       >>
+       \midi { }
+     }
+
+   * Support for making it easier to use alternative `music' fonts other
+     than the default Emmentaler in LilyPond has been added.  See
+     `http://fonts.openlilylib.org/' for more information.
+
+   * Grobs and their parents can now be aligned separately allowing
+     more flexibility for grob positions.  For example the `left' edge
+     of a grob can now be aligned on the `center' of its parent.
+
+   * Improvements to the `\partial' command have been made to avoid
+     problems when using multiple, parallel contexts.
+
+   * `\chordmode' can now use `< >' and `<< >>' constructs.
+
+   * A new command `\tagGroup' has now been added.  This complements
+     the existing `\keepWithTag' and `\removeWithTag' commands.  For
+     Example:
+
+     \tagGroup #'(violinI violinII viola cello)
+
+     declares a list of `tags' that belong to a single `tag group'.
+
+     \keepWithTag #'violinI
+
+     Is now only concerned with `tags' from `violinI'’s tag group.
+
+     Any element of the included music tagged with one or more tags
+     from the group, but _not_ with VIOLINI, will be removed.
+
+   * The `\addlyrics' function now works with arbitrary contexts
+     incuding `Staff'.
+
+   * String numbers can now also be used to print roman numerals (e.g.
+     for unfretted string instruments).
+
+          c2\2
+          \romanStringNumbers
+          c\2
+          \arabicStringNumbers
+          c1\3
+           [image of music]
+
+
+   * The `thin-kern' property of the `BarLine' grob has been renamed to
+     `segno-kern'.
+
+   * `KeyCancellation' grobs now ignore cue clefs (like `KeySignature'
+     grobs do).
+
+   * Add support for `\once \unset'
+
+   * It is now possible to individually color both the dots and
+     parentheses in fret diagrams when using the
+     `\fret-diagram-verbose' markup command.
+
+          \new Voice {
+            c1^\markup {
+              \override #'(fret-diagram-details . (
+                           (finger-code . in-dot))) {
+                \fret-diagram-verbose #'((mute 6)
+                                         (place-fret 5 3 1 red)
+                                         (place-fret 4 5 2 inverted)
+                                         (place-fret 3 5 3 green)
+                                         (place-fret 2 5 4 blue inverted)
+                                         (place-fret 1 3 1 violet)
+                                         (barre 5 1 3 ))
+              }
+            }
+            c1^\markup {
+              \override #'(fret-diagram-details . (
+                           (finger-code . below-string))) {
+                \fret-diagram-verbose #'((mute 6)
+                                       (place-fret 5 3 1 red parenthesized)
+                                       (place-fret 4 5 2 yellow
+                                                         default-paren-color
+                                                         parenthesized)
+                                       (place-fret 3 5 3 green)
+                                       (place-fret 2 5 4 blue )
+                                       (place-fret 1 3 1)
+                                       (barre 5 1 3))
+              }
+            }
+          }
+           [image of music]
+
+
+   * Two new properties have been added for use in
+     `fret-diagram-details' when using the `\fret-diagram-verbose'
+     markup command; `fret-label-horizontal-offset' which affects the
+     `fret-label-indication' and `paren-padding' which controls the
+     space between the dot and the parentheses surrounding it.
+
+          \new Voice {
+            c1^\markup {
+              \fret-diagram-verbose #'((mute 6)
+                                       (place-fret 5 3 1)
+                                       (place-fret 4 5 2)
+                                       (place-fret 3 5 3)
+                                       (place-fret 1 6 4 parenthesized)
+                                       (place-fret 2 3 1)
+                                       (barre 5 2 3))
+            }
+            c1^\markup {
+              \override #'(fret-diagram-details . (
+                           (fret-label-horizontal-offset . 2)
+                           (paren-padding . 0.25))) {
+                \fret-diagram-verbose #'((mute 6)
+                                         (place-fret 5 3 1)
+                                         (place-fret 4 5 2)
+                                         (place-fret 3 5 3)
+                                         (place-fret 1 6 4 parenthesized)
+                                         (place-fret 2 3 1)
+                                         (barre 5 2 3))
+              }
+            }
+          }
+           [image of music]
+
 
-   * Tempo change ranges are now written as `\tempo 4 = 60 - 68' rather
-     than `\tempo 4 = 60 ~ 68'.
+   * A new markup command `\justify-line' has been added.  Similar to
+     the `\fill-line' markup command except that instead of setting
+     _words_ in columns, the `\justify-line' command balances the
+     whitespace between them ensuring that when there are three or more
+     words in a markup, the whitespace is always consistent.
 
-   * Grob `OctavateEight' was renamed to `ClefModifier'.  Related
-     context properties were renamed from `xxxOctavationyyy' to
-     `xxxTranspositionyyy'.
+          \markup \fill-line {oooooo oooooo oooooo oooooo}
+          \markup \fill-line {ooooooooo oooooooo oo ooo}
+           [image of music]
 
-   * 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':
 
-          \relative c { c'4 \absolute { f'' g'' } c }
+          \markup \justify-line {oooooo oooooo oooooo oooooo}
+          \markup \justify-line {ooooooooo oooooooo oo ooo}
            [image of music]
 
 
-   * 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.
+   * A new command `\magnifyMusic' has been added, which allows the
+     notation size to be changed without changing the staff size, while
+     automatically scaling stems, beams, and horizontal spacing.
+
+          \new Staff <<
+            \new Voice \relative {
+              \voiceOne
+              <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>4 r8
+            }
+            \new Voice \relative {
+              \voiceTwo
+              \magnifyMusic 0.63 {
+                \override Score.SpacingSpanner.spacing-increment = #(* 1.2 0.63)
+                r32 c'' a c a c a c r c a c a c a c
+                r c a c a c a c a c a c a c a c
+              }
+            }
+          >>
+           [image of music]
 
-   * A new command `\single' can be used for converting a property
-     override into a tweak to be applied on a single music expression:
 
-          <a \single\voiceTwoStyle e' a>1
+   * A new flexible template suitable for a range of choral music, is
+     now provided.  This may be used to create simple choral music,
+     with or without piano accompaniment, in two or four staves. Unlike
+     other templates, this template is `built-in', which means it does
+     not need to be copied and edited: instead it is simply `\include''d
+     in the input file.  For details, see *note Built-in templates:
+     (lilypond-learning)Built-in templates.
+
+   * The positioning of tuplet numbers for kneed beams has been
+     significantly improved.  Previously, tuplet numbers were placed
+     according to the position of the tuplet bracket, even if it was
+     not printed.  This could lead to stranded tuplet numbers.  Now
+     they are now positioned closer to the kneed-beam when an
+     appropriate beam segment exists for its placement and when the
+     bracket is not drawn.
+
+     Collision detection is also added, offsetting horizontally if too
+     close to an adjoining note column but preserving the number's
+     vertical distance from the kneed beam.  If the number itself is
+     too large to fit in the available space the original,
+     bracket-based, positioning system is used instead; and in the
+     event of a collision (e.g. with an accidental) the tuplet number
+     is moved vertically away instead.
+
+          \time 3/4
+          \override Beam.auto-knee-gap = 3
+          \tuplet 3/2 4 {
+            g8 c'' e,
+            c'8 g,, e''
+            g,,8 e''' c,,
+          }
            [image of music]
 
 
-   * 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 original kneed-beam tuplet behavior is still available through
+     an `\override' via a new, `knee-to-beam' property.
 
-          \new Staff \with { \omit Clef }
-          \relative c'' <a e' \hide a>1
+          \time 3/4
+          \override Beam.auto-knee-gap = 3
+          \override TupletNumber.knee-to-beam = ##f
+          \tuplet 3/2 4 {
+            g8 c'' e,
+            c'8 g,, e''
+            g,,8 e''' c,,
+          }
            [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:
+   * `\lyricsto' and `\addLyrics' have been `harmonized'.  Both now
+     accept the same kind of delimited argument list that `\lyrics' and
+     `\chords' accept.  Backward compatibility has been added so music
+     identifiers (i.e. `\mus') are permitted as arguments.  A
+     `convert-ly' rule has been added that removes redundant uses of
+     `\lyricmode' and rearranges combinations with context starters such
+     that `\lyricsto' in general is applied last (i.e. like
+     `\lyricmode' would be).
+
+   * Scheme functions and identifiers can now be used as output
+     definitions.
+
+   * Scheme expressions can now be used as chord constituents.
+
+   * Improved visual spacing of small and regular `MI' Funk and Walker
+     noteheads so they are now the same width as other shaped notes in
+     their respective sets.  `SOL' noteheads are also now visually
+     improved when used with both the normal Aiken and Sacred Harp
+     heads, as well as with the thin variants.
+
+   * `LeftEdge' now has a definable `Y-extent' (i.e.vertical).  See *note
+     LeftEdge: (lilypond-internals)LeftEdge.
+
+   * Added a new `make-path-stencil' function that supports all `path'
+     commands both relative and absolute:
+
+     `lineto', `rlineto', `curveto', `rcurveto', `moveto', `rmoveto',
+     `closepath'.  The function also supports `single-letter' syntax
+     used in standard SVG path commands:
+
+     `L', `l', `C', `c', `M', `m', `Z' and `z'.  The new command is
+     also backward-compatible with the original
+     `make-connected-path-stencil' function.  Also see
+     `scm/stencil.scm'.
+
+   * Context properties named in the `alternativeRestores' property are
+     restored to their value at the start of the _first_ alternative in
+     all subsequent alternatives.
+
+     Currently the default set restores `current meter';
 
-          \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
+          \time 3/4
+          \repeat volta 2 { c2 e4 | }
+          \alternative {
+            { \time 4/4 f2 d | }
+            { f2 d4 | }
+          }
+          g2. |
            [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]
-
-     Previously, the above snippet looked like this:
-
-     [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'.
-
-   * 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.
-
-          \tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
-          \tuplet 3/2 4 { c8 d e f e d } c2
+     `measure position';
+
+          \time 3/4
+          \repeat volta 2 { c2 e4 | }
+          \alternative {
+            { \time 4/4
+              \set Timing.measurePosition = #(ly:make-moment -1/2)
+              f2 | }
+            { f2 d4 | }
+          }
+          g2. |
            [image of music]
 
 
-     The `\times' command with its inverted fraction order `N/T' is
-     still available.
+     and `chord changes';
 
-   * Introducing two new markup-commands; `\draw-dashed-line' and
-     `\draw-dotted-line'.
+          <<
+            \new ChordNames {
+              \set chordChanges = ##t
+              \chordmode { c1:m d:m c:m d:m }
+            }
+            \new Staff {
+              \repeat volta 2 { \chordmode { c1:m } }
+              \alternative {
+                { \chordmode { d:m } }
+                { \chordmode { c:m } }
+              }
+            \chordmode { d:m }
+          }
+          >>
+           [image of music]
 
-     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.
+   * Improved MIDI output for breathe marks.  After tied notes, breaths
+     take time _only_ from the last note of the tie; e.g.  `{ c4~ c8
+     \breathe }' performs as `{ c4~ c16 r }' instead of `{ c4 r8 }'.
+     This is more consistent with articulations and how humans
+     interpret breaths after ties.  It now also makes it easier to
+     align simultaneous breathe marks over multiple parts, all with
+     different note lengths.
+
+   * A new note head style for Tabulature has been added;
+     `TabNoteHead.style = #'slash'.
+
+   * Four new Clef glyphs have been added _Double G_, _Tenor G_,
+     _Varpercussion_ and _varC_ and their related tessitura.
+
+            \override Staff.Clef.full-size-change = ##t
+
+            \clef "GG" c c c c
+            \clef "tenorG" c c c c
+            \clef "varC" c c c c
+            \clef "altovarC" c c c c
+            \clef "tenorvarC" c c c c
+            \clef "baritonevarC" c c c c
+            \clef "varpercussion" c c c c
+
+            \break
+            \override Staff.Clef.full-size-change = ##f
+
+            \clef "GG" c c c c
+            \clef "tenorG" c c c c
+            \clef "varC" c c c c
+            \clef "altovarC" c c c c
+            \clef "tenorvarC" c c c c
+            \clef "baritonevarC" c c c c
+            \clef "varpercussion" c c c c
+           [image of music]
 
-          \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)
+
+   * Isolated durations in music sequences now stand for unpitched
+     notes.  This may be useful for specifying rhythms to music or
+     scheme functions.  When encountered in the final score, the
+     pitches are provided by the preceding note or chord.  Here are two
+     examples where this makes for readable input:
+
+          \new DrumStaff \with { \override StaffSymbol.line-count = 1 }
+          \drummode {
+            \time 3/4
+            tambourine 8 \tuplet 3/2 { 16 16 16 }
+                       8 \tuplet 3/2 { 16 16 16 } 8 8 |
           }
            [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.
+          \new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | }
+           [image of music]
+
+
+   * `\displayLilyMusic' and its underlying Scheme functions no longer
+     omit redundant note durations.  This makes it easier to reliably
+     recognize and format standalone durations in expressions like
+     { c4 d4 8 }
 
-   * The `\clef' command supports optional transposition:
+   * Beaming exceptions can now be constructed using the
+     `\beamExceptions' scheme function.  One can now write
 
-          \clef "treble_(8)"
-          c2 c
-          \clef "bass^[15]"
-          c2 c
+          \time #'(2 1) 3/16
+          \set Timing.beamExceptions =
+            \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
+          c16 c c |
+          \repeat unfold 6 { c32 } |
            [image of music]
 
 
-   * 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.
+     with multiple exceptions separated with `|' bar checks (writing
+     the exception pattern without pitches is convenient but not
+     mandatory).  Previously, setting the beam exceptions would have
+     required writing
 
-          [image of music]
+     \set Timing.beamExceptions =
+     #'(                         ;start of alist
+        (end .                   ;entry for end of beams
+         (                       ;start of alist of end points
+          ((1 . 32) . (2 2 2))   ;rule for 1/32 beams -- end each 1/16
+         )))
+
+   * The most common articulations are now reflected in MIDI output.
+     Accent and marcato make notes louder; staccato, staccatissimo and
+     portato make them shorter. Breath marks shorten the previous note.
+
+     This behavior is customizable through the `midiLength' and
+     `midiExtraVelocity' properties on `ArticulationEvent'.  See
+     `script-init.ly' for examples.
+
+   * 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.
 
+     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.