• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Stencil für BarLine am Zeilenumbruch ändern

Begonnen von infranator, Mittwoch, 2. April 2014, 21:14

Vorheriges Thema - Nächstes Thema

infranator

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
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

harm6

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

infranator

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 ;-)