Wie erstelle ich Positions-/Barre-Marker in Lilypond?

Ich habe vor kurzem angefangen, mit LilyPond zu experimentieren (Version 2.18.2, falls es darauf ankommt). Ich war ziemlich erfolgreich bei der Erstellung grundlegender Partituren, aber ich kann nicht herausfinden, wie ich Positions- / Taktmarkierungen für meine Gitarrenpartituren richtig erstellen soll.

Die Dokumentation schlägt vor, Text Spanners für diesen Zweck zu verwenden, und mit dieser Methode konnte ich die folgende Ausgabe erzeugen:

LilyPond-Marker

Obwohl sie im Grunde funktional sind, würde ich es vorziehen, wenn ich sie näher daran aussehen lassen könnte (in MuseScore erstellt):

Geben Sie hier die Bildbeschreibung ein

Genauer gesagt, die Dinge, die ich in LilyPond tun möchte, sind:

1. Richten Sie die Linie an der Mitte der Zahl und nicht am unteren Rand aus.

2. Die Möglichkeit, am Ende der Linie einen "Haken" hinzuzufügen, der das Ausmaß der Barre anzeigt.

Ich habe mit den Optionen für Text Spanners experimentiert, konnte aber keine Fortschritte erzielen. Ich habe auch diesen Lösungsvorschlag gefunden, aber ich kann nicht nur nicht verfolgen, was tatsächlich vor sich geht, die abgebildete Ausgabe entspricht nicht dem, was ich zu erreichen hoffe.

Kurz gesagt, was ich frage, ist:

1. Ist es möglich, das zu erreichen, was ich erreichen möchte, nachdem ich Text Spanners verwendet habe, und wie würde ich vorgehen?

2. Wenn nicht, gibt es eine andere Funktion/Problemumgehung, die ich ausprobieren könnte, um die gewünschte Ausgabe zu erzeugen?

3. Wenn beides nicht möglich ist, gibt es einen alternativen Weg, um dieselben Informationen mit einer Funktion zu übermitteln, die in LilyPond einfacher zu erstellen ist?

Antworten (2)

Ich habe das Beispiel in der Dokumentation verwendet und den Text links vom Schraubenschlüssel verschoben, während der Haken jetzt rechts platziert ist. Wahrscheinlich gibt es eine Möglichkeit, einen booleschen Wert in die Funktion einzufügen, um von "hooked" zu "non-hooked" zu wechseln, aber ich konnte nicht herausfinden, wie ...

Wie auch immer, um Ihre Fragen zu beantworten: Ja, es ist möglich, dies mit Textschlüsseln zu tun:

hbarre =
#(define-music-function (barre location str music) (string? ly:music?)
   (let ((elts (extract-named-music music '(NoteEvent EventChord))))
     (if (pair? elts)
         (let ((first-element (first elts))
               (last-element (last elts)))
           (set! (ly:music-property first-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction -1)
                       (ly:music-property first-element 'articulations)))
           (set! (ly:music-property last-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction 1)
                       (ly:music-property last-element 'articulations))))))
   #{
       \once \override TextSpanner.font-size = #-2
       \once \override TextSpanner.font-shape = #'upright
       \once \override TextSpanner.staff-padding = #3
       \once \override TextSpanner.style = #'line
       \once \override TextSpanner.to-barline = ##f
       \once \override TextSpanner.bound-details =
            #`((left
                (text . ,#{ \markup { \raise #-.5 \concat { #str " " }} #})
                (Y . 0)
                (padding . .25)
                (attach-dir . -2))
               (right
                (text . ,#{ \markup { \draw-line #'( 0 . -.75) } #})
                (Y . 0)
                (padding . 0.25)
                (attach-dir . 2)))
      $music
   #})

dbarre =
#(define-music-function (barre location str music) (string? ly:music?)
   (let ((elts (extract-named-music music '(NoteEvent EventChord))))
     (if (pair? elts)
         (let ((first-element (first elts))
               (last-element (last elts)))
           (set! (ly:music-property first-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction -1)
                       (ly:music-property first-element 'articulations)))
           (set! (ly:music-property last-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction 1)
                       (ly:music-property last-element 'articulations))))))
   #{
       \once \override TextSpanner.font-size = #-2
       \once \override TextSpanner.font-shape = #'upright
       \once \override TextSpanner.staff-padding = #3
       \once \override TextSpanner.style = #'dashed-line
       \once \override TextSpanner.dash-fraction = #.5
       \once \override TextSpanner.dash-period = #1
       \once \override TextSpanner.to-barline = ##f
       \once \override TextSpanner.bound-details =
            #`((left
                (text . ,#{ \markup { \raise #-.5 \concat { #str " " }} #})
                (Y . 0)
                (padding . .25)
                (attach-dir . -2))
               (right
                (Y . 0)
                (padding . 0.25)
                (attach-dir . 2)))
      $music
   #})

\relative c' {
  \clef "treble_8"
  \key g \major
  \time 4/4
  \hbarre #"C III" { g4 g g g }  \dbarre #"IV" { g g g g }  g g g g
}

Geben Sie hier die Bildbeschreibung ein

Vielen Dank! Genau das wollte ich. Wenn ich das richtig verstehe, sollte ich diese in einer separaten Datei speichern und einfach in andere Projekte importieren können (damit ich dies nicht jedes Mal eingeben muss)?
Richtig, Sie können den Schemateil (bis zu \relative) in eine andere ly-Datei stecken und ihn einfach mit einbinden \include.

Mit Jaspers ausgezeichneter Antwort (nochmals vielen Dank!) konnte ich einige kleine Änderungen vornehmen, von denen ich dachte, ich würde sie hier für die Nachwelt veröffentlichen.

Die Ausgabe sieht nun so aus:

Geben Sie hier die Bildbeschreibung ein

Zu den Änderungen gehören:

  1. Die Schriftart wurde fett und etwas größer gemacht, was meiner Meinung nach im Kontext mit anderen Notationen besser aussah.
  2. Separate Funktion für Half-Barre-Anzeige hinzugefügt.
  3. Es muss kein „C“ mehr manuell eingegeben werden – es muss nur noch die römische Zahl angegeben werden.

Hier ist der Code:

\version "2.18.2"

cWithSlash = \markup {
  \translate #'(0.0 . 0.8) \smaller { \musicglyph #"timesig.C22" }
}

cWithoutSlash = \markup {
  \translate #'(0.0 . 0.8) \smaller { \musicglyph #"timesig.C44" }
}

guithalfbarre =
#(define-music-function (barre location str music) (string? ly:music?)
   (let ((elts (extract-named-music music '(NoteEvent EventChord))))
     (if (pair? elts)
         (let ((first-element (first elts))
               (last-element (last elts)))
           (set! (ly:music-property first-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction -1)
                       (ly:music-property first-element 'articulations)))
           (set! (ly:music-property last-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction 1)
                       (ly:music-property last-element 'articulations))))))
   #{
       \once \override TextSpanner.font-shape = #'upright
       \once \override TextSpanner.staff-padding = #3
       \once \override TextSpanner.style = #'line
       \once \override TextSpanner.to-barline = ##f
       \once \override TextSpanner.bound-details =
            #`((left
                (text . ,#{ \markup { \raise #-.5 \concat { \cWithSlash \bold { #str " " }}} #})
                (Y . 0)
                (padding . .25)
                (attach-dir . -2))
               (right
                (text . ,#{ \markup { \draw-line #'( 0 . -.75) } #})
                (Y . 0)
                (padding . 0.25)
                (attach-dir . 2)))
      $music
   #})

guitbarre =
#(define-music-function (barre location str music) (string? ly:music?)
  (let ((elts (extract-named-music music '(NoteEvent EventChord))))
        (if (pair? elts)
            (let ((first-element (first elts))
                  (last-element (last elts)))
              (set! (ly:music-property first-element 'articulations)
                    (cons (make-music 'TextSpanEvent 'span-direction -1)
                          (ly:music-property first-element 'articulations)))
              (set! (ly:music-property last-element 'articulations)
                    (cons (make-music 'TextSpanEvent 'span-direction 1)
                          (ly:music-property last-element 'articulations))))))
      #{
          \once \override TextSpanner.font-shape = #'upright
          \once \override TextSpanner.staff-padding = #3
          \once \override TextSpanner.style = #'line
          \once \override TextSpanner.to-barline = ##f
          \once \override TextSpanner.bound-details =
               #`((left
                   (text . ,#{ \markup { \raise #-.5 \concat { \cWithoutSlash \bold { #str " " }}} #})
                   (Y . 0)
                   (padding . .25)
                   (attach-dir . -2))
                  (right
                   (text . ,#{ \markup { \draw-line #'( 0 . -.75) } #})
                   (Y . 0)
                   (padding . 0.25)
                   (attach-dir . 2)))
         $music
      #})


guitpos =
#(define-music-function (barre location str music) (string? ly:music?)
   (let ((elts (extract-named-music music '(NoteEvent EventChord))))
     (if (pair? elts)
         (let ((first-element (first elts))
               (last-element (last elts)))
           (set! (ly:music-property first-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction -1)
                       (ly:music-property first-element 'articulations)))
           (set! (ly:music-property last-element 'articulations)
                 (cons (make-music 'TextSpanEvent 'span-direction 1)
                       (ly:music-property last-element 'articulations))))))
   #{
       \once \override TextSpanner.font-shape = #'upright
       \once \override TextSpanner.staff-padding = #3
       \once \override TextSpanner.style = #'dashed-line
       \once \override TextSpanner.dash-fraction = #.5
       \once \override TextSpanner.dash-period = #1
       \once \override TextSpanner.to-barline = ##f
       \once \override TextSpanner.bound-details =
            #`((left
                (text . ,#{ \markup { \raise #-.5 \concat \bold { { #str " " }}} #})
                (Y . 0)
                (padding . .25)
                (attach-dir . -2))
               (right
                (Y . 0)
                (padding . 0.25)
                (attach-dir . 2)))
      $music
   #})

So wurde das obige Beispiel erstellt

\relative c' {
  %1
  \guithalfbarre #"III" {g4 g4 g4 g4} |

  %2
  \guitbarre #"VI" { g4 g4 g4 g4 }

  %3
  \guitpos #"V" {g4 g4 g4 g4} |
}