* only show user-visible changes.
@end ignore
+@item
+Support for cross-staff stems on chords, using @code{crossStaff}
+and the @code{Span_stem_engraver}. This calculates the length of
+cross-staff stems automatically.
+@lilypondfile[quote]
+{cross-staff-stems.ly}
+
+@item
+The syntax of words (character sequences recognized without enclosing
+quotes) and commands (now always a backslash @samp{\} followed by a
+word) has been unified across all modes: it now consists of alphabetic
+characters, possibly enclosing isolated dashes @samp{-} and underlines
+@samp{_}.
+
+As one consequence, using unquoted text scripts like (literally!)
+@example
+@{ c-script c\f_script @}
+@end example
+will now tend to result in invalid music. Omitting quote marks
+for arbitrary text rather than keywords has never been good practice or
+even documented, and it is unlikely to have seen significant use.
+
+Staying with established conventions (like not using dashes or
+underlines for command names intended to be used inside of music)
+remains advisable. The reason for this change is more robust
+recognition of LilyPond's lexical units for LilyPond itself as well as
+external tools interpreting its syntax.
+
+@item
+Support for Kievan square notation:
+@lilypond[quote,relative=1,verbatim]
+\new KievanVoice {
+ \cadenzaOn
+ c d e f g a bes
+ \bar "kievan"
+}
+@end lilypond
+
+@item
+Augmentation dots now avoid the other voice in two-voice polyphony
+so that users can move the @code{Dot_column_engraver} to set dots
+independently for each @code{Voice}.
+@lilypond[quote]
+\layout {
+ \context {
+ \Staff
+ \remove Dot_column_engraver
+ } \context {
+ \Voice
+ \consists Dot_column_engraver
+ }
+}
+\relative c'' <<
+ { \time 6/8
+ <d f g>4. <d f g> <f, g> b
+ } \\ {
+ <f g b>4. <g b d> <b d> <e, g>
+ } >>
+@end lilypond
+
+@item
+A Scheme function to adjust the control points of curves such as slurs
+and ties, developed by several users, is now included in LilyPond.
+@lilypond[quote,verbatim,relative=2]
+g8->( bes,-.) d4
+\shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
+g8->( bes,!-.) d4
+@end lilypond
@item
Use of @code{\tempo} specifications in @code{\midi} blocks (removed in
2.9.16 in favor of explicit @code{tempoWholesPerMinute} settings) has
seen a revival: now any kind of property-setting music is turned into
-context definitions within of output specifications, allowing for
+context definitions within output specifications, allowing for
declarations like
@example
\layout @{ \accidentalStyle modern @}
The following three items are consequences of this change.
+@item
+The repetitive chord entry aid @code{q} has been reimplemented.
+Repeated chords are now replaced right before interpreting a music
+expression. In case the user wants to retain some events of the
+original chord, he can run the repeat chord replacement function
+@code{\chordRepeats} manually.
+
+@item
+String numbers and right hand fingerings on single notes now appear
+without having to be written inside of chord brackets.
+
@item
Music functions now work the same when used inside or outside of chords,
including all the possibilities of argument parsing. Music variables
events and lyrics is now possible, but not likely to give results yet.
@item
-The repetitive chord entry aid @code{q} has been reimplemented.
-Repeated chords are now replaced right before interpreting a music
-expression. In case the user wants to retain some events of the
-original chord, he can run the repeat chord replacement function
-@code{\chordRepeats} manually.
-
-@item
-String numbers and right hand fingerings on single notes now appear
-without having to be written inside of chord brackets.
+@code{\tweak} now takes an optional layout object specification. It can
+be used for tweaking layout objects that are only indirectly caused by
+the tweaked event, like accidentals, stems, and flags:
+
+@lilypond[verbatim,quote,ragged-right,relative=2]
+<\tweak Accidental #'color #red cis4
+ \tweak Accidental #'color #green es
+ g>
+@end lilypond
@item
Scheme expressions inside of embedded Lilypond (@code{#@{@dots{}#@}})
are now executed in lexical closure of the surrounding Scheme code.
@code{$} is no longer special in embedded Lilypond. It can be used
-unconditionally in Lilypond code for immediate evaluation, similar to
-how @code{ly:export} could previously be used. @code{ly:export} has
-been removed. As a consequence, @code{#} is now free to delay
-evaluation of its argument until the parser actually reduces the
-containing expression, greatly reducing the potential for premature
-evaluation.
+unconditionally in Lilypond code for immediate evaluation of Scheme
+expressions, similar to how @code{ly:export} could previously be used.
+@code{ly:export} has been removed. As a consequence, @code{#} is now
+free to delay evaluation of its argument until the parser actually
+reduces the containing expression, greatly reducing the potential for
+premature evaluation. There are also @q{splicing} operators @code{$@@}
+and @code{#@@} for interpreting the members of a list individually.
+
+@item
+To reduce the necessity for using @code{$}, Scheme expressions written
+with @code{#} are interpreted as music inside of music lists, and as
+markups or markup lists inside of markups.
@item
Support for jazz-like chords has been improved: Lydian and altered