Autor Thema: Lyrics: Strophen-Nummern in jeder Notenzeile  (Gelesen 2651 mal)

Radler

  • Jr. Member
  • **
  • Beiträge: 99
    • Profil anzeigen
Lyrics: Strophen-Nummern in jeder Notenzeile
« am: September 01, 2010, 09:26:36 »
Hallo liebe Notenstecher,

bei Liedern mit vielen Strophen wäre es hilfreich, wenn die Strophennummer in jeder Notenzeile vor den lyrics-Text stünde.

Das kann ich natürlich erreichen, indem ich im \lyricmode-Abschnitt mehrfach \set stanza = "3." einfüge.
Dann bin ich aber nicht mehr flexibel bzgl. des Notenzeilenumbruches. Wenn ich also später z.B. set-global-staff-size ändere, oder andere layout-Änderungen vornehme, stehen die Strophen-Nummern plötzlich irgendwo in der Mitte einer Notenzeile.

Ganz schön wäre es natürlich, wenn die Strophennummern ab der 2. Notenzeile als "fortgesetzt" markiert würden, also z.B. in Klammern gesetzt. Aber das wäre ein verzichtbarer Schnörkel.

Für alle Hinweise dankbar
ist Radler

ding-dong

  • Hero Member
  • *****
  • Beiträge: 631
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #1 am: September 01, 2010, 13:07:32 »
damit gehts vielleicht: gefunden in http://www.mail-archive.com/lilypond-user@gnu.org/msg47231.html
\lyricmode {
\set stanza = "2."
\set vocalName = #"2."
\set shortVocalName = #"2."
\override InstrumentName #'X-offset = #3
\override InstrumentName #'font-size = #'0.1


ev. noch die verschiebung - #'X-offset = -abändern

Radler

  • Jr. Member
  • **
  • Beiträge: 99
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #2 am: September 02, 2010, 07:56:21 »
Das funktioniert ja toll - danke Ding-Dong!

Weißt Du noch etwas für 2 kleine Verbesserungen?

  • Die Strophennummer erscheint in der ersten Notenzeile nicht, sondern erst ab der zweiten.
  • Die Strophennummer wird fett gedruckt.

Nochmals herzlichen Dank und viele Grüße
von Radler
« Letzte Änderung: Oktober 03, 2010, 07:59:23 von Radler »

ding-dong

  • Hero Member
  • *****
  • Beiträge: 631
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #3 am: September 02, 2010, 12:01:21 »
hier noch ein kleines beispiel, in dem (fast) alles verwendet wird

Radler

  • Jr. Member
  • **
  • Beiträge: 99
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #4 am: September 02, 2010, 13:58:21 »
Klasse, danke, das sieht doch jetzt schon richtig schick aus!
Anbei ein 3-stimmiger Satz von GaudeamusIgitur. Vielleicht nützt er als Dankeschön?
Grüße und nochmals Dank
von Radler

ding-dong

  • Hero Member
  • *****
  • Beiträge: 631
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #5 am: September 02, 2010, 14:38:23 »
sehr schön -danke!

nur eine kleine frage: der deutsche text ist in der 4. strophe auf die zweite kolonne umgebrochen, das sieht meiner ansicht nach etwas seltsam aus; es ist doch genug platz da, um links 4 strophen, rechts 3 hinzuschreiben, oder? vielleicht auch in der anordnung:

1 - 2
3 - 4
5 - 6
  7

weiterhin alles gute!

RobUr

  • Hero Member
  • *****
  • Beiträge: 629
    • Profil anzeigen
Re:Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #6 am: September 03, 2010, 01:38:43 »
Hi Radler,

coole Sache! Richtig nutzen würde mir der Quelltext, dann könnte ich ein Beispiel nach meinem Geschmack fertigstellen :)

Die einzig denkbare Strophenanordnung ist eigentlich immer: von links oben abwärts bis zur Hälfte und dann rechts oben fortsetzen (Zeitungsspaltenlayout). Im vorliegenden Falle (mit ungerader Strophenanzahl) hieße das:

1.    4.
2.    5.
3.    6.
   7.


Ein Umbruch innerhalb der Strophe wäre lediglich durch arge Platzknappheit gerechtfertigt. Ich sehe zu, so etwas zu vermeiden.

Grüße, Robert
LilyPond 2.19.53 auf Mac OS X 10.4.11 (Intel)
Robert@CPDLEnsemble TonART Leipzigamici musicaevocHALes

complanar

  • Newbie
  • *
  • Beiträge: 20
    • Profil anzeigen
    • complanar webdesign
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #7 am: November 11, 2013, 14:54:09 »
Das ist alles ganz schön, soweit war ich auch schon mal.

Die Sache hat nur einen Schönheitsfehler: Die shortVocalNames werden im Unterschied zu normalen stanzaNumbers an einem festen Punkt ausgerichtet und kümmern sich kein bisschen um die Breite der Wörter vor denen sie gerade stehen.

Das kann leicht dazu führen, dass sie sich mit dem Text in die Quere kommen. Bei mir tritt das Problem fast immer auf. Und jede Zeile einen neuen X-offset zuzuweisen ist am ende auch nicht besser als neue stanzaNumbers einzufügen.

Außerdem: Wenn man einen ChoirStaff verwendet, evtl. wenig bis keine Vorzeichen hat und gerade eine lange Silbe am Zeilenanfang steht, dann ist zwischen StaffBrace und Textsilbe kaum Platz für die Strophennummer.

Und wenn es mal nicht zu Kollisionen kommt, dann hat man zumindest nicht gerade schöne Ungleichheiten bei den Abständen. (s. Anhang)



Wahrscheinlich hilft da nur ein Einklinken in den Lilypond-Code und ein entsprechendes Abändern bzw. Duplizieren und modifizieren des Codes für die shortVocalNames. Oder man sucht sich einen Hook im automatischen Zeilenumbruch und hakt dort ein. Das übersteigt aber meine Kenntnisse. Vielleicht weiß harm6 weiter, der/die ist doch Profi für solche Fälle … (Weiß jemand ob harm6 männlich oder weiblich ist?)

Holger
Wie soll ich wissen, was ich denke, bevor ich höre, was ich sage?

Joei

  • Full Member
  • ***
  • Beiträge: 111
    • Profil anzeigen
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #8 am: März 21, 2017, 16:49:12 »
Moinsen,

gibt's hier eigentlich was Neues? Ich finde die Lösung mit den ShortInstrument Names nur bedingt hübsch...

Joei

harm6

  • Hero Member
  • *****
  • Beiträge: 1705
    • Profil anzeigen
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #9 am: März 21, 2017, 22:17:42 »
Zitat von: Joei
gibt's hier eigentlich was Neues? Ich finde die Lösung mit den ShortInstrument Names nur bedingt hübsch...

Ich hatte mal folgendes gemacht (png im Anhang)
\version "2.19.44"

%% REMARK:
%% Using instrument-names _and_ setting an invisible stanza with a certain
%% extent at line-begin to avoid collisions

%% Thanks to David Nalesnik
%% http://lists.gnu.org/archive/html/lilypond-user/2016-07/msg00028.html

#(define create-stanza-number-grob-engraver
;; puts out a StanzaNumber for every LyricText-grob
  (lambda (context)
    (let ((stanza (ly:context-property context 'stanza)))
      `((acknowledgers
          (lyric-syllable-interface .
            ,(lambda (engraver grob source-engraver)
              (let ((new-stanza-grob
                      (ly:engraver-make-grob engraver 'StanzaNumber '())))
              (ly:grob-set-property! new-stanza-grob 'text stanza)))))))))

#(define (at-line-beginning? grob)
   (let* ((col (ly:item-get-column grob))
          (ln (ly:grob-object col 'left-neighbor))
          (col-to-check (if (ly:grob? ln) ln col)))
     (and (eq? #t (ly:grob-property col-to-check 'non-musical))
          (= 1 (ly:item-break-dir col-to-check)))))

#(define (keep-at-line-begin grob)
   (if (and (ly:item? grob) (not (at-line-beginning? grob)))
       (ly:grob-suicide! grob)
       grob))

keepLineStartStanzaNumbers =
\layout {
  \context {
  \Lyrics
  \override StanzaNumber.after-line-breaking =
    #keep-at-line-begin
  }
}

numberLyrics =
#(define-scheme-function (instr-name move)(number? number?)
"Return a context-modification setting @code{stanza} and consisting
@code{create-stanza-number-grob-engraver}, as well as @code{instrumentName} and
@code{shortInstrumentName}.
The latter prints the numbering using @var{instr-name}, the first is used to
push the lyrics to the right, using @var{move}.
"
#{
  \with {
    %stanza = \markup \italic #(format #f "~a." nmbr)
    stanza = \markup \combine \null \translate #(cons move  0) \null
    \consists #create-stanza-number-grob-engraver
instrumentName = #(format #f "~a." instr-name)
shortInstrumentName = #(format #f "~a." instr-name)
  }
#})

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\score {
  <<
    \new Staff { \key cis \major \repeat unfold 6 {  c''4 d'' e'' } }
    \new Lyrics
      \with {
        \numberLyrics 1 3.5
  }
      \lyricmode {
        \repeat unfold 6 {  foo -- bar -- buzz }
      }
     
    \new Lyrics 
      \with {
        \numberLyrics 2 3.5
  }
      \lyricmode {
        \repeat unfold 6 {  very-very-long-syllable bur -- buuuzz }
      }
     
    \new Lyrics 
      \with {
        \numberLyrics 3 3.5
  }
      \lyricmode {
        \repeat unfold 6 {  fuu -- bla -- blibbb }
      }
  >>
  \layout {
    \keepLineStartStanzaNumbers
    \context {
      \Lyrics
      \override InstrumentName.X-offset = 2
    }
  }
}

Gruß,
  Harm

Zitat von: complanar
(Weiß jemand ob harm6 männlich oder weiblich ist?)
Das hatte ich noch gar nicht gesehen, und lass es unbeantwortet rofl

Joei

  • Full Member
  • ***
  • Beiträge: 111
    • Profil anzeigen
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #10 am: März 21, 2017, 22:35:01 »
cool – wird gleich ausprobiert, lieb(e) Harm(in)  :o 8) ::) ! Joei

Joei

  • Full Member
  • ***
  • Beiträge: 111
    • Profil anzeigen
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #11 am: März 22, 2017, 08:53:06 »
ok.. ausprobiert - funktioniert einwandfrei.

Jetzt sind mir die Zeilennummern aber noch zu weit links. Hab versucht selber Überlegungen anzustellen:

Die Zeilennummern sind ja "instrumentNames" - müssten ergo auch Text sein können, und dann hätte ich einfach eine Zeilennummern mit führenden Leerzeichen genommen "   1.".
Dafür habe ich den Variablentyp für den instr-name auf char? gesetzt:

#(define-scheme-function (instr-name move)(char? number?)
und im Musikquelltext dann

\new Lyrics
      \with {
        \numberLyrics "1" 3.5
  }

Weder konnte Lily das interpretieren:

Fehler: kein solcher Kontextmodus       
        \numberLyrics "1" 3.5

noch konnte die Variable was mit den führenden Leerzeichen anfangen:

Fehler: falscher Typ für Argument 1; character erwartet, "  2" gefunden
        \numberLyrics "  2" 3.5

Muss ich die Variablen anders angeben?

Hier das geänderte Beispiel (einzige Änderungen sind die oben beschriebenen, hier nur als kompilierbares Beispiel)

\version "2.19.44"

%% REMARK:
%% Using instrument-names _and_ setting an invisible stanza with a certain
%% extent at line-begin to avoid collisions

%% Thanks to David Nalesnik
%% http://lists.gnu.org/archive/html/lilypond-user/2016-07/msg00028.html

#(define create-stanza-number-grob-engraver
;; puts out a StanzaNumber for every LyricText-grob
  (lambda (context)
    (let ((stanza (ly:context-property context 'stanza)))
      `((acknowledgers
          (lyric-syllable-interface .
            ,(lambda (engraver grob source-engraver)
              (let ((new-stanza-grob
                      (ly:engraver-make-grob engraver 'StanzaNumber '())))
              (ly:grob-set-property! new-stanza-grob 'text stanza)))))))))

#(define (at-line-beginning? grob)
   (let* ((col (ly:item-get-column grob))
          (ln (ly:grob-object col 'left-neighbor))
          (col-to-check (if (ly:grob? ln) ln col)))
     (and (eq? #t (ly:grob-property col-to-check 'non-musical))
          (= 1 (ly:item-break-dir col-to-check)))))

#(define (keep-at-line-begin grob)
   (if (and (ly:item? grob) (not (at-line-beginning? grob)))
       (ly:grob-suicide! grob)
       grob))

keepLineStartStanzaNumbers =
\layout {
  \context {
  \Lyrics
  \override StanzaNumber.after-line-breaking =
    #keep-at-line-begin
  }
}

numberLyrics =
#(define-scheme-function (instr-name move)(char? number?)
" instr-name was number?"     
"Return a context-modification setting @code{stanza} and consisting
@code{create-stanza-number-grob-engraver}, as well as @code{instrumentName} and
@code{shortInstrumentName}.
The latter prints the numbering using @var{instr-name}, the first is used to
push the lyrics to the right, using @var{move}.
"
#{
  \with {
    %stanza = \markup \italic #(format #f "~a." nmbr)
    stanza = \markup \combine \null \translate #(cons move  0) \null
    \consists #create-stanza-number-grob-engraver
instrumentName = #(format #f "~a." instr-name)
shortInstrumentName = #(format #f "~a." instr-name)
  }
#})

%%%%%%%%%%%%%%%%%%%%%%%%%%
%% modifiziertes EXAMPLE %
%%%%%%%%%%%%%%%%%%%%%%%%%%

\score {
  <<
    \new Staff { \key cis \major \repeat unfold 6 {  c''4 d'' e'' } }
    \new Lyrics
      \with {
        \numberLyrics "1" 3.5
  }
      \lyricmode {
        \repeat unfold 6 {  foo -- bar -- buzz }
      }
     
    \new Lyrics 
      \with {
        \numberLyrics "  2" 3.5
  }
      \lyricmode {
        \repeat unfold 6 {  very-very-long-syllable bur -- buuuzz }
      }
     
    \new Lyrics 
      \with {
        \numberLyrics "3" 3.9
  }
      \lyricmode {
        \repeat unfold 6 {  fuu -- bla -- blibbb }
      }
  >>
  \layout {
    \keepLineStartStanzaNumbers
    \context {
      \Lyrics
      \override InstrumentName.X-offset = 2
    }
  }
}

Die Variable "move" sollte den Text verschieben, richtig? Da habe ich keinerlei Effekt merken können :(

Dank&Gruß Joei

Joei

  • Full Member
  • ***
  • Beiträge: 111
    • Profil anzeigen
Re: Lyrics: Strophen-Nummern in jeder Notenzeile
« Antwort #12 am: März 22, 2017, 09:06:29 »
oh gott wie dämlich  :o

    \override InstrumentName.X-offset = 3 im  Layout-Block war die Lösung. (Wobei mich mein Denkfehler oben trotzdem wurmt.)

ABER:  die Nutzung von \numberLyrics zieht das Notenbild extrem auseinander:
Harms Beispiel ohne \numberLyrics


und mit:


Joei
« Letzte Änderung: März 22, 2017, 09:11:53 von Joei »