@end ignore
+@item
+The construct @code{#@{ @dots{} #@}} can now be used not just for
+constructing sequential music lists, but also for single music events,
+void music expressions, post events, markups (mostly freeing users from
+having to use the @code{markup} macro), markup lists, number
+expressions, context definitions and modifications, and a few other
+things. If it encloses nothing or only a single music event, it no
+longer returns a sequential music list but rather a void music
+expression or just the music event itself, respectively.
+
@item
New command-line option @option{--loglevel=@var{level}} to control how much output
LilyPond creates. Possible values are ERROR, WARN, BASIC_PROGRESS, PROGRESS, DEBUG.
@node Uploading and security
@section Uploading and security
+@subheading Building the website from scratch for local checking
+
+Initial setup:
+
+Create directories:
+
+@example
+$HOME/lilypond/
+$HOME/lilypond/media/
+$HOME/lilypond/trusted-scripts/
+@end example
+
+To reduce the CPU burden on the shared host (as well as some
+security concerns), the 'Documentation/pictures/' and
+'Documentation/web/ly-examples/' directories are **not** compiled.
+We will do this ourselves right now.
+
+Go to your lilypond build directory. make doc.
+
+Set up some variables (you'll only do this once:)
+
+@example
+BUILD_DIR=$HOME/lilypond-git
+PICS=$BUILD_DIR/Documentation/pictures/
+EXAMPLES=$BUILD_DIR/Documentation/web/ly-examples/
+@end example
+
+Copy files over:
+
+@example
+cp -r $PICS $HOME/lilypond/media/pictures
+cp -r $EXAMPLES $HOME/lilypond/media/ly-examples
+@end example
+
+Get the scripts you need. First define these variables:
+
+@example
+GIT=$HOME/lilypond-git
+DEST=$HOME/lilypond/trusted-scripts
+@end example
+
+Then do the copying:
+
+@smallexample
+cp $GIT/make/website.make $DEST/website.make
+cp $GIT/Documentation/lilypond-texi2html.init $DEST/lilypond-texi2html.init
+cp $GIT/scripts/build/extract_texi_filenames.py $DEST/extract_texi_filenames.py
+cp $GIT/scripts/build/create-version-itexi.py $DEST/create-version-itexi.py
+cp $GIT/scripts/build/create-weblinks-itexi.py $DEST/create-weblinks-itexi.py
+cp $GIT/scripts/build/mass-link.py $DEST/mass-link.py
+cp $GIT/scripts/build/website_post.py $DEST/website_post.py
+cp $GIT/scripts/build/bib2texi.py $DEST/bib2texi.py
+cp $GIT/Documentation/web/server/lilypond.org.htaccess $DEST/lilypond.org.htaccess
+cp $GIT/Documentation/web/server/website-dir.htaccess $DEST/website-dir.htaccess
+@end smallexample
+
+Delete your build directory (or maybe just rename your build
+directory to build-old).
+
+@example
+cd $HOME/lilypond
+@end example
+
+Run
+
+@example
+make -f ../lilypond-git/make/website.make WEBSITE_ONLY_BUILD=1 \
+ TOP_SRC_DIR=$HOME/lilypond-git/ \
+ TEXI2HTML_PROGRAM=texi2html \
+ website
+@end example
+
+The website should be at:
+
+@example
+$HOME/lilypond/out-website/website/index.html
+@end example
+
+@subheading Building the online website
+
The website is generated hourly by user @code{graham} the host
@code{lilypond.org}. For security reasons, we do not use the
makefiles and scripts directly from git; copies of the relevant
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@item @var{TypN?}
@tab ein Scheme-Typenprädikat (engl. type predicate), für welches
-@code{@var{ArgN}} @code{#t} ausgeben muss
+@code{@var{ArgN}} @code{#t} ausgeben muss. Einige dieser Prädikate
+werden durch den Parser gesondert erkannt, sodass die entsprechenden
+Werte als LilyPond-Syntx gelesen werden und nicht als Scheme-Syntax.
+Diese Prädikate sind gegenwärtig @code{ly:music?}, @code{markup?}, @code{ly:pitch?}
+und @code{ly:duration?}. Nicht alle Kombinationen sind erlaubt:
+man kann z. B. nicht eine Dauer nach den Noten suchen, denn Noten
+können @emph{optional} mit einer Dauer enden.
+
+Wenn Sie wirklich einige dieser Elemente als Scheme- und nicht als
+LilyPond-Ausdruck einsetzen wollen, können Sie sie in einen Aufruf
+von @code{ly:export} einfügen.
@item @var{...Noten...}
@tab ein musikalischer Ausdruck, optional in Scheme geschrieben, mit allem
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@c This file is part of community.itexi and ../topdocs/AUTHORS.itexi
-@ignore
- Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
-
- When revising a translation, copy the HEAD committish of the
- version that you are working on. For details, see the Contributors'
- Guide, node Updating translation committishes.
-
+@ignore
This file lists authors of LilyPond, and what they wrote. Each
list is sorted alphabetically by surname. This file lists people
@itemize
+@item Bertrand Bordage:
+@email{bordage.bertrand@@gmail.com},
+Core developer, font designer
+
@item Trevor Daniels:
@email{t.daniels@@treda.co.uk},
Assistant documentation editor
@c use commas not colons
-Sven Axelsson,
-Pál Benkő,
-Frédéric Bron,
-Hajo Dezelski,
-Richard Gay,
-Keith OHara,
-Andrew Hawryluk,
-Christian Hitz,
-Marc Hohl,
-Henning Hraban Ramm,
-Ian Hulin,
-Michael Käppler,
-Marek Klein,
-Kieren MacMillan,
-Thomas Morgan,
-Benjamin Peterson,
-Nathan Reed,
-Julien Rioux,
-Boris Shingarov,
-Patrick Schmidt,
-Owen Tuz,
-Andrew Wilson,
-Rodolfo Zitellini
+Karin Hoethker,
+Jan Warchoł
@c no comma for last entry
@c use commas not colons
-Keith OHara,
-Marc Hohl,
-Alexander Kobel,
-Carsten Steger
-
@c no comma for last entry
@end macro
@c use commas not colons
-Colin Campbell,
-Andrew Hawryluk,
-James Lowe,
-Mike Moral,
-Ralph Palmer,
-David Pounder,
-Patrick Schmidt
+James Lowe
@c no comma for last entry
@macro bugsquadCurrent
-James E. Bailey,
Colin Campbell,
Phil Holmes,
-Urs Liska,
-Ralph Palmer,
-Kieren MacMillan,
+Derek Klinge,
Dmytro O. Redchuk
@c no comma for last entry
@c use commas not colons
-Christian Hitz
+Colin Campbell,
+Christian Hitz,
+Phil Holmes
@c no comma for last entry
@c use commas not colons
-Federico Bruni,
-Dénes Harmath,
-Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
-Tineke de Munnik,
-Till Paala,
-Ralf Wildenhues,
-Yoshiki Sawada
@c no comma for last entry
Erlend Aasland,
Maximilian Albert,
Guido Amoruso,
+Sven Axelsson,
Kristof Bastiaensen,
Pál Benkő,
-@c @email{benkop@@freestart.hu},
+Bertrand Bordage,
+Frédéric Bron,
Juliusz Chroboczek,
-@c @email{jch@@pps.jussieu.fr},
+Peter Chubb,
Angelo Contardi,
+Vicente Solsona Della,
+Hajo Dezelski,
+Michael Welsh Duggan,
David Feuer,
-@c @email{david.feuer@@gmail.com},
Bertalan Fodor,
+Richard Gay,
Mathieu Giraud,
+Lisa Opus Goldstein,
Yuval Harel,
+Andrew Hawryluk,
+Christian Hitz,
+Marc Hohl,
+Ian Hulin,
Bernard Hurley,
-@c @email{bernard@@fong-hurley.org.uk},
Yoshinobu Ishizaki,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
David Jedlinsky,
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
+Michael Käppler,
+Marek Klein,
Michael Krause,
-@c @email{m.krause@@tu-harburg.de},
Jean-Baptiste Lamy,
-@c @email{jiba@@tuxfamily.org},
Jonatan Liljedahl,
Peter Lutek,
+Kieren MacMillan,
Hendrik Maryns,
+Thomas Morgan,
Joe Neeman,
-@c @email{joeneeman@@gmail.com},
Matthias Neeracher,
+Keith OHara,
Tatsuya Ono,
-Lisa Opus Goldstein,
+Benjamin Peterson,
Guy Gascoigne-Piggford,
+Henning Hraban Ramm,
+Nathan Reed,
+Julien Rioux,
Stan Sanderson,
-Edward Sanford Sutton,
Andreas Scherer,
Johannes Schindelin,
+Patrick Schmidt,
+Boris Shingarov,
Kim Shrier,
-Vicente Solsona Della,
+Edward Sanford Sutton,
David Svoboda,
+Owen Tuz,
Sebastiano Vigna,
+Jan Warchoł,
Arno Waschk,
-Michael Welsh Duggan,
John Williams,
+Andrew Wilson,
Milan Zamazal,
-Rune Zedeler
+Rune Zedeler,
+Rodolfo Zitellini
@c no comma for last entry
@c use commas not colons
Tom Cato Amundsen,
-@c @email{tca@@gnu.org},
+Marc Hohl,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
+Alexander Kobel,
+Keith OHara,
+Carsten Steger
Arno Waschk,
-@c @email{arno@@arnowaschk.de},
Rune Zedeler
@c no comma for last entry
@c use commas not colons
Erlend Aasland,
-Trevor Bača,
+Trevor Bača
Alard de Boer,
+Colin Campbell,
Jay Hamilton,
-Andrew Hawryluk,
Joseph Harfouch,
+Andrew Hawryluk,
+Andrew Hawryluk,
Cameron Horsburgh,
Geoff Horton,
Ian Hulin,
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
Kurtis Kroon,
+James Lowe,
Dave Luttinen,
Kieren MacMillan,
Christian Mondrup,
-@c @email{scancm@@biobase.dk},
+Mike Moral,
Eyolf Østrem,
Ralph Palmer,
+Ralph Palmer,
François Pinard,
-@c @email{pinard@@iro.umontreal.ca},
-@c @uref{http://pinard.progiciels-bpi.ca/},
-Eduardo Vieira,
+David Pounder,
Michael Rasmussen,
Till Rettig,
+Patrick Schmidt,
Carl D. Sorensen,
Anh Hai Trinh,
+Eduardo Vieira,
Rune Zedeler
@c no comma for last entry
@macro bugsquadPrevious
-@c nobody here yet
+@c use commas not colons
+James E. Bailey,
+Urs Liska,
+Kieren MacMillan,
+Ralph Palmer
@c no comma for last entry
@end macro
@c use commas not colons
Anthony Fok,
-@c @email{foka@@debian.org},
+Christian Hitz,
Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
David Svoboda
-@c @email{svoboda@@cmu.edu}
@c no comma for last entry
@c use commas not colons
-Frédéric Chiasson,
-Abel Cheung,
Alard de Boer,
+Federico Bruni,
+Abel Cheung,
+Frédéric Chiasson,
Simon Dahlbacka,
Orm Finnendahl,
David González,
Nicolas Grandclaude,
-@c @email{ngclaude@@123mail.org},
+Dénes Harmath,
Damien Heurtebise,
-Matthieu Jacquot,
Bjoern Jacke,
-@c @email{bjoern.jacke@@gmx.de},
+Matthieu Jacquot,
Neil Jerram,
-@c @email{nj104@@cus.cam.ac.uk},
Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
Nicolas Klutchnikoff,
Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
+Jean-Charles Malahieude,
Adrian Mariano,
Christian Mondrup,
Tineke de Munnik,
-@c @email{tdm@@dds.nl},
+Tineke de Munnik,
Steven Michael Murphy,
+Till Paala,
François Pinard,
Gauvain Pocentek,
-@c @email{gauvainpocentek@@yahoo.fr},
Till Rettig,
Ludovic Sardain,
-@c @email{ludovicsardain@@gmail.com},
+Yoshiki Sawada
Yoshiki Sawada,
Thomas Scharkowski,
Clytie Siddall,
August S. Sigov,
-@c @email{august@@infran.ru},
Roland Stigge,
Risto Vääräniemi,
Andrea Valle,
+Ralf Wildenhues,
Olcay Yıldırım
@c no comma for last entry
@c learning/tutorial.itely
@ignore
- Translation of GIT committish: ab9e3136d78bfaf15cc6d77ed1975d252c3fe506
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Erstellen Sie eine Text-Datei mit dem Namen @file{test.ly} und
geben Sie folgenden Text ein:
+@c double \\ required because this is inside a macro!
@example
+\\version "@w{@versionStable{}}"
@{
c' e' g' e'
@}
@example
lilypond test.ly
-GNU LilyPond @version{}
+GNU LilyPond @w{@versionStable{}}
»test.ly« wird verarbeitet
Analysieren...
Interpretation der Musik...
@c contributor/introduction.itely
@ignore
- Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Es wird eine Zeit der ausführlichen Diskussionen geben, damit
die endgültigen Eingabespezifikationen festgelegt werden können.
-@warning{GLISS beginnt kurz nachdem 2.14 veröffentlicht wird.}
+@warning{GLISS beginnt kurz nach der Veröffentlichung von 2.16.}
@subsubheading GOP (Grand Organizing Project)
Basis zu geben, sodass große Änderungen in der Zukunft einfacher
bewerkstelligt werden können.
-@warning{GOP beginnt kurz nachdem 2.14 veröffentlicht wird.}
-
@end macro
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 3c814eb917c15f6f0d64f64f58046dd7b119e359
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: a463d80d4be008ce05b12de86fc21f2b7c1c120f
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
-Hier noch ein weiteres Beispiel aus der Einleitung von Chopins
-Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist,
-stößt der Balken mit den oberen Noten zusammen:
+Hier noch ein weiteres Beispiel. Wie zu sehen ist,
+stößt der Balken mit den oberen Bögen zusammen:
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
}
@end lilypond
@noindent
Das kann manuell gelöst werden, indem beide Enden des Balkens
-von ihrer Position 2 Notenlinienabstände über der Mittellinie
-hochgeschoben werden, etwa auf 3:
+von ihrer Position 1.81 Notenlinienabstände unter der Mittellinie
+hochgeschoben werden, etwa auf 1:
@cindex Balken, Beispiel zur Veränderung
@cindex positions-Eigenschaft, Beispiel
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
+ \time 4/2
<<
- \override Beam #'positions = #'(3 . 3)
- { b,8 ais, b, g, }
- \\
- { e, g e, g }
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ {
+ \override Beam #'positions = #'(-1 . -1)
+ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
}
@end lilypond
@noindent
-Hier ist zu beobachten, dass die Veränderung sich auch auf die
-weiteren Achtelbalken der ersten Stimme auswirkt, während sie keine
+Hier ist zu beobachten, dass die Veränderung sich auch auf den
+die erste Stimme des weiteren Taktes mit Achtelnoten auswirkt, während sie keine
Auswirkung auf die Balken der zweiten Stimme hat.
@subheading force-hshift (vertikale Verschiebunseigenschaft)
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
nur (@code{mensural}) unterstützt.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Stem #'flag-style = #'mensural
+\override Flag #'style = #'mensural
\override Stem #'thickness = #1.0
\override NoteHead #'style = #'mensural
\autoBeamOff
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
% extend the stems to reach the other staff
\override Stem #'length = #12
% do not print extra flags
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
% prevent beaming as needed
a8 g4 f8 f bes\noBeam g4
}
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: ac3dd3ad38528113d97f6a8a7b81751c328f1c36
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
\time 3/4
\set Staff.timeSignatureFraction = #'(9 . 8)
\scaleDurations #'(2 . 3)
- \repeat unfold 6 { c8[ c c] }
+ \repeat unfold 6 { c8[ c c] }
}
\new Staff {
\time 3/4
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: ac3dd3ad38528113d97f6a8a7b81751c328f1c36
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: f86f00c1a8de0f034ba48506de2801c074bd5422
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
<!--
- Translation of GIT committish: 4f7427e7a314a71bde16559247885544256b8213
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
<form action="http://google.com/search"
method="get"
name="search"
- onSubmit="search.q.value='site:lilypond.org +v2.12 '
+ onSubmit="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onMouseMove="search.q.value='site:lilypond.org +v2.12 '
+ onMouseMove="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value"
- onKeyUp="search.q.value='site:lilypond.org +v2.12 '
+ onKeyUp="search.q.value='site:lilypond.org +v2.14 '
+ search.brute_query.value">
<input type="hidden" name="btnG" value="Mit Google suchen">
<input type="text" name="brute_query" onfocus="this.value=''" value="Suche">
+%% Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
+
texidocde = "Dieses Schnipsel zeigt, wie man die alternative Brevis mit zwei
vertikalen Linien an jeder Seite des Notenkopfes benutzt."
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@{ c1 @}
@end example
-Eine @file{EPS}-Datei kann mit folgendem Befehl erzeugt werden:
+Benutzbare Bilddateien können mit folgendem Befehl erzeugt werden:
@example
+EPS
+
lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts Dateiname.ly
-@end example
-@noindent
-eine @file{PNG}-Datei mittels:
+PNG
-@example
lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png Dateiname.ly
+
+Ein transparentes PNG
+
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts \
+ -dpixmap-format=pngalpha --png myfile.ly
@end example
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: bf45bed3887f818f2d99756e6b92c77a8698be92
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@example
%%% Kopfzeile der Datei "symphony-cello.ly"
-\include ../definitions.ily
+\include ../symphonyDefs.ily
\include ../Notes/cello.ily
@end example
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 0764a50d470cab82ca29da30298dacd333d3da12
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@divClass{column-center-top}
@subheading Was sind @qq{Minimalbeispiele}?
-Ein kleines Beispiel ist ein Beispiel, von dem nichts mehr entfernt
+Ein Minimalbeispiel ist ein Beispiel, von dem @strong{nichts} mehr entfernt
werden kann.
@divEnd
Hilfeleistende es verstehen und Ihnen helfen.
@item
-Ein einfaches Beispiel zeigt, dass Sie sich zuerst Mühe gegeben
+Ein kleines Beispiel zeigt, dass Sie sich zuerst Mühe gegeben
haben, das Problem selber zu lösen. Wenn Leute große Abschnitte
an Code einschicken, sieht es so aus, dass sie sich auch nicht
interessieren, ob ihnen geholfen wird oder nicht.
@item
-Ein Minimalbeispiel zu erstellen zwingt Sie dazu zu verstehen,
+Ein Minimalbeispiel zu erstellen hilft Ihnen zu verstehen,
was vorgeht. Viele falsche Problemberichte können vermieden werden,
wenn man versucht, erst einmal ein Minimalbeispiel zu erstellen.
Wenn Sie einen @qq{Bug} in Ihrem Minimalbeispiel nicht reproduzieren
@divClass{column-right-bottom}
-@subheading Wie soll ich sie erstellen?
+@subheading Wie werden sie erstellt?
@divClass{keep-bullets}
@itemize
@item
-Immer die \version -Nummer einfügen.
+Immer die @code{\version}-Nummer einfügen.
@item
Machen Sie es klein! Beispiele zur Platzverteilung oder dem
Seitenlayout können viele Notentakte erfordern, aber die meisten
-Probleme können in einem einzigen Takt gezeigt werden.
+Probleme können in weniger als einem einzigen Takt gezeigt werden.
@item
Wenn Sie versuchen, ein Beispiel zu erstellen, versuchen Sie
Benutzen Sie nicht @code{\override} oder @code{\set}, es sei denn,
der Fehler zeigt sich im Zusammenhang mit diesen Befehlen.
+@item
+Sie können auch zusätzlich ein Bild anhängen, welches die gewünschte graphische
+Darstellung zeigt.
+
@end itemize
@divEnd
@divEnd
+@divClass{column-center-bottom}
+@subheading Wie klein sollten sie sein?
+@c How tiny should they be?
+
+Ist der Code unten ein Minimalbeispiel?
+
+@example
+\version "2.14.1"
+\include "english.ly"
+
+\score @{
+ \new Staff @{
+ \key d \major
+ \numericTimeSignature
+ \time 2/4
+ <cs' d'' b''>16 <cs' d'' b''>8.
+ %% Here: the tie on the D's looks funny
+ %% Too tall? Left-hand endpoint is not aligned with the B tie?
+ ~
+ <cs' d'' b''>8 [ <b d'' a''> ]
+ @}
+@}
+@end example
+
+Das ist zwar kein langer Code, aber ein wirkliches Minimalbeispiel ist
+folgendes:
+
+@example
+\version "2.14.1"
+@{
+ % middle tie looks funny here:
+ <c' d'' b''>8. ~ <c' d'' b''>8
+@}
+@end example
+
+Wenige Minimalbeispiele brauchen mehr als 10 Zeilen,
+meistens kann das Problem mit vier Zeilen gezeigt werden!
+
+@divEnd
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: aa632c095138aaaa0f50f73c90e72efb4b61d745
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
uninstall-lilypond
@end example
+@subsubheading Hilfe
+
+Auf der Kommandozeile schreiben Sie
+
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
+
@divEnd
+
+
+
@divClass{column-right-top}
@subheading Eine Datei kompilieren
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.2}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.2}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: ac3dd3ad38528113d97f6a8a7b81751c328f1c36
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: ac3dd3ad38528113d97f6a8a7b81751c328f1c36
+ Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
der Übersetzungsstatus für nicht Nicht-Englischsprachige.
@item
-@ref{Alles}:
-Handbücher zum Herunterladen und alte Handbücher.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+Beispiele, Tricks und Tipps, von LilyPond-Benutzern erstellt.
@item
@ref{Entwicklung}:
contemplado el estilo @code{mensural}
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Stem #'flag-style = #'mensural
+\override Flag #'style = #'mensural
\override Stem #'thickness = #1.0
\override NoteHead #'style = #'mensural
\autoBeamOff
% extend the stems to reach the other staff
\override Stem #'length = #12
% do not print extra flags
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
% prevent beaming as needed
a8 g4 f8 f bes\noBeam g4
}
(@tie{}@w{@code{#@{@dots{}#@}}}@tie{}). Within LilyPond code
blocks, use @code{$} to reference function arguments (eg.,
@samp{$arg1}) or to start an inline scheme expression containing
-function arguments (eg., @w{@samp{$(cons arg1 arg2)}}).
+function arguments (eg., @w{@samp{$(cons arg1 arg2)}}). A LilyPond code
+block may contain anything that you can use on the right side of an
+assignment. In addition, an empty LilyPond block corresponds to a void
+music expression, and a LilyPond block containing multiple music events
+gets turned into a sequential music expression.
@end multitable
@itemize
@item
At top level in a music expression. There are no special restrictions
-on the argument list. Using the @code{#@{}@dots{}@code{#@}} construct
-produces a sequential music expression and consequently can only applied
-in this context.
+on the argument list.
@item
As a post-event. All trailing arguments of the music function with the
turning off Point and Click). To do this, we return a @code{void}
music expression.
-That is why the form that is returned is the
-@w{@code{(make-music @dots{})}}. With the @code{'void} property
-set to @code{#t}, the parser is told to actually disregard this
-returned music expression. Thus the important part of the void
-music function is the processing done by the function, not the
-music expression that is returned.
+Using the form @code{#@{ #@}} will actually achieve that. If you for
+some reason really need an empty sequential music expression, you would
+have to write @code{#@{ @{ @} #@}} instead.
@example
noPointAndClick =
(parser location)
()
(ly:set-option 'point-and-click #f)
- (make-music 'SequentialMusic 'void #t))
+ #@{ #@})
...
\noPointAndClick % disable point and click
@end example
@noindent
is equivalent to:
@example
-\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
- \larger \line @{ foo bar baz @} @}
+#@{ \markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
+ \larger \line @{ foo bar baz @} @} #@}
@end example
@noindent
This example demonstrates the main translation rules between regular
-LilyPond markup syntax and Scheme markup syntax.
+LilyPond markup syntax and Scheme markup syntax. Using @code{#@{
+@dots{} #@}} for entering in Lilypond syntax will often be most
+convenient, but we explain how to use the @code{markup} macro to get a
+Scheme-only solution.
@quotation
@multitable @columnfractions .3 .3
taking one argument (the text). This draws the two boxes, with some
padding.
+@lisp
+#(define-markup-command (double-box layout props text) (markup?)
+ "Draw a double box around text."
+ (interpret-markup layout props
+ #@{\markup \override #'(box-padding . 0.4) \box
+ \override #'(box-padding . 0.6) \box @{ $text @}#@}))
+@end lisp
+
+or, equivalently
+
@lisp
#(define-markup-command (double-box layout props text) (markup?)
"Draw a double box around text."
@code{text} is the name of the command argument, and @code{markup?} its
type: it identifies it as a markup. The @code{interpret-markup}
function is used in most of markup commands: it builds a stencil, using
-@code{layout}, @code{props}, and a markup. Here, this markup is built
-using the @code{markup} scheme macro, see @ref{Markup construction in Scheme}.
-The transformation from @code{\markup} expression to scheme
-markup expression is straight-forward.
+@code{layout}, @code{props}, and a markup. In the second case, this
+markup is built using the @code{markup} scheme macro, see @ref{Markup
+construction in Scheme}. The transformation from @code{\markup}
+expression to scheme markup expression is straight-forward.
The new command can be used as follow:
@code{box-padding} will be used for the inner padding. The new code is
now as follows:
+@lisp
+#(define-markup-command (double-box layout props text) (markup?)
+ #:properties ((inter-box-padding 0.4)
+ (box-padding 0.6))
+ "Draw a double box around text."
+ (interpret-markup layout props
+ #@{\markup \override #`(box-padding . ,$inter-box-padding) \box
+ \override #`(box-padding . ,$box-padding) \box
+ @{ $text @} #@}))
+@end lisp
+
+Again, the equivalent version using the markup macro would be:
+
@lisp
#(define-markup-command (double-box layout props text) (markup?)
#:properties ((inter-box-padding 0.4)
(box-padding 0.6))
"Draw a double box around text."
(interpret-markup layout props
- (markup #:override `(box-padding . ,inter-box-padding) #:box
- #:override `(box-padding . ,box-padding) #:box text)))
+ #{\markup \override #`(box-padding . ,$inter-box-padding) \box
+ \override #`(box-padding . ,$box-padding) \box
+ { $text } #}))
\markup \double-box A
\markup \override #'(inter-box-padding . 0.8) \double-box A
In the following example, a @code{\paragraph} markup list command is
defined, which returns a list of justified lines, the first one being
indented. The indent width is taken from the @code{props} argument.
+
+@example
+#(define-markup-list-command (paragraph layout props args) (markup-list?)
+ #:properties ((par-indent 2))
+ (interpret-markup-list layout props
+ #@{\markuplines \justified-lines @{ \hspace #$par-indent $args @} #@}))
+@end example
+
+
+The version using just Scheme is more complex:
@example
#(define-markup-list-command (paragraph layout props args) (markup-list?)
#:properties ((par-indent 2))
First, the function gets the indent width, a property here named
@code{par-indent}, from the property list @code{props}. If the
property is not found, the default value is @code{2}. Then, a
-list of justified lines is made using the
-@code{make-justified-lines-markup-list} function, which is related
-to the @code{\justified-lines} built-in markup list command. A
-horizontal space is added at the beginning using the
-@code{make-hspace-markup} function. Finally, the markup list is
+list of justified lines is made using the built-in markup list command
+@code{\justified-lines}, which is related to the
+@code{make-justified-lines-markup-list} function. A
+horizontal space is added at the beginning using @code{\hspace} (or the
+@code{make-hspace-markup} function). Finally, the markup list is
interpreted using the @code{interpret-markup-list} function.
This new markup list command can be used as follows:
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: ec35c10a93b45b1f0dd721c54197a79d4207a92c
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c Better left untranslated -vv
@ignore
-@subheading Colorado
+@subheading University of Colorado Engraving music bibliography
@include colorado.itexi
@c This file is part of web/download.itexi and
@c learning/tutorial.itely
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 72ffce252ed4be33c47b925ff2d79428a9367056
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c double \\ required because this is inside a macro!
@example
-\\version "@w{@version{}}"
+\\version "@w{@versionStable{}}"
@{
c' e' g' e'
@}
Vous verrez alors quelque chose qui ressemblera à@tie{}:
@example
-GNU LilyPond @w{@version{}}
+GNU LilyPond @w{@versionStable{}}
Traitement de « test.ly »
Analyse...
Interprétation en cours de la musique...
@c contributor/introduction.itely
@ignore
- Translation of GIT committish: 46ec3bd9ded640faef62938929a0af97345cf955
+ Translation of GIT committish: 72ffce252ed4be33c47b925ff2d79428a9367056
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
format de saisie définitif.
-@warning{Le GLISS commencera peu après la sortie de la version 2.14.}
+@warning{Le GLISS commencera peu après la sortie de la version 2.16.}
@subsubheading Projet GOP d'organisation de LilyPond
nous donner une base bien plus stable pour pouvoir entreprendre
de grands travaux à l'avenir.
-@warning{Le GOP commencera peu après la sortie de la version 2.14.}
-
@end macro
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: a6cd9e45dcb86a249936f174403c9f8bc8afebc0
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
tous les objets de la portée, et porte une valeur numérique appropriée à
chacun des objets extérieurs à la portée, à mesure qu'ils sont créés.
Le tableau suivant montre la valeur numérique par défaut pour
-quelques-uns des objets extérieurs à la portée les plus courants qui
-sont placés, par défaut, dans les contextes @code{Staff} ou
-@code{Voice}.
+quelques-uns des objets extérieurs à la portée les plus courant.
@cindex spanners
@cindex bandeaux
@headitem Objet de rendu
@tab Priorité
@tab Contrôle la position de :
-@item @code{MultiMeasureRestText}
- @tab @code{450}
- @tab Texte sur les silences qui couvrent des mesures entières
+@item @code{RehearsalMark}
+ @tab @code{1500}
+ @tab Repère
+@item @code{MetronomeMark}
+ @tab @code{1000}
+ @tab Indication métronomique
+@item @code{VoltaBracketSpanner}
+ @tab @code{600}
+ @tab Bandeau de répétition
@item @code{TextScript}
@tab @code{450}
@tab Texte des @emph{markup} (ou étiquettes)
+@item @code{MultiMeasureRestText}
+ @tab @code{450}
+ @tab Texte sur les silences qui couvrent des mesures entières
@item @code{OttavaBracket}
@tab @code{400}
@tab Indication d'octaviation
@item @code{DynamicLineSpanner}
@tab @code{250}
@tab Toutes les marques de nuances
-@item @code{VoltaBracketSpanner}
+@item @code{BarNumber}
@tab @code{100}
- @tab Bandeau de répétition
+ @tab Numéro de mesure
@item @code{TrillSpanner}
@tab @code{50}
@tab Bandeau de trille
@cindex modification du positionnement des marques de repère
@cindex marques de repère, modification du positionnement
-Vous aurez remarqué que les numéros de mesure, l'indication métronomique
-et les marques de répétition n'apparaissent pas. Par défaut, ils sont
-créés dans le contexte @code{Score} et leur
-@code{outside-staff-priority} est ignorée face aux objets qui sont créés
-dans le contexte @code{Staff}. Si vous voulez faire apparaître les
-numéros de mesure, l'indication métronomique ou les marques de
-répétition conformément à la valeur de leur
-@code{outside-staff-priority}, il vous faudra retirer respectivement le
-@code{Bar_number_engraver}, le @code{Metronome_mark_engraver} ou le
-@code{Mark_engraver} du contexte @code{Score} et les placer en tête du
-contexte @code{Staff}. Après quoi ces marques porteront les valeurs de
-@code{outside-staff-priority} par défaut suivantes@tie{}:
-
-@multitable @columnfractions .3 .3
-@headitem Objet de rendu @tab Priorité
-@item @code{RehearsalMark} @tab @code{1500}
-@item @code{MetronomeMark} @tab @code{1000}
-@item @code{BarNumber} @tab @code{ 100}
-@end multitable
-
Si les valeurs de @code{outside-staff-priority} par défaut ne donnent
pas les résultats escomptés, il suffit de modifier la priorité
de l'un de ces objets. Supposons que vous vouliez placer l'indication
d'octaviation sous le bandeau de texte, dans l'exemple précédent. Tout
ce que nous devons faire, c'est regarder la priorité de
-@code{OttavaBracket} dans la RPI ou dans le tableau plus haut, et la
-ramener à une valeur plus basse que celle de @code{TextSpanner}, en
-gardant à l'esprit que @code{OttavaBracket} est créé dans le contexte
-@code{Staff}@tie{}:
+@code{OttavaBracket} dans la Référence des propriétés internes ou dans
+le tableau plus haut, et la ramener à une valeur plus basse que celle de
+@code{TextSpanner}, en gardant à l'esprit que @code{OttavaBracket} est
+créé dans le contexte @code{Staff}@tie{}:
@cindex TextSpanner, exemple de dérogation
@cindex bound-details, exemple d'utilisation de la propriété
résultat ne soit pas toujours formidable. Imaginons que nous voulions
placer @qq{Text3} au-dessus de @qq{Text4} dans l'exemple de la section
@ref{Comportement automatique}, plus haut. Il nous suffit pour cela de
-regarder dans la RPI ou dans le tableau plus haut la priorité de
-@code{TextScript}, et d'augmenter la priorité de @qq{Text3} jusqu'à une
-valeur très haute@tie{}:
+regarder dans la Référence des propriétés internes ou dans le tableau
+plus haut la priorité de @code{TextScript}, et d'augmenter la priorité
+de @qq{Text3} jusqu'à une valeur très haute@tie{}:
@cindex TextScript, exemple de dérogation
@cindex outside-staff-priority, exemple d'utilisation de la propriété
\acciaccatura e8\( d8 c~ c d c d\)
@end lilypond
-Voici un autre exemple, tiré du début de la partie de main gauche
-du Prélude de Chopin, Op. 28, No 2. Comme nous pouvons le
-constater, les barres de ligature chevauchent les notes les plus
-hautes@tie{}:
+Voici un autre exemple. Comme nous pouvons le constater, les barres de
+ligature chevauchent les liaisons de tenue@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
+ \time 4/2
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
+ >>
}
@end lilypond
@noindent
On peut y remédier en déplaçant manuellement vers le haut les deux
-extrémités des ligatures de croches, non plus à 2 intervalles au-dessus
-de la ligne médiane mais, disons, à 3@tie{}:
+extrémités des ligatures de croches, non plus à 1,81 intervalle
+au-dessous de la ligne médiane mais, disons, à 1@tie{}:
@cindex Beam, exemple de dérogation
@cindex positions, exemple d'utilisation de la propriété
@lilypond[quote,verbatim,fragment,ragged-right]
{
- \clef "bass"
+ \time 4/2
<<
- \override Beam #'positions = #'(3 . 3)
- { b,8 ais, b, g, }
- \\
- { e,8 g e, g }
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ {
+ \override Beam #'positions = #'(-1 . -1)
+ e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g''
+ }
+ >>
+ <<
+ { c'1 ~ c'2. e'8 f' }
+ \\
+ { e''8 e'' e'' e'' e'' e'' e'' e'' f''2 g'' }
>>
- << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
}
@end lilypond
@noindent
Vous remarquerez que la retouche continue de s'appliquer au
second bloc de croches de la première voix mais qu'il ne s'applique
-à aucune barre de la deuxième voix.
+à aucune mesure de la deuxième voix.
@subheading la propriété force-hshift
* Utilisation de variables dans les retouches::
* Feuilles de style::
* Autres sources de documentation::
-* Options ralentissant le traitement::
* Retouches avancées avec Scheme::
@end menu
-@node Options ralentissant le traitement
-@subsection Options ralentissant le traitement
-@translationof Avoiding tweaks with slower processing
-
-LilyPond peut effectuer des vérifications supplémentaires lors du
-traitement des fichiers@tie{}; cependant, le rendu nécessitera alors
-plus de temps. En contrepartie, il y aura moins d'ajustements manuels à
-réaliser. Si une indication textuelle ou des paroles débordent dans la
-marge, ces vérifications auront pour effet de resserrer la ligne
-suffisamment pour faire tenir le texte entre les marges.
-
-Pour pouvoir fonctionner en toutes circonstances, ces vérifications
-doivent être activées@tie{}; il faut pour cela placer les retouches dans
-un @code{\context} à l'intérieur d'un bloc @code{\layout}, plutôt que
-directement dans le fragment musical, comme ceci@tie{}:
-
-@example
-\score @{
- @{ @dots{}notes@dots{} @}
- \layout @{
- \context @{
- \Score
- % Pour s'assurer que les indications textuelles et paroles
- % seront à l'intérieur des marges de la page.
- \override PaperColumn #'keep-inside-line = ##t
- \override NonMusicalPaperColumn #'keep-inside-line = ##t
- @}
- @}
-@}
-@end example
-
-
@node Retouches avancées avec Scheme
@subsection Retouches avancées avec Scheme
@translationof Advanced tweaks with Scheme
@code{mensural}.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Stem #'flag-style = #'mensural
+\override Flag #'style = #'mensural
\override Stem #'thickness = #1.0
\override NoteHead #'style = #'mensural
\autoBeamOff
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: a6b5eea83ddcdd8e1fd0760db385176ff9b2b1cd
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@seealso
Manuel de notation :
-@ref{Direction et positionnement}
+@ref{Direction et positionnement}.
Morceaux choisis :
-@rlsrnamed{Editorial annotations,Annotations éditoriales}.
+@rlsrnamed{Editorial annotations, Annotations éditoriales}.
Référence des propriétés internes :
@rinternals{FingeringEvent},
@rinternals{New_fingering_engraver},
@rinternals{Fingering}.
+@knownissues
+La syntaxe @samp{@var{note}-@var{digit}} ne prend pas en charge, par
+défaut, les chiffres supérieurs à 9.
+
@node Dictée à trous
@unnumberedsubsubsec Dictée à trous
Les couleurs de X11 ne sont pas toutes perceptibles dans un navigateur
internet. Aussi nous vous recommandons, dans le cadre d'une
-présentation multimedia, d'utiliser des couleurs de base @code{#blue},
-@code{#green}, @code{#red} -- bleu, vert, rouge.
+présentation multimedia, d'utiliser des couleurs de base @code{blue},
+@code{green}, @code{red} -- bleu, vert, rouge.
Vous ne pouvez pas coloriser des notes à l'intérieur d'un accord avec
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c
+ Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
traditionnelle. La guitare et le banjo sont des instruments
transpositeurs, sonnant une octave au-dessous de ce qui est écrit. Les
partitions pour ces instruments utilisent donc la clé de sol ottava
-bassa @code{"treble_8"}. Vous pourrez trouver ailleurs dans la
+bassa @code{"treble_8"} -- ou une instruction @code{\transposition c}
+pour un rendu MIDI correct. Vous pourrez trouver ailleurs dans la
documentation d'autres éléments aussi utilisés par les instruments à
cordes frettées@tie{}:
La notation en tablature est utilisée pour certains instruments à cordes
pincées. Les hauteurs n'y sont pas indiquées par des têtes de note,
mais par des chiffres ou autres symboles, qui indiquent sur quelle
-corde, et à quelle case chaque note doit être jouée. Dans certaines
-limites, LilyPond vous permet d'écrire des tablatures.
-
-Chaque numéro de corde associé à une note doit être précédé d'une barre
-oblique inverse (ou @qq{antislash}) suivi d'un nombre. Par défaut, la
-première corde est la plus aiguë, et les cordes suivent l'accordage
-traditionnel d'une guitare (à six cordes). Les notes sont imprimées
-sous forme de tablature, dans les contextes @code{TabStaff} et
+corde et à quelle case chaque note doit être jouée. Des notes devant
+être jouées simultanément seront alors alignées verticalement.
+
+Par défaut, la première corde est la plus aiguë et correspond à la ligne
+supérieure du @code{TabStaff}. Les cordes suivent par défaut
+l'accordage traditionnel d'une guitare (à six cordes). Les notes sont
+imprimées sous forme de tablature, dans les contextes @code{TabStaff} et
@code{TabVoice}.
-@lilypond[quote,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,verbatim]
\new TabStaff \relative c' {
a,8 a' <c e> a
d, a' <d f> a
}
@end lilypond
-@funindex minimumFret
-
@cindex cases
@cindex frets
-Quand aucune corde n'est précisée, LilyPond choisit automatiquement la
-corde pour laquelle la position est la moins élevée et qui donne un
-numéro de case supérieur ou égal à la valeur de la propriété
-@code{minimumFret}. La valeur par défaut de cette propriété est fixée à
-0, ce qui correspond aux cordes à vide.
+@funindex minimumFret
+
+Quand aucune corde n'est précisée -- à l'aide d'une barre oblique
+inverse (ou @qq{antislash}) précédant son numéro --, LilyPond choisit
+automatiquement la corde pour laquelle la position est la moins élevée
+et qui donne un numéro de case supérieur ou égal à la valeur de la
+propriété @code{minimumFret}. La valeur par défaut de cette propriété
+est fixée à 0, ce qui correspond aux cordes à vide.
@lilypond[quote,ragged-right,verbatim]
>>
@end lilypond
-Lorsqu'un liaison de prolongation intervient lors d'un saut de ligne, la
-note est répétée, entre parenthèses. Il en va de même pour la seconde
-alternative d'une répétition.
+@funindex \tabChordRepetition
+
+La répétition d'une construction en accord s'indique par un @code{q}.
+Cette fonctionnalité est opérationnelle en mode tablature dès lors que
+vous aurez préalablement fait appel à la commande
+@code{\tabChordRepetition}. Les numéros de corde indiqués dans votre
+accord seront alors préservés et reproduits à chaque répétition.
+
+@lilypond[quote,verbatim]
+\tabChordRepetition
+
+guitar = \relative c' {
+ r8 <gis\4 cis\3 b\2>~ q4 q8~ q q4
+}
+
+\new StaffGroup <<
+ \new Staff {
+ \clef "treble_8"
+ \override Voice.StringNumber #'transparent = ##t
+ \guitar
+ }
+ \new TabStaff {
+ \guitar
+ }
+>>
+@end lilypond
+
+Lorsqu'une liaison de prolongation intervient à l'occasion d'un saut de
+ligne, la note est répétée, entre parenthèses. Il en va de même pour la
+seconde alternative d'une répétition.
@lilypond[quote,ragged-right,verbatim]
ties = \relative c' {
@cindex glissando, indication en tablature
@cindex tablature et glissando
+@funindex \harmonic
+@funindex \harmonicByFret
+@funindex \harmonicByRatio
+
Les indications de sons harmoniques ainsi que les glissandi
peuvent être ajoutés aux tablatures.
+@lilypond[verbatim,quote]
+firstHarmonic = {
+ <d'\4\harmonic>4
+ <g'\3\harmonic>4
+ <b'\2\harmonic>2
+}
+\score {
+ <<
+ \new Staff { \firstHarmonic }
+ \new TabStaff { \firstHarmonic }
+ >>
+}
+@end lilypond
+
+Vous noterez que la commande @code{\harmonic} intervient toujours dans
+une construction d'accord. Ceci ne fonctionne donc que pour une
+harmonique au douzième fret d'une corde à vide. Toute autre harmonique
+devrait être définie directement par LilyPond. Vous pouvez l'y aider en
+indiquant la case où le doigt viendrait se placer sur le manche.
+
+@lilypond[verbatim,quote]
+fretHarmonics = {
+ \harmonicByFret #5 d16\4
+ \harmonicByFret #4 d16\4
+ \harmonicByFret #3 d8\4
+ \harmonicByFret #5 <g\3 b\2>2.
+}
+\score {
+ <<
+ \new Staff { \fretHarmonics }
+ \new TabStaff { \fretHarmonics }
+ >>
+}
+@end lilypond
-@lilypond[fragment, verbatim, quote, relative=1]
-\new TabStaff {
- \new TabVoice {
- <c g'\harmonic> d\2\glissando e\2
- }
+Une harmonique peut accessoirement se calculer à partir de la longueur
+de corde par rapport au doigté de cette harmonique.
+
+@lilypond[verbatim,quote]
+ratioHarmonics = {
+ \harmonicByRatio #1/2 <g\3 b\2 e'\1>4
+ \harmonicByRatio #1/3 <g\3 b\2 e'\1>4
+ \harmonicByRatio #1/4 { g8\3 b8\2 e'4\1 }
+}
+\score {
+ <<
+ \new Staff { \ratioHarmonics }
+ \new TabStaff { \ratioHarmonics }
+ >>
}
@end lilypond
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{polyphony-in-tablature.ly}
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{open-string-harmonics-in-tablature.ly}
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{fretted-string-harmonics-in-tablature.ly}
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{slides-in-tablature.ly}
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{chord-glissando-in-tablature.ly}
+
@seealso
Manuel de notation :
-@ref{Hampes}.
+@ref{Hampes},
+@ref{Harmoniques},
+@ref{Glissando}.
Morceaux choisis :
@rlsrnamed{Fretted strings,Cordes frettées}.
D'autres accordages prédéfinis sont disponibles@tie{}:
@code{guitar-open-g-tuning}, @code{mandolin-tuning} et
@code{banjo-open-g-tuning}. Les accordages prédéfinis sont répertoriés
-dans le fichier @file{scm/output-lib.scm}.
+dans le fichier @file{ly/string-tuning-init.ly}.
+
+@funindex contextStringTunings
+@funindex \contextStringTunings
-L'accordage est constitué par une liste Scheme des hauteurs de notes
+LilyPond vous permet de créer n'importe quel accordage. L'accordage du
+contexte en cours se détermine à l'aide de la fonction
+@code{\contextStringTuning}. Celle-ci prend deux arguments@tie{}: une
+représentation symbolique qui gardera l'accordage en mémoire, et une
+construction d'accord définissant la hauteur des différentes cordes.
+Les hauteurs fournies s'expriment impérativement en mode absolu -- voir
+@ref{Hauteurs avec octave absolue}. La corde ayant le numéro le plus
+élevé (généralement la note la plus basse) est mentionnée en premier.
+
+L'accordage est constitué par une liste Scheme des hauteurs de note
correspondant aux cordes à vide, une note pour chaque corde, classée par
numéro de corde de 1 à n, où la corde 1 est la plus haute dans la
tablature et n la plus basse. Cela revient généralement à classer les
cordes de la plus aiguë à la plus grave, mais certains instruments
(comme le ukulele) n'ont pas les cordes classées par hauteur.
-Dans cette liste, la hauteur des notes est représentée par l'intervalle,
-exprimé en demi-tons, du do central jusqu'à la note de la corde à vide.
-Elle doit donc être représentée par un nombre entier. LilyPond calcule
-la note correspondant à chaque corde en ajoutant cet intervalle au do
-central.
-Lilypond calcule automatiquement le nombre de cordes à représenter dans
-la tablature (@code{TabStaff}) en comptant le nombre d'éléments définis
-dans le @code{stringTunings}.
+Nous pouvons ainsi définir par exemple l'accordage d'un instrument à
+quatre cordes accordées do sol ré la, et en anglais@tie{}:
+@code{a''}, @code{d''}, @code{g'}, et @code{c'}@tie{}:
+
+
+@lilypond[quote,verbatim]
+mynotes = {
+ c'4 e' g' c'' |
+ e''4 g'' b'' c'''
+}
+
+<<
+ \new Staff {
+ \clef treble
+ \mynotes
+ }
+ \new TabStaff {
+ \contextStringTuning #'custom-tuning <c' g' d'' a''>
+ \mynotes
+ }
+>>
+@end lilypond
+
+
+La propriété @code{stringTuning} permet aussi au @code{FretBoards} de
+calculer automatiquement les diagrammes de frets.
+
+@funindex makeStringTuning
+@funindex \makeStringTuning
-N'importe quel accordage peut donc être créé. Par exemple, nous pouvons
-définir l'accordage d'un instrument à quatre cordes accordées do sol ré
-la, donc de la plus aiguë à la plus grave et en anglais@tie{}:
-@code{a''}, @code{d''}, @code{g'}, et @code{c'}@tie{}:
+L'accordage fait partie de la clé permettant d'identifier les
+diagrammes prédéfinis -- voir @ref{Tablatures prédéfinies}. La fonction
+@code{\makeStringTuning} permet d'établir un accordage sans pour autant
+définir la propriété @code{stringTunings} dans le contexte en cours.
+Les arguments à fournir à la commande @code{\makeStringTuning} sont
+l'identifiant de ce nouvel accordage et l'accord dont il est constitué.
+Nous pourrions donc écrire l'exemple précédent ainsi@tie{}:
+@lilypond[quote,verbatim]
+\makeStringTuning #'custom-tuning <c' g' d'' a''>
+
+mynotes = {
+ c'4 e' g' c'' |
+ e''4 g'' b'' c'''
+}
+
+<<
+ \new Staff {
+ \clef treble
+ \mynotes
+ }
+ \new TabStaff {
+ \set TabStaff.stringTunings = #custom-tuning
+ \mynotes
+ }
+>>
+@end lilypond
+
+L'accordage est constitué, en interne, par une liste Scheme des hauteurs
+de notes correspondant aux cordes à vide, une note pour chaque corde,
+classée par numéro de corde de 1 à n, où la corde 1 est la plus haute
+dans la tablature et n la plus basse. Cela revient généralement à
+classer les cordes de la plus aiguë à la plus grave, mais certains
+instruments (comme le ukulele) n'ont pas les cordes classées par hauteur.
+
+Chaque hauteur de corde incluse dans un accordage est un objet LilyPond
+de type @emph{pitch}. Les objets @emph{pitch} sont créés par la fonction
+@code{ly:make-pitch} -- voir @ref{Fonctions Scheme}.
+
+En cas de besoin, vous pouvez créer un accordage en Scheme pur. Notez
+bien qu'il ne sera pas enregistré comme objet. Voici comment recréer
+l'accordage des exemples précédents@tie{}:
@lilypond[quote,verbatim]
mynotes = {
- c'4 e' g' c'' |
- e'' g'' b'' c'''
+ c'4 e' g' c'' |
+ e''4 g'' b'' c'''
}
<<
>>
@end lilypond
+Lilypond calcule automatiquement le nombre de cordes à représenter dans
+la tablature (@code{TabStaff}) ainsi que dans le @code{FretBoard} en
+comptant le nombre d'éléments définis dans le @code{stringTunings}.
+
+@cindex moderntab clef
+@cindex clef, moderntab
+@cindex clef, tab
+@cindex tab clef
+
+LilyPond dispose d'une clef de tablature moderne.
+
+@lilypond[quote,ragged-right,verbatim]
+\new TabStaff {
+ \clef moderntab
+ <a, e a>1
+ \break
+ \clef tab
+ <a, e a>1
+}
+@end lilypond
+
+Cette clef moderne prend en charge les tablatures de quatre à sept cordes.
+
@seealso
Fichiers d'initialisation :
-@file{scm/output-lib.scm}.
+@file{ly/string-tuning-init.ly},
+@file{scm/tablature.scm}.
Morceaux choisis :
@rlsrnamed{Fretted strings,Cordes frettées}.
@cindex fret, diagrammes personnalisés
@cindex diagrammes personnalisés de fret
-On peut ajouter des diagrammes d'accords au-dessus de n'importe quelle
+On peut ajouter des diagrammes d'accord au-dessus de n'importe quelle
note, en tant qu'objets @code{\markup}. Ces objets contiennent toutes
les informations du diagramme d'accord. Il y a pour les définir trois
interfaces "diagramme d'accord" (@emph{fret-diagram} en anglais)@tie{}:
Ces trois interfaces produiront des diagrammes similaires mais
permettent des niveaux de personnalisation différents. Des détails à
propos des interfaces de type @code{\markup}
-peuvent être trouvés dans @ref{Text markup commands}.
+peuvent être trouvés à l'annexe @ref{Instrument Specific Markup}.
-Dans l'interface standard des diagrammes d'accords, on indiquera le
+Dans l'interface standard des diagrammes d'accord, on indiquera le
numéro de corde et le numéro de case pour chaque point placé sur une corde.
Les cordes à vide et étouffées peuvent aussi être indiquées.
@funindex fret-diagram-terse
@funindex \fret-diagram-terse
-Dans l'interface @code{fret-diagram-terse}, les numéros de cordes sont
-omis@tie{}; les numéros de cordes sont induits par la présence de
+Dans l'interface @code{fret-diagram-terse}, les numéros de corde sont
+omis@tie{}; les numéros de corde sont induits par la présence de
points-virgules. Il y a un point-virgule pour chaque corde du
diagramme. Le premier point-virgule correspondant au plus haut numéro
de corde, le dernier à la première corde. Les cordes étouffées, les
@code{fret-diagram-terse}.
@cindex fret-diagram-verbose markup
+@cindex capo
@funindex fret-diagram-verbose
@funindex \fret-diagram-verbose
@snippets
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{changing-fret-orientations.ly}
+
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{customizing-markup-fret-diagrams.ly}
@seealso
Manuel de notation :
-@ref{Text markup commands}.
+@ref{Instrument Specific Markup}.
Morceaux choisis :
@rlsrnamed{Fretted strings,Cordes frettées}.
@unnumberedsubsubsec Tablatures prédéfinies
@translationof Predefined fret diagrams
-
@cindex fret, diagrammes
@cindex accord, diagrammes
@funindex FretBoards
@funindex stringTunings
-Les diagrammes d'accords peuvent être affichés en utilisant le contexte
+Les diagrammes d'accord peuvent être affichés en utilisant le contexte
@code{FretBoards}. Par défaut le contexte @code{FretBoards} affichera
-des diagrammes d'accords stockés dans une table de correspondance@tie{}:
+des diagrammes d'accord stockés dans une table de correspondance@tie{}:
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
}
@end lilypond
+Les diagrammes de fret propres à la mandoline se trouvent dans le
+fichier @file{predefined-mandolin-fretboards.ly}.
+
+@lilypond[verbatim, ragged-right, quote]
+\include "predefined-mandolin-fretboards.ly"
+
+myChords = \chordmode { c1 c:m7.5- c:aug }
+
+\new ChordNames {
+ \myChords
+}
+
+\new FretBoards {
+ \set stringTunings = #mandolin-tuning
+ \myChords
+}
+@end lilypond
+
Les notes des accords peuvent être entrées aussi bien comme musique
simultanée qu'en utilisant le mode accord (voir
@ref{Généralités sur le mode accords}).
@funindex \chordmode
Il est courant d'afficher simultanément le nom des accords et les
-diagrammes d'accords correspondants.
-Ceci s'obtient en mettant en parallèle un contexte @code{ChordNames} avec
-un contexte @code{FretBoards} et en affectant aux deux la même musique.
+diagrammes d'accord correspondants. Ceci s'obtient en mettant en
+parallèle un contexte @code{ChordNames} et un contexte
+@code{FretBoards}, tout en affectant aux deux la même musique.
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
@cindex fret et transposition
@cindex diagrammes de fret et transposition
-Les diagrammes d'accords prédéfinis sont transposables tant qu'il y a
+Les diagrammes d'accord prédéfinis sont transposables tant qu'il y a
un diagramme correspondant à l'accord transposé dans la base des
-diagrammes d'accords.
+diagrammes d'accord.
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
La table des diagrammes d'accord contient sept types d'accord (majeur,
mineur, augmenté, diminué, septième de dominante, majeur sept, mineur
sept) pour chacune des 17 fondamentales possibles. Une liste complète
-des diagrammes d'accords prédéfinis se trouve dans
+des diagrammes d'accords prédéfinis se trouve à l'annexe
@ref{Tablatures prédéfinies}. S'il n'y a pas d'entrée dans la table
pour un accord donné, le graveur @code{Fretboard_engraver} calculera le
diagramme d'accord en utilisant la fonctionnalité automatique décrite
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
-\storePredefinedDiagram #default-fret-table \chordmode {c:9}
+\storePredefinedDiagram #default-fret-table
+ \chordmode { c:maj9 }
#guitar-tuning
- #"x;3-2;2-1;3-3;3-4;x;"
+ #"x;3-2;o;o;o;o;"
-mychords = \chordmode{
- c1 c:9
+mychords = \chordmode {
+ c1 c:maj9
}
<<
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
-\storePredefinedDiagram #default-fret-table \chordmode { c'' }
+\storePredefinedDiagram #default-fret-table
+ \chordmode { c'' }
#guitar-tuning
#(offset-fret 2 (chord-shape 'bes guitar-tuning))
@lilypond[verbatim, ragged-right, quote]
\include "predefined-guitar-fretboards.ly"
-% add a new chord shape
+% Add a new chord shape
\addChordShape #'powerf #guitar-tuning #"1-1;3-3;3-4;x;x;x;"
% add some new chords based on the power chord shape
-\storePredefinedDiagram #default-fret-table \chordmode {f'}
+\storePredefinedDiagram #default-fret-table
+ \chordmode { f'' }
#guitar-tuning
#(chord-shape 'powerf guitar-tuning)
-\storePredefinedDiagram #default-fret-table \chordmode {g'}
+\storePredefinedDiagram #default-fret-table
+ \chordmode { g'' }
#guitar-tuning
#(offset-fret 2 (chord-shape 'powerf guitar-tuning))
mychords = \chordmode{
- f1 f' g g'
+ f1 f'' g g''
}
<<
@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
{defining-predefined-fretboards-for-other-instruments.ly}
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{chordchanges-for-fretboards.ly}
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{fretboards-alternate-tables.ly}
+
@seealso
Manuel de notation :
Fichiers d'initialisation :
@file{ly/predefined-guitar-fretboards.ly},
-@file{ly/predefined-guitar-ninth-fretboards.ly}.
+@file{ly/predefined-guitar-ninth-fretboards.ly},
+@file{ly/predefined-ukulele-fretboards.ly},
+@file{ly/predefined-mandolin-fretboards.ly}.
Morceaux choisis :
@rlsrnamed{Fretted strings,Cordes frettées}.
prédéfinies@tie{}:
@lilypond[quote,ragged-right,verbatim]
-
-\storePredefinedDiagram #default-fret-table <c e g c' e'>
+\storePredefinedDiagram #default-fret-table
+ <c e g c' e'>
#guitar-tuning
- #"x;3-1-(;5-2;5-3;5-4;3-1-1);"
+ #"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
<<
\context ChordNames {
- \chordmode {
- c1 c c
- }
+ \chordmode {
+ c1 c c
+ }
}
\context FretBoards {
<c e g c' e'>1
\predefinedFretboardsOff
- <c e g c' e'>
+ <c e g c' e'>1
\predefinedFretboardsOn
- <c e g c' e'>
+ <c e g c' e'>1
}
\context Staff {
\clef "treble_8"
<c e g c' e'>1
- <c e g c' e'>
- <c e g c' e'>
+ <c e g c' e'>1
+ <c e g c' e'>1
}
>>
@end lilypond
-Parfois le calculateur se trouvera incapable de trouver un diagramme
+Le calculateur se trouvera parfois incapable de trouver un diagramme
d'accord convenable. On peut souvent y remédier en assignant les notes
aux cordes. Dans bien des cas, il suffit de placer manuellement une
-seule note pour que les autres soient alors placées de maniére
+seule note pour que les autres soient alors placées de manière
appropriée par le contexte @code{FretBoards}.
@cindex fret, ajout de doigtés aux diagrammes
@lilypond[quote, verbatim]
<<
\context ChordNames {
- \chordmode {
- c1 d:m
- }
+ \chordmode {
+ c1 d:m
+ }
}
\context FretBoards {
< c-3 e-2 g c'-1 e' > 1
@lilypond[quote, verbatim]
<<
\context ChordNames {
- \chordmode {
- d1:m d:m
- }
+ \chordmode {
+ d1:m d:m
+ }
}
\context FretBoards {
< d a d' f'>
Les doigtés de main droite @var{p-i-m-a} doivent être entrés dans une
construction de type accord @code{<>} même s'il n'y a qu'une seule note.
-@warning{Un trait d'union @strong{doit} suivre la note et une espace
+@warning{Un trait d'union @strong{doit} s'insérer entre la note et
+l'instruction @code{@bs{}rightHandFinger}, et une espace
@strong{doit} précéder la fermeture de la construction par un @code{>}.}
@menu
* Indication de la position et du barré::
* Indication des harmoniques et notes étouffées::
+* Indication de power chord::
@end menu
@node Indication de la position et du barré
Cet exemple montre comment indiquer les positions et les barrés@tie{}:
-@lilypond[quote,ragged-right,fragment,verbatim,relative=0]
+@lilypond[quote,ragged-right,verbatim,relative=0]
\clef "treble_8"
b16 d g b e
\textSpannerDown
notes étouffées et les sons harmoniques. Les sons harmoniques sont
souvent détaillés grâce à des indications textuelles.
-@lilypond[quote,ragged-right,fragment,verbatim]
+@lilypond[quote,ragged-right,verbatim]
\relative c' {
\clef "treble_8"
- \override Staff.NoteHead #'style = #'cross
- g8 a b c b4
\override Staff.NoteHead #'style = #'harmonic-mixed
d^\markup { \italic { \fontsize #-2 { "harm. 12" }}} <g b>1
}
@end lilypond
+Les notes étouffées, ou @notation{notes fantômes} se recontrent aussi
+bien sur une portée normale que dans une tablature@tie{}:
+
+@lilypond[quote,ragged-right,verbatim]
+music = \relative c' {
+ < a\3 \deadNote c\2 a'\1 >4
+ < b\3 \deadNote d\2 b'\1 >
+ < c\3 \deadNote e\2 c'\1 >
+ \deadNotesOn
+ \times 2/3 { g8 b e }
+ \deadNotesOff
+ < a,\3 c\2 e\1 >1
+}
+\new StaffGroup <<
+ \new Staff {
+ \clef "treble_8"
+ \music
+ }
+ \new TabStaff {
+ \music
+ }
+>>
+@end lilypond
+
+Le @emph{palm mute}, appelé aussi parfois @emph{chop}, est une technique
+de jeu pour la guitare électrique@tie{}; elle est connue sous le nom de
+pizzicato par les joueurs de guitare classique. Elle consiste à poser
+la main droite sur les cordes juste au-dessus du chevalet, de façon à
+étouffer plus ou moins légèrement les notes. LilyPond permet d'indiquer
+ce style de jeu en affectant un profil spécifique aux têtes de notes.
+
+@lilypond[quote,ragged-right,verbatim]
+\new Voice { % Warning: explicit Voice instantiation is
+ % required to have palmMuteOff work properly
+ % when palmMuteOn comes at the beginning of
+ % the piece.
+ \relative c, {
+ \clef "G_8"
+ \palmMuteOn
+ e8^\markup { \musicglyph #"noteheads.u2do" = palm mute }
+ < e b' e > e
+ \palmMuteOff
+ e e \palmMute e e e |
+ e8 \palmMute { e e e } e e e e |
+ < \palmMute e b' e >8 \palmMute { e e e } < \palmMute e b' e >2
+ }
+}
+@end lilypond
+
@seealso
Morceaux choisis :
@ref{Têtes de note}.
+@node Indication de power chord
+@unnumberedsubsubsec Indication de @emph{power chord}
+@translationof Indicating power chords
+
+@funindex powerChords
+@funindex \powerChords
+
+@cindex power chords
+@cindex chords, power
+
+Les @emph{power chords} -- terme anglais signifiant littéralement
+@qq{accords de puissance} -- s'indiquent aussi bien en mode accord que
+dans une construction en accord@tie{}:
+
+@lilypond[quote,ragged-right,verbatim]
+ChordsAndSymbols = {
+ \chordmode {
+ \powerChords
+ e,,1:1.5
+ a,,1:1.5.8
+ \set minimumFret = #8
+ c,1:1.5
+ f,1:1.5.8
+ }
+ \set minimumFret = #5
+ <a, e>1
+ <g d' g'>1
+}
+\score {
+ <<
+ \new ChordNames {
+ \ChordsAndSymbols
+ }
+ \new Staff {
+ \clef "treble_8"
+ \ChordsAndSymbols
+ }
+ \new TabStaff {
+ \ChordsAndSymbols
+ }
+ >>
+}
+@end lilypond
+
+Le symbole de @emph{power chord} est désactivé dès lors que survient un
+accord traditionnel@tie{}:
+
+@lilypond[quote,ragged-right,verbatim]
+mixedChords = \chordmode {
+ c,1
+ \powerChords
+ b,,1:1.5
+ fis,,1:1.5.8
+ g,,1:m
+}
+\score {
+ <<
+ \new ChordNames {
+ \mixedChords
+ }
+ \new Staff {
+ \clef "treble_8"
+ \mixedChords
+ }
+ \new TabStaff {
+ \mixedChords
+ }
+ >>
+}
+@end lilypond
+
+@seealso
+Glossaire musicologique :
+@rglos{power chord}.
+
+Manuel de notation :
+@ref{Extensions et altération d'accords},
+@ref{Impression des noms d'accord}.
+
+Morceaux choisis :
+@rlsrnamed{Fretted strings, Cordes frettées}.
+
+
@node Banjo
@subsection Banjo
@translationof Banjo
Morceaux choisis :
@rlsrnamed{Fretted strings,Cordes frettées}.
+Fichiers d'initialisation :
Les accordages prédéfinis du banjo sont contenus dans le fichier
-@file{scm/output-lib.scm}.
+@file{scm/string-tunings-init.scm}.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: f77212d801fa4603bf596a19cecf5a068f1d9d85
+ Translation of GIT committish: d0c96d3f0b1dca7df98ef5586059965dd46ab16f
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
* Travail sur des fichiers texte::
* Contrôle des sorties::
* Sortie MIDI::
+* Extraction d'information musicale::
@end menu
@node Agencement du code
LilyPond traite des fichiers textuels. Ces fichiers portent par
convention une extension @code{.ly}.
-
@menu
* Structure d'une partition::
* Plusieurs partitions dans un même ouvrage::
* Structure de fichier::
@end menu
+
@node Structure d'une partition
@subsection Structure d'une partition
@translationof Structure of a score
d'un fichier source permet la production d'au moins un fichier dont le
nom sera, par défaut, déduit du fichier source@tie{}: le traitement de
@file{fandangopourelephants.ly} produira donc
-@file{fandangopourelephants.pdf}. Pour de plus amples informations à
-propos du bloc @code{\book}, lisez
+@file{fandangopourelephants.pdf}.
+
+Pour de plus amples informations à propos du bloc @code{\book}, lisez
@ref{Plusieurs partitions dans un même ouvrage},
@ref{Plusieurs éditions pour une même source} et
@ref{Structure de fichier}.
@funindex \bookpart
Plusieurs pièces seront regroupées dans un même @qq{chapitre} à l'aide
-d'un bloc @code{\bookpart}. Les différentes parties sont séparées par
-un saut de page et peuvent comporter un titre à l'instar de l'ouvrage
-dès lors que vous y insérez un bloc @code{\header}.
+d'un bloc @code{\bookpart}. Ces différents @qq{chapitres} sont séparés
+par un saut de page et peuvent comporter un titre à l'instar de
+l'ouvrage dès lors que vous y insérez un bloc @code{\header}.
@example
\bookpart @{
d'un bloc @code{\book} est aussi nécessaire lorsque vous travaillez sur
un document lilypond-book qui reprendrait plusieurs @code{\score}s ou
@code{\markup}s dans un même extrait. Vous pouvez modifier ce
-comportement à l'aide de la variable @code{toplevel-score-handler}
+comportement à l'aide de la variable @code{toplevel-book-handler}
placée en tête.
@ignore
@c FIXME - I cannot read "toplevel-book-handler" in scm/lily.scm -jcm
En mode parole -- @code{lyricmode} -- pour séparer les termes des
commandes @code{\override} et @code{\set}. Précisons à ce sujet qu'en
plus d'ajouter une espace avant et après l'intégralité de la commande,
-vous devrez encadrer d'espace le point et le signe égal qu'elle peut
+vous devrez encadrer d'espaces le point et le signe égal qu'elle peut
contenir, comme dans
@w{@code{\override Score . LyricText #'font-size = #5}}.
son compositeur@tie{}; certains ouvrages divulguent beaucoup plus
d'information.
-
@menu
-* Création de titres::
+* Création de titres et entête ou pied de page::
* Titrages personnalisés::
* Référencement des numéros de page::
* Table des matières::
@end menu
-@node Création de titres
-@subsection Création de titres
-@translationof Creating titles
-
-Des éléments de titrage peuvent s'attacher à un bloc @code{\score}, une
-partie -- créée par un bloc @code{\bookpart} -- ou bien un ouvrage
-entier créé par un bloc @code{\book}.
-
-Les différents éléments du titrage sont contenus dans un bloc
-@code{\header}. Un ouvrage complet peut comporter@tie{}:
+@node Création de titres et entête ou pied de page
+@subsection Création de titres et entête ou pied de page
+@translationof Creating titles headers and footers
-@table @code
-@funindex dedication
-@item dedication
-Le dédicataire de l'œuvre, centré en haut de la première page.
-
-@funindex title
-@item title
-Le titre de l'œuvre, centré en dessous de la dédicace.
+@menu
+* Contenu des blocs de titrage::
+* Mise en forme par défaut des titrages::
+* Mise en forme par défaut des entête et pied de page::
+@end menu
-@funindex subtitle
-@item subtitle
-Le sous-titre, centré sous le titre.
-@funindex subsubtitle
-@item subsubtitle
-Un niveau supplémentaire de sous-titre, centré en dessous du sous-titre.
+@node Contenu des blocs de titrage
+@unnumberedsubsubsec Contenu des blocs de titrage
+@translationof Title blocks explained
-@funindex poet
-@item poet
-Le poète, parolier ou librétiste, aligné à gauche en dessous du
-deuxième sous-titre.
+@c TODO: figure out how \bookpart titles work
-@funindex instrument
-@item instrument
-L'instrument, centré en dessous du deuxième sous-titre. Il sera rappelé
-sur les pages suivant la première, centré sur la ligne d'entête.
+Il existe en fait deux types de blocs de titrage@tie{}: un bloc pour
+contenir le titre principal qui doit apparaître avant le tout premier
+@code{\score} d'un ouvrage, et un autre attaché à chacun des blocs
+@code{\score} qui le composent. Dans les deux cas, les champs qui
+composent un bloc de titrage se saisissent dans un bloc @code{\header}.
-@funindex composer
-@item composer
-Le compositeur, aligné à droite en dessous du deuxième sous-titre.
+Lorsque l'ouvrage ne comporte qu'un seul morceau, le bloc @code{\header}
+peut se placer en dehors ou au sein même du bloc @code{\score}.
-@funindex meter
-@item meter
-Le libellé du tempo, aligné à gauche sous le poète.
+Dans le cas où le bloc @code{\header} est défini à l'intérieur du bloc
+@code{\score}, seuls les champs @code{piece} et @code{opus} seront
+imprimés.
-@funindex arranger
-@item arranger
-L'arrangeur, aligné à droite sous le compositeur.
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\score {
+ { c'4 }
+ \header {
+ title = "title" % not printed
+ piece = "piece"
+ opus = "opus"
+ }
+}
+@end lilypond
-@funindex piece
-@item piece
-La pièce ou le mouvement, aligné à gauche sous le tempo.
+@funindex print-all-headers
+@noindent
+Vous pouvez modifer ce comportement et imprimer tous les champs d'un
+bloc @code{\header} défini dans un bloc @code{\score} en ajoutant
-@funindex opus
-@item opus
-L'opus ou le numéro au catalogue, aligné à droite sous l'arrangeur.
+@example
+\paper@{
+ print-all-headers = ##t
+@}
+@end example
-@cindex page breaks, forcing
-@funindex breakbefore
-@item breakbefore
-Ce commutateur (activé par ##t@tie{}; ##f pour le désactiver) permet de
-forcer le saut de page avant d'afficher les titres.
+@warning{N'oubliez pas que lorsqu'il est placé à l'intérieur d'un bloc
+@code{@bs{}score}, le bloc @code{@bs{}header} doit impérativement se
+trouver @strong{à la suite} de l'expression musicale.}
-@funindex copyright
-@item copyright
-La notice de droits d'auteur, centrée en pied de la première page. Pour
-imprimer le symbole @emph{copyright}, consultez la rubrique
-@ref{Codage du texte}.
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\header {
+ title = "SUITE I."
+ composer = "J. S. Bach."
+}
-@funindex tagline
-@item tagline
-Mention spéciale imprimée en pied de la dernière page.
+\score {
+ \new Staff \relative g, {
+ \clef bass
+ \key g \major
+ \repeat unfold 2 { g16( d' b') a b d, b' d, } |
+ \repeat unfold 2 { g,16( e' c') b c e, c' e, } |
+ }
+ \header {
+ piece = "Prélude."
+ }
+}
-@end table
+\score {
+ \new Staff \relative b {
+ \clef bass
+ \key g \major
+ \partial 16 b16 |
+ <g, d' b'~>4 b'16 a( g fis) g( d e fis) g( a b c) |
+ d16( b g fis) g( e d c) b(c d e) fis( g a b) |
+ }
+ \header {
+ piece = "Allemande."
+ }
+}
+@end lilypond
-Voici ce que cela peut donner lorsque tout ces champs sont utilisés.
-Les différentes commandes mentionnées à la rubrique
-@ref{Mise en forme du texte} sont opérationnelles pour tous ces
-éléments.
+Tous les champs appartenant au titrage principal d'un ouvrage peuvent se
+reporter dans chaque bloc @code{\score} ou être supprimés
+manuellement@tie{}:
@c KEEP LY
-@lilypond[quote,verbatim,line-width=11.0\cm]
-\paper {
- line-width = 9.0\cm
- paper-height = 10.0\cm
-}
-
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
\book {
+ \paper {
+ print-all-headers = ##t
+ }
\header {
- dedication = "dédié à moi-même"
- title = \markup \center-column { "Première ligne de titre" "Deuxième
- ligne de titre, plus longue" }
- subtitle = "un sous-titre,"
- subsubtitle = #(string-append "sous-sous-titre LilyPond version "
-(lilypond-version))
- poet = "Auteur"
- composer = \markup \center-column { "compositeur" \small "(1847-1973)" }
- texttranslator = "Traduit par"
- meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge
-"r" }
- arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize
-#-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "ngeur" }
- instrument = \markup \bold \italic "instrument"
- piece = "Pièce"
+ title = "DAS WOHLTEMPERIRTE CLAVIER"
+ subtitle = "TEIL I"
+ % Pas de pied en dernière page pour ce livret
+ tagline = ##f
}
-
+ \markup { \vspace #1 }
\score {
- { c'1 }
+ \new PianoStaff <<
+ \new Staff { s1 }
+ \new Staff { \clef "bass" s1 }
+ >>
\header {
- piece = "pièce1"
- opus = "opus1"
+ title = "PRAELUDIUM I"
+ opus = "BWV 846"
+ % Pas de sous-titre pour ce morceau
+ subtitle = ##f
}
}
- \markup {
- et puis...
- }
\score {
- { c'1 }
+ \new PianoStaff <<
+ \new Staff { s1 }
+ \new Staff { \clef "bass" s1 }
+ >>
\header {
- piece = "pièce2"
- opus = "opus2"
+ title = "FUGA I"
+ subsubtitle = "A 4 VOCI"
+ opus = "BWV 846"
+ % Pas de sous-titre pour ce morceau
+ subtitle = ##f
}
}
}
@end lilypond
-Comme nous venons de la voir, vous pouvez multiplier les blocs
-@code{\header}. Lorsqu'un même champ apparaît dans plusieurs blocs,
-LilyPond utilisera le dernier mentionné@tie{}:
+@seealso
+Manuel de notation :
+@ref{Structure de fichier},
+@ref{Mise en forme personnalisée des blocs de titrage}.
-@example
-\header @{
- composer = "Compositeur"
-@}
-\header @{
- piece = "Morceau"
-@}
-\score @{
- \new Staff @{ c'4 @}
- \header @{
- piece = "Nouveau morceau" % remplace le précédent
- @}
-@}
-@end example
-Lorsque le bloc @code{\header} est défini à l'intérieur du bloc
-@code{\score}, seul les champs @code{piece} et @code{opus} seront
-imprimés. Attention cependant à toujours placer le bloc @code{\header}
-après l'expression musicale.
+@node Mise en forme par défaut des titrages
+@unnumberedsubsubsec Mise en forme par défaut des titrages
+@translationof Default layout of book and score title blocks
+
+La mise en forme des blocs de titrage est contrôlée par deux variables
+attachées au bloc @code{\paper}@tie{}: @code{bookTitleMarkup} pour le
+bloc @code{\header} principal, et @code{scoreTitleMarkup} pour les blocs
+@code{\header} relevant des blocs @code{\score}.
+
+@c KEEP LY
+@lilypond[papersize=a6,quote,verbatim,noragged-right]
+\header {
+ % Les champs suivants sont centrés
+ dedication = "Dédice"
+ title = "Titre"
+ subtitle = "Sous-titre"
+ subsubtitle = "Sous-sous-titre"
+ instrument = "Instrument"
+
+ % Les champs suivants sont alignés sur le bord gauche
+ poet = "Librettiste"
+ meter = "Tempo"
+
+ % Les champs suivants sont alignés sur le bord droit
+ composer = "Compositeur"
+ arranger = "Arrangeur"
+}
-@lilypond[quote,verbatim,line-width=11.0\cm]
\score {
- { c'4 }
+ { s1 }
\header {
- title = "title" % not printed
- piece = "piece"
- opus = "opus"
+ % Les champs suivants sont en opposition sur la même ligne
+ piece = "Pièce"
+ opus = "Opus"
}
}
@end lilypond
-@funindex print-all-headers
-@noindent
-Vous pouvez modifer ce comportement et imprimer tous les champs d'un
-bloc @code{\header} défini dans un bloc @code{\score} en ajoutant
+@c Is the bit about \null markups true? -mp
-@example
-\paper@{
- print-all-headers = ##t
-@}
-@end example
+Les champs d'un bloc @code{\header} qui n'auront pas été alimentés
+seront remplacés par un @emph{markup} @code{\null} de façon à ne pas
+gaspiller d'espace.
-@cindex copyright
-@cindex tagline
+Par défaut, @code{scoreTitleMarkup} place les champs @code{piece} et
+@code{opus} de part et d'autre sur une même ligne.
-Les pieds de page sont vides, hormis pour la première page qui portera
-la champ @code{copyright} du @code{\header}, et pour la dernière page où
-apparaîtra le @code{tagline}. Celui-ci est par défaut @qq{Music
-engraving by LilyPond (@var{version})}.@footnote{Afin que l'on sache qui
-est capable d'une telle qualité, nous vous saurons gré de ne pas
-suprimer cette mention spéciale, autant que faire se peut.}
+@cindex breakbefore
-Un champ de titrage peut être désactivé@tie{}:
+La variable @code{breakbefore} activée dans un bloc @code{\header} situé
+dans un bloc @code{\score} force le saut de page avant le morceau
+contenu dans ce @code{\score}. Vous pourrez ainsi séparer le titre
+principal de la musique.
-@example
-\header @{
- tagline = ##f
- composer = ##f
-@}
-@end example
+@lilypond[papersize=a8landscape,verbatim,noragged-right]
+\book {
+ \header {
+ title = "This is my Title"
+ subtitle = "This is my Subtitle"
+ copyright = "This is the bottom of the first page"
+ }
+ \score {
+ \repeat unfold 4 { e'' e'' e'' e'' }
+ \header {
+ piece = "This is the Music"
+ breakbefore = ##t
+ }
+ }
+}
+@end lilypond
+
+@seealso
+Manuel d'initiation :
+@rlearning{Organisation des fichiers LilyPond}.
+
+Manuel de notation :
+@ref{Structure de fichier}.
+
+Fichiers d'initialisation :
+@file{ly/titling-init.ly}.
+
+
+@node Mise en forme par défaut des entête et pied de page
+@unnumberedsubsubsec Mise en forme par défaut des entête et pied de page
+@translationof Default layout of headers and footers
+
+Les entête et pied -- @emph{headers} et @emph{footers} -- sont des
+lignes de textes qui apparaîssent en haut et en bas de chaque page,
+indépendamment du texte de l'ouvrage. Ils sont contrôlés par les
+variables suivantes, attachées au bloc @code{\paper}@tie{}:
+
+@itemize
+@item @code{oddHeaderMarkup} -- entête de page impaire
+@item @code{evenHeaderMarkup} -- entête de page paire
+@item @code{oddFooterMarkup} -- pied de page impaire
+@item @code{evenFooterMarkup} -- pied de page paire
+@end itemize
+
+Ces variables @emph{markup} n'accèdent qu'au contenu des champs du bloc
+@code{\header} principal, celui qui s'appliquera à tous les blocs
+@code{\score} du document. Ces variables sont définies dans le fichier
+@file{ly/titling-init.ly}, et sont par défaut@tie{}:
+
+@itemize
+
+@item
+les numéros sont placés en haut à gauche (si pair) ou à droite (si
+impair) de chaque page à compter de la deuxième@tie{};
+
+@item
+le contenu du champ @code{instrument} est centré en haut de chaque page
+à compter de la deuxième@tie{};
+
+@item
+le texte du @code{copyright} est centré au bas de la première
+page@tie{};
+
+@item
+le @code{tagline} -- mention spéciale -- se place au bas de la dernière
+page, ou bien sous le @code{copyright} s'il n'y a qu'une seule page.
+
+@end itemize
+
+@lilypond[papersize=a8landscape]
+\book {
+ \score {
+ \relative c' {
+ c4 d e f
+ }
+ }
+}
+@end lilypond
+
+La mention spéciale se modifie en alimentant le champ @code{tagline} au
+niveau du bloc @code{\header} principal.
+
+@lilypond[papersize=a8landscape,verbatim]
+\book {
+ \header {
+ tagline = "... music notation for Everyone"
+ }
+ \score {
+ \relative c' {
+ c4 d e f
+ }
+ }
+}
+@end lilypond
+
+Pour supprimer le @code{tagline}, il suffit de lui assigner la valeur
+@code{##f}.
@node Titrages personnalisés
@subsection Titrages personnalisés
@translationof Custom headers footers and titles
-Vous pouvez personnaliser, dans le bloc @code{\paper}, la définition des
-variables listées ci-dessous. Leur mise en forme par défaut est
-inscrite dans le fichier d'initialisation @file{../ly/titling-init.ly}.
+@c TODO: somewhere put a link to header spacing info
+@c (you'll have to explain it more in NR 4).
-@table @code
-@funindex bookTitleMarkup
-@item bookTitleMarkup
-Ce titre est apposé au début du document final. Il comprend normalement
-le compositeur et le titre de l'œuvre.
+@menu
+* Mise en forme personnalisée des champs de titrage::
+* Mise en forme personnalisée des blocs de titrage::
+* Mise en forme personnalisée des entête et pied de page::
+@end menu
-@funindex scoreTitleMarkup
-@item scoreTitleMarkup
-Ce titre est attaché à un bloc @code{\score}. Il comprend normalement
-le nom du mouvement -- le champ @code{piece}.
-@funindex oddHeaderMarkup
-@item oddHeaderMarkup
-L'entête des pages impaires.
+@node Mise en forme personnalisée des champs de titrage
+@unnumberedsubsubsec Mise en forme personnalisée des champs de titrage
+@translationof Custom text formatting for title blocks
-@funindex evenHeaderMarkup
-@item evenHeaderMarkup
-L'entête des pages paires. Lorsqu'il n'est pas défini, LilyPond utilise
-celui des pages impaires.
+Toutes les commandes de mise en forme d'un @code{\markup} permettent de
+personnaliser le texte des entête, pied de page et éléments de titre
+contenus dans un bloc @code{\header}.
-Les entêtes comportent par défaut le nom de l'instrument, au centre, et
-le numéro de page, sur le bord extérieur de la page.
+@lilypond[quote,verbatim,noragged-right]
+\score {
+ { s1 }
+ \header {
+ piece = \markup { \fontsize #4 \bold "PRAELUDIUM I" }
+ opus = \markup { \italic "(Excerpt)" }
+ }
+}
+@end lilypond
-@funindex oddFooterMarkup
-@item oddFooterMarkup
-Le pied de page impaire.
+@seealso
+Manuel de notation :
+@ref{Mise en forme du texte}.
-@funindex evenFooterMarkup
-@item evenFooterMarkup
-Le pied de page paire. Lorsqu'il n'est pas défini, LilyPond utilise
-celui des pages impaires.
-Par défaut, le pied de la première page comporte la notice de droits
-d'auteur, et celui de la dernière page la @qq{mention spéciale} -- le
-@code{tagline}.
-@end table
+@node Mise en forme personnalisée des blocs de titrage
+@unnumberedsubsubsec Mise en forme personnalisée des blocs de titrage
+@translationof Custom layout for title blocks
+L'utilisation de commandes @code{\markup} au sein d'un bloc
+@code{\header} permet de modifier aisément l'apparence du texte,
+mais n'influence en rien le positionnement précis des éléments de
+titrage. L'accès au positionnement des champs de titrage est géré par
+les deux variables suivantes, attachées au bloc @code{\paper}@tie{}:
-@cindex \paper
-@cindex header
-@cindex entête
-@cindex footer
-@cindex pied de page
-@cindex mise en page
-@cindex titres
+@itemize
+@item @code{bookTitleMarkup}
+@item @code{scoreTitleMarkup}
+@end itemize
+
+Ces variables sont abordées à la rubrique
+@ref{Mise en forme par défaut des titrages}.
-La définition suivante permt d'obtenir, sur la même ligne, le titre
-aligné à gauche et le compositeur aligné à droite.
+Voici les réglages par défaut de @code{scoreTitleMarkup}, tels que
+définis dans le fichier @file{ly/titling-init.ly}@tie{}:
@example
-\paper @{
- bookTitleMarkup = \markup @{
- \fill-line @{
- \fromproperty #'header:title
- \fromproperty #'header:composer
- @}
+scoreTitleMarkup = \markup @{ \column @{
+ \on-the-fly #print-all-headers @{ \bookTitleMarkup \hspace #1 @}
+ \fill-line @{
+ \fromproperty #'header:piece
+ \fromproperty #'header:opus
@}
@}
+@}
@end example
-Les entêtes et pieds de page sont créés respectivement par les fonctions
-@code{make-header} and @code{make-footer}, que vous pouvez définir au
-sein du bloc @code{\paper}. Leur implémentation est contenue dans les
-fichiers d'initialisation @file{ly/paper-defaults-init.ly} et
-@file{ly/titling-init.ly}.
+Ceci aura donc pour effet de positionner les champs @code{piece} et
+@code{opus} sur la même ligne, en opposition@tie{}:
-Voici comment centrer le numéro en pied de chaque page@tie{}:
+@lilypond[quote,verbatim,noragged-right]
+\score {
+ { s1 }
+ \header {
+ piece = "PRAELUDIUM I"
+ opus = "BWV 846"
+ }
+}
+@end lilypond
-@example
-\paper @{
- print-page-number = ##t
- print-first-page-number = ##t
- oddHeaderMarkup = \markup \fill-line @{ " " @}
- evenHeaderMarkup = \markup \fill-line @{ " " @}
- oddFooterMarkup = \markup @{
- \fill-line @{
- \bold \fontsize #3
- \on-the-fly #print-page-number-check-first
- \fromproperty #'page:page-number-string
- @}
- @}
- evenFooterMarkup = \markup @{
- \fill-line @{
- \bold \fontsize #3
- \on-the-fly #print-page-number-check-first
- \fromproperty #'page:page-number-string
- @}
- @}
-@}
-@end example
+Voici comment positionner le champ @code{piece}, dont nous modifions
+la taille et la graisse, au centre de cette ligne@tie{}:
+
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \fontsize #4 \bold \fromproperty #'header:piece
+ \fromproperty #'header:opus
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "PRAELUDIUM I"
+ opus = "BWV 846"
+ }
+ }
+}
+@end lilypond
+
+Les champs normalement réservés au bloc de titrage principal seront
+reportés au niveau au niveau inférieur dès lors que vous aurez activé
+l'instruction @code{print-all-headers} au sein du bloc @code{\paper}.
+Le principal inconvénient de cette fonction réside dans le fait que les
+champs réservés au bloc @code{\header} principal devront être supprimés
+dans chacun des blocs @code{\score} de votre fichier source -- voir
+@ref{Contenu des blocs de titrage}.
+
+Afin d'éviter ce désagrément, ajoutez le champ que vous désirez voir
+apparaître à la définition de @code{scoreTitleMarkup}. Nous allons,
+dans l'exemple suivant, ajouter au @code{scoreTitleMarkup} le champ
+@code{composer}, normalement associé au @code{bookTitleMarkup}@tie{};
+chaque @code{\score} pourra mentionner un compositeur différent.
+
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \fontsize #4 \bold \fromproperty #'header:piece
+ \fromproperty #'header:composer
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "MENUET"
+ composer = "Christian Petzold"
+ }
+ }
+ \score {
+ { s1 }
+ \header {
+ piece = "RONDEAU"
+ composer = "François Couperin"
+ }
+ }
+}
+@end lilypond
+
+Rien ne vous empêche de créer votre propre champ personnalisé, puis d'y
+faire référence dans la définition du @emph{markup}.
+
+@lilypond[papersize=a5,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ indent = 0\mm
+ scoreTitleMarkup = \markup {
+ \fill-line {
+ \null
+ \override #`(direction . ,UP) {
+ \dir-column {
+ \center-align \fontsize #-1 \bold
+ \fromproperty #'header:mycustomtext %% User-defined field
+ \center-align \fontsize #4 \bold
+ \fromproperty #'header:piece
+ }
+ }
+ \fromproperty #'header:opus
+ }
+ }
+ }
+ \header { tagline = ##f }
+ \score {
+ { s1 }
+ \header {
+ piece = "FUGA I"
+ mycustomtext = "A 4 VOCI" %% User-defined field
+ opus = "BWV 846"
+ }
+ }
+}
+@end lilypond
+
+@seealso
+Manuel de notation :
+@ref{Contenu des blocs de titrage}.
+
+
+@node Mise en forme personnalisée des entête et pied de page
+@unnumberedsubsubsec Mise en forme personnalisée des entête et pied de page
+@translationof Custom layout for headers and footers
+
+@c can make-header and make-footer be removed from
+@c paper-defaults-init.ly? -mp
+
+L'utilisation de commandes @code{\markup} au sein d'un bloc
+@code{\header} permet de modifier aisément l'apparence du texte,
+mais n'influence en rien le positionnement précis des entête et pied
+de page. L'accès au positionnement des champs concernés est géré par
+les quatre variables suivantes, attachées au bloc @code{\paper}@tie{}:
+
+@itemize
+@item @code{oddHeaderMarkup}
+@item @code{evenHeaderMarkup}
+@item @code{oddFooterMarkup}
+@item @code{evenFooterMarkup}
+@end itemize
+
+L'exemple suivant illustre la manière de centrer son numéro au bas de
+chaque page. Il nous faut tout d'abord annuler la définition de
+@code{oddHeaderMarkup} et @code{evenHeaderMarkup} à l'aide d'un
+@emph{markup} @code{\null}. Nous redéfinissons ensuite
+@code{oddFooterMarkup} pour qu'il contienne le numéro de page, centré.
+Enfin, nous appliquons le même paramétrage au @code{\oddFooterMarkup}.
+
+@lilypond[papersize=a8,quote,verbatim,noragged-right]
+\book {
+ \paper {
+ print-page-number = ##t
+ print-first-page-number = ##t
+ oddHeaderMarkup = \markup \null
+ evenHeaderMarkup = \markup \null
+ oddFooterMarkup = \markup {
+ \fill-line {
+ \on-the-fly #print-page-number-check-first
+ \fromproperty #'page:page-number-string
+ }
+ }
+ evenFooterMarkup = \oddFooterMarkup
+ }
+ \score {
+ \new Staff { s1 \break s1 \break s1 }
+ }
+}
+@end lilypond
+
+@seealso
+Manuel de notation :
+@ref{Contenu des blocs de titrage},
+@ref{Mise en forme par défaut des titrages}.
@node Référencement des numéros de page
numéro de page grâce à la commande de @emph{markup} @code{\page-ref}.
@c KEEP LY
-@lilypond[verbatim,line-width=11.0\cm]
+@lilypond[verbatim]
\header { tagline = ##f }
\book {
\label #'firstScore
* Insertion de fichiers LilyPond::
* Différentes éditions à partir d'une même source::
* Codage du texte::
-* Affichage de notation au format LilyPond::
@end menu
@node Insertion de fichiers LilyPond
@code{\include} suffit. S'il se trouve ailleurs, vous devrez indiquer
le chemin d'accès, absolu ou relatif, en respectant toutefois la syntaxe
UNIX -- autrement dit, le séparateur de répertoire est une oblique
-normale @code{/} et non l'oblique inverse @code{\} de DOS/Windows. Par
-exemple, si le fichier @file{truc.ly} se trouve dans le répertoire
+normale @code{/} et non l'oblique inverse @code{\} de DOS ou Windows.
+Par exemple, si le fichier @file{truc.ly} se trouve dans le répertoire
supérieur au répertoire de travail, la ligne devra être
@example
-\include "../stuff.ly"
+\include "../truc.ly"
@end example
@noindent
@code{\include}. Ces instructions @code{\include} de second niveau ne
pourront, par défaut, être interprétées qu'une fois intégrées dans le
fichier principal@tie{}; leur argument doit donc comporter le chemin
-relativement au fichier principal et non par rapport au fichier dan
-lesquel cette inclusion est mentionnée. Vous pouvez toutefois influer
-sur ce comportement à l'aide de l'option @code{-drelative-includes} en
-ligne de commande ou en ajoutant une clause
+relativement au fichier principal et non par rapport au fichier dans
+lequel cette inclusion est mentionnée. Vous pouvez toutefois influer
+sur ce comportement à l'aide de l'option @w{@code{-drelative-includes}}
+en ligne de commande ou en ajoutant une clause
@code{@w{#(ly:set-option 'relative-includes #t)}} en tête du fichier
principal. Une fois @code{relative-include} activé, le chemin à suivre
pour chacune des commandes @code{\include} sera pris relativement au
-fichier qui la contient.
+fichier qui la contient. Cette option est vouée à être activée par
+défaut dans une future version de LilyPond.
Vous pouvez inclure des fichiers dont vous spécifierez le chemin d'accès
sur la ligne de commande au moment de lancer la compilation. L'appel à
Au moment où vous lancez LilyPond, un certain nombre de fichiers se
retrouvent inclus par défaut@tie{}; il suffit d'activer le mode verbeux
-en faisant @code{lilypond --verbose} pour s'en rendre compte. Vous
+en faisant @w{@code{lilypond --verbose}} pour s'en rendre compte. Vous
verrez ainsi défiler, en plus de nombreuses informations, le nom d'un
-certain nombre de fichier et de chemins d'accès. Les fichiers les plus
+certain nombre de fichiers et de chemins d'accès. Les fichiers les plus
important sont mentionnés au chapitre
@rlearning{Autres sources de documentation}. Si vous venez à les
modifier, rappelez-vous qu'ils seront écrasés à l'installation d'une
@item
Musique balisée précédée de @code{\keepWithTag #'@var{nom}}
- @tab Musique non balisée et musique balisée par @var{nom} seront
- incluses@tie{}; la musique balisée autrement est exclue.
+ @tab Musique non balisée et musique balisée par @var{nom} seront
+ incluses@tie{}; la musique balisée autrement est exclue.
@item
Musique balisée précédée de @code{\removeWithTag #'@var{nom}}
seront inclus@tie{}; la musique balisée par @var{nom} est exclue.
@item
-Musiqeu balisée non précédée de @code{\keepWithTag} ou
+Musique balisée non précédée de @code{\keepWithTag} ou
@code{\removeWithTag}
@tab Musique balisée et non balisée seront incluses.
LilyPond n'effectue aucune conversion d'encodage que ce soit. Ceci
implique donc que tout texte, qu'il s'agisse d'un titre, de paroles ou
-même d'instruction musicale, comportant des caractères non ASCII soit
+même d'instruction musicale, comportant des caractères non ASCII, soit
codé en UTF-8. Le plus sûr moyen de saisir du texte de la sorte
consiste à utiliser un éditeur supportant l'unicode et à enregistrer vos
fichier en UTF-8. C'est le cas pour la plupart des éditeurs actuels,
@end example
-@node Affichage de notation au format LilyPond
-@subsection Affichage de notation au format LilyPond
-@translationof Displaying LilyPond notation
-
-@funindex \displayLilyMusic
-
-La fonction musicale @code{\displayLilyMusic}, disponible uniquement
-pour un traitement en ligne de commande, permet d'afficher en
-notation LilyPond une expression musicale. Par exemple,
-
-@example
-@{
- \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
-@}
-@end example
-
-affichera
-
-@example
-@{ a,4 cis e fis g @}
-@end example
-
-LilyPond affichera le résultat sous forme de message en console, au
-milieu de toutes les informations de compilation. Afin d'isoler ces
-messages et enregistrer le résultat de la fonction
-@code{\display@{STUFF@}}, pensez à rediriger la sortie vers un fichier.
-
-@example
-lilypond fichier.ly >display.txt
-@end example
-
-
@node Contrôle des sorties
@section Contrôle des sorties
@translationof Controlling output
définissez dans la liste d'autres paires d'emplacements ryhtmiques.
Cette fonctionnalité n'est toutefois effective que lorsque vous lancez
-LilyPond avec l'option @code{-dclip-systems}. Les @qq{coupures} seront
-générées sous la forme de fichiers EPS, convertis en PDF ou PNG selon le
-format que vous aurez stipulé.
+LilyPond avec l'option @w{@code{-dclip-systems}}. Les @qq{coupures}
+seront générées sous la forme de fichiers EPS, convertis en PDF ou PNG
+selon le format que vous aurez stipulé.
Pour de plus amples informations quant au format des résultats,
consultez le chapitre @rprogram{Lancement de lilypond}.
œuvre, pour y ajouter une partie par exemple, auquel cas c'est la
propriété @code{showFirstLength} que vous utiliserez.
-Vous pouvez contrôler très finement les parties à escamoter, grâce u
+Vous pouvez contrôler très finement les parties à escamoter, grâce au
commutateur @code{Score.skipTypesetting}@tie{}: lorsqu'il est activé,
aucune gravure n'est réalisée.
@cindex EPS, format de sortie
En matière de partition imprimable, LilyPond génère par défaut des
-documents au format PstScript (PS) et Portable Document Format (PDF).
+documents au format PostScript (PS) et Portable Document Format (PDF).
Vous pouvez aussi obtenir des documents au format Scalable Vector
Graphics (SVG), Encapsulated PostScript (EPS) ou Portable Network
Graphics (PNG) dès lors que vous aurez lancé LilyPond en ligne de
Téléchargez puis décompressez l'archive zip. Recopiez le répertoire
@code{lilyfonts} dans @file{@var{SHARE_DIR}/lilypond/current} -- voir
@rlearning{Autres sources de documentation} à ce sujet. Renommez le
-répertoire @code{fonts} qui s'y trouve en @code{fonts_orig}, puis les
+répertoire @code{fonts} qui s'y trouve en @code{fonts_orig}, puis le
répertoire @code{lilyfonts} en @code{fonts}. Il vous suffira, pour
retrouver la fonte Feta, de renommer @code{fonts_orig} en @code{fonts}.
@knownissues
-Gonville ne permet pas de générer de la notation ancienne. Consultez le
-site de l'auteur pour de plus amples informations ainsi qu'à propos des
-conditions d'utilisation.
+Gonville ne permet pas de générer de la notation ancienne, et certains
+glyphes ajoutés depuis lors aux jeux de caractères en soient absent.
+Consultez le site de l'auteur pour de plus amples informations ainsi
+qu'à propos des conditions d'utilisation.
@node Sortie MIDI
@section Sortie MIDI
@translationof MIDI output
+@cindex son
+@cindex MIDI
+
MIDI (Musical Instrument Digital Interface) constitue un standard en
matière de connexion et de contrôle des instruments électroniques. Un
fichier MIDI contient une série de notes réparties dans différentes
pistes. Il ne s'agit en rien d'un fichier sonore@tie{}; il vous faudra
-un logiciel capable de traduire ces séries de notes en sons.
+un logiciel capable de traduire ces séries de notes en sons réels.
Vous pouvez convertir vos partition en fichier MIDI de manière à
entendre ce que vous avez saisi. Ceci vous permet de contrôler aisément
ce que vous avez saisi@tie{}: octaves et altérations erronées heuteront
votre oreille avertie grâce au MIDI.
+Le fichier MIDI généré par LilyPond est relativement brut. Vous pouvez
+cependant obtenir un meilleur rendu avec @ref{Le script Articulate}.
+
@c TODO Check this
Dans une sortie MIDI, LilyPond alloue un canal à chaque portée, plus un
pour les réglages globaux. Par voie de conséquence, un fichier MIDI ne
* Répétitions et MIDI::
* Gestion des nuances en MIDI::
* MIDI et percussions::
+* Le script Articulate::
@end menu
le bloc @code{\midi} est la plupart du temps laissé vide, il peut
contenir des aménagements pour certains contextes, la définition de
contextes particuliers ou du code permettant de déterminer la valeur de
-certianes propriétés. L'exemple suivant détermine le tempo initial du
+certaines propriétés. L'exemple suivant détermine le tempo initial du
fichier MIDI tout en se passant de son indication sur la partition
imprimée.
@cindex MIDI, accords nommés
@cindex Rythme en MIDI
@cindex MIDI, Rythme
+@cindex articulations et MIDI
+@cindex MIDI et articulations
+@cindex trilles et MIDI
+@cindex MIDI et trilles
@c TODO etc
Un fichier MIDI généré par LilyPond comprendra les éléments de notation
les liaisons de prolongation ;
@item
-les indications de nuance
+les indications de nuance ;
@item
les crescendos et decrescendos s'étalant sur plusieurs notes@tie{};
les paroles.
@end itemize
+Si vous utilisez @ref{Le scrip Articulate}, d'autres éléments seront
+alors inclus@tie{}:
+
+@itemize
+@item articulations (lié, staccato, etc.),
+@item trilles et groupettos,
+@item rallentando et accelerando.
+@end itemize
+
@unnumberedsubsubsec Éléments non pris en compte dans le MIDI
@translationof Unsupported in MIDI
@c TODO index as above
LilyPond ne peut générer d'événement MIDI pour les éléments
-suivant@tie{}:
+suivant, sauf à utiliser @ref{Le scrip Articulate}@tie{}:
@itemize
@item
@translationof Repeats in MIDI
@cindex reprises développées
+@cindex MIDI et reprises
@funindex \unfoldRepeats
Au prix de quelques réglages, les reprises de toutes sortes peuvent être
\bar "|."
@end lilypond
+Dans une partition comportant plusieurs voix, le développement des
+reprises ne sera effectif en MIDI qu'à la condition que ces reprises
+soient mentionnée correctement dans @strong{toutes} les voix.
+
Lorsque l'on veut utiliser @code{\unfoldRepeats} seulement pour le rendu
MIDI, il faut établir deux blocs @code{\score}@tie{}: un pour le MIDI,
avec des reprises explicites, et l'autre pour la partition, avec des
n'étant pas répertoriée dans le jeu par défaut, elle ne produira aucun
effet en MIDI. Il en sera d'ailleurs de même pour toute indication
créée de toute pièce à l'aide de l'instruction
-@code{make-dynamic-script}. Voici comment procéder pour ajuster le
+@w{@code{make-dynamic-script}}. Voici comment procéder pour ajuster le
volume MIDI de ce @notation{rinforzando} que le compositeur a indiqué.
La fonction Scheme définit une fraction de 0,9 en cas de @notation{rfz},
et demande d'utiliser la fonction par défaut dans les autre cas.
Le standard @emph{general MIDI} ne dispose pas du @emph{rim shot}@tie{};
LilyPond lui subtitue un @emph{sidestick}.
+
+@node Le script Articulate
+@subsection Le script Articulate
+@translationof The Articulate script
+
+Vous obtiendrez un rendu MIDI plus @qq{réaliste} grâce au script
+@code{articulate}. Celui-ci va tout faire pour d'une part prendre en
+compte les articulations (liaisons, staccato, etc.) -- en ajoutant un
+blanc aux notes raccourcies -- et, d'autre part, développer les trilles
+ou groupettos ainsi que tenir compte des éventuels rallentando et
+accelerando.
+
+L'utilisation du script @code{articulate} se fait en deux temps. Vous
+devez dans un premier temps inclure son fichier d'initialisation en
+ajoutant en tête de votre fichier la ligne
+
+@example
+\include "articulate.ly"
+@end example
+
+puis, dans le bloc @code{\score}, indiquer que toutes les répétitions
+seront développées et appliquer la commande à votre musique@tie{}:
+
+@example
+\unfoldRepeats \articulate <<
+ tout le reste du bloc contenant la partition...
+>>
+@end example
+
+Une fois votre fichier modifié de la sorte, vous constaterez que la
+version imprimable aura été modifiée en profondeur. Le bloc
+@code{\midi} produira par contre un fichier MIDI de bien meilleure
+qualité.
+
+Bien que cela ne gène en rien le fonctionnement du script
+@code{articulate}, lui adjoindre la commande @code{\unfoldRepeats} comme
+illustré ci-dessus permettra le rendu d'un certain nombre
+d'articulations tels les trilles.
+
+@knownissues
+
+Dans la mesure où la script @code{articulate} tend à raccourcir les
+accords, certaines musiques, notamment pour l'orgue, paraîtront de moins
+bonne qualité.
+
+
+@node Extraction d'informations musicales
+@section Extraction d'informations musicales
+@translationof Extracting musical information
+
+En plus de générer du graphisme et du MIDI, LilyPond peut présenter
+l'information musicale sous forme textuelle.
+
+@menu
+* Affichage de notation au format LilyPond::
+* Affichage de la musique sous forme d'expression scheme::
+* Enregistrement d'événements musicaux dans un fichier::
+@end menu
+
+
+@node Affichage de notation au format LilyPond
+@subsection Affichage de notation au format LilyPond
+@translationof Displaying LilyPond notation
+
+@funindex \displayLilyMusic
+
+La fonction musicale @code{\displayLilyMusic}, disponible uniquement
+pour un traitement en ligne de commande, permet d'afficher en
+notation LilyPond une expression musicale. Par exemple,
+
+@example
+@{
+ \displayLilyMusic \transpose c a, @{ c4 e g a bes @}
+@}
+@end example
+
+affichera
+
+@example
+@{ a,4 cis e fis g @}
+@end example
+
+LilyPond affichera le résultat sous forme de message en console, au
+milieu de toutes les informations de compilation. Afin d'isoler ces
+messages et enregistrer le résultat de la fonction
+@code{\display@{MATÉRIAU@}}, pensez à rediriger la sortie vers un
+fichier.
+
+@example
+lilypond fichier.ly >display.txt
+@end example
+
+
+@node Affichage de la musique sous forme d'expression scheme
+@subsection Affichage de la musique sous forme d'expression scheme
+@translationof Displaying scheme music expressions
+
+Voir @rextend{Displaying music expressions}.
+
+
+@node Enregistrement d'événements musicaux dans un fichier
+@subsection Enregistrement d'événements musicaux dans un fichier
+@translationof Saving music events to a file
+
+LilyPond vous permet de sauvegarder dans un fichier séparé, sur la base
+de la portée, les événements musicaux. Vous devrez pour ce faire
+inclure dans votre fichier maître un fichier d'initialisation
+spécifique@tie{}:
+
+@example
+\include "event-listener.ly"
+@end example
+
+Pour chaque portée que comporte votre partition, vous obtiendrez un
+fichier @file{NOMFICHIER-PORTÉENOMMÉE.notes} ou
+@file{NOMFICHIER-unnamed-staff.notes}. Notez bien que si plusieurs
+portées ne sont pas explicitement nomées, tous leurs événements seront
+regroupés et mélangés dans le même fichier. Le résultat ressemblera à
+ceci@tie{}:
+
+@example
+0.000 note 57 4 p-c 2 12
+0.000 dynamic f
+0.250 note 62 4 p-c 7 12
+0.500 note 66 8 p-c 9 12
+0.625 note 69 8 p-c 14 12
+0.750 rest 4
+0.750 breathe
+@end example
+
+Il s'agit d'un tableau dont les colonnes sont délimitées par une
+tabulation. Chaque ligne comporte deux champs fixes suivis d'un certain
+nombre de paramètres optionnels.
+
+@example
+@var{temps} @var{type} @var{...paramètres...}
+@end example
+
+Ces informations peuvent faire l'objet d'un retraîtement par d'autres
+programmes, comme des scripts python, aux fins de recherche en analyse
+musicologique ou des expériences à partir du rendu de LilyPond.
+
+
+@knownissues
+
+Tous les événements ne sont pas pris en charge par
+@file{event-listener.ly}. Il s'agit en premier lieu d'une
+démonstration, un @qq{proof of concept} du potentiel de LilyPond. Si
+certains des éléments que vous cherchez à obtenir n'apparaîssent pas,
+recopiez le fichier @file{event-listener.ly} dans votre répoertoire et
+modifiez-le de telle sorte qu'il travaille selon vos attentes.
% extend the stems to reach the other staff
\override Stem #'length = #12
% do not print extra flags
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
% prevent beaming as needed
a8 g4 f8 f bes\noBeam g4
}
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: a6b5eea83ddcdd8e1fd0760db385176ff9b2b1cd
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@menu
* Table des noms d'accord::
* Modificateurs d'accord usuels::
+* Accordages prédéfinis::
* Diagrammes d'accord prédéfinis::
* Instruments MIDI::
* Liste des couleurs::
* Liste des propriétés de contexte::
* Propriétés de mise en forme::
* Fonctions musicales::
+* Identificateurs de modification de contexte::
* Types de prédicats prédéfinis::
* Fonctions Scheme::
@end menu
@end multitable
+@node Accordages prédéfinis
+@appendixsec Accordages prédéfinis
+@translationof Predefined string tunings
+
+La liste suivante répertorie les différents accordages dont LilyPond
+dispose.
+
+@lilypondfile{display-predefined-string-tunings.ly}
+
+
@node Diagrammes d'accord prédéfinis
@appendixsec Diagrammes d'accord prédéfinis
@translationof Predefined fretboard diagrams
@lilypondfile{display-predefined-ukulele-fretboards.ly}
+La liste suivante répertorie les tablatures prédéfinies pour la
+mandoline.
+
+@lilypondfile{display-predefined-mandolin-fretboards.ly}
+
@node Instruments MIDI
@appendixsec Instruments MIDI
@include identifiers.tely
+@node Identificateurs de modification de contexte
+@appendixsec Identificateurs de modification de contexte
+@translationof Context modification identifiers
+
+Les commandes suivantes permettent de modifier des contextes au sein
+d'un bloc @code{\layout} ou @code{\with}.
+
+@include context-mod-identifiers.tely
+
+
@node Types de prédicats prédéfinis
@appendixsec Types de prédicats prédéfinis
@translationof Predefined type predicates
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 531484474ef15eb237ae185373bc95c37d0c0127
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 657b89ab28b463ccda7991070242353cf38dc25d
+ Translation of GIT committish: f93e4199873c91ae32f0e84a610d14853dc379df
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
interdépendants@tie{}: la mise en page, les sauts de ligne et
l'espacement. Les choix faits en matière d'espacement détermineront la
densité de chacun des systèmes, ce qui influera sur le positionnement
-des sauts de lignes et, par voie de conséquence, sur le nombre de pages
+des sauts de ligne et, par voie de conséquence, sur le nombre de pages
de la partition.
En pratique, cette procédure comporte quatre étapes. Dans un premier
@item
la définition des différents @emph{markups} qui personnaliseront la mise
-en forme des entêtes, pied de page et titrages.
+en forme des entêtes et pieds de page ainsi que des titrages.
@end itemize
La seule restriction à l'utilisation isolée de la fonction
@code{set-default-paper-size} est qu'elle doit intervenir avant le
premier bloc @code{\paper}. À l'intérieur d'un bloc @code{\paper}, il
-vaut mieux utiliser la fonction @code{set-paper-size}, avant toute autre
-variables. Les raisons à ceci sont abordées dans la rubrique
+vaut mieux utiliser la fonction @code{set-paper-size} avant toute autre
+variable. Les raisons à ceci sont abordées dans la rubrique
@ref{Adaptation automatique au format}.
@code{set-default-paper-size} fixe le format pour toutes les pages,
La hauteur de la feuille. Il s'agit par défaut de la dimension du
papier utilisé. Notez bien que cette variable n'affectera pas
-l'ajustement automatique d'un certain nombre de dimmensionnement
-vertical.
+l'ajustement automatique d'un certain nombre de dimmensionnements
+verticaux.
@item top-margin
@funindex top-margin
Morceaux choisis :
@rlsrnamed{Spacing,Espacements}.
-Snippets:
+Morceaux choisis :
@rlsrnamed{Spacing,Espacements}.
Fichiers d'initialisation :
@file{ly/paper-defaults-init.ly}.
-Snippets:
-@rlsr{Spacing}.
+Morceaux choisis :
+@rlsrnamed{Spacing, Espacements}.
@node Autres variables du bloc \paper
Pénalité pour apparition d'une page blanche entre deux partitions. Sa
valeur est par défaut inférieure à celle de
-@code{blank-page-force}@tie{}; nous préférons q'une page blanche
+@code{blank-page-force}@tie{}; nous préférons qu'une page blanche
s'insère après la fin de la partition plutôt qu'au milieu.
@item blank-last-page-force
@code{\layout} indépendant se placera en tête de fichier. Dans le cas
où la mise en forme concerne une partition en particulier, un bloc
@code{\layout} se placera au sein du bloc @code{\score} en question.
-Sont susceptibles d'apparître dans un bloc @code{\layout}@tie{}:
+Sont susceptibles d'apparaître dans un bloc @code{\layout}@tie{}:
@itemize
@item
la fonction scheme @code{layout-set-staff-size},
@item
-dans des blocs @code{\contexte}, les modifications apportées aux
+dans des blocs @code{\context}, les modifications apportées aux
différents contextes, et
@item
s1 \noBreak s1 \noBreak
s1 \noBreak s1 \break
@}
- @{ @var{the actual music@dots{}} @}
+ @{ @var{et ici la musique@dots{}} @}
>>
@end example
pages, la gestion des sauts de page finit par devenir très gourmande,
tant au niveau du processeur que de la mémoire. Vous pouvez cependant
alléger la charge en recourant à des blocs @code{\bookpart} afin de
-sectionner l'ouvrage que vous traitez@tie{}; les sauts de pages seront
+sectionner l'ouvrage que vous traitez@tie{}; les sauts de page seront
alors gérés individuellement au niveau de chacune des parties. Par
ailleurs, cela vous autorisera une gestion différente selon les
sections.
vous mentionnerez dans un contexte de voix ou de portée. Ce graveur de
tournes recherchera dans le contexte en question les passages sans note.
Notez bien qu'il ne recherche pas des silences, mais l'absence de
-notes@tie{}; autrement dit, il ne restera pas inactif dans la cadre
+notes@tie{}; autrement dit, il ne restera pas inactif dans le cadre
d'une portée polyphonique dont l'une des parties contiendrait des
silences. Lorsqu'il rencontre un fragment suffisamment long ne
contenant aucune note, il insère un @code{\allowPageTurn} à la barre
@code{staff-affinity} a été déterminée à @code{#UP}.
Toutes ces distances sont mesurées entre les points de référence
-respectifs de éléments considérés.
+respectifs des éléments considérés.
Le @i{point de référence} d'une portée est le centre vertical du
@code{StaffSymbol} -- la ligne médiane si @code{line-count} est impair,
l'interligne médian si @code{line-count} est pair.
Quant aux lignes rattachées à des portées -- lignes de non-portée -- le
-tableau suivant présente le @i{point de référence} pour chacun d'entre
-eux@tie{}:
+tableau suivant présente le @i{point de référence} pour chacune
+d'elles@tie{}:
@multitable {Non-staff line} {Reference point}
@headitem Ligne de non-portée @tab Point de référence
\context { \Dynamics \alignToZero }
\context { \FiguredBass \alignToZero }
\context { \Lyrics \alignToZero }
- \context { \NoteNames \alignToZero }
- \context { \ChordNames \alignToZero \lowerCaseChords }
+ \context { \NoteNames \alignToZero \staffAffinityDown }
+ \context { \ChordNames \alignToZero
+ \staffAffinityDown
+ \lowerCaseChords }
\context { \FretBoards \alignToZero \staffAffinityDown }
\context { \Score
\override BarLine #'stencil = ##f
\set RhythmicStaff.instrumentName = #"centre vertical "
\labelContext "Dynamics" s1*3
}
- \new Dynamics { s2\mp s\fp }
+ \new Dynamics { s1\mp s\fp }
>>
%% Le point de référence de FiguredBass est son point le plus haut
elle s'appliquera au @code{default-staff-staff-spacing} en l'absence de
regroupement. Les portées peuvent donc s'aligner différemment selon
qu'elles sont ou non regroupées. Pour obtenir le même espacement sans
-tenir compte dees éventuels regroupements, cette fonction peut faire
+tenir compte des éventuels regroupements, cette fonction peut faire
place à une complète redéfinition des espacements fluctuants à l'aide de
règles dérogatoires comme vu précédemment.
@item default-staff-staff-spacing
Il s'agit de la distance qui s'appliquera par défaut aux portées
-isolées, à loins que @code{staff-staff-spacing} n'ait été redéfini
+isolées, à moins que @code{staff-staff-spacing} n'ait été redéfini
explicitement par un @code{\override}.
@item staff-affinity
@code{staff-affinity} définie à @code{UP}. De la même manière, lorsque
cette ligne surplombe un système, sa @code{staff-affinity} devrait être
définie à @code{DOWN}. Prenez garde à la valeur que vous affectez à
-@code{staff-affinity}@tie{}: si vous lui affectez la valeur @code{#f} à
+@code{staff-affinity}@tie{}: si vous affectez la valeur @code{#f} à
une ligne de non-portée, cette ligne sera considérée comme étant une
portée@tie{}; à l'inverse, utiliser la propriété @code{staff-affinity}
pour une portée lui fera perdre cette qualité.
@item nonstaff-nonstaff-spacing
Il s'agit de la distance entre deux lignes de non-portée selon
-l'orientation définie par @code{staff-affinity} et qu'elles ont la même
-orientation. Bien entendu, ceci ne peut concerner que les valeurs
-@code{UP} et @code{DOWN} de @code{staff-affinity}.
+l'orientation définie par @code{staff-affinity} et dès lors qu'elles ont
+la même orientation. Bien entendu, ceci ne peut concerner que les
+valeurs @code{UP} et @code{DOWN} de @code{staff-affinity}.
@item nonstaff-unrelatedstaff-spacing
Il s'agit de la distance entre une ligne de non-portée et la portée à
@item staff-staff-spacing
Il s'agit de la distance entre deux portées consécutives d'un même
système. La propriété @code{staff-staff-spacing} de l'objet
-@code{VerticalAxisGroup} d'un portée en particulier peut se redéfinir à
+@code{VerticalAxisGroup} d'une portée en particulier peut se redéfinir à
l'aide de règles dérogatoires.
@item staffgroup-staff-spacing
L'exemple suivant illustre la manière de gérer l'espacement de portées
isolées à l'aide de la propriété @code{default-staff-staff-spacing}.
Les mêmes règles appliquées de manière dérogatoire au
-@code{staff-staff-spacing} produiront les mêmes effets, y comris au sein
-de regroupements.
+@code{staff-staff-spacing} produiront les mêmes effets, y compris au
+sein de regroupements.
@lilypond[verbatim,quote,staffsize=16]
\layout {
important entre deux regroupements qu'entre les portées d'un même
groupe.
-Les @i{regroupement de portées} tels le @code{StaffGroup} ou le
+Les @i{regroupements de portées} tels le @code{StaffGroup} ou le
@code{ChoirStaff} sont des contextes qui peuvent contenir simultanément
une ou plusieurs portées.
@ref{Propriétés d'espacement au sein d'un système}.
L'exemple suivant illustre la manière de gérer l'espacement de portées
-regroupes, à l'aide des propriétés de l'objet graphique
+regroupées, à l'aide des propriétés de l'objet graphique
@code{StaffGrouper}@tie{}:
@lilypond[verbatim,quote,staffsize=16]
#'line-break-system-details} permet de positionner systèmes et portées
n'importe où sur une page, vous pourriez être en contradiction avec les
dimensionnements de la feuille ou bien aboutir à des surimpressions.
-Soyez donc raisonnables quant aux différentes valeurs que vous affectez
+Soyez donc raisonnable quant aux différentes valeurs que vous affectez
à ces réglages.
@end itemize
d'autres se placent en dehors de la portée. Entre autres objets
externes, nous avons les marques repères, les textes et les
nuances@tie{}; nous les appellerons @qq{objets extérieurs à la portée}.
-La règle qu'applique LilyPond pour positionner verticalement ces
+La règle adoptée par LilyPond pour positionner verticalement ces
objets extérieurs consiste à les placer au plus près de la portée
tout en prenant garde d'éviter qu'il y ait chevauchement.
L'exemple suivant comporte des blanches, des noires et un certain nombre
de croches. La croche est suivie d'un espace de la largeur d'une tête
-de note@tie{}; pour la noire , cette espace est de deux têtes@tie{}; il
+de note@tie{}; pour la noire , cet espace est de deux têtes@tie{}; il
est de trois pour la blanche.
@lilypond[quote,verbatim,relative=1]
L'activation du commutateur @code{ragged-right} au sein du bloc
@code{\layout} permet de terminer les systèmes naturellement plutôt que
de les voir s'étirer sur toute la largeur de la page. Cette option est
-particulièrement utile lorsque vous traitez de courts fragment, ou bien
+particulièrement utile lorsque vous traitez de courts fragments, ou bien
pour vérifier ce que donnerait l'espacement naturel. Bien qu'il soit
désactivé par défaut, il sera activé si la partition ne comporte qu'un
seul système.
En matière de gravure traditionnelle, cet espacement correspond tout à
fait à nos attentes, puisque nous pouvons rogner l'espace sur la
-blanche et ainsi en gagner en largeur sur toute la mesure qui fait une
+blanche et ainsi gagner en largeur sur toute la mesure qui fait une
ronde.
Par contre, si nous avons besoin d'insérer une indication temporelle ou
fichier@tie{}: dans un bloc @code{\with}, dans un bloc @code{\context}
ou au beau milieu de la musique à l'aide de la commande @code{\set}.
Vous pouvez donc définir @code{proportionalNotationDuration} selon l'une
-de ces trois façons, à l'instar de n'importe quel définition de
+de ces trois façons, à l'instar de n'importe quelle définition de
contexte.
La propriété @code{proportionalNotationDuration} prend en unique
Vous ne manquerez pas de noter qu'une durée de référence trop grande,
comme la croche pour la première ligne, a pour conséquence de resserrer
la musique, ce qui peut aboutir à des chevauchements de têtes. Vous
-remarquez aussi que , par principe, la notation proportionnelle occupe
+remarquez aussi que, par principe, la notation proportionnelle occupe
beaucoup plus d'espace horizontal que l'espacement traditionnel. La
notation proportionnelle met en évidence le rythme au détriment de
l'espacement horizontal.
conséquence que l'algorithme d'espacement ignore tout bonnement la
largeur des métriques, armures, clefs et altérations.
-En plus ceux que nous venons de voir, vous trouverez d'autres réglages
-en usage dans la notation proportionnelle comme, entre autres,
+En plus de ceux que nous venons de voir, vous trouverez d'autres
+réglages en usage dans la notation proportionnelle comme, entre autres,
@itemize
@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
@section Réduction du nombre de pages de la partition
@translationof Fitting music onto fewer pages
-Vous pourriez un jour être confronté au problème suiven@tie{}: l'une
+Vous pourriez un jour être confronté au problème suivant@tie{}: l'une
des pages de votre partition ne comporte que deux portées alors que --
ce qui est d'autant plus frustrant -- l'espace libre sur les autres
pages aurait permis une distribution différente.
L'instruction @code{annotate-spacing} se révèle être un outil
-indispensable pour pour l'analyse des problèmes de mise en forme. Cette
+indispensable pour l'analyse des problèmes de mise en forme. Cette
commande met en surimpression la valeur des différentes variables
d'espacement et de mise en forme, comme nous allons le voir dans la
rubrique @ref{Mise en évidence de l'espacement}.
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+
+ texidocfr = "
+Les diagrammes de fret peuvent s'orienter de trois manières différentes.
+Ils s'aligneront par défaut sur la corde du haut ou le sommet du fret.
+
+
+"
+
+ doctitlefr = "Orientation des diagrammes de fret"
+
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+
+ texidocfr = "
+Un glissando sur des accords s'indique dans un @code{TabStaff} de la
+même manière que dans un @code{Staff}, à ceci près que nous aurons
+besoin des numéros de corde afin de déterminer correctement les frets
+d'arrivée.
+
+"
+
+ doctitlefr = "Glissando d'accords et tablature"
+
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+ texidocfr = "
+Vous pouvez opter pour n'imprimer les diagrammes de fret qu'à l'occasion
+d'un changement d'accord ou de saut de ligne.
+
+"
+
+ doctitlefr = "Changement d'accord et diagramme de fret"
+
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+ texidocfr = "
+Les propriétés d'un diagramme de fret sont définies par les
+@code{fret-diagram-details}. En matière de diagramme FretBoards, les
+adaptations s'appliquent à l'objet @code{FretBoards.FretBoard}. Un
+@code{FretBoard} est comparable à un @code{Voice}@tie{}: il s'agit
+d'un contexte du plus bas niveau, et il n'est donc pas primordial de
+l'instancier de manière explicite pour adapter ses propriétés.
+
+"
+ doctitlefr = "Personnalisation de diagrammes de fret"
+
-%% Translation of GIT committish: a06cb0b0d9593ba110e001f2b0f44b8bef084693
+%% Translation of GIT committish: a6b5eea83ddcdd8e1fd0760db385176ff9b2b1cd
texidocfr = "
Il s'agit de fonctions postfix pour personnaliser l'extension des
crescendos textuels. L'extension devrait débuter sur la première notte
-de la mesure. Il faut utiliser @code{-\mycresc} -- comme une
+de la mesure. Il faut utiliser @w{@code{-\mycresc}} -- comme une
articulation -- sous peine que le départ de l'extension n'apparaisse
qu'à la note suivante.
"
-%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
texidocfr = "
L'exemple suivant illustre comment combiner des doigtés pour la main
-gauche, des indications de corrde et des doigtés pour la main droite.
+gauche, des indications de corde et des doigtés pour la main droite.
"
- doctitlefr = "Doigtés, indications de cordeet doigtés main droite"
+ doctitlefr = "Doigtés, indications de corde, et doigtés main droite"
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+
+ texidocfr = "
+Vous pouvez tout à fait créer des tables de diagrammes de fret
+supplémentaires, notamment dans l'optique d'un fret alternatif pour un
+accord donné.
+
+Avant de pouvoir utiliser un diagramme alternatif, vous devrez alimenter
+une table à cet effet. Les différents diagrammes seront ajoutés à cette
+table.
+
+Il peut aussi bien s'agir d'une table vide, que de la recopie d'une
+table existante.
+
+La table servant de base pour les diagrammes prédéfinis est sélectionnée
+par la propriété @code{\\predefinedDiagramTable}.
+
+"
+
+ doctitlefr = "Diagrammes de fret alternatifs"
+
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+ texidocfr = "
+Harmoniques et tablature (harmoniques artificielles)
+"
+ doctitlefr = "Harmoniques et tablature"
+
-%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
+%% Translation of GIT committish: a6b5eea83ddcdd8e1fd0760db385176ff9b2b1cd
texidocfr = "
Les raccourcis sont répertoriés dans le fichier
@file{ly/script-init.ly}, dans lequel on retrouve les variables
@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBar},
@code{dashLarger}, @code{dashDot}, et @code{dashUnderscore} ainsi que
leur valeur par défaut. Ces valeurs peuvent être modifiées selon vos
-besoins. Il suffit par exemple, pour affecter au raccourci @code{-+}
+besoins. Il suffit par exemple, pour affecter au raccourci @w{@code{-+}}
(@code{dashPlus}) le symbole du trille en lieu et place du @code{+}
(caractère plus), d'assigner la valeur @code{trill} à la variable
@code{dashPlus} :
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+ texidocfr = "
+Table des harmoniques sur corde à vide (harmoniques naturelles):
+
+"
+ doctitlefr = "Table des harmoniques sur corde à vide"
+
+
--- /dev/null
+%% Translation of GIT committish: 40bf2b38d674c43f38058494692d1a0993fad0bd
+ texidocfr = "
+Un glissando s'indique dans un @code{TabStaff} tout comme dans un
+@code{Staff}.
+
+"
+
+ doctitlefr = "Glissando et tablature"
+
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: ada15837e81a658a807d004b18877ba67a136fa3
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@{ c1 @}
@end example
-En procédant comme ci-après, vous obtiendrez un fichier @file{EPS}@tie{}:
+En procédant comme ci-après, vous obtiendrez des fichiers images@tie{}:
@example
+EPS
+
lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts monfichier.ly
-@end example
-ou @file{PNG} :
+PNG
-@example
lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts --png monfichier.ly
+
+PNG avec transparence
+
+lilypond -dbackend=eps -dno-gs-load-fonts -dinclude-eps-fonts \
+ -dpixmap-format=pngalpha --png monfichier.ly
@end example
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 79165c00e7aadfefb0748ff55b29a1927cb87acd
+ Translation of GIT committish: ada15837e81a658a807d004b18877ba67a136fa3
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Notez bien que l'utilisation du mode sécuritaire empêchera aussi la
compilation d'un certain nombre de fragments LilyPond. L'option
-@code{--jail} est dans ce cas une excellente alternative en terme de
+@option{--jail} est dans ce cas une excellente alternative en terme de
sécurité, même si elle requiert plus de temps à mettre en place.
@item scm
@cindex Scheme dump
- pour une recopie brute des commandes Scheme internes de formatage.
+pour une recopie brute des commandes Scheme internes de formatage.
@item null
- permet de ne pas générer de partition imprimable. Cette option est
- équivalente à @code{-dno-print-pages}.
+permet de ne pas générer de partition imprimable. Cette option est
+équivalente à @code{-dno-print-pages}.
@end table
et @code{svg}.
+@item gui
+Travaille silencieusement, et redirige tout le verbiage dans un fichier
+journal.
+
+Note à l'attention des utilisateurs de Windows@tie{}: toutes les
+informations concernant le traitement apparaissent au fur et à mesure
+dans l'interpréteur de commandes lorsque vous lancez le programme
+@code{lilypond.exe}, à l'inverse de @w{@code{lilypond-windows.exe}} qui
+vous renvoie simplement la main. L'option @option{-dgui} vous permettra
+alors de rediriger ces informations dans un fichier journal.
+
+
@item print-pages
Génère l'intégralité des pages de la partition. L'option
@code{-dno-print-pages} est particulièrement utile lorsqu'utilisée
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: ada15837e81a658a807d004b18877ba67a136fa3
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: 5f722f1688eff7436789f8ca011205bdb16c04b7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*-
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: ca62336a8f9ccb00fe4d81bcb8c88ad40ef9e2ae
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@ref{Contact} : obtenir de l'aide, discuter et rester en contact.
@item
-@ref{Exemples minimaux} : une nécessité lorsque l'on discute de LilyPond.
+@ref{Exemples minimaux} : une nécessité lorsque l'on discute de
+LilyPond.
@item
@ref{Signalement de bogue} : disfonctionnement du programme.
@itemize
@item
-@ref{Participation} : pour les bonnes volontés qui se sentent concernées.
+@ref{Participation} : pour les bonnes volontés qui se sentent
+concernées.
@item
@ref{Développement} : pour ceux qui veulent contribuer et tester.
@itemize
@item
-@ref{Publications} : ce que nous avons écrit, et ce que l'on dit de nous.
+@ref{Publications} : ce que nous avons écrit, et ce que l'on dit de
+nous.
@item
@ref{Archives} : archives des dépèches.
@divClass{column-center-top}
@subheading Exemple minimal@dots{} mais qu'est-ce donc que cela ?
-Un exemple minimal est un bout de code duquel plus rien ne peut être retiré.
+Un exemple minimal est un bout de code duquel @strong{plus rien} ne peut
+être retiré.
@divEnd
@divClass{column-left-bottom}
@item
Réduire l'exemple à sa plus simple expression indique que vous avez déjà
tenté par vous-même de trouver une solution. Des tonnes de lignes
-laissent à penser que celui qui les envoie se soucie peu de ce qui arrive.
+laissent à penser que celui qui les envoie se soucie peu de ce qui
+arrive.
@item
La génération d'un exemple minimaliste permet de comprendre ce qui se
@itemize
@item
-Inclure une mention \version pour indiquer le numéro de version utilisée.
+Inclure une mention @code{\version} pour indiquer le numéro de version
+utilisée.
@item
Être aussi bref et concis que possible. Si des problèmes concernant les
espacements ou la mise en page peuvent nécessiter un certain nombre de
-mesures, la plupart des litiges peuvent se cantonner à une seule mesure.
+mesures, la plupart des litiges peuvent se cantonner à moins d'une
+mesure.
@item
Lorsque vous créez un exemple minimal à partir de votre code, commencez
N'utilisez pas les commandes @code{\override} ou @code{\set} à moins que
le problème ne soit directement lié à leur utilisation.
+@item
+Le cas échéant, joignez une image de ce à quoi vous voulez arriver.
@end itemize
@divEnd
@divEnd
+@divClass{column-center-bottom}
+@subheading Jusqu'où pousser le minimalisme@tie{}?
+
+En voici un exemple@tie{}:
+@example
+\version "2.14.1"
+\include "english.ly"
+
+\score @{
+ \new Staff @{
+ \key d \major
+ \numericTimeSignature
+ \time 2/4
+ <cs' d'' b''>16 <cs' d'' b''>8.
+ %% Ici : la liaison des ré est bizarre.
+ %% Trop haute ? Extrémité gauche décalée par rapport à celle du si ?
+ ~
+ <cs' d'' b''>8 [ <b d'' a''> ]
+ @}
+@}
+@end example
+
+C'est vrai, ce n'est pas très long. Mais on peut encore le
+réduire@tie{}:
+
+@example
+\version "2.14.1"
+@{
+ % la liaison du milieu est bizarre :
+ <c' d'' b''>8. ~ <c' d'' b''>8
+@}
+@end example
+
+Les exemples minimaux dépassant les dix lignes de code ne sont pas
+légion -- quatre lignes suffisent bien souvent à indiquer le problème.
+
+@divEnd
@node Signalement de bogue
Si vous ne voulez ou ne pouvez pas envoyer un rapport de bogue selon les
instructions et en anglais, envoyez votre rapport ou posez votre
-question sur la @uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr,
+question sur la
+@uref{http://lists.gnu.org/mailman/listinfo/lilypond-user-fr,
liste francophone}@tie{}; nous nous chargerons de transmettre un rapport
à la liste anglophone et assurerons le suivi.
Music Conference 2008.
@item
-Alexandre Tachard Passos, Marcos Sampaio, Pedro Kröger, Givaldo de Cidra,
-@emph{Functional Harmonic Analysis and Computational Musicology
+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 Computer
Music, 2009, p. 207-210.
@item
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.
+@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
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: ca62336a8f9ccb00fe4d81bcb8c88ad40ef9e2ae
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
uninstall-lilypond
@end example
+@subsubheading Aide
+
+Dans un terminal, tapez :
+
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
+
@divEnd
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 057106293b07b74b00553fe4dc3dfac5c1f3b682
+ Translation of GIT committish: ca62336a8f9ccb00fe4d81bcb8c88ad40ef9e2ae
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
lassés de l'aspect fade et ennuyeux des partitions musicales produites
avec un ordinateur. Tous les musiciens préfèrent lire de belles
partitions de musique, pourquoi donc les programmeurs ne
-développeraient-ils pas un logiciel pouvant en produire@tie{}?
+développeraient-ils pas un logiciel capable d'en produire@tie{}?
C'est justement ce que fait LilyPond : ce logiciel grave de la musique
selon le meilleur de la tradition typographique avec un minimum de
@divClass{keep-bullets}
@itemize
+ @item
+Avril 2011
+
+@uref{http://www.linux-magazine.com,Linux Magazine} publie un
+article sur trois projets en pleine évolution,
+@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf,
+Projects on the Move}. Dans cette présentation de MuseScore, LilyPond
+et Chordii, Carla Schroder indique que @qq{même si LilyPond se base sur
+la ligne de commande, l'absence d'interface graphique n'est en rien
+rebutante@tie{}; son langage est agréable et facile à apprendre}, et
+fournit un exemple simple et concret.
+
@item
Mai 2010
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b
+ Translation of GIT committish: ca62336a8f9ccb00fe4d81bcb8c88ad40ef9e2ae
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@itemize
+@item
+@ref{Tous}@tie{}:
+liens rapides, manuels téléchargeables, et documentation des anciennes
+versions.
+
@item
@ref{Traductions}@tie{}:
état des traductions pour les lecteurs non anglophones.
@item
-@ref{Tous}@tie{}:
-liens rapides, manuels téléchargeables, et documentation des anciennes
-versions.
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}@tie{}:
+user-created examples, hints and tips.
@item
@ref{Développement}@tie{}:
@docLinks{Utilisation des programmes, usage,
@rprogramnamed{Top,Utilisation des programmes},
@manualStableUsageSplit-fr,
- @manualStableUsageBig-fr, 300 KB,
- @manualStableUsagePdf-fr, 400 KB}
+ @manualStableUsageBig-fr, 400 KB,
+ @manualStableUsagePdf-fr, 600 KB}
@divEnd
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@c This file is part of web/download.itexi and
+@c learning/tutorial.itely
+@ignore
+ Translation of GIT committish: 8f02aa6516b3cfe16b2c145142ea652cbc3b8970
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@c This is about "compiling" a lilypond file
+@c (Learning 1 Tutorial), **not** compiling the
+@c source code.
+
+@macro lilypadOSX
+@warning{Queste istruzioni presumono che tu stia usando il programma
+LilyPond. Se stai usando uno dei programmi descritti in
+@rweb{Editing facilitato}, in caso di problemi consulta la documentazione
+di quei programmi.}
+
+
+@subsubheading Passo 1. Crea il tuo file @file{.ly}
+
+Clicca due volte su @command{LilyPond.app}, si aprirà un file di esempio.
+
+@sourceimage{Learning_Macos_welcome,,,}
+
+Dai menu in cima a sinistra dello schermo seleziona
+@w{@code{File > Save}}.
+
+@sourceimage{Learning_Macos_Save_menu,,,}
+
+Scegli un nome per il tuo file, ad esempio @file{test.ly}.
+
+@sourceimage{Learning_Macos_Save_file_with_name,,,}
+
+
+@subsubheading Passo 2. Compila (con LilyPad)
+
+Dagli stessi menu seleziona
+@w{@code{Compile > Typeset}}.
+
+@sourceimage{Learning_Macos_Typeset_menu,,,}
+
+Si aprirà una nuova finestra che mostra i messaggi di log della compilazione
+del file che hai appena salvato.
+
+@sourceimage{Learning_Macos_Compiling_log,,,}
+
+
+@subsubheading Passo 3. Visualizza l'output
+
+Quando la compilazione è finita, un file PDF con lo stesso nome del file
+originale viene creato e automaticamente aperto nel visualizzatore
+PDF predefinito, che lo mostrerà sullo schermo.
+
+@sourceimage{Learning_Macos_pdf_output,,,}
+
+
+@subsubheading Altri comandi
+
+Per creare nuovi file per LilyPond, comincia col selezionare
+@w{@code{File > New}}
+
+@sourceimage{Learning_Macos_New_menu,,,}
+
+oppure @w{@code{File > Open}} per aprire e modificare file esistenti che
+hai salvato precedentemente.
+
+@sourceimage{Learning_Macos_Open_menu,,,}
+
+Devi salvare qualsiasi nuova modifica fatta al file prima di cliccare
+@w{@code{Compile > Typeset}} e se il file PDF non compare controlla se
+ci sono degli errori nella finestra dei messaggi di log.
+
+Se non stai usando il visualizzatore d'anteprima PDF incluso nel sistema
+operativo del Mac e un file PDF generato da una compilazione precedente
+è aperto, qualsiasi compilazione successiva potrebbe non riuscire a
+generare un PDF aggiornato finché non chiudi l'originale.
+
+
+
+@end macro
+
+
+@macro lilypadWindows
+@warning{Queste istruzioni presumono che tu stia usando l'editor LilyPad
+incluso nel programma. Se stai usando uno dei programmi descritti in
+@rweb{Editing facilitato}, in caso di problemi nel compilare un file consulta
+la documentazione di quei programmi.}
+
+
+@subsubheading Passo 1. Crea il tuo file @file{.ly}
+
+Clicca due volte sull'icona di LilyPond sulla scrivania, si aprirà un file di esempio.
+
+@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+
+Dai menu che appaiono in cima al file di esempio seleziona
+@w{@code{File > Save as}}. Non usare @w{@code{File > Save}}
+per il file di esempio perché non funzionerà finché non gli darai
+un nome di file valido per LilyPond.
+
+@sourceimage{Learning_Win7_Save_Menu,,,}
+
+Scegli un nome per il tuo file, ad esempio @file{test.ly}.
+
+@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+
+
+@subsubheading Passo 2a. Compila (con drag-and-drop)
+
+A seconda di quel che preferisci, per compilare il file puoi:
+
+Trascinare e rilasciare (drag-and-drop) il file direttamente sull'icona di LilyPond.
+
+@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+
+Cliccare col tasto destro sul file e dal menu contestuale a comparsa scegliere
+@w{@code{Open with > LilyPond}}.
+
+@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+
+
+@subsubheading Passo 2b. Compilare (con doppio clic)
+
+O semplicemente clicca due volte su @file{test.ly}.
+
+
+@subsubheading Passo 3. Visualizza l'output
+
+Durante la compilazione del file @file{test.ly}, una finestra dei comandi
+si aprirà per breve tempo e poi si chiuderà. Nel corso di questo processo
+verranno creati tre ulteriori file.
+
+@sourceimage{Learning_Win7_All_Files_Created,,,}
+
+Il file PDF contiene il file @file{test.ly} compilato.
+
+@sourceimage{Learning_Win7_Pdf_Output,,,}
+
+
+@subsubheading Altri comandi
+
+Per creare un nuovo file, per prima cosa seleziona @w{@code{File > New}} se
+hai aperto un file creato in precedenza.
+
+@sourceimage{Learning_Win7_New_Menu,,,}
+
+@noindent
+oppure @w{@code{File > Open}} per aprire e modificare i file che hai
+salvato prima.
+
+@sourceimage{Learning_Win7_Open_Menu,,,}
+
+Devi salvare qualsiasi nuovo modifica prima di compilare. Se il file
+PDF non viene creato, controlla se ci sono degli errori nel file di log che
+sarà stato creato durante il tentativo di compilazione.
+
+@sourceimage{Learning_Win7_Log_File,,,}
+
+Questo file di log viene sovrascritto ogni volta che compili il file LilyPond.
+
+Il file PS viene usato da LilyPond per creare il file PDF e può essere
+ignorato. Anch'esso viene sovrascritto ogni volta che compili il file.
+
+Se visualizzi il file in un lettore PDF, devi chiudere il PDF se desideri
+fare una nuova compilazione, perché potrebbe non riuscire a creare il
+nuovo file PDF mentre è ancora aperto per la visualizzazione.
+
+
+@end macro
+
+
+@c not lilypad at all, but I ran out of names. :(
+@macro lilypadCommandLine
+@warning{Queste istruzioni presumono che tu abbia familiarità con i
+programmi a linea di comando. Se stai usando uno dei programmi descritti in
+@rweb{Editing facilitato}, in caso di problemi nel compilare un file consulta
+la documentazione di quei programmi.}
+
+
+@subsubheading Passo 1. Crea il tuo file @file{.ly}
+
+Crea un file di testo chiamato @file{test.ly} e scrivi:
+
+@c double \\ required because this is inside a macro!
+@example
+\\version "@w{@versionStable{}}"
+@{
+ c' e' g' e'
+@}
+@end example
+
+
+@subsubheading Passo 2. Compila (da linea di comando)
+
+Per elaborare @file{test.ly}, scrivi il seguente comando nel terminale:
+
+@example
+lilypond test.ly
+@end example
+
+@noindent
+Vedrai qualcosa di simile a questo:
+
+@example
+GNU LilyPond @w{@versionStable{}}
+Processing `test.ly'
+Parsing...
+Interpreting music...
+Preprocessing graphical objects...
+Solving 1 page-breaking chunks...[1: 1 pages]
+Drawing systems...
+Layout output to `test.ps'...
+Converting to `./test.pdf'...
+@end example
+
+@subsubheading Passo 3. Visualizza l'output
+
+Puoi visualizzare o stampare il file @file{test.pdf}.
+
+@end macro
+
+
--- /dev/null
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
+@c This file is part of web/community.itexi and
+@c contributor/introduction.itely
+
+@ignore
+ Translation of GIT committish: 66e5185e494d29c40ec25d5f71326836204cd680
+
+ When revising a translation, copy the HEAD committish of the
+ version that you are working on. For details, see the Contributors'
+ Guide, node Updating translation committishes..
+@end ignore
+
+@macro helpusNeed
+@subheading Abbiamo bisogno di te!
+
+Il team di sviluppo di LilyPond è piuttosto piccolo; desideriamo davvero
+coinvolgere nuove persone. Prendi in considerazione l'idea di aiutare i
+tuoi compagni utenti di LilyPond diventando un collaboratore!
+
+Anche lavorare su piccoli compiti può avre un grande impatto: occuparsi di
+questi compiti permette agli sviluppatori esperti di lavorare sui compiti
+complessi, invece di impiegare il tempo in quelli semplici.
+
+@end macro
+
+
+@macro helpusTasks
+@subheading Compiti semplici
+
+Non è richiesto compilare o lavorare sul codice sorgente!
+
+@itemize
+@item
+Supporto nelle mailing list: rispondi alle domande degli utenti.
+
+@item
+Segnalazione bug: aiuta gli utenti a creare una @rweb{Segnalazione bug}
+corretta e/o entra nel Bug Squad per l'organizzazione dei @rcontribnamed{Issues, Problemi}.
+
+@item
+Documentazione: puoi proporre piccole modifiche seguendo le linee
+guida per i @rcontribnamed{Documentation suggestions,Consigli per la documentazione}.
+
+@item
+LilyPond Snippet Repository (LSR): crea e correggi i frammenti di codice
+seguendo le linee guida in
+@rcontribnamed{Adding and editing snippets, Aggiungere e modificare i frammenti di codice}.
+
+@item
+Discussioni, revisioni e prove: gli sviluppatori chiedono spesso
+delle opinioni sulla documentazione, possibili cambiamenti di sintassi
+e il test di nuove funzionalità. Contribuisci a queste discussioni!
+
+@end itemize
+
+@subheading Compiti avanzati
+
+Questi compiti di solito richiedono il codice sorgente e la capacità di
+compilare LilyPond.
+
+@warning{Consigliamo ai collaboratori che usano Windows o MacOS X di
+@strong{non} cercare di configurare il proprio ambiente di sviluppo;
+si consiglia invece di usare Lilydev come spiegato in @rcontribnamed{Quick start,Avvio rapido}.}
+
+Anche i collaboratori che usano Linux o FreeBSD possono usare Lilydev, ma se
+preferiscono il proprio ambiente di sviluppo, devono leggere
+@rcontribnamed{Working with source code,Lavorare col codice sorgente} e
+@rcontribnamed{Compiling,Compilare}.
+
+@itemize
+@item
+Documentazione: per ampie modifiche si veda
+@rcontribnamed{Documentation work,Lavorare sulla documentazione}.
+
+@item
+Sito web: il sito web viene creato dai sorgenti della
+documentazione. Si vedano le informazioni relative alla documentazione e anche
+@rcontribnamed{Website work,Lavorare sul sito web}.
+
+@item
+Traduzioni: si veda @rcontribnamed{Translating the documentation,Tradurre la documentazione}
+e @rcontribnamed{Translating the website,Tradurre il sito web}.
+
+@item
+Correzioni di bug o nuove funzionalità: il miglior modo per iniziare è unirsi
+ai Frogs e leggere @rcontribnamed{Programming work,Lavori di programmazione}.
+
+@end itemize
+
+@end macro
+
+
+@macro helpusProjects
+@subheading Progetti
+
+@subsubheading Frogs
+
+Sito web e mailing list:
+
+@example
+@uref{http://frogs.lilynet.net}
+@end example
+
+I Frogs sono comuni utenti LilyPond che hanno scelto di impegnarsi
+nello sviluppo del loro software preferito. Correggere i bug,
+implementare nuove funzionalità, documentare il codice sorgente: c'è
+molto da fare. Ma soprattutto si tratta di un'occasione per tutti
+per acquisire maggiori conoscenze su LilyPond, il Software Libero e
+la programmazione... e per divertirsi. Se uno di questi punti
+ti incuriosisce, allora il monito è: @emph{Join the Frogs!}
+
+
+
+@subsubheading Grand LilyPond Input Syntax Standardization
+
+Sito web:
+@rcontrib{Grand LilyPond Input Syntax Standardization (GLISS)}.
+
+GLISS renderà stabile la sintassi di input (esclusi i tweak) per il futuro
+LilyPond 3.0. Dopo l'aggiornamento alla versione 3.0, la sintassi di input per
+la musica senza tweak rimarrà stabile nell'immediato futuro.
+
+Ci sarà un ampio periodo di discussione per determinare la specifica finale
+per l'input.
+
+@warning{GLISS inizierà poco dopo il rilascio della versione 2.16.}
+
+@subsubheading Grand Organizing Project
+
+Sito web: @rcontrib{Grand Organization Project (GOP)}.
+
+GOP sarà la nostra grande iniziativa di reclutamento di nuovi collaboratori. Abbiamo
+un disperato bisogno di distribuire tra più persone i compiti di sviluppo (inclusi
+i @qq{compiti semplici} che non richiedono di dover programmare o avere a che
+fare col codice sorgente!). Abbiamo anche bisogno di documentare la conoscenza
+degli attuali sviluppatori in modo che non vada persa.
+
+Diversamente dalla maggior parte dei @qq{Grand Projects}, GOP non aggiungerà
+nuove funzionalità né riprogetterà completamente le cose. Il suo scopo è darci
+delle fondamenta più stabili in modo da poter andare avanti con compiti più
+grandi in futuro.
+
+@end macro
+
+
\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: 4d852ef65fc654e4ed02413926fc0cb78a1da1be
+ Translation of GIT committish: 18e1018ce7446f2cb86990c31f112f6cf05ca371
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@include macros.itexi
@include weblinks.itexi
-@afourpaper
@c don't remove this comment.
@ignore
@macro docLinkSplit{name,base,webLink}
@ifclear web_version
- @uref{../\base\/index.html, \name\ (split HTML)}
+ @uref{../\base\/index.html, \name\ (HTML multipagina)}
@end ifclear
@ifset web_version
\webLink\
@macro docLinkBig{name,base,webLink}
@ifclear web_version
- @uref{../\base\-big-page.html, \name\ (big HTML)}
+ @uref{../\base\-big-page.html, \name\ (HTML pagina unica)}
@end ifclear
@ifset web_version
\webLink\
@item @docLinkSplit{\name\,\base\,\split\} @minus{}
il manuale è diviso in tante pagine HTML.
- @*@ @ @emph{(small download for each page)}
+ @*@ @ @emph{(piccolo download per ogni pagina)}
@item @docLinkBig{\name\,\base\,\big\} @minus{}
leggi questo manuale in un'unica grande pagina HTML.
- @*@ @ @emph{(large single download, \bigsize\)}
+ @*@ @ @emph{(un solo grande download, \bigsize\)}
@item @docLinkPdf{\name\,\base\,\pdf\} @minus{}
scarica come file PDF.
- @*@ @ @emph{(large single download, \pdfsize\)}
+ @*@ @ @emph{(un solo grande download, \pdfsize\)}
@end itemize
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2
+ Translation of GIT committish: 402e3b1ac8d0c65b63a992dfd1247ed058e69ff8
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@divClass{column-center-top}
@subheading Cosa sono gli @qq{Esempi minimi}?
-Un esempio minimo è un esempio dal quale niente può essere tolto.
+Un esempio minimo è un esempio dal quale @strong{niente} può essere tolto.
@divEnd
@divClass{column-left-bottom}
possono comprenderlo e aiutarti.
@item
-Un esempio semplice dimostra che hai tentato di risolvere il problema
+Un esempio minimo dimostra che hai tentato di risolvere il problema
da solo. Quando le persone inviano grandi porzioni di input, sembra
che non si preoccupino che noi li possiamo aiutare o no.
@item
-Creare un esempio minimo ti spinge a capire cosa sta
+Creare un esempio minimo ti aiuta a capire cosa sta
succedendo. Molte segnalazioni di un falso problema possono essere
evitate se si prova a creare un esempio minimo; se non riesci a ricreare
un @qq{bug} in un esempio minimo, allora probabilmente il problema è
@divClass{column-right-bottom}
-@subheading Come li creo?
+@subheading Come crearli?
@divClass{keep-bullets}
@itemize
@item
-Includi il numero di versione nel comando \version.
+Includi il numero di versione nel comando @code{\version}.
@item
Crea un esempio piccolo! Gli esempi che riguardano la spaziatura o la
formattazione di pagina potrebbero richiedere molte battute, ma la maggior
-parte dei problemi può essere ricreata in una singola
-battuta.
+parte dei problemi può essere ricreata in meno di una sola battuta.
@item
Durante la preparazione di un esempio, cerca di commentare @w{(@code{%}
allora elimina il materiale commentato!
@item
-Evita di usare note, tonalità, o segni di tempo complicati a meno che
+Evita di usare note, tonalità o segni di tempo complicati a meno che
il malfunzionamento non riguardi proprio il comportamento di questi elementi.
@item
Non usare i comandi @code{\override} o @code{\set} a meno che il malfunzionamento
non riguardi questi comandi in particolare.
+@item
+Eventualmente, allega un'immagine che mostri il risultato grafico desiderato.
+
@end itemize
@divEnd
@divEnd
+@divClass{column-center-bottom}
+@subheading Quanto piccoli devono essere?
+
+Il codice seguente è un esempio minimo?
+
+@example
+\version "2.14.1"
+\include "english.ly"
+
+\score @{
+ \new Staff @{
+ \key d \major
+ \numericTimeSignature
+ \time 2/4
+ <cs' d'' b''>16 <cs' d'' b''>8.
+ %% Here: the tie on the D's looks funny
+ %% Too tall? Left-hand endpoint is not aligned with the B tie?
+ ~
+ <cs' d'' b''>8 [ <b d'' a''> ]
+ @}
+@}
+@end example
+
+Non è così grande, ma un vero esempio minimo è il seguente:
+
+@example
+\version "2.14.1"
+@{
+ % middle tie looks funny here:
+ <c' d'' b''>8. ~ <c' d'' b''>8
+@}
+@end example
+
+Sono pochi gli esempi minimi che superano 10 righe di codice -
+spesso 4 righe sono sufficienti per spiegare il problema!
+@divEnd
@node Segnalazione bug
Ecco un esempio di una valida segnalazione bug:
@example
-%% il comando di ottavazione
-%% non modifica l'output!
-
-\version "2.10.0"
-\paper@{ ragged-right=##t @}
-\relative c''' @{
- c1
- #(set-octavation 1)
- c1
+% Le alterazioni dovrebbero comparire solo nella
+% prima nota di una legatura di valore, ma questa
+% versione mostra il bemolle accanto a entrambe le note.
+\version "2.10.1"
+
+\relative c'' @{
+ bes1 ~
+ bes1
@}
@end example
@end itemize
@divEnd
+@divEnd
+
+@divClass{column-center-bottom}
+@subheading Passo 4: Attendi una risposta
Una volta che il bug è stato inviato alla lista, la nostra Squadra Bug esaminerà
la segnalazione. Una risposta può richiedere fino a 24 ore, perché abbiamo
avere un account google.
@divEnd
+@divClass{column-center-bottom}
+@subheading Aiuto facoltativo: mostra il comportamento desiderato
+
+Dopo che il problema è stato aggiunto al tracker, può essere molto
+utile poter vedere l'output desiderato. Aggiungi pure del codice di
+input e/o delle immagini (se possibile, create con altri strumenti) che
+mostrino come dovrebbe apparire secondo te!
+
+@divEnd
+
+
@node Aiutaci
@unnumberedsec Aiutaci
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2
+ Translation of GIT committish: 12503a0c383617cd11fa0bba2836af6c0518ecf7
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@subsubheading Disinstallazione
-Digita in un terminale:
+Digita nel terminale:
@example
uninstall-lilypond
@end example
+@subsubheading Aiuto
+
+Digita nel terminale:
+
+@example
+sh lilypond-@versionStable{}-OS-TYPE.sh --help
+@end example
+
@divEnd
@item
@sourceimage{logo-fedora,,,}
@uref{http://koji.fedoraproject.org/koji/packageinfo?packageID=2447,
-Fedora: LilyPond 2.12.3}
+Fedora: LilyPond 2.14.1}
@item
@sourceimage{logo-ubuntu,,,}
@uref{http://packages.ubuntu.com/search?keywords=lilypond,
-Ubuntu: LilyPond 2.12.2}
+Ubuntu: LilyPond 2.12.3}
@item
@sourceimage{logo-slackware,,,}
@uref{http://www.johannes-schoepfer.de/lilypond/,
-Slackware: LilyPond 2.12.3}
+Slackware: LilyPond 2.14.1}
@item
@sourceimage{logo-debian,,,}
@uref{http://packages.debian.org/search?keywords=lilypond,
-Debian: LilyPond 2.12.2}
+Debian: LilyPond 2.12.3}
@item
@sourceimage{logo-suse,,,}
[@var{pre-set paths}];@var{DIR}\LilyPond\usr\bin
@end example
-@warning{@var{DIR} generalmente è @code{C:\Program Files}.}
+@warning{@var{DIR} generalmente è @code{C:@bs{}Program Files}.}
@noindent
e clicca il bottone @qq{OK} per chiudere la finestra.
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: cd0fa693cd2297298aabfdc2d2d9d8b0d7746a5c
+ Translation of GIT committish: d282588015bad1ed86833848a5bcbdc43cfdc9e5
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@itemize
@item
-May 2010
+Aprile 2011
+
+@uref{http://www.linux-magazine.com,Linux Magazine} pubblica un
+articolo intitolato
+@uref{http://www.linux-magazine.com/w3/issue/126/088-090_projects.pdf,
+Projects on the Move}. È un articolo introduttivo a MuseScore,
+LilyPond e Chordii. L'autrice Carla Schroder afferma @qq{LilyPond è un
+programma a linea di comando, ma non lasciatevi spaventare dalla mancanza
+dell'interfaccia grafica; LilyPond è facile da usare e da imparare}, e fornisce
+anche un esempio pratico.
+
+@item
+Maggio 2010
Peter Kirn, sul sito Create Digital Music, pubblica una
@uref{http://createdigitalmusic.com/2010/05/14/lilypond-free-beautiful-music-notation-engraving-for-anyone/,recensione
articolo su LilyPond}.
@item
-August 2009
+Agosto 2009
Ann Drinan, sul sito
@uref{http://www.polyphonic.org/article.php?id=188, Polyphonic.org}, presenta
software per gestire le loro biblioteche.
@item
-June 2009
+Giugno 2009
In un @uref{http://news.lilynet.net/Free-Music-Now, articolo}
pubblicato nella rivista annuale francese @emph{National Conservatory Parent
che fa sembrare le alternative commerciali di second'ordine.}
@item
-August 20, 2005
+20 Agosto 2005
La rivista belga De Standaard fa un'indagine sulle motivazioni degli
autori di Software Libero in un articolo intitolato
@uref{http://denemo.org}
-Denemo è un editor grafico che genera codice sorgente LilyPond,
-nella versione 2.8.7, e permette anche la riproduzione audio. Consente
-agli utenti di vedere il codice sorgente LilyPond in parallelo alla
-visualizzazione grafica. Modifiche manuali del codice possono essere attaccate a note,
-accordi etc. e vengono salvate nel file di Denemo, così che gli utenti possano
-continuare a modificare il documento tramite l'interfaccia grafica.
+Denemo è un editor grafico che genera codice sorgente LilyPond
+e permette anche la riproduzione audio. Consente agli utenti di vedere
+il codice sorgente LilyPond in parallelo alla visualizzazione grafica. Modifiche
+manuali del codice possono essere attaccate a note, accordi etc. e vengono
+salvate nel file di Denemo, così che gli utenti possano continuare a
+modificare il documento tramite l'interfaccia grafica.
Se si muove il cursore nel codice LilyPond si muove anche il cursore
nella visualizzazione grafica, e qualsiasi errore di sintassi nelle tue modifiche
manuali al codice LilyPond viene evidenziato nella visualizzazione testuale
-quando stampi da lì.
+quando elaborato da lì.
@divEnd
i file di input di LilyPond.
Puoi trovare maggiori informazioni sulla configurazione di Emacs e Vim in
-@rprogram{Text editor support}.
+@rprogram{LilyPond e gli editor di testo}.
@sourceimage{logo-macosx,,,}
@itemize
@item
-@uref{http://lilykde.googlecode.com/,LilyKDE} è stato sosituito da
-@uref{http://www.frescobaldi.org/,Frescobaldi}, e esiste soltanto come
+@uref{http://lilykde.googlecode.com/,LilyKDE} è stato sostituito da
+@uref{http://www.frescobaldi.org/,Frescobaldi}; esiste soltanto come
LilyKDE3 per KDE 3.5 e lilypond-KDE4 per KDE 4.1.
@item
@c -*- coding: utf-8; mode: texinfo; -*-
@ignore
- Translation of GIT committish: ee3a89f9f7289bcd90c5f27fd8f86400159088b2
+ Translation of GIT committish: c7175b7e8387655964d9c9a975e9789fe581043c
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
prima questo!
@item
-@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}}
+@ifWebLinks{@manualStableLearningSplitNoName-it,@rlearningnamed{Top,Apprendimento}}
un'introduzione a LilyPond leggera e @qq{imprescindibile}.
-@details{Learning}
+@details{Apprendimento}
@item
-@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}}
+@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossario}}
@emph{(lettura opzionale)}
termini musicali e traduzioni.
-@details{Glossary}
+@details{Glossario}
@item
-@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Saggio}}
@emph{(lettura opzionale)}
informazioni sull'incisione realizzata dal computer.
-@details{Essay}
+@details{Saggio}
@end itemize
@itemize
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}}
+@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notazione}}
guida alla sintassi.
-@details{Notation}
+@details{Notazione}
-@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}}
+@item @ifWebLinks{@manualStableUsageSplitNoName-it,@rprogramnamed{Top,Uso}}
eseguire i programmi.
-@details{Usage}
+@details{Uso}
-@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}}
+@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Frammenti}}
brevi trucchi e consigli.
-@details{Snippets}
+@details{Frammenti}
@end itemize
questo documento.
@details{Web}
-@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}}
+@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Cambiamenti}}
cosa c'è di nuovo?
-@details{Changes}
+@details{Cambiamenti}
-@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}}
+@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Estendere}}
tweak interessanti.
-@details{Extending}
+@details{Estendere}
-@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
+@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Funzionamento interno}}
guida ai tweak.
-@details{Internals}
+@details{Funzionamento interno}
@end itemize
@itemize
+@item
+@ref{Tutti}:
+versioni stabili precedenti e quella attuale in un archivio compresso.
+
@item @ref{Tradotti}:
stato delle traduzioni per i lettori di lingua non inglese.
-@item @ref{Tutti}:
-manuali vecchi e scaricabili.
+@item
+@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+esempi, consigli e trucchi creati dagli utenti.
@item @ref{Sviluppo}:
manuali per la versione non stabile.
* Saggio:: Saggio.
* Notazione:: Riferimento.
* Uso:: Utilizzo.
-* Frammenti di codice:: Frammenti di codice.
+* Frammenti:: Frammenti di codice.
* FAQ:: FAQ.
* Web:: Web.
* Cambiamenti:: Novità.
-* Estensioni:: Programmazione.
+* Estendere:: Programmazione.
* Funzionamento interno:: Funzionamento interno.
* Tradotti:: Traduzione.
* Tutti:: Tutti i manuali.
@divClass{column-right-bottom}
-@docLinks{Learning, learning,
- @rlearningnamed{Top,Learning},
+@docLinks{Apprendimento, learning,
+ @rlearningnamed{Top,Apprendimento},
@manualStableLearningSplit,
@manualStableLearningBig, 1.5 MB,
@manualStableLearningPdf, 3 MB}
@divClass{column-right-bottom}
-@docLinks{Music glossary, music-glossary,
- @rglosnamed{Top,Music glossary},
+@docLinks{Glossario musicale, music-glossary,
+ @rglosnamed{Top,Glossario musicale},
@manualStableGlossarySplit,
@manualStableGlossaryBig, 1 MB,
@manualStableGlossaryPdf, 1.5 MB}
@divClass{column-right-bottom}
-@docLinks{Essay, essay,
- @ressaynamed{Top,Essay},
+@docLinks{Saggio, essay,
+ @ressaynamed{Top,Saggio},
@manualStableEssaySplit,
@manualStableEssayBig, 2 MB,
@manualStableEssayPdf, 2.5 MB}
@divClass{column-right-bottom}
-@docLinks{Notation, notation,
- @rusernamed{Top,Notation},
+@docLinks{Notazione, notation,
+ @rusernamed{Top,Notazione},
@manualStableNotationSplit,
@manualStableNotationBig, 7 MB,
@manualStableNotationPdf, 18 MB}
@translationof Usage
@divClass{column-left-top}
-@subheading Usage manual
+@subheading Manuale d'uso
Questo libro spiega come eseguire i programmi, come integrare la
notazione di LilyPond in altri programmi, e suggerisce le @qq{migliori
@divClass{column-right-bottom}
-@docLinks{Usage, usage,
- @rprogramnamed{Top,Usage},
+@docLinks{Uso, usage,
+ @rprogramnamed{Top,Uso},
@manualStableUsageSplit,
- @manualStableUsageBig, 300 KB,
- @manualStableUsagePdf, 400 KB}
+ @manualStableUsageBig, 400 KB,
+ @manualStableUsagePdf, 600 KB}
@divEnd
-@node Frammenti di codice
-@unnumberedsec Frammenti di codice
+@node Frammenti
+@unnumberedsec Frammenti
@translationof Snippets
@divClass{column-left-top}
-@subheading Frammenti di codice
+@subheading Frammenti
Questo manuale presenta una selezione di frammenti di codice LilyPond tratti dal
@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
@divClass{column-right-bottom}
-@docLinks{Snippets, snippets,
- @rlsrnamed{Top,Snippets},
+@docLinks{Frammenti, snippets,
+ @rlsrnamed{Top,Frammenti},
@manualStableSnippetsSplit,
@manualStableSnippetsBig, 2.5 MB,
@manualStableSnippetsPdf, 8 MB}
@subsubheading C'è un sacco di documentazione! Devo leggerla?
-Devi leggere @ref{Learning, il Manuale di Apprendimento}. Per quanto
+Devi leggere il @ref{Learning, Manuale di Apprendimento}. Per quanto
riguarda il resto della documentazione, puoi leggere solo le sezioni
sul tipo di notazione che vuoi creare.
@subsubheading C'è ancora molto da leggere! Ne vale la pena?
Tocca a te decidere; le ragioni per cui potresti voler usare
-LilyPond sono esposte nell' @ref{Introduzione}.
+LilyPond sono esposte nell'@ref{Introduzione}.
@divEnd
@subsubheading Qualcosa non funziona! Come posso risolvere?
-Questo viene spiegato in @rprogram{Troubleshooting}.
+Questo viene spiegato in @rprogram{Risoluzione dei problemi}.
@subsubheading Perché cambiate la sintassi?
-Questo viene spiegato in @rprogram{Why does the syntax change?}.
+Questo viene spiegato in @rprogram{Perché la sintassi cambia?}.
@divEnd
@divClass{column-right-bottom}
-@docLinks{Changes, changes,
- @rchangesnamed{Top,Changes},
+@docLinks{Cambiamenti, changes,
+ @rchangesnamed{Top,Cambiamenti},
@manualStableChangesSplit,
@manualStableChangesBig, 6 KB,
@manualStableChangesPdf, 200 KB}
@divEnd
-@node Estensioni
-@unnumberedsec Estensioni
+@node Estendere
+@unnumberedsec Estendere
@translationof Extending
@divClass{column-left-top}
@divClass{column-right-bottom}
-@docLinks{Extending, extending,
- @rextendnamed{Top,Extending},
+@docLinks{Estendere, extending,
+ @rextendnamed{Top,Estendere},
@manualStableExtendingSplit,
@manualStableExtendingBig, 200 KB,
@manualStableExtendingPdf, 400 KB}
@divClass{column-right-bottom}
-@docLinks{Internals, internals,
- @rinternalsnamed{Top,Internals},
+@docLinks{Funzionamento interno, internals,
+ @rinternalsnamed{Top,Funzionamento interno},
@manualStableInternalsSplit,
@manualStableInternalsBig, 2.5 MB,
@manualStableInternalsPdf, 2.8 MB}
+++ /dev/null
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
-@ignore
- Translation of GIT committish: 61fed596442d47e96c10ac3c9c0c696e5dfd22cf
-
- When revising a translation, copy the HEAD committish of the
- version that you are working on. For details, see the Contributors'
- Guide, node Updating translation committishes..
-@end ignore
-
-@c This file is part of lilypond-web.texi and community.itexi
-
-@c when you add a new item, consider moving the lowest item(s)
-@c into news-old.itexi.
-
-@c keep two blank lines between news entries
-
-@c used for news about the upcoming release; see CG 10.2
-
-
-@newsItem
-@subsubheading Rilasciato LilyPond 2.13.40! @emph{21 Novembre 2010}
-
-Siamo felici di annunciare il rilascio di LilyPond 2.13.40. Questo
-rilascio contiene come sempre un certo numero di correzioni. Tuttavia rimangono
-ancora alcuni problemi critici: questo rilascio è dunque destinato solo
-agli sviluppatori.
-
-Si noti che questa @strong{non} è la seconda versione beta test. A causa di
-varie modifiche non verificate al processo di compilazione, non possiamo essere
-del tutto sicuri della qualità di questo rilascio.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading Prima versione beta test della 2.14 -- Rilasciato LilyPond 2.13.39! @emph{15 Novembre 2010}
-
-LilyPond 2.13.39 è disponibile; questa è la prima beta test della prossima
-versione stabile, la 2.14. Si invitano gli utenti a provare questa
-versione. Le nuove funzionalità introdotte rispetto alla versione 2.12.3 sono
-elencate nel manuale @qq{Changes} della sezione del sito sullo
-@ref{Sviluppo}.
-
-Ci sono ancora alcuni problemi critici in questo rilascio: la
-spaziatura verticale è sospetta in due casi, e lilypond può
-bloccarsi se l'input è strano. Se decidi di provare la 2.13.39, non
-stupirti se incontrerai dei problemi, ma inviaci una cortese
-@ref{Segnalazione bug}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading LilyPond Report #22. @emph{3 Novembre 2010}
-
-Il @emph{LilyPond Report} è tornato, con alcune sorprese ed esaltanti
-notizie per tutta la comunità di LilyPond! In questo numero troverete
-una lista completa e aggiornata di tutte le mailing list e i forum su
-LilyPond in tutto il mondo. Inoltre, per la prima volta il nostro ospite
-speciale è il co-fondatore e sviluppatore principale di LilyPond,
-@strong{Jan Nieuwenhuizen}, che è stato impegnato negli ultimi tre mesi --
-continua a leggere per scoprire in cosa!
-
-@uref{http://news.lilynet.net/The-LilyPond-Report-22, Leggi il
-LilyPond Report 22} ora; commenti e contributi sono ben accetti!
-
-@newsEnd
-
-
-
<<
{
\once \override Stem #'transparent = ##t
+ \once \override Flag #'transparent = ##t
b8~ b\noBeam
}
\\
<<
{
\once \override Stem #'transparent = ##t
+ \once \override Flag #'transparent = ##t
\once \override Stem #'length = #8
b8~ b\noBeam
}
only the @code{mensural} style is supported.
@lilypond[quote,fragment,ragged-right,verbatim]
-\override Stem #'flag-style = #'mensural
+\override Flag #'style = #'mensural
\override Stem #'thickness = #1.0
\override NoteHead #'style = #'mensural
\autoBeamOff
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'vaticana.punctum
\clef "vaticana-do2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'vaticana.punctum
\clef "vaticana-fa2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'medicaea.punctum
\clef "medicaea-do2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'medicaea.punctum
\clef "medicaea-fa2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'hufnagel.punctum
\clef "hufnagel-do2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'hufnagel.punctum
\clef "hufnagel-fa2"
c
\override Staff.StaffSymbol #'color = #red
\override Staff.LedgerLineSpanner #'color = #red
\override Voice.Stem #'transparent = ##t
+ \override Voice.Flag #'transparent = ##t
\override NoteHead #'style = #'hufnagel.punctum
\clef "hufnagel-do-fa"
c
one can use either @code{\override Stem #'transparent = ##t} or
@code{\override Stem #'length = #0} instead, and restore the stem
when needed with the corresponding @code{\once \override Stem
-#'transparent = ##f} (see example below).
+#'transparent = ##f} (see example below). When using stems that
+carry flags, make sure to set @code{\override Flag #'transparent
+= ##t} as well.
@b{Timing.} For unmetered chant, there are several alternatives.
\remove "Time_signature_engraver"
\override BarLine #'X-extent = #'(-1 . 1)
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\override Beam #'transparent = ##t
\override BarLine #'transparent = ##t
\override TupletNumber #'transparent = ##t
@example
\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t
+\override Flag #'transparent = ##t
@end example
All these plug-ins have to cooperate, and this is achieved with a
squashedPosition = #0
\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\alias Voice
@}
@end example
% extend the stems to reach the other staff
\override Stem #'length = #12
% do not print extra flags
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
% prevent beaming as needed
a8 g4 f8 f bes\noBeam g4
}
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
de las notas del bajo, mediante la definición de la propiedad
@code{BassFigureAlignmentPositioning #'direction} (exclusivamente
-dentro de un contexto @code{Staff}). Se puede elegir entre @code{UP}
-(o @code{1}, arriba), @code{CENTER} (o @code{0}, centrado) y
-@code{DOWN} (o @w{@code{-1}}, abajo).
+dentro de un contexto @code{Staff}). Se puede elegir entre @code{#UP}
+(o @code{#1}, arriba), @code{#CENTER} (o @code{#0}, centrado) y
+@code{#DOWN} (o @code{#-1}, abajo).
Esta propiedad se puede cambiar tantas veces como queramos. Utilice
@code{\\once \\override} si no quiere que la sobreescritura se aplique
notas guía orquestales a la reducción de piano en una partitura vocal.
La función musical @code{\\cueWhile} toma cuatro argumentos: la música
de la que se toma la cita, como viene definida por @code{\\addQuote},
-el nombre que insertar antes de las notas guía, y después @code{UP} o
-@code{DOWN} para especificar @code{\\voiceOne} con el nombre encima
+el nombre que insertar antes de las notas guía, y después @code{#UP} o
+@code{#DOWN} para especificar @code{\\voiceOne} con el nombre encima
del pentagrama o bien @code{\\voiceTwo} con el nombre debajo del
pentagrama, y finalmente la música de piano con la que las notas guía
deben aparecer en paralelo. El nombre del instrumento citado se
@code{\\cueWhile} braucht vier Argumente: Die Noten, von denen die
Stichnoten formatiert werden sollen, definiert durch @code{\\addQuote},
die Bezeichnung, die mit den Noten angegeben werden soll, dann entweder
-@code{UP} (hoch) oder @code{DOWN} (runter) zur Angabe von entweder
+@code{#UP} (hoch) oder @code{#DOWN} (runter) zur Angabe von entweder
@code{\\voiceOne} mit der Bezeichnung über dem System oder @code{\\voiceTwo}
mit der Bezeichnung unter dem System, und schließlich die Klaviermusik,
die parallel zu den Stichnoten gespielt werden soll. Die Bezeichnung des
pour gérer ces repères. La fonction musicale @code{\\cueWhile} prend
quatre arguments@tie{}: la musique d'où provient la citation, telle que
définie par @code{\\addQuote}, le nom qui sera mentionné en regard de
-cette citation, son positionnement -- @code{UP} ou @code{DOWN} selon
+cette citation, son positionnement -- @code{#UP} ou @code{#DOWN} selon
qu'il sera attribué à @code{\\voiceOne} et placé au-dessus ou
@code{\\voiceTwo} et placé en dessous -- et enfin la musique du piano
qui interviendra en parallèle. Le nom de l'instrument en question
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.15.9
%% This file is in the public domain.
-\version "2.15.7"
+\version "2.15.9"
\header {
- lsrtags = "ancient-notation"
-
%% Translation of GIT committish: 70f5f30161f7b804a681cd080274bfcdc9f4fe8c
texidoces = "
Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
"
doctitlefr = "Gravure de musique ancienne"
+ lsrtags = "ancient-notation"
+
texidoc = "
Shown here are many (all?) of the symbols that are included in
LilyPond's support for ancient notation.
-
-
-
"
doctitle = "Ancient fonts"
} % begin verbatim
s32*1
% \break % 12 (32*1)
- }
+ } % begin verbatim
+
>>
>>
\MensuralVoice
\override NoteHead #'style = #'neomensural
\override Rest #'style = #'neomensural
- \override Stem #'flag-style = #'mensural
+ \override Flag #'style = #'mensural
\override Stem #'thickness = #1.0
}
\context {
Dentro de un acorde (entre ángulos simples @code{< >}), antes de la
nota que queremos alterar, situamos la instrucción @code{\\tweak}
-seguida por @code{'font-size} y definimos el tamaño adecuado como
-@w{@code{-2}} (una cabeza pequeña).
+seguida por @code{#'font-size} y definimos el tamaño adecuado como
+@code{#-2} (una cabeza pequeña).
"
doctitlees = "Modificar el tamaño de una nota suelta de un acorde"
partitura completa.
Este archivo tiene que procesarse de forma separada con la opción
-@option{-dclip-systems}; la página de fragmentos de código podría no
+@code{-dclip-systems}; la página de fragmentos de código podría no
mostrar el resultado adecuadamente.
La salida consiste en archivos con los nombres
una barra de la misma longitud que el grupo especial. Para controlar
la visibilidad de los corchetes de grupo, establezca la propiedad
@code{'bracket-visibility} a @code{#t} (imprimir el corchete siempre),
-@code{#f} (no imprimirlo nunca) o @code{'if-no-beam} (imprimir el
+@code{#f} (no imprimirlo nunca) o @code{#'if-no-beam} (imprimir el
corchete solamente si no hay barra).
"
@code{'bracket-visibility}, de contôler précisément leur
affichage@tie{}: déterminée à @code{#t}, ils seront toujours
imprimés@tie{}; @code{#f} permet de ne jamais les imprimer, et
-@code{'if-no-beam} les imprimera en l'absence de ligature.
+@code{#'if-no-beam} les imprimera en l'absence de ligature.
"
doctitlefr = "Contrôle de l'impression des crochets de nolet"
\once \override NoteHead #'X-offset = #1.7
\once \override Stem #'rotation = #'(45 0 0)
\once \override Stem #'extra-offset = #'(-0.2 . -0.2)
- \once \override Stem #'flag-style = #'no-flag
+ \once \override Flag #'style = #'no-flag
\once \override Accidental #'extra-offset = #'(4 . 0)
}
texidocfr = "
Il s'agit de fonctions postfix pour personnaliser l'extension des
crescendos textuels. L'extension devrait débuter sur la première notte
-de la mesure. Il faut utiliser @w{@code{-\mycresc}} -- comme une
+de la mesure. Il faut utiliser @code{-\mycresc} -- comme une
articulation -- sous peine que le départ de l'extension n'apparaisse
qu'à la note suivante.
"
\once \override TabNoteHead #'transparent = ##t
\once \override NoteHead #'transparent = ##t
\once \override Stem #'transparent = ##t
+ \once \override Flag #'transparent = ##t
\once \override NoteHead #'no-ledgers = ##t
\once \override Glissando #'(bound-details left padding) = #0.3
}
texidoces = "
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
-@w{@code{-1}} es izquierda, @code{0} es centrado y @code{1} es derecha;
-sin embargo, puede usar también @code{LEFT}, @code{CENTER} y
-@code{RIGHT}.
+@code{#-1} es izquierda, @code{#0} es centrado y @code{#1} es derecha;
+sin embargo, puede usar también @code{#LEFT}, @code{#CENTER} y
+@code{#RIGHT}.
"
doctitlees = "Alineación de la letra"
texidocde = "
Die horizontale Ausrichtung von Gesangstext kann eingestellt werden, indem
man die @code{self-alignment-X}-Eigenschaft des @code{LyricText}-Objekts
-verändert. @w{@code{-1}} bedeutet links, @code{0} bedeutet mittig und @code{1}
-bedeutet rechts, man kann aber genauso gut auch @code{LEFT}, @code{CENTER}
-und @code{RIGHT} benutzen.
+verändert. @code{#-1} bedeutet links, @code{#0} bedeutet mittig und @code{#1}
+bedeutet rechts, man kann aber genauso gut auch @code{#LEFT}, @code{#CENTER}
+und @code{#RIGHT} benutzen.
"
doctitlede = "Ausrichtung von Gesangstext"
texidocfr = "
L'alignement horizontal des paroles peut se gérer à l'aide de la
propriété @code{self-alignment-X} de l'objet @code{LyricText}.
-Les valeurs @w{@code{-1}} ou @code{LEFT} produiront un alignement par la
-gauche, les valeurs @code{0} ou @code{CENTER} un alignement centré, et
-les valeurs @code{1} ou @code{RIGHT} un alignement par la droite.
+Les valeurs @code{#-1} ou @code{#LEFT} produiront un alignement par la
+gauche, les valeurs @code{#0} ou @code{#CENTER} un alignement centré, et
+les valeurs @code{#1} ou @code{#RIGHT} un alignement par la droite.
"
doctitlefr = "Alignement des syllabes"
@code{dashLarger}, @code{dashDot} y @code{dashUnderscore} reciben
valores predeterminados. Se pueden modificar estos valores
predeterminados para las abreviaturas. Por ejemplo, para asociar
-la abreviatura @w{@code{-+}} (@code{dashPlus}) con el símbolo del
+la abreviatura @code{-+} (@code{dashPlus}) con el símbolo del
semitrino en lugar del símbolo predeterminado +, asigne el valor
@code{trill} a la variable @code{dashPlus}:
@code{dashBar}, @code{dashLarger}, @code{dashDot} und
@code{dashUnderscore} Standardwerte zugewiesen werden. Diese Standardwerte
können verändert werden. Um zum Beispiel die Abkürzung
-@w{@code{-+}} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu
+@code{-+} (@code{dashPlus}) mit dem Triller anstatt mit dem +-Symbol zu
assoziieren, muss der Wert @code{trill} der Variable
@code{dashPlus} zugewiesen werden:
@code{dashHat}, @code{dashPlus}, @code{dashDash}, @code{dashBar},
@code{dashLarger}, @code{dashDot}, et @code{dashUnderscore} ainsi que
leur valeur par défaut. Ces valeurs peuvent être modifiées selon vos
-besoins. Il suffit par exemple, pour affecter au raccourci @w{@code{-+}}
+besoins. Il suffit par exemple, pour affecter au raccourci @code{-+}
(@code{dashPlus}) le symbole du trille en lieu et place du @code{+}
(caractère plus), d'assigner la valeur @code{trill} à la variable
@code{dashPlus} :
--- /dev/null
+%% This file is in the public domain.
+\version "2.15.9"
+
+\header {
+ lsrtags = "ancient-notation"
+
+ texidoc = "
+Shown here are many (all?) of the symbols that are included in
+LilyPond's support for ancient notation.
+"
+ doctitle = "Ancient fonts"
+} % begin verbatim
+
+upperStaff = \new VaticanaStaff = "upperStaff" <<
+ \context VaticanaVoice <<
+ \transpose c c {
+
+ \override NoteHead #'style = #'vaticana.punctum
+ \key es \major
+ \clef "vaticana-fa2"
+ c1 des e f ges
+
+ \override NoteHead #'style = #'vaticana.inclinatum
+ a! b ces'
+ \bar "|"
+ % \break % 1 (8*1)
+
+ \override NoteHead #'style = #'vaticana.quilisma
+ b! des'! ges! fes!
+ \breathe
+ \clef "vaticana-fa1"
+ \override NoteHead #'style = #'vaticana.plica
+ es d
+ \override NoteHead #'style = #'vaticana.reverse.plica
+ c d
+ \bar "|"
+ % \break %2 (8*1)
+
+ \override NoteHead #'style = #'vaticana.punctum.cavum
+ es f
+ \override NoteHead #'style = #'vaticana.lpes
+ g as
+ \override NoteHead #'style = #'vaticana.upes
+ bes as
+ \override NoteHead #'style = #'vaticana.vupes
+ g f
+ \override NoteHead #'style = #'vaticana.linea.punctum
+ \once \override Staff.BarLine #'bar-extent = #'(-1 . 1) \bar "|"
+ % \break % 3 (8*1)
+
+ es d
+ \override NoteHead #'style = #'vaticana.epiphonus
+ c d
+ \override NoteHead #'style = #'vaticana.cephalicus
+ es f
+
+ \override Staff.KeySignature #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Accidental #'glyph-name-alist = #alteration-medicaea-glyph-name-alist
+ \override Staff.Custos #'style = #'medicaea
+ \override NoteHead #'style = #'medicaea.punctum
+ \clef "medicaea-fa2"
+ ces des
+ \bar "|"
+ % \break % 4 (8*1)
+
+ e! f! ges
+ \clef "medicaea-do2"
+ \override NoteHead #'style = #'medicaea.inclinatum
+ a! b! ces'
+ \override NoteHead #'style = #'medicaea.virga
+ b! a!
+ \bar "|"
+ % \break % 5 (8*1)
+
+ ges fes
+ \clef "medicaea-fa1"
+ \override NoteHead #'style = #'medicaea.rvirga
+ e des ces
+
+ \override Staff.KeySignature #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Accidental #'glyph-name-alist = #alteration-hufnagel-glyph-name-alist
+ \override Staff.Custos #'style = #'hufnagel
+ \override NoteHead #'style = #'hufnagel.punctum
+ \clef "hufnagel-fa2"
+ ces des es
+ \bar "|"
+ % \break % 6 (8*1)
+
+ fes ges
+ \clef "hufnagel-do2"
+ \override NoteHead #'style = #'hufnagel.lpes
+ as! bes! ces'
+ \override NoteHead #'style = #'hufnagel.virga
+ bes! as!
+ \bar "|"
+ % \break % 7 (8*1)
+
+ ges! fes!
+ \clef "hufnagel-do-fa"
+ \override NoteHead #'style = #'hufnagel.punctum
+ es! des ces des! es! fes!
+ \bar "||"
+ % \break % 8 (8*1)
+
+ s32*1
+ % \break % 12 (32*1)
+ }
+ >>
+>>
+
+lowerStaff = \new MensuralStaff = "lowerStaff" <<
+ \context MensuralVoice <<
+ \transpose c c {
+
+ \key a \major
+ cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \]
+ \set Staff.forceClef = ##t
+ \clef "neomensural-c2"
+ cis1
+ \bar "|"
+ % \break % 2 (16*1)
+
+ \[ g\breve dis''\longa \]
+ b\breve \[ a\longa d\longa \]
+ \clef "petrucci-c2"
+ % \break % 4 (16*1)
+
+ fis1 ces1
+ \clef "petrucci-c2"
+ r\longa
+ \set Staff.forceClef = ##t
+ \clef "mensural-c2"
+ r\breve
+ \bar "|"
+ % \break % 5 (8*1)
+
+ r2
+ \clef "mensural-g"
+ r4 r8 r16 r16
+ \override NoteHead #'style = #'mensural
+ \override Rest #'style = #'mensural
+ \clef "petrucci-f"
+ c8 b, c16 b, c32 b, c64 b, c64 b,
+ d8 e d16 e d32 e d64 e d64 e
+ r\longa
+ \set Staff.forceClef = ##t
+ \clef "petrucci-f"
+ r\breve
+ \bar "|"
+ % \break % 6 (8*1)
+
+ r\breve
+ \clef "mensural-f"
+ r2 r4 r8 r16 r16
+
+ \set Staff.forceClef = ##t
+ \clef "mensural-f"
+ e\breve f g a1
+ \clef "mensural-g"
+ % \break % 7 (8*1)
+
+ \[ bes'!\longa a'!\longa c''!\longa \]
+ e'1 d' c' d' \bar "|"
+ \bar "|"
+ % \break % 9 (16*1)
+
+ bes'!\longa fis'!1 as'!1 ges'!\longa % lig
+ \set Staff.forceClef = ##t
+ \clef "mensural-g"
+ e'2 d' c' \bar "|"
+ % \break % 11 (16*1)
+
+ \set Staff.forceClef = ##t
+ \clef "petrucci-g"
+ c'2 d' e' f'
+ \clef "petrucci-g"
+ g' as'! bes'! cis''!
+ bes'! as'! gis'! fis'!
+ \set Staff.forceClef = ##t
+ \clef "mensural-g"
+ es'! des'! cis'!1 \bar "||"
+ % \break % 12 (8*1)
+ }
+ >>
+>>
+
+\paper {
+ line-thickness = #(/ staff-space 5.0)
+}
+
+\score {
+ <<
+ \upperStaff
+ \lowerStaff
+ >>
+ \layout {
+ indent = 0.0
+ line-width = 17.25\cm
+ \context {
+ \Score
+ timing = ##f
+ }
+ \context {
+ \MensuralVoice
+ \override NoteHead #'style = #'neomensural
+ \override Rest #'style = #'neomensural
+ \override Flag #'style = #'mensural
+ \override Stem #'thickness = #1.0
+ }
+ \context {
+ \MensuralStaff
+ \revert BarLine #'transparent
+ \override KeySignature #'glyph-name-alist = #alteration-mensural-glyph-name-alist
+ clefGlyph = #"clefs.petrucci.c2"
+ }
+ \context {
+ \VaticanaStaff
+ \revert BarLine #'transparent
+ \override StaffSymbol #'thickness = #2.0
+ \override KeySignature #'glyph-name-alist = #alteration-vaticana-glyph-name-alist
+ \override Custos #'neutral-position = #4
+ }
+ }
+}
+
\once \override NoteHead #'X-offset = #1.7
\once \override Stem #'rotation = #'(45 0 0)
\once \override Stem #'extra-offset = #'(-0.2 . -0.2)
- \once \override Stem #'flag-style = #'no-flag
+ \once \override Flag #'style = #'no-flag
\once \override Accidental #'extra-offset = #'(4 . 0)
}
\once \override TabNoteHead #'transparent = ##t
\once \override NoteHead #'transparent = ##t
\once \override Stem #'transparent = ##t
+ \once \override Flag #'transparent = ##t
\once \override NoteHead #'no-ledgers = ##t
\once \override Glissando #'(bound-details left padding) = #0.3
}
%% Flag [Note Head - Stem]
%%
-noflag = \once \override Stem #'flag-style = #'no-flag
+noflag = \once \override Flag #'style = #'no-flag
%%%
%%% Functions
tipográfica, se imprime un becuadro antes de un sostenido o un
bemol cuando se tiene que cancelar una alteración anterior en la
misma nota. Para modificar este comportamiento, establezca el
-valor de la propiedad @code{extraNatural} a @code{#f} (falso)
+valor de la propiedad @code{extraNatural} a @code{##f} (falso)
dentro del contexto de @code{Staff}.
"
En accord avec les règles standards de l'écriture musicale, on grave
un bécarre avant un dièse ou un bémol si on a besoin d'annuler une
altération précédente. Pour modifier ce comportement, assignez la propriété
-@code{extraNatural} du contexte @code{Staff} à la valeur @code{#f} (faux).
+@code{extraNatural} du contexte @code{Staff} à la valeur @code{##f} (faux).
"
doctitlefr = "Suppression des bécarres superflus"
%% Flag [Note Head - Stem]
%%
-noflag = \once \override Stem #'flag-style = #'no-flag
+noflag = \once \override Flag #'style = #'no-flag
%%%
%%% Functions
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
+ \override Flag #'style = #'no-flag
s8 \voiceTwo g,8 aes4 s4
}
middleVoiceOne = \relative c' {
\override Stem #'cross-staff = ##t
\override Stem #'length = #32
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
d!8\noBeam s8 s8 s8_\crmolto s4 % 1
s4 <g bes\arpeggio>8[ <es' g>] \voiceOne e,8( dis16 e) | % 2
\revert Stem #'length
s2. | % 1
\override Stem #'cross-staff = ##t
\override Stem #'length = #24
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
s2 \voiceTwo e!4 | % 2
s4 \voiceTwo <bes c es f>8 <f' aes es'>16 d' <bes, f' aes c>8 <bes' fis'> | % 3
}
+++ /dev/null
-\version "2.14"
-
-\header {
- texidoc = "
-A @code{\Voice} should be able to contain both an @code{Ambitus_engraver}
-and a @code{Mensural_ligature_engraver} without segfaulting.
- "
-}
-
-\new Voice \with {
- \consists Ambitus_engraver
- \consists Mensural_ligature_engraver
-} {
- \[ c'\longa c''\longa \]
-}
+++ /dev/null
-
-\header {
- texidoc = "Beams over skips do not cause a segfault."
-}
-
-\version "2.15.3"
-
-\new Voice << { c'4 c'8 c' } { s8[ s] s[ s] } >>
+++ /dev/null
-\version "2.14.0"
-
-\header {
- texidoc = "
-A book(part) can contain only a label without causing a segfault.
-"
-}
-
-\book {\markup "foo"} % necessary to produce some output
-\book { \label #'foo }
+++ /dev/null
-\version "2.14.0"
-
-
-\header {
- texidoc = "
-A @code{\bookpart} variable can be inserted in a @code{\book}.
-No segfault should occur in this case.
-"
-}
-
-mypart = \bookpart {
- \relative c' {
- c1
- }
-}
-
-\book {
- \mypart
-}
b
\override NoteHead #'color = #green
\override Stem #'color = #blue
+ \override Flag #'color = #magenta
e8 es d dis e4 r
}
(display c out))))))
`(let* ((parser-clone (ly:parser-clone parser))
(input-str (string-trim-both ,lily-string))
- (music (car (ly:music-property (parse-string-result input-str
- parser-clone)
- 'elements)))
+ (music (ly:parse-string-expression parser-clone input-str))
(result-str (string-trim-both (music->lily-string music parser-clone))))
(cons input-str result-str))))
\header {
texidoc = "Default flag styles: '(), 'mensural and 'no-flag.
- Compare all three methods to print them: (1) C++ default implementation,
- (2) Scheme implementation using the 'flag-style grob property and
+ Compare all three methods to print them: (1) C++ default implementation,
+ (2) Scheme implementation using the 'style grob property and
(3) setting the 'flag property explicitly to the desired Scheme function.
All three systems should be absolutely identical."
}
c''8 d''16 c''32 d''64 \acciaccatura {c''8} d''64
}
-% Old settings: flag-style set to default, 'mensural, 'no-flag; using the
+% Old settings: style set to default, 'mensural, 'no-flag; using the
% default C++ function ly:stem::calc-stem
{
\override Score.RehearsalMark #'self-alignment-X = #LEFT
\testnotes
\mark "Symbol: 'mensural (C++)"
- \override Stem #'flag-style = #'mensural
+ \override Flag #'style = #'mensural
\testnotes
\mark "Symbol: 'no-flag (C++)"
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
\testnotes
}
\override Score.RehearsalMark #'self-alignment-X = #LEFT
\time 2/4
- \override Stem #'flag = #default-flag
- \revert Stem #'flag-style
+ \override Flag #'stencil = #default-flag
+ \revert Flag #'style
\mark "Default flags (Scheme)"
\testnotes
\mark "Symbol: 'mensural (Scheme)"
- \override Stem #'flag-style = #'mensural
+ \override Flag #'style = #'mensural
\testnotes
\mark "Symbol: 'no-flag (Scheme)"
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
\testnotes
}
\time 2/4
\mark "Function: normal-flag"
- \override Stem #'flag = #normal-flag
+ \override Flag #'stencil = #normal-flag
\testnotes
\mark "Function: mensural-flag"
- \override Stem #'flag = #mensural-flag
+ \override Flag #'stencil = #mensural-flag
\testnotes
\mark "Function: no-flag"
- \override Stem #'flag = #no-flag
+ \override Flag #'stencil = #no-flag
\testnotes
}
\version "2.14.0"
\header {
- texidoc = "The 'flag property of the Stem grob can be set to a custom
+ texidoc = "The 'stencil property of the Flag grob can be set to a custom
scheme function to generate the glyph for the flag."
}
% test notes, which will be shown in different style:
testnotes = { \autoBeamOff c'8 d'16 c'32 d'64 \acciaccatura {c'8} d'64 c''8 d''16 c''32 d''64 \acciaccatura {c''8} d''64 }
-#(define-public (weight-flag stem-grob)
- (let* ((log (- (ly:grob-property stem-grob 'duration-log) 2))
+#(define-public (weight-flag grob)
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (log (- (ly:grob-property stem-grob 'duration-log) 2))
(is-up (eqv? (ly:grob-property stem-grob 'direction) UP))
(yext (if is-up (cons (* log -0.8) 0) (cons 0 (* log 0.8))))
(flag-stencil (make-filled-box-stencil '(-0.4 . 0.4) yext))
- (stroke-style (ly:grob-property stem-grob 'stroke-style))
+ (stroke-style (ly:grob-property grob 'stroke-style))
(stroke-stencil (if (equal? stroke-style "grace") (make-line-stencil 0.2 -0.9 -0.4 0.9 -0.4) empty-stencil)))
(ly:stencil-add flag-stencil stroke-stencil)))
% Create a flag stencil by looking up the glyph from the font
-#(define (inverted-flag stem-grob)
- (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u"))
- (flag (retrieve-glyph-flag "" dir "" stem-grob))
- (line-thickness (ly:staff-symbol-line-thickness stem-grob))
+#(define (inverted-flag grob)
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "d" "u"))
+ (flag (retrieve-glyph-flag "" dir "" grob))
+ (line-thickness (ly:staff-symbol-line-thickness grob))
(stem-thickness (ly:grob-property stem-grob 'thickness))
(stem-width (* line-thickness stem-thickness))
- (stroke-style (ly:grob-property stem-grob 'stroke-style))
+ (stroke-style (ly:grob-property grob 'stroke-style))
(stencil (if (null? stroke-style) flag
- (add-stroke-glyph flag stem-grob dir stroke-style "")))
+ (add-stroke-glyph flag grob dir stroke-style "")))
(rotated-flag (ly:stencil-rotate-absolute stencil 180 0 0)))
(ly:stencil-translate rotated-flag (cons (- (/ stem-width 2)) 0))))
\override Score.RehearsalMark #'self-alignment-X = #LEFT
\time 2/4
\mark "Function: weight-flag (custom)"
- \override Stem #'flag = #weight-flag
+ \override Flag #'stencil = #weight-flag
\testnotes
\mark "Function: inverted-flag (custom)"
- \override Stem #'flag = #inverted-flag
+ \override Flag #'stencil = #inverted-flag
\testnotes
}
{
\autoBeamOff
\time 3/8
- \override Stem #'flag = #modern-straight-flag
+ \override Flag #'stencil = #modern-straight-flag
\override Stem #'length-fraction = #'1.5
r8
\acciaccatura {
\override Score.RehearsalMark #'self-alignment-X = #LEFT
\time 2/4
\mark "modern straight"
- \override Stem #'flag = #modern-straight-flag
+ \override Flag #'stencil = #modern-straight-flag
\testnotes
\mark "old straight (large angles)"
- \override Stem #'flag = #old-straight-flag
+ \override Flag #'stencil = #old-straight-flag
\testnotes
%
% \mark "custom slant"
% % flag thickness and spacing
% % up-flag angle and length
% % down-flag angle and length
-% \override Stem #'flag = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
+% \override Flag #'stencil = #(straight-flag 0.35 0.8 -5 0.5 60 2.0)
% \testnotes
}
\book {
\markup {
- a \footnote b c
- \footnote d e
- \footnote f g
+ a \auto-footnote b c
+ \auto-footnote d e
+ \auto-footnote f g
}
\markup { h i }
\pageBreak
-\markup { k \footnote l m }
+\markup { k \auto-footnote l m }
\relative c' { a1 }
\book {
\markup {
- a \footnote b c
- \footnote d e
- \footnote f g
+ a \auto-footnote b c
+ \auto-footnote d e
+ \auto-footnote f g
}
\markup { h i }
\pageBreak
-\markup { k \footnote l m }
+\markup { k \auto-footnote l m }
\relative c' { a1 }
#(set-default-paper-size "a6")
-\paper {
- footnote-auto-numbering = ##f
-}
-
\book {
\new Staff \with { \consists "Footnote_engraver" }
#(set-default-paper-size "a6")
-\paper {
- footnote-footer-padding = 1\in
-}
-
\book {
\relative c' {
\paper {
ragged-last-bottom = ##f
- footnote-auto-numbering = ##f
}
\book {
texidoc = "Lilypond does footnotes."
}
-\paper {
- footnote-auto-numbering = ##f
-}
-
#(set-default-paper-size "a6")
\book {
#(whitelist-grob 'NoteHead)
#(whitelist-grob 'Stem)
+#(whitelist-grob 'Flag)
#(whitelist-grob "NoteHead")
#(whitelist-grob "Stem")
+#(whitelist-grob "Flag")
#(map whitelist-symbol '(stencil style duration-log
stem-attachment end-position staff-position
\override NoteHead #'transparent = ##t
\override NoteHead #'no-ledgers = ##t
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\override Beam #'transparent = ##t
<< \skips
>>
\grace {
- \override Stem #'stroke-style = #"grace"
+ \override Flag #'stroke-style = #"grace"
s8
s16 s s
\clef bass
<e,,, e,>32(\sustainOff\sustainOn
- \revert Stem #'stroke-style
+ \revert Flag #'stroke-style
}
<gis' e>2)
+++ /dev/null
-\version "2.14.0"
-\header {
- texidoc = "
-A metronome marking can be added to a multimeasure rest whose
-engraver was moved to the Staff, without segfaulting.
-"
-}
-
-
-\score {
- \new Staff {
- \tempo 4=150
- R1 |
- }
- \layout {
- \context {
- \Score
- \remove "Metronome_mark_engraver"
- \remove "Staff_collecting_engraver"
- }
- \context {
- \Staff
- \consists "Metronome_mark_engraver"
- }
- }
-}
-
%
-longgrace = \override Stem #'stroke-style = #'()
-endlonggrace = \revert Stem #'stroke-style
+longgrace = \override Flag #'stroke-style = #'()
+endlonggrace = \revert Flag #'stroke-style
ritenuto = \markup { \italic "rit." }
\version "2.14.0"
--- /dev/null
+\version "2.14.1"
+
+\header {
+ texidoc = "Page breaks are allowed by default at the end of the score,
+but the user can override them. There should be one line on the first
+page and two (colliding) lines on the second page."
+}
+
+\paper {
+ paper-height = 4\cm
+}
+
+\book {
+{ c'4 }
+
+{ c'4 } \noPageBreak
+
+{ c'4 }
+}
}
mus = \relative c' {
- % Acciaccaturas contain a slur and \override Stem #'stroke-style
+ % Acciaccaturas contain a slur and \override Flag #'stroke-style
% Thus, we're checking \override here
c4 \acciaccatura d8 c4
% Checking \set and \unset
% Checking \once \override
\once \override Stem #'thickness = #8.0 d8
% Checking two overrides
- \override Stem #'thickness = #8.0 \override Stem #'stroke-style = "grace"
+ \override Stem #'thickness = #8.0 \override Flag #'stroke-style = "grace"
d8
% reverting one of them
\revert Stem #'thickness d8
% and the other
- \revert Stem #'stroke-style c8
+ \revert Flag #'stroke-style c8
% checking tweaks
c2-\tweak #'color #red ->
--- /dev/null
+\version "2.15.9"
+
+\header {
+ texidoc = "
+This tests various segfault fixes from merging previously-separate
+regtests together. The output is not important; all that matters
+is that it compiles.
+
+Hopefully we can separate the regtests again in the future.
+"
+}
+% merged to avoid
+% http://code.google.com/p/lilypond/issues/detail?id=1821
+
+
+%%% book-label-no-segfault.ly
+% A book(part) can contain only a label without causing a segfault.
+\book {\markup "foo"} % necessary to produce some output
+\book { \label #'foo }
+
+
+%%% metronome-multimeasure-rest-no-segfault.ly
+% A metronome marking can be added to a multimeasure rest whose
+% engraver was moved to the Staff, without segfaulting.
+\score {
+ \new Staff {
+ \tempo 4=150
+ R1 |
+ }
+ \layout {
+ \context {
+ \Score
+ \remove "Metronome_mark_engraver"
+ \remove "Staff_collecting_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Metronome_mark_engraver"
+ }
+ }
+}
+
+
+%%% ambitus-with-ligature.ly
+% A @code{\Voice} should be able to contain both an
+% @code{Ambitus_engraver} and a @code{Mensural_ligature_engraver}
+% without segfaulting.
+\new Voice \with {
+ \consists Ambitus_engraver
+ \consists Mensural_ligature_engraver
+} {
+ \[ c'\longa c''\longa \]
+}
+
+
+%%% beam-skip.ly
+% Beams over skips do not cause a segfault.
+\new Voice << { c'4 c'8 c' } { s8[ s] s[ s] } >>
+
+
+%%% bookpart-variable.ly
+% A @code{\bookpart} variable can be inserted in a @code{\book}.
+% No segfault should occur in this case.
+mypart = \bookpart {
+ \relative c' {
+ c1
+ }
+}
+\book {
+ \mypart
+}
+
+
+%%% skiptypesetting-all-true.ly
+% A score with @code{skipTypesetting} set for the whole score
+% will not segfault.
+{
+ \set Score.skipTypesetting = ##t
+ c'4
+}
+
+
+%%% skiptypesetting-multimeasurerest.ly
+% When @code{skipTypesetting} is set during a
+% @code{skipBars}-induced @code{MultiMeasureRest} spanner, no
+% segfault occurs.
+<<
+ {
+ \time 3/4
+ \set Score.skipBars = ##t
+ a4 a a
+ R2.*2
+ }
+ \\
+ {
+ \set Score.skipTypesetting = ##t
+ s2. s4
+ \set Score.skipTypesetting = ##f
+ }
+>>
+
+
+
+
+++ /dev/null
-\version "2.14.0"
-
-\header{
- texidoc = "
-A score with @code{skipTypesetting} set for the whole score
-will not segfault.
-"
-}
-
-
-{
- \set Score.skipTypesetting = ##t
- c'4
-}
-
+++ /dev/null
-\version "2.14.0"
-
-\header {
- texidoc = "
-When @code{skipTypesetting} is set during a @code{skipBars}-induced
-@code{MultiMeasureRest} spanner, no segfault occurs.
-"
-}
-
-<<
- {
- \time 3/4
- \set Score.skipBars = ##t
- a4 a a
- R2.*2
- }
- \\
- {
- \set Score.skipTypesetting = ##t
- s2. s4
- \set Score.skipTypesetting = ##f
- }
->>
\version "2.14.0"
\header {
- texidoc = "Stems with overridden 'length should not confuse height estimation.
-This example should fit snugly on one page.
+ texidoc = "Stems with overridden 'Y-extent should
+not confuse height estimation. This example should fit snugly
+on one page.
"
}
\score {
\new Voice {
\voiceTwo
- \override Stem #'length = #0
+ \override Stem #'Y-extent = #'(0.0 . 0.0)
\repeat unfold 144 a4
}
\layout {
--- /dev/null
+
+\version "2.15.9"
+
+\header {
+ texidoc = "Stem length can be overridden via the function
+stem::length
+"
+}
+
+\relative c' {
+ \override Stem #'Y-extent = #(stem::length 8)
+ e4 f'4
+}
--- /dev/null
+\version "2.15.9"
+
+\header {
+ texidoc = "Lilypond gets beamed stem pure heights correct
+to avoid outside staff collisions.
+"
+}
+
+{
+ \stemUp
+ gis''8 a bes'' a
+ bes''! a bes''! a
+}
- beam->relative_coordinate (common[Y_AXIS], Y_AXIS);
Real factor = parameters.STEM_COLLISION_FACTOR;
- if (!unsmob_grob (s->get_object ("beam"))
- && !Stem::flag (s).is_empty ())
+ if (!unsmob_grob (s->get_object ("beam")))
factor = 1.0;
add_collision (x, y, factor);
}
stem_y += thick * 0.5 * get_grob_direction (s);
/*
- Do set_stemend for invisible stems too, so tuplet brackets
+ Do set_stem_positions for invisible stems too, so tuplet brackets
have a reference point for sloping
*/
- Stem::set_stemend (s, 2 * stem_y / staff_space);
+ Stem::set_stem_positions (s, 2 * stem_y / staff_space);
}
return posns;
if (scm_is_pair (footnotes))
for (SCM s = footnotes; scm_is_pair (s); s = scm_cdr (s))
- footnotes_.push_back (unsmob_stencil (scm_cadar (s)));
+ footnotes_.push_back (unsmob_stencil (scm_caddar (s)));
last_column_ = 0;
force_ = 0;
i != stems.end (); i++)
{
Grob *stem = (*i);
- Stencil flag = Stem::flag (stem);
- if (!flag.is_empty ())
+ Grob *flag = Stem::flag (stem);
+ if (flag)
{
- Interval y = flag.extent (Y_AXIS)
- * (2 / ss)
- + Stem::stem_end_position (stem);
-
- Interval x = stem->relative_coordinate (commonx, X_AXIS)
- + flag.extent (X_AXIS);
+ Grob *commony = stem->common_refpoint (flag, Y_AXIS);
+ Interval y = flag->extent (commony, Y_AXIS) * (2 / ss);
+ Interval x = flag->extent (commonx, X_AXIS);
boxes.push_back (Box (x, y));
}
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 1996--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ Jan Nieuwenhuizen <janneke@gnu.org>
+
+ 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 "stem.hh"
+
+#include "directional-element-interface.hh"
+#include "font-interface.hh"
+#include "grob.hh"
+#include "international.hh"
+#include "output-def.hh"
+#include "staff-symbol-referencer.hh"
+#include "stencil.hh"
+#include "warn.hh"
+
+class Flag
+{
+public:
+ DECLARE_SCHEME_CALLBACK (print, (SCM));
+ DECLARE_SCHEME_CALLBACK (width, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_x_offset, (SCM));
+ DECLARE_GROB_INTERFACE ();
+};
+
+
+
+MAKE_SCHEME_CALLBACK (Flag, width, 1);
+SCM
+Flag::width (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Stencil *sten = unsmob_stencil (me->get_property ("stencil"));
+ if (!sten)
+ return ly_interval2scm (Interval (0.0, 0.0));
+
+ Grob *stem = me->get_parent (X_AXIS);
+
+ /*
+ TODO:
+ This reproduces a bad hard-coding that has been in the code for quite some time:
+ the bounding boxes for the flags are slightly off and need to be fixed.
+ */
+
+ return ly_interval2scm (sten->extent (X_AXIS) - stem->extent (stem, X_AXIS)[RIGHT]);
+}
+MAKE_SCHEME_CALLBACK (Flag, print, 1);
+SCM
+Flag::print (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *stem = me->get_parent (X_AXIS);
+
+ Direction d = get_grob_direction (stem);
+ int log = Stem::duration_log (stem);
+ string flag_style;
+
+ SCM flag_style_scm = me->get_property ("style");
+ if (scm_is_symbol (flag_style_scm))
+ flag_style = ly_symbol2string (flag_style_scm);
+
+ if (flag_style == "no-flag")
+ return Stencil ().smobbed_copy ();
+
+ bool adjust = true;
+
+ string staffline_offs;
+ if (flag_style == "mensural")
+ /* Mensural notation: For notes on staff lines, use different
+ flags than for notes between staff lines. The idea is that
+ flags are always vertically aligned with the staff lines,
+ regardless if the note head is on a staff line or between two
+ staff lines. In other words, the inner end of a flag always
+ touches a staff line.
+ */
+ {
+ if (adjust)
+ {
+ Real ss = Staff_symbol_referencer::staff_space (me);
+ int p = (int) (rint (stem->extent (stem, Y_AXIS)[d] * 2 / ss));
+ staffline_offs
+ = Staff_symbol_referencer::on_line (stem, p) ? "0" : "1";
+ }
+ else
+ staffline_offs = "2";
+ }
+ else
+ staffline_offs = "";
+
+ char dir = (d == UP) ? 'u' : 'd';
+ string font_char = flag_style
+ + to_string (dir) + staffline_offs + to_string (log);
+ Font_metric *fm = Font_interface::get_default_font (me);
+ Stencil flag = fm->find_by_name ("flags." + font_char);
+ if (flag.is_empty ())
+ me->warning (_f ("flag `%s' not found", font_char));
+
+ /*
+ TODO: maybe property stroke-style should take different values,
+ e.g. "" (i.e. no stroke), "single" and "double" (currently, it's
+ '() or "grace"). */
+ SCM stroke_style_scm = me->get_property ("stroke-style");
+ if (scm_is_string (stroke_style_scm))
+ {
+ string stroke_style = ly_scm2string (stroke_style_scm);
+ if (!stroke_style.empty ())
+ {
+ string font_char = flag_style + to_string (dir) + stroke_style;
+ Stencil stroke = fm->find_by_name ("flags." + font_char);
+ if (stroke.is_empty ())
+ {
+ font_char = to_string (dir) + stroke_style;
+ stroke = fm->find_by_name ("flags." + font_char);
+ }
+ if (stroke.is_empty ())
+ me->warning (_f ("flag stroke `%s' not found", font_char));
+ else
+ flag.add_stencil (stroke);
+ }
+ }
+
+ return flag.smobbed_copy ();
+}
+
+MAKE_SCHEME_CALLBACK (Flag, calc_y_offset, 1);
+SCM
+Flag::calc_y_offset (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *stem = me->get_parent (X_AXIS);
+ Direction d = get_grob_direction (stem);
+
+ Real blot
+ = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
+
+ Real y2 = stem->extent (stem, Y_AXIS)[d];
+
+ return scm_from_double (y2 - d * blot / 2);
+}
+
+MAKE_SCHEME_CALLBACK (Flag, calc_x_offset, 1);
+SCM
+Flag::calc_x_offset (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ Grob *stem = me->get_parent (X_AXIS);
+ return scm_from_double (stem->extent (stem, X_AXIS)[RIGHT]);
+}
+
+ADD_INTERFACE (Flag,
+ "A flag that gets attached to a stem."
+ "The style property is symbol determining"
+ " what style of flag glyph is typeset on a"
+ " @code{Stem}. Valid options include @code{'()}"
+ " for standard flags, @code{'mensural} and"
+ " @code{'no-flag}, which switches off the flag.",
+
+ /* properties */
+ "style "
+ "stroke-style "
+ );
\ No newline at end of file
virtual void handle_prebroken_dependencies ();
virtual Interval_t<int> spanned_rank_interval () const;
virtual Interval pure_height (Grob *ref, int start, int end);
+ virtual void cache_pure_height (Interval height);
DECLARE_GROB_INTERFACE ();
protected:
virtual void discretionary_processing ();
SCM lookup_identifier (string s);
SCM lookup_identifier_symbol (SCM s);
void push_extra_token (int token_type);
+ void push_embedded_token ();
void push_chord_state (SCM tab);
void push_figuredbass_state ();
void push_lyric_state ();
void include_string (string ly_code);
void parse_file (string init, string name, string out_name);
void parse_string (string ly_code);
+ SCM parse_string_expression (string ly_code);
void parser_error (string);
void parser_error (Input const &, string);
void set_yydebug (bool);
void stop_translation_timestep ();
void start_translation_timestep ();
void process_music ();
+ void handle_manual_breaks (bool);
virtual void initialize ();
virtual void finalize ();
DECLARE_GROB_INTERFACE ();
DECLARE_SCHEME_CALLBACK (calc_slope, (SCM));
DECLARE_SCHEME_CALLBACK (calc_width, (SCM));
+ DECLARE_SCHEME_CALLBACK (calc_y_offset, (SCM));
+ DECLARE_SCHEME_CALLBACK (pure_calc_y_offset, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM));
DECLARE_SCHEME_CALLBACK (calc_style, (SCM));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
static Stencil raw_stencil (Grob *, Real slope, Direction stemdir);
- static Stencil translated_stencil (Grob *, Real slope);
+ static Real y_offset (Grob *, bool pure);
static Stencil untranslated_stencil (Grob *, Real slope);
static Real get_beam_translation (Grob *me);
static Real vertical_length (Grob *me);
static void add_head (Grob *me, Grob *n);
static Stem_info get_stem_info (Grob *);
static Real chord_start_y (Grob *);
- static void set_stemend (Grob *, Real);
+ static void set_stem_positions (Grob *, Real);
+ static void cache_pure_height (Grob *, Interval, Interval);
static Slice beam_multiplicity (Grob *);
static Direction get_default_dir (Grob *);
static Real thickness (Grob *);
+ static Real beam_end_corrective (Grob *);
static int head_count (Grob *);
static bool is_invisible (Grob *);
static bool is_normal_stem (Grob *);
static bool is_cross_staff (Grob *);
static Interval head_positions (Grob *);
- static Real stem_end_position (Grob *);
- static Stencil flag (Grob *);
- static Stencil get_translated_flag (Grob *);
+ static Interval internal_pure_height (Grob *, bool);
+ static Interval internal_height (Grob *, bool);
+ static bool is_valid_stem (Grob *);
+ static Grob *get_reference_head (Grob *);
+ static Real internal_calc_stem_end_position (Grob *, bool);
+ static Real internal_calc_stem_begin_position (Grob *, bool);
+
DECLARE_GROB_INTERFACE ();
static void set_spacing_hints (Grob *);
+ static Grob *flag (Grob *);
DECLARE_SCHEME_CALLBACK (print, (SCM));
DECLARE_SCHEME_CALLBACK (calc_default_direction, (SCM));
DECLARE_SCHEME_CALLBACK (offset_callback, (SCM element));
DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
DECLARE_SCHEME_CALLBACK (calc_beaming, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_length, (SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_begin_position, (SCM));
+ DECLARE_SCHEME_CALLBACK (pure_calc_stem_begin_position, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_end_position, (SCM));
+ DECLARE_SCHEME_CALLBACK (pure_calc_stem_end_position, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (calc_stem_info, (SCM));
DECLARE_SCHEME_CALLBACK (calc_positioning_done, (SCM));
DECLARE_SCHEME_CALLBACK (width, (SCM smob));
DECLARE_SCHEME_CALLBACK (pure_height, (SCM, SCM, SCM));
DECLARE_SCHEME_CALLBACK (height, (SCM));
DECLARE_SCHEME_CALLBACK (calc_cross_staff, (SCM));
- DECLARE_SCHEME_CALLBACK (calc_flag, (SCM));
};
#endif
if (cached_pure_height_valid_)
return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
- cached_pure_height_ = Grob::pure_height (this, start, end);
- cached_pure_height_valid_ = true;
+ cache_pure_height (Grob::pure_height (this, start, end));
return cached_pure_height_ + pure_relative_y_coordinate (g, start, end);
}
+void
+Item::cache_pure_height (Interval height)
+{
+ cached_pure_height_ = height;
+ cached_pure_height_valid_ = true;
+}
+
ADD_INTERFACE (Item,
"Grobs can be distinguished in their role in the horizontal"
" spacing. Many grobs define constraints on the spacing by"
return type;
}
+<extratoken><<EOF>> {
+ /* Generate a token without swallowing anything */
+
+ /* produce requested token */
+ int type = extra_token_types_.back ();
+ extra_token_types_.pop_back ();
+ if (extra_token_types_.empty ())
+ yy_pop_state ();
+
+ return type;
+}
+
/* Use the trailing context feature. Otherwise, the BOM will not be
found if the file starts with an identifier definition. */
<INITIAL,chords,lyrics,figures,notes>{BOM_UTF8}/.* {
}
}
-<*><<EOF>> {
- if (YY_START == longcomment)
- {
+<longcomment><<EOF>> {
LexerError (_ ("EOF found inside a comment").c_str ());
is_main_input_ = false; // should be safe , can't have \include in --safe.
if (!close_input ())
yyterminate (); // can't move this, since it actually rets a YY_NULL
}
- else if (is_main_input_)
+
+<<EOF>> { if (is_main_input_)
{
/* 2 = init.ly + current file.
> because we're before closing, but is_main_input_ should
extra_token_types_.push_back (token_type);
}
+void
+Lily_lexer::push_embedded_token ()
+{
+ push_extra_token (EMBEDDED_LILY);
+}
+
void
Lily_lexer::push_chord_state (SCM tab)
{
return SCM_UNSPECIFIED;
}
+LY_DEFINE (ly_parse_string_expression, "ly:parse-string-expression",
+ 2, 0, 0, (SCM parser_smob, SCM ly_code),
+ "Parse the string @var{ly-code} with @var{parser-smob}."
+" Return the contained music expression.")
+{
+ 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);
+
+ if (!parser->lexer_->is_clean ())
+ {
+ parser->parser_error (_ ("ly:parse-string-expression is only valid with a new parser."
+ " Use ly:parser-include-string instead."));
+ return SCM_UNSPECIFIED;
+ }
+
+ return parser->parse_string_expression (ly_scm2string (ly_code));
+}
+
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"
error_level_ = error_level_ | lexer_->error_level_;
}
+SCM
+Lily_parser::parse_string_expression (string ly_code)
+{
+ // TODO: use $parser
+ lexer_->set_identifier (ly_symbol2scm ("parser"),
+ self_scm ());
+
+ lexer_->main_input_name_ = "<string>";
+ lexer_->is_main_input_ = true;
+ lexer_->new_input (lexer_->main_input_name_, ly_code, sources_);
+
+ SCM mod = lexer_->set_current_scope ();
+ lexer_->push_embedded_token ();
+ do_yyparse ();
+ SCM result = lexer_->lookup_identifier_symbol (ly_symbol2scm ("$parseStringResult"));
+ // $parseStringResult is set in the grammar rule for embedded_lilypond
+
+ scm_set_current_module (mod);
+
+ if (!define_spots_.empty ())
+ {
+ if (define_spots_.empty ()
+ && !error_level_)
+ programming_error ("define_spots_ don't match, but error_level_ not set.");
+ }
+
+ error_level_ = error_level_ | lexer_->error_level_;
+ return result;
+}
+
void
Lily_parser::include_string (string ly_code)
{
#include "separation-item.hh"
#include "spacing-interface.hh"
#include "staff-spacing.hh"
+#include "staff-symbol-referencer.hh"
#include "stem.hh"
#include "warn.hh"
Interval hp = Stem::head_positions (stem);
if (!hp.is_empty ())
{
- Real chord_start = hp[stem_dir];
-
- /*
- 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);
-
- stem_posns[d] = Interval (min (chord_start, stem_end),
- max (chord_start, stem_end));
+ Real ss = Staff_symbol_referencer::staff_space (stem);
+ stem_posns[d] = stem->pure_height (stem, 0, INT_MAX) * (2 / ss);
head_posns[d].unite (hp);
}
}
footnote_padding_ = robust_scm2double (pb->paper_->c_variable ("footnote-padding"), 0.0);
footnote_footer_padding_ = robust_scm2double (pb->paper_->c_variable ("footnote-footer-padding"), 0.0);
- footnote_number_raise_ = (to_boolean (pb->paper_->c_variable ("footnote-auto-numbering"))
- ? robust_scm2double (pb->paper_->c_variable ("footnote-number-raise"), 0.0)
- : 0.0);
+ footnote_number_raise_ = robust_scm2double (pb->paper_->c_variable ("footnote-number-raise"), 0.0);
if (systems_per_page_ && (max_systems_per_page_ || min_systems_per_page_))
{
// now, make the footnote stencils with the numbering function
SCM numbers = SCM_EOL;
SCM in_text_numbers = SCM_EOL;
- bool do_numbering = to_boolean (paper->c_variable ("footnote-auto-numbering"));
- // if there's no numbering, skip all this
/*
TODO: This recalculates numbering every time this function is called, including once
after the balloon prints are called. Although it is not a huge computational drain,
in duplicated work, either by making this process less complicated or (preferably)
by passing its results downstream.
*/
- if (do_numbering)
+ vector<SCM> footnote_number_markups; // Holds the numbering markups.
+ vector<Stencil *> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
+ for (vsize i = 0; i < fn_count; i++)
{
- vector<SCM> footnote_number_markups; // Holds the numbering markups.
- vector<Stencil *> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
- for (vsize i = 0; i < fn_count; i++)
+ SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
+ Stencil *s = unsmob_stencil (Text_interface::interpret_markup (layout, props, markup));
+ if (!s)
{
- SCM markup = scm_call_1 (numbering_function, scm_from_int (counter));
- Stencil *s = unsmob_stencil (Text_interface::interpret_markup (layout, props, markup));
- if (!s)
- {
- programming_error ("Your numbering function needs to return a stencil.");
- markup = SCM_EOL;
- s = new Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL);
- }
- footnote_number_markups.push_back (markup);
- footnote_number_stencils.push_back (s);
- counter++;
+ programming_error ("Your numbering function needs to return a stencil.");
+ markup = SCM_EOL;
+ s = new Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL);
}
+ footnote_number_markups.push_back (markup);
+ footnote_number_stencils.push_back (s);
+ counter++;
+ }
- // find the maximum X_AXIS length
- Real max_length = -infinity_f;
- for (vsize i = 0; i < fn_count; i++)
- max_length = max (max_length, footnote_number_stencils[i]->extent (X_AXIS).length ());
+ // find the maximum X_AXIS length
+ Real max_length = -infinity_f;
+ for (vsize i = 0; i < fn_count; i++)
+ max_length = max (max_length, footnote_number_stencils[i]->extent (X_AXIS).length ());
- /*
- translate each stencil such that it attains the correct maximum length and bundle the
- footnotes into a scheme object.
- */
- SCM *tail = &numbers;
- SCM *in_text_tail = &in_text_numbers;
+ /*
+ translate each stencil such that it attains the correct maximum length and bundle the
+ footnotes into a scheme object.
+ */
+ SCM *tail = &numbers;
+ SCM *in_text_tail = &in_text_numbers;
- for (vsize i = 0; i < fn_count; i++)
- {
- *in_text_tail = scm_cons (footnote_number_markups[i], SCM_EOL);
- in_text_tail = SCM_CDRLOC (*in_text_tail);
- footnote_number_stencils[i]->translate_axis (max_length - footnote_number_stencils[i]->extent (X_AXIS).length (), X_AXIS);
- *tail = scm_cons (footnote_number_stencils[i]->smobbed_copy (), SCM_EOL);
- tail = SCM_CDRLOC (*tail);
- }
+ for (vsize i = 0; i < fn_count; i++)
+ {
+ *in_text_tail = scm_cons (footnote_number_markups[i], SCM_EOL);
+ in_text_tail = SCM_CDRLOC (*in_text_tail);
+ footnote_number_stencils[i]->translate_axis (max_length - footnote_number_stencils[i]->extent (X_AXIS).length (), X_AXIS);
+ *tail = scm_cons (footnote_number_stencils[i]->smobbed_copy (), SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
}
// build the footnotes
props, footnote_markup);
Stencil *footnote_stencil = unsmob_stencil (footnote_stl);
+ bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
+ if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
+ {
+ if (orig->is_broken ())
+ for (vsize i = 0; i < orig->broken_intos_.size (); i++)
+ do_numbering = do_numbering || to_boolean (orig->broken_intos_[i]->get_property ("automatically-numbered"));
+ }
if (do_numbering)
{
SCM annotation_scm = scm_car (in_text_numbers);
for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
{
Stencil mol;
- Stencil *footnote = unsmob_stencil (scm_cadar (st));
+ Stencil *footnote = unsmob_stencil (scm_caddar (st));
mol.add_stencil (*footnote);
+ bool do_numbering = to_boolean (scm_cadar (st));
+ SCM in_text_stencil = Stencil ().smobbed_copy ();
if (do_numbering)
{
Stencil *annotation = unsmob_stencil (scm_car (numbers));
SCM in_text_annotation = scm_car (in_text_numbers);
- SCM in_text_stencil = Text_interface::interpret_markup (layout, props, in_text_annotation);
+ in_text_stencil = Text_interface::interpret_markup (layout, props, in_text_annotation);
if (!unsmob_stencil (in_text_stencil))
in_text_stencil = SCM_EOL;
- number_footnote_table = scm_cons (scm_cons (scm_caar (st), in_text_stencil), number_footnote_table);
annotation->translate_axis (mol.extent (Y_AXIS)[UP] + number_raise - annotation->extent (Y_AXIS)[UP], Y_AXIS);
mol.add_at_edge (X_AXIS, LEFT, *annotation, 0.0);
numbers = scm_cdr (numbers);
in_text_numbers = scm_cdr (in_text_numbers);
}
+ number_footnote_table = scm_cons (scm_cons (scm_caar (st), in_text_stencil), number_footnote_table);
footnote_stencil.add_at_edge (Y_AXIS, DOWN, mol, padding);
}
footnotes = scm_cons (footnote_stencil.smobbed_copy (), footnotes);
if (command_column_)
{
+ // At the end of the score, allow page breaks and turns by default, but...
+ command_column_->set_property ("page-break-permission", ly_symbol2scm ("allow"));
+ command_column_->set_property ("page-turn-permission", ly_symbol2scm ("allow"));
+
+ // ...allow the user to override them.
+ handle_manual_breaks (true);
+
+ // On the other hand, line breaks are always allowed at the end of a score,
+ // even if they try to stop us.
if (!scm_is_symbol (command_column_->get_property ("line-break-permission")))
command_column_->set_property ("line-break-permission", ly_symbol2scm ("allow"));
+
system_->set_bound (RIGHT, command_column_);
}
}
}
void
-Paper_column_engraver::process_music ()
+Paper_column_engraver::handle_manual_breaks (bool only_do_permissions)
{
for (vsize i = 0; i < break_events_.size (); i++)
{
SCM pen = break_events_[i]->get_property ("break-penalty");
SCM perm = break_events_[i]->get_property ("break-permission");
- if (scm_is_number (pen))
+ if (!only_do_permissions && scm_is_number (pen))
{
Real new_pen = robust_scm2double (cur_pen, 0.0) + scm_to_double (pen);
command_column_->set_property (pen_str.c_str (), scm_from_double (new_pen));
else
command_column_->set_property (perm_str.c_str (), perm);
}
+}
+
+void
+Paper_column_engraver::process_music ()
+{
+ handle_manual_breaks (false);
for (vsize i = 0; i < label_events_.size (); i++)
{
%token <i> UNSIGNED
/* Artificial tokens, for more generic function syntax */
-%token <i> EXPECT_MARKUP;
-%token <i> EXPECT_MUSIC;
-%token <i> EXPECT_PITCH;
-%token <i> EXPECT_DURATION;
-%token <i> EXPECT_SCM;
-%token <i> EXPECT_MARKUP_LIST
+%token <i> EXPECT_MARKUP "markup?"
+%token <i> EXPECT_MUSIC "ly:music?"
+%token <i> EXPECT_PITCH "ly:pitch?"
+%token <i> EXPECT_DURATION "ly:duration?"
+%token <i> EXPECT_SCM "scheme?"
+%token <i> EXPECT_MARKUP_LIST "markup-list?"
/* After the last argument. */
%token <i> EXPECT_NO_MORE_ARGS;
+/* An artificial token for parsing embedded Lilypond */
+%token <i> EMBEDDED_LILY "#{"
+
%token <scm> BOOK_IDENTIFIER
%token <scm> CHORDMODIFIER_PITCH
%token <scm> CHORD_MODIFIER
%type <scm> context_change
%type <scm> direction_less_event
%type <scm> direction_reqd_event
+%type <scm> embedded_lilypond
%type <scm> event_chord
%type <scm> gen_text_def
%type <scm> music_property_def
%type <scm> relative_music
%type <scm> simple_element
%type <scm> simple_music_property_def
+%type <scm> start_symbol
%type <scm> string_number_event
%type <scm> tempo_event
%type <scm> closed_function_arglist
%type <scm> open_function_arglist
%type <scm> identifier_init
+%type <scm> lilypond
%type <scm> lilypond_header
%type <scm> lilypond_header_body
%type <scm> lyric_element
%%
-lilypond: /* empty */
+start_symbol:
+ lilypond
+ | EMBEDDED_LILY {
+ SCM nn = PARSER->lexer_->lookup_identifier ("pitchnames");
+ PARSER->lexer_->push_note_state (alist_to_hashq (nn));
+ } embedded_lilypond {
+ PARSER->lexer_->pop_state ();
+ PARSER->lexer_->set_identifier (ly_symbol2scm ("$parseStringResult"), $3);
+ }
+ ;
+
+lilypond: /* empty */ { }
| lilypond toplevel_expression {
}
| lilypond assignment {
| SCM_IDENTIFIER
;
+embedded_lilypond:
+ { $$ = MAKE_SYNTAX ("void-music", @$, SCM_UNDEFINED); }
+ | identifier_init
+ | music music music_list {
+ $$ = MAKE_SYNTAX ("sequential-music", @$,
+ scm_cons2 ($1, $2, scm_reverse_x ($3, SCM_EOL)));
+ }
+ | error {
+ PARSER->error_level_ = 1;
+ }
+ | embedded_lilypond INVALID {
+ PARSER->error_level_ = 1;
+ }
+ ;
+
lilypond_header_body:
{
{
vector<Grob *> rheads_;
Grob *stem_;
+ Grob *flag_;
Grob *note_column_;
Grob *arpeggio_;
protected:
DECLARE_ACKNOWLEDGER (stem);
+ DECLARE_ACKNOWLEDGER (flag);
DECLARE_ACKNOWLEDGER (rhythmic_head);
DECLARE_ACKNOWLEDGER (arpeggio);
void process_acknowledged ();
{
stem_ = 0;
+ flag_ = 0;
note_column_ = 0;
arpeggio_ = 0;
}
Pointer_group_interface::add_grob (note_column_, ly_symbol2scm ("elements"), arpeggio_);
note_column_->set_object ("arpeggio", arpeggio_->self_scm ());
}
+ if (flag_)
+ Pointer_group_interface::add_grob (note_column_, ly_symbol2scm ("elements"), flag_);
}
}
stem_ = i.grob ();
}
+void
+Rhythmic_column_engraver::acknowledge_flag (Grob_info i)
+{
+ flag_ = i.grob ();
+}
+
void
Rhythmic_column_engraver::acknowledge_rhythmic_head (Grob_info i)
{
note_column_ = 0;
stem_ = 0;
arpeggio_ = 0;
+ flag_ = 0;
}
ADD_ACKNOWLEDGER (Rhythmic_column_engraver, stem);
+ADD_ACKNOWLEDGER (Rhythmic_column_engraver, flag);
ADD_ACKNOWLEDGER (Rhythmic_column_engraver, rhythmic_head);
ADD_ACKNOWLEDGER (Rhythmic_column_engraver, arpeggio);
Direction d = get_grob_direction (stem);
if (Stem::is_normal_stem (stem) && d == DOWN)
{
-
- /*
- can't look at stem-end-position, since that triggers
- beam slope computations.
- */
- Real stem_start = Stem::head_positions (stem) [d];
- Real stem_end = stem_start
- + d * robust_scm2double (stem->get_property ("length"), 7);
-
- Interval stem_posns (min (stem_start, stem_end),
- max (stem_end, stem_start));
+ Interval stem_posns = stem->pure_height (stem, 0, INT_MAX);
stem_posns.intersect (bar_height);
{
Grob *stem_;
Grob *tremolo_;
+ vector <Grob *> maybe_flags_;
Stream_event *rhythmic_ev_;
Stream_event *tremolo_ev_;
DECLARE_TRANSLATOR_LISTENER (tremolo);
DECLARE_ACKNOWLEDGER (rhythmic_head);
void stop_translation_timestep ();
+ void finalize ();
+ void kill_unused_flags ();
};
Stem_engraver::Stem_engraver ()
/* Announce the cause of the head as cause of the stem. The
stem needs a rhythmic structure to fit it into a beam. */
stem_ = make_item ("Stem", gi.grob ()->self_scm ());
-
if (tremolo_ev_)
{
/* Stem tremolo is never applied to a note by default,
}
Stem::add_head (stem_, gi.grob ());
+
+ if (Stem::is_normal_stem (stem_)
+ && Stem::duration_log (stem_) > 2)
+ {
+ Item *flag = make_item ("Flag", stem_->self_scm ());
+ flag->set_parent (stem_, X_AXIS);
+ stem_->set_object ("flag", flag->self_scm ());
+ maybe_flags_.push_back (flag);
+ }
+}
+
+void
+Stem_engraver::kill_unused_flags ()
+{
+ for (vsize i = 0; i < maybe_flags_.size (); i++)
+ if (unsmob_grob (maybe_flags_[i]->get_parent (X_AXIS)->get_object ("beam")))
+ maybe_flags_[i]->suicide ();
+}
+
+void
+Stem_engraver::finalize ()
+{
+ kill_unused_flags ();
}
void
Stem_engraver::stop_translation_timestep ()
{
+ if (scm_is_string (get_property ("whichBar")))
+ kill_unused_flags ();
+
tremolo_ = 0;
if (stem_)
{
/* read */
"tremoloFlags "
"stemLeftBeamCount "
- "stemRightBeamCount ",
+ "stemRightBeamCount "
+ "whichBar ",
/* write */
""
SCM
Stem_tremolo::pure_height (SCM smob, SCM, SCM)
{
- Grob *me = unsmob_grob (smob);
+ Item *me = unsmob_item (smob);
/*
Cannot use the real slope, since it looks at the Beam.
*/
Stencil s1 (untranslated_stencil (me, 0.35));
+ Item *stem = unsmob_item (me->get_object ("stem"));
+ if (!stem)
+ return ly_interval2scm (s1.extent (Y_AXIS));
+
+ Direction stemdir = get_grob_direction (stem);
+ if (stemdir == 0)
+ stemdir = UP;
+
+ Spanner *beam = Stem::get_beam (stem);
- return ly_interval2scm (s1.extent (Y_AXIS));
+ if (!beam)
+ return ly_interval2scm (s1.extent (Y_AXIS));
+
+ Interval ph = stem->pure_height (stem, 0, INT_MAX);
+ Stem_info si = Stem::get_stem_info (stem);
+ ph[-stemdir] = si.shortest_y_;
+ int beam_count = Stem::beam_multiplicity (stem).length () + 1;
+ Real beam_translation = get_beam_translation (me);
+
+ ph = ph - stemdir * max (beam_count, 1) * beam_translation;
+ ph = ph - ph.center ();
+
+ return ly_interval2scm (ph);
}
MAKE_SCHEME_CALLBACK (Stem_tremolo, width, 1);
return raw_stencil (me, slope, stencil_dir);
}
-Stencil
-Stem_tremolo::translated_stencil (Grob *me, Real slope)
+MAKE_SCHEME_CALLBACK (Stem_tremolo, calc_y_offset, 1);
+SCM
+Stem_tremolo::calc_y_offset (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (y_offset (me, false));
+}
+
+MAKE_SCHEME_CALLBACK (Stem_tremolo, pure_calc_y_offset, 3);
+SCM
+Stem_tremolo::pure_calc_y_offset (SCM smob,
+ SCM, /* start */
+ SCM /* end */)
{
- Stencil mol = untranslated_stencil (me, slope);
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (y_offset (me, true));
+}
- Grob *stem = unsmob_grob (me->get_object ("stem"));
+Real
+Stem_tremolo::y_offset (Grob *me, bool pure)
+{
+ Item *stem = unsmob_item (me->get_object ("stem"));
if (!stem)
- return Stencil ();
+ return 0.0;
Direction stemdir = get_grob_direction (stem);
if (stemdir == 0)
Real beam_translation = get_beam_translation (me);
int beam_count = beam ? (Stem::beam_multiplicity (stem).length () + 1) : 0;
- Real ss = Staff_symbol_referencer::staff_space (me);
+
+ if (pure && beam)
+ {
+ Interval ph = stem->pure_height (stem, 0, INT_MAX);
+ Stem_info si = Stem::get_stem_info (stem);
+ ph[-stemdir] = si.shortest_y_;
+
+ return (ph - stemdir * max (beam_count, 1) * beam_translation)[stemdir] - stemdir * 0.5 * me->pure_height (me, 0, INT_MAX).length ();
+ }
Real end_y
- = Stem::stem_end_position (stem) * ss / 2
+ = stem->extent (stem, Y_AXIS)[stemdir]
- stemdir * max (beam_count, 1) * beam_translation;
if (!beam && Stem::duration_log (stem) >= 3)
{
/* we shouldn't position relative to the end of the stem since the stem
is invisible */
+ Real ss = Staff_symbol_referencer::staff_space (me);
vector<int> nhp = Stem::note_head_positions (stem);
Real note_head = (stemdir == UP ? nhp.back () : nhp[0]) * ss / 2;
end_y = note_head + stemdir * 1.5;
}
- mol.translate_axis (end_y, Y_AXIS);
- return mol;
+ return end_y;
}
MAKE_SCHEME_CALLBACK (Stem_tremolo, print, 1);
{
Grob *me = unsmob_grob (grob);
- Stencil s = translated_stencil (me, robust_scm2double (me->get_property ("slope"), 0.25));
+ Stencil s = untranslated_stencil (me, robust_scm2double (me->get_property ("slope"), 0.25));
return s.smobbed_copy ();
}
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
+/*
+ Note that several internal functions have a calc_beam bool argument.
+ This argument means: "If set, acknowledge the fact that there is a beam
+ and deal with it. If not, give me the measurements as if there is no beam."
+ Most pure functions are called WITHOUT calc_beam, whereas non-pure functions
+ are called WITH calc_beam.
+
+ The only exception to this is ::pure_height, which calls internal_pure_height
+ with "true" for calc_beam in order to trigger the calculations of other
+ pure heights in case there is a beam. It passes false, however, to
+ internal_height and internal_pure_height for all subsequent iterations.
+*/
+
#include "stem.hh"
#include "spanner.hh"
}
void
-Stem::set_stemend (Grob *me, Real se)
+Stem::set_stem_positions (Grob *me, Real se)
{
// todo: margins
Direction d = get_grob_direction (me);
+ Grob *beam = unsmob_grob (me->get_object ("beam"));
if (d && d * head_positions (me)[get_grob_direction (me)] >= se * d)
me->warning (_ ("weird stem size, check for narrow beams"));
- me->set_property ("stem-end-position", scm_from_double (se));
+ Interval height = me->pure_height (me, 0, INT_MAX);
+ Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
+
+ height[d] = se * half_space + beam_end_corrective (me);
+
+ Real stemlet_length = robust_scm2double (me->get_property ("stemlet-length"),
+ 0.0);
+ bool stemlet = stemlet_length > 0.0;
+
+ Grob *lh = get_reference_head (me);
+
+ if (!lh)
+ {
+ if (stemlet && beam)
+ {
+ Real beam_translation = Beam::get_beam_translation (beam);
+ Real beam_thickness = Beam::get_beam_thickness (beam);
+ int beam_count = beam_multiplicity (me).length () + 1;
+
+ height[-d] = (height[d] - d
+ * (0.5 * beam_thickness
+ + beam_translation * max (0, (beam_count - 1))
+ + stemlet_length));
+ }
+ else if (!stemlet && beam)
+ height[-d] = height[d];
+ else if (stemlet && !beam)
+ me->programming_error ("Can't have a stemlet without a beam.");
+ }
+
+ me->set_property ("Y-extent", ly_interval2scm (height));
}
/* Note head that determines hshift for upstems
SCM /* end */)
{
Grob *me = unsmob_grob (smob);
- Interval iv;
+ return ly_interval2scm (internal_pure_height (me, true));
+}
+Interval
+Stem::internal_pure_height (Grob *me, bool calc_beam)
+{
if (!is_normal_stem (me))
- return ly_interval2scm (iv);
+ return Interval (0.0, 0.0);
- Real ss = Staff_symbol_referencer::staff_space (me);
- Real rad = Staff_symbol_referencer::staff_radius (me);
+ Grob *beam = unsmob_grob (me->get_object ("beam"));
+
+ Interval iv = internal_height (me, false);
- if (!to_boolean (me->get_property ("cross-staff")))
+ if (!beam)
+ return iv;
+ if (!to_boolean (me->get_property ("cross-staff")) && calc_beam)
{
- Real len_in_halfspaces;
- SCM user_set_len_scm = me->get_property_data ("length");
- if (scm_is_number (user_set_len_scm))
- len_in_halfspaces = scm_to_double (user_set_len_scm);
- else
- len_in_halfspaces = scm_to_double (calc_length (smob));
- Real len = len_in_halfspaces * ss / 2;
+ Interval overshoot;
Direction dir = get_grob_direction (me);
+ Direction d = DOWN;
+ do
+ overshoot[d] = d == dir ? dir * infinity_f : iv[d];
+ while (flip (&d) != DOWN);
- Interval hp = head_positions (me);
- if (dir == UP)
- iv = Interval (0, len);
- else
- iv = Interval (-len, 0);
+ vector<Interval> heights;
+ vector<Grob *> my_stems;
+ extract_grob_set (beam, "normal-stems", normal_stems);
+ for (vsize i = 0; i < normal_stems.size (); i++)
+ if (normal_stems[i] != me && get_grob_direction (normal_stems[i]) == dir)
+ {
+ heights.push_back (Stem::internal_pure_height (normal_stems[i], false));
+ my_stems.push_back (normal_stems[i]);
+ iv.unite (heights.back ());
+ }
+ for (vsize i = 0; i < my_stems.size (); i++)
+ cache_pure_height (my_stems[i], iv, heights[i]);
+ iv.intersect (overshoot);
+ }
- if (!hp.is_empty ())
- {
- iv.translate (hp[dir] * ss / 2);
- iv.add_point (hp[-dir] * ss / 2);
- }
+ return iv;
+}
- /* extend the stem (away from the head) to cover the staff */
- if (dir == UP)
- iv[UP] = max (iv[UP], rad * ss);
- else
- iv[DOWN] = min (iv[DOWN], -rad * ss);
- }
- else
- iv = Interval (-rad * ss, rad * ss);
+void
+Stem::cache_pure_height (Grob *me, Interval iv, Interval my_iv)
+{
+ Interval overshoot;
+ Direction dir = get_grob_direction (me);
+ Direction d = DOWN;
+ do
+ overshoot[d] = d == dir ? dir * infinity_f : my_iv[d];
+ while (flip (&d) != DOWN);
- return ly_interval2scm (iv);
+ iv.intersect (overshoot);
+ dynamic_cast<Item *> (me)->cache_pure_height (iv);
}
MAKE_SCHEME_CALLBACK (Stem, calc_stem_end_position, 1)
Stem::calc_stem_end_position (SCM smob)
{
Grob *me = unsmob_grob (smob);
+ return scm_from_double (internal_calc_stem_end_position (me, true));
+}
+MAKE_SCHEME_CALLBACK (Stem, pure_calc_stem_end_position, 3)
+SCM
+Stem::pure_calc_stem_end_position (SCM smob,
+ SCM, /* start */
+ SCM /* end */)
+{
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (internal_calc_stem_end_position (me, false));
+}
+
+Real
+Stem::internal_calc_stem_end_position (Grob *me, bool calc_beam)
+{
if (!head_count (me))
- return scm_from_double (0.0);
+ return 0.0;
- if (Grob *beam = get_beam (me))
+ Grob *beam = get_beam (me);
+ Real ss = Staff_symbol_referencer::staff_space (me);
+ if (beam && calc_beam)
{
(void) beam->get_property ("quantized-positions");
- return me->get_property ("stem-end-position");
+ return me->extent (me, Y_AXIS)[get_grob_direction (me)] * ss * 2;
}
vector<Real> a;
/* WARNING: IN HALF SPACES */
- Real length = robust_scm2double (me->get_property ("length"), 7);
-
- Direction dir = get_grob_direction (me);
- Interval hp = head_positions (me);
- Real stem_end = dir ? hp[dir] + dir * length : 0;
-
- /* TODO: change name to extend-stems to staff/center/'() */
- bool no_extend = to_boolean (me->get_property ("no-stem-extend"));
- if (!no_extend && dir * stem_end < 0)
- stem_end = 0.0;
-
- return scm_from_double (stem_end);
-}
-
-/* Length is in half-spaces (or: positions) here. */
-MAKE_SCHEME_CALLBACK (Stem, calc_length, 1)
-SCM
-Stem::calc_length (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
-
SCM details = me->get_property ("details");
int durlog = duration_log (me);
- Real ss = Staff_symbol_referencer::staff_space (me);
Real staff_rad = Staff_symbol_referencer::staff_radius (me);
Real length = 7;
SCM s = ly_assoc_get (ly_symbol2scm ("lengths"), details, SCM_EOL);
/* Tremolo stuff. */
Grob *t_flag = unsmob_grob (me->get_object ("tremolo-flag"));
- if (t_flag && !unsmob_grob (me->get_object ("beam")))
+ if (t_flag && (!unsmob_grob (me->get_object ("beam")) || !calc_beam))
{
/* Crude hack: add extra space if tremolo flag is there.
length = max (length, minlen + 1.0);
}
- return scm_from_double (length);
+ Real stem_end = dir ? hp[dir] + dir * length : 0;
+
+ /* TODO: change name to extend-stems to staff/center/'() */
+ bool no_extend = to_boolean (me->get_property ("no-stem-extend"));
+ if (!no_extend && dir * stem_end < 0)
+ stem_end = 0.0;
+
+ return stem_end;
}
+
/* The log of the duration (Number of hooks on the flag minus two) */
int
Stem::duration_log (Grob *me)
return scm_from_int (dir);
}
+// note - height property necessary to trigger quantized beam positions
+// otherwise, we could just use Grob::stencil_height_proc
MAKE_SCHEME_CALLBACK (Stem, height, 1);
SCM
Stem::height (SCM smob)
{
Grob *me = unsmob_grob (smob);
- if (!is_normal_stem (me))
- return ly_interval2scm (Interval ());
-
- Direction dir = get_grob_direction (me);
+ return ly_interval2scm (internal_height (me, true));
+}
- Grob *beam = get_beam (me);
- if (beam)
- {
- /* trigger set-stem-lengths. */
- beam->get_property ("quantized-positions");
- }
+Grob*
+Stem::get_reference_head (Grob *me)
+{
+ return to_boolean (me->get_property ("avoid-note-head"))
+ ? last_head (me)
+ : first_head (me);
+}
- /*
- Can't get_stencil (), since that would cache stencils too early.
- This causes problems with beams.
- */
- Stencil *stencil = unsmob_stencil (print (smob));
- Interval iv = stencil ? stencil->extent (Y_AXIS) : Interval ();
+Real
+Stem::beam_end_corrective (Grob *me)
+{
+ Grob *beam = unsmob_grob (me->get_object ("beam"));
+ Direction dir = get_grob_direction (me);
if (beam)
{
if (dir == CENTER)
programming_error ("no stem direction");
dir = UP;
}
- iv[dir] += dir * Beam::get_beam_thickness (beam) * 0.5;
+ return dir * Beam::get_beam_thickness (beam) * 0.5;
}
-
- return ly_interval2scm (iv);
+ return 0.0;
}
-Real
-Stem::stem_end_position (Grob *me)
+Interval
+Stem::internal_height (Grob *me, bool calc_beam)
{
- return robust_scm2double (me->get_property ("stem-end-position"), 0);
-}
+ if (!is_valid_stem (me))
+ return Interval ();
-MAKE_SCHEME_CALLBACK (Stem, calc_flag, 1);
-SCM
-Stem::calc_flag (SCM smob)
-{
- Grob *me = unsmob_grob (smob);
+ Direction dir = get_grob_direction (me);
- int log = duration_log (me);
- /*
- TODO: maybe property stroke-style should take different values,
- e.g. "" (i.e. no stroke), "single" and "double" (currently, it's
- '() or "grace"). */
- string flag_style;
-
- SCM flag_style_scm = me->get_property ("flag-style");
- if (scm_is_symbol (flag_style_scm))
- flag_style = ly_symbol2string (flag_style_scm);
-
- if (flag_style == "no-flag")
- return Stencil ().smobbed_copy ();
-
- bool adjust = true;
-
- string staffline_offs;
- if (flag_style == "mensural")
- /* Mensural notation: For notes on staff lines, use different
- flags than for notes between staff lines. The idea is that
- flags are always vertically aligned with the staff lines,
- regardless if the note head is on a staff line or between two
- staff lines. In other words, the inner end of a flag always
- touches a staff line.
- */
- {
- if (adjust)
- {
- int p = (int) (rint (stem_end_position (me)));
- staffline_offs
- = Staff_symbol_referencer::on_line (me, p) ? "0" : "1";
- }
- else
- staffline_offs = "2";
- }
- else
- staffline_offs = "";
-
- char dir = (get_grob_direction (me) == UP) ? 'u' : 'd';
- string font_char = flag_style
- + to_string (dir) + staffline_offs + to_string (log);
- Font_metric *fm = Font_interface::get_default_font (me);
- Stencil flag = fm->find_by_name ("flags." + font_char);
- if (flag.is_empty ())
- me->warning (_f ("flag `%s' not found", font_char));
-
- SCM stroke_style_scm = me->get_property ("stroke-style");
- if (scm_is_string (stroke_style_scm))
+ Grob *beam = get_beam (me);
+ if (beam && calc_beam)
{
- string stroke_style = ly_scm2string (stroke_style_scm);
- if (!stroke_style.empty ())
- {
- string font_char = flag_style + to_string (dir) + stroke_style;
- Stencil stroke = fm->find_by_name ("flags." + font_char);
- if (stroke.is_empty ())
- {
- font_char = to_string (dir) + stroke_style;
- stroke = fm->find_by_name ("flags." + font_char);
- }
- if (stroke.is_empty ())
- me->warning (_f ("flag stroke `%s' not found", font_char));
- else
- flag.add_stencil (stroke);
- }
+ /* trigger set-stem-lengths. */
+ (void) beam->get_property ("quantized-positions");
+ return me->extent (me, Y_AXIS);
}
- return flag.smobbed_copy ();
-}
+ Real y2 = internal_calc_stem_end_position (me, calc_beam);
+ Real y1 = internal_calc_stem_begin_position (me, calc_beam);
-Stencil
-Stem::flag (Grob *me)
-{
- int log = duration_log (me);
- if (log < 3
- || unsmob_grob (me->get_object ("beam")))
- return Stencil ();
+ Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
- if (!is_normal_stem (me))
- return Stencil ();
+ Interval stem_y = Interval (min (y1, y2), max (y2, y1)) * half_space;
+ stem_y[dir] += beam_end_corrective (me);
- // This get_property call already evaluates the scheme function with
- // the grob passed as argument! Thus, we only have to check if a valid
- // stencil is returned.
- SCM flag_style_scm = me->get_property ("flag");
- if (Stencil *flag = unsmob_stencil (flag_style_scm))
- {
- return *flag;
- }
- else
- {
- return Stencil ();
- }
+ return stem_y;
}
MAKE_SCHEME_CALLBACK (Stem, width, 1);
if (is_invisible (me))
r.set_empty ();
- else if (unsmob_grob (me->get_object ("beam"))
- || abs (duration_log (me)) <= 2)
+ else
{
r = Interval (-1, 1);
r *= thickness (me) / 2;
}
- else
- {
- r = Interval (-1, 1) * thickness (me) * 0.5;
- r.unite (flag (me).extent (X_AXIS));
- }
+
return ly_interval2scm (r);
}
Stem::calc_stem_begin_position (SCM smob)
{
Grob *me = unsmob_grob (smob);
+ return scm_from_double (internal_calc_stem_begin_position (me, true));
+}
+
+MAKE_SCHEME_CALLBACK (Stem, pure_calc_stem_begin_position, 3);
+SCM
+Stem::pure_calc_stem_begin_position (SCM smob,
+ SCM, /* start */
+ SCM /* end */)
+{
+ Grob *me = unsmob_grob (smob);
+ return scm_from_double (internal_calc_stem_begin_position (me, false));
+}
+
+Real
+Stem::internal_calc_stem_begin_position (Grob *me, bool calc_beam)
+{
+ Grob *beam = get_beam (me);
+ Real ss = Staff_symbol_referencer::staff_space (me);
+ if (beam && calc_beam)
+ {
+ (void) beam->get_property ("quantized-positions");
+ return me->extent (me, Y_AXIS)[-get_grob_direction (me)] * ss * 2;
+ }
+
Direction d = get_grob_direction (me);
- Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
- Grob *lh
- = to_boolean (me->get_property ("avoid-note-head"))
- ? last_head (me)
- : first_head (me);
+ Grob *lh = get_reference_head (me);
Real pos = Staff_symbol_referencer::get_position (lh);
Real y_attach = Note_head::stem_attachment_coordinate (head, Y_AXIS);
y_attach = head_height.linear_combination (y_attach);
- pos += d * y_attach / half_space;
+ pos += d * y_attach * 2 / ss;
}
- return scm_from_double (pos);
+ return pos;
}
-MAKE_SCHEME_CALLBACK (Stem, print, 1);
-SCM
-Stem::print (SCM smob)
+bool
+Stem::is_valid_stem (Grob *me)
{
- Grob *me = unsmob_grob (smob);
- Grob *beam = get_beam (me);
-
- Stencil mol;
- Direction d = get_grob_direction (me);
-
+ /* TODO: make the stem start a direction ?
+ This is required to avoid stems passing in tablature chords. */
Real stemlet_length = robust_scm2double (me->get_property ("stemlet-length"),
0.0);
bool stemlet = stemlet_length > 0.0;
- /* TODO: make the stem start a direction ?
- This is required to avoid stems passing in tablature chords. */
- Grob *lh
- = to_boolean (me->get_property ("avoid-note-head"))
- ? last_head (me)
- : first_head (me);
+ Grob *lh = get_reference_head (me);
+ Grob *beam = unsmob_grob (me->get_object ("beam"));
if (!lh && !stemlet)
- return SCM_EOL;
+ return false;
if (!lh && stemlet && !beam)
- return SCM_EOL;
+ return false;
if (lh && robust_scm2int (lh->get_property ("duration-log"), 0) < 1)
- return SCM_EOL;
+ return false;
if (is_invisible (me))
- return SCM_EOL;
+ return false;
- Real y2 = robust_scm2double (me->get_property ("stem-end-position"), 0.0);
- Real y1 = y2;
- Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
+ return true;
+}
- if (lh)
- y2 = robust_scm2double (me->get_property ("stem-begin-position"), 0.0);
- else if (stemlet)
- {
- Real beam_translation = Beam::get_beam_translation (beam);
- Real beam_thickness = Beam::get_beam_thickness (beam);
- int beam_count = beam_multiplicity (me).length () + 1;
-
- y2 -= d
- * (0.5 * beam_thickness
- + beam_translation * max (0, (beam_count - 1))
- + stemlet_length) / half_space;
- }
+MAKE_SCHEME_CALLBACK (Stem, print, 1);
+SCM
+Stem::print (SCM smob)
+{
+ Grob *me = unsmob_grob (smob);
+ if (!is_valid_stem (me))
+ return SCM_EOL;
- Interval stem_y (min (y1, y2), max (y2, y1));
+ Interval stem_y = me->extent (me, Y_AXIS);
+ Direction dir = get_grob_direction (me);
+
+ stem_y[dir] -= beam_end_corrective (me);
// URG
Real stem_width = thickness (me);
= me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
Box b = Box (Interval (-stem_width / 2, stem_width / 2),
- Interval (stem_y[DOWN] * half_space, stem_y[UP] * half_space));
+ stem_y);
+ Stencil mol;
Stencil ss = Lookup::round_filled_box (b, blot);
mol.add_stencil (ss);
- mol.add_stencil (get_translated_flag (me));
-
return mol.smobbed_copy ();
}
-Stencil
-Stem::get_translated_flag (Grob *me)
-{
- Stencil fl = flag (me);
- if (!fl.is_empty ())
- {
- Direction d = get_grob_direction (me);
- Real blot
- = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
- Real stem_width = thickness (me);
- Real half_space = Staff_symbol_referencer::staff_space (me) * 0.5;
- Real y2 = robust_scm2double (me->get_property ("stem-end-position"), 0.0);
- fl.translate_axis (y2 * half_space - d * blot / 2, Y_AXIS);
- fl.translate_axis (stem_width / 2, X_AXIS);
- }
- return fl;
-}
-
/*
move the stem to right of the notehead if it is up.
*/
return scm_from_bool (is_cross_staff (unsmob_grob (smob)));
}
+Grob*
+Stem::flag (Grob *me)
+{
+ return unsmob_grob (me->get_object ("flag"));
+}
+
/* FIXME: Too many properties */
ADD_INTERFACE (Stem,
"The stem represents the graphical stem. In addition, it"
"direction "
"duration-log "
"flag "
- "flag-style "
"french-beaming "
- "length "
"length-fraction "
"max-beam-connect "
"neutral-direction "
"note-heads "
"positioning-done "
"rests "
- "stem-begin-position "
- "stem-end-position "
"stem-info "
"stemlet-length "
- "stroke-style "
"thickness "
"tremolo-flag "
);
else
{
if (use_horizontal_spacing_ || !Stem::get_beam (stem))
- stem_end_position = Stem::stem_end_position (stem) * staff_space * .5;
+ stem_end_position = stem->extent (stem, Y_AXIS)[get_grob_direction (stem)];
else
+ // May want to change this to the stem's pure height...
stem_end_position = Stem::note_head_positions (stem)[get_grob_direction (stem)]
* staff_space * .5;
}
if (dir == LEFT)
{
- Box flag_box = Stem::get_translated_flag (stem).extent_box ();
- flag_box.translate ( Offset (x[RIGHT], X_AXIS));
- boxes.push_back (flag_box);
+ Grob *flag = Stem::flag (stem);
+ if (flag)
+ {
+ Grob* commony = stem->common_refpoint (flag, Y_AXIS);
+ boxes.push_back (Box (flag->extent (x_refpoint_, X_AXIS),
+ flag->extent (commony, Y_AXIS)));
+ }
}
}
else
&& Note_column::get_stem (columns[0])
&& Note_column::get_stem (columns.back ()))
{
- /*
- trigger set_stem_ends
- */
- (void) par_beam->get_property ("quantized-positions");
-
Drul_array<Grob *> stems (Note_column::get_stem (columns[0]),
Note_column::get_stem (columns.back ()));
- Real ss = 0.5 * Staff_symbol_referencer::staff_space (me);
- Real lp = ss * robust_scm2double (stems[LEFT]->get_property ("stem-end-position"), 0.0)
- + stems[LEFT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS);
- Real rp = ss * robust_scm2double (stems[RIGHT]->get_property ("stem-end-position"), 0.0)
- + stems[RIGHT]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS);
+ Interval poss;
+ Direction side = LEFT;
+ do
+ {
+ // Trigger setting of stem lengths if necessary.
+ if (Grob *beam = Stem::get_beam (stems[side]))
+ (void) beam->get_property ("quantized-positions");
+ poss[side] = stems[side]->extent (stems[side], Y_AXIS)[get_grob_direction (stems[side])]
+ + stems[side]->get_parent (Y_AXIS)->relative_coordinate (commony, Y_AXIS);
+ }
+ while (flip (&side) != LEFT);
- *dy = rp - lp;
- points.push_back (Offset (stems[LEFT]->relative_coordinate (commonx, X_AXIS) - x0, lp));
- points.push_back (Offset (stems[RIGHT]->relative_coordinate (commonx, X_AXIS) - x0, rp));
+ *dy = poss[RIGHT] - poss[LEFT];
+ points.push_back (Offset (stems[LEFT]->relative_coordinate (commonx, X_AXIS) - x0, poss[LEFT]));
+ points.push_back (Offset (stems[RIGHT]->relative_coordinate (commonx, X_AXIS) - x0, poss[RIGHT]));
}
else
{
graceSettings = #`(
(Voice Stem direction ,UP)
(Voice Stem font-size -3)
+ (Voice Flag font-size -3)
(Voice NoteHead font-size -3)
(Voice TabNoteHead font-size -4)
(Voice Dots font-size -3)
\remove "Accidental_engraver"
%% make the Stems as short as possible to minimize their influence
%% on the slur::calc-control-points routine
- \override Stem #'length = #0
\override Stem #'no-stem-extend = ##t
- \override Stem #'flag-style = #'no-flag
+ \override Flag #'style = #'no-flag
\override Stem #'details = #'((lengths 0 0 0 0 0 0)
(beamed-lengths 0 0 0)
(beamed-minimum-free-lengths 0 0 0)
startAcciaccaturaMusic = {
s1*0\startGraceSlur
- \override Stem #'stroke-style = #"grace"
+ \override Flag #'stroke-style = #"grace"
}
stopAcciaccaturaMusic = {
- \revert Stem #'stroke-style
+ \revert Flag #'stroke-style
s1*0\stopGraceSlur
}
startSlashedGraceMusic = {
- \override Stem #'stroke-style = #"grace"
+ \override Flag #'stroke-style = #"grace"
}
stopSlashedGraceMusic = {
- \revert Stem #'stroke-style
+ \revert Flag #'stroke-style
}
\consists Vaticana_ligature_engraver
\override NoteHead #'style = #'vaticana.punctum
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
}
}
(_i "Attach @var{text} to @var{grob-name} at offset @var{offset},
with @var{text} referring to @var{footnote} (use like @code{\\once})")
(make-music 'FootnoteEvent
+ 'automatically-numbered #f
'symbol grob-name
'X-offset (car offset)
'Y-offset (cdr offset)
the number appears at @var{offset}. Note that, for this to take effect,
auto-numbering must be turned on in the paper block. Otherwise, no
number will appear. Use like @code{\\once})")
- #{
- \footnoteGrob $grob-name $offset \markup { \null } $footnote
- #})
+ (make-music 'FootnoteEvent
+ 'automatically-numbered #t
+ 'symbol grob-name
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text (make-null-markup)
+ 'footnote-text footnote))
+
footnote =
#(define-music-function (parser location offset text footnote)
(_i "Attach @var{text} at @var{offset} with @var{text} referring
to @var{footnote} (use like @code{\\tweak})")
(make-music 'FootnoteEvent
+ 'automatically-numbered #f
'X-offset (car offset)
'Y-offset (cdr offset)
'text text
'footnote-text footnote))
-% this function can't be a simple copy and past of the above because
-% it needs to be encapsulated in a Sequential Music.
-% so, there's a code dup of above :-(
autoFootnote =
#(define-music-function (parser location offset footnote)
(number-pair? markup?)
take effect, auto-numbering must be turned on in the paper block.
Otherwise, no number will appear. Use like @code{\\tweak})")
(make-music 'FootnoteEvent
+ 'automatically-numbered #t
'X-offset (car offset)
'Y-offset (cdr offset)
'text (make-null-markup)
footnote-padding = 0.5\mm
footnote-footer-padding = 0.5\mm
footnote-number-raise = 0.5\mm
- footnote-auto-numbering = ##t
footnote-numbering-function = #numbered-footnotes
reset-footnotes-on-new-page = ##t
\override NoteHead #'transparent = ##t
\override NoteHead #'no-ledgers = ##t
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\override Beam #'transparent = ##t
\override Accidental #'transparent = ##t
}
\revert Accidental #'transparent
\revert Beam #'transparent
\revert Stem #'transparent
+ \revert Flag #'transparent
\revert NoteHead #'transparent
\revert NoteHead #'no-ledgers
\revert Dots #'transparent
% stems (the half note gets a double stem)
\revert TabVoice.Stem #'length
\revert TabVoice.Stem #'no-stem-extend
- \revert TabVoice.Stem #'flag-style
+ \revert TabVoice.Flag #'style
\revert TabVoice.Stem #'details
\revert TabVoice.Stem #'transparent
\override TabVoice.Stem #'stencil = #tabvoice::draw-double-stem-for-half-notes
\override NoteHead #'style = #'diamond
\override NoteHead #'color = #red
\override Stem #'color = #red
+ \override Flag #'color = #red
\override Beam #'color = #red
}
voiceTwoStyle = {
\override NoteHead #'style = #'triangle
\override NoteHead #'color = #blue
\override Stem #'color = #blue
+ \override Flag #'color = #blue
\override Beam #'color = #blue
}
voiceThreeStyle = {
\override NoteHead #'style = #'xcircle
\override NoteHead #'color = #green
\override Stem #'color = #green
+ \override Flag #'color = #green
\override Beam #'color = #green
}
voiceFourStyle = {
\override NoteHead #'style = #'cross
\override NoteHead #'color = #magenta
\override Stem #'color = #magenta
+ \override Flag #'color = #magenta
\override Beam #'color = #magenta
}
voiceNeutralStyle = {
\revert NoteHead #'style
\revert NoteHead #'color
\revert Stem #'color
+ \revert Flag #'color
\revert Beam #'color
}
@{chord} must be in absolute pitches and should have the highest
string number (generally the lowest pitch) first. @code{tuning}
should be a string that will be converted to a symbol.")
- (begin
- (chord->tuning parser tuning chord)
- #{
- \set TabStaff.stringTunings = $(ly:parser-lookup parser tuning)
- \set FretBoards.stringTunings = $(ly:parser-lookup parser tuning)
- #}))
+ (chord->tuning parser tuning chord)
+ #{ \set stringTunings (ly:parser-lookup $parser $tuning)
+ #})
%% A music function for converting an alist to string-tunings
makeDefaultStringTunings =
fet_endchar;
+fet_beginchar ("halfopen vertical", "halfopenvertical");
+ save thin, height, width, thick, factor, slash;
+
+ factor := 3/2;
+ height# = 5/4 width#;
+ height# = staff_space#;
+ thin = 0.6 linethickness + 0.06 staff_space;
+ slash# = 1.05 linethickness#;
+
+ set_char_box (width# / 2, width# / 2,
+ height# / 2, height# / 2);
+
+ define_pixels (width, height, slash);
+
+ 2 thick + 0.6 (height - 2 thin) = width;
+
+ penpos1 (thick, 0);
+ penpos2 (thin, 90);
+ penpos3 (thick, 180);
+ penpos4 (thin, 270);
+ z1r = (w, 0);
+ z2r = (0, h);
+ z3r = (-w, 0);
+ z4r = (0, -h);
+
+ penlabels (1, 2, 3, 4);
+
+ penstroke z1e{up}
+ .. z2e{left}
+ .. z3e{down}
+ .. z4e{right}
+ .. cycle;
+
+ draw_brush ((0, -h * factor), slash,
+ (0, h * factor), slash);
+fet_endchar;
+
+
fet_beginchar ("plus (stopped)", "stopped");
save hthick, vthick, size, outer_hsize, outer_vsize;
(ly:add-interface
'footnote-interface
"Make a footnote."
- '(footnote-text))
+ '(automatically-numbered footnote-text))
(ly:add-interface
'footnote-spanner-interface
(auto-knee-gap ,ly:dimension? "If a gap is found between note
heads where a horizontal beam fits that is larger than this number,
make a kneed beam.")
+ (automatically-numbered ,boolean? "Should a footnote be automatically
+numbered?")
(average-spacing-wishes ,boolean? "If set, the spacing wishes are
averaged over staves.")
(avoid-note-head ,boolean? "If set, the stem of a chord does not
;;
;; f
;;
- (flag ,ly:stencil? "A function returning the full flag stencil
-for the @code{Stem}, which is passed to the function as the only
-argument. The default ly:stem::calc-stencil function uses the
-@code{flag-style} property to determine the correct glyph for the
-flag. By providing your own function, you can create arbitrary
-flags.")
(flag-count ,number? "The number of tremolo beams.")
- (flag-style ,symbol? "A symbol determining what style of flag
-glyph is typeset on a @code{Stem}. Valid options include @code{'()}
-for standard flags, @code{'mensural} and @code{'no-flag}, which
-switches off the flag.")
(font-encoding ,symbol? "The font encoding is the broadest
category for selecting a font. Currently, only lilypond's system
fonts (Emmentaler) are using this property. Available
structure.")
(stem-attachment ,number-pair? "An @code{(@var{x} . @var{y})}
pair where the stem attaches to the notehead.")
- (stem-begin-position ,number? "Where does the stem begin (the
-position of the support-head)?")
- (stem-end-position ,number? "Where does the stem end (the end is
-opposite to the support-head)?")
;;[TODO: doco]
(stem-spacing-correction ,number? "Optical correction amount for
stems that are placed in tight configurations. For opposite
in addition to notes and stems.")
(figures ,ly:grob-array? "Figured bass objects for continuation line.")
+ (flag ,ly:grob? "A pointer to a @code{Flag} object.")
(glissando-index ,integer? "The index of a glissando in its note
column.")
(clip-edges . #t)
(collision-interfaces . (beam-interface
clef-interface
+ flag-interface
inline-accidental-interface
key-signature-interface
note-head-interface
;; sync with TextScript (?)
(avoid-slur . around)
- (cross-staff . ,ly:side-position-interface::calc-cross-staff)
+ (cross-staff . ,script-or-side-position-cross-staff)
(direction . ,ly:script-interface::calc-direction)
(font-encoding . fetaText)
(font-size . -5) ; don't overlap when next to heads.
text-interface
text-script-interface))))))
+ (Flag
+ . (
+ (stencil . ,ly:flag::print)
+ (X-extent . ,ly:flag::width)
+ (X-offset . ,ly:flag::calc-x-offset)
+ (Y-offset . ,ly:flag::calc-y-offset)
+ (meta . ((class . Item)
+ (interfaces . (flag-interface
+ font-interface))))))
+
(FootnoteItem
. (
(annotation-balloon . #f)
(annotation-line . #t)
+ (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
(break-visibility . ,inherit-y-parent-visibility)
(footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
(stencil . ,ly:balloon-interface::print)
. (
(annotation-balloon . #f)
(annotation-line . #t)
+ (automatically-numbered . ,(grob::calc-property-by-copy 'automatically-numbered))
(footnote-text . ,(grob::calc-property-by-copy 'footnote-text))
(spanner-placement . ,LEFT)
(stencil . ,ly:balloon-interface::print-spanner)
(direction . ,ly:stem::calc-direction)
(duration-log . ,stem::calc-duration-log)
- (flag . ,ly:stem::calc-flag)
- (length . ,ly:stem::calc-length)
(neutral-direction . ,DOWN)
(positioning-done . ,ly:stem::calc-positioning-done)
- (stem-begin-position . ,ly:stem::calc-stem-begin-position)
- (stem-end-position . ,ly:stem::calc-stem-end-position)
(stem-info . ,ly:stem::calc-stem-info)
(stencil . ,ly:stem::print)
(thickness . 1.3)
(Y-extent . ,ly:stem::height)
(Y-offset . ,ly:staff-symbol-referencer::callback)
(meta . ((class . Item)
- (interfaces . (font-interface
- stem-interface))))))
+ (interfaces . (stem-interface))))))
(StemTremolo
. (
(stencil . ,ly:stem-tremolo::print)
(style . ,ly:stem-tremolo::calc-style)
(X-extent . ,ly:stem-tremolo::width)
+ (Y-offset . ,ly:stem-tremolo::calc-y-offset)
(meta . ((class . Item)
(interfaces . (stem-tremolo-interface))))))
(StringNumber
. (
(avoid-slur . around)
+ (cross-staff . ,script-or-side-position-cross-staff)
(font-encoding . fetaText)
(font-size . -5) ; don't overlap when next to heads.
(padding . 0.5)
(TextScript
. (
(avoid-slur . around)
- (cross-staff . ,ly:script-interface::calc-cross-staff)
+ (cross-staff . ,script-or-side-position-cross-staff)
(direction . ,DOWN)
(extra-spacing-width . (+inf.0 . -inf.0))
(outside-staff-priority . 450)
ly:note-head::print
ly:dots::print
ly:clef::print
+ ly:flag::print
+ default-flag
+ normal-flag
+ mensural-flag
+ no-flag
+ modern-straight-flag
+ old-straight-flag
ly:key-signature-interface::print
ly:percent-repeat-item-interface::beat-slash
ly:text-interface::print
(,ly:side-position-interface::y-aligned-side . ,ly:side-position-interface::pure-y-aligned-side)
(,ly:slur::height . ,ly:slur::pure-height)
(,ly:slur::outside-slur-callback . ,ly:slur::pure-outside-slur-callback)
+ (,ly:stem::calc-stem-end-position . ,ly:stem::pure-calc-stem-end-position)
(,ly:stem::height . ,ly:stem::pure-height)
+ (,ly:stem-tremolo::calc-y-offset . ,ly:stem-tremolo::pure-calc-y-offset)
(,ly:system::height . ,ly:system::calc-pure-height)))
(define pure-functions
(list
parenthesize-elements
laissez-vibrer::print
+ ly:flag::calc-y-offset
ly:rest::y-offset-callback
ly:staff-symbol-referencer::callback
ly:staff-symbol::height))
(interpret-markup layout props (list anonymous-with-signature arg))))
(define-markup-command (footnote layout props mkup note)
+ (markup? markup?)
+ #:category other
+ "Have footnote @var{note} act as an annotation to the markup @var{mkup}.
+
+@lilypond[verbatim,quote]
+\\markup {
+ \\auto-footnote a b
+ \\override #'(padding . 0.2)
+ \\auto-footnote c d
+}
+@end lilypond
+The footnote will not be annotated automatically."
+ (ly:stencil-combine-at-edge
+ (interpret-markup layout props mkup)
+ X
+ RIGHT
+ (ly:make-stencil
+ `(footnote (gensym "footnote") #f ,(interpret-markup layout props note))
+ '(0 . 0)
+ '(0 . 0))
+ 0.0))
+
+(define-markup-command (auto-footnote layout props mkup note)
(markup? markup?)
#:category other
#:properties ((raise 0.5)
@lilypond[verbatim,quote]
\\markup {
- \\footnote a b
+ \\auto-footnote a b
\\override #'(padding . 0.2)
- \\footnote c d
+ \\auto-footnote c d
}
-@end lilypond"
+@end lilypond
+The footnote will be annotated automatically."
(let* ((markup-stencil (interpret-markup layout props mkup))
(auto-numbering (ly:output-def-lookup layout
'footnote-auto-numbering))
(ly:stencil-add
main-stencil
(ly:make-stencil
- `(footnote ,footnote-hash ,(interpret-markup layout props note))
+ `(footnote ,footnote-hash #t ,(interpret-markup layout props note))
'(0 . 0)
'(0 . 0)))))
(with @code{+} sign).")
(augmented-slash ,boolean? "This figure is for an augmented figured bass
(back-slashed number).")
+ (automatically-numbered ,boolean? "Should a footnote be automatically
+numbered?")
(autosplit-end ,boolean? "Duration of event was truncated by automatic
splitting in @code{Completion_heads_engraver}.")
;;;; notably the old-straight-flag and the modern-straight-flag styles.
-(define-public (no-flag stem-grob)
+(define-public (no-flag grob)
"No flag: Simply return empty stencil."
empty-stencil)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define-public (add-stroke-straight stencil stem-grob dir log stroke-style
+(define-public (add-stroke-straight stencil grob dir log stroke-style
offset length thickness stroke-thickness)
"Add the stroke for acciaccatura to the given flag stencil.
The stroke starts for up-flags at `upper-end-of-flag + (0,length/2)'
the angle! Other combinations don't look as good.
For down-stems the y-coordinates are simply mirrored."
- (let* ((start (offset-add offset (cons 0 (* (/ length 2) dir))))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (start (offset-add offset (cons 0 (* (/ length 2) dir))))
(end (offset-add (cons 0 (cdr offset))
(cons (- (/ (car offset) 2)) (* (- (+ thickness (car offset))) dir))))
(stroke (make-line-stencil stroke-thickness (car start) (cdr start) (car end) (cdr end))))
All lengths are scaled according to the font size of the note."
- (lambda (stem-grob)
- (let* ((log (ly:grob-property stem-grob 'duration-log))
+ (lambda (grob)
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (log (ly:grob-property stem-grob 'duration-log))
(dir (ly:grob-property stem-grob 'direction))
(stem-up (eqv? dir UP))
- (layout (ly:grob-layout stem-grob))
+ (layout (ly:grob-layout grob))
; scale with the note size (e.g. for grace notes)
- (factor (magstep (ly:grob-property stem-grob 'font-size 0)))
+ (factor (magstep (ly:grob-property grob 'font-size 0)))
(grob-stem-thickness (ly:grob-property stem-grob 'thickness))
(line-thickness (ly:output-def-lookup layout 'line-thickness))
(half-stem-thickness (/ (* grob-stem-thickness line-thickness) 2))
(stencil (ly:round-filled-polygon points half-stem-thickness))
; Log for 1/8 is 3, so we need to subtract 3
(flag-stencil (buildflag stencil (- log 3) stencil spacing))
- (stroke-style (ly:grob-property stem-grob 'stroke-style)))
+ (stroke-style (ly:grob-property grob 'stroke-style)))
(if (equal? stroke-style "grace")
- (add-stroke-straight flag-stencil stem-grob
+ (add-stroke-straight flag-stencil grob
dir log
stroke-style
flag-end flag-length
(* half-stem-thickness 2))
flag-stencil))))
-(define-public (modern-straight-flag stem-grob)
+(define-public (modern-straight-flag grob)
"Modern straight flag style (for composers like Stockhausen, Boulez, etc.).
The angles are 18 and 22 degrees and thus smaller than for the ancient style
of Bach, etc."
- ((straight-flag 0.55 1 -18 1.1 22 1.2) stem-grob))
+ ((straight-flag 0.55 1 -18 1.1 22 1.2) grob))
-(define-public (old-straight-flag stem-grob)
+(define-public (old-straight-flag grob)
"Old straight flag style (for composers like Bach). The angles of the
flags are both 45 degrees."
- ((straight-flag 0.55 1 -45 1.2 45 1.4) stem-grob))
+ ((straight-flag 0.55 1 -45 1.2 45 1.4) grob))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-; NOTE: By default, lilypond uses the C++ method Stem::calc-flag
-; (ly:stem::calc-flag is the corresponding Scheme interface) to generate the
+; NOTE: By default, lilypond uses the C++ method Flag::stencil
+; (ly:flag::stencil is the corresponding Scheme interface) to generate the
; flag stencil. The following functions are simply a reimplementation in
; Scheme, so that one has that functionality available in Scheme, if one
; wants to write a flag style, which modifies one of the standard flags
; by some stencil operations.
-(define-public (add-stroke-glyph stencil stem-grob dir stroke-style flag-style)
+(define-public (add-stroke-glyph stencil grob dir stroke-style flag-style)
"Load and add a stroke (represented by a glyph in the font) to the given
flag stencil."
(if (not (string? stroke-style))
stencil
; Otherwise: look up the stroke glyph and combine it with the flag
- (let* ((font-char (string-append "flags." flag-style dir stroke-style))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (font-char (string-append "flags." flag-style dir stroke-style))
(alt-font-char (string-append "flags." dir stroke-style))
- (font (ly:grob-default-font stem-grob))
+ (font (ly:grob-default-font grob))
(tmpstencil (ly:font-get-glyph font font-char))
(stroke-stencil (if (ly:stencil-empty? tmpstencil)
(ly:font-get-glyph font alt-font-char)
(ly:stencil-add stencil stroke-stencil)))))
-(define-public (retrieve-glyph-flag flag-style dir dir-modifier stem-grob)
+(define-public (retrieve-glyph-flag flag-style dir dir-modifier grob)
"Load the correct flag glyph from the font."
- (let* ((log (ly:grob-property stem-grob 'duration-log))
- (font (ly:grob-default-font stem-grob))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (log (ly:grob-property stem-grob 'duration-log))
+ (font (ly:grob-default-font grob))
(font-char (string-append "flags." flag-style dir dir-modifier (number->string log)))
(flag (ly:font-get-glyph font font-char)))
(if (ly:stencil-empty? flag)
flag))
-(define-public (create-glyph-flag flag-style dir-modifier stem-grob)
+(define-public (create-glyph-flag flag-style dir-modifier grob)
"Create a flag stencil by looking up the glyph from the font."
- (let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "u" "d"))
- (flag (retrieve-glyph-flag flag-style dir dir-modifier stem-grob))
- (stroke-style (ly:grob-property stem-grob 'stroke-style)))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "u" "d"))
+ (flag (retrieve-glyph-flag flag-style dir dir-modifier grob))
+ (stroke-style (ly:grob-property grob 'stroke-style)))
(if (null? stroke-style)
flag
- (add-stroke-glyph flag stem-grob dir stroke-style flag-style))))
+ (add-stroke-glyph flag grob dir stroke-style flag-style))))
-(define-public (mensural-flag stem-grob)
+(define-public (mensural-flag grob)
"Mensural flags: Create the flag stencil by loading the glyph from the font.
Flags are always aligned with staff lines, so we need to check the end point
of the stem: For stems ending on staff lines, use different flags than for
staff line or between two staff lines. In other words, the inner end of
a flag always touches a staff line."
- (let* ((adjust #t)
- (stem-end (inexact->exact (round (ly:grob-property stem-grob 'stem-end-position))))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (adjust #t)
+ (d (ly:grob-property stem-grob 'direction))
+ (ss (ly:staff-symbol-staff-space stem-grob))
+ (stem-end (inexact->exact (round (* (index-cell
+ (ly:grob-extent stem-grob
+ stem-grob
+ Y)
+ d)
+ (/ 2 ss)))))
; For some reason the stem-end is a real instead of an integer...
(dir-modifier (if (ly:position-on-line? stem-grob stem-end) "1" "0"))
(modifier (if adjust dir-modifier "2")))
- (create-glyph-flag "mensural" modifier stem-grob)))
+ (create-glyph-flag "mensural" modifier grob)))
-(define-public ((glyph-flag flag-style) stem-grob)
+(define-public ((glyph-flag flag-style) grob)
"Simulatesthe default way of generating flags: Look up glyphs
@code{flags.style[ud][1234]} from the feta font and use it for the flag
stencil."
- (create-glyph-flag flag-style "" stem-grob))
+ (create-glyph-flag flag-style "" grob))
-(define-public (normal-flag stem-grob)
+(define-public (normal-flag grob)
"Create a default flag."
- (create-glyph-flag "" "" stem-grob))
+ (create-glyph-flag "" "" grob))
-(define-public (default-flag stem-grob)
+(define-public (default-flag grob)
"Create a flag stencil for the stem. Its style will be derived from the
-@code{'flag-style} Stem property. By default, @code{lilypond} uses a
+@code{'style} Flag property. By default, @code{lilypond} uses a
C++ Function (which is slightly faster) to do exactly the same as this
function. However, if one wants to modify the default flags, this function
can be used to obtain the default flag stencil, which can then be modified
at will. The correct way to do this is:
@example
-\\override Stem #'flag = #default-flag
-\\override Stem #'flag-style = #'mensural
+\\override Flag #'stencil = #default-flag
+\\override Flag #'style = #'mensural
@end example
"
- (let* ((flag-style-symbol (ly:grob-property stem-grob 'flag-style))
+ (let* ((stem-grob (ly:grob-parent grob X))
+ (flag-style-symbol (ly:grob-property grob 'style))
(flag-style (if (symbol? flag-style-symbol)
(symbol->string flag-style-symbol)
"")))
(cond
- ((equal? flag-style "") (normal-flag stem-grob))
- ((equal? flag-style "mensural") (mensural-flag stem-grob))
- ((equal? flag-style "no-flag") (no-flag stem-grob))
- (else ((glyph-flag flag-style) stem-grob)))))
+ ((equal? flag-style "") (normal-flag grob))
+ ((equal? flag-style "mensural") (mensural-flag grob))
+ ((equal? flag-style "no-flag") (no-flag grob))
+ (else ((glyph-flag flag-style) grob)))))
(make-property-set 'graceSettings
;; TODO: take this from voicedGraceSettings or similar.
'((Voice Stem font-size -3)
+ (Voice Flag font-size -3)
(Voice NoteHead font-size -3)
(Voice TabNoteHead font-size -4)
(Voice Dots font-size -3)
(ly:text-interface::interpret-markup layout props text)))
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; cross-staff stuff
+
+(define-public (script-or-side-position-cross-staff g)
+ (or
+ (ly:script-interface::calc-cross-staff g)
+ (ly:side-position-interface::calc-cross-staff g)))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; note heads
(ly:duration-log
(ly:event-property (event-cause grob) 'duration)))
+(define-public (stem::length val)
+ (lambda (grob)
+ (let* ((d (ly:grob-property grob 'direction))
+ (ss (ly:staff-symbol-staff-space grob))
+ (beg (ly:stem::calc-stem-begin-position grob))
+ (y1 (* beg (* 0.5 ss)))
+ (y2 (* ((if (eqv? d DOWN) - +) beg val) (* 0.5 ss))))
+ (if (eqv? d DOWN)
+ (cons y2 y1)
+ (cons y1 y2)))))
+
(define-public (note-head::calc-duration-log grob)
(min 2
(ly:duration-log
(char->integer #\0)))))
(string->list (number->string var-idx)))))))))
-(define-public (parse-string-result str parser)
- "Parse @var{str}, which is supposed to contain a music expression."
-
- (ly:parser-parse-string
- parser
- (format #f "parseStringResult = \\notemode { ~a }" str))
- (ly:parser-lookup parser 'parseStringResult))
-
(define-public (read-lily-expression chr port)
"Read a lilypond music expression enclosed within @code{#@}} and @code{#@}}
from @var{port} and return the corresponding Scheme music expression.
,@(map (lambda (binding)
`(ly:parser-define! parser-clone ',(car binding) ,(cdr binding)))
(reverse bindings))
- (parse-string-result ,lily-string parser-clone)))))
+ (ly:parse-string-expression parser-clone ,lily-string)))))
(read-hash-extend #\{ read-lily-expression)
* Add @nodes, split at sections?
+ * -o --output listed in help is not implemented?!
'''
import os
import getopt
import re
+import glob
program_name = 'lys-to-tely'
-f, --fragment-options=OPTIONS use OPTIONS as lilypond-book fragment
options
-o, --output=NAME write tely doc to NAME
+ -i, --input-filenames=NAME read list of files from a file instead of stdin
+ -g, --glob-input=GLOB a string which will be passed to glob.glob(GLOB)
-t, --title=TITLE set tely doc title TITLE
-a, --author=AUTHOR set tely author AUTHOR
--template=TEMPLATE use TEMPLATE as Texinfo template file,
sys.exit (0)
(options, files) = getopt.getopt (sys.argv[1:], 'f:hn:t:',
- ['fragment-options=', 'help', 'name=', 'title=', 'author=', 'template='])
+ ['fragment-options=', 'help', 'name=',
+ 'title=', 'author=', 'template=',
+ 'input-filenames=', 'glob-input='])
name = "ly-doc"
title = "Ly Doc"
author = "Han-Wen Nienhuys and Jan Nieuwenhuizen"
+input_filename = ""
+glob_input = ""
template = '''\input texinfo
@setfilename %%(name)s.info
@settitle %%(title)s
title = a
elif o == '-a' or o == '--author':
author = a
+ elif o == '-i' or o == '--input-filenames':
+ input_filename = a
+ elif o == '-p' or o == '--glob-input':
+ glob_input = a
elif o == '-f' or o == '--fragment-options':
fragment_options = a
elif o == '--template':
""" % (os.path.basename (n), fragment_options, n)
return s
+if glob_input:
+ files = glob.glob(glob_input)
+elif input_filename:
+ files = open(input_filename).read().splitlines()
+
if files:
dir = os.path.dirname (name) or "."
# don't strip .tely extension, Documentation/snippets uses .itely