Autor Thema: instrumentName und RemoveEmptyStaffContext  (Gelesen 1978 mal)

merula

  • Member
instrumentName und RemoveEmptyStaffContext
« am: Dienstag, 31. Mai 2011, 08:38 »
Hallo,

ich habe eine Stück für SATB und drei Solostimmen. Die Solisten haben zwischendurch größere Pause. Im Moment gibt es eine StaffGroup für SATB und je einen Staff pro Solist. Die langen Pausen sind über RemoveEmptyStaffContext gelöst. Ärgerlich dabei ist, dass der instrumentName nur einmal am Anfang des Stückes gesetzt wird und auch nur für die Stimmen, die zu diesem Zeitpunkt etwas zu singen haben (Sopran, z.B. setzt später ein). Wann die Solisten einsetzen, aufhören kann man im Moment nur aus dem Zusammenhang sehen, aber nicht auf den ersten Blick. Ich hätte gern, dass wenn in einem System ein Stimme hinzukommt oder wegfällt, nochmal alle instrumentNames vor das System gesetzt werden, habe aber keine Ahnung, wie ich das bewerkstelligen soll. (Ein schlechter workaround wäre den shortInstrumentName zu missbrauchen, aber das würde unnötig viel Platz wegnehmen).
Irgendwelche Tipps?

Grüße

Lars

kilgore

  • Member
Re:instrumentName und RemoveEmptyStaffContext
« Antwort #1 am: Dienstag, 31. Mai 2011, 09:19 »
Hallo Lars!

Am besten ist immer, eine kleine Code beispiel mit in deinem Beitrag zu schreiben, oder dein .ly Datei anzuhängen.  So können wir besser sehen was du willst, und dir besser helfen.

Du kannst auch mitten im Stück den instrumentName neue definieren (ohne shortInstrumentName.  Das musst du allerdings dann in allen Stimmen jedes mal wieder schreiben. 
Warum ist shortInstrumentName keine gute Lösung? Der gekürzte Name muss nicht lang sein (und viel Platz weg nehmen). 

Grüß
kil

merula

  • Member
Re:instrumentName und RemoveEmptyStaffContext
« Antwort #2 am: Dienstag, 31. Mai 2011, 10:42 »
Hallo Kil,

Am besten ist immer, eine kleine Code beispiel mit in deinem Beitrag zu schreiben, oder dein .ly Datei anzuhängen.  So können wir besser sehen was du willst, und dir besser helfen.

Hm, ich habe die Datei nicht hier am Rechner. Aber ich habe mal versucht ein Minimalbeispiel zusammenzustellen:
\version "2.12.3"

#(set-global-staff-size 10)

global = {
  \time 2/4
  \key c \major
}


soloNoten = \relative c'' {
  \global
  c2
  c2
  c2
  R2
}

einigeNoten = \relative c' {
  \global
  R2
  c2
  c2
  c2
}

sopranNoten = \relative c'' {
  \global
  R2
  c2
  c2
  c2
}

altNoten = \relative c' {
  \global
  c2 \break
  c2 \break
  c2 \break
  c2
}


tenorNoten = \relative c' {
  \global
  \clef "treble_8"
  c2
  c2
  c2
  c2
}

bassNoten = \relative c {
  \global
  \clef bass
  c2
  c2
  c2
  c2
}

triangelNoten = \relative c' {
  \clef percussion
  \override MultiMeasureRest #'staff-position = #0.01
  R2
  c2
  c2
  R2
}

Mucke = {
  <<
    \new Staff = solo \with { instrumentName = "Solo" } { \soloNoten }
    \new Staff = einige \with { instrumentName = "Einige" } { \einigeNoten }
    \new ChoirStaff <<
      \new Staff = sopran \with { instrumentName = "Sopran" } { \sopranNoten }
      \new Staff = alt \with { instrumentName = "Alt" } { \altNoten }
      \new Staff = tenor \with { instrumentName = "Tenor" } { \tenorNoten }
      \new Staff = bass \with { instrumentName = "Bass" } { \bassNoten }
    >>
    \new Staff = triangel \with { instrumentName = "Triangel" \override StaffSymbol #'line-count = #1 \override BarLine #'bar-size = #3 } { \triangelNoten }
  >>   
}

\score {
  \Mucke
  \layout {
    \context { \RemoveEmptyStaffContext }
    \context { \Score
      \override VerticalAxisGroup #'remove-first = ##t
    }
  }
}

Was ich gern hätte ist folgendes:
  • System 1: kann so bleiben
  • System 2: Alle Name hinschreiben, weil Triangle und Einige dazukommen
  • System 3: kann so bleiben, weil nichts hinzukommt bzw. wegfällt
  • System 4: Alle Name hinschreiben, weil Solo und Triangle wegfallen
Am liebsten wäre es mir natürlich, wenn Lilypond das automatisch entscheiden könnte, weil ich sonst bei Änderungen von Schriftgrößen oder ähnlichem das ganze Stück durchgehen müsste, ob die Beschriftungen die ich eingefügt habe, notwendig sind und ob ggf. an anderer Stelle Beschriftungen notwendig geworden sind.

Zitat
Du kannst auch mitten im Stück den instrumentName neue definieren (ohne shortInstrumentName.  Das musst du allerdings dann in allen Stimmen jedes mal wieder schreiben. 

Ginge, aber siehe oben. Ich müsste dann jedesmal händisch prüfen, ob das in einem bestimmten Takt notwendig ist. Außerdem muss das System dann entsprechend eingerückt werden. Das scheint Lilypond nicht automatische zu machen.

Zitat
Warum ist shortInstrumentName keine gute Lösung? Der gekürzte Name muss nicht lang sein (und viel Platz weg nehmen). 

Wenn z.B. die Triangle das erste mal einsetzt, steht da nur ein T. Dass das die Triangle sein soll, wird nirgends ersichtlich.

Gruß Lars

harm6

  • Member
Re:instrumentName und RemoveEmptyStaffContext
« Antwort #3 am: Donnerstag, 2. Juni 2011, 14:42 »
Hallo Lars,

ich habe mal in meinen Partituren gesucht, ob ich das von Dir gewünschte Erscheinungsbild irgendwo wiederfinde. Es war zwar nur eine flüchtige Suche aber immerhin von Bach bis Strawinsky.
Ich habe nirgendwo gefunden was Du Dir vorstellst: Entweder gab es nur die instrumentNames in der ersten Partiturzeile (dann aber ohne "\override VerticalAxisGroup #'remove-first = ##t") und keine shortInstrumentNames, so daß man aus dem Zusammenhang schließen muß.
Oder es gab durchgehende shortInstrumentNames.
Nach meiner Ansicht sind die shortInstrumentNames gerade dazu da bei hinzutretenden oder wegfallenden Instrumenten Verwirrungen zu vermeiden. Die shortInstrumentNames plötzlich nicht zu schreiben (weil sich nichts ändert) würde dieser Absicht widersprechen.

Zitat
Ein schlechter workaround wäre den shortInstrumentName zu missbrauchen, aber das würde unnötig viel Platz wegnehmen
Was den Platz angeht so irrst Du Dich. Die shortInstrumentNames verbrauchen keinen zusätzlichen Raum! Im Angehängten file kann man das deutlich sehen! Zusätzlicher Raum muß nur dann geschaffen werden, falls die shortInstrumentNames im Druck abgeschnitten werden, aber da sehe ich kein Problem.

Insofern würde ich vom gesamten Plan Abstand nehmen.

Gruß,
  Harm

P.S. Im Zuge meiner Recherche habe ich mit Überraschung festgestellt, daß es in der IR kein eigenes layout-Objekt für shortInstrumentNames gibt. Sie tauchen allerdings auf in IR 2.2.48 Instrument_name_engraver
« Letzte Änderung: Donnerstag, 2. Juni 2011, 16:29 von harm6 »

merula

  • Member
Re:instrumentName und RemoveEmptyStaffContext
« Antwort #4 am: Samstag, 4. Juni 2011, 17:59 »
Hallo Harm,

Zitat
Nach meiner Ansicht sind die shortInstrumentNames gerade dazu da bei hinzutretenden oder wegfallenden Instrumenten Verwirrungen zu vermeiden. Die shortInstrumentNames plötzlich nicht zu schreiben (weil sich nichts ändert) würde dieser Absicht widersprechen.
...
Insofern würde ich vom gesamten Plan Abstand nehmen.

Ich habe Deinen Rat befolgt und das ganze jetzt wie folgt gelöst (entsprechenden Teil im oben geposteten Beispiel ersetzen):
Mucke = {
  <<
    \new Staff = solo \with { instrumentName = "Solo" shortInstrumentName = \markup{\rotate #90 \tiny "Solo"}} { \soloNoten }
    \addlyrics { \soloText }
    \new Staff = einige \with { instrumentName = "Einige" shortInstrumentName = \markup{\rotate #90 \tiny "Einige"}} { \einigeNoten }
    \addlyrics { \einigeText }
    \new ChoirStaff <<
      \new Staff = sopran \with { instrumentName = "Sopran" shortInstrumentName = \markup{\rotate #90 \tiny "Sopran"}} { \sopranNoten }
      \addlyrics { \sopranText }
      \new Staff = alt \with { instrumentName = "Alt" shortInstrumentName = \markup{\rotate #90 \tiny "Alt"}} { \altNoten }
      \addlyrics { \altText }
      \new Staff = tenor \with { instrumentName = "Tenor" shortInstrumentName = \markup{\rotate #90 \tiny "Tenor"}} { \tenorNoten }
      \addlyrics { \tenorText }
      \new Staff = bass \with { instrumentName = "Bass" shortInstrumentName = \markup{\rotate #90 \tiny "Bass"}} { \bassNoten }
      \addlyrics { \bassText }
    >>
    \new Staff = triangel \with { instrumentName = "Triangel" shortInstrumentName = \markup{\rotate #90 \tiny "Triangel"} \override StaffSymbol #'line-count = #1 \override BarLine #'bar-size = #3 } { \triangelNoten }
  >>
}

Sieht zwar ganz anders aus als im Orginal aber an sich gar nicht schlecht.

Vielen Dank für die Anregungen

Lars