Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: chf am Sonntag, 11. April 2021, 18:00

Titel: LyricExtender
Beitrag von: chf am Sonntag, 11. April 2021, 18:00

Liebe Freunde,

gibt es zur Verlängerung des LyricExtender

\override LyricExtender #'minimum-length = #10

auch das Gegenteil? Ich brauchte eine Verkürzung...

Gruß
Christa
Titel: Antw:LyricExtender
Beitrag von: harm6 am Montag, 12. April 2021, 11:52
Geh ich recht in der Annahme, daß Du nicht die Länge des LyricExtender verändern willst, sondern den horizontalen Abstand zwischen dem Ende des LyricExtenders und der assozierten NoteColumn beeinflussen möchtest?

Falls, ja:
(1)
Implementiert sind nur die properties left-padding und right-padding.
Diese beziehen sich aber auf das jeweils vorangegangene bzw folgende Element in den Lyrics.
Insbesondere für right-padding sind dann für gewöhnlich recht hohe Werte nötig, die auch noch bei jeder layout-Änderung angepasst werden müssen:

<<
  \new Voice { b1~ b b }
  \new Lyrics \lyricsto "" {   
    \once \override LyricExtender.left-padding = 2
    \once \override LyricExtender.right-padding = 8
    foo __ bar
  }
>>


(2)
Schön wäre shorten-pair zu haben, wie bei der Hairpin. Geht mit einem neuen stencil:

\version "2.22.0"

#(define harm:lyric-extender::print
  (lambda (grob)
  "Post-processes the stencil by applying the @code{shorten-pair} property."
    (let* ((stil (ly:lyric-extender::print grob))
           (stil-x-ext (ly:stencil-extent stil X))
           (stil-y-ext (ly:stencil-extent stil Y))
           (shorten-pair (ly:grob-property grob 'shorten-pair '(0 . 0)))
           (new-stil-x-ext
             (cons
               (+ (car stil-x-ext) (car shorten-pair))
               (- (cdr stil-x-ext) (cdr shorten-pair)))))
   
      (define (lists-map function ls)
      "Apply @var{function} to @var{ls} and all of it sublists.
      First it recurses over the children, then the function is applied to
      @var{ls}."
          (if (list? ls)
              (set! ls (map (lambda (y) (lists-map function y)) ls))
              ls)
          (function ls))
 
 
      (ly:make-stencil
        (lists-map
           (lambda (l)
             (if (and (list? l) (eq? (car l) 'round-filled-box))
                 (list
                   'round-filled-box
                   (- (list-ref l 1) (car shorten-pair))
                   (- (list-ref l 2) (cdr shorten-pair))
                   (list-ref l 3)
                   (list-ref l 4)
                   (list-ref l 5))
                 l))
          (ly:stencil-expr stil))       
         new-stil-x-ext
         stil-y-ext))))
 
\score {
  <<
    \new Voice { b1~ b b b1~ b b }
    \new Lyrics \lyricsto "" {         
      \once \override LyricExtender.shorten-pair = #'(0 . 2)
      foo __ bar buzz \tweak shorten-pair #'(2 . -1) __ blubb
    }
  >>
  \layout {
  \context {
      \Lyrics
      \override LyricExtender.stencil = #harm:lyric-extender::print
    }
  }
}


HTH,
  Harm
Titel: Antw:LyricExtender
Beitrag von: chf am Montag, 12. April 2021, 14:36
Hallo Harm,

es ist offensichtlich viel komplizierter, als ich dachte...

\version "2.20.0"
\relative c'' {
  r8 gis fis e fis ([e] cis [b] cis4 r a'4. gis8 cis [gis fis e~]e [
  \once \override TextScript.extra-offset = #'(0 . -1) dis_\markup "cht."])
}
\addlyrics {\small Es ist voll -- bra __ cht. }

%in der Partitur arbeite ich mit \lyricmode  / lyricsto


Lilypond arbeitet ja wunderbar mit Silben, aber die hier verlangte Trennung macht ein Problem.
Ich habe mir sagen lassen, dass diese Notation durchaus gebräuchlich ist - ich kannte das nicht.Nun dachte ich, der Strich könnte einfach eine Note früher enden.

So muss ich wohl Trennstriche manuell einsetzen... Oder???
Danke bis hierher
Christa


Titel: Antw:LyricExtender
Beitrag von: kilgore am Montag, 12. April 2021, 16:44
Hallo chf,

Eigentlich müsste das Melisma erst am Ende des Wortes kommen. "Vollbracht" hat schließlich nur zwei Silben. Hier ein paar Varianten:


\version "2.20.0"

%Variante 1 - eigentlich richtig so
\relative c'' {
  r8 gis fis e fis ([e] cis [b] cis4 r a'4. gis8 cis [gis fis e~]e [
   dis])
}
\addlyrics {\small Es ist voll -- bracht. __ }

%Variante 2 - naja, etwas komisch weil die letzte Silbentrennung eigentlich nur eine Silbe umfasst
%und der Slur nicht ganz weit genug geht.
\relative c'' {
  r8 gis fis e fis ([e] cis [b] cis4 r a'4. gis8 cis [gis fis e~]e) [
   dis]
}
\addlyrics {\small Es ist voll -- bra -- cht. }

%Variante 3 - Kompromisslösung :) Da würde Harm's Lösung mit right-padding vielleicht gut.
\relative c'' {
  r8 gis fis e fis ([e] cis [b] cis4 r a'4. gis8 cis [gis fis e~]e [
   \once \override TextScript.extra-offset = #'( 1 . -1.5 )
   dis])_"(cht.)"
}
\addlyrics {\small Es ist voll -- bracht. __
           
            }



Ich denke, jede(r) Sänger(in) weisst auch, dass man bei "-bracht" den Vokal aushält, und nicht das "cht"  ;)

Gruß
kil
Titel: Antw:LyricExtender
Beitrag von: chf am Montag, 12. April 2021, 17:27
Hallo kilgore,

wie gesagt - die Aussage eines mit "allen Wassern gewaschenen" Musikers und Verlegers steht für die scheinbar falsche Variante...
Aber dein Vorschlag endet klassisch an der letzten Note und vor "cht"
Titel: Antw:LyricExtender
Beitrag von: kilgore am Montag, 12. April 2021, 17:51
Naja, das (mienes Wissens) aktuellste Fachbuch für Notation ist bei diesem Thema eindeutig. (Behind Bars von Elaine Gould)
Bild im Anhang...
Titel: Antw:LyricExtender
Beitrag von: chf am Montag, 12. April 2021, 20:06
Das Buch habe ich auch...
Ich versuche, dem Wunsch des Komponisten zu entsprechen - natürlich nur, wenn's geht.
Titel: Antw:LyricExtender
Beitrag von: harm6 am Dienstag, 13. April 2021, 10:36
Warum nicht:

\version "2.20.0"

\relative c'' {
  r8 gis fis e fis([ e] cis[ b] cis4 r a'4. gis8 cis[ gis fis e~] e[ dis])
}
\addlyrics {
  \small
  Es ist voll -- \set ignoreMelismata = ##t bra __ \repeat unfold 11 _ cht.
  \unset ignoreMelismata
}


wenn der Komponist es wirklich so haben möchte...

Aber kilgore's Variante 1 ist vorzuziehen.

Gruß,
  Harm
Titel: Antw:LyricExtender
Beitrag von: chf am Dienstag, 13. April 2021, 13:23
Danke, Harm.

Mich hat's auch befremdet, aber den Argumenten aus erfahrenem Mund konnte ich schlecht widersprechen.
Den Komponisten wird's freuen.

Gruß
Christa
Titel: Antw:LyricExtender
Beitrag von: harm6 am Mittwoch, 14. April 2021, 12:48
Ich würde Elaine Gould jetzt nicht unbedingt als unerfahren einordnen wollen :)

Gruß,
  Harm
Titel: Antw:LyricExtender
Beitrag von: chf am Montag, 26. April 2021, 12:34
Ein solcher Gedanke sei ferne von mir!!!
Das Buch ist mir zur Hand - empfohlen von jenem erfahrenen Menschen...