-New features in 2.16
-********************
-
-Fixes and changes after 2.16.0
-==============================
-
-2.16.1
- Please refer to the bug tracker for issues fixed in 2.16.1
- (http://code.google.com/p/lilypond/issues/list?can=1&q=Fixed_2_16_1).
-
-New features in 2.16 since 2.14
-===============================
-
- * Support for cross-staff stems on chords, using `crossStaff' and
- the `Span_stem_engraver'. This calculates the length of
- cross-staff stems automatically.
-
- [image of music]
+New features in 2.18 since 2.16
+*******************************
+
+ * 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.
+
+ * 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.
+
+ soprano = \relative c' { c e g c }
+ alto = \relative c' { a c e g }
+ verse = \lyricmode { This is my song }
+
+ \score {
+ \new Staff <<
+ \partcombine \soprano \alto
+ \new NullVoice = "aligner" \soprano
+ \new Lyrics \lyricsto "aligner" \verse
+ >>
+ \layout {}
+ }
+ [image of music]
- * The syntax of words (character sequences recognized without
- enclosing quotes) and commands (now always a backslash `\'
- followed by a word) has been unified across all modes: it now
- consists of alphabetic characters, possibly enclosing isolated
- dashes `-' and underlines `_'.
+ * Several articulations can be put into a single variable or
+ returned from an event function:
- As one consequence, using unquoted text scripts like (literally!)
- { c-script c\f_script }
- will now tend to result in invalid music. Omitting quote marks
- for arbitrary text rather than keywords has never been good
- practice or even documented, and it is unlikely to have seen
- significant use.
+ sempreStacc = -. ^\markup \italic sempre
+ \relative { c''4\sempreStacc c c c }
+ [image of music]
- Staying with established conventions (like not using dashes or
- underlines for command names intended to be used inside of music)
- remains advisable. The reason for this change is more robust
- recognition of LilyPond's lexical units for LilyPond itself as
- well as external tools interpreting its syntax.
- * Support for Kievan square notation:
+ * 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
- \new KievanVoice {
- \cadenzaOn
- c d e f g a bes
- \bar "kievan"
+ \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 } }
}
[image of music]
- * Augmentation dots now avoid the other voice in two-voice polyphony
- so that users can move the `Dot_column_engraver' to set dots
- independently for each `Voice'.
+ previously looked like
[image of music]
- * A Scheme function to adjust the control points of curves such as
- slurs and ties, developed by several users, is now included in
- LilyPond.
-
- g8->( bes,-.) d4
- \shape Slur #'((-0.5 . 1.5) (-3 . 0) (0 . 0) (0 . 0))
- g8->( bes,!-.) d4
+ without a reliable way to get both scores to line up.
+
+ * 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.
+
+ * 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.
+
+ #(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
+ }
+ \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]
- * Use of `\tempo' specifications in `\midi' blocks (removed in
- 2.9.16 in favor of explicit `tempoWholesPerMinute' settings) has
- seen a revival: now any kind of property-setting music is turned
- into context definitions within output specifications, allowing for
- declarations like
- \layout { \accidentalStyle modern }
- \midi { \tempo 4. = 66 }
-
- * The LilyPond G clef has been redesigned - upper loop is now more
- balanced, bottom crook sticks out less and the "spine" (main
- vertical line) is more evenly curved. The old and new versions can
- be compared by looking at the documentation: old version
- (http://lilypond.org/doc/v2.14/Documentation/notation/the-feta-font.html#clef-glyphs),
- new version
- (http://lilypond.org/doc/v2.15/Documentation/notation/the-feta-font.html#clef-glyphs).
-
- * Lilypond's stencil commands have been simplified to allow for less
- code duplication and better height approximations of graphical
- objects. The following stencil commands have been eliminated:
- * `beam'
-
- * `bezier-sandwich'
-
- * `bracket'
-
- * `dashed-slur'
-
- * `dot'
-
- * `oval'
-
- * `repeat-slash'
-
- * `zigzag-line'
-
- * Flags are now treated as separate objects rather than as stem
- parts.
+ * New commands `markLengthOn' and `markLengthOff' control the
+ allowance of horizontal space for tempo and rehearsal marks.
[image of music]
- * Two alternative methods for bar numbering can be set, especially
- for when using repeated 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.
[image of music]
- * The following is a fundamental change in LilyPond's music
- representation: Rhythmic events like `LyricEvent' and `NoteEvent'
- are no longer wrapped in `EventChord' unless they have been
- actually entered as part of a chord in the input. If you
- manipulate music expressions in Scheme, the new behavior may
- require changes in your code. Calling the music function
- `\eventChords' or the Scheme function `event-chord-wrap!'
- converts to the old representation; using one of those might be
- easiest for keeping legacy code operative.
-
- The following three items are consequences of this change.
-
- * The repetitive chord entry aid `q' has been reimplemented.
- Repeated chords are now replaced right before interpreting a music
- expression. In case the user wants to retain some events of the
- original chord, he can run the repeat chord replacement function
- `\chordRepeats' manually.
-
- * String numbers and right hand fingerings on single notes now appear
- without having to be written inside of chord brackets.
-
- * Music functions now work the same when used inside or outside of
- chords, including all the possibilities of argument parsing.
- Music variables can be used inside of chords: a construct like
-
- tonic=fis'
- { <\tonic \transpose c g \tonic> }
+ * 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'
+
+ One has to write a digit on both sides of the dot - values like
+ `4.' or `-.3' are not allowed.
+
+ Decimal fractions are also not accepted in `\chordmode'.
+
+ * A number of shorthands like `(', `)', `|', `[', `]', `~', `\(',
+ `\)' and others can now freely be redefined like normal commands.
+ An example would be
+
+ "\\{" = (
+ "\\}" = )
+ "(" = \melisma
+ ")" = \melismaEnd
+
+ \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. }
+ >>
[image of music]
- now works as expected. One can use `#{...#}' for constructing
- chord constituents. `\tweak' now works on single notes without
- needing to wrap them in a chord. Using it on command events and
- lyrics is now possible, but not likely to give results yet.
+ * The articulation shorthand for `\staccatissimo' has been renamed
+ from `-|' to `-!'.
- * `\tweak' now takes an optional layout object specification. It can
- be used for tweaking layout objects that are only indirectly
- caused by the tweaked event, like accidentals, stems, and flags:
+ * Tempo change ranges are now written as `\tempo 4 = 60 - 68' rather
+ than `\tempo 4 = 60 ~ 68'.
- <\tweak Accidental #'color #red cis4
- \tweak Accidental #'color #green es
- g>
- [image of music]
-
-
- * Scheme expressions inside of embedded Lilypond (`#{...#}') are now
- executed in lexical closure of the surrounding Scheme code. `$'
- is no longer special in embedded Lilypond. It can be used
- unconditionally in Lilypond code for immediate evaluation of Scheme
- expressions, similar to how `ly:export' could previously be used.
- `ly:export' has been removed. As a consequence, `#' is now free
- to delay evaluation of its argument until the parser actually
- reduces the containing expression, greatly reducing the potential
- for premature evaluation. There are also `splicing' operators `$@'
- and `#@' for interpreting the members of a list individually.
-
- * To reduce the necessity for using `$', Scheme expressions written
- with `#' are interpreted as music inside of music lists, and as
- markups or markup lists inside of markups.
+ * Grob `OctavateEight' was renamed to `ClefModifier'. Related
+ context properties were renamed from `xxxOctavationyyy' to
+ `xxxTranspositionyyy'.
- * Support for jazz-like chords has been improved: Lydian and altered
- chords are recognised; separators between chord modifiers are now
- treated independently of separators between "slash" chords and
- their bass notes (and by default, slashes are now only used for
- the latter type of separator); additional pitches are no longer
- prefixed with "add" by default; and the "m" in minor chords can be
- customized. *note Customizing chord names:
- (lilypond-notation)Customizing chord names. for more information.
+ * 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':
- * The `\markuplines' command has been renamed to `\markuplist' for a
- better match with its semantics and general Lilypond nomenclature.
+ \relative c { c'4 \absolute { f'' g'' } c }
+ [image of music]
- * The interface for specifying string tunings in tablature has been
- simplified considerably and employs the scheme function
- `\stringTuning' for most purposes.
- * Beams can now have their slopes preserved over line breaks.
+ * 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.
- [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
+ [image of music]
- To do this, several callback functions are now deprecated.
- * `ly:beam::calc-least-squares-positions'
- * `ly:beam::slope-damping'
+ * 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):
- * `ly:beam::shift-region-to-valid'
- Furthermore, `ly:beam::quanting' now takes an additional argument
- to help calculations over line breaks. All of these functions are
- now automatically called when setting the `positions' parameter.
+ \new Staff \with { \omit Clef }
+ \relative c'' <a e' \hide a>1
+ [image of music]
- * In function arguments music, markups and Scheme expressions (as
- well as several other syntactic entities) have become mostly
- interchangeable and are told apart only by evaluating the
- respective predicate. In several cases, the predicate is
- consulted by the parser, like when deciding whether to interpret
- `-3' as a number or a fingering event.
- * Music functions (and their close relatives) can now be defined with
- optional arguments.
+ * 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:
- * For defining commands executed only for their side-effects,
- `define-void-function' is now available.
+ \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
+ [image of music]
- * There is a new `define-event-function' command in analogy to
- `define-music-function' that can be used for defining music
- functions acting as post events without requiring a direction
- specifier (`-', `^', or `_') placed before them.
- dyn=#(define-event-function (parser location arg) (markup?)
- (make-dynamic-script arg))
- \relative c' { c\dyn pfsss }
+ 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
[image of music]
- * A list of ASCII aliases for special characters can be included.
-
- \paper {
- #(include-special-characters)
+ The `\times' command with its inverted fraction order `N/T' is
+ still available.
+
+ * Introducing two new markup-commands; `\draw-dashed-line' and
+ `\draw-dotted-line'.
+
+ 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.
+
+ \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)
}
- \markup "• † ©right; &OE; &ss; ¶"
[image of music]
- * There is a new `define-scheme-function' command in analogy to
- `define-music-function' that can be used to define functions
- evaluating to Scheme expressions while accepting arguments in
- Lilypond syntax.
-
- * The construct `#{ ... #}' can now be used not just for
- constructing sequential music lists, but also for pitches
- (distinguished from single note events by the absence of a
- duration or other information that can't be part of a pitch),
- single music events, void music expressions, post events, markups
- (mostly freeing users from having to use the `markup' macro),
- markup lists, number expressions, context definitions and
- modifications, and a few other things. If it encloses nothing or
- only a single music event, it no longer returns a sequential music
- list but rather a void music expression or just the music event
- itself, respectively.
-
- * Pitches can be used on the right side of assignments. They are
- distinguished from single note events by the absence of a duration
- or other information that can't be part of a pitch.
-
- * New command-line option `--loglevel=LEVEL' to control how much
- output LilyPond creates. Possible values are ERROR, WARN,
- BASIC_PROGRESS, PROGRESS, DEBUG.
+ * 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.
- * `\once \set' now correctly resets the property value to the
- previous value.
+ * The `\clef' command supports optional transposition:
- [image of music]
-
-
- * The alignment of dynamic spanners (hairpins, text crescendo, etc.)
- is now automatically broken if a different direction is explicitly
- given.
-
- [image of music]
-
-
- * Appoggiaturas and acciaccaturas now also work inside a slur, not
- only inside a phrasing slur. Also, a function `\slashedGrace' was
- added that does not use a slur from the acciaccatura note.
-
- [image of music]
+ \clef "treble_(8)"
+ c2 c
+ \clef "bass^[15]"
+ c2 c
+ [image of music]
- * To suppress the line on a crescendo text spanner (and other
- similar spanners), LilyPond now fully supports the `#'style =
- #'none' property.
+ * 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.
[image of music]
- * LilyPond.app now supports MacOS X 10.7, thanks Christian Hitz!
-
- * Glissandi can now span multiple lines.
-
\1f