\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
@setfilename lilypond-changes.info
@settitle LilyPond Changes
@include macros.itexi
@ifhtml
@macro inputfileref{DIR,NAME}
@uref{../../\DIR\/collated-files.html#\NAME\,@file{\DIR\/\NAME\}}@c
@end macro
@macro usermanref{NAME}
@inforef{\NAME\,,../user/lilypond/lilypond}@c
@end macro
@end ifhtml
@ifnothtml
@macro inputfileref{DIR,NAME}
@file{\DIR\/\NAME\}@c
@end macro
@macro usermanref{NAME}
See user manual, \NAME\
@end macro
@end ifnothtml
@macro textanchor{NAME}
@html
@end html
@end macro
@documentencoding utf-8
@documentlanguage en
@afourpaper
@finalout
@node Top
@top New features in 2.16 since 2.14
@allowcodebreaks false
@itemize
@ignore
HINTS
* add new items at the top
* only show verbatim input for syntax/input changes
* try to be as brief possible in those cases
* don't try to provide real-world examples, they often get too big,
which scares away people.
* Write complete sentences.
* only show user-visible changes.
@end ignore
@item
Lilypond's stencil commands have been simplified to allow for less code
duplication and better height approximations of graphical objects. The
following stencil commands have been eliminated:
@itemize
@item @code{beam}
@item @code{bezier-sandwich}
@item @code{bracket}
@item @code{dashed-slur}
@item @code{dot}
@item @code{oval}
@item @code{repeat-slash}
@item @code{zigzag-line}
@end itemize
@item
Flags are now treated as separate objects rather than as stem parts.
@lilypond[fragment,quote,relative=2]
\override Flag #'color = #red
g8
@end lilypond
@item
Two alternative methods for bar numbering can be set, especially for
when using repeated music;
@lilypond[fragment,quote,relative=1,noragged-right]
\relative c'{
\set Score.alternativeNumberingStyle = #'numbers
\repeat volta 3 { c4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1 \break
\set Score.alternativeNumberingStyle = #'numbers-with-letters
\repeat volta 3 { c,4 d e f | }
\alternative {
{ c4 d e f | c2 d \break }
{ f4 g a b | f4 g a b | f2 a | \break }
{ c4 d e f | c2 d }
}
c1
}
@end lilypond
@item
The following is a fundamental change in LilyPond's music
representation: Rhythmic events like @code{LyricEvent} and
@code{NoteEvent} are no longer wrapped in @code{EventChord} unless they
have been actually entered as part of a chord in the input. If you
manipulate music expressions in Scheme, the new behavior may require
changes in your code. Calling the music function @code{\eventChords} or
the Scheme function @code{event-chord-wrap!} converts to the old
representation; using one of those might be easiest for keeping legacy
code operative.
The advantages of making input and music match more closely are
numerous: music functions previously worked differently when used inside
or outside of chords. Now they are the same, including all the
possibilities of argument parsing. You can now use music variables
inside of chords: a construct like
@lilypond[verbatim,quote,ragged-right]
tonic=fis'
{ <\tonic \transpose c g \tonic> }
@end lilypond
@noindent
would have been unthinkable previously. You can use
@code{#@{@dots{}#@}} for constructing chord constituents. Music
functions inside of chords are no longer specially treated and thus
accept the same arguments as outside of chords. @code{\tweak} now works
on single notes without needing to wrap them in a chord. In theory, it
can also work on command events and lyrics now. Since that was not
possible before, it depends on luck on a case-by-case basis whether the
tweak internals are already receiving the necessary information. Users
are asked to report those cases where they find @code{\tweak} not
working according to reasonable expectations.
@item
As one consequence, it was possible to reimplement the repetitive chord
entry aid @code{q}. 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
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.
@item
Support for jazz-like chords has been improved: Lydian and altered
chords are recognised; separators between chord modifiers are now
treated independently of separators between ``slash'' chords and their
bass notes (and by default, slashes are now only used for the latter
type of separator); additional pitches are no longer prefixed with
``add'' by default; and the ``m'' in minor chords can be customized.
@ruser{Customizing chord names} for more information.
@item
The @code{\markuplines} command has been renamed to @code{\markuplist}
for a better match with its semantics and general Lilypond
nomenclature.
@item
The interface for specifying string tunings in tablature has been
simplified considerably and employs the scheme function
@code{\stringTuning} for most purposes.
@item
Beams can now have their slopes preserved over line breaks.
@lilypond[fragment,quote,relative=2]
\override Beam #'breakable = ##t
a8[ b c d e f g \bar "" \break f e d c b a]
\once \override Beam #'positions = #beam::align-with-broken-parts
a8[ b c d e f g \bar "" \break f e d c b a]
\once \override Beam #'positions = #beam::slope-like-broken-parts
a8[ b c d e f g \bar "" \break f e d c b a]
@end lilypond
To do this, several callback functions are now deprecated.
@itemize
@item @code{ly:beam::calc-least-squares-positions}
@item @code{ly:beam::slope-damping}
@item @code{ly:beam::shift-region-to-valid}
@end itemize
Furthermore, @code{ly:beam::quanting} now takes an additional argument
to help calculations over line breaks. All of these functions are now
automatically called when setting the @code{positions} parameter.
@item
In function arguments music, markups and Scheme expressions (as well as
several other syntactic entities) have become mostly interchangeable and
are told apart only by evaluating the respective predicate. In several
cases, the predicate is consulted by the parser, like when deciding
whether to interpret @code{-3} as a number or a fingering event.
@item
Music functions (and their close relatives) can now be defined with
optional arguments.
@item
For defining commands executed only for their side-effects,
@code{define-void-function} is now available.
@item
There is a new @code{define-event-function} command in analogy to
@code{define-music-function} that can be used for defining music
functions acting as post events without requiring a direction specifier
(@code{-}, @code{^}, or @code{_}) placed before them.
@lilypond[quote,verbatim,ragged-right]
dyn=#(define-event-function (parser location arg) (markup?)
(make-dynamic-script arg))
\relative c' { c\dyn pfsss }
@end lilypond
@item
A list of ASCII aliases for special characters can be included.
@lilypond[quote,verbatim]
\paper {
#(include-special-characters)
}
\markup "• † ©right; &OE; &ss; ¶"
@end lilypond
@item
There is a new @code{define-scheme-function} command in analogy to
@code{define-music-function} that can be used to define functions
evaluating to Scheme expressions while accepting arguments in Lilypond
syntax.
@item
The construct @code{#@{ @dots{} #@}} can now be used not just for
constructing sequential music lists, but also for pitches (distinguished
from single note events by the absence of a duration or other
information that can't be part of a pitch), single music events, void
music expressions, post events, markups (mostly freeing users from
having to use the @code{markup} macro), markup lists, number
expressions, context definitions and modifications, and a few other
things. If it encloses nothing or only a single music event, it no
longer returns a sequential music list but rather a void music
expression or just the music event itself, respectively.
@item
Pitches can be used on the right side of assignments. They are
distinguished from single note events by the absence of a duration by
the absence of a duration or other information that can't be part of a
pitch.
@item
New command-line option @option{--loglevel=@var{level}} to control how much output
LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEBUG.
@item
@code{\once \set} now correctly resets the property value to the previous value.
@lilypond[fragment,quote,relative=2]
\set fingeringOrientations = #'(left)
4
\once \set fingeringOrientations = #'(right)
-"left"
@end lilypond
@item
The alignment of dynamic spanners (hairpins, text crescendo, etc.) is now
automatically broken if a different direction is explicitly given.
@lilypond[fragment,quote,relative=2]
c4_\< c c^\> c c1_\p
@end lilypond
@item
Appoggiaturas and acciaccaturas now also work inside a slur, not only inside
a phrasing slur. Also, a function @code{\slashedGrace} was added that does
not use a slur from the acciaccatura note.
@lilypond[fragment,quote,relative=2]
c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4)
@end lilypond
@item
To suppress the line on a crescendo text spanner (and other similar spanners),
LilyPond now fully supports the @code{#'style = #'none} property.
@lilypond[fragment,quote,relative=2]
\override DynamicTextSpanner #'style = #'none
c4\cresc c c g, c'\p
@end lilypond
@item
LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
@item
Glissandi can now span multiple lines.
@end itemize
@ifhtml
For older news, go to
@uref{http://lilypond.org/doc/v2.14/Documentation/changes/},
@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
or @uref{../,go back} to the Documentation index.
@end ifhtml
@bye