Autor Thema: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)  (Gelesen 2229 mal)

fugenkomponist

  • Member
Hallo allerseits,

ich schreibe gerade an einem Bläserquartett mit Klarinette in B und habe einen Tonart- und Taktartwechsel, der mir einfach nicht gefallen will:
\version "2.19.33"
\language "deutsch"

musik = {
  \key g \minor
  R1
  \bar "||"
  \key g \major
  \time 3/2
  R1.
}

\new StaffGroup <<
  \new Staff \musik
  \new Staff \musik
  \new Staff \transpose b c' \musik
  \new Staff { \clef bass \musik }
>>
Da ist so viel Leerraum zwischen Taktstrich und Vorzeichen bzw. Vorzeichen und Taktart, weil die Kreuze (KeySignature) untereinander gesetzt werden. Ich weiß nicht, ob irgendwelche Konventionen das so fordern (dann würd ich es vermutlich schon so lassen), aber könnte man nicht stattdessen alle Vorzeichen (also KeySignature und KeyCancellation als eine Gruppe betrachtet) untereinander setzen? Ich habe leider keine Ahnung, wie das funktionieren könnte, habe schon mit X-offset, X-extent und extra-offset rumprobiert, aber so richtig getan hat sich nichts.

Hat irgendjemand eine Idee?

harm6

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #1 am: Dienstag, 29. Dezember 2015, 16:12 »
Das ist https://sourceforge.net/p/testlilyissues/issues/448/

Aber Mats hat dort einen workaround gepostet.

Gruß,
  Harm

fugenkomponist

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #2 am: Dienstag, 29. Dezember 2015, 16:28 »
Das ist https://sourceforge.net/p/testlilyissues/issues/448/
Danke für den Hinweis, scheint ja ein alter Bug zu sein.
Zitat
Aber Mats hat dort einen workaround gepostet.
Zitat von: Mats
[…] in this particular case […]
Leider hilft der auch nur da … denn was er vorschlägt, ist KeyCancellation.X-extent auf 0 zu setzen. In meinem Fall müsste ich das in den drei anderen Instrumenten machen. Dadurch sind rutschen aber natürlich deren fisse in die Auflösezeichen.

Ich habe jetzt doch eine Lösung gefunden (mein Post war also doch etwas voreilig), die aber nicht schön ist:\version "2.19.33"
\language "deutsch"

musik = {
  \key g \minor
  R1
  \tag #'klari \override Staff.KeySignature.X-extent = #'(+inf.0 . 0)
  \tag #'klari \override Staff.KeySignature.X-offset = -2
  \bar "||"
  \key g \major
  \time 3/2
  R1.
  \tag #'klari \override Staff.KeyCancellation.X-extent = #'(0 . 0)
  \bar "||"
  \key g \minor
  \time 2/4
  R2
}

\new StaffGroup <<
  \new Staff \removeWithTag #'klari \musik
  \new Staff \removeWithTag #'klari \musik
  \new Staff \keepWithTag #'klari \transpose b c' \musik
  \new Staff \removeWithTag #'klari { \clef bass \musik }
>>
Hier muss halt der offset-Wert durch Probieren gefunden werden; zum Glück hab ich nur ne Handvoll Tonartwechsel.

Grundsätzlich frag ich mich aber, warum es überhaupt zwei Grobs KeyCancellation und KeySignature gibt; hat das irgendeinen tieferen Sinn, den ich übersehen habe?

fugenkomponist

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #3 am: Dienstag, 29. Dezember 2015, 20:52 »
Neues Problem: Am Zeilenumbruch geht das alles kaputt :'(

Ich hab schon probiert, Snippet 775 anzuwenden, aber nur mit mäßigem Erfolg:
\version "2.19.33"
\language "deutsch"

#(define (adjust-key-sig-at-line-end g)
  (if (and (ly:item? g)
   (or
    (equal? (ly:item-break-dir g) LEFT)
    (equal? (ly:item-break-dir g) CENTER)))
      (and
       (ly:grob-set-property! g 'color green)
       (ly:grob-set-property! g 'X-extent '(+inf.0 . 0))
       (ly:grob-set-property! g 'X-offset -2))))

musik = {
  \key g \minor
  R1
  \break
  \tag #'klari \once \override Staff.KeySignature.after-line-breaking = #adjust-key-sig-at-line-end
  \bar "||"
  \key g \major
  \time 3/2
  R1.
  \tag #'klari \once \override Staff.KeyCancellation.X-extent = #'(0 . 0)
  \bar "||"
  \key g \minor
  \time 4/4
  R1
  \noBreak
  \tag #'klari \once \override Staff.KeySignature.after-line-breaking = #adjust-key-sig-at-line-end
  \bar "||"
  \key g \major
  \time 3/2
  R1.
}

\new StaffGroup <<
  \new Staff \removeWithTag #'klari \musik
  \new Staff \removeWithTag #'klari \musik
  \new Staff \keepWithTag #'klari \transpose b c' \musik
  \new Staff \removeWithTag #'klari { \clef bass \musik }
>>
Warum funktioniert das mit der Farbe, aber nicht mit dem Spacing?

harm6

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #4 am: Dienstag, 29. Dezember 2015, 23:30 »
Snippet 775 war eines meiner ersten LSR-snippets, lang ists her ...

Zum Thema:
'after-line-breaking fügt den override für 'X-extent/'X-offset zu spät ein. Versuchs mit 'before-line-breaking.

Aber eigentlich meine ich es müßte anders besser gehen, vielleicht fällt mir noch was ein...

Möglicherweise ist auch dieser Thread eine Hilfe:
http://lilypond.1069038.n5.nabble.com/Key-signature-and-key-cancellation-need-to-be-aligned-td171109.html

Gruß,
  Harm

fugenkomponist

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #5 am: Mittwoch, 30. Dezember 2015, 11:21 »
Zum Thema:
'after-line-breaking fügt den override für 'X-extent/'X-offset zu spät ein. Versuchs mit 'before-line-breaking.
Danke! Mir ist immer noch nicht im Detail klar, wann in der Übersetzung was passiert, aber ich glaub, das kommt mit der Zeit ;)

Hier jedenfalls meine Lösung, die ich noch ein bisschen vereinfacht habe:
\version "2.19.33"
\language "deutsch"

#(define (adjust-key-sig offset g)
  (if (and (ly:item? g)
   (or
    (equal? (ly:item-break-dir g) LEFT)
    (equal? (ly:item-break-dir g) CENTER)))
      (and
       (ly:grob-set-property! g 'X-extent '(+inf.0 . 0))
       (ly:grob-set-property! g 'X-offset offset))))

adjustKeySig =
#(define-music-function (offset) (number?)
   #{
     \once \override Staff.KeySignature.before-line-breaking =
     #(lambda (g) (adjust-key-sig offset g))
   #})

musik = {
  \key g \minor
  R1
  \tag #'klari \adjustKeySig -2
  \bar "||"
  \key g \major
  \time 3/2
  R1.
  \bar "||"
  \break
  \tag #'rest \adjustKeySig -1.5
  \key f \minor
  \time 4/4
  R1
  \tag #'klari \adjustKeySig -1.7
  \bar "||"
  \key e \minor
  \time 3/2
  R1.
}

\new StaffGroup <<
  \new Staff \removeWithTag #'klari \musik
  \new Staff \removeWithTag #'klari \musik
  \new Staff \keepWithTag #'klari \transpose b c' \musik
  \new Staff \removeWithTag #'klari { \clef bass \musik }
>>
Zitat
Möglicherweise ist auch dieser Thread eine Hilfe:
http://lilypond.1069038.n5.nabble.com/Key-signature-and-key-cancellation-need-to-be-aligned-td171109.html
Ich schau ihn mir mal an, danke :)
« Letzte Änderung: Mittwoch, 30. Dezember 2015, 11:41 von fugenkomponist »

RobUr

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #6 am: Mittwoch, 30. Dezember 2015, 16:16 »
Und wenn man KeyCancellation vor den Taktstrich setzt?
\version "2.18.2"
\language "deutsch"

musik = {
\override Score.BreakAlignment.break-align-orders = #'#(
; end-of-line:
(left-edge cue-end-clef ambitus breathing-sign clef cue-clef key-cancellation staff-bar key-signature time-signature custos)
; middle-of-line:
(left-edge cue-end-clef ambitus breathing-sign clef cue-clef key-cancellation staff-bar key-signature time-signature custos)
; start-of-line:
(left-edge ambitus breathing-sign clef key-cancellation key-signature time-signature staff-bar cue-clef custos)
)
\key g \minor
R1
\bar "||"

\key g \major
\time 3/2
R1.
\break

\key f \minor
\time 4/4
R1

\key g \major
\time 3/2
R1.
}

\new StaffGroup <<
\new Staff \musik
\new Staff \musik
\new Staff \transpose b c' \musik
\new Staff { \clef bass \musik }
>>

Gruß, Robert

fugenkomponist

  • Member
Re: Ausrichtung von KeyCancellation und KeySignature (transponierende Instrumente)
« Antwort #7 am: Mittwoch, 30. Dezember 2015, 17:20 »
Naja, besser sieht das meiner Meinung nach nicht aus. Ich hab mich jetzt endgültig für meine zuletzt genannte Version entschieden, weil die mit relativ wenig Handarbeit das Ergebnis liefert, welches ich haben will (und welches ja anscheinend auch üblich/richtig ist). Der Thread, den Harm genannt hat, hat als einzige noch nicht genannte Lösung, die ungefähr das gleiche tut, eine weitere mit von-Hand-Werte-suchen ;)