\label et barnnumber

Bonsoir,

Ayant vu que tu t'étais intéressé de près aux foot/end notes, je m'adresse directement à toi.

La commande \label #'ici permet de référencer un numéro de page.
Comment faire pour, par la même occasion, référencer le numéro de mesure pour ensuite faire

\markup { Correction A (page \page-ref #'correctA "0" "?"
          mesure \bar-ref #'correctA "0" "?")}

J'ai bien tenté de faire un cocktail détonnant à partir de la fonction telle qu'elle apparaît dans ly/music-functions-init.ly et le message
http://lists.gnu.org/archive/html/lilypond-user/2011-02/msg00219.html

mais je ne suis pas assez compétent, ni peut être assez tordu...

Cordialement,
Jean-Charles

Voici une solution possible :

#(define global-bar-label-table '())

barLabel =
#(define-music-function (parser location label) (symbol?)
   (make-music
    'SequentialMusic
    'elements (list (make-music
                     'EventChord
                     'page-marker #t
                     'page-label label
                     'elements (list (make-music 'LabelEvent
                                                 'page-label label)))
                    (make-music
                     'ApplyContext
                     'origin location
                     'procedure (lambda (c)
                                  (let ((cbn (ly:context-property c 'currentBarNumber)))
                                    (set! global-bar-label-table
                                          (acons label
                                                 (if (not (number? cbn)) 0 cbn)
                                                 global-bar-label-table))))))))

#(define-markup-command (generic-label-reference layout props label table-proc next)
     (symbol? procedure? markup?)
   #:properties ((gauge-markup "000"))
  (let* ((gauge-stencil (interpret-markup layout props gauge-markup))
         (x-ext (ly:stencil-extent gauge-stencil X))
         (y-ext (ly:stencil-extent gauge-stencil Y)))
    (ly:make-stencil
     `(delay-stencil-evaluation
       ,(delay (ly:stencil-expr
                (let* ((table (table-proc))
                       (label-ref (and (list? table) (assoc label table)))
                       (ref-number (and label-ref (cdr label-ref)))
                       (ref-markup (markup #:concat ((format "~a" (or ref-number "?"))
                                                     next)))
                       (ref-stencil (interpret-markup layout props ref-markup))
                       (gap (- (interval-length x-ext)
                               (interval-length (ly:stencil-extent ref-stencil X)))))
                  (interpret-markup layout props
                                    (markup #:concat (ref-markup #:hspace gap)))))))
     x-ext
     y-ext)))

#(define-markup-command (full-page-bar-ref layout props label) (symbol?)
   (interpret-markup layout props
                     (markup "(page"
                             #:generic-label-reference
                             label
                             (lambda ()
                               (ly:output-def-lookup layout 'label-page-table))
                             #:line (" mesure " #:generic-label-reference
                                                label
                                                (lambda ()
                                                  global-bar-label-table) ")"))))

{ \barLabel #'c c'1
  \barLabel #'d d'\pageBreak
  \barLabel #'e e'
  \barLabel #'f f' }

\markup { c \full-page-bar-ref #'c }
\markup { d \full-page-bar-ref #'d }
\markup { e \full-page-bar-ref #'e }
\markup { f \full-page-bar-ref #'f }

···

Le 5 juin 2011 à 20:08, Jean-Charles Malahieude a écrit :

La commande \label #'ici permet de référencer un numéro de page.
Comment faire pour, par la même occasion, référencer le numéro de mesure pour ensuite faire

\markup { Correction A (page \page-ref #'correctA "0" "?"
        mesure \bar-ref #'correctA "0" "?")}

J'ai bien tenté de faire un cocktail détonnant à partir de la fonction telle qu'elle apparaît dans ly/music-functions-init.ly et le message
Re: Scheme : compiling text and score sequences

Bonsoir !

J'avais à l'époque fait deux commandes tout à fait similaires à ce qu'a posté Nicolas Sceaux.
Maintenant je ferais ça plus profondément en changeant le label-event de sorte que \bar-ref soit facile à ajouter. De même, on pourra créer aisément d'autres commandes du genre \beat-ref.
Ainsi on évite de devoir mettre des \barLabel en plus des \label.
Ce n'est pas ma priorité tout de suite, mais je vais m'y atteler d'ici peu.
Je vous tiendrai au courant.

Bertrand