}
@end lilypond
+@item
+Tuplet number formatting functions are now available to print other fractions and to add notes to the number or fraction:
+@lilypond[quote]
+\relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+ \times 2/3 { c4. c4. c4. c4. } % begin verbatim
+
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+ \times 2/3 { c4. c4. c4. c4. }
+
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+
+ \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+ \times 2/3 { c4. c4. c4. c4. }
+}
+@end lilypond
+
@item
FretBoards now have a chordChanges property to keep repeated FretBoard objects
from being typeset.
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{changing-the-tuplet-number.ly}
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{non-default-tuplet-numbers.ly}
+
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{permitting-line-breaks-within-beamed-tuplets.ly}
--- /dev/null
+%% Do not edit this file; it is auto-generated from input/new
+%% This file is in the public domain.
+\version "2.12.3"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+LilyPond also provides formatting functions to print tuplet numbers different
+than the actual fraction, as well as to append a note value to the tuplet
+number or tuplet fraction.
+"
+ doctitle = "Non-default tuplet numbers"
+} % begin verbatim
+
+
+\relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+ \times 2/3 { c4. c4. c4. c4. } % begin verbatim
+
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+ \times 2/3 { c4. c4. c4. c4. }
+
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+
+ \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+ \times 2/3 { c4. c4. c4. c4. }
+}
merging-multi-measure-rests-in-a-polyphonic-part.ly
modifying-tuplet-bracket-length.ly
multi--measure-rest-markup.ly
+non-default-tuplet-numbers.ly
permitting-line-breaks-within-beamed-tuplets.ly
positioning-multi--measure-rests.ly
printing-metronome-and-rehearsal-marks-below-the-staff.ly
--- /dev/null
+\version "2.12.3"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+LilyPond also provides formatting functions to print tuplet numbers different
+than the actual fraction, as well as to append a note value to the tuplet
+number or tuplet fraction.
+"
+ doctitle = "Non-default tuplet numbers"
+} % begin verbatim
+
+
+\relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+ \times 2/3 { c4. c4. c4. c4. }
+
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+
+ \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+ \times 2/3 { c4. c4. c4. c4. }
+}
<tuplet bracket="yes" show-number="both" show-type="both" number="1" type="start">
<tuplet-actual>
<tuplet-number>7</tuplet-number>
+ <tuplet-type>eighth</tuplet-type>
<tuplet-dot/>
</tuplet-actual>
<tuplet-normal>
<tuplet-number>5</tuplet-number>
+ <tuplet-type>breve</tuplet-type>
</tuplet-normal>
</tuplet>
</notations>
--- /dev/null
+\version "2.12.3"
+\header{
+ texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
+}
+\layout { ragged-right= ##t }
+
+
+\context Voice \relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-denominator-text 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
+ \times 2/3 { c4. c4. c4. c4. }
+}
--- /dev/null
+\version "2.12.3"
+\header{
+ texidoc="Non-standard tuplet texts: Printing a tuplet fraction with note durations assigned to both the denominator and the numerator."
+}
+
+
+\context Voice \relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::fraction-with-notes "4." "8")
+ \times 2/3 { c4. c4. c4. c4. }
+ \once \override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
+ \times 2/3 { c4. c4. c4. c4. }
+}
--- /dev/null
+\version "2.12.3"
+\header{
+ texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
+}
+\layout { ragged-right= ##t }
+
+
+\context Voice \relative c'' {
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \once \override TupletNumber #'text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
+ \times 2/3 { c8 c8 c8 c8 c8 c8 }
+}
(base_number_function, base_duration))
func.newline ()
elif self.display_type == "both": # TODO: Implement this using actual_type and normal_type!
- warning (_ ("Tuplet brackets displaying both note durations are not implemented, using default"))
if self.display_number == None:
func ("\\once \\override TupletNumber #'stencil = ##f")
func.newline ()
elif self.display_number == "both":
- func ("\\once \\override TupletNumber #'text = #%s" % base_number_function)
- func.newline ()
+ den_duration = self.normal_type.ly_expression (None, True)
+ # If we don't have an actual type set, use the normal duration!
+ if self.actual_type:
+ num_duration = self.actual_type.ly_expression (None, True)
+ else:
+ num_duration = den_duration
+ if (self.display_denominator or self.display_numerator):
+ func ("\\once \\override TupletNumber #'text = #(tuplet-number::non-default-fraction-with-notes %s \"%s\" %s \"%s\")" %
+ (self.display_denominator, den_duration,
+ self.display_numerator, num_duration))
+ func.newline ()
+ else:
+ func ("\\once \\override TupletNumber #'text = #(tuplet-number::fraction-with-notes \"%s\" \"%s\")" %
+ (den_duration, num_duration))
+ func.newline ()
else:
if self.display_number == None:
func ("\\once \\override TupletNumber #'stencil = ##f")
(ly:event-property ev 'denominator)
(ly:event-property ev 'numerator))))
+
+; a formatter function, which is simply a wrapper around an existing
+; tuplet formatter function. It takes the value returned by the given
+; function and appends a note of given length.
+(define-public ((tuplet-number::append-note-wrapper function note) grob)
+ (let* ((txt (if function (function grob) #f)))
+ (if txt
+ (markup txt #:fontsize -5 #:note note UP)
+ (markup #:fontsize -5 #:note note UP))))
+
+; Print a tuplet denominator with a different number than the one derived from
+; the actual tuplet fraction
+(define-public ((tuplet-number::non-default-tuplet-denominator-text denominator) grob)
+(number->string (if denominator
+ denominator
+ (ly:event-property (event-cause grob) 'denominator))))
+
+; Print a tuplet fraction with different numbers than the ones derived from
+; the actual tuplet fraction
+(define-public ((tuplet-number::non-default-tuplet-fraction-text denominator numerator) grob)
+ (let* ((ev (event-cause grob))
+ (den (if denominator denominator (ly:event-property ev 'denominator)))
+ (num (if numerator numerator (ly:event-property ev 'numerator))))
+ (format "~a:~a" den num)))
+
+; Print a tuplet fraction with note durations appended to the numerator and the
+; denominator
+(define-public ((tuplet-number::fraction-with-notes denominatornote numeratornote) grob)
+ (let* ((ev (event-cause grob))
+ (denominator (ly:event-property ev 'denominator))
+ (numerator (ly:event-property ev 'numerator)))
+ ((tuplet-number::non-default-fraction-with-notes denominator denominatornote numerator numeratornote) grob)))
+
+; Print a tuplet fraction with note durations appended to the numerator and the
+; denominator
+(define-public ((tuplet-number::non-default-fraction-with-notes denominator denominatornote numerator numeratornote) grob)
+ (let* ((ev (event-cause grob))
+ (den (if denominator denominator (ly:event-property ev 'denominator)))
+ (num (if numerator numerator (ly:event-property ev 'numerator))))
+ (make-concat-markup (list
+ (make-simple-markup (format "~a" den))
+ (markup #:fontsize -5 #:note denominatornote UP)
+ (make-simple-markup " : ")
+ (make-simple-markup (format "~a" num))
+ (markup #:fontsize -5 #:note numeratornote UP)))))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Color
actual_type = tuplet_elt.get_actual_type ()
if actual_type:
actual_note = musicexp.Duration ()
- (actual_note.duration_log, actual_note.dots) = normal_type
+ (actual_note.duration_log, actual_note.dots) = actual_type
tsm.actual_type = actual_note
# Obtain non-default nrs of notes from the tuplet object!
display_values = {"none": None, "actual": "actual", "both": "both"}
if hasattr (tuplet_elt, "show-number"):
tsm.display_number = display_values.get (getattr (tuplet_elt, "show-number"), "actual")
- if tsm.display_number == "actual" and tsm.display_denominator:
- needed_additional_definitions.append ("tuplet-non-default-denominator")
- elif tsm.display_number == "both" and (tsm.display_numerator or tsm.display_denominator):
- needed_additional_definitions.append ("tuplet-non-default-fraction")
if hasattr (tuplet_elt, "show-type"):
- if getattr (tuplet_elt, "show-type") == "actual":
- needed_additional_definitions.append ("tuplet-note-wrapper")
tsm.display_type = display_values.get (getattr (tuplet_elt, "show-type"), None)
return tsm