Allgemein > Fragen zu Funktionen
Automatische Textmarker-Markierungen
Thomas:
--- Zitat von: fugenkomponist am Freitag, 10. März 2017, 17:41 ---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).
--- Ende Zitat ---
Am Ende will ich am Liebsten nur noch \include "textmarker.ly" schreiben müssen.
--- Zitat von: fugenkomponist am Freitag, 10. März 2017, 17:41 ---Ist dir vielleicht schon damit geholfen, die einzelnen Grobs farbig zu drucken statt schwarz auf farbigem Hintergrund?
--- Ende Zitat ---
Nein, schon mit farbigem Hintergrund.
--- Zitat von: fugenkomponist am Freitag, 10. März 2017, 17:41 ---• Falls ein einfaches Färben nicht ausreicht: farbig umkringeln oder hinterlegen?
--- Ende Zitat ---
Umkringeln würde zur Not auch gehen.
--- Zitat von: harm6 am Sonntag, 12. März 2017, 00:22 ---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. ;)
--- Ende Zitat ---
--- Code: ---\version "2.18.2"
#(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
\break
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1)
\repeat volta 2 {
c1
}
\once \override Staff.KeySignature.after-line-breaking =
#(emphasize-in-color green 0.2)
\key g \major
\break
c1
}
--- Ende Code ---
Der Code erzeugt auch einen roten Strich am Ende der ersten Notenzeile. Der würde stören. Der Tonartwechsel wird vorne und hinten angezeigt. Das wäre für mich OK.
harm6:
--- Zitat ---Am Ende will ich am Liebsten nur noch \include "textmarker.ly" schreiben müssen.
--- Ende Zitat ---
Die eigentlichen Befehle wirst Du aber immer noch in den music-stream einfügen müssen, oder eben alles spezifizierte färben.
Hier ein Code in dem Du für items angeben kannst ob (und wo) sie am Zeilenumbruch farbig unterlegt werden sollen.
Die procedure
(emphasize-in-color color padding #:optional (y-padding 0) dir)
trägt jetzt also zwei optionale Argumente. Nachteil: falls Du 'dir' setzt (möglich ist -1, 0, 1 für Zeilenende, immer, Zeilenanfang) dann musst Du y-padding ebenfalls setzen.
--- Code: ---\version "2.19.56"
#(define* (emphasize-in-color color padding #:optional (y-padding 0) dir)
(lambda (grob)
(let* ((stil (ly:grob-property grob 'stencil))
(x-ext (ly:stencil-extent stil X))
(y-ext (ly:stencil-extent stil Y))
(item-break-dir
(if (ly:item? grob)
(ly:item-break-dir grob)
#f))
(stil-proc
(lambda (stl)
(ly:stencil-add
(stencil-with-color
(make-filled-box-stencil
(interval-widen x-ext padding)
(interval-widen y-ext (+ y-padding padding)))
color)
stl))))
(ly:grob-set-property! grob 'layer -100)
(ly:grob-set-property! grob 'stencil
(if (or (or (not dir) (zero? dir))
(and dir (equal? item-break-dir dir)))
(stil-proc stil)
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)
}
% \break
\repeat volta 2 {
\once \override Staff.KeySignature.after-line-breaking =
#(emphasize-in-color green 0.2)
\key g \major
c1
}
}
--- Ende Code ---
Funktioniert jetzt für alle items. Grobs sind entweder items oder spanners. Willst Du es für spanner auch noch haben?
Gruß,
Harm
Thomas:
--- Zitat von: harm6 am Montag, 13. März 2017, 23:54 ---
--- Zitat ---Am Ende will ich am Liebsten nur noch \include "textmarker.ly" schreiben müssen.
--- Ende Zitat ---
Die eigentlichen Befehle wirst Du aber immer noch in den music-stream einfügen müssen, oder eben alles spezifizierte färben.
--- Ende Zitat ---
Wunschvorstellung von mir wäre: Am Anfang einer bestehenden Datei '\include "textmarker.ly"' oder was ähnliches hinschreiben und danach sind alle Wiederholungen, Tonartwechsel, Dal Segnos, Codas, mit '!' und '?' erzeugte Versetzungszeichen farbig angestrichen. Wenn man die Befehle einzeln einfügen muss, wäre das ein großer Aufwand.
--- Code: ---\version "2.19.54"
#(define* (emphasize-in-color color padding #:optional (y-padding 0) dir)
(lambda (grob)
(let* ((stil (ly:grob-property grob 'stencil))
(x-ext (ly:stencil-extent stil X))
(y-ext (ly:stencil-extent stil Y))
(item-break-dir
(if (ly:item? grob)
(ly:item-break-dir grob)
#f))
(stil-proc
(lambda (stl)
(ly:stencil-add
(stencil-with-color
(make-filled-box-stencil
(interval-widen x-ext padding)
(interval-widen y-ext (+ y-padding padding)))
color)
stl))))
(ly:grob-set-property! grob 'layer -100)
(ly:grob-set-property! grob 'stencil
(if (or (or (not dir) (zero? dir))
(and dir (equal? item-break-dir dir)))
(stil-proc stil)
stil)))))
\relative c' {
c1
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 1)
\noBreak
\repeat volta 2 {
c1^\markup { dir 1 }
}
c1
\break
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 1)
\repeat volta 2 {
c1^\markup { dir 1 }
}
c1
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 0)
\noBreak
\repeat volta 2 {
c1^\markup { dir 0 }
}
c1
\break
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 0)
\repeat volta 2 {
c1^\markup { dir 0 }
}
c1
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 -1)
\noBreak
\repeat volta 2 {
c1^\markup { dir -1 }
}
c1
\break
\once \override Staff.BarLine.after-line-breaking =
#(emphasize-in-color red 0.2 1 -1)
\repeat volta 2 {
c1^\markup { dir -1 }
}
c1
}
--- Ende Code ---
Bei einer Wiederholung wird bei 'dir 1' nur das Wiederholungszeichen am Zeilenanfang markiert, aber nicht in der Zeilenmitte.
--- Zitat von: harm6 am Montag, 13. März 2017, 23:54 ---Funktioniert jetzt für alle items. Grobs sind entweder items oder spanners. Willst Du es für spanner auch noch haben?
--- Ende Zitat ---
Was ist der Unterschied zwischen spanners und items?
Sind items Noten, Taktstriche, ...?
Sind spanners Crescendos, Legatos, ...?
fugenkomponist:
[quote author=Thomas link=topic=2521.msg14265#msg14265 date=148949312
Wunschvorstellung von mir wäre: Am Anfang einer bestehenden Datei '\include "textmarker.ly"' oder was ähnliches hinschreiben und danach sind alle Wiederholungen, Tonartwechsel, Dal Segnos, Codas, mit '!' und '?' erzeugte Versetzungszeichen farbig angestrichen. Wenn man die Befehle einzeln einfügen muss, wäre das ein großer Aufwand.
[/quote]
Bin grad unterwegs und hab nicht viel Zeit, aber: Für Tonartwechsel und ? geht das relativ einfach (weil die eigene Grobs haben, die man einfach ansprechen kann), bei Wiederholungen, Segno und Coda sowie Vorzeichen per ! müßte man irgendwie ne Fallunterscheidung machen (Wiederholungen sind BarLines, also nicht ganz einfach von anderen Taktstrichen zu unterscheiden, ähnlich Segno und Coda RehearsalMrks und ! Accidentals).
--- Zitat ---Was ist der Unterschied zwischen spanners und items?
Sind items Noten, Taktstriche, ...?
Sind spanners Crescendos, Legatos, ...?
--- Ende Zitat ---
Genau. Weitere spanners sind z. B. Oktavierungsklammern, Textspanner, Glissandi, Haltebögen …
harm6:
--- Zitat ---alle Wiederholungen, Tonartwechsel, Dal Segnos, Codas, mit '!' und '?' erzeugte Versetzungszeichen
--- Ende Zitat ---
Hm,
(1)
bei Wiederholungen müßte man dann alle einfachen BarLines vom färben ausschließen.
Aber was soll man unter "einfache BarLines" verstehen? Nur "|" oder auch "||". Was ist mit "!" oder ";" oder "S"?
(2)
Wie sind "Dal Segnos, Codas" angegeben?
Als TextScript, RehearsalMark oder noch anders?
Das zumindest müßte man beantwortet wissen und vorausschauend codiert haben, um generelle overrides zu ermöglichen.
--- Zitat ---Bei einer Wiederholung wird bei 'dir 1' nur das Wiederholungszeichen am Zeilenanfang markiert, aber nicht in der Zeilenmitte.
--- Ende Zitat ---
In der Tat, denn so habe ich es kodiert.
Ich habe generelle overrides als wahrscheinlich zu aufwändig nicht in Betracht gezogen.
--- Zitat ---Was ist der Unterschied zwischen spanners und items?
--- Ende Zitat ---
Nun, programmiertechnisch sind grobs spanner wenn sie auf (ly:spanner? grob) #t returnieren, items entsprechend.
spanner haben bounds zwischen denen sie "gespannt" sind.
Du wirst meistens nicht fehl gehen wenn Du Grenzen eines spanners findest, z.B. Die Hairpin geht von dieser Note zu jener Note.
Im Unterschied z.B. zu einem markup mit angegebener line-width. Dises markup ist zwar irgendwo verankert, die Ausdehnung nach rechts ist aber durch die line-width begrenzt nicht durch ein anderes grob.
Es gibt aber auch Beispiele, die nicht ganz so einfach nachzuvollziehen sind, z.B ist die MultiMeasureRestNumber ein spanner. ;)
Gruß,
Harm
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln