LilyPond - N-tolen-Klammer in einen kleinen Bogen umwandeln

Ich habe ein Cellostück von Sebastian Lee , das ziemlich viele N-Tolen verwendet.

Mein Snippet mit der default LilyPond -Einstellung sieht so aus:

Geben Sie hier die Bildbeschreibung ein

Das sieht ziemlich gut aus, das Problem ist, dass ein Anfänger leicht denken könnte, dass dies der Fingersatz war, besonders in diesem Beispiel, wo btatsächlich mit einem dritten Finger auf der G-Saite gespielt würde.

Also habe ich \override TupletBracket.bracket-visibility = ##tden X-Tolen-Spanner/die Klammer gedruckt, was zu einem sehr hässlichen Druck führt:

Geben Sie hier die Bildbeschreibung ein

Eine Ausgabe, die auf IMSLP verfügbar ist , sieht so aus:

Geben Sie hier die Bildbeschreibung ein

was ich persönlich etwas schöner finde (nicht missverstanden, ich rede hier nur vom N-Tolenschlüssel, nicht vom ganzen Druck)

Kennt hier jemand eine mögliche Änderung des Schraubenschlüssels, damit es eher wie dieser kleine Bogen im dritten Beispiel aussieht?

Sebastian Lee, Op.70 im LilyPond-Format auf GitHub

Antworten (1)

Ein erster Ansatz wäre, den Text der X-tolen-Nummer zu ändern und einen kleinen Bogen anzuhängen:

bow-up = \markup { \with-dimensions #'(0 . 3) #'(0 . 0) 
    \override #'(filled . #t) 
    \path #.1 #'((moveto 0 0)
                 (curveto 1 1.2 2 1.2 3 0)
                 (curveto 2 0.9 1 0.9 0 0)
                 (closepath)) }

bow-down = \markup { \with-dimensions #'(0 . 3) #'(0 . 0) 
    \override #'(filled . #t) 
    \path #.1 #'((moveto 0 0)
                 (curveto 1 -1.2 2 -1.2 3 0)
                 (curveto 2 -0.9 1 -0.9 0 0)
                 (closepath)) }

#(define-markup-command (tuplet-bow-up layout props tuplet-number) (markup?)
  (interpret-markup layout props
    (markup #:center-column(#:vspace -.2 bow-up #:vspace -.6 #:line(tuplet-number)))))

#(define-markup-command (tuplet-bow-down layout props tuplet-number) (markup?)
  (interpret-markup layout props
    (markup #:center-column(#:vspace .2 tuplet-number #:vspace -1 #:line(bow-down)))))

tupletBowUp = #(define-scheme-function (parser location tuplet-number) (string?)
     #{\override TupletNumber.text = \markup \tuplet-bow-up #tuplet-number #})

tupletBowDown = #(define-scheme-function (parser location tuplet-number) (string?)
     #{\override TupletNumber.text = \markup \tuplet-bow-down #tuplet-number #})

\score {
  { 
    \clef bass
    \time 3/4
    \tupletBowUp "3" \tuplet 3/2 { c8 b, c } \tupletBowDown "3" \tuplet 3/2 { e8 g e } \tuplet 3/2 { e8 g e } c'4
  }

  \layout{}
}

Mit \tupletBowUp "3"setzen Sie die Anzahl aller folgenden N-Tolen auf eine 3 mit einem kleinen Bogen darüber. Mit \tupletBowDown "3"stellen Sie es auf eine 3 mit einer kleinen Schleife darunter. Sie können andere Zahlen eingeben, wie Sie möchten.

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Aber ich bin sicher, das geht auch viel raffinierter. Allerdings kenne ich die Interna von LilyPond nicht so gut. Toll wäre zum Beispiel, wenn der kleine Bogen je nach Position automatisch über oder unter der Zahl schalten würde.


Bearbeiten: Eine andere Möglichkeit wäre, die N-Tolen-Klammer wie diesen Vorschlag zu ändern und einen Kommentar vorzuschlagen (Entschuldigung, ich habe den Kommentar erst gesehen, nachdem ich meine Antwort bearbeitet hatte). Ich habe den Code aus dem verlinkten Vorschlag etwas geändert, um ihn zu vereinfachen und die Bögen kleiner zu machen:

printTupletBow = {
  \override TupletBracket #'stencil = #ly:slur::print

  \override TupletBracket #'thickness = #1.2

  \override TupletBracket #'control-points =
    #(lambda (grob)
      (let* ((x-pos (ly:grob-property grob 'X-positions))
             (pos (ly:grob-property grob 'positions))
             (x-ln (interval-length x-pos))
             (dir (ly:grob-property grob 'direction))
             (height (- (cdr pos) (car pos)))
             (height-corr (* 0.3 dir height))
             (edge-height (ly:grob-property grob 'edge-height '(0.7 . 0.7))))

        (list 
          (cons 
            (+ (car x-pos) (* x-ln 1/4)) 
            (+ (car pos) (* 1 dir (car edge-height))))
          (cons 
            (+ (car x-pos) (* x-ln 3/8)) 
            (+ (car pos) (* dir (+ 1.5 height-corr))))
          (cons 
            (+ (car x-pos) (* x-ln 5/8)) 
            (+ (cdr pos) (* dir (- 1.5 height-corr))))
          (cons 
            (+ (car x-pos) (* x-ln 3/4))  
            (+ (cdr pos) (* 1 dir (cdr edge-height)))))))
}

\score {
  {
    \clef bass
    \time 3/4
    \tuplet 3/2 { c8 b, c } \tuplet 3/2 { e8 g e } \tuplet 3/2 { e8 g e } c'4
  }
}

\layout {
  \printTupletBow
}

Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie die Bögen vorübergehend weglassen möchten, können Sie \once \override TupletBracket.stencil = ##fdirekt vor der entsprechenden N-Tole verwenden.

Ein Problem bei diesem Ansatz besteht darin, dass der Bogen ziemlich stark geneigt wird, wenn die Noten größere Intervalle umfassen. Aber es könnte eine nette Lösung sein, wenn Ihr Stück hauptsächlich N-Tolen mit Balken enthält.

Ich werde Ihren Link in LilyPonds offiziellem IRC auf Freenode posten , vielleicht sind sie inspiriert... :-) so wie ich! (sieht so viel schöner aus als die Halterung!)
Das ist nicht nötig, da ich mich auch von dort inspirieren ließ. Der grundlegende Code kann also auch bereits vorhanden sein.
Gibt es eine Möglichkeit, die Bögen weiter unten im Stück wegzulassen, wie Sie es bei tun \omit TupletNumber?
Für das zweite Beispiel können Sie \once \override TupletBracket.stencil = ##f.
Sie sollten dies unbedingt zum LSR - Snippet Repository hinzufügen