[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How to enlarge the size of accidentals in a figured bass ?
From: |
Richard Shann |
Subject: |
Re: How to enlarge the size of accidentals in a figured bass ? |
Date: |
Tue, 18 Apr 2017 20:17:22 +0100 |
On Tue, 2017-04-18 at 10:04 -0500, David Nalesnik wrote:
> On Tue, Apr 18, 2017 at 9:25 AM, Richard Shann <address@hidden> wrote:
> > On Tue, 2017-04-18 at 14:47 +0100, Richard Shann wrote:
> >> ;; 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)))
> >
> > This part of the code is commented out like this in
> > translation-functions.scm, but I tried it out, and it improves the
> > centering over whole-notes but makes it worse over other notes.
> >
> > I see that (ly:event-property event 'duration) gives the duration of
> > the note that the bass figure is on as:
> >
> > #<Duration 1 >
> >
> > for a whole note.
> >
> > so if I could test that I could use that code for this case (and the 1.
> > case). But here my understanding of Guile's display syntax runs out ...
> > what sort of a type is ly:event-property returning, and how do I test
> > for particular values?
> >
>
>
> It's a Duration object.
Hmm, that's the LilyPond type, but I'm still curious as to what Scheme
type it is that displays using #< ...>
I've been combing the Guile manual and thought for a moment it was a
vector, but no, no that.
>
> Why not:
>
> (if (and (markup? fig-markup)
> (eqv? 0 (ly:duration-log (ly:event-property event 'duration))))
> (set!
> fig-markup (markup #:translate (cons 1.0 0)
> #:center-align fig-markup)))
That's perfect - it even works with Breve!
>
> BTW, your snippet above won't compile because of the following:
>
> (plus-markup (if (eq? #t (ly:event-property event 'augmented))
> (markup #:number \"+\")
> #f))
>
> Why are you trying to escape the quotation marks here?
yes, sorry, I just cut and pasted this from a Scheme script, not
noticing that there were embedded quotation marks in it. (That is, the
whole thing had surrounding quotes and is passed to (eval-string ...)
below is the complete code, including your contribution, pasted from the
LilyPond output of Denemo so as to avoid any quoting problems.
8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><
#(define-public (format-bass-figures 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
#:general-align Y DOWN #:fontsize
(if (not (= alt DOUBLE-SHARP))
;-2 2 ;; is the default
(if (not fig-markup) 0 -2) 4 ;; changed
)
(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)))
(if (and (eqv? 0 (ly:duration-log (ly:event-property event 'duration)))
(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 #:raise (if (= alt FLAT) 0.1 -0.1)
alt-markup))) ;changed
(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)))
\layout {
\context {
\Score
figuredBassFormatter = #format-bass-figures
}
8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><8><
I suspect that this code would be welcomed by most users as the default
output for LilyPond.
>
> Hope this helps--
It certainly does - to celebrate I attach a PDF of a sonata which has
these tweaks - the fourth bar of movement 4 illustrates the nicely
placed sharp centered on the whole note in the bass.
Thank you.
Richard
Sonata XVI-Default Score Layout.pdf
Description: Adobe PDF document