]> git.donarmstrong.com Git - lilypond.git/blobdiff - NEWS.txt
Merge tag 'upstream/2.19.80' into debian-experimental
[lilypond.git] / NEWS.txt
index f845199263ed86dc6a88d2ed7f80e9b53e7c8505..ed819b19e343888887a555463893758d4ee4495a 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
 New features in 2.20 since 2.18
 *******************************
 
-   • It is now possible to move systems with reference to their current
-     position using the ‘extra-offset’ subproperty of
-     ‘NonMusicalPaperColumn.line-break-system-details’.  Both vertical
-     and horizontal changes are possible.  This feature is especially
-     useful for making slight adjustments to the default vertical
-     position of individual systems.  See *note
-     (lilypond-notation)Explicit staff and system positioning:: for more
-     information.
+New for musical notation
+------------------------
 
-   • It is now possible to add text to analysis brackets through the
-     ‘HorizontalBracketText’ object.
-          \layout {
-            \context {
-              \Voice
-              \consists "Horizontal_bracket_engraver"
-            }
-          }
+*Displaying pitch improvements*
+
+   • Pitches that have a sharp or flat in their name now need to be
+     hyphenated;
+
+          \key a-flat \major
+
+     instead of:
+
+          \key aflat \major
+
+     Pitches that contain _double_ sharps or flats in their name,
+     however, do not need a second hyphen.  For example using the Dutch
+     notation ‘cisis’:
+
+          \key c-sharpsharp \major
+
+   • Accidental rules can now be defined _across_ ‘ChoirStaff’ contexts.
+
+   • Two new accidental rules have been added.  Both combine the
+     characteristics of ‘modern-voice’, ‘piano’ and their equivalents:
+     ‘choral’
 
-          {
-            \once \override HorizontalBracketText.text = "a"
-            c''\startGroup d''\stopGroup
-            e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup
-          }
           image of music
 
-   • The ends of hairpins may now be fine-tuned using the ‘shorten-pair’
-     grob property, which previously only affected text-spanners like
-     ‘TupletBracket’ and ‘OttavaBracket’.  Positive values offset to the
-     right, negative to the left.
-          { \once \override Hairpin.shorten-pair = #'(2 . 2)
-            c'1~\<
-            c'2~ c'\!
-            \once \override Hairpin.shorten-pair = #'(-2 . -2)
-            c'1~\<
-            c'2~ c'\! }
+     This is the now the default accidental style for ‘ChoirStaff’.
+
+     ‘choral-cautionary’
+
           image of music
 
-   • In fret-diagrams the distance between frets and the distance
-     between strings is now independently adjustable.  Available are
-     ‘fret-distance’ and ‘string-distance’ as subproperties of
-     ‘fret-diagram-details’.
-          fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
+     The same as ‘choral’ but with the extra accidentals typeset as
+     cautionaries instead.
 
-          \markuplist
-          \override #'(padding . 2)
-          \table #'(0 -1) {
-            "default"
+     Also see *note (lilypond-notation)Automatic accidentals::.
 
-            \fretMrkp
+   • Four new clef glyphs are now available; ‘GG’ (double-G), ‘Tenor G’,
+     ‘varC’ plus related tessitura and ‘Varpercussion’:
 
-            "fret-distance"
+     Example                Output         Example                Output
+                                                                  
+     ----------------------------------------------------------------------------
+     ‘\clef GG’             image of music ‘\clef tenorG’         image of music
+     ‘\clef varC’           image of music ‘\clef altovarC’       image of music
+     ‘\clef tenorvarC’      image of music ‘\clef baritonevarC’   image of music
+     ‘\clef                 image of music
+     varpercussion’
 
-            \override #'(fret-diagram-details . ((fret-distance . 2)))
-            \fretMrkp
+     Also see _Clef styles_.
 
-            "string-distance"
+   • French note names are now explicitly defined – previously they were
+     aliased to Italian note names.  The D pitch may be entered as
+     either ‘re’ or ‘ré’.
 
-            \override #'(fret-diagram-details . ((string-distance . 2)))
-            \fretMrkp
-          }
+          \language "français"
+          do ré mi fa | sol la si do | ré1
           image of music
 
-   • Accidental rules can now be defined across ‘ChoirStaff’ contexts.
-     Two new rules ‘choral’ and ‘choral-cautionary’ are available that
-     combine the characteristics of ‘modern-voice’ and ‘piano’ or their
-     equivalents with cautionary accidentals.
+     Double sharps are entered using an ‘x’ suffix.
 
-   • The music function ‘\unfoldRepeats’ can now take an optional
-     argument-list specifying which type(s) of repeated music should be
-     unfolded.  Possible entries are ‘percent’, ‘tremolo’, ‘volta’.  If
-     the optional argument-list is unspecified, ‘repeated-music’ will be
-     used, unfolding all.
+          \language "français"
+          dob, rebb misb fabsb | sold ladd six dosd | rédsd1
+          image of music
 
-   • A new ‘output-attributes’ grob property is now used for svg output
-     instead of the ‘id’ grob property.  It allows multiple attributes
-     to be defined as an association list.  For example, ‘#'((id . 123)
-     (class . foo) (data-whatever . “bar”))’ will produce the following
-     group tag in an SVG file: ‘<g id=“123” class=“foo”
-     data-whatever=“bar”> ... </g>’.
+   *Rhythm improvements*
 
-   • Slurs and phrasing slurs may now be started from individual notes
-     in a chord.  Several simultanous slurs per ‘Voice’ need to be
-     distinguished by ‘spanner-id’ setting.
+   • Multi-measure rests have length according to their total duration,
+     under the control of ‘MultiMeasureRest.space-increment’.  Note the
+     default value is ‘2.0’.
 
-   • The music and grob property ‘spanner-id’ for distinguishing
-     simultaneous slurs and phrasing slurs has been changed from a
-     string to a ‘key’, a non-negative integer or symbol.
+          \compressFullBarRests
+          R1*2 R1*4 R1*64 R1*16
+          image of music
 
-   • There is a new command ‘\=’ for specifying the ‘spanner-id’ for
-     simultaneous slurs and phrasing slurs.
-          \fixed c' {
-            <c~ f\=1( g\=2( >2 <c e\=1) a\=2) >
-          }
+          \compressFullBarRests
+          \override Staff.MultiMeasureRest.space-increment = 2.5
+          R1*2 R1*4 R1*64 R1*16
           image of music
 
-   • 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.
+   • Improvements to the ‘\partial’ command have been made when used
+     with parallel music and/or multiple contexts.
 
-     While ‘\book’, ‘\bookpart’, ‘\score’, ‘\with’, ‘\layout’, ‘\midi’,
-     ‘\paper’ blocks can be passed around in similar manner, they are
-     represented by different data types.
+   • It is now possible to change the time signature mid-measure by
+     using both the ‘\time’ and ‘\partial’ commands together.
 
-   • 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 }
+          f f f f | f2. \bar "||"
+          \time 3/4 \partial 4
+          f8 8 | f2 f8 f |
           image of music
 
-     and
-          \tagGroup violin,oboe,bassoon
+   • Isolated durations in music now stand for unpitched notes.  Pitches
+     are taken from the preceding note or chord.  This is especially
+     convenient for specifying rhythms in both music and scheme
+     functions and can help improve the readability of LilyPond source
+     files.
 
-   • 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 }
+          c64[ 64] 32 16 8^- <g b d>4~ 2 | 1
           image of music
 
-   • 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
+          \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
 
-     In combination with the previously mentioned changes, this allows
-     setting and referencing pseudovariables like ‘violin.1’.
+   • Beaming exceptions can now be constructed using the simpler
+     ‘\beamExceptions’ scheme function.  Previously, this would have
+     required writing:
 
-   • 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.
+          \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
+              )))
 
-   • 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.
+          \time #'(2 1) 3/16
+          c16 c c
+          \repeat unfold 6 { c32 }
 
-   • Additional bass strings (for lute tablature) are supported.
-          m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
+     With the new ‘\beamExceptions’ scheme function, this becomes:
 
-          \score {
-            \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")
-              }
-            }
-          }
+          \set Timing.beamExceptions =
+            \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
+
+          \time #'(2 1) 3/16
+          c16 c c |
+          \repeat unfold 6 { c32 } |
           image of music
 
-   • 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"
-                }
-          }
+     with multiple exceptions separated by bar checks.  Note that
+     writing the exception pattern without pitches is convenient but not
+     mandatory (also see the previous documented rhythm improvement –
+     *note (lilypond-notation)Isolated durations in music now stand for
+     unpitched notes::.
+
+   • The positioning of tuplet numbers for kneed beams has been
+     improved.  Previously, tuplet numbers were placed according to the
+     position of the tuplet bracket, even if the bracket was not
+     printed.  This could lead to tuplet numbers being ‘stranded’.
+
+     Previously:
+
           image of music
 
-   • 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 {
-            \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" "!"
-            }
-          }
+     Now, when the bracket is not drawn, tuplet numbers are positioned
+     closer.
+
           image of music
 
-   • There are two new page breaking functions.  ‘ly:one-page-breaking’
-     automatically adjusts the height of the page to fit the music, so
-     that everything fits on one page.
-     ‘ly:one-line-auto-height-breaking’ is like ‘ly:one-line-breaking’,
-     placing the music on a single line and adjusting the page width
-     accordingly, however it also automatically adjusts the page height
-     to fit the music.
+   • Collision detection for the kneed beam tuplet numbers has also been
+     added, shifting the offset horizontally if the number is too close
+     to an adjoining note column (but still preserving the number’s
+     vertical distance).  In the event of a collision – for example with
+     an accidental – the tuplet number will be shifted vertically
+     instead.  If the tuplet number is itself too large to fit within
+     the available space, the original, ‘bracket-based’, positioning
+     system will be used instead.
 
-   • Markup-command ‘\draw-squiggle-line’ is now available.  Customizing
-     is possible with overrides of ‘thickness’, ‘angularity’, ‘height’
-     and ‘orientation’
-          \markup
-            \overlay {
-              \draw-squiggle-line #0.5 #'(3 . 3) ##t
+          image of music
 
-              \translate #'(3 . 3)
-              \override #'(thickness . 4)
-              \draw-squiggle-line #0.5 #'(3 . -3) ##t
+     The original kneed-beam tuplet behavior is still available with a
+     new, ‘knee-to-beam’ property for the ‘TupletNumber’ layout object.
 
-              \translate #'(6 . 0)
-              \override #'(angularity . -5)
-              \draw-squiggle-line #0.5 #'(-3 . -3) ##t
+          \time 2/4
+          \override Beam.auto-knee-gap = 3
+          \override TupletNumber.knee-to-beam = ##f
+          \override TupletBracket.bracket-visibility = ##t
+          \tuplet 3/2 4 { g8 c'' e, }
+          \once \override TupletBracket.bracket-visibility = ##f
+          \tuplet 3/2 4 { g,,8 c'' e, }
+          image of music
 
-              \translate #'(3 . -3)
-              \override #'(angularity . 2)
-              \override #'(height . 0.3)
-              \override #'(orientation . -1)
-              \draw-squiggle-line #0.2 #'(-3 . 3) ##t
+   *Expressive mark improvements*
+
+   • The ends of hairpins may now be fine-tuned using the ‘shorten-pair’
+     grob property.  This previously only affected text-spanners (e.g.
+     ‘TupletBracket’ and ‘OttavaBracket’).
+
+     Positive and negative values offset right and left respectively.
+
+          \once \override Hairpin.shorten-pair = #'(0 . 2)
+          a1\< | a2 a\!
+
+          \once \override Hairpin.shorten-pair = #'(2 . 0)
+          \once \override Hairpin.stencil = #constante-hairpin
+          a1\< | a2 a\!
+
+          \once \override Hairpin.shorten-pair = #'(-1 . -1)
+          \once \override Hairpin.stencil = #flared-hairpin
+          a1\< | a2 a\!
+          image of music
+
+   • Individual slurs and phrasing slurs may now be started from an
+     explicit note within a chord.
+
+          <f a( c>1 | <c') e g(> | <a c) e>
+          image of music
+
+          <f( a\( c>1 | <c'\) e\( g> | <a c e\)>
+          image of music
+
+   • A new command ‘\=X’ has been added – where ‘X’ can be any
+     non-negative integer or symbol – so that a specific ‘id’ can be
+     assigned to the start and end of slurs and phrasing slurs.
+
+     This is useful when simultaneous slurs are required or if one slur
+     overlaps another or when nesting short slurs within a longer one.
+
+          <a c e\=7\(>1 | <g b d\=£(> |
+          <f\=A( a c\="foo"(> | <c'\="foo")\=A) e\=£) g\=7\)> |
+          image of music
+
+     Also see *note (lilypond-notation)Expressive marks as curves::.
+
+   *Repeat notation improvements*
+
+   • The visual style of tremolo slashes (shape, style and slope) is now
+     more finely controlled.
+          image of music
+
+   • The music function ‘\unfoldRepeats’ can now take an optional
+     argument-list specifying which type(s) of repeated music should be
+     unfolded.  Possible entries are ‘percent’, ‘tremolo’, ‘volta’.  If
+     the optional argument-list is unspecified, ‘repeated-music’ will be
+     used, unfolding all.
+
+   *Staff notation improvements*
+
+   • 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.
+
+   • 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, ‘\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"
-          }
+   • 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.
 
-          m = {
-            c''1 \prall -\tweak text \markup \tie "131" -1
-          }
+          \markup \fill-line {oooooo oooooo oooooo oooooo}
+          \markup \fill-line {ooooooooo oooooooo oo ooo}
+          image of music
 
-          { \voiceOne \m \voiceTwo \m }
+          \markup \justify-line {oooooo oooooo oooooo oooooo}
+          \markup \justify-line {ooooooooo oooooooo oo ooo}
           image of music
 
-   • ‘TabStaff’ is now able to print micro-tones for bendings etc.
+   *Editorial annotation improvements*
+
+   • It is now possible to add text to analysis brackets through the
+     ‘HorizontalBracketText’ object.
           \layout {
             \context {
-              \Score
-              supportNonIntegerFret = ##t
+              \Voice
+              \consists "Horizontal_bracket_engraver"
             }
           }
 
-          mus = \relative { c'4 cih d dih }
+          {
+            \once \override HorizontalBracketText.text = "a"
+            c''\startGroup d''\stopGroup
+            e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup
+          }
+          image of music
 
-          <<
-            \new Staff << \clef "G_8" \mus >>
-            \new TabStaff \mus
-          >>
+   *Text formatting improvements*
+
+   • Support for making it easier to use alternative ‘music’ fonts other
+     than the default Emmentaler in LilyPond has been added.  See *note
+     (lilypond-notation)Replacing the notation font:: for more
+     information.
+
+   • Default text fonts have been changed from ‘Century Schoolbook L’,
+     ‘sans-serif’, and ‘monospace’.
+
+     For ‘svg’ backend:
+     Family      Default font
+     -----------------------------------
+     _roman_     ‘serif’
+     _sans_      ‘sans-serif’
+     _typewriter_‘monospace’
+
+     ‘serif’, ‘sans-serif’, and ‘monospace’ are ‘generic-family’ in SVG
+     and CSS specifications.
+
+     For other backends:
+     Family      Default font (alias)   Alias definition lists
+     ----------------------------------------------------------------------------
+     _roman_     ‘LilyPond Serif’       TeX Gyre Schola, C059, Century
+                                        SchoolBook URW, Century Schoolbook L,
+                                        DejaVu Serif, ..., serif
+     _sans_      ‘LilyPond Sans         TeX Gyre Heros, Nimbus Sans, Nimbus
+                 Serif’                 Sans L, DejaVu Sans, ..., sans-serif
+     _typewriter_‘LilyPond Monospace’   TeX Gyre Cursor, Nimbus Mono PS,
+                                        Nimbus Mono, Nimbus Mono L, DejaVu
+                                        Sans Mono, ..., monospace
+
+     ‘LilyPond Serif’, ‘LilyPond Sans Serif’, and ‘LilyPond Monospace’
+     are font aliases defined in the LilyPond dedicated FontConfig
+     configuration file ‘00-lilypond-fonts.conf’.  Where a character
+     dosen’t exist in the first font listed, the next font listed will
+     be used instead for that character.  For details of alias
+     definitions, please see to ‘00-lilypond-fonts.conf’ under the
+     installed directory.
+
+   • When using OpenType fonts, font features can be used.  Note: Not
+     all OpenType fonts have all functions.
+
+          % True small caps
+          \markup { Normal Style: Hello HELLO }
+          \markup { \caps { Small Caps: Hello } }
+          \markup { \override #'(font-features . ("smcp"))
+                    { True Small Caps: Hello } }
+
+          % Number styles
+          \markup { Normal Number Style: 0123456789 }
+          \markup { \override #'(font-features . ("onum"))
+                    { Old Number Style: 0123456789 } }
+
+          % Stylistic Alternates
+          \markup { \override #'(font-features . ("salt 0"))
+                    { Stylistic Alternates 0: εφπρθ } }
+          \markup { \override #'(font-features . ("salt 1"))
+                    { Stylistic Alternates 1: εφπρθ } }
+
+          % Multiple features
+          \markup { \override #'(font-features . ("onum" "smcp" "salt 1"))
+                    { Multiple features: Hello 0123456789 εφπρθ } }
           image of music
 
    • Two new styles of whiteout are now available.  The ‘outline’ style
@@ -297,197 +398,113 @@ New features in 2.20 since 2.18
           }
           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 |
+   • 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 {
+            \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
 
-   • 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
-
-   • Multi-measure rests have length according to their total duration,
-     under the control of ‘MultiMeasureRest.space-increment’.
-          image of music
-
-   • Page numbers may now be printed in roman numerals, by setting the
-     ‘page-number-type’ paper variable.
-
-   • It is now possible to use ‘\time’ and ‘\partial’ together to change
-     the time signature in mid measure.
+   • Markup-command ‘\draw-squiggle-line’ is now available.  Customizing
+     is possible with overrides of ‘thickness’, ‘angularity’, ‘height’
+     and ‘orientation’
+          \markup
+            \overlay {
+              \draw-squiggle-line #0.5 #'(3 . 3) ##t
 
-          \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
+              \translate #'(3 . 3)
+              \override #'(thickness . 4)
+              \draw-squiggle-line #0.5 #'(3 . -3) ##t
 
-   • It is now possible to override the ‘text’ property of chord names.
+              \translate #'(6 . 0)
+              \override #'(angularity . -5)
+              \draw-squiggle-line #0.5 #'(-3 . -3) ##t
 
-          <<
-          \new ChordNames \chordmode {
-            a' b c:7
-            \once \override ChordName.text = #"foo"
-            d
-          }
-          >>
+              \translate #'(3 . -3)
+              \override #'(angularity . 2)
+              \override #'(height . 0.3)
+              \override #'(orientation . -1)
+              \draw-squiggle-line #0.2 #'(-3 . 3) ##t
+            }
           image of music
 
-   • 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
+   • Markup-commands ‘\undertie’ and ‘\overtie’ are now available, as
+     well as the generic markup-command ‘\tie’.
+          \markup {
+            \undertie "undertied"
+            \overtie "overtied"
+          }
 
-                \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 { }
+          m = {
+            c''1 \prall -\tweak text \markup \tie "131" -1
           }
 
-   • 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.
+          { \voiceOne \m \voiceTwo \m }
+          image of music
 
-   • 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.
+New for specialist notation
+---------------------------
 
-   • Improvements to the ‘\partial’ command have been made to avoid
-     problems when using multiple, parallel contexts.
+*Vocal music improvements*
 
-   • ‘\chordmode’ can now use ‘< >’ and ‘<< >>’ constructs.
+   • 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
+     (lilypond-learning)Built-in templates::.
 
-   • A new command ‘\tagGroup’ has now been added.  This complements the
-     existing ‘\keepWithTag’ and ‘\removeWithTag’ commands.  For
-     Example:
+   • The ‘\addlyrics’ function now works with arbitrary contexts
+     incuding ‘Staff’.
 
-          \tagGroup #'(violinI violinII viola cello)
+   • ‘\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).
 
-     declares a list of ‘tags’ that belong to a single ‘tag group’.
+   *Unfretted and fretted string instrument improvements*
 
-          \keepWithTag #'violinI
+   • A new note head style for Tabulature has been added –
+     ‘TabNoteHead.style = #'slash’.
 
-     Is now only concerned with ‘tags’ from ‘violinI’’s tag group.
+   • In fret-diagrams the distance between frets and the distance
+     between strings is now independently adjustable.  Available are
+     ‘fret-distance’ and ‘string-distance’ as subproperties of
+     ‘fret-diagram-details’.
+          fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
 
-     Any element of the included music tagged with one or more tags from
-     the group, but _not_ with VIOLINI, will be removed.
+          \markuplist
+          \override #'(padding . 2)
+          \table #'(0 -1) {
+            "default"
 
-   • The ‘\addlyrics’ function now works with arbitrary contexts
-     incuding ‘Staff’.
+            \fretMrkp
 
-   • 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
+            "fret-distance"
 
-   • The ‘thin-kern’ property of the ‘BarLine’ grob has been renamed to
-     ‘segno-kern’.
+            \override #'(fret-diagram-details . ((fret-distance . 2)))
+            \fretMrkp
 
-   • ‘KeyCancellation’ grobs now ignore cue clefs (like ‘KeySignature’
-     grobs do).
+            "string-distance"
 
-   • Add support for ‘\once \unset’
+            \override #'(fret-diagram-details . ((string-distance . 2)))
+            \fretMrkp
+          }
+          image of music
 
    • It is now possible to individually color both the dots and
      parentheses in fret diagrams when using the ‘\fret-diagram-verbose’
@@ -555,98 +572,234 @@ New features in 2.20 since 2.18
           }
           image of music
 
-   • 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.
+   • Additional bass strings (for lute tablature) are supported.
+          m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
 
-          \markup \fill-line {oooooo oooooo oooooo oooooo}
-          \markup \fill-line {ooooooooo oooooooo oo ooo}
+          \score {
+            \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
 
-          \markup \justify-line {oooooo oooooo oooooo oooooo}
-          \markup \justify-line {ooooooooo oooooooo oo ooo}
+   • 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
 
-   • 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.
+   • ‘TabStaff’ is now able to print micro-tones for bendings etc.
+          \layout {
+            \context {
+              \Score
+              supportNonIntegerFret = ##t
+            }
+          }
 
-          \new Staff <<
-            \new Voice \relative {
-              \voiceOne
-              <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>4 r8
+          mus = \relative { c'4 cih d dih }
+
+          <<
+            \new Staff << \clef "G_8" \mus >>
+            \new TabStaff \mus
+          >>
+          image of music
+
+   *Chord notation improvements*
+
+   • ‘\chordmode’ can now use ‘< >’ and ‘<< >>’ constructs.
+
+   • It is now possible to override the ‘text’ property of chord names.
+
+          <<
+          \new ChordNames \chordmode {
+            a' b c:7
+            \once \override ChordName.text = #"foo"
+            d
+          }
+          >>
+          image of music
+
+New for input and output
+------------------------
+
+*Input structure improvements*
+
+   • 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.
+
+   *Titles and header improvements*
+
+   • Page numbers may now be printed in roman numerals, by setting the
+     ‘page-number-type’ paper variable.
+
+   *Input file improvements*
+
+   • 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.
+
+   *Output improvements*
+
+   • 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.
+
+   • The ‘output-classic-framework’ procedure and the ‘-dclip-systems’
+     are now available with the ‘SVG’ backend.
+
+   • An argument, ‘-dcrop’, has been added, formatting ‘SVG’ and ‘PDF’
+     output without margins or page-breaks.
+
+   • A new ‘output-attributes’ grob property is now used for svg output
+     instead of the ‘id’ grob property.  It allows multiple attributes
+     to be defined as an association list.  For example, ‘#'((id . 123)
+     (class . foo) (data-whatever . “bar”))’ will produce the following
+     group tag in an SVG file: ‘<g id=“123” class=“foo”
+     data-whatever=“bar”> ... </g>’.
+
+   • 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.
+
+   • 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’.
+
+   *MIDI improvements*
+
+   • 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.
+
+   • 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.
+
+   • 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"
             }
-            \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
+            <<
+              { 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\!
               }
-            }
-          >>
-          image of music
+            >>
+            \midi { }
+          }
 
-   • 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
-     (lilypond-learning)Built-in templates::.
+   • 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).
 
-   • 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.
+   *Extracting music improvements*
 
-          \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
+   • ‘\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 original kneed-beam tuplet behavior is still available through
-     an ‘\override’ via a new, ‘knee-to-beam’ property.
+New for spacing issues
+----------------------
 
-          \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
+*Page breaking improvements*
 
-   • ‘\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).
+   • There are two new page breaking functions.  ‘ly:one-page-breaking’
+     automatically adjusts the height of the page to fit the music, so
+     that everything fits on one page.
+     ‘ly:one-line-auto-height-breaking’ is like ‘ly:one-line-breaking’,
+     placing the music on a single line and adjusting the page width
+     accordingly, however it also automatically adjusts the page height
+     to fit the music.
 
-   • Scheme functions and identifiers can now be used as output
-     definitions.
+   *Vertical and Horizontal spacing improvements*
 
-   • Scheme expressions can now be used as chord constituents.
+   • It is now possible to move systems with reference to their current
+     position using the ‘extra-offset’ subproperty of
+     ‘NonMusicalPaperColumn.line-break-system-details’.  Both vertical
+     and horizontal changes are possible.  This feature is especially
+     useful for making slight adjustments to the default vertical
+     position of individual systems.  See *note
+     (lilypond-notation)Explicit staff and system positioning:: for more
+     information.
 
    • Improved visual spacing of small and regular ‘MI’ Funk and Walker
      noteheads so they are now the same width as other shaped notes in
@@ -657,22 +810,45 @@ New features in 2.20 since 2.18
    • ‘LeftEdge’ now has a definable ‘Y-extent’ (i.e.vertical).  See
      *note (lilypond-internals)LeftEdge::.
 
-   • Added a new ‘make-path-stencil’ function that supports all ‘path’
-     commands both relative and absolute:
+   • 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.
 
-     ‘lineto’, ‘rlineto’, ‘curveto’, ‘rcurveto’, ‘moveto’, ‘rmoveto’,
-     ‘closepath’.  The function also supports ‘single-letter’ syntax
-     used in standard SVG path commands:
+   • Improved horizontal alignment when using ‘TextScript’, with
+     ‘DynamicText’ or ‘LyricText’.
 
-     ‘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’.
+New for changing defaults
+-------------------------
+
+   • 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
+
+New for Internal interfaces and functions
+-----------------------------------------
+
+   • The music and grob property ‘spanner-id’, used for distinguishing
+     simultaneous slurs and phrasing slurs, has been changed from a
+     string to a _key_ which can be either a non-negative integer or
+     symbol (also see the previous documented expressive mark
+     improvement – _A new command \=X has been added_).
 
    • 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’;
+     Currently the default set restores ‘current meter’:
 
           \time 3/4
           \repeat volta 2 { c2 e4 | }
@@ -683,7 +859,7 @@ New features in 2.20 since 2.18
           g2. |
           image of music
 
-     ‘measure position’;
+     ‘measure position’:
 
           \time 3/4
           \repeat volta 2 { c2 e4 | }
@@ -696,7 +872,7 @@ New features in 2.20 since 2.18
           g2. |
           image of music
 
-     and ‘chord changes’;
+     and ‘chord changes’:
 
           <<
             \new ChordNames {
@@ -714,135 +890,101 @@ New features in 2.20 since 2.18
           >>
           image of music
 
-   • 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
+   • 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.
 
-            \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
+   • 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.
 
-            \break
-            \override Staff.Clef.full-size-change = ##f
+     Functions defined with ‘define-music-function’,
+     ‘define-event-function’, ‘define-scheme-function’ and
+     ‘define-void-function’ no longer use ‘parser’ and ‘location’
+     arguments.
 
-            \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
+     With those particular definitions, LilyPond will try to recognize
+     legacy use of ‘parser’ and ‘location’ arguments, providing
+     backwards-compatible semantics for some time.
 
-   • 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:
+   • Scheme functions and identifiers can now be used as output
+     definitions.
 
-          \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
+   • Scheme expressions can now be used as chord constituents.
 
-          \new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | }
-          image of music
+   • 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’.
 
-   • ‘\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 }
+          \markup bold-red = \markup \bold \with-color #red \etc
+          highlight = \tweak font-size 3 \tweak color #red \etc
 
-   • Beaming exceptions can now be constructed using the
-     ‘\beamExceptions’ scheme function.  One can now write
+          \markup \bold-red "text"
+          \markuplist \column-lines \bold-red { One Two }
 
-          \time #'(2 1) 3/16
-          \set Timing.beamExceptions =
-            \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
-          c16 c c |
-          \repeat unfold 6 { c32 } |
+          { c' \highlight d' e'2-\highlight -! }
           image of music
 
-     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
-
-          \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
-              )))
+   • 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
 
-   • 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.
+     and
+          \tagGroup violin,oboe,bassoon
 
-     This behavior is customizable through the ‘midiLength’ and
-     ‘midiExtraVelocity’ properties on ‘ArticulationEvent’.  See
-     ‘script-init.ly’ for examples.
+   • 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
 
-   • 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.
+   • 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
+          }
 
-     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.
+     In combination with the previously mentioned changes, this allows
+     setting and referencing pseudovariables like ‘violin.1’.
 
-   • Default text fonts have been changed from ‘Century Schoolbook L’,
-     ‘sans-serif’, and ‘monospace’.
+   • 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
 
-     For ‘svg’ backend:
-     Family      Default font
-     -----------------------------------
-     _roman_     ‘serif’
-     _sans_      ‘sans-serif’
-     _typewriter_‘monospace’
+   • ‘InstrumentName’ now supports ‘text-interface’.
 
-     ‘serif’, ‘sans-serif’, and ‘monospace’ are ‘generic-family’ in SVG
-     and CSS specifications.
+   • The ‘thin-kern’ property of the ‘BarLine’ grob has been renamed to
+     ‘segno-kern’.
 
-     For other backends:
-     Family      Default font (alias)   Alias definition lists
-     ----------------------------------------------------------------------------
-     _roman_     ‘LilyPond Serif’       TeX Gyre Schola, C059, Century
-                                        SchoolBook URW, Century Schoolbook L,
-                                        DejaVu Serif, ..., serif
-     _sans_      ‘LilyPond Sans         TeX Gyre Heros, Nimbus Sans, Nimbus
-                 Serif’                 Sans L, DejaVu Sans, ..., sans-serif
-     _typewriter_‘LilyPond Monospace’   TeX Gyre Cursor, Nimbus Mono PS,
-                                        Nimbus Mono, Nimbus Mono L, DejaVu
-                                        Sans Mono, ..., monospace
+   • ‘KeyCancellation’ grobs now ignore cue clefs (like ‘KeySignature’
+     grobs do).
 
-     ‘LilyPond Serif’, ‘LilyPond Sans Serif’, and ‘LilyPond Monospace’
-     are font aliases defined in the LilyPond dedicated FontConfig
-     configuration file ‘00-lilypond-fonts.conf’.  Where a character
-     dosen’t exist in the first font listed, the next font listed will
-     be used instead for that character.  For details of alias
-     definitions, please see to ‘00-lilypond-fonts.conf’ under the
-     installed directory.
+   • Add support for ‘\once \unset’