Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: DocTaxon am Montag, 24. Juni 2013, 21:24

Titel: Staff basteln
Beitrag von: DocTaxon am Montag, 24. Juni 2013, 21:24
Hi!

Ich überlege gerade, wie ich ein PianoStaff basteln kann, das anfangs erst mal nur aus der treble-Zeile allein besteht. Dann, wie gewohnt im PianoStaff, aus treble und bass-Zeile, aber ohne SystemStartBrace, und endens wieder nur die treble-Zeile allein.

Folgendes konnte ich mit Lilypond basteln, allerdings sind das drei einzelne Scores untereinander. Wenn ich da eine midi erzeugen wollte, würden drei einzelne midis entstehen, was aber nicht erwünscht ist. So muss es also ein einzelnes Score werden.

Wie das aussehen soll, habe ich im angehängten Bild dargestellt.

Danke vielmals.

\version "2.16.0"

\header{
  tagline = ##f
}

\layout {
  indent = 0
  \context {
    \Score
    \remove "Bar_number_engraver"
  }
  \context {
    \Staff
    \remove "Time_signature_engraver"
  }
  \context {
    \PianoStaff
    \override SystemStartBrace #'stencil = ##f
  }
}

\paper { }

\score {
    \new PianoStaff <<
      \new Staff = "upper"
      \relative c'' {
        \clef treble
        \time 4/4
        \repeat unfold 8 { s1 } \break \repeat unfold 8 { s1 }
      }
    >>
  \layout { }
}

\score {
    \new PianoStaff <<
      \new Staff = "upper"
      \relative c'' {
        \clef treble
        \time 4/4
        \repeat unfold 8 { s1 } \break \repeat unfold 8 { s1 }
      }
      \new Staff = "lower"
      \relative c'' {
        \clef bass
        \time 4/4
        \repeat unfold 8 { s1 } \break \repeat unfold 8 { s1 }
      }
    >>
  \layout { }
}

\score {
    \new PianoStaff <<
      \new Staff = "upper"
      \relative c'' {
        \clef treble
        \time 4/4
        \repeat unfold 8 { s1 } \break \repeat unfold 8 { s1 }
      }
    >>
  \layout { }
}

Titel: Re: Staff basteln
Beitrag von: fugenkomponist am Montag, 24. Juni 2013, 21:38
Du kannst zeitweise einen zusätzlichen Staff definieren. Der folgende Code macht fast das, was du willst, der einzige Unterschied ist, dass die Taktstriche nicht durchgezogen sind.

Warum willst du das denn machen? Kommen da noch Noten rein und wenn ja, willst du womöglich Staffs, die mal in einer Zeile nur Pause haben, ausblenden? Dann kannst du dir das ganze sehr vereinfachen mit \RemoveEmptyStaffContext (da ich es gerade in der Dokumentation nicht finde, seit wann wurde das denn umbenannt in \RemoveEmptyStaves?)

(Ach ja, und warum soll dein PianoStaff keine SystemStartBrace haben?)
\version "2.16.2"

\relative c' {
  s1*8 \break
  <<
    {
      s1*8
    }
    \\
    \new Staff \with {
      \remove Time_signature_engraver
    } {
      \relative c {
        \clef bass
        s1*8
      }
    }
  >>
  \break
  s1*8 \break
}
Titel: Re: Staff basteln
Beitrag von: harm6 am Montag, 24. Juni 2013, 22:41
Hallo Doc,

oder:

\version "2.16.2"


\paper { indent = 0 }

\layout { 
\context {
\Score
\remove "Bar_number_engraver"
}
\context {
\Staff
\RemoveEmptyStaves
\override VerticalAxisGroup #'remove-first = ##t
}
\context {
\PianoStaff
\remove "Keep_alive_together_engraver"
\override SystemStartBrace #'stencil = ##f
}
}

\new PianoStaff <<
  \new Staff \repeat unfold 6 { c'1 \break }
  \new Staff { s1 s c' c' s s  }
>>

Es wäre allerdings schon hilfreich zu wissen, was Du erreichen möchtest.

Zitat von: fugenkomponist
Dann kannst du dir das ganze sehr vereinfachen mit \RemoveEmptyStaffContext (da ich es gerade in der Dokumentation nicht finde, seit wann wurde das denn umbenannt in \RemoveEmptyStaves?)

\RemoveEmptyStaves ist nicht nur umbenannt, sondern auch modifiziert worden. Die alte Definitionen hat Probleme bereitet.

\RemoveEmptyStaffContext
funktioniert allerdings noch, wird aber irgendwann nicht nur in der Dokumentation nicht mehr erwähnt werden, sondern gänzlich abgeschafft.


Gruß,
  Harm
Titel: Re: Staff basteln
Beitrag von: DocTaxon am Dienstag, 25. Juni 2013, 17:32
Ja, das funktioniert ganz gut.   ;D

Natürlich, wofür brauche ich das? Nee, Ihr habt schon richtig geraten: ich möchte einfach nur leere Staves unterdrücken. Und ja, Noten sollen da auch noch reinkommen.

Wofür stehen da eigentlich:


Titel: Re: Staff basteln
Beitrag von: fugenkomponist am Dienstag, 25. Juni 2013, 19:18
#'remove-first = ##t heißt einfach, dass auch in der ersten Zeile leere Zeilen entfernt werden dürfen; standardmäßig werden bei \RemoveEmptyStaves nämlich in der ersten Zeile (und nur da) auch alle leeren Staffs angezeigt (ist z. B. in einer Orchesterpartitur sinnvoll, damit man sieht, welche Instrumente im Laufe des Stücks gebraucht werden etc.)
Titel: Re: Staff basteln
Beitrag von: harm6 am Dienstag, 25. Juni 2013, 21:32
Hallo Doc,

Zitat von: Doc
Wofür stehen da eigentlich:
    [...]
    \remove "Keep_alive_together_engraver"

In der IR 2.2.57 Keep_alive_together_engraver (http://lilypond.org/doc/v2.16/Documentation/internals/keep_005falive_005ftogether_005fengraver) kann man folgendes lesen:
Zitat
This engraver collects all Hara_kiri_group_spanners that are created in contexts at or below its own. These spanners are then tied together so that one will be removed only if all are removed. For example, if a StaffGroup uses this engraver, then the staves in the group will all be visible as long as there is a note in at least one of them.

Keep_alive_together_engraver is part of the following context(s): PianoStaff.

Zugegebenermaßen ist das etwas kryptisch.

Vereinfacht gesagt werden in einem PianoStaff (mit "Keep_alive_together_engraver") nur dann Zeilen entfernt, falls alle Staffs dieser Zeile "leer" sind.

Der "Keep_alive_together_engraver" ist per default nur im PianoStaff vorhanden, kann aber natürlich jedem anderen Kontext hinzugefügt werden.

Für Dein Vorhaben ist das Entfernen des "Keep_alive_together_engraver" aus dem PianoStaff also notwendig.


Gruß,
  Harm
Titel: Re: Staff basteln
Beitrag von: DocTaxon am Mittwoch, 26. Juni 2013, 10:04
alles klar, vielen Dank.

Ich hab aber schon wieder neue Probleme, diese im nächsten Thread.

Schöne Grüße,
DocTaxon ...