Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Samstag, 27. Oktober 2018, 08:22

Titel: Italics innerhalb von Lyrics; \override und \temporary [GELÖST]
Beitrag von: ingmar am Samstag, 27. Oktober 2018, 08:22
Liebe Helfer,

hier ein kurzes Lied - nun, sehr kurz:


\version "2.19.64"

mymusic = \relative  { c'4 d e f g1 }
mylyrics =  \lyricmode { Mein Ge -- burts -- tag heut! }

\score {
\new Staff <<
\new Voice = "myVoice" \mymusic
\new Lyrics { \lyricsto "myVoice" { \mylyrics } }
>>
}


Nun ist mir mein heutiger Geburtstag sehr wichtig, weil ich ja 35 werde! Ich möchte das Wort daher kursiv hervorheben:


\version "2.19.64"

mymusic = \relative  { c'4 d e f g1 }
mylyrics =  \lyricmode { Mein \markup \italic { Ge --burts -- tag } heut! }

\score {
\new Staff <<
\new Voice = "myVoice" \mymusic
\new Lyrics { \lyricsto "myVoice" { \mylyrics } }
>>
}


Leider hat das nicht das erwartete Ergebnis. Muss ich denn nun wirklich das \markup \italic { ... } } um jede einzelne Silbe herumpacken? Das kanns doch nicht sein, oder?

Was hab ich nicht verstanden?

Gruß,
--ingmar
Titel: Antw:Italics innerhalb von Lyrics
Beitrag von: Malte am Samstag, 27. Oktober 2018, 13:05
\override LyricText.font-shape = #'italicheißt das Zauberwort. Alles Gute!
Titel: re: Italics innerhalb von Lyrics
Beitrag von: ingmar am Samstag, 27. Oktober 2018, 14:03
ja, danke!

Allerdings fehlt hier der zu jedem Zauberwort nötige Gegenzauber.

Man will ja, um im Bild zu bleiben, nur den Geburtstag feiern und anschließend nicht auch das Heute.

So...


mylyrics =  \lyricmode { Mein \override LyricText.font-shape = #'italic { Ge -- burts -- tag } heut! }


.. endet die Kursivität niemals, und mit vorgestelltem \once trifft es dann doch wieder nur die erste Silbe.

Und jetzt?


--ingmar
Titel: Antw:Italics innerhalb von Lyrics
Beitrag von: Manuela am Samstag, 27. Oktober 2018, 14:39
So klappert's  ;)

mylyrics =  \lyricmode { Mein \override LyricText.font-shape = #'italic  Ge -- burts -- tag 
                         \override LyricText.font-shape = #'normal heut! }


alternativ:
\revert LyricText.font-shape
Titel: re: Italics innerhalb von Lyrics
Beitrag von: ingmar am Samstag, 27. Oktober 2018, 14:48
Also im Alltag, wenn das mehr als einmal vorkommt, irgendwie sowas:


i = \override LyricText.font-shape = #'italic
n = \override LyricText.font-shape = #'normal

mymusic = \relative  { c'4 d e f g1 }
mylyrics =  \lyricmode { Mein \i Ge -- burts -- tag \n heut! }

\score {
\new Staff <<
\new Voice = "myVoice" \mymusic
\new Lyrics { \lyricsto "myVoice" { \mylyrics } }
>>
}



Danke, Manuela!
--ingmar
Titel: Antw:Italics innerhalb von Lyrics
Beitrag von: Manuela am Samstag, 27. Oktober 2018, 14:53
Freut mich  :)

Der Unterschied zwischen \override LyricText.font-shape = irgendwas und \revert LyricText.font-shape ist  dir eh klar?
Titel: re: Italics innerhalb von Lyrics
Beitrag von: ingmar am Samstag, 27. Oktober 2018, 17:09
Ich kenne nur Documentation/notation/the-override-command (http://lilypond.org/doc/v2.19/Documentation/notation/the-override-command) - und was ich mir oben überlegt hatte, findet sich in Documentation/learning/using-variables-for-layout-adjustments (http://lilypond.org/doc/v2.19/Documentation/learning/using-variables-for-layout-adjustments).

Nach dem, was ich kapiert hab, müssten die beiden identische Wirkung haben (?):
Aber das ist mein erster Ausflug ins Land von Lürix und Obelix...

--ingmar
EDIT: 2. Link hinzugefügt.
Titel: Antw:Italics innerhalb von Lyrics
Beitrag von: Manuela am Samstag, 27. Oktober 2018, 21:39
Das kommt davon, wenn man den Mund zu voll nimmt  :-[

Probier mal folgendes aus:

\version "2.19.80"

\layout {
  \context {
    \Voice
    \override NoteHead.color = #magenta
  }
}

#(set! paper-alist (cons '("snippet" . (cons (* 300 mm) (* 25 mm))) paper-alist))
\paper {
  #(set-paper-size "snippet")
  tagline = ##f
  indent = 0
  ragged-bottom = ##t
  print-page-number = ##f
}

\score {
  \new Staff
  \new Voice \relative c' {
    \textLengthOn
    c1-\markup "context score"
    \override NoteHead.color = #blue
    c-\markup "override blue"
    \temporary \override NoteHead.color = #red
    c_\markup "temporary override red"
    \revert NoteHead.color
    c-\markup "revert: ergibt blue"
    \revert NoteHead.color
    c_\markup "revert: ergibt magenta, wieso nicht grün?"
    \revert NoteHead.color
    c
  }
  \layout {
    \context {
      \Voice
      \override NoteHead.color = #green
    }
  }
}


verhält sich anders als ich erwartet hätte. Das 2. Revert setzt nicht auf den layout-context zurück, was grün ergäbe, sondern auf den globalen Context. Wahrscheinlich habe ich etwas falsch verstanden.
Titel: Antw:Italics innerhalb von Lyrics
Beitrag von: harm6 am Sonntag, 28. Oktober 2018, 00:57
Hallo Manuela,

nur mit \temporary wird ein stack bewahrt. Ein einfacher \override in Musik ersetzt den vorherigen und radiert ihn somit aus.

Zitat
\version "2.19.80"

\layout {
  \context {
    \Voice
Der aktuelle stack (höchste Priorität an vorderster Stelle): (magenta)
(Jetzt ins score-layout)
    \override NoteHead.color = #magenta
  }
}

#(set! paper-alist (cons '("snippet" . (cons (* 300 mm) (* 25 mm))) paper-alist))
\paper {
  #(set-paper-size "snippet")
  tagline = ##f
  indent = 0
  ragged-bottom = ##t
  print-page-number = ##f
}

\score {
  \new Staff
  \new Voice \relative c' {
    \textLengthOn
    c1-\markup "context score"
Hier wird der override aus dem score-layout ersetzt und aus dem stack radiert:
Der aktuelle stack: (blue magenta)

    \override NoteHead.color = #blue
    c-\markup "override blue"
Hier kommt "red" auf den stack.
Der aktuelle stack: (red blue magenta)
    \temporary \override NoteHead.color = #red
    c_\markup "temporary override red"
Eins zurück im stack.
Der aktuelle stack: (blue magenta)
    \revert NoteHead.color
    c-\markup "revert: ergibt blue"
Eins zurück im stack.
Der aktuelle stack: (magenta)
    \revert NoteHead.color
    c_\markup "revert: ergibt magenta, wieso nicht grün?"
Eins zurück im stack.
Der aktuelle stack: ()
Also der default. Erscheint als schwarz.

    \revert NoteHead.color
    c
  }
  \layout {
    \context {
      \Voice
Der aktuelle stack: (green magenta)
Jetzt in die Musik.

      \override NoteHead.color = #green
    }
  }
}

Schau auch auf den output dieses codes. Probiere mit und ohne \temporary


\version "2.19.80"

counter = 0

foo = \once \override NoteHead.after-line-breaking =
    #(lambda (grob)
      (newline)
      (pretty-print
        (filter-map
          (lambda (k-v)
            (if (eq? (car k-v) 'color)
                (begin
                  (set! counter (1+ counter))
                  (cons counter (cons 'color (cdr k-v))))
                #f))
        (ly:grob-basic-properties grob)))
      (set! counter 0))

\layout {
  \context {
    \Voice
    \override NoteHead.color = #magenta  %% 1.0  0.0  1.0
  }
}

#(set! paper-alist (cons '("snippet" . (cons (* 300 mm) (* 25 mm))) paper-alist))
\paper {
  #(set-paper-size "snippet")
  tagline = ##f
  indent = 0
  ragged-bottom = ##t
  print-page-number = ##f
}

\score {
  \new Staff
  \new Voice \relative c' {
    \textLengthOn
    \foo
    c1
    \foo
    \temporary
    \override NoteHead.color = #blue  %%  0.0  0.0  1.0
    c
    \foo
    \revert NoteHead.color
    c
    \foo
    \revert NoteHead.color
    c
  }
  \layout {
    \context {
      \Voice
      \override NoteHead.color = #green  %%  0.0  1.0  0.0
    }
  }
}


HTH,
  Harm

Titel: Antw:Italics innerhalb von Lyrics; \override und \temporary [GELÖST]
Beitrag von: Manuela am Sonntag, 28. Oktober 2018, 07:19
Danke für die ausführliche Erklärung, Harm.

Meine Erwartung war, dass die Context-Eigenschaften auf einen Stack kommen und revert auf die im Context definierten Eigenschaften zurücksetzt (evtl. in der hierarchischen Reihenfolge, also zuerst score-context, dann globaler context). Wenn man auf die im Context definierten Eigenschaften zurückkommen will, wäre alse \temporary \override das Mittel der Wahl.