Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Montag, 18. Juni 2018, 14:53

Titel: Probebuchstaben im nächsten Satz fortsetzen - nicht im nächsten Buch [GELÖST]
Beitrag von: ingmar am Montag, 18. Juni 2018, 14:53
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 (https://archiv.lilypondforum.de/index.php/topic,2358.0.html) 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
Titel: Antw:Probebuchstaben im nächsten Satz fortsetzen - aber nicht im nächsten Buch.
Beitrag von: harm6 am Dienstag, 19. Juni 2018, 00:14
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
Titel: re: Probebuchstaben im nächsten Satz fortsetzen - aber nicht im nächsten Buch.
Beitrag von: ingmar am Freitag, 20. Juli 2018, 08:28
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