Allgemein > Fragen zu Funktionen

Automatische Textmarker-Markierungen

(1/3) > >>

Thomas:
Hallo,

kann man einzelne Notenelemente automatisch farbig hinterlegen, wie zum Beispiel Wiederholungen, Tonartwechsel, Versetzungszeichen, ...?


--- Code: ---\version "2.18.2"

\relative c' {
 
 c1
 \repeat volta 2 {
   c1
   cis1
 }
 \key g \major
 c1
 
}

--- Ende Code ---

fugenkomponist:
Kurze Antwort: Ja, kann man, ist halt evtl. relativ aufwendig (zumindest bis man ne erste Lösung hat, dann kann mans in ne Funktion packen und gut ist).

Lange Antwort: Man kann auf jeden Fall mit \markup etc. rumspielen; ich könnt mir sogar vorstellen, daß man das direkt im stencil der farbig zu hinterlegenden Grobs unterbringen kann. Bevor ich das aber probiere: Ist dir vielleicht schon damit geholfen, die einzelnen Grobs farbig zu drucken statt schwarz auf farbigem Hintergrund? Dann würde es reichen, das per (\once) \override zu ändern:

--- Code: ---\override Staff.KeySignature.color = #green
--- Ende Code ---
Und noch ein paar Detailfragen:
• Soll die Färbung alle Grobs des Typs betreffen (z. B. alle Tonartwechsel immer grün)? Davon hängt ab, wo der \override plaziert werden sollte.
• Sollen die Wiederholungen solche Klammern haben wie in rot angedeutet? Dafür gibt es startRepeatType und endRepeatType, die auf "[|:" und ":|]" statt ".|:" und ":|." gesetzt werden.
• Falls ein einfaches Färben nicht ausreicht: farbig umkringeln oder hinterlegen?


--- Code: ---\version "2.18.2"

\relative c' {
  c1
  \once \override Staff.BarLine.color = #red
  \repeat volta 2 {
    c1
    \once \override Accidental.color = #darkyellow
    cis1
  }
  \once \override Staff.BarLine.color = #red
  \once \override Staff.KeySignature.color = #darkgreen
  \key g \major
  c1
}

--- Ende Code ---

harm6:

--- Zitat von: fugenkomponist ---ich könnt mir sogar vorstellen, daß man das direkt im stencil der farbig zu hinterlegenden Grobs unterbringen kann.
--- Ende Zitat ---

Yup, z.B.:

--- Code: ---\version "2.19.56"

#(define* (emphasize-in-color color padding #:optional (y-padding 0))
  (lambda (grob)
(let* ((stil (ly:grob-property grob 'stencil))
       (x-ext (ly:stencil-extent stil X))
       (y-ext (ly:stencil-extent stil Y)))
  (ly:grob-set-property! grob 'layer -100)
  (ly:grob-set-property! grob 'stencil
    (ly:stencil-add
      (stencil-with-color
        (make-filled-box-stencil
          (interval-widen x-ext padding)
          (interval-widen y-ext (+ y-padding padding)))
        color)
      stil)))))   

\relative c' {
  c1
  \once \override Staff.BarLine.after-line-breaking =
    #(emphasize-in-color red 0.2 1)
  \repeat volta 2 {
    c1
    \once \override Accidental.after-line-breaking =
      #(emphasize-in-color yellow 0.2)
    cis1
  \once \override Staff.BarLine.after-line-breaking =
    #(emphasize-in-color red 0.2 1)
   }
  \once \override Staff.KeySignature.after-line-breaking =
    #(emphasize-in-color green 0.2)
  \key g \major
  c1
}

--- Ende Code ---

Könnte man jetzt auch als Funktion kodieren ...


Gruß,
  Harm

fugenkomponist:
Das war so das Vorgehen, was mir vorgeschwebt ist von der Idee her, aber daß es in der Umsetzung tatsächlich so gut und übersichtlich geht, hätte ich nicht gedacht ;) Und selbst hätt ich wahrscheinlich ne ganze Weile gebraucht, um Dinge wie stencil-with-color oder interval-widen zu finden (oder letzteres auch selbst zu schreiben …).

harm6:

--- Zitat ---[...]
daß es in der Umsetzung tatsächlich so gut und übersichtlich geht, hätte ich nicht gedacht
--- Ende Zitat ---
Nun ja, komplizierter wird es wenn man items am Zeilenumbruch nur am Zeilenende oder -anfang farbig unterlegt haben möchte.
Aber da warte ich mal wie Thomas sich äußert. ;)


--- Zitat ---stencil-with-color oder interval-widen
--- Ende Zitat ---
Dokumentiert ist:

--- Zitat von: IR ---Function: ly:stencil-in-color stc r g b

    Put stc in a different color.
--- Ende Zitat ---
stencil-with-color ist aber häufig handlicher da eine vordefinierte Farbe übergeben werden kann.
Allerdings ist stencil-with-color definiert in stencil.scm, interval-widen in lily-library.scm. Im Gegensatz zu den in C++ definierten scheme-Funktionen werden die dortigen Definitionen nicht in die IR aufgenommen. Aber selbst die nur kursorische Lektüre dieser Dateien ist empfehlenswert.


Gruß,
  Harm

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln