1 New features in 2.20 since 2.18
2 *******************************
4 New for musical notation
5 ------------------------
7 *Displaying pitch improvements*
9 • Pitches that have a sharp or flat in their name now need to be
18 Pitches that contain _double_ sharps or flats in their name,
19 however, do not need a second hyphen. For example using the Dutch
22 \key c-sharpsharp \major
24 • Accidental rules can now be defined _across_ ‘ChoirStaff’ contexts.
26 • Two new accidental rules have been added. Both combine the
27 characteristics of ‘modern-voice’, ‘piano’ and their equivalents:
32 This is the now the default accidental style for ‘ChoirStaff’.
38 The same as ‘choral’ but with the extra accidentals typeset as
41 Also see *note (lilypond-notation)Automatic accidentals::.
43 • Four new clef glyphs are now available; ‘GG’ (double-G), ‘Tenor G’,
44 ‘varC’ plus related tessitura and ‘Varpercussion’:
46 Example Output Example Output
48 ----------------------------------------------------------------------------
49 ‘\clef GG’ image of music ‘\clef tenorG’ image of music
50 ‘\clef varC’ image of music ‘\clef altovarC’ image of music
51 ‘\clef tenorvarC’ image of music ‘\clef baritonevarC’ image of music
55 Also see _Clef styles_.
57 • French note names are now explicitly defined – previously they were
58 aliased to Italian note names. The D pitch may be entered as
62 do ré mi fa | sol la si do | ré1
65 Double sharps are entered using an ‘x’ suffix.
68 dob, rebb misb fabsb | sold ladd six dosd | rédsd1
73 • Multi-measure rests have length according to their total duration,
74 under the control of ‘MultiMeasureRest.space-increment’. Note the
75 default value is ‘2.0’.
82 \override Staff.MultiMeasureRest.space-increment = 2.5
86 • Improvements to the ‘\partial’ command have been made when used
87 with parallel music and/or multiple contexts.
89 • It is now possible to change the time signature mid-measure by
90 using both the ‘\time’ and ‘\partial’ commands together.
92 f f f f | f2. \bar "||"
97 • Isolated durations in music now stand for unpitched notes. Pitches
98 are taken from the preceding note or chord. This is especially
99 convenient for specifying rhythms in both music and scheme
100 functions and can help improve the readability of LilyPond source
103 c64[ 64] 32 16 8^- <g b d>4~ 2 | 1
106 \new DrumStaff \with { \override StaffSymbol.line-count = 1 }
109 tambourine 8 \tuplet 3/2 { 16 16 16 }
110 8 \tuplet 3/2 { 16 16 16 } 8 8 |
114 • Beaming exceptions can now be constructed using the simpler
115 ‘\beamExceptions’ scheme function. Previously, this would have
118 \set Timing.beamExceptions =
120 (end . ;entry for end of beams
121 ( ;start of alist of end points
122 ((1 . 32) . (2 2 2)) ;rule for 1/32 beams -- end each 1/16
127 \repeat unfold 6 { c32 }
129 With the new ‘\beamExceptions’ scheme function, this becomes:
131 \set Timing.beamExceptions =
132 \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
136 \repeat unfold 6 { c32 } |
139 with multiple exceptions separated by bar checks. Note that
140 writing the exception pattern without pitches is convenient but not
141 mandatory (also see the previous documented rhythm improvement –
142 *note (lilypond-notation)Isolated durations in music now stand for
145 • The positioning of tuplet numbers for kneed beams has been
146 improved. Previously, tuplet numbers were placed according to the
147 position of the tuplet bracket, even if the bracket was not
148 printed. This could lead to tuplet numbers being ‘stranded’.
154 Now, when the bracket is not drawn, tuplet numbers are positioned
159 • Collision detection for the kneed beam tuplet numbers has also been
160 added, shifting the offset horizontally if the number is too close
161 to an adjoining note column (but still preserving the number’s
162 vertical distance). In the event of a collision – for example with
163 an accidental – the tuplet number will be shifted vertically
164 instead. If the tuplet number is itself too large to fit within
165 the available space, the original, ‘bracket-based’, positioning
166 system will be used instead.
170 The original kneed-beam tuplet behavior is still available with a
171 new, ‘knee-to-beam’ property for the ‘TupletNumber’ layout object.
174 \override Beam.auto-knee-gap = 3
175 \override TupletNumber.knee-to-beam = ##f
176 \override TupletBracket.bracket-visibility = ##t
177 \tuplet 3/2 4 { g8 c'' e, }
178 \once \override TupletBracket.bracket-visibility = ##f
179 \tuplet 3/2 4 { g,,8 c'' e, }
182 *Expressive mark improvements*
184 • The ends of hairpins may now be fine-tuned using the ‘shorten-pair’
185 grob property. This previously only affected text-spanners (e.g.
186 ‘TupletBracket’ and ‘OttavaBracket’).
188 Positive and negative values offset right and left respectively.
190 \once \override Hairpin.shorten-pair = #'(0 . 2)
193 \once \override Hairpin.shorten-pair = #'(2 . 0)
194 \once \override Hairpin.stencil = #constante-hairpin
197 \once \override Hairpin.shorten-pair = #'(-1 . -1)
198 \once \override Hairpin.stencil = #flared-hairpin
202 • Individual slurs and phrasing slurs may now be started from an
203 explicit note within a chord.
205 <f a( c>1 | <c') e g(> | <a c) e>
208 <f( a\( c>1 | <c'\) e\( g> | <a c e\)>
211 • A new command ‘\=X’ has been added – where ‘X’ can be any
212 non-negative integer or symbol – so that a specific ‘id’ can be
213 assigned to the start and end of slurs and phrasing slurs.
215 This is useful when simultaneous slurs are required or if one slur
216 overlaps another or when nesting short slurs within a longer one.
218 <a c e\=7\(>1 | <g b d\=£(> |
219 <f\=A( a c\="foo"(> | <c'\="foo")\=A) e\=£) g\=7\)> |
222 Also see *note (lilypond-notation)Expressive marks as curves::.
224 *Repeat notation improvements*
226 • The visual style of tremolo slashes (shape, style and slope) is now
227 more finely controlled.
230 • The music function ‘\unfoldRepeats’ can now take an optional
231 argument-list specifying which type(s) of repeated music should be
232 unfolded. Possible entries are ‘percent’, ‘tremolo’, ‘volta’. If
233 the optional argument-list is unspecified, ‘repeated-music’ will be
236 *Staff notation improvements*
238 • A new command ‘\magnifyStaff’ has been added which scales staff
239 sizes, staff lines, bar lines, beamlets and horizontal spacing
240 generally at the ‘Staff’ context level. Staff lines are prevented
241 from being scaled smaller than the default since the thickness of
242 stems, slurs, and the like are all based on the staff line
245 • A new command ‘\magnifyMusic’ has been added, which allows the
246 notation size to be changed without changing the staff size, while
247 automatically scaling stems, beams, and horizontal spacing.
250 \new Voice \relative {
252 <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>4 r8
254 \new Voice \relative {
257 \override Score.SpacingSpanner.spacing-increment = #(* 1.2 0.63)
258 r32 c'' a c a c a c r c a c a c a c
259 r c a c a c a c a c a c a c a c
265 • A new command, ‘\RemoveAllEmptyStaves’, has been made available,
266 which acts exactly like ‘\RemoveEmptyStaves’, except for also
267 removing empty staves on the first system in a score.
269 • A new markup command ‘\justify-line’ has been added. Similar to
270 the ‘\fill-line’ markup command except that instead of setting
271 _words_ in columns, the ‘\justify-line’ command balances the
272 whitespace between them ensuring that when there are three or more
273 words in a markup, the whitespace is always consistent.
275 \markup \fill-line {oooooo oooooo oooooo oooooo}
276 \markup \fill-line {ooooooooo oooooooo oo ooo}
279 \markup \justify-line {oooooo oooooo oooooo oooooo}
280 \markup \justify-line {ooooooooo oooooooo oo ooo}
283 *Editorial annotation improvements*
285 • It is now possible to add text to analysis brackets through the
286 ‘HorizontalBracketText’ object.
290 \consists "Horizontal_bracket_engraver"
295 \once \override HorizontalBracketText.text = "a"
296 c''\startGroup d''\stopGroup
297 e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup
301 *Text formatting improvements*
303 • Support for making it easier to use alternative ‘music’ fonts other
304 than the default Emmentaler in LilyPond has been added. See *note
305 (lilypond-notation)Replacing the notation font:: for more
308 • Default text fonts have been changed from ‘Century Schoolbook L’,
309 ‘sans-serif’, and ‘monospace’.
313 -----------------------------------
316 _typewriter_‘monospace’
318 ‘serif’, ‘sans-serif’, and ‘monospace’ are ‘generic-family’ in SVG
319 and CSS specifications.
322 Family Default font (alias) Alias definition lists
323 ----------------------------------------------------------------------------
324 _roman_ ‘LilyPond Serif’ TeX Gyre Schola, C059, Century
325 SchoolBook URW, Century Schoolbook L,
326 DejaVu Serif, ..., serif
327 _sans_ ‘LilyPond Sans TeX Gyre Heros, Nimbus Sans, Nimbus
328 Serif’ Sans L, DejaVu Sans, ..., sans-serif
329 _typewriter_‘LilyPond Monospace’ TeX Gyre Cursor, Nimbus Mono PS,
330 Nimbus Mono, Nimbus Mono L, DejaVu
331 Sans Mono, ..., monospace
333 ‘LilyPond Serif’, ‘LilyPond Sans Serif’, and ‘LilyPond Monospace’
334 are font aliases defined in the LilyPond dedicated FontConfig
335 configuration file ‘00-lilypond-fonts.conf’. Where a character
336 dosen’t exist in the first font listed, the next font listed will
337 be used instead for that character. For details of alias
338 definitions, please see to ‘00-lilypond-fonts.conf’ under the
341 • When using OpenType fonts, font features can be used. Note: Not
342 all OpenType fonts have all functions.
345 \markup { Normal Style: Hello HELLO }
346 \markup { \caps { Small Caps: Hello } }
347 \markup { \override #'(font-features . ("smcp"))
348 { True Small Caps: Hello } }
351 \markup { Normal Number Style: 0123456789 }
352 \markup { \override #'(font-features . ("onum"))
353 { Old Number Style: 0123456789 } }
355 % Stylistic Alternates
356 \markup { \override #'(font-features . ("salt 0"))
357 { Stylistic Alternates 0: εφπρθ } }
358 \markup { \override #'(font-features . ("salt 1"))
359 { Stylistic Alternates 1: εφπρθ } }
362 \markup { \override #'(font-features . ("onum" "smcp" "salt 1"))
363 { Multiple features: Hello 0123456789 εφπρθ } }
366 • Two new styles of whiteout are now available. The ‘outline’ style
367 approximates the contours of a glyph’s outline, and its shape is
368 produced from multiple displaced copies of the glyph. The
369 ‘rounded-box’ style produces a rounded rectangle shape. For all
370 three styles, including the default ‘box’ style, the whiteout
371 shape’s ‘thickness’, as a multiple of staff-line thickness, can be
376 \filled-box #'(-1 . 15) #'(-3 . 4) #1
377 \override #'(thickness . 3)
378 \whiteout whiteout-box
382 \filled-box #'(-1 . 24) #'(-3 . 4) #1
383 \override #'(style . rounded-box)
384 \override #'(thickness . 3)
385 \whiteout whiteout-rounded-box
389 \filled-box #'(-1 . 18) #'(-3 . 4) #1
390 \override #'(style . outline)
391 \override #'(thickness . 3)
392 \whiteout whiteout-outline
395 \override Staff.Clef.whiteout-style = #'outline
396 \override Staff.Clef.whiteout = 3
401 • A new markup-command, ‘\with-dimensions-from’, makes
402 ‘\with-dimensions’ easier to use by taking the new dimensions from
403 a markup object, given as first argument.
405 \pattern #5 #Y #0 "x"
406 \pattern #5 #Y #0 \with-dimensions-from "x" "f"
407 \pattern #5 #Y #0 \with-dimensions-from "x" "g"
408 \override #'(baseline-skip . 2)
410 \pattern #5 #X #0 "n"
411 \pattern #5 #X #0 \with-dimensions-from "n" "m"
412 \pattern #5 #X #0 \with-dimensions-from "n" "!"
417 • Markup-command ‘\draw-squiggle-line’ is now available. Customizing
418 is possible with overrides of ‘thickness’, ‘angularity’, ‘height’
422 \draw-squiggle-line #0.5 #'(3 . 3) ##t
425 \override #'(thickness . 4)
426 \draw-squiggle-line #0.5 #'(3 . -3) ##t
429 \override #'(angularity . -5)
430 \draw-squiggle-line #0.5 #'(-3 . -3) ##t
432 \translate #'(3 . -3)
433 \override #'(angularity . 2)
434 \override #'(height . 0.3)
435 \override #'(orientation . -1)
436 \draw-squiggle-line #0.2 #'(-3 . 3) ##t
440 • Markup-commands ‘\undertie’ and ‘\overtie’ are now available, as
441 well as the generic markup-command ‘\tie’.
443 \undertie "undertied"
448 c''1 \prall -\tweak text \markup \tie "131" -1
451 { \voiceOne \m \voiceTwo \m }
454 New for specialist notation
455 ---------------------------
457 *Vocal music improvements*
459 • A new flexible template suitable for a range of choral music, is
460 now provided. This may be used to create simple choral music, with
461 or without piano accompaniment, in two or four staves. Unlike
462 other templates, this template is ‘built-in’, which means it does
463 not need to be copied and edited: instead it is simply ‘\include’’d
464 in the input file. For details, see *note
465 (lilypond-learning)Built-in templates::.
467 • The ‘\addlyrics’ function now works with arbitrary contexts
470 • ‘\lyricsto’ and ‘\addLyrics’ have been ‘harmonized’. Both now
471 accept the same kind of delimited argument list that ‘\lyrics’ and
472 ‘\chords’ accept. Backward compatibility has been added so music
473 identifiers (i.e. ‘\mus’) are permitted as arguments. A
474 ‘convert-ly’ rule has been added that removes redundant uses of
475 ‘\lyricmode’ and rearranges combinations with context starters such
476 that ‘\lyricsto’ in general is applied last (i.e. like
477 ‘\lyricmode’ would be).
479 *Unfretted and fretted string instrument improvements*
481 • A new note head style for Tabulature has been added –
482 ‘TabNoteHead.style = #'slash’.
484 • In fret-diagrams the distance between frets and the distance
485 between strings is now independently adjustable. Available are
486 ‘fret-distance’ and ‘string-distance’ as subproperties of
487 ‘fret-diagram-details’.
488 fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
491 \override #'(padding . 2)
499 \override #'(fret-diagram-details . ((fret-distance . 2)))
504 \override #'(fret-diagram-details . ((string-distance . 2)))
509 • It is now possible to individually color both the dots and
510 parentheses in fret diagrams when using the ‘\fret-diagram-verbose’
515 \override #'(fret-diagram-details . (
516 (finger-code . in-dot))) {
517 \fret-diagram-verbose #'((mute 6)
518 (place-fret 5 3 1 red)
519 (place-fret 4 5 2 inverted)
520 (place-fret 3 5 3 green)
521 (place-fret 2 5 4 blue inverted)
522 (place-fret 1 3 1 violet)
527 \override #'(fret-diagram-details . (
528 (finger-code . below-string))) {
529 \fret-diagram-verbose #'((mute 6)
530 (place-fret 5 3 1 red parenthesized)
531 (place-fret 4 5 2 yellow
534 (place-fret 3 5 3 green)
535 (place-fret 2 5 4 blue )
543 • Two new properties have been added for use in
544 ‘fret-diagram-details’ when using the ‘\fret-diagram-verbose’
545 markup command; ‘fret-label-horizontal-offset’ which affects the
546 ‘fret-label-indication’ and ‘paren-padding’ which controls the
547 space between the dot and the parentheses surrounding it.
551 \fret-diagram-verbose #'((mute 6)
555 (place-fret 1 6 4 parenthesized)
560 \override #'(fret-diagram-details . (
561 (fret-label-horizontal-offset . 2)
562 (paren-padding . 0.25))) {
563 \fret-diagram-verbose #'((mute 6)
567 (place-fret 1 6 4 parenthesized)
575 • Additional bass strings (for lute tablature) are supported.
576 m = { f'4 d' a f d a, g, fis, e, d, c, \bar "|." }
583 tablatureFormat = #fret-letter-tablature-format
587 stringTunings = \stringTuning <a, d f a d' f'>
588 additionalBassStrings = \stringTuning <c, d, e, fis, g,>
589 fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
595 • String numbers can now also be used to print roman numerals (e.g.
596 for unfretted string instruments).
604 • ‘TabStaff’ is now able to print micro-tones for bendings etc.
608 supportNonIntegerFret = ##t
612 mus = \relative { c'4 cih d dih }
615 \new Staff << \clef "G_8" \mus >>
620 *Chord notation improvements*
622 • ‘\chordmode’ can now use ‘< >’ and ‘<< >>’ constructs.
624 • It is now possible to override the ‘text’ property of chord names.
627 \new ChordNames \chordmode {
629 \once \override ChordName.text = #"foo"
635 New for input and output
636 ------------------------
638 *Input structure improvements*
640 • Blocks introduced with ‘\header’ can be stored in variables and
641 used as arguments to music and scheme functions and as the body of
642 ‘#{...#}’ constructs. They are represented as a Guile module.
644 While ‘\book’, ‘\bookpart’, ‘\score’, ‘\with’, ‘\layout’, ‘\midi’,
645 ‘\paper’ blocks can be passed around in similar manner, they are
646 represented by different data types.
648 *Titles and header improvements*
650 • Page numbers may now be printed in roman numerals, by setting the
651 ‘page-number-type’ paper variable.
653 *Input file improvements*
655 • A new command ‘\tagGroup’ has now been added. This complements the
656 existing ‘\keepWithTag’ and ‘\removeWithTag’ commands. For
659 \tagGroup #'(violinI violinII viola cello)
661 declares a list of ‘tags’ that belong to a single ‘tag group’.
663 \keepWithTag #'violinI
665 Is now only concerned with ‘tags’ from ‘violinI’’s tag group.
667 Any element of the included music tagged with one or more tags from
668 the group, but _not_ with VIOLINI, will be removed.
670 *Output improvements*
672 • LilyPond source files may now be embedded inside the generated PDF
673 files. This experimental feature is disabled by default and may be
674 regarded as unsafe, as PDF documents with hidden content tend to
675 present a security risk. Please note that not all PDF viewers have
676 the ability to handle embedded documents (if not, the PDF output
677 will appear normally and source files will remain invisible). This
678 feature only works with the PDF backend.
680 • The ‘output-classic-framework’ procedure and the ‘-dclip-systems’
681 are now available with the ‘SVG’ backend.
683 • An argument, ‘-dcrop’, has been added, formatting ‘SVG’ and ‘PDF’
684 output without margins or page-breaks.
686 • A new ‘output-attributes’ grob property is now used for svg output
687 instead of the ‘id’ grob property. It allows multiple attributes
688 to be defined as an association list. For example, ‘#'((id . 123)
689 (class . foo) (data-whatever . “bar”))’ will produce the following
690 group tag in an SVG file: ‘<g id=“123” class=“foo”
691 data-whatever=“bar”> ... </g>’.
693 • The PostScript functionality of stroke adjustment is no longer
694 applied automatically but left to the discretion of the PostScript
695 device (by default, Ghostscript uses it for resolutions up to
696 150dpi when generating raster images). When it is enabled, a more
697 complex drawing algorithm designed to benefit from stroke
698 adjustment is employed mostly for stems and bar lines.
700 Stroke adjustment can be forced by specifying the command line
701 option ‘-dstrokeadjust’ to LilyPond. When generating ‘PDF’ files,
702 this will usually result in markedly better looking ‘PDF’ previews
703 but significantly larger file size. Print quality at high
704 resolutions will be unaffected.
706 • Added a new ‘make-path-stencil’ function that supports all ‘path’
707 commands both relative and absolute:
709 ‘lineto’, ‘rlineto’, ‘curveto’, ‘rcurveto’, ‘moveto’, ‘rmoveto’,
710 ‘closepath’. The function also supports ‘single-letter’ syntax
711 used in standard SVG path commands:
713 ‘L’, ‘l’, ‘C’, ‘c’, ‘M’, ‘m’, ‘Z’ and ‘z’. The new command is also
714 backward-compatible with the original ‘make-connected-path-stencil’
715 function. Also see ‘scm/stencil.scm’.
719 • The most common articulations are now reflected in MIDI output.
720 Accent and marcato make notes louder; staccato, staccatissimo and
721 portato make them shorter. Breath marks shorten the previous note.
723 This behavior is customizable through the ‘midiLength’ and
724 ‘midiExtraVelocity’ properties on ‘ArticulationEvent’. See
725 ‘script-init.ly’ for examples.
727 • Improved MIDI output for breathe marks. After tied notes, breaths
728 take time _only_ from the last note of the tie; e.g. ‘{ c4~ c8
729 \breathe }’ performs as ‘{ c4~ c16 r }’ instead of ‘{ c4 r8 }’.
730 This is more consistent with articulations and how humans interpret
731 breaths after ties. It now also makes it easier to align
732 simultaneous breathe marks over multiple parts, all with different
735 • There is now support for controlling the ‘expression level’ of MIDI
736 channels using the ‘Staff.midiExpression’ context property. This
737 can be used to alter the perceived volume of even sustained notes
738 (albeit in a very ‘low-level’ way) and accepts a number value
739 between ‘0.0’ and ‘1.0’.
743 midiExpression = #0.6
744 midiInstrument = #"clarinet"
749 \set Staff.midiExpression = #0.7 s4\f\<
750 \set Staff.midiExpression = #0.8 s4
751 \set Staff.midiExpression = #0.9 s4
752 \set Staff.midiExpression = #1.0 s4
754 \set Staff.midiExpression = #0.9 s4\>
755 \set Staff.midiExpression = #0.8 s4
756 \set Staff.midiExpression = #0.7 s4
757 \set Staff.midiExpression = #0.6 s4\!
763 • When outputting MIDI, LilyPond will now store the ‘title’ defined
764 in a score’s ‘\header’ block (or, if there is no such definition on
765 the ‘\score’ level, the first such definition found in a ‘\header’
766 block of the score’s enclosing ‘\bookpart’, ‘\book’, or top-level
767 scope) as the name of the MIDI sequence in the MIDI file.
768 Optionally, the name of the MIDI sequence can be overridden using
769 the new ‘midititle’ ‘\header’ field independently of ‘title’ (for
770 example, in case ‘title’ contains markup code which does not render
771 as plain text in a satisfactory way automatically).
773 *Extracting music improvements*
775 • ‘\displayLilyMusic’ and its underlying Scheme functions no longer
776 omit redundant note durations. This makes it easier to reliably
777 recognize and format standalone durations in expressions like
780 New for spacing issues
781 ----------------------
783 *Page breaking improvements*
785 • There are two new page breaking functions. ‘ly:one-page-breaking’
786 automatically adjusts the height of the page to fit the music, so
787 that everything fits on one page.
788 ‘ly:one-line-auto-height-breaking’ is like ‘ly:one-line-breaking’,
789 placing the music on a single line and adjusting the page width
790 accordingly, however it also automatically adjusts the page height
793 *Vertical and Horizontal spacing improvements*
795 • It is now possible to move systems with reference to their current
796 position using the ‘extra-offset’ subproperty of
797 ‘NonMusicalPaperColumn.line-break-system-details’. Both vertical
798 and horizontal changes are possible. This feature is especially
799 useful for making slight adjustments to the default vertical
800 position of individual systems. See *note
801 (lilypond-notation)Explicit staff and system positioning:: for more
804 • Improved visual spacing of small and regular ‘MI’ Funk and Walker
805 noteheads so they are now the same width as other shaped notes in
806 their respective sets. ‘SOL’ noteheads are also now visually
807 improved when used with both the normal Aiken and Sacred Harp
808 heads, as well as with the thin variants.
810 • ‘LeftEdge’ now has a definable ‘Y-extent’ (i.e.vertical). See
811 *note (lilypond-internals)LeftEdge::.
813 • Grobs and their parents can now be aligned separately allowing more
814 flexibility for grob positions. For example the ‘left’ edge of a
815 grob can now be aligned on the ‘center’ of its parent.
817 • Improved horizontal alignment when using ‘TextScript’, with
818 ‘DynamicText’ or ‘LyricText’.
820 New for changing defaults
821 -------------------------
823 • All of ‘\override’, ‘\revert’, ‘\set’, and ‘\unset’ now work with
824 the ‘\once’ prefix for making one-time settings.
827 \override NoteHead.color = #red
829 \once \override NoteHead.color = #green
831 \once \revert NoteHead.color
833 \revert NoteHead.color
838 New for Internal interfaces and functions
839 -----------------------------------------
841 • The music and grob property ‘spanner-id’, used for distinguishing
842 simultaneous slurs and phrasing slurs, has been changed from a
843 string to a _key_ which can be either a non-negative integer or
844 symbol (also see the previous documented expressive mark
845 improvement – _A new command \=X has been added_).
847 • Context properties named in the ‘alternativeRestores’ property are
848 restored to their value at the start of the _first_ alternative in
849 all subsequent alternatives.
851 Currently the default set restores ‘current meter’:
854 \repeat volta 2 { c2 e4 | }
865 \repeat volta 2 { c2 e4 | }
868 \set Timing.measurePosition = #(ly:make-moment -1/2)
879 \set chordChanges = ##t
880 \chordmode { c1:m d:m c:m d:m }
883 \repeat volta 2 { \chordmode { c1:m } }
885 { \chordmode { d:m } }
886 { \chordmode { c:m } }
893 • LilyPond functions defined with ‘define-music-function’,
894 ‘define-event-function’, ‘define-scheme-function’ and
895 ‘define-void-function’ can now be directly called from Scheme as if
896 they were genuine Scheme procedures. Argument checking and
897 matching will still be performed in the same manner as when calling
898 the function through LilyPond input. This includes the insertion
899 of defaults for optional arguments not matching their predicates.
900 Instead of using ‘\default’ in the actual argument list for
901 explicitly skipping a sequence of optional arguments,
902 ‘*unspecified*’ can be employed.
904 • Current input location and parser are now stored in GUILE fluids
905 and can be referenced via the function calls ‘(*location*)’ and
906 ‘(*parser*)’. Consequently, a lot of functions previously taking
907 an explicit ‘parser’ argument no longer do so.
909 Functions defined with ‘define-music-function’,
910 ‘define-event-function’, ‘define-scheme-function’ and
911 ‘define-void-function’ no longer use ‘parser’ and ‘location’
914 With those particular definitions, LilyPond will try to recognize
915 legacy use of ‘parser’ and ‘location’ arguments, providing
916 backwards-compatible semantics for some time.
918 • Scheme functions and identifiers can now be used as output
921 • Scheme expressions can now be used as chord constituents.
923 • Music (and scheme and void) functions and markup commands that just
924 supply the final parameters to a chain of overrides, music function
925 and markup command calls can now be defined in the form of just
926 writing the expression cut short with ‘\etc’.
928 \markup bold-red = \markup \bold \with-color #red \etc
929 highlight = \tweak font-size 3 \tweak color #red \etc
931 \markup \bold-red "text"
932 \markuplist \column-lines \bold-red { One Two }
934 { c' \highlight d' e'2-\highlight -! }
937 • Dot-separated symbol lists like ‘FretBoard.stencil’ were already
938 supported as of version 2.18. They may now also contain unsigned
939 integers, and may alternatively be separated by commata. This
941 { \time 2,2,1 5/8 g'8 8 8 8 8 }
945 \tagGroup violin,oboe,bassoon
947 • Such lists may also be used in expressions for assignments, sets,
948 and overrides. This allows usage such as
949 { \unset Timing.beamExceptions
950 \set Timing.beatStructure = 1,2,1
954 • Association list elements could previously be assigned values
955 individually (for example, paper variables like
956 ‘system-system-spacing.basic-distance’). They may now be also
957 referenced in this manner, as with
959 \void \displayScheme \system-system-spacing.basic-distance
962 In combination with the previously mentioned changes, this allows
963 setting and referencing pseudovariables like ‘violin.1’.
965 • The markup-list-command ‘\table’ is now available. Each column may
966 be aligned differently.
968 \override #'(padding . 2)
972 \underline { center-aligned right-aligned center-aligned left-aligned }
973 one "1" thousandth "0.001"
974 eleven "11" hundredth "0.01"
975 twenty "20" tenth "0.1"
976 thousand "1000" one "1.0"
981 • ‘InstrumentName’ now supports ‘text-interface’.
983 • The ‘thin-kern’ property of the ‘BarLine’ grob has been renamed to
986 • ‘KeyCancellation’ grobs now ignore cue clefs (like ‘KeySignature’
989 • Add support for ‘\once \unset’