@item
@ref{Working with source code}
-@item
-@ref{Issues}
-
@end itemize
Please dump info in an appropriate @@section within these manuals,
@item
@ref{Documentation work}
+@item
+@ref{Issues}
+
@item
@ref{Regression tests}
@itemize
@item
-Use two spaces for indentation in lilypond examples. (no
-tabs)
-
-@item
-All text strings should be prefaced with #. LilyPond does
-not strictly require this, but it is helpful to get users
-accustomed to this scheme construct. ie @code{\set
-Staff.instrumentName = #"cello"}
+Use two spaces for indentation in lilypond examples (no tabs).
@item
All engravers should have double-quotes around them:
\consists "Spans_arpeggio_engraver"
@end example
-Again, LilyPond does not strictly require this, but it is a useful
-standard to follow.
+LilyPond does not strictly require this, but it is a useful
+convention to follow.
+
+@item
+All context or layout object strings should be prefaced with @code{#}.
+Again, LilyPond does not strictly require this, but it is helpful
+to get users accustomed to this scheme construct. i.e. @code{\set
+Staff.instrumentName = #"cello"}
+
+@item
+Try to avoid using @code{#'} or @code{#`} within when describing
+context or layout properties outside of an @code{@@example} or @code{@@lilypond}, unless
+the description explicitly requires it.
+
+ie @qq{...setting the @code{transparent} property leaves the object where it
+is, but makes it invisible.}
@item
If possible, only write one bar per line.
@menu
* Introduction to issues::
+* Bug Squad setup::
* Bug Squad checklists::
* Issue classification::
* Adding issues to the tracker::
@ref{Meisters, Bug Meister}.
+@node Bug Squad setup
+@section Bug Squad setup
+
+We highly recommend that you configure your email to use effective
+sorting; this can reduce your workload @emph{immensely}. The
+email folders names were chosen specifically to make them work if
+you sort your folders alphabetically.
+
+@enumerate
+
+@item
+Skim through every section of this chapter, @ref{Issues}. Read in
+detail any sections called @qq{Bug Squad...}, or any page linked
+from @ref{Bug Squad checklists}.
+
+@item
+If you do not have one already, create a gmail account and send
+the email address to the @ref{Meisters, Bug Meister}.
+
+@item
+Configure your google code account:
+
+@enumerate
+
+@item
+Log in to:
+
+@example
+@uref{http://code.google.com}
+@end example
+
+@item
+Go to your @qq{Profile}, and select @qq{Settings}.
+
+@item
+Scroll down to @qq{Issue change notification}, and make sure that
+you have @emph{selected} @qq{If I starred the issue}.
+
+@end enumerate
+
+@item
+Configure your email client:
+
+@enumerate
+
+@item
+Any email sent with your gmail address in the @code{To:} or
+@code{CC:} fields should go to a @code{bug-answers} folder.
+
+@item
+Any other email either from, or CC'd to,
+
+@example
+lilypond@@googlecode.com
+@end example
+
+@noindent
+should go into a separate @code{bug-ignore} folder. Alternately,
+you may automatically delete these emails.
+
+You will @strong{not read} these emails as part of your Bug Squad
+duties. If you are curious, go ahead and read them later, but it
+does @strong{not} count as Bug Squad work.
+
+@item
+Any other email sent to (or CC'd to):
+
+@example
+bug-lilypond
+@end example
+
+@noindent
+should go into a separate @code{bug-current} folder.
+
+@end enumerate
+
+@end enumerate
+
+
@node Bug Squad checklists
@section Bug Squad checklists
-We highly recommend that you configure your email client to put
-messages from:
+When you do Bug Squad work, start at the top of this page and work
+your way down. Stop when you've done 15 minutes.
+
+Please use the email sorting described in @ref{Bug Squad setup}.
+This means that (as Bug Squad members) you will only ever respond
+to emails sent or CC'd to the @code{bug-lilypond} mailing list.
+
+
+@subsubheading Emails to you personally
+
+You are not expected to work on Bug Squad matters outside of your
+15 minutes, but sometimes a confused user will send a bug report
+(or an update to a report) to you personally. If that happens,
+please forward such emails to the @code{bug-lilypond} list so that
+the currently-active Bug Squad member(s) can handle the message.
+
+
+@subsubheading Daily schedule
@example
-@@googlecode.com
+Sunday: Valentin
+Monday: Dmytro
+Tuesday: James Bailey
+Wednesday: Ralph
+Thursday: Phil Holmes
+Friday: Urs Liska, Patrick
+Saturday: Kieren
@end example
-@noindent
-into a separate folder than other emails to @code{bug-lilypond}.
+
+@subsubheading Emails to @code{bug-answers}
+
+Some of these emails will be comments on issues that you added to
+the tracker.
+
+@itemize
+If they are asking for more information, give the additional
+information.
+
+@item
+If the email says that the issue was classified in some other
+manner, read the rationale given and take that into account for
+the next issue you add.
+
+@item
+Otherwise, move them to your @code{bug-ignore} folder.
+
+@end itemize
+
+Some of these emails will be discussions about Bug Squad work;
+read those.
-@subsubheading New emails to @code{bug-lilypond}
+@subsubheading Emails to @code{bug-current}
-Every new email to @code{bug-lilypond} should be handled within
-@strong{24 hours} in the first method which is applicable:
+Dealing with these emails is your main task. Your job is to get
+rid of these emails in the first method which is applicable:
@enumerate
+@item
+If the email has already been handled by a Bug Squad member (i.e.
+check to see who else has replied to it), delete it.
@item
-If the email is a question about how to use LilyPond, direct them
-politely to @code{lilypond-user}.
+If the email is a question about how to use LilyPond, reply with
+this reponse:
+
+@example
+For questions about how to use LilyPond, please read our
+documentation available from:
+ @uref{http://lilypond.org/website/manuals.html}
+or ask the lilypond-user mailing list.
+@end example
@item
If a bug report is not in the form of a Tiny example, direct the
-user to resubmit the report after reading @rweb{Tiny examples}.
+user to resubmit the report with this response:
+
+@example
+I'm sorry, but due to our limited resources for handling bugs, we
+can only accept reports in the form of Tiny examples. Please see
+step 2 in our bug reporting guidelines:
+ @uref{http://lilypond.org/website/bug-reports.html}
+@end example
+
@item
If anything is unclear, ask the user for more information.
@item
If the behavior is expected, the user should be told to read the
-documentation, or asked to clarify how he misread the docs and how
-the docs could be improved.
+documentation:
+
+@example
+I believe that this is the expected behaviour -- please read our
+documentation about this topic. If you think that it really is a
+mistake, please explain in more detail. If you think that the
+docs are unclear, please suggest an improvement as described by
+@qq{Simple tasks -- Documentation} on:
+ @uref{http://lilypond.org/website/help-us.html}
+@end example
@item
If the issue already exists in the tracker, send an email to that
-effect.
+effect:
+
+@example
+This issue has already been reported; you can follow the
+discussion and be notified about fixes here:
+@end example
+
+@noindent
+(copy+paste the google code issue URL)
@item
Accept the report as described in
it.}
+@ignore
+@c Try omitting this from Bug Squad duties
+
@subheading Updates / discussion about issues
We try to keep discussions about issues on the tracker, but
discussions between advanced users and/or developers.
@end itemize
+@end ignore
@subheading Regular maintenance
More information is available from in
@ref{Precompiled regression tests}.
+
@item
Issues to verify: try to reproduce the bug with the latest
version; if you cannot reproduce the bug, mark the item
@end itemize
+
+@ignore
+@c try omitting from daily tasks for now. -gp
+
Once every @strong{two weeks} or so:
@itemize
@end itemize
+
@subheading Irregular maintenance
@warning{These tasks are a lot of work; gathering more volunteers
@end itemize
+@end ignore
+
@node Issue classification
@section Issue classification
show up as a regression. This test changes each time it is run, and
serves to verify that the regression tests have, in fact, run.}
+Once @samp{make@tie{}test-baseline} and @samp{make@tie{}check} have been
+run, the files that differ between @samp{test-baseline} and @samp{check}
+can be repeatedly examined by doing:
+
+@example
+make test-redo
+@end example
+
+This updates the regression list at @file{out/test-results/index.html}.
+It does @emph{not} redo @file{test-output-distance.ly}.
+
+When all regressions have been resolved, the output list will be empty.
+
+Once all regressions have been resolved, a final check should be completed
+by running:
+
+@example
+make test-clean
+make check
+@end example
+
+This cleans the results of the previous @samp{make@tie{}check}, then does the
+automatic regression comparison again.
+
+
@node Memory and coverage tests
@section Memory and coverage tests
@end example
@item Check the regtest comparison in @file{uploads/webtest/} for
-any unintentional breakage.
-
-Note that this test uses the bounding boxes inside lilypond.
-Errors in ghostscript don't generate differences inside lilypond,
-so they are not registered in the regtest comparison.
+any unintentional breakage. More info in
+@ref{Precompiled regression tests}
@item If any work was done on GUB since the last release, upload
binaries to a temporary location, ask for feedback, and wait a day
-or two in case there's any major problems.
+or two in case there's any major problems. Or live dangerously
+and just add a sentence to the release notes. Or live even more
+dangerously, and don't tell anybody anything.
@end enumerate
@item Update @file{VERSION} in lilypond git and upload changes:
-@quotation
-@quotation
+@example
+vi VERSION
+@end example
+
+@itemize
+@item
VERSION = what you just did +0.0.1
+
+@item
DEVEL_VERSION = what you just did (i.e. is now online)
-STABLE_VERSION = what's online
-@end quotation
-@end quotation
+
+@item
+STABLE_VERSION = what's online (probably no change here)
+
+@end itemize
@example
-vi VERSION
git commit -m "Release: bump version." VERSION
git push origin
@end example
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: a042d99cd2251b2b9121e1b8ad30307c4ce28863
+ Translation of GIT committish: 22b6ca7247b6f0d596934d38aa2c75d5e45206eb
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c INCLUDES
-@c include learning/preface.itely
-@c include learning/introduction.itely
@include learning/tutorial.itely
@include learning/common-notation.itely
@include learning/fundamental.itely
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 20858c6c9809c521d03576443dc8fa125e6f583b
+ Translation of GIT committish: 22b6ca7247b6f0d596934d38aa2c75d5e45206eb
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@lilypondfile[quote]{pitches-headword.ly}
Cette section détaille la façon d'indiquer les hauteurs de notes, sous
-trois aspects : la saisie des hauteurs, la modification des hauteurs
-et les options de gravure.
+trois aspects@tie{}: la saisie des hauteurs, la modification des
+hauteurs et les options de gravure.
@menu
* Écriture des hauteurs de note::
@translationof Writing pitches
Cette section explique la manière d'indiquer les hauteurs de note. Deux
-modes permettent d'indiquer l'octave des notes : le mode absolu, et le
+modes permettent d'indiquer l'octave des notes@tie{}: le mode absolu, et le
mode relatif. Ce dernier est le plus pratique lors de la saisie d'un
fichier source au clavier de l'ordinateur.
@funindex '
@funindex ,
-L'octave peut être précisée sous forme d'une série d'apostrophes
-@code{'} ou d'une série de virgules @code{,}. Chaque @code{'} hausse la
-note d'une octave, chaque @code{,} baisse la note d'une octave.
+L'octave peut être précisée sous forme d'une série
+d'apostrophes@tie{}@code{'} ou d'une série de virgules@tie{}@code{,}.
+Chaque@tie{}@code{'} hausse la note d'une octave, chaque@tie{}@code{,}
+baisse la note d'une octave.
@lilypond[verbatim,quote,fragment]
\clef treble
@funindex \relative
@funindex relative
+@funindex \transpose
+@funindex transpose
-On spécifie les octaves en ajoutant @code{'} et @code{,} aux noms de
-hauteurs. En recopiant de la musique, on a vite fait de mettre une note
-à la mauvaise octave, et ce genre d'erreur est difficile à retrouver.
-Le mode d'écriture en octave relative prévient ces erreurs dans la
-mesure où elles deviennent beaucoup plus évidentes : une seule erreur
-décale le reste de la pièce à une mauvaise octave.
+On spécifie les octaves en ajoutant@tie{}@code{'} et@tie{}@code{,} aux
+noms de hauteurs. En recopiant de la musique, on a vite fait de mettre
+une note à la mauvaise octave, et ce genre d'erreur est difficile Ã
+retrouver. Le mode d'écriture en octave relative prévient ces erreurs
+dans la mesure où elles deviennent beaucoup plus évidentes@tie{}: une
+seule erreur décale le reste de la pièce à une mauvaise octave.
@example
En mode relatif, chaque note est considérée comme étant le plus proche
possible de celle qui la précède. L'octave des notes mentionnées dans
-@var{musicexpr} va être calculée de la manière suivante :
+@var{musicexpr} va être calculée de la manière suivante@tie{}:
@itemize
@item
quarte. Cet intervalle est déterminé sans tenir compte des altérations.
@item
-Un signe de changement d'octave @code{'} ou @code{,} peut être ajouté
-pour hausser ou baisser la note d'une octave par rapport à la hauteur
-calculée sans spécification.
+Un signe de changement d'octave@tie{}@code{'} ou@tie{}@code{,} peut être
+ajouté pour hausser ou baisser la note d'une octave par rapport à la
+hauteur calculée sans spécification.
@item
-Ces signes de changement d'octave peuvent être multipliés. Par exemple,
+Ces signes de changement d'octave peuvent être multipliés. Par exemple,
@code{''}@tie{}ou@tie{}@code{,,} ajouteront une octave supplémentaire.
@item
Lorsque l'on entre en mode @code{\relative}, une hauteur absolue de
départ peut être spécifiée, et agira dès lors comme si elle précédait la
-première note de @var{musicexpr}.
+première note de @var{musicexpr}. Nous vous recommandons de faire
+référence à un @code{c} (do).
@end itemize
}
@end lilypond
+@funindex \chordmode
+@funindex chordmode
+
@code{\relative} est sans effet sur un bloc @code{\chordmode}.
@lilypond[verbatim,quote]
@code{\relative} n'est pas permis au sein d'un bloc @code{\chordmode}.
+@cindex octave relative et transposition
+@cindex transposition et mode octave relative
+
+@funindex \transpose
+@funindex transpose
+
Pour utiliser le mode d'octave relative dans de la musique transposée,
une clause @code{\relative} additionnelle doit être placée au sein du
bloc @code{\transpose}.
@cindex accords et octave relative
@cindex octave relative et accords
+
Si l'expression précédente est un accord, c'est la première note de
l'accord qui détermine l'emplacement de la première note du prochain
-accord. A l'intérieur de l'accord, les notes sont placées relativement
+accord. À l'intérieur de l'accord, les notes sont placées relativement
à celle qui précède. Examinez avec attention l'exemple suivant, et tout
particulièrement le positionnement des do.
@c duplicated in Key signature and in Accidentals
@warning{Les nouveaux utilisateurs sont parfois déroutés par la gestion
des altérations et de l'armure. Pour LilyPond, une hauteur n'est que du
-matériau brut ; l'armure et la clef ne feront que déterminer comment ce
-matériau sera retranscrit. Un simple @code{c} signifie tout bonnement
-@w{@qq{ do naturel}} quels que soient l'armure et la clef en question.
-Pour plus d'information, reportez-vous au chapitre
-@rlearning{Altérations et armure}.}
+matériau brut@tie{}; l'armure et la clef ne feront que déterminer
+comment ce matériau sera retranscrit. Un simple@tie{}@code{c} signifie
+tout bonnement @w{@qq{do naturel}} quels que soient l'armure et la clef
+en question. Pour plus d'information, reportez-vous au chapitre
+ @rlearning{Altérations et armure}.}
@cindex noms de note, hollandais
@cindex noms de note, par défaut
@cindex bécarre
Dans la notation par défaut, un @notation{dièse} est formé en ajoutant
-@code{-is} après le nom de note, un @notation{bémol} en ajoutant
-@code{-es}. Les @notation{double-dièses} et @notation{double-bémols}
-sont obtenus en ajoutant @code{-isis} ou @code{-eses} au nom de note.
+@code{is} après le nom de note, un @notation{bémol} en ajoutant
+@code{es}. Les @notation{double-dièses} et @notation{double-bémols}
+sont obtenus en ajoutant @code{isis} ou @code{eses} au nom de note.
Ce sont les noms de note hollandais. Pour les autres langues, consultez
@ref{Noms de note dans d'autres langues}.
Un bécarre annule l'effet d'une altération, qu'elle soit accidentelle
ou à l'armure. Cependant, dans la syntaxe des noms de note, les
-bécarres ne s'écrivent pas avec un suffixe ; un simple nom de note
+bécarres ne s'écrivent pas avec un suffixe@tie{}; un simple nom de note
donnera une note bécarre.
@lilypond[verbatim,quote,relative=2]
@cindex demi-dièses
Les demi-bémols et demi-dièses s'écrivent en ajoutant respectivement
-@code{-eh} et @code{-ih}. Voici une série de dos altérés en hauteurs
-croissantes :
+@code{eh} et @code{ih}. Voici une série de dos altérés en hauteurs
+croissantes@tie{}:
@lilypond[verbatim,quote,relative=2]
ceseh1 ces ceh c cih cis cisih
Normalement, les altérations sont imprimées automatiquement, mais il se
peut que vous vouliez les imprimer manuellement. On peut forcer
-l'impression d'une altération , dite @qq{de précaution}, en ajoutant un
-point d'exclamation @code{!} après la hauteur de note. Une altération
-entre parenthèses peut être obtenue en ajoutant un point d'interrogation
-@code{?} après la hauteur de note. Ces signes peuvent aussi être
-utilisés pour imprimer des bécarres.
+l'impression d'une altération, dite @qq{de précaution}, en ajoutant un
+point d'exclamation@tie{}@code{!} après la hauteur de note. Une
+altération entre parenthèses peut être obtenue en ajoutant un point
+d'interrogation@tie{}@code{?} après la hauteur de note. Ces signes
+peuvent aussi être utilisés pour imprimer des bécarres.
@lilypond[verbatim,quote,relative=2]
cis cis cis! cis? c c c! c?
@lilypondfile[verbatim,lilyquote,texidoc, doctitle]
{preventing-extra-naturals-from-being-automatically-added.ly}
-@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
-{makam-example.ly}
-
@seealso
Glossaire musicologique :
@rinternals{AccidentalCautionary},
@rinternals{accidental-interface}.
-L'impression automatique des altérations peut être affinée de plusieurs
-manières. Pour plus d'information, voir
-@ref{Altérations accidentelles automatiques}.
-
@cindex accidentel, quart de ton
@cindex quart de ton
@warning{Dans la mesure où certains fichiers d'initialisation, comme
@w{@code{predefined-fretboards.ly}}, utilisent les conventions bataves,
-la commande @code{\include} concernant la langue que vous décirez
+la commande @code{@bs{}include} concernant la langue que vous désirez
utiliser doît intervenir après toutes les autres inclusions de fichier
d'initialisation de LilyPond.}
Les fichiers de langue disponibles ainsi que les noms de note utilisés
-sont les suivants :
+sont les suivants@tie{}:
@quotation
@multitable {@file{nederlands.ly}} {do re mi fa sol la sib si}
@end quotation
@noindent
-et les suffixes d'altération correspondants :
+et les suffixes d'altération correspondants@tie{}:
@quotation
@multitable {@file{nederlands.ly}} {-s/-sharp} {-ess/-es} {-ss/-x/-sharpsharp} {-essess/-eses}
Certaines musiques utilisent des microtonalités, pour lesquelles les
altérations sont des fractions de dièse ou bémol @qq{normaux}. Le
tableau suivant répertorie les noms de note en quart de ton, tels que
-définis dans plusieurs fichiers linguistiques. Les préfixes @emph{semi-}
+définis dans plusieurs fichiers linguistiques. Les préfixes @emph{semi-}
et @emph{sesqui-} correspondent au @emph{demi-} et @emph{trois demis}.
À noter qu'aucune définition n'existe à ce jour pour le norvégien, le
suédois, le catalan et l'espagnol.
Les tests d'octave rendent la correction d'erreurs d'octave plus facile
-dans le mode d'octave @code{relative} -- un @code{,} ou un @code{'}
-oublié, ça n'arrive pas qu'aux autres ! : une note peut être suivie de
-@w{@code{=}@var{apostrophes/virgules}} pour indiquer à quelle octave
-absolue elle devrait être. Dans l'exemple suivant, le @code{d} générera
-un avertissement, puisqu'on attend un @code{d''} mais qu'on obtient un
-@code{d'} -- il n'y a qu'une tierce entre @code{b'} et @code{d''}. Sur
-la partition, l'octave sera corrigée pour donner un @code{d''} et la
-prochaine note sera calculée en fonction de @code{d''} et non de
-@code{d'}.
+dans le mode d'octave @code{relative} -- un@tie{}@code{,} ou
+un@tie{}@code{'} oublié, ça n'arrive pas qu'aux autres@tie{}!
+
+Une note peut être suivie de @w{@code{=}@var{apostrophes/virgules}}
+pour indiquer à quelle octave absolue elle devrait être. Dans l'exemple
+suivant, le @code{d} générera un avertissement, puisqu'on attend un
+@code{d''} mais qu'on obtient un @code{d'} -- il n'y a qu'une tierce
+entre @code{b'} et @code{d''}. Sur la partition, l'octave sera corrigée
+pour donner un @code{d''} et la prochaine note sera calculée en fonction
+de @code{d''} et non de @code{d'}.
@lilypond[verbatim,quote]
\relative c'' {
@end lilypond
Il existe aussi une vérification d'octave qui ne produit pas de musique
-imprimée, ayant pour syntaxe @w{@code{\octaveCheck}
-@var{hauteur_référence}} -- @var{hauteur_référence} étant spécifiée en
-mode absolu. Cette commande vérifie que l'intervalle entre la note qui
-précède et @var{hauteur_référence} est inférieure à la quinte comme il
-se doît en mode relatif. Dans le cas contraire, un message sera émis et
-la note précédente ne sera pas modifiée. Les notes suivantes seront,
-par contre, positionnées relativement à @var{hauteur_référence}.
+imprimée, ayant pour syntaxe
+@code{\octaveCheck}@tie{}@var{hauteur_référence} --
+@var{hauteur_référence} étant spécifiée en mode absolu. Cette commande
+vérifie que l'intervalle entre la note qui précède et
+@var{hauteur_référence} est inférieure à la quinte comme il se doît en
+mode relatif. Dans le cas contraire, un message sera émis et la note
+précédente ne sera pas modifiée. Les notes suivantes seront, par
+contre, positionnées relativement à @var{hauteur_référence}.
@lilypond[verbatim,quote]
\relative c'' {
@funindex transpose
Une expression musicale peut être transposée avec @code{\transpose}.
-Voici la syntaxe :
+Voici la syntaxe@tie{}:
@example
\transpose @var{note_de_départ} @var{note_d_arrivée} @var{musicexpr}
@end example
@noindent
-Cela signifie que @var{musicexpr} est transposé d'un intervalle entre
-les notes @var{note_de_départ} et @var{note_d_arrivée} : toute note
-dont la hauteur était @code{note_de_départ} est changée en
-@code{note_d_arrivée} et les autres note seront changées selon le même
-intervalle.
+Cela signifie que @var{musicexpr} est transposé de l'intervalle séparant
+@var{note_de_départ} et @var{note_d_arrivée}@tie{}: toute note dont la
+hauteur était @code{note_de_départ} est changée en @code{note_d_arrivée}
+et les autres notes seront changées selon le même intervalle.
@warning{La musique contenue dans un bloc @code{@bs{}transpose} est en
octaves absolus, sauf à inclure dans ce même bloc une clause
que les notes soient effectivement transposées, l'armure ne sera
imprimée que dans la mesure où elle est explicitement mentionnée.
-@code{\transpose} fait la distinction entre les notes enharmoniques :
+@code{\transpose} fait la distinction entre les notes enharmoniques@tie{}:
@w{@code{\transpose c cis}} et @w{@code{\transpose c des}} transposeront
la pièce un demi-ton plus haut. Mais la première version écrira des
dièses et la deuxième des bémols.
@end example
@noindent
-Pour imprimer cette musique en si bémol à nouveau -- et de ce fait
-produire une partie de trompette, au lieu d'un conducteur en notes
-réelles, on utilisera un deuxième @code{transpose}
+Pour imprimer cette musique en fa -- et de ce fait produire une partie
+de cor au lieu d'un conducteur en notes réelles -- on utilisera un
+deuxième @code{transpose}@tie{}:
@example
musiqueEnSiBemol = @{ e4 @dots{} @}
La clé indique quelles lignes de la portée correspondent à quelles
hauteurs. Elle peut changer au fil du morceau, comme dans l'exemple
-suivant qui indique le do médium dans différentes clefs :
+suivant qui indique le do médium dans différentes clefs@tie{}:
@lilypond[verbatim,quote,relative=1]
\clef treble
c2 c
@end lilypond
-LilyPond met à votre disposition d'autres clefs supplémentaires :
+LilyPond met à votre disposition d'autres clefs@tie{}:
@lilypond[verbatim,quote,relative=1]
\clef french
c2 c
\clef percussion
c2 c
-\clef tab
-c2 c
\break
-\clef G
+\clef G % synonym for treble
c2 c
-\clef F
+\clef F % synonym for bass
c2 c
-\clef C
+\clef C % synonym for alto
c2 c
-
@end lilypond
-Il esxiste d'autres clefs, qui sont plus particulièrement destinées à la
-musique ancienne. Voir à ce sujet @ref{Clefs anciennes}.
-
-@cindex transposition et clefs
+@cindex transposition et clef
@cindex clef et transposition
@cindex octave et clef
@cindex chorale, clef de tenor
@cindex tenor, clef
-
En ajoutant @code{_8} ou @code{^8} au nom de la clé, celle-ci est
transposée à l'octave respectivement inférieure ou supérieure, et
-@code{_15} ou @code{^15} la transpose de deux octaves. L'argument
+@code{_15} ou @code{^15} la transpose de deux octaves. D'autres nombres
+entiers peuvent être utilisés selon les besoins. L'argument
@var{clefname} doit être mis entre guillemets lorsqu'il contient des
caractères supplémentaires. Par exemple,
-
-@lilypond[verbatim,quote,relative=2]
+@lilypond[verbatim,quote,relative=1]
\clef treble
c2 c
\clef "treble_8"
c2 c
\clef "bass^15"
c2 c
+\clef "alto_2"
+c2 c
+\clef "G_8"
+c2 c
+\clef "F^5"
+c2 c
@end lilypond
+Il existe d'autres clefs, destinées à un usage particulier. Voir à ce
+sujet
+@c ref{Mensural clefs}, @c ref{Gregorian clefs},
+@ref{Tablatures par défaut} et @ref{Tablatures personnalisées}.
+
@snippets
@seealso
Manuel de notation :
-@ref{Clefs anciennes}.
+@ref{Mensural clefs},
+@ref{Gregorian clefs},
+@ref{Tablatures par défaut},
+@ref{Tablatures personnalisées}.
Morceaux choisis:
@rlsr{Pitches}.
@warning{Les nouveaux utilisateurs sont parfois déroutés par la gestion
des altérations et de l'armure. Pour LilyPond, une hauteur n'est que du
matériau brut ; l'armure et la clef ne feront que déterminer comment ce
-matériau sera retranscrit. Un simple @code{c} signifie tout bonnement
-@w{@qq{ do naturel}} quels que soient l'armure et la clef en question.
-Pour plus d'information, reportez-vous au chapitre
+matériau sera retranscrit. Un simple@tie{}@code{c} signifie tout
+bonnement @w{@qq{do naturel}} quels que soient l'armure et la clef en
+question. Pour plus d'information, reportez-vous au chapitre
@rlearning{Altérations et armure}.}
L'armure indique la tonalité dans laquelle la pièce doit être jouée.
respectivement @var{hauteur}-majeur ou @var{hauteur}-mineur. Vous pouvez
aussi avoir recours aux modes anciens que sont @code{\ionian},
@code{\locrian}, @code{\aeolian}, @code{\mixolydian}, @code{\lydian},
-@code{\phrygian}, et @code{\dorian}.
+@code{\phrygian} et @code{\dorian}.
@lilypond[verbatim,quote,relative=2]
\key g \major
la fonction @code{ottava} qui s'en charge.
@lilypond[verbatim,quote,relative=2]
-a'2 b
-\ottava #1
-a b
+a2 b
+\ottava #-2
+a2 b
+\ottava #-1
+a2 b
\ottava #0
-a b
+a2 b
+\ottava #1
+a2 b
+\ottava #2
+a2 b
@end lilypond
-La fonction @code{ottava} peut aussi prendre en argument les
-valeurs -1@tie{}(pour 8va bassa), 2@tie{}(pour 15ma -- 2 octaves) ou
--2@tie{}(pour 15ma bassa).
-
-
@snippets
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
@unnumberedsubsubsec Instruments transpositeurs
@translationof Instrument transpositions
-@cindex transposition, MIDI
+@cindex transposition et MIDI
@cindex MIDI et transposition
@cindex transposition, instrument
portée est joué par l'instrument transpositeur. Cette hauteur doit être
mentionnée en @notation{mode absolu}. Par exemple, lorsque
vous saisissez une partition en notes réelles, toutes les voix
-devraient être en ut ; si un instrument joue un ton au dessus, il faudra
-lui ajouter un @w{@code{\transposition d'}}. La commande
+devraient être en ut@tie{}; si un instrument joue un ton au dessus, il
+faudra lui ajouter un @w{@code{\transposition d'}}. La commande
@code{\transposition} s'utilise @strong{si et seulement si} les notes Ã
saisir @strong{ne sont pas} dans la tonalité de concert.
@node Altérations accidentelles automatiques
@unnumberedsubsubsec Altérations accidentelles automatiques
@translationof Automatic accidentals
-@cindex Altérations accidentelles automatiques
@cindex altération, style
@cindex altération, style par défaut
@cindex accidentelles, altérations
@cindex accidentelles automatiques
@cindex automatiques, altérations accidentelles
-@cindex default accidental style
+@cindex style d'accidentelle
@funindex set-accidental-style
@funindex voice
LilyPond dispose d'une fonction chargée de regrouper les règles suivant
lesquelles s'impriment les altérations. Elle s'invoque de la manière
-suivante :
+suivante@tie{}:
-@funindex set-accidental-style
@example
\new Staff <<
- #(set-accidental-style 'REGLE)
+ #(set-accidental-style 'voice)
@{ @dots{} @}
>>
@end example
@code{Staff} en cours, exception faite des styles @code{piano} et
@code{piano-cautionary} comme nous allons le voir. Cette fonction
accepte un éventuel argument supplémentaire chargé de spécifier
-le champ d'action de la règle à suivre. A titre d'exemple, il faudra
+le champ d'action de la règle à suivre. À titre d'exemple, il faudra
utiliser, pour que toutes les portées d'un même système -- contexte
-@code{StaffGroup} -- soient soumises à la même règle :
+@code{StaffGroup} -- soient soumises à la même règle@tie{}:
@example
#(set-accidental-style 'voice 'StaffGroup)
Nous vous présentons ci-après les différentes régles d'altération prises
en charge. Pour les besoins de la démonstration, nous partirons de
-l'exemple suivant :
+l'exemple suivant@tie{}:
@lilypond[verbatim,quote]
musicA = {
@funindex default
C'est la règle d'impression par défaut, qui se rapporte à l'usage
-en vigueur au XVIIIème siècle : les altérations accidentelles sont
+en vigueur au XVIIIe siècle@tie{}: les altérations accidentelles sont
valables tout une mesure, et uniquement à leur propre octave. C'est la
raison pour laquelle il n'y a pas de bécarre avant le @notation{si} de
la deuxième mesure, ni avant le dernier @notation{do}.
}
@end lilypond
-
-
-
-
@item modern
-@funindex modern style accidentals
@cindex altération, style @emph{modern}
@cindex @emph{modern}, style d'altération
@funindex modern
-Cette règle est la plus courante au XXème siècle. Les altérations
+Cette règle est la plus courante au XXe siècle. Les altérations
accidentelles sont imprimées comme avec le style @code{default}, mais
lorsqu'une note non-altérée apparaît à une octave différente, ou bien
dans la mesure suivante, des bécarres de précaution sont ajoutés. Dans
Cette règle est équivalente à @code{modern}, mais les bécarres de
précaution (absents dans la règle @code{default}) sont imprimés de façon
-particulière : soit plus petits, soit (par défaut) entre parenthèses.
+particulière@tie{}: soit plus petits, soit (par défaut) entre parenthèses.
Il est possible de le définir au moyen de la propriété
@code{cautionary-style} pour l'objet @code{AccidentalSuggestion}.
@funindex piano accidentals
Cette règle est communément employée pour les partitions de piano au
-XXème siècle. Très similaire à @code{modern} de par son comportement,
+XXe siècle. Très similaire à @code{modern} de par son comportement,
elle s'en distingue en ce que les altérations tiennent compte des autre
portées du contexte @code{GrandStaff} ou @code{PianoStaff}.
@funindex neo-modern
-Cette règle suit les pratiques de la musique contemporaine : les
+Cette règle suit les pratiques de la musique contemporaine@tie{}: les
altérations accidentelles apparaîssent comme dans le style
@code{modern}, à ceci près qu'elles sont répétées dans la même mesure --
sauf si elles concernent deux notes consécutives.
@funindex dodecaphonic
-Cette règle reproduit ce que certains compositeurs du début du XXème
+Cette règle reproduit ce que certains compositeurs du début du XXe
siècle ont introduit dans leur désir d'abolir la distinction entre les
notes naturelles ou non. Ainsi, @emph{chaque} note est affublée d'une
altération, même si elle est naturelle.
@funindex teaching
-Cette règle est à usage pédagogique : l'impression d'une simple gamme
-fera apparaître une altération de précaution pour toute note altérée.
-Les altérations accidentelles sont imprimées selon le style
+Cette règle est à usage pédagogique@tie{}: l'impression d'une simple
+gamme fera apparaître une altération de précaution pour toute note
+altérée. Les altérations accidentelles sont imprimées selon le style
@code{modern}, et une altération de précaution est ajoutée pour chaque
dièse ou bémol à la clef -- sauf dans le cas de notes consécutives.
@funindex forget
-Tout le contraire de @code{no-reset} : l'effet des altérations cesse
-aussitôt, et de ce fait, toutes les altérations, quelque soit leur place
-dans la mesure, sont imprimées en fonction de l'éventuelle armure. A
-l'inverse du style @code{dodecaphonic}, aucun bécarre ne sera ici
+Tout le contraire de @code{no-reset}@tie{}: l'effet des altérations
+cesse aussitôt, et de ce fait, toutes les altérations, quelque soit leur
+place dans la mesure, sont imprimées en fonction de l'éventuelle armure.
+À l'inverse du style @code{dodecaphonic}, aucun bécarre ne sera ici
imprimé.
@lilypond[quote]
@knownissues
Les notes simultanées sont considérées comme des évènements séquentiels.
-Ce qui implique que, dans un accord, les altérations accidentelles
+Ceci implique que, dans un accord, les altérations accidentelles
seront imprimées comme si les notes de l'accord apparaissaient une par
une, en fonction de l'ordre dans lequel elles ont été saisies -- ce qui
peut poser problème lorsqu'au sein d'un accord certaines altérations
dépendent les unes des autres.
-Ce problème est à résoudre manuellement, en insérant des @code{!} et des
-@code{?} après les notes concernées.
+Ce problème est à résoudre manuellement, en insérant des@tie{}@code{!}
+et des@tie{}@code{?} après les notes concernées.
+
+L'absence d'altération de précaution est déterminée par l'examen de la
+mesure précédente. Néanmoins, lorsqu'un bloc @code{\alternative} suit
+une section @code{\repeat@tie{}volta@tie{}N}, la logique voudrait que
+l'on regarde la dernière mesure @emph{jouée} plutôt que la dernière
+@emph{imprimée}. Dans l'exemple qui suit, vous conviendrez que le do de
+la seconde alternative ne nécessite pas son bécarre.
+
+@lilypond[quote]
+{
+ #(set-accidental-style 'modern)
+ \time 2/4
+ \repeat volta 2 {
+ c'2
+ }
+ \alternative {
+ cis'
+ c'
+ }
+}
+@end lilypond
+
+L'astuce suivante, qui définit temporairement le recours au style
+@code{forget}, permet d'obtenir quelque chose de présentable.
+
+@lilypond[verbatim,quote]
+forget = #(define-music-function (parser location music) (ly:music?) #{
+ #(set-accidental-style 'forget)
+ $music
+ #(set-accidental-style 'modern)
+#})
+{
+ #(set-accidental-style 'modern)
+ \time 2/4
+ \repeat volta 2 {
+ c'2
+ }
+ \alternative {
+ cis'
+ \forget c'
+ }
+}
+@end lilypond
@node Ambitus
@funindex cross
-Certains instruments utilisent des têtes de note différentes à des
-fins spécifiques -- des croix pour le @emph{parlato} des chanteurs ou les
-notes étouffées des guitares ; des losanges pour les harmoniques des
-cordes.
+L'apparence des têtes de note peut évoluer au cours de la partition@tie{}:
@lilypond[verbatim,quote,relative=2]
-c4 b a b
+c4 b
\override NoteHead #'style = #'cross
-c4 b a b
+c4 b
+\revert NoteHead #'style
+a b
+\override NoteHead #'style = #'harmonic
+a b
\revert NoteHead #'style
c4 d e f
@end lilypond
-Il existe un raccourci pour les notes en losange :
+Pour une liste exhaustive des styles de tête de note, consultez
+@ref{Styles de tête de note}.
+
+Certains instruments utilisent des têtes de note différentes à des
+fins spécifiques -- des croix pour le @emph{parlato} des chanteurs ou les
+notes étouffées des guitares@tie{}:
+
+@lilypond[verbatim,quote,relative=2]
+c4 b
+\xNotesOn
+ a b c4 b
+\xNotesOff
+c4 d
+@end lilypond
+
+Cette commande opère aussi bien sur des notes isolées qu'au sein d'un
+accord, dans une portée traditionnelle ou dans un contexte de
+tablature@tie{}:
+
+@lilypond[verbatim,quote,relative=2]
+c4 b
+\xNote { e f }
+c b < g \xNote c f > b
+@end lilypond
+
+Vous pouvez utiliser, en lieu et place de @code{\xNote},
+@code{\xNotesOn} et @code{\xNotesOff}, les commandes
+@code{\deadNote}, @code{\deadNotesOn} et @code{\deadNotesOff}.
+
+
+Il existe un raccourci pour les notes en losange qui indiquent les
+harmoniques des cordes@tie{}:
@lilypond[verbatim,quote,relative=2]
<c f\harmonic>2 <d a'\harmonic>4 <c g'\harmonic>
@end lilypond
-Pour une liste exhaustive des styles de tête de note, consultez
-@ref{Têtes de note}.
+
+@predefined
+@code{\harmonic},
+@code{\xNotesOn},
+@code{\xNotesOff},
+@code{\xNote}.
+@endpredefined
@seealso
@rlsr{Pitches}.
Manuel de notation :
-@ref{Têtes de note},
-@ref{Notes en accords}.
+@ref{Styles de tête de note},
+@ref{Notes en accords},
+@ref{Indication des harmoniques et notes étouffées}.
@seealso
Référence des propriétés internes :
@endpredefined
+@snippets
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{numbers-as-easy-note-heads.ly}
+
+
@seealso
Manuel de notation :
@ref{Définition de la taille de portée}.
@funindex aikenHeads
@funindex \sacredHarpHeads
@funindex sacredHarpHeads
+@funindex \southernHarmonyHeads
+@funindex southernHarmonyHeads
En notation profilée, le profil d'une tête de note correspond à la
fonction harmonique de cette note dans la gamme. Ce style de notation
était très en vogue dans les recueils de chansons américains du XIXe
-siècle. Voici comment procéder :
+siècle. Voici comment procéder@tie{}:
@lilypond[verbatim,quote,relative=2]
\aikenHeads
-c, d e f g a b c
+c, d e f g2 a b1 c \break
\sacredHarpHeads
-c, d e f g a b c
+c,4 d e f g2 a b1 c \break
+\southernHarmonyHeads
+c,4 d e f g2 a b1 c \break
@end lilypond
Les profils sont déterminés par la hauteur dans la gamme, le premier
-degré étant défini par la commande @code{\key}.
+degré étant défini par la commande @code{\key}. Pour une tonalité
+mineure, les degrés sont déterminés par rapport au relatif majeur@tie{}:
+
+@lilypond[verbatim,quote,relative=2]
+\key a \minor
+\aikenHeads
+a b c d e2 f g1 a \break
+\aikenHeadsMinor
+a,4 b c d e2 f g1 a \break
+\sacredHarpHeadsMinor
+a,2 b c d \break
+\southernHarmonyHeadsMinor
+a2 b c d \break
+@end lilypond
+
@predefined
@code{\aikenHeads},
+@code{\aikenHeadsMinor},
@code{\sacredHarpHeads}.
+@code{\sacredHarpHeadsMinor},
+@code{\southernHarmonyHeads},
+@code{\southernHarmonyHeadsMinor}.
@endpredefined
{applying-note-head-styles-depending-on-the-step-of-the-scale.ly}
Pour une liste exhaustive des styles de tête de note, consultez
-@ref{Têtes de note}.
+@ref{Styles de tête de note}.
@seealso
@rlsr{Pitches}.
Manuel de notation :
-@ref{Têtes de note}.
+@ref{Styles de tête de note}.
Référence des propriétés internes :
@rinternals{note-event},
@cindex improvisation
@cindex notes penchées
-@cindex note heads, improvisation
-@cindex note heads, slashed
+@cindex tête de note et improvisation
+@cindex tête de note allongée
@funindex \improvisationOn
@funindex improvisationOn
L'improvisation peut quelquefois s'indiquer à l'aide de notes de forme
allongée (@emph{slash}). L'interprète jouera alors les notes qu'il
veut, en respectant toutefois le rythme affiché. Ces têtes de notes sont
-créées ainsi :
+créées ainsi@tie{}:
@lilypond[verbatim,quote,relative=2]
\new Voice \with {
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
+ Translation of GIT committish: 22b6ca7247b6f0d596934d38aa2c75d5e45206eb
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@end lilypond
Par défaut, ces indications n'affectent en rien l'espacement des
-notes. Leur longueur peut néanmoins être prise en considération : dans
-l'exemple qui suit, le premier commentaire n'influe pas sur
+notes. Leur longueur peut néanmoins être prise en considération@tie{}:
+dans l'exemple qui suit, le premier commentaire n'influe pas sur
l'espacement, Ã l'inverse du second.
@lilypond[quote,verbatim,relative=2]
a4_"scherzando" f
@end lilypond
+En plus d'indications textuelles, les notes peuvent se voir attacher des
+articulations, comme indiqué au chapitre @ref{Articulations et ornements}.
+
+Pour de plus amples détails sur la manière de combiner indications
+textuelles et articulations, reportez-vous au chapitre
+@rlearning{Positionnement des objets}.
@funindex \textLengthOn
@funindex textLengthOn
@seealso
+Manuel d'initiation :
+@rlearning{Positionnement des objets}.
+
Manuel de notation :
@ref{Mise en forme du texte},
@ref{Direction et positionnement}.
@knownissues
S'assurer que tous les éléments textuels et les paroles respectent
-les marges du document requiert des calculs relativement lourds ; c'est
-la raison pour laquelle LilyPond, par défaut, ne s'en préoccupe pas.
+les marges du document requiert des calculs relativement lourds@tie{};
+c'est la raison pour laquelle LilyPond, par défaut, ne s'en préoccupe pas.
Vous pouvez cependant l'y forcer en définissant
@example
@i{accelerando} ou @i{trilles}, s'incrivent textuellement et se
prolongent sur plusieurs notes à l'aide d'une ligne pleine, pointillée
ou ondulée. Ces objets, que l'on appelle @qq{extenseurs}, se dessinent
-entre deux notes à l'aide de la syntaxe suivante :
+entre deux notes à l'aide de la syntaxe suivante@tie{}:
@lilypond[verbatim,quote,relative=2]
\override TextSpanner #'(bound-details left text) = "rit."
@noindent
Le texte à imprimer est spécifié en tant que propriété de l'objet
-@code{TextSpanner}. Il apparaîtra par défaut en italique ; cependant,
-rien ne s'oppose à un autre graphisme dès lors que vous faites appel Ã
-un bloc @code{\markup} -- voir @ref{Mise en forme du texte}.
+@code{TextSpanner}. Il apparaîtra par défaut en italique@tie{};
+cependant, rien ne s'oppose à un autre graphisme dès lors que vous
+faites appel à un bloc @code{\markup} --
+voir @ref{Mise en forme du texte}.
@lilypond[quote,relative=2,verbatim]
\override TextSpanner #'(bound-details left text) =
@code{\textSpannerNeutral}.
@endpredefined
+@knownissues
+LilyPond ne peut traiter qu'un seul extenseur à la fois par voix.
@seealso
Manuel de notation :
@rinternals{RehearsalMark}.
-@knownissues
-@c To be removed when Issue 69 in the tracker gets fixed. -vv
-
-Au cas où il n'y aurait pas de ligne à suivre, la marque ne sera pas imprimée.
-
-
@node Texte indépendant
@unnumberedsubsubsec Texte indépendant
@translationof Separate text
@rinternals{TextScript}.
-
@node Mise en forme du texte
@subsection Mise en forme du texte
@translationof Formatting text
@cindex syntaxe du mode markup
La syntaxe du mode @emph{markup} n'est pas différente de celle des
-autres modes de LilyPond : une expression @code{\markup} est bornée par
-des accolades @code{@{ @dots{} @}}. Un mot unique sera considéré comme
-une expression minimale, et n'aura donc pas besoin d'être mis entre
-accolades.
+autres modes de LilyPond@tie{}: une expression @code{\markup} est bornée
+par des accolades @code{@{@tie{}@dots{}@tie{}@}}. Un mot unique sera
+considéré comme une expression minimale, et n'aura donc pas besoin
+d'être mis entre accolades.
Contrairement aux indications simples, du type "entre guillemets", les
blocs @code{\markup} peuvent contenir des expressions imbriquées ou
Un bloc @code{\markup} peut contenir du texte entre guillemets. De
telles chaines seront considérées comme des expressions textuelles
-minimales ; Ã ce titre, toute commande de type @emph{markup} ou tout
-caractère spécial -- tel un @code{\} ou un @code{#} -- sera imprimé
+minimales@tie{}; Ã ce titre, toute commande de type @emph{markup} ou
+tout caractère spécial -- tel un @code{\} ou un @code{#} -- sera imprimé
littéralement et sans influer sur le formatage du texte. Il est de ce
fait possible d'imprimer des guillemets informatiques @code{"} dès lors
qu'ils sont précédés d'une oblique inverse.
La manière de définir les expressions @emph{markup} aura une influence
sur la manière dont elles seront empilées, centrées ou alignées. Dans
l'exemple qui suit, la deuxième expression @code{\markup} est traitée
-tout comme la première :
+tout comme la première@tie{}:
@lilypond[quote,verbatim,relative=2]
c1^\markup { \center-column { a bbb c } }
@end lilypond
Vous pouvez stocker les étiquettes textuelles en tant que variables,
-et attacher ces identificateurs à des notes, comme ici :
+et attacher ces identificateurs à des notes, comme ici@tie{}:
@lilypond[quote,verbatim]
allegro = \markup { \bold \large Allegro }
@funindex \underline
@funindex underline
-Le mode @emph{markup} autorise des changements élémentaires de la fonte :
+Le mode @emph{markup} autorise des changements élémentaires de la
+fonte@tie{}:
@lilypond[quote,verbatim,relative=2]
d1^\markup {
@end itemize
@noindent
-Voici une illustration de ces trois différentes méthodes :
+Voici une illustration de ces trois différentes méthodes@tie{}:
@lilypond[quote,verbatim,relative=1]
f1_\markup {
Vous pouvez imprimer du texte en indice ou en exposant. Celui-ci sera
dans un taille plus petite, mais rien ne s'oppose à ce que vous lui
-affectiez un taille normale :
+affectiez un taille normale@tie{}:
@lilypond[quote,verbatim]
\markup {
Lorsqu'un changement survient au milieu d'un mot, il se peut qu'un
espacement supplémentaire apparaîsse. Il suffit en pareil cas de
-concaténer les différents éléments :
+concaténer les différents éléments@tie{}:
@lilypond[quote,verbatim]
\markup {
@funindex \halign
@funindex halign
-L'alignement horizontal peut être ajusté à l'aide d'une valeur numérique :
+L'alignement horizontal peut être ajusté à l'aide d'une valeur
+numérique@tie{}:
@lilypond[quote,verbatim,relative=2]
a1-\markup { \halign #-1 poco }
Les indications textuelles, lorsqu'elles sont relativement longues,
peuvent se répartir sur plusieurs lignes en fonction de la largeur de
ligne. Le texte sera alors soit aligné à gauche, soit justifié, comme
-le montre l'exemple suivant :
+le montre l'exemple suivant@tie{}:
@lilypond[quote,verbatim]
\markup {
@funindex hbracket
Certaines commandes de @emph{markup} permettent d'ornementer des
-éléments textuels avec des graphismes, à l'instar de l'exemple suivant :
+éléments textuels avec des graphismes, à l'instar de l'exemple suivant@tie{}:
@lilypond[quote,verbatim]
\markup \fill-line {
encapsulé (extension @code{eps}), ou bien de tracer un graphique
directement dans le fichier source à partir d'instructions PostScript
pures. Nous vous conseillons, en pareil cas, de toujours spécifier les
-dimensions du dessin, comme dans ce qui suit :
+dimensions du dessin, comme dans ce qui suit@tie{}:
@lilypond[quote,verbatim,relative=1]
c1^\markup {
Divers éléments de notation peuvent orner une partition, au moyen d'un
objet @emph{markup}.
-Notes et altérations sont données à l'aide d'instructions @emph{markup} :
+Notes et altérations sont données à l'aide d'instructions
+@emph{markup}@tie{}:
@lilypond[quote,verbatim,relative=2]
a2 a^\markup {
\glissando b
@end lilypond
-Le mode @emph{markup} permet d'accéder à d'autres objets de notation :
+Le mode @emph{markup} permet d'accéder à d'autres objets de
+notation@tie{}:
@lilypond[quote,verbatim,relative=1]
g1 bes
crochets ou accolades.
Le mode @emph{markup} supporte aussi les diagrammes spécifiques Ã
-certains instruments :
+certains instruments@tie{}:
@lilypond[quote,verbatim,relative=2]
c1^\markup {
}
@end lilypond
-Cette syntaxe prend en charge une liste de @emph{markups} ; il peut s'agir
+Cette syntaxe prend en charge une liste de @emph{markups}@tie{}; il peut
+s'agir
@itemize
@item
d'une suite de commandes générant à leur tour des lignes de texte,
@funindex font-interface
-La gestion des fontes est assurée par plusieurs bibliothèques :
+La gestion des fontes est assurée par plusieurs bibliothèques@tie{}:
FontConfig se charge de répertorier les différentes fontes installées
-sur votre système ; quant à Pango, elle se charge plus particulièrement
-de leur rendu.
+sur votre système@tie{}; quant à Pango, elle se charge plus
+particulièrement de leur rendu.
Les fontes musicales peuvent se décrire comme un jeu de glyphes
spécifiques regroupés dans plusieurs familles. L'exemple qui suit
@ref{Notation musicale dans du texte formaté}.
Une remarque s'impose au sujet des glyphes contenus dans
-@code{fetaBraces} : chacun d'eux est formé du mot @emph{brace} auquel
-est accolé un numéro d'ordre. Lorsque vous désirez imprimer une
+@code{fetaBraces}@tie{}: chacun d'eux est formé du mot @emph{brace}
+auquel est accolé un numéro d'ordre. Lorsque vous désirez imprimer une
accolade, vous devez la @qq{chercher} par son numéro d'ordre -- d'où la
fonction @code{\lookup} de l'exemple ci-dessus --, tout en sachant qu'il
est compris entre @code{0} (la plus petite) et @code{575} (la plus
fermante, il suffit d'appliquer une rotation au glyphe sélectionné,
comme indiqué au chapitre @ref{Rotation des objets}.
-Vous disposez de trois familles de fontes textuelles : @emph{roman}
+Vous disposez de trois familles de fontes textuelles@tie{}: @emph{roman}
pour la police sérif ou avec empattement -- fixée par défaut à New
Century Schoolbook --, une police sans empattement (@emph{sans} sérif)
et une à chasse fixe (ou monospace) -- les deux dernières étant
@noindent
Cette syntaxe s'applique aussi en mode @emph{markup}, bien que celui-ci
dispose d'une syntaxe allégée comme nous l'avons vu dans
-@ref{Sélection de la fonte et de la taille}:
+@ref{Sélection de la fonte et de la taille}@tie{}:
@lilypond[quote,verbatim]
\markup {
En plus de pouvoir jongler entre les différentes fontes prédéfinies,
LilyPond vous permet d'en utiliser d'autres, ce qui fait l'objet des
-deux prochaines parties : @ref{Attribution d'une fonte en particulier}
+deux prochaines parties@tie{}:
+@ref{Attribution d'une fonte en particulier}
et @ref{Choix des fontes par défaut}.
Vous pouvez utiliser n'importe quelle police installée sur votre
système, du moment où elle est accessible par Fontconfig, en respectant
-la syntaxe suivante :
+la syntaxe suivante@tie{}:
@lilypond[quote,verbatim,relative=2]
\override Staff.TimeSignature #'font-name = #"Bitstream Charter"
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 541f77187b475f4ea84ca36485d2255dd7db0437
+ Translation of GIT committish: 22b6ca7247b6f0d596934d38aa2c75d5e45206eb
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@imageFloat{flat-design,png,right}
-L'inspiration pour LilyPond provint de deux musiciens qui s'étaient
+L'inspiration pour LilyPond provient de deux musiciens qui s'étaient
lassés de l'aspect fade et ennuyeux des partitions musicales produites
avec un ordinateur. Tous les musiciens préfèrent lire de belles
partitions de musique, pourquoi donc les programmeurs ne
@divEnd
@divClass{column-left-top}
-@subheading Pourquoi utiliser LilyPond ?
+@subheading Ce que LilyPond sait faire
@itemize
@divEnd
@divClass{column-right-top}
-@subheading Qui l'utilise ?
+@subheading Ceux qui utilisent LilyPond
@itemize
@divEnd
@divClass{column-center-bottom}
-@subheading Pourquoi utiliser LilyPond ?
+@subheading LilyPond en action
@itemize
Introduisez des fragments de partition musicale sans avoir besoin de
copier-coller manuellement des images. Intégrez de façon transparente
des partitions dans un document @LaTeX{} ou HTML, ou ajoutez des
-partitions dans un document OpenOffice.org avec OOoLilyPond.
+partitions dans un document OpenOffice.org.
@subsubheading Accessibilité
assure une prompte résolution des problèmes.
-@subsubheading Enhanced editors
+@subsubheading Éditeurs avancés
Plusieurs développeurs, eux-même utilisateurs de LilyPond, ont créé des
outils spécifiques dans le but de travailler plus rapidement et avec
@emph{Affaire Étrangère}, un opéra de
@uref{http://valentin.villenave.net/,Valentin Villenave}, livret
de @uref{http://en.wikipedia.org/wiki/Lewis_Trondheim, Lewis Trondheim},
-dont la première a eu lieu le 1er@tie{}février@tie{}2009 Ã
+dont la première a eu lieu le 1er@tie{}février@tie{}2009 en France Ã
@uref{http://www.orchestre-montpellier.com/, l'Opéra de Montpellier}.
@item
-@subsubheading Pièces orchestrales
+@subsubheading Matériel d'orcheste
Le fichier source contient les notes de la pièce. Le conducteur et les
parties séparées peuvent être réalisés à partir de la même source@tie{};
@unnumberedsec Facilités d'édition
@translationof Easier editing
-@divClass{column-center-top}
-@subheading Environnement graphique : Denemo
-
-@imageClickable{screenshot-denemo-small,png,
- (cliquez pour agrandir),screenshot-denemo,png,right}
-
-@sourceimage{logo-linux,,,}
-@sourceimage{logo-windows,,,}
-
-@uref{http://denemo.org}
-
-Denemo est un éditeur graphique qui génère du code source LilyPond et
-peut jouer un rendu sonore. Ce projet, actuellement en phase de
-développement, génère du code pour une version ancienne de LilyPond
-(2.8.7). Il permet à l'utilisateur de voir le code source LilyPond en
-même temps que la vue graphique.
-
-
-@divEnd
@divClass{column-center-top}
-@subheading Environment intégré : LilyPondTool
+@subheading LilyPondTool
@imageClickable{lilypondtool-2.12-screenshot-400wide,png,
(cliquez pour agrandir),lilypondtool-2.12-screenshot,png,right}
@sourceimage{logo-macosx,,,}
@sourceimage{logo-windows,,,}
-@uref{http://lilypondtool@/.organum@/.hu}
+@uref{http://lilypondtool.organum.hu}
Greffon de l'éditeur de texte @uref{http://www.jedit.org,jEdit},
LilyPondTool est l'un des outils d'édition en mode texte le plus riche
@divEnd
@divClass{column-center-top}
-@subheading Environnement intégré : Frescobaldi
+@subheading Frescobaldi
@imageClickable{frescobaldi-lilypond-editor-small,png,
(cliquez pour agrandir),frescobaldi-lilypond-editor,png,right}
@divEnd
@divClass{column-center-top}
-@subheading Environments texte : Emacs et Vim
+@subheading Denemo
+
+@imageClickable{screenshot-denemo-small,png,
+ (cliquez pour agrandir),screenshot-denemo,png,right}
+
+@sourceimage{logo-linux,,,}
+@sourceimage{logo-windows,,,}
+
+@uref{http://denemo.org}
+
+Denemo est un éditeur graphique qui génère du code source LilyPond et
+peut jouer un rendu sonore. Ce projet, actuellement en phase de
+développement, génère du code pour une version ancienne de LilyPond
+(2.8.7). Il permet à l'utilisateur de voir le code source LilyPond en
+même temps que la vue graphique.
+
+
+@divEnd
+
+@divClass{column-center-top}
+@subheading Emacs et Vim
@sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}
éditeur très extensible, qui peut être utilisé comme un environnement de
développement intégré (IDE). Il existe un @emph{mode LilyPond} qui offre
quelques fonctionnalités spécifiques pour travailler avec des fichiers
-source LilyPond.
+source LilyPond. L'un des développeurs a même écrit un mode majeur pour
+Emacs, @uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}.
@uref{http://www.vim.org}
alors vous préfèrerez peut-être utiliser un autre éditeur pour
travailler sur des fichiers source LilyPond.
+Vous trouverez plus d'information quant au paramétrage d'Emacs et Vim au
+chapitre @rprogram{LilyPond et les éditeurs de texte}.
+
@divEnd
+@ignore these may not need to be here at all, as they are purely
+MacOS scripts.
+
@divClass{column-center-top}
@subheading Autres
-@subsubheading Environnement texte : TexShop
+@subsubheading TexShop
@sourceimage{logo-macosx,,,}
@end example
@divEnd
+@end ignore
+
+
@divClass{column-center-top}
@subheading Autres programmes qui exportent du code LilyPond
-@subsubheading Environnements graphiques
+@subsubheading Éditeurs de partition, tablature et MIDI
@itemize
@item
bienvenus.
@item
-@uref{http://strasheela.sourceforge.net, Strasheela} est un système de
-composition musicale @qq{highly expressive constraint-based}.
+@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, un
+convertisseur monophonique temps-réel MIDI vers LilyPond.
@end itemize
-@subsubheading Outils en ligne de commande
+@subsubheading Générateurs de code
@itemize
+
@item
-@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, un
-convertisseur monophonique temps-réel MIDI vers LilyPond.
+@uref{http://strasheela.sourceforge.net, Strasheela} est un système de
+composition musicale @qq{highly expressive constraint-based}.
@item
-@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, un mode
-majeur pour Emacs.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, bibliothèque LISP
+qui permet de générer de la notation à partir de logiciels de musique.
@end itemize
+@divEnd
+
+@divClass{column-center-top}
@subheading Autres programmes dont le développement est peu actif
@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
et @uref{http://canorus.org,Canorus}.
-@item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, constitue
-une bibliothèque LISP de génération de notation musicale.
-
@item
@uref{http://lilycomp.sourceforge.net, LilyComp} permet de saisir
graphiquement des notes. Il fonctionne comme un pavé numérique
@node Aligning objects
@subsection Aligning objects
-Graphical objects which support the @code{self-alignment-interface} and/or
-the @code{side-position-interface} can be
-aligned to a previously placed object in a variety of ways. For a list of these objects, see
+Graphical objects which support the @code{self-alignment-interface}
+and/or the @code{side-position-interface} can be aligned to a previously
+placed object in a variety of ways. For a list of these objects, see
@rinternals{self-alignment-interface} and @rinternals{side-position-interface}.
All graphical objects have a reference point, a horizontal extent and a
vertical extent. The horizontal extent is a pair of numbers
giving the displacements from the reference point of the left and
-right edges, displacements to the left being negative. The
-vertical extent is a pair of numbers giving the displacement from
-the reference point to the bottom and top edges, displacements down
-being negative.
+right edges, displacements to the left being negative. The vertical
+extent is a pair of numbers giving the displacement from the reference
+point to the bottom and top edges, displacements down being negative.
An object's position on a staff is given by the values of the
@code{X-offset} and @code{Y-offset} properties. The value of
-@code{X-offset} gives the displacement from the x coordinate of
+@code{X-offset} gives the displacement from the X coordinate of
the reference point of the parent object, and the value of
@code{Y-offset} gives the displacement from the center line of the
-staff. The values of @code{X-offset} and
-@code{Y-offset} may be set directly or may be set to be calculated
-by procedures in order to achieve alignment with the parent object
-in several ways.
+staff. The values of @code{X-offset} and @code{Y-offset} may
+be set directly or may be set to be calculated by procedures in order
+to achieve alignment with the parent object.
@warning{Many objects have special positioning considerations which
cause any setting of @code{X-offset} or @code{Y-offset} to be
ignored or modified, even though the object supports the
-@code{self-alignment-interface}.}
+@code{self-alignment-interface}. Overriding the @code{X-offset}
+or @code{Y-offset} properties to a fixed value causes the respective
+@code{self-alignment} property to be disregarded.}
-For example, an accidental can be repositioned
-vertically by setting @code{Y-offset} but any changes to
-@code{X-offset} have no effect.
+For example, an accidental can be repositioned vertically by setting
+@code{Y-offset} but any changes to @code{X-offset} have no effect.
-Rehearsal marks may be aligned with
-breakable objects such as bar lines, clef symbols, time signature
-symbols and key signatures. There are special properties to be
-found in the @code{break-aligned-interface} for positioning rehearsal
-marks on such objects.
+Rehearsal marks may be aligned with breakable objects such as bar
+lines, clef symbols, time signature symbols and key signatures. There
+are special properties to be found in the @code{break-aligned-interface}
+for positioning rehearsal marks on such objects.
+@ruser{Using the break-alignable-interface}
+
+@seealso
+@ruser{Using the break-alignable-interface},
+@rextend{Callback functions}.
@menu
* Setting X-offset and Y-offset directly::
@cindex tenor clef, choral
By adding@tie{}@code{_8} or@tie{}@code{^8} to the clef name, the
-clef is transposed one octave down or up, respectively,
+clef is transposed one octave down or up respectively,
and@tie{}@code{_15} and@tie{}@code{^15} transpose by two octaves.
-Clef names containing non-alphabetic characters must be enclosed
-in quotes.
+Other integers can be used if required. Clef names containing
+non-alphabetic characters must be enclosed in quotes
@lilypond[verbatim,quote,relative=1]
\clef treble
c2 c
\clef "treble_8"
c2 c
-\clef "G_8"
-c2 c
\clef "bass^15"
c2 c
-\clef "F^15"
+\clef "alto_2"
+c2 c
+\clef "G_8"
+c2 c
+\clef "F^5"
c2 c
@end lilypond
staff is crucial for @var{padding}).
@end itemize
+For example, the default is:
+
+@example
+after-title-spacing = #'((space . 2) (padding . 0.5))
+@end example
+
+
If a page has a ragged bottom, @var{space} is not stretched. In particular, the
resulting distance on such a page is the largest of
@itemize @bullet
@code{\textSpannerNeutral}.
@endpredefined
+@knownissues
+LilyPond is only able to handle one text spanner per voice.
@seealso
Notation Reference:
If you have discovered a bug which is not listed, please help us
by creating a bug report.
-@warning{We only accept bug reports in the form of @ref{Tiny
-examples}. We have very limited resources to deal with bug
-reports, so any non-minimal example will be rejected. Almost
+@warning{We only accept bug reports in the form of
+@ref{Tiny examples}. We have very limited resources to deal with
+bug reports, so any non-minimal example will be rejected. Almost
every bug can be demonstrated in four notes or less!}
Here is an example of a good bug report:
Post with the gmane lilypond.bugs interface}, or send an email to
@uref{mailto:bug-lilypond@@gnu.prg, bug-lilypond@@gnu.org}.
-Once your bug has been sent to the list, our Bug Meister will
-examine the report. He may ask you for more information, or may
-add the report to the tracker and let you know what the issue
-number is.
+Once your bug has been sent to the list, our Bug Squad will
+examine the report. Please allow up to 24 hours, as we have a
+limited number of volunteers for this task. They may ask you for
+more information, or may add the report to the tracker and let you
+know what the issue number is.
You may mark the bug so that you automatically receive emails when
any activity on the bug occurs. This requires you have a google
@c FIXME: fill in number
@c used for news about the upcoming release; see CG x.y
+@newsItem
+@subsubheading LilyPond 2.13.24 released! @emph{June 14, 2010}
+
+We are happy to announce the release of LilyPond 2.13.24. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+
@newsItem
@subsubheading LilyPond 2.13.23 released! @emph{June 3, 2010}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=13
-PATCH_LEVEL=24
+PATCH_LEVEL=25
MY_PATCH_LEVEL=
VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.23
+VERSION_DEVEL=2.13.24
--- /dev/null
+\version "2.13.24"
+
+\header {
+ texidoc = "The dots on a dotted rest are correctly accounted for
+in horizontal spacing."
+}
+
+{ r16. cis'' }
Grob *common_y = rest->common_refpoint (beam, Y_AXIS);
- /*
- TODO: this is dubious, because this call needs the info we're
- computing right now.
- */
- Interval rest_extent = rest->extent (common_y, Y_AXIS);
- rest_extent.translate (offset);
+ Interval rest_extent = rest->extent (rest, Y_AXIS);
+ rest_extent.translate (offset + rest->get_parent (Y_AXIS)->relative_coordinate (common_y, Y_AXIS));
Real rest_dim = rest_extent[d];
Real minimum_distance
stems.insert (stem);
}
- for (set<Grob*>::const_iterator i(stems.begin());
+ for (set<Grob*>::const_iterator i (stems.begin());
i != stems.end (); i++)
{
Grob *stem = (*i);
vector_sort (dots, position_less);
for (vsize i = dots.size (); i--;)
- if (!dots[i]->is_live ())
- dots.erase (dots.begin () + i);
+ {
+ if (!dots[i]->is_live ())
+ dots.erase (dots.begin () + i);
+ else
+ // Undo any fake translations that were done in add_head.
+ dots[i]->translate_axis (-dots[i]->relative_coordinate (me, X_AXIS), X_AXIS);
+ }
Dot_formatting_problem problem (boxes, base_x);
Pointer_group_interface::add_grob (me, ly_symbol2scm ("dots"), d);
d->set_property ("Y-offset", Grob::x_parent_positioning_proc);
- // Dot formatting requests the Y-offset, -which- for rests may
- // trigger post-linebreak callbacks.
- if (!Rest::has_interface (head))
+ // Dot formatting requests the Y-offset, which for rests may
+ // trigger post-linebreak callbacks. On the other hand, we need the
+ // correct X-offset of the dots for horizontal collision avoidance.
+ // The translation here is undone in calc_positioning_done, where we
+ // do the X-offset properly.
+ if (Rest::has_interface (head))
+ d->translate_axis (head->extent (head, X_AXIS).length (), X_AXIS);
+ else
d->set_property ("X-offset", Grob::x_parent_positioning_proc);
Axis_group_interface::add_element (me, d);
}
Optimal_page_breaking (Paper_book *pb);
virtual ~Optimal_page_breaking ();
-
-private:
- vector<vsize> solve_chunk (vsize);
};
#endif /* OPTIMAL_PAGE_BREAKING_HH */
static void add_column (Grob *me, Grob *);
DECLARE_GROB_INTERFACE();
- DECLARE_SCHEME_CALLBACK (force_shift_callback, (SCM element));
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM element));
DECLARE_SCHEME_CALLBACK (force_shift_callback_rest, (SCM element, SCM off));
static SCM do_shift (Grob *);
#include "system.hh"
static bool
-is_break (Grob *g)
+is_break (Grob *)
{
- return g->get_property ("page-break-permission") == ly_symbol2scm ("force");
+ return false;
}
Optimal_page_breaking::Optimal_page_breaking (Paper_book *pb)
extern bool debug_page_breaking_scoring;
-// Solves the subproblem betwen the (END-1)th \pageBreak and the
-// ENDth \pageBreak.
-// Returns a vector of systems per page for the pages within this chunk.
-vector<vsize>
-Optimal_page_breaking::solve_chunk (vsize end)
+SCM
+Optimal_page_breaking::solve ()
{
- vsize max_sys_count = max_system_count (end-1, end);
+ vsize end = last_break_position ();
+ vsize max_sys_count = max_system_count (0, end);
vsize first_page_num = robust_scm2int (book_->paper_->c_variable ("first-page-number"), 1);
- SCM forced_page_count = book_->paper_->c_variable ("page-count");
- set_to_ideal_line_configuration (end-1, end);
+ set_to_ideal_line_configuration (0, end);
Page_spacing_result best;
+ SCM forced_page_count = book_->paper_->c_variable ("page-count");
vsize page_count = robust_scm2int (forced_page_count, 1);
Line_division ideal_line_division = current_configuration (0);
Line_division best_division = ideal_line_division;
if (!scm_is_integer (forced_page_count))
{
+ /* find out the ideal number of pages */
+ message (_ ("Finding the ideal number of pages..."));
+
if (systems_per_page () > 0)
best = space_systems_with_fixed_number_per_page (0, first_page_num);
else
min_sys_count = page_count;
}
- if (page_count == 1 || scm_is_integer (forced_page_count))
- progress_indication (_f ("[%d: %d pages]", (int) end, (int) page_count));
+ if (page_count == 1)
+ message (_ ("Fitting music on 1 page..."));
+ else if (scm_is_integer (forced_page_count))
+ message (_f ("Fitting music on %d pages...", (int)page_count));
else
- progress_indication (_f ("[%d: %d or %d pages]", (int) end, (int) page_count-1, (int)page_count));
+ message (_f ("Fitting music on %d or %d pages...", (int)page_count-1, (int)page_count));
/* try a smaller number of systems than the ideal number for line breaking */
Line_division bound = ideal_line_division;
for (vsize sys_count = ideal_sys_count; --sys_count >= min_sys_count;)
{
Page_spacing_result best_for_this_sys_count;
- set_current_breakpoints (end-1, end, sys_count, Line_division (), bound);
+ set_current_breakpoints (0, end, sys_count, Line_division (), bound);
if (debug_page_breaking_scoring)
message (_f ("trying %d systems", (int)sys_count));
for (vsize sys_count = ideal_sys_count+1; sys_count <= max_sys_count; sys_count++)
{
Real best_demerits_for_this_sys_count = infinity_f;
- set_current_breakpoints (end-1, end, sys_count, bound);
+ set_current_breakpoints (0, end, sys_count, bound);
if (debug_page_breaking_scoring)
message (_f ("trying %d systems", (int)sys_count));
&& !(best.system_count_status_ & SYSTEM_COUNT_TOO_FEW))
break;
}
- break_into_pieces (end-1, end, best_division);
-
- return best.systems_per_page_;
-}
-
-SCM
-Optimal_page_breaking::solve ()
-{
- vector<vsize> systems_per_page;
-
- message (_f ("Solving %d page-breaking chunks...", last_break_position ()));
- for (vsize end = 1; end <= last_break_position (); ++end)
- {
- vector<vsize> chunk_systems = solve_chunk (end);
- systems_per_page.insert (systems_per_page.end (), chunk_systems.begin (), chunk_systems.end ());
- }
message (_ ("Drawing systems..."));
+ break_into_pieces (0, end, best_division);
SCM lines = systems ();
- return make_pages (systems_per_page, lines);
+ return make_pages (best.systems_per_page_, lines);
}
p1.systems_per_page_.push_back (p2.systems_per_page_[0]);
p1.force_.push_back (p2.force_[0]);
p1.penalty_ += p2.penalty_ - cached_line_details_[i].turn_penalty_;
+ p1.system_count_status_ |= p2.system_count_status_;
return p1;
}
#include "grob.hh"
#include "warn.hh"
-MAKE_SCHEME_CALLBACK (Rest_collision, force_shift_callback, 1);
-SCM
-Rest_collision::force_shift_callback (SCM smob)
-{
- Grob *them = unsmob_grob (smob);
- if (Note_column::has_rests (them))
- {
- Grob *collision = unsmob_grob (them->get_object ("rest-collision"));
-
- if (collision)
- {
- (void) collision->get_property ("positioning-done");
- }
- }
- return scm_from_double (0.0);
-}
-
MAKE_SCHEME_CALLBACK_WITH_OPTARGS (Rest_collision, force_shift_callback_rest, 2, 1, "");
SCM
Rest_collision::force_shift_callback_rest (SCM rest, SCM offset)
if (scm_is_number (offset))
rest_grob->translate_axis (scm_to_double (offset), Y_AXIS);
- if (Note_column::has_interface (parent))
- force_shift_callback (parent->self_scm ());
+ if (Note_column::has_interface (parent) && Note_column::has_rests (parent))
+ {
+ Grob *collision = unsmob_grob (parent->get_object ("rest-collision"));
+
+ if (collision)
+ (void) collision->get_property ("positioning-done");
+ }
return scm_from_double (0.0);
}
{
Pointer_group_interface::add_grob (me, ly_symbol2scm ("elements"), p);
- /*
- only add callback for the rests, since we don't move anything
- else.
-
- (not?)
- */
- add_offset_callback (p, Rest_collision::force_shift_callback_proc, Y_AXIS);
p->set_object ("rest-collision", me->self_scm ());
Grob *rest = unsmob_grob (p->get_object ("rest"));
Separation_item::conditional_skyline (Grob *me, Grob *left)
{
vector<Box> bs = boxes (me, left);
- return Skyline (bs, 0.1, Y_AXIS, LEFT);
+ return Skyline (bs, 0.0, Y_AXIS, LEFT);
}
Item *me = unsmob_item (smob);
vector<Box> bs = boxes (me, 0);
/* todo: the horizon_padding is somewhat arbitrary */
- return Skyline_pair (bs, 0.1, Y_AXIS).smobbed_copy ();
+ return Skyline_pair (bs, 0.0, Y_AXIS).smobbed_copy ();
}
/* if left is non-NULL, get the boxes corresponding to the
Interval extra_width = robust_scm2interval (elts[i]->get_property ("extra-spacing-width"),
Interval (-0.1, 0.1));
Interval extra_height = robust_scm2interval (elts[i]->get_property ("extra-spacing-height"),
- Interval (-0.1, 0.1));
+ Interval (0.0, 0.0));
x[LEFT] += extra_width[LEFT];
x[RIGHT] += extra_width[RIGHT];
y[DOWN] += extra_height[DOWN];
y[UP] += extra_height[UP];
-
+
if (!x.is_empty () && !y.is_empty ())
out.push_back (Box (x, y));
}
#include "staff-grouper-interface.hh"
#include "hara-kiri-group-spanner.hh"
+#include "page-layout-problem.hh"
#include "pointer-group-interface.hh"
Grob*
{
extract_grob_set (me, "elements", elts);
for (vsize i = elts.size (); i--;)
- if ((pure && !Hara_kiri_group_spanner::request_suicide (me, start, end))
- || (!pure && elts[i]->is_live ()))
+ if (Page_layout_problem::is_spaceable (elts[i])
+ && ((pure && !Hara_kiri_group_spanner::request_suicide (me, start, end))
+ || (!pure && elts[i]->is_live ())))
return elts[i];
return 0;
% Workaround: add padding. Correct fix would be spacing engine handle this.
\once \override BreathingSign #'extra-X-extent = #'(-1.0 . 0)
+ \once \override BreathingSign #'extra-spacing-height = #'(-0.5 . 0.5)
\breathe
}
(next-note . (extra-space . 0.5))
(right-edge . (extra-space . 0.5))))
(stencil . ,ly:clef::print)
+ (extra-spacing-height . (-0.5 . 0.5))
(Y-offset . ,ly:staff-symbol-referencer::callback)
(meta . ((class . Item)
(interfaces . (break-aligned-interface
(dot-count . ,dots::calc-dot-count)
(staff-position . ,dots::calc-staff-position)
(stencil . ,ly:dots::print)
+ (extra-spacing-height . (-0.5 . 0.5))
(meta . ((class . Item)
(interfaces . (dots-interface
font-interface
(head-direction . ,LEFT)
(stencil . ,laissez-vibrer::print)
(thickness . 1.0)
+ (extra-spacing-height . (-0.5 . 0.5))
(meta . ((class . Item)
(interfaces . (semi-tie-interface))))))
(head-direction . ,RIGHT)
(stencil . ,ly:tie::print)
(thickness . 1.0)
+ (extra-spacing-height . (-0.5 . 0.5))
(meta . ((class . Item)
(interfaces . (semi-tie-interface))))))
ly:note-head::print
ly:dots::print
ly:clef::print
+ ly:percent-repeat-item-interface::beat-slash
ly:text-interface::print
ly:script-interface::print))
(output-file (if multi-page? pngn png1))
(gs-variable-options
- (if multi-page?
- (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
- page-width page-height)
- "-dEPSCrop"))
+ ;; ps-page-count returns 0 for EPS files
+ (if (zero? page-count)
+ "-dEPSCrop"
+ (format #f "-dDEVICEWIDTHPOINTS=~,2f -dDEVICEHEIGHTPOINTS=~,2f"
+ page-width page-height)))
(cmd (ly:format "~a\
~a\
~a\