]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/changes.tely
Issue 5164: Doc: Add usage of OpenType font feature
[lilypond.git] / Documentation / changes.tely
index a5833a823f5ca056e0c782b630f9009b110cb8e4..482bbbdd659d598db0ef027dc0336ccce51bf063 100644 (file)
@@ -61,13 +61,382 @@ which scares away people.
 
 @end ignore
 
+@item
+It is now possible to move systems with reference to their current
+position using the @code{extra-offset} subproperty of
+@code{NonMusicalPaperColumn.line-break-system-details}.  Both vertical
+and horizontal changes are possible.  This feature is especially useful
+for making slight adjustments to the default vertical position of
+individual systems. See @ruser{Explicit staff and system positioning} for
+more information.
+
+@item
+It is now possible to add text to analysis brackets through the
+@code{HorizontalBracketText} object.
+@lilypond[quote,verbatim]
+\layout {
+  \context {
+    \Voice
+    \consists "Horizontal_bracket_engraver"
+  }
+}
+
+{
+  \once \override HorizontalBracketText.text = "a"
+  c''\startGroup d''\stopGroup
+  e''-\tweak HorizontalBracketText.text "a'" \startGroup d''\stopGroup
+}
+@end lilypond
+
+@item
+The ends of hairpins may now be fine-tuned using the @code{shorten-pair}
+grob property, which previously only affected text-spanners like
+@code{TupletBracket} and @code{OttavaBracket}.  Positive values offset
+to the right, negative to the left.
+@lilypond[quote,verbatim]
+{ \once \override Hairpin.shorten-pair = #'(2 . 2)
+  c'1~\<
+  c'2~ c'\!
+  \once \override Hairpin.shorten-pair = #'(-2 . -2)
+  c'1~\<
+  c'2~ c'\! }
+@end lilypond
+
+@item
+In fret-diagrams the distance between frets and the distance between strings is
+now independently adjustable.  Available are @code{fret-distance} and
+@code{string-distance} as subproperties of @code{fret-diagram-details}.
+@lilypond[verbatim,quote]
+fretMrkp = \markup { \fret-diagram-terse #"x;x;o;2;3;2;" }
+
+\markuplist
+\override #'(padding . 2)
+\table #'(0 -1) {
+  "default"
+
+  \fretMrkp
+
+  "fret-distance"
+
+  \override #'(fret-diagram-details . ((fret-distance . 2)))
+  \fretMrkp
+
+  "string-distance"
+
+  \override #'(fret-diagram-details . ((string-distance . 2)))
+  \fretMrkp
+}
+@end lilypond
+
+@item
+Accidental rules can now be defined across @code{ChoirStaff} contexts.
+Two new rules @code{choral} and @code{choral-cautionary} are available
+that combine the characteristics of @code{modern-voice} and @code{piano}
+or their equivalents with cautionary accidentals.
+
+@item
+The music function @code{\unfoldRepeats} can now take an
+optional argument-list specifying which type(s) of repeated music
+should be unfolded.  Possible entries are @code{percent}, @code{tremolo},
+@code{volta}.
+If the optional argument-list is unspecified, @code{repeated-music} will be
+used, unfolding all.
+
+@item
+A new @code{output-attributes} grob property is now used for svg output
+instead of the @code{id} grob property.  It allows multiple attributes
+to be defined as an association list.  For example, @code{#'((id . 123)
+(class . foo) (data-whatever . @qq{bar}))} will produce the following
+group tag in an SVG file: @code{<g id=@qq{123} class=@qq{foo}
+data-whatever=@qq{bar}> @dots{} </g>}.
+
+@item
+Slurs and phrasing slurs may now be started from individual notes
+in a chord.  Several simultanous slurs per @code{Voice} need to be
+distinguished by @code{spanner-id} setting.
+
+@item
+The music and grob property @code{spanner-id} for distinguishing
+simultaneous slurs and phrasing slurs has been changed from a
+string to a @q{key}, a non-negative integer or symbol.
+
+@item
+There is a new command @code{\=} for specifying the
+@code{spanner-id} for simultaneous slurs and phrasing slurs.
+@lilypond[verbatim,quote]
+\fixed c' {
+  <c~ f\=1( g\=2( >2 <c e\=1) a\=2) >
+}
+@end lilypond
+
+@item
+Blocks introduced with @code{\header} can be stored in variables
+and used as arguments to music and scheme functions and as the
+body of @code{#@{@dots{}#@}} constructs.  They are represented as
+a Guile module.
+
+While @code{\book}, @code{\bookpart}, @code{\score}, @code{\with},
+@code{\layout}, @code{\midi}, @code{\paper} blocks can be passed
+around in similar manner, they are represented by different data
+types.
+
+@item
+Dot-separated symbol lists like @code{FretBoard.stencil} were
+already supported as of version@tie{}2.18.  They may now also
+contain unsigned integers, and may alternatively be separated by
+commata.  This allows usage such as
+@lilypond[quote,verbatim]
+{ \time 2,2,1 5/8  g'8 8 8 8 8 }
+@end lilypond
+and
+@example
+\tagGroup violin,oboe,bassoon
+@end example
+
+@item
+Such lists may also be used in expressions for assignments, sets,
+and overrides.  This allows usage such as
+@lilypond[quote,verbatim]
+{ \unset Timing.beamExceptions
+  \set Timing.beatStructure = 1,2,1
+  g'8 8 8 8 8 8 8 8 }
+@end lilypond
+
+@item
+Association list elements could previously be assigned values
+individually (for example, paper variables like
+@code{system-system-spacing.basic-distance}).  They may now be
+also referenced in this manner, as with
+@example
+\paper @{
+  \void \displayScheme \system-system-spacing.basic-distance
+@}
+@end example
+
+In combination with the previously mentioned changes, this allows
+setting and referencing pseudovariables like @code{violin.1}.
+
+@item
+LilyPond source files may now be embedded inside the generated PDF files.
+This experimental feature is disabled by default and may be regarded as unsafe,
+as PDF documents with hidden content tend to present a security risk.
+Please note that not all PDF viewers have the ability to handle embedded
+documents (if not, the PDF output will appear normally and source files
+will remain invisible).  This feature only works with the PDF backend.
+
+@item
+French note names are now defined specifically instead of
+being aliased to Italian note names: in addition to the
+generic Italian-derived syntax, the @var{d} pitch may be
+entered as @code{ré}.  Double sharps may also be
+entered using the @code{-x} suffix.
+
+@item
+Additional bass strings (for lute tablature) are supported.
+@lilypond[quote,verbatim]
+m = { f'4 d' a f d a, g, fis, e, d, c,  \bar "|." }
+
+\score {
+  \new TabStaff \m
+  \layout {
+    \context {
+      \Score
+      tablatureFormat = #fret-letter-tablature-format
+    }
+    \context {
+      \TabStaff
+      stringTunings = \stringTuning <a, d f a d' f'>
+      additionalBassStrings = \stringTuning <c, d, e, fis, g,>
+      fretLabels = #'("a" "b" "r" "d" "e" "f" "g" "h" "i" "k")
+    }
+  }
+}
+@end lilypond
+
+@item
+The markup-list-command @code{\table} is now available.
+Each column may be aligned differently.
+@lilypond[quote,verbatim]
+\markuplist {
+    \override #'(padding . 2)
+    \table
+      #'(0 1 0 -1)
+      {
+        \underline { center-aligned right-aligned center-aligned left-aligned }
+        one "1" thousandth "0.001"
+        eleven "11" hundredth "0.01"
+        twenty "20" tenth "0.1"
+        thousand "1000" one "1.0"
+      }
+}
+@end lilypond
+
+@item
+A new markup-command, @code{\with-dimensions-from}, makes
+@code{\with-dimensions} easier to use by taking the new
+dimensions from a markup object, given as first argument.
+@lilypond[quote,verbatim]
+\markup {
+  \pattern #5 #Y #0 "x"
+  \pattern #5 #Y #0 \with-dimensions-from "x" "f"
+  \pattern #5 #Y #0 \with-dimensions-from "x" "g"
+  \override #'(baseline-skip . 2)
+  \column {
+    \pattern #5 #X #0 "n"
+    \pattern #5 #X #0 \with-dimensions-from "n" "m"
+    \pattern #5 #X #0 \with-dimensions-from "n" "!"
+  }
+}
+@end lilypond
+
+@item
+There are two new page breaking functions.  @code{ly:one-page-breaking}
+automatically adjusts the height of the page to fit the music, so that
+everything fits on one page.  @code{ly:one-line-auto-height-breaking}
+is like @code{ly:one-line-breaking}, placing the music on a single
+line and adjusting the page width accordingly, however it also
+automatically adjusts the page height to fit the music.
+
+@item
+Markup-command @code{\draw-squiggle-line} is now available.
+Customizing is possible with overrides of @code{thickness}, @code{angularity},
+@code{height} and @code{orientation}
+@lilypond[quote,verbatim]
+\markup
+  \overlay {
+    \draw-squiggle-line #0.5 #'(3 . 3) ##t
+
+    \translate #'(3 . 3)
+    \override #'(thickness . 4)
+    \draw-squiggle-line #0.5 #'(3 . -3) ##t
+
+    \translate #'(6 . 0)
+    \override #'(angularity . -5)
+    \draw-squiggle-line #0.5 #'(-3 . -3) ##t
+
+    \translate #'(3 . -3)
+    \override #'(angularity . 2)
+    \override #'(height . 0.3)
+    \override #'(orientation . -1)
+    \draw-squiggle-line #0.2 #'(-3 . 3) ##t
+  }
+@end lilypond
+
+@item
+A new command, @code{\RemoveAllEmptyStaves}, has been made available, which
+acts exactly like @code{\RemoveEmptyStaves}, except for also removing empty
+staves on the first system in a score.
+
+@item
+Markup-commands @code{\undertie} and @code{\overtie} are now available, as well
+as the generic markup-command @code{\tie}.
+@lilypond[quote,verbatim]
+\markup {
+  \undertie "undertied"
+  \overtie "overtied"
+}
+
+m = {
+  c''1 \prall -\tweak text \markup \tie "131" -1
+}
+
+{ \voiceOne \m \voiceTwo \m }
+@end lilypond
+
+@item
+@code{TabStaff} is now able to print micro-tones for bendings etc.
+@lilypond[quote,verbatim]
+\layout {
+  \context {
+    \Score
+    supportNonIntegerFret = ##t
+  }
+}
+
+mus = \relative { c'4 cih d dih }
+
+<<
+  \new Staff << \clef "G_8" \mus >>
+  \new TabStaff \mus
+>>
+@end lilypond
+
+@item
+Two new styles of whiteout are now available.  The @code{outline} style
+approximates the contours of a glyph's outline, and its shape is
+produced from multiple displaced copies of the glyph.  The
+@code{rounded-box} style produces a rounded rectangle shape.  For all
+three styles, including the default @code{box} style, the whiteout
+shape's @code{thickness}, as a multiple of staff-line thickness, can be
+customized.
+
+@lilypond[verbatim,quote]
+\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
+}
+@end lilypond
+
+@item
+All of @code{\override}, @code{\revert}, @code{\set}, and
+@code{\unset} now work with the @code{\once} prefix for making
+one-time settings.
+@lilypond[quote,verbatim]
+\relative {
+  c'4 d
+  \override NoteHead.color = #red
+  e4 f |
+  \once \override NoteHead.color = #green
+  g4 a
+  \once \revert NoteHead.color
+  b c |
+  \revert NoteHead.color
+  f2 c |
+}
+@end lilypond
+
+@item
+When outputting MIDI, LilyPond will now store the @code{title}
+defined in a score's @code{\header} block (or, if there is no
+such definition on the @code{\score} level, the first such
+definition found in a @code{\header} block of the score's
+enclosing @code{\bookpart}, @code{\book}, or top-level scope)
+as the name of the MIDI sequence in the MIDI file.  Optionally,
+the name of the MIDI sequence can be overridden using the new
+@code{midititle} @code{\header} field independently of
+@code{title} (for example, in case @code{title} contains markup
+code which does not render as plain text in a satisfactory way
+automatically).
+
 @item
 Music (and scheme and void) functions and markup commands that
-just supply the final parameters to a chain of music and function
-and markup command calls, respectively, can now be defined in the
-form of just writing the expression cut short with @code{\etc}.
+just supply the final parameters to a chain of overrides, music
+function and markup command calls can now be defined in the form
+of just writing the expression cut short with @code{\etc}.
+
 @lilypond[verbatim,quote]
-bold-red-markup = \markup \bold \with-color #red \etc
+\markup bold-red = \markup \bold \with-color #red \etc
 highlight = \tweak font-size 3 \tweak color #red \etc
 
 \markup \bold-red "text"
@@ -104,18 +473,6 @@ With those particular definitions, LilyPond will try to recognize
 legacy use of @code{parser} and @code{location} arguments,
 providing backwards-compatible semantics for some time.
 
-@item
-The @code{whiteout} grob property and @code{\whiteout} markup command
-now create a white background built from multiple displaced copies of
-the glyph in order to approximate the contours of its outline.
-The previous rounded box white background can be achieved with the
-new @code{whiteout-box} grob property and @code{\whiteout-box} markup
-command.  Setting the @code{whiteout} property to a number now sets
-the thickness of the white outline as a multiple of staff-line
-thickness.  Similarly, overriding the @code{thickness} property of
-the @code{\whiteout} markup command sets the thickness of the white
-outline it produces.
-
 @item
 In the "english" notename language, the long notenames for pitches
 with accidentals now contain a hyphen for better readability.  You
@@ -244,7 +601,7 @@ avoid problems when using multiple, parallel contexts.
 constructs.
 
 @item
-A new command @code{\tagGroup} has now been added.  This compliments
+A new command @code{\tagGroup} has now been added.  This complements
 the existing @code{\keepWithTag} and @code{\removeWithTag} commands.
 For Example:
 
@@ -255,7 +612,7 @@ For Example:
 declares a list of @q{tags} that belong to a single @q{tag group}.
 
 @example
-\keepwithTag#'violinI
+\keepWithTag #'violinI
 @end example
 
 Is now only concerned with @q{tags} from @q{violinI}’s tag group.
@@ -412,7 +769,7 @@ 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 the bracket is not drawn.
+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
@@ -573,7 +930,7 @@ Four new Clef glyphs have been added @emph{Double G}, @emph{Tenor G},
   \clef "varC" c c c c
   \clef "altovarC" c c c c
   \clef "tenorvarC" c c c c
-  \clef "baritonevarC" c c c
+  \clef "baritonevarC" c c c c
   \clef "varpercussion" c c c c
 @end lilypond
 
@@ -657,6 +1014,82 @@ option @samp{-dstrokeadjust} to LilyPond.  When generating
 looking @code{PDF} previews but significantly larger file size.
 Print quality at high resolutions will be unaffected.
 
+@item
+Default text fonts have been changed from
+@code{Century Schoolbook L}, @code{sans-serif}, and @code{monospace}.
+
+For @code{svg} backend:
+@multitable @columnfractions .15 .30
+@headitem Family @tab Default font
+@item @emph{roman} @tab @code{serif}
+@item @emph{sans} @tab @code{sans-serif}
+@item @emph{typewriter} @tab @code{monospace}
+@end multitable
+
+@code{serif}, @code{sans-serif}, and @code{monospace} are
+@code{generic-family} in SVG and CSS specifications.
+
+For other backends:
+@multitable @columnfractions .15 .30 .55
+@headitem Family @tab Default font (alias) @tab Alias definition lists
+@item @emph{roman}
+@tab @code{LilyPond Serif}
+@tab
+TeX Gyre Schola,
+C059, Century SchoolBook URW, Century Schoolbook L,
+DejaVu Serif,
+..., serif
+@item @emph{sans}
+@tab @code{LilyPond Sans Serif}
+@tab
+TeX Gyre Heros,
+Nimbus Sans, Nimbus Sans L, DejaVu Sans,
+..., sans-serif
+@item @emph{typewriter}
+@tab @code{LilyPond Monospace}
+@tab
+TeX Gyre Cursor,
+Nimbus Mono PS, Nimbus Mono, Nimbus Mono L,
+DejaVu Sans Mono,
+..., monospace
+@end multitable
+
+@code{LilyPond Serif}, @code{LilyPond Sans Serif},
+and @code{LilyPond Monospace} are font aliases defined
+in the LilyPond dedicated FontConfig configuration file
+@code{00-lilypond-fonts.conf}.
+Where a character dosen't exist in the first font listed,
+the next font listed will be used instead for that character.
+For details of alias definitions, please see
+to @code{00-lilypond-fonts.conf} under the installed directory.
+
+@item
+When using OpenType fonts, font features can be used.
+Note: Not all OpenType fonts have all functions.
+
+@lilypond[quote,verbatim]
+% True small caps
+\markup { Normal Style: Hello HELLO }
+\markup { \caps { Small Caps: Hello } }
+\markup { \override #'(font-features . ("smcp"))
+          { True Small Caps: Hello } }
+
+% Number styles
+\markup { Normal Number Style: 0123456789 }
+\markup { \override #'(font-features . ("onum"))
+          { Old Number Style: 0123456789 } }
+
+% Stylistic Alternates
+\markup { \override #'(font-features . ("salt 0"))
+          { Stylistic Alternates 0: εφπρθ } }
+\markup { \override #'(font-features . ("salt 1"))
+          { Stylistic Alternates 1: εφπρθ } }
+
+% Multiple features
+\markup { \override #'(font-features . ("onum" "smcp" "salt 1"))
+          { Multiple features: Hello 0123456789 εφπρθ } }
+@end lilypond
+
 @end itemize
 
 @ifhtml