X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fchanges.tely;h=060aa464a17757b87eb2fc8770e8a10e87fb2701;hb=fd8e4f4ad347ef8f96c2e069be83f63f0f9da466;hp=570c1c308aff4853cfbf770b353d130a7928ce18;hpb=2fef7b7eb7ac5d7a2ed237bf22a6ec6fe5d946d9;p=lilypond.git diff --git a/Documentation/changes.tely b/Documentation/changes.tely index 570c1c308a..060aa464a1 100644 --- a/Documentation/changes.tely +++ b/Documentation/changes.tely @@ -40,286 +40,497 @@ See user manual, \NAME\ @allowcodebreaks false -@itemize @ignore HINTS - * add new items at the top - * only show verbatim input for syntax/input changes - * try to be as brief possible in those cases - * don't try to provide real-world examples, they often get too big, which scares away people. - * Write complete sentences. - * only show user-visible changes. @end ignore -@item -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. + + +@subheading New for musical notation + + +@strong{Displaying pitch improvements} + +@itemize @item -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" - } -} +Pitches that have a sharp or flat in their name now need to be +hyphenated; -{ - \once \override HorizontalBracketText.text = "a" - c''\startGroup d''\stopGroup - e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup -} -@end lilypond +@example +\key a-flat \major +@end example + +@noindent +instead of: + +@example +\key aflat \major +@end example + +@noindent +Pitches that contain @emph{double} sharps or flats in their name, +however, do not need a second hyphen. For example using the Dutch +notation @code{cisis}: + +@example +\key c-sharpsharp \major +@end example @item -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 +Accidental rules can now be defined @emph{across} @code{ChoirStaff} +contexts. @item -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;" } +Two new accidental rules have been added. Both combine the +characteristics of @code{modern-voice}, @code{piano} and their +equivalents: +@code{choral} -\markuplist -\override #'(padding . 2) -\table #'(0 -1) { - "default" +@lilypond[quote] +musicA = { + << + \relative { cis''8 fis, bes4 8 f bis4 | cis2. 4 | } + \\ + \relative { ais'2 cis, | fis8 b a4 cis2 | } + >> +} - \fretMrkp +musicB = { \clef bass \new Voice { \voiceTwo \relative { + 8[ \change Staff = up + cis' cis \change Staff = down + ] \showStaffSwitch \change Staff = up + dis'4 | \change Staff = down + 4 gis 2 | + } + } +} - "fret-distance" +\new ChoirStaff { << \context Staff = "up" { + \accidentalStyle choral \musicA } + \context Staff = "down" { \musicB } >> +} +@end lilypond - \override #'(fret-diagram-details . ((fret-distance . 2))) - \fretMrkp +@noindent +This is the now the default accidental style for @code{ChoirStaff}. - "string-distance" +@code{choral-cautionary} - \override #'(fret-diagram-details . ((string-distance . 2))) - \fretMrkp +@lilypond[quote] +musicA = { + << + \relative { cis''8 fis, bes4 8 f bis4 | + cis2. 4 | } + \\ + \relative { ais'2 cis, | fis8 b a4 cis2 | } + >> +} + +musicB = { \clef bass \new Voice { \voiceTwo \relative { + 8[ \change Staff = up + cis' cis \change Staff = down + ] \showStaffSwitch \change Staff = up + dis'4 | \change Staff = down + 4 gis 2 | + } + } +} + +\new ChoirStaff { << \context Staff = "up" { + \accidentalStyle choral-cautionary \musicA } + \context Staff = "down" { \musicB } >> } @end lilypond -@item -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. +@noindent +The same as @code{choral} but with the extra accidentals typeset as +cautionaries instead. -@item -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. +@noindent +Also see @ruser{Automatic accidentals}. @item -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{ @dots{} }. +Four new clef glyphs are now available; @q{GG} (double-G), +@q{Tenor G}, @q{varC} plus related tessitura and +@q{Varpercussion}: + +@multitable @columnfractions .30 .2 .30 .2 + +@headitem +Example +@tab +Output +@tab +Example +@tab +Output @item -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. +@code{\clef GG} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef GG c1 +@end lilypond +@tab +@code{\clef tenorG} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef tenorG c1 +@end lilypond @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. +@code{\clef varC} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef varC c1 +@end lilypond +@tab +@code{\clef altovarC} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef altovarC c1 +@end lilypond @item -There is a new command @code{\=} for specifying the -@code{spanner-id} for simultaneous slurs and phrasing slurs. -@lilypond[verbatim,quote] -\fixed c' { - 2 -} +@code{\clef tenorvarC} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef tenorvarC c1 +@end lilypond +@tab +@code{\clef baritonevarC} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef baritonevarC c1 @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. +@code{\clef varpercussion} +@tab +@lilypond[line-width=3\cm,notime,ragged-right,relative=1] +\clef varpercussion c1 +@end lilypond -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. +@end multitable + +@noindent +Also see @emph{Clef styles}. @item -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 } +French note names are now explicitly defined -- previously they were +aliased to Italian note names. The @var{d} pitch may be entered as +either @code{re} or @code{ré}. + +@lilypond[fragment,verbatim,quote,ragged-right,relative=1] +\language "français" +do ré mi fa | sol la si do | ré1 @end lilypond -and -@example -\tagGroup violin,oboe,bassoon -@end example -@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 } +@noindent +Double sharps are entered using an @code{x} suffix. + +@lilypond[fragment,verbatim,quote,ragged-right,relative=2] +\language "français" +dob, rebb misb fabsb | sold ladd six dosd | rédsd1 @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 -\paper @{ - \void \displayScheme \system-system-spacing.basic-distance -@} -@end example +@end itemize -In combination with the previously mentioned changes, this allows -setting and referencing pseudovariables like @code{violin.1}. + +@strong{Rhythm improvements} + +@itemize @item -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. +Multi-measure rests have length according to their total duration, +under the control of @code{MultiMeasureRest.space-increment}. Note the +default value is @code{2.0}. + +@lilypond[fragment,verbatim,quote] +\compressFullBarRests +R1*2 R1*4 R1*64 R1*16 +@end lilypond + +@lilypond[fragment,verbatim,quote] +\compressFullBarRests +\override Staff.MultiMeasureRest.space-increment = 2.5 +R1*2 R1*4 R1*64 R1*16 +@end lilypond @item -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. +Improvements to the @code{\partial} command have been made when used +with parallel music and/or multiple contexts. @item -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 "|." } +It is now possible to change the time signature mid-measure by using +both the @code{\time} and @code{\partial} commands together. -\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") - } - } -} +@lilypond[verbatim,quote,relative=1] +f f f f | f2. \bar "||" +\time 3/4 \partial 4 +f8 8 | f2 f8 f | @end lilypond @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" - } -} +Isolated durations in music now stand for unpitched notes. Pitches are +taken from the preceding note or chord. This is especially convenient +for specifying rhythms in both music and scheme functions and can help +improve the readability of LilyPond source files. + +@lilypond[verbatim,quote,fragment,relative=2] +c64[ 64] 32 16 8^- 4~ 2 | 1 @end lilypond -@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" "!" - } +@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 @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 -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 +Beaming exceptions can now be constructed using the simpler +@code{\beamExceptions} scheme function. Previously, this would have +required writing: - \translate #'(3 . 3) - \override #'(thickness . 4) - \draw-squiggle-line #0.5 #'(3 . -3) ##t +@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 + ))) - \translate #'(6 . 0) - \override #'(angularity . -5) - \draw-squiggle-line #0.5 #'(-3 . -3) ##t +\time #'(2 1) 3/16 +c16 c c +\repeat unfold 6 @{ c32 @} +@end example - \translate #'(3 . -3) - \override #'(angularity . 2) - \override #'(height . 0.3) - \override #'(orientation . -1) - \draw-squiggle-line #0.2 #'(-3 . 3) ##t +@noindent +With the new @code{\beamExceptions} scheme function, this becomes: + +@lilypond[verbatim,quote,relative=1] +\set Timing.beamExceptions = + \beamExceptions { 32[ 32] 32[ 32] 32[ 32] } + +\time #'(2 1) 3/16 +c16 c c | +\repeat unfold 6 { c32 } | +@end lilypond + +@noindent +with multiple exceptions separated by bar checks. Note that writing the +exception pattern without pitches is convenient but not mandatory (also +see the previous documented rhythm improvement -- +@ruser{Isolated durations in music now stand for unpitched notes}. + +@item +The positioning of tuplet numbers for kneed beams has been improved. +Previously, tuplet numbers were placed according to the position of the +tuplet bracket, even if the bracket was not printed. This could lead to +tuplet numbers being @q{stranded}. + +@noindent +Previously: + +@lilypond[fragment,quote,relative=1] +% This is a contrived example to simulate the previous behaviour +\time 3/4 +\override Beam.auto-knee-gap = 3 +\override TupletNumber.knee-to-beam = ##f +\once \override TupletBracket.bracket-visibility = ##t +\tuplet 3/2 4 { g8 c'' e, } +\tuplet 3/2 4 { g,,8 c'' e, } +\once \override TupletBracket.bracket-visibility = ##t +\tuplet 3/2 4 { c'8 g,, e'' } +\tuplet 3/2 4 { c'8 g,, e'' } +\once \override TupletBracket.bracket-visibility = ##t +\tuplet 2/2 4 { g,8[ e''] } +\tuplet 2/2 4 { g,,8[ e''] } +@end lilypond + +@noindent +Now, when the bracket is not drawn, tuplet numbers are positioned +closer. + +@lilypond[fragment,quote,relative=1] +% This is a contrived example to simulate the previous behaviour +\time 3/4 +\override Beam.auto-knee-gap = 3 +\override TupletBracket.bracket-visibility = ##t +\tuplet 3/2 4 { g8 c'' e, } +\once \override TupletBracket.bracket-visibility = ##f +\tuplet 3/2 4 { g,,8 c'' e, } +\tuplet 3/2 4 { c'8 g,, e'' } +\once \override TupletBracket.bracket-visibility = ##f +\tuplet 3/2 4 { c'8 g,, e'' } +\tuplet 2/2 4 { g,8[ e''] } +\once \override TupletBracket.bracket-visibility = ##f +\tuplet 2/2 4 { g,,8[ e''] } +@end lilypond + +@item +Collision detection for the kneed beam tuplet numbers has also been +added, shifting the offset horizontally if the number is too close to +an adjoining note column (but still preserving the number's vertical +distance). In the event of a collision -- for example with an +accidental -- the tuplet number will be shifted vertically instead. If +the tuplet number is itself too large to fit within the available space, +the original, @q{bracket-based}, positioning system will be used +instead. + +@lilypond[fragment,quote,relative=1] +\time 2/4 +\override Beam.auto-knee-gap = 3 +\tuplet 3/2 4 { g8 c'' e, c'8 g,, e'' } +\tuplet 3/2 4 { g,,8 e''' g,, g,8 e''' ges,, } +@end lilypond + +@noindent +The original kneed-beam tuplet behavior is still available with a new, +@code{knee-to-beam} property for the @code{TupletNumber} layout object. + +@lilypond[verbatim,fragment,quote,relative=1] +\time 2/4 +\override Beam.auto-knee-gap = 3 +\override TupletNumber.knee-to-beam = ##f +\override TupletBracket.bracket-visibility = ##t +\tuplet 3/2 4 { g8 c'' e, } +\once \override TupletBracket.bracket-visibility = ##f +\tuplet 3/2 4 { g,,8 c'' e, } +@end lilypond + +@end itemize + + +@strong{Expressive mark improvements} + +@itemize + +@item +The ends of hairpins may now be fine-tuned using the @code{shorten-pair} +grob property. This previously only affected text-spanners (e.g. +@code{TupletBracket} and @code{OttavaBracket}). + +@noindent +Positive and negative values offset right and left respectively. + +@lilypond[quote,verbatim,relative=2] +\once \override Hairpin.shorten-pair = #'(0 . 2) +a1\< | a2 a\! + +\once \override Hairpin.shorten-pair = #'(2 . 0) +\once \override Hairpin.stencil = #constante-hairpin +a1\< | a2 a\! + +\once \override Hairpin.shorten-pair = #'(-1 . -1) +\once \override Hairpin.stencil = #flared-hairpin +a1\< | a2 a\! +@end lilypond + +@item +Individual slurs and phrasing slurs may now be started from an explicit +note within a chord. + +@lilypond[quote,verbatim,relative=1] +1 | | +@end lilypond + +@lilypond[quote,verbatim,relative=1] +1 | | +@end lilypond + +@item +A new command @code{\=X} has been added -- where @q{X} can be any +non-negative integer or symbol -- so that a specific @q{id} can be +assigned to the start and end of slurs and phrasing slurs. + +@noindent +This is useful when simultaneous slurs are required or if one slur +overlaps another or when nesting short slurs within a longer one. + +@lilypond[quote,verbatim,relative=2] +1 | | + | | +@end lilypond + +@noindent +Also see @ruser{Expressive marks as curves}. + +@end itemize + + +@strong{Repeat notation improvements} + +@itemize + +@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 +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. + +@end itemize + + +@strong{Staff notation improvements} + +@itemize + +@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 +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 @item @@ -328,37 +539,133 @@ acts exactly like @code{\RemoveEmptyStaves}, except for also removing empty staves on the first system in a score. @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" -} +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. -m = { - c''1 \prall -\tweak text \markup \tie "131" -1 -} +@lilypond[quote,verbatim,papersize=a6] +\markup \fill-line {oooooo oooooo oooooo oooooo} +\markup \fill-line {ooooooooo oooooooo oo ooo} +@end lilypond -{ \voiceOne \m \voiceTwo \m } +@lilypond[quote,verbatim,papersize=a6] +\markup \justify-line {oooooo oooooo oooooo oooooo} +\markup \justify-line {ooooooooo oooooooo oo ooo} @end lilypond +@end itemize + + +@strong{Editorial annotation improvements} + +@itemize + @item -@code{TabStaff} is now able to print micro-tones for bendings etc. +It is now possible to add text to analysis brackets through the +@code{HorizontalBracketText} object. @lilypond[quote,verbatim] \layout { \context { - \Score - supportNonIntegerFret = ##t + \Voice + \consists "Horizontal_bracket_engraver" } } -mus = \relative { c'4 cih d dih } +{ + \once \override HorizontalBracketText.text = "a" + c''\startGroup d''\stopGroup + e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup +} +@end lilypond -<< - \new Staff << \clef "G_8" \mus >> - \new TabStaff \mus ->> +@end itemize + + +@strong{Text formatting improvements} + +@itemize + +@item +Support for making it easier to use alternative @q{music} fonts other +than the default Emmentaler in LilyPond has been added. See +@ruser{Replacing the notation font} for more information. + +@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 @item @@ -399,158 +706,422 @@ customized. @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. +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] -\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 | +\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 -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). +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 -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}. +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 +@end itemize + + + +@subheading New for specialist notation + + +@strong{Vocal music improvements} + +@itemize + +@item +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 @code{\addlyrics} function now works with arbitrary contexts +incuding @code{Staff}. + +@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). + +@end itemize + + +@strong{Unfretted and fretted string instrument improvements} + +@itemize + +@item +A new note head style for Tabulature has been added -- +@code{TabNoteHead.style = #'slash}. + +@item +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] -bold-red-markup = \markup \bold \with-color #red \etc -highlight = \tweak font-size 3 \tweak color #red \etc +fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" } -\markup \bold-red "text" -\markuplist \column-lines \bold-red { One Two } +\markuplist +\override #'(padding . 2) +\table #'(0 -1) { + "default" -{ c' \highlight d' e'2-\highlight -! } + \fretMrkp + + "fret-distance" + + \override #'(fret-diagram-details . ((fret-distance . 2))) + \fretMrkp + + "string-distance" + + \override #'(fret-diagram-details . ((string-distance . 2))) + \fretMrkp +} @end lilypond @item -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. +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 -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. +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. -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. +@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 -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 +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 @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 +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 +@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 + +@end itemize + + +@strong{Chord notation improvements} + +@itemize + +@item @code{\chordmode} can now use @code{< >} and @code{<< >>} +constructs. + +@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 + +@end itemize + + + +@subheading New for input and output + + +@strong{Input structure improvements} + +@itemize + +@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. + +@end itemize + + +@strong{Titles and header improvements} + +@itemize + +@item +Page numbers may now be printed in roman numerals, by setting the +@code{page-number-type} paper variable. + +@end itemize + + +@strong{Input file improvements} + +@itemize + +@item +A new command @code{\tagGroup} has now been added. This complements +the existing @code{\keepWithTag} and @code{\removeWithTag} commands. +For Example: + @example -\key a-flat \major +\tagGroup #'(violinI violinII viola cello) @end example -instead of the previous + +declares a list of @q{tags} that belong to a single @q{tag group}. + @example -\key aflat \major +\keepWithTag #'violinI @end example -Double accidentals do not get another hyphen, so the Dutch -@code{cisis} has the long English notename @code{c-sharpsharp}. +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. + +@end itemize + + +@strong{Output improvements} + +@itemize @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 +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 +The @code{output-classic-framework} procedure and the @code{-dclip-systems} +are now available with the @code{SVG} backend. @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 +An argument, @code{-dcrop}, has been added, formatting @code{SVG} and +@code{PDF} output without margins or page-breaks. @item -Page numbers may now be printed in roman numerals, by setting the -@code{page-number-type} paper variable. +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{ @dots{} }. + +@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. + +@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: -@item -It is now possible to use @code{\time} and @code{\partial} -together to change the time signature in mid measure. +@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}. -@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 +@end itemize -@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 +@strong{MIDI improvements} -@item -Improved horizontal alignment when using @code{TextScript}, -with @code{DynamicText} or @code{LyricText}. +@itemize @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. +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 -@code{InstrumentName} now supports @code{text-interface}. +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 There is now support for controlling the @q{expression level} of @@ -584,240 +1155,68 @@ This can be used to alter the perceived volume of even sustained notes @end example @item -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. +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 @code{\chordmode} can now use @code{< >} and @code{<< >>} -constructs. +@end itemize -@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 +@strong{Extracting music improvements} -declares a list of @q{tags} that belong to a single @q{tag group}. +@itemize +@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 -\keepWithTag #'violinI +@{ c4 d4 8 @} @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 @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 -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 - -@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 - 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 +@end itemize -@item -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. +@subheading New for spacing issues -@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. +@strong{Page breaking improvements} -@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 +@itemize @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). +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 -Scheme functions and identifiers can now be used as output definitions. +@end itemize + + +@strong{Vertical and Horizontal spacing improvements} + +@itemize @item -Scheme expressions can now be used as chord constituents. +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 Improved visual spacing of small and regular @q{MI} Funk and Walker @@ -831,24 +1230,61 @@ well as with the thin variants. @rinternals{LeftEdge}. @item -Added a new @code{make-path-stencil} function that supports all -@code{path} commands both relative and absolute: +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. -@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: +@item +Improved horizontal alignment when using @code{TextScript}, +with @code{DynamicText} or @code{LyricText}. -@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}. +@end itemize + + + +@subheading New for changing defaults + +@itemize + +@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 + +@end itemize + + + +@subheading New for Internal interfaces and functions + +@itemize + +@item +The music and grob property @code{spanner-id}, used for distinguishing +simultaneous slurs and phrasing slurs, has been changed from a string to +a @emph{key} which can be either a non-negative integer or symbol (also +see the previous documented expressive mark improvement -- +@emph{A new command \=X has been added}). @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}; +Currently the default set restores @q{current meter}: @lilypond[verbatim,fragment,quote,relative=2] \time 3/4 @@ -861,7 +1297,7 @@ g2. | @end lilypond @noindent -@q{measure position}; +@q{measure position}: @lilypond[verbatim,fragment,quote,relative=2] \time 3/4 @@ -876,7 +1312,7 @@ g2. | @end lilypond @noindent -and @q{chord changes}; +and @q{chord changes}: @lilypond[verbatim,fragment,quote] << @@ -896,172 +1332,122 @@ and @q{chord changes}; @end lilypond @item -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. +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 -A new note head style for Tabulature has been added; -@code{TabNoteHead.style = #'slash}. +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 -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 +Scheme functions and identifiers can now be used as output definitions. @item -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: +Scheme expressions can now be used as chord constituents. -@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 +@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] -\new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | } +\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 -@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 +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 -@{ c4 d4 8 @} +\tagGroup violin,oboe,bassoon @end example @item -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 } | +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 -@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 - +@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 -\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 - ))) +\paper @{ + \void \displayScheme \system-system-spacing.basic-distance +@} @end example -@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. +In combination with the previously mentioned changes, this allows +setting and referencing pseudovariables like @code{violin.1}. @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. +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 @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{InstrumentName} now supports @code{text-interface}. -@code{serif}, @code{sans-serif}, and @code{monospace} are -@code{generic-family} in SVG and CSS specifications. +@item +The @code{thin-kern} property of the @code{BarLine} grob has been +renamed to @code{segno-kern}. -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 +@item +@code{KeyCancellation} grobs now ignore cue clefs (like +@code{KeySignature} grobs do). -@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 +Add support for @code{\once@tie{}\unset} @end itemize @@ -1071,7 +1457,6 @@ For older news, go to @uref{http://lilypond.org/doc/v2.16/Documentation/changes/}, or @uref{../,go back} to the Documentation index. - @end ifhtml @bye