Autor Thema: Generalbass: Wie Versetzungszeichen vergrößern?  (Gelesen 1621 mal)

parkertom

  • Member
Generalbass: Wie Versetzungszeichen vergrößern?
« am: Mittwoch, 20. März 2013, 06:55 »
Hallo,

die Versetzungszeichen (Accidentals) beim Generalbass (Figured Bass) sind nach meiner Meinung zu klein. Leider habe ich keine Möglichkeit gefunden, die Versetzungszeichen zu vergrößern.
Gerne nehme ich Hilfe an.
:-)

Be-3

  • Member
Re: Generalbass: Wie Versetzungszeichen vergrößern?
« Antwort #1 am: Mittwoch, 20. März 2013, 09:56 »
Hallo parkertom,

willkommen im Forum!
Leider stehen die Generalbaß-Versetzungszeichen in einem festen Größenverhältnis zu den Generalbaß-Ziffern. Es gab mal einen Ansatz, die Ziffern größer zu machen, der aber im Sande verlaufen ist. Ideal wäre die Möglichkeit, separat die Fontgröße von Ziffern und Versetzungszeichen einstellen zu können.

Doch alles Jammern hilft nichts.
Es bleibt wohl nichts anderes übrig, als die Scheme-Funktion, die für die Generalbaß-Formatierung zuständig ist, zu kopieren und abzuändern.
Ich habe also format-bass-figure unter dem Namen my-format-bass-figure kopiert und die entsprechenden Stellen abgeändert:

          (if (not (= alt DOUBLE-SHARP))               
   ;      -2 2)                                              ;deleted
           0 2)                                              ;inserted

Im Standard ist es also so: das Doppelkreuz wird um 2 Stufen vergrößert (!), alle anderen Versetzungszeichen um zwei Stufen verkleinert.
Nach der Änderung behalten die Versetzungszeichen dieselbe Größe, die auch die Ziffern haben (Vergrößerungsstufe 0), das Doppelkreuz wird weiterhin 2 Stufen größer.

Das alleine sieht aber noch nicht gut aus, weil die nun deutlich größeren Versetzungszeichen vertikal schlecht ausgerichtet sind (sie stehen teilweise viel zu hoch bzw. die Ziffern danach rutschen nach unten ab).
Um hier Abhilfe zu schaffen, muß das noch je nach Versetzungszeichen ausgeglichen werden:

               #:lower                                           ;inserted
                (cond                                            ;inserted
                 ((<= alt FLAT) 0.1)         ; any kind of flat  ;inserted
                 ((= alt NATURAL) 0.4)       ; natural           ;inserted
                 ((= alt SHARP) 0.4)         ; sharp             ;inserted
                 ((= alt DOUBLE-SHARP) -0.1) ; double-sharp      ;inserted
                 (else 0))                   ; anything else (?) ;inserted




Das kannst Du ja in einer eigenen Include-Datei ablegen, die überall eingebunden werden kann, wo sie benötigt wird.

Wichtig ist noch, daß diese "Aufbereitungsfunktion" auch tatsächlich benutzt wird: deshalb ist sie mit
  \set figuredBassFormatter = #my-format-bass-figure
zuzuweisen.


Vollständiges Coding mit Test-Beispiel:
\version "2.16.1"

%;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%;; Bass figures: copy of format-bass-figure

#(define-public (my-format-bass-figure figure event context)
  (let* ((fig (ly:event-property event 'figure))
(fig-markup (if (number? figure)

;; this is not very elegant, but center-aligning
;; all digits is problematic with other markups,
;; and shows problems in the (lack of) overshoot
;; of feta-alphabet glyphs.
((if (<= 10 figure)
      (lambda (y) (make-translate-scaled-markup
   (cons -0.7 0) y))
      identity)

  (cond
   ((eq? #t (ly:event-property event 'diminished))
    (markup #:slashed-digit figure))
   ((eq? #t (ly:event-property event 'augmented-slash))
    (markup #:backslashed-digit figure))
   (else (markup #:number (number->string figure 10)))))
#f))

(alt (ly:event-property event 'alteration))
(alt-markup
  (if (number? alt)
      (markup
               #:lower                                           ;inserted
                (cond                                            ;inserted
                 ((<= alt FLAT) 0.1)         ; any kind of flat  ;inserted
                 ((= alt NATURAL) 0.4)       ; natural           ;inserted
                 ((= alt SHARP) 0.4)         ; sharp             ;inserted
                 ((= alt DOUBLE-SHARP) -0.1) ; double-sharp      ;inserted
                 (else 0))                   ; anything else (?) ;inserted
       #:general-align Y DOWN  #:fontsize     
       (if (not (= alt DOUBLE-SHARP))               
;    -2 2)                     ;deleted
   0 2)                      ;inserted
       (alteration->text-accidental-markup alt))
      #f))

(plus-markup (if (eq? #t (ly:event-property event 'augmented))
  (markup #:number "+")
  #f))

(alt-dir (ly:context-property context 'figuredBassAlterationDirection))
(plus-dir (ly:context-property context 'figuredBassPlusDirection)))

    (if (and (not fig-markup) alt-markup)
(begin
  (set! fig-markup (markup #:left-align #:pad-around 0.3 alt-markup))
  (set! alt-markup #f)))


    ;; hmm, how to get figures centered between note, and
    ;; lone accidentals too?

    ;;    (if (markup? fig-markup)
    ;; (set!
    ;; fig-markup (markup #:translate (cons 1.0 0)
    ;;     #:center-align fig-markup)))

    (if alt-markup
(set! fig-markup
      (markup #:put-adjacent
      X (if (number? alt-dir)
    alt-dir
    LEFT)
      fig-markup
      #:pad-x 0.2 alt-markup)))

    (if plus-markup
(set! fig-markup
      (if fig-markup
  (markup #:put-adjacent
  X (if (number? plus-dir)
plus-dir
LEFT)
  fig-markup
  #:pad-x 0.2 plus-markup)
  plus-markup)))

    (if (markup? fig-markup)
(markup #:fontsize -2 fig-markup) 
empty-markup)))


%%% TEST-BEISPIEL

\figures {
  <6--> <6-> <6!> <6+> <6++>   
  s
  \set figuredBassFormatter = #my-format-bass-figure
  <6--> <6-> <6!> <6+> <6++>   
}

Viele Grüße
Torsten
« Letzte Änderung: Mittwoch, 20. März 2013, 09:59 von Be-3 »

parkertom

  • Member
Re: Generalbass: Wie Versetzungszeichen vergrößern?
« Antwort #2 am: Mittwoch, 20. März 2013, 10:34 »
Vielen Dank, das hilft mir weiter.
Das die "default"-Größe der Accidentals in keiner Weise der gängigen Praxis entspricht, wäre dies ein Bug in LilyPond. Wie siehst Du das?

Gruß
Thomas

Be-3

  • Member
Re: Generalbass: Wie Versetzungszeichen vergrößern?
« Antwort #3 am: Mittwoch, 20. März 2013, 13:28 »
Hallo Thomas,

Du bist nicht der einzige, dem die Versetzungszeichen zu klein sind. Andere (mich eingeschlossen) finden das auch und es gab da vor vier Jahren wie gesagt mal Issue 816, wo genau dieses Problem zur Sprache kam - wie jetzt der Status "Started" mit dem Patch-Label "abandoned" in Einklang zu bringen ist, habe ich auch nicht ganz verstanden.

@Eluze: Vielleicht kann uns ja Bug-Squad-Member Eluze hier erleuchten?

Reinhard Kainhofer hat da bereits an einem Patch gearbeitet. Da bekommen alle Versetzungszeichen ausnahmslos (auch das Doppelkreuz) die Font-Göße der Ziffern, die vertikale Ausrichtung ist allerdings dort nicht korrigiert, was ein wenig unschön aussähe.

Viele Grüße
Torsten

eluze

  • Member
Re: Generalbass: Wie Versetzungszeichen vergrößern?
« Antwort #4 am: Donnerstag, 21. März 2013, 23:23 »
Zitat
@Eluze: Vielleicht kann uns ja Bug-Squad-Member Eluze hier erleuchten?
da kann ich wirklich nicht viel mehr beitragen als die übersetzung:

to abandon = abbrechen, aufgeben, …

wie wär's mit einem enhancement request?

ich habe ein bisschen bedenken eine abgeänderte funktion einzubetten, die zwar alle versions-upgrades überlebt, aber in dem moment wo LP diese änderungen (oder andere) einbaut weiterhin besteht; man ist dann weiterhin selbst verantwortlich für diese funktion und kriegt andere verbesserungen nicht mit.

Torsten: kannst du deine lösung in der bug liste publizieren und zur weiterverwendung vorschlagen, resp. die noch offenen punkte zur diskussion stellen!?

alternativ könnte man einfach vorschlagen, issue 816 zu reaktivieren und zu pushen.

besten dank
Eluze