|
From: | Jean Abou Samra |
Subject: | Re: Bonjour, Je suis nouveau et je m'interesse à Lilypond |
Date: | Thu, 6 May 2021 14:14:01 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1 |
Le 06/05/2021 à 10:14, Imperatrice Sissi a écrit :
etc... Pur réflexe de jazzeux. Mais je suis d'accord, pour que ça tourne rond faut que ce soit carré !Je vais donc répartir chaque système (nombre de mesures pas ligne) comme ça :
en matière de répartitions des mesures par système il y a globalement 2,5 solutions ;
le \layout qui va bien :
- soit tu laisses Lilypond se démerder toute seule (ce que te conseilleront les classicos)
- soit tu lui dis que c'est toi le patron dans un bloc \layout (voir ci-dessous)
- la demi solution c'est de glisser des \break ou des \pageBreak à des endroits stratégiques mais ça produit souvent des résultats aléatoires. Ça peut se corriger par des \noBreak ou des \noPageBreak mais ça devient vite rébarbatif.
\layout { \context { \Score \override NonMusicalPaperColumn #'line-break-permission = ##f \override NonMusicalPaperColumn #'page-break-permission = ##f } }
Dans tous les cas une bonne solution est de gérer les sauts de ligne et les sauts de page dans une voix séparée remplie de silences invisible. Pour plus d'info voir cette page
http://lilypond.org/doc/v2.22/Documentation/notation/explicit-staff-and-system-positioning
Pour ma part je suis même franchement plus extrémiste que toi. Sauf exception un phrase musicale de jazz fait 8 mesures (4 pour le blues). Du reste la forme AABA est souvent appelée Anatole 32. Le bloc de 4 marque alors la respiration naturelle du morceaux, comme la césure dans une poésie en alexandrins. Aussi bien dans l'interprétation du thème que pendant les chorus. Une ligne de portée doit donc correspondre à un bloc de 4 et s'il y a des reprises alternatives (ce que tu appelles des portes) elles doivent être sur la même ligne. Ce qui donnera par exemple :
| A | A | A | A |
1------- 2------
| A | A | A | A :|| A | A||
| B | B | B | B |
| B | B | B | B ||
| A | A | A | A |
| A | A | A | A ||
S'il faut faire un choix entre ce principe ou tout tenir sur une seule page je privilégie sans hésiter le bloc de 4
Tu sais, il y a aussi ce bout de code posté un
jour par David Nalesnik :
\version "2.22.0"
#(define (expand-repetitions arg)
;; 4*5 --> 4 4 4 4 4
;; (at any level of nesting)
(fold-right
(lambda (elem prev)
(cond ((pair? elem)
(cons (expand-repetitions elem) prev))
((symbol? elem)
(let* ((str (symbol->string elem))
(split (string-split str #\*))
(split (map (lambda (elem)
(string->number elem)) split)))
(append (make-list (cadr split) (car
split))
prev)))
(else (cons elem prev))))
'()
arg))
#(define ((bars-per-line-systems-per-page-engraver lst) ctx)
(let* ((bars-and-systems? (any pair? lst))
(working-copy (expand-repetitions lst))
(systems-per-page
(if bars-and-systems?
(car working-copy)
#f))
(last-measure-seen (ly:context-property ctx
'currentBarNumber))
(last-measure-seen (if (null? last-measure-seen)
0
(1- last-measure-seen)))
(total
(if systems-per-page
(+ (car systems-per-page) last-measure-seen 1)
(+ (car working-copy) last-measure-seen 1))))
`((stop-translation-timestep
. ,(lambda (trans)
(let ((internal-bar (ly:context-property ctx
'internalBarNumber))
(current-col (ly:context-property ctx
'currentCommandColumn)))
;; we are only interested in the first
NonMusicalPaperColumn of
;; each measure
(if (and (> internal-bar last-measure-seen)
(= (remainder internal-bar total) 0)
(pair? working-copy))
(begin
(set! (ly:grob-property current-col
'line-break-permission) 'force)
(set! last-measure-seen internal-bar)
(if bars-and-systems?
(begin
(if (null? (cdr systems-per-page))
(begin
(set! (ly:grob-property
current-col 'page-break-permission) 'force)
(if (pair? (cdr working-copy))
(begin
(set! working-copy (cdr
working-copy))
(set! systems-per-page (car
working-copy)))
(set! working-copy '())))
(set! systems-per-page (cdr
systems-per-page)))
(set! total (+ total (car
systems-per-page))))
(begin
(if (null? (cdr working-copy))
(set! working-copy lst)
(begin
(set! working-copy (cdr
working-copy))))
(set! total (+ total (car
working-copy)))))))))))))
\layout {
\context {
\Score
\consists #(bars-per-line-systems-per-page-engraver '((5*3)
(20 10 20 10)))
}
}
\repeat unfold 75 { c'1 }
Comme le montre la ligne du \consists, il
suffit de
spécifier la liste des pages, avec pour chaque page
la liste du nombre de mesure que doit comporter chaque
système (et une syntaxe pratique), et le graveur fait le reste.
LilyPond peut effectivement insérer un
retour supplémentaire
si elle juge que la musique est trop tassée, on peut
l'en empêcher avec le \override dont tu parles.
Par ailleurs, un outil plus général est
l'Edition engraver
de Jan-Peter Voigt, qui permet d'insérer des commandes
n'importe où dans une partition en donnant un numéro
de mesure :
https://github.com/openlilylib/edition-engraver
Cordialement,
Jean
[Prev in Thread] | Current Thread | [Next in Thread] |