Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: infranator am Mittwoch, 2. April 2014, 21:14
-
Hallo Leute,
bisher habe ich oft folgendes Snippet für die Kombination von Coda und Umbruch verwendet:
http://lsr.di.unimi.it/LSR/Item?id=190 (http://lsr.di.unimi.it/LSR/Item?id=190)
Vom Ergebnis her schön, aber ein ganz schönes Rumgefummel.
Jetzt habe ich mal probiert den Barline stencil zu überschreiben, was eigentlich ganz gut funktioniert.
\version "2.18.0"
dcAlFine =
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup
\with-dimensions #'(0 . 6) #'(0 . 0)
\whiteout {
\raise #0.7 {
\line {
\hspace #1.2
\center-column \italic {
"D.C."
\line { al \bold fine }
}
}
}
}
#})
0))
\layout {
\context {
\Score
\override StaffSymbol #'layer = #-2
\override TextScript #'layer = #-1
}
}
{
s1*4 \dcAlFine
\break
\bar "||"
s1*4
}
Das Problem ist, dass bei Wiederholungszeichen am Anfang der nächsten Zeile, der Text nochmal gesetzt wird.
Gibt es eine Möglichkeit das zu verhindern?
Viele Grüße,
infranator
-
Hallo,
das Problem beteht darin, daß beim Zeilen wechsel zwei stencils entstehen. Der eine wird ans Zeilenende, der andere an den Anfang der neuen Zeile gedruckt.
(Passiert übrigens immer in dieser Situation! Je nach Taktstrichart ist es allerdings ein empty-stencil, also nicht sichtbar.)
Mittels ly:item-break-dir sind die beiden aber unterscheidbar und auch einzeln ansprechbar.
Oder Du definierst gleich neue Taktstricharten :)
Im Code unten ist beides:
\version "2.18.0"
%\paper { ragged-right = ##t }
\layout {
\context {
\Score
\override StaffSymbol #'layer = #-2
\override TextScript #'layer = #-1
}
}
mrkp =
\markup {
\with-dimensions #'(0.298 . 6) #'(0 . 0)
\whiteout {
\raise #0.7 {
\line {
\hspace #1.2
\center-column \italic {
"D.C."
\line { al \bold fine }
}
}
}
}
}
#(define (make-my-dcAlFine-bar-line grob extent)
(grob-interpret-markup grob mrkp))
#(add-bar-glyph-print-procedure "m" make-my-dcAlFine-bar-line)
#(define-bar-line "m" "m" #f " ")
#(define-bar-line "||m" "||m" #f "||")
#(define-bar-line "||m-r" "||m" ".|:" "")
dcAlFine =
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
X RIGHT
(grob-interpret-markup grob #{
\markup
\with-dimensions #'(0 . 6) #'(0 . 0)
\whiteout {
\raise #0.7 {
\line {
\hspace #1.2
\center-column \italic {
"D.C."
\line { al \bold fine }
}
}
}
}
#})
0))
dcAlFine-rev =
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(let ((stil (ly:bar-line::print grob))
(break-dir (ly:item-break-dir grob)))
(if (= -1 break-dir)
(ly:stencil-combine-at-edge
stil
X RIGHT
(grob-interpret-markup grob #{
\markup
\with-dimensions #'(0 . 6) #'(0 . 0)
\whiteout {
\raise #0.7 {
\line {
\hspace #1.2
\center-column \italic {
"D.C."
\line { al \bold fine }
}
}
}
}
#})
0)
stil)))
{ s1*4 \break \dcAlFine \bar "||" s1*4 }
{ s1*4 \break \bar "||m" s1*4 }
\new StaffGroup
<<
{ s1*4 \break \bar "||m-r" s1*4 }
{ s1*4 s1*4 }
>>
{ s1*4 \break \dcAlFine-rev \bar ".|:" s1*4 }
Natürlich gibt es ein Problem hier. Denn der eingefügte Text erscheint in einer StaffGroup mit zwei Systemen auch zwei mal, nicht unbedingt was man haben will.
Eine gute Lösung hab' ich da aber auch nicht.
Gruß,
Harm
-
Wow vielen Dank!
Damit bin ich mehr als zufrieden, auf die Art schreibe ich "d.c." sowieso nur in einfachen Leadsheets.
Außerdem hat sich damit noch eine andere Frage von mir geklärt. Nämlich wie man Doppelstriche mit \bar "[|:" kombiniert.
#(define-bar-line "[|:-||" "||" "[|:" "")
{
s1
\break
\bar "[|:-||"
s1
}
Wieder etwas Licht ins dunkle gebracht ;-)