@end ignore
+@item
+The autobeaming settings syntax has been changed. beatLength,
+beatGrouping, beamSettings, and measureGrouping have all been eliminated.
+Autobeaming is now controlled by baseMoment, beatStructure, and
+beamExceptions. Default settings for each of these properties can be
+stored for any time signature in time-signature-settings, so that
+when the time signature is changed, the autobeaming will automatically
+change. The new syntax should be much easier and require fewer
+overrides.
+
@item
The SVG backend has optional support for
@uref{http://www.w3.org/Submission/WOFF, WOFF fonts}. Using the Scheme
@unnumberedsubsubsec Cross references
Enter the exact @code{@@node} name of the target reference between
-the brackets (eg.@tie{}@w{@samp{@@ref@{Syntax survey@}}}).
+the brackets (eg.@tie{}@w{@samp{@@ref@{Syntax survey@}}}). Do not
+split a cross-reference across two lines -- this causes the
+cross-reference to be rendered incorrectly in html documents.
@itemize
@item
where around-central-C is some function that is called from
make-autochange-music.
+@subheading More on context and music properties
+
+From Neil Puttock, in response to a question about transposition:
+
+Context properties (using \set & \unset) are tied to engravers: they
+provide information relevant to the generation of graphical objects.
+
+Since transposition occurs at the music interpretation stage, it has
+no direct connection with engravers: the pitch of a note is fixed
+before a notehead is created. Consider the following minimal snippet:
+
+@example
+@{ c' @}
+@end example
+
+This generates (simplified) a NoteEvent, with its pitch and duration
+as event properties,
+
+@example
+(make-music
+ 'NoteEvent
+ 'duration
+ (ly:make-duration 2 0 1 1)
+ 'pitch
+ (ly:make-pitch 0 0 0)
+@end example
+
+which the Note_heads_engraver hears. It passes this information on to
+the NoteHead grob it creates from the event, so the head's correct
+position and duration-log can be determined once it's ready for
+printing.
+
+If we transpose the snippet,
+
+@example
+\transpose c d @{ c' @}
+@end example
+
+the pitch is changed before it reaches the engraver (in fact, it
+happens just after the parsing stage with the creation of a
+TransposedMusic music object):
+
+@example
+(make-music
+ 'NoteEvent
+ 'duration
+ (ly:make-duration 2 0 1 1)
+ 'pitch
+ (ly:make-pitch 0 1 0)
+@end example
+
+You can see an example of a music property relevant to transposition:
+untransposable.
+
+@example
+\transpose c d @{ c'2 \withMusicProperty #'untransposable ##t c' @}
+@end example
+
+-> the second c' remains untransposed.
+
+Take a look at lily/music.cc to see where the transposition takes place.
+
+
@subheading How do I tell about the execution environment?
I get lost figuring out what environment the code I'm looking at is in when it
Die Definition von Muster für die Strichelung der Bindebögen hat
die gleiche Struktur wie die Definition für Legatobögen. Zu
weiterer Information zu komplizierten Strichelungsmustern, siehe
-die Schnipsel im Abschnitt @ref{Legatobögen}.
+die Schnipsel im Abschnitt @ref{Legatobögen}.
@predefined
@code{\tieUp},
@translationof Displaying rhythms
@menu
-* Taktangabe::
-* Auftakte::
-* Musik ohne Metrum::
-* Polymetrische Notation::
-* Automatische Aufteilung von Noten::
-* Melodierhythmus anzeigen::
+* Taktangabe::
+* Auftakte::
+* Musik ohne Metrum::
+* Polymetrische Notation::
+* Automatische Aufteilung von Noten::
+* Melodierhythmus anzeigen::
@end menu
@node Taktangabe
@cindex Gesangstext und Balken
@funindex autoBeaming
-@funindex beamSettings
+@funindex beatStructure
+@funindex beamExceptions
@funindex measureLength
-@funindex beatLength
+@funindex baseMoment
@funindex \time
@funindex time
@funindex \set
und @code{\revertBeamSettings}.
@lilypond[quote,relative=2,verbatim]
- \time 5/16
- c8^"beats" c16 c8 |
- \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
- c8^"(2+3)" c16 c8
- \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
- c8^"(3+2)" c16 c8
+\time 5/16
+c8^"beats" c16 c8 |
+\set beatStructure = #'(2 3)
+c8^"(2+3)" c16 c8
+\set beatStructure = #'(3 2)
+c8^"(3+2)" c16 c8
@end lilypond
Balkenregelveränderungen können auf bestimmte Kontexte beschränkt
@lilypond[quote, verbatim,relative=1]
\new Staff <<
\time 7/8
+ \set Staff.beatStructure = #'(2 3 2)
\new Voice = one {
\relative c'' {
- \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
a8 a a a a a a
}
}
\new Voice = two {
\relative c' {
\voiceTwo
- \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
+ \set Voice.beatStructure = #'(1 3 3)
f8 f f f f f f
}
}
% rhythm 3-1-1-2
% Context Voice specified -- does not work correctly
% Because of autogenerated voices, all beating will
-% be at beatLength (1 . 8)
-\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
+% be at baseMoment (1 . 8)
+\set beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
% Works correctly with context Staff specified
-\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
+\set Staff.beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\repeat unfold 16 {a16}
-% set default rule for (1 1 1 1) grouping
-\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
-\repeat unfold 16 {a16}
-% revert the new rule
-\revertBeamSettings #'Score #'(4 . 4) #'end
-\repeat unfold 16 {a16}
+\repeat unfold 8 {a8}
+% set beaming rule for ending all beams at (1 . 4)
+\set Timing.beamExceptions = #'()
+\repeat unfold 8 {a8}
+% go back to default behavior
+\time 4/4
+\repeat unfold 8 {a8}
@end lilypond
@funindex subdivideBeams
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
+{subdividing-beams.ly}
@cindex Taktgruppen
@cindex Schlaggruppen
@translationof Bars
@menu
-* Taktstriche::
-* Taktzahlen::
-* Takt- und Taktzahlüberprüfung::
-* Übungszeichen::
+* Taktstriche::
+* Taktzahlen::
+* Takt- und Taktzahlüberprüfung::
+* Übungszeichen::
@end menu
@node Taktstriche
@translationof Special rhythmic concerns
@menu
-* Verzierungen::
-* An Kadenzen ausrichten::
-* Verwaltung der Zeiteinheiten::
+* Verzierungen::
+* An Kadenzen ausrichten::
+* Verwaltung der Zeiteinheiten::
@end menu
@node Verzierungen
@snippets
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{dot-count-override.ly}
+{changing-the-number-of-augmentation-dots-per-note.ly}
@seealso
@cindex letra y barrado
@funindex autoBeaming
-@funindex beamSettings
+@funindex beamExceptions
+@funindex baseMoment
+@funindex beatStructure
@funindex measureLength
-@funindex beatLength
@funindex \time
@funindex time
@funindex \set
@lilypond[quote,relative=2,verbatim]
\time 5/16
c8^"beats" c16 c8 |
-\overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+\set beatStructure = #'(2 3)
c8^"(2+3)" c16 c8
-\overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+\set beatStructure = #'(3 2)
c8^"(3+2)" c16 c8
@end lilypond
más bajo, se aplican los ajustes del contexto circundante.
@lilypond[quote, verbatim,relative=1]
-\new Staff <<
+\new Staff {
\time 7/8
- \new Voice = one {
- \relative c'' {
- \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+ \set Staff.beatStructure = #'(2 3 2)
+ <<
+ \new Voice = one {
+ \relative c'' {
a8 a a a a a a
+ }
}
- }
- \new Voice = two {
- \relative c' {
- \voiceTwo
- \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
- f8 f f f f f f
+ \new Voice = two {
+ \relative c' {
+ \voiceTwo
+ \set Voice.beatStructure = #'(1 3 3)
+ f8 f f f f f f
+ }
}
- }
->>
+ >>
+}
@end lilypond
En caso de usar varias voces, se debe especificar el contexto
% rhythm 3-1-1-2
% Context Voice specified -- does not work correctly
% Because of autogenerated voices, all beating will
-% be at beatLength (1 . 8)
-\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
+% be at baseMoment (1 . 8)
+\set beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
% Works correctly with context Staff specified
-\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
+\set Staff.beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
\repeat unfold 8 {a8}
-% set default rule for (1 1 1 1) grouping
-\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+% set beaming rule for ending all beams at (1 . 4)
+\set Timing.beamExceptions = #'()
\repeat unfold 8 {a8}
-% revert the new rule
-\revertBeamSettings #'Score #'(4 . 4) #'end
+% go back to default beahavior
+\time 4/4
\repeat unfold 8 {a8}
@end lilypond
-
@predefined
@code{\overrideBeamSettings},
@code{\revertBeamSettings}.
@cindex barras, subdivisión
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
+{subdividing-beams.ly}
@cindex compás, agrupación
@cindex pulsos, agrupación
@noindent
La letra@tie{}@q{I} se salta de acuerdo con las tradiciones de
grabado. Si quiere incluir la letra @q{I}, use una de las
-instrucciones siguientes, según el estilo de marcas de
+instrucciones siguientes, según el estilo de marcas de
ensayo que desee (sólo letras, letras dentro de un rectángulo
o letras dentro de un círculo).
--- /dev/null
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
+
+ texidoces = "
+Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
+el espacio del usuario, con un grabador de Scheme.
+
+Esto es básicamente una reescritura en Scheme del código de
+@file{lily/ambitus-engraver.cc}.
+
+"
+
+ doctitlees = "Definir un grabador en Scheme: grabador de ámbito"
+++ /dev/null
-%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
-
- texidoces = "
-Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
-el espacio del usuario, con un grabador de Scheme.
-
-Esto es básicamente una reescritura en Scheme del código de
-@file{lily/ambitus-engraver.cc}.
-
-"
-
- doctitlees = "Definir un grabador en Scheme: grabador de ámbito"
escribir archivos de entrada de LilyPond.
Hay más información sobre la configuración de Emacs y de Vim en
-@rprogram{Text editor support}.
+@rprogram{Apoyo respecto de los editores de texto}.
@divEnd
@lilypond[quote,verbatim,ragged-right]
#(define (my-callback grob)
- (let* (
- ; have we been split?
- (orig (ly:grob-original grob))
+ (let* (
+ ;; have we been split?
+ (orig (ly:grob-original grob))
- ; if yes, get the split pieces (our siblings)
- (siblings (if (ly:grob? orig)
- (ly:spanner-broken-into orig) '() )))
+ ;; if yes, get the split pieces (our siblings)
+ (siblings (if (ly:grob? orig)
+ (ly:spanner-broken-into orig)
+ '())))
- (if (and (>= (length siblings) 2)
- (eq? (car (last-pair siblings)) grob))
- (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
+ (if (and (>= (length siblings) 2)
+ (eq? (car (last-pair siblings)) grob))
+ (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
\relative c'' {
\override Tie #'after-line-breaking =
#my-callback
- c1 ~ \break c2 ~ c
+ c1 ~ \break
+ c2 ~ c
}
@end lilypond
@noindent
When applying this trick, the new @code{after-line-breaking} callback
-should also call the old one @code{after-line-breaking}, if there is
-one. For example, if using this with @code{Hairpin},
-@code{ly:hairpin::after-line-breaking} should also be called.
+should also call the old one, if such a default exists. For example,
+if using this with @code{Hairpin}, @code{ly:spanner::kill-zero-spanned-time}
+should also be called.
-@item Some objects cannot be changed with @code{\override} for
+@item
+Some objects cannot be changed with @code{\override} for
technical reasons. Examples of those are @code{NonMusicalPaperColumn}
and @code{PaperColumn}. They can be changed with the
@code{\overrideProperty} function, which works similar to @code{\once
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
+ Translation of GIT committish: a02ca233bc1a2af11980d8eab1e874c559cdff09
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@lilypondfile[quote]{expressive-headword.ly}
+Ce chapitre traite des différentes indications d'interprétation que l'on
+peut trouver sur les partitions.
+
@menu
* Indications attachées à des notes::
* Courbes::
@translationof Attached to notes
Nous allons voir au cours de ces lignes comment ajouter aux notes des
-indications d'interprétation -- articulation, ornementation, nuances --
+indications d'interprétation -- articulation, ornementation, nuance --
et aborderons la manière de générer vos propres signes.
@menu
@cindex coda
@cindex varcoda
+@funindex \accent
+@funindex \marcato
+@funindex \staccatissimo
+@funindex \espressivo
+@funindex \staccato
+@funindex \tenuto
+@funindex \portato
+@funindex \upbow
+@funindex \downbow
+@funindex \flageolet
+@funindex \thumb
+@funindex \lheel
+@funindex \rheel
+@funindex \ltoe
+@funindex \rtoe
+@funindex \open
+@funindex \halfopen
+@funindex \stopped
+@funindex \snappizzicato
+@funindex \turn
+@funindex \reverseturn
+@funindex \trill
+@funindex \prall
+@funindex \mordent
+@funindex \prallprall
+@funindex \prallmordent
+@funindex \upprall
+@funindex \downprall
+@funindex \upmordent
+@funindex \downmordent
+@funindex \pralldown
+@funindex \prallup
+@funindex \lineprall
+@funindex \signumcongruentiae
+@funindex \shortfermata
+@funindex \fermata
+@funindex \longfermata
+@funindex \verylongfermata
+@funindex \fermataMarkup
+@funindex \segno
+@funindex \coda
+@funindex \varcoda
@funindex -
Les différents symboles qui indiquent des ponctuations ou des modes de
@end example
Les valeurs de @var{nom} sont répertoriées dans l'annexe
-@ref{Liste des signes d'articulation}. En voici un exemple :
+@ref{Liste des signes d'articulation}. En voici un exemple@tie{}:
@lilypond[verbatim,quote,relative=2]
c4\staccato c\mordent b2\turn
l'obliger à les positionner au-dessus ou en-dessous de la note, comme
indiqué au chapitre @ref{Direction et positionnement}.
+Les articulations sont des objets de type @code{script}@tie{}; les
+propriétés de ces objets sont abordées plus en détail au chapitre
+@rinternals{Script}.
+
+Une articulation peut se rattacher aussi bien à un silence qu'à une
+note, mais @strong{pas à un silence multi-mesures}. Il existe cependant
+un cas particulier@tie{}: le point d'orgue -- ou point d'arrêt --
+attaché à un silence valant l'intégralité de la mesure. LilyPond
+dispose à cet effet de la commande @code{\fermataMarkup}, qui créera un
+objet @code{MultiMeasureRestText} rattaché à ce @qq{silence
+multi-mesures}.
+
+@lilypond[verbatim,quote,relative=2]
+\override Script #'color = #red
+\override MultiMeasureRestText #'color = #blue
+a2\fermata r\fermata
+R1\fermataMarkup
+@end lilypond
+
+En dehors des articulations habituelles, vous pouvez adjoindre du texte
+-- avec ou sans mise en forme -- à n'importe quelle note. Voir à ce
+propos @ref{Commentaires textuels}.
+
+Pour plus d'information sur la manière d'ordonner @code{Scripts} et
+@code{TextScripts}, consultez le chapitre
+@rlearning{Positionnement des objets}.
@snippets
@rglos{staccato},
@rglos{portato}.
+Manuel d'initiation :
+@rlearning{Positionnement des objets}.
+
Manuel de notation :
+@ref{Commentaires textuels},
@ref{Direction et positionnement},
@ref{Liste des signes d'articulation},
@ref{Trilles}.
@funindex \rfz
@funindex rfz
-À chaque nuance absolue correspond une commande, qui peut être indiquée
-après une note : @code{c4\ff} par exemple. Les commandes de nuance
+À chaque nuance absolue correspond une commande qui peut être indiquée
+après une note@tie{}: @code{c4\ff} par exemple. Les commandes de nuance
disponibles sont @code{\ppppp}, @code{\pppp}, @code{\ppp}, @code{\pp},
@code{\p}, @code{\mp}, @code{\mf}, @code{\f}, @code{\ff}, @code{\fff},
@code{\ffff}, @code{\fffff}, @code{\fp}, @code{\sf}, @code{\sff},
@code{\sp}, @code{\spp}, @code{\sfz}, et @code{\rfz}. Les nuances se
-placent aussi bien en dessous qu'au-dessus de la portée ; pour plus
+placent aussi bien en dessous qu'au-dessus de la portée@tie{}; pour plus
d'information, consultez @ref{Direction et positionnement}.
@lilypond[verbatim,quote,relative=2]
@funindex decr
Un crescendo est délimité par @code{\<} et @code{\!}, ou peut se
-terminer par une commande de nuance. Au lieu de @code{\<}
-ou @code{\>}.
+terminer par une commande de nuance explicite, ou bien un decrescendo ou un
+nouveau crescendo. Il en va de même pour un diminuendo. Au lieu de @code{\<}
+et @code{\>}, vous pouvez utiliser @code{\cr} et @code{\decr}, auquele
+cas LilyPond n'imprimera pas de @emph{soufflet}.
@lilypond[verbatim,quote,relative=2]
c2\< c\!
c1\!
@end lilypond
-Ces indications sont attachées aux notes ; aussi si l'on veut
+Ces indications sont attachées aux notes@tie{}; aussi si l'on veut
faire se succéder plusieurs nuances pendant une note tenue, il faudra
-avoir recours à des silences invisibles :
+avoir recours à des silences invisibles@tie{}:
@cindex nuances successives sur une note tenue
@cindex tenue et nuances successives
Sont disponibles les commandes @code{\crescTextCresc},
@code{\dimTextDecresc}, @code{\dimTextDecr}, et @code{\dimTextDim}.
@code{\crescHairpin} et @code{\dimHairpin} permettent de revenir à des
-nuances en soufflet
+nuances en soufflet.
@lilypond[verbatim,quote,relative=2]
\crescTextCresc
syntaxe en est abordée au chapitre @ref{Mise en forme du texte}.
@lilypond[verbatim,quote]
-roundF = \markup { \center-align \concat { \bold { \italic ( }
+roundF = \markup {
+ \center-align \concat { \bold { \italic ( }
\dynamic f \bold { \italic ) } } }
boxF = \markup { \bracket { \dynamic f } }
\relative c' {
}
@end lilypond
-@code{make-dynamic-script} accepte en argume tout objet de type
+@code{make-dynamic-script} accepte en argument tout objet de type
@emph{markup}. Notez bien que la police des nuances ne contient que les
caractères @code{f,m,p,r,s} et @code{z}, et que les marques de nuances
possèdent des propriétés particulières et prédéfinies quant à leur
propriétés. L'intérêt majeur de recourrir à la fonction
@code{make-dynamic-script} plutôt qu'à un simple @emph{markup} réside
dans l'assurance que ces objets personnalisés et les soufflets seront
-alignés lorsque attachés à une même note.
+alignés lorsqu'attachés à une même note.
@lilypond[verbatim,quote]
roundF = \markup { \center-align \concat {
@end lilypond
La constrution d'une indication de nuance personnalisée peut aussi se
-faire en langage Scheme ; voir @ref{Construction Scheme d'un marqueur}
+faire en langage Scheme@tie{}; voir @ref{Construction Scheme d'un marqueur}
pour en connaître les modalités.
@lilypond[verbatim,quote]
@seealso
Manuel de notation :
@ref{Mise en forme du texte},
-@ref{Sélection de la fonte et de la taille},
@ref{Construction Scheme d'un marqueur},
@ref{Contenu de la sortie MIDI},
@ref{Gestion des nuances en MIDI}.
Morceaux choisis :
@rlsr{Expressive marks}.
+Manuel d'extension :
+@rextend{Sélection de la fonte et de la taille},
+
@node Courbes
@subsection Courbes
@funindex slurSolid
Une liaison est par défaut dessinée d'une ligne pleine. Il est aussi
-possible de l'imprimer sous la forme de tirets ou en pointillé :
+possible de l'imprimer sous la forme de tirets ou en pointillé@tie{}:
@lilypond[verbatim,quote,relative=1]
c4( e g2)
@cindex liaison, densité des tirets
-Vous pouvez même personnaliser la densité des tirets d'une liaison :
+Vous pouvez même personnaliser la densité des tirets d'une liaison@tie{}:
@lilypond[verbatim,quote,relative=1]
c4( e g2)
@cindex liaisons de phrasé
@cindex phrasé, liaisons de
+@funindex \(
+@funindex \)
+
Une liaison de phrasé relie plusieurs notes en délimitant une phrase
musicale. On indique les points de départ et d'arrivée avec @code{\(}
et @code{\)} respectivement.
@funindex phrasingSlurSolid
Une liaison est par défaut dessinée d'une ligne pleine. Il est aussi
-possible de l'imprimer sous la forme de tirets ou en pointillé :
+possible de l'imprimer sous la forme de tirets ou en pointillé@tie{}:
@lilypond[verbatim,quote,relative=1]
c4\( e g2\)
@cindex liaison, densité des tirets
-Vous pouvez même personnaliser la densité des tirets d'une liaison :
+Vous pouvez même personnaliser la densité des tirets d'une liaison@tie{}:
@lilypond[verbatim,quote,relative=1]
c4\( e g2\)
@translationof Breath marks
@cindex respiration, indication
+@cindex point d'arrêt
@funindex \breathe
@funindex breathe
c2. \breathe d4
@end lilypond
+Un signe de respiration interrompt obligatoirement les ligatures, même
+automatiques. Pour passer outre ce fonctionnement, voir
+@ref{Ligatures manuelles}.
+
+@lilypond[verbatim,quote,relative=2]
+c8 \breathe d e f g2
+@end lilypond
+
LilyPond gère les @emph{divisiones}, signes utilisés en notation
-ancienne pour indiquer les respirations. Pour de plus amples détails,
+ancienne pour indiquer les respirations. Pour de plus amples détails,
voir @ref{Divisions}.
@rlsr{Expressive marks}.
Référence des propriétés internes :
-@rinternals{BreathingSign}.
+@rinternals{BreathingEvent},
+@rinternals{BreathingSign},
+@rinternals{Breathing_sign_engraver}.
@node Chutes et sauts
@lilypond[verbatim,quote,relative=2]
c2-\bendAfter #+4
c2-\bendAfter #-4
+c2-\bendAfter #+6.5
+c2-\bendAfter #-6.5
c2-\bendAfter #+8
c2-\bendAfter #-8
@end lilypond
@funindex arpeggioNormal
On peut indiquer qu'un accord doit être arpégé en lui accolant la
-commande @code{\arpeggio} :
+commande @code{\arpeggio}@tie{}:
@lilypond[verbatim,quote,relative=1]
<c e g c>1\arpeggio
@funindex \arpeggioParenthesisDashed
@funindex arpeggioParenthesisDashed
-Des crochets indiquent que l'accord devra être plaqué et non arpégé :
+Des crochets indiquent que l'accord devra être plaqué et non arpégé@tie{}:
@lilypond[verbatim,quote,relative=1]
<c e g c>2
<c e g c>2\arpeggio
@end lilypond
-@c pas trouvé cette propriété, ou alors mal lu ? jcm
-@c The dash properties of the parenthesis arpeggio are controlled
-@c with the @code{'dash-details} property, which is described at @ref{Slurs}.
+Les indications d'arpeggio peuvent se présenter sous la forme de ligne
+discontinue à l'aide de la propriété @code{'dash-details}. Pour plus
+de détails à ce propos, consultez @ref{Liaisons d'articulation}.
Un arpège peut parfois s'écrire de manière explicite, à l'aide de
liaisons de tenue. Pour plus d'information, voir
@funindex stopTrillSpan
Les trilles brefs s'indiquent comme n'importe quelle ponctuation, avec un
-simple @code{\trill} ; voir @ref{Articulations et ornements}.
+simple @code{\trill}@tie{}; voir @ref{Articulations et ornements}.
Les trilles plus longs sont délimités par @code{\startTrillSpan} et
-@code{\stopTrillSpan} :
+@code{\stopTrillSpan}@tie{}:
@lilypond[verbatim,quote,relative=2]
-d1~\startTrillSpan
+d1\startTrillSpan
+d1
+c2\stopTrillSpan r2
+@end lilypond
+
+Lorsqu'un saut de ligne intervient alors qu'une prolongation de trille
+est présente, l'indication de trille et sa prolongation sont rappellées
+sur la première note de la nouvelle ligne@tie{}:
+
+@lilypond[ragged-right,verbatim,quote,relative=2]
+d1\startTrillSpan
+\break
d1
c2\stopTrillSpan r2
@end lilypond
+Lorsque des trilles interviennent sur une succession de hauteurs
+différentes, point n'est besoin d'expliciter la commande
+@code{\stopTrillSpan} puisque l'apparition d'un nouveau trille
+interrompt de fait celui qui le précédait@tie{}:
+
+@lilypond[verbatim,quote,relative=2]
+d1\startTrillSpan
+d1
+b1\startTrillSpan
+d2\stopTrillSpan r2
+@end lilypond
+
Dans l'exemple suivant, un trille se combine avec des notes d'ornement.
La syntaxe d'une telle construction ainsi que le moyen de positionner
les notes d'ornement avec précision est expliquée dans
@ref{Notes d'ornement}.
@lilypond[verbatim,quote,relative=2]
-c1 \afterGrace
+d1~\afterGrace
d1\startTrillSpan { c32[ d]\stopTrillSpan }
e2 r2
@end lilypond
Les trilles qui font intervenir une hauteur précise peuvent être
indiqués par la commande @code{pitchedTrill}. Le premier argument est
-la note réelle ; le second est une hauteur qui sera imprimée comme une
-tête de note noire entre parenthèses.
+la note réelle@tie{}; le second est une hauteur qui sera imprimée comme
+une tête de note noire entre parenthèses.
-@lilypond[verbatim,quote,relative=1]
-\pitchedTrill e2\startTrillSpan fis
-d\stopTrillSpan
+@lilypond[verbatim,quote,relative=2]
+\pitchedTrill
+e2\startTrillSpan fis
+d2 c2\stopTrillSpan
@end lilypond
@cindex trilles avec hauteur explicite et altération
@cindex altération, trilles avec hauteur explicite
-Dans l'exemple suivant, le deuxième trille est ambigu -- le fa qui est
-forcé n'est pas diésé. Pour lever toute ambiguité, il suffit de forcer
-l'impression de l'altération -- en ajoutant un @code{!} -- comme dans
-la deuxième mesure.
+Dans l'exemple suivant, le second trille de la deuxième mesure est
+ambigu -- le fa qui est forcé n'est pas diésé. Pour lever toute
+ambiguïté, il suffit de forcer l'impression de l'altération en
+ajoutant un @code{!} à la note considérée.
@lilypond[verbatim,quote,relative=2]
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis!
-g\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan cis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis!
+eis4\stopTrillSpan
@end lilypond
et de mesure.
@menu
-* Écriture du rythme::
-* Écriture des silences::
-* Gravure du rythme::
-* Barres de ligature::
-* Mesures::
-* Fonctionnalités rythmiques particulières::
+* Écriture du rythme::
+* Écriture des silences::
+* Gravure du rythme::
+* Barres de ligature::
+* Mesures::
+* Fonctionnalités rythmiques particulières::
@end menu
@translationof Writing rhythms
@menu
-* Durées::
-* Nolets::
-* Changement d'échelle des durées::
-* Liaisons de prolongation::
+* Durées::
+* Nolets::
+* Changement d'échelle des durées::
+* Liaisons de prolongation::
@end menu
@node Durées
Une note dont la durée est de quatre brèves s'obtient par la commande
@code{\maxima}. Celle-ci n'est toutefois disponible que dans le cadre de
-la notation ancienne. Pour plus de détails, voir @ref{Notations anciennes}.
+la notation ancienne. Pour plus de détails, voir @ref{Notations anciennes}.
@cindex durée par défaut
@cindex défaut, durée
@ref{Liaisons de prolongation} à ce sujet.
Quant à la manière de spécifier la durée des syllabes ou bien d'aligner
-des paroles par rapport aux notes, reportez-vous au chapitre
+des paroles par rapport aux notes, reportez-vous au chapitre
@ref{Musique vocale}.
-Espacer les notes selon leur durée relative est tout à fait possible.
+Espacer les notes selon leur durée relative est tout à fait possible.
Pour plus de détails à ce sujet et sur les autres réglages propres à
cette forme de notation, reportez-vous à @ref{Notation proportionnelle}.
@knownissues
@c Deliberately duplicated in Durations and Rests. -gp
-Il n'existe pas à proprement parler de limite (inférieure ou supérieure)
-en terme de durée d'un silence. Cependant, le nombre de glyphes
+Il n'existe pas à proprement parler de limite (inférieure ou supérieure)
+en terme de durée d'un silence. Cependant, le nombre de glyphes
disponibles ne couvre que les silences allant du trente-deuxième de
soupir à la maxime (valant huit pauses).
@noindent
La durée de @var{expression_musicale} sera multipliée par la fraction.
Le dénominateur de cette fraction sera imprimé au-dessus ou au-dessous
-des notes, parfois avec un crochet. Le nolet le plus courant est le
-triolet, dans lequel 3 notes ont la durée de 2, et où les notes durent
+des notes, parfois avec un crochet. Le nolet le plus courant est le
+triolet, dans lequel 3 notes ont la durée de 2, et où les notes durent
donc 2/3 de leur valeur écrite.
@lilypond[quote,verbatim,relative=2]
Des commandes prédéfinies permettent de déroger au positionnement
automatique du crochet en surplomb ou au-dessous des notes -- voir le
-chapitre @ref{Direction et positionnement}.
+chapitre @ref{Direction et positionnement}.
Les nolets peuvent être imbriqués ; par exemple,
\autoBeamOff
c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 |
@end lilypond
-
+
Lorsque, dans une imbrication, les nolets débutent au même instant, il
vous faut recourir à la commande @code{\tweak}.
@rglos{tuplet},
@rglos{polymetric}.
-Manuel d'apprentissage :
+Manuel d'apprentissage :
@rlearning{Méthodes de retouche}.
Manuel de notation :
@noindent
Les liaisons de tenue sont utilisées soit lorsque la note dépasse de la
-mesure, soit quand les points ne suffisent pas à donner la bonne durée.
+mesure, soit quand les points ne suffisent pas à donner la bonne durée.
Lorsque l'on utilise ces liaisons, les valeurs rythmiques les plus
longues doivent s'aligner sur les subdivisions de la mesure, comme ici :
@rglos{tie},
@rglos{laissez vibrer}.
-Dans ce manuel :
+Dans ce manuel :
@ref{Découpage automatique des notes}.
Morceaux choisis :
@translationof Writing rests
On saisit les silences dans une expression musicale tout comme les
-notes.
+notes.
@menu
-* Silences::
-* Silences invisibles::
-* Silences valant une mesure::
+* Silences::
+* Silences invisibles::
+* Silences valant une mesure::
@end menu
@node Silences
@end lilypond
La commande de saut génère simplement une case musicale vide. Le code
-de saut @code{s} crée tout de même les contextes @code{Staff} et
-@code{Voice} lorsque nécessaire, à l'instar des notes ou des silences :
-
+de saut @code{s} crée tout de même les contextes @code{Staff} et
+@code{Voice} lorsque nécessaire, à l'instar des notes ou des silences :
+
@lilypond[quote,verbatim,fragment]
s1 s s
@end lilypond
Un @code{\skip} ne fait que sauter du temps musical ; il ne produit rien
-du tout, pas même un symbole transparent.
+du tout, pas même un symbole transparent.
@lilypond[quote,verbatim,fragment]
% This is valid input, but does nothing
@funindex R
Un silence valant une ou plusieurs mesures entières s'entre avec un
-@code{R} majuscule.
+@code{R} majuscule.
@lilypond[quote,verbatim,relative=2]
% Rest measures contracted to single measure
@funindex \fermataMarkup
@funindex fermataMarkup
@funindex MultiMeasureRestText
-
+
Vous pouvez aussi ajouter du texte à un silence multimesure en utilisant
la syntaxe @var{note}-@code{markup} (cf. @ref{Mise en forme du texte}). La
variable @code{\fermataMarkup} quant à elle permet d'ajouter un point
de doigt (4) risquant de chevaucher le nombre de mesures à compter (10).
@cindex condenser les silences
-@cindex silences, condenser les
+@cindex silences, condenser les
-Condenser plusieurs silences en un unique silence multimesure ne peut
-être automatisé.
+Condenser plusieurs silences en un unique silence multimesure ne peut
+être automatisé.
@cindex silences, collisions entre
Les silences multimesure peuvent générer des collisions avec d'autres
-silences.
+silences.
@node Gravure du rythme
@translationof Displaying rhythms
@menu
-* Métrique::
-* Levées::
-* Musique sans métrique::
-* Notation polymétrique::
-* Découpage automatique des notes::
-* Gravure de lignes rythmiques::
+* Métrique::
+* Levées::
+* Musique sans métrique::
+* Notation polymétrique::
+* Découpage automatique des notes::
+* Gravure de lignes rythmiques::
@end menu
@node Métrique
est modifiée. Si cette modification intervient au niveau d'un saut de
ligne, une métrique @qq{de précaution} sera imprimée avant de passer à
la ligne suivante. Ce comportement par défaut peut être modifié, comme
-indiqué au chapitre @ref{Visibilité des objets}.
+indiqué au chapitre @ref{Visibilité des objets}.
@lilypond[quote,verbatim,relative=2]
\time 2/4
@end lilypond
-Les métriques anciennes sont abordées au chapitre
+Les métriques anciennes sont abordées au chapitre
@ref{Métriques anciennes}.
Références internes :
@rinternals{TimeSignature},
@rinternals{Timing_translator}.
-
-
+
+
@node Levées
@unnumberedsubsubsec Levées
@translationof Upbeats
@knownissues
-@code{\partial} n'est destiné à être utilisé qu'en début de pièce.
+@code{\partial} n'est destiné à être utilisé qu'en début de pièce.
Si on l'utilise ailleurs qu'au début, des messages d'erreurs peuvent
s'afficher.
une même métrique aux différentes portées. L'indicateur de métrique sera
ensuite remplacé dans chacune des portées par un quotient donné en
argument à la propriété @code{timeSignatureFraction}. La durée des
-notes sera enfin proratisée selon la métrique commune (voir
+notes sera enfin proratisée selon la métrique commune (voir
@ref{Métrique}) grâce à la fonction @code{\scaleDurations}, qui
s'utilise tout comme la commande @code{\times} -- sans toutefois créer
de crochet de nolet (voir @ref{Changement d'échelle des durées}).
@cindex polymétrie et ligature
L'exemple suivant utilise parallèlement des mesures à 3/4, 9/8 et
-10/8. Pour la deuxième portée les durées sont multipliées par 2/3
+10/8. Pour la deuxième portée les durées sont multipliées par 2/3
de telle sorte que @w{2/3 * 9/8 = 3/4} ; pour la troisième elles sont
multipliées par 3/5, de telle sorte que @w{3/5 * 10/8 = 3/4}. Les
ligatures devront être explicites, la fonction d'échelonnement venant
@translationof Beams
@menu
-* Barres de ligature automatiques::
-* Définition des règles de ligature automatique::
-* Barres de ligature manuelles::
-* Liens de croches en soufflet::
+* Barres de ligature automatiques::
+* Définition des règles de ligature automatique::
+* Barres de ligature manuelles::
+* Liens de croches en soufflet::
@end menu
@node Barres de ligature automatiques
@end lilypond
Lorsque ce comportement automatisé n'est pas satisfaisant, on peut
-définir des groupements manuellement -- voir
+définir des groupements manuellement -- voir
@ref{Barres de ligature manuelles}. Dans le cas où le groupe de notes
en question contient un silence, il est @strong{impératif} d'indiquer
explicitement les début et fin de la ligature.
@cindex paroles et ligatures
@funindex autoBeaming
-@funindex beamSettings
+@funindex beamExceptions
+@funindex baseMoment
+@funindex beatStructure
@funindex measureLength
-@funindex beatLength
@funindex \time
@funindex time
@funindex \set
sinon
@item si une règle explicite de terminaison a été définie pour un type
-de ligature dans la métrique en cours, c'est elle qui s'appliquera ; sinon
+de ligature dans la métrique en cours, c'est elle qui s'appliquera ; sinon
@item if a default beam-ending rule is defined in the time signature,
use it to group notes with beams, otherwise
Les règles de ligature et de subdivision sont enregistrées dans la
propriété @code{beamSettings}. Ses valeurs par défaut, rangées par
métrique et type de règle, sont contenues dans le fichier
-@code{scm/@/beam@/-settings@/.scm}.
+@code{scm/@/beam@/-settings@/.scm}.
La métrique est constituée d'une paire en langage Scheme -- p.ex.
@w{@code{#'(4 . 4)}}.
Chaque règle, qu'il s'agisse de terminaison ou de subdivision, est
constituée d'une liste de paires en langage Scheme (un @emph{alist} pour
-les puristes), qui indique le durée de base et sa règle de regroupement.
+les puristes), qui indique le durée de base et sa règle de regroupement.
@example
#'((durée-type1 . groupement-1)
@var{durée-type} est soit constitué d'une paire indiquant la durée de
base -- par exemple @w{@code{(1 . 16)}}, soit du caractère @code{*} pour
indiquer une règle par défaut qui s'appliquera à toutes les ligatures en
-l'absence de règle explicite.
+l'absence de règle explicite.
@var{groupement} est constitué d'une liste Scheme qui indique le
regroupement à effectuer. En ce qui concerne les règles par défaut --
celles où la durée type est @code{*} -- le regroupement s'indique
en terme de @code{beatLength} ; pour les règles explicites, en durée
-type.
+type.
-Les règles de ligature automatique se modifient à l'aide des commandes
+Les règles de ligature automatique se modifient à l'aide des commandes
@code{\overrideBeamSettings} et @code{\revertBeamSettings}.
@lilypond[quote,relative=2,verbatim]
- \time 5/16
- c8^"beats" c16 c8 |
- \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
- c8^"(2+3)" c16 c8
- \overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
- c8^"(3+2)" c16 c8
+\time 5/16
+c8^"beats" c16 c8 |
+\set beatStructure = #'(2 3)
+c8^"(2+3)" c16 c8
+\set beatStructure = #'(3 2)
+c8^"(3+2)" c16 c8
@end lilypond
Les effets de règles de ligature peuvent être restreints à un contexte
supérieur s'appliqueront.
@lilypond[quote, verbatim,relative=1]
-\new Staff <<
+\new Staff {
\time 7/8
- \new Voice = one {
- \relative c'' {
- \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+ \set Staff.beatStructure = #'(2 3 2)
+ <<
+ \new Voice = one {
+ \relative c'' {
a8 a a a a a a
+ }
}
- }
- \new Voice = two {
- \relative c' {
- \voiceTwo
- \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
- f8 f f f f f f
+ \new Voice = two {
+ \relative c' {
+ \voiceTwo
+ \set Voice.beatStructure = #'(1 3 3)
+ f8 f f f f f f
+ }
}
- }
->>
+ >>
+}
@end lilypond
Lorsque plusieurs voix cohabitent sur une même portée et que les règles
@lilypond[quote,verbatim,relative=2]
\time 7/8
% rhythm 3-1-1-2
-% Context Voice specified - does not work correctly
+% Context Voice specified -- does not work correctly
% Because of autogenerated voices, all beating will
-% be at beatLength (1 . 8)
-\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
+% be at baseMoment (1 . 8)
+\set beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
% Works correctly with context Staff specified
-\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
+\set Staff.beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\repeat unfold 16 {a16}
-% set default rule for (1 1 1 1) grouping
-\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
-\repeat unfold 16 {a16}
-% revert the new rule
-\revertBeamSettings #'Score #'(4 . 4) #'end
-\repeat unfold 16 {a16}
+\repeat unfold 8 {a8}
+% set beaming rule for ending all beams at (1 . 4)
+\set Timing.beamExceptions = #'()
+\repeat unfold 8 {a8}
+% go back to default beahavior
+\time 4/4
+\repeat unfold 8 {a8}
@end lilypond
@snippets
@cindex beams, subdividing
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
+{subdividing-beams.ly}
@cindex measure groupings
@cindex beats, grouping
s'applique qu'une seule fois, après quoi sa définition est effacée.
Dans l'exemple qui suit, le dernier @code{fa} n'a de ligature
supplémentaire que sur sa gauche ; autrement dit, c'est la ligature à la
-croche qui est importante.
+croche qui est importante.
@lilypond[quote,relative=2,verbatim]
a8[ r16 f g a]
@noindent
Si le résultat imprimable ne reflète les durées que de manière
approximative, la sortie MIDI sera quant à elle parfaitement
-@qq{ponctuelle}.
+@qq{ponctuelle}.
@knownissues
@menu
-* Barres de mesure::
-* Numéros de mesure::
-* Vérification des limites et numéros de mesure::
-* Indications de repère::
+* Barres de mesure::
+* Numéros de mesure::
+* Vérification des limites et numéros de mesure::
+* Indications de repère::
@end menu
@node Barres de mesure
Ceci insérera une barre de mesure invisible, et permettra -- sans pour
autant le forcer -- de sauter de ligne à cet endroit, sans incrémenter
le numéro de mesure. Pour forcer le saut de ligne, référez-vous à
-@ref{Sauts de ligne}.
+@ref{Sauts de ligne}.
@cindex manuelle, barre de mesure
@cindex barre de mesure manuelle
insérée automatiquement. Dans le cas contraire, la barre spécifiée
s'insérera là où vous l'aurez positionnée. Ces insertions n'affectent
en rien le calcul du positionnement automatique des barres de mesure à
-suivre.
+suivre.
Vous disposez de deux types de barres simples et de cinq différentes
doubles barres :
@cindex barre de mesure par défaut, modification du style
-@cindex modification du style par défaut des barres de mesure
+@cindex modification du style par défaut des barres de mesure
@snippets
@funindex bartype
-La commande @code{\bar }@var{type_de_barre} sert de raccourci pour
+La commande @code{\bar }@var{type_de_barre} sert de raccourci pour
@code{\set Timing.whichBar = }@var{type_de_barre}. Dès que l'on définit
@code{whichBar}, une barre de mesure est créée selon le style défini.
-Le type de barre de mesure par défaut utilisé pour l'insertion
+Le type de barre de mesure par défaut utilisé pour l'insertion
automatique est @code{"|"}. Vous pouvez en changer à tout moment grâce
à @code{\set@tie{}Timing.defaultBarType@tie{}=@tie{}}@var{type_de_barre}.
@seealso
-Dans ce manuel :
-@ref{Sauts de ligne},
-@ref{Répétitions et reprises},
+Dans ce manuel :
+@ref{Sauts de ligne},
+@ref{Répétitions et reprises},
@ref{Regroupement de portées}.
Morceaux choisis :
@rlsr{Rhythms}.
-Référence du programme :
-@rinternals{BarLine} (faisant partie du contexte @rinternals{Staff}),
+Référence du programme :
+@rinternals{BarLine} (faisant partie du contexte @rinternals{Staff}),
@rinternals{SpanBar} (sur plusieurs portées),
@rinternals{Timing_translator} (pour les propriétés liées au temps).
Morceaux choisis :
@rlsr{Rhythms}.
-Référence du programme :
+Référence du programme :
@rinternals{BarNumber}.
@seealso
-Dans ce manuel :
+Dans ce manuel :
@ref{La fonte Feta},
@ref{Mise en forme du texte}.
-Fichiers d'initialisation :
+Fichiers d'initialisation :
@file{scm/@/translation@/-functions@/.scm} contient les définitions de
@code{format-mark-numbers} et @code{format-mark-letters}. Elles seront
source d'inspiration pour d'autres fonctions de formatage.
-Morceaux choisis :
+Morceaux choisis :
@rlsr{Rhythms}.
-Référence du programme :
+Référence du programme :
@rinternals{RehearsalMark}.
@menu
-* Notes d'ornement::
-* Alignement et cadences::
-* Gestion du temps::
+* Notes d'ornement::
+* Alignement et cadences::
+* Gestion du temps::
@end menu
@node Notes d'ornement
@rglos{acciaccatura},
@rglos{appoggiatura}.
-Fichiers source :
+Fichiers source :
@file{ly/@/grace@/-init@/.ly}.
-Morceaux choisis :
+Morceaux choisis :
@rlsr{Rhythms}.
-Référence du programme :
+Référence du programme :
@rinternals{GraceMusic}.
spécifique. Lors du montage d'une partition contenant une cadence,
tous les autres instruments doivent sauter autant de notes que ce
qu'en comporte la cadence, faute de quoi ils démarreraient trop tôt ou
-trop tard.
+trop tard.
Les fonctions @code{mmrest-of-length} ou @code{skip-of-length}
permettent de résoudre ce problème. Ces fonctions Scheme prennent en
@seealso
-Dans ce manuel :
-@ref{Numéros de mesure},
+Dans ce manuel :
+@ref{Numéros de mesure},
@ref{Musique sans métrique}
Morceaux choisis :
@c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*-
@ignore
- Translation of GIT committish: 68cf70682a542701a918f8bfff50f2b8b85f84e2
+ Translation of GIT committish: 7c9a0da142b6037180d557f12ba1ada366226606
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Music Conference 2008.
@item
-A. Passos, M. Silva, P. Kroger, et G. Cidra,
+Alexandre Tachard Passos, Marcos Sampaio, Pedro Kröger, Givaldo de Cidra,
@emph{Functional Harmonic Analysis and Computational Musicology
-in Rameau}, Proceedings of the 12th Brazilian Symposium on Compute
+in Rameau}, Proceedings of the 12th Brazilian Symposium on Computer
Music, 2009, p. 207-210.
@item
@item
-Kevin C. Baird 2005.
+Kevin C. Baird 2005,
@emph{Real-time generation of music notation via audience interaction using
python and GNU lilypond}. Proceedings of the 2005 Conference on New interfaces
For Musical Expression (Vancouver, Canada, May 26 - 28, 2005).
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 22b6ca7247b6f0d596934d38aa2c75d5e45206eb
+ Translation of GIT committish: 7c9a0da142b6037180d557f12ba1ada366226606
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
immédiatement en téléchargement ou sous forme de partition imprimable.
@item
-@uref{http://theshadylanepublishing.com/, The Shady Lane
-Publishing},
+@uref{http://http://www.shadylane.fr/, The Shady Lane Publishing},
est un @qq{micro-éditeur de partitions musicales} qui a pour but de
promouvoir une nouvelle forme de pratique économique, plus proche des
musiciens et amoureux de la musique.
@} % end Score context
@end example
+@cindex stretchability of staves
+@cindex staves, stretchability
+
+The above layout of the organ staves is almost perfect; however,
+there is a slight defect which is not visible by looking at just a
+single system: The distance of the pedal staff to the left hand staff
+should behave approximately the same as the right hand staff to the
+left hand staff. In particular, the stretchability of staves in a
+@code{PianoStaff} context is limited (so that the distance between
+the staves for the left and right hand can't become too large), and
+the pedal staff should behave similarly.
+
+@cindex sub-properties
+@cindex properties, sub-properties
+@cindex graphical objects
+@cindex objects, graphical
+@cindex grobs
+
+Stretchability of staves can be controlled with the
+@code{next-staff-spacing} property of the @code{VerticalAxisGroup}
+@q{graphical object} (commonly called @q{grob}s within the lilypond
+documentation) -- don't worry about the details right now; this is
+fully explained later. For the curious, have a look at
+@ruser{Overview of modifying properties}. Currently, it is not
+possible to modify the @code{stretchability} sub-property only, we
+thus have to copy the other sub-properties also. Again, for the
+curious, you can find the default values in file
+@file{scm/@/define-grobs@/.scm} by looking up the definition of the
+@code{VerticalAxisGroup} grob. The value for @code{stretchability}
+is taken from the definition of the @code{PianoStaff} context (in
+file @file{ly/@/engraver-init@/.ly}) so that the values are
+identical.
+
+@example
+\score @{
+ << % PianoStaff and Pedal Staff must be simultaneous
+ \new PianoStaff <<
+ \new Staff = "ManualOne" <<
+ \keyTime % set key and time signature
+ \clef "treble"
+ \new Voice @{
+ \voiceOne
+ \ManualOneVoiceOneMusic
+ @}
+ \new Voice @{
+ \voiceTwo
+ \ManualOneVoiceTwoMusic
+ @}
+ >> % end ManualOne Staff context
+ \new Staff = "ManualTwo" \with @{
+ \override VerticalAxisGroup
+ #'next-staff-spacing = #'((space . 9)
+ (minimum-distance . 8)
+ (padding . 1)
+ (stretchability . 5))
+ @} <<
+ \keyTime
+ \clef "bass"
+ \new Voice @{
+ \ManualTwoMusic
+ @}
+ >> % end ManualTwo Staff context
+ >> % end PianoStaff context
+ \new Staff = "PedalOrgan" <<
+ \keyTime
+ \clef "bass"
+ \new Voice @{
+ \PedalOrganMusic
+ @}
+ >> % end PedalOrgan Staff
+ >>
+@} % end Score context
+@end example
That completes the structure. Any three-staff organ music
will have a similar structure, although the number of voices
may vary. All that remains now
\ManualOneVoiceTwoMusic
}
>> % end ManualOne Staff context
- \new Staff = "ManualTwo" <<
+ \new Staff = "ManualTwo" \with {
+ \override VerticalAxisGroup
+ #'next-staff-spacing = #'((space . 9)
+ (minimum-distance . 8)
+ (padding . 1)
+ (stretchability . 5))
+ } <<
\keyTime
\clef "bass"
\new Voice {
deal with a tricky example which needs several tweaks to produce
the desired output. The example has been deliberately chosen to
illustrate the use of the Notation Reference to resolve unusual
-problems with notation. It is not representative of more usual
+problems with notation. It is not representative of the more usual
engraving process, so please do not let these difficulties put
you off! Fortunately, difficulties like these are not very common!
@c The following should appear as music without code
@c This example should not be indexed
@c line-width ensures no break
-@lilypond[quote,ragged-right,line-width=5.5\in]
+@lilypond[quote,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- bes2.^\markup { \bold "Moderato" } r8
- <<
- { c,8 d fis bes a }
- \\
- {
- % Reposition the c2 to the right of the merged note
- c,8~ \once \override NoteColumn #'force-hshift = #1.0
- % Move the c2 out of the main note column so the merge will work
- \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown
- \once \override Stem #'transparent = ##t
- d2
- }
- \\
- { s4 fis4. }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\)
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie #'staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ bes2.^\markup { \bold "Moderato" } r8
+ <<
+ { c,8 d fis bes a }
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn #'force-hshift = #1.0
+ % Move the c2 out of the main note column so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \once \override Stem #'transparent = ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\)
+ }
}
lhMusic = \relative c' {
the tied C, the half-note D which is merged with the eighth note
D, and the dotted quarter note F-sharp, which is also merged with
the eighth note at the same pitch. Everything else is in a single
-voice, so the easiest way is to introduce these four voices
+voice, so the easiest way is to introduce these extra three voices
temporarily at the time they are needed. If you have forgotten
-how to do this, look at @ref{I'm hearing Voices}. Let us begin
-by entering the notes as two variables and setting up the staff
-structure in a score block, and see what LilyPond produces by
-default:
+how to do this, look at @ref{I'm hearing Voices} and @ref{Explicitly
+instantiating voices}. Here we choose to use explicitly instantiated
+voices for the polyphonic passage, as LilyPond is better able to
+avoid collisions if all voices are instantiated explicitly in this
+way.
+
+So let us begin by entering the notes as two variables, setting up
+the staff structure in a score block, and seeing what LilyPond
+produces by default:
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4. g8 |
- bes1~ |
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a }
- \\
- { c,8~ c2 }
- \\
- { s8 d2 }
- \\
- { s4 fis4. }
- >> |
- g2. |
+ \new Voice {
+ r2 c4. g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2. % continuation of main voice
+ }
}
lhMusic = \relative c' {
@end lilypond
All the notes are right, but the appearance is far from
-satisfactory. The tie clashes with the change in time signature,
-the notes are not merged together, and several notation elements
+satisfactory. The tie collides with the change in time signature,
+some notes are not merged together, and several notation elements
are missing. Let's first deal with the easier things. We can
easily add the left hand slur and the right hand phrasing slur,
since these were all covered in the Tutorial. Doing this gives:
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- bes1~ |
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a }
- \\
- { c,8~ c2 }
- \\
- { s8 d2 }
- \\
- { s4 fis4. }
- >> |
- g2.\) |
+ \new Voice {
+ r2 c4.\( g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
}
lhMusic = \relative c' {
next need to correct the collision of the tie with the time signature.
This is best done by moving the tie upwards. Moving objects was
covered earlier in @ref{Moving objects}, which says that objects
-positioned relative to the staff can be moved by overriding their
-@code{staff-position} property, which is specified in half staff
+positioned relative to the staff can be moved vertically by overriding
+their @code{staff-position} property, which is specified in half staff
spaces relative to the center line of the staff. So the following
override placed just before the first tied note would move the tie up
to 3.5 half staff spaces above the center line:
This completes bar two, giving:
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a }
- \\
- { c,8~ c2 }
- \\
- { s8 d2 }
- \\
- { s4 fis4. }
- >> |
- g2.\) |
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie #'staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
}
lhMusic = \relative c' {
On to bar three and the start of the Moderato section. The tutorial
showed how to add embolded text with the @code{\markup} command, so
-adding @q{Moderato} in bold is easy. But how do we merge notes in
+adding @qq{Moderato} in bold is easy. But how do we merge notes in
different voices together? This is where we need to turn again to
the Notation Reference for help. A search for @qq{merge} in the
Notation Reference index quickly leads us to the commands for merging
-differently headed and differently dotted notes in @ruser{Collision
-resolution}. In our example we need to merge both types of note for
-the duration of the polyphonic section in bar 3, so using the
-information we find in the Notation Reference we add
+differently headed and differently dotted notes in
+@ruser{Collision resolution}. In our example we need to merge both
+types of note for the duration of the polyphonic section in bar 3,
+so using the information we find in the Notation Reference we add
@example
\mergeDifferentlyHeadedOn
to the end, giving:
@c line-width ensures no break
-@lilypond[quote,ragged-right,line-width=5.5\in]
+@lilypond[quote,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato" } r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a }
- \\
- { c,8~ c2 }
- \\
- { s8 d2 }
- \\
- { s4 fis4. }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie #'staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
lhMusic = \relative c' {
@cindex staff-position property, example
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato" } r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a }
- \\
- {
- % Move the c2 out of the main note column so the merge will work
- c,8~ \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown d2
- }
- \\
- { s4 fis4. }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie #'staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ % Move the c2 out of the main note column so the merge will work
+ c,8~ \shiftOnn c2
+ }
+ \new Voice {
+ \voiceThree
+ % Stem on the d2 must be down to permit merging
+ s8 \stemDown d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
lhMusic = \relative c' {
@cindex transparent property, example
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato" } r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- <<
- { c,8 d fis bes a }
- \\
- {
- % Reposition the c2 to the right of the merged note
- c,8~ \once \override NoteColumn #'force-hshift = #1.0
- % Move the c2 out of the main note column so the merge will work
- \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown
- \once \override Stem #'transparent = ##t
- d2
- }
- \\
- { s4 fis4. }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+ \new Voice {
+ r2 c4.\( g8 |
+ \once \override Tie #'staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.^\markup { \bold "Moderato" } r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn #'force-hshift = #1.0
+ % Move the c2 out of the main note column so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \once \override Stem #'transparent = ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
lhMusic = \relative c' {
[Italian: @q{speed up, accelerate}]
-Increase tempo
+An increase in the tempo, abbreviated @notation{accel.}
@seealso
No cross-references.
ES: alla breve,
I: ?,
F: alla breve, à la brève,
-D: ?,
+D: Allabreve, alla breve
NL: ?,
DK: ?,
S: ?,
[Italian: @q{on the breve}] Twice as fast as the notation indicates.
-Also called @notation{in cut-time}. The name derives from mensural
+Also called @notation{in cut time}. The name derives from mensural
notation, where the @notation{tactus} (or beat) is counted on the semibreve
(the modern whole note). Counting @q{on the breve} shifts the tactus to the
next longest note value, which (in modern usage) effectively halves all note
A family of blown musical instruments made of brass, all using a cup
formed mouth piece. The brass instruments commonly used in a symphony
-orchestra are trumpet, trombone, french horn, and tuba.
+orchestra are trumpet, trombone, french horn, and tuba. In marching bands,
+sousaphones and contrabass bugles are common.
@seealso
No cross-references.
FI: cresendo, voimistuen.
Increasing volume. Indicated by a rightwards opening horizontal wedge
-(hairpin) or the abbreviation @notation{cresc.}.
+(hairpin) or the abbreviation @notation{cresc.}
@lilypond[quote,relative=2]
\key g \major
S: da capo,
FI: da capo, alusta.
-Abbreviated @notation{D.C.}. Indicates that the piece is to be repeated from
+Abbreviated @notation{D.C.} Indicates that the piece is to be repeated from
the beginning to the end or to a certain place marked @emph{fine}.
@seealso
S: dal segno,
FI: dal segno, lähtien merkistä.
-Abbreviated @notation{D.S.}. Repetition, not from the beginning, but from
+Abbreviated @notation{D.S.} Repetition, not from the beginning, but from
another place frequently near the beginning marked by a sign
(@notation{segno}):
FI: decresendo, hiljentyen.
Decreasing tone volume. Indicated by a leftwards opening horizontal
-wedge (hairpin) or the abbreviation @notation{decresc.}.
+wedge (hairpin) or the abbreviation @notation{decresc.}
@lilypond[quote,relative=2]
\key g \major
S: diminuendo,
FI: diminuendo, hiljentyen.
+Abbreviated @emph{dim.} It indicates a decrease in tone volume.
+
@seealso
@ref{decrescendo}.
which originally designated @notation{tempus imperfectum} and
@notation{prolatio minor} now stands for @notation{common time}; and the
slashed C, which designated the same with @notation{diminution} now stands
-for @notation{cut-time} (essentially, it has not lost its original meaning).
+for @notation{cut time} (essentially, it has not lost its original meaning).
@seealso
@ref{diminution}, @ref{proportion}, @ref{time signature}.
be one-third the higher note value. Composers indicated which proportions
to use with various signs—two of which survive to the present day: the
C-shaped sign for @notation{common time}, and the slashed C for
-@notation{alla breve} or @notation{cut-time}.
+@notation{alla breve} or @notation{cut time}.
@c TODO -- add maxima to this example, in a way that doesn't break it.
S: rallentando,
FI: rallerdando, hidastuen.
-[Italian] A performance indication, abbreviated @notation{rall.}.
+[Italian] A performance indication, abbreviated @notation{rall.}
@seealso
@ref{ritardando}.
@funindex \fermata
@funindex \longfermata
@funindex \verylongfermata
+@funindex \fermataMarkup
@funindex \segno
@funindex \coda
@funindex \varcoda
Articulations are @code{Script} objects. Their properties are
described more fully in @rinternals{Script}.
+Articulations can be attached to rests as well as notes but they
+cannot be attached to multi-measure rests. A special predefined
+command, @code{\fermataMarkup}, is available for attaching a fermata
+to a multi-measure rest (and only a multi-measure rest). This
+creates a @code{MultiMeasureRestText} object.
+
+@lilypond[verbatim,quote,relative=2]
+\override Script #'color = #red
+\override MultiMeasureRestText #'color = #blue
+a2\fermata r\fermata
+R1\fermataMarkup
+@end lilypond
+
In addition to articulations, text and markups can be attached to
notes. See @ref{Text scripts}.
@funindex \stopTrillSpan
@funindex stopTrillSpan
-Short @notation{trills} without an extender line are printed with
+Short trills without an extender line are printed with
@code{\trill}; see @ref{Articulations and ornamentations}.
Longer trills with an extender line are made with
@code{\startTrillSpan} and @code{\stopTrillSpan}:
@lilypond[verbatim,quote,relative=2]
-d1~\startTrillSpan
+d1\startTrillSpan
+d1
+c2\stopTrillSpan
+r2
+@end lilypond
+
+A trill spanner crossing a line break will restart exactly above
+the first note on the new line.
+
+@lilypond[ragged-right,verbatim,quote,relative=2]
+d1\startTrillSpan
+\break
+d1
+c2\stopTrillSpan
+r2
+@end lilypond
+
+Consecutive trill spans will work without explicit
+@code{\stopTrillSpan} commands, since successive trill spanners will
+automatically become the right bound of the previous trill.
+
+@lilypond[verbatim,quote,relative=2]
+d1\startTrillSpan
d1
-c2\stopTrillSpan r2
+b1\startTrillSpan
+d2\stopTrillSpan
+r2
@end lilypond
-In the following example, a trill is combined with grace notes.
-The syntax of this construct and the method to precisely position
-the grace notes are described in @ref{Grace notes}.
+Trills can also be combined with grace notes. The syntax of this
+construct and the method to precisely position the grace notes are
+described in @ref{Grace notes}.
@lilypond[verbatim,quote,relative=2]
-c1 \afterGrace
+d1~\afterGrace
d1\startTrillSpan { c32[ d]\stopTrillSpan }
-e2 r2
+c2 r2
@end lilypond
@cindex pitched trills
argument is the main note, and the second is the @emph{trilled}
note, printed as a stemless note head in parentheses.
-@lilypond[verbatim,quote,relative=1]
-\pitchedTrill e2\startTrillSpan fis
-d\stopTrillSpan
+@lilypond[verbatim,quote,relative=2]
+\pitchedTrill
+d2\startTrillSpan fis
+d2
+c2\stopTrillSpan
+r2
@end lilypond
-@cindex pitched trill with forced accidental
-@cindex trill, pitched with forced accidental
-@cindex accidental, forced for pitched trill
+@cindex pitched trill with accidental
+@cindex trill with accidental
-In the following example, the second pitched trill is ambiguous;
-the accidental of the trilled note is not printed. As a
-workaround, the accidentals of the trilled notes can be forced.
-The second measure illustrates this method:
+Subsequent accidentals of the same note in the same measure will need
+to be added manually. Only the accidental of the first pitched trill
+in a measure is printed.
@lilypond[verbatim,quote,relative=2]
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis
-g\stopTrillSpan
-\pitchedTrill eis4\startTrillSpan fis!
-g\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan cis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis
+eis4\stopTrillSpan
+\pitchedTrill
+eis4\startTrillSpan fis!
+eis4\stopTrillSpan
@end lilypond
@code{\stopTrillSpan}.
@endpredefined
-
@seealso
Music Glossary:
@rglos{trill}.
new system:
@lilypond[verbatim,quote,relative=2]
-cis1 ~ cis ~
+cis1~ cis~
\break
cis
@end lilypond
@snippets
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle,ragged-right]
+{hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly}
+
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{preventing-extra-naturals-from-being-automatically-added.ly}
-
@seealso
Music Glossary:
@rglos{sharp},
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{ambitus-with-multiple-voices.ly}
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{changing-the-ambitus-gap.ly}
+
@seealso
Music Glossary:
@end example
@noindent
-where @var{musicexpr} is a music expression. Alternate endings can be
-produced using @code{\alternative}. In order to delimit the alternate
-endings, the group of alternatives must be enclosed in a set of
-braces. If there are more repeats than there are alternate endings,
-the earliest repeats are given the first alternative.
+where @var{musicexpr} is a music expression.
-Normal repeats without alternate endings:
+A single repeat without an alternate ending:
@lilypond[verbatim,quote,relative=2]
\repeat volta 2 { c4 d e f }
\repeat volta 2 { d4 e f g }
@end lilypond
-Normal repeats with alternate endings:
+Alternative endings can be produced using @code{\alternative}. Each
+group of alternatives must be themselves, enclosed in a set of braces.
+
+@example
+\repeat volta @var{repeatcount} @var{musicexpr}
+\alternative @{
+ @{ @var{musicexpr} @}
+@}
+@end example
+
+@noindent
+where @var{musicexpr} is a music expression.
+
+If there are more repeats than there are alternate endings, the earliest
+repeats are given the first alternative.
+
+A single repeat with one alternate ending:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 2 { c4 d e f }
+\alternative {
+ { c2 e }
+ { f2 g }
+}
+c1
+@end lilypond
+
+A single repeat with more than one alternate ending:
@lilypond[verbatim,quote,relative=2]
\repeat volta 4 { c4 d e f }
\alternative {
- { d2 e }
+ { c2 e }
{ f2 g }
}
c1
@end lilypond
+Multiple repeats with more than one alternate ending:
+
+@lilypond[verbatim,quote,relative=2]
+\repeat volta 3 { c4 d e f }
+\alternative {
+ { c2 e }
+ { f2 g }
+ { a2 g }
+}
+c1
+@end lilypond
+
@warning{If you include @code{@bs{}relative} inside a
@code{@bs{}repeat} without explicitly instantiating the
@code{Voice} context, extra (unwanted) staves will appear. See
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{adding-volta-brackets-to-additional-staves.ly}
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{setting-the-double-repeat-default-for-volte.ly}
@seealso
Music Glossary:
@warning{These methods are only used for displaying unusual repeat
constructs, and may produce unexpected behavior. In most cases,
-repeats should be created using the standard @code{\\repeat} command
+repeats should be created using the standard @code{@bs{}repeat} command
or by printing the relevant bar lines. For more information, see
@ref{Bar lines}.}
the number of times @var{musicexpr} is repeated.
@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 { c4 d e f }
c1
+@end lilypond
+
+Unfold repeats can be made with alternate endings.
+
+@lilypond[verbatim,quote,relative=2]
\repeat unfold 2 { c4 d e f }
+\alternative {
+ { c2 g' }
+ { c,2 b }
+}
c1
@end lilypond
-Unfold repeats can be made with alternate endings. If there are
-more repeats than there are alternate endings, the first
-alternative ending is applied to the earliest endings.
+If there are more repeats than there are alternate endings, the first
+alternative is applied multiple times until the remaining alternatives
+make up the total number of repeats.
@lilypond[verbatim,quote,relative=2]
+\repeat unfold 4 { c4 d e f }
+\alternative {
+ { c2 g' }
+ { c,2 b }
+ { e2 d }
+ }
c1
-\repeat unfold 2 { g4 f e d }
+@end lilypond
+
+If there are more alternate endings than repeats then the first
+alternatives are applied, LilyPond will ignore the remaining
+alternatives which will not be printed.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 { c4 d e f }
+\alternative {
+ { c2 g' }
+ { c,2 b }
+ { e2 d }
+}
+c1
+@end lilypond
+
+It is also possible to nest multiple @code{unfold} functions (with or
+without alternate endings).
+
+@lilypond[verbatim,quote,relative=2]
+\repeat unfold 2 {
+ \repeat unfold 2 { c4 d e f }
\alternative {
- { cis2 g' }
- { cis,2 b }
+ { c2 g' }
+ { c,2 b }
}
+}
c1
@end lilypond
+
@warning{If you include @code{@bs{}relative} inside a
@code{@bs{}repeat} without explicitly instantiating the
@code{Voice} context, extra (unwanted) staves will appear. See
@subsection Short repeats
This section discusses how to input short repeats. Short repeats can
-take two basic forms: repeats of a single note to two measures,
-represented by slashes or percent signs; and tremolos.
+take two forms: slashes or percent signs to represent repeats of a
+single note, a single measure or two measures, and tremelos otherwise.
@menu
* Percent repeats::
@funindex \repeat percent
@funindex percent
-Repeated short patterns of notes are supported. The music is printed
-once, and the pattern is replaced with a special sign. Patterns that
-are shorter than one measure are replaced by slashes, and patterns of
-one or two measures are replaced by percent-like signs. The syntax is
+Repeated short patterns are printed once, and the repeated pattern
+is replaced with a special sign.
+
+The syntax is
@example
@code{\repeat percent @var{number} @var{musicexpr}}
@noindent
where @var{musicexpr} is a music expression.
+Patterns that are shorter than one measure are replaced by slashes.
+
@lilypond[verbatim,quote,relative=2]
+\repeat percent 4 { c8 d }
\repeat percent 4 { c4 }
-\repeat percent 2 { b4 a g f }
-\repeat percent 2 { c2 es | f4 fis g c | }
+\repeat percent 2 { c2 }
+@end lilypond
+
+Patterns of one or two measures are replaced by percent-like signs.
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 3 { c4 d e f }
+\repeat percent 4 { c2 d }
+@end lilypond
+
+@lilypond[verbatim,quote,relative=2]
+\repeat percent 3 { c4 d e f | c2 g' }
@end lilypond
@snippets
@snippets
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{dot-count-override.ly}
+{changing-the-number-of-augmentation-dots-per-note.ly}
@seealso
Mensural time signatures are covered in
@ref{Mensural time signatures}.
+@cindex time signature default settings
+@cindex autobeaming properties for time signatures
+@cindex beaming, time signature default properties
+@funindex \overrideTimeSignatureSettings
+
+In addition to setting the printed time signature, the @code{\time}
+command also sets time-signature-based default values for the properties
+@code{baseMoment}, @code{beatStructure}, and @code{beamExceptions}. The
+predefined default values for these properties can be found in
+@file{scm/time-signature-settings.scm}. The existing default values can
+be changed, or new default values can be added:
+
+@lilypond[quote,verbatim]
+\score {
+ \relative c' {
+ \overrideTimeSignatureSettings
+ #'Score
+ #'(4 . 4) % time signature fraction
+ #'(1 . 4) % base moment fraction
+ #'(3 1) % beatStructure
+ #'() % beamExceptions
+ \time 4/4
+ \repeat unfold 8 c8 |
+ }
+}
+@end lilypond
+
+@code{\overrideTimeSignatureSettings} takes five arguments:
+context, time signature fraction, base moment, beat structure, and
+beaming exception. The context is a Scheme symbol that describes
+the context to which the default setting will apply. The
+time signature fraction is a Scheme pair describing the time signature.
+The base moment is a Scheme pair containing the
+numerator and denominator of the basic timing unit for the
+time signature. The beat structure is a Scheme list indicating
+the structure of the beats in the measure, in units of the base moment.
+The beaming exception is an alist containing any beaming rules for the
+time signature that go beyond ending at every beat,
+as described in @ref{Setting automatic beam behavior}.
+
+@cindex time signature properties, restoring default values
+@cindex restoring default properties for time signatures
+@funindex \revertTimeSignatureSettings
+
+Changed values of default time signature properties can be restored
+to the original values:
+
+@lilypond[quote,verbatim]
+
+\score{
+ \relative c' {
+ \repeat unfold 8 c8 |
+ \overrideTimeSignatureSettings
+ #'Score
+ #'(4 . 4)
+ #'(1 . 4)
+ #'(3 1)
+ #'((end . (((1 . 8) . (3 1)))))
+ \time 4/4
+ \repeat unfold 8 c8 |
+ \revertTimeSignatureSettings #'Score #'(4 . 4)
+ \time 4/4
+ \repeat unfold 8 c8 |
+ }
+}
+@end lilypond
@predefined
@code{\numericTimeSignature},
@cindex lyrics and beaming
@funindex autoBeaming
-@funindex beamSettings
+@funindex baseMoment
+@funindex beamExceptions
+@funindex beatStructure
@funindex measureLength
-@funindex beatLength
@funindex \time
@funindex time
@funindex \set
@funindex set
-The placement of automatic beams is determined by the time signature.
-Three types of rules are used for determining the end of automatic
-beams: @emph{default} rules
-for the time signature, @emph{explicit} rules for the beam in the time
-signature, and the @emph{beatLength} for the time signature.
+The placement of automatic beams is determined by the context properties
+@code{baseMoment}, @code{beatStructure}, @code{beamExceptions},
+and @code{autoBeaming}.
The following rules, in order of priority, apply when determining
the appearance of beams:
if @code{\autoBeamOff} is in force do not beam, otherwise
@item
-if an explicit beam-ending rule is defined for the beam type
-in the time signature, use it to determine the valid
-places where beams may end, otherwise
+if a beam-ending rule is defined in @code{beamExceptions}
+for the beam type, use it to determine the valid places where
+beams may end, otherwise
@item
-if a default beam-ending rule is defined in the time signature,
-use it to group notes with beams, otherwise
+if a beam-ending rule is defined in @code{beamExceptions}
+for a larger beam-type, use it to determined the valid places
+where beams may end, otherwise
@item
-use the value of @code{beatLength} to group notes with beams
+use the values of @code{baseMoment} and @code{beatStructure} to
+determine the ends of the beats in the measure, and
+end beams at the end of beats.
@end itemize
+The beam type is the duration of the shortest note in the beamed group.
+If no beam-ending rule is defined for a beam type, the rule for the
+smallest beam-type larger than the current beam is used.
+
@i{@strong{Modifying the grouping of beats}}
-By default @code{beatLength} is
-derived from the time signature set by the @code{\time} command.
-The @code{beatLength} is set to be one over the denominator
-of the time signature.
+By default @code{baseMoment} is set by the @code{\time} command,
+normally to one over the denominator of the time signature.
+Any exceptions to this default
+can be found in @file{scm/@/time@/-signature@/-settings@/.scm}.
+Changing the default value of @code{baseMoment} for a given
+time signature is described in @ref{Time signature}.
-@code{beatLength} is a @i{moment},
+@code{baseMoment} is a @i{moment},
a unit of musical duration. A quantity of type @i{moment} is
created by the scheme function @code{ly:make-moment}. For more
information about this function, see @ref{Time administration}.
-Autobeam settings are stored in the
-@code{beamSettings} property. Default values of @code{beamSettings}
-are determined in @file{scm/@/beam@/-settings@/.scm}. Entries in
-@code{beamSettings} are indexed by time signature and
-rule type.
-
-Time signature should be a scheme pair , e.g. @code{#'(4 . 4)}.
+Special (i.e., other than at the end of the beat) autobeam settings
+are stored in the
+@code{beamExceptions} property. Default values of @code{beamExceptions}
+are established by the @code{\time} command. Default values of
+@code{beamExceptions} for a time signature
+are determined in @file{scm/@/time@/-signature@/-settings@/.scm}.
+Entries in @code{beamExceptions} are indexed by rule type and beam type.
Rule type should be @code{#'end} for beam ending.
(beam-type3 . grouping-3))
@end example
-Beam type is either a scheme pair indicating the duration
-of the beam, e.g. @code{(1 . 16)}, or @code{*} to indicate a
-default rule, which applies to all beams if no explicit rule is
-defined.
+Beam type is a scheme pair indicating the duration
+of the beam, e.g., @code{(1 . 16)}.
Grouping is a scheme list indicating the grouping to be applied to
-the beam. For default rules (where beam type is
-@code{*}, the grouping is in units of @code{beatLength}.
-For explicit rules, the grouping is in units of the beam type.
+the beam. The grouping is in units of the beam type.
For reference, the default beaming rules are found in
-@file{scm/beam-settings.scm}.
+@file{scm/time-signature-settings.scm}.
-Beam settings are changed with
-@code{\overrideBeamSettings} and @code{\revertBeamSettings}.
+Alternate values for @code{beamExceptions}
+can be defined using the @code{\set} command.
@warning{
-The ending settings must be
-@emph{complete} rules. That is, every rule that should apply to
-the current time signature must be included in the setting.
-It is not possible to change the grouping of only one beam type
-for a given time signature. While this may seem cumbersome,
+A @code{beamExceptions} value must be
+@emph{complete} exceptions list. That is, every exception that should
+be applied must be included in the setting.
+It is not possible to add, remove, or change only one of the exceptions.
+While this may seem cumbersome,
it means that the current beaming settings need not be known
in order to specify a new beaming pattern.}
@lilypond[quote,relative=2,verbatim]
\time 5/16
c8^"beats" c16 c8 |
-\overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (2 3)))
+\set beatStructure = #'(2 3)
c8^"(2+3)" c16 c8
-\overrideBeamSettings #'Score #'(5 . 16) #'end #'((* . (3 2)))
+\set beatStructure = #'(3 2)
c8^"(3+2)" c16 c8
@end lilypond
enclosing context will apply.
@lilypond[quote, verbatim,relative=1]
-\new Staff <<
+\new Staff {
\time 7/8
- \new Voice = one {
- \relative c'' {
- \overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (2 3 2)))
+ \set Staff.beatStructure = #'(2 3 2)
+ <<
+ \new Voice = one {
+ \relative c'' {
a8 a a a a a a
+ }
}
- }
- \new Voice = two {
- \relative c' {
- \voiceTwo
- \overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (1 3 3)))
- f8 f f f f f f
+ \new Voice = two {
+ \relative c' {
+ \voiceTwo
+ \set Voice.beatStructure = #'(1 3 3)
+ f8 f f f f f f
+ }
}
- }
->>
+ >>
+}
@end lilypond
When multiple voices are used the @code{Staff} context must be
% rhythm 3-1-1-2
% Context Voice specified -- does not work correctly
% Because of autogenerated voices, all beating will
-% be at beatLength (1 . 8)
-\overrideBeamSettings #'Voice #'(7 . 8) #'end #'((* . (3 1 1 2)))
+% be at baseMoment (1 . 8)
+\set beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
% Works correctly with context Staff specified
-\overrideBeamSettings #'Staff #'(7 . 8) #'end #'((* . (3 1 1 2)))
+\set Staff.beatStructure = #'(3 1 1 2)
<< {a8 a a a16 a a a a8 a} \\ {f4. f8 f f f} >>
@end lilypond
-@funindex revertBeamSettings
-
-Beam settings can be reverted to get back to default behavior. This
-is accomplished by using @code{\revertBeamSettings}. The arguments
-are the same as for @code{\overrideBeamSettings}, except no value
-for @var{grouping} is given:
-
-@example
-\revertBeamSettings context time-signature rule-type
-@end example
-
+Beam settings can be set back to default behavior. This
+is accomplished by setting the time signature.
@lilypond[quote,verbatim,relative=2]
\time 4/4
\repeat unfold 8 {a8}
-% set default rule for (1 1 1 1) grouping
-\overrideBeamSettings #'Score #'(4 . 4) #'end #'((* . (1 1 1 1)))
+% eliminate beam exception that groups beats 1, 2 and 3, 4
+\set Timing.beamExceptions = #'()
\repeat unfold 8 {a8}
-% revert the new rule
-\revertBeamSettings #'Score #'(4 . 4) #'end
+% go back to default behavior
+\time 4/4
\repeat unfold 8 {a8}
@end lilypond
-@predefined
-@code{\overrideBeamSettings},
-@code{\revertBeamSettings}.
-@endpredefined
-
-
@snippets
@cindex beams, subdividing
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{sub-dividing-beams.ly}
+{subdividing-beams.ly}
@cindex measure groupings
@cindex beats, grouping
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los símbolos específicos de acordeón discanto se escriben mediante
@code{\\markup}. Se puede trucar la colocación vertical de los
"
doctitlees = "Símbolos de acordeón discanto"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Symbole für Akkordeon-Diskantregister"
texidocde = "
\header {
lsrtags = "chords, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al escribir un bajo cifrado, existe una forma de especificar si
queremos que las cifras se sitúen encima o debajo de las notas del
"
doctitlees = "Añadir un bajo cifrado encima o debajo de las notas"
-
%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5
doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Añadir un ámbito por voz"
texidoces = "
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
debe desplazar manualmente para evitar colisiones.
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie
"
doctitlede = "Ambitus pro Stimme hinzufügen"
-
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
L'@code{ambitus} peut être individualisé par voix. Il faut en pareil
\header {
lsrtags = "staff-notation, contexts-and-engravers, breaks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para añadir indicaciones de línea divisoria dentro del contexto de
los nombres de acorde @code{ChordNames}, incluya el grabador
"
doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der
\header {
lsrtags = "rhythms, expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La sintaxis de LilyPond puede implicar muchas colocaciones poco
comunes para los paréntesis, corchetes, etc, que a veces se tienen
\header {
lsrtags = "rhythms, percussion"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Mediante la utilización de las potentes herramientas preconfiguradas
como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
"
doctitlees = "Escritura de partes de percusión"
-
%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea
texidocfr = "
Grâce à la puissance des outils préconfigurés tels que la fonction
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.17
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para añadir digitaciones a las tablaturas, utilice una combinación de
@code{\\markup} y @code{\\finger}.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La función @code{\\parenthesize} es un truco especial que encierra
objetos entre paréntesis. El grob asociado es @code{ParenthesesItem}.
\header {
lsrtags = "text, titles"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
"
doctitlees = "Añadir la fecha actual a una partitura"
-
%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5
texidocfr = "
Avec un peu de code Scheme, voici comment ajouter facilement
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El grabador @code{Volta_engraver} reside de forma predeterminada
dentro del contexto de @code{Score}, y los corchetes de la repetición
"
doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern
"
doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
D'ordinaire, le graveur @code{Volta_engraver} réside dans le contexte
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Voces adicionales para evitar colisiones"
texidoces = "
En ciertos casos de polifonía compleja, se necesitan voces adicionales
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche
"
doctitlede = "Zusätzliche Stimmen um Zusammenstöße zu vermeiden"
-
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Dans certains cas de musique polyphonie complexe, une voix
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.16
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Puede ser necesario trucar la propiedad
@code{shortest-duration-space} para poder ajustar el tamaño de las
"
doctitlees = "Ajustar la forma de las subidas y caídas de tono"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um
"
doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
La propriété @code{shortest-duration-space} peut devoir être retouchée
\header {
lsrtags = "text, paper-and-layout, titles"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad @code{Staff.InstrumentName
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los números de compás se alinean de forma predeterminada por la
doctitlees = "Alineación de los números de compás"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern sind standardmäßig links an ihrem Ursprungsobjet
doctitlede = "Taktnummern ausrichten"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Les numéros de mesure s'alignent en principe sur la droite de l'objet
\header {
lsrtags = "text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si están especificadas, las marcas de texto se pueden alinear con
objetos de notación distintos a las líneas divisorias. Entre estos
"
doctitlees = "Alinear marcas con varios objetos de notación"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen
"
doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten"
-
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
Les indications textuelles peuvent s'aligner par rapport à d'autres
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las cifras de digitación orientadas verticalmente se colocan de forma
"
doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems
"
doctitlede = "Fingersatz auch innerhalb des Systems setzen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
L'empilement des indications de doigté se fait par défaut à l'extérieur
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
\header {
lsrtags = "pitches, vocal-music"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Ámbitos con varias voces"
texidoces = "
La adición del grabador @code{Ambitus_engraver} al contexto de
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext
Fall, dass mehrere Stimmen sich im gleichen System befinden.
"
doctitlede = "Ambitus mit vielen Stimmen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Si plusieurs voix se trouvent sur une même portée, on peut attribuer le
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
están contemplados por la capacidad de LilyPond para la música
doctitlees = "Tipografía de música antigua"
-
%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea
texidocfr ="
Voici comment graver la plupart, sinon tous les symboles que
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
\header {
lsrtags = "ancient-notation, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
"
doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
"
doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Voici comment vous pourriez transcrire du grégorien. Pour mémoire, il
\header {
lsrtags = "ancient-notation, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al transcribir música mensural, es útil un «incipit» al compienzo
de la pieza para indicar la tonalidad y el tempo
"
doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein
doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las indicaciones de compás también se pueden grabar en estilo antiguo.
\header {
lsrtags = "pitches, editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
texidoces = "
La propiedad @code{shapeNoteStyles} se puede usar para definir varios
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen"
texidocde = "
harmonischen Funktionen und dem Notenstil verloren geht.
"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La propriété @code{shapeNoteStyles} permet d'affecter un profil
\header {
lsrtags = "world-music"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para las improvisaciones o @emph{taqasim} que son libres durante unos
momentos, se puede omitir la indicación de compás y se puede usar
"
doctitlees = "Improvisación de música árabe"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede hacer que una ligadura de expresión sea asimétrica para
adaptarse mejor a un patrón asimétrico de notas.
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.13.20"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
- lsrtags = "rhythms"
-
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden subdividir las barras automáticamente. Estableciendo la
propiedad @code{subdivideBeams}, las barras se subdividen en
"
doctitlees = "Subdivisiones de barra automáticas"
+ lsrtags = "rhythms"
+
texidoc = "
Beams can be subdivided automatically. By setting the property
@code{subdivideBeams}, beams are subdivided at beat positions (as
-specified in @code{beatLength}).
+specified in @code{baseMoment}).
"
doctitle = "Automatic beam subdivisions"
} % begin verbatim
+
\new Staff {
\relative c'' {
<<
}
>>
\oneVoice
- \set beatLength = #(ly:make-moment 1 8)
- b32^"beatLength 1 8"[ a g f c' b a g]
- \set beatLength = #(ly:make-moment 1 16)
- b32^"beatLength 1 16"[ a g f c' b a g]
+ \set baseMoment = #(ly:make-moment 1 8)
+ \set beatStructure = #'(2 2 2 2)
+ b32^"baseMoment 1 8"[ a g f c' b a g]
+ \set baseMoment = #(ly:make-moment 1 16)
+ \set beatStructure = #'(4 4 4 4)
+ b32^"baseMoment 1 16"[ a g f c' b a g]
}
}
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.4
-\version "2.13.20"
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las reglas de final de barra especificadas en el contexto
@code{Score} se aplican a todos los pentagramas, pero se pueden
lsrtags = "rhythms"
texidoc = "
-Beam-ending rules specified in the @code{Score} context apply to all
+Beat structure rules specified in the @code{Score} context apply to all
staves, but can be modified at both @code{Staff} and @code{Voice}
levels:
"
\relative c'' {
\time 5/4
% Set default beaming for all staves
- \overrideBeamSettings #'Score #'(5 . 4) #'end
- #'(((1 . 8) . (3 4 3))
- ((1 . 16) . (6 8 6))
- ((1 . 32) . (12 16 12)))
+ \set Score.baseMoment = #(ly:make-moment 1 8)
+ \set Score.beatStructure = #'(3 4 3)
<<
\new Staff {
c8 c c c c c c c c c
}
\new Staff {
% Modify beaming for just this staff
- \overrideBeamSettings #'Staff #'(5 . 4) #'end
- #'((* . (3 2)))
+ \set Staff.beatStructure = #'(6 4)
c8 c c c c c c c c c
}
\new Staff {
% Modify beaming for this voice only
\new Voice {
\voiceTwo
- \overrideBeamSettings #'Voice #'(5 . 4) #'end
- #'((* . (3 2)))
+ \set Voice.beatStructure = #'(6 4)
a8 a a a a a a a a a
}
>>
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.4
-\version "2.13.20"
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
No está especificada ninguna agrupación predeterminada automática
de las barras para el compás de 7/8, de forma que si se requieren
lsrtags = "rhythms"
texidoc = "
-There are no default automatic beam groupings specified for 7/8 time,
-so if automatic beams are required the grouping must be specified. For
-example, to group all beams 2-3-2 in 7/8 time, specify beam endings at
-2/8 and 5/8:
+There is no default beat structure specified for 7/8 time,
+so if automatic beams are required the structure must be specified. For
+example, to group all beams 2-3-2 in 7/8 time, specify the
+beat structure to be (2 3 2):
"
doctitle = "Beam grouping in 7/8 time"
} % begin verbatim
\time 7/8
% rhythm 2-3-2
a8 a a a a a a
- \overrideBeamSettings #'Score #'(7 . 8) #'end
- #'((* . (2 3 2)))
+ \set Score.beatStructure = #'(2 3 2)
a8 a a a a a a
}
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Normalmente están prohibidos los saltos de línea si las barras
atraviesan las líneas divisorias. Se puede cambiar este
"
doctitlees = "Barras que atraviesan saltos de línea"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert
doctitlede = "Balken über Zeilenumbrüche"
-
%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60
texidocfr = "
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La instrucción @code{\\whiteout} intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para hacer invisibles partes de un regulador de crescendo, se usa
el método de dibujar un rectángulo blanco encima de la parte
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
A veces se denota una «cesura» mediante una doble marca de respiración
parecida a las vías del tren, con un calderón encima. Este fragmento
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este ejemplo proporciona una función para tipografiar un regulador con
texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.13.20"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.15
+\version "2.13.29"
\header {
- lsrtags = "text, tweaks-and-overrides"
-
+ lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
texidoc = "
For technical reasons, text scripts attached to note heads cannot
easily be centered on a note head's width, unlike articulations.
-Instead of using trial-and-error offset tweaks, this snippet accesses a
-note head (or rest) from the @code{TextScript} object's horizontal
-parent (a paper column), using its extent to correct the positioning.
-
-
-
+Instead of using trial-and-error offset tweaks, this snippet uses a
+Scheme engraver to reset the horizontal parent of each markup to a
+@code{NoteColumn}. This also allows text to follow note heads which have
+been shifted via @code{force-hshift}.
"
doctitle = "Centering markup on note heads automatically"
} % begin verbatim
-textScriptCenterOnNote = \override TextScript #'X-offset =
-#(lambda (grob)
- (let* ((paper-col (ly:grob-parent grob X))
- (elts (ly:grob-object paper-col 'elements))
- (rhythmic-head grob))
-
- (for-each
- (lambda (idx)
- (let ((elt (ly:grob-array-ref elts idx)))
- (if (grob::has-interface elt
- 'rhythmic-grob-interface)
- (set! rhythmic-head elt))))
- (reverse (iota (ly:grob-array-length elts))))
-
- (+
- (ly:self-alignment-interface::x-aligned-on-self grob)
- (interval-center
- (ly:grob-robust-relative-extent rhythmic-head rhythmic-head X)))))
-
-\relative c' {
- \override TextScript #'self-alignment-X = #CENTER
- \textScriptCenterOnNote
- <c e g c>1-\markup \arrow-head #Y #UP ##t
- <c e g c>1-\markup \huge "^"
+
+#(define (Text_align_engraver ctx)
+ (let ((scripts '())
+ (note-column #f))
+
+ `((acknowledgers
+ (note-column-interface
+ . ,(lambda (trans grob source)
+ ;; cache NoteColumn in this Voice context
+ (set! note-column grob)))
+
+ (text-script-interface
+ . ,(lambda (trans grob source)
+ ;; whenever a TextScript is acknowledged,
+ ;; add it to `scripts' list
+ (set! scripts (cons grob scripts)))))
+
+ (stop-translation-timestep
+ . ,(lambda (trans)
+ ;; if any TextScript grobs exist,
+ ;; set NoteColumn as X-parent
+ (and (pair? scripts)
+ (for-each (lambda (script)
+ (set! (ly:grob-parent script X) note-column))
+ scripts))
+ ;; clear scripts ready for next timestep
+ (set! scripts '()))))))
+
+\layout {
+ \context {
+ \Voice
+ \consists #Text_align_engraver
+ \override TextScript #'X-offset =
+ #ly:self-alignment-interface::aligned-on-x-parent
+ \override TextScript #'self-alignment-X = #CENTER
+ }
}
+\new Staff <<
+ \relative c'' {
+ \override NoteColumn #'force-hshift = #3
+ c1-\markup { \arrow-head #Y #DOWN ##t }
+ }
+ \\
+ \relative c' {
+ a4 a-\markup { \huge ^ } a a
+ }
+>>
\header {
lsrtags = "expressive-marks, unfretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para hacer más pequeño el círculo de @code{\\flageolet} (armónico)
utilice la siguiente función de Scheme.
"
doctitlees = "Cambiar el tamaño de la marca de \\flageolet"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese
"
doctitlede = "\\flageolet-Zeichen verkleinern"
-
%% Translation of GIT committish: 5b980ee07bba23d3633de1d371fb2926f164e295
texidocfr = "
\header {
lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden modificar notas individuales de un acorde con la instrucción
@code{\\tweak}, alterando la propiedad @code{font-size}.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se insertan automáticamente barras en ángulo cuando se detecta un
intervalo muy grande entre las notas. Se puede hacer un ajuste
"
doctitlees = "Cambiar el salto de las barras en ángulo"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Balken mit Hälsen in unterschiedliche Richtungen werden automatisch
doctitlede = "Balken für weit auseinander liegende Noten ändern"
-
%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60
texidocfr = "
LilyPond insère automatiquement des ligatures coudées --- certaines
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede establecer el separador entre las distintas partes del
nombre de un acorde para que sea cualquier elemento de marcado.
"
doctitlees = "Modificación del separador de acordes"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Cambiar la forma de los silencios multicompás"
texidoces = "
Si hay diez compases de silencio o menos, se imprime en el pentagrama
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa-
doctitlede = "Die Erscheinung von Pausentakten ändern"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur
\header {
lsrtags = "contexts-and-engravers, midi"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al producir una salida MIDI, el comportamiento predeterminado es
que cada pentagrama representa un canal MIDI, con todas las voces
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al utilizar la posibilidad de combinación automática de partes, se
puede modificar el texto que se imprime para las secciones de solo
"
doctitlees = "Cambiar los textos de partcombine"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn Stimmen automatisch kombiniert werden, kann der Text, der für
"
doctitlede = "Partcombine-Text ändern"
-
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Lorsque vous regroupez automatiquement des parties, vous pouvez
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede modificar el texto empleado para los crescendos y
decrescendos modificando las propiedades de contexto
"
doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert
und @code{'dotted-line}.
"
doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Le texte par défaut des crescendos et decrescendos se change en
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.26
+\version "2.13.29"
+\header {
+ lsrtags = "pitches"
+ texidoc = "It is possible to change the default gap setting for
+ambitus."
+
+ doctitle = "Changing the ambitus gap"
+} % begin verbatim
+
+
+
+\layout {
+ \context {
+ \Voice
+ \consists "Ambitus_engraver"
+ }
+}
+
+\new Staff {
+ \time 2/4
+ % Default setting
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #0
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #1
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #1.5
+ c'4 g''
+}
\header {
lsrtags = "expressive-marks, editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede cambiar el aspecto de las ligaduras de expresión de
continuas a punteadas o intermitentes.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El glifo de la marca de respiración se puede ajustar
sobreescribiendo la propiedad de texto del objeto de presentación
"
doctitlees = "Cambiar el símbolo de la marca de respiración"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Schriftzeichen für das Atemzeichen kann verändert werden, indem
"
doctitlede = "Das Atemzeichen-Symbol verändern"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
On peut choisir le glyphe imprimé par cette commande, en modifiant la
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La nomenclatura inglesa (predeterminada) para los acordes del cifrado
americano se puede cambiar por la alemana (@code{\\germanChords}
--- /dev/null
+%% Do not edit this file; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.13.20"
+
+\header {
+ lsrtags = "pitches"
+
+ texidoc = "
+@code{staffLineLayoutFunction} is used to change the position of notes.
+This snippet shows setting its value to @code{ly:pitch-semitones} in
+order to produce a chromatic scale with the distance between each space
+and line of the stave equal to one semitone.
+
+"
+ doctitle = "Changing the interval of lines on the stave"
+} % begin verbatim
+
+scale = \relative c' {
+ a4 ais b c
+ cis4 d dis e
+ f4 fis g gis
+ a1
+}
+
+\new Staff \with {
+ \remove "Accidental_engraver"
+ staffLineLayoutFunction = #ly:pitch-semitones
+}
+{
+ <<
+ \scale
+ \context NoteNames {
+ \set printOctaveNames = ##f
+ \scale
+ }
+ >>
+}
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.26
+\version "2.13.29"
+\header {
+ lsrtags = "rhythms,expressive-marks"
+ texidoc = "This code demonstrates how to change the number of
+augmentation dots on a single note."
+ doctitle = "Changing the number of augmentation dots per note"
+} % begin verbatim
+
+
+\relative c' {
+ c4.. a16 r2 |
+ \override Dots #'dot-count = #4
+ c4.. a16 r2 |
+ \override Dots #'dot-count = #0
+ c4.. a16 r2 |
+ \revert Dots #'dot-count
+ c4.. a16 r2 |
+}
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las alteraciones y los signos «más» pueden aparecer antes o
después de los números, según el valor de las propiedades
"
doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen,
\header {
lsrtags = "staff-notation, midi"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
doctitlees = "Cambiar el tempo sin indicación metronómica"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den
"
doctitlede = "Das Tempo ohne Metronom-Angabe verändern"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans
\header {
lsrtags = "keyboards, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.5
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La instrucción @code{\\time} establece las propiedades
@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Cambiar el número del grupo especial"
texidoces = "
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer
doctitlede = "Die Zahl der N-tole verändern"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
L'apparence du chiffre est déterminée par la propriété @code{text} dans
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La propiedad @code{measureLength}, junto con
@code{measurePosition}, determina cuándo es necesario dibujar una
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este tipo de notación se utiliza para el canto de los Salmos, en
que las estrofas no siempre tienen la misma longitud.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede usar la propiedad @code{chordNameExceptions} para
almacenar una lista de notaciones espaciales para acordes
"
doctitlees = "Excepciones para los nombres de acorde"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La presentación del acorde de séptima mayor se
puede ajustar mediante majorSevenSymbol.
"
doctitlees = "Nombre de acorde maj7"
-
%% Translation of GIT committish: 134d9cb2e14ae624aec6fa2dd1630e284807dc42
texidocde = "
Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede hacer que los diagramas de posiciones se muestren sólo
cuando el acorde cambia o al comienzo de una nueva línea.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
ragged-right = ##f
--- /dev/null
+%% Do not edit this file; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.13.20"
+
+\header {
+ lsrtags = "pitches"
+
+ texidoc = "
+Clefs can be transposed by arbitrary amounts, not just by octaves.
+
+"
+ doctitle = "Clefs can be transposed by arbitrary amounts"
+} % begin verbatim
+
+\relative c' {
+ \clef treble
+ c4 c c c
+ \clef "treble_8"
+ c4 c c c
+ \clef "treble_5"
+ c4 c c c
+ \clef "treble^3"
+ c4 c c c
+}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este código muestra cómo recortar (extraer) fragmentos a partir de una
partitura completa.
\header {
lsrtags = "simultaneous-notes, chords, keyboards"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più
forte} o @qq{piano subito}). Se pueden producir usando un bloque
\header {
lsrtags = "simultaneous-notes, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La herramienta de combinación de partes (instrucción
"
doctitlees = "Combinar dos partes sobre el mismo pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl)
"
doctitlede = "Zwei Stimmen auf einem System kombinieren"
-
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
L'outil de combinaison de parties (la commande @code{\\partcombine})
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.4
-\version "2.13.20"
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Indicaciones de compases compuestos"
texidoces = "
Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
\relative c' {
\override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8")
\time 5/8
- \overrideBeamSettings #'Staff #'(5 . 8) #'end
- #'((* . (2 3)))
+ \set Staff.beatStructure = #'(2 3)
c8 d e fis gis
c8 fis, gis e d
c8 d e4 gis8
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.4
-\version "2.13.20"
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La agrupación de pulsos dentro de un compás está controlada por la
agrupación predeterminada que se establece en @code{beamSettings}.
lsrtags = "rhythms"
texidoc = "
-Beat grouping within a bar is controlled by the default grouping
-established in @code{beamSettings}. This grouping can be established
-by the use of @code{\\overrideBeamSettings}. Alternatively, the
+Beat grouping within a measure is controlled by the context property
+@code{beatStructure}. Values of @code{beatStructure} are
+established for many time signatures in
+@file{scm/time-signature-settings.scm}. Values of @code{beatStructure}
+can be changed or set with @code{\set}.
+Alternatively, the
Scheme function @code{set-time-signature} can be used to both
-set the time signature and establish the default grouping rule.
+set the time signature and establish the beat structure.
@code{set-time-signature}, takes three arguments: the
number of beats, the beat length, and the internal grouping of beats in
-the measure. If the @code{Measure_grouping_engraver} is included
+the measure. @code{\time} and @code{set-time-signature} both apply
+to the @code{Timing} context, so they will not reset values of
+@code{beatStructure} or @code{baseMoment} that are set in
+other lower-level contexts, such as @code{Voice}.
+
+If the @code{Measure_grouping_engraver} is included
in one of the display contexts, measure grouping signs will be
created. Such signs ease reading rhythmically complex modern music.
In the example, the 9/8 measure is grouped in two different
patterns using the two different methods, while the 5/8 measure
is grouped according to the default setting in
-@file{scm/beam-settings.scm}:
+@file{scm/time-signature-settings.scm}:
"
doctitle = "Conducting signs measure grouping signs"
} % begin verbatim
+
\score {
- \relative c'' {
+ \new Voice \relative c'' {
\time 9/8
- \overrideBeamSettings #'Score #'(9 . 8) #'end #'((* . (2 2 2 3)))
+ g8 g d d g g a( bes g) |
+ \set Timing.beatStructure = #'(2 2 2 3)
g8 g d d g g a( bes g) |
#(set-time-signature 9 8 '(4 5))
g8 g d d g g a( bes g) |
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede tipografiar un gissando contemporáneo sin nota final
utilizando una nota oculta y temporalización de cadenza.
"
doctitlees = "Glissando contemporáneo"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem
"
doctitlede = "Moderne Glissandi"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
De nos jours, il peut arriver que la note d'arrivée d'un glissando soit
adding-a-figured-bass-above-or-below-the-notes.ly
adding-an-extra-staff-at-a-line-break.ly
adding-an-extra-staff.ly
+centering-markup-on-note-heads-automatically.ly
changing-midi-output-to-one-channel-per-voice.ly
changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
chant-or-psalms-notation.ly
creating-blank-staves.ly
+defining-an-engraver-in-scheme-ambitus-engraver.ly
engravers-one-by-one.ly
mensurstriche-layout-bar-lines-between-the-staves.ly
nesting-staves.ly
removing-bar-numbers-from-a-score.ly
-scheme-engraver-ambitus.ly
use-square-bracket-at-the-start-of-a-staff-group.ly
vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly
vocal-ensemble-template-with-verse-and-refrain.ly
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La visibilidad de los objetos de extensión que acaban en la primera
\header {
lsrtags = "editorial-annotations, chords, keyboards, fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
doctitlees = "Controlar la colocación de las digitaciones de acordes"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
"
doctitlede = "Position von Fingersatz in Akkorden kontrollieren"
-
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El orden vertical que ocupan las inscripciones gráficas está
controlado con la propiedad @code{'script-priority}. Cuanto más
"
doctitlees = "Controlar la ordenación vertical de las inscripciones"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die vertikale Anordnung von Beschriftungen wird mit der
"
doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les symboles s'ordonnent verticalement suivant la propriété
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La creación de un grupeto circular de anticipación entre dos notas,
donde la nota inferior del grupeto utiliza una alteración, requiere
doctitlees = "Crear un grupeto de anticipación"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das
"
doctitlede = "Einen Doppelschlag mit Vorhalt erstellen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Obtenir un @emph{grupetto} retardé et dans lequel la note la plus basse
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
En una música que tenga muchas apariciones de la
misma secuencia de notas a distintas alturas, podría ser de
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede trazar un símbolo de arpegio entre notas de distintas
voces que están sobre el mismo pentagrama si el grabador
"
doctitlees = "Crear arpegios entre notas de voces distintas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben
"
doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Affecter le graveur @code{Span_arpeggio_engraver} au contexte de la
\header {
lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás @code{Bar_number_engraver}
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Dentro de un @code{PianoStaff}, es posible hacer que un arpegio
cruce entre los pentagramas ajustando la propiedad
"
doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Arpeggio über mehrere Systeme können in anderen Kontexten als dem
"
doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Dans une double portée pour piano (@code{PianoStaff}), un arpège peut
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden crear arpegios que se cruzan entre pentagramas dentro de
contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
"
doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio
"
doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Il est possible de distribuer un arpège sur plusieurs portées d'un
\header {
lsrtags = "staff-notation"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden crear indicaciones metronómicas nuevas en modo de
marcado, pero no cambian el tempo en la salida MIDI.
"
doctitlees = "Crear indicaciones metronómicas en modo de marcado"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Neue Metronombezeichnungen können als Textbeschriftung erstellt werden,
"
doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Vous pouvez créer des indications de tempo sous la forme d'étiquettes
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Aunque la manera más fácil de añadir paréntesis a una indicación
de dinámica es utilizar un bloque @code{\\markup}, este método
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
\header {
lsrtags = "expressive-marks, keyboards, unfretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
En determinadas situaciones es necesario crear ligaduras de
expresión entre notas que están en voces distintas.
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
permiten la creación de elementos de extensión textuales tan
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden tipografiar «custos» en diferentes estilos.
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de @code{'fret-diagram-details}.
"
doctitlees = "Personalizar los diagramas de posiciones"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Eigenschaften von Bunddiagrammen können in
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones a través de @code{'fret-diagram-details}. Para los
"
doctitlees = "Personalizar diagramas de posiciones de marcado"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details}
"
doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen"
-
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La dirección predeterminada de las plicas sobre la tercera línea
del pentagrama está determinada por la propiedad
"
doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.15
+\version "2.13.29"
+
+\header {
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
+
+ texidoces = "
+Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
+el espacio del usuario, con un grabador de Scheme.
+
+Esto es básicamente una reescritura en Scheme del código de
+@file{lily/ambitus-engraver.cc}.
+
+"
+
+ doctitlees = "Definir un grabador en Scheme: grabador de ámbito"
+
+
+ lsrtags = "contexts-and-engravers"
+
+
+ texidoc = "This example demonstrates how the ambitus engraver may be
+ defined on the user side, with a Scheme engraver.
+
+ This is basically a rewrite in Scheme of the code from
+ @file{lily/ambitus-engraver.cc}.
+"
+
+ doctitle = "Defining an engraver in Scheme: ambitus engraver"
+} % begin verbatim
+
+
+#(use-modules (oop goops))
+
+%%%
+%%% Grob utilities
+%%%
+%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
+#(define (ly:event::in-event-class event class-name)
+ "Check if @var{event} the given class.
+Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}."
+ (memq class-name (ly:make-event-class (ly:event-property event 'class))))
+
+#(define (ly:separation-item::add-conditional-item grob grob-item)
+ "Add @var{grob-item} to the array of conditional elements of @var{grob}.
+Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
+ (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
+
+#(define (ly:accidental-placement::accidental-pitch accidental-grob)
+ "Get the pitch from the grob cause of @var{accidental-grob}.
+Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
+ (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
+ 'pitch))
+
+#(define (ly:accidental-placement::add-accidental grob accidental-grob)
+ "Add @var{accidental-grob}, an @code{Accidental} grob, to the
+list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
+grob.
+Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
+ (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
+ (set! (ly:grob-parent accidental-grob X) grob)
+ (set! (ly:grob-property accidental-grob 'X-offset)
+ ly:grob::x-parent-positioning)
+ (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
+ (handle (assq (ly:pitch-notename pitch) accidentals))
+ (entry (if handle (cdr handle) '())))
+ (set! (ly:grob-object grob 'accidental-grobs)
+ (assq-set! accidentals
+ (ly:pitch-notename pitch)
+ (cons accidental-grob entry))))))
+
+%%%
+%%% Ambitus data structure
+%%%
+
+%%% The <ambitus> class holds the various grobs that are created
+%%% to print an ambitus:
+%%% - ambitus-group: the grob that groups all the components of an ambitus
+%%% (Ambitus grob);
+%%% - ambitus-line: the vertical line between the upper and lower ambitus
+%%% notes (AmbitusLine grob);
+%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
+%%% for the lower and upper note of the ambitus (see <ambitus-note> class
+%%% below).
+%%% The other slots define the key and clef context of the engraver:
+%%% - start-c0: position of middle c at the beginning of the piece. It
+%%% is used to place the ambitus notes according to their pitch;
+%%% - start-key-sig: the key signature at the beginning of the piece. It
+%%% is used to determine if accidentals shall be printed next to ambitus
+%%% notes.
+
+#(define-class <ambitus> ()
+ (ambitus-group #:accessor ambitus-group)
+ (ambitus-line #:accessor ambitus-line)
+ (ambitus-up-note #:getter ambitus-up-note
+ #:init-form (make <ambitus-note>))
+ (ambitus-down-note #:getter ambitus-down-note
+ #:init-form (make <ambitus-note>))
+ (start-c0 #:accessor ambitus-start-c0
+ #:init-value #f)
+ (start-key-sig #:accessor ambitus-start-key-sig
+ #:init-value '()))
+
+%%% Accessor for the lower and upper note data of an ambitus
+#(define-method (ambitus-note (ambitus <ambitus>) direction)
+ "If @var{direction} is @code{UP}, then return the upper ambitus note
+of @var{ambitus}, otherwise return the lower ambitus note."
+ (if (= direction UP)
+ (ambitus-up-note ambitus)
+ (ambitus-down-note ambitus)))
+
+%%% The <ambitus-note> class holds the grobs that are specific to ambitus
+%%% (lower and upper) notes:
+%%% - head: an AmbitusNoteHead grob;
+%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
+%%% to the ambitus note head.
+%%% Moreover:
+%%% - pitch is the absolute pitch of the note
+%%% - cause is the note event that causes this ambitus note, i.e. the lower
+%%% or upper note of the considered music sequence.
+
+#(define-class <ambitus-note> ()
+ (head #:accessor ambitus-note-head
+ #:init-value #f)
+ (accidental #:accessor ambitus-note-accidental
+ #:init-value #f)
+ (cause #:accessor ambitus-note-cause
+ #:init-value #f)
+ (pitch #:accessor ambitus-note-pitch
+ #:init-value #f))
+
+%%%
+%%% Ambitus engraving logics
+%%%
+%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
+
+#(define (make-ambitus translator)
+ "Build an ambitus object: initialize all the grobs and their relations.
+
+The Ambitus grob contain all other grobs:
+ Ambitus
+ |- AmbitusLine
+ |- AmbitusNoteHead for upper note
+ |- AmbitusAccidental for upper note
+ |- AmbitusNoteHead for lower note
+ |- AmbitusAccidental for lower note
+
+The parent of an accidental is the corresponding note head,
+and the accidental is set as the 'accidental-grob of the note head
+so that is printed by the function that prints notes."
+ ;; make the ambitus object
+ (let ((ambitus (make <ambitus>)))
+ ;; build the Ambitus grob, which will contain all other grobs
+ (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
+ ;; build the AmbitusLine grob (line between lower and upper note)
+ (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
+ ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
+ (for-each (lambda (direction)
+ (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
+ (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
+ (group (ambitus-group ambitus)))
+ ;; The parent of the AmbitusAccidental grob is the
+ ;; AmbitusNoteHead grob
+ (set! (ly:grob-parent accidental Y) head)
+ ;; The AmbitusAccidental grob is set as the accidental-grob
+ ;; object of the AmbitusNoteHead. This is later used by the
+ ;; function that prints notes.
+ (set! (ly:grob-object head 'accidental-grob) accidental)
+ ;; both the note head and the accidental grobs are added
+ ;; to the main ambitus grob.
+ (ly:axis-group-interface::add-element group head)
+ (ly:axis-group-interface::add-element group accidental)
+ ;; the note head and the accidental grobs are added to the
+ ;; ambitus object
+ (set! (ambitus-note-head (ambitus-note ambitus direction))
+ head)
+ (set! (ambitus-note-accidental (ambitus-note ambitus direction))
+ accidental)))
+ (list DOWN UP))
+ ;; The parent of the ambitus line is the lower ambitus note head
+ (set! (ly:grob-parent (ambitus-line ambitus) X)
+ (ambitus-note-head (ambitus-note ambitus DOWN)))
+ ;; the ambitus line is added to the ambitus main grob
+ (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
+ ambitus))
+
+#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
+ "Initialize the state of @var{ambitus}, by getting the starting
+position of middle C and key signature from @var{translator}'s context."
+ (if (not (ambitus-start-c0 ambitus))
+ (begin
+ (set! (ambitus-start-c0 ambitus)
+ (ly:context-property (ly:translator-context translator)
+ 'middleCPosition
+ 0))
+ (set! (ambitus-start-key-sig ambitus)
+ (ly:context-property (ly:translator-context translator)
+ 'keySignature)))))
+
+#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
+ "Update the upper and lower ambitus pithes of @var{ambitus}, using
+@var{note-grob}."
+ ;; Get the event that caused the note-grob creation
+ ;; and check that it is a note-event.
+ (let ((note-event (ly:grob-property note-grob 'cause)))
+ (if (ly:event::in-event-class note-event 'note-event)
+ ;; get the pitch from the note event
+ (let ((pitch (ly:event-property note-event 'pitch)))
+ ;; if this pitch is lower than the current ambitus lower
+ ;; note pitch (or it has not been initialized yet),
+ ;; then this pitch is the new ambitus lower pitch,
+ ;; and conversely for upper pitch.
+ (for-each (lambda (direction pitch-compare)
+ (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
+ (pitch-compare pitch
+ (ambitus-note-pitch (ambitus-note ambitus direction))))
+ (begin
+ (set! (ambitus-note-pitch (ambitus-note ambitus direction))
+ pitch)
+ (set! (ambitus-note-cause (ambitus-note ambitus direction))
+ note-event))))
+ (list DOWN UP)
+ (list ly:pitch<? (lambda (p1 p2)
+ (ly:pitch<? p2 p1))))))))
+
+#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
+ "Typeset the ambitus:
+- place the lower and upper ambitus notes according to their pitch and
+ the position of the middle C;
+- typeset or delete the note accidentals, according to the key signature.
+ An accidental, if it is to be printed, is added to an AccidentalPlacement
+ grob (a grob dedicated to the placement of accidentals near a chord);
+- both note heads are added to the ambitus line grob, so that a line should
+ be printed between them."
+ ;; check if there are lower and upper pitches
+ (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
+ (ambitus-note-pitch (ambitus-note ambitus DOWN)))
+ ;; make an AccidentalPlacement grob, for placement of note accidentals
+ (let ((accidental-placement (ly:engraver-make-grob
+ translator
+ 'AccidentalPlacement
+ (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
+ ;; For lower and upper ambitus notes:
+ (for-each (lambda (direction)
+ (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
+ ;; set the cause and the staff position of the ambitus note
+ ;; according to the associated pitch
+ (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
+ 'cause)
+ (ambitus-note-cause (ambitus-note ambitus direction)))
+ (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
+ 'staff-position)
+ (+ (ambitus-start-c0 ambitus)
+ (ly:pitch-steps pitch)))
+ ;; determine if an accidental shall be printed for this note,
+ ;; according to the key signature
+ (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
+ (ly:pitch-notename pitch))
+ (ambitus-start-key-sig ambitus))
+ (assoc (ly:pitch-notename pitch)
+ (ambitus-start-key-sig ambitus))))
+ (sig-alter (if handle (cdr handle) 0)))
+ (cond ((= (ly:pitch-alteration pitch) sig-alter)
+ ;; the note alteration is in the key signature
+ ;; => it does not have to be printed
+ (ly:grob-suicide!
+ (ambitus-note-accidental (ambitus-note ambitus direction)))
+ (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
+ 'accidental-grob)
+ '()))
+ (else
+ ;; otherwise, the accidental shall be printed
+ (set! (ly:grob-property (ambitus-note-accidental
+ (ambitus-note ambitus direction))
+ 'alteration)
+ (ly:pitch-alteration pitch)))))
+ ;; add the AccidentalPlacement grob to the
+ ;; conditional items of the AmbitusNoteHead
+ (ly:separation-item::add-conditional-item
+ (ambitus-note-head (ambitus-note ambitus direction))
+ accidental-placement)
+ ;; add the AmbitusAccidental to the list of the
+ ;; AccidentalPlacement grob accidentals
+ (ly:accidental-placement::add-accidental
+ accidental-placement
+ (ambitus-note-accidental (ambitus-note ambitus direction)))
+ ;; add the AmbitusNoteHead grob to the AmbitusLine grob
+ (ly:pointer-group-interface::add-grob
+ (ambitus-line ambitus)
+ 'note-heads
+ (ambitus-note-head (ambitus-note ambitus direction)))))
+ (list DOWN UP))
+ ;; add the AccidentalPlacement grob to the main Ambitus grob
+ (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
+ ;; no notes ==> suicide the grobs
+ (begin
+ (for-each (lambda (direction)
+ (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
+ (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
+ (list DOWN UP))
+ (ly:grob-suicide! ambitus-line))))
+
+%%%
+%%% Ambitus engraver definition
+%%%
+#(define ambitus-engraver
+ (lambda (context)
+ (let ((ambitus #f))
+ ;; when music is processed: make the ambitus object, if not already built
+ `((process-music . ,(lambda (translator)
+ (if (not ambitus)
+ (set! ambitus (make-ambitus translator)))))
+ ;; set the ambitus clef and key signature state
+ (stop-translation-timestep . ,(lambda (translator)
+ (if ambitus
+ (initialize-ambitus-state ambitus translator))))
+ ;; when a note-head grob is built, update the ambitus notes
+ (acknowledgers
+ (note-head-interface . ,(lambda (engraver grob source-engraver)
+ (if ambitus
+ (update-ambitus-notes ambitus grob)))))
+ ;; finally, typeset the ambitus according to its upper and lower notes
+ ;; (if any).
+ (finalize . ,(lambda (translator)
+ (if ambitus
+ (typeset-ambitus ambitus translator))))))))
+
+%%%
+%%% Example
+%%%
+
+\score {
+ \new StaffGroup <<
+ \new Staff { c'4 des' e' fis' gis' }
+ \new Staff { \clef "bass" c4 des ~ des ees b, }
+ >>
+ \layout { \context { \Staff \consists #ambitus-engraver } }
+}
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden añadir diagramas de posiciones predefinidas para
"
doctitlees = "Definición de posiciones predefinidas para otros instrumentos"
-
%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e
texidocde = "
Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden
"
doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si hay un solo pentagrama en un de los tipos de sistema
@code{ChoirStaff} o @code{StaffGroup}, el comportamiento
doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder
"
doctitlede = "Klammer anzeigen wenn nur ein System gesetzt wird"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Lorsque, dans des regoupements de type @code{ChoirStaff} ou
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
He aquí una forma de imprimir un acorde en el que suena la misma nota
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Alteraciones de estilo dodecafónico para todas las notas incluidas las naturales"
texidoces = "
En las obras de principios del s.XX, empezando por Schoenberg, Berg y
+++ /dev/null
-% Do not edit this file; it is automatically
-% generated from Documentation/snippets/new
-% This file is in the public domain.
-%% Note: this file works from version 2.13.26
-\version "2.13.26"
-\header {
- lsrtags = "rhythms,expressive-marks"
- texidoc = "This code demonstrates how to change the number of
-augmentation dots on a single note."
- doctitle = "Changing the number of augmentation dots per note"
-} % begin verbatim
-
-
-\relative c' {
- c4.. a16 r2 |
- \override Dots #'dot-count = #4
- c4.. a16 r2 |
- \override Dots #'dot-count = #0
- c4.. a16 r2 |
- \revert Dots #'dot-count
- c4.. a16 r2 |
-}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.8
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Funciones postfijas para la creación de objetos de extensión de texto
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.20
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede insertar códico PostScript directamente dentro de un
bloque @code{\\markup}.
\header {
lsrtags = "contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Del problema central de la notación, esto es, crear un determinado
símbolo, se encargan los «plugins» o complementos añadidos. Cada
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Grabado manual de las ligaduras"
texidoces = "
Se pueden grabar a mano las ligaduras modificando la propiedad
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Überbindungen können manuell gesetzt werden, indem man die
doctitlede = "Bindebögen manuell setzen"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Il est possible de graver manuellement les liaisons de tenue, en
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
texidoces = "
La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede
doctitlede = "Mehrere Triolen notieren aber nur einmal \\times benutzen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
changing-text-and-spanner-styles-for-text-dynamics.ly
changing-the-appearance-of-a-slur-from-solid-to-dotted-or-dashed.ly
changing-the-breath-mark-symbol.ly
+changing-the-number-of-augmentation-dots-per-note.ly
combining-dynamics-with-markup-texts.ly
contemporary-glissando.ly
controlling-spanner-visibility-after-a-line-break.ly
creating-simultaneous-rehearsal-marks.ly
creating-slurs-across-voices.ly
creating-text-spanners.ly
-dot-count-override.ly
double-glissando.ly
dynamics-custom-text-spanner-postfix.ly
dynamics-text-spanner-postfix.ly
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
ragged-right = ##f
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
En este ejemplo se combinan las digitaciones de la mano izquierda,
indicaciones del número de cuerda y digitaciones de la mano
"
doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern
"
doctitlede = "Fingersatz Saitennummern und Fingersatz für die rechte Hand"
-
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Son posibles tanto los corchetes rectos sobre notas sueltas como
extremos de barra sueltos en figuras unidas, con una combinación de
doctitlees = "Corchetes rectos y extremos de barra sueltos"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei
doctitlede = "Gerade Fähnchen und überstehende Balkenenden"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Forzar el desplazamiento horizontal de las notas"
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere
"
doctitlede = "Horizontale Verschiebung von Noten erzwingen"
-
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet
\header {
lsrtags = "vocal-music"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si LilyPond no cree que haya sitio suficiente para un guión separador
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.20
+%% Note: this file works from version 2.13.29
% INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings %
% Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17" %
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
e,1 | % m. 4
%% new section starts here in A minor
- \overrideBeamSettings #'Score #'(4 . 4) #'end
- #'((* . (1 1 1 1))
- ((1 . 12) . (3 3 3 3)))
+ \set Score.beamExceptions = #'()
\once \override TextScript #'staff-padding = #1.7
\times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este fragmento de código basado en Scheme genera
24 notas aleatorias (o tantas como se necesiten), basándose en la
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede cambiar el aspecto de las líneas de rejilla
sobreescribiendo algunas de sus propiedades.
"
doctitlees = "Líneas de rejilla: modificar su aspecto"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften
"
doctitlede = "Gitternetzlinien: Aussehen verändern"
-
%% Translation of GIT committish: 9ccf7f0f5e52e074f3b7852416ad5b78718395c8
texidocfr = "
Modifier certaines des propriétés du cadrillage temporel aura pour effet
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden trazar líneas verticales normales entre pentagramas para
mostrar la relación entre notas; sin embargo, en caso de música
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los patrones de barrado se pueden alterar con la propiedad
@code{beatGrouping}:
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
\header {
lsrtags = "rhythms, fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
"
doctitlees = "Ritmos rasgueados de guitarra"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und
doctitlede = "Schlagrhythmus für Guitarren"
-
%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89
texidocfr = "
En matière de notation pour guitare, il arrive que soient indiqués les
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los reguladores pueden imprimirse en uno cualquiera de los estilos de
@code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.26
+\version "2.13.29"
+\header {
+ lsrtags = "pitches"
+ texidoc = "This shows how to hide accidentals on tied notes at the beginning of a
+new system."
+ doctitle = "Hiding accidentals on tied notes at the beginning of a new system"
+} % begin verbatim
+
+
+\relative c'' {
+ \override Accidental #'hide-tied-accidental-after-break = ##t
+ cis1~ cis~
+ \break
+ cis
+}
+
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0c1494d93d3ac391fe549a02e8198fe628edac17
texidoces = "
Los cambios de dinámica con estilo de texto (como cresc. y dim.)
se imprimen con una línea intermitente que muestra su alcance.
"
doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie
"
doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les crescendos et decrescendos indiqués textuellement -- tels que
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los «incipit» se pueden escribir utilizando el grob del nombre del
instruemento, pero manteniendo independientes las definiciones del
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Un corchete de arpegio puede indicar que se tienen que tocar con la
misma mano notas que están en dos pentagramas distintos. Para hacerlo,
"
doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las marcas de cesura se pueden crear sobreescribiendo la propiedad
@code{'text} del objeto @code{BreathingSign}. También está disponible
"
doctitlees = "Insertar una cesura"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft
Zäsurzeichen ist auch möglich.
"
doctitlede = "Eine Zäsur einfügen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Une surcharge de la propriété @code{'text} de l'objet
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
También se pueden imprimir símbolos de porcentaje sueltos. Esto se
hace introduciendo un silencio multicompás con una función de
"
doctitlees = "Símbolos de porcentaje sueltos"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird
"
doctitlede = "Isolierte Prozentwiederholungen"
-
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Des symboles de pourcentage isolés peuvent aussi être obtenus, au
\header {
lsrtags = "keyboards, percussion, fretted-strings, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
"
doctitlees = "Plantilla para combo de jazz"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
"
doctitlede = "Vorlage für Jazz-Combo"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Bien que compliqué de prime abord, voici un canevas tout à fait indiqué
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La tablatura se puede formatear utilizando letras en lugar de números.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden aplicar puntas de flecha a los elementos de extensión de
texto y de línea (como el Glissando).
\header {
lsrtags = "text, vocal-music"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las ligaduras de expresión se pueden construir con patrones de
\header {
lsrtags = "staff-notation, editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
"
doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker
"
doctitlede = "Eine Linie des Notensystems dicker als die anderen machen"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines
} % begin verbatim
speakOn = {
- \override Stem #'stencil = #(lambda (grob)
- (let* ((x-parent (ly:grob-parent grob X))
- (is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
- (if is-rest?
- empty-stencil
- (ly:stencil-combine-at-edge
- (ly:stem::print grob)
- Y
- (- (ly:grob-property grob 'direction))
- (grob-interpret-markup grob
- (markup #:hspace -1.025 #:fontsize -4
- #:musicglyph "noteheads.s2cross"))
- -2.3 0))))
+ \override Stem #'stencil =
+ #(lambda (grob)
+ (let* ((x-parent (ly:grob-parent grob X))
+ (is-rest? (ly:grob? (ly:grob-object x-parent 'rest))))
+ (if is-rest?
+ empty-stencil
+ (ly:stencil-combine-at-edge
+ (ly:stem::print grob)
+ Y
+ (- (ly:grob-property grob 'direction))
+ (grob-interpret-markup grob
+ (markup #:center-align #:fontsize -4
+ #:musicglyph "noteheads.s2cross"))
+ -2.3 0))))
}
speakOff = {
\header {
lsrtags = "repeats, staff-notation, editorial-annotations"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
\header {
lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
"
doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
En musique mensurale, les barres de mesure ne traversent pas les
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Utilice un texto de marcado para sustituir el glifo de clave (TAB) con
una fuente tipográfica moderna.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las abreviaturas se encuentran definidas dentro del archivo
@code{ly/script-init.ly}, donde las variables @code{dashHat},
"
doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo
"
doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les raccourcis sont répertoriés dans le fichier
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede ajustar la posición vertical de una ligadura de
expresiónutilizando la propiedad @code{positions} del objeto
\header {
lsrtags = "rhythms, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
doctitlees = "Marcado de silencios multicompás"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird,
wird über oder unter der Pause zentriert. Lange Beschriftungen
doctitlede = "Textbeschriftung und Mehrtaktpausen"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Lorsque du texte est attaché à un silence multi-mesures, il sera centré
\header {
lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede utilizar la propiedad
@code{systemStartDelimiterHierarchy} para crear grupos de
"
doctitlees = "Anidado de grupos de pentagramas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt
"
doctitlede = "Systeme schachteln"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
La propriété @code{systemStartDelimiterHierarchy} permet de créer des
--- /dev/null
+\version "2.13.29"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+Beams can be subdivided automatically. By setting the property
+@code{subdivideBeams}, beams are subdivided at beat positions (as
+specified in @code{baseMoment}).
+
+"
+ doctitle = "Automatic beam subdivisions"
+}
+
+\new Staff {
+ \relative c'' {
+ <<
+ {
+ \voiceOne
+ \set subdivideBeams = ##t
+ b32[ a g f c' b a g
+ b32^"subdivide beams" a g f c' b a g]
+ }
+ \new Voice {
+ \voiceTwo
+ b32_"default"[ a g f c' b a g
+ b32 a g f c' b a g]
+ }
+ >>
+ \oneVoice
+ \set baseMoment = #(ly:make-moment 1 8)
+ \set beatStructure = #'(2 2 2 2)
+ b32^"baseMoment 1 8"[ a g f c' b a g]
+ \set baseMoment = #(ly:make-moment 1 16)
+ \set beatStructure = #'(4 4 4 4)
+ b32^"baseMoment 1 16"[ a g f c' b a g]
+ }
+}
+
-\version "2.13.4"
+\version "2.13.29"
\header {
lsrtags = "rhythms"
texidoc = "
-Beam-ending rules specified in the @code{Score} context apply to all
+Beat structure rules specified in the @code{Score} context apply to all
staves, but can be modified at both @code{Staff} and @code{Voice}
levels:
"
\relative c'' {
\time 5/4
% Set default beaming for all staves
- \overrideBeamSettings #'Score #'(5 . 4) #'end
- #'(((1 . 8) . (3 4 3))
- ((1 . 16) . (6 8 6))
- ((1 . 32) . (12 16 12)))
+ \set Score.baseMoment = #(ly:make-moment 1 8)
+ \set Score.beatStructure = #'(3 4 3)
<<
\new Staff {
c8 c c c c c c c c c
}
\new Staff {
% Modify beaming for just this staff
- \overrideBeamSettings #'Staff #'(5 . 4) #'end
- #'((* . (3 2)))
+ \set Staff.beatStructure = #'(6 4)
c8 c c c c c c c c c
}
\new Staff {
% Modify beaming for this voice only
\new Voice {
\voiceTwo
- \overrideBeamSettings #'Voice #'(5 . 4) #'end
- #'((* . (3 2)))
+ \set Voice.beatStructure = #'(6 4)
a8 a a a a a a a a a
}
>>
-\version "2.13.4"
+\version "2.13.29"
\header {
lsrtags = "rhythms"
texidoc = "
-There are no default automatic beam groupings specified for 7/8 time,
-so if automatic beams are required the grouping must be specified. For
-example, to group all beams 2-3-2 in 7/8 time, specify beam endings at
-2/8 and 5/8:
+There is no default beat structure specified for 7/8 time,
+so if automatic beams are required the structure must be specified. For
+example, to group all beams 2-3-2 in 7/8 time, specify the
+beat structure to be (2 3 2):
"
doctitle = "Beam grouping in 7/8 time"
}
\time 7/8
% rhythm 2-3-2
a8 a a a a a a
- \overrideBeamSettings #'Score #'(7 . 8) #'end
- #'((* . (2 3 2)))
+ \set Score.beatStructure = #'(2 3 2)
a8 a a a a a a
}
--- /dev/null
+\version "2.13.15"
+
+\header {
+ lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
+ texidoc = "
+For technical reasons, text scripts attached to note heads cannot
+easily be centered on a note head's width, unlike articulations.
+
+Instead of using trial-and-error offset tweaks, this snippet uses a
+Scheme engraver to reset the horizontal parent of each markup to a
+@code{NoteColumn}. This also allows text to follow note heads which have
+been shifted via @code{force-hshift}.
+"
+ doctitle = "Centering markup on note heads automatically"
+}
+
+#(define (Text_align_engraver ctx)
+ (let ((scripts '())
+ (note-column #f))
+
+ `((acknowledgers
+ (note-column-interface
+ . ,(lambda (trans grob source)
+ ;; cache NoteColumn in this Voice context
+ (set! note-column grob)))
+
+ (text-script-interface
+ . ,(lambda (trans grob source)
+ ;; whenever a TextScript is acknowledged,
+ ;; add it to `scripts' list
+ (set! scripts (cons grob scripts)))))
+
+ (stop-translation-timestep
+ . ,(lambda (trans)
+ ;; if any TextScript grobs exist,
+ ;; set NoteColumn as X-parent
+ (and (pair? scripts)
+ (for-each (lambda (script)
+ (set! (ly:grob-parent script X) note-column))
+ scripts))
+ ;; clear scripts ready for next timestep
+ (set! scripts '()))))))
+
+\layout {
+ \context {
+ \Voice
+ \consists #Text_align_engraver
+ \override TextScript #'X-offset =
+ #ly:self-alignment-interface::aligned-on-x-parent
+ \override TextScript #'self-alignment-X = #CENTER
+ }
+}
+
+\new Staff <<
+ \relative c'' {
+ \override NoteColumn #'force-hshift = #3
+ c1-\markup { \arrow-head #Y #DOWN ##t }
+ }
+ \\
+ \relative c' {
+ a4 a-\markup { \huge ^ } a a
+ }
+>>
--- /dev/null
+\version "2.13.26"
+\header {
+ lsrtags = "pitches"
+ texidoc = "It is possible to change the default gap setting for
+ambitus."
+
+ doctitle = "Changing the ambitus gap"
+}
+
+
+\layout {
+ \context {
+ \Voice
+ \consists "Ambitus_engraver"
+ }
+}
+
+\new Staff {
+ \time 2/4
+ % Default setting
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #0
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #1
+ c'4 g''
+}
+
+\new Staff {
+ \time 2/4
+ \override AmbitusLine #'gap = #1.5
+ c'4 g''
+}
--- /dev/null
+\version "2.13.26"
+\header {
+ lsrtags = "rhythms,expressive-marks"
+ texidoc = "This code demonstrates how to change the number of
+augmentation dots on a single note."
+ doctitle = "Changing the number of augmentation dots per note"
+}
+
+\relative c' {
+ c4.. a16 r2 |
+ \override Dots #'dot-count = #4
+ c4.. a16 r2 |
+ \override Dots #'dot-count = #0
+ c4.. a16 r2 |
+ \revert Dots #'dot-count
+ c4.. a16 r2 |
+}
-\version "2.13.4"
+\version "2.13.29"
\header {
lsrtags = "rhythms"
\relative c' {
\override Staff.TimeSignature #'stencil = #(compound-time "2" "3" "8")
\time 5/8
- \overrideBeamSettings #'Staff #'(5 . 8) #'end
- #'((* . (2 3)))
+ \set Staff.beatStructure = #'(2 3)
c8 d e fis gis
c8 fis, gis e d
c8 d e4 gis8
-\version "2.13.4"
+\version "2.13.29"
\header {
lsrtags = "rhythms"
texidoc = "
-Beat grouping within a bar is controlled by the default grouping
-established in @code{beamSettings}. This grouping can be established
-by the use of @code{\\overrideBeamSettings}. Alternatively, the
+Beat grouping within a measure is controlled by the context property
+@code{beatStructure}. Values of @code{beatStructure} are
+established for many time signatures in
+@file{scm/time-signature-settings.scm}. Values of @code{beatStructure}
+can be changed or set with @code{\set}.
+Alternatively, the
Scheme function @code{set-time-signature} can be used to both
-set the time signature and establish the default grouping rule.
+set the time signature and establish the beat structure.
@code{set-time-signature}, takes three arguments: the
number of beats, the beat length, and the internal grouping of beats in
-the measure. If the @code{Measure_grouping_engraver} is included
+the measure. @code{\time} and @code{set-time-signature} both apply
+to the @code{Timing} context, so they will not reset values of
+@code{beatStructure} or @code{baseMoment} that are set in
+other lower-level contexts, such as @code{Voice}.
+
+If the @code{Measure_grouping_engraver} is included
in one of the display contexts, measure grouping signs will be
created. Such signs ease reading rhythmically complex modern music.
In the example, the 9/8 measure is grouped in two different
patterns using the two different methods, while the 5/8 measure
is grouped according to the default setting in
-@file{scm/beam-settings.scm}:
+@file{scm/time-signature-settings.scm}:
"
doctitle = "Conducting signs, measure grouping signs"
}
+
\score {
- \relative c'' {
+ \new Voice \relative c'' {
\time 9/8
- \overrideBeamSettings #'Score #'(9 . 8) #'end #'((* . (2 2 2 3)))
+ g8 g d d g g a( bes g) |
+ \set Timing.beatStructure = #'(2 2 2 3)
g8 g d d g g a( bes g) |
#(set-time-signature 9 8 '(4 5))
g8 g d d g g a( bes g) |
--- /dev/null
+\version "2.13.15"
+
+\header {
+
+ lsrtags = "contexts-and-engravers"
+
+
+ texidoc = "This example demonstrates how the ambitus engraver may be
+ defined on the user side, with a Scheme engraver.
+
+ This is basically a rewrite in Scheme of the code from
+ @file{lily/ambitus-engraver.cc}.
+"
+
+ doctitle = "Defining an engraver in Scheme: ambitus engraver"
+}
+
+#(use-modules (oop goops))
+
+%%%
+%%% Grob utilities
+%%%
+%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
+#(define (ly:event::in-event-class event class-name)
+ "Check if @var{event} the given class.
+Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}."
+ (memq class-name (ly:make-event-class (ly:event-property event 'class))))
+
+#(define (ly:separation-item::add-conditional-item grob grob-item)
+ "Add @var{grob-item} to the array of conditional elements of @var{grob}.
+Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
+ (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
+
+#(define (ly:accidental-placement::accidental-pitch accidental-grob)
+ "Get the pitch from the grob cause of @var{accidental-grob}.
+Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
+ (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
+ 'pitch))
+
+#(define (ly:accidental-placement::add-accidental grob accidental-grob)
+ "Add @var{accidental-grob}, an @code{Accidental} grob, to the
+list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
+grob.
+Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
+ (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
+ (set! (ly:grob-parent accidental-grob X) grob)
+ (set! (ly:grob-property accidental-grob 'X-offset)
+ ly:grob::x-parent-positioning)
+ (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
+ (handle (assq (ly:pitch-notename pitch) accidentals))
+ (entry (if handle (cdr handle) '())))
+ (set! (ly:grob-object grob 'accidental-grobs)
+ (assq-set! accidentals
+ (ly:pitch-notename pitch)
+ (cons accidental-grob entry))))))
+
+%%%
+%%% Ambitus data structure
+%%%
+
+%%% The <ambitus> class holds the various grobs that are created
+%%% to print an ambitus:
+%%% - ambitus-group: the grob that groups all the components of an ambitus
+%%% (Ambitus grob);
+%%% - ambitus-line: the vertical line between the upper and lower ambitus
+%%% notes (AmbitusLine grob);
+%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
+%%% for the lower and upper note of the ambitus (see <ambitus-note> class
+%%% below).
+%%% The other slots define the key and clef context of the engraver:
+%%% - start-c0: position of middle c at the beginning of the piece. It
+%%% is used to place the ambitus notes according to their pitch;
+%%% - start-key-sig: the key signature at the beginning of the piece. It
+%%% is used to determine if accidentals shall be printed next to ambitus
+%%% notes.
+
+#(define-class <ambitus> ()
+ (ambitus-group #:accessor ambitus-group)
+ (ambitus-line #:accessor ambitus-line)
+ (ambitus-up-note #:getter ambitus-up-note
+ #:init-form (make <ambitus-note>))
+ (ambitus-down-note #:getter ambitus-down-note
+ #:init-form (make <ambitus-note>))
+ (start-c0 #:accessor ambitus-start-c0
+ #:init-value #f)
+ (start-key-sig #:accessor ambitus-start-key-sig
+ #:init-value '()))
+
+%%% Accessor for the lower and upper note data of an ambitus
+#(define-method (ambitus-note (ambitus <ambitus>) direction)
+ "If @var{direction} is @code{UP}, then return the upper ambitus note
+of @var{ambitus}, otherwise return the lower ambitus note."
+ (if (= direction UP)
+ (ambitus-up-note ambitus)
+ (ambitus-down-note ambitus)))
+
+%%% The <ambitus-note> class holds the grobs that are specific to ambitus
+%%% (lower and upper) notes:
+%%% - head: an AmbitusNoteHead grob;
+%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
+%%% to the ambitus note head.
+%%% Moreover:
+%%% - pitch is the absolute pitch of the note
+%%% - cause is the note event that causes this ambitus note, i.e. the lower
+%%% or upper note of the considered music sequence.
+
+#(define-class <ambitus-note> ()
+ (head #:accessor ambitus-note-head
+ #:init-value #f)
+ (accidental #:accessor ambitus-note-accidental
+ #:init-value #f)
+ (cause #:accessor ambitus-note-cause
+ #:init-value #f)
+ (pitch #:accessor ambitus-note-pitch
+ #:init-value #f))
+
+%%%
+%%% Ambitus engraving logics
+%%%
+%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
+
+#(define (make-ambitus translator)
+ "Build an ambitus object: initialize all the grobs and their relations.
+
+The Ambitus grob contain all other grobs:
+ Ambitus
+ |- AmbitusLine
+ |- AmbitusNoteHead for upper note
+ |- AmbitusAccidental for upper note
+ |- AmbitusNoteHead for lower note
+ |- AmbitusAccidental for lower note
+
+The parent of an accidental is the corresponding note head,
+and the accidental is set as the 'accidental-grob of the note head
+so that is printed by the function that prints notes."
+ ;; make the ambitus object
+ (let ((ambitus (make <ambitus>)))
+ ;; build the Ambitus grob, which will contain all other grobs
+ (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
+ ;; build the AmbitusLine grob (line between lower and upper note)
+ (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
+ ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
+ (for-each (lambda (direction)
+ (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
+ (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
+ (group (ambitus-group ambitus)))
+ ;; The parent of the AmbitusAccidental grob is the
+ ;; AmbitusNoteHead grob
+ (set! (ly:grob-parent accidental Y) head)
+ ;; The AmbitusAccidental grob is set as the accidental-grob
+ ;; object of the AmbitusNoteHead. This is later used by the
+ ;; function that prints notes.
+ (set! (ly:grob-object head 'accidental-grob) accidental)
+ ;; both the note head and the accidental grobs are added
+ ;; to the main ambitus grob.
+ (ly:axis-group-interface::add-element group head)
+ (ly:axis-group-interface::add-element group accidental)
+ ;; the note head and the accidental grobs are added to the
+ ;; ambitus object
+ (set! (ambitus-note-head (ambitus-note ambitus direction))
+ head)
+ (set! (ambitus-note-accidental (ambitus-note ambitus direction))
+ accidental)))
+ (list DOWN UP))
+ ;; The parent of the ambitus line is the lower ambitus note head
+ (set! (ly:grob-parent (ambitus-line ambitus) X)
+ (ambitus-note-head (ambitus-note ambitus DOWN)))
+ ;; the ambitus line is added to the ambitus main grob
+ (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
+ ambitus))
+
+#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
+ "Initialize the state of @var{ambitus}, by getting the starting
+position of middle C and key signature from @var{translator}'s context."
+ (if (not (ambitus-start-c0 ambitus))
+ (begin
+ (set! (ambitus-start-c0 ambitus)
+ (ly:context-property (ly:translator-context translator)
+ 'middleCPosition
+ 0))
+ (set! (ambitus-start-key-sig ambitus)
+ (ly:context-property (ly:translator-context translator)
+ 'keySignature)))))
+
+#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
+ "Update the upper and lower ambitus pithes of @var{ambitus}, using
+@var{note-grob}."
+ ;; Get the event that caused the note-grob creation
+ ;; and check that it is a note-event.
+ (let ((note-event (ly:grob-property note-grob 'cause)))
+ (if (ly:event::in-event-class note-event 'note-event)
+ ;; get the pitch from the note event
+ (let ((pitch (ly:event-property note-event 'pitch)))
+ ;; if this pitch is lower than the current ambitus lower
+ ;; note pitch (or it has not been initialized yet),
+ ;; then this pitch is the new ambitus lower pitch,
+ ;; and conversely for upper pitch.
+ (for-each (lambda (direction pitch-compare)
+ (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
+ (pitch-compare pitch
+ (ambitus-note-pitch (ambitus-note ambitus direction))))
+ (begin
+ (set! (ambitus-note-pitch (ambitus-note ambitus direction))
+ pitch)
+ (set! (ambitus-note-cause (ambitus-note ambitus direction))
+ note-event))))
+ (list DOWN UP)
+ (list ly:pitch<? (lambda (p1 p2)
+ (ly:pitch<? p2 p1))))))))
+
+#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
+ "Typeset the ambitus:
+- place the lower and upper ambitus notes according to their pitch and
+ the position of the middle C;
+- typeset or delete the note accidentals, according to the key signature.
+ An accidental, if it is to be printed, is added to an AccidentalPlacement
+ grob (a grob dedicated to the placement of accidentals near a chord);
+- both note heads are added to the ambitus line grob, so that a line should
+ be printed between them."
+ ;; check if there are lower and upper pitches
+ (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
+ (ambitus-note-pitch (ambitus-note ambitus DOWN)))
+ ;; make an AccidentalPlacement grob, for placement of note accidentals
+ (let ((accidental-placement (ly:engraver-make-grob
+ translator
+ 'AccidentalPlacement
+ (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
+ ;; For lower and upper ambitus notes:
+ (for-each (lambda (direction)
+ (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
+ ;; set the cause and the staff position of the ambitus note
+ ;; according to the associated pitch
+ (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
+ 'cause)
+ (ambitus-note-cause (ambitus-note ambitus direction)))
+ (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
+ 'staff-position)
+ (+ (ambitus-start-c0 ambitus)
+ (ly:pitch-steps pitch)))
+ ;; determine if an accidental shall be printed for this note,
+ ;; according to the key signature
+ (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
+ (ly:pitch-notename pitch))
+ (ambitus-start-key-sig ambitus))
+ (assoc (ly:pitch-notename pitch)
+ (ambitus-start-key-sig ambitus))))
+ (sig-alter (if handle (cdr handle) 0)))
+ (cond ((= (ly:pitch-alteration pitch) sig-alter)
+ ;; the note alteration is in the key signature
+ ;; => it does not have to be printed
+ (ly:grob-suicide!
+ (ambitus-note-accidental (ambitus-note ambitus direction)))
+ (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
+ 'accidental-grob)
+ '()))
+ (else
+ ;; otherwise, the accidental shall be printed
+ (set! (ly:grob-property (ambitus-note-accidental
+ (ambitus-note ambitus direction))
+ 'alteration)
+ (ly:pitch-alteration pitch)))))
+ ;; add the AccidentalPlacement grob to the
+ ;; conditional items of the AmbitusNoteHead
+ (ly:separation-item::add-conditional-item
+ (ambitus-note-head (ambitus-note ambitus direction))
+ accidental-placement)
+ ;; add the AmbitusAccidental to the list of the
+ ;; AccidentalPlacement grob accidentals
+ (ly:accidental-placement::add-accidental
+ accidental-placement
+ (ambitus-note-accidental (ambitus-note ambitus direction)))
+ ;; add the AmbitusNoteHead grob to the AmbitusLine grob
+ (ly:pointer-group-interface::add-grob
+ (ambitus-line ambitus)
+ 'note-heads
+ (ambitus-note-head (ambitus-note ambitus direction)))))
+ (list DOWN UP))
+ ;; add the AccidentalPlacement grob to the main Ambitus grob
+ (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
+ ;; no notes ==> suicide the grobs
+ (begin
+ (for-each (lambda (direction)
+ (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
+ (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
+ (list DOWN UP))
+ (ly:grob-suicide! ambitus-line))))
+
+%%%
+%%% Ambitus engraver definition
+%%%
+#(define ambitus-engraver
+ (lambda (context)
+ (let ((ambitus #f))
+ ;; when music is processed: make the ambitus object, if not already built
+ `((process-music . ,(lambda (translator)
+ (if (not ambitus)
+ (set! ambitus (make-ambitus translator)))))
+ ;; set the ambitus clef and key signature state
+ (stop-translation-timestep . ,(lambda (translator)
+ (if ambitus
+ (initialize-ambitus-state ambitus translator))))
+ ;; when a note-head grob is built, update the ambitus notes
+ (acknowledgers
+ (note-head-interface . ,(lambda (engraver grob source-engraver)
+ (if ambitus
+ (update-ambitus-notes ambitus grob)))))
+ ;; finally, typeset the ambitus according to its upper and lower notes
+ ;; (if any).
+ (finalize . ,(lambda (translator)
+ (if ambitus
+ (typeset-ambitus ambitus translator))))))))
+
+%%%
+%%% Example
+%%%
+
+\score {
+ \new StaffGroup <<
+ \new Staff { c'4 des' e' fis' gis' }
+ \new Staff { \clef "bass" c4 des ~ des ees b, }
+ >>
+ \layout { \context { \Staff \consists #ambitus-engraver } }
+}
+++ /dev/null
-\version "2.13.26"
-\header {
- lsrtags = "rhythms,expressive-marks"
- texidoc = "This code demonstrates how to change the number of
-augmentation dots on a single note."
- doctitle = "Changing the number of augmentation dots per note"
-}
-
-\relative c' {
- c4.. a16 r2 |
- \override Dots #'dot-count = #4
- c4.. a16 r2 |
- \override Dots #'dot-count = #0
- c4.. a16 r2 |
- \revert Dots #'dot-count
- c4.. a16 r2 |
-}
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
e,1 | % m. 4
%% new section starts here in A minor
- \overrideBeamSettings #'Score #'(4 . 4) #'end
- #'((* . (1 1 1 1))
- ((1 . 12) . (3 3 3 3)))
+ \set Score.beamExceptions = #'()
\once \override TextScript #'staff-padding = #1.7
\times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
--- /dev/null
+\version "2.13.26"
+\header {
+ lsrtags = "pitches"
+ texidoc = "This shows how to hide accidentals on tied notes at the beginning of a
+new system."
+ doctitle = "Hiding accidentals on tied notes at the beginning of a new system"
+}
+
+\relative c'' {
+ \override Accidental #'hide-tied-accidental-after-break = ##t
+ cis1~ cis~
+ \break
+ cis
+}
+
-\version "2.13.4"
+\version "2.13.29"
\header {
lsrtags = "rhythms"
texidoc = "
-To typeset beams grouped @code{3-4-3-2} in 12/8 it is no longer
-necessary first to override the default beam endings in 12/8,and
-then to set up the new beaming endings:
+To typeset beams grouped @code{3-4-3-2} one need only change the
+beat structure:
"
doctitle = "Reverting default beam endings"
}
a8 a a a a a a a a a a a
% Set new values for beam endings
- \overrideBeamSettings #'Score #'(12 . 8) #'end
- #'((* . (3 4 3 2)))
+ \set Score.beatStructure = #'(3 4 3 2)
a8 a a a a a a a a a a a
}
+++ /dev/null
-\version "2.13.15"
-
-\header {
-
- lsrtags = "contexts-and-engravers"
-
-
- texidoc = "This example demonstrates how the ambitus engraver may be
- defined on the user side, with a Scheme engraver.
-
- This is basically a rewrite in Scheme of the code from
- @file{lily/ambitus-engraver.cc}.
-"
-
- doctitle = "Defining an engraver in Scheme: ambitus engraver"
-}
-
-#(use-modules (oop goops))
-
-%%%
-%%% Grob utilities
-%%%
-%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
-#(define (ly:event::in-event-class event class-name)
- "Check if @var{event} the given class.
-Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}."
- (memq class-name (ly:make-event-class (ly:event-property event 'class))))
-
-#(define (ly:separation-item::add-conditional-item grob grob-item)
- "Add @var{grob-item} to the array of conditional elements of @var{grob}.
-Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
- (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
-
-#(define (ly:accidental-placement::accidental-pitch accidental-grob)
- "Get the pitch from the grob cause of @var{accidental-grob}.
-Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
- (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
- 'pitch))
-
-#(define (ly:accidental-placement::add-accidental grob accidental-grob)
- "Add @var{accidental-grob}, an @code{Accidental} grob, to the
-list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
-grob.
-Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
- (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
- (set! (ly:grob-parent accidental-grob X) grob)
- (set! (ly:grob-property accidental-grob 'X-offset)
- ly:grob::x-parent-positioning)
- (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
- (handle (assq (ly:pitch-notename pitch) accidentals))
- (entry (if handle (cdr handle) '())))
- (set! (ly:grob-object grob 'accidental-grobs)
- (assq-set! accidentals
- (ly:pitch-notename pitch)
- (cons accidental-grob entry))))))
-
-%%%
-%%% Ambitus data structure
-%%%
-
-%%% The <ambitus> class holds the various grobs that are created
-%%% to print an ambitus:
-%%% - ambitus-group: the grob that groups all the components of an ambitus
-%%% (Ambitus grob);
-%%% - ambitus-line: the vertical line between the upper and lower ambitus
-%%% notes (AmbitusLine grob);
-%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
-%%% for the lower and upper note of the ambitus (see <ambitus-note> class
-%%% below).
-%%% The other slots define the key and clef context of the engraver:
-%%% - start-c0: position of middle c at the beginning of the piece. It
-%%% is used to place the ambitus notes according to their pitch;
-%%% - start-key-sig: the key signature at the beginning of the piece. It
-%%% is used to determine if accidentals shall be printed next to ambitus
-%%% notes.
-
-#(define-class <ambitus> ()
- (ambitus-group #:accessor ambitus-group)
- (ambitus-line #:accessor ambitus-line)
- (ambitus-up-note #:getter ambitus-up-note
- #:init-form (make <ambitus-note>))
- (ambitus-down-note #:getter ambitus-down-note
- #:init-form (make <ambitus-note>))
- (start-c0 #:accessor ambitus-start-c0
- #:init-value #f)
- (start-key-sig #:accessor ambitus-start-key-sig
- #:init-value '()))
-
-%%% Accessor for the lower and upper note data of an ambitus
-#(define-method (ambitus-note (ambitus <ambitus>) direction)
- "If @var{direction} is @code{UP}, then return the upper ambitus note
-of @var{ambitus}, otherwise return the lower ambitus note."
- (if (= direction UP)
- (ambitus-up-note ambitus)
- (ambitus-down-note ambitus)))
-
-%%% The <ambitus-note> class holds the grobs that are specific to ambitus
-%%% (lower and upper) notes:
-%%% - head: an AmbitusNoteHead grob;
-%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
-%%% to the ambitus note head.
-%%% Moreover:
-%%% - pitch is the absolute pitch of the note
-%%% - cause is the note event that causes this ambitus note, i.e. the lower
-%%% or upper note of the considered music sequence.
-
-#(define-class <ambitus-note> ()
- (head #:accessor ambitus-note-head
- #:init-value #f)
- (accidental #:accessor ambitus-note-accidental
- #:init-value #f)
- (cause #:accessor ambitus-note-cause
- #:init-value #f)
- (pitch #:accessor ambitus-note-pitch
- #:init-value #f))
-
-%%%
-%%% Ambitus engraving logics
-%%%
-%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
-
-#(define (make-ambitus translator)
- "Build an ambitus object: initialize all the grobs and their relations.
-
-The Ambitus grob contain all other grobs:
- Ambitus
- |- AmbitusLine
- |- AmbitusNoteHead for upper note
- |- AmbitusAccidental for upper note
- |- AmbitusNoteHead for lower note
- |- AmbitusAccidental for lower note
-
-The parent of an accidental is the corresponding note head,
-and the accidental is set as the 'accidental-grob of the note head
-so that is printed by the function that prints notes."
- ;; make the ambitus object
- (let ((ambitus (make <ambitus>)))
- ;; build the Ambitus grob, which will contain all other grobs
- (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
- ;; build the AmbitusLine grob (line between lower and upper note)
- (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
- ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
- (for-each (lambda (direction)
- (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
- (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
- (group (ambitus-group ambitus)))
- ;; The parent of the AmbitusAccidental grob is the
- ;; AmbitusNoteHead grob
- (set! (ly:grob-parent accidental Y) head)
- ;; The AmbitusAccidental grob is set as the accidental-grob
- ;; object of the AmbitusNoteHead. This is later used by the
- ;; function that prints notes.
- (set! (ly:grob-object head 'accidental-grob) accidental)
- ;; both the note head and the accidental grobs are added
- ;; to the main ambitus grob.
- (ly:axis-group-interface::add-element group head)
- (ly:axis-group-interface::add-element group accidental)
- ;; the note head and the accidental grobs are added to the
- ;; ambitus object
- (set! (ambitus-note-head (ambitus-note ambitus direction))
- head)
- (set! (ambitus-note-accidental (ambitus-note ambitus direction))
- accidental)))
- (list DOWN UP))
- ;; The parent of the ambitus line is the lower ambitus note head
- (set! (ly:grob-parent (ambitus-line ambitus) X)
- (ambitus-note-head (ambitus-note ambitus DOWN)))
- ;; the ambitus line is added to the ambitus main grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
- ambitus))
-
-#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
- "Initialize the state of @var{ambitus}, by getting the starting
-position of middle C and key signature from @var{translator}'s context."
- (if (not (ambitus-start-c0 ambitus))
- (begin
- (set! (ambitus-start-c0 ambitus)
- (ly:context-property (ly:translator-context translator)
- 'middleCPosition
- 0))
- (set! (ambitus-start-key-sig ambitus)
- (ly:context-property (ly:translator-context translator)
- 'keySignature)))))
-
-#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
- "Update the upper and lower ambitus pithes of @var{ambitus}, using
-@var{note-grob}."
- ;; Get the event that caused the note-grob creation
- ;; and check that it is a note-event.
- (let ((note-event (ly:grob-property note-grob 'cause)))
- (if (ly:event::in-event-class note-event 'note-event)
- ;; get the pitch from the note event
- (let ((pitch (ly:event-property note-event 'pitch)))
- ;; if this pitch is lower than the current ambitus lower
- ;; note pitch (or it has not been initialized yet),
- ;; then this pitch is the new ambitus lower pitch,
- ;; and conversely for upper pitch.
- (for-each (lambda (direction pitch-compare)
- (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
- (pitch-compare pitch
- (ambitus-note-pitch (ambitus-note ambitus direction))))
- (begin
- (set! (ambitus-note-pitch (ambitus-note ambitus direction))
- pitch)
- (set! (ambitus-note-cause (ambitus-note ambitus direction))
- note-event))))
- (list DOWN UP)
- (list ly:pitch<? (lambda (p1 p2)
- (ly:pitch<? p2 p1))))))))
-
-#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
- "Typeset the ambitus:
-- place the lower and upper ambitus notes according to their pitch and
- the position of the middle C;
-- typeset or delete the note accidentals, according to the key signature.
- An accidental, if it is to be printed, is added to an AccidentalPlacement
- grob (a grob dedicated to the placement of accidentals near a chord);
-- both note heads are added to the ambitus line grob, so that a line should
- be printed between them."
- ;; check if there are lower and upper pitches
- (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
- (ambitus-note-pitch (ambitus-note ambitus DOWN)))
- ;; make an AccidentalPlacement grob, for placement of note accidentals
- (let ((accidental-placement (ly:engraver-make-grob
- translator
- 'AccidentalPlacement
- (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
- ;; For lower and upper ambitus notes:
- (for-each (lambda (direction)
- (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
- ;; set the cause and the staff position of the ambitus note
- ;; according to the associated pitch
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'cause)
- (ambitus-note-cause (ambitus-note ambitus direction)))
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'staff-position)
- (+ (ambitus-start-c0 ambitus)
- (ly:pitch-steps pitch)))
- ;; determine if an accidental shall be printed for this note,
- ;; according to the key signature
- (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
- (ly:pitch-notename pitch))
- (ambitus-start-key-sig ambitus))
- (assoc (ly:pitch-notename pitch)
- (ambitus-start-key-sig ambitus))))
- (sig-alter (if handle (cdr handle) 0)))
- (cond ((= (ly:pitch-alteration pitch) sig-alter)
- ;; the note alteration is in the key signature
- ;; => it does not have to be printed
- (ly:grob-suicide!
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
- 'accidental-grob)
- '()))
- (else
- ;; otherwise, the accidental shall be printed
- (set! (ly:grob-property (ambitus-note-accidental
- (ambitus-note ambitus direction))
- 'alteration)
- (ly:pitch-alteration pitch)))))
- ;; add the AccidentalPlacement grob to the
- ;; conditional items of the AmbitusNoteHead
- (ly:separation-item::add-conditional-item
- (ambitus-note-head (ambitus-note ambitus direction))
- accidental-placement)
- ;; add the AmbitusAccidental to the list of the
- ;; AccidentalPlacement grob accidentals
- (ly:accidental-placement::add-accidental
- accidental-placement
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- ;; add the AmbitusNoteHead grob to the AmbitusLine grob
- (ly:pointer-group-interface::add-grob
- (ambitus-line ambitus)
- 'note-heads
- (ambitus-note-head (ambitus-note ambitus direction)))))
- (list DOWN UP))
- ;; add the AccidentalPlacement grob to the main Ambitus grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
- ;; no notes ==> suicide the grobs
- (begin
- (for-each (lambda (direction)
- (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
- (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
- (list DOWN UP))
- (ly:grob-suicide! ambitus-line))))
-
-%%%
-%%% Ambitus engraver definition
-%%%
-#(define ambitus-engraver
- (lambda (context)
- (let ((ambitus #f))
- ;; when music is processed: make the ambitus object, if not already built
- `((process-music . ,(lambda (translator)
- (if (not ambitus)
- (set! ambitus (make-ambitus translator)))))
- ;; set the ambitus clef and key signature state
- (stop-translation-timestep . ,(lambda (translator)
- (if ambitus
- (initialize-ambitus-state ambitus translator))))
- ;; when a note-head grob is built, update the ambitus notes
- (acknowledgers
- (note-head-interface . ,(lambda (engraver grob source-engraver)
- (if ambitus
- (update-ambitus-notes ambitus grob)))))
- ;; finally, typeset the ambitus according to its upper and lower notes
- ;; (if any).
- (finalize . ,(lambda (translator)
- (if ambitus
- (typeset-ambitus ambitus translator))))))))
-
-%%%
-%%% Example
-%%%
-
-\score {
- \new StaffGroup <<
- \new Staff { c'4 des' e' fis' gis' }
- \new Staff { \clef "bass" c4 des ~ des ees b, }
- >>
- \layout { \context { \Staff \consists #ambitus-engraver } }
-}
--- /dev/null
+\version "2.13.26"
+\header {
+ lsrtags = "repeats"
+ texidoc = "There are three different styles of double repeats for
+volte, that can be set using @code{doubleRepeatType}."
+
+ doctitle = "Setting the double repeat default for volte"
+}
+
+
+\relative c'' {
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|:"
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|.|:"
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|.:"
+ \repeat volta 1 { c1 }
+}
--- /dev/null
+\version "2.13.27"
+
+\header {
+ lsrtags = "expressive-marks, tweaks-and-overrides"
+
+ texidoc = "
+By default, LilyPond does not allow the same articulation (e.g., an
+accent, a fermata, a flageolet, etc.) to be displayed above and below a
+note. For example, @code{c4_\\fermata^\\fermata} will only show a fermata
+below, ignoring the fermata above. However, one can stick
+scripts (just like fingerings) inside a chord, which means it is
+possible to have as many articulations as desired. So, the solution is to
+write the note as a chord and add the articulations inside the @code{<@dots{}>}.
+"
+ doctitle = "Showing the same articulation above and below a note or chord"
+}
+
+% The same as \flageolet, just a little smaller
+smallFlageolet =
+#(let ((m (make-articulation "flageolet")))
+ (set! (ly:music-property m 'tweaks)
+ (acons 'font-size -2
+ (ly:music-property m 'tweaks)))
+ m)
+
+\relative c' {
+ s4^"Wrong:"
+ c4_\fermata^\fermata % The second fermata is ignored!
+ <e d'>4^\smallFlageolet_\smallFlageolet
+
+ s4^"Works if written inside a chord:"
+ <e_\smallFlageolet d'^\smallFlageolet>4
+ <e_\flageolet d'^\flageolet>4
+ <e_\smallFlageolet^\smallFlageolet>4
+ <e_\fermata^\fermata>4
+}
--- /dev/null
+\version "2.13.29"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+The beams of consecutive 16th (or shorter) notes are, by default, not
+subdivided. That is, the three (or more) beams stretch unbroken over
+entire groups of notes. This behavior can be modified to subdivide
+the beams into sub-groups by setting the property
+@code{subdivideBeams}. When set, multiple beams will be subdivided at
+intervals defined by the current value of @code{baseMoment} by reducing
+the multiple beams to just one beam between the sub-groups. Note that
+@code{baseMoment} defaults to one over the denominator of the current
+time signature if not set explicitly. It must be set to a fraction
+giving the duration of the beam sub-group using the
+@code{ly:make-moment} function, as shown in this snippet. Also, when
+@code{baseMoment} is changed, @code{beatStructure} should also be changed
+to match the new @code{baseMoment}:
+
+"
+ doctitle = "Subdividing beams"
+}
+
+\relative c'' {
+ c32[ c c c c c c c]
+ \set subdivideBeams = ##t
+ c32[ c c c c c c c]
+
+ % Set beam sub-group length to an eighth note
+ \set baseMoment = #(ly:make-moment 1 8)
+ \set beatStructure = #'(2 2 2 2)
+ c32[ c c c c c c c]
+
+ % Set beam sub-group length to a sixteenth note
+ \set baseMoment = #(ly:make-moment 1 16)
+ \set beatStructure = #'(4 4 4 4)
+ c32[ c c c c c c c]
+}
+
meter changes (and other elements common to all parts) throughout
the entire score.
"
- doctitle = "Solo verse and two-part refrain"
+ doctitle = "Vocal ensemble template with verse and refrain"
}
global = {
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
LilyPond también proporciona funciones de formato para imprimir
números de grupo especial diferentes a la propia fracción, así
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Armaduras de tonalidad no tradicionales"
texidoces = "
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.11
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las cabezas de nota de notación fácil utilizan la propiedad
\header {
lsrtags = "template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla muestra el uso de contextos @code{StaffGroup} y
"
doctitlees = "Plantilla de orquesta con coro y piano"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour
\header {
lsrtags = "pitches, text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Internamente, @code{\\ottava} establece las propiedades
doctitlees = "Texto de octava alta y baja"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Intern setzt die @code{set-octavation}-Funktion die Eigenschaften
"
doctitlede = "Ottava-Text"
-
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
En interne, la fonction @code{\\ottava} détermine les
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
"
doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt
werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst.
"
doctitlede = "Sichtbarkeit von Prozent-Wiederholungen"
-
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Le numéro de mesure répétée sera imprimé à intervalle régulier si vous
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las repeticiones de compases completos mayores de dos repeticiones
pueden llevar un contador si se activa la propiedad adecuada, como se
"
doctitlees = "Percent repeat counter"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen
"
doctitlede = "Prozent-Wiederholungen zählen"
-
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Les répétitions de plus de 2 mesures sont surmontées d'un compteur,
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
texidoces = "
Este ejemplo artificial muestra cómo se pueden permitir tanto los
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch
doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Cet exemple peu académique démontre comment il est possible d'insérer un saut
\header {
lsrtags = "keyboards, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
"
doctitlees = "Plantilla de piano (sencilla)"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Hier ein einfaches Klaviersystem.
"
doctitlede = "Vorlage für einfache Klaviernotation"
-
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Voici une simple partition pour piano avec quelques notes.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Muchas partituras de piano tienen las indicaciones dinámicas centradas
entre los dos pentagramas. El contexto @code{Dynamics}, si se sitúa
\header {
lsrtags = "text, keyboards, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
"
doctitlees = "Plantilla de piano con letra centrada"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Anstatt ein eigenes System für Melodie und Text zu schreiben, können
(und damit das zusätzliche System für die Gesangstimme auslassen).
"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément
\header {
lsrtags = "vocal-music, keyboards, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
"
doctitlees = "Plantilla de piano con melodía y letra"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das nächste Beispiel ist typisch für ein Lied: Im oberen System die
doctitlede = "Vorlage für Klavier und Gesangsstimme"
-
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Il s'agit du format classique pour le chant : une portée pour la mélodie
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
ambitus-with-multiple-voices.ly
ambitus.ly
applying-note-head-styles-depending-on-the-step-of-the-scale.ly
+changing-the-ambitus-gap.ly
+changing-the-interval-of-lines-on-the-stave.ly
+clefs-can-be-transposed-by-arbitrary-amounts.ly
coloring-notes-depending-on-their-pitch.ly
creating-a-sequence-of-notes-on-various-pitches.ly
dodecaphonic-style-accidentals-for-each-note-including-naturals.ly
generating-random-notes.ly
+hiding-accidentals-on-tied-notes-at-the-start-of-a-new-system.ly
keep-change-clefs-full-sized.ly
makam-example.ly
non-traditional-key-signatures.ly
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Es posible ejercer un mayor control sobre la colocación de las
digitaciones de la mano derecha estableciendo el valor de una
"
doctitlees = "Posicionamiento de digitaciones de mano derecha"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Man kann die Positionierung von Fingersatz der rechten Hand besser
"
doctitlede = "Positionierung von Fingersatz der rechten Hand"
-
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La polifonía se crea de la misma forma en un @code{TabStaff} que
en una pauta normal.
"
doctitlees = "Polifonía en tablaturas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem
"
doctitlede = "Polyphonie in einer Tabulatur"
-
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si necesitamos alargar o acortar un símbolo de arpegio, podemos
modificar independientemente los extremos superior e inferior.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Cuando se colocan figuras sobre líneas adicionales, sus barras se
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
doctitlees = "Posicionamiento de las notas de adorno con espacio flotante"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert,
doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Lorsque vous activez la propriété @code{'strict-grace-spacing},
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Posicionar los silencios multicompás"
texidoces = "
A diferencia de los silencios normales, no existe una instrucción
ve a continuación:
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die
doctitlede = "Positionierung von Ganztaktpausen"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Si l'on peut positionner verticalement un silence simple en le
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los elementos de marcado de texto deben tener la propiedad
"
doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die
"
doctitlede = "Textbeschriftung innerhalb von Bögen positionieren"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Lorsqu'il vous faut inscrire une annotation à l'intérieur d'une liaison,
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
texidoces = "
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch
hinzugefügt werden"
soll. Um dieses Verhalten zu ändern, muss die Eigenschaft
@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden.
"
-
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
En accord avec les règles standards de l'écriture musicale, on grave
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
texidoces = "
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Auflösungzeichen nicht setzen wenn die Tonart wechselt"
verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft
im @code{Staff}-Kontext auf \"false\" gesetzt wird.
"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Après un changement de tonalité, un bécarre est imprimé pour annuler
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede imprimir una línea divisoria de la forma @code{|:} al
principio de la pieza, sobreescribiendo la propiedad correspondiente:
"
doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem
"
doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben"
-
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Bien qu'allant à l'encontre des usages en matière de gravure, vous
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden imprimir los números de compás a intervalos regulares
doctitlees = "Imprimir números de compás a intervalos regulares"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem
doctitlede = "Setzen der Taktnummern in regelmäßigen Intevallen"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können auch in Boxen oder Kreisen gesetzt werden.
doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Les numéros de mesures peuvent être encadrés ou entourés d'un cercle.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden imprimir reguladores con un círculo en la punta (notación
«al niente») estableciendo la propiedad @code{circled-tip} del objeto
"
doctitlees = "Impresión de reguladores utilizando la notación «al niente»"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze
"
doctitlede = "Crescendo Klammern al niente schreiben"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de
\header {
lsrtags = "text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Aunque normalmente las marcas de texto sólo se imprimen sobre el
pentagrama superior, también se pueden imprimir en otro pentagrama
"
doctitlees = "Imprimir marcas en cualquier pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie
"
doctitlede = "Zeichen über jedem System ausgeben"
-
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
Bien que ces indications textuelles ne soient habituellement imprimées
\header {
lsrtags = "rhythms, expressive-marks, staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
De forma predeterminada, las indicaciones metronómicas y las
letras de ensayo se imprimen encima del pentagrama. Para
doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben.
"
doctitlede = "Metronom- und Übungszeichen unter das System setzen"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Les indications de tempo et les marques de repère s'impriment par défaut
\header {
lsrtags = "tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede usar el contexto @code{NoteNames} para imprimir el valor
textual de las notas. La propiedad @code{printOctaveNames} activa o
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
De forma predeterminada se suprime el número del primer compás de una
doctitlees = "Imprimir el número de compás en el primer compás"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Standardmäßig wird die erste Taktzahl einer Paritur nicht gesetzt,
doctitlede = "Setzen der Taktnummer für den ersten Takt"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est
\header {
lsrtags = "pitches, staff-notation"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los
doctitlees = "Citar otra voz con transposición"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zitate berücksichtigen sowohl die Transposition der Quelle als auch
"
doctitlede = "Eine Stimme mit Transposition zitieren"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Les citations tiennent compte de la transposition, aussi bien celle de
\header {
lsrtags = "staff-notation"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La propiedad @code{quotedEventTypes} determina los tipos de eventos
"
doctitlees = "Citar otra voz"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die @code{quotedEventTypes}-Eigenschaft bestimmt die
"
doctitlede = "Eine andere Stimme zitieren"
-
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Les types d'événement pris en charge pour la citation peuvent se régler
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los valores predeterminados para las notas de adorno están
doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die globalen Standardeinstellungen für Verzierungsnoten werden in
doctitlede = "Globale Umdefinition von Verzierungsnoten"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Vous pouvez modifier les valeurs des variables @code{startGraceMusic},
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden eliminar completamente los números de compás quitando el
doctitlees = "Suprimir los números de compás de toda la partitura"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können vollkommen aus den Noten entfernt werden, indem
doctitlede = "Entfernung von Taktnummern in einer Partitur"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Désactiver le graveur concerné --- @code{Bar_number_engraver} ---
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
\header {
lsrtags = "staff-notation, tweaks-and-overrides, breaks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad @code{remove-first} de
"
doctitlees = "Quitar la primera línea vacía"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur
"
doctitlede = "Die erste leere Notenzeile auch entfernen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Par défaut, le premier système comportera absolument toutes les portées.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
percent-repeat-counter.ly
positioning-segno-and-coda-with-line-break.ly
printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
+setting-the-double-repeat-default-for-volte.ly
shortening-volta-brackets.ly
volta-below-chords.ly
volta-multi-staff.ly
\header {
lsrtags = "rhythms, ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Estilos de silencios"
texidoces = "
Los silencios se pueden imprimir en distintos estilos.
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Pausenstile"
"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Les silences peuvent être gravés selon différents styles.
% Do not edit this file; it is automatically
% generated from Documentation/snippets/new
% This file is in the public domain.
-%% Note: this file works from version 2.13.4
-\version "2.13.20"
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Para tipografiar las barras agrupadas en la forma @code{3-4-3-2}
en 12/8, en primer lugar tenemos que sobreescribir los finales de
lsrtags = "rhythms"
texidoc = "
-To typeset beams grouped @code{3-4-3-2} in 12/8 it is no longer
-necessary first to override the default beam endings in 12/8,and
-then to set up the new beaming endings:
+To typeset beams grouped @code{3-4-3-2} one need only change the
+beat structure:
"
doctitle = "Reverting default beam endings"
} % begin verbatim
a8 a a a a a a a a a a a
% Set new values for beam endings
- \overrideBeamSettings #'Score #'(12 . 8) #'end
- #'((* . (3 4 3 2)))
+ \set Score.beatStructure = #'(3 4 3 2)
a8 a a a a a a a a a a a
}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
beams-across-line-breaks.ly
changing-beam-knee-gap.ly
changing-form-of-multi-measure-rests.ly
+changing-the-number-of-augmentation-dots-per-note.ly
changing-the-time-signature-without-affecting-the-beaming.ly
changing-the-tuplet-number.ly
changing-time-signatures-inside-a-polymetric-section-using--scaledurations.ly
compound-time-signatures.ly
conducting-signs,-measure-grouping-signs.ly
controlling-tuplet-bracket-visibility.ly
-dot-count-override.ly
engraving-ties-manually.ly
engraving-tremolos-with-floating-beams.ly
entering-several-tuplets-using-only-one--times-command.ly
skips-in-lyric-mode-2.ly
skips-in-lyric-mode.ly
stemlets.ly
-sub-dividing-beams.ly
+subdividing-beams.ly
three-sided-box.ly
time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
tweaking-grace-layout-within-music.ly
+++ /dev/null
-% Do not edit this file; it is automatically
-% generated from Documentation/snippets/new
-% This file is in the public domain.
-%% Note: this file works from version 2.13.15
-\version "2.13.20"
-
-\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
-
- texidoces = "
-Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
-el espacio del usuario, con un grabador de Scheme.
-
-Esto es básicamente una reescritura en Scheme del código de
-@file{lily/ambitus-engraver.cc}.
-
-"
-
- doctitlees = "Definir un grabador en Scheme: grabador de ámbito"
-
-
- lsrtags = "contexts-and-engravers"
-
-
- texidoc = "This example demonstrates how the ambitus engraver may be
- defined on the user side, with a Scheme engraver.
-
- This is basically a rewrite in Scheme of the code from
- @file{lily/ambitus-engraver.cc}.
-"
-
- doctitle = "Defining an engraver in Scheme: ambitus engraver"
-} % begin verbatim
-
-
-#(use-modules (oop goops))
-
-%%%
-%%% Grob utilities
-%%%
-%%% These are literal rewrites of some C++ methods used by the ambitus engraver.
-#(define (ly:event::in-event-class event class-name)
- "Check if @var{event} the given class.
-Rewrite of @code{Stream_event::internal_in_event_class} from @file{lily/stream-event.cc}."
- (memq class-name (ly:make-event-class (ly:event-property event 'class))))
-
-#(define (ly:separation-item::add-conditional-item grob grob-item)
- "Add @var{grob-item} to the array of conditional elements of @var{grob}.
-Rewrite of @code{Separation_item::add_conditional_item} from @file{lily/separation-item.cc}."
- (ly:pointer-group-interface::add-grob grob 'conditional-elements grob-item))
-
-#(define (ly:accidental-placement::accidental-pitch accidental-grob)
- "Get the pitch from the grob cause of @var{accidental-grob}.
-Rewrite of @code{accidental_pitch} from @file{lily/accidental-placement.cc}."
- (ly:event-property (ly:grob-property (ly:grob-parent accidental-grob Y) 'cause)
- 'pitch))
-
-#(define (ly:accidental-placement::add-accidental grob accidental-grob)
- "Add @var{accidental-grob}, an @code{Accidental} grob, to the
-list of the accidental grobs of @var{grob}, an @code{AccidentalPlacement}
-grob.
-Rewrite of @code{Accidental_placement::add_accidental} from @file{lily/accidental-placement.cc}."
- (let ((pitch (ly:accidental-placement::accidental-pitch accidental-grob)))
- (set! (ly:grob-parent accidental-grob X) grob)
- (set! (ly:grob-property accidental-grob 'X-offset)
- ly:grob::x-parent-positioning)
- (let* ((accidentals (ly:grob-object grob 'accidental-grobs))
- (handle (assq (ly:pitch-notename pitch) accidentals))
- (entry (if handle (cdr handle) '())))
- (set! (ly:grob-object grob 'accidental-grobs)
- (assq-set! accidentals
- (ly:pitch-notename pitch)
- (cons accidental-grob entry))))))
-
-%%%
-%%% Ambitus data structure
-%%%
-
-%%% The <ambitus> class holds the various grobs that are created
-%%% to print an ambitus:
-%%% - ambitus-group: the grob that groups all the components of an ambitus
-%%% (Ambitus grob);
-%%% - ambitus-line: the vertical line between the upper and lower ambitus
-%%% notes (AmbitusLine grob);
-%%% - ambitus-up-note and ambitus-down-note: the note head and accidental
-%%% for the lower and upper note of the ambitus (see <ambitus-note> class
-%%% below).
-%%% The other slots define the key and clef context of the engraver:
-%%% - start-c0: position of middle c at the beginning of the piece. It
-%%% is used to place the ambitus notes according to their pitch;
-%%% - start-key-sig: the key signature at the beginning of the piece. It
-%%% is used to determine if accidentals shall be printed next to ambitus
-%%% notes.
-
-#(define-class <ambitus> ()
- (ambitus-group #:accessor ambitus-group)
- (ambitus-line #:accessor ambitus-line)
- (ambitus-up-note #:getter ambitus-up-note
- #:init-form (make <ambitus-note>))
- (ambitus-down-note #:getter ambitus-down-note
- #:init-form (make <ambitus-note>))
- (start-c0 #:accessor ambitus-start-c0
- #:init-value #f)
- (start-key-sig #:accessor ambitus-start-key-sig
- #:init-value '()))
-
-%%% Accessor for the lower and upper note data of an ambitus
-#(define-method (ambitus-note (ambitus <ambitus>) direction)
- "If @var{direction} is @code{UP}, then return the upper ambitus note
-of @var{ambitus}, otherwise return the lower ambitus note."
- (if (= direction UP)
- (ambitus-up-note ambitus)
- (ambitus-down-note ambitus)))
-
-%%% The <ambitus-note> class holds the grobs that are specific to ambitus
-%%% (lower and upper) notes:
-%%% - head: an AmbitusNoteHead grob;
-%%% - accidental: an AmbitusAccidental grob, to be possibly printed next
-%%% to the ambitus note head.
-%%% Moreover:
-%%% - pitch is the absolute pitch of the note
-%%% - cause is the note event that causes this ambitus note, i.e. the lower
-%%% or upper note of the considered music sequence.
-
-#(define-class <ambitus-note> ()
- (head #:accessor ambitus-note-head
- #:init-value #f)
- (accidental #:accessor ambitus-note-accidental
- #:init-value #f)
- (cause #:accessor ambitus-note-cause
- #:init-value #f)
- (pitch #:accessor ambitus-note-pitch
- #:init-value #f))
-
-%%%
-%%% Ambitus engraving logics
-%%%
-%%% Rewrite of the code from @file{lily/ambitus-engraver.cc}.
-
-#(define (make-ambitus translator)
- "Build an ambitus object: initialize all the grobs and their relations.
-
-The Ambitus grob contain all other grobs:
- Ambitus
- |- AmbitusLine
- |- AmbitusNoteHead for upper note
- |- AmbitusAccidental for upper note
- |- AmbitusNoteHead for lower note
- |- AmbitusAccidental for lower note
-
-The parent of an accidental is the corresponding note head,
-and the accidental is set as the 'accidental-grob of the note head
-so that is printed by the function that prints notes."
- ;; make the ambitus object
- (let ((ambitus (make <ambitus>)))
- ;; build the Ambitus grob, which will contain all other grobs
- (set! (ambitus-group ambitus) (ly:engraver-make-grob translator 'Ambitus '()))
- ;; build the AmbitusLine grob (line between lower and upper note)
- (set! (ambitus-line ambitus) (ly:engraver-make-grob translator 'AmbitusLine '()))
- ;; build the upper and lower AmbitusNoteHead and AmbitusAccidental
- (for-each (lambda (direction)
- (let ((head (ly:engraver-make-grob translator 'AmbitusNoteHead '()))
- (accidental (ly:engraver-make-grob translator 'AmbitusAccidental '()))
- (group (ambitus-group ambitus)))
- ;; The parent of the AmbitusAccidental grob is the
- ;; AmbitusNoteHead grob
- (set! (ly:grob-parent accidental Y) head)
- ;; The AmbitusAccidental grob is set as the accidental-grob
- ;; object of the AmbitusNoteHead. This is later used by the
- ;; function that prints notes.
- (set! (ly:grob-object head 'accidental-grob) accidental)
- ;; both the note head and the accidental grobs are added
- ;; to the main ambitus grob.
- (ly:axis-group-interface::add-element group head)
- (ly:axis-group-interface::add-element group accidental)
- ;; the note head and the accidental grobs are added to the
- ;; ambitus object
- (set! (ambitus-note-head (ambitus-note ambitus direction))
- head)
- (set! (ambitus-note-accidental (ambitus-note ambitus direction))
- accidental)))
- (list DOWN UP))
- ;; The parent of the ambitus line is the lower ambitus note head
- (set! (ly:grob-parent (ambitus-line ambitus) X)
- (ambitus-note-head (ambitus-note ambitus DOWN)))
- ;; the ambitus line is added to the ambitus main grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) (ambitus-line ambitus))
- ambitus))
-
-#(define-method (initialize-ambitus-state (ambitus <ambitus>) translator)
- "Initialize the state of @var{ambitus}, by getting the starting
-position of middle C and key signature from @var{translator}'s context."
- (if (not (ambitus-start-c0 ambitus))
- (begin
- (set! (ambitus-start-c0 ambitus)
- (ly:context-property (ly:translator-context translator)
- 'middleCPosition
- 0))
- (set! (ambitus-start-key-sig ambitus)
- (ly:context-property (ly:translator-context translator)
- 'keySignature)))))
-
-#(define-method (update-ambitus-notes (ambitus <ambitus>) note-grob)
- "Update the upper and lower ambitus pithes of @var{ambitus}, using
-@var{note-grob}."
- ;; Get the event that caused the note-grob creation
- ;; and check that it is a note-event.
- (let ((note-event (ly:grob-property note-grob 'cause)))
- (if (ly:event::in-event-class note-event 'note-event)
- ;; get the pitch from the note event
- (let ((pitch (ly:event-property note-event 'pitch)))
- ;; if this pitch is lower than the current ambitus lower
- ;; note pitch (or it has not been initialized yet),
- ;; then this pitch is the new ambitus lower pitch,
- ;; and conversely for upper pitch.
- (for-each (lambda (direction pitch-compare)
- (if (or (not (ambitus-note-pitch (ambitus-note ambitus direction)))
- (pitch-compare pitch
- (ambitus-note-pitch (ambitus-note ambitus direction))))
- (begin
- (set! (ambitus-note-pitch (ambitus-note ambitus direction))
- pitch)
- (set! (ambitus-note-cause (ambitus-note ambitus direction))
- note-event))))
- (list DOWN UP)
- (list ly:pitch<? (lambda (p1 p2)
- (ly:pitch<? p2 p1))))))))
-
-#(define-method (typeset-ambitus (ambitus <ambitus>) translator)
- "Typeset the ambitus:
-- place the lower and upper ambitus notes according to their pitch and
- the position of the middle C;
-- typeset or delete the note accidentals, according to the key signature.
- An accidental, if it is to be printed, is added to an AccidentalPlacement
- grob (a grob dedicated to the placement of accidentals near a chord);
-- both note heads are added to the ambitus line grob, so that a line should
- be printed between them."
- ;; check if there are lower and upper pitches
- (if (and (ambitus-note-pitch (ambitus-note ambitus UP))
- (ambitus-note-pitch (ambitus-note ambitus DOWN)))
- ;; make an AccidentalPlacement grob, for placement of note accidentals
- (let ((accidental-placement (ly:engraver-make-grob
- translator
- 'AccidentalPlacement
- (ambitus-note-accidental (ambitus-note ambitus DOWN)))))
- ;; For lower and upper ambitus notes:
- (for-each (lambda (direction)
- (let ((pitch (ambitus-note-pitch (ambitus-note ambitus direction))))
- ;; set the cause and the staff position of the ambitus note
- ;; according to the associated pitch
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'cause)
- (ambitus-note-cause (ambitus-note ambitus direction)))
- (set! (ly:grob-property (ambitus-note-head (ambitus-note ambitus direction))
- 'staff-position)
- (+ (ambitus-start-c0 ambitus)
- (ly:pitch-steps pitch)))
- ;; determine if an accidental shall be printed for this note,
- ;; according to the key signature
- (let* ((handle (or (assoc (cons (ly:pitch-octave pitch)
- (ly:pitch-notename pitch))
- (ambitus-start-key-sig ambitus))
- (assoc (ly:pitch-notename pitch)
- (ambitus-start-key-sig ambitus))))
- (sig-alter (if handle (cdr handle) 0)))
- (cond ((= (ly:pitch-alteration pitch) sig-alter)
- ;; the note alteration is in the key signature
- ;; => it does not have to be printed
- (ly:grob-suicide!
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- (set! (ly:grob-object (ambitus-note-head (ambitus-note ambitus direction))
- 'accidental-grob)
- '()))
- (else
- ;; otherwise, the accidental shall be printed
- (set! (ly:grob-property (ambitus-note-accidental
- (ambitus-note ambitus direction))
- 'alteration)
- (ly:pitch-alteration pitch)))))
- ;; add the AccidentalPlacement grob to the
- ;; conditional items of the AmbitusNoteHead
- (ly:separation-item::add-conditional-item
- (ambitus-note-head (ambitus-note ambitus direction))
- accidental-placement)
- ;; add the AmbitusAccidental to the list of the
- ;; AccidentalPlacement grob accidentals
- (ly:accidental-placement::add-accidental
- accidental-placement
- (ambitus-note-accidental (ambitus-note ambitus direction)))
- ;; add the AmbitusNoteHead grob to the AmbitusLine grob
- (ly:pointer-group-interface::add-grob
- (ambitus-line ambitus)
- 'note-heads
- (ambitus-note-head (ambitus-note ambitus direction)))))
- (list DOWN UP))
- ;; add the AccidentalPlacement grob to the main Ambitus grob
- (ly:axis-group-interface::add-element (ambitus-group ambitus) accidental-placement))
- ;; no notes ==> suicide the grobs
- (begin
- (for-each (lambda (direction)
- (ly:grob-suicide! (ambitus-note-accidental (ambitus-note ambitus direction)))
- (ly:grob-suicide! (ambitus-note-head (ambitus-note ambitus direction))))
- (list DOWN UP))
- (ly:grob-suicide! ambitus-line))))
-
-%%%
-%%% Ambitus engraver definition
-%%%
-#(define ambitus-engraver
- (lambda (context)
- (let ((ambitus #f))
- ;; when music is processed: make the ambitus object, if not already built
- `((process-music . ,(lambda (translator)
- (if (not ambitus)
- (set! ambitus (make-ambitus translator)))))
- ;; set the ambitus clef and key signature state
- (stop-translation-timestep . ,(lambda (translator)
- (if ambitus
- (initialize-ambitus-state ambitus translator))))
- ;; when a note-head grob is built, update the ambitus notes
- (acknowledgers
- (note-head-interface . ,(lambda (engraver grob source-engraver)
- (if ambitus
- (update-ambitus-notes ambitus grob)))))
- ;; finally, typeset the ambitus according to its upper and lower notes
- ;; (if any).
- (finalize . ,(lambda (translator)
- (if ambitus
- (typeset-ambitus ambitus translator))))))))
-
-%%%
-%%% Example
-%%%
-
-\score {
- \new StaffGroup <<
- \new Staff { c'4 des' e' fis' gis' }
- \new Staff { \clef "bass" c4 des ~ des ees b, }
- >>
- \layout { \context { \Staff \consists #ambitus-engraver } }
-}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\header {
lsrtags = "headwords"
texidoc = "Random complex notation"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si la nota que da fin a un regulador cae sobre la primera parte de
un compás, el regulador se detiene en la línea divisoria
"
doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note
@code{'to-barline} geändert werden:
"
doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
En principe, un soufflet -- (de)crescendo imprimé sous forme graphique --
\header {
lsrtags = "tweaks-and-overrides, paper-and-layout"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.26
+\version "2.13.29"
+\header {
+ lsrtags = "repeats"
+ texidoc = "There are three different styles of double repeats for
+volte, that can be set using @code{doubleRepeatType}."
+
+ doctitle = "Setting the double repeat default for volte"
+} % begin verbatim
+
+
+
+\relative c'' {
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|:"
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|.|:"
+ \repeat volta 1 { c1 }
+ \set Score.doubleRepeatType = #":|.:"
+ \repeat volta 1 { c1 }
+}
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Si los reguladores son demasiado cortos, se pueden alargar
modificando la propiedad @code{minimum-length} del objeto
"
doctitlees = "Ajustar la longitud mínima de los reguladores"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem
"
doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Si un soufflet est trop court, il suffit d'ajuster la propriété
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
De forma predeterminada, los corchetes de primera y segunda vez se
trazan encima de los finales alternativos completos, pero es posible
"
doctitlees = "Shortening volta brackets"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber
"
doctitlede = "Volta-Klammern verkürzen"
-
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Les crochets indiquant les fins alternatives s'étalent tout au long ce
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden imprimir los acordes exclusivamente al comienzo de las
líneas y cuando cambia el acorde.
"
doctitlees = "Imprimir los acordes cuando se produce un cambio"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.13.20"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.27
+\version "2.13.29"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
texidoc = "
-By default, LilyPond does not allow the same articulation (e.g. an
+By default, LilyPond does not allow the same articulation (e.g., an
accent, a fermata, a flageolet, etc.) to be displayed above and below a
-note. For example, c4_\\fermata^\\fermata will only show a fermata
-below. The fermata above will simply be ignored. However, one can stick
+note. For example, @code{c4_\\fermata^\\fermata} will only show a fermata
+below, ignoring the fermata above. However, one can stick
scripts (just like fingerings) inside a chord, which means it is
-possible to have as many articulations as desired. This approach has
-the advantage that it ignores the stem and positions the articulation
-relative to the note head. This can be seen in the case of the
-flageolets in the snippet. To mimic the behaviour of scripts outside a
-chord, 'add-stem-support would be required. So, the solution is to
-write the note as a chord and add the articulations inside the <...>.
-The direction will always be above, but one can tweak this via a
-\\tweak: @code{<c-\\tweak #'direction #DOWN-\\fermata^\\fermata>}
-
+possible to have as many articulations as desired. So, the solution is to
+write the note as a chord and add the articulations inside the @code{<@dots{}>}.
"
doctitle = "Showing the same articulation above and below a note or chord"
} % begin verbatim
+
% The same as \flageolet, just a little smaller
smallFlageolet =
#(let ((m (make-articulation "flageolet")))
m)
\relative c' {
- s4^"wrong:"
- c_\fermata^\fermata % The second fermata is ignored!
- <e d'>^\smallFlageolet_\smallFlageolet
+ s4^"Wrong:"
+ c4_\fermata^\fermata % The second fermata is ignored!
+ <e d'>4^\smallFlageolet_\smallFlageolet
- % it works only if you wrap the note inside a chord. By default,
- % all articulations will be printed above, so you have to tweak
- % the direction.
s4^"Works if written inside a chord:"
- <e-\tweak #'direction #DOWN -\smallFlageolet d'^\smallFlageolet>
- <e-\tweak #'direction #DOWN -\flageolet d'^\flageolet>
- <e-\tweak #'direction #DOWN -\smallFlageolet^\smallFlageolet>
- <e-\tweak #'direction #DOWN -\fermata^\fermata>
+ <e_\smallFlageolet d'^\smallFlageolet>4
+ <e_\flageolet d'^\flageolet>4
+ <e_\smallFlageolet^\smallFlageolet>4
+ <e_\fermata^\fermata>4
}
-
\header {
lsrtags = "chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Al juntar nombres de acorde en cifrado americano, melodía y letra,
obtenemos una hoja guía de acordes o «lead sheet»:
"
doctitlees = "Hoja guía de acordes o «lead sheet» sencilla"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext:
"
doctitlede = "Ein einfaches Liedblatt"
-
%% Translation of GIT committish: 9594a4569164407a146bbc4aad8be3a60a4725cf
texidocfr = "
Assembler des noms d'accords, une mélodie et des paroles permet
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
\header {
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
"
doctitlees = "Plantilla de pentagrama único con música letra y acordes"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Mit diesem Beispiel können Sie einen Song mit Melodie,
doctitlede = "Vorlage für eine Notenzeile mit Noten Text und Akkorden"
-
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Ce cannevas comporte tous les éléments d'une chanson : la mélodie,
\header {
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
\header {
lsrtags = "chords, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
doctitlees = "Plantilla de pentagrama único con música y acordes"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません!
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist
doctitlede = "Vorlage für eine Notenzeile mit Akkorden"
-
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Vous avez besoin de la partition d'une mélodie avec les accords ?
\header {
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
"
doctitlees = "Plantilla de pentagrama único don notas y letra"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c
行を変更するか、コメント アウトしてください。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren
doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
\header {
lsrtags = "template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla simple prepara un pentagrama con notas, adecuado para
un instrumento solista o un fragmento melódico. Córtelo y péguelo en
"
doctitlees = "Plantilla de un solo pentagrama con notas únicamente"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c
これをファイルにカット&ペーストして、音符を付け加えれば完了です!
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein
doctitlede = "Vorlage für ein Notensystem"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Cet exemple simpliste se compose d'une portée agrémentée de quelques
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Marca de pizzicato de chasquido (`pizzicato de Bartók')"
texidoces = "
El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "catalan.ly"
#(set-global-staff-size 15)
\paper{
\header {
lsrtags = "text"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Los textos independientes se pueden disponer en varias columnas
utilizando instrucciones @code{\\markup}:
"
doctitlees = "Elemento de marcado de texto independiente en dos columnas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen
"
doctitlede = "Isolierter Text in zwei Spalten"
-
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
L'utilisation de la commande @code{\\markup} permet de distribuer un bloc
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La dirección de las plicas se contola de la misma forma en la
tablatura que en la notación tradicional. Las barras se pueden
\header {
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección @code{\\global} para el compás y la armadura
"
doctitlees = "Plantilla de cuarteto de cuerda (sencilla)"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために
@code{@bs{}global} セクションを使っています。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier
doctitlede = "Vorlage für Streichquartett (einfach)"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Voici un canevas pour quatuor à cordes. Notez l'utilisation de la
\header {
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
"
doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c
別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください!
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Mit diesem Beispiel können Sie ein schönes Streichquartett notieren,
doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Grâce à ce canevas, vous pouvez obtenir une partition d'excellente
+++ /dev/null
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.13.20"
-
-\header {
- lsrtags = "rhythms"
-
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
- texidoces = "
-Las barras de semicorcheas (o notas más breves) seguidas no se
-subdividen de forma predeterminada. Esto es: las tres (o más)
-barras se prolongan, sin dividirse, sobre grupos completos de
-notas. Este comportamiento se puede modificar para que las barras
-se subdividan en subgrupos mediante el establecimiento de la
-propiedad @code{subdivideBeams}. Cuando está establecida, las
-diversas barras se subdividen a intervalos definidos por el valor
-actual de la longitud del pulso @code{beatLength} reduciendo las
-barras múltiples a una sola entre los subgrupos. Observe que el
-valor predeterminado de @code{beatLength} es de una unidad sobre
-el denominador del compás en curso, si no está establecido
-explícitamente. Se debe establecer al valor de una fracción que
-da la duración el subgrupo de barras utilizando la función
-@code{ly:make-moment}, como se muestra aquí:
-
-"
- doctitlees = "Subdivisión de las barras de semicorchea"
-
-
-%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
- texidocde = "
-Die Balken von aufeinanderfolgenden Sechszehnteln (oder kürzeren Notenwerten)
-werden standardmäßig nicht unterteilt. Dieses Verhalten kann verändert
-werden, sodass die Balken in Untergruppen aufgeteilt werden, indem man
-die Eigenschaft @code{subdivideBeams} verändert. Man muss die Unterteilungsintervalle
-als Notenbruch mit der @code{make-moment}-Funktion für @code{beatLength} angeben,
-damit die Balken unterbrochen wird und nur ein Balken durchgezogen bleibt. Der
-Standardwert für @code{beatLength} ist 1 / Zähler des aktuellen Taktes.
-
-"
- doctitlede = "Balken in Untergruppen teilen"
-
-
-
-%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60
- texidocfr = "
-Les ligatures d'une succession de notes de durée inférieure à la croche
-ne sont pas subdivisées par défaut. Autrement dit, tous les traits de
-ligature seront continus. Ce comportement peut être modifié afin de
-diviser la ligature en sous-groupes grâce à la propriété
-@code{subdivideBeams}. Lorsqu'elle est activée, les ligatures seront
-subdivisées selon un intervalle défini par @code{beatLength} ; il n'y
-aura alors plus qu'un seul trait de ligature entre chaque sous-groupe.
-Par défaut, @code{beatLength} fixe la valeur de référence à une noire.
-Il faudra donc lui fournir, à l'aide de la fonction @code{make-moment},
-une fraction correspondant au sous-groupe désiré, comme dans l'exemple
-suivant.
-
-"
- doctitlefr = "Subdivision des ligatures"
-
- texidoc = "
-The beams of consecutive 16th (or shorter) notes are, by default, not
-sub-divided. That is, the three (or more) beams stretch unbroken over
-entire groups of notes. This behavior can be modified to sub-divide
-the beams into sub-groups by setting the property
-@code{subdivideBeams}. When set, multiple beams will be sub-divided at
-intervals defined by the current value of @code{beatLength} by reducing
-the multiple beams to just one beam between the sub-groups. Note that
-@code{beatLength} defaults to one over the denominator of the current
-time signature if not set explicitly. It must be set to a fraction
-giving the duration of the beam sub-group using the
-@code{ly:make-moment} function, as shown here:
-
-
-
-"
- doctitle = "Sub-dividing beams"
-} % begin verbatim
-
-\relative c'' {
- c32[ c c c c c c c]
- \set subdivideBeams = ##t
- c32[ c c c c c c c]
-
- % Set beam sub-group length to an eighth note
- \set beatLength = #(ly:make-moment 1 8)
- c32[ c c c c c c c]
-
- % Set beam sub-group length to a sixteenth note
- \set beatLength = #(ly:make-moment 1 16)
- c32[ c c c c c c c]
-}
-
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.29
+\version "2.13.29"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+The beams of consecutive 16th (or shorter) notes are, by default, not
+subdivided. That is, the three (or more) beams stretch unbroken over
+entire groups of notes. This behavior can be modified to subdivide
+the beams into sub-groups by setting the property
+@code{subdivideBeams}. When set, multiple beams will be subdivided at
+intervals defined by the current value of @code{baseMoment} by reducing
+the multiple beams to just one beam between the sub-groups. Note that
+@code{baseMoment} defaults to one over the denominator of the current
+time signature if not set explicitly. It must be set to a fraction
+giving the duration of the beam sub-group using the
+@code{ly:make-moment} function, as shown in this snippet. Also, when
+@code{baseMoment} is changed, @code{beatStructure} should also be changed
+to match the new @code{baseMoment}:
+
+"
+ doctitle = "Subdividing beams"
+} % begin verbatim
+
+
+\relative c'' {
+ c32[ c c c c c c c]
+ \set subdivideBeams = ##t
+ c32[ c c c c c c c]
+
+ % Set beam sub-group length to an eighth note
+ \set baseMoment = #(ly:make-moment 1 8)
+ \set beatStructure = #'(2 2 2 2)
+ c32[ c c c c c c c]
+
+ % Set beam sub-group length to a sixteenth note
+ \set baseMoment = #(ly:make-moment 1 16)
+ \set beatStructure = #'(4 4 4 4)
+ c32[ c c c c c c c]
+}
+
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
A modo de alternativa para obtener auténticos «incipit»
independientes de la partitura principal, se incluyen como
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Transportar música con el menor número de alteraciones"
texidoces = "
Este ejemplo utiliza código de Scheme para forzar las
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
Variante gewählt.
"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Cet exemple, grâce à un peu de code Scheme, donne la priorité aux
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Trucaje de las propiedades de clave"
texidoces = "
La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
las claves y las notas, pero no lo hacen en la segunda línea.
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Eigenschaften des Schlüssels optimieren"
texidocde = "
Änderungen die ursprüngliche relative Positionierung von Schlüssel und
Noten, auf der zweiten Zeile nicht.
"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La commande @code{\\clef \"treble_8\"} équivaut à définir @code{clefGlyph},
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
La disposición de las expresiones de adorno se puede cambiar a lo
doctitlees = "Trucar la disposición de las notas de adorno dentro de la música"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Layout von Verzierungsausdrücken kann in der Musik verändert
doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Il est possible de changer globalement la mise en forme des petites
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
%%%
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se puede usar el delimitador de comienzo de un sistema
@code{SystemStartSquare} estableciéndolo explícitamente dentro de
"
doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer
"
doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Un regroupement de portées sera indiqué par un simple rectangle
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Se pueden imprimir estilos alternativos del corchete o gancho de las
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Algunos compositores escriben dos ligaduras cuando quieren acordes
legato. Esto se puede conseguir estableciendo @code{doubleSlurs}.
"
doctitlees = "Utilizar ligaduras dobles para acordes legato"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert
"
doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Certains auteurs utilisent deux liaisons lorsqu'ils veulent
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Es posible aplicar la barrita que cruza la barra de las
doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales"
-
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Le trait que l'on trouve sur les hampes des acciaccatures peut
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.20"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Uso de ligaduras en los arpegios"
texidoces = "
En ocasiones se usan ligaduras de unión para escribir los arpegios.
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In
doctitlede = "Überbingungen für Arpeggio genutzen"
-
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans
\header {
lsrtags = "tweaks-and-overrides, spacing"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
"
doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt,
"
doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen"
-
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Vous pourrez, en jouant sur la propriété @code{'Y-extent}, aligner les
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Las expresiones dinámicas que se comienzan, terminan o se producen
en la misma nota se alinean verticalmente. Para asegurar que las
\header {
lsrtags = "vocal-music, tweaks-and-overrides, spacing"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Este fragmento de código muestra el uso de las propiedades de
contexto @code{alignBelowContext} y @code{alignAboveContext} para
"
doctitlees = "Alineación vertical de la letra y los compases de ossia"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieser Schnipsel zeigt, wie man die Kontexteigenschaften
"
doctitlede = "Gesangstext und Ossia vertikal ausrichten"
-
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Cet exemple illustre la manière de positionner une portée d'ossia et
\header {
lsrtags = "chords, tweaks-and-overrides"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de @code{useBassFigureExtenders} al valor
\header {
lsrtags = "vocal-music, keyboards, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla añade una reducción de piano automática a la partitura
"
doctitlees = "Plantilla de conjunto vocal con reducción de piano automática"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c
定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic}
の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In diesem Beispiel wird ein automatischer Klavierauszug zu der
tenorMusic), verändert sich auch der Klavierauszug entsprechend.
"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas ajoute une réduction pour piano à une partition standard pour
\header {
lsrtags = "text, vocal-music, contexts-and-engravers, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla es, básicamente, la misma que la sencilla plantilla
@qq{Conjunto vocal}, excepto que aquí todas las líneas de letra se
"
doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が
@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。
"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In diesem Beispiel werden die Texte mit den Befehlen
doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.21
-\version "2.13.21"
+\version "2.13.29"
\header {
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Esta plantilla crea una partitura que comienza con una estrofa para
meter changes (and other elements common to all parts) throughout
the entire score.
"
- doctitle = "Solo verse and two-part refrain"
+ doctitle = "Vocal ensemble template with verse and refrain"
} % begin verbatim
\header {
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
"
doctitlees = "Plantilla de conjunto vocal"
-
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c
もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c
便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c
歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren
doctitlede = "Vorlage für Vokalensemble"
-
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce fichier constitue un canevas standard de partition pour chœur à
\header {
lsrtags = "repeats, staff-notation, chords"
-%% Translation of GIT committish: e0aa246e0ed1a86dc41a99ab79bff822d3320aa7
+%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
Mediante la adición del grabador @code{Volta_engraver} al
pentagrama pertinente, se pueden poner los corchetes de primera y
doctitlees = "Corchetes de primera y segunda vez debajo de los acordes"
-
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.20"
+\version "2.13.29"
#(set-global-staff-size 15)
\paper {
line-width = 16\cm
@end copying
+@c Info files are no longer installed in a subdirectory, images are
+@c expected to be found in lilypond/ subdirectory.
+@dircategory GNU LilyPond --- the music typesetter
+@direntry
+* LilyPond Learning Manual: (lilypond-learning). Start here.
+* Music Glossary: (music-glossary). For non-English users.
+* LilyPond: (lilypond-notation). LilyPond Notation Reference.
+* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples.
+* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking.
+* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
+* LilyPond Website: (lilypond-web). Preview of new website.
+* lilypond: (lilypond-usage)Running lilypond. Invoking the LilyPond program.
+* abc2ly: (lilypond-usage)Invoking abc2ly. Importing ABC.
+* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
+* etf2ly: (lilypond-usage)Invoking etf2ly. Importing Finale.
+* lilypond-book: (lilypond-usage)lilypond-book. Integrating text and music.
+* midi2ly: (lilypond-usage)Invoking midi2ly. Importing MIDI.
+* musicxml2ly: (lilypond-usage)Invoking musicxml2ly. Importing MusicXML.
+@end direntry
+
+
@c TITLE PAGE
@ifnottex
@node Top
@end ignore
-@c Info files are no longer installed in a subdirectory, images are
-@c expected to be found in lilypond/ subdirectory.
-@dircategory GNU LilyPond --- the music typesetter
-@direntry
-* LilyPond Learning Manual: (lilypond-learning). Start here.
-* Music Glossary: (music-glossary). For non-English users.
-* LilyPond: (lilypond-notation). LilyPond Notation Reference.
-* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples.
-* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking.
-* LilyPond Application Usage: (lilypond-usage). Installing and running applications.
-* LilyPond Website: (lilypond-web). Preview of new website.
-* lilypond: (lilypond-usage)Running LilyPond. Invoking the LilyPond program.
-* abc2ly: (lilypond-usage)Invoking abc2ly. Importing ABC.
-* convert-ly: (lilypond-usage)Updating files with convert-ly. Older LilyPond versions.
-* etf2ly: (lilypond-usage)Invoking etf2ly. Importing Finale.
-* lilypond-book: (lilypond-usage)LilyPond-book. Integrating text and music.
-* midi2ly: (lilypond-usage)Invoking midi2ly. Importing MIDI.
-* musicxml2ly: (lilypond-usage)Invoking musicxml2ly. Importing MusicXML.
-@end direntry
-
-
@c FIXME: this still doesn't solve the broken links in pdf and big
@c html; we'll need a bunch of @iftext and stuff in here. -gp
@c ****************** SPECIAL MACROS FOR WEB MANUAL ************
Music Conference 2008.
@item
-A. Passos, M. Silva, P. Kroger, and G. Cidra,
+Alexandre Tachard Passos, Marcos Sampaio, Pedro Kröger, Givaldo de Cidra,
@emph{Functional Harmonic Analysis and Computational Musicology
-in Rameau}, Proceedings of the 12th Brazilian Symposium on Compute
+in Rameau}, Proceedings of the 12th Brazilian Symposium on Computer
Music, 2009, pp. 207-210.
@item
@item
-Kevin C. Baird 2005.
+Kevin C. Baird 2005,
@emph{Real-time generation of music notation via audience interaction using
python and GNU lilypond}. Proceedings of the 2005 Conference on New interfaces
For Musical Expression (Vancouver, Canada, May 26 - 28, 2005).
-New Interfaces For Musical Expression. National University of Singapore, Singapore, 240-241.
+
@end itemize
download or in traditional paper format.
@item
-@uref{http://theshadylanepublishing.com/, The Shady Lane
-Publishing},
+@uref{http://www.shadylane.fr, The Shady Lane Publishing},
a @qq{micro musical publishing house} whose goal is to promote a
new form of musical economy closer to the musicians and music
lovers.
@divEnd
@divClass{column-center-top}
-@subheading Emacs and Vim
+@subheading Text editors
@sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}
More information on setting up Emacs and Vim can be found in
@rprogram{Text editor support}.
-@divEnd
-
-@ignore these may not need to be here at all, as they are purely
-MacOS scripts.
-
-@divClass{column-center-top}
-@subheading Other
-
-
-@subsubheading Text environment: TexShop
-
@sourceimage{logo-macosx,,,}
-
@uref{http://www.uoregon.edu/~koch/texshop}
The TexShop editor for MacOS@tie{}X can be extended to run LilyPond,
@uref{http://users.dimi.uniud.it/~nicola.vitacolonna/home/content/lilypond-scripts}
@end example
-@subsubheading TextMate
-
@sourceimage{logo-macosx,,,}
-
-There is a LilyPond bundle for TextMate. It may be installed by
-running:
+There is a LilyPond bundle for TextMate, a commercial editor for MacOS.
+It may be installed by running:
@example
mkdir -p /Library/Application\ Support/TextMate/Bundles
cd /Library/Application\ Support/TextMate/Bundles
-svn co http://svn.textmate.org/trunk/Bundles/LilyPond.tmbundle/
+git clone http://github.com/textmate/lilypond.tmbundle.git
+
@end example
@divEnd
-@end ignore
@divClass{column-center-top}
@subheading Other programs can export LilyPond code
-\version "2.12.0"
+\version "2.13.29"
\include "example-header.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
}
-csh = \change Staff = "high"
+csh = \change Staff = "high"
csm = \change Staff = "middle"
csl = \change Staff = "low"
upperVoiceOne = \relative c'' {
\voiceOne
\override TupletBracket #'transparent = ##t
- <aes f'>8\([ \times 4/5{g'32( aes g f g]) }
+ <aes f'>8\([ \times 4/5{g'32( aes g f g]) }
<es aes>8[ \times 4/5{<d bes'>32( c' bes aes bes]) }
<es, aes es'>8 <d fis b d>\) | % end m. 1
%--------------------------------------------------%
- <c g' c>4\( \voiceTwo <bes es bes'\arpeggio>\)
+ <c g' c>4\( \voiceTwo <bes es bes'\arpeggio>\)
\slurUp <aes aes'>16( <bes bes'> <g g'>8) % end m. 2
%--------------------------------------------------%
\noBreak
- \voiceOne
+ \voiceOne
<f aes d f>8\([ \times 4/5{<g g'>32( aes' g f g]) }
\set subdivideBeams = ##t
- \set beatLength = #(ly:make-moment 1 8)
- <aes, aes'>16 <c f> \times 4/5{ bes'32( c bes aes bes]) }
- \set subdivideBeams = ##f
- \ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
+ \set baseMoment = #(ly:make-moment 1 8)
+ \set beatStructure = #'(2 2 2)
+ <aes, aes'>16 <c f> \times 4/5{ bes'32( c bes aes bes]) }
+ \set subdivideBeams = ##f
+ \ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
}
upperVoiceTwo = \relative c'' {
\voiceTwo
s8 c8\< <bes, f'>[ <bes aes'> c' <bes, d fis>\!]
- s32 s32_\appassmolto s8. \voiceOne r8 <bes'' es bes'>-> s4
+ s32 s32_\appassmolto s8. \voiceOne r8 <bes'' es bes'>-> s4
\override Stem #'cross-staff = ##t
\override Stem #'length = #28
\override Stem #'flag-style = #'no-flag
bes8 \csm \stemDown <bes'' c es>8 s2
\csl \stemUp
\set subdivideBeams = ##t
- \set beatLength = #(ly:make-moment 1 16)
- s8 \hideNotes \slurUp \stemDown
+ \set baseMoment = #(ly:make-moment 1 16)
+ \set beatStructure = #'(4 4 4)
+ s8 \hideNotes \slurUp \stemDown
es,,64( bes'' s64 \unHideNotes \stemUp g64[ bes c d c]) s2
\set subdivideBeams = ##f
bes,,8 \csm \stemDown <bes'' c es>8 s2
lowerVoiceTwo = \relative c, {
\voiceTwo
- bes2.
+ bes2.
\csh
\once \override Beam #'damping = #+inf.0
- <bes'' es g>8 \csl \slurUp
- %\once\override Slur #'extra-offset = #'(0 . 4)
- es,,64 bes' es g s32.
+ <bes'' es g>8 \csl \slurUp
+ %\once\override Slur #'extra-offset = #'(0 . 4)
+ es,,64 bes' es g s32.
c64
s4 <bes des>
- bes,,2.
+ bes,,2.
}
\new PianoStaff <<
\set PianoStaff.connectArpeggios = ##t
% \override PianoStaff.Arpeggio #'stencil = #ly:arpeggio::brew-chord-bracket
- \new Staff = "high" <<
+ \new Staff = "high" <<
\global
\context Voice = "upperVoiceOne" { \upperVoiceOne }
\context Voice = "upperVoiceTwo" { \upperVoiceTwo }
>>
- \new Staff = "middle" <<
+ \new Staff = "middle" <<
\global
\context Voice = "middleVoiceOne" { \middleVoiceOne }
\context Voice = "middleVoiceTwo" { \middleVoiceTwo }
>>
- \new Staff = "low" <<
- \clef bass
+ \new Staff = "low" <<
+ \clef bass
\global
\context Voice = "lowerVoiceOne" { \lowerVoiceOne }
\context Voice = "lowerVoiceTwo" { \lowerVoiceTwo }
@c FIXME: fill in number
@c used for news about the upcoming release; see CG x.y
+@newsItem
+@subsubheading LilyPond 2.13.29 released! @emph{July 13, 2010}
+
+We are happy to announce the release of LilyPond 2.13.29. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+
+This release includes some major untested changes to the windows
+lilypad editor. Windows users should not be using this release
+because it is intended for developers only, but you ignore these
+warnings and try it anyway, use extra caution.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.13.27 released! @emph{July 5, 2010}
+
+We are happy to announce the release of LilyPond 2.13.27. 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 Testing our new website! @emph{June 29, 2010}
$(MAKE) -C input/regression/ out=test local-test
$(MAKE) -C input/regression/musicxml out=test local-test
$(MAKE) -C input/regression/abc2ly out=test local-test
+ $(MAKE) -C input/regression/lilypond-book out=test local-test
test-baseline:
@if test -d .git ; then \
$(MAKE) out=test -C input/regression/ local-test-baseline
$(MAKE) out=test -C input/regression/musicxml local-test-baseline
$(MAKE) out=test -C input/regression/abc2ly local-test-baseline
+ $(MAKE) out=test -C input/regression/lilypond-book local-test-baseline
$(MAKE) test-snippets-clean
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=13
-PATCH_LEVEL=27
+PATCH_LEVEL=29
MY_PATCH_LEVEL=
VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.26
+VERSION_DEVEL=2.13.29
exec ./autogen.sh "$@"
fi
-# Be paranoid: check for autoconf >= 2.50
-# Some setups have both autoconf 2.13 and 2.5x available through
-# a wrapper script: /usr/bin/autoconf.
-# This wrapper may incorrectly autoselect autoconf 2.50, but it
-# advertises itself as autoconf 2.13.
-# If you have such a setup, invoke this script as:
-# autoconf=autoconf2.50 ./autogen.sh
-for i in autoconf2.50 autoconf-2.50 autoconf false; do
- version=`$i --version 2>/dev/null | head -n 1 | awk '{print $NF}' | awk -F. '{print $1 * 100 + $2}'`
- if test "0$version" -ge 250; then
- autoconf=$i
- break
- fi
-done
-
-if test -z "$autoconf"; then
- echo "ERROR: Please install autoconf 2.50 or newer"
- exit 1
-fi
-
for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
do
dir=`dirname $i`
(
cd $dir
echo "Running autoconf ..."
- $autoconf
+ autoconf || exit 1
)
+ # Autoconf automatically checks its own minimum required
+ # version, and it aborts when the check fails.
+ test "$?" -eq 1 && exit 1
done
#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
CONFIGSUFFIX = @CONFIGSUFFIX@
CROSS = @cross_compiling@
CXX = @CXX@
+DBLATEX = @DBLATEX@
DEFINES = @DEFS@ @DEFINES@
DEFS = @DEFS@
DOCUMENTATION = @DOCUMENTATION@
MSGFMT = @MSGFMT@
PAPERSIZE=a4
PATHSEP = @PATHSEP@
+PDFLATEX = @PDFLATEX@
PERL = @PERL@
PLATFORM_WINDOWS = @PLATFORM_WINDOWS@
PYTHON = @PYTHON@
STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
STEPMAKE_PROGS(TEXI2HTML, texi2html, OPTIONAL, 1.82)
+STEPMAKE_PROGS(DBLATEX, dblatex, OPTIONAL)
+STEPMAKE_PROGS(PDFLATEX, pdflatex, OPTIONAL)
AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
include $(depth)/make/stepmake.make
TITLE=LilyPond Regression Tests
-SUBDIRS=musicxml abc2ly
+SUBDIRS=musicxml abc2ly lilypond-book
}
-\version "2.12.0"
+\version "2.13.29"
\paper { ragged-right = ##t }
{
\time 2/4
b16 b b b
b16 b b b
\set subdivideBeams = ##t
- \set Score.beatLength = #(ly:make-moment 1 8)
+ \set Score.baseMoment = #(ly:make-moment 1 8)
b16 b b b
b16 b b b
}
\header {
texidoc = "Default beaming patterns can be set for the current time
-signature by @code{\\setBeatGrouping}. "
+signature. "
}
\layout {
\relative c'' {
\time 5/16
- \setBeatGrouping #'(2 3)
+ \set beatStructure = #'(2 3)
c8[^"(2+3)" c16 c8]
- \setBeatGrouping #'(3 2)
+ \set beatStructure = #'(3 2)
c8[^"(3+2)" c16 c8]
}
-\version "2.12.0"
+\version "2.13.29"
\header {
- texidoc = "Automatic beaming works also in ternary time sigs. In
- this case, the 8th is a beat, so the 16ths are split into two
- groups. This can be avoided by overriding @code{beatLength} to be
- three 8th notes."
+ texidoc = "Automatic beaming works also in ternary time sigs.
+ As desired, the measure is split in half, with beats 1-3 and
+ 4-6 beamed together as a whole."
}
\relative c'' {
\time 6/8
- c8.[ c16 c16 c16]
- \set beatLength = #(ly:make-moment 3 8)
- c8.[ c16 c16 c16]
+ c8. c16 c16 c16
+ c8. c16 c16 c16
}
--- /dev/null
+\version "2.12.0"
+
+\header{
+texidoc="
+Articulations on chord tremolos should not confuse the time-scaling of the
+notes. In particular, only the number of real notes should be considered.
+"
+}
+
+\context Voice \relative c' {
+ \repeat "tremolo" 4 { d16\f e-. }
+ \repeat "tremolo" 4 { d16-> e } | \barNumberCheck #2
+ \repeat "tremolo" 4 { d16 e\f }
+ \repeat "tremolo" 8 { d32\> e\! } | \barNumberCheck #3
+ \repeat "tremolo" 2 { d8\trill e }
+ \repeat "tremolo" 2 { d8\sfz e } | \barNumberCheck #4
+
+ \time 2/4
+ \repeat "tremolo" 8 { d32^"Markup" e } | \barNumberCheck #5
+ c4 c4
+}
+
--- /dev/null
+\version "2.13.29"
+
+\header {
+ texidoc = "@code{ly:parser-include-string} should include the current
+string like a file @code{\include}."
+}
+
+#(ly:parser-include-string parser "\\relative c' { a4 b c d }")
--- /dev/null
+\version "2.13.27"
+\header {
+
+ texidoc = "The 'head-direction of a LaissezVibrerTieColumn should
+be able to be set without causing a segmentation fault."
+
+}
+
+\relative c'' {
+ c2 \laissezVibrer
+ \once \override LaissezVibrerTieColumn #'head-direction = #RIGHT
+ c \laissezVibrer
+}
+
-\version "2.13.4"
+\version "2.13.29"
\header {
composer = "ARTHUR GRAY"
theScore = \score{
\context PianoStaff <<
\new Staff = "treble" <<
- \overrideBeamSettings #'Score #'(4 . 4) #'end
- #'((* . (1 1 1 1))
- ((1 . 32) (4 4 4 4 4 4 4 4)))
+ \set beamExceptions = #'((end . (((1 . 8) . (2 2 2 2))
+ ((1 . 32) . (4 4 4 4 4 4 4 4)))))
\treble
\trebleTwo
>>
--- /dev/null
+depth = ../../..
+
+STEPMAKE_TEMPLATES=documentation texinfo
+LOCALSTEPMAKE_TEMPLATES=lilypond ly lysdoc lilypond-book
+
+COLLATED_FILES = $(OUT_FILES)
+
+include $(depth)/make/stepmake.make
+
+TITLE=lilypond-book Test Suite
--- /dev/null
+<html>
+<body>
+Including a ly file with newline and spaces in the tags.
+<lilypondfile
+>
+include.ly
+</lilypondfile >
+</body>
+</html>
--- /dev/null
+<html>
+<body>
+Some music in <lilypond relative=2: a b c
+/> a line of text with a newline before the tag end.
+</body>
+</html>
--- /dev/null
+<html>
+Some music in <lilypond: { a b c }/> a line of text.
+</body>
+</html>
--- /dev/null
+<html>
+Some music in <lilypond relative=2: a b c/> a line of text.
+</body>
+</html>
--- /dev/null
+<html>
+
+A simple lilypond snippet as a stand-alone paragraph:
+
+<lilypond>
+\relative c' {\repeat unfold 20 c4}
+</lilypond>
+
+
+</html>
--- /dev/null
+<html>
+<body>
+Lilypond fragment with newlines before the end tags.
+<lilypond fragment relative=2
+>
+\key c \minor c4 es g2
+</lilypond
+>
+</body>
+</html>
--- /dev/null
+<html>
+<body>
+Lilypond fragment with spaces and tabs before the end tags.
+<lilypond fragment relative=2 >
+\key c \minor c4 es g2
+</lilypond >
+</body>
+</html>
--- /dev/null
+<html>
+<body>
+Lilypond version: <lilypondversion
+/>
+</body>
+</html>
--- /dev/null
+<html>
+<body>
+Lilypond version: <lilypondversion/>
+</body>
+</html>
--- /dev/null
+\version "2.12.0"
+\score {
+ \relative c'' { \key c \minor c4 es g2 }
+}
--- /dev/null
+\version "2.12.0"
+\score {
+ \relative c'' { \key c \minor d4 es g2 }
+}
--- /dev/null
+\version "2.13.20"
+
+\header {
+doctitlees = "If you see this 'translated' doctitle, language detection work"
+
+texidoces = "If you see this 'translated' texidoc, language detection work"
+
+ texidoc = "Original texidoc (you should not see this!)"
+ doctitle = "Original doctitle (you should not see this!)"
+}
+
+\relative c'' {
+ c1
+}
+
--- /dev/null
+<html>
+<body>
+Testing lilypond-book HTML mode with .html file suffix.
+<lilypond fragment relative=2>
+\key c \minor c4 es g2
+</lilypond>
+</body>
+</html>
--- /dev/null
+<html>
+<body>
+Testing lilypond-book HTML mode with .htmly file suffix.
+<lilypond fragment relative=2>
+\key c \minor c4 es g2
+</lilypond>
+</body>
+</html>
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@setfilename suffix-itely.info
+@settitle lilypond-book Suffix test for itely
+
+@node Top
+@top Suffix test for itely
+
+Testing lilypond-book texinfo mode with .itely file suffix.
+@lilypond[fragment,relative=2]
+\key c \minor c4 e d2
+@end lilypond
+
+
+@bye
--- /dev/null
+\documentclass{article}
+\begin{document}
+Testing lilypond-book tex mode with .latex file suffix.
+\begin[fragment,relative=2]{lilypond}
+\key c \minor c4 e d2
+\end{lilypond}
+\end{document}
--- /dev/null
+\documentclass{article}
+\begin{document}
+Testing lilypond-book tex mode with .lytex file suffix.
+\begin[fragment,relative=2]{lilypond}
+\key c \minor c4 es d2
+\end{lilypond}
+\end{document}
--- /dev/null
+<book id="lyxml_suffix_test">
+ <title></title>
+ <chapter id="lyxml_test">
+ <title>Suffix test for lyxml</title>
+ <para>Testing lilypond-book DocBook mode with .lyxml file suffix.</para>
+ <inlinemediaobject>
+ <textobject>
+ <programlisting language="lilypond" role="fragment verbatim staffsize=16 ragged-right relative=2">
+ \key c \minor c4 es g2
+ </programlisting>
+ </textobject>
+ </inlinemediaobject>
+ </chapter>
+</book>
\ No newline at end of file
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@setfilename suffix-tely.info
+@settitle lilypond-book Suffix test for tely
+
+@node Top
+@top Suffix test for tely
+
+Testing lilypond-book texinfo mode with .tely file suffix.
+@lilypond[fragment,relative=2]
+\key c \minor c4 e d2
+@end lilypond
+
+
+@bye
--- /dev/null
+\documentclass{article}
+\begin{document}
+Testing lilypond-book tex mode with .tex file suffix.
+\begin{lilypond}[fragment,relative=2]
+\key c \minor c4 dis d2
+\end{lilypond}
+\end{document}
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@setfilename suffix-texi.info
+@settitle lilypond-book Suffix test for texi
+
+@node Top
+@top Suffix test for texi
+
+Testing lilypond-book texinfo mode with .texi file suffix.
+@lilypond[fragment,relative=2]
+\key c \minor c4 e d2
+@end lilypond
+
+
+@bye
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@setfilename suffix-texinfo.info
+@settitle lilypond-book Suffix test for texinfo
+
+@node Top
+@top Suffix test for texinfo
+
+Testing lilypond-book texinfo mode with .texinfo file suffix.
+@lilypond[fragment,relative=2]
+\key c \minor c4 e d2
+@end lilypond
+
+
+@bye
--- /dev/null
+<html>
+<body>
+Testing lilypond-book HTML mode with .xml file suffix.
+<lilypond fragment relative=2>
+\key c \minor c4 es g2
+</lilypond>
+</body>
+</html>
--- /dev/null
+\documentclass[a4paper]{article}
+
+\begin{document}
+
+Documents for \verb+lilypond-book+ may freely mix music and text. The music
+snippets will be properly line-broken. For example,
+
+\begin{lilypond}
+\relative c' {
+ c2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+ c,2 g'2 \times 2/3 { f8 e d } c'2 g4
+}
+\end{lilypond}
+
+
+\end{document}
\ No newline at end of file
--- /dev/null
+% A comment on the first line should not confuse lilypond-book's format
+% detection
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{A coment on the first line of the file}
+
+This should not confuse the auto-detection of lilypond-book...
+
+\begin{lilypond}
+\score{
+ \relative c'{c d e f g a b c}
+}
+\end{lilypond}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+
+\subsection{LaTeX comments}
+This is a line with lilypond code
+after the comment char % \lilypond{\context Voice <<c' e' g'>>}
+% \lilypond{\context Voice <<c' e' g'>>}
+
+If you do not see any music above
+this line, then lilypond-book is handling latex comments pretty well :-)
+
+The following snippet is preceded by a comment that would start a lilypond
+environment
+
+%%\begin{lilypond}
+\begin{lilypond}[11pt,fragment]
+\context Voice <<c' e' g'>>
+\end{lilypond}
+
+A single-line comment inside a fragment does not confuse lilypond-book:
+
+\begin{lilypond}[fragment]
+c d e %\score
+\end{lilypond}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+\section{LilyPond snippets with deprecated options}
+
+A snippet with a deprecated option, triggering compatibility mode:
+
+\lilypond[11pt,fragment]{c' e' g'}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+\section{LilyPond snippets in a footnote}
+
+Test for snippets in a footnote\footnote{Here's the footnote:
+\lilypond[fragment]{c' e' g'} }:
+\marginpar{ Yes, even as marginpar
+\lilypond[fragment]{c' d' e'} }
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{Using lilypond-book's fragment option}
+
+If a snippet is not a fully valid LilyPond file, you have
+to use the \verb|fragment| option:
+
+\begin{lilypond}[fragment]
+c d e
+\end{lilypond}
+
+% TODO: \verb does not yet work!!!
+There is also a shorthand version %\verb|\lilypond[fragment]{c' e' g'}|:
+
+\lilypond[fragment]{c' e' g'}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper]{article}
+
+\begin{document}
+
+\section{Lilypond-book should add the graphicx package}
+
+If a latex file does not yet include the graphicx package, it is added by
+lilypond-book.
+
+\end{document}
--- /dev/null
+\documentclass{article}
+\begin{document}
+Including Lilypond file:
+\lilypondfile{include2.ly}
+\end{document}
--- /dev/null
+\documentclass{article}
+\begin{document}
+Including Lilypond file with options (quote and noindent):
+\lilypondfile[quote,noindent]{include2.ly}
+\end{document}
--- /dev/null
+\documentclass{article}
+\begin{document}
+Adding Lilypond code inline: \lilypond[relative=2]{ d g ceses }
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{Simple lilypond blocks}
+
+A simple scale:
+
+\begin{lilypond}
+\score{
+ \relative c' { c d e f g a b c }
+}
+\end{lilypond}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{Lilypond snippets inside lists:}
+
+Itemize environment:
+\begin{itemize}
+\item
+\lilypond[11pt,fragment]{ c'} do
+\item
+\lilypond[11pt,fragment]{d'} re
+\item
+\lilypond[11pt,fragment]{e'} mi
+\item
+\lilypond[11pt,fragment]{f'} fa
+\item
+\lilypond[11pt,fragment]{g'} sol
+\end{itemize}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{Lilypond snippets inside tables:}
+
+Tables:
+
+\begin{tabular}{|l|l|r|}
+\hline
+\em Notes & \em Name \\
+\hline
+\lilypond[11pt,fragment,filename="cdur"]{\context Voice <<c' e' g'>>} & major \\
+\lilypond[11pt,fragment]{\context Voice <<c' es' g'>>} & minor \\
+\lilypond[11pt,fragment]{\context Voice <<c' es' ges'>>} & diminished \\
+\lilypond[11pt,fragment]{\context Voice <<c' e' gis'>>} & augmented \\
+\hline
+\end{tabular}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+Version: \lilypondversion
+
+A digit immediately after the version: \lilypondversion9
+A formula immediately after the version: \lilypondversion$x_k$
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+
+\section{Paragraphs and line spacing}
+
+Testing of spacing. The next music is surrounded by an empty line.
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+
+\begin{lilypond}
+\score{ \relative c'{ c d e f g a b c} }
+\end{lilypond}
+
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+
+Next has no empty lines.
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+\begin{lilypond}
+\score{ \relative c'{ c d e f g a b c} }
+\end{lilypond}
+text text text text text text text text text text text text
+text text text text text text text text text text text text
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{Snippet options}
+
+Fragment:
+\begin{lilypond}[fragment]
+c d e %\score
+\end{lilypond}
+
+This shows the verbatim option:
+\begin{lilypond}[fragment,verbatim]
+c' d' e'
+\end{lilypond}
+
+printfilename:
+\lilypondfile[printfilename]{include.ly}
+
+staffsize:
+\begin{lilypond}[staffsize=7,fragment]
+\context Voice <<c' e' g'>>
+\end{lilypond}
+\lilypond[fragment,staffsize=7]{\context Voice <<c' es' g'>>}
+
+relative:
+\lilypond[relative=1]{ c4 f b e }
+
+quote:
+\lilypond[quote,fragment]{\relative c' c1 }
+
+fragment, quote, staffsize=26, verbatim:
+\begin{lilypond}[fragment,quote,staffsize=26,verbatim]
+ c'4 f16
+\end{lilypond}
+
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+\twocolumn
+
+\section{A latex file with two columns}
+
+In this example, the width auto-detection shall detect the two columns
+and produce snippets that have the smaller width for a column!
+
+\begin{lilypond}
+\score{
+ \relative c'{c d e f g a b c | c d e f g a b c | c d e f g a b c}
+}
+\end{lilypond}
+
+\end{document}
--- /dev/null
+\documentclass[a4paper, 12pt]{article}
+
+\begin{document}
+
+\section{verb and verbatim}
+
+This file should not contain (and produce) any lilypond images!
+
+Snippets inside a verbatim environment or a comment are not run through
+lilypond, but left as is.
+
+% TODO: These do not yet work, as \verb is explicitly disabled in lilypond-book for now!
+% \verb|\lilypond[fragment]{c' d' e'}|
+%
+% and
+
+\begin{verbatim}
+\begin{lilypond}
+c d e
+\end{lilypond}
+\end{verbatim}
+
+
+As you can see, the begin/end lilypond commands inside
+do not confuse lilypond-book.
+
+% TODO: These do not yet work, as \verb is explicitly disabled in lilypond-book for now!
+% \verb|\begin{lilypond}[fragment]c d e\end{lilypond}|
+
+% \verb+\lilypondfile[quote,noindent]{screech-boink.ly}+
+
+Neither does a verbatim inside verb:
+
+\verb|\begin{verbatim}\begin{lilypond}[fragment]c d e\end{lilypond}\end{verbatim}|
+
+or verb inside verbatim:
+
+\begin{verbatim}
+\verb|\begin{lilypond}[fragment]c d e\end{lilypond}|
+\end{verbatim}
+
+But these are just to stress \verb|lilypond-book|.
+
+
+\end{document}
--- /dev/null
+\documentclass{article}
+\begin{document}
+Lilypond version: \lilypondversion
+\end{document}
--- /dev/null
+The texidoc of the following snippet should be "translated":
+@lilypondfile[printfilename,texidoc,doctitle]{include3.ily}
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
+@setfilename texinfo-language-detection.info
+@settitle Texinfo language detection
+@documentencoding UTF-8
+@documentlanguage es
+@afourpaper
+
+@node Top
+@top Texinfo language detection
+
+@include texinfo-include-language-detection-included.itely
+
+@bye
--- /dev/null
+\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
+@setfilename texinfo-language-detection.info
+@settitle Texinfo language detection
+@documentencoding UTF-8
+@documentlanguage es
+@afourpaper
+
+@node Top
+@top Texinfo language detection
+
+The texidoc of the following snippet should be "translated":
+@lilypondfile[printfilename,texidoc,doctitle]{include3.ily}
+
+
+@bye
zip: $(outdir)/MusicXML-TestSuite-$(TEST_SUITE_VERSION).zip
$(outdir)/MusicXML-TestSuite-$(TEST_SUITE_VERSION).zip: $(MUSICXML_FILES) $(MUSICMXL_FILES) LICENSE
- $(ZIP) -r $@ $(addprefix $(src-dir)/,$(MUSICXML_FILES)) $(addprefix $(src-dir)/,$(MUSICMXL_FILES)) LICENSE
+ $(ZIP) -q -r $@ $(addprefix $(src-dir)/,$(MUSICXML_FILES)) $(addprefix $(src-dir)/,$(MUSICMXL_FILES)) LICENSE
--- /dev/null
+\version "2.13.22"
+
+\header {
+ texidoc = "minimum-distance is correctly accounted for in page breaking."
+}
+
+\book {
+ \paper {
+ between-scores-system-spacing #'minimum-distance = #'20
+ paper-height = 8\cm
+ }
+
+ \score { c'1 }
+ \score { c'1 }
+ \score { c'1 }
+ \score { c'1 }
+}
+
--- /dev/null
+\version "2.13.29"
+
+\header {
+ texidoc = "A tremolo repeat containing only one note (no sequential music)
+ shall not be scaled. An articulation or dynamic sign on the note should not
+ confuse lilypond."
+}
+
+\paper { ragged-right = ##t }
+\score {
+ \new Staff \relative c'' {
+ \repeat tremolo 4 { a16 }
+ \repeat tremolo 4 { a16\f }
+ \repeat tremolo 4 a16
+ \repeat tremolo 4 a16\f |
+ \repeat tremolo 4 a16\f->
+ c2. |
+ }
+}
--- /dev/null
+\version "2.13.29"
+
+\header {
+ texidoc = "A tremolo can have more than two notes. Also check that
+linebreaks between tremolos still work and that empty tremolos don't crash."
+}
+
+\paper { ragged-right = ##t }
+\score {
+ \new Staff \relative c' {
+ \time 3/4
+ \repeat tremolo 16 { a64 c e } |
+ \repeat tremolo 8 { a,64 c e }
+ \repeat tremolo 4 { a,64 c e }
+ \repeat tremolo 2 { a,32 c e } |\break
+ \repeat tremolo 16 { a64 c e }
+ \repeat tremolo 8 {} |
+ }
+}
accidental_placement_ = 0;
accidentals_.clear ();
+ note_columns_.clear ();
left_objects_.clear ();
right_objects_.clear ();
}
forbid_ = 0;
process_acknowledged_count_ = 0;
stems_ = 0;
- shortest_mom_ = Moment (Rational (1, 8));
+ shortest_mom_ = Moment (Rational (1, 4));
finished_beam_ = 0;
finished_grouping_ = 0;
grouping_ = 0;
return scm_call_4 (get_property ("autoBeamCheck"),
context ()->self_scm (),
scm_from_int (dir),
- test_mom.smobbed_copy(),
+ test_mom.smobbed_copy (),
dur.smobbed_copy ())
!= SCM_BOOL_F;
}
grouping_ = 0;
beam_settings_ = SCM_EOL;
- shortest_mom_ = Moment (Rational (1, 8));
+ shortest_mom_ = Moment (Rational (1, 4));
}
void
beam_settings_ = SCM_EOL;
}
- shortest_mom_ = Moment (Rational (1, 8));
+ shortest_mom_ = Moment (Rational (1, 4));
}
void
if (bool (beam_start_location_.grace_part_) != bool (now.grace_part_))
return;
- Moment ev_dur = unsmob_duration (ev->get_property ("duration"))->get_length ();
- Moment dur = Rational (1, ev_dur.den ());
+ Moment dur = unsmob_duration (ev->get_property ("duration"))->get_length ();
Moment measure_now = measure_position (context ());
bool recheck_needed = false;
{
Moment measure_now = measure_position (context ());
consider_end (measure_now, shortest_mom_);
- consider_begin (measure_now, shortest_mom_);
}
else if (process_acknowledged_count_ > 1)
{
ADD_ACKNOWLEDGER (Auto_beam_engraver, breathing_sign);
ADD_ACKNOWLEDGER (Auto_beam_engraver, rest);
ADD_TRANSLATOR (Auto_beam_engraver,
- /* doc */
- "Generate beams based on measure characteristics and observed"
- " Stems. Uses @code{beatLength}, @code{measureLength}, and"
- " @code{measurePosition} to decide when to start and stop a"
- " beam. Overriding beaming is done through"
- " @ref{Stem_engraver} properties @code{stemLeftBeamCount} and"
- " @code{stemRightBeamCount}.",
-
- /* create */
- "Beam ",
-
- /* read */
- "autoBeaming "
- "beamSettings "
- "beatLength "
- "subdivideBeams ",
-
- /* write */
- ""
- );
+ /* doc */
+ "Generate beams based on measure characteristics and observed"
+ " Stems. Uses @code{baseMoment}, @code{beatStructure},"
+ " @code{beamExceptions}, @code{measureLength}, and"
+ " @code{measurePosition} to decide when to start and stop a"
+ " beam. Overriding beaming is done through"
+ " @ref{Stem_engraver} properties @code{stemLeftBeamCount} and"
+ " @code{stemRightBeamCount}.",
+
+ /* create */
+ "Beam ",
+
+ /* read */
+ "autoBeaming "
+ "baseMoment "
+ "beamExceptions "
+ "beatStructure "
+ "subdivideBeams ",
+
+ /* write */
+ ""
+ );
#include "all-font-metrics.hh"
#include "font-interface.hh"
+#include "line-interface.hh"
#include "lookup.hh"
#include "output-def.hh"
#include "paper-column.hh"
#include "staff-symbol-referencer.hh"
-#include "line-interface.hh"
MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_extent, 1)
SCM
return ly_interval2scm (Interval ());
Real h = scm_to_double (size);
- return ly_interval2scm (Interval (-h/2, h/2));
+ return ly_interval2scm (Interval (-h / 2, h / 2));
}
Interval
return iv;
}
+bool
+Bar_line::non_empty_barline (Grob *me)
+{
+ return has_interface (me) && !me->extent (me, X_AXIS).is_empty ();
+}
+
MAKE_SCHEME_CALLBACK (Bar_line, print, 1);
SCM
Bar_line::print (SCM smob)
if (str == "")
{
- Stencil empty = Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2)));
+ Stencil empty = Lookup::blank (Box (Interval (0, 0), Interval (-h / 2, h / 2)));
empty.translate_axis (center, Y_AXIS);
return empty;
}
m.add_at_edge (X_AXIS, LEFT, colon, kern);
m.add_at_edge (X_AXIS, RIGHT, thin, kern);
m.add_at_edge (X_AXIS, RIGHT, colon, kern);
-
}
else if (str == ":|.:")
{
/*
should align to other side? this never appears
on the system-start?
- m.add_at_edge (X_AXIS, RIGHT, thin, 0);
- m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
+ m.add_at_edge (X_AXIS, RIGHT, thin, 0);
+ m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
*/
m.add_at_edge (X_AXIS, LEFT, thin, thinkern);
m.add_at_edge (X_AXIS, RIGHT, thin, thinkern);
segno.add_stencil (Font_interface::get_default_font (me)->find_by_name ("scripts.varsegno"));
if (str == "S")
- {
- m.add_stencil (segno);
- }
+ m.add_stencil (segno);
else if (str == "S|:" || str == ".S|:")
- {
- m.add_at_edge (X_AXIS, RIGHT, thick, 0);
- m.add_at_edge (X_AXIS, RIGHT, thin, kern);
- m.add_at_edge (X_AXIS, RIGHT, colon, kern);
- m.add_at_edge (X_AXIS, LEFT, segno, thinkern);
- }
+ {
+ m.add_at_edge (X_AXIS, RIGHT, thick, 0);
+ m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+ m.add_at_edge (X_AXIS, RIGHT, colon, kern);
+ m.add_at_edge (X_AXIS, LEFT, segno, thinkern);
+ }
else if (str == ":|S" || str == ":|S.")
- {
- m.add_at_edge (X_AXIS, LEFT, thick, 0);
- m.add_at_edge (X_AXIS, LEFT, thin, kern);
- m.add_at_edge (X_AXIS, LEFT, colon, kern);
- m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
- }
+ {
+ m.add_at_edge (X_AXIS, LEFT, thick, 0);
+ m.add_at_edge (X_AXIS, LEFT, thin, kern);
+ m.add_at_edge (X_AXIS, LEFT, colon, kern);
+ m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
+ }
else if (str == ":|S|:" || str == ":|S.|:")
- {
- m.add_at_edge (X_AXIS, LEFT, thick, 0);
- m.add_at_edge (X_AXIS, LEFT, thin, kern);
- m.add_at_edge (X_AXIS, LEFT, colon, kern);
- m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
- m.add_at_edge (X_AXIS, RIGHT, thick, thinkern);
- m.add_at_edge (X_AXIS, RIGHT, thin, kern);
- m.add_at_edge (X_AXIS, RIGHT, colon, kern);
- }
+ {
+ m.add_at_edge (X_AXIS, LEFT, thick, 0);
+ m.add_at_edge (X_AXIS, LEFT, thin, kern);
+ m.add_at_edge (X_AXIS, LEFT, colon, kern);
+ m.add_at_edge (X_AXIS, RIGHT, segno, thinkern);
+ m.add_at_edge (X_AXIS, RIGHT, thick, thinkern);
+ m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+ m.add_at_edge (X_AXIS, RIGHT, colon, kern);
+ }
else if (str == "|._.|") // :|S|: or :|S.|: without segno and colon
- {
- // get the width of the segno sign
- Real segno_width = segno.extent (X_AXIS).length ();
- m.add_at_edge (X_AXIS, LEFT, thick, 0);
- m.add_at_edge (X_AXIS, LEFT, thin, kern);
- m.add_at_edge (X_AXIS, RIGHT, thick, segno_width + 2 * thinkern);
- m.add_at_edge (X_AXIS, RIGHT, thin, kern);
- }
+ {
+ // get the width of the segno sign
+ Real segno_width = segno.extent (X_AXIS).length ();
+ m.add_at_edge (X_AXIS, LEFT, thick, 0);
+ m.add_at_edge (X_AXIS, LEFT, thin, kern);
+ m.add_at_edge (X_AXIS, RIGHT, thick, segno_width + 2 * thinkern);
+ m.add_at_edge (X_AXIS, RIGHT, thin, kern);
+ }
// end varsegno block
}
else if (str == ":")
}
}
else if (str == "dashed")
- {
- m = dashed_bar_line (me, h, hair);
- }
+ m = dashed_bar_line (me, h, hair);
else if (str == "'")
- {
- m = tick_bar_line (me, h, rounded);
- }
+ m = tick_bar_line (me, h, rounded);
m.translate_axis (center, Y_AXIS);
return m;
: 0.0;
return Lookup::round_filled_box (Box (Interval (0, line_thick),
- Interval (h / 2 - th, h / 2 + th)), blot);
+ Interval (h / 2 - th, h / 2 + th)), blot);
}
-
MAKE_SCHEME_CALLBACK (Bar_line, calc_bar_size, 1);
SCM
Bar_line::calc_bar_size (SCM smob)
return scm_from_int (0);
}
-
Stencil
Bar_line::dashed_bar_line (Grob *me, Real h, Real thick)
{
this is a tad complex for what we want to achieve, but with a
simple line, the round blotting interferes with staff line
connections.
- */
+ */
Real ss = Staff_symbol_referencer::staff_space (me);
int count = Staff_symbol_referencer::line_count (me);
- Real line_thick = Staff_symbol_referencer::line_thickness (me);
+ Real line_thick = Staff_symbol_referencer::line_thickness (me);
- if (fabs (line_thick + (count -1) * ss - h) < 0.1) // ugh.
+ if (fabs (line_thick + (count -1) * ss - h) < 0.1) // ugh.
{
- Real blot =
- me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
+ Real blot
+ = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
- Real half_space = ss/2;
+ Real half_space = ss / 2;
Stencil bar;
- for (int i = (count-1); i >= -(count-1); i -= 2)
+ for (int i = (count - 1); i >= -(count - 1); i -= 2)
{
Real top_y = min ((i + dash_size) * half_space,
- (count-1) * half_space + line_thick / 2);
+ (count - 1) * half_space + line_thick / 2);
Real bot_y = max ((i - dash_size) * half_space,
- -(count-1) * half_space - line_thick/2);
+ -(count - 1) * half_space - line_thick / 2);
bar.add_stencil (Lookup::round_filled_box (Box (Interval (0, thick),
Interval (bot_y, top_y)),
/*
We have to scale the dashing so it starts and ends with half a
dash exactly.
- */
+ */
int dashes = int (rint (h / ss));
Real total_dash_size = h / dashes;
Real factor = (dash_size - thick) / ss;
SCM at = scm_list_n (ly_symbol2scm ("dashed-line"),
scm_from_double (thick),
scm_from_double (factor * total_dash_size),
- scm_from_double ((1-factor) * total_dash_size),
+ scm_from_double ((1 - factor) * total_dash_size),
scm_from_double (0),
scm_from_double (h),
scm_from_double (factor * total_dash_size * 0.5),
box.add_point (Offset (0, h));
Stencil s (box, at);
- s.translate (Offset (thick/2, -h/2));
+ s.translate (Offset (thick / 2, -h / 2));
return s;
}
return Stencil ();
Beaming_options beaming_options_;
Beaming_options finished_beaming_options_;
-
+
void typeset_beam ();
void set_melisma (bool);
if (stop_ev_ && beam_)
{
announce_end_grob (beam_, stop_ev_->self_scm ());
-
+
}
}
finished_beam_ = beam_;
finished_beam_info_ = beam_info_;
finished_beaming_options_ = beaming_options_;
-
+
stop_ev_ = 0;
beam_ = 0;
beam_info_ = 0;
{
if (!beam_)
return;
-
+
Moment now = now_mom ();
if (!valid_start_point ())
return;
Item *stem = dynamic_cast<Item *> (info.grob ());
if (Stem::get_beam (stem))
return;
-
+
Stream_event *ev = info.ultimate_event_cause ();
if (!ev->in_event_class ("rhythmic-event"))
{
/* doc */
"Handle @code{Beam} events by engraving beams. If omitted,"
" then notes are printed with flags instead of beams.",
-
+
/* create */
"Beam ",
/* read */
+ "baseMoment "
"beamMelismaBusy "
- "beatLength "
+ "beatStructure "
"subdivideBeams ",
/* write */
TRANSLATOR_DECLARATIONS (Grace_beam_engraver);
DECLARE_TRANSLATOR_LISTENER (beam);
-
+
protected:
virtual bool valid_start_point ();
virtual bool valid_end_point ();
"Handle @code{Beam} events by engraving beams. If omitted,"
" then notes are printed with flags instead of beams. Only"
" engraves beams when we are at grace points in time.",
-
+
/* create */
"Beam ",
/* read */
+ "baseMoment "
"beamMelismaBusy "
- "beatLength "
+ "beatStructure "
"subdivideBeams ",
/* write */
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2009--2010 Carl Sorensen <c_sorensen@byu.edu>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "beam-settings.hh"
-#include "context.hh"
-#include "guile-compatibility.hh"
-
-LY_DEFINE (ly_grouping_rules, "ly:grouping-rules",
- 3, 0, 0, (SCM settings, SCM time_signature, SCM rule_type),
- "Return grouping rules for @var{time-signature} and"
- " @var{rule-type} from @var{settings}.")
-{
- LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
- LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
- LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
-
- SCM grouping_rules = SCM_EOL;
- if (scm_is_pair (settings))
- grouping_rules =
- ly_assoc_get (scm_list_2 (time_signature, rule_type),
- settings,
- SCM_EOL);
- return grouping_rules;
-}
-
-LY_DEFINE (ly_beam_grouping, "ly:beam-grouping",
- 4, 0, 0, (SCM settings, SCM time_signature, SCM rule_type,
- SCM beam_type),
- "Return grouping for beams of @var{beam-type} in"
- " @var{time-signature} for"
- " @var{rule-type} from @var{settings}.")
-{
- LY_ASSERT_TYPE (ly_cheap_is_list, settings, 1);
- LY_ASSERT_TYPE (scm_is_pair, time_signature, 2);
- LY_ASSERT_TYPE (ly_is_symbol, rule_type, 3);
- SCM_ASSERT_TYPE (scm_is_symbol(beam_type) || scm_is_pair(beam_type),
- beam_type, SCM_ARG4, __FUNCTION__, "symbol or pair");
- SCM beam_grouping =
- ly_assoc_get (beam_type,
- ly_grouping_rules (settings,time_signature,rule_type),
- SCM_EOL);
- return beam_grouping;
-}
-
-LY_DEFINE (ly_beat_grouping, "ly:beat-grouping",
- 1, 0, 0, (SCM context),
- "Return default beat grouping currently active in @var{context}.")
-{
- LY_ASSERT_SMOB (Context, context, 1);
- Context *c = unsmob_context (context);
- SCM time_signature =
- c->get_property ("timeSignatureFraction");
- SCM settings =
- c->get_property("beamSettings");
- SCM beat_grouping =
- ly_beam_grouping (settings,
- time_signature,
- ly_symbol2scm ("end"),
- ly_symbol2scm ("*"));
- return beat_grouping;
-}
-
*/
#include "context.hh"
-#include "beam-settings.hh"
#include "beaming-pattern.hh"
/*
if (infos_[i].start_moment_ == measure_pos)
infos_[i].rhythmic_importance_ = -2;
- // Mark the start of each beat up to the end of this beat group.
- for (int beat = 1; beat <= count; beat++)
+ // Mark the start of each unit up to the end of this beat group.
+ for (int unit = 1; unit <= count; unit++)
{
- Moment next_measure_pos = measure_pos + options.beat_length_;
+ Moment next_measure_pos = measure_pos + options.base_moment_;
while (i < infos_.size () && infos_[i].start_moment_ < next_measure_pos)
{
// in an 8th-note triplet with a quarter-note beat, 1/3 of a beat should be
// more important than 1/2.
if (infos_[i].rhythmic_importance_ >= 0)
- infos_[i].rhythmic_importance_ = (dt / options.beat_length_).den ();
+ infos_[i].rhythmic_importance_ = (dt / options.base_moment_).den ();
i++;
}
void
Beaming_options::from_context (Context *context)
{
- grouping_ = ly_beat_grouping (context->self_scm ());
+ grouping_ = context->get_property ("beatStructure");
subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams"));
- beat_length_ = robust_scm2moment (context->get_property ("beatLength"), Moment (1, 4));
- measure_length_ = robust_scm2moment (context->get_property ("measureLength"), Moment (4, 4));
+ base_moment_ = robust_scm2moment (context->get_property ("baseMoment"),
+ Moment (1, 4));
+ measure_length_ = robust_scm2moment (context->get_property ("measureLength"),
+ Moment (4, 4));
}
Beaming_options::Beaming_options ()
paper_ = s.paper_->clone ();
paper_->unprotect ();
}
-
+
input_location_ = make_input (*s.origin ());
- header_ = ly_make_anonymous_module (false);
+ header_ = ly_make_module (false);
if (ly_is_module (s.header_))
ly_module_copy (header_, s.header_);
-
+
SCM *t = &scores_;
for (SCM p = s.scores_; scm_is_pair (p); p = scm_cdr (p))
{
scm_gc_mark (book->scores_);
scm_gc_mark (book->bookparts_);
scm_gc_mark (book->input_location_);
-
+
return book->header_;
}
/* Copy the header block of the parent */
if (ly_is_module (parent->header_))
{
- SCM tmp_header = ly_make_anonymous_module (false);
+ SCM tmp_header = ly_make_module (false);
ly_module_copy (tmp_header, parent->header_);
if (ly_is_module (header_))
ly_module_copy (tmp_header, header_);
{
if (scm_is_pair (scores_))
{
- /* If scores have been added to this book, add them to a child
+ /* If scores have been added to this book, add them to a child
* book part */
Book *part = new Book;
part->set_parent (this);
if (Score *score = unsmob_score (scm_car (s)))
if (score->error_found_)
return true;
-
+
for (SCM part = bookparts_; scm_is_pair (part); part = scm_cdr (part))
if (Book *bookpart = unsmob_book (scm_car (part)))
if (bookpart->error_found ())
{
SCM outputs = score
->book_rendering (output_paper_book->paper_, layout);
-
+
while (scm_is_pair (outputs))
{
Music_output *output = unsmob_music_output (scm_car (outputs));
-
+
if (Performance *perf = dynamic_cast<Performance *> (output))
output_paper_book->add_performance (perf->self_scm ());
else if (Paper_score *pscore = dynamic_cast<Paper_score *> (output))
output_paper_book->add_score (score->get_header ());
output_paper_book->add_score (pscore->self_scm ());
}
-
+
outputs = scm_cdr (outputs);
}
}
output_paper_book->add_score (scm_car (s));
else
assert (0);
-
+
}
/* Concatenate all score or book part outputs into a Paper_book
protected:
Stream_event *repeat_;
- // current direction of beam (first RIGHT, then LEFT)
- Direction beam_dir_;
-
Spanner *beam_;
+ // Store the pointer to the previous stem, so we can create a beam if
+ // necessary and end the spanner
+ Grob *previous_stem_;
protected:
virtual void finalize ();
{
beam_ = 0;
repeat_ = 0;
- beam_dir_ = CENTER;
+ previous_stem_ = 0;
}
IMPLEMENT_TRANSLATOR_LISTENER (Chord_tremolo_engraver, tremolo_span);
Direction span_dir = to_dir (ev->get_property ("span-direction"));
if (span_dir == START)
{
- if (ASSIGN_EVENT_ONCE (repeat_, ev))
- {
- beam_dir_ = RIGHT;
- }
+ ASSIGN_EVENT_ONCE (repeat_, ev);
}
else if (span_dir == STOP)
{
if (!repeat_)
- ev->origin ()->warning (_ ("No tremolo to end"));
+ ev->origin ()->warning (_ ("No tremolo to end"));
repeat_ = 0;
beam_ = 0;
- beam_dir_ = CENTER;
+ previous_stem_ = 0;
}
}
int gap_count = min (flags, intlog2 (repeat_count) + 1);
Grob *s = info.grob ();
- Stem::set_beaming (s, flags, beam_dir_);
+ if (previous_stem_)
+ {
+ // FIXME: We know that the beam has ended only in listen_tremolo_span
+ // but then it is too late for Spanner_break_forbid_engraver
+ // to allow a line break... So, as a nasty hack, announce the
+ // spanner's end after each note except the first. The only
+ // "drawback" is that for multi-note tremolos a break would
+ // theoretically be allowed after the second note (but since
+ // that note is typically not at a barline, I don't think
+ // anyone will ever notice!)
+ announce_end_grob (beam_, previous_stem_->self_scm ());
+ // Create the whole beam between previous and current note
+ Stem::set_beaming (previous_stem_, flags, RIGHT);
+ Stem::set_beaming (s, flags, LEFT);
+ }
if (Stem::duration_log (s) != 1)
- beam_->set_property ("gap-count", scm_from_int (gap_count));
+ beam_->set_property ("gap-count", scm_from_int (gap_count));
+
- if (beam_dir_ == RIGHT)
- {
- beam_dir_ = LEFT;
- announce_end_grob (beam_, s->self_scm ());
- }
-
if (info.ultimate_event_cause ()->in_event_class ("rhythmic-event"))
Beam::add_stem (beam_, s);
else
else
::warning (s);
}
+ // Store current grob, so we can possibly end the spanner here (and
+ // reset the beam direction to RIGHT)
+ previous_stem_ = s;
}
}
int elt_count = body_is_sequential ? scm_ilength (body->get_property ("elements")) : 1;
- if (body_is_sequential &&
- (elt_count != 2
- && elt_count != 1))
- mus->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
-
if (elt_count <= 0)
elt_count = 1;
return scm_list_2 (ev->unprotect (), body->self_scm ());
}
else
- {
+ {
SCM tremolo_symbol = ly_symbol2scm ("TremoloSpanEvent");
SCM start_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (START));
unsmob_music (start_event_scm)->set_spot (*origin);
/* NOTE: currently, we aren't using the space_ field of a
Line_details for anything. That's because the approximations
used for scoring a page configuration don't actually space things
- properly (for speed reasong) using springs anchored at the staff
+ properly (for speed reasons) using springs anchored at the staff
refpoints. Rather, the "space" is placed between the extent
boxes. To get a good result, therefore, the "space" value for
page breaking needs to be much smaller than the "space" value for
- page layout. Currently, we just make it zero always.
+ page layout. Currently, we just make it zero always, which means
+ that we will always prefer a tighter vertical layout.
*/
between_system_space_ = 0;
between_system_padding_ = 0;
+ between_system_min_distance_ = 0;
+ between_scores_system_padding_ = 0;
+ between_scores_system_min_distance_ = 0;
before_title_padding_ = 0;
+ before_title_min_distance_ = 0;
Output_def *l = pscore_->layout ();
SCM spacing_spec = l->c_variable ("between-system-spacing");
+ SCM between_scores_spec = l->c_variable ("between-scores-system-spacing");
SCM title_spec = l->c_variable ("before-title-spacing");
SCM page_breaking_spacing_spec = l->c_variable ("page-breaking-between-system-spacing");
Page_layout_problem::read_spacing_spec (spacing_spec,
&between_system_padding_,
ly_symbol2scm ("padding"));
+ Page_layout_problem::read_spacing_spec (between_scores_spec,
+ &between_scores_system_padding_,
+ ly_symbol2scm ("padding"));
Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec,
&between_system_padding_,
ly_symbol2scm ("padding"));
Page_layout_problem::read_spacing_spec (title_spec,
&before_title_padding_,
ly_symbol2scm ("padding"));
+ Page_layout_problem::read_spacing_spec (between_scores_spec,
+ &between_scores_system_min_distance_,
+ ly_symbol2scm ("minimum-distance"));
+ Page_layout_problem::read_spacing_spec (spacing_spec,
+ &between_system_min_distance_,
+ ly_symbol2scm ("minimum-distance"));
+ Page_layout_problem::read_spacing_spec (page_breaking_spacing_spec,
+ &between_system_min_distance_,
+ ly_symbol2scm ("minimum-distance"));
+ Page_layout_problem::read_spacing_spec (title_spec,
+ &before_title_min_distance_,
+ ly_symbol2scm ("minimum-distance"));
Interval first_line = line_dimensions_int (pscore_->layout (), 0);
Interval other_lines = line_dimensions_int (pscore_->layout (), 1);
System *sys = pscore_->root_system ();
Interval begin_of_line_extent = sys->begin_of_line_pure_height (start_rank, end_rank);
Interval rest_of_line_extent = sys->rest_of_line_pure_height (start_rank, end_rank);
+ bool last = (end == breaks_.size () - 1);
Grob *c = all_[breaks_[end]];
out->last_column_ = c;
|| isnan (rest_of_line_extent[RIGHT]))
? Interval (0, 0) : rest_of_line_extent;
out->shape_ = Line_shape (begin_of_line_extent, rest_of_line_extent);
- out->padding_ = between_system_padding_;
+ out->padding_ = last ? between_scores_system_padding_ : between_system_padding_;
out->title_padding_ = before_title_padding_;
+ out->min_distance_ = last ? between_scores_system_min_distance_ : between_system_min_distance_;
+ out->title_min_distance_ = before_title_min_distance_;
out->space_ = between_system_space_;
out->inverse_hooke_ = out->full_height () + between_system_space_;
}
title_padding_ = 0;
Page_layout_problem::read_spacing_spec (spec, &padding_, ly_symbol2scm ("padding"));
Page_layout_problem::read_spacing_spec (title_spec, &title_padding_, ly_symbol2scm ("padding"));
+ Page_layout_problem::read_spacing_spec (spec, &min_distance_, ly_symbol2scm ("minimum-distance"));
+ Page_layout_problem::read_spacing_spec (title_spec, &title_min_distance_, ly_symbol2scm ("minimum-distance"));
last_column_ = 0;
force_ = 0;
SCM first_scm = pb->get_property ("first-markup-line");
first_markup_line_ = to_boolean (first_scm);
tight_spacing_ = to_boolean (pb->get_property ("tight-spacing"));
+ first_refpoint_offset_ = 0;
}
Real
yy_switch_to_buffer (yy_create_buffer (file->get_istream (), YY_BUF_SIZE));
}
+void
+Includable_lexer::add_string_include (string data)
+{
+ pending_string_includes_.push_back (data);
+}
+
/** pop the inputstack. conceptually this is a destructor, but it
does not destruct the Source_file that Includable_lexer::new_input
creates. */
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef BAR_HH
-#define BAR_HH
+#ifndef BAR_LINE_HH
+#define BAR_LINE_HH
#include "lily-proto.hh"
#include "grob-interface.hh"
static Stencil compound_barline (Grob *, string, Real height, bool rounded);
static Stencil simple_barline (Grob *, Real wid, Real height, bool rounded);
static Interval bar_y_extent (Grob *, Grob *);
+ static bool non_empty_barline (Grob *me);
+
DECLARE_SCHEME_CALLBACK (calc_bar_extent, (SCM));
DECLARE_SCHEME_CALLBACK (calc_bar_size, (SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_anchor, (SCM));
};
-#endif // BAR_HH
-
+#endif // BAR_LINE_HH
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2009--2010 Carl Sorensen <c_sorensen@byu.edu>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef BEAM_SETTINGS_HH
-#define BEAM_SETTINGS_HH
-
-#include "lily-guile.hh"
-
-SCM ly_grouping_rules (SCM settings, SCM time_sig, SCM rule_type);
-SCM ly_beam_grouping (SCM settings, SCM time_sig, SCM rule_type,
- SCM beam_type);
-SCM ly_beat_grouping (SCM context);
-#endif // BEAM_SETTINGS_HH
{
SCM grouping_;
bool subdivide_beams_;
- Moment beat_length_;
+ Moment base_moment_;
Moment measure_length_;
Beaming_options ();
Real padding_; /* compulsory space after this system (if we're not
last on a page) */
Real title_padding_;
+ Real min_distance_;
+ Real title_min_distance_;
Real bottom_padding_;
Real space_; /* spring length */
Real inverse_hooke_;
bool last_markup_line_;
bool first_markup_line_;
bool tight_spacing_;
+ Real first_refpoint_offset_;
Line_details ()
{
padding_ = 0;
title_padding_ = 0;
bottom_padding_ = 0;
+ min_distance_ = 0;
+ title_min_distance_ = 0;
space_ = 0;
inverse_hooke_ = 1;
tight_spacing_ = false;
last_markup_line_ = false;
first_markup_line_ = false;
tallness_ = 0;
+ first_refpoint_offset_ = 0;
}
Line_details (Prob *pb, Output_def *paper);
vsize systems_;
bool ragged_right_;
bool ragged_last_;
+
+ Real between_system_min_distance_;
+ Real between_system_padding_;
Real between_system_space_;
+ Real between_scores_system_min_distance_;
+ Real between_scores_system_padding_;
+ Real before_title_min_distance_;
Real before_title_padding_;
- Real between_system_padding_;
/* the (i,j)th entry is the configuration for breaking between
columns i and j */
bool close_input ();
vector<Source_file*> include_stack_;
vector<int> char_count_stack_;
+ vector<string> pending_string_includes_;
public:
virtual void new_input (string s, Sources *);
void new_input (string name, string data, Sources *);
+ void add_string_include (string data);
char const *here_str0 () const;
};
void clear ();
void do_init_file ();
void do_yyparse ();
+ void include_string (string ly_code);
void parse_file (string init, string name, string out_name);
void parse_string (string ly_code);
void parser_error (string);
#include "config.hh"
#include "lily-guile.hh"
-SCM ly_make_anonymous_module (bool safe);
+SCM ly_make_module (bool safe);
SCM ly_module_copy (SCM dest, SCM src);
SCM ly_module_2_alist (SCM mod);
SCM ly_module_lookup (SCM module, SCM sym);
SCM ly_module_symbols (SCM mod);
void ly_reexport_module (SCM mod);
inline bool ly_is_module (SCM x) { return SCM_MODULEP (x); }
-SCM ly_clear_anonymous_modules ();
-void clear_anonymous_modules ();
+
SCM ly_use_module (SCM mod, SCM used);
/* For backward compatability with Guile 1.8 */
typedef SCM (*scm_t_hash_handle_fn) (GUILE_ELLIPSIS);
#endif
-#define MODULE_GC_KLUDGE
#endif /* LY_MODULE_HH */
DECLARE_SCHEME_CALLBACK (brew_ez_stencil, (SCM));
DECLARE_SCHEME_CALLBACK (stem_x_shift, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_attachment, (SCM));
+ DECLARE_SCHEME_CALLBACK (include_ledger_line_height, (SCM));
DECLARE_GROB_INTERFACE();
static Real stem_attachment_coordinate (Grob *, Axis a);
static bool is_breakable (Grob *);
static bool is_extraneous_column_from_ligature (Grob *);
static Real minimum_distance (Grob *l, Grob *r);
- static Interval break_align_width (Grob *me);
+ static Interval break_align_width (Grob *me, SCM align_sym);
};
#endif // PAPER_COLUMN_HH
-
static int get_steps (Grob *);
static int line_count (Grob *);
static bool on_line (Grob *me, int pos);
+ static Interval line_span (Grob *);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_GROB_INTERFACE();
#include "interval.hh"
#include "lily-guile.hh"
#include "lily-lexer.hh"
+#include "lily-parser.hh"
#include "lilypond-version.hh"
#include "main.hh"
#include "music.hh"
yylval.scm = unpack_identifier(sval);
return identifier_type (yylval.scm);
}
+
+ for (size_t i = 0; i < pending_string_includes_.size (); i++)
+ new_input ("<included string>", pending_string_includes_[i],
+ parser_->sources_);
+ pending_string_includes_.clear ();
yylval.scm = sval;
return SCM_TOKEN;
chord_repetition_ = Chord_repetition ();
smobify_self ();
- add_scope (ly_make_anonymous_module (false));
+ add_scope (ly_make_module (false));
push_note_state (scm_c_make_hash_table (0));
chordmodifier_tab_ = scm_make_vector (scm_from_int (1), SCM_EOL);
}
SCM *tail = &scopes;
for (SCM s = src.scopes_; scm_is_pair (s); s = scm_cdr (s))
{
- SCM newmod = ly_make_anonymous_module (false);
+ SCM newmod = ly_make_module (false);
ly_module_copy (newmod, scm_car (s));
*tail = scm_cons (newmod, SCM_EOL);
tail = SCM_CDRLOC (*tail);
return SCM_UNSPECIFIED;
}
+LY_DEFINE (ly_parser_include_string, "ly:parser-include-string",
+ 2, 0, 0, (SCM parser_smob, SCM ly_code),
+ "Include the string @var{ly-code} into the input stream"
+ " for @var{parser-smob}.")
+{
+ LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
+ Lily_parser *parser = unsmob_lily_parser (parser_smob);
+ LY_ASSERT_TYPE (scm_is_string, ly_code, 2);
+
+ parser->include_string (ly_scm2string (ly_code));
+
+ return SCM_UNSPECIFIED;
+}
+
LY_DEFINE (ly_parser_set_note_names, "ly:parser-set-note-names",
2, 0, 0, (SCM parser, SCM names),
"Replace current note names in @var{parser}."
{
lexer_ = new Lily_lexer (*src.lexer_, this);
}
-
+
lexer_->unprotect ();
}
void
Lily_parser::parse_file (string init, string name, string out_name)
{
- // TODO: use $parser
+ // TODO: use $parser
lexer_->set_identifier (ly_symbol2scm ("parser"), self_scm ());
output_basename_ = out_name;
void
Lily_parser::parse_string (string ly_code)
{
- // TODO: use $parser
+ // TODO: use $parser
lexer_->set_identifier (ly_symbol2scm ("parser"),
self_scm ());
lexer_->main_input_name_ = "<string>";
- lexer_->is_main_input_ = true;
+ lexer_->is_main_input_ = true;
lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
SCM mod = lexer_->set_current_scope ();
error_level_ = error_level_ | lexer_->error_level_;
}
+void
+Lily_parser::include_string (string ly_code)
+{
+ lexer_->add_string_include (ly_code);
+}
+
void
Lily_parser::clear ()
{
lexer_->remove_scope ();
}
- lexer_ = 0;
+ lexer_ = 0;
}
char const *
/****************************************************************
- OUTPUT-DEF
+ OUTPUT-DEF
****************************************************************/
Output_def *
Output_def *layout = unsmob_output_def (id);
layout = layout ? layout->clone () : new Output_def;
layout->set_variable (ly_symbol2scm ("is-layout"), SCM_BOOL_T);
-
+
return layout;
}
ly_module_copy (nid, id);
id = nid;
}
-
+
return id;
}
-SCM
+SCM
Lily_parser::make_scope () const
{
- SCM module = ly_make_anonymous_module (be_safe_global);
- return module;
+ SCM module = ly_make_module (be_safe_global);
+ return module;
}
#include "std-string.hh"
#include "protected-scm.hh"
-#ifdef MODULE_GC_KLUDGE
-Protected_scm anonymous_modules = SCM_EOL;
-bool perform_gc_kludge;
-#endif
-
-void
-clear_anonymous_modules ()
-{
-#ifdef MODULE_GC_KLUDGE
- for (SCM s = anonymous_modules;
- scm_is_pair (s);
- s = scm_cdr (s))
- {
- SCM module = scm_car (s);
- SCM closure = SCM_MODULE_EVAL_CLOSURE (module);
- SCM prop = scm_procedure_property (closure, ly_symbol2scm ("module"));
-
- if (ly_is_module (prop))
- {
- scm_set_procedure_property_x (closure, ly_symbol2scm ("module"),
- SCM_BOOL_F);
- }
- }
-
- anonymous_modules = SCM_EOL;
-#endif
-}
SCM
-ly_make_anonymous_module (bool safe)
+ly_make_module (bool safe)
{
SCM mod = SCM_EOL;
if (!safe)
mod = scm_call_0 (proc);
}
-#ifdef MODULE_GC_KLUDGE
- if (perform_gc_kludge)
- anonymous_modules = scm_cons (mod, anonymous_modules);
-#endif
return mod;
}
#include "global-context.hh"
#include "engraver.hh"
#include "spanner.hh"
-#include "beam-settings.hh"
#include "translator.icc"
if (now.grace_part_)
return;
- SCM settings = get_property ("beamSettings");
- SCM grouping = SCM_EOL;
- if (scm_is_pair (settings))
- {
- SCM time_signature_fraction = get_property ("timeSignatureFraction");
- grouping = ly_beam_grouping (settings,
- time_signature_fraction,
- ly_symbol2scm ("end"),
- ly_symbol2scm ("*"));
- }
+ SCM grouping = get_property ("beatStructure");
if (scm_is_pair (grouping))
{
Moment *measpos = unsmob_moment (get_property ("measurePosition"));
Rational mp = measpos->main_part_;
- Moment *beatlen_mom = unsmob_moment (get_property ("beatLength"));
- Rational beat_length = beatlen_mom->main_part_;
+ Moment *base_mom = unsmob_moment (get_property ("baseMoment"));
+ Rational base_moment = base_mom->main_part_;
Rational where (0);
for (SCM s = grouping; scm_is_pair (s);
- where += Rational ((int) scm_to_int (scm_car (s))) * beat_length,
+ where += Rational ((int) scm_to_int (scm_car (s))) * base_moment,
s = scm_cdr (s))
{
int grouplen = scm_to_int (scm_car (s));
grouping_ = make_spanner ("MeasureGrouping", SCM_EOL);
grouping_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
- stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * beat_length;
+ stop_grouping_mom_ = now.main_part_ + Rational (grouplen - 1) * base_moment;
get_global_context ()->add_moment_to_process (Moment (stop_grouping_mom_));
if (grouplen == 3)
"MeasureGrouping ",
/* read */
- "beatLength "
+ "baseMoment "
+ "beatStructure "
"currentMusicalColumn "
- "measurePosition "
- "beamSettings ",
+ "measurePosition ",
/* write */
""
return SCM_UNSPECIFIED;
}
-LY_DEFINE (ly_clear_anonymous_modules, "ly:clear-anonymous-modules",
- 0, 0, 0, (),
- "Plug a GUILE 1.6 and 1.7 memory leak by breaking a weak"
- " reference pointer cycle explicitly.")
-{
-#ifdef MODULE_GC_KLUDGE
- clear_anonymous_modules ();
-#endif
-
- return SCM_UNSPECIFIED;
-}
/* Lookup SYM, but don't give error when it is not defined. */
SCM
#include "multi-measure-rest.hh"
-#include "warn.hh"
+#include "font-interface.hh"
+#include "lookup.hh"
+#include "misc.hh"
#include "output-def.hh"
#include "paper-column.hh" // urg
-#include "font-interface.hh"
+#include "percent-repeat-item.hh"
#include "rest.hh"
-#include "misc.hh"
+#include "separation-item.hh"
#include "spanner.hh"
#include "staff-symbol-referencer.hh"
#include "system.hh"
#include "text-interface.hh"
-#include "percent-repeat-item.hh"
-#include "lookup.hh"
-#include "separation-item.hh"
+#include "warn.hh"
Interval
Multi_measure_rest::bar_width (Spanner *me)
{
+ SCM spacing_pair = me->get_property ("spacing-pair");
Interval iv;
Direction d = LEFT;
do
{
Item *col = me->get_bound (d)->get_column ();
-
- Interval coldim = Paper_column::break_align_width (col);
+ SCM align_sym
+ = (scm_is_pair (spacing_pair)
+ ? index_get_cell (spacing_pair, d)
+ : ly_symbol2scm ("staff-bar"));
+ Interval coldim = Paper_column::break_align_width (col, align_sym);
iv[d] = coldim[-d];
}
- while ((flip (&d)) != LEFT);
+ while (flip (&d) != LEFT);
return iv;
}
if (! (sp->get_bound (LEFT) && sp->get_bound (RIGHT)))
{
programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
- return ;
+ return;
}
Item *li = sp->get_bound (LEFT)->get_column ();
Real sym_width = symbol_stencil (me, 0.0).extent (X_AXIS).length ();
calculate_spacing_rods (me, sym_width);
- return SCM_UNSPECIFIED;
+ return SCM_UNSPECIFIED;
}
-
+
MAKE_SCHEME_CALLBACK (Multi_measure_rest, set_text_rods, 1);
SCM
Multi_measure_rest::set_text_rods (SCM smob)
"A rest that spans a whole number of measures.",
/* properties */
+ "bound-padding "
"expand-limit "
- "measure-count "
"hair-thickness "
+ "measure-count "
+ "minimum-length "
+ "spacing-pair "
"thick-thickness "
"use-breve-rest "
- "bound-padding "
- "minimum-length "
);
-
#include "directional-element-interface.hh"
#include "font-interface.hh"
+#include "grob.hh"
#include "international.hh"
+#include "staff-symbol.hh"
+#include "staff-symbol-referencer.hh"
#include "warn.hh"
-#include "grob.hh"
static Stencil
internal_print (Grob *me, string *font_char)
return internal_print (me, &idx).smobbed_copy ();
}
+MAKE_SCHEME_CALLBACK (Note_head, include_ledger_line_height, 1);
+SCM
+Note_head::include_ledger_line_height (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *staff = Staff_symbol_referencer::get_staff_symbol (me);
+
+ if (staff)
+ {
+ Real ss = Staff_symbol::staff_space (staff);
+ Interval lines = Staff_symbol::line_span (staff) * (ss / 2.0);
+ Real my_pos = Staff_symbol_referencer::get_position (me) * ss / 2.0;
+ Interval my_ext = me->extent (me, Y_AXIS) + my_pos;
+
+ // The +1 and -1 come from the fact that we only want to add
+ // the interval between the note and the first ledger line, not
+ // the whole interval between the note and the staff.
+ Interval iv (min (0.0, lines[UP] - my_ext[DOWN] + 1),
+ max (0.0, lines[DOWN] - my_ext[UP] - 1));
+ return ly_interval2scm (iv);
+ }
+
+ return ly_interval2scm (Interval (0, 0));
+}
+
Real
Note_head::stem_attachment_coordinate (Grob *me, Axis a)
{
#include "note-spacing.hh"
+#include "accidental-placement.hh"
#include "bar-line.hh"
#include "directional-element-interface.hh"
#include "grob-array.hh"
-#include "paper-column.hh"
#include "moment.hh"
#include "note-column.hh"
-#include "warn.hh"
-#include "stem.hh"
+#include "output-def.hh"
+#include "paper-column.hh"
+#include "pointer-group-interface.hh"
#include "separation-item.hh"
#include "spacing-interface.hh"
#include "staff-spacing.hh"
-#include "accidental-placement.hh"
-#include "output-def.hh"
-#include "pointer-group-interface.hh"
-
-static bool
-non_empty_barline (Grob *me)
-{
- return Bar_line::has_interface (me) && !me->extent (me, X_AXIS).is_empty ();
-}
+#include "stem.hh"
+#include "warn.hh"
/*
TODO: detect hshifts due to collisions, and account for them in
Note_spacing::get_spacing (Grob *me, Item *right_col,
Real base_space, Real increment)
{
- vector<Item*> note_columns = Spacing_interface::left_note_columns (me);
+ vector<Item *> note_columns = Spacing_interface::left_note_columns (me);
Real left_head_end = 0;
for (vsize i = 0; i < note_columns.size (); i++)
{
- SCM r = note_columns[i]->get_object ("rest");
- Grob *g = unsmob_grob (r);
- Grob *col = note_columns[i]->get_column ();
-
- if (!g)
- g = Note_column::first_head (note_columns[i]);
-
- /*
- Ugh. If Stem is switched off, we don't know what the
- first note head will be.
- */
- if (g)
- {
- if (g->common_refpoint (col, X_AXIS) != col)
- programming_error ("Note_spacing::get_spacing (): Common refpoint incorrect");
- else
- left_head_end = g->extent (col, X_AXIS)[RIGHT];
- }
+ SCM r = note_columns[i]->get_object ("rest");
+ Grob *g = unsmob_grob (r);
+ Grob *col = note_columns[i]->get_column ();
+
+ if (!g)
+ g = Note_column::first_head (note_columns[i]);
+
+ /*
+ Ugh. If Stem is switched off, we don't know what the
+ first note head will be.
+ */
+ if (g)
+ {
+ if (g->common_refpoint (col, X_AXIS) != col)
+ programming_error ("Note_spacing::get_spacing (): Common refpoint incorrect");
+ else
+ left_head_end = g->extent (col, X_AXIS)[RIGHT];
+ }
}
/*
{
Grob *bar = Pointer_group_interface::find_grob (right_col,
ly_symbol2scm ("elements"),
- non_empty_barline);
+ Bar_line::non_empty_barline);
if (bar)
{
{
Real note_head_width = increment;
Grob *head = right_stem ? Stem::support_head (right_stem) : 0;
- Grob *rcolumn = dynamic_cast<Item*> (head)->get_column ();
+ Grob *rcolumn = dynamic_cast<Item *> (head)->get_column ();
Interval head_extent;
if (head)
{
/*
Correct for the following situation:
-
+
X X
| |
| |
| X |
| | |
========
-
+
^ move the center one to the left.
-
-
+
+
this effect seems to be much more subtle than the
stem-direction stuff (why?), and also does not scale with the
difference in stem length.
-
+
*/
Interval hp = head_posns[LEFT];
hp.intersect (head_posns[RIGHT]);
if (!hp.is_empty ())
return 0;
-
+
Direction lowest
= (head_posns[LEFT][DOWN] > head_posns[RIGHT][UP]) ? RIGHT : LEFT;
-
+
Real delta = head_posns[-lowest][DOWN] - head_posns[lowest][UP];
Real corr = robust_scm2double (note_spacing->get_property ("same-direction-correction"), 0);
-
+
return (delta > 1) ? -lowest * corr : 0;
}
-
/*
- Correct for optical illusions. See [Wanske] p. 138. The combination
- up-stem + down-stem should get extra space, the combination
- down-stem + up-stem less.
+ Correct for optical illusions. See [Wanske] p. 138. The combination
+ up-stem + down-stem should get extra space, the combination
+ down-stem + up-stem less.
- TODO: have to check whether the stems are in the same staff.
+ TODO: have to check whether the stems are in the same staff.
*/
void
Note_spacing::stem_dir_correction (Grob *me, Item *rcolumn,
Grob *bar = Spacing_interface::extremal_break_aligned_grob (me, RIGHT,
rcolumn->break_status_dir (),
&bar_xextent);
- if (bar && dynamic_cast<Item*> (bar)->get_column () == rcolumn)
+ if (bar && dynamic_cast<Item *> (bar)->get_column () == rcolumn)
bar_yextent = Staff_spacing::bar_y_positions (bar);
do
{
- vector<Grob*> const &items (ly_scm2link_array (props [d]));
+ vector<Grob *> const &items (ly_scm2link_array (props [d]));
for (vsize i = 0; i < items.size (); i++)
{
Item *it = dynamic_cast<Item *> (items[i]);
/*
Find accidentals which are sticking out of the right side.
*/
- if (d == RIGHT)
- acc_right = acc_right || Note_column::accidentals (it);
+ if (d == RIGHT)
+ acc_right = acc_right || Note_column::accidentals (it);
Grob *stem = Note_column::get_stem (it);
can't look at stem-end-position, since that triggers
beam slope computations.
*/
- Real stem_end = hp[stem_dir] +
- stem_dir * robust_scm2double (stem->get_property ("length"), 7);
+ Real stem_end = hp[stem_dir]
+ + stem_dir * robust_scm2double (stem->get_property ("length"), 7);
stem_posns[d] = Interval (min (chord_start, stem_end),
max (chord_start, stem_end));
smobify_self ();
- scope_ = ly_make_anonymous_module (false);
+ scope_ = ly_make_module (false);
}
Output_def::Output_def (Output_def const &s)
smobify_self ();
input_origin_ = s.input_origin_;
- scope_ = ly_make_anonymous_module (false);
+ scope_ = ly_make_module (false);
if (ly_is_module (s.scope_))
ly_module_copy (scope_, s.scope_);
}
Line_details const &old = ret.back ();
Line_details compressed = orig[i];
/*
- "padding" is the padding below the current line. The padding below
- "old" (taking into account whether "old" is a title) is already
- accounted for in the extent of the compressed line. The padding
- below the compressed line, therefore, should depend on whether its
- bottom-most line is a title or not.
+ We must account for the padding between the lines that we are compressing.
+ The padding values come from "old," which is the upper system here. Note
+ the meaning of tight-spacing: if a system has tight-spacing, then the padding
+ _before_ it is ignored.
*/
Real padding = 0;
if (!orig[i].tight_spacing_)
padding = orig[i].title_ ? old.title_padding_ : old.padding_;
compressed.shape_ = old.shape_.piggyback (orig[i].shape_, padding);
+ compressed.first_refpoint_offset_ += compressed.shape_.rest_[UP] - old.shape_.rest_[UP];
compressed.space_ += old.space_;
compressed.inverse_hooke_ += old.inverse_hooke_;
Real prev_hanging = 0;
Real prev_hanging_begin = 0;
Real prev_hanging_rest = 0;
+ Real prev_refpoint_hanging = 0;
for (vsize i = 0; i < cached_line_details_.size (); i++)
{
Line_shape shape = cached_line_details_[i].shape_;
Real a = shape.begin_[UP];
Real b = shape.rest_[UP];
- Real midline_hanging = max (prev_hanging_begin + a, prev_hanging_rest + b);
- Real hanging_begin = midline_hanging - shape.begin_[DOWN];
- Real hanging_rest = midline_hanging - shape.rest_[DOWN];
+ bool title = cached_line_details_[i].title_;
+ Real refpoint_hanging = max (prev_hanging_begin + a, prev_hanging_rest + b);
+
+ if (i > 0)
+ {
+ Real padding = 0;
+ if (!cached_line_details_[i].tight_spacing_)
+ padding = title
+ ? cached_line_details_[i-1].title_padding_
+ : cached_line_details_[i-1].padding_;
+ Real min_dist = title
+ ? cached_line_details_[i-1].title_min_distance_
+ : cached_line_details_[i-1].min_distance_;
+ refpoint_hanging = max (refpoint_hanging + padding,
+ prev_refpoint_hanging + min_dist
+ + cached_line_details_[i].first_refpoint_offset_);
+ }
+
+ Real hanging_begin = refpoint_hanging - shape.begin_[DOWN];
+ Real hanging_rest = refpoint_hanging - shape.rest_[DOWN];
Real hanging = max (hanging_begin, hanging_rest);
cached_line_details_[i].tallness_ = hanging - prev_hanging;
prev_hanging = hanging;
prev_hanging_begin = hanging_begin;
prev_hanging_rest = hanging_rest;
+ prev_refpoint_hanging = refpoint_hanging;
}
}
for (vsize i = 0; i < cached_line_details_.size (); i++)
{
- Real padding = 0;
Real ext_len;
if (cur_rod_height > 0)
- {
- if (!cached_line_details_[i].tight_spacing_)
- padding = (cached_line_details_[i].title_
- ? cached_line_details_[i - 1].title_padding_
- : cached_line_details_[i - 1].padding_);
- ext_len = cached_line_details_[i].tallness_;
- }
+ ext_len = cached_line_details_[i].tallness_;
else
- {
- ext_len = cached_line_details_[i].full_height();
- }
- Real next_rod_height = cur_rod_height + ext_len + padding;
+ ext_len = cached_line_details_[i].full_height();
+
+ Real next_rod_height = cur_rod_height + ext_len;
Real next_spring_height = cur_spring_height + cached_line_details_[i].space_;
Real next_height = next_rod_height + (ragged () ? next_spring_height : 0)
+ min_whitespace_at_bottom_of_page (cached_line_details_[i]);
rod_height_ += line.full_height ();
first_line_ = line;
}
- if (!line.tight_spacing_)
- rod_height_ += line.title_ ? last_line_.title_padding_ : last_line_.padding_;
+
spring_len_ += line.space_;
inverse_spring_k_ += line.inverse_hooke_;
void
Page_spacing::prepend_system (const Line_details &line)
{
- if (rod_height_ && !first_line_.tight_spacing_)
- rod_height_ += first_line_.title_ ? line.title_padding_ : line.padding_;
- else
+ if (!rod_height_)
last_line_ = line;
rod_height_ -= first_line_.full_height ();
#include "paper-column.hh"
#include "axis-group-interface.hh"
+#include "bar-line.hh"
#include "break-align-interface.hh"
#include "font-interface.hh"
#include "grob-array.hh"
}
int
-Paper_column::compare (Grob * const &a,
- Grob * const &b)
+Paper_column::compare (Grob *const &a,
+ Grob *const &b)
{
- return sign (dynamic_cast<Paper_column*> (a)->rank_
- - dynamic_cast<Paper_column*> (b)->rank_);
+ return sign (dynamic_cast<Paper_column *> (a)->rank_
+ - dynamic_cast<Paper_column *> (b)->rank_);
}
bool
Paper_column::less_than (Grob *const &a,
Grob *const &b)
{
- Paper_column *pa = dynamic_cast<Paper_column*> (a);
- Paper_column *pb = dynamic_cast<Paper_column*> (b);
-
+ Paper_column *pa = dynamic_cast<Paper_column *> (a);
+ Paper_column *pb = dynamic_cast<Paper_column *> (b);
+
return pa->rank_ < pb->rank_;
}
extract_grob_set (me, "bounded-by-me", bbm);
if (bbm.size ())
return true;
-
+
if (Paper_column::is_breakable (me))
return true;
Real
Paper_column::minimum_distance (Grob *left, Grob *right)
{
- Drul_array<Grob*> cols (left, right);
+ Drul_array<Grob *> cols (left, right);
Drul_array<Skyline> skys = Drul_array<Skyline> (Skyline (RIGHT), Skyline (LEFT));
Direction d = LEFT;
}
Interval
-Paper_column::break_align_width (Grob *me)
+Paper_column::break_align_width (Grob *me, SCM align_sym)
{
Grob *p = me->get_parent (X_AXIS);
if (is_musical (me))
{
- me->programming_error ("tried to get break-align-width of a non-musical column");
+ me->programming_error ("tried to get break-align-width of a musical column");
return Interval (0, 0) + me->relative_coordinate (p, X_AXIS);
}
- Grob *align = Pointer_group_interface::find_grob (me, ly_symbol2scm ("elements"),
- Break_alignment_interface::has_interface);
+ Grob *align = 0;
+ if (align_sym == ly_symbol2scm ("staff-bar")
+ || align_sym == ly_symbol2scm ("break-alignment"))
+ align
+ = Pointer_group_interface::find_grob (me, ly_symbol2scm ("elements"),
+ (align_sym == ly_symbol2scm ("staff-bar")
+ ? Bar_line::non_empty_barline
+ : Break_alignment_interface::has_interface));
+ else
+ {
+ extract_grob_set (me, "elements", elts);
+ for (vsize i = 0; i < elts.size (); i++)
+ {
+ if (elts[i]->get_property ("break-align-symbol") == align_sym)
+ {
+ align = elts[i];
+ break;
+ }
+ }
+ }
+
if (!align)
return Interval (0, 0) + me->relative_coordinate (p, X_AXIS);
SCM
Paper_column::print (SCM p)
{
- Paper_column *me = dynamic_cast<Paper_column*> (unsmob_grob (p));
+ Paper_column *me = dynamic_cast<Paper_column *> (unsmob_grob (p));
string r = to_string (Paper_column::get_rank (me));
Stencil l = Lookup::filled_box (Box (Interval (-0.01, 0.01),
Interval (-2, -1)));
-
+
SCM small_letters = scm_cons (scm_acons (ly_symbol2scm ("font-size"),
scm_from_int (-6), SCM_EOL),
properties);
-
+
int j = 0;
for (SCM s = me->get_object ("ideal-distances");
scm_is_pair (s); s = scm_cdr (s))
if (!unsmob_grob (scm_cdar (s))
|| !unsmob_grob (scm_cdar (s))->get_system ())
continue;
-
+
j++;
Real y = -j * 1 -3;
vector<Offset> pts;
Offset p2 (sp->distance (), y);
pts.push_back (p2);
-
+
Stencil id_stencil = Lookup::points_to_line_stencil (0.1, pts);
Stencil head (musfont->find_by_name ("arrowheads.open.01"));
SCM distance_stc = Text_interface::interpret_markup (me->layout ()->self_scm (),
small_letters,
ly_string2scm (String_convert::form_string ("%5.2lf", sp->distance ())));
-
- id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance ()/3, y+1)));
+
+ id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (sp->distance () / 3, y + 1)));
id_stencil.add_stencil (head.translated (p2));
id_stencil = id_stencil.in_color (0,0,1);
l.add_stencil (id_stencil);
}
-
+
for (SCM s = me->get_object ("minimum-distances");
scm_is_pair (s); s = scm_cdr (s))
{
Real dist = scm_to_double (scm_cdar (s));
- Grob *other = unsmob_grob (scm_caar (s));
+ Grob *other = unsmob_grob (scm_caar (s));
if (!other || other->get_system () != me->get_system ())
continue;
j++;
-
+
Real y = -j * 1.0 -3.5;
vector<Offset> pts;
pts.push_back (Offset (0, y));
small_letters,
ly_string2scm (String_convert::form_string ("%5.2lf",
dist)));
-
- id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist/3, y-1)));
-
-
+
+ id_stencil.add_stencil (unsmob_stencil (distance_stc)->translated (Offset (dist / 3, y - 1)));
+
id_stencil = id_stencil.in_color (1,0,0);
l.add_stencil (id_stencil);
}
if (!ga)
return SCM_UNSPECIFIED;
- vector<Grob*> &array (ga->array_reference ());
+ vector<Grob *> &array (ga->array_reference ());
for (vsize i = array.size (); i--;)
{
if (Rhythmic_head::has_interface (elts[i]))
{
has_notehead = true;
- if (dynamic_cast<Item*> (elts[i])->get_column () == me)
+ if (dynamic_cast<Item *> (elts[i])->get_column () == me)
return false;
}
}
return has_notehead;
}
-
ADD_INTERFACE (Paper_column,
"@code{Paper_column} objects form the top-most X@tie{}parents"
" for items. There are two types of columns: musical and"
"shortest-starter-duration "
"spacing "
"used "
- "when "
- );
+ "when ");
error_found_ = s.error_found_;
smobify_self ();
- input_location_ = make_input (*s.origin ());
+ input_location_ = make_input (*s.origin ());
Music *m = unsmob_music (s.music_);
if (m)
defs_.push_back (copy);
copy->unprotect ();
}
- header_ = ly_make_anonymous_module (false);
+ header_ = ly_make_module (false);
if (ly_is_module (s.header_))
ly_module_copy (header_, s.header_);
}
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2004--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "self-alignment-interface.hh"
-
-#include "warn.hh"
-#include "paper-column.hh"
-#include "grob.hh"
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1);
-SCM
-Self_alignment_interface::y_aligned_on_self (SCM element)
-{
- return aligned_on_self (unsmob_grob (element), Y_AXIS, false, 0, 0);
-}
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1);
-SCM
-Self_alignment_interface::x_aligned_on_self (SCM element)
-{
- return aligned_on_self (unsmob_grob (element), X_AXIS, false, 0, 0);
-}
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3);
-SCM
-Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end)
-{
- return aligned_on_self (unsmob_grob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
-}
-
-SCM
-Self_alignment_interface::aligned_on_self (Grob *me, Axis a, bool pure, int start, int end)
-{
- SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
- : ly_symbol2scm ("self-alignment-Y");
-
- SCM align (me->internal_get_property (sym));
- if (scm_is_number (align))
- {
- Interval ext (me->maybe_pure_extent (me, a, pure, start, end));
- if (ext.is_empty ())
- programming_error ("cannot align on self: empty element");
- else
- return scm_from_double (- ext.linear_combination (scm_to_double (align)));
- }
- return scm_from_double (0.0);
-}
-
-
-
-SCM
-Self_alignment_interface::centered_on_object (Grob *him, Axis a)
-{
- return scm_from_double (robust_relative_extent (him, him, a).center ());
-}
-
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_x_parent, 1);
-SCM
-Self_alignment_interface::centered_on_x_parent (SCM smob)
-{
- return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS);
-}
-
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
-SCM
-Self_alignment_interface::centered_on_y_parent (SCM smob)
-{
- return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), Y_AXIS);
-}
-
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1);
-SCM
-Self_alignment_interface::x_centered_on_y_parent (SCM smob)
-{
- return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), X_AXIS);
-}
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent,1);
-SCM
-Self_alignment_interface::aligned_on_x_parent (SCM smob)
-{
- return aligned_on_parent (unsmob_grob (smob), X_AXIS);
-}
-
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent,1);
-SCM
-Self_alignment_interface::aligned_on_y_parent (SCM smob)
-{
- return aligned_on_parent (unsmob_grob (smob), Y_AXIS);
-}
-
-SCM
-Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
-{
- Grob *him = me->get_parent (a);
- if (Paper_column::has_interface (him))
- return scm_from_double (0.0);
-
- Interval he = him->extent (him, a);
-
- SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
- : ly_symbol2scm ("self-alignment-Y");
- SCM align_prop (me->internal_get_property (sym));
-
- if (!scm_is_number (align_prop))
- return scm_from_int (0);
-
- Real x = 0.0;
- Real align = scm_to_double (align_prop);
-
- Interval ext (me->extent (me, a));
- if (ext.is_empty ())
- programming_error ("cannot align on self: empty element");
- else
- x -= ext.linear_combination (align);
-
- if (!he.is_empty ())
- x += he.linear_combination (align);
-
- return scm_from_double (x);
-}
-
-void
-Self_alignment_interface::set_center_parent (Grob *me, Axis a)
-{
- add_offset_callback (me,
- (a==X_AXIS) ? centered_on_x_parent_proc : centered_on_y_parent_proc,
- a);
-}
-
-void
-Self_alignment_interface::set_align_self (Grob *me, Axis a)
-{
- add_offset_callback (me,
- (a==X_AXIS) ? x_aligned_on_self_proc : y_aligned_on_self_proc,
- a);
-}
-
-ADD_INTERFACE (Self_alignment_interface,
- "Position this object on itself and/or on its parent. To this"
- " end, the following functions are provided:\n"
- "\n"
- "@table @code\n"
- "@item Self_alignment_interface::[xy]_aligned_on_self\n"
- "Align self on reference point, using"
- " @code{self-alignment-X} and @code{self-alignment-Y}."
- "@item Self_alignment_interface::aligned_on_[xy]_parent\n"
- "@item Self_alignment_interface::centered_on_[xy]_parent\n"
- "Shift the object so its own reference point is centered on"
- " the extent of the parent\n"
- "@end table\n",
-
- /* properties */
- "self-alignment-X "
- "self-alignment-Y "
- );
-
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2004--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ LilyPond is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ LilyPond is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "self-alignment-interface.hh"
+
+#include "grob.hh"
+#include "paper-column.hh"
+#include "warn.hh"
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, y_aligned_on_self, 1);
+SCM
+Self_alignment_interface::y_aligned_on_self (SCM element)
+{
+ return aligned_on_self (unsmob_grob (element), Y_AXIS, false, 0, 0);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_aligned_on_self, 1);
+SCM
+Self_alignment_interface::x_aligned_on_self (SCM element)
+{
+ return aligned_on_self (unsmob_grob (element), X_AXIS, false, 0, 0);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, pure_y_aligned_on_self, 3);
+SCM
+Self_alignment_interface::pure_y_aligned_on_self (SCM smob, SCM start, SCM end)
+{
+ return aligned_on_self (unsmob_grob (smob), Y_AXIS, true, robust_scm2int (start, 0), robust_scm2int (end, INT_MAX));
+}
+
+SCM
+Self_alignment_interface::aligned_on_self (Grob *me, Axis a, bool pure, int start, int end)
+{
+ SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
+ : ly_symbol2scm ("self-alignment-Y");
+
+ SCM align (me->internal_get_property (sym));
+ if (scm_is_number (align))
+ {
+ Interval ext (me->maybe_pure_extent (me, a, pure, start, end));
+ if (ext.is_empty ())
+ programming_error ("cannot align on self: empty element");
+ else
+ return scm_from_double (- ext.linear_combination (scm_to_double (align)));
+ }
+ return scm_from_double (0.0);
+}
+
+
+SCM
+Self_alignment_interface::centered_on_object (Grob *him, Axis a)
+{
+ return scm_from_double (robust_relative_extent (him, him, a).center ());
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_x_parent, 1);
+SCM
+Self_alignment_interface::centered_on_x_parent (SCM smob)
+{
+ return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
+SCM
+Self_alignment_interface::centered_on_y_parent (SCM smob)
+{
+ return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), Y_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1);
+SCM
+Self_alignment_interface::x_centered_on_y_parent (SCM smob)
+{
+ return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), X_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent,1);
+SCM
+Self_alignment_interface::aligned_on_x_parent (SCM smob)
+{
+ return aligned_on_parent (unsmob_grob (smob), X_AXIS);
+}
+
+MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_y_parent,1);
+SCM
+Self_alignment_interface::aligned_on_y_parent (SCM smob)
+{
+ return aligned_on_parent (unsmob_grob (smob), Y_AXIS);
+}
+
+SCM
+Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
+{
+ Grob *him = me->get_parent (a);
+ if (Paper_column::has_interface (him))
+ return scm_from_double (0.0);
+
+ Interval he = him->extent (him, a);
+
+ SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
+ : ly_symbol2scm ("self-alignment-Y");
+ SCM align_prop (me->internal_get_property (sym));
+
+ if (!scm_is_number (align_prop))
+ return scm_from_int (0);
+
+ Real x = 0.0;
+ Real align = scm_to_double (align_prop);
+
+ Interval ext (me->extent (me, a));
+ if (ext.is_empty ())
+ programming_error ("cannot align on self: empty element");
+ else
+ x -= ext.linear_combination (align);
+
+ if (!he.is_empty ())
+ x += he.linear_combination (align);
+
+ return scm_from_double (x);
+}
+
+void
+Self_alignment_interface::set_center_parent (Grob *me, Axis a)
+{
+ add_offset_callback (me,
+ (a == X_AXIS) ? centered_on_x_parent_proc : centered_on_y_parent_proc,
+ a);
+}
+
+void
+Self_alignment_interface::set_align_self (Grob *me, Axis a)
+{
+ add_offset_callback (me,
+ (a == X_AXIS) ? x_aligned_on_self_proc : y_aligned_on_self_proc,
+ a);
+}
+
+ADD_INTERFACE (Self_alignment_interface,
+ "Position this object on itself and/or on its parent. To this"
+ " end, the following functions are provided:\n"
+ "\n"
+ "@table @code\n"
+ "@item Self_alignment_interface::[xy]_aligned_on_self\n"
+ "Align self on reference point, using"
+ " @code{self-alignment-X} and @code{self-alignment-Y}."
+ "@item Self_alignment_interface::aligned_on_[xy]_parent\n"
+ "@item Self_alignment_interface::centered_on_[xy]_parent\n"
+ "Shift the object so its own reference point is centered on"
+ " the extent of the parent\n"
+ "@end table\n",
+
+ /* properties */
+ "self-alignment-X "
+ "self-alignment-Y "
+ );
return ((abs (pos + line_count (me)) % 2) == 1);
}
+Interval
+Staff_symbol::line_span (Grob *me)
+{
+ SCM line_positions = me->get_property ("line-positions");
+ Interval iv;
+
+ if (scm_is_pair (line_positions))
+ for (SCM s = line_positions; scm_is_pair (s); s = scm_cdr (s))
+ iv.add_point (scm_to_double (scm_car (s)));
+ else
+ {
+ int count = line_count (me);
+ return Interval (-count + 1, count - 1);
+ }
+
+ return iv;
+}
+
ADD_INTERFACE (Staff_symbol,
"This spanner draws the lines of a staff. A staff symbol"
" defines a vertical unit, the @emph{staff space}. Quantities"
int
Tie::get_column_rank (Grob *me, Direction d)
{
+ Grob *col = 0;
Spanner *span = dynamic_cast<Spanner *> (me);
- Grob *h = head (me, d);
- if (!h)
- h = span->get_bound (d);
+ if (!span)
+ col = dynamic_cast<Item *> (me)->get_column ();
+ else
+ {
+ Grob *h = head (me, d);
+ if (!h)
+ h = span->get_bound (d);
- Grob *col = dynamic_cast<Item *> (h)->get_column ();
+ col = dynamic_cast<Item *> (h)->get_column ();
+ }
return Paper_column::get_rank (col);
}
*/
context ()->set_property ("measureLength",
Moment (Rational (1)).smobbed_copy ());
- context ()->set_property ("beatLength",
+ context ()->set_property ("baseMoment",
Moment (Rational (1, 4)).smobbed_copy ());
}
"measurePosition ",
/* write */
- "internalBarNumber "
+ "baseMoment "
"currentBarNumber "
+ "internalBarNumber "
+ "measureLength "
"measurePosition "
+ "timeSignatureFraction "
);
%{
Bagpipe music settings for LilyPond.
This file builds on work by Andrew McNabb (http://www.mcnabbs.org/andrew/)
-
- Substantial changes and additions made by
+
+ Substantial changes and additions made by
Sven Axelsson, the Murray Pipes & Drums of Gothenburg
(http://www.murrays.nu)
-
+
$Id: bagpipe.ly,v 1.12 2006/03/16 14:39:46 hanwen Exp $
%}
-\version "2.12.0"
+\version "2.13.29"
% Notes of the scale of the Great Highland Bagpipe. Extra high notes for bombarde.
% Flat notes used mainly in some modern music.
% Sets the autobeamer to span quarter notes only. Use for fast music.
% TODO: Needs more tweaking
quarterBeaming = {
- \overrideBeamSettings #'Staff #'(4 . 4) #'end
- #'((* . (1 1 1 1)) ; could omit this and use beatLength
- ((1 . 32) . (4 4 4 4 4 4 4 4)))
- \overrideBeamSettings #'Staff #'(2 . 4) #'end
- #'((* . (1 1))
- ((1 . 32) . (4 4 4 4)))
+ \set Staff.beamExceptions = #'()
}
+
halfBeaming = {
- \overrideBeamSettings #'Staff #'(2 . 2) #'end
- #'((* . (1 1))) % could omit this and use beatLength
+ \set Staff.beamExceptions = #'((end . (((1 . 8) . (4 4))
+ ((1 . 12) . (3 3)))))
}
+
% Reels are in allabreve time with half note beaming.
reelTime = {
\time 2/2
\halfBeaming
}
+
% 4/4 marches are written with numerical time signature and with quarter beaming.
marchTime = {
\time 4/4
darodo = { \grace { \small G32[ d G c G] } }
Gdarodo = { \grace { \small d32[ G c G] } }
% Non-gracenote piobaireachd markup.
-trebling = \markup {
+trebling = \markup {
\override #'(baseline-skip . 0.3)
- \column {
- \musicglyph #"scripts.tenuto"
- \musicglyph #"scripts.tenuto"
- \musicglyph #"scripts.tenuto"
+ \column {
+ \musicglyph #"scripts.tenuto"
+ \musicglyph #"scripts.tenuto"
+ \musicglyph #"scripts.tenuto"
}
}
% Abbreviated notation common in piobaireachd scores.
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.13.10"
+\version "2.13.27"
\context {
\name "Global"
\override VerticalAxisGroup #'remove-empty = ##t
\override VerticalAxisGroup #'staff-affinity = #UP
\override VerticalAxisGroup #'inter-staff-spacing = #'((space . 5.5) (stretchability . 1) (padding . 0.5))
- \override VerticalAxisGroup #'inter-loose-line-spacing = #'((space . 0) (stretchability . 0) (padding . 0.2))
+ \override VerticalAxisGroup #'inter-loose-line-spacing = #'((space . 0)
+ (stretchability . 0)
+ (padding . 0.2)
+ (minimum-distance . 2.8))
\override VerticalAxisGroup #'non-affinity-spacing #'padding = #1.0
\override InstrumentName #'self-alignment-Y = ##f
repeatCountVisibility = #all-repeat-counts-visible
- beamSettings = #default-beam-settings
+ timeSignatureSettings = #default-time-signature-settings
+ timeSignatureFraction = #'(4 . 4)
+
+%% These defaults should be the same as the rules established in
+%% scm/time-signature-settings.scm for 4/4 time
+ measureLength = #(ly:make-moment 4 4)
+ baseMoment = #(ly:make-moment 1 4)
+ beatStructure = #'(1 1 1 1)
+ beamExceptions = #'((end . (((1 . 8) . (4 4))
+ ((1 . 12) . (3 3 3 3)))))
autoBeaming = ##t
autoBeamCheck = #default-auto-beam-check
+
scriptDefinitions = #default-script-alist
pedalSustainStrings = #'("Ped." "*Ped." "*")
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.12.0"
+\version "2.13.29"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(_i "Set the octavation.")
(make-ottava-set octave))
-overrideBeamSettings =
+overrideTimeSignatureSettings =
#(define-music-function
- (parser location context time-signature rule-type grouping-rule)
- (symbol? pair? symbol? pair?)
-
- (_i "Override beamSettings in @var{context}
-for time signatures of @var{time-signature} and rules of type
-@var{rule-type} to have a grouping rule alist
-@var{grouping-rule}.
-@var{rule-type} can be @code{end} or @code{subdivide},
-with a potential future value of @code{begin}.
-@var{grouping-rule} is an alist of @var{(beam-type . grouping)}
-entries. @var{grouping} is in units of @var{beam-type}. If
-@var{beam-type} is @code{*}, grouping is in units of the denominator
-of @var{time-signature}.")
+ (parser location context time-signature base-moment beat-structure beam-exceptions)
+ (symbol? pair? pair? cheap-list? cheap-list?)
+
+ (_i "Override @code{timeSignatureSettings} in @var{context}
+for time signatures of @var{time-signature} to have settings
+of @var{base-moment}, @var{beat-structure}, and @var{beam-exceptions}.")
;; TODO -- add warning if largest value of grouping is
;; greater than time-signature.
-
- #{
- #(override-beam-setting
- $time-signature $rule-type $grouping-rule $context)
- #})
+ (let ((setting (make-setting base-moment beat-structure beam-exceptions)))
+ (override-time-signature-setting time-signature setting context)))
overrideProperty =
#(define-music-function (parser location name property value)
reference-note))
-revertBeamSettings =
+revertTimeSignatureSettings =
#(define-music-function
- (parser location context time-signature rule-type)
- (symbol? pair? symbol?)
+ (parser location context time-signature)
+ (symbol? pair?)
- (_i "Revert beam settings in @var{context} for time signatures of
-@var{time-signature} and groups of type
-@var{group-type}. @var{group-type} can be @code{end}
-or @code{subdivide}.")
- #{
- #(revert-beam-setting $time-signature $rule-type $context)
- #})
+ (_i "Revert @code{timeSignatureSettings} in @var{context}
+for time signatures of @var{time-signature}.")
+ (revert-time-signature-setting time-signature context))
rightHandFinger =
#(define-music-function (parser location finger) (number-or-string?)
(ly:music-compress music
(ly:make-moment (car fraction) (cdr fraction))))
-setBeatGrouping =
-#(define-music-function (parser location grouping) (pair?)
- (_i "Set the beat grouping in the current time signature to
-@var{grouping}.")
- (define (default-group-setting c)
- (let* ((context-time-signature
- (ly:context-property c 'timeSignatureFraction))
- (time-signature (if (null? context-time-signature)
- '(4 . 4)
- context-time-signature)))
- (override-property-setting
- c
- 'beamSettings
- (list time-signature 'end)
- (list (cons '* grouping)))))
-
- (context-spec-music
- (make-apply-context default-group-setting)
- 'Score))
-
shiftDurations =
#(define-music-function (parser location dur dots arg)
(integer? integer? ly:music?)
--- /dev/null
+.SUFFIXES: .html .xml .lytex .tex .latex .lyxml .tely .texi .texinfo
+
+############## HTML #########################
+
+$(outdir)/%.html: %.html
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+$(outdir)/%.html: %.htmly
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+$(outdir)/%.html: %.xml
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+
+############## LaTeX ########################
+
+$(outdir)/%.tex: %.lytex
+ $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $<
+
+$(outdir)/%.tex: %.tex
+ $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $<
+
+$(outdir)/%.tex: %.latex
+ $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $<
+
+# Add the tex => pdf rule only if we have dblatex
+ifeq (,$(findstring pdflatex,$(MISSING_OPTIONAL)))
+$(outdir)/%.pdf: $(outdir)/%.tex
+ cd $(outdir) && $(PDFLATEX) $(notdir $<)
+endif
+
+############## Texinfo ######################
+
+$(outdir)/%.texi: %.texi
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+$(outdir)/%.texi: %.itexi
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+$(outdir)/%.texi: %.texinfo
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+$(outdir)/%.texi: %.tely
+ $(LILYPOND_BOOK_COMMAND) -o $(outdir) $<
+
+
+############## DocBook ######################
+
+$(outdir)/%.xml: %.lyxml
+ $(LILYPOND_BOOK_COMMAND) --pdf -o $(outdir) $<
+
+# Add the xml => pdf rule only if we have dblatex
+ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL)))
+$(outdir)/%.pdf: $(outdir)/%.xml
+ cd $(outdir) && $(DBLATEX) $(notdir $<)
+endif
--- /dev/null
+# rules for directories with html files.
+
+LILYPOND_BOOK_COMMAND = LILYPOND_VERSION=$(TOPLEVEL_VERSION) \
+ $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) \
+ --process='$(LILYPOND_BOOK_PROCESS) \
+ $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) \
+ $(LILYPOND_BOOK_FLAGS)
+
+HTML_FILES = $(call src-wildcard,*.html)
+HTMLY_FILES = $(call src-wildcard,*.htmly)
+XML_FILES = $(call src-wildcard,*.xml)
+LYTEX_FILES = $(call src-wildcard,*.lytex)
+LATEX_FILES = $(call src-wildcard,*.latex)
+TEX_FILES = $(call src-wildcard,*.tex)
+TEXI_FILES = $(call src-wildcard,*.texi)
+TEXINFO_FILES = $(call src-wildcard,*.texinfo)
+TELY_FILES = $(call src-wildcard,*.tely)
+DOCBOOK_FILES = $(call src-wildcard,*.lyxml)
+
+OUT_HTML_FILES = ${HTML_FILES:%.html=$(outdir)/%.html}
+OUT_HTMLY_FILES = ${HTML_FILES:%.htmly=$(outdir)/%.html}
+OUT_XML_FILES = ${XML_FILES:%.xml=$(outdir)/%.html}
+# If we have pdflatex, create the pdf, otherwise only the .tex file!
+ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL)))
+OUT_LYTEX_FILES = ${LYTEX_FILES:%.lytex=$(outdir)/%.pdf}
+OUT_LATEX_FILES = ${LATEX_FILES:%.latex=$(outdir)/%.pdf}
+OUT_TEX_FILES = ${TEX_FILES:%.tex=$(outdir)/%.pdf}
+else
+OUT_LYTEX_FILES = ${LYTEX_FILES:%.lytex=$(outdir)/%.tex}
+OUT_LATEX_FILES = ${LATEX_FILES:%.latex=$(outdir)/%.tex}
+OUT_TEX_FILES = ${TEX_FILES:%.tex=$(outdir)/%.tex}
+endif
+OUT_TEXI_FILES = ${TEXI_FILES:%.texi=$(outdir)/%.html}
+OUT_TEXINFO_FILES = ${TEXINFO_FILES:%.texinfo=$(outdir)/%.html}
+OUT_TELY_FILES = ${TELY_FILES:%.tely=$(outdir)/%.html}
+# If we have dblatex, create the pdf, otherwise only the .xml file!
+ifeq (,$(findstring dblatex,$(MISSING_OPTIONAL)))
+OUT_DOCBOOK_FILES = ${DOCBOOK_FILES:%.lyxml=$(outdir)/%.pdf}
+else
+OUT_DOCBOOK_FILES = ${DOCBOOK_FILES:%.lyxml=$(outdir)/%.xml}
+endif
+
+OUT_FILES = $(sort $(OUT_HTML_FILES) \
+ $(OUT_HTMLY_FILES) \
+ $(OUT_XML_FILES) \
+ $(OUT_LYTEX_FILES) \
+ $(OUT_LATEX_FILES) \
+ $(OUT_TEX_FILES) \
+ $(OUT_TEXI_FILES) \
+ $(OUT_TEXINFO_FILES) \
+ $(OUT_TELY_FILES) \
+ $(OUT_DOCBOOK_FILES))
+
+ALL_SOURCES +=\
+ $(HTML_FILES)\
+ $(HTMLY_FILES)\
+ $(XML_FILES)\
+ $(LYTEX_FILES)\
+ $(LATEX_FILES)\
+ $(TEX_FILES)\
+ $(TEXINFO_FILES)\
+ $(DOCBOOK_FILES)
$(outdir)/collated-files.tely: $(COLLATED_FILES)
- $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" $^
+ $(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" --author="$(AUTHOR)" $^
TITLE=LYs Doc
+AUTHOR=Han-Wen Nienhuys and Jan Nieuwenhuizen
ifeq ($(COLLATED_FILES),)
INSTALLATION_DIR=$(local_lilypond_datadir)/ps/
INSTALLATION_FILES=$(PS_FILES)
-# teTeX-3.0 compatibility.
-local-install:
- -$(INSTALL) -d $(DESTDIR)$(local_lilypond_datadir)/dvips
- (cd $(DESTDIR)$(local_lilypond_datadir)/dvips && ln -sf ../ps .)
-
-local-uninstall:
- -rm -f $(DESTDIR)$(local_lilypond_datadir)/dvips/ps
- -rmdir $(DESTDIR)$(local_lilypond_datadir)/dvips
-
include $(depth)/make/stepmake.make
str = re.sub (r'\\(cresc|dim|endcresc|enddim)\b', r'\\deprecated\1', str)
return str
+@rule ((2, 13, 29),
+ _ ("Eliminate beamSettings, beatLength, \setBeatGrouping, \overrideBeamSettings and \revertBeamSettings"))
+def conv(str):
+ if re.search(r'overrideBeamSettings', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("\overrideBeamSettings. Use \set beamExceptions or \overrideTimeSignatureSettings.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ if re.search(r'revertBeamSettings', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("\revertBeamSettings. Use \set beamExceptions or \revertTimeSignatureSettings.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ if re.search(r'beamSettings', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("beamSettings. Use baseMoment, beatStructure, and beamExceptions.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ if re.search(r'beatLength', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("beatLength. Use baseMoment and beatStructure.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ if re.search(r'setBeatGrouping', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("setbeatGrouping. Use baseMoment and beatStructure.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ return str
+
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
def get_option_parser (*args, **kwargs):
p = optparse.OptionParser (*args, **kwargs)
p.formatter = NonDentedHeadingFormatter ()
+ p.formatter.set_parser (p)
return p
;;;; You should have received a copy of the GNU General Public License
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-;; Determine end moment for auto beaming (or begin moment, but mostly
-;; 0== anywhere). We only consider the current time signature.
-;; In order of decreasing priority:
+;; Determine whether an auto beam should be extended to the right
+;; of the current stem. We start anywhere except on the last note
+;; of a beat. We end according to the follwing rules, in order
+;; of decreasing priority:
;;
;; 1. end <type>
-;; 2. end *
-;; 3. if 1-2 not specified, begin anywhere, end at beatLength intervals
+;; 2. end <greater type>
+;; 3. if 1-2 not specified, end at beatStructure intervals
;;
;; Rationale:
;;
;; [user override]
;; 1. override for specific duration type
-;; 2. override for all duration types in a time signature.
+;; 2. overrides apply to shorter durations
;;
-;; defined in scm/beam-settings.scm:
+;; defined in scm/time-signature-settings.scm:
;; 1. Default grouping for common time signatures
-;; 2. exceptions for specific time signature, for specific duration type
-
(define-public (default-auto-beam-check context dir measure-pos test-beam)
(define (get name default)
(let ((value (ly:context-property context name)))
(if (not (null? value)) value default)))
- (define (ending-moments group-list start-beat beat-length)
+ (define (beaming<? a b)
+ (ly:moment<? (fraction->moment (car a))
+ (fraction->moment (car b))))
+
+ (define (ending-moments group-list start-beat base-moment)
(if (null? group-list)
'()
(let ((new-start (+ start-beat (car group-list))))
- (cons (ly:moment-mul (ly:make-moment new-start 1) beat-length)
- (ending-moments (cdr group-list) new-start beat-length)))))
+ (cons (ly:moment-mul (ly:make-moment new-start 1) base-moment)
+ (ending-moments (cdr group-list) new-start base-moment)))))
+
+ (define (larger-setting test-beam sorted-alist)
+ (if (null? sorted-alist)
+ '()
+ (let* ((first-key (caar sorted-alist))
+ (first-moment (fraction->moment first-key)))
+ (if (moment<=? test-beam first-moment)
+ (car sorted-alist)
+ (larger-setting test-beam (cdr sorted-alist))))))
+
+ (define (beat-end? moment beat-structure)
+ (pair? (member moment beat-structure))) ;; member returns a list if found, not #t
;; Start of actual auto-beam test routine
;;
(if (and (!= (ly:moment-grace-numerator (ly:context-now context)) 0)
(= dir START))
#f
- (if (= dir START)
- ;; start anywhere is currently implemented
- #t
- (let* ((beat-length (get 'beatLength (ly:make-moment 1 4)))
- (measure-length (get 'measureLength (ly:make-moment 1 1)))
- (time-signature-fraction
- (get 'timeSignatureFraction '(4 . 4)))
- (settings (get 'beamSettings '()))
- (function (if (= dir START) 'begin 'end))
- (type (cons (ly:moment-main-numerator test-beam)
- (ly:moment-main-denominator test-beam)))
- (pos (if (>= (ly:moment-main-numerator measure-pos) 0)
- measure-pos
- (ly:moment-add measure-length measure-pos)))
- (type-grouping (ly:beam-grouping
- settings
- time-signature-fraction
- function
- type))
- (default-grouping (ly:beam-grouping
- settings
- time-signature-fraction
- function
- '*))
- (beat-grouping (if (null? type-grouping)
- default-grouping
- type-grouping))
- (grouping-moment (if (null? type-grouping)
- beat-length
- test-beam))
- (grouping-moments (ending-moments
- beat-grouping 0 grouping-moment)))
- (if (null? beat-grouping)
- ;; no rule applies, so end at beatLength
- (= (ly:moment-main-denominator
- (ly:moment-div pos beat-length)) 1)
- ;; otherwise, end at beginning of measure or
- ;; at specified moment
- (or
- ;; start/end at beginning of measure
- (= (ly:moment-main-numerator pos) 0)
- ;; end if measure-pos matches a specified ending moment
- (member pos grouping-moments)))))))
+ (let* ((base-moment (get 'baseMoment (ly:make-moment 1 4)))
+ (measure-length (get 'measureLength (ly:make-moment 1 1)))
+ (time-signature-fraction
+ (get 'timeSignatureFraction '(4 . 4)))
+ (beat-structure (get 'beatStructure '(1 1 1 1)))
+ (beat-endings (ending-moments beat-structure 0 base-moment))
+ (exceptions (sort (assoc-get 'end
+ (get 'beamExceptions '())
+ '())
+ beaming<?))
+ (function (if (= dir START) 'begin 'end))
+ (type (moment->fraction test-beam))
+ (non-grace (ly:make-moment
+ (ly:moment-main-numerator measure-pos)
+ (ly:moment-main-denominator measure-pos)))
+ (pos (if (ly:moment<? non-grace ZERO-MOMENT)
+ (ly:moment-add measure-length non-grace)
+ non-grace))
+ (type-grouping (assoc-get type exceptions '()))
+ (default-rule (if (null? type-grouping)
+ (larger-setting test-beam exceptions)
+ '()))
+ (default-grouping (if (pair? default-rule)
+ (cdr default-rule)
+ '()))
+ (default-beat-length (if (pair? default-rule)
+ (car default-rule)
+ '()))
+ (exception-grouping (if (null? type-grouping)
+ default-grouping
+ type-grouping))
+ (grouping-moment (if (null? type-grouping)
+ (fraction->moment default-beat-length)
+ test-beam))
+ (exception-moments (ending-moments
+ exception-grouping 0 grouping-moment)))
+
+ (if (= dir START)
+ ;; Start rules
+ (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywher if not 3/4
+ (beat-end? pos beat-endings) ;; are we at start of beat?
+ (and (not (equal? test-beam base-moment)) ;; is beat split?
+ (not (beat-end? (ly:moment-add pos test-beam)
+ beat-endings)))) ;; will this note end the beat
+ ;; End rules
+ (or (= (ly:moment-main-numerator pos) 0) ;; end at measure beginning
+ (if (null? exception-grouping)
+ (beat-end? pos beat-endings) ;; no exception, so check beat ending
+ (member pos exception-moments))))))) ;; check exception rule
+
+++ /dev/null
-;;;; This file is part of LilyPond, the GNU music typesetter.
-;;;;
-;;;; Copyright (C) 2009--2010 Carl Sorensen <c_sorensen@byu.edu>
-;;;;
-;;;; LilyPond is free software: you can redistribute it and/or modify
-;;;; it under the terms of the GNU General Public License as published by
-;;;; the Free Software Foundation, either version 3 of the License, or
-;;;; (at your option) any later version.
-;;;;
-;;;; LilyPond is distributed in the hope that it will be useful,
-;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;;; GNU General Public License for more details.
-;;;;
-;;;; You should have received a copy of the GNU General Public License
-;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-
-;;; specify default beaming rules
-
-;;; format:
-;;;
-;;; alist of
-;;; ((time-signature function) . (beam-type . grouping)) entries
-;;;
-;;; where
-;;;
-;;; time-signature = time signature fraction (pair of numbers, (4 . 4) )
-;;; function = 'end or 'subdivide (possibly implement 'begin in the future)
-;;; beam-type = '* or (numerator . denominator); e.g. (1 . 16)
-;;; NOTE: numerator is kept in beam-type because of
-;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8)
-;;; for eighth-note triplets.
-;;; grouping = a list of groups, in units of time signature denominator
-;;; (for default rules) or beam-type (for explicit rules)
-;;;
-
-(define-public default-beam-settings
- `(
- ;; in 2 2 time:
- ;; default: end beams on 1 2 note boundaries
- ;; end beams with 32nd notes each 1 4 beat
- (((2 . 2) end) .
- ((* . (1 1))
- ((1 . 32) . (8 8 8 8))))
-
- ;; in 2 4, 2 8 and 2 16 time:
- ;; default: end beams on beats
- (((2 . 4) end) . ((* . (1 1))))
- (((2 . 8) end) . ((* . (1 1))))
- (((2 . 16) end) . ((* . (1 1))))
-
- ;; in 3 2 time:
- ;; default: end beams on beats
- ;; end beams with 32nd notes each 1 4 beat
- (((3 . 2) end) .
- ((* . (1 1 1))
- ((1 . 32) . (8 8 8 8 8 8))))
-
- ;; in 3 4 time:
- ;; default: set grouping to (3) so we'll get
- ;; the proper measure grouping symbol
- ;;
- ;; set all beams to end on beats, but 1 8 to beam entire measure
- (((3 . 4) end) .((* . (3))
- ((1 . 8) . (6))
- ((1 . 16) . (4 4 4))
- ((1 . 32) . (8 8 8))
- ((1 . 64) . (16 16 16))
- ((1 . 128) . (32 32 32))))
-
- ;; in 3 8 and 3 16 time time:
- ;; default: group on 3
- (((3 . 8) end) . ((* . (3))))
- (((3 . 16) end) . ((* . (3))))
-
- ;; in 4 2 time:
- ;; default: end beams on beats
- ;; end beams with 16th notes each 1 4 beat
- ;; end beams with 32nd notes each 1 8 beat
- (((4 . 2) end) .
- ((* . (1 1 1 1))
- ((1 . 16) . (4 4 4 4 4 4 4 4))
- ((1 . 32) . (4 4 4 4
- 4 4 4 4
- 4 4 4 4
- 4 4 4 4))))
-
- ;; in 4 4 (common) time:
- ;; default: end beams on beats
- ;; end beams with 8th notes each 1 2 beat
- (((4 . 4) end) .
- ((* . (1 1 1 1))
- ((1 . 8) . (4 4))))
-
- ;; in 4 8 time:
- ;; default: group on 1 4 notes
- (((4 . 8) end) . ((* . (2 2))))
-
- ;; in 4 16 time:
- ;; default: group on beats
- (((4 . 16) end) . ((* . (1 1 1 1))))
-
- ;; in 6 4 time:
- ;; default group at 3 4
- ;; end beams with 16th or 32nd notes each 1 4 beat
- (((6 . 4) end) .
- ((* . (3 3))
- ((1 . 16) . (4 4 4 4 4 4))
- ((1 . 32) . (8 8 8 8 8 8))))
-
- ;; in 6 8 time:
- ;; default: group at 3 8
- ;; end beams with 32nd notes each 1 8 beat
- (((6 . 8) end) .
- ((* . (3 3))
- ((1 . 32) . (4 4 4 4 4 4))))
-
- ;; in 6 16 time:
- ;; default: group at 3 16
- (((6 . 16) end) . ((* . (3 3))))
-
- ;; in 9 4 time:
- ;; default: group at 3 4
- ;; end beams with 16th or 32nd notes each 1 4 beat
- (((9 . 4) end) .
- ((* . (3 3 3))
- ((1 . 16) . (4 4 4 4 4 4 4 4 4))
- ((1 . 32) . (8 8 8 8 8 8 8 8 8))))
-
- ;; in 9 8 time:
- ;; default: group at 3 8
- ;; use beatGrouping for all except 32nd notes
- ;; end beams with 32nd notes each 1 8 beat
- (((9 . 8) end) .
- ((* . (3 3 3))
- ((1 . 32) . (4 4 4 4 4 4 4 4 4))))
-
- ;; in 9 16 time
- ;; default: group at 3 8
- (((9 . 16) end) . ((* . (3 3 3))))
-
- ;; in 12 4 time:
- ;; default: group at 3 4
- ;; end beams with 16th or 32nd notes each 1 4 beat
- (((12 . 4) end) .
- ((* . (3 3 3 3))
- ((1 . 16) . (4 4 4 4 4 4 4 4 4 4 4 4 4))
- ((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8 8))))
-
- ;; in 12 8 time:
- ;; default: group at 3 8
- ;; end beams with 32nd notes each 1 8 beat
- (((12 . 8) end) .
- ((* . (3 3 3 3))
- ((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4 4))))
-
- ;; in 12 16 time:
- ;; default: group at 3 16
- (((12 . 16) end) . ((* . (3 3 3 3))))
-
- ;; in 5 8 time:
- ;; default: group (3 2)
- (((5 . 8) end) . ((* . (3 2))))
-
- ;; in 8 8 time:
- ;; default: group (3 3 2)
- (((8 . 8) end) . ((* . (3 3 2))))
- )) ; end of alist definition
-
-;;; Functions for overriding beam settings
-;;;
-
-(define (overridden-property-alist context property setting value)
- "Return an alist containing the current @{context} value of
-@code{property} overriden by @code{(setting . value)}. "
- (cons (cons setting value) (ly:context-property context property)))
-
-(define-public (override-property-setting context property setting value)
- "Like the C++ code that executes \\override, but without type
-checking. "
- (ly:context-set-property!
- context property
- (overridden-property-alist context property setting value)))
-
-(define (revert-property-setting context property setting)
- "Like the C++ code that executes \revert, but without type
-checking. "
-
- (define (revert-member alist entry new)
- "Return ALIST, with ENTRY removed. ALIST is not modified, instead
-a fresh copy of the list-head is made."
- (cond
- ((null? alist) new)
- ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
- (else (revert-member (cdr alist) entry (cons (car alist) new)))))
-
- (ly:context-set-property!
- context property
- (revert-member (ly:context-property context property) setting '())))
-
-(define-public (override-beam-setting
- time-signature rule-type rule . rest)
- "Override the beam settings for the context in @var{rest},
-for @var{time-signature} and @var{rule-type}, with the
-new rule alist @var{rule}. "
- (define (make-setting c)
- (let ((new-settings
- (overridden-property-alist
- c
- 'beamSettings
- (list time-signature rule-type)
- rule)))
- (ly:context-set-property! c 'beamSettings new-settings)))
-
- (let ((music-to-export
- (context-spec-music
- (make-apply-context make-setting)
- (if (and (pair? rest) (symbol? (car rest)))
- (car rest)
- 'Voice))))
- (ly:export music-to-export)))
-
-(define-public (score-override-beam-setting
- time-signature rule-type rule)
- (override-beam-setting
- time-signature rule-type rule 'Score))
-
-(define-public (revert-beam-setting
- time-signature rule-type . rest)
- (ly:export
- (context-spec-music
- (make-apply-context
- (lambda (c)
- (revert-property-setting
- c
- 'beamSettings
- (list time-signature rule-type))))
- (if (and (pair? rest) (symbol? (car rest)))
- (car rest)
- 'Voice))))
(barNumberVisibility ,procedure? "A Procedure that takes an
integer and returns whether the corresponding bar number should be
printed.")
+ (baseMoment ,ly:moment? "Smallest unit of time that will stand on its
+own as a subdivided section.")
(bassFigureFormatFunction ,procedure? "A procedure that is
called to produce the formatting for a @code{BassFigure} grob. It
takes a list of @code{BassFigureEvent}s, a context, and the grob to
(bassStaffProperties ,list? "An alist of property settings to
apply for the down staff of @code{PianoStaff}. Used by
@code{\\autochange}.")
- (beamSettings ,list? "Specifies when automatically generated
-beams should begin and end, as well as beam subdivision behavior.
-See @ruser{Setting automatic beam
-behavior} for more information.")
- (beatLength ,ly:moment? "The length of one beat in this time
-signature.")
-
+ (beamExceptions ,list? "An alist of exceptions to autobeam rules
+that normally end on beats.")
+ (beatStructure ,list? "List of @code{baseMoment}s that are combined
+to make beats.")
(chordChanges ,boolean? "Only show changes in chords scheme?")
(chordNameExceptions ,list? "An alist of chord exceptions.
(strokeFingerOrientations ,list? "See
@code{fingeringOrientations}.")
(subdivideBeams ,boolean? "If set, multiple beams will be
-subdivided at beat positions by only drawing one beam over the beat.")
+subdivided at @code{baseMoment} positions by only drawing one beam over the beat.")
(suggestAccidentals ,boolean? "If set, accidentals are typeset as
cautionary suggestions over the note.")
(systemStartDelimiter ,symbol? "Which grob to make for the start
(timeSignatureFraction ,number-pair? "A pair of numbers,
signifying the time signature. For example, @code{#'(4 . 4)} is a
4/4 time signature.")
+ (timeSignatureSettings ,cheap-list? "A nested alist of settings for
+time signatures. Contains elements for various time signatures. The
+element for each time signature contains entries for @code{baseMoment},
+@code{beatStructure}, and @code{beamExceptions}.")
(timing ,boolean? "Keep administration of measure length,
position, bar number, etc.? Switch off for cadenzas.")
(tonic ,ly:pitch? "The tonic of the current scale.")
;; l
;;
(labels ,list? "List of labels (symbols) placed on a column.")
- (layer ,integer? "The output layer (a value between 0
-and@tie{}2): Layers define the order of printing objects. Objects in
-lower layers are overprinted by objects in higher layers.")
+ (layer ,integer? "An integer which determines the order of printing
+objects. Objects with the lowest value of layer are drawn first, then
+objects with progressively higher values are drawn, so objects with
+higher values overwrite objects with lower values. By default most
+objects are assigned a layer value of 1.")
(ledger-line-thickness ,number-pair? "The thickness of ledger
lines. It is the sum of 2@tie{}numbers: The first is the factor for
line thickness, and the second for staff space. Both contributions
(spacing-increment ,number? "Add this much space for a doubled
duration. Typically, the width of a note head. See also
@rinternals{spacing-spanner-interface}.")
+ (spacing-pair ,pair? "A pair of alignment symbols which set an object's
+spacing relative to its left and right @code{BreakAlignment}s.
+
+For example, a @code{MultiMeasureRest} will ignore prefatory items at its
+bounds (i.e., clefs, key signatures and time signatures) using the following
+override:
+
+@example
+\\override MultiMeasureRest #'spacing-pair = #'(staff-bar . staff-bar)
+@end example")
(springs-and-rods ,boolean? "Dummy variable for triggering
spacing routines.")
(stacking-dir ,ly:dir? "Stack objects in which direction?")
(adjacent-pure-heights ,pair? "A pair of vectors. Used by a
@code{VerticalAxisGroup} to cache the @code{Y-extent}s of different column
ranges.")
-
+
(bar-extent ,number-pair? "The Y-extent of the actual bar line.
This may differ from @code{Y-extent} because it does not include the dots in
a repeat bar line.")
(expand-limit . 10)
(hair-thickness . 2.0)
(padding . 1)
+ (spacing-pair . (break-alignment . staff-bar))
(springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
(staff-position . 0)
(stencil . ,ly:multi-measure-rest::print)
(NoteHead
. (
(duration-log . ,note-head::calc-duration-log)
+ (extra-spacing-height . ,ly:note-head::include-ledger-line-height)
(glyph-name . ,note-head::calc-glyph-name)
(stem-attachment . ,ly:note-head::calc-stem-attachment)
(stencil . ,ly:note-head::print)
(dot-negative-kern . 0.75)
(font-encoding . fetaMusic)
(slope . 1.0)
+ (spacing-pair . (break-alignment . staff-bar))
(springs-and-rods . ,ly:multi-measure-rest::set-spacing-rods)
(stencil . ,ly:multi-measure-rest::percent)
(thickness . 0.48)
(> (length ?elts) 2)
(with-music-match ((cadr ?elts)
(music 'PropertySet
- symbol 'beatLength))
+ symbol 'baseMoment))
#t)
(with-music-match ((caddr ?elts)
(music 'PropertySet
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define-public (convert-to-pdf book name)
- (let* ((defs (ly:paper-book-paper book))
- (landscape (ly:output-def-lookup defs 'landscape))
+(define (output-width-height defs)
+ (let* ((landscape (ly:output-def-lookup defs 'landscape))
(output-scale (ly:output-def-lookup defs 'output-scale))
(convert (lambda (x)
(* x output-scale (/ (ly:bp 1)))))
(paper-height (convert (ly:output-def-lookup defs 'paper-height)))
(w (if landscape paper-height paper-width))
(h (if landscape paper-width paper-height)))
- (if (equal? (basename name ".ps") "-")
- (set! name (string-append "./" name)))
- (postscript->pdf w h name)))
+ (cons w h)))
+
+(define (output-resolution defs)
+ (let ((defs-resolution (ly:output-def-lookup defs 'pngresolution)))
+ (if (number? defs-resolution)
+ defs-resolution
+ (ly:get-option 'resolution))))
+
+(define (output-filename name)
+ (if (equal? (basename name ".ps") "-")
+ (string-append "./" name)
+ name))
+
+(define-public (convert-to-pdf book name)
+ (let* ((defs (ly:paper-book-paper book))
+ (width-height (output-width-height defs))
+ (width (car width-height))
+ (height (cdr width-height))
+ (filename (output-filename name)))
+ (postscript->pdf width height filename)))
(define-public (convert-to-png book name)
(let* ((defs (ly:paper-book-paper book))
- (defs-resolution (ly:output-def-lookup defs 'pngresolution))
- (resolution (if (number? defs-resolution)
- defs-resolution
- (ly:get-option 'resolution)))
- (paper-width (ly:output-def-lookup defs 'paper-width))
- (paper-height (ly:output-def-lookup defs 'paper-height))
- (output-scale (ly:output-def-lookup defs 'output-scale)))
- (if (equal? (basename name ".ps") "-")
- (set! name (string-append "./" name)))
- (postscript->png resolution
- (* paper-width output-scale (/ (ly:bp 1)))
- (* paper-height output-scale (/ (ly:bp 1)))
- name)))
+ (resolution (output-resolution defs))
+ (width-height (output-width-height defs))
+ (width (car width-height))
+ (height (cdr width-height))
+ (filename (output-filename name)))
+ (postscript->png resolution width height filename)))
(define-public (convert-to-ps book name)
#t)
(or (equal? a b)
(ly:moment<? a b)))
+(define-public (fraction->moment fraction)
+ (if (null? fraction)
+ ZERO-MOMENT
+ (ly:make-moment (car fraction) (cdr fraction))))
+
+(define-public (moment->fraction moment)
+ (cons (ly:moment-main-numerator moment)
+ (ly:moment-main-denominator moment)))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; arithmetic
(define-public (average x . lst)
"part-combiner.scm"
"autochange.scm"
"define-music-properties.scm"
- "beam-settings.scm"
+ "time-signature-settings.scm"
"auto-beam.scm"
"chord-name.scm"
"bezier-tools.scm"
(eval-string (ly:command-line-code))
(if (ly:get-option 'help)
(begin (ly:option-usage)
- (ly:exit 0 #t )))
+ (ly:exit 0 #t)))
(if (ly:get-option 'show-available-fonts)
(begin (ly:font-config-display-fonts)
(ly:exit 0 #t)))
(for-each (lambda (s)
(ly:set-option (car s) (cdr s)))
all-settings)
- (ly:clear-anonymous-modules)
(ly:set-option 'debug-gc-assert-parsed-dead #t)
(gc)
(ly:set-option 'debug-gc-assert-parsed-dead #f)
(set! (ly:music-property r 'element) main)
(set! (ly:music-property r 'repeat-count) (max times 1))
(set! (ly:music-property r 'elements) talts)
- (if (equal? name "tremolo")
- (let* ((dots (1- (logcount times)))
- (mult (/ (* times (ash 1 dots)) (1- (ash 2 dots))))
+ (if (and (equal? name "tremolo")
+ (pair? (ly:music-property main 'elements)))
+ ;; This works for single-note and multi-note tremolos!
+ (let* ((children (if (music-is-of-type? main 'sequential-music)
+ ;; \repeat tremolo n { ... }
+ (length (ly:music-property main 'elements))
+ ;; \repeat tremolo n c4
+ 1))
+ ;; # of dots is equal to the 1 in bitwise representation (minus 1)!
+ (dots (1- (logcount (* times children))))
+ ;; The remaining missing multiplicator to scale the notes by
+ ;; times * children
+ (mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
(shift (- (ly:intlog2 (floor mult))))
(note-duration (first-note-duration r))
(duration-log (if (ly:duration? note-duration)
(set! (ly:music-property r 'tremolo-type) tremolo-type)
(if (not (integer? mult))
(ly:warning (_ "invalid tremolo repeat count: ~a") times))
- (if (memq 'sequential-music (ly:music-property main 'types))
- ;; \repeat "tremolo" { c4 d4 }
- (let ((children (length (ly:music-property main 'elements))))
-
- ;; fixme: should be more generic.
- (if (and (not (= children 2))
- (not (= children 1)))
- (ly:warning (_ "expecting 2 elements for chord tremolo, found ~a") children))
- (ly:music-compress r (ly:make-moment 1 children))
- (shift-duration-log r
- (if (= children 2) (1- shift) shift)
- dots))
- ;; \repeat "tremolo" c4
- (shift-duration-log r shift dots)))
+ ;; Adjust the time of the notes
+ (ly:music-compress r (ly:make-moment 1 children))
+ ;; Adjust the displayed note durations
+ (shift-duration-log r shift dots))
r)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Used for calls that include beat-grouping setting
(define-public (set-time-signature num den . rest)
"Set properties for time signature @var{num/den}.
-If @var{rest} is present, it is used to make a default
-@code{beamSetting} rule."
+If @var{rest} is present, it is used to set
+@code{beatStructure}."
(ly:export (apply make-beam-rule-time-signature-set
(list num den rest))))
"Implement settings for new time signature. Can be
called from either make-time-signature-set (used by \time
in parser) or set-time-signature (called from scheme code
-included in .ly file."
-
- (define (make-default-beaming-rule context)
- (override-property-setting
- context
- 'beamSettings
- (list (cons num den) 'end)
- (list (cons '* (car rest)))))
-
- (let* ((set1 (make-property-set 'timeSignatureFraction (cons num den)))
- (beat (ly:make-moment 1 den))
- (len (ly:make-moment num den))
- (set2 (make-property-set 'beatLength beat))
- (set3 (make-property-set 'measureLength len))
- (beaming-rule
- (if (null? rest)
- '()
- (list (make-apply-context make-default-beaming-rule))))
- (output (cons* set1 set2 set3 beaming-rule)))
- (descend-to-context
- (context-spec-music
- (make-sequential-music output)
- 'Timing)
- 'Score)))
+included in .ly file)."
+
+ (let ((m (make-music 'ApplyContext)))
+ (define (make-time-settings context)
+ (let* ((fraction (cons num den))
+ (time-signature-settings (ly:context-property context 'timeSignatureSettings))
+ (my-base-fraction (base-fraction fraction time-signature-settings))
+ (my-beat-structure (if (null? rest)
+ (beat-structure my-base-fraction
+ fraction
+ time-signature-settings)
+ (car rest)))
+ (beaming-exception
+ (beam-exceptions fraction time-signature-settings))
+ (new-measure-length (ly:make-moment num den)))
+ (ly:context-set-property! context 'timeSignatureFraction fraction)
+ (ly:context-set-property!
+ context 'baseMoment (fraction->moment my-base-fraction))
+ (ly:context-set-property! context 'beatStructure my-beat-structure)
+ (ly:context-set-property! context 'beamExceptions beaming-exception)
+ (ly:context-set-property! context 'measureLength new-measure-length)))
+ (set! (ly:music-property m 'procedure) make-time-settings)
+ (descend-to-context
+ (context-spec-music m 'Timing)
+ 'Score)))
+
(define-public (make-mark-set label)
"Make the music for the \\mark command."
(* (* x-radius x-radius)
(* (sin angle) (sin angle)))))))
(let*
- ((dummy (format #t "INFO XR ~a YR ~a SA ~a EA ~a\n" x-radius y-radius start-angle end-angle))
- (new-start-angle (* PI-OVER-180 (angle-0-360 start-angle)))
+ ((new-start-angle (* PI-OVER-180 (angle-0-360 start-angle)))
(start-radius (make-ellipse-radius x-radius y-radius new-start-angle))
(new-end-angle (* PI-OVER-180 (angle-0-360 end-angle)))
(end-radius (make-ellipse-radius x-radius y-radius new-end-angle))
(x-end (- (* end-radius (cos new-end-angle))
(* start-radius (cos new-start-angle))))
(y-end (- (* end-radius (sin new-end-angle))
- (* start-radius (sin new-start-angle))))
- (dummy (format #t "INFO NSA ~a SR ~a NEA ~a ER ~a\n" new-start-angle start-radius new-end-angle end-radius)))
+ (* start-radius (sin new-start-angle)))))
(if (and (< (abs x-end) epsilon) (< (abs y-end) epsilon))
(entity
'ellipse ""
(ec 'a)))
(define (utf-8-string pango-font-description string)
- (dispatch `(fontify ,pango-font-description ,(entity 'tspan string))))
+ (let ((escaped-string (string-regexp-substitute
+ "<" "<"
+ (string-regexp-substitute "&" "&" string))))
+ (dispatch `(fontify ,pango-font-description
+ ,(entity 'tspan escaped-string)))))
(let ((e '())
(c0 0)
(oct 0)
- (match (string-match "^(.*)([_^])([0-9]+)$" clef-name)))
+ (match (string-match "^(.*)([_^])([1-9][0-9]*)$" clef-name)))
(if match
(begin
(set! clef-name (match:substring match 1))
--- /dev/null
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 2009--2010 Carl Sorensen <c_sorensen@byu.edu>
+;;;;
+;;;; LilyPond is free software: you can redistribute it and/or modify
+;;;; it under the terms of the GNU General Public License as published by
+;;;; the Free Software Foundation, either version 3 of the License, or
+;;;; (at your option) any later version.
+;;;;
+;;;; LilyPond is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
+;;; specify time signature default settings
+
+;;; format:
+;;;
+;;; alist of
+;;; (time-signature . default-properties) entries.
+;;;
+;;; where default-properties is an alist containing information about the
+;;; time signature. Each default-properties set can contain the
+;;; following entries:
+;;;
+;;; (baseMoment . (numerator . denominator))
+;;; (beatStructure . structure-list)
+;;; (beamExceptions . (alist of beam exceptions that don't follow beats))
+;;;
+;;; The alist of beam exceptions has the following entries:
+;;;
+;;; (end . grouping-rules)
+;;; (subdivide . grouping-rules) (not yet implemented, reserved for future use)
+;;;
+;;; grouping-rules is an alist containing (beam-type . grouping-list) entries
+;;;
+;;; beam-type is (numerator . denominator)
+;;; grouping-list is a list that specifies the
+;;; number of stems of the given duration that are grouped in a beamed unit.
+;;; For an exception, the duration used is beam-type. For measureBeats,
+;;; the duration used is baseMoment.
+;;;
+;;; If an exception is specified for a given beam-type, it will apply to all
+;;; beams of shorter durations that don't have an individual exception, so
+;;; ((1 . 8) . (3 3 2))
+;;; will cause all primary beams to be broken at 3/8, 5/8, and 8/8.
+;;;
+;;; ((1. 32) . (16 8 4 4))
+;;; will cause all 1/32, 1/64, and 1/128 beams to be broken at 1/2, 3/4,
+;;; 7/8, and 8/8.
+;;;
+;;; If no values are given for baseMoment and measureBeats, default values
+;;; will be assigned:
+;;; baseMoment gets the value (ly:make-moment 1 time-signature-denominator)
+;;; beatStructure gets a list of (3 3 3 ...), where the number of entries is the
+;;; number of beats, each containing 3 base-moments, if the time
+;;; signature numerator is greater than 3 and divisible by 3, and
+;;; a list of (1 1 1 ...), where the number of entries is the
+;;; number of base moments in a measure otherwise.
+;;;
+;;; If no value is given for beatCombinations, no beats will be combined without
+;;; beamExceptions rules.
+;;;
+;;; NOTE: numerator is kept in beam-type because of
+;;; tuplets, e.g. (2 . 24) = (2 . 3) * (1 . 8)
+;;; for eighth-note triplets.
+
+(define-public default-time-signature-settings
+ '(
+ ;; in 2/2 time:
+ ;; use defaults, but end beams with 32nd notes each 1 4 beat
+ ((2 . 2) .
+ ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8))))))))
+
+ ;; in 2/4, 2/8 and 2/16 time:
+ ;; use defaults, so no entries are necessary
+
+ ;; in 3 2 time:
+ ;; use defaults, but end beams with 32nd notes and higher each 1 4 beat
+
+ ((3 . 2) .
+ ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8))))))))
+
+ ;; in 3 4 time:
+ ;; use defaults, but combine all beats into a unit if possible
+ ;;
+ ;; set all beams to end on beats, but 1 8 to beam entire measure
+ ;; in order to avoid beaming every beat for entier measure, we set
+ ;; triplets back to every beat.
+ ((3 . 4) .
+ ((beamExceptions . ((end . (((1 . 8) . (6))
+ ((1 . 12) . (3 3 3))))))))
+
+ ;; in 3 8 time:
+ ;; beam entire measure together
+ ((3 . 8) . ((beamExceptions . ((end . (((1 . 8) . (3))))))))
+
+ ;; in 3 16 time:
+ ;; use defaults -- no entries necessary
+
+ ;; in 4 2 time:
+ ;; use defaults, but end beams with 16th notes or finer each 1 4 beat
+ ((4 . 2) .
+ ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4 4 4))))))))
+
+ ;; in 4 4 (common) time:
+ ;; use defaults, but combine beats 1,2 and 3,4 if only 8th notes
+ ;; NOTE: Any changes here need to be duplicated in
+ ;; ly/engraver-init.ly where the default time signature is set
+ ;; are set
+ ((4 . 4) .
+ ((beamExceptions . ((end . (((1 . 8) . (4 4))
+ ((1 . 12) . (3 3 3 3))))))))
+
+ ;; in 4/8 time:
+ ;; combine beats 1 and 2, so beam in 2
+ ((4 . 8) . ((beatStructure . (2 2))))
+
+ ;; in 4/8 and 4/16 time:
+ ;; use defaults, so no entries necessary
+
+ ;; in 6 4 time:
+ ;; use defaults, but end beams with 32nd or finer each 1/4 beat
+ ((6 . 4) .
+ ((beamExceptions . ((end . (((1 . 16) . (4 4 4 4 4 4))))))))
+
+ ;; in 6 8 time:
+ ;; use defaults, but end beams with 32nd or finer each 1 8 beat
+ ((6 . 8) .
+ ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4))))))))
+
+ ;; in 6 16 time:
+ ;; use defaults, so no entry necessary
+
+ ;; in 9 4 time:
+ ;; use defaults, but end beams with 32nd or finer each 1 4 beat
+ ((9 . 4) .
+ ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8))))))))
+
+ ;; in 9 8 time
+ ;; use defaults, but end beams with 32nd notes each 1 8 beat
+ ((9 . 8) .
+ ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4 4 4 4))))))))
+
+ ;; in 9 16 time
+ ;; use defaults, so no entry necessary
+
+ ;; in 12 4 time:
+ ;; use defaults, but end beams with 32nd or finer notes each 1 4 beat
+ ((12 . 4) .
+ ((beamExceptions . ((end . (((1 . 32) . (8 8 8 8 8 8 8 8 8 8 8 8))))))))
+
+ ;; in 12 8 time:
+ ;; use defaults, but end beams with 32nd notes each 1 8 beat
+ ((12 . 8) .
+ ((beamExceptions . ((end . (((1 . 32) . (4 4 4 4 4 4 4 4 4 4 4 4))))))))
+
+ ;; in 12 16 time:
+ ;; use defaults; no entry needed
+
+ ;; in 5 8 time:
+ ;; default: group (3 2)
+ ((5 . 8) .
+ ((baseMoment . (1 . 8))
+ (beatStructure . (3 2))))
+
+ ;; in 8 8 time:
+ ;; default: group (3 3 2)
+ ((8 . 8) .
+ ((baseMoment . (1 . 8))
+ (beatStructure . (3 3 2))))
+
+ )) ; end of alist definition
+
+;;;
+;;; Accessor and constructor functions
+;;;
+
+(define (get-setting my-symbol time-signature time-signature-settings)
+ "Get setting @code{my-symbol} for @code{time-signature} from
+@code{time-signature-settings}."
+ (let ((my-time-signature-settings
+ (assoc-get time-signature time-signature-settings '())))
+ (assoc-get my-symbol my-time-signature-settings '())))
+
+(define-public (make-setting base-fraction
+ beat-structure
+ beam-exceptions)
+ (list
+ (cons 'baseMoment base-fraction)
+ (cons 'beatStructure beat-structure)
+ (cons 'beamExceptions beam-exceptions)))
+
+(define-public (base-fraction time-signature time-signature-settings)
+ "Get @code{baseMoment} fraction value for @code{time-signature} from
+@code{time-signature-settings}."
+ (let ((return-value (get-setting 'baseMoment
+ time-signature
+ time-signature-settings)))
+ (if (null? return-value)
+ (cons 1 (cdr time-signature))
+ return-value)))
+
+(define-public (beat-structure base-fraction time-signature time-signature-settings)
+ "Get beatStructure value in @code{base-fraction} units
+for @code{time-signature} from
+@code{time-signature-settings}."
+ (define (fraction-divide numerator denominator)
+ (/ (* (car numerator) (cdr denominator))
+ (* (cdr numerator) (car denominator))))
+
+ (let ((return-value (get-setting 'beatStructure
+ time-signature
+ time-signature-settings)))
+ (if (null? return-value)
+ ;; calculate default beatStructure
+ (let* ((numerator (car time-signature))
+ (group-size (if (and (> numerator 3)
+ (zero? (remainder numerator 3)))
+ 3
+ 1))
+ (beat-length (cons (* group-size (car base-fraction))
+ (cdr base-fraction)))
+ (beat-count (fraction-divide time-signature beat-length)))
+ (if (integer? beat-count)
+ (make-list beat-count group-size)
+ '()))
+ ;; use value obtained from time-signature-settings
+ return-value)))
+
+(define-public (beam-exceptions time-signature time-signature-settings)
+ "Get beamExceptions value for @code{time-signature} from
+@code{time-signature-settings}."
+ (get-setting 'beamExceptions time-signature time-signature-settings))
+
+
+;;; Functions for overriding time-signature settings
+;;;
+
+(define (override-property-setting context property setting value)
+ "Like the C++ code that executes \\override, but without type
+checking. "
+ (begin
+ (revert-property-setting context property setting)
+ (ly:context-set-property!
+ context
+ property
+ (cons (cons setting value) (ly:context-property context property)))))
+
+(define (revert-property-setting context property setting)
+ "Like the C++ code that executes \revert, but without type
+checking. "
+
+ (define (revert-member alist entry new)
+ "Return ALIST, with ENTRY removed. ALIST is not modified, instead
+a fresh copy of the list-head is made."
+ (cond
+ ((null? alist) new)
+ ((equal? (car alist) entry) (revert-member (cdr alist) entry new))
+ (else (revert-member (cdr alist) entry (cons (car alist) new)))))
+
+ (ly:context-set-property!
+ context property
+ (revert-member (ly:context-property context property) setting '())))
+
+(define-public (override-time-signature-setting time-signature setting . rest)
+ "Override the time signature settings for the context in @var{rest},
+with the new setting alist @var{setting}. "
+ (context-spec-music
+ (make-apply-context
+ (lambda (c) (override-property-setting
+ c
+ 'timeSignatureSettings
+ time-signature
+ setting)))
+ (if (and (pair? rest) (symbol? (car rest)))
+ (car rest)
+ 'Voice)))
+
+(define-public (score-override-time-signature-setting
+ time-signature setting)
+ (override-time-signature-setting
+ time-signature setting 'Score))
+
+(define-public (revert-time-signature-setting
+ time-signature . rest)
+ (context-spec-music
+ (make-apply-context
+ (lambda (c)
+ (revert-property-setting
+ c
+ 'timeSignatureSettings
+ time-signature)))
+ (if (and (pair? rest) (symbol? (car rest)))
+ (car rest)
+ 'Voice)))
body = re.sub ('(?ms)<STRONG>(.*?)(</STRONG>)', r'@strong{\1}', body)
body = re.sub ('(?ms)<EM>(.*?)(</EM>)', r'@emph{\1}', body)
-body = re.sub ('(?ms) ', r'@tie{}', body)
+body = re.sub ('(?ms) ', r'@tie{}', body)
body = re.sub ('(?ms)\cite{(.*?)}', r'[\1]', body)
body = re.sub ('(?ms)\cite{(.*?)}', r'[\1]', body)
options
-o, --output=NAME write tely doc to NAME
-t, --title=TITLE set tely doc title TITLE
+ -a, --author=AUTHOR set tely author AUTHOR
--template=TEMPLATE use TEMPLATE as Texinfo template file,
instead of standard template; TEMPLATE should contain a command
'%(include_snippets)s' to tell where to insert LY-FILEs. When this
sys.exit (0)
(options, files) = getopt.getopt (sys.argv[1:], 'f:hn:t:',
- ['fragment-options=', 'help', 'name=', 'title=', 'template='])
+ ['fragment-options=', 'help', 'name=', 'title=', 'author=', 'template='])
name = "ly-doc"
title = "Ly Doc"
+author = "Han-Wen Nienhuys and Jan Nieuwenhuizen"
template = '''\input texinfo
@setfilename %%(name)s.info
@settitle %%(title)s
@c fool ls-latex
@ignore
-@author Han-Wen Nienhuys and Jan Nieuwenhuizen
+@author %%(author)s
@title %%(title)s
@end ignore
o = opt[0]
a = opt[1]
if o == '-h' or o == '--help':
- # We can't use vars () inside a function, as that only contains all
- # local variables and none of the global variables! Thus we have to
+ # We can't use vars () inside a function, as that only contains all
+ # local variables and none of the global variables! Thus we have to
# generate the help text here and pass it to the function...
help (help_text % vars ())
elif o == '-n' or o == '--name':
name = a
elif o == '-t' or o == '--title':
title = a
+ elif o == '-a' or o == '--author':
+ author = a
elif o == '-f' or o == '--fragment-options':
fragment_options = a
elif o == '--template':
raise Exception ('unknown option: ' + o)
texi_file_re = re.compile ('.*\.i?te(ly|xi)$')
+html_file_re = re.compile ('.*\.i?htm(l)?$')
+xml_file_re = re.compile ('.*\.i?xml$')
+tex_file_re = re.compile ('.*\.i?(la)?tex$')
+pdf_file_re = re.compile ('.*\.i?pdf$')
def name2line (n):
if texi_file_re.match (n):
# We have a texi include file, simply include it:
s = r"@include %s" % os.path.basename (n)
+ elif (html_file_re.match (n) or pdf_file_re.match (n) or
+ xml_file_re.match (n) or tex_file_re.match (n)):
+ s = r"""
+@ifhtml
+@html
+<a href="%s">%s</a>
+<br/>
+@end html
+@end ifhtml
+""" % (os.path.basename (n), os.path.basename (n))
+ return s
else:
# Assume it's a lilypond file -> create image etc.
s = r"""
\set Timing.measureLength = $mlen
\set Timing.timeSignatureFraction = #(cons (ly:moment-main-numerator $mlen)
(ly:moment-main-denominator $mlen))
-\set Timing.beatLength = $beat
+\set Timing.baseMoment = $beat
% TODO: Implement beatGrouping and auto-beam-settings!!!
#} ))
exec ./autogen.sh "$@"
fi
-# Be paranoid: check for autoconf >= 2.50
-# Some setups have both autoconf 2.13 and 2.5x available through
-# a wrapper script: /usr/bin/autoconf.
-# This wrapper may incorrectly autoselect autoconf 2.50, but it
-# advertises itself as autoconf 2.13.
-# If you have such a setup, invoke this script as:
-# autoconf=autoconf2.50 ./autogen.sh
-for i in autoconf2.50 autoconf-2.50 autoconf false; do
- version=`$i --version 2>/dev/null | head -n 1 | awk '{print $NF}' | awk -F. '{print $1 * 100 + $2}'`
- if test "0$version" -ge 250; then
- autoconf=$i
- break
- fi
-done
-
-if test -z "$autoconf"; then
- echo "ERROR: Please install autoconf 2.50 or newer"
- exit 1
-fi
-
for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
do
dir=`dirname $i`
(
cd $dir
echo "Running autoconf ..."
- $autoconf
+ autoconf || exit 1
)
+ # Autoconf automatically checks its own minimum required
+ # version, and it aborts when the check fails.
+ test "$?" -eq 1 && exit 1
done
#conf_flags="--enable-maintainer-mode --enable-compile-warnings" #--enable-iso-c
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
# Free Software Foundation, Inc.
-timestamp='2010-03-22'
+timestamp='2010-05-21'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \