Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: Manuela am Freitag, 30. Dezember 2016, 13:06
-
In vielen älteren Noten sind die Triolenziffern mit Bogen unterstrichen, wie sie durch \undertie erzeugt werden.
Für Sextolen z.B. erzeugt folgender Code den gewünschten Output, wenn die Beschriftung unterhalb der Noten steht.
\version "2.19.52"
\relative c'' {
\override TupletNumber.text =
\markup { \undertie " 6 " }
\tuplet 6/4 {
< d c' >16 a' fis d c a
}
}
Ich schaffe es nicht, die Beschriftung zu verallgemeinern,
\version "2.19.52"
\relative c'' {
\override TupletNumber.text =
\markup { \undertie #tuplet-number::calc-fraction-text }
\tuplet 6/4 {
< d c' >16 a' fis d c a
}
}
beispielsweise funktioniert überhaupt nicht.
-
tuplet-number::calc-fraction-text ist eine procedure, die ein Argument erwartet.
Man kann sich das vor Augen führen, indem man es
(1) im source code sucht
(2) in einem ly-file
#(display tuplet-number::calc-fraction-text)
-> #<procedure tuplet-number::calc-fraction-text (grob)>
(3) im terminal
lilypond scheme-sandbox
GNU LilyPond 2.18.2
Processing `/home/harm/lilypond/usr/share/lilypond/current/ly/scheme-sandbox.ly'
Parsing...
guile> tuplet-number::calc-fraction-text
#<procedure tuplet-number::calc-fraction-text (grob)>
guile>
Im "normal"-Fall:
\override TupletNumber.text = #tuplet-number::calc-fraction-text
wird das Argument automatisch richtig gewählt. In Deiner ausgeweiteten procedure mußt Du selbst dafür sorgen.
\relative c'' {
\override TupletNumber.text =
#(lambda (grob)
(let ((my-tn (tuplet-number::calc-fraction-text grob)))
#{ \markup { \undertie #my-tn } #}))
\tuplet 6/4 {
< d c' >16 a' fis d c a
}
}
oder:
#(define (my-tuplet-number::calc-fraction-text grob)
(let ((my-tn (tuplet-number::calc-fraction-text grob)))
#{ \markup { \undertie #my-tn } #}))
\relative c'' {
\override TupletNumber.text = #my-tuplet-number::calc-fraction-text
\tuplet 6/4 {
< d c' >16 a' fis d c a
}
}
Gruß,
Harm
-
Vielleicht auch verallgemeinert:
#(define (my-tuplet-number::calc-fraction-text grob)
(let (;; let 'direction evaluate to use the generic tie-markup-command
(dir (ly:grob-property grob 'direction)))
(make-tie-markup (tuplet-number::calc-fraction-text grob))))
\relative c'' {
\override TupletNumber.text = #my-tuplet-number::calc-fraction-text
\tuplet 6/4 { < d c' >16 a' fis d c a }
\voiceOne
\tuplet 6/4 { < d c' >16 a' fis d c a }
}
-Harm
-
Danke Harm für die rasche Antwort! :)
-
So, ich bin nochmals auf diesen Thread zurückgekommen.
Zum einen wollte ich nur den Denominator des Tuplets angeschrieben haben, zum anderen den Bogen ein bisschen größer gestalten.
Da die Standardfunktionen von Lilypond \tupletXXXX (XXXX = UP, DOWN..) nur die Richtung der Klammern festlegen, nicht die der Nummern und Harms Code anscheinend die Richtung der Nummern abfragt, habe ich ein paar Ergänzungen dazu geschrieben.
\version "2.19.56"
tupletU = {
\tupletUp
\override TupletNumber.direction = #UP
}
tupletD = {
\tupletDown
\override TupletNumber.direction = #DOWN
}
tupletN = {
\revert TupletBracket.direction
\revert TupletNumber.direction
}
#(define (my-tuplet-number::calc-denominator-text grob)
(let (;; let 'direction evaluate to use the generic tie-markup-command
(dir (ly:grob-property grob 'direction)))
(make-tie-markup
(string-append " " (tuplet-number::calc-denominator-text grob) " "))))
%% Beispiel zum Ausprobieren
\relative c'' {
\tupletU
\override TupletNumber.text = #my-tuplet-number::calc-denominator-text
\tuplet 6/4 { d16 a' fis d c a }
\tupletD
\tuplet 6/4 { d16 a' fis d c a }
\tupletN
\tuplet 6/4 { d16 a' fis d c a }
\tuplet 6/4 { d,16 a' fis d c a }
}