Autor Thema: Tuplet Number formatieren (gelöst)  (Gelesen 1371 mal)

Manuela

  • Gast
Tuplet Number formatieren (gelöst)
« 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.
« Letzte Änderung: Freitag, 30. Dezember 2016, 14:03 von Manuela »

harm6

  • Gast
Re: Tuplet Number formatieren
« Antwort #1 am: Freitag, 30. Dezember 2016, 13:35 »
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
Zitat
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

harm6

  • Gast
Re: Tuplet Number formatieren
« Antwort #2 am: Freitag, 30. Dezember 2016, 13:55 »
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

Manuela

  • Gast
Re: Tuplet Number formatieren
« Antwort #3 am: Freitag, 30. Dezember 2016, 14:02 »
Danke Harm für die rasche Antwort!  :)

Manuela

  • Gast
Re: Tuplet Number formatieren (gelöst)
« Antwort #4 am: Freitag, 31. März 2017, 08:53 »
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 }
}