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?
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?
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
}
}
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
Danke.
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}
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.
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
Danke.
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?
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
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?
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