[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: \label et barnnumber
From: |
Nicolas Sceaux |
Subject: |
Re: \label et barnnumber |
Date: |
Sun, 5 Jun 2011 21:36:45 +0200 |
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
> http://lists.gnu.org/archive/html/lilypond-user/2011-02/msg00219.html
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 }