2013-08-25 3 views
2

Я работаю со счетом в Lilypond, который имеет много повторений, где в основном каждый бар должен повторяться определенное количество раз. Я хотел бы, чтобы иметь возможность написать над каждым баром, сколько раз следует повторить, похожий на счет ниже (который не был создан в заверешене):Lilypond: как добавить количество повторений выше бара

enter image description here

Было бы здорово, чтобы быть в состоянии иметь некоторые скобки над планкой, а также централизовать «3x», как в приведенном выше примере. До сих пор единственным (временным) решением, которое я смог придумать в Lilypond, было добавить повторные бары, а затем просто написать «3x» над первой нотой каждого бара (так как я не мог его централизовать на панели) , Это выглядит не очень хорошо, но выполняет свою работу. Это временное решение выглядит следующим образом:

enter image description here

Любые предложения о том, как сделать этот пример выглядит более похож на первый трактир заверешены будет очень приветствуется!

+1

Я не знаю ответа на это, но точно так же, как комментарий к любым модераторам, которые не знают Lilypond но кто может подумать об этом Q как offtopic для StackOverflow: Lilypond - это нотное программное обеспечение, файловым форматом которого является по существу набор подпрограмм Scheme, поэтому q об использовании, как правило, относится к теме. –

+1

Спасибо за ваш комментарий, Майкл. На самом деле, в LackPond здесь очень мало, и это одна из причин, по которой мне нравится публиковать вопросы (а также ответы, если я их обнаруживаю). Это может быть хорошим дополнением к списку рассылки lilypond-пользователей, что, безусловно, является лучшим местом для вопросов, связанных с LilyPond. –

+2

@ Майкл Я использую LilyPond и думаю, что это фантастика, но я все равно буду задавать вопросы об использовании вне темы * для Stack Overflow *. Тот факт, что файлы данных ближе к программированию, чем большинство программ, поражает меня как технику; вы можете сделать аналогичный аргумент для любого программного обеспечения, которое использует PostScript: P Этот вопрос, похоже, подходит для [music.se].** Редактирование **: есть даже [мета-вопрос] (http://meta.stackexchange.com/questions/168297/on-which-site-are-lilypond-squestions-on-topic) по этому вопросу. – shambulator

ответ

4

Это временное решение этой проблемы:

\version "2.17.24" 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% COPY ALL THIS BELOW %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
#(define (repeat-stencil grob) 
    (let* ((orig (ly:grob-original grob)) 
      (siblings (ly:spanner-broken-into orig)) ; have we been split? 
      (bounds (ly:grob-array->list (ly:grob-object grob 'columns))) 
      (refp (ly:grob-system grob)) 
      ;; we use the first and/or last NonMusicalPaperColumn grob(s) of 
      ;; a system in the event that a MeasureCounter spanner is broken 
      (all-cols (ly:grob-array->list (ly:grob-object refp 'columns))) 
      (all-cols 
      (filter 
      (lambda (col) (eq? #t (ly:grob-property col 'non-musical))) 
      all-cols)) 
      (left-bound 
      (if (or (null? siblings) ; spanner is unbroken 
        (eq? grob (car siblings))) ; or the first piece 
       (car bounds) 
       (car all-cols))) 
      (right-bound 
      (if (or (null? siblings) 
        (eq? grob (car (reverse siblings)))) 
       (car (reverse bounds)) 
       (car (reverse all-cols)))) 
      (elts-L (ly:grob-array->list (ly:grob-object left-bound 'elements))) 
      (elts-R (ly:grob-array->list (ly:grob-object right-bound 'elements))) 
      (break-alignment-L 
      (filter 
      (lambda (elt) (grob::has-interface elt 'break-alignment-interface)) 
      elts-L)) 
      (break-alignment-R 
      (filter 
      (lambda (elt) (grob::has-interface elt 'break-alignment-interface)) 
      elts-R)) 
      (break-alignment-L-ext (ly:grob-extent (car break-alignment-L) refp X)) 
      (break-alignment-R-ext (ly:grob-extent (car break-alignment-R) refp X)) 
      (num 
      (make-concat-markup 
       (list 
       (number->string (ly:grob-property grob 'count-from)) 
       "x"))) 
      (num 
      (if (or (null? siblings) 
        (eq? grob (car siblings))) 
       num 
       (make-parenthesize-markup num))) 
      (num (grob-interpret-markup grob num)) 
      (num-stil-ext-X (ly:stencil-extent num X)) 
      (num-stil-ext-Y (ly:stencil-extent num Y)) 
      (num (ly:stencil-aligned-to num X (ly:grob-property grob 'self-alignment-X))) 
      (num 
      (ly:stencil-translate-axis 
      num 
      (+ (interval-length break-alignment-L-ext) 
       (* 0.5 
        (- (car break-alignment-R-ext) 
        (cdr break-alignment-L-ext)))) 
      X)) 
      (bracket-L 
      (markup 
      #:override '(filled . #f) 
       #:path 
       0.1 ; line-thickness 
       `((moveto 0.5 ,(* 0.5 (interval-length num-stil-ext-Y))) 
        (lineto ,(* 0.5 
           (- (car break-alignment-R-ext) 
           (cdr break-alignment-L-ext) 
           (interval-length num-stil-ext-X))) 
          ,(* 0.5 (interval-length num-stil-ext-Y))) 
        (closepath) 
        (rlineto 0.0 -1.0)))) 
      (bracket-R 
      (markup 
      #:override '(filled . #f) 
       #:path 
       0.1 ; line-thickness 
       `((moveto ,(* 0.5 
           (- (car break-alignment-R-ext) 
           (cdr break-alignment-L-ext) 
           (interval-length num-stil-ext-X))) 
          ,(* 0.5 (interval-length num-stil-ext-Y))) 
        (lineto 0.5 
          ,(* 0.5 (interval-length num-stil-ext-Y))) 
        (closepath) 
        (rlineto 0.0 -1.0)))) 
      (bracket-L (grob-interpret-markup grob bracket-L)) 
      (bracket-R (grob-interpret-markup grob bracket-R)) 
      (num (ly:stencil-combine-at-edge num X LEFT bracket-L 0.4)) 
      (num (ly:stencil-combine-at-edge num X RIGHT bracket-R 0.4))) 
    num)) 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...UNTIL HERE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

A = { 
%%%%%%%%% COPY THESE NEXT FOUR LINES AND PUT THEM IN YOUR STAFF %%%%%%%%% 
    \override Staff.MeasureCounter.font-encoding = #'latin1 
    \override Staff.MeasureCounter.font-size = 0 
    \override Staff.MeasureCounter.stencil = #repeat-stencil 
    \override Staff.MeasureCounter.outside-staff-horizontal-padding = #0 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 

    \once \override Staff.MeasureCounter.count-from = 3 % this number 3 is going to be shown above the bar as 3x, together with a bracket 
    \startMeasureCount % to activate it, use the \startMeasureCount 
    \repeat volta 3 { c''4\pp e'' aes'2 } 
    \stopMeasureCount % immediately after, use \stopMeasureCount 

    \once \override Staff.MeasureCounter.count-from = 7 
    \startMeasureCount 
    \repeat volta 7 { cis''2\mp ees' } 
    \stopMeasureCount 

} 

\score { 
    \new Staff \A 
    \layout { 
    \context { 
     \Staff 
     \consists #Measure_counter_engraver % Add this line to the LAYOUT STAFF CONTEXT 
    } 
    } 
} 

Этот код выше, дает следующий результат:

enter image description here

Обратите внимание, что:

1) Это решение не работать, если полоса разбита пополам по нескольким системам

2) Он работает ТОЛЬКО для повторных повторений баров.


Это решение не было создано мною, но послал мне Дэвид Nalesnik, из списка рассылки заверешен пользователя. Я просто хотел бы поделиться им здесь, если кому-то это понадобится.

4

У меня была аналогичная проблема, но я предпочитал стиль на вашем втором примере с 3-кратным над планкой. Решение, которое я нашел, было:

f e d c | 
\mark \markup {"3x"}\repeat volta 3 {c d e f} 
f e d c | 

генерации

http://i.imgur.com/pO4Aq9I.png

Может быть кто-то еще имеет применение.