Autor Thema: mehrere \marks auf einem Taktstrich  (Gelesen 4573 mal)

fugenkomponist

  • Member
mehrere \marks auf einem Taktstrich
« am: Samstag, 13. August 2011, 15:27 »
Hallo,

ich bin gerade dabei, die Klarinettenstimmen vom 4. Satz Mahler 1 fuer B-Klarinetten umzuschreiben (Original steht in C). Jetzt hab ich folgendes Problem: Ich habe mehrmals Ziffern (\mark \default), welche mit Fermaten ueberm Taktstrich zusammenfallen. Das alleine ist schon bloed genug, weil ja der \mark-Zaehler nicht weiterlaeuft, wenn ich \markup\column verwende und die Zahl von Hand eintrage. Kann man da was machen (Zaehler von Hand eins raufsetzen)?
Schoener waers jetzt allerdings auch noch, wenn Ziffern beim Zeilenumbruch am Anfang der neuen Zeile, Fermaten aber ueberm letzten Taktstrich stuenden (denn ueberm Violinschluessel haben die nichts zu suchen).

Kurz gesagt, haette ich gerne folgendes:
%Noten, jetzt kommt ein Taktstrich mit evtl. Zeilenumbruch
\once \override Score.RehearsalMark #'break-visibility = #begin-of-line-invisible
\mark \markup { \musicglyph #"scripts.ufermata" }
\mark \default
%weitere Noten
Kann man das irgendwie erreichen?

Edit: ich verwende Version 2.14.1, muss demnaechst mal updaten.
« Letzte Änderung: Samstag, 13. August 2011, 15:32 von fugenkomponist »

fugenkomponist

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #1 am: Samstag, 13. August 2011, 15:33 »
Zu meiner ersten Frage ist mir gerade folgendes eingefallen: einfach den Engraver zwischenzeitlich ausschalten, \mark \default irgendwo setzen. Das muesste doch den Zaehler inkrementieren, oder?
Edit: Ich hab die Loesung gefunden: \mark #14, um 14 zu drucken (statt 13). Die Sache waere also erledigt.
Fuer die Zeilenumbruchsache hab ich aber noch keinen Ansatz.
« Letzte Änderung: Samstag, 13. August 2011, 15:45 von fugenkomponist »

harm6

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #2 am: Sonntag, 14. August 2011, 13:41 »
Hallo,

es ist gerade aktuell auf OldNabble etwas wunderbares aufgetaucht. Neil Puttock hat einen neuen Engraver geschrieben der das Problem löst. Soweit ich weiß, ist allerdings mindestens 2.14.2 erforderlich:

\version "2.14.2"

% http://old.nabble.com/Nice-workaround-for-simultaneous-rehearsal-marks-%E2%80%93-thanks-Neil!-td32212763.html
% defined by Neil Puttock

#(define (multi-mark-engraver ctx)
   (let ((texts '())
         (final-texts '())
         (events '()))

     `((start-translation-timestep
        . ,(lambda (trans)
             (set! final-texts '())))

       (listeners
        (mark-event
         . ,(lambda (trans ev)
              (set! events (cons ev events)))))

       (acknowledgers
        (break-alignment-interface
         . ,(lambda (trans grob source)
              (for-each (lambda (mark)
                          (set! (ly:grob-parent mark X) grob))
                        texts))))

       (process-music
        . ,(lambda (trans)
             (for-each
              (lambda (ev)
                (let* ((mark-grob
                        (ly:engraver-make-grob trans 'RehearsalMark ev))
                       (label (ly:event-property ev 'label))
                       (formatter (ly:context-property ctx 'markFormatter)))

                  (if (and (procedure? formatter)
                           (not (markup? label)))
                      (begin
                       (if (not (number? label))
                           (set! label
                                 (ly:context-property ctx 'rehearsalMark)))

                       (if (and (integer? label)
                                (exact? label))
                           (set! (ly:context-property ctx 'rehearsalMark)
                                 (1+ label)))

                       (if (number? label)
                           (set! label (apply formatter (list label ctx)))
                           (ly:warning "rehearsalMark must have integer value"))))

                  (if (markup? label)
                      (begin
                       (set! (ly:grob-property mark-grob 'text) label)
                       (let ((dir (ly:event-property ev 'direction)))
                         (and (ly:dir? dir)
                              (set! (ly:grob-property mark-grob 'direction)
                                    dir))))
                      (ly:warning "mark label must be a markup object"))

                  (set! texts (cons mark-grob texts))))
              (reverse events))))

       (stop-translation-timestep
        . ,(lambda (trans)
             (if (pair? texts)
                 (let ((staves (ly:context-property ctx 'stavesFound))
                       (priority-index 0))
                   (for-each (lambda (grob)
                               (let ((my-priority (ly:grob-property grob 'outside-staff-priority 1500)))
                                 (for-each (lambda (stave)

                                 (ly:pointer-group-interface::add-grob grob 'side-support-elements
                                               stave))
                                           staves)
                                 (set! (ly:grob-property grob 'outside-staff-priority) (+ my-priority priority-index))
                                 (set! priority-index (1+ priority-index))
                                 (set! final-texts (cons grob final-texts))))
                             (reverse texts))
                     (set! texts '())
                     (set! events '())))))

        (finalize
         . ,(lambda (trans)
              (and (pair? final-texts)
                   (for-each (lambda (grob)
                               (set! (ly:grob-property grob 'break-visibility)
                                     end-of-line-visible))
                             final-texts)))))))

\layout {
 \context {
   \Score
   \remove "Mark_engraver"
   \consists #multi-mark-engraver
   \consists "Tweak_engraver"
 }
}

markDown =
#(define-music-function (parser location text) (markup?)
   (make-music 'MarkEvent
               'direction DOWN
               'label text))

myMark =
#(define-music-function (parser location text) (markup?)
  (make-music 'MarkEvent
              'label text))
             
fermate = {
 \tweak #'break-visibility #begin-of-line-invisible
 \myMark \markup  { \musicglyph #"scripts.ufermata" }
}

\relative c' {
        \set Score.markFormatter = #format-mark-numbers

         a1 b c d e f g\fermate \break
         \mark #14  a b c d e f g
}

Gruß,
  Harm

fugenkomponist

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #3 am: Sonntag, 14. August 2011, 13:57 »
Danke, das schau ich mir mal an.
Werde sowieso auf 2.14.2 updaten, weil ich so lustige Fehlermeldungen wie
/usr/local/lilypond/usr/share/lilypond/current/ly/init.ly:73:62: error: syntax error, unexpected $end
   (ly:parser-error parser (_ "expected error, but none found"
                                                              ))))
bekomme und hoffe, dass das vielleicht besser wird. Falls nicht, werde ich natuerlich in meinem eigenen Coder erstmal noch auf die Suche gehen. init.ly enthaelt uebrigens auch in Version 2.14.1 noch ein \version "2.14.0". Nicht gut, oder?

harm6

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #4 am: Sonntag, 14. August 2011, 14:09 »
Hallo,

bei dieser Fehlermeldung hast Du bestimmt eine Klammer vergessen.
Was init.ly und die version angeht, weiß ich nicht so recht was es eigentlich bedeutet. Allerdings wird beim konvertieren nicht die aktuelle versions-nummer ins file gesetzt.

Gruß,
  Harm

fugenkomponist

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #5 am: Sonntag, 14. August 2011, 14:42 »
Hallo,

bei dieser Fehlermeldung hast Du bestimmt eine Klammer vergessen.
Was init.ly und die version angeht, weiß ich nicht so recht was es eigentlich bedeutet. Allerdings wird beim konvertieren nicht die aktuelle versions-nummer ins file gesetzt.

Gruß,
  Harm
Nach laengerer Suche folgendes gefunden:
\markup{"\italic"molto cresc."} %Offensichtlich ein " zuviel, haette nie gedacht, dass es mir deshalb LilyPond sosehr zerhautIch haette gedacht, dass LilyPond sowas auffaellt und eine sinnvolle Fehlermeldung rauskommt.

harm6

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #6 am: Sonntag, 14. August 2011, 15:12 »
Ein solcher Fehler führt bei jedit zu einer farblich geänderten Darstellung und ist damit im wahrsten Sinne des Wortes offensichtlich. Insofern solltest Du darüber nachdenken einen anderen Texteditor zu benutzen.

Gruß,
  Harm

fugenkomponist

  • Member
Re: mehrere \marks auf einem Taktstrich
« Antwort #7 am: Sonntag, 14. August 2011, 18:39 »
Ein solcher Fehler führt bei jedit zu einer farblich geänderten Darstellung und ist damit im wahrsten Sinne des Wortes offensichtlich. Insofern solltest Du darüber nachdenken einen anderen Texteditor zu benutzen.

Gruß,
  Harm
Werde ich machen. Ich muss mal schauen, ob ich vim dazu bringen kann, LilyPond-Syntax zu erkennen.
Deine Loesung funktioniert uebrigens wunderbar, danke!