X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fchanges.tely;h=f8dd50a2e429b7129af277ac5f814efcdbe59352;hb=77320a48ed671c658f04256d087880c1701eb746;hp=f2266666d0c793686afba12d6aec076e92a71fb4;hpb=29d5e0a64d0eee69e4ebee1e76e4df26ae58190b;p=lilypond.git diff --git a/Documentation/changes.tely b/Documentation/changes.tely index f2266666d0..f8dd50a2e4 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -29,14 +29,14 @@ See user manual, \NAME\ @end macro -@documentencoding utf-8 +@documentencoding UTF-8 @documentlanguage en @afourpaper @finalout @node Top -@top New features in 2.18 since 2.16 +@top New features in 2.20 since 2.18 @allowcodebreaks false @@ -62,321 +62,793 @@ which scares away people. @end ignore @item -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 +Additional bass strings (for lute tablature) are supported. +@lilypond[quote,verbatim] +m = { f'4 d' a f d a, g, fis, e, d, c, \bar "|." } + +\score { + \new TabStaff \m + \layout { + \context { + \Score + tablatureFormat = #fret-letter-tablature-format + } + \context { + \TabStaff + stringTunings = \stringTuning + additionalBassStrings = \stringTuning + fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k") + } + } +} +@end lilypond -One has to write a digit on both sides of the dot -- values like -@code{4.} or @code{-.3} are not allowed. +@item +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 -Decimal fractions are also not accepted in @code{\chordmode}. +@item +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 -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 +A new page breaking function @code{ly:one-line-auto-height-breaking} +places a whole score on a single line and changes the page width +to match, just like @code{ly:one-line-breaking}. The difference is that +it also automatically modifies the height of the page to fit the height +of the music. -\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. } ->> +@item +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 -The articulation shorthand for @code{\staccatissimo} has been -renamed from @code{-|} to@tie{}@code{-!}. +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. @item -Tempo change ranges are now written as @code{\tempo 4 = 60 - 68} -rather than @code{\tempo 4 = 60 ~ 68}. +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 -Grob @code{OctavateEight} was renamed to @code{ClefModifier}. -Related context properties were renamed from @code{xxxOctavationyyy} -to @code{xxxTranspositionyyy}. +@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 -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}: +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] -\relative c { c'4 \absolute { f'' g'' } c } +\markup { + \combine + \filled-box #'(-1 . 15) #'(-3 . 4) #1 + \override #'(thickness . 3) + \whiteout whiteout-box +} +\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 @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. +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 -A new command @code{\single} can be used for converting a property -override into a tweak to be applied on a single music expression: +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] +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 } -@lilypond[quote,verbatim,relative=2] -1 +{ c' \highlight d' e'2-\highlight -! } @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 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. -@lilypond[quote,verbatim] -\new Staff \with { \omit Clef } -\relative c'' 1 +@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 -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: +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[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 +@lilypond[verbatim,quote,relative=1] +\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 -This is mainly useful for writing music functions that need to -have some property changed just for the duration of the function. +@item +It is now possible to override the @code{text} property of +chord names. + +@lilypond[verbatim,fragment,quote] +<< +\new ChordNames \chordmode { + a' b c:7 + \once \override ChordName.text = #"foo" + d +} +>> +@end lilypond @item -@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. +Improved horizontal alignment when using @code{TextScript}, +with @code{DynamicText} or @code{LyricText}. @item -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. +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 -The meaning of @code{instrumentTransposition} has been reversed. -After +@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 -\set instrumentTransposition = #@{ b #@} +\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 -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 -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, +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 +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 +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 +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 -\transpose c' f' \transposition bes' +\keepWithTag #'violinI @end example -was equivalent to @code{\transposition f'}. Now it stays -equivalent to @code{\transposition bes'}. + +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 @code{\addlyrics} function now works with arbitrary contexts +incuding @code{Staff}. + +@item +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 +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 -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: +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 )) + } + } + 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)) + } + } +} +@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 -@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 +@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 -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 +@lilypond[quote,verbatim,papersize=a6] +\markup \justify-line {oooooo oooooo oooooo oooooo} +\markup \justify-line {ooooooooo oooooooo oo ooo} @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 -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 +@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 + 4 8. 16 8 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 -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}. +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 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. +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 +@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 +Scheme functions and identifiers can now be used as output definitions. + +@item +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 -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. +@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 -@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) +@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 -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. +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 -The @code{\clef} command supports optional transposition: -@lilypond[verbatim,quote,relative=1] -\clef "treble_(8)" -c2 c -\clef "bass^[15]" -c2 c +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 -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 +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 + +@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 -\override #'(Voice TextSpanner) bound-details.left.text = "rit." +@{ c4 d4 8 @} @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 +Beaming exceptions can now be constructed using the +@code{\beamExceptions} scheme function. One can now write + +@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 -\override Voice.TextSpanner.bound-details.left.text = "rit." +\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 -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 -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 + +@item +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 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 @ifhtml For older news, go to +@uref{http://lilypond.org/doc/v2.18/Documentation/changes/}, @uref{http://lilypond.org/doc/v2.16/Documentation/changes/}, -@uref{http://lilypond.org/doc/v2.14/Documentation/changes/}, or @uref{../,go back} to the Documentation index.