Autor Thema: Klammern für Strophen  (Gelesen 3128 mal)

prott

  • Member
Klammern für Strophen
« am: Sonntag, 10. März 2013, 20:53 »
Hallo zusammen,

Auf dem LSR gibt es den folgenden Schnipsel:
http://lsr.dsi.unimi.it/LSR/Search?q=brace
der fast das tut, was ich gerne hätte. Aber um die volle Schönheit zu erreichen, bin ich etwas überfragt. Bei einer ungeraden Anzahl Strophen ist der gemeinsame Text vertikal auf die mittlere Strophe ausgerichtet, was von dem Schnipsel auch ausgenutzt wird. Bei einer geraden Anzahl Strophen müßte der gemeinsame Text vertikal zwischen den beiden mittleren Strophen ausgerichtet sein, und da stehe ich auf dem Schlauch. Es hilft leider nicht, mittels \skip einen leeren Text als "mittlere Strophe" zu erzeugen, die braucht nämlich unangenehm viel vertikalen Platz.

Übrigens: Ich verwende Version 2.14.1

harm6

  • Member
Re: Klammern für Strophen
« Antwort #1 am: Montag, 11. März 2013, 00:29 »
Hallo prott,

mehr als dieser workaround fällt mir im Moment nicht ein. Ist Handarbeit und ob er immer funktioniert wirst Du wohl testen müssen.

\version "2.14.2"

leftbrace = \markup {\override #'(font-encoding . fetaBraces) \lookup #"brace130" }
rightbrace = \markup { \raise #1 \rotate #180 \leftbrace }

lyricsbeforebrace = \lyricmode { Here is some ly -- rics }
lyricsfrombrace = \lyricmode { \markup{\rightbrace Here} comes some more }

melody = \relative c' { \new Voice = "m" { c d e f g f } \new Voice = "m1" { e d c e d f g } }

\score{
<<
 \new Voice \melody
 \new Lyrics \lyricsto "m" \lyricsbeforebrace
 \new Lyrics {
         \lyricsto "m" \lyricsbeforebrace
         \lyricsto "m1" {
                 \override LyricText #'Y-offset = #-1.6 \lyricsfrombrace
                 % nach einem break: \revert LyricText #'Y-offset
         }
 }
 \new Lyrics \lyricsto "m" \lyricsbeforebrace
 \new Lyrics \lyricsto "m" \lyricsbeforebrace
>>
}

Gruß,
  Harm

prott

  • Member
Re: Klammern für Strophen
« Antwort #2 am: Montag, 11. März 2013, 08:38 »
Danke, das Ergebnis sieht schon mal gut aus. Ich werde es heute abend mal versuchen, einzubauen.

prott

  • Member
Re: Klammern für Strophen
« Antwort #3 am: Montag, 11. März 2013, 21:45 »
Neues von der Frickelfront:
Im Prinzip klappt die Verschiebung bei mir. Aber es gibt noch ein paar Anmerkungen, die in dem Schnipsel nicht auftauchen:
* Es empfiehlt sich, den \raise #1  - Befehl bereits in die Definition von leftbrace zu setzen, denn auch diese Klammer ist auf die Grundlinie zentriert.
* Eine \voice in melody reicht; man kann die einzelnen Textausschnitte zu einer Strophe hintereinander schreiben, wie im Ursprungsschnipsel; ich habe alle gemeinsamen Texte in die erste Strophe geschrieben. Das hält die Musik deutlich lesbarer, aber man muß bei einem gemeinsamen Text für einen ersten Teil in den nachfolgenden Strophen entsprechend viele Leerzeichen unterbringen: \repeat unfold 888 {\skip 1}
* \override LyricText #'Y-offset = #-1.6: Die erforderliche Verschiebung hängt vom Kontext ab und kann in unterschiedlichen Zeilen unterschiedlich ausfallen
* Man muß \override LyricHyphen #'Y-offset = #-1.6 und \override LyricExtender #'Y-offset = #-1.6 einfügen
* Eine Strophennummer einer nachfolgenden Strophe mit \set Stanza = #"2." schlüpft bei mir leider nicht freiwillig unter die sich öffnende Klammer. Sie will sich auch nicht mit #'Y-offset nach oben. Ich habe sie mit \markup { \bold{2.} Text} simuliert.

harm6

  • Member
Re: Klammern für Strophen
« Antwort #4 am: Dienstag, 12. März 2013, 00:43 »
Hallo prott,

Zitat
Neues von der Frickelfront:
[...]
* Eine Strophennummer einer nachfolgenden Strophe mit \set Stanza = #"2." schlüpft bei mir leider nicht freiwillig unter die sich öffnende Klammer. Sie will sich auch nicht mit #'Y-offset nach oben. Ich habe sie mit \markup { \bold{2.} Text} simuliert.

Ich verstehe hier nicht ganz was Du meinst, könntest Du ein Beispiel geben?

Die anderen Baustellen sind mir klar.

Gruß,
  Harm

prott

  • Member
Re: Klammern für Strophen
« Antwort #5 am: Donnerstag, 14. März 2013, 07:46 »
Hallo Harm,

Der Code produziert das Problem. Die 2. Strophe sitzt unter statt hinter der Klammer.

\version "2.14.1"

leftbrace = \markup { \raise #0.8 \override #'(font-encoding . fetaBraces) \lookup #"brace120" }

melodie = \relative c' {c4 d e f g2 g}

lyrEinsA = \lyricmode {
  \override LyricText #'Y-offset = #-1.6
  \override LyricHyphen #'Y-offset = #-1.6
  \override LyricExtender #'Y-offset = #-1.6
  \override StanzaNumber #'Y-offset = #-1.6
  \set stanza = #"1.+2." Al -- le mei -- \markup { ne \leftbrace }
  \revert LyricText #'Y-offset
  \revert LyricHyphen #'Y-offset
  \revert LyricExtender #'Y-offset
  \revert StanzaNumber #'Y-offset
}

lyrEinsB = \lyricmode { \set stanza = #"1." Ent -- chen }

lyrZweiA = \lyricmode { \repeat unfold 4 { \skip 1 } }

lyrZweiB = \lyricmode { \set stanza = #"2." Hühn -- chen }

% Ohne \set stanza funktioniert alles
%lyrZweiB = \lyricmode { Hühn -- chen }


\score {
  <<
  \new Voice = "melodie" {
    \melodie
  }
  \new Lyrics \lyricsto "melodie" {\lyrEinsA \lyrEinsB }
  \new Lyrics \lyricsto "melodie" {\lyrZweiA \lyrZweiB }
  >>
}

eluze

  • Member
Re: Klammern für Strophen
« Antwort #6 am: Donnerstag, 14. März 2013, 10:18 »
ragged-right=##fkönnte bei so kurzen schnipseln helfen!

danach tritt das eigentliche problem deutlicher hervor: die klammer ist an die "falsche" silbe gebunden

Eluze

Be-3

  • Member
Re: Klammern für Strophen
« Antwort #7 am: Donnerstag, 14. März 2013, 11:52 »
Hallo prott,

die geschweifte Klammer ist so hoch bzw. tief, daß die zweite Zeile, die ihr dank \stanza "in die Quere kommt", so weit nach unten geschoben wird.
Wenn man, wie Eluze sagt, beispielsweise durch ragged-right = ##t mehr horizontalen Platz schafft, wird die Zeile so weit auseinandergezogen, daß Klammer und \stanza sich aus dem Weg gehen können. ;)

Ich habe einen anderen Weg gewählt, aus zwei Gründen:

Erstens
Die geschweifte Klammer soll an der Strophennummer hängen, nicht am Text. So kann sie viel besser und in bezug auf die Strophennummern ausgerichtet werden und das "Alignment" (Silbe zentriert unter Note) stimmt auch wieder.
Lösung: \stanza = #"1." wird durch ein Markup ersetzt, das auch die Klammer enthält. Hierzu muß leider aus technischen Gründen der \lyricmode unterbrochen werden, weil das nur außerhalb funktioniert.
Des weiteren setze ich einmalig den Y-extent der StanzaNumber auf kleine Werte, so daß die Klammer aus Lilypond-Sicht keine Ausdehnung nach unten mehr hat und somit die zweite Zeile nicht nach unten drückt.

Zweitens
Die Fortsetzung der "Doppelzeile" beansprucht schon genügend Platz, da habe ich mir den Luxus gegönnt, den ersten, "alleinstehenden" Teil per extra-offset nach unten zu schieben. Das hat in diesem Fall weniger Nebenwirkungen. :)

Schließlich habe ich noch zwei Takte drangehängt und eine kleine line-width gewählt, damit man sehen kann, daß nach dem Umbruch alles wie gewünscht weiterläuft.

\version "2.14.1"

\paper { indent = #0 line-width = #90 }

leftbrace = \markup { \lower #.7  \override #'(font-encoding . fetaBraces) \lookup #"brace50" \hspace #0.2 }

melodie = \relative c' { c4 d e f g2 g \break a4 a a a g1}

lyrEins = {
  \lyricmode {
  \override LyricText #'extra-offset = #'(0 . -1.4)
  \override LyricHyphen #'extra-offset = #'(0 . -1.4)
  \override LyricExtender #'extra-offset = #'(0 . -1.4)
  \override StanzaNumber #'extra-offset = #'(0 . -1.4)
  \set stanza = #"1.+2." Al -- le mei -- ne
  \revert LyricText #'extra-offset
  \revert LyricHyphen #'extra-offset
  \revert LyricExtender #'extra-offset
  \revert StanzaNumber #'extra-offset
  }
  \once \override StanzaNumber #'Y-extent = #'(0 . 1)
  \set stanza = \markup { \leftbrace "1." }
  \lyricmode { Ent -- chen schwim -- men auf dem See, }
}

lyrZwei = \lyricmode {
  \repeat unfold 4 { _ }
  \set stanza = #"2." Hühn -- chen schar -- ren in dem Stroh,
}


\score {
  <<
  \new Voice = "melodie" {
    \melodie
  }
  \new Lyrics \lyricsto "melodie" \lyrEins
  \new Lyrics \lyricsto "melodie" \lyrZwei
  >>
}

Viele Grüße
Torsten