-New features in 2.18 since 2.16
+New features in 2.20 since 2.18
*******************************
- * 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.
+ * 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.
+
+ * 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
+
+ * 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]
- 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.
- * There is now a new context type called `NullVoice' which, while not
- appearing in the printed output, can be used to align lyrics.
- This can be particularly convenient when used in parallel with a
- `\partcombine' construct.
+ * 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
+ }
- soprano = \relative c' { c e g c }
- alto = \relative c' { a c e g }
- verse = \lyricmode { This is my song }
+ In combination with the previously mentioned changes, this allows
+ setting and referencing pseudovariables like `violin.1'.
+
+ * 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.
+
+ * 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.
+
+ * Additional bass strings (for lute tablature) are supported.
+
+ m = { f'4 d' a f d a, g, fis, e, d, c, \bar "|." }
\score {
- \new Staff <<
- \partcombine \soprano \alto
- \new NullVoice = "aligner" \soprano
- \new Lyrics \lyricsto "aligner" \verse
- >>
- \layout {}
+ \new TabStaff \m
+ \layout {
+ \context {
+ \Score
+ tablatureFormat = #fret-letter-tablature-format
+ }
+ \context {
+ \TabStaff
+ stringTunings = \stringTuning <a, d f a d' f'>
+ additionalBassStrings = \stringTuning <c, d, e, fis, g,>
+ fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+ }
+ }
}
[image of music]
- * Several articulations can be put into a single variable or
- returned from an event function:
-
- sempreStacc = -. ^\markup \italic sempre
- \relative { c''4\sempreStacc c c c }
+ * 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]
- * The baseline of score markups is now taken from the reference
- point (usually the middle of the staff) of the first bottom system
- rather than the top of the bounding rectangle. The following
+ * 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 {
- violin: \score { \new Staff { <g d' a' e''>1 }
- \layout { indent=0 } } ,
- cello: \score { \new Staff { \clef "bass" <c, g, d a> }
- \layout { indent=0 } }
+ \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]
- previously looked like
-
- [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.
+ * Markup-command `\draw-squiggle-line' is now available.
+ Customizing is possible with overrides of `thickness',
+ `angularity', `height' and `orientation'
- without a reliable way to get both scores to line up.
+ \markup
+ \overlay {
+ \draw-squiggle-line #0.5 #'(3 . 3) ##t
- * LilyPond no longer automatically infers a `\defaultchild' context
- in a context definition with `\accepts' clauses. Any context
- definition without an explicit or inherited `\defaultchild'
- definition counts as a `Bottom' context and will be eligible for
- rhythmic events and overrides without causing the implicit
- creation of other contexts. Be sure to specify a `\defaultchild'
- for non-`Bottom' contexts when defining them from scratch.
+ \translate #'(3 . 3)
+ \override #'(thickness . 4)
+ \draw-squiggle-line #0.5 #'(3 . -3) ##t
- * There is now extensive support for both discant and bass accordion
- register symbols in the `scm accreg' module, see *note Accordion
- Registers: (lilypond-notation)Accordion Registers.
+ \translate #'(6 . 0)
+ \override #'(angularity . -5)
+ \draw-squiggle-line #0.5 #'(-3 . -3) ##t
- #(use-modules (scm accreg))
- \new PianoStaff
- <<
- \new Staff \relative
- { \clef "treble" \discant "10"
- r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
- \discant "121"
- << { r16 <f bes> r <e a> r <d g> } \\
- { d r a r bes r } >> |
- <cis e a>1
+ \translate #'(3 . -3)
+ \override #'(angularity . 2)
+ \override #'(height . 0.3)
+ \override #'(orientation . -1)
+ \draw-squiggle-line #0.2 #'(-3 . 3) ##t
}
- \new Staff \relative
- { \clef "treble" \freeBass "1"
- r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
- \clef "bass" \stdBass "Master"
- << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
- <e a cis>1^"a" } \\
- { d8_"D" c_"C" bes_"B" | a1_"A" }
- >>
+ [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"
+ }
+
+ m = {
+ c''1 \prall -\tweak text \markup \tie "131" -1
+ }
+
+ { \voiceOne \m \voiceTwo \m }
+ [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]
- * New commands `markLengthOn' and `markLengthOff' control the
- allowance of horizontal space for tempo and rehearsal marks.
+ * Two new styles of whiteout are now available. The `outline' style
+ approximates the contours of a glyph's outline, and its shape is
+ produced from multiple displaced copies of the glyph. The
+ `rounded-box' style produces a rounded rectangle shape. For all
+ three styles, including the default `box' style, the whiteout
+ shape's `thickness', as a multiple of staff-line thickness, can be
+ customized.
+
+ \markup {
+ \combine
+ \filled-box #'(-1 . 15) #'(-3 . 4) #1
+ \override #'(thickness . 3)
+ \whiteout whiteout-box
+ }
+ \markup {
+ \combine
+ \filled-box #'(-1 . 24) #'(-3 . 4) #1
+ \override #'(style . rounded-box)
+ \override #'(thickness . 3)
+ \whiteout whiteout-rounded-box
+ }
+ \markup {
+ \combine
+ \filled-box #'(-1 . 18) #'(-3 . 4) #1
+ \override #'(style . outline)
+ \override #'(thickness . 3)
+ \whiteout whiteout-outline
+ }
+ \relative {
+ \override Staff.Clef.whiteout-style = #'outline
+ \override Staff.Clef.whiteout = 3
+ g'1
+ }
+ [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]
- * Rehearsal marks at the beginning of a line are now placed to the
- right of the clef and key signature by default. As in previous
- versions, the `break-alignable-interface' controls the behavior.
+ * Multi-measure rests have length according to their total duration,
+ under the control of `MultiMeasureRest.space-increment'.
[image of music]
- * Decimal numbers can now be written directly in music, without a
- hash sign. Together with the previous change in the way object
- properties are specified, the code to change the length of stems
- has changed from this:
- \override Stem #'length = #5.6
- e' f' g' a'
- to this:
- \override Stem.length = 5.6
- e' f' g' a'
+ * Page numbers may now be printed in roman numerals, by setting the
+ `page-number-type' paper variable.
- One has to write a digit on both sides of the dot - values like
- `4.' or `-.3' are not allowed.
+ * It is now possible to use `\time' and `\partial' together to
+ change the time signature in mid measure.
- Decimal fractions are also not accepted in `\chordmode'.
+ \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]
- * A number of shorthands like `(', `)', `|', `[', `]', `~', `\(',
- `\)' and others can now freely be redefined like normal commands.
- An example would be
- "\\{" = (
- "\\}" = )
- "(" = \melisma
- ")" = \melismaEnd
+ * It is now possible to override the `text' property of chord names.
- \new Staff <<
- \relative c' {
- c8 \{ d e f \} % slurred
- g ( a b c ) % no slur, but with melisma
- c,1 \bar "|."
- }
- \addlyrics { Li -- ly -- pond. }
+ <<
+ \new ChordNames \chordmode {
+ a' b c:7
+ \once \override ChordName.text = #"foo"
+ d
+ }
>>
[image of music]
- * The articulation shorthand for `\staccatissimo' has been renamed
- from `-|' to `-!'.
+ * 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.
+
+ * `InstrumentName' now supports `text-interface'.
+
+ * 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"
+ }
+ <<
+ { a'1~ a'1 }
+ {
+ \set Staff.midiExpression = #0.7 s4\f\<
+ \set Staff.midiExpression = #0.8 s4
+ \set Staff.midiExpression = #0.9 s4
+ \set Staff.midiExpression = #1.0 s4
+
+ \set Staff.midiExpression = #0.9 s4\>
+ \set Staff.midiExpression = #0.8 s4
+ \set Staff.midiExpression = #0.7 s4
+ \set Staff.midiExpression = #0.6 s4\!
+ }
+ >>
+ \midi { }
+ }
+
+ * Support for making it easier to use alternative `music' fonts other
+ than the default Emmentaler in LilyPond has been added. See
+ `http://fonts.openlilylib.org/' for more information.
+
+ * 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.
+
+ * Improvements to the `\partial' command have been made to avoid
+ problems when using multiple, parallel contexts.
+
+ * `\chordmode' can now use `< >' and `<< >>' constructs.
+
+ * 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.
+
+ * The `\addlyrics' function now works with arbitrary contexts
+ incuding `Staff'.
+
+ * 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]
+
+
+ * The `thin-kern' property of the `BarLine' grob has been renamed to
+ `segno-kern'.
+
+ * `KeyCancellation' grobs now ignore cue clefs (like `KeySignature'
+ grobs do).
+
+ * Add support for `\once \unset'
+
+ * It is now possible to individually color both the dots and
+ parentheses in fret diagrams when using the
+ `\fret-diagram-verbose' markup command.
+
+ \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))
+ }
+ }
+ }
+ [image of music]
+
+
+ * Two new properties have been added for use in
+ `fret-diagram-details' when using the `\fret-diagram-verbose'
+ markup command; `fret-label-horizontal-offset' which affects the
+ `fret-label-indication' and `paren-padding' which controls the
+ space between the dot and the parentheses surrounding it.
+
+ \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))
+ }
+ }
+ }
+ [image of music]
+
- * Tempo change ranges are now written as `\tempo 4 = 60 - 68' rather
- than `\tempo 4 = 60 ~ 68'.
+ * 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.
- * Grob `OctavateEight' was renamed to `ClefModifier'. Related
- context properties were renamed from `xxxOctavationyyy' to
- `xxxTranspositionyyy'.
+ \markup \fill-line {oooooo oooooo oooooo oooooo}
+ \markup \fill-line {ooooooooo oooooooo oo ooo}
+ [image of music]
- * There is a new `\absolute' command explicitly marking music as
- being entered in absolute pitch. While this has been the default
- previously, an explicit `\absolute' also prevents reinterpretation
- when the passage is placed inside of `\relative':
- \relative c { c'4 \absolute { f'' g'' } c }
+ \markup \justify-line {oooooo oooooo oooooo oooooo}
+ \markup \justify-line {ooooooooo oooooooo oo ooo}
[image of music]
- * When `\relative' is used without an explicit reference pitch, the
- reference pitch now is the middle of the first octave, making the
- first entered pitch indistinguishable from absolute pitch.
- Previously, omitting the reference pitch would have lead to a
- default of `c''. Since that choice was somewhat arbitrary,
- recommended usage was to always specify the reference pitch.
+ * 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
+ <e' e'>4 <f f'>8. <g g'>16 <f f'>8 <e e'>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 `\single' can be used for converting a property
- override into a tweak to be applied on a single music expression:
- <a \single\voiceTwoStyle e' a>1
+ * 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 Built-in templates:
+ (lilypond-learning)Built-in templates.
+
+ * 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.
+
+ \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]
- * Two ways of letting graphical objects not appear in the output are
- overriding its `transparent' property with `#t' (retaining the
- original spacing) or overriding its `stencil' property with `#f'
- (not using any space at all). Those two operations now have the
- shorthands `\hide' and `\omit', respectively. They can either be
- given a music expression to tweak, or the name of a graphical
- object for which an override should be created (for specifying
- both, use `\single' on the override form):
+ The original kneed-beam tuplet behavior is still available through
+ an `\override' via a new, `knee-to-beam' property.
- \new Staff \with { \omit Clef }
- \relative c'' <a e' \hide a>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,,
+ }
[image of music]
- * A new command `\temporary' can be applied to overrides in order to
- not have them replace previous property settings. If a `\revert'
- is applied to the same property subsequently, the previous setting
- reappears:
+ * `\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).
+
+ * Scheme functions and identifiers can now be used as output
+ definitions.
+
+ * Scheme expressions can now be used as chord constituents.
+
+ * Improved visual spacing of small and regular `MI' Funk and Walker
+ noteheads so they are now the same width as other shaped notes in
+ their respective sets. `SOL' noteheads are also now visually
+ improved when used with both the normal Aiken and Sacred Harp
+ heads, as well as with the thin variants.
+
+ * `LeftEdge' now has a definable `Y-extent' (i.e.vertical). See *note
+ LeftEdge: (lilypond-internals)LeftEdge.
+
+ * 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'.
+
+ * 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';
- \override NoteHead.color = #red c4
- \override NoteHead.color = #green d
- \revert NoteHead.color e2
- \override NoteHead.color = #red c4
- \temporary\override NoteHead.color = #green d
- \revert NoteHead.color e
- \revert NoteHead.color c
+ \time 3/4
+ \repeat volta 2 { c2 e4 | }
+ \alternative {
+ { \time 4/4 f2 d | }
+ { f2 d4 | }
+ }
+ g2. |
[image of music]
- This is mainly useful for writing music functions that need to
- have some property changed just for the duration of the function.
-
- * `\tag', `\removeWithTag', and `\keepWithTag' can now accept a list
- of symbols rather than just a single symbol for marking, removing,
- and keeping music with any of multiple tags. This is particularly
- important for `\keepWithTag' since one cannot achieve the same
- effect by using multiple consecutive `\keepWithTag' commands.
-
- * The `-d old-relative' option has been removed. Not actually
- accessible from the command line any more, its remaining use was
- for interpretating `\relative' in LilyPond files converted
- automatically from version 1.8 or older. It is unclear how much
- of this was actually still operative.
-
- * The meaning of `instrumentTransposition' has been reversed. After
- \set instrumentTransposition = #{ b #}
- a written `c'' now sounds like `b'. Previously, this would have
- been the other way round. This and the following change should
- make dealing with transposing instruments more straightforward.
-
- * The music generated by `\set' and `\override' commands is no
- longer affected by `\transpose'. The main consequence is that
- `\transpose' will transpose audible/concert pitch and printed
- pitch by the same amount even when the transposed music contains
- `\transposition'. Previously,
- \transpose c' f' \transposition bes'
- was equivalent to `\transposition f''. Now it stays equivalent to
- `\transposition bes''.
-
- * When checking for collisions, LilyPond no longer treats objects as
- rectangles. Instead, the actual shape of objects is approximated
- using an integral-like approach. This generally results in more
- even and snug positioning of objects and systems:
-
- [image of music]
-
- Previously, the above snippet looked like this:
-
- [image of music]
-
- Affected objects include `Accidentals', `Beams', `Clefs',
- `Dynamics', `FiguredBass', `Flags', `Glissandos', `Lyrics',
- `MetronomeMarks', `OttavaBrackets', `Pedals', `RehearsalMarks',
- `Rests', `Scripts', `TextScripts', `Ties', `Tuplets' and
- `VoltaBrackets'.
-
- * Tuplets are now created with the `\tuplet' command, which takes a
- fraction `T/N' to specify that T notes are played in the time
- usually allowed for N. One `\tuplet' command can create several
- tuplet groups if their duration is typed after the fraction.
-
- \tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
- \tuplet 3/2 4 { c8 d e f e d } c2
+ `measure position';
+
+ \time 3/4
+ \repeat volta 2 { c2 e4 | }
+ \alternative {
+ { \time 4/4
+ \set Timing.measurePosition = #(ly:make-moment -1/2)
+ f2 | }
+ { f2 d4 | }
+ }
+ g2. |
[image of music]
- The `\times' command with its inverted fraction order `N/T' is
- still available.
+ and `chord changes';
- * Introducing two new markup-commands; `\draw-dashed-line' and
- `\draw-dotted-line'.
+ <<
+ \new ChordNames {
+ \set chordChanges = ##t
+ \chordmode { c1:m d:m c:m d:m }
+ }
+ \new Staff {
+ \repeat volta 2 { \chordmode { c1:m } }
+ \alternative {
+ { \chordmode { d:m } }
+ { \chordmode { c:m } }
+ }
+ \chordmode { d:m }
+ }
+ >>
+ [image of music]
- The dashed-line extends to the whole length given by DEST, if
- `full-length' is set to `#t' (this is the default) without any
- space at the beginning or end. `off' will then be altered to fit.
- To insist on the given (or default) values of `on', `off' use
- `\override #'(full-length . #f)'. Manual settings for `on', `off'
- and `phase' are possible.
- The dotted-line always extends to the whole length given by DEST,
- without any space at the beginning or end. Manual settings for
- `off' are possible to get larger or smaller space between the dots.
- The given (or default) value of `off' will be altered to fit the
- line-length.
+ * 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.
+
+ * A new note head style for Tabulature has been added;
+ `TabNoteHead.style = #'slash'.
+
+ * 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
+
+ \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
+ [image of music]
- \markup {
- \draw-dashed-line #'(5.1 . 2.3)
- \override #'(on . 0.3)
- \override #'(off . 0.5)
- \draw-dashed-line #'(5.1 . 2.3)
- \draw-dotted-line #'(5.1 . 2.3)
- \override #'(thickness . 2)
- \override #'(off . 0.2)
- \draw-dotted-line #'(5.1 . 2.3)
+
+ * 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:
+
+ \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]
- * Starting with version 2.17.10, error messages or the `textedit'
- URI used for point-and-click functionality specify column numbers
- starting with 1 rather than 0. The byte offset (also part of
- `textedit' URIs) still starts at 0.
+ \new Staff { r16 c'16 ~ 8 ~ 4 ~ 2 | }
+ [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 `\clef' command supports optional transposition:
+ * Beaming exceptions can now be constructed using the
+ `\beamExceptions' scheme function. One can now write
- \clef "treble_(8)"
- c2 c
- \clef "bass^[15]"
- c2 c
+ \time #'(2 1) 3/16
+ \set Timing.beamExceptions =
+ \beamExceptions { 32[ 32] 32[ 32] 32[ 32] }
+ c16 c c |
+ \repeat unfold 6 { c32 } |
[image of music]
- * The LilyPond syntax of dot-separated words `Voice.Accidental' has
- been made interchangeable with `#'(Voice Accidental)', a Scheme
- list of symbols. As one result, code like
- \override Voice.TextSpanner #'(bound-details left text) = "rit."
- is now equivalent to
- \override Voice.TextSpanner bound-details.left.text = "rit."
- or even
- \override #'(Voice TextSpanner) bound-details.left.text = "rit."
-
- * Grob and grob property path no longer need to be specified as two
- separate arguments to commands like `\override' and `\revert',
- allowing for the syntax
- \override Voice.TextSpanner.bound-details.left.text = "rit."
- Since complementary music functions like `\overrideProperty'
- cannot support forms with and without separating space at the same
- time, using a single dotted path is now the preferred form.
- Specifying grob path and grob property path separately, currently
- still supported with `\override' and `\revert' for compatibility
- reasons, is deprecated.
-
- * Due to words now being accepted as symbol function arguments, the
- interfaces of `\accidentalStyle', `\alterBroken', `\footnote' and
- `\tweak' had to be redesigned where optional symbol arguments were
- involved. Please check the respective music function
- documentation for details.
-
- * Several commands now accept symbol lists (conveniently entered as
- dot-separated words) for various kinds of arguments. These
- include `\accidentalStyle', `\alterBroken', `\footnote', `\hide',
- `\omit', `\overrideProperty', `\shape', and `\tweak'.
-
- * The bar line user interface has changed. Bar glyphs now resemble
- the appearance of the bar line, so a left repeat sign has to be
- coded as `.|:'. The command `\defineBarLine' provides an easy way
- to define additional bar line styles.
-
- * Accidentals in the key signature may be printed in octaves other
- than their traditional positions, or in multiple octaves.
+ 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
- [image of music]
+ \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
+ )))
+
+ * 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 `midiLength' and
+ `midiExtraVelocity' properties on `ArticulationEvent'. See
+ `script-init.ly' for examples.
+
+ * 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.