Autor Thema: Layer ändern  (Gelesen 2438 mal)

DocTaxon

  • Member
Layer ändern
« am: Montag, 21. Oktober 2013, 09:42 »
Hallo!

Ich habe den Code mal etwas eingekürzt, aber hier ist es deutlich zu sehen, dass die Taktlinie  durch den Text geht. Mir wäre es lieber, wenn der Text die Taktlinie unterbricht. Da kann man wohl irgendwie mit Layern oder whiteout arbeiten, vielleicht kann man aber auch einen Parameter in den \markup-Befehl schreiben.

Für Eure Hilfe wie immer dankbar,
DocTaxon

\version "2.16.0"

padInstr =
#(define-scheme-function (parser location amount arg)(number? markup?)
#{ \markup \pad-x #amount #arg #})

dashPlus = "trill"

\header {
}

\layout {
  indent = 35
  short-indent = 15
  \context {
    \Score
    \override NonMusicalPaperColumn #'line-break-permission = ##f
    \override NonMusicalPaperColumn #'page-break-permission = ##f
    \override BarNumber #'font-shape = #'italic
    \override BarNumber #'self-alignment-X = #LEFT
    \override InstrumentName #'self-alignment-X = #RIGHT
  }
}

\paper {
  #(set-paper-size "a4")
  print-page-number = ##t
  print-first-page-number = ##f
  oddHeaderMarkup = \markup {
    \fill-line {
      \null
      \on-the-fly #print-page-number-check-first
      \fromproperty #'page:page-number-string
    }
  }
}

musicI = {
  \clef treble
  \key e \major
  \time 4/4
  b8-.( \repeat unfold 6 b8-. b8-.) b-.( \repeat unfold 6 b8-. cis16 dis) e( dis cis b a gis fis e) r2 \break
}

musicII = {
  \clef treble
  \key e \major
  \time 4/4

  r2^\markup { \halign #-4 \small Solo } b'4-|(^\markup { \caps "Il canto de gl'ucelli" } b-|) b-|( b-| b-| b-|) b8-.( \repeat unfold 6 { b8-. } b8-.) \break
}

music = { <<
  \new StaffGroup <<
    \new Staff = "violin0" \with { instrumentName = \padInstr #3 \markup \override #'(baseline-skip . 2.5) \right-column { Violino \line { principale } } shortInstrumentName = \padInstr #3 "Vl. pr." midiInstrument = #"violin" }
    \relative c'' {
      \musicI
    }
    \new StaffGroup \with { systemStartDelimiter = #'SystemStartSquare instrumentName = \padInstr #3 "Violino" shortInstrumentName = \padInstr #3 "Vl." }
    <<
      \new Staff = "violin1" \with { instrumentName = #"I" shortInstrumentName = #"I" midiInstrument = #"violin" }
      \relative c'' {
        \musicII
      }
      \new Staff = "violin2" \with { instrumentName = #"II" shortInstrumentName = #"II" midiInstrument = #"violin" }
      \relative c'' {
       
    }
    >>
  >>     
>> }

\score {
  \music
 
  \layout { }


\score {
  \unfoldRepeats

<<

  \music
>>

  \midi {
    \context {
      \Staff
      \remove "Staff_performer"
    }
    \context {
      \Voice
      \consists "Staff_performer"     
    }
    \tempo 4 = 100
  }
}

harm6

  • Member
Re: Layer ändern
« Antwort #1 am: Montag, 21. Oktober 2013, 14:24 »
Hallo Doc,

das ganze hat eigentlich nur wenig mit 'layer zu tun. Der Befehl dazu wäre:
\override TextScript #'layer = #<what-ever-number>

Du könntest es mit 'whiteout probieren. Der Befehl dazu wäre:
\override TextScript #'whiteout = ##t

Allerdings empfinde ich den output von \override TextScript #'whiteout = ##t manchmal als zu knapp bemessen.
Um hier mehr Flexibilität zu gewinnen, könntest Du im \markup
\pad-around #<what-ever-number>
benutzen.
Dieser Befehl beeinflußt jedoch das vertikale spacing und ist natürlich nur innerhalb von \markup verwendbar.

Um hier Abhilfe zu schaffen habe ich mal die Funktion 'moreWhiteout' geschrieben.
Sie verlangt als Argumente den grob-Namen als string, sowie ein Zahlenpaar um die zusätzliche horizontale/vertikale Ausdehnung anzugeben.

Beschränkungen:
Ich habe nach Deiner Angabe 2.16.2-Syntax benutzt und mich auf grobs aus dem 'Bottom-context (idR 'Voice) beschränkt.
Mit 2.17.28 ginge das eleganter und die Ausweitung auf andere Contexte sehr viel leichter. (Geht auch mit 2.16., ist aber aufwendiger)
Es ist jetzt nur für den aktuellen Fall getestet, falls Dir etwas auffällt, melde Dich. :)

\version "2.16.0"

moreWhiteout =
  #(define-music-function (parser location grob-name adds)(string? pair?)
 
    (define (flexible-stencil-whiteout add stencil)
      (let*
          ((x-ext (ly:stencil-extent stencil X))
           (y-ext (ly:stencil-extent stencil Y)))
        (ly:stencil-add
         (stencil-with-color
            (ly:round-filled-box
               (interval-widen x-ext (car add))
               (interval-widen y-ext (cdr add))
               0.0)
            white)
         stencil)))
   
    (define more-stencil-whiteout
      (lambda (grob)
           (let* ((function (assoc-get 'stencil
                                 (reverse (ly:grob-basic-properties grob))))
                  (stil (if (procedure? function) (function grob) point-stencil))
                  (x-ext (ly:stencil-extent stil X))
                  (y-ext (ly:stencil-extent stil Y))
                  (whiteout-stil (flexible-stencil-whiteout adds stil)))
             (ly:make-stencil
                (ly:stencil-expr whiteout-stil)
                x-ext
                y-ext))))
    #{
      %% Needed for 2.17.x:
      \override $grob-name #'vertical-skylines = #'()
      \once \override $grob-name #'stencil =
         #more-stencil-whiteout
    #})

padInstr =
#(define-scheme-function (parser location amount arg)(number? markup?)
#{ \markup \pad-x #amount #arg #})

dashPlus = "trill"

\header {
}

\layout {
  indent = 35
  short-indent = 15
  \context {
    \Score
    \override NonMusicalPaperColumn #'line-break-permission = ##f
    \override NonMusicalPaperColumn #'page-break-permission = ##f
    \override BarNumber #'font-shape = #'italic
    \override BarNumber #'self-alignment-X = #LEFT
    \override InstrumentName #'self-alignment-X = #RIGHT
  }
}

\paper {
  #(set-paper-size "a4")
  print-page-number = ##t
  print-first-page-number = ##f
  oddHeaderMarkup = \markup {
    \fill-line {
      \null
      \on-the-fly #print-page-number-check-first
      \fromproperty #'page:page-number-string
    }
  }
}

musicI = {
  \clef treble
  \key e \major
  \time 4/4
  b8-.( \repeat unfold 6 b8-. b8-.) b-.( \repeat unfold 6 b8-. cis16 dis) e( dis cis b a gis fis e) r2 \break
}

musicII = {
  \clef treble
  \key e \major
  \time 4/4
  r2^\markup { \halign #-4 \small Solo }
%  \once \override TextScript #'whiteout = ##t
  \moreWhiteout "TextScript" #'(0 . 0.5)
  b'4-|(^\markup { \caps "Il canto de gl'ucelli" } b-|) b-|( b-| b-| b-|) b8-.( \repeat unfold 6 { b8-. } b8-.) \break
}

music = { <<
  \new StaffGroup <<
    \new Staff = "violin0" \with { instrumentName = \padInstr #3 \markup \override #'(baseline-skip . 2.5) \right-column { Violino \line { principale } } shortInstrumentName = \padInstr #3 "Vl. pr." midiInstrument = #"violin" }
    \relative c'' {
      \musicI
    }
    \new StaffGroup \with { systemStartDelimiter = #'SystemStartSquare instrumentName = \padInstr #3 "Violino" shortInstrumentName = \padInstr #3 "Vl." }
    <<
      \new Staff = "violin1" \with { instrumentName = #"I" shortInstrumentName = #"I" midiInstrument = #"violin" }
      \relative c'' {
        \musicII
      }
      \new Staff = "violin2" \with { instrumentName = #"II" shortInstrumentName = #"II" midiInstrument = #"violin" }
      \relative c'' {
       
    }
    >>
  >>     
>> }

\score {
  \music
 
  \layout { }


\score {
  \unfoldRepeats

<<

  \music
>>

  \midi {
    \context {
      \Staff
      \remove "Staff_performer"
    }
    \context {
      \Voice
      \consists "Staff_performer"     
    }
    \tempo 4 = 100
  }
}

HTH,
  Harm

DocTaxon

  • Member
Re: Layer ändern
« Antwort #2 am: Dienstag, 22. Oktober 2013, 09:31 »
ja, alle diese Möglichkeiten funktionieren für mich zufriedenstellend. Vielen Dank dafür.

Wenn ich jetzt auf 2.17.x wechsle, funktionieren bestimmt meine 2.16-Scripts alle nicht mehr. Deshalb habe ich dbzgl. Bedenken. Was sagst Du dazu?

Danke vielmals, DocTaxon ...

harm6

  • Member
Re: Layer ändern
« Antwort #3 am: Mittwoch, 23. Oktober 2013, 18:22 »
Benutze convert-ly.
Und falls das nicht reicht, frag das Forum. ;)

Gruß,
  Harm

DocTaxon

  • Member
Re: Layer ändern
« Antwort #4 am: Donnerstag, 24. Oktober 2013, 09:28 »
Also, convert-ly benutze ich dann als Kommando in command.com , richtig? Muss ich zuvor die neue Lilypond-Version runterladen und installieren? Dann hätte ich zwei Lilypond-Versionen auf dem Rechner, kann ich beide dann weiterhin nutzen? Oder benutze ich nur die neue Version, die an der Versionsangabe im Script erkennt, wie das Script kompiliert werden soll?

eluze

  • Member
Re: Layer ändern
« Antwort #5 am: Donnerstag, 24. Oktober 2013, 11:41 »
Also, convert-ly benutze ich dann als Kommando in command.com , richtig? Muss ich zuvor die neue Lilypond-Version runterladen und installieren? Dann hätte ich zwei Lilypond-Versionen auf dem Rechner, kann ich beide dann weiterhin nutzen? Oder benutze ich nur die neue Version, die an der Versionsangabe im Script erkennt, wie das Script kompiliert werden soll?

Frescobaldi hat diese Option!

sonst musst du - etwas mühsam -"c:\program files (x86)\lilypond2.16.2\usr\bin\lilypond.exe"  test.lyschreiben oder - auch etwas mühsam - obigen folder zum path hinzufügen und/oder eine variable lilypond162 definieren

Eluze