adding an extra staff

Begonnen von Radler, Sonntag, 25. März 2018, 17:27

« vorheriges - nächstes »

Radler

... ist der Titel des Abschnitts aus Snippets.PDF (S. 125 f.)

Hallo liebe Lilypondianer,

in meinem Arrangement gehen Sopran und Alt (S und A) in der ersten Hälfte rythmisch parallel (mit identischem Text). In der zweiten Hälfte singen sie versetzt.
Deshalb möchte ich in der ersten Hälfte S und A als zwei Voices in einem Staff setzen (mit \voiceOne und \voiceTwo). In der zweiten Hälfte sollen S und A in je eigenem Staff stehen (beide mit \oneVoice). Das spart mir zwei Seiten (und den Sängern zweimal umblättern).
Eine Bass-Stimme (B) gibts auch noch.

Das Snippet ist eine wunderbare Ausganglage. Ich habe das Original aus Snippets.pdf angepasst, damit es auf meine Anforderungen besser passt: B hinzugefügt, im Code \new Staff = "4"

\version "2.19.80"
\score
{
  <<
    \new Staff = "1" \relative c''
    {
      c1 | d | e | f | g
    }
    \new StaffGroup \relative c'
    {
      \new Staff = "2"
      {
        c1 | d
        <<
          {
            s1 | s
          }
          \new Staff = "3"
          {
            \once \omit Staff.TimeSignature
            cis2 dis~ | dis eis
          }
        >>
        c1
      }
    }
    \new Staff = "4" \relative c
    {
      \clef "bass"
      c1 | d | e | f | g
    }
  >>
}


Das Ergebnis ist leider unbefriedigend, weil die herausgeführt Alt-Stimme (\new Staff = "3") unter dem Bass erscheint, anstatt zwischen zweitem und drittem System (also direkt über dem Bass-Schlüssel-System).

Kann jemand helfen?

Mein Dank ist Euch gewiss!

Viele Grüße und vielen Dank
von Radler

Malte

Es gibt zwei Möglichkeiten: Entweder du fängst (wie gehabt) den Staff ,,3" erst später an und positionierst ihn über Staff ,,4" (oder unter ,,2"):\new Staff = "3" \with {
  alignAboveContext = "4"
}

oder, und das ist möglicherweise die von der Struktur her übersichtlichere Art, du legst den Staff ,,3" ganz normal wie die anderen an, füllst ihn zunächst mit Pausen bis zu dem Teil, wo er erscheinen soll und versteckst die leeren Systeme:
\new Staff = "3" \with {
  \RemoveAllEmptyStaves
}


Edit: Um ,,3" unter ,,2" statt über ,,4" zu positionieren, setze alignBelowContext entsprechend. In diesem Fall machts aber keinen Unterschied ;)

Radler

Hey, cool ey, und so schnell, danke lieber Malte!

Die Noten stehen jetzt genau so, wie sie sollen.

Jetzt hakt es noch mit den Lyrics. Die stehen immer über den Noten, wohin auch immer ich das \new Lyrics \lyricsto "3voice" schiebe.
Und das alignAboveContext funktioniert wohl nicht bei Lyrics.
\version "2.19.80"
\score
{
  <<
    \new Staff = "1" \relative c''
    {
      \new Voice = "1voice"
      {
        c1 | d | e | f | g
      }
    }
    \new Lyrics \lyricsto "1voice"
    {
      c'' d'' e'' f'' g''
    }
    \new StaffGroup \relative c'
    {
      \new Staff = "2"
      {
        \new Voice = "2voice"
        {
          c1 | d
          <<
            {
              s1 | s
            }
            \new Staff = "3" \with
            {
              alignAboveContext = "4"
            }
            {
              \once \omit Staff.TimeSignature
              \new Voice = "3voice"
              {
                cis2 dis~ | dis eis
              }
            }
            \new Lyrics \lyricsto "3voice"
            {
              cisX disX eisX
            }
          >>
          c1
      } }
    }
    \new Lyrics \lyricsto "3voice"
    {
      cisY disY eisY
    }
    \new Lyrics \lyricsto "2voice"
    {
      c' d' c'
    }
    \new Staff = "4" \relative c
    {
      \clef "bass"
      \new Voice = "4voice"
      {
        c1 | d | e | f | g
      }
    }
    \new Lyrics \lyricsto "3voice"
    {
      cisZ disZ eisZ
    }
    \new Lyrics \lyricsto "4voice"
    {
      c d e f g
    }
  >>
}


Hast Du noch eine Idee? Oder jemand anderes?

Grüße und großen Dank
von Radler

Malte

Zitat von: Radler am Sonntag, 25. März 2018, 19:00
Und das alignAboveContext funktioniert wohl nicht bei Lyrics.
Doch. Und zwar dein bei den ,,cisX"-Lyrics:
            \new Lyrics \with {
              alignBelowContext = "3"
            } \lyricsto "3voice" {
              cisX disX eisX
            }

Zitat
Hast Du noch eine Idee? Oder jemand anderes?
Nur als Vorschlag hier mal die Version mit \RemoveAllEmptyStaves:\version "2.19.80"
\score
{
  <<
    \relative {
      \repeat unfold 20 c''1 | d | e | f | g
    }
    \addlyrics {
      c'' d'' e'' f'' g''
    }
    \relative {
      \repeat unfold 20 c'1 | d
      s1 | s
      c1
    }
    \addlyrics {
      c' d' c'
    }
    \new Staff \with {
      \RemoveAllEmptyStaves
    } \relative {
      \repeat unfold 20 s1 s
      cis'2 dis~ | dis eis
    }
    \addlyrics {
      cisX disX eisX
    }
    \relative {
      \clef "bass"
      \repeat unfold 20 c1 | d | e | f | g
    }
    \addlyrics {
      c d e f g
    }
  >>
}

Radler

Klasse, danke Malte! Du kennst offenbar jede Antwort?

Mein Fehler war: with {alignBelowContext = "3"} hatte ich hinters \lyricsto getan. --- Wie dumm von mir!

Hier noch eine Erklärung, warum ich (scheinbar!) Deinem Vorschlag mit \RemoveAllEmptyStaves die kalte Schulter zeige: meine ersten staves sind nie empty, weil ich immer den Ambitus anzeigen lasse. Das führt dann dazu, dass die erste Zeile vollgepackt wird mit Pausen.
Das kostet nicht nur Platz, sondern sieht auch traurig aus.
Deshalb also hier kein \RemoveAllEmptyStaves...

Nochmals herzlichen Dank für Deine tolle Unterstützung!

cy
Radler

\version "2.19.80"
\score
{
  <<
    \new Staff = "1" \relative c''
    {
      \new Voice = "1voice"
      {
        c1 | d | e | f | g
      }
    }
    \new Lyrics \lyricsto "1voice"
    {
      c'' d'' e'' f'' g''
    }
    \new StaffGroup \relative c'
    {
      \new Staff = "2"
      {
        \new Voice = "2voice"
        {
          c1 | d
          <<
            {
              s1 | s
            }
            \new Staff = "3" \with
            {
              alignAboveContext = "4"
            }
            {
              \once \omit Staff.TimeSignature
              \new Voice = "3voice"
              {
                cis2 dis~ | dis eis
              }
            }
            \new Lyrics \with
            {
              alignBelowContext = "3"
            }  \lyricsto "3voice"
            {
              cisX disX eisX
            }
          >>
          c1
      } }
    }
    \new Lyrics \lyricsto "3voice"
    {
      cisY disY eisY
    }
    \new Lyrics \lyricsto "2voice"
    {
      c' d' c'
    }
    \new Staff = "4" \relative c
    {
      \clef "bass"
      \new Voice = "4voice"
      {
        c1 | d | e | f | g
      }
    }
    \new Lyrics \lyricsto "3voice"
    {
      cisZ disZ eisZ
    }
    \new Lyrics \lyricsto "4voice"
    {
      c d e f g
    }
  >>
}

Malte

Zitat von: Radler am Montag, 26. März 2018, 20:05
Hier noch eine Erklärung, warum ich (scheinbar!) Deinem Vorschlag mit \RemoveAllEmptyStaves die kalte Schulter zeige: meine ersten staves sind nie empty, weil ich immer den Ambitus anzeigen lasse. Das führt dann dazu, dass die erste Zeile vollgepackt wird mit Pausen.
Das kostet nicht nur Platz, sondern sieht auch traurig aus.
Deshalb also hier kein \RemoveAllEmptyStaves...
Ich nehme an, mit ,,immer" meinst du, daß du das per \layout-Block machst? Du kannst Sachen, die du im \layout-Block machst, für einzelne Systeme wieder rückgängig machen:\version "2.19.81"

\layout {
  \context {
    \Staff
    \consists Ambitus_engraver
  }
}

\new StaffGroup <<
  \new Staff { c'1 \break c'' }
  \addlyrics { Bla -- bla }
  \new Staff \with {
    \RemoveAllEmptyStaves
    \remove Ambitus_engraver
  } { R1 d'2 d'' }
  \addlyrics { Blubb -- blubb }
  \new Staff { e'1 e'' }
  \addlyrics { La -- la }
>>

Davon abgesehen wäre es vielleicht sinnvoll, wenn \RemoveAllEmptyStaves sich vom Ambitus nicht aufhalten lassen würde. Das ist der Fall, weil AmbitusNoteHeads erstellt werden, die das notehead-interface erfüllen und somit in Score.keepAliveInterfaces enthalten sind.

Radler

Nein, lieber Malte,

auf diese schlaue Idee bin ich nicht allein gekommen.

Aber ab sofort steht es in meiner includeToAll.ly

Nochmals herzlichen Dank und viele Grüße
von Radler