Italics innerhalb von Lyrics; \override und \temporary [GELÖST]

Begonnen von ingmar, Samstag, 27. Oktober 2018, 08:22

« vorheriges - nächstes »

ingmar

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

Malte

\override LyricText.font-shape = #'italicheißt das Zauberwort. Alles Gute!

ingmar

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

Manuela

#3
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
Danke für eure Hilfe
viele Grüße
-- Manuela

ingmar

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

Manuela

Freut mich  :)

Der Unterschied zwischen \override LyricText.font-shape = irgendwas und \revert LyricText.font-shape ist  dir eh klar?
Danke für eure Hilfe
viele Grüße
-- Manuela

ingmar

#6
Ich kenne nur Documentation/notation/the-override-command - und was ich mir oben überlegt hatte, findet sich in Documentation/learning/using-variables-for-layout-adjustments.

Nach dem, was ich kapiert hab, müssten die beiden identische Wirkung haben (?):

  • \override LyricText.font-shape = #'normal
  • \revert LyricText.font-shape
Aber das ist mein erster Ausflug ins Land von Lürix und Obelix...

--ingmar
EDIT: 2. Link hinzugefügt.

Manuela

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.
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

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


Manuela

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.

Danke für eure Hilfe
viele Grüße
-- Manuela