@end macro
-@documentencoding utf-8
+@documentencoding UTF-8
@documentlanguage en
@afourpaper
@finalout
@node Top
-@top New features in 2.13 since 2.12
-
-@ifhtml
-This document is also available in @uref{changes.pdf,PDF}. It is part of
-the @uref{lilypond/manuals.html,LilyPond Documentation}.
-@end ifhtml
+@top New features in 2.20 since 2.18
@allowcodebreaks false
-@itemize @bullet
+@itemize
@ignore
@end ignore
@item
-Note names can be selected with a new
-@code{@bs{}language "italiano"} command, which
-can be used in safe mode. The old
-@code{@bs{}include "italiano.ly"} syntax is
-still supported for now, but will be deprecated
-in the future.
+It is now possible to move systems with reference to their current
+position using the @code{extra-offset} subproperty of
+@code{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 @ruser{Explicit staff and system positioning} for
+more information.
@item
-autobeaming is now disabled by @code{\cadenzaOn} and enabled by
-@code{\cadenzaOff}. Beaming in cadenzas should be indicated manually.
-Also, if a cadenza is used in a piece with autobeaming disabled, it
-will need to be disabled again after the cadenza.
+It is now possible to add text to analysis brackets through the
+@code{HorizontalBracketText} object.
+@lilypond[quote,verbatim]
+\layout {
+ \context {
+ \Voice
+ \consists "Horizontal_bracket_engraver"
+ }
+}
-@item
-The user is now able to specify the name of the predefined fretboard
-table. This allows the use of multiple tables, with switching between them
-based on user input.
+{
+ \once \override HorizontalBracketText.text = "a"
+ c''\startGroup d''\stopGroup
+ e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup
+}
+@end lilypond
@item
-The part-combiner's decision to combine/not combine notes can now be customized
-@lilypond[quote,relative=2]
-\partcombine
-\relative c' { c2 \partcombineApart c | \partcombineChordsOnce e' e }
-\relative c' { c2 \partcombineApart c | c c }
+The ends of hairpins may now be fine-tuned using the @code{shorten-pair}
+grob property, which previously only affected text-spanners like
+@code{TupletBracket} and @code{OttavaBracket}. Positive values offset
+to the right, negative to the left.
+@lilypond[quote,verbatim]
+{ \once \override Hairpin.shorten-pair = #'(2 . 2)
+ c'1~\<
+ c'2~ c'\!
+ \once \override Hairpin.shorten-pair = #'(-2 . -2)
+ c'1~\<
+ c'2~ c'\! }
@end lilypond
@item
-Tablature staves show fret numbers only by default. To get the
-former style, @code{\tabFullNotation} is provided.
+In fret-diagrams the distance between frets and the distance between strings is
+now independently adjustable. Available are @code{fret-distance} and
+@code{string-distance} as subproperties of @code{fret-diagram-details}.
+@lilypond[verbatim,quote]
+fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
-@item
-Funk-style and Walker-style shape notes have been added.
+\markuplist
+\override #'(padding . 2)
+\table #'(0 -1) {
+ "default"
-@item
-Rests will no longer keep a staff alive if @code{\RemoveEmptyStaffContext}
-is used.
+ \fretMrkp
+
+ "fret-distance"
+
+ \override #'(fret-diagram-details . ((fret-distance . 2)))
+ \fretMrkp
+
+ "string-distance"
+
+ \override #'(fret-diagram-details . ((string-distance . 2)))
+ \fretMrkp
+}
+@end lilypond
@item
-New option @code{-dinclude-settings=INCLUDEFILE.ly}, which causes lilypond
-to include the given file before the score is processed. This allows the
-user to change global settings without the need to change the score itself.
-That way, several different editions/version (e.g. different page sizes)
-can be generated from a file without having to modify the score for each
-version.
+Accidental rules can now be defined across @code{ChoirStaff} contexts.
+Two new rules @code{choral} and @code{choral-cautionary} are available
+that combine the characteristics of @code{modern-voice} and @code{piano}
+or their equivalents with cautionary accidentals.
@item
-The autobeaming settings syntax has been changed. beatLength,
-beatGrouping, beamSettings, and measureGrouping have all been eliminated.
-Autobeaming is now controlled by baseMoment, beatStructure, and
-beamExceptions. Default settings for each of these properties can be
-stored for any time signature in time-signature-settings, so that
-when the time signature is changed, the autobeaming will automatically
-change. The new syntax should be much easier and require fewer
-overrides.
+The music function @code{\unfoldRepeats} can now take an
+optional argument-list specifying which type(s) of repeated music
+should be unfolded. Possible entries are @code{percent}, @code{tremolo},
+@code{volta}.
+If the optional argument-list is unspecified, @code{repeated-music} will be
+used, unfolding all.
@item
-The SVG backend has optional support for
-@uref{http://www.w3.org/Submission/WOFF, WOFF fonts}. Using the Scheme
-option @code{-d svg-woff} together with the SVG backend selection
-@code{-d backend=svg}, produces SVG output with CSS WOFF font selection.
+A new @code{output-attributes} grob property is now used for svg output
+instead of the @code{id} grob property. It allows multiple attributes
+to be defined as an association list. For example, @code{#'((id . 123)
+(class . foo) (data-whatever . @qq{bar}))} will produce the following
+group tag in an SVG file: @code{<g id=@qq{123} class=@qq{foo}
+data-whatever=@qq{bar}> @dots{} </g>}.
@item
-The LilyPond G clef has been rotated 1.5 degrees clockwise for improved
-balance. The old and new versions can be compared by looking at the
-documentation:
-@uref{http://lilypond.org/doc/v2.12/Documentation/user/lilypond/The-Feta-font.html#Clef-glyphs,
-old version},
-@uref{http://lilypond.org/doc/v2.13/Documentation/notation/the-feta-font.html#Clef-glyphs,
-new version}.
+Slurs and phrasing slurs may now be started from individual notes
+in a chord. Several simultanous slurs per @code{Voice} need to be
+distinguished by @code{spanner-id} setting.
+@item
+The music and grob property @code{spanner-id} for distinguishing
+simultaneous slurs and phrasing slurs has been changed from a
+string to a @q{key}, a non-negative integer or symbol.
@item
-Text crescendo spanners can now be added directly using @code{\cresc},
-@code{\dim} and @code{\decresc}.
-@lilypond[quote,relative=2]
-c4\cresc c c c\f |
-c4\dim c c c\!
+There is a new command @code{\=} for specifying the
+@code{spanner-id} for simultaneous slurs and phrasing slurs.
+@lilypond[verbatim,quote]
+\fixed c' {
+ <c~ f\=1( g\=2( >2 <c e\=1) a\=2) >
+}
@end lilypond
+@item
+Blocks introduced with @code{\header} can be stored in variables
+and used as arguments to music and scheme functions and as the
+body of @code{#@{@dots{}#@}} constructs. They are represented as
+a Guile module.
+
+While @code{\book}, @code{\bookpart}, @code{\score}, @code{\with},
+@code{\layout}, @code{\midi}, @code{\paper} blocks can be passed
+around in similar manner, they are represented by different data
+types.
@item
-The documented syntax of @samp{lilypond} environments in the @LaTeX{}
-mode of @command{lilypond-book} has been changed to conform with
-standard @LaTeX{} syntax: options now come after the environment name:
+Dot-separated symbol lists like @code{FretBoard.stencil} were
+already supported as of version@tie{}2.18. They may now also
+contain unsigned integers, and may alternatively be separated by
+commata. This allows usage such as
+@lilypond[quote,verbatim]
+{ \time 2,2,1 5/8 g'8 8 8 8 8 }
+@end lilypond
+and
@example
-\begin@{lilypond@}[@var{options}] @dots{}
+\tagGroup violin,oboe,bassoon
@end example
-The previous syntax with options after @samp{\begin} is still accepted
-by @command{lilypond-book} but deprecated. Something like
+@item
+Such lists may also be used in expressions for assignments, sets,
+and overrides. This allows usage such as
+@lilypond[quote,verbatim]
+{ \unset Timing.beamExceptions
+ \set Timing.beatStructure = 1,2,1
+ g'8 8 8 8 8 8 8 8 }
+@end lilypond
+
+@item
+Association list elements could previously be assigned values
+individually (for example, paper variables like
+@code{system-system-spacing.basic-distance}). They may now be
+also referenced in this manner, as with
@example
-sed -i '/begin\[/s/begin\(\[[^]]*]\)\(@{lilypond@}\)/begin\2\1/'
+\paper @{
+ \void \displayScheme \system-system-spacing.basic-distance
+@}
@end example
-might do the trick for conversion.
+In combination with the previously mentioned changes, this allows
+setting and referencing pseudovariables like @code{violin.1}.
@item
-Aesthetics of shape note heads have been enhanced. Variable line thicknesses
-have been implemented. All note widths have been made consistent.
-Minor shape note commands that use the relative major key for scale steps
-have been added.
+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.
@item
-A variant of the Segno sign is provided:
-@lilypond[quote,relative=2]
-c4 d e f \bar "S"
-g4 f e d
-@end lilypond
+French note names are now defined specifically instead of
+being aliased to Italian note names: in addition to the
+generic Italian-derived syntax, the @var{d} pitch may be
+entered as @code{ré}. Double sharps may also be
+entered using the @code{-x} suffix.
@item
-Context modifications (@code{\with} blocks) can be stored in variables and
-inserted into contexts or other @code{\with} blocks:
+Additional bass strings (for lute tablature) are supported.
@lilypond[quote,verbatim]
-coloredheads = \with { \override NoteHead #'color = #red }
-noclef = \with { \remove "Clef_engraver" }
+m = { f'4 d' a f d a, g, fis, e, d, c, \bar "|." }
+
\score {
- \new Staff {
- \new Voice \with { \coloredheads } \relative c' { c4 e g c }
- }
+ \new TabStaff \m
\layout {
\context {
- \Staff
- \noclef
+ \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")
}
}
}
@end lilypond
@item
-A half-open articulation was added:
-@lilypond[quote,relative=2]
-c4\halfopen
+The markup-list-command @code{\table} is now available.
+Each column may be aligned differently.
+@lilypond[quote,verbatim]
+\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"
+ }
+}
@end lilypond
-This is sometimes used to indicate half-open hi-hats.
@item
-The Unicode Bidirectional Algorithm is now fully supported for
-single-line markup due to enhanced integration with Pango.
+A new markup-command, @code{\with-dimensions-from}, makes
+@code{\with-dimensions} easier to use by taking the new
+dimensions from a markup object, given as first argument.
+@lilypond[quote,verbatim]
+\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" "!"
+ }
+}
+@end lilypond
+
+@item
+There are two new page breaking functions. @code{ly:one-page-breaking}
+automatically adjusts the height of the page to fit the music, so that
+everything fits on one page. @code{ly:one-line-auto-height-breaking}
+is like @code{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.
@item
-LilyPond is now licensed under the GNU GPL v3+.
+Markup-command @code{\draw-squiggle-line} is now available.
+Customizing is possible with overrides of @code{thickness}, @code{angularity},
+@code{height} and @code{orientation}
+@lilypond[quote,verbatim]
+\markup
+ \overlay {
+ \draw-squiggle-line #0.5 #'(3 . 3) ##t
+
+ \translate #'(3 . 3)
+ \override #'(thickness . 4)
+ \draw-squiggle-line #0.5 #'(3 . -3) ##t
+
+ \translate #'(6 . 0)
+ \override #'(angularity . -5)
+ \draw-squiggle-line #0.5 #'(-3 . -3) ##t
+
+ \translate #'(3 . -3)
+ \override #'(angularity . 2)
+ \override #'(height . 0.3)
+ \override #'(orientation . -1)
+ \draw-squiggle-line #0.2 #'(-3 . 3) ##t
+ }
+@end lilypond
@item
-In tablature, frets can be indicated with labels other than numbers:
+A new command, @code{\RemoveAllEmptyStaves}, has been made available, which
+acts exactly like @code{\RemoveEmptyStaves}, except for also removing empty
+staves on the first system in a score.
-@lilypond[verbatim,quote,relative=1]
-\new TabStaff
-\with {
- stringTunings = #'(17 14 9 5 2 -3)
- tablatureFormat = #fret-letter-tablature-format
+@item
+Markup-commands @code{\undertie} and @code{\overtie} are now available, as well
+as the generic markup-command @code{\tie}.
+@lilypond[quote,verbatim]
+\markup {
+ \undertie "undertied"
+ \overtie "overtied"
+}
+
+m = {
+ c''1 \prall -\tweak text \markup \tie "131" -1
+}
+
+{ \voiceOne \m \voiceTwo \m }
+@end lilypond
+
+@item
+@code{TabStaff} is now able to print micro-tones for bendings etc.
+@lilypond[quote,verbatim]
+\layout {
+ \context {
+ \Score
+ supportNonIntegerFret = ##t
+ }
+}
+
+mus = \relative { c'4 cih d dih }
+
+<<
+ \new Staff << \clef "G_8" \mus >>
+ \new TabStaff \mus
+>>
+@end lilypond
+
+@item
+Two new styles of whiteout are now available. The @code{outline} style
+approximates the contours of a glyph's outline, and its shape is
+produced from multiple displaced copies of the glyph. The
+@code{rounded-box} style produces a rounded rectangle shape. For all
+three styles, including the default @code{box} style, the whiteout
+shape's @code{thickness}, as a multiple of staff-line thickness, can be
+customized.
+
+@lilypond[verbatim,quote]
+\markup {
+ \combine
+ \filled-box #'(-1 . 15) #'(-3 . 4) #1
+ \override #'(thickness . 3)
+ \whiteout whiteout-box
}
-\new TabVoice {
- \set fretLabels = #`(,(markup #:with-color red "a")
- "b"
- ,(markup #:italic #:smaller "c"))
- <f d>4. <bes>8 <g e>4
+\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
+}
+@end lilypond
+
+@item
+All of @code{\override}, @code{\revert}, @code{\set}, and
+@code{\unset} now work with the @code{\once} prefix for making
+one-time settings.
+@lilypond[quote,verbatim]
+\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 |
+}
+@end lilypond
+
+@item
+When outputting MIDI, LilyPond will now store the @code{title}
+defined in a score's @code{\header} block (or, if there is no
+such definition on the @code{\score} level, the first such
+definition found in a @code{\header} block of the score's
+enclosing @code{\bookpart}, @code{\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
+@code{midititle} @code{\header} field independently of
+@code{title} (for example, in case @code{title} contains markup
+code which does not render as plain text in a satisfactory way
+automatically).
+
+@item
+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 @code{\etc}.
+
+@lilypond[verbatim,quote]
+\markup bold-red = \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 -! }
@end lilypond
@item
-Layout objects can be printed over a white background, which whites-out objects
-in lower layers which lie beneath:
+LilyPond functions defined with @code{define-music-function},
+@code{define-event-function}, @code{define-scheme-function} and
+@code{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 @code{\default} in the actual
+argument list for explicitly skipping a sequence of optional
+arguments, @code{*unspecified*} can be employed.
+
+@item
+Current input location and parser are now stored in GUILE fluids
+and can be referenced via the function calls @code{(*location*)}
+and @code{(*parser*)}. Consequently, a lot of functions
+previously taking an explicit @code{parser} argument no longer do
+so.
+
+Functions defined with @code{define-music-function},
+@code{define-event-function}, @code{define-scheme-function} and
+@code{define-void-function} no longer use @code{parser} and
+@code{location} arguments.
+
+With those particular definitions, LilyPond will try to recognize
+legacy use of @code{parser} and @code{location} arguments,
+providing backwards-compatible semantics for some time.
+
+@item
+In the "english" notename language, the long notenames for pitches
+with accidentals now contain a hyphen for better readability. You
+now have to write
+@example
+\key a-flat \major
+@end example
+instead of the previous
+@example
+\key aflat \major
+@end example
+
+Double accidentals do not get another hyphen, so the Dutch
+@code{cisis} has the long English notename @code{c-sharpsharp}.
+
+@item
+The visual style of tremolo slashes (shape, style and slope)
+is now more finely controlled.
+@lilypond[quote,relative=2]
+ a8:32 b: c: d:
+ \override StemTremolo.shape = #'beam-like
+ a: b: c: d:
+ \override StemTremolo.style = #'constant
+ a: b: c: d:
+ g,2
+@end lilypond
+
+
+@item
+Multi-measure rests have length according to their total duration,
+under the control of @code{MultiMeasureRest.space-increment}.
+@lilypond[quote]
+{ \compressFullBarRests
+ \override Staff.MultiMeasureRest.space-increment = 3.0
+ R1*2 R1*12 R1*64 }
+@end lilypond
+
+@item
+Page numbers may now be printed in roman numerals, by setting the
+@code{page-number-type} paper variable.
+
+@item
+It is now possible to use @code{\time} and @code{\partial}
+together to change the time signature in mid measure.
@lilypond[verbatim,quote,relative=1]
-\time 3/4
-\override Staff.StaffSymbol #'layer = #4
-\once \override Tie #'layer = #2
-b'2.~
-\once \override Staff.TimeSignature #'whiteout = ##t
-\once \override Staff.TimeSignature #'layer = #3
-\time 5/4
-b4
+\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 |
@end lilypond
@item
-Chords can be repeated using the @code{q} shortcut:
+It is now possible to override the @code{text} property of
+chord names.
-@lilypond[verbatim,quote,relative=2]
-<c e g>8.-^ q16 q4-^
+@lilypond[verbatim,fragment,quote]
+<<
+\new ChordNames \chordmode {
+ a' b c:7
+ \once \override ChordName.text = #"foo"
+ d
+}
+>>
@end lilypond
@item
-With two-sided mode, margins for odd and even pages can be set using
-@code{inner-margin} and @code{outer-margin}:
+Improved horizontal alignment when using @code{TextScript},
+with @code{DynamicText} or @code{LyricText}.
+
+@item
+A new command @code{\magnifyStaff} has been added which scales staff
+sizes, staff lines, bar lines, beamlets and horizontal spacing generally
+at the @code{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.
+
+@item
+@code{InstrumentName} now supports @code{text-interface}.
+
+@item
+There is now support for controlling the @q{expression level} of
+MIDI channels using the @code{Staff.midiExpression} context property.
+This can be used to alter the perceived volume of even sustained notes
+(albeit in a very @q{low-level} way) and accepts a number value between
+@code{0.0} and @code{1.0}.
@example
-\paper @{
- two-sided = ##t
- inner-margin = 10 \mm
- outer-margin = 20 \mm
+\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 @{ @}
@}
@end example
@item
-Paper margin defaults, as specified in @file{ly/paper@/-defaults-init.ly}, apply
-to the default paper size (a4) and are automatically scaled according to the
-paper size chosen.
+Support for making it easier to use alternative @q{music} fonts other
+than the default Emmentaler in LilyPond has been added. See
+@uref{http://fonts.openlilylib.org/} for more information.
@item
-All combinations of @code{left-margin}, @code{right-margin} and
-@code{line-width} work now. There is no more need to set @code{line-width}
-manually unless you explicitly want to.
+Grobs and their parents can now be aligned separately allowing
+more flexibility for grob positions. For example the @q{left} edge of a
+grob can now be aligned on the @q{center} of its parent.
@item
-Support for using an alternative music font, such as Gonville, is now
-added.
+Improvements to the @code{\partial} command have been made to
+avoid problems when using multiple, parallel contexts.
+
+@item @code{\chordmode} can now use @code{< >} and @code{<< >>}
+constructs.
@item
-In addition to the existing @code{\hspace} markup command,
-a new @code{\vspace} command has been added to provide an easy
-and flexible way to add vertical space in markups.
+A new command @code{\tagGroup} has now been added. This complements
+the existing @code{\keepWithTag} and @code{\removeWithTag} commands.
+For Example:
+
+@example
+\tagGroup #'(violinI violinII viola cello)
+@end example
+
+declares a list of @q{tags} that belong to a single @q{tag group}.
+
+@example
+\keepWithTag #'violinI
+@end example
+
+Is now only concerned with @q{tags} from @q{violinI}’s tag group.
+
+Any element of the included music tagged with one or more tags from the
+group, but @emph{not} with @var{violinI}, will be removed.
@item
-The direction of manual beams can be set with @code{^[} and @code{_[}.
+The @code{\addlyrics} function now works with arbitrary contexts
+incuding @code{Staff}.
@item
-A version of the breve note head has been added with two vertical lines on each side.
-@lilypond[quote,relative=2]
-\time 4/2
-\override Staff.NoteHead #'style = #'altdefault
-c\breve | b\breve
+String numbers can now also be used to print roman numerals
+(e.g. for unfretted string instruments).
+@lilypond[verbatim,quote,relative=2]
+c2\2
+\romanStringNumbers
+c\2
+\arabicStringNumbers
+c1\3
@end lilypond
@item
-Instrument names and vocal names now take into account the extent of
-system start delimiters in other staves for their positioning,
-resulting in improved default alignment for left-, center- and
-right-aligned names.
-@lilypond[quote,indent=18\mm]
-<<
- \new StaffGroup <<
- \new GrandStaff <<
- \new Staff {
- \set Staff.instrumentName = #"Piccolo"
- c''1
- }
- \new Staff {
- \set Staff.instrumentName = #"Flute"
- c''1
- }
- >>
- \new Staff {
- \set Staff.instrumentName = #"Bassoon"
- \clef tenor
- c'1
+The @code{thin-kern} property of the @code{BarLine} grob has been
+renamed to @code{segno-kern}.
+
+@item
+@code{KeyCancellation} grobs now ignore cue clefs (like
+@code{KeySignature} grobs do).
+
+@item
+Add support for @code{\once@tie{}\unset}
+
+@item
+It is now possible to individually color both the dots and parentheses
+in fret diagrams when using the @code{\fret-diagram-verbose} markup
+command.
+
+@lilypond[verbatim,quote,relative=1]
+\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 ))
}
- >>
- \new PianoStaff <<
- \set PianoStaff.instrumentName = #"Piano"
- \context Staff = "up" {
- c'1
+ }
+ 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))
}
- \context Staff = "down" {
- \clef bass
- c1
+ }
+}
+@end lilypond
+
+@item
+Two new properties have been added for use in
+@code{fret-diagram-details} when using the @code{\fret-diagram-verbose}
+markup command; @code{fret-label-horizontal-offset} which affects the
+@code{fret-label-indication} and @code{paren-padding} which controls the
+space between the dot and the parentheses surrounding it.
+
+@lilypond[verbatim,quote,relative=1]
+\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))
}
- >>
+ }
+}
+@end lilypond
+
+@item
+A new markup command @code{\justify-line} has been added. Similar to
+the @code{\fill-line} markup command except that instead of setting
+@emph{words} in columns, the @code{\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.
+
+@lilypond[quote,verbatim,papersize=a6]
+\markup \fill-line {oooooo oooooo oooooo oooooo}
+\markup \fill-line {ooooooooo oooooooo oo ooo}
+@end lilypond
+
+@lilypond[quote,verbatim,papersize=a6]
+\markup \justify-line {oooooo oooooo oooooo oooooo}
+\markup \justify-line {ooooooooo oooooooo oo ooo}
+@end lilypond
+
+@item
+A new command @code{\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.
+
+@lilypond[verbatim,quote]
+\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
+ }
+ }
>>
@end lilypond
@item
-Braces in markup can now be selected by point size using the markup commands
-@code{\left-brace} and @code{\right-brace}.
-@lilypond[quote]
-\markup {
- \left-brace #35
- \hspace #2
- \right-brace #45
+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 @q{built-in}, which means it does not
+need to be copied and edited: instead it is simply @code{\include}'d
+in the input file. For details, see @rlearning{Built-in templates}.
+
+@item
+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.
+
+@lilypond[verbatim,fragment,quote,relative=1]
+\time 3/4
+\override Beam.auto-knee-gap = 3
+\tuplet 3/2 4 {
+ g8 c'' e,
+ c'8 g,, e''
+ g,,8 e''' c,,
+}
+@end lilypond
+
+@noindent
+The original kneed-beam tuplet behavior is still available through an
+@code{\override} via a new, @code{knee-to-beam} property.
+
+@lilypond[verbatim,fragment,quote,relative=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,,
}
@end lilypond
@item
-Intermediate .ps files which are created by LilyPond
-during compilation are now deleted by default. To keep them,
-add the following line to your input files:
-@example
-#(ly:set-option 'delete-intermediate-files #f)
-@end example
+@code{\lyricsto} and @code{\addLyrics} have been @q{harmonized}. Both
+now accept the same kind of delimited argument list that @code{\lyrics}
+and @code{\chords} accept. Backward compatibility has been added so
+music identifiers (i.e. @code{\mus}) are permitted as arguments. A
+@code{convert-ly} rule has been added that removes redundant uses of
+@code{\lyricmode} and rearranges combinations with context starters such
+that @code{\lyricsto} in general is applied last (i.e. like
+@code{\lyricmode} would be).
@item
-Dashed and dotted slurs, phrasing slurs, and ties
-have been made variable thickness, and
-partially dashed slurs are now available:
-@lilypond[quote,relative=2]
-\slurDashed
-c4( d e f) |
-\slurDotted
-g4( f e d) |
-\slurHalfDashed
-c4( d e f)
-@end lilypond
+Scheme functions and identifiers can now be used as output definitions.
@item
-An eyeglasses markup was added, indicating strongly to look at the
-conductor for instructions:
-@lilypond[quote,relative=2]
-\mark \markup { \eyeglasses }
-c4_\markup { \eyeglasses }
+Scheme expressions can now be used as chord constituents.
+
+@item
+Improved visual spacing of small and regular @q{MI} Funk and Walker
+noteheads so they are now the same width as other shaped notes in
+their respective sets. @code{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.
+
+@item
+@code{LeftEdge} now has a definable @code{Y-extent} (i.e.vertical). See
+@rinternals{LeftEdge}.
+
+@item
+Added a new @code{make-path-stencil} function that supports all
+@code{path} commands both relative and absolute:
+
+@code{lineto}, @code{rlineto}, @code{curveto}, @code{rcurveto},
+@code{moveto}, @code{rmoveto}, @code{closepath}. The function also
+supports @q{single-letter} syntax used in standard SVG path commands:
+
+@code{L}, @code{l}, @code{C}, @code{c}, @code{M}, @code{m}, @code{Z} and
+@code{z}. The new command is also backward-compatible with the original
+@code{make-connected-path-stencil} function. Also see
+@file{scm/stencil.scm}.
+
+@item
+Context properties named in the @samp{alternativeRestores} property are
+restored to their value at the start of the @emph{first} alternative in
+all subsequent alternatives.
+
+Currently the default set restores @q{current meter};
+
+@lilypond[verbatim,fragment,quote,relative=2]
+\time 3/4
+\repeat volta 2 { c2 e4 | }
+\alternative {
+ { \time 4/4 f2 d | }
+ { f2 d4 | }
+}
+g2. |
+@end lilypond
+
+@noindent
+@q{measure position};
+
+@lilypond[verbatim,fragment,quote,relative=2]
+\time 3/4
+\repeat volta 2 { c2 e4 | }
+\alternative {
+ { \time 4/4
+ \set Timing.measurePosition = #(ly:make-moment -1/2)
+ f2 | }
+ { f2 d4 | }
+}
+g2. |
+@end lilypond
+
+@noindent
+and @q{chord changes};
+
+@lilypond[verbatim,fragment,quote]
+<<
+ \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 }
+}
+>>
@end lilypond
@item
-A snap-pizzicato (also known as Bartok-pizzicato) articulation was added:
-@lilypond[quote,relative=2]
-c4\snappizzicato
+Improved MIDI output for breathe marks. After tied notes, breaths take
+time @emph{only} from the last note of the tie; e.g.
+@code{@{ c4~ c8 \breathe @}} performs as @code{@{ c4~ c16 r @}} instead
+of @code{@{ 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.
+
+@item
+A new note head style for Tabulature has been added;
+@code{TabNoteHead.style = #'slash}.
+
+@item
+Four new Clef glyphs have been added @emph{Double G}, @emph{Tenor G},
+@emph{Varpercussion} and @emph{varC} and their related tessitura.
+@lilypond[verbatim,quote,fragment]
+ \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
@end lilypond
@item
-Tuplet number formatting functions are now available to print other fractions
-and to add notes to the number or fraction:
-@lilypond[quote,relative=2]
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-tuplet-denominator-text 7)
-\times 2/3 { c4. c4. c4. c4. }
+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:
+
+@lilypond[verbatim,quote]
+\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 |
+}
+@end lilypond
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-tuplet-fraction-text 12 7)
-\times 2/3 { c4. c4. c4. c4. }
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper
- (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
-\times 2/3 { c4. c4. c4. c4. }
+@lilypond[verbatim,quote]
+\new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | }
+@end lilypond
+
+@item
+@code{\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
+@example
+@{ c4 d4 8 @}
+@end example
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
-\times 2/3 { c8 c8 c8 c8 c8 c8 }
-\once \override TupletNumber #'text =
- #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
-\times 2/3 { c8 c8 c8 c8 c8 c8 }
+@item
+Beaming exceptions can now be constructed using the
+@code{\beamExceptions} scheme function. One can now write
-\once \override TupletNumber #'text =
- #(tuplet-number::fraction-with-notes "4." "8")
-\times 2/3 { c4. c4. c4. c4. }
-\once \override TupletNumber #'text =
- #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
-\times 2/3 { c4. c4. c4. c4. }
+@lilypond[verbatim,quote,relative=1]
+\time #'(2 1) 3/16
+\set Timing.beamExceptions =
+ \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
+c16 c c |
+\repeat unfold 6 { c32 } |
@end lilypond
+@noindent
+with multiple exceptions separated with @code{|} bar checks
+(writing the exception pattern without pitches is convenient but
+not mandatory). Previously, setting the beam exceptions would
+have required writing
+
+@example
+\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
+ )))
+@end example
+
@item
-FretBoards now have a chordChanges property to keep repeated FretBoard objects
-from being typeset.
+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 @code{midiLength} and
+@code{midiExtraVelocity} properties on @code{ArticulationEvent}.
+See @file{script-init.ly} for examples.
@item
-The vertical spacing engine has been drastically changed, making
-it more flexible and easier to control.
+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 @samp{-dstrokeadjust} to LilyPond. When generating
+@code{PDF} files, this will usually result in markedly better
+looking @code{PDF} previews but significantly larger file size.
+Print quality at high resolutions will be unaffected.
-@end itemize
+@item
+Default text fonts have been changed from
+@code{Century Schoolbook L}, @code{sans-serif}, and @code{monospace}.
+
+For @code{svg} backend:
+@multitable @columnfractions .15 .30
+@headitem Family @tab Default font
+@item @emph{roman} @tab @code{serif}
+@item @emph{sans} @tab @code{sans-serif}
+@item @emph{typewriter} @tab @code{monospace}
+@end multitable
+
+@code{serif}, @code{sans-serif}, and @code{monospace} are
+@code{generic-family} in SVG and CSS specifications.
+
+For other backends:
+@multitable @columnfractions .15 .30 .55
+@headitem Family @tab Default font (alias) @tab Alias definition lists
+@item @emph{roman}
+@tab @code{LilyPond Serif}
+@tab
+TeX Gyre Schola,
+C059, Century SchoolBook URW, Century Schoolbook L,
+DejaVu Serif,
+..., serif
+@item @emph{sans}
+@tab @code{LilyPond Sans Serif}
+@tab
+TeX Gyre Heros,
+Nimbus Sans, Nimbus Sans L, DejaVu Sans,
+..., sans-serif
+@item @emph{typewriter}
+@tab @code{LilyPond Monospace}
+@tab
+TeX Gyre Cursor,
+Nimbus Mono PS, Nimbus Mono, Nimbus Mono L,
+DejaVu Sans Mono,
+..., monospace
+@end multitable
+
+@code{LilyPond Serif}, @code{LilyPond Sans Serif},
+and @code{LilyPond Monospace} are font aliases defined
+in the LilyPond dedicated FontConfig configuration file
+@code{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 @code{00-lilypond-fonts.conf} under the installed directory.
+@item
+When using OpenType fonts, font features can be used.
+Note: Not all OpenType fonts have all functions.
+@lilypond[quote,verbatim]
+% 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 εφπρθ } }
+@end lilypond
+
+@end itemize
@ifhtml
For older news, go to
-@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/NEWS.html},
-@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/NEWS.html},
+@uref{http://lilypond.org/doc/v2.18/Documentation/changes/},
+@uref{http://lilypond.org/doc/v2.16/Documentation/changes/},
or @uref{../,go back} to the Documentation index.