X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=NEWS.txt;h=ed819b19e343888887a555463893758d4ee4495a;hb=refs%2Fheads%2Fdebian-experimental;hp=ac7ad1d469bac66018b7a3c410c2ef93358bdbc7;hpb=63a0195213dbc749dc5766035b71280893af2b9a;p=lilypond.git diff --git a/NEWS.txt b/NEWS.txt index ac7ad1d469..ed819b19e3 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -1,190 +1,366 @@ New features in 2.20 since 2.18 ******************************* - • A new ‘output-attributes’ grob property is now used for svg output - instead of the ‘id’ grob property. It allows multiple attributes - to be defined as an association list. For example, ‘#'((id . 123) - (class . foo) (data-whatever . “bar”))’ will produce the following - group tag in an SVG file: ‘ ... ’. +New for musical notation +------------------------ - • Slurs and phrasing slurs may now be started from individual notes - in a chord. Several simultanous slurs per ‘Voice’ need to be - distinguished by ‘spanner-id’ setting. +*Displaying pitch improvements* - • The music and grob property ‘spanner-id’ for distinguishing - simultaneous slurs and phrasing slurs has been changed from a - string to a ‘key’, a non-negative integer or symbol. + • Pitches that have a sharp or flat in their name now need to be + hyphenated; + + \key a-flat \major + + instead of: + + \key aflat \major + + Pitches that contain _double_ sharps or flats in their name, + however, do not need a second hyphen. For example using the Dutch + notation ‘cisis’: + + \key c-sharpsharp \major + + • Accidental rules can now be defined _across_ ‘ChoirStaff’ contexts. + + • Two new accidental rules have been added. Both combine the + characteristics of ‘modern-voice’, ‘piano’ and their equivalents: + ‘choral’ - • There is a new command ‘\=’ for specifying the ‘spanner-id’ for - simultaneous slurs and phrasing slurs. - \fixed c' { - 2 - } image of music - • Blocks introduced with ‘\header’ can be stored in variables and - used as arguments to music and scheme functions and as the body of - ‘#{...#}’ constructs. They are represented as a Guile module. + This is the now the default accidental style for ‘ChoirStaff’. - While ‘\book’, ‘\bookpart’, ‘\score’, ‘\with’, ‘\layout’, ‘\midi’, - ‘\paper’ blocks can be passed around in similar manner, they are - represented by different data types. + ‘choral-cautionary’ - • Dot-separated symbol lists like ‘FretBoard.stencil’ were already - supported as of version 2.18. They may now also contain unsigned - integers, and may alternatively be separated by commata. This - allows usage such as - { \time 2,2,1 5/8 g'8 8 8 8 8 } image of music - and - \tagGroup violin,oboe,bassoon + The same as ‘choral’ but with the extra accidentals typeset as + cautionaries instead. - • Such lists may also be used in expressions for assignments, sets, - and overrides. This allows usage such as - { \unset Timing.beamExceptions - \set Timing.beatStructure = 1,2,1 - g'8 8 8 8 8 8 8 8 } + Also see *note (lilypond-notation)Automatic accidentals::. + + • Four new clef glyphs are now available; ‘GG’ (double-G), ‘Tenor G’, + ‘varC’ plus related tessitura and ‘Varpercussion’: + + Example Output Example Output + + ---------------------------------------------------------------------------- + ‘\clef GG’ image of music ‘\clef tenorG’ image of music + ‘\clef varC’ image of music ‘\clef altovarC’ image of music + ‘\clef tenorvarC’ image of music ‘\clef baritonevarC’ image of music + ‘\clef image of music + varpercussion’ + + Also see _Clef styles_. + + • French note names are now explicitly defined – previously they were + aliased to Italian note names. The D pitch may be entered as + either ‘re’ or ‘ré’. + + \language "français" + do ré mi fa | sol la si do | ré1 image of music - • Association list elements could previously be assigned values - individually (for example, paper variables like - ‘system-system-spacing.basic-distance’). They may now be also - referenced in this manner, as with - \paper { - \void \displayScheme \system-system-spacing.basic-distance - } + Double sharps are entered using an ‘x’ suffix. - In combination with the previously mentioned changes, this allows - setting and referencing pseudovariables like ‘violin.1’. + \language "français" + dob, rebb misb fabsb | sold ladd six dosd | rédsd1 + image of music - • 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. + *Rhythm improvements* - • French note names are now defined specifically instead of being - aliased to Italian note names: in addition to the generic - Italian-derived syntax, the D pitch may be entered as ‘ré’. Double - sharps may also be entered using the ‘-x’ suffix. + • Multi-measure rests have length according to their total duration, + under the control of ‘MultiMeasureRest.space-increment’. Note the + default value is ‘2.0’. - • Additional bass strings (for lute tablature) are supported. - m = { f'4 d' a f d a, g, fis, e, d, c, \bar "|." } + \compressFullBarRests + R1*2 R1*4 R1*64 R1*16 + image of music - \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") - } - } - } + \compressFullBarRests + \override Staff.MultiMeasureRest.space-increment = 2.5 + R1*2 R1*4 R1*64 R1*16 image of music - • The markup-list-command ‘\table’ is now available. Each column may - be aligned differently. - \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" - } - } + • Improvements to the ‘\partial’ command have been made when used + with parallel music and/or multiple contexts. + + • It is now possible to change the time signature mid-measure by + using both the ‘\time’ and ‘\partial’ commands together. + + f f f f | f2. \bar "||" + \time 3/4 \partial 4 + f8 8 | f2 f8 f | image of music - • A new markup-command, ‘\with-dimensions-from’, makes - ‘\with-dimensions’ easier to use by taking the new dimensions from - a markup object, given as first argument. - \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" "!" - } + • 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. + + c64[ 64] 32 16 8^- 4~ 2 | 1 + image of music + + \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 | } image of music - • A new page breaking function ‘ly:one-line-auto-height-breaking’ - places a whole score on a single line and changes the page width to - match, just like ‘ly:one-line-breaking’. The difference is that it - also automatically modifies the height of the page to fit the - height of the music. + • Beaming exceptions can now be constructed using the simpler + ‘\beamExceptions’ scheme function. Previously, this would have + required writing: - • Markup-command ‘\draw-squiggle-line’ is now available. Customizing - is possible with overrides of ‘thickness’, ‘angularity’, ‘height’ - and ‘orientation’ - \markup - \overlay { - \draw-squiggle-line #0.5 #'(3 . 3) ##t + \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 #'(3 . 3) - \override #'(thickness . 4) - \draw-squiggle-line #0.5 #'(3 . -3) ##t + \time #'(2 1) 3/16 + c16 c c + \repeat unfold 6 { c32 } - \translate #'(6 . 0) - \override #'(angularity . -5) - \draw-squiggle-line #0.5 #'(-3 . -3) ##t + With the new ‘\beamExceptions’ scheme function, this becomes: - \translate #'(3 . -3) - \override #'(angularity . 2) - \override #'(height . 0.3) - \override #'(orientation . -1) - \draw-squiggle-line #0.2 #'(-3 . 3) ##t + \set Timing.beamExceptions = + \beamExceptions { 32[ 32] 32[ 32] 32[ 32] } + + \time #'(2 1) 3/16 + c16 c c | + \repeat unfold 6 { c32 } | + image of music + + 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 – + *note (lilypond-notation)Isolated durations in music now stand for + unpitched notes::. + + • 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 ‘stranded’. + + Previously: + + image of music + + Now, when the bracket is not drawn, tuplet numbers are positioned + closer. + + image of music + + • 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, ‘bracket-based’, positioning + system will be used instead. + + image of music + + The original kneed-beam tuplet behavior is still available with a + new, ‘knee-to-beam’ property for the ‘TupletNumber’ layout object. + + \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, } + image of music + + *Expressive mark improvements* + + • The ends of hairpins may now be fine-tuned using the ‘shorten-pair’ + grob property. This previously only affected text-spanners (e.g. + ‘TupletBracket’ and ‘OttavaBracket’). + + Positive and negative values offset right and left respectively. + + \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\! + image of music + + • Individual slurs and phrasing slurs may now be started from an + explicit note within a chord. + + 1 | | + image of music + + 1 | | + image of music + + • A new command ‘\=X’ has been added – where ‘X’ can be any + non-negative integer or symbol – so that a specific ‘id’ can be + assigned to the start and end of slurs and phrasing slurs. + + This is useful when simultaneous slurs are required or if one slur + overlaps another or when nesting short slurs within a longer one. + + 1 | | + | | + image of music + + Also see *note (lilypond-notation)Expressive marks as curves::. + + *Repeat notation improvements* + + • The visual style of tremolo slashes (shape, style and slope) is now + more finely controlled. + image of music + + • The music function ‘\unfoldRepeats’ can now take an optional + argument-list specifying which type(s) of repeated music should be + unfolded. Possible entries are ‘percent’, ‘tremolo’, ‘volta’. If + the optional argument-list is unspecified, ‘repeated-music’ will be + used, unfolding all. + + *Staff notation improvements* + + • A new command ‘\magnifyStaff’ has been added which scales staff + sizes, staff lines, bar lines, beamlets and horizontal spacing + generally at the ‘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. + + • A new command ‘\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. + + \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 + } } + >> image of music • A new command, ‘\RemoveAllEmptyStaves’, has been made available, which acts exactly like ‘\RemoveEmptyStaves’, except for also removing empty staves on the first system in a score. - • Markup-commands ‘\undertie’ and ‘\overtie’ are now available, as - well as the generic markup-command ‘\tie’. - \markup { - \undertie "undertied" - \overtie "overtied" - } + • A new markup command ‘\justify-line’ has been added. Similar to + the ‘\fill-line’ markup command except that instead of setting + _words_ in columns, the ‘\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 - } + \markup \fill-line {oooooo oooooo oooooo oooooo} + \markup \fill-line {ooooooooo oooooooo oo ooo} + image of music - { \voiceOne \m \voiceTwo \m } + \markup \justify-line {oooooo oooooo oooooo oooooo} + \markup \justify-line {ooooooooo oooooooo oo ooo} image of music - • ‘TabStaff’ is now able to print micro-tones for bendings etc. + *Editorial annotation improvements* + + • It is now possible to add text to analysis brackets through the + ‘HorizontalBracketText’ object. \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 + } + image of music - << - \new Staff << \clef "G_8" \mus >> - \new TabStaff \mus - >> + *Text formatting improvements* + + • Support for making it easier to use alternative ‘music’ fonts other + than the default Emmentaler in LilyPond has been added. See *note + (lilypond-notation)Replacing the notation font:: for more + information. + + • Default text fonts have been changed from ‘Century Schoolbook L’, + ‘sans-serif’, and ‘monospace’. + + For ‘svg’ backend: + Family Default font + ----------------------------------- + _roman_ ‘serif’ + _sans_ ‘sans-serif’ + _typewriter_‘monospace’ + + ‘serif’, ‘sans-serif’, and ‘monospace’ are ‘generic-family’ in SVG + and CSS specifications. + + For other backends: + Family Default font (alias) Alias definition lists + ---------------------------------------------------------------------------- + _roman_ ‘LilyPond Serif’ TeX Gyre Schola, C059, Century + SchoolBook URW, Century Schoolbook L, + DejaVu Serif, ..., serif + _sans_ ‘LilyPond Sans TeX Gyre Heros, Nimbus Sans, Nimbus + Serif’ Sans L, DejaVu Sans, ..., sans-serif + _typewriter_‘LilyPond Monospace’ TeX Gyre Cursor, Nimbus Mono PS, + Nimbus Mono, Nimbus Mono L, DejaVu + Sans Mono, ..., monospace + + ‘LilyPond Serif’, ‘LilyPond Sans Serif’, and ‘LilyPond Monospace’ + are font aliases defined in the LilyPond dedicated FontConfig + configuration file ‘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 ‘00-lilypond-fonts.conf’ under the + installed directory. + + • When using OpenType fonts, font features can be used. Note: Not + all OpenType fonts have all functions. + + % 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 εφπρθ } } image of music • Two new styles of whiteout are now available. The ‘outline’ style @@ -222,197 +398,113 @@ New features in 2.20 since 2.18 } image of music - • All of ‘\override’, ‘\revert’, ‘\set’, and ‘\unset’ now work with - the ‘\once’ prefix for making one-time settings. - \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 | - } - image of music - - • When outputting MIDI, LilyPond will now store the ‘title’ defined - in a score’s ‘\header’ block (or, if there is no such definition on - the ‘\score’ level, the first such definition found in a ‘\header’ - block of the score’s enclosing ‘\bookpart’, ‘\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 ‘midititle’ ‘\header’ field independently of ‘title’ (for - example, in case ‘title’ contains markup code which does not render - as plain text in a satisfactory way automatically). - - • 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 ‘\etc’. - - 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 } - - { c' \highlight d' e'2-\highlight -! } - image of music - - • LilyPond functions defined with ‘define-music-function’, - ‘define-event-function’, ‘define-scheme-function’ and - ‘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 ‘\default’ in the actual argument list for - explicitly skipping a sequence of optional arguments, - ‘*unspecified*’ can be employed. - - • Current input location and parser are now stored in GUILE fluids - and can be referenced via the function calls ‘(*location*)’ and - ‘(*parser*)’. Consequently, a lot of functions previously taking - an explicit ‘parser’ argument no longer do so. - - Functions defined with ‘define-music-function’, - ‘define-event-function’, ‘define-scheme-function’ and - ‘define-void-function’ no longer use ‘parser’ and ‘location’ - arguments. - - With those particular definitions, LilyPond will try to recognize - legacy use of ‘parser’ and ‘location’ arguments, providing - backwards-compatible semantics for some time. - - • In the "english" notename language, the long notenames for pitches - with accidentals now contain a hyphen for better readability. You - now have to write - \key a-flat \major - instead of the previous - \key aflat \major - - Double accidentals do not get another hyphen, so the Dutch ‘cisis’ - has the long English notename ‘c-sharpsharp’. - - • The visual style of tremolo slashes (shape, style and slope) is now - more finely controlled. - image of music - - • Multi-measure rests have length according to their total duration, - under the control of ‘MultiMeasureRest.space-increment’. - image of music - - • Page numbers may now be printed in roman numerals, by setting the - ‘page-number-type’ paper variable. - - • It is now possible to use ‘\time’ and ‘\partial’ together to change - the time signature in mid measure. - - \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 | - image of music - - • It is now possible to override the ‘text’ property of chord names. - - << - \new ChordNames \chordmode { - a' b c:7 - \once \override ChordName.text = #"foo" - d + • A new markup-command, ‘\with-dimensions-from’, makes + ‘\with-dimensions’ easier to use by taking the new dimensions from + a markup object, given as first argument. + \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" "!" + } } - >> image of music - • Improved horizontal alignment when using ‘TextScript’, with - ‘DynamicText’ or ‘LyricText’. - - • A new command ‘\magnifyStaff’ has been added which scales staff - sizes, staff lines, bar lines, beamlets and horizontal spacing - generally at the ‘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. + • Markup-command ‘\draw-squiggle-line’ is now available. Customizing + is possible with overrides of ‘thickness’, ‘angularity’, ‘height’ + and ‘orientation’ + \markup + \overlay { + \draw-squiggle-line #0.5 #'(3 . 3) ##t - • ‘InstrumentName’ now supports ‘text-interface’. + \translate #'(3 . 3) + \override #'(thickness . 4) + \draw-squiggle-line #0.5 #'(3 . -3) ##t - • There is now support for controlling the ‘expression level’ of MIDI - channels using the ‘Staff.midiExpression’ context property. This - can be used to alter the perceived volume of even sustained notes - (albeit in a very ‘low-level’ way) and accepts a number value - between ‘0.0’ and ‘1.0’. + \translate #'(6 . 0) + \override #'(angularity . -5) + \draw-squiggle-line #0.5 #'(-3 . -3) ##t - \score { - \new Staff \with { - midiExpression = #0.6 - midiInstrument = #"clarinet" + \translate #'(3 . -3) + \override #'(angularity . 2) + \override #'(height . 0.3) + \override #'(orientation . -1) + \draw-squiggle-line #0.2 #'(-3 . 3) ##t } - << - { 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 + image of music - \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 { } + • Markup-commands ‘\undertie’ and ‘\overtie’ are now available, as + well as the generic markup-command ‘\tie’. + \markup { + \undertie "undertied" + \overtie "overtied" } - • Support for making it easier to use alternative ‘music’ fonts other - than the default Emmentaler in LilyPond has been added. See - for more information. + m = { + c''1 \prall -\tweak text \markup \tie "131" -1 + } - • Grobs and their parents can now be aligned separately allowing more - flexibility for grob positions. For example the ‘left’ edge of a - grob can now be aligned on the ‘center’ of its parent. + { \voiceOne \m \voiceTwo \m } + image of music - • Improvements to the ‘\partial’ command have been made to avoid - problems when using multiple, parallel contexts. +New for specialist notation +--------------------------- - • ‘\chordmode’ can now use ‘< >’ and ‘<< >>’ constructs. +*Vocal music improvements* - • A new command ‘\tagGroup’ has now been added. This complements the - existing ‘\keepWithTag’ and ‘\removeWithTag’ commands. For - Example: + • 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 ‘built-in’, which means it does + not need to be copied and edited: instead it is simply ‘\include’’d + in the input file. For details, see *note + (lilypond-learning)Built-in templates::. - \tagGroup #'(violinI violinII viola cello) + • The ‘\addlyrics’ function now works with arbitrary contexts + incuding ‘Staff’. - declares a list of ‘tags’ that belong to a single ‘tag group’. + • ‘\lyricsto’ and ‘\addLyrics’ have been ‘harmonized’. Both now + accept the same kind of delimited argument list that ‘\lyrics’ and + ‘\chords’ accept. Backward compatibility has been added so music + identifiers (i.e. ‘\mus’) are permitted as arguments. A + ‘convert-ly’ rule has been added that removes redundant uses of + ‘\lyricmode’ and rearranges combinations with context starters such + that ‘\lyricsto’ in general is applied last (i.e. like + ‘\lyricmode’ would be). - \keepWithTag #'violinI + *Unfretted and fretted string instrument improvements* - Is now only concerned with ‘tags’ from ‘violinI’’s tag group. + • A new note head style for Tabulature has been added – + ‘TabNoteHead.style = #'slash’. - Any element of the included music tagged with one or more tags from - the group, but _not_ with VIOLINI, will be removed. + • In fret-diagrams the distance between frets and the distance + between strings is now independently adjustable. Available are + ‘fret-distance’ and ‘string-distance’ as subproperties of + ‘fret-diagram-details’. + fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" } - • The ‘\addlyrics’ function now works with arbitrary contexts - incuding ‘Staff’. + \markuplist + \override #'(padding . 2) + \table #'(0 -1) { + "default" - • String numbers can now also be used to print roman numerals (e.g. - for unfretted string instruments). - c2\2 - \romanStringNumbers - c\2 - \arabicStringNumbers - c1\3 - image of music + \fretMrkp - • The ‘thin-kern’ property of the ‘BarLine’ grob has been renamed to - ‘segno-kern’. + "fret-distance" - • ‘KeyCancellation’ grobs now ignore cue clefs (like ‘KeySignature’ - grobs do). + \override #'(fret-diagram-details . ((fret-distance . 2))) + \fretMrkp - • Add support for ‘\once \unset’ + "string-distance" + + \override #'(fret-diagram-details . ((string-distance . 2))) + \fretMrkp + } + image of music • It is now possible to individually color both the dots and parentheses in fret diagrams when using the ‘\fret-diagram-verbose’ @@ -480,98 +572,234 @@ New features in 2.20 since 2.18 } image of music - • A new markup command ‘\justify-line’ has been added. Similar to - the ‘\fill-line’ markup command except that instead of setting - _words_ in columns, the ‘\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. + • Additional bass strings (for lute tablature) are supported. + 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") + } + } + } + image of music + + • String numbers can now also be used to print roman numerals (e.g. + for unfretted string instruments). + c2\2 + \romanStringNumbers + c\2 + \arabicStringNumbers + c1\3 + image of music + + • ‘TabStaff’ is now able to print micro-tones for bendings etc. + \layout { + \context { + \Score + supportNonIntegerFret = ##t + } + } + + mus = \relative { c'4 cih d dih } + + << + \new Staff << \clef "G_8" \mus >> + \new TabStaff \mus + >> + image of music + + *Chord notation improvements* + + • ‘\chordmode’ can now use ‘< >’ and ‘<< >>’ constructs. + + • It is now possible to override the ‘text’ property of chord names. + + << + \new ChordNames \chordmode { + a' b c:7 + \once \override ChordName.text = #"foo" + d + } + >> + image of music + +New for input and output +------------------------ + +*Input structure improvements* + + • Blocks introduced with ‘\header’ can be stored in variables and + used as arguments to music and scheme functions and as the body of + ‘#{...#}’ constructs. They are represented as a Guile module. + + While ‘\book’, ‘\bookpart’, ‘\score’, ‘\with’, ‘\layout’, ‘\midi’, + ‘\paper’ blocks can be passed around in similar manner, they are + represented by different data types. + + *Titles and header improvements* + + • Page numbers may now be printed in roman numerals, by setting the + ‘page-number-type’ paper variable. + + *Input file improvements* + + • A new command ‘\tagGroup’ has now been added. This complements the + existing ‘\keepWithTag’ and ‘\removeWithTag’ commands. For + Example: + + \tagGroup #'(violinI violinII viola cello) + + declares a list of ‘tags’ that belong to a single ‘tag group’. + + \keepWithTag #'violinI + + Is now only concerned with ‘tags’ from ‘violinI’’s tag group. + + Any element of the included music tagged with one or more tags from + the group, but _not_ with VIOLINI, will be removed. + + *Output improvements* + + • 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. + + • The ‘output-classic-framework’ procedure and the ‘-dclip-systems’ + are now available with the ‘SVG’ backend. + + • An argument, ‘-dcrop’, has been added, formatting ‘SVG’ and ‘PDF’ + output without margins or page-breaks. + + • A new ‘output-attributes’ grob property is now used for svg output + instead of the ‘id’ grob property. It allows multiple attributes + to be defined as an association list. For example, ‘#'((id . 123) + (class . foo) (data-whatever . “bar”))’ will produce the following + group tag in an SVG file: ‘ ... ’. + + • 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 ‘-dstrokeadjust’ to LilyPond. When generating ‘PDF’ files, + this will usually result in markedly better looking ‘PDF’ previews + but significantly larger file size. Print quality at high + resolutions will be unaffected. + + • Added a new ‘make-path-stencil’ function that supports all ‘path’ + commands both relative and absolute: + + ‘lineto’, ‘rlineto’, ‘curveto’, ‘rcurveto’, ‘moveto’, ‘rmoveto’, + ‘closepath’. The function also supports ‘single-letter’ syntax + used in standard SVG path commands: + + ‘L’, ‘l’, ‘C’, ‘c’, ‘M’, ‘m’, ‘Z’ and ‘z’. The new command is also + backward-compatible with the original ‘make-connected-path-stencil’ + function. Also see ‘scm/stencil.scm’. + + *MIDI improvements* - \markup \fill-line {oooooo oooooo oooooo oooooo} - \markup \fill-line {ooooooooo oooooooo oo ooo} - image of music + • 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. - \markup \justify-line {oooooo oooooo oooooo oooooo} - \markup \justify-line {ooooooooo oooooooo oo ooo} - image of music + This behavior is customizable through the ‘midiLength’ and + ‘midiExtraVelocity’ properties on ‘ArticulationEvent’. See + ‘script-init.ly’ for examples. - • A new command ‘\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. + • Improved MIDI output for breathe marks. After tied notes, breaths + take time _only_ from the last note of the tie; e.g. ‘{ c4~ c8 + \breathe }’ performs as ‘{ c4~ c16 r }’ instead of ‘{ 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. - \new Staff << - \new Voice \relative { - \voiceOne - 4 8. 16 8 4 r8 + • There is now support for controlling the ‘expression level’ of MIDI + channels using the ‘Staff.midiExpression’ context property. This + can be used to alter the perceived volume of even sustained notes + (albeit in a very ‘low-level’ way) and accepts a number value + between ‘0.0’ and ‘1.0’. + + \score { + \new Staff \with { + midiExpression = #0.6 + midiInstrument = #"clarinet" } - \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 + << + { 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\! } - } - >> - image of music + >> + \midi { } + } - • 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 ‘built-in’, which means it does - not need to be copied and edited: instead it is simply ‘\include’’d - in the input file. For details, see *note - (lilypond-learning)Built-in templates::. + • When outputting MIDI, LilyPond will now store the ‘title’ defined + in a score’s ‘\header’ block (or, if there is no such definition on + the ‘\score’ level, the first such definition found in a ‘\header’ + block of the score’s enclosing ‘\bookpart’, ‘\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 ‘midititle’ ‘\header’ field independently of ‘title’ (for + example, in case ‘title’ contains markup code which does not render + as plain text in a satisfactory way automatically). - • 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. + *Extracting music improvements* - \time 3/4 - \override Beam.auto-knee-gap = 3 - \tuplet 3/2 4 { - g8 c'' e, - c'8 g,, e'' - g,,8 e''' c,, - } - image of music + • ‘\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 + { c4 d4 8 } - The original kneed-beam tuplet behavior is still available through - an ‘\override’ via a new, ‘knee-to-beam’ property. +New for spacing issues +---------------------- - \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,, - } - image of music +*Page breaking improvements* - • ‘\lyricsto’ and ‘\addLyrics’ have been ‘harmonized’. Both now - accept the same kind of delimited argument list that ‘\lyrics’ and - ‘\chords’ accept. Backward compatibility has been added so music - identifiers (i.e. ‘\mus’) are permitted as arguments. A - ‘convert-ly’ rule has been added that removes redundant uses of - ‘\lyricmode’ and rearranges combinations with context starters such - that ‘\lyricsto’ in general is applied last (i.e. like - ‘\lyricmode’ would be). + • There are two new page breaking functions. ‘ly:one-page-breaking’ + automatically adjusts the height of the page to fit the music, so + that everything fits on one page. + ‘ly:one-line-auto-height-breaking’ is like ‘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. - • Scheme functions and identifiers can now be used as output - definitions. + *Vertical and Horizontal spacing improvements* - • Scheme expressions can now be used as chord constituents. + • It is now possible to move systems with reference to their current + position using the ‘extra-offset’ subproperty of + ‘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 *note + (lilypond-notation)Explicit staff and system positioning:: for more + information. • Improved visual spacing of small and regular ‘MI’ Funk and Walker noteheads so they are now the same width as other shaped notes in @@ -582,22 +810,45 @@ New features in 2.20 since 2.18 • ‘LeftEdge’ now has a definable ‘Y-extent’ (i.e.vertical). See *note (lilypond-internals)LeftEdge::. - • Added a new ‘make-path-stencil’ function that supports all ‘path’ - commands both relative and absolute: + • Grobs and their parents can now be aligned separately allowing more + flexibility for grob positions. For example the ‘left’ edge of a + grob can now be aligned on the ‘center’ of its parent. - ‘lineto’, ‘rlineto’, ‘curveto’, ‘rcurveto’, ‘moveto’, ‘rmoveto’, - ‘closepath’. The function also supports ‘single-letter’ syntax - used in standard SVG path commands: + • Improved horizontal alignment when using ‘TextScript’, with + ‘DynamicText’ or ‘LyricText’. - ‘L’, ‘l’, ‘C’, ‘c’, ‘M’, ‘m’, ‘Z’ and ‘z’. The new command is also - backward-compatible with the original ‘make-connected-path-stencil’ - function. Also see ‘scm/stencil.scm’. +New for changing defaults +------------------------- + + • All of ‘\override’, ‘\revert’, ‘\set’, and ‘\unset’ now work with + the ‘\once’ prefix for making one-time settings. + \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 | + } + image of music + +New for Internal interfaces and functions +----------------------------------------- + + • The music and grob property ‘spanner-id’, used for distinguishing + simultaneous slurs and phrasing slurs, has been changed from a + string to a _key_ which can be either a non-negative integer or + symbol (also see the previous documented expressive mark + improvement – _A new command \=X has been added_). • Context properties named in the ‘alternativeRestores’ property are restored to their value at the start of the _first_ alternative in all subsequent alternatives. - Currently the default set restores ‘current meter’; + Currently the default set restores ‘current meter’: \time 3/4 \repeat volta 2 { c2 e4 | } @@ -608,7 +859,7 @@ New features in 2.20 since 2.18 g2. | image of music - ‘measure position’; + ‘measure position’: \time 3/4 \repeat volta 2 { c2 e4 | } @@ -621,7 +872,7 @@ New features in 2.20 since 2.18 g2. | image of music - and ‘chord changes’; + and ‘chord changes’: << \new ChordNames { @@ -639,102 +890,101 @@ New features in 2.20 since 2.18 >> image of music - • Improved MIDI output for breathe marks. After tied notes, breaths - take time _only_ from the last note of the tie; e.g. ‘{ c4~ c8 - \breathe }’ performs as ‘{ c4~ c16 r }’ instead of ‘{ 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 ‘define-music-function’, + ‘define-event-function’, ‘define-scheme-function’ and + ‘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 ‘\default’ in the actual argument list for + explicitly skipping a sequence of optional arguments, + ‘*unspecified*’ can be employed. - • A new note head style for Tabulature has been added; - ‘TabNoteHead.style = #'slash’. + • Current input location and parser are now stored in GUILE fluids + and can be referenced via the function calls ‘(*location*)’ and + ‘(*parser*)’. Consequently, a lot of functions previously taking + an explicit ‘parser’ argument no longer do so. + + Functions defined with ‘define-music-function’, + ‘define-event-function’, ‘define-scheme-function’ and + ‘define-void-function’ no longer use ‘parser’ and ‘location’ + arguments. + + With those particular definitions, LilyPond will try to recognize + legacy use of ‘parser’ and ‘location’ arguments, providing + backwards-compatible semantics for some time. - • Four new Clef glyphs have been added _Double G_, _Tenor G_, - _Varpercussion_ and _varC_ and their related tessitura. - \override Staff.Clef.full-size-change = ##t + • Scheme functions and identifiers can now be used as output + definitions. - \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 + • Scheme expressions can now be used as chord constituents. - \break - \override Staff.Clef.full-size-change = ##f + • 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 ‘\etc’. - \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 - image of music + \markup bold-red = \markup \bold \with-color #red \etc + highlight = \tweak font-size 3 \tweak color #red \etc - • 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: + \markup \bold-red "text" + \markuplist \column-lines \bold-red { One Two } - \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 | - } + { c' \highlight d' e'2-\highlight -! } image of music - \new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | } + • Dot-separated symbol lists like ‘FretBoard.stencil’ were already + supported as of version 2.18. They may now also contain unsigned + integers, and may alternatively be separated by commata. This + allows usage such as + { \time 2,2,1 5/8 g'8 8 8 8 8 } image of music - • ‘\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 - { c4 d4 8 } - - • Beaming exceptions can now be constructed using the - ‘\beamExceptions’ scheme function. One can now write + and + \tagGroup violin,oboe,bassoon - \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 + { \unset Timing.beamExceptions + \set Timing.beatStructure = 1,2,1 + g'8 8 8 8 8 8 8 8 } image of music - with multiple exceptions separated with ‘|’ bar checks (writing the - exception pattern without pitches is convenient but not mandatory). - Previously, setting the beam exceptions would have required writing + • Association list elements could previously be assigned values + individually (for example, paper variables like + ‘system-system-spacing.basic-distance’). They may now be also + referenced in this manner, as with + \paper { + \void \displayScheme \system-system-spacing.basic-distance + } - \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 - ))) + In combination with the previously mentioned changes, this allows + setting and referencing pseudovariables like ‘violin.1’. - • 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. + • The markup-list-command ‘\table’ is now available. Each column may + be aligned differently. + \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" + } + } + image of music - This behavior is customizable through the ‘midiLength’ and - ‘midiExtraVelocity’ properties on ‘ArticulationEvent’. See - ‘script-init.ly’ for examples. + • ‘InstrumentName’ now supports ‘text-interface’. - • 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. + • The ‘thin-kern’ property of the ‘BarLine’ grob has been renamed to + ‘segno-kern’. - Stroke adjustment can be forced by specifying the command line - option ‘-dstrokeadjust’ to LilyPond. When generating ‘PDF’ files, - this will usually result in markedly better looking ‘PDF’ previews - but significantly larger file size. Print quality at high - resolutions will be unaffected. + • ‘KeyCancellation’ grobs now ignore cue clefs (like ‘KeySignature’ + grobs do). + + • Add support for ‘\once \unset’