alignAboveContext

Begonnen von rgree, Dienstag, 1. Dezember 2020, 10:43

« vorheriges - nächstes »

rgree

Liebe Leute,

im Minimalbeispiel versuche ich, eine zweite kleinere Notenzeile OBERHALB der Hauptnotenzeile anzeigen zu lassen.
Es klappt aber nicht.
Die Beipielcodes aus LSR etc. helfen mir auch nicht weiter.
Hat jemand eine Idee ?

Reinhard

\version "2.20.0"
satz_III_Viola = {
  c'4 4 4 4
    << \stemNeutral {
       d'4 4 4 4
       } \\ \new Staff \new CueVoice \with {
         alignAboveContext = #"mainStaff"
       } {
         d''4 4 4 4
       }
    >>
}

\score {
    \context StaffGroup <<
      \new Staff = #"mainStaff"
      \with {  }
      {
        \satz_III_Viola
      }
    >>
}

Manuela

Ich habe kein Lilypond hier (darf nicht einmal die Lilypond-Seite aufrufen), ich kann nur mutmaßen.

Du bastelst einen Staff-Context in einen Voice-Context hinein. Voice ist der Context auf der untersten Stufe und kann keine anderen Contexte mehr aufnehmen.
Was sind Kontexte?
Danke für eure Hilfe
viele Grüße
-- Manuela

rgree

Wie müsste ich das denn ändern ?

Das folgende Beispiel aus LSR funktioniert, scheint ab ähnlich aufgebaut zu sein :

\version "2.18.0"

\header {
  texidoc = "
In vocal scores for a chorus the music for the soloists is sometimes
omitted.  In such cases a vocal cue can be inserted as a short ossia
section.

"
  doctitle = "Creating a short ossia section with lyrics"
}
%% http://lsr.di.unimi.it/LSR/Item?id=846
%% see also http://www.lilypond.org/doc/v2.18/Documentation/internals/lyrics

\score {
  \new ChoirStaff = "choirStaff" <<
    \new Staff = "sopranoStaff" {
      \new Voice = "sopranoVoice" {
        \compressFullBarRests
        R1*5
<<
          R1
          \new Staff = "soloStaff"
          \with {
            \remove "Time_signature_engraver"
            alignAboveContext = #"sopranoStaff"
            fontSize = #-3
            \override StaffSymbol.staff-space = #(magstep -3)
            \override StaffSymbol.thickness = #(magstep -3)
          }
            \new CueVoice = "soloVoice" {
              \relative c'' {
                c4 c c c16[ c c
                % workaround for issue 1551
                c16*1/2] \hideNotes c32 |
              }
            }
            \new Lyrics = "soloLyrics"
            \with {
              alignBelowContext = "soloStaff"
              \override LyricText.font-size = #-3
            }
            \lyricsto "soloVoice"
            { Rea -- dy choir! Go for it now! }
        >>
        \relative c'' {
          b4 b b b |
          c4 c c c |
}
      }
    }
    \new Lyrics = "sopranoLyrics" \lyricsto "sopranoVoice" {
      and here we are! La la la la
    }
    \new Staff = "altoStaff" {
      \new Voice = "altoVoice" {
        \relative c'' {
          R1*5
          R1
          b4 b b b |
          c4 c c c |
        }
      }
    }
  >>
}


RG

Manuela

Die Beispiele im LSR werden von Usern wie du und ich gemacht, da kann auch mal was passieren.
Einen Context Staff in eine Voice zu setzen ist jedenfalls unsauber, auch wenn es scheinbar funktioiert.
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

#4
Zitat von: ManuelaVoice ist der Context auf der untersten Stufe und kann keine anderen Contexte mehr aufnehmen.
Das ist mißverständlich ausgedrückt.

Man kann sehr wohl etwas schreiben, wie
    \new Voice { b \new Staff { c' } b }
Das ist völlig valide Syntax: \new Voice wird (automatisch) in einen Staff gepackt. Der spätere Aufruf von \new Staff erzeugt einen neuen Staff, nicht identisch mit dem automatisch erzeugten. Solch neue Contexte werden unten eingereiht.
Alles in Ordnung damit.
Insofern ist richtig, daß die ursprüngliche Voice den neuen Staff nicht in der Art und Weise aufnimmt, daß er in den bestehenden Staff integriert wird. Aber man kann einen neuen Staff durchaus aus einer bestehenden Voice heraus initiieren.

Das Problem hier (im anfänglich geposteten Code) ist jedoch, daß der neu initiierte Staff gar nichts von alignAboveContext mitbekommt, da der \with-Block zur CueVoice gehört.

Stattdessen:

\version "2.20.0"

satz_III_Viola = {
  c'4 4 4 4
    << {
         d'4 4 4 d''4
       }
       \new Staff
       \with {
         alignAboveContext = #"mainStaff"
       } \new CueVoice  {
         d''4 4 4 4
       }
    >>
}

\score {
    \context StaffGroup <<
      \new Staff = #"mainStaff"
      \with {  }
      {
        \satz_III_Viola
      }
    >>
}


Dann kann man auch auf \stemNeutral und das << \\ >>-Konstrukt verzichten.

Gruß,
  Harm

rgree

Das war der entscheidende Hinweis.
Danke.

RG