Textspannerumfunktionierung

Begonnen von Hilflos-im-Code, Sonntag, 25. März 2018, 14:06

« vorheriges - nächstes »

Hilflos-im-Code

Ich habe folgenden Code:
\version "2.19.81"

{ \relative c'' {

\override TextSpanner.style =#'line
\override TextSpanner.bound-details.right.padding = #6
\override TextSpanner.bound-details.left.text =
    \markup { \draw-line #'(0 . 1.5) }
  \override TextSpanner.thickness = #1.
  \override TextSpanner.color = #red
  \override TextSpanner.thickness =#2
\override TextSpanner.Y-offset = #-5.5

    b4 b4
c4_\markup {\with-color #red
              \translate  #'(0.5  . -2.75 )
              \fontsize #'-2
             {"1."} }\startTextSpan
c4 | % 247
    d4 d4 d2 | % 248
    c4 c4 d4 d4
   | % 249
    b4
     \stopTextSpan
     b4 b2 \break |
     b4 b4 c4_\markup {\with-color #red
              \translate  #'(0.5  . -2.75 )
              \fontsize #'-2
             {"1."} }\startTextSpan c4 | % 251
    d2 d2 | % 252
    d4 c4 c4  d4 | % 253
    b2 \stopTextSpan b2 \bar "|."

}

     }


Kann ich mit einem dieser Textspannerbefehlen \override TextSpanner bewirken, dass der Textspanner am Anfang eine Linie hoch bekommt? Also einen rechten Winkel bildet.

Wie schaffe ich es, dass der Text auf der Linie steht? Und nicht davor oder dahinter?

Malte

Ich weiß nicht genau, was du meinst, hast du nicht schon genau das erreicht, was du beschreibst?

Ansonsten wäre ein Minimalbeispiel hilfreich, also alles weglassen, was nicht mit dem Problem zu tun hat (viele Noten, mehrere Spanner, diverse \overrides wie thickness, color, Y-offset, padding ...).

Ach ja, zum Thema Y-offset: Wie wär es stattdessen mit einem\override TextSpanner.direction = #DOWN?

Hilflos-im-Code

Bitte schön.
\version "2.19.81"

{ \relative c'' {

\override TextSpanner.style =#'line
\override TextSpanner.bound-details.right.padding = #-1
\override TextSpanner.bound-details.left.text =
    \markup { \draw-line #'(0 . 1.5) }
  \override TextSpanner.Y-offset = #-5.5


c4_\markup {
              \translate  #'(0.5  . -2.75 )
              \fontsize #'-2
             {"1."} }\startTextSpan
c4 | % 247
    d4 d4 d2 | % 248
    c4 c4 d4 d4  \stopTextSpan
 
   
}

     }



1. Ich suche für
\override TextSpanner.bound-details.left.text =
    \markup { \draw-line #'(0 . 1.5) }



etwas in der Art \override TextSpanner.linker-Haken = #'UP. Bloß was muss ich für "linker Haken" schreiben, falls es da was gibt.
2. Wenn ich "1." in TextSpanner.bound-details.left.text  reinschreibe, dann ist die 1 nicht in dem rechten Winkel, sondern ausserhalb. Und der Textspanner im Sinne der Aufgabe verschoben. Siehe
\version "2.19.81"

{ \relative c'' {

\override TextSpanner.style =#'line
\override TextSpanner.bound-details.right.padding = #-1
\override TextSpanner.bound-details.left.text =
    \markup {"1" \draw-line #'(0 . 1.5) }



\override TextSpanner.Y-offset = #-5.5


c4_\markup {
               }\startTextSpan
c4 | % 247
    d4 d4 d2 | % 248
    c4 c4 d4 d4  \stopTextSpan
 
   
}

     }





harm6

Den Haken und das "1." hast Du ja schon kodiert mittels bound-details.left.text, ändere lediglich die Reihenfolge.
Um die Linien sich treffen zu lassen, verwende \with-dimensions, wobei der zweite x-Wert bound-details.left.padding (default ist 0.25) sowie die thickness kompensieren muß.

Führt zu:

\version "2.19.81"

\relative c'' {

  \override TextSpanner.style = #'line
  \override TextSpanner.bound-details.left.text =
      \markup
        \with-dimensions #'(0 . -0.27) #'(0 . 2)
        { \draw-line #'(0 . 1.8) \raise #0.2 \normal-text "1." }

  b1\startTextSpan
  s1
  b1\stopTextSpan
}


Gruß,
  Harm

Hilflos-im-Code


Hilflos-im-Code

Ich versuche das gerade für mich in eine Funktion umzuschreiben, scheitere aber schon bei:


\version "2.19.81"
LieStart =

#(define-scheme-function
  (parser location mrkp   )
  (markup?    )
#{
 
\tweak bound-details.left.text
\markup     \with-dimensions #'(0 . -0.27) #'(0 . 2)     
{ \draw-line #'(0 . 1.5) \raise #0.2    #mrkp }
#})



{ b4\LieStart "3" \startTextSpan b  \stopTextSpan b}

Hilflos-im-Code

Die Lösung war:

\version "2.19.81"
LieStart =

#(define-scheme-function
  (parser location mrkp   )
  (markup?    )
#{

\tweak bound-details.left.text
\markup     \with-dimensions #'(0 . -0.27) #'(0 . 2)     
{ \draw-line #'(0 . 1.5) \raise #0.2    #mrkp }
\startTextSpan
#})



{ b4-\LieStart "3"  b  \stopTextSpan b}


Warum das Umpositionieren von \startTextSpan und das "-" vor "\LieStart" den Unterschied ausmachen, erschließt sich mir nicht.

harm6

ZitatWarum das Umpositionieren von \startTextSpan und das "-" vor "\LieStart" den Unterschied ausmachen, erschließt sich mir nicht.

Du willst ja meinen override-code in einen tweak packen und als Funktion benutzen.

Dazu sollte man ein paar Punkte beachten:
(1)
Ein tweak ist in der angestrebten Verwendung ein post-event. Jedes post-event muß sich in die Liste bereits vorhandener post-events einfügen lassen.
Per default übernimmt LilyPond das vielfach für Dich ohne das Du es mitbekommst. Aber eigentlich kann jedes post-event mit einem vorangestellten "-"-Zeichen versehen werden, oder aber mit Richtungsangaben: "_" oder "^"
Beispiel:

{
  c'8
    -[
    -\tweak style #'solid
    -\startTextSpan
    --
    -\tweak color #red
    -!
    -"foo"
    -(
    -\(
    -\>
    -1
    -\2
    -\rightHandFinger #2
  d'
    -]
    -\stopTextSpan
    -)
    -\)
    -\!
}

(2)
Ein tweak muß von der Musik die ge-tweaked wird gefolgt werden.
Mittlerweile gibt es zwar die Möglichkeit \etc zu verwenden um den Aufruf der Musik zu verschieben, aber da Du ja eine Variable übergeben willst, kannst Du diese Syntax nicht verwenden.
(3)
Wenn Du jetzt eine scheme-funktion oder music-function verwendest, so muß der Aufruf also mit vorangestelltem "-"-Zeichen erfolgen, ansonsten wird kein post-event erstellt.
Auch muß diese function die Musik ausgeben (in diesem Fall \startTextSpan), die modifiziert werden soll.

Deshalb funktioniert Dein Coding jetzt.
Allerdings kann einiges noch einfacher gestaltet werden.
Verwende define-event-function. Dadurch wird automatisch ein post-event erstellt.
Gib dieser function ein zusätzliches music-Argument an letzter Stelle (und gebe dieses dann auch aus), dann sieht es in meinen Augen zumindest nachher besser aus.

Führt zu:


\version "2.19.81"

LieStart =
#(define-event-function (mrkp mus) (markup? ly:music?)
#{
  \tweak bound-details.left.text
    \markup
      \with-dimensions #'(0 . -0.27) #'(0 . 2)     
      { \draw-line #'(0 . 1.5) \raise #0.2 #mrkp }
  $mus
#})

{ b4\LieStart "3" \startTextSpan b \stopTextSpan b }


HTH,
  Harm

Hilflos-im-Code


Hilflos-im-Code

Ist es möglich den Inhalt von \tweak bound-details.left.text
    \markup
      \with-dimensions #'(0 . -0.27) #'(0 . 2)     
      { \draw-line #'(0 . 1.5) \raise #0.2 #mrkp }

bei einem Zeilenumbruch in der zweiten Zeile zu unterdrücken?

harm6

Dazu verwende zusätzlich bound-details.left-broken.text. Solange das ungesetzt bleibt wird der Wert von bound-details.left.text genommen.

Also:

\version "2.19.81"

LieStart =
#(define-event-function (mrkp mus) (markup? ly:music?)
#{
  \tweak bound-details.left-broken.text #'()
  \tweak bound-details.left.text
    \markup
      \with-dimensions #'(0 . -0.27) #'(0 . 2)     
      { \draw-line #'(0 . 1.5) \raise #0.2 #mrkp }
  $mus
#})

{ b1\LieStart "3" \startTextSpan \break b1 b \stopTextSpan b }


Gruß,
  Harm

Hilflos-im-Code

Danke. Optisch stört mich ja, dass der TextSpanner gleich am Violinschlüssel weitergeht. Als ich in "Hals über Kopf" nachsehen wollte, wie man so etwas machen "soll", habe ich nichts dazu gefunden. Einer der Gründe, wie heißten diese Textspanner auf deutsch?

harm6

ZitatOptisch stört mich ja, dass der TextSpanner gleich am Violinschlüssel weitergeht.

bound-details.left-broken.padding
ist das zu setzende property.
Meld' Dich wenn das nicht reicht.


Zitatwie heißten diese Textspanner auf deutsch?
Keine Ahnung.

Gruß,
  Harm