Probebuchstaben im nächsten Satz fortsetzen - nicht im nächsten Buch [GELÖST]

Begonnen von ingmar, Montag, 18. Juni 2018, 14:53

« vorheriges - nächstes »

ingmar

Bei Werken mit vielen kurzen Sätzen ist es durchaus üblich, die Probebuchstaben durchlaufend zu vergeben, also nicht in jedem Satz wieder neu bei "A" anzufangen. LilyPond sieht das leider nicht vor - aber Kollege Harm hatte dankenswerterweise im alten Forum eine Lösung dafür angeboten.

Wie sich nun zeigt, bedenkt diese Lösung nicht den Fall mehrerer \books in einem einzigen File – in diesem Fall macht das Weiterführen der Probebuchstaben typischerweise keinen Sinn. Beispiel: Ich will die dreißig Einzelstimmen einer Orchesterpartitur nicht aus dreißig verschiedenen Files erzeugen, sondern aus einem einzigen und schreibe daher dreißig "Books" in mein File. Da wäre es natürlich wenig zielführend, wenn die Violine I die Probebuchstaben A bis K verwendet und die Violine II dann L bis V.

Minimalbeispiel:
\version "2.19.64"

#(define last-seen 1)

tst-engraver =
#(lambda (context)
  (make-engraver
    (listeners
      ((mark-event engraver event)
       (if (null? (ly:event-property event 'label))
           (begin
             (ly:event-set-property! event 'label last-seen)
             (set! last-seen (1+ last-seen))))))))

MusikEins = \repeat unfold 30 \relative { c'4 d e f g e2 }
MarksEins =\repeat unfold 12 { s1 *4 \mark \default }

MusikZwei = \repeat unfold 30 \relative { c''2 b4 a g2 f4 }
MarksZwei =\repeat unfold 12 { s1 *4 \mark \default }

MusikDrei =\repeat unfold 30 \relative { g'4 a2 g4 f2 e8 f }
MarksDrei =\repeat unfold 12 { s1 *4 \mark \default }

\book {
   \score {
\header { piece = "Erster Satz" }
\new Staff <<
\MusikEins
\MarksEins
>>
\layout {
\context { \Score \consists \tst-engraver }
}
}

\score {
\header { piece = "Zweiter Satz" }
\new Staff <<
\MusikZwei
\MarksZwei
>>
\layout {
\context { \Score \consists \tst-engraver }
}
}}

\book {
   \score {
\header { piece = "Ganz anderes Buch, ganz anderes Stück" }
\new Staff <<
\MusikDrei
\MarksDrei
>>
\layout {
\context { \Score \consists \tst-engraver }
}
}}


(Hinweis für den, der es in Frescobaldi ausprobieren will: Du solltest das *.ly-File bewusst sichern, bevor du es aus dem Editorfenster kompilierst, um anschließend das zweite erzeugte File im selben Ordner finden zu können.)

Man mag die Anforderung für etwas esoterisch halten, bei mir ist sie aber genau so als Problem aufgetaucht.


Gruß, danke!
--ingmar

harm6

Hallo Ingmar,

zumindest im gegebenen Beispiel funktioniert ein reset von `last-seen` nach jedem \book:

#(define last-seen 1)

\book { ... }

#(set! last-seen 1)

\book { ... }


HTH,
  Harm

ingmar

Ja, das funktioniert, und andere Probleme sind bisher auch nicht aufgetreten.

Semantisch unschön ist nach wie vor, dass nicht nur \mark \default zum Weiterzählen führt, sondern auch \mark #10, die Angabe eines Wunschbuchstabens also nicht beachtet wird. Für mich ist das aber erstmal kein Problem.

Gruß, danke,
--ingmar

EDIT: Typo