Autor Thema: Durchgehender Taktstrich durch alle Systemen  (Gelesen 2928 mal)

iugin

  • Member
Durchgehender Taktstrich durch alle Systemen
« am: Sonntag, 25. Oktober 2015, 19:16 »
Hallo miteinander

nach langer Abwesenheit melde ich mich wieder mit einem Problem, das ich nicht lösen kann.
Ich möchte in einer Partitur die Takte gruppieren, und z.B. nach vier Takten ein dickes Taktstrich setzen. Das ist kein Problem.
Nur: ich möchte, dass dieser Taktstrick durch alle Systeme geht, unabhängig davon, ob die Systeme gruppiert sind oder nicht.
ChoirStaff hat kein Span_bar_engraver. Ich kann es mit
  \layout {
  \context {
   \Score
   \consists "Span_bar_engraver"
  }
}
hinfügen, aber dann habe ich überall durchgehende Taktstriche.
Kann ich diesen Engraver nur dort hinfügen, wo ich es brauche?
Hier ein bisschen Code:
\version "2.18.2"

dickesBar = {
\once \override Score.BarLine #'hair-thickness = #7
}

\score {
  <<
  \new StaffGroup <<
    \new Staff { a'1 a' \dickesBar a'}
    \new Staff { a'1 a' a'}
  >>
  \new ChoirStaff <<
    \new Staff { a'1 a' a'}
    \new Staff { a'1 a' a'}
  >>
  >>
}
 

Ich danke euch für eure Hilfe und wünsche einen schönen Abend

Liebe Grüsse

Eugenio

fugenkomponist

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #1 am: Sonntag, 25. Oktober 2015, 22:19 »
Kann ich diesen Engraver nur dort hinfügen, wo ich es brauche?
Nicht dass ich wüsste. Zu jedem Kontext gehört ein Engraver entweder ganz oder gar nicht (bitte korrigiert mich, wenn ich falsch liege).

Ein bisschen in die richtige Richtung könnte folgendes gehen:\version "2.18.2"

dickesBar = {
  \once \override Score.BarLine #'hair-thickness = #7
  \once \undo \hide Score.SpanBar
}

\layout {
  \context {
    \Score
    \consists "Span_bar_engraver"
    \hide SpanBar
  }
}

\score {
  <<
    \new StaffGroup <<
      \new Staff { a'1 a' \dickesBar a'}
      \new Staff { a'1 a' a'}
    >>
    \new ChoirStaff <<
      \new Staff { a'1 a' a'}
      \new Staff { a'1 a' a'}
    >>
  >>
}
Allerdings werden da bei normalen Taktstriche auch die StaffGroup-SpanBars versteckt, nicht nur diejenigen, die zum Score, aber keiner StaffGroup gehören.

Edit: Bin mir gerade nicht sicher, ob \once \undo \hide unter 2.18.2 schon funktioniert, ich hab hier gerade nur 2.19.28 …

iugin

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #2 am: Sonntag, 25. Oktober 2015, 22:27 »
Hallo fugenkomponist

danke für deine Antwort :)
Eine ähnliche Lösung hatte ich auch, aber eben, das Problem war, dass dann im StaffGroup die Taktstriche zwischen den Systemen fehlen.
Ich denke auch, dass die Engraver entweder gesetzt werden oder nicht, aber ich habe gedacht, ich frage mal...
Wenn es so ist, ist kein Problem, ich werde es überleben ;)

Einen lieben Gruss

Eugenio

Ps: in 2.18.2 \once \undo \hide funktioniert.

fugenkomponist

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #3 am: Sonntag, 25. Oktober 2015, 22:36 »
Du könntest mal auf der englischen Liste fragen (oder vielleicht kommt auch so ein LilyPond-Experte wie z. B. harm hier noch vorbei); nur weil ich nicht weiter weiß, heißt das noch nicht, daß es nicht geht ;)

harm6

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #4 am: Sonntag, 25. Oktober 2015, 22:58 »
Nicht besonders schön, aber scheint zu klappen:

\version "2.18.2"

#(define ((my-test-engraver thickness amount) context)
   `((acknowledgers
     (bar-line-interface .
       ,(lambda (engraver grob source-engraver)
          (if (zero? (modulo (ly:context-property context 'currentBarNumber) amount))
              (begin
                (set! (ly:grob-property grob 'hair-thickness) thickness)
                (set! (ly:grob-property grob 'allow-span-bar) #t))))))))

\score {
  <<
  \new StaffGroup <<
    \new Staff
      %% SpanBar is removed in layout, but we want one below this Staff
      \with { \override BarLine.allow-span-bar = ##t }
      \repeat unfold 9 { a'1 }
    \new Staff
      \repeat unfold 9 { a'1 }
  >>
  \new ChoirStaff
  <<
    \new Staff \repeat unfold 9 { a'1 }
    \new Staff \repeat unfold 9 { a'1 }
  >>
  >>
  \layout {
    \context {
      \Staff
      %% every 4th bar a BarLine with hair-thickness 7:
      \consists #(my-test-engraver 7 4)
    }
    \context {
      \Score
      %% SpanBars are possible/allowed everywhere in Score
      \consists "Span_bar_engraver"
      %% generally, don't print them
      \override BarLine.allow-span-bar = ##f
    }
  }    
}


HTH,
  Harm

Zitat von: fugenkomponist
(oder vielleicht kommt auch so ein LilyPond-Experte wie z. B. harm hier noch vorbei)
Du bist doch selbst schon längst ein Experte!! ;)

EDIT:
Fehler im code korrigiert
Kommentare ergänzt
« Letzte Änderung: Montag, 26. Oktober 2015, 00:25 von harm6 »

fugenkomponist

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #5 am: Montag, 26. Oktober 2015, 20:22 »
Du bist doch selbst schon längst ein Experte!! ;)
Ok, ich hab tatsächlich einiges gelernt in den letzten sechs Jahren, besonders diesen Sommer :) Aber ich kannte z. B. die Property 'allow-span-bar nicht, bin ehrlich gesagt auch nicht darauf gekommen, daß es sowas geben könnte, und hab deshalb nicht in die IR geschaut …

Und ich hab z. B. immer noch keine Ahnung, wie man nen Engraver schreibt. Hab zwar Beispiele gesehen, aber bisher noch nichts selbst auf die Reihe gekriegt (auch nur einmal probiert, bin da aber grandios gescheitert und hab ne andere Lösung gefunden).
« Letzte Änderung: Montag, 26. Oktober 2015, 21:55 von fugenkomponist »

harm6

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #6 am: Montag, 26. Oktober 2015, 23:19 »
Zitat von: fugenkomponist
Und ich hab z. B. immer noch keine Ahnung, wie man nen Engraver schreibt. Hab zwar Beispiele gesehen, aber bisher noch nichts selbst auf die Reihe gekriegt (auch nur einmal probiert, bin da aber grandios gescheitert und hab ne andere Lösung gefunden).

In den Regressiontests gibt es ein paar Beispiele.
‘scheme-engraver-instance.ly’
‘scheme-engraver.ly’

In:
‘scheme-text-spanner.ly’
würde ich nicht schauen, zu komplex.

Für den Anfang würde ich mich auf listeners bzw acknowledgers beschränken, das ist für die meisten Fälle sowieso hinreichend.

In den Regtests wird allerdings David's makro `make-engraver' benutzt, ich komme besser mit der reinen scheme-Liste klar, da die Struktur für mich klarer ist, aber schau selbst.

engraver zu programmieren ist wahrlich nichts für Anfänger. Es ist noch nicht lange her, daß ich jeden erfolgeichen Versuch rot im Kalender markiert habe ;)

Wenn Du Fragen hast werde versuchen(!) zu antworten...


Gruß,
  Harm

iugin

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #7 am: Dienstag, 27. Oktober 2015, 07:57 »
Liebe alle
Lieber Harm

danke vielmals! Es funktioniert prima! Es ist also, wie alles in Lilypond, möglich :)
Jetzt noch eine Frage: wäre es möglich den Code so zu verändern, dass ich einen dicken Taktstrich dort einsetzen kann wo ich will? So etwas wie:
{
c4 c4 c4 c4 |
c4 c4 c4 c4 \bigBar
c4 ...
Wenn es aber ein zu grosser Aufwand wäre, bitte lassen. Ich meine: bis vor ein paar Jahren hatte ich alles mit Bleistift gemacht. Jetzt dass ich Lilypond benutze, möchte alles mit ihm machen, ist aber nicht nötig (auch wenn es Spass macht) ;)

Lieber Gruss

Eugenio

harm6

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #8 am: Dienstag, 27. Oktober 2015, 19:11 »
Wenn Du die dicken durchgehenden Taktstriche manuell setzen willst kann man auf den engraver sogar verzichten:

\version "2.18.2"

dickesBar = {
  \once \override Score.BarLine.hair-thickness = #7
  \once \override Score.BarLine.allow-span-bar = ##t
}

bar-voice = {
s1
\dickesBar
s1*2
\dickesBar
s1*3
\dickesBar
s1*2
\dickesBar
s1
}


\score {
  <<
  \new StaffGroup <<
    \new Staff
      %% SpanBar is removed in layout, but we want one below this Staff
      \with { \override BarLine.allow-span-bar = ##t }
      << \repeat unfold 9 { a'1 } \bar-voice >>
    \new Staff
      \repeat unfold 9 { a'1 }
  >>
  \new ChoirStaff
  <<
    \new Staff \repeat unfold 9 { a'1 }
    \new Staff \repeat unfold 9 { a'1 }
  >>
  >>
  \layout {
    \context {
      \StaffGroup
      \remove "Span_bar_engraver"
    }
    \context {
      \Score
      \consists "Span_bar_engraver"
      \override BarLine.allow-span-bar = ##f
    }
  }    
}


HTH,
  Harm

iugin

  • Member
Re: Durchgehender Taktstrich durch alle Systemen
« Antwort #9 am: Mittwoch, 28. Oktober 2015, 07:53 »
:-D
Hey, danke! So einfach war das! Mist, manchmal kommt man sich schon ein bisschen blöd vor... :-)

Einen lieben Gruss und einen schönen Tag

Eugenio