X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fchanges.tely;h=909d8e62d26735e78f7289f549296267b3fa5def;hb=d01d7bd0752a3d141de5a1fb2905d30efbcd8970;hp=c0d475a6b02fa21c1b698304b53e5cdb07e4fb5e;hpb=34fc5bf1293e0bbdea8519118112b50dd1256ac7;p=lilypond.git diff --git a/Documentation/changes.tely b/Documentation/changes.tely index c0d475a6b0..909d8e62d2 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -36,7 +36,7 @@ See user manual, \NAME\ @finalout @node Top -@top New features in 2.16 since 2.14 +@top New features in 2.18 since 2.16 @allowcodebreaks false @@ -62,205 +62,425 @@ which scares away people. @end ignore @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 -} +Several articulations can be put into a single variable or +returned from an event function: + +@lilypond[verbatim,quote] +sempreStacc = -. ^\markup \italic sempre +\relative { c''4\sempreStacc c c c } @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. 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[quote,ragged-right] -tonic=fis' -{ <\tonic \transpose c g \tonic> } +The baseline of score markups is now taken from the reference +point (usually the middle of the staff) of the first bottom system +rather than the top of the bounding rectangle. The following +@lilypond[verbatim,quote] +\markup { + violin: \score { \new Staff { 1 } + \layout { indent=0 } } , + cello: \score { \new Staff { \clef "bass" } + \layout { indent=0 } } +} @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. String number -indications like @code{\1} can be used on single notes. If you need to -suppress them in some context, override their @code{stencil} with -@code{##f}. +previously looked like +@lilypond[quote] +\markup { + violin: \general-align #Y #UP + \score { \new Staff { 1 } + \layout { indent=0 } } , + cello: \general-align #Y #UP + \score { \new Staff { \clef "bass" } + \layout { indent=0 } } +} +@end lilypond +without a reliable way to get both scores to line up. @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. +LilyPond no longer automatically infers a @samp{\defaultchild} +context in a context definition with @samp{\accepts} clauses. Any +context definition without an explicit or inherited +@samp{\defaultchild} definition counts as a @samp{Bottom} context +and will be eligible for rhythmic events and overrides without +causing the implicit creation of other contexts. Be sure to +specify a @samp{\defaultchild} for non-@samp{Bottom} contexts when +defining them from scratch. @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. +There is now extensive support for both discant and bass accordion +register symbols in the @samp{scm accreg} module, see +@ruser{Accordion Registers}. +@lilypond[verbatim,quote] +#(use-modules (scm accreg)) +\new PianoStaff +<< + \new Staff \relative + { \clef "treble" \discant "10" + r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a] + \discant "121" + << { r16 r r } \\ + { d r a r bes r } >> | + 1 + } + \new Staff \relative + { \clef "treble" \freeBass "1" + r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16 + \clef "bass" \stdBass "Master" + << { r16 ^"b" r ^"am" r ^"gm" | + 1^"a" } \\ + { d8_"D" c_"C" bes_"B" | a1_"A" } + >> + } +>> +@end lilypond + +@item +New commands @code{markLengthOn} and @code{markLengthOff} control +the allowance of horizontal space for tempo and rehearsal marks. + +@lilypond[quote,relative=2] +\markLengthOn +\compressFullBarRests +\tempo "Molto vivace" c2 c' +\mark\default +\tempo "Meno mosso" R1*16 +\mark\default +g,2 g +\bar "||" +\markLengthOff +\tempo "Molto vivace" c2 c' +\mark#1 +\tempo "Meno mosso" R1*16 +\mark\default +g,2 g +@end lilypond @item -The @code{\markuplines} command has been renamed to @code{\markuplist} -for a better match with its semantics and general Lilypond -nomenclature. +Rehearsal marks at the beginning of a line are now placed to the right +of the clef and key signature by default. As in previous versions, the +@code{break-alignable-interface} controls the behavior. + +@lilypond[quote,relative=2] +\set Score.barNumberVisibility = #all-bar-numbers-visible +\set Timing.currentBarNumber = #72 +\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2. +@end lilypond @item -The interface for specifying string tunings in tablature has been -simplified considerably. +Decimal numbers can now be written directly in music, +without a hash sign. Together with the previous change +in the way object properties are specified, the code to +change the length of stems has changed from this: +@example +\override Stem #'length = #5.6 +e' f' g' a' +@end example +to this: +@example +\override Stem.length = 5.6 +e' f' g' a' +@end example + +One has to write a digit on both sides of the dot -- values like +@code{4.} or @code{-.3} are not allowed. + +Decimal fractions are also not accepted in @code{\chordmode}. @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] +A number of shorthands like @code{(}, @code{)}, @code{|}, +@code{[}, @code{]}, @code{~}, @code{\(}, @code{\)} and others can +now freely be redefined like normal commands. An example would be +@lilypond[verbatim,quote] +"\\{" = ( +"\\}" = ) +"(" = \melisma +")" = \melismaEnd + +\new Staff << + \relative c' { + c8 \{ d e f \} % slurred + g ( a b c ) % no slur, but with melisma + c,1 \bar "|." + } + \addlyrics { Li -- ly -- pond. } +>> @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. +The articulation shorthand for @code{\staccatissimo} has been +renamed from @code{-|} to@tie{}@code{-!}. @item -Music functions (and their close relatives) can now be defined with -optional arguments. +Tempo change ranges are now written as @code{\tempo 4 = 60 - 68} +rather than @code{\tempo 4 = 60 ~ 68}. @item -For defining commands executed only for their side-effects, -@code{define-void-function} is now available. +Grob @code{OctavateEight} was renamed to @code{ClefModifier}. +Related context properties were renamed from @code{xxxOctavationyyy} +to @code{xxxTranspositionyyy}. @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 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 } +There is a new @code{\absolute} command explicitly marking music +as being entered in absolute pitch. While this has been the +default previously, an explicit @code{\absolute} also prevents +reinterpretation when the passage is placed inside of +@code{\relative}: +@lilypond[verbatim,quote] +\relative c { c'4 \absolute { f'' g'' } c } @end lilypond @item -A list of ASCII aliases for special characters can be included. +When @code{\relative} is used without an explicit reference pitch, +the reference pitch now is the middle of the first octave, making +the first entered pitch indistinguishable from absolute pitch. +Previously, omitting the reference pitch would have lead to a +default of @code{c'}. Since that choice was somewhat arbitrary, +recommended usage was to always specify the reference pitch. + +@item +A new command @code{\single} can be used for converting a property +override into a tweak to be applied on a single music expression: + +@lilypond[quote,verbatim,relative=2] +1 +@end lilypond + +@item +Two ways of letting graphical objects not appear in the output are +overriding its @code{transparent} property with @code{#t} +(retaining the original spacing) or overriding its @code{stencil} +property with @code{#f} (not using any space at all). Those two +operations now have the shorthands @code{\hide} and @code{\omit}, +respectively. They can either be given a music expression to +tweak, or the name of a graphical object for which an override +should be created (for specifying both, use @code{\single} on the +override form): + @lilypond[quote,verbatim] -\paper { - #(include-special-characters) -} -\markup "• † ©right; &OE; &ss; ¶" +\new Staff \with { \omit Clef } +\relative c'' 1 +@end lilypond + +@item +A new command @code{\temporary} can be applied to overrides in +order to not have them replace previous property settings. If a +@code{\revert} is applied to the same property subsequently, the +previous setting reappears: + +@lilypond[quote,verbatim,relative=2] +\override NoteHead.color = #red c4 +\override NoteHead.color = #green d +\revert NoteHead.color e2 +\override NoteHead.color = #red c4 +\temporary\override NoteHead.color = #green d +\revert NoteHead.color e +\revert NoteHead.color c @end lilypond +This is mainly useful for writing music functions that need to +have some property changed just for the duration of the function. + @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. +@code{\tag}, @code{\removeWithTag}, and @code{\keepWithTag} can +now accept a list of symbols rather than just a single symbol for +marking, removing, and keeping music with any of multiple tags. +This is particularly important for @code{\keepWithTag} since one +cannot achieve the same effect by using multiple consecutive +@code{\keepWithTag} commands. @item -The construct @code{#@{ @dots{} #@}} can now be used not just for -constructing sequential music lists, but also for 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. +The @samp{-d old-relative} option has been removed. Not actually +accessible from the command line any more, its remaining use was +for interpretating @code{\relative} in LilyPond files converted +automatically from version@tie{}1.8 or older. It is unclear how +much of this was actually still operative. @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. +The meaning of @code{instrumentTransposition} has been reversed. +After +@example +\set instrumentTransposition = #@{ b #@} +@end example +a written @code{c'} now sounds like @code{b}. Previously, this +would have been the other way round. This and the following change +should make dealing with transposing instruments more +straightforward. @item -@code{\set \once} 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 +The music generated by @code{\set} and @code{\override} commands +is no longer affected by @code{\transpose}. The main consequence +is that @code{\transpose} will transpose audible/@/concert pitch and +printed pitch by the same amount even when the transposed music +contains @code{\transposition}. Previously, +@example +\transpose c' f' \transposition bes' +@end example +was equivalent to @code{\transposition f'}. Now it stays +equivalent to @code{\transposition bes'}. @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 +When checking for collisions, LilyPond no longer treats objects as +rectangles. Instead, the actual shape of objects is approximated +using an integral-like approach. This generally results in more +even and snug positioning of objects and systems: + +@lilypond[relative=1] +#(ly:set-option 'debug-skylines #t) +\dynamicUp +c'4\f a4\f d\f( f) +a,4\< c c c\! +d4-.\downbow a4^"r'venu..." c \tempo "T1" e @end lilypond +Previously, the above snippet looked like this: + +@lilypond[relative=1] +#(ly:set-option 'debug-skylines #t) +\override Hairpin #'vertical-skylines = #'() +\override DynamicText #'vertical-skylines = #'() +\override TextScript #'vertical-skylines = #'() +\override Score.MetronomeMark #'vertical-skylines = #'() +\override Staff.Clef #'vertical-skylines = #'() +\dynamicUp +c'4\f a4\f d\f( f) +a,4\< c c c\! +d4-.\downbow a4^"r'venu..." c \tempo "T1" e +@end lilypond + +Affected objects include @code{Accidentals}, @code{Beams}, @code{Clefs}, +@code{Dynamics}, @code{FiguredBass}, @code{Flags}, @code{Glissandos}, +@code{Lyrics}, @code{MetronomeMarks}, @code{OttavaBrackets}, +@code{Pedals}, @code{RehearsalMarks}, @code{Rests}, @code{Scripts}, +@code{TextScripts}, @code{Ties}, @code{Tuplets} and @code{VoltaBrackets}. @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 -does not use a slur from the acciaccatura note. -@lilypond[fragment,quote,relative=2] -c4( \appoggiatura e8 d4 \acciaccatura e8 d4 \slashedGrace e8 c4) +Tuplets are now created with the @code{\tuplet} command, which +takes a fraction @code{@var{t}/@var{n}} to specify that @var{t} +notes are played in the time usually allowed for @var{n}. One +@code{\tuplet} command can create several tuplet groups if their +duration is typed after the fraction. +@lilypond[quote,verbatim,relative=2] +\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2 +\tuplet 3/2 4 { c8 d e f e d } c2 @end lilypond +The @code{\times} command with its inverted fraction order +@code{@var{n}/@var{t}} is still available. + +@item +Introducing two new markup-commands; @code{\draw-dashed-line} and +@code{\draw-dotted-line}. + +@noindent +The dashed-line extends to the whole length given by @var{dest}, if +@code{full-length} is set to @code{#t} (this is the default) without any +space at the beginning or end. @code{off} will then be altered to fit. +To insist on the given (or default) values of @code{on}, @code{off} use +@code{\override #'(full-length . #f)}. Manual settings for @code{on}, +@code{off} and @code{phase} are possible. +@noindent +The dotted-line always extends to the whole length given by @var{dest}, +without any space at the beginning or end. Manual settings for +@code{off} are possible to get larger or smaller space between the dots. +The given (or default) value of @code{off} will be altered to fit the +line-length. + +@lilypond[verbatim,quote] +\markup { + \draw-dashed-line #'(5.1 . 2.3) + \override #'(on . 0.3) + \override #'(off . 0.5) + \draw-dashed-line #'(5.1 . 2.3) + \draw-dotted-line #'(5.1 . 2.3) + \override #'(thickness . 2) + \override #'(off . 0.2) + \draw-dotted-line #'(5.1 . 2.3) +} +@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 +Starting with version@tie{}2.17.10, error messages or the +@code{textedit} @acronym{URI} used for point-and-click +functionality specify column numbers starting with@tie{}1 rather +than@tie{}0. The byte offset (also part of @code{textedit} +@acronym{URI}s) still starts at@tie{}0. + +@item +The @code{\clef} command supports optional transposition: +@lilypond[verbatim,quote,relative=1] +\clef "treble_(8)" +c2 c +\clef "bass^[15]" +c2 c @end lilypond @item -LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz! +The LilyPond syntax of dot-separated words @code{Voice.Accidental} +has been made interchangeable with @code{#'(Voice Accidental)}, a +Scheme list of symbols. As one result, code like +@example +\override Voice.TextSpanner #'(bound-details left text) = "rit." +@end example +is now equivalent to +@example +\override Voice.TextSpanner bound-details.left.text = "rit." +@end example +or even +@example +\override #'(Voice TextSpanner) bound-details.left.text = "rit." +@end example + +@item +Grob and grob property path no longer need to be specified as two +separate arguments to commands like @samp{\override} and +@code{\revert}, allowing for the syntax +@example +\override Voice.TextSpanner.bound-details.left.text = "rit." +@end example +Since complementary music functions like @samp{\overrideProperty} +cannot support forms with and without separating space at the same +time, using a single dotted path is now the preferred form. +Specifying grob path and grob property path separately, currently +still supported with @samp{\override} and @samp{\revert} for +compatibility reasons, is deprecated. + +@item +Due to words now being accepted as symbol function arguments, the +interfaces of @samp{\accidentalStyle}, @samp{\alterBroken}, +@samp{\footnote} and @samp{\tweak} had to be redesigned where +optional symbol arguments were involved. Please check the +respective music function documentation for details. @item -Glissandi can now span multiple lines. +Several commands now accept symbol lists (conveniently entered as +dot-separated words) for various kinds of arguments. These +include @samp{\accidentalStyle}, @samp{\alterBroken}, +@samp{\footnote}, @samp{\hide}, @samp{\omit}, +@samp{\overrideProperty}, @samp{\shape}, and @samp{\tweak}. + +@item +The bar line user interface has changed. Bar glyphs now resemble the +appearance of the bar line, so a left repeat sign has to be coded +as @code{.|:}. The command @code{\defineBarLine} provides an easy way +to define additional bar line styles. + +@item +Accidentals in the key signature may be printed in octaves other +than their traditional positions, or in multiple octaves. +@lilypond[quote,relative=0] +\override Staff.KeySignature #'flat-positions = #'((-5 . 5)) +\override Staff.KeyCancellation #'flat-positions = #'((-5 . 5)) +\clef bass \key es \major es g bes d +\clef treble \bar "||" \key es \major es g bes d +\override Staff.KeySignature #'sharp-positions = #'(2) +\bar "||" \key d \major b fis b2 +@end lilypond @end itemize @ifhtml For older news, go to +@uref{http://lilypond.org/doc/v2.16/Documentation/changes/}, @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.