$(outdir)/contributor.texi: $(outdir)/ROADMAP
### bad hack for badly-integrated bibliography
-$(outdir)/engravingbib.itexi:
- BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2html \
- -o $(outdir)/colorado.html \
+$(outdir)/colorado.itexi:
+ BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
+ -o $(outdir)/colorado.itexi \
$(src-dir)/essay/colorado.bib
- $(buildscript-dir)/html-to-texi \
- < $(outdir)/colorado.html > $(outdir)/colorado.itexi
- BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2html \
- -o $(outdir)/computer-notation.html \
+
+$(outdir)/computer-notation.itexi:
+ BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
+ -o $(outdir)/computer-notation.itexi \
$(src-dir)/essay/computer-notation.bib
- $(buildscript-dir)/html-to-texi \
- < $(outdir)/computer-notation.html > $(outdir)/computer-notation.itexi
- BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2html \
- -o $(outdir)/engravingbib.html \
+
+$(outdir)/engravingbib.itexi:
+ BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
+ -o $(outdir)/engravingbib.itexi \
$(src-dir)/essay/engravingbib.bib
- $(buildscript-dir)/html-to-texi \
- < $(outdir)/engravingbib.html > $(outdir)/engravingbib.itexi
-$(outdir)/essay.texi: $(outdir)/engravingbib.itexi
+$(outdir)/essay.texi: \
+ $(outdir)/colorado.itexi \
+ $(outdir)/computer-notation.itexi \
+ $(outdir)/engravingbib.itexi
+
+$(outdir)/others-did.itexi:
+ BSTINPUTS=$(src-dir)/web/ $(buildscript-dir)/bib2texi \
+ -s web \
+ -o $(outdir)/others-did.itexi \
+ $(src-dir)/web/others-did.bib
+
+$(outdir)/we-wrote.itexi:
+ BSTINPUTS=$(src-dir)/web/ $(buildscript-dir)/bib2texi \
+ -s web \
+ -o $(outdir)/we-wrote.itexi \
+ $(src-dir)/web/we-wrote.bib
###########
$(MAKE) -C pictures WWW-1
ln -sf ../pictures/$(outdir) $@
-$(outdir)/web.texi: $(outdir)/ly-examples
-
$(outdir)/ly-examples:
$(MAKE) -C web/ly-examples
ln -sf ../web/ly-examples/$(outdir) $@
endif
+ifeq ($(out),www)
+$(outdir)/web.texi: $(outdir)/ly-examples $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi
+else
+# duplicate (without ly-examples)
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi
+endif
+
+
# Ugh, using '%' twice not possible
$(outdir)/notation/notation.xml: $(outdir)/notation.texi
mkdir -p $(dir $@)
@end ignore
+@item
+New option @code{-dinclude-settings=INCLUDEFILE.ly}, which causes lilypond
+to include the given file before the score is processed. This allows the
+user to change global settings without the need to change the score itself.
+That way, several different editions/version (e.g. different page sizes)
+can be generated from a file without having to modify the score for each
+version.
+
@item
The autobeaming settings syntax has been changed. beatLength,
beatGrouping, beamSettings, and measureGrouping have all been eliminated.
on which part of their job, checks to make sure that everything is
running smoothly, and has final say on our policy for Issues.
-Currently: Graham
+Currently: Phil
@item
Doc Meister: trains new doc editors/writers, organizes who works
Files of priority 1 should be submitted along all files generated by
starting a new language in the same commit and thus a unique patch, and
the translation of files marked with priority 2 should be committed to
-Git at the same time and thus sent in a single patch. Files
+Git at the same time and thus sent in a single patch. Files
marked with priority 3 or more may be submitted individually. Word
counts (excluding LilyPond snippets) are given for each file. For
knowing how to commit your work to Git, then make patches of your new
@enumerate
@item
-Tell us where the addition should be placed. Please include both
+Tell us where the addition should be placed. Please include both
the section number and title (i.e. "LM 2.13 Printing lyrics").
@item
@item
A formal patch to the source code is @emph{not} required; we can
-take care of the technical details. Here is an example of a
+take care of the technical details. Here is an example of a
perfect documentation report:
@verbatim
@subheading Larger contributions
To replace large sections of the documentation, the guidelines are
-stricter. We cannot remove parts of the current documentation
+stricter. We cannot remove parts of the current documentation
unless we are certain that the new version is an improvement.
@enumerate
@end enumerate
Once you have followed these guidelines, please send a message to
-lilypond-devel with your documentation submissions. Unfortunately
+lilypond-devel with your documentation submissions. Unfortunately
there is a strict “no top-posting” check on the mailing list; to avoid
this, add:
@item
Avoid long stretches of input code. Nobody is going to read
-them in print. Create small examples. However, this does not mean
+them in print. Create small examples. However, this does not mean
it has be minimal.
@item
@node Scripts to ease doc work
@section Scripts to ease doc work
+@subheading Building only one section of the documentation
+
+In order to save build time, a script is available to build only
+one section of the documentation in English with a default html
+appearance.
+
+The script is available as:
+
+@example
+scripts/auxiliar/doc-section.sh
+@end example
+
+This script will require customization for your site if your
+LilyPond git repository is anyplace but @code{$HOME/lilypond}.
+
+Assuming that no customization is required, you can setup the
+single section build with:
+
+@example
+mkdir $HOME/lilypond/tempdocs
+cp $HOME/lilypond/Documentation/out/version.itexi $HOME/lilypond/tempdocs
+@end example
+
+You can then build a section of the documentation with:
+
+@example
+scripts/auxiliar/doc-section.sh MANUAL SECTION
+@end example
+
+@noindent
+where @code{SECTION} is the name of the file containing the section
+to be build, and @code{MANUAL} isc replaced by the name of the directory
+containing the section. So, for example, to build section 1.1 of the
+Notation Reference, use the command:
+
+@example
+scripts/auxiliar/doc-section.sh notation pitches
+@end example
+
+This script will not work for building sections of the
+Contributors' guide. For building sections of the Contributors'
+Guide, use:
+
+@example
+scripts/auxiliar/cg-section.sh SECTION
+@end example
+
+@noindent
+where @code{SECTION} is the name of the file containing the sections
+to be built. For example, to build section 4 of the Contributors' guide,
+use:
+
+@example
+scripts/auxiliar/cg-section.sh doc-work
+@end example
+
+Like @code{doc-section.sh}, @code{cg-section.sh} may need to be customized
+for your installation.
+
@subheading Stripping whitespace
@c TODO: should this be documented elsewhere? It's useful for
The mailing list @code{translations@@lilynet.net} is dedicated to
LilyPond web site and documentation translation; on this list, you will
-get support from the Translations Meister and experimented translators,
+get support from the Translations Meister and experienced translators,
and we regularly discuss translation issues common to all languages.
All people interested in LilyPond translations are invited to subscribe
to this list regardless of the amount of their contribution, by sending
@code{subscribe} and an empty message body. Unless mentioned explicitly,
or except if a translations coordinator contacts you privately, you
should send questions, remarks and patches to the list
-@code{translations@@lilynet.net}. Please note that traffic is high
+@code{translations@@lilynet.net}. Please note that traffic is high
on the English-speaking list @code{lilypond-user@@gnu.org}, so it may
take some time before your request or contribution is handled.
@@@var{section_commmand} @@translationof} trio mentioned above) in the
expected source file and define all its parent nodes; for each node you
have defined this way but have not translated, insert a line that
-contains @code{@@untranslated}. That is, you should end up
+contains @code{@@untranslated}. That is, you should end up
for each untranslated node with something like
@example
comments i.e. lines starting with @q{@code{@@c}}.
Finally, press in Emacs @key{C-c C-u C-a} to update or generate
-menus. This process should be made easier in the future, when the helper
+menus. This process should be made easier in the future, when the helper
script @command{texi-langutils.py} and the makefile target are updated.
Some pieces of text manipulated by build scripts that appear in the
Any email sent with your gmail address in the @code{To:} or
@code{CC:} fields should go to a @code{bug-answers} folder.
+When setting up your filtering rules, be aware that Google Code
+might use different versions of your email address, such as ones
+ending in @code{@@googlemail.com} or @code{@@gmail.com}.
+
@item
Any other email either from, or CC'd to,
@subsubheading Daily schedule
+The Bug Meister is omitted from the daily schedule.
+
@example
Sunday: Valentin
Monday: Dmytro
Tuesday: James Bailey
Wednesday: Ralph
-Thursday: Phil Holmes
-Friday: Urs Liska, Patrick
+Thursday: Patrick
+Friday: Urs
Saturday: Kieren
@end example
@item
Checking all issues: we try to mark each Issue @q{fixed} when we
fix it, but occasionally one or two issues will slip through the
-cracks. It is therefore good to check all Issues. If you see the
+cracks. It is therefore good to check all Issues. If you see the
same (broken) output as the initial report, then simply post a
@qq{Problem still exists in 2.x.y} message to the issue.
* Approving snippets::
* LSR to Git::
* Fixing snippets in LilyPond sources::
+* Renaming a snippet::
* Updating LSR to a new version::
@end menu
@example
\version "2.x.y"
\header @{
- lsrtags = "rhythms,expressive-marks" % use existing LSR tags other than
-% 'docs'; see makelsr.py for the list of tags used to sort snippets.
- texidoc = "This code demonstrates ..." % this will be formated by Texinfo
- doctitle = "Snippet title" % please put this at the end so that
- the '% begin verbatim' mark is added correctly by makelsr.py.
+% Use existing LSR tags other than 'docs'; see makelsr.py for
+% the list of tags used to sort snippets. E.g.:
+ lsrtags = "rhythms,expressive-marks"
+% This texidoc string will be formatted by Texinfo
+ texidoc = "
+This code demonstrates ...
+"
+% Please put doctitle last so that the '% begin verbatim'
+% mark will be added correctly by makelsr.py.
+ doctitle = "Snippet title"
@}
@end example
@end enumerate
+@node Renaming a snippet
+@section Renaming a snippet
+
+Due to the potential duality of snippets (i.e. they may exist both
+in the LSR database, and in @code{Documentation/snippets/new/}),
+this process is a bit more involved than we might like.
+
+@enumerate
+@item
+Send an email LSR editor, requesting the renaming.
+
+@item
+The LSR editor does the renaming (or debates the topic with you),
+then warns the LSR-to-git person (wanted: better title) about the
+renaming.
+
+@item
+LSR-to-git person does his normal job, but then also renames any
+copies of the snippets in @code{Documentation/snippets/new/}, and
+any instances of the snippet name in the documentation.
+
+@code{git grep} is highly recommended for this task.
+
+@end enumerate
+
@node Updating LSR to a new version
@section Updating LSR to a new version
begins.
Each type of music event has an associated iterator. Iterators are defined in
-*-iterator.cc. During iteration, an
+*-iterator.cc. During iteration, an
event's iterator is called to deliver that music event to the appropriate
context(s).
When making changes or fixing bugs in LilyPond, one of the initial
challenges is finding out where in the code tree the functions to
be modified live. With nearly 3000 files in the source tree,
-trial-and-error searching is generally ineffective. This section
+trial-and-error searching is generally ineffective. This section
describes a process for finding interesting code.
@subsection Using the ROADMAP
@node Indentation
@subsection Indentation
-Standard GNU coding style is used. In emacs:
+Standard GNU coding style is used. In emacs:
@verbatim
(add-hook 'c++-mode-hook
guide helping programmers writing consistent messages for all GNU
programs.
-Non-preferred messages are marked with `+'. By convention,
+Non-preferred messages are marked with `+'. By convention,
ungrammatical examples are marked with `*'. However, such ungrammatical
examples may still be preferred.
@item
Every message to the user should be localized (and thus be marked
-for localization). This includes warning and error messages.
+for localization). This includes warning and error messages.
@item
Do not localize/gettextify:
error (_f ("cannot open file: `%s'", file_name));
@end example
-In some rare cases you may need to call `gettext ()' by hand. This
+In some rare cases you may need to call `gettext ()' by hand. This
happens when you pre-define (a list of) string constants for later
-use. In that case, you'll probably also need to mark these string
-constants for translation, using `_i (STRING)'. The `_i' macro is
+use. In that case, you'll probably also need to mark these string
+constants for translation, using `_i (STRING)'. The `_i' macro is
a no-op, it only serves as a marker for `xgettext'.
@example
See also `flower/getopt-long.cc' and `lily/main.cc'.
@item
-Do not use leading or trailing whitespace in messages. If you need
+Do not use leading or trailing whitespace in messages. If you need
whitespace to be printed, prepend or append it to the translated
message
@end example
Messages containing a final verb, or a gerund (`-ing'-form) always
-start with a capital. Other (simpler) messages start with a
+start with a capital. Other (simpler) messages start with a
lowercase letter
@example
rather than `can't' or `don't'
To avoid having a number of different messages for the same
situation, well will use quoting like this `"message: `%s'"' for all
-strings. Numbers are not quoted:
+strings. Numbers are not quoted:
@example
_f ("cannot open file: `%s'", name_str)
@end example
@item
-Think about translation issues. In a lot of cases, it is better to
-translate a whole message. English grammar must not be imposed on the
-translator. So, instead of
+Think about translation issues. In a lot of cases, it is better to
+translate a whole message. English grammar must not be imposed on the
+translator. So, instead of
@example
stem at + moment.str () + does not fit in beam
@end example
@item
-Split up multi-sentence messages, whenever possible. Instead of
+Split up multi-sentence messages, whenever possible. Instead of
@example
warning (_f ("out of tune! Can't find: `%s'", "Key_engraver"));
@item
If you must have multiple-sentence messages, use full punctuation.
-Use two spaces after end of sentence punctuation. No punctuation
+Use two spaces after end of sentence punctuation. No punctuation
(esp. period) is used at the end of simple messages.
@example
@item
Do not modularize too much; words frequently cannot be translated
-without context. It is probably safe to treat most occurrences of
+without context. It is probably safe to treat most occurrences of
words like stem, beam, crescendo as separately translatable words.
@item
When translating, it is preferable to put interesting information
at the end of the message, rather than embedded in the middle.
This especially applies to frequently used messages, even if this
-would mean sacrificing a bit of eloquency. This holds for original
+would mean sacrificing a bit of eloquency. This holds for original
messages too, of course.
@example
The first nl message, although grammatically and stylistically
correct, is not friendly for parsing by humans (even if they speak
-dutch). I guess we would prefer something like (2) or (3).
+dutch). I guess we would prefer something like (2) or (3).
@item
Do not run make po/po-update with GNU gettext < 0.10.35
@section Tracing object relationships
Understanding the LilyPond source often boils down to figuring out what
-is happening to the Grobs. Where (and why) are they being created,
+is happening to the Grobs. Where (and why) are they being created,
modified and destroyed? Tracing Lily through a debugger in order to
identify these relationships can be time-consuming and tedious.
Joe Neeman answered:
We create lots of extra grobs (eg. a BarNumber at every bar line) but
-most of them are not drawn. See the break-visibility property in
+most of them are not drawn. See the break-visibility property in
item-interface.
@subheading Figuring out how things work.
I must admit that when I want to know how a program works, I use grep
-and emacs and dive into the source code. The comments and the code
+and emacs and dive into the source code. The comments and the code
itself are usually more revealing than technical documents.
@subheading What's a grob, and how is one used?
There are two other derived classes System (derived from Spanner,
containing a "line of music") and Paper_column (derived from Item, it
-contains all items that happen at the same moment). They are separate
+contains all items that happen at the same moment). They are separate
classes because they play a special role in the linebreaking process.
@subheading What's a smob, and how is one used?
Engravers
Executive branch of Contexts, plugins that create grobs, usually one
-engraver per grob type. Created together with context.
+engraver per grob type. Created together with context.
@item
Layout Objects
@item
Grob Interfaces
-These are not C++ classes per se. The idea of a Grob interface hasn't
-crystallized well. ATM, an interface is a symbol, with a bunch of grob
-properties. They are not objects that are created or destroyed.
+These are not C++ classes per se. The idea of a Grob interface hasn't
+crystallized well. ATM, an interface is a symbol, with a bunch of grob
+properties. They are not objects that are created or destroyed.
@item
Iterators
@subheading Can you get to Context properties from a Music object?
You can create music object with a Scheme function that reads context
-properties (the \applycontext syntax). However, that function is
+properties (the \applycontext syntax). However, that function is
executed during Interpreting, so you can not really get Context
properties from Music objects, since music objects are not directly
-connected to Contexts. That connection is made by the Music_iterators
+connected to Contexts. That connection is made by the Music_iterators
@subheading Can you get to Music properties from a Context object?
Yes, if you are given the music object within a Context
-object. Normally, the music objects enter Contexts in synchronized
+object. Normally, the music objects enter Contexts in synchronized
fashion, and the synchronization is done by Music_iterators.
@subheading What is the relationship between C++ classes and Scheme objects?
-Smobs are C++ objects in Scheme. Scheme objects (lists, functions) are
+Smobs are C++ objects in Scheme. Scheme objects (lists, functions) are
manipulated from C++ as well using the GUILE C function interface
(prefix: scm_)
Good question. Things used to be clear-cut, but we have Scheme
and SMOBs now, which means that interactions do not follow a very
-rigid format anymore. See below for an overview, though.
+rigid format anymore. See below for an overview, though.
@subheading Does the parser make Scheme procedure calls or C++ function calls?
-Both. And the Scheme calls can call C++ and vice versa. It's nested,
+Both. And the Scheme calls can call C++ and vice versa. It's nested,
with the SCM datatype as lubrication between the interactions
(I think the word "lubrication" describes the process better than the
@subheading How do the front-end and back-end get started?
-Front-end: a file is parsed, the rest follows from that. Specifically,
+Front-end: a file is parsed, the rest follows from that. Specifically,
Parsing leads to a Music + Music_output_def object (see parser.yy,
definition of toplevel_expression )
ly_run_translator ())
During interpreting, Global_context + Music leads to a bunch of
-Contexts. (see Global_translator::run_iterator_on_me () )
+Contexts (see Global_translator::run_iterator_on_me ()).
After interpreting, Global_context contains a Score_context (which
-contains staves, lyrics etc.) as a child. Score_context::get_output ()
+contains staves, lyrics etc.) as a child. Score_context::get_output ()
spews a Music_output object (either a Paper_score object for notation
or Performance object for MIDI).
-The Music_output object is the entry point for the backend. (see
-ly_render_output () )
+The Music_output object is the entry point for the backend (see
+ly_render_output ()).
The main steps of the backend itself are in
@end itemize
Interactions between grobs and putting things into .tex and .ps files
-have gotten a little more complex lately. Jan has implemented
+have gotten a little more complex lately. Jan has implemented
page-breaking, so now the backend also involves Paper_book,
-Paper_lines and other things. This area is still heavily in flux, and
+Paper_lines and other things. This area is still heavily in flux, and
perhaps not something you should want to look at.
@subheading How do the front-end and back-end communicate?
-There is no communication from backend to front-end. From front-end to
+There is no communication from backend to front-end. From front-end to
backend is simply the program flow: music + definitions gives
contexts, contexts yield output, after processing, output is written
to disk.
Engravers and Contexts
Music_iterators can send "synthetic" music events (which aren't in
-the input) to a context. These are caught by Engravers. This is
+the input) to a context. These are caught by Engravers. This is
mostly a one way communication channel.
part-combine-status is part of such a synthetic event, used by
a Music property?
\autochange is one of these extra strange beasts: it requires
-look-ahead to decide when to change staves. This is achieved by
+look-ahead to decide when to change staves. This is achieved by
running the interpreting step twice (see scm/part-combiner.scm , at
the bottom), and storing the result of the first step (where to switch
staves) in a Music property. Since you want to influence that
where-to-switch list, your must affect the code in
-make-autochange-music (scm/part-combiner.scm). That code is called
+make-autochange-music (scm/part-combiner.scm). That code is called
directly from the parser and there are no official "parsing
-properties" yet, so there is no generic way to tune \autochange. We
+properties" yet, so there is no generic way to tune \autochange. We
would have to invent something new for this, or add a separate
argument,
first place. I only know a little bit about Flex and Bison, so reading those
files helped only a little bit.
-@emph{Han-Wen:} GDB can be of help here. Set a breakpoint in C++, and run. When you
-hit the breakpoint, do a backtrace. You can inspect Scheme objects
+@emph{Han-Wen:} GDB can be of help here. Set a breakpoint in C++, and run. When you
+hit the breakpoint, do a backtrace. You can inspect Scheme objects
along the way by doing
@example
@uref{http://lilypond.org/test/}
@end example
-The test comparison shows all of the changes that occurred between
-the current release and the prior release. Each test that has
-a significant difference in output is displayed, with the old
-version on the left and the new version on the right. Blurs
-in the regression tests for the new version show the approximate
-location of elements in the old version.
-
-Regression tests whose output is the same for both versions are not
-shown in the test comparison.
-
Checking these pages is a very important task for the LilyPond project.
You are invited to report anything that looks broken, or any case
where the output quality is not on par with the previous release,
as described in @rweb{Bug reports}.
+@warning{ The special regression test
+@file{test@/-output@/-distance@/.ly} will always show up as a
+regression. This test changes each time it is run, and serves to
+verify that the regression tests have, in fact, run.}
+
+
+@subheading What to look for
+
+The test comparison shows all of the changes that occurred between
+the current release and the prior release. Each test that has a
+significant difference in output is displayed, with the old
+version on the left and the new version on the right.
+
+Regression tests whose output is the same for both versions are
+not shown in the test comparison.
+
+@itemize
+@item
+Images: green blurs in the new version show the approximate
+location of elements in the old version.
+
+There are often minor adjustments in spacing which do not indicate
+any problem.
+
+@item
+Log files: show the difference in command-line output.
+
+The main thing to examine are any changes in page counts -- if a
+file used to fit on 1 page but now requires 4 or 5 pages,
+something is suspicious!
+
+@item
+Profile files: give information about
+TODO? I don't know what they're for.
+
+@end itemize
+
@warning{
-The automatic comparison of the regtests checks the
-LilyPond bounding boxes and the log files. This means that
-Ghostscript changes and changes in
-lyrics or text are not found. However, errors and warnings that
-are printed to the log file but
-do not change the graphical layout are also identified.
+The automatic comparison of the regtests checks the LilyPond
+bounding boxes. This means that Ghostscript changes and changes
+in lyrics or text are not found.
}
@node Compiling regression tests
@node Development phases
@section Development phases
-There are 2.5 states of development for LilyPond.
+There are 2 states of development on @code{master}:
-@itemize
+@enumerate
+
+@item @strong{Normal development}:
+Any commits are fine.
-@item @strong{Stable phase}:
-Starting from the release of a new major version @code{2.x.0}, the
-following patches @strong{MAY NOT} be merged with master:
+@item @strong{Build-frozen}:
+Do not require any additional or updated libraries or make
+non-trivial changes to the build process. Any such patch (or
+branch) may not be merged with master during this period.
+
+This should occur approximately 1 month before any alpha version
+of the next stable release, and ends when the next unstable branch
+begins.
+
+@end enumerate
+
+
+After announcing a beta release, branch @code{stable/2.x}. There
+are 2 states of development for this branch:
+
+@enumerate
+@item @strong{Normal maintenance}:
+The following patches @strong{MAY NOT} be merged with this branch:
@itemize
@item Any change to the input syntax. If a file compiled with a
-previous @code{2.x} version, then it must compile in the new
-version.
+previous @code{2.x} (beta) version, then it must compile in the
+new version.
+
+Exception: any bugfix to a Critical issue.
@item New features with new syntax @emph{may be committed},
although once committed that syntax cannot change during the
@end itemize
-@item @strong{Development phase}:
-Any commits are fine. Readers may be familiar with the term
-@qq{merge window} from following Linux kernel news.
-
-
-@item @strong{Release prep phase}:
-TODO: I don't like that name.
-
-A new git branch @code{stable/2.x} is created, and a major release
-is made in two weeks.
-
-@itemize
-
-@item @code{stable/2.x branch}:
-Only translation updates and important bugfixes are allows.
-
-@item @code{master}:
-Normal @qq{stable phase} development occurs.
-
-@end itemize
-
-If we discover the need to change the syntax or build system, we
-will apply it and re-start the release prep phase.
-
-@end itemize
-
-This marks a radical change from previous practice in LilyPond.
-However, this setup is not intended to slow development -- as a
-rule of thumb, the next development phase will start within a
-month of somebody wanting to commit something which is not
-permitted during the stable phase.
+@item @strong{Release prep}:
+Only translation updates and important bugfixes are allowed.
+@end enumerate
@node Minor release checklist
git push origin
@end example
-@item (optional) Check that lilypond builds from scratch in an
-out-of-tree build.
-
@item
If you do not have the previous release test-output tarball, download
it and put it in @code{regtests/}
@item Check the regtest comparison in @file{uploads/@/webtest/} for
any unintentional breakage. More info in
-@ref{Precompiled regression tests}
+@ref{Precompiled regression tests}.
@item If any work was done on GUB since the last release, upload
binaries to a temporary location, ask for feedback, and wait a day
-or two in case there's any major problems. Or live dangerously
-and just add a sentence to the release notes. Or live even more
-dangerously, and don't tell anybody anything.
+or two in case there's any major problems.
+
+@warning{Always do this for a stable release.}
@end enumerate
@enumerate
-@item If you're not right user on the webserver, remove the "t"
-from the rsync command in @file{test@/-lily/@/rsync@/-lily@/-doc@/.py} and
-@file{test@/-lily/@/rsync@/-test@/.py}
+@item If you're not the right user on the webserver, remove the
+@code{t} from the rsync command in:
+
+@example
+test-lily/rsync-lily-doc.py
+test-lily/rsync-test.py
+@end example
@code{graham} owns v2.13; @code{han-wen} owns v2.12.
@item Upload GUB by running:
@example
-make lilypond-upload LILYPOND_BRANCH=release/unstable LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
+make lilypond-upload \
+ LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
+ LILYPOND_BRANCH=release/unstable
@end example
@noindent
or something like:
@example
-make lilypond-upload LILYPOND_BRANCH=stable/2.12 LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
+make lilypond-upload \
+ LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git \
+ LILYPOND_BRANCH=stable/2.12
@end example
@end enumerate
A @qq{major release} means an update of @code{x} in @code{2.x.0}.
-- happens when we have 0 Critical issues for two weeks (14 days).
+@subheading Main requirements
+This is the current official guidelines.
-Before release:
+@itemize
+@item
+0 Critical issues for two weeks (14 days) after the latest release
+candidate.
-* write release notes. note: stringent size requirements for
- various websites, so be brief.
+@end itemize
-* write preface section for manual.
-* submit pots for translation : send url of tarball to
-translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot
+@subheading Potential requirements
+
+These might become official guidelines in the future.
+
+@itemize
+@item
+Check reg test
+
+@item
+Check all 2ly scripts
+
+@item
+Check for emergencies the docs:
-* Check reg test
+@example
+grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
+ --exclude "snippets/*" ????*/*
+@end example
-* Check all 2ly scripts.
+@item
+Check for altered regtests, and document as necessary. (update
+numbers in the following command as appropriate)
-* Run convert-ly on all files, bump parser minimum version.
+@example
+git diff -u -r release/2.12.0-1 -r release/2.13.13-1 input/regression/
+@end example
-* update links to distros providing lilypond packages? link in
-Documentation/web/download.itexi . This has nothing to do with
-the release, but I'm dumping this here so I'll find it when I
-reorganize this list later. -gp
+@end itemize
-* Make FTP directories on lilypond.org
-* website:
- - Make new table in download.html
+@subheading Housekeeping requirements
- - add to documentation list
+Before the release:
+
+@itemize
+@item
+write release notes. note: stringent size requirements for
+various websites, so be brief.
- - revise examples tour.html/howto.html
+@item
+Run convert-ly on all files, bump parser minimum version.
- - add to front-page quick links
+@item
+Make FTP directories on lilypond.org
- - change all links to the stable documentation
+@item
+Website:
- - make a link from the old unstable to the next stable in
- lilypond.org's /doc/ dir. Keep all previous unstable->stable
- doc symlinks.
+@itemize
+@item
+make a link from the old unstable to the next stable in
+lilypond.org's /doc/ dir. Keep all previous unstable->stable doc
+symlinks.
- - doc auto redirects to v2.LATEST-STABLE
+@item
+doc auto redirects to v2.LATEST-STABLE
- - add these two lines to http://www.lilypond.org/robots.txt:
+@item
+add these two lines to http://www.lilypond.org/robots.txt:
@example
Disallow: /doc/v2.PREVIOUS-STABLE/
Disallow: /doc/v2.CURRENT-DEVELOPMENT/
@end example
-- check for emergencies the docs:
+@end itemize
-@example
-grep FIXME --exclude "misc/*" --exclude "*GNUmakefile" \
- --exclude "snippets/*" ????*/*
-@end example
+@end itemize
-- check for altered regtests, and document as necessary. (update
- tags as appropriate)
+@subheading Unsorted
-@example
-git diff -u -r release/2.12.0-1 -r release/2.13.13-1 input/regression/
-@end example
+@itemize
+@item
+submit pots for translation: send url of tarball to
+translation@@iro.umontreal.ca, mentioning lilypond-VERSION.pot
+
+@item
+update links to distros providing lilypond packages? link in:
+@file{Documentation@/web@/download.itexi}
+This has nothing to do with the release, but it's a "periodic
+maintenance" task that might make sense to include with releases.
+
+@item
+Send announcements to...
News:
- comp.music.research
- comp.os.linux.announce
+@example
+comp.music.research
+comp.os.linux.announce
- comp.text.tex
- rec.music.compose
+comp.text.tex
+rec.music.compose
+@end example
Mail:
- info-lilypond@@gnu.org
+@example
+info-lilypond@@gnu.org
linux-audio-announce@@lists.linuxaudio.org
linux-audio-user@@lists.linuxaudio.org
linux-audio-dev@@lists.linuxaudio.org
- tex-music@@icking-music-archive.org
+tex-music@@icking-music-archive.org
- --- non-existant?
- abcusers@@blackmill.net
+--- non-existant?
+abcusers@@blackmill.net
- rosegarden-user@@lists.sourceforge.net
- info-gnu@@gnu.org
- noteedit-user@@berlios.de
+rosegarden-user@@lists.sourceforge.net
+info-gnu@@gnu.org
+noteedit-user@@berlios.de
- gmane.comp.audio.fomus.devel
- gmane.linux.audio.users
- gmane.linux.audio.announce
- gmane.comp.audio.rosegarden.devel
+gmane.comp.audio.fomus.devel
+gmane.linux.audio.users
+gmane.linux.audio.announce
+gmane.comp.audio.rosegarden.devel
+@end example
Web:
- lilypond.org
- freshmeat.net
- linuxfr.com
- http://www.apple.com/downloads
- harmony-central.com (news@@harmony-central.com)
- versiontracker.com [auto]
- hitsquad.com [auto]
- http://www.svgx.org
- https://savannah.gnu.org/news/submit.php?group_id=1673 @c => planet.gnu.org
+@example
+lilypond.org
+freshmeat.net
+linuxfr.com
+http://www.apple.com/downloads
+harmony-central.com (news@@harmony-central.com)
+versiontracker.com [auto]
+hitsquad.com [auto]
+http://www.svgx.org
+https://savannah.gnu.org/news/submit.php?group_id=1673 @c => planet.gnu.org
+@end example
+
+@end itemize
@node Release extra notes
latest git.
@item
-- configure; make; make test
+configure; make; make test
@item
tar -cjf lilypond-X.Y.Z-A.test-output.tar.bz2 input/regression/out-test/
@example
-# Please enter the commit message for your changes. Lines starting
+# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
@subsection Git GUI
Almost all subsequent work will use the Git Graphical User
-Interface, which avoids having to type command line commands. To
+Interface, which avoids having to type command line commands. To
start Git GUI first start the Git bash shell by clicking on the
desktop icon, and type
instead, the source is Texinfo, which is then generated into HTML,
PDF, and Info formats. The sources are
-@verbatim
+@example
Documentation/web.texi
Documentation/web/*.texi
-@end verbatim
+@end example
Unless otherwise specified, follow the instructions and policies
given in @ref{Documentation work}. That chapter also contains a
@item
For anything not listed here, just follow the same style as the
-existing texinfo files.
+existing website texinfo files.
@end itemize
chmod 775 ~graham/lilypond/ -R
@end example
+To reduce the CPU burden on the shared host (as well as some
+security concerns), the @file{Documentation/@/pictures/} and
+@file{Documentation/@/web/@/ly-examples/} directories are
+@strong{not} compiled. You need to upload them, and if they ever
+change, a user in the @code{lilypond} group must upload them to
+@file{~graham/@/media} on the host.
+
+Upload latest pictures/ and ly-examples/ (local script):
+
+@warning{You may need to change a number of items in the below
+script.}
+
+@verbatim
+### upload-lily-web-media.sh
+#!/bin/sh
+BUILD_DIR=$HOME/src/build-lilypond
+
+PICS=$BUILD_DIR/Documentation/pictures/out-www/
+EXAMPLES=$BUILD_DIR/Documentation/web/ly-examples/out-www/
+
+cd $BUILD_DIR
+rsync -a $PICS graham@lilypond.org:media/pictures
+rsync -a $EXAMPLES graham@lilypond.org:ly-examples
+@end verbatim
+
+
@subheading Normal maintenance
diff -u $DEST/create-weblinks-itexi.py $GIT/scripts/build/create-weblinks-itexi.py
diff -u $DEST/mass-link.py $GIT/scripts/build/mass-link.py
diff -u $DEST/website_post.py $GIT/scripts/build/website_post.py
+diff -u $DEST/bib2texi.py $GIT/scripts/build/bib2texi.py
diff -u $DEST/lilypond.org.htaccess $GIT/Documentation/web/server/lilypond.org.htaccess
diff -u $DEST/website-dir.htaccess $GIT/Documentation/web/server/website-dir.htaccess
@end verbatim
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 verbatim
@end verbatim
-To reduce the CPU burden on the shared host (as well as some
-security concerns), the @file{Documentation/@/pictures/} and
-@file{Documentation/@/web/@/ly-examples/} directories are @strong{not}
-compiled. If you modify any files in those directories, a user in
-the @code{lilypond} group must upload them to @file{~graham/@/media}
-on the host.
-
-Upload latest pictures/ and ly-examples/ (local script):
-
-@verbatim
-### upload-lily-web-media.sh
-#!/bin/sh
-BUILD_DIR=$HOME/src/build-lilypond
-
-PICS=$BUILD_DIR/Documentation/pictures/out-www/
-EXAMPLES=$BUILD_DIR/Documentation/web/ly-examples/out-www/
-
-cd $BUILD_DIR
-rsync -a $PICS graham@lilypond.org:media/pictures
-rsync -a $EXAMPLES graham@lilypond.org:ly-examples
-@end verbatim
-
-
@subsubheading Additional information
Some information about the website is stored in
line-height: 0.8;
}
+.example {
+ position: relative;
+ left: -2.5em;
+}
+
+.h-scroll-auto {
+ position: relative;
+ left: 1em;
+ width: 250px;
+ overflow: auto;
+}
+
.warning {
background: #eef;
text-align: left;
font-size: 0.6em;
}
+.link-headings a {
+ font-weight: bold;
+}
+
.detail {
font-size: 0.8em;
}
+.detail a {
+ font-weight: normal;
+}
/* kill title, probably best done in the init file, though */
h1.settitle {
-%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocde = "
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren
Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen,
-%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
volume={17},
pages ={292-309},
- note = {Gourlay\cite{gourlay86} writes: A discussion of Smith's
+ note = {Gourlay [gourlay86] writes: A discussion of Smith's
music-printing system SCORE}
}
volume = 9,
number = 6,
pages = {291--298},
- note = {Gourlay\cite{gourlay86} writes: A discussion of the design
+ note = {Gourlay [gourlay86] writes: A discussion of the design
and potential uses of the DARMS music-description language.}
}
year = {1977},
pages = {63-80},
- note = {Gourlay \cite{gourlay86} writes: "A discussion of the
+ note = {Gourlay [gourlay86] writes: "A discussion of the
problems of representing the conventions of musical notation in
computer algorithms."}
}
number = {OSU-CISRC-10/87-TR34},
institution={Department of Computer and Information Science, The Ohio State University},
- note = {Describes the "parser" which converts {MusiCopy} MDL to
+ note = {Describes the "parser" which converts MusiCopy MDL to
MusiCopy Simultaneities and columns.
-MDL is short for Music Description Language\cite{gourlay86}. It
+MDL is short for Music Description Language [gourlay86]. It
accepts music descriptions that are organised into measures filled
with voices, which are filled with notes. The measures can be arranged
simultaneously or sequentially. To address the 2-dimensionality,
@Article {gourlay86,
- note = {This paper describes the {MusiCopy} musicsetting system and an input language to go with it.},
+ note = {This paper describes the MusiCopy musicsetting system and an input language to go with it.},
year = {1986},
title = {A language for music printing},
the author tries to extract dimensions for characters, whereas the
rules of typesetting (in a particular font) follow from the dimensions
of the symbols. His symbols do not match (the stringent) constraints
-formulated by eg. \cite{wanske}} }
+formulated by eg. [wanske]} }
@TechReport{grover89-twovoices,
author = {John Gr\/over},
descriptions are long and verbose. The verbosity shows that
formulating specific rules is not the proper way to approach the
problem. Instead, the formulated rules should follow from more
-general rules, similar to\cite{parrish87-simultaneities}},
+general rules, similar to [parrish87-simultaneities]},
}
@TechReport{grover89-accidentals,
number = 135,
note = {Placement of accidentals crystallised in an enormous set of
-rules. Same remarks as for \cite{grover89-twovoices} applies} }
+rules. Same remarks as for [grover89-twovoices] applies} }
@PhdThesis{mueller90:_inter_bearb_musik,
while the newer edition seems cold and mechanical.
It is hard to immediately see what makes the difference with the newer
-edition. Everything looks neat and tiny, possibly even @qq{better}
-because it looks more computerized and uniform. This really puzzled us
-for quite a while. We wanted to improve computer notation, but we first
+edition. Everything looks neat and tiny, possibly even @qq{better}
+because it looks more computerized and uniform. This really puzzled us
+for quite a while. We wanted to improve computer notation, but we first
had to figure out what was wrong with it.
The answer lies in the precise, mathematical uniformity of the newer
There are other differences as well: in the hand-engraved edition the
vertical lines are all stronger, the slurs lie closer to the note heads,
-and there is more variety in the slopes of the beams. Although such
+and there is more variety in the slopes of the beams. Although such
details may seem like nitpicking, the result is a score that is easier
-to read. In the computer-generated output, each line is nearly identical
+to read. In the computer-generated output, each line is nearly identical
and if the musician looks away for a moment she will be lost on the
page.
The spacing algorithms in LilyPond even take the barlines into account,
which is why the final up-stem in the properly spaced example has been
given a little more space before the barline to keep it from looking
-crowded. A down-stem would not need this adjustment.
+crowded. A down-stem would not need this adjustment.
@node Ledger lines
@unnumberedsubsec Ledger lines
choose the least ugly configuration.
For example, here are three possible slur configurations, and LilyPond
-has given each one a score in @q{ugly points}. The first example gets
+has given each one a score in @q{ugly points}. The first example gets
15.39 points for grazing one of the noteheads:
@lilypond
the subject returns in a three-part stretto and leads into the closing
section. In the Finale version, we have resisted the temptation to make
any adjustments to the default output because we are trying to show the
-things that each software package gets right without assistance. The
+things that each software package gets right without assistance. The
only major edits that we made were adjusting the page size to match this
essay and forcing the music onto two systems to make the comparison
-easier. By default Finale would have engraved two systems of three
+easier. By default Finale would have engraved two systems of three
measures each and a final, full-width system containing a single
measure.
@end itemize
This example is not intended to suggest that Finale cannot be used to
-produce publication-quality output. On the contrary, in the hands of a
-skilled user it can and does, but it requires skill and time. One of the
+produce publication-quality output. On the contrary, in the hands of a
+skilled user it can and does, but it requires skill and time. One of the
fundamental differences between LilyPond and commercial scorewriters is
that LilyPond hopes to reduce the amount of human intervention to an
absolute minimum, while other packages try to provide an attractive
If you are interested in examining these examples in more detail, the
full seven-measure excerpt can be found at the end of this essay along
-with four different published engravings. Close examination reveals that
+with four different published engravings. Close examination reveals that
there is some acceptable variation among the hand-engravings, but that
-LilyPond compares reasonably well to that acceptable range. There are
+LilyPond compares reasonably well to that acceptable range. There are
still some shortcomings in the LilyPond output, for example, it appears
a bit too aggressive in shortening some of the stems, so there is room
for further development and fine-tuning.
the source code.
When designing the structures used in LilyPond, we made some different
-decisions than are apparent in other software. Consider the hierarchical
+decisions than are apparent in other software. Consider the hierarchical
nature of music notation:
@lilypond[quote,fragment]
isbn ={0793508479},
note={HWN writes: `Book' edition of lecture notes from XXX school of
music. The book looks like it is xeroxed from bad printouts. The
-content has nothing you won't find in other books like\cite{read} or
-\cite{heussenstamm}. }
+content has nothing you won't find in other books like [read] or
+[heussenstamm]. }
}
@Book{ross,
year = 1923,
note = {This patriotic book was an attempt to promote and help
British music engravers. It is somewhat similar to Hader's
- book\cite{hader48} in scope and style, but Gamble focuses more on
+ book [hader48] in scope and style, but Gamble focuses more on
technical details (Which French punch cutters are worth buying from,
etc.), and does not treat typographical details, such as optical
illusions. It is available as reprint from Da Capo Press, New York
author = {Glen Rosecrans},
publisher={Passantino},
address={New York},
- note={Heussenstamm writes: Limited in scope, similar to \cite{Roemer84}}
+ note={Heussenstamm writes: Limited in scope, similar to [Roemer84]}
}
@Book {donemus1982,
+++ /dev/null
-% BibTeX bibliography style `html-long'
-% spits out HTML-formatted bibliography in place of bbl output
-% by David Kotz dfk@cs.dartmouth.edu
-% $Id: html-long.bst,v 1.4 2005/07/21 21:29:50 hjunes Exp $
-% modified from
-% BibTeX standard bibliography style `alpha'
- % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
- % Copyright (C) 1985, all rights reserved.
- % Copying of this file is authorized only if either
- % (1) you make absolutely no changes to your copy, including name, or
- % (2) if you do make changes, you name it something other than
- % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
- % This restriction helps ensure that all standard styles are identical.
- % The file btxbst.doc has the documentation for this style.
-
-% DFK added abstract, comment, earlier, keyword, later, URL
-ENTRY
- { abstract
- address
- author
- booktitle
- chapter
- comment
- earlier
- edition
- editor
- howpublished
- institution
- journal
- key
- keyword
- later
- month
- note
- number
- organization
- pages
- private
- publisher
- school
- series
- title
- type
- URL
- volume
- year
- }
- {}
- { label extra.label sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
- #1 'mid.sentence :=
- #2 'after.sentence :=
- #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
- output.state mid.sentence =
- { ", " * write$ }
- { output.state after.block =
- { add.period$ write$
- newline$
- }
- { output.state before.all =
- 'write$
- { add.period$ " " * write$ }
- if$
- }
- if$
- mid.sentence 'output.state :=
- }
- if$
- s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
- 'pop$
- 'output.nonnull
- if$
-}
-
-FUNCTION {output.check}
-{ 't :=
- duplicate$ empty$
- { pop$ "empty " t * " in " * cite$ * warning$ }
- 'output.nonnull
- if$
-}
-
-% DFK changed to use cite$ for the label
-% DFK changed to HTML, and use URL to make cite key a link
-FUNCTION {output.bibitem}
-{ newline$
- URL empty$
- { "<DT> <A NAME=" quote$ * cite$ * quote$ *
- "> " * cite$ * ":</A> </DT>" * write$
- }
- { "<DT><A NAME=" quote$ * cite$ * quote$ * " HREF=" * quote$ *
- URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
- }
- if$
- newline$
- "<DD>" write$ newline$
- ""
- before.all 'output.state :=
-}
-
-% DFK changed to HTML
-FUNCTION {fin.entry}
-{ add.period$
- write$
- newline$
- earlier empty$
- 'skip$
- { "<br>" write$ newline$
- "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
- ">" * earlier * "</A>." * write$ newline$
- }
- if$
- later empty$
- 'skip$
- { "<br>" write$ newline$
- "See also later version <A HREF=" quote$ * "#" * later * quote$ *
- ">" * later * "</A>." * write$ newline$
- }
- if$
- "</DD>" write$ newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
- 'skip$
- { after.block 'output.state := }
- if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
- 'skip$
- { output.state before.all =
- 'skip$
- { after.sentence 'output.state := }
- if$
- }
- if$
-}
-
-FUNCTION {not}
-{ { #0 }
- { #1 }
- if$
-}
-
-FUNCTION {and}
-{ 'skip$
- { pop$ #0 }
- if$
-}
-
-FUNCTION {or}
-{ { pop$ #1 }
- 'skip$
- if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
- 'skip$
- 'new.block
- if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
- swap$ empty$
- and
- 'skip$
- 'new.block
- if$
-}
-
-FUNCTION {new.sentence.checka}
-{ empty$
- 'skip$
- 'new.sentence
- if$
-}
-
-FUNCTION {new.sentence.checkb}
-{ empty$
- swap$ empty$
- and
- 'skip$
- 'new.sentence
- if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
- { pop$ "" }
- 'skip$
- if$
-}
-
-% DFK changed to HTML
-FUNCTION {emphasize}
-{ duplicate$ empty$
- { pop$ "" }
- { "<EM>" swap$ * "</EM>" * }
- if$
-}
-
-% DFK added for HTML strong emphasis
-FUNCTION {strong}
-{ duplicate$ empty$
- { pop$ "" }
- { "<STRONG>" swap$ * "</STRONG>" * }
- if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-% DFK added this, to strip {} and ~ from titles and authors
-% It's not a great idea, because it will screw up in math mode and some
-% special characters... but it makes most things much prettier.
-FUNCTION {author.title.purify}
-{ 't :=
- ""
- { t empty$ not }
- { t #1 #1 substring$ "{" =
- t #1 #1 substring$ "}" = or
- 'skip$
- { t #1 #1 substring$ "~" =
- { " " * }
- { t #1 #1 substring$ * }
- if$
- }
- if$
- t #2 global.max$ substring$ 't :=
- }
- while$
-}
-
-FUNCTION {format.names}
-{ 's :=
- #1 'nameptr :=
- s num.names$ 'numnames :=
- numnames 'namesleft :=
- { namesleft #0 > }
- { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
- nameptr #1 >
- { namesleft #1 >
- { ", " * t * }
- { numnames #2 >
- { "," * }
- 'skip$
- if$
- t "others" =
- { " et al." * }
- { " and " * t * }
- if$
- }
- if$
- }
- 't
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
- { "" }
- { author format.names author.title.purify }
- if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
- { "" }
- { editor format.names
- editor num.names$ #1 >
- { ", editors" * }
- { ", editor" * }
- if$
- }
- if$
-}
-
-% DFK added strong, so it will be bold.
-FUNCTION {format.title}
-{ title empty$
- { "" }
- { title "t" change.case$ author.title.purify strong }
- if$
-}
-
-FUNCTION {n.dashify}
-{ 't :=
- ""
- { t empty$ not }
- { t #1 #1 substring$ "-" =
- { t #1 #2 substring$ "--" = not
- { "--" *
- t #2 global.max$ substring$ 't :=
- }
- { { t #1 #1 substring$ "-" = }
- { "-" *
- t #2 global.max$ substring$ 't :=
- }
- while$
- }
- if$
- }
- { t #1 #1 substring$ *
- t #2 global.max$ substring$ 't :=
- }
- if$
- }
- while$
-}
-
-FUNCTION {format.date}
-{ year empty$
- { month empty$
- { "" }
- { "there's a month but no year in " cite$ * warning$
- month
- }
- if$
- }
- { month empty$
- 'year
- { month " " * year * }
- if$
- }
- if$
-}
-
-% DFK changed emphasize to strong
-FUNCTION {format.btitle}
-{ title author.title.purify strong
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
- { " " }
- { " " }
- if$
- swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
- 'pop$
- { "can't use both " swap$ * " fields in " * cite$ * warning$ }
- if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
- { "" }
- { "volume" volume tie.or.space.connect
- series empty$
- 'skip$
- { " of " * series emphasize * }
- if$
- "volume and number" number either.or.check
- }
- if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
- { number empty$
- { series field.or.null }
- { output.state mid.sentence =
- { "number" }
- { "Number" }
- if$
- number tie.or.space.connect
- series empty$
- { "there's a number but no series in " cite$ * warning$ }
- { " in " * series * }
- if$
- }
- if$
- }
- { "" }
- if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
- { "" }
- { output.state mid.sentence =
- { edition "l" change.case$ " edition" * }
- { edition "t" change.case$ " edition" * }
- if$
- }
- if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
- #0 'multiresult :=
- { multiresult not
- t empty$ not
- and
- }
- { t #1 #1 substring$
- duplicate$ "-" =
- swap$ duplicate$ "," =
- swap$ "+" =
- or or
- { #1 'multiresult := }
- { t #2 global.max$ substring$ 't := }
- if$
- }
- while$
- multiresult
-}
-
-FUNCTION {format.pages}
-{ pages empty$
- { "" }
- { pages multi.page.check
- { "pages" pages n.dashify tie.or.space.connect }
- { "page" pages tie.or.space.connect }
- if$
- }
- if$
-}
-
-FUNCTION {format.vol.num.pages}
-{ volume field.or.null
- number empty$
- 'skip$
- { "(" number * ")" * *
- volume empty$
- { "there's a number but no volume in " cite$ * warning$ }
- 'skip$
- if$
- }
- if$
- pages empty$
- 'skip$
- { duplicate$ empty$
- { pop$ format.pages }
- { ":" * pages n.dashify * }
- if$
- }
- if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
- 'format.pages
- { type empty$
- { "chapter" }
- { type "l" change.case$ }
- if$
- chapter tie.or.space.connect
- pages empty$
- 'skip$
- { ", " * format.pages * }
- if$
- }
- if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
- { "" }
- { editor empty$
- { "In " booktitle emphasize * }
- { "In " format.editors * ", " * booktitle emphasize * }
- if$
- }
- if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
- month empty$ year empty$ note empty$
- and and and and and
- key empty$ not and
- { "all relevant fields are empty in " cite$ * warning$ }
- 'skip$
- if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
- 'skip$
- { pop$
- type "t" change.case$
- }
- if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
- { "Technical Report" }
- 'type
- if$
- number empty$
- { "t" change.case$ }
- { number tie.or.space.connect }
- if$
-}
-
-FUNCTION {format.article.crossref}
-{ key empty$
- { journal empty$
- { "need key or journal for " cite$ * " to crossref " * crossref *
- warning$
- ""
- }
- { "In {\em " journal * "\/}" * }
- if$
- }
- { "In " key * }
- if$
- " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
- editor num.names$ duplicate$
- #2 >
- { pop$ " et al." * }
- { #2 <
- 'skip$
- { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- { " et al." * }
- { " and " * editor #2 "{vv~}{ll}" format.name$ * }
- if$
- }
- if$
- }
- if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
- { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
- "In "
- }
- { "Volume" volume tie.or.space.connect
- " of " *
- }
- if$
- editor empty$
- editor field.or.null author field.or.null =
- or
- { key empty$
- { series empty$
- { "need editor, key, or series for " cite$ * " to crossref " *
- crossref * warning$
- "" *
- }
- { "{\em " * series * "\/}" * }
- if$
- }
- { key * }
- if$
- }
- { format.crossref.editor * }
- if$
- " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{ editor empty$
- editor field.or.null author field.or.null =
- or
- { key empty$
- { booktitle empty$
- { "need editor, key, or booktitle for " cite$ * " to crossref " *
- crossref * warning$
- ""
- }
- { "In {\em " booktitle * "\/}" * }
- if$
- }
- { "In " key * }
- if$
- }
- { "In " format.crossref.editor * }
- if$
- " \cite{" * crossref * "}" *
-}
-
-
-% DFK added
-% top of stack is the string we want to be a quoted paragraph
-FUNCTION {format.quotedParagraph}
-{ duplicate$ empty$
- { skip$ }
- { "<P><QUOTE> " swap$ * " </QUOTE></P>" *}
- if$
-}
-
-
-% DFK added, to support comment, private, keyword, etc
-% next-to-top is field name (eg, "Comment")
-% top is field value (eg, value of comment)
-% both are popped; resulting top is either empty,
-% or string describing field
-FUNCTION {format.dfkfield}
-{ duplicate$ empty$
- { pop$ pop$ "" }
- { swap$
- "<strong> " swap$ * ":</strong> " * swap$ * }
- if$
-}
-
-% DFK added
-FUNCTION {dfk.stuff}
-{ new.block
- "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
- "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
- "Comment" comment format.dfkfield format.quotedParagraph write$ newline$
-}
-
-% DFK: added a call to dfk.stuff in all entry-type functions below
-
-FUNCTION {article}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { journal emphasize "journal" output.check
- format.vol.num.pages output
- format.date "year" output.check
- }
- { format.article.crossref output.nonnull
- format.pages output
- }
- if$
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {book}
-{ output.bibitem
- author empty$
- { format.editors "author and editor" output.check }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- new.block
- format.btitle "title" output.check
- crossref missing$
- { format.bvolume output
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" output.check
- address output
- }
- { new.block
- format.book.crossref output.nonnull
- }
- if$
- format.edition output
- format.date "year" output.check
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {booklet}
-{ output.bibitem
- format.authors output
- new.block
- format.title "title" output.check
- howpublished address new.block.checkb
- howpublished output
- address output
- format.date output
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {inbook}
-{ output.bibitem
- author empty$
- { format.editors "author and editor" output.check }
- { format.authors output.nonnull
- crossref missing$
- { "author and editor" editor either.or.check }
- 'skip$
- if$
- }
- if$
- new.block
- format.btitle "title" output.check
- crossref missing$
- { format.bvolume output
- format.chapter.pages "chapter and pages" output.check
- new.block
- format.number.series output
- new.sentence
- publisher "publisher" output.check
- address output
- }
- { format.chapter.pages "chapter and pages" output.check
- new.block
- format.book.crossref output.nonnull
- }
- if$
- format.edition output
- format.date "year" output.check
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {incollection}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { format.in.ed.booktitle "booktitle" output.check
- format.bvolume output
- format.number.series output
- format.chapter.pages output
- new.sentence
- publisher "publisher" output.check
- address output
- format.edition output
- format.date "year" output.check
- }
- { format.incoll.inproc.crossref output.nonnull
- format.chapter.pages output
- }
- if$
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- crossref missing$
- { format.in.ed.booktitle "booktitle" output.check
- format.bvolume output
- format.number.series output
- format.pages output
- address empty$
- { organization publisher new.sentence.checkb
- organization output
- publisher output
- format.date "year" output.check
- }
- { address output.nonnull
- format.date "year" output.check
- new.sentence
- organization output
- publisher output
- }
- if$
- }
- { format.incoll.inproc.crossref output.nonnull
- format.pages output
- }
- if$
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
- author empty$
- { organization empty$
- 'skip$
- { organization output.nonnull
- address output
- }
- if$
- }
- { format.authors output.nonnull }
- if$
- new.block
- format.btitle "title" output.check
- author empty$
- { organization empty$
- { address new.block.checka
- address output
- }
- 'skip$
- if$
- }
- { organization address new.block.checkb
- organization output
- address output
- }
- if$
- format.edition output
- format.date output
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- "Master's thesis" format.thesis.type output.nonnull
- school "school" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {misc}
-{ output.bibitem
- format.authors output
- title howpublished new.block.checkb
- format.title output
- howpublished new.block.checka
- howpublished output
- format.date output
- new.block
- note output
- fin.entry
- dfk.stuff
- empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.btitle "title" output.check
- new.block
- "PhD thesis" format.thesis.type output.nonnull
- school "school" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
- editor empty$
- { organization output }
- { format.editors output.nonnull }
- if$
- new.block
- format.btitle "title" output.check
- format.bvolume output
- format.number.series output
- address empty$
- { editor empty$
- { publisher new.sentence.checka }
- { organization publisher new.sentence.checkb
- organization output
- }
- if$
- publisher output
- format.date "year" output.check
- }
- { address output.nonnull
- format.date "year" output.check
- new.sentence
- editor empty$
- 'skip$
- { organization output }
- if$
- publisher output
- }
- if$
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {techreport}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- format.tr.number output.nonnull
- institution "institution" output.check
- address output
- format.date "year" output.check
- new.block
- note output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
- format.authors "author" output.check
- new.block
- format.title "title" output.check
- new.block
- note "note" output.check
- format.date output
- fin.entry
- dfk.stuff
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-MACRO {acmcs} {"ACM Computing Surveys"}
-
-MACRO {acta} {"Acta Informatica"}
-
-MACRO {cacm} {"Communications of the ACM"}
-
-MACRO {ibmjrd} {"IBM Journal of Research and Development"}
-
-MACRO {ibmsj} {"IBM Systems Journal"}
-
-MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
-
-MACRO {ieeetc} {"IEEE Transactions on Computers"}
-
-MACRO {ieeetcad}
- {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
-
-MACRO {ipl} {"Information Processing Letters"}
-
-MACRO {jacm} {"Journal of the ACM"}
-
-MACRO {jcss} {"Journal of Computer and System Sciences"}
-
-MACRO {scp} {"Science of Computer Programming"}
-
-MACRO {sicomp} {"SIAM Journal on Computing"}
-
-MACRO {tocs} {"ACM Transactions on Computer Systems"}
-
-MACRO {tods} {"ACM Transactions on Database Systems"}
-
-MACRO {tog} {"ACM Transactions on Graphics"}
-
-MACRO {toms} {"ACM Transactions on Mathematical Software"}
-
-MACRO {toois} {"ACM Transactions on Office Information Systems"}
-
-MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
-
-MACRO {tcs} {"Theoretical Computer Science"}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
- "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
- 'len :=
- s #1 len substring$ =
- { s len #1 + global.max$ substring$ }
- 's
- if$
-}
-
-INTEGERS { et.al.char.used }
-
-FUNCTION {initialize.et.al.char.used}
-{ #0 'et.al.char.used :=
-}
-
-EXECUTE {initialize.et.al.char.used}
-
-FUNCTION {format.lab.names}
-{ 's :=
- s num.names$ 'numnames :=
- numnames #1 >
- { numnames #4 >
- { #3 'namesleft := }
- { numnames 'namesleft := }
- if$
- #1 'nameptr :=
- ""
- { namesleft #0 > }
- { nameptr numnames =
- { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
- { "{\etalchar{+}}" *
- #1 'et.al.char.used :=
- }
- { s nameptr "{v{}}{l{}}" format.name$ * }
- if$
- }
- { s nameptr "{v{}}{l{}}" format.name$ * }
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
- numnames #4 >
- { "{\etalchar{+}}" *
- #1 'et.al.char.used :=
- }
- 'skip$
- if$
- }
- { s #1 "{v{}}{l{}}" format.name$
- duplicate$ text.length$ #2 <
- { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
- 'skip$
- if$
- }
- if$
-}
-
-FUNCTION {author.key.label}
-{ author empty$
- { key empty$
- { cite$ #1 #3 substring$ }
- { key #3 text.prefix$ }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {author.editor.key.label}
-{ author empty$
- { editor empty$
- { key empty$
- { cite$ #1 #3 substring$ }
- { key #3 text.prefix$ }
- if$
- }
- { editor format.lab.names }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {author.key.organization.label}
-{ author empty$
- { key empty$
- { organization empty$
- { cite$ #1 #3 substring$ }
- { "The " #4 organization chop.word #3 text.prefix$ }
- if$
- }
- { key #3 text.prefix$ }
- if$
- }
- { author format.lab.names }
- if$
-}
-
-FUNCTION {editor.key.organization.label}
-{ editor empty$
- { key empty$
- { organization empty$
- { cite$ #1 #3 substring$ }
- { "The " #4 organization chop.word #3 text.prefix$ }
- if$
- }
- { key #3 text.prefix$ }
- if$
- }
- { editor format.lab.names }
- if$
-}
-
-FUNCTION {calc.label}
-{ type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.key.label
- { type$ "proceedings" =
- 'editor.key.organization.label
- { type$ "manual" =
- 'author.key.organization.label
- 'author.key.label
- if$
- }
- if$
- }
- if$
- duplicate$
- year field.or.null purify$ #-1 #2 substring$
- *
- 'label :=
- year field.or.null purify$ #-1 #4 substring$
- *
- sortify 'sort.label :=
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
- #1 'nameptr :=
- ""
- s num.names$ 'numnames :=
- numnames 'namesleft :=
- { namesleft #0 > }
- { nameptr #1 >
- { " " * }
- 'skip$
- if$
- s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
- nameptr numnames = t "others" = and
- { "et al" * }
- { t sortify * }
- if$
- nameptr #1 + 'nameptr :=
- namesleft #1 - 'namesleft :=
- }
- while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
- "A " #2
- "An " #3
- "The " #4 t chop.word
- chop.word
- chop.word
- sortify
- #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
- { key empty$
- { "to sort, need author or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
- { editor empty$
- { key empty$
- { "to sort, need author, editor, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { editor sort.format.names }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
- { organization empty$
- { key empty$
- { "to sort, need author, organization, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { "The " #4 organization chop.word sortify }
- if$
- }
- { author sort.format.names }
- if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
- { organization empty$
- { key empty$
- { "to sort, need editor, organization, or key in " cite$ * warning$
- ""
- }
- { key sortify }
- if$
- }
- { "The " #4 organization chop.word sortify }
- if$
- }
- { editor sort.format.names }
- if$
-}
-
-FUNCTION {presort}
-{ calc.label
- sort.label
- " "
- *
- type$ "book" =
- type$ "inbook" =
- or
- 'author.editor.sort
- { type$ "proceedings" =
- 'editor.organization.sort
- { type$ "manual" =
- 'author.organization.sort
- 'author.sort
- if$
- }
- if$
- }
- if$
- *
- " "
- *
- year field.or.null sortify
- *
- " "
- *
- title field.or.null
- sort.format.title
- *
-% DFK throw away stuff above and use cite$ for sort key
- pop$
- cite$
- #1 entry.max$ substring$
- 'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label last.sort.label next.extra }
-
-INTEGERS { longest.label.width last.extra.num }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
- #0 int.to.chr$ 'last.sort.label :=
- "" 'next.extra :=
- #0 'longest.label.width :=
- #0 'last.extra.num :=
-}
-
-FUNCTION {forward.pass}
-{ last.sort.label sort.label =
- { last.extra.num #1 + 'last.extra.num :=
- last.extra.num int.to.chr$ 'extra.label :=
- }
- { "a" chr.to.int$ 'last.extra.num :=
- "" 'extra.label :=
- sort.label 'last.sort.label :=
- }
- if$
-}
-
-FUNCTION {reverse.pass}
-{ next.extra "b" =
- { "a" 'extra.label := }
- 'skip$
- if$
- label extra.label * 'label :=
- label width$ longest.label.width >
- { label 'longest.label :=
- label width$ 'longest.label.width :=
- }
- 'skip$
- if$
- extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-% DFK removed code about et.al.char
-% DFK changed to HTML
-FUNCTION {begin.bib}
-{ "<HTML>" write$ newline$
- "<HEAD><TITLE> Bibliography </TITLE>" write$ newline$
- "</HEAD>" write$ newline$
- "<BODY BGCOLOR=#EEEEEE>" write$ newline$
- "<DL>" write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-% DFK changed to HTML
-FUNCTION {end.bib}
-{ newline$
- "</DL>" write$ newline$
- "</BODY>" write$ newline$
- "</HTML>" write$ newline$
-}
-
-EXECUTE {end.bib}
--- /dev/null
+% 18/aug/2010:
+% - changed into texi-long.bst by Graham Percival for GNU LilyPond
+% - only a minimum of changes were made; some html remains in
+% this file, but it does not appear in our output
+% BibTeX bibliography style `html-long'
+% spits out texinfo-formatted bibliography in place of bbl output
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-long.bst,v 1.4 2005/07/21 21:29:50 hjunes Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to texinfo, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "@item @code{[" cite$ * "]} " * write$ newline$
+ }
+ { "" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+ }
+ if$
+ newline$
+% "" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ earlier empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+ ">" * earlier * "</A>." * write$ newline$
+ }
+ if$
+ later empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+ ">" * later * "</A>." * write$ newline$
+ }
+ if$
+% "" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to texinfo
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "@emph{" swap$ * "}" * }
+ if$
+}
+
+% DFK added for texinfo strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "@strong{" swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+% DFK added this, to strip {} and ~ from titles and authors
+% It's not a great idea, because it will screw up in math mode and some
+% special characters... but it makes most things much prettier.
+FUNCTION {author.title.purify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "{" =
+ t #1 #1 substring$ "}" = or
+ 'skip$
+ { t #1 #1 substring$ "~" =
+ { " " * }
+ { t #1 #1 substring$ * }
+ if$
+ }
+ if$
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names author.title.purify }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names author.title.purify
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ author.title.purify strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title author.title.purify strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+% " \cite{" * crossref * "}" *
+ " [" * crossref * "]" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+% " \cite{" * crossref * "}" *
+ " [" * crossref * "]" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+% " \cite{" * crossref * "}" *
+ " [" * crossref * "]" *
+}
+
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+ { skip$ }
+ { "<P><QUOTE> " swap$ * " </QUOTE></P>" *}
+ if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty,
+% or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+ { pop$ pop$ "" }
+ { swap$
+ "<strong> " swap$ * ":</strong> " * swap$ * }
+ if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+ "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+ "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+ "Comment" comment format.dfkfield format.quotedParagraph write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to texinfo
+FUNCTION {begin.bib}
+{ "@c bib -> itexi intro" write$ newline$
+ "@itemize" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to texinfo
+FUNCTION {end.bib}
+{ newline$
+ "@end itemize" write$ newline$
+ "@c bib -> itexi end" write$ newline$
+}
+
+EXECUTE {end.bib}
@end table
If the command uses properties from the @var{props} arguments, the
-@code{#:properties} keyword can be used, to specify which properties are
-used, and their default values.
+@code{#:properties} keyword can be used to specify which properties are
+used along with their default values.
Arguments are distinguished according to their type:
@itemize
here, the @code{box-padding} values are hard coded, and cannot be
changed by the user. Also, it would be better to distinguish the
padding between the two boxes, from the padding between the inner box
-and the text. So we will introduce a new property,
-@code{inter-box-padding}, for the padding between the two boxes. The
+and the text. So we will introduce a new property,
+@code{inter-box-padding}, for the padding between the two boxes. The
@code{box-padding} will be used for the inner padding. The new code is
now as follows:
@uref{http://@/www@/.schemers@/.org}.
LilyPond uses the GNU Guile implementation of Scheme, which is
-based on the Scheme @qq{R5RS} standard. If you are learning Scheme
+based on the Scheme @qq{R5RS} standard. If you are learning Scheme
to use with LilyPond, working with a different implementation (or
-referring to a different standard) is not recommended. Information
+referring to a different standard) is not recommended. Information
on guile can be found at @uref{http://www.gnu.org/software/guile/}.
The @qq{R5RS} Scheme standard is located at
@uref{http://www.schemers.org/Documents/Standards/R5RS/}.
opening a terminal window and typing @q{guile}. On some systems,
notably Windows, you may need to set the environment variable
@code{GUILE_LOAD_PATH} to the directory @code{../usr/shr/guile/1.8}
-in the LilyPond installation. For the full path to this directory
+in the LilyPond installation. For the full path to this directory
see @rlearning{Other sources of information}. Alternatively, Windows
users may simply choose @q{Run} from the Start menu and enter
@q{guile}.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 68cf70682a542701a918f8bfff50f2b8b85f84e2
+ Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
créer de belles partitions utilisant une notation musicale courante
@menu
-* Notation sur une seule portée::
-* Notes simultanées::
-* Chansons::
-* Dernières précisions::
+* Notation sur une seule portée::
+* Notes simultanées::
+* Chansons::
+* Dernières précisions::
@end menu
@node Notation sur une seule portée
@menu
* Contrôle de mesure::
-* Altérations et armure::
-* Liaisons::
-* Articulations et nuances::
-* Ajout de texte::
-* Barres de ligature automatiques et manuelles::
-* Commandes rythmiques avancées::
+* Altérations et armure::
+* Liaisons::
+* Articulations et nuances::
+* Ajout de texte::
+* Barres de ligature automatiques et manuelles::
+* Commandes rythmiques avancées::
@end menu
@funindex isis
Glossaire musicologique :
-@rglos{sharp}, @rglos{flat}, @rglos{double sharp},
-@rglos{double flat}, @rglos{accidental}.
+@rglosnamed{sharp,dièse}, @rglosnamed{flat,bémol},
+@rglosnamed{double sharp,double dièse},
+@rglosnamed{double flat,double bémol}, @rglosnamed{accidental,altération}.
Dans la notation par défaut, on obtient un @notation{dièse} en
ajoutant @code{is} au nom de la note, et un @notation{bémol} en
@funindex minor
Glossaire musicologique :
-@rglos{key signature}, @rglos{major},
-@rglos{minor}.
+@rglosnamed{key signature,armure}, @rglosnamed{major,majeur},
+@rglosnamed{minor,mineur}.
L'armure est déterminée par la commande @code{\key}, suivie d'une
hauteur puis de @code{\major} (majeur) ou @code{\minor} (mineur).
@subheading Attention aux armures et aux hauteurs
Glossaire musicologique :
-@rglos{accidental}, @rglos{key signature},
-@rglos{pitch}, @rglos{flat}, @rglos{natural}, @rglos{sharp},
-@rglos{transposition}, @rglos{Pitch names}.
+@rglosnamed{accidental,altération}, @rglosnamed{key signature,armure},
+@rglosnamed{pitch,hauteur}, @rglosnamed{flat,bémol},
+@rglosnamed{natural,bécarre}, @rglosnamed{sharp,dièse},
+@rglos{transposition}, @rglosnamed{Pitch names,Noms de note}.
La combinaison de l'@notation{armure} et des hauteurs de note -- y
compris les altérations -- permet à LilyPond de déterminer dans quel
note correspondante est une question qui relève de la mise en forme.
La gravure d'une partition suit des règles, en particulier des règles
d'indication des altérations accidentelles. Les hauteurs de note, en
-revanche, relèvent de ce que vous voulez entendre ; et, dans la mesure
-où la musique que vous entrez est censée être celle que vous voulez
-entendre, LilyPond, qui n'est chargé que de la gravure, ne les
+revanche, relèvent de ce que vous voulez entendre@tie{}; et, dans la
+mesure où la musique que vous entrez est censée être celle que vous
+voulez entendre, LilyPond, qui n'est chargé que de la gravure, ne les
choisira pas à votre place.
Dans cet exemple,
entrer le @code{is} pour les notes @code{cis} et @code{fis}.
Le code @code{b} ne veut pas dire @qq{Imprimez-moi un point noir sur
-la troisième ligne de la portée.} Cela signifie plutôt : @qq{Ici se
+la troisième ligne de la portée.} Cela signifie plutôt@tie{}: @qq{Ici se
trouve une note dont la hauteur est un si naturel.} Avec une armure
de la bémol majeur, ce @code{si} est flanqué d'un bécarre
accidentel@tie{}:
@notation{transposition}. De plus, les altérations accidentelles
peuvent ainsi être imprimées suivant plusieurs conventions. Pour
connaître les différentes manières dont les altérations accidentelles
-peuvent être imprimées, consultez
+peuvent être imprimées, consultez
@ruser{Altérations accidentelles automatiques}.
@subheading Liaisons de prolongation
Glossaire musicologique :
-@rglos{tie}.
+@rglosnamed{tie,liaison de tenue}.
Pour créer une liaison de prolongation -- parfois aussi appelée
liaison de tenue --, on ajoute un tilde @code{~} à la première note
@c phrasing slur = "ils ont des chapeaux ronds" (phrase). jcm
Glossaire musicologique :
-@rglos{slur}, @rglos{phrasing}.
+@rglosnamed{slur,liaison}, @rglosnamed{phrasing,phrasé}.
Une liaison d'articulation ou @emph{legato} peut englober
plusieurs notes. Les notes de départ et d'arrivée sont suivies
@cindex legato
@subheading Liaisons de phrasé
-De plus longues liaisons, dites de phrasé, sont délimitées par @code{\(} et
-@code{\)}. Il est possible d'avoir en même temps des legatos et des
-phrasés, mais pas plusieurs liaisons de phrasé ou de @emph{legato} à la fois.
+De plus longues liaisons, dites de phrasé, sont délimitées par @code{\(}
+et @code{\)}. Il est possible d'avoir en même temps des legatos et des
+phrasés, mais pas plusieurs liaisons de phrasé ou de @emph{legato} à la
+fois.
@lilypond[verbatim,quote,relative=2]
g4\( g8( a) b( c) b4\)
@subheading Attention aux types de liaison
Glossaire musicologique :
-@rglos{articulation}, @rglos{slur}, @rglos{tie}.
+@rglos{articulation}, @rglosnamed{slur,liaison},
+@rglosnamed{tie,liaison de tenue}.
Une liaison d'articulation ou de phrasé ressemble à une liaison de
prolongation, mais n'a pas la même signification. Alors qu'une
liaison de prolongation ne peut relier que deux notes de même hauteur,
-le @emph{legato} indique une articulation de plusieurs notes,
-éventuellement en grand nombre. Les liaisons de tenue peuvent être
+le @emph{legato} indique une articulation de plusieurs notes,
+éventuellement en grand nombre. Les liaisons de tenue peuvent être
enchâssées dans un @emph{legato} ou un phrasé.
@lilypond[verbatim,quote,relative=2]
@seealso
-Manuel de notation :
-@ruser{Liaisons de prolongation},
+Manuel de notation :
+@ruser{Liaisons de prolongation},
@ruser{Liaisons d'articulation},
@ruser{Liaisons de phrasé}.
@funindex _
Glossaire musicologique :
-@rglos{fingering}.
+@rglosnamed{fingering,doigté}.
De même, des indications de doigté peuvent être ajoutées à une note en
utilisant un tiret (@samp{-}) et le chiffre à écrire@tie{}:
@funindex !
Glossaire musicologique :
-@rglos{dynamics},
+@rglosnamed{dynamics,nuances},
@rglos{crescendo},
@rglos{decrescendo}.
@seealso
-Manuel de notation :
+Manuel de notation :
@ruser{Articulations et ornements},
@ruser{Doigtés},
@ruser{Nuances}.
c2^"espr" a_"legato"
@end lilypond
-Pour mettre en forme du texte, on utilise la commande @code{\markup}@tie{}:
+Pour mettre en forme du texte, on utilise la commande
+@code{\markup}@tie{}:
@lilypond[verbatim,quote,relative=2]
c2^\markup{ \bold espr}
@funindex autoBeamOn
Glossaire musicologique :
-@rglos{beam}.
+@rglosnamed{beam,ligature}.
-Toutes les barres de ligature sont dessinées automatiquement :
+Toutes les barres de ligature sont dessinées automatiquement@tie{}:
@lilypond[verbatim,quote,relative=2]
a8 ais d ees r d c16 b a8
@seealso
Manuel de notation :
-@ruser{Barres de ligature automatiques},
+@ruser{Barres de ligature automatiques},
@ruser{Barres de ligature manuelles}.
@funindex \partial
@funindex partial
-Glossaire musicologique : @rglos{anacrusis}.
+Glossaire musicologique : @rglosnamed{anacrusis,anacrouse}.
On crée une levée (ou anacrouse) avec la commande @code{\partial},
-suivie d'une durée@tie{}: @code{\partial 4} produit une levée d'une
-noire et @code{\partial 8} d'une croche.
+suivie d'une durée@tie{}: @code{\partial@tie{}4} produit une levée d'une
+noire et @code{\partial@tie{}8} d'une croche.
@lilypond[verbatim,quote,relative=2]
\partial 8 f8 |
@funindex \times
@funindex times
-Glossaire musicologique : @rglos{note value}, @rglos{triplet}.
+Glossaire musicologique : @rglosnamed{note value,valeur d'une note},
+@rglosnamed{triplet,triolet}.
Les @notation{nolets} sont créés avec la commande @code{\times}, qui
prend deux arguments@tie{}: une fraction et une expression musicale. La
@funindex \appoggiatura
@funindex acciaccatura
-Glossaire musicologique : @rglos{grace notes}, @rglos{acciaccatura},
-@rglos{appoggiatura}.
+Glossaire musicologique :
+@rglosnamed{grace notes,ornements}, @rglosnamed{acciaccatura,acciacature},
+@rglosnamed{appoggiatura,appogiature}.
Des @notation{notes d'ornement} s'obtiennent en appliquant la commande
@code{\grace}, @code{\appoggiatura} ou @code{\acciaccatura} à une
il y a plus d'une voix sur une même portée.
@menu
-* Les expressions musicales en clair::
-* Plusieurs portées::
-* Regroupements de portées::
-* Combinaison de notes en accords::
-* Polyphonie sur une portée::
+* Les expressions musicales en clair::
+* Plusieurs portées::
+* Regroupements de portées::
+* Combinaison de notes en accords::
+* Polyphonie sur une portée::
@end menu
@cindex expression
-Ce mécanisme est similaire aux formules mathématiques : une grosse
+Ce mécanisme est similaire aux formules mathématiques@tie{}: une grosse
formule est créée en assemblant plusieurs petites formules. De telles
formules sont appelées expressions, elles ont une définition
récursive, de telle sorte que vous pouvez fabriquer des expressions
@funindex >>
@funindex << ... >>
-Glossaire musicologique : @rglos{polyphony}.
+Glossaire musicologique : @rglosnamed{polyphony,polyphonie}.
Cette technique est utile pour de la musique @notation{polyphonique}.
Pour entrer une musique avec plusieurs voix ou plusieurs portées, nous
@funindex GrandStaff
@funindex ChoirStaff
-Glossaire musicologique : @rglos{brace}.
+Glossaire musicologique : @rglosnamed{brace,accolade}.
La musique pour piano s'écrit sur deux portées reliées par une
@notation{accolade}. La gravure de ce type de portée est semblable à
}
@end lilypond
-Vous pouvez générer d'autres formes de regroupement, avec
-@w{@code{\new GrandStaff}} pour une partition d'orchestre, ou
+Vous pouvez générer d'autres formes de regroupement, avec
+@w{@code{\new GrandStaff}} pour une partition d'orchestre, ou
@w{@code{\new ChoirStaff}} qui sied particulièrement aux partitions
chorales. Chacun de ces regroupements constitue un contexte à part
entière, avec ses particularités, tant au niveau du signe qui regroupe
@funindex >
@funindex < ... >
-Glossaire musicologique : @rglos{chord}.
+Glossaire musicologique : @rglosnamed{chord,accord}.
Nous avons vu précédemment comment combiner des notes simultanément,
en les encadrant par des chevrons doubles @code{<<} et @code{>>}. Pour
@lilypond[verbatim,quote,relative=2]
r4 <c e g>~ <c f a>2 |
-<c e g>8[ <c f a> <c e g> <c f a>] <c e g>\>[ <c f a> <c f a> <c e g>]\! |
+<c e g>8[ <c f a> <c e g> <c f a>] <c e g>\>[ <c f a> <c f a> <c e g>]\! |
r4 <c e g>8.\p <c f a>16( <c e g>4-. <c f a>) |
@end lilypond
fait appel à des concepts que nous n'avons pas encore abordés. C'est la
raison pour laquelle nous ne nous étendrons pas tout de suite sur ce
sujet et préférons vous inciter à consulter les chapitres dédiés à
-l'étude de ces concepts.
+l'étude de ces concepts.
@seealso
Manuel d'initiation :
Cette section présente l'écriture vocale et les partitions de variété.
@menu
-* Écriture de chants simples::
-* Alignement des paroles sur une mélodie::
-* Paroles pour plusieurs portées::
+* Écriture de chants simples::
+* Alignement des paroles sur une mélodie::
+* Paroles pour plusieurs portées::
@end menu
@warning{Il est primordial de séparer l'accolade fermant les
paroles de la dernière syllabe -- par une espace ou un saut de ligne --
-au risque de voir apparaître une
+au risque de voir apparaître une
@rprogram{Erreur renvoyant à ../ly/init.ly}.}
@cindex alignement des paroles
@cindex paroles, mot de plusieurs syllabes
-Glossaire musicologique : @rglos{melisma}, @rglos{extender line}.
+Glossaire musicologique : @rglosnamed{melisma,mélisme},
+@rglosnamed{extender line,ligne d'extension}.
La deuxième ligne de la comptine précédente est @emph{The moon doth
shine as bright as day}. Ajoutons-la au code.
>>
@end lilypond
-Si vous compilez ce code en l'état, vous verrez apparaître :
+Si vous compilez ce code en l'état, vous verrez apparaître@tie{}:
@example
song.ly:12:29: Avertissement : échec du contrôle de mesure (barcheck) à : 5/8
Les paroles sont maintenant correctement alignées, mais les liens de
croche automatiques ne conviennent pas pour les notes au-dessus de
@emph{shine as}. On peut les corriger en ajoutant des liens de croche
-manuels@tie{}; pour ceci consultez
+manuels@tie{}; pour ceci consultez
@ref{Barres de ligature automatiques et manuelles}.
@lilypond[verbatim,quote]
du manuel.
@menu
-* Organisation du code source avec des variables::
-* Ajout de titres::
-* Noms de note absolus::
-* Après le tutoriel::
+* Organisation du code source avec des variables::
+* Ajout de titres::
+* Noms de note absolus::
+* Après le tutoriel::
@end menu
morceau ou deux. Commencez par copier l'un des modèles types et
ajoutez-y des notes -- consultez les @ref{Modèles}. Si vous voulez
employer une notation que vous n'avez pas trouvé dans le tutoriel,
-consultez le manuel de notation, en commençant par la
+consultez le manuel de notation, en commençant par la
@ruser{Notation musicale générale}. Si vous désirez écrire pour un
ensemble instrumental non couvert par les modèles, lisez la section
-@ref{Extension des modèles}.
+@ref{Extension des modèles}.
Après avoir écrit quelques pièces courtes, lisez les chapitres 3 à 5
du manuel d'initiation. Rien ne s'oppose à ce que vous consultiez dès
d'initiation, vous pourrez en relisant certaines sections suivre ces
références pour approfondir certains aspects.
-Si vous ne l'avez pas encore fait, lisez
-@ref{À propos de la documentation}. Les sources de documentation et
-d'information sur LilyPond sont vastes, il est normal pour un débutant
-de ne pas savoir où chercher@tie{}; si vous passez quelques minutes à
-lire attentivement cette section, vous vous épargnerez certainement la
-frustration causée par des heures de recherches infructueuses.
+Si vous ne l'avez pas encore fait, lisez @ref{Vue d'ensemble des
+manuels}. Les sources de documentation et d'information sur LilyPond
+sont vastes, il est normal pour un débutant de ne pas savoir où
+chercher@tie{}; si vous passez quelques minutes à lire attentivement
+cette section, vous vous épargnerez certainement la frustration causée
+par des heures de recherches infructueuses.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: a042d99cd2251b2b9121e1b8ad30307c4ce28863
+ Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
partitions complexes de même qualité.
@menu
-* Organisation des fichiers LilyPond::
-* Les voix contiennent la musique::
-* Contextes et graveurs::
-* Extension des modèles::
+* Organisation des fichiers LilyPond::
+* Les voix contiennent la musique::
+* Contextes et graveurs::
+* Extension des modèles::
@end menu
@node Organisation des fichiers LilyPond
description plus complète dans @ruser{Structure de fichier}.
@menu
-* Introduction à la structure de fichier LilyPond::
-* La partition est une (unique) expression musicale composée::
-* Expressions musicales imbriquées::
-* Non-imbrication des crochets et liaisons::
+* Introduction à la structure de fichier LilyPond::
+* La partition est une (unique) expression musicale composée::
+* Expressions musicales imbriquées::
+* Non-imbrication des crochets et liaisons::
@end menu
@node Introduction à la structure de fichier LilyPond
@cindex format d'entrée
@cindex structure de ficher
-Un fichier d'entrée LilyPond ressemble à :
+Un fichier d'entrée LilyPond ressemble à@tie{}:
@example
\version @w{"@version{}"}
@end example
@noindent
-Dès lors que tout cela est entre accolades : @code{@{ @dots{} @}},
+Dès lors que tout cela est entre accolades@tie{}: @code{@{ @dots{} @}},
LilyPond le considère comme une et une seule expression musicale.
Comme nous l'avons vu précédemment, un bloc @code{\score} peut contenir
-d'autres informations :
+d'autres informations@tie{}:
@example
\score @{
@noindent
Gardez à l'esprit que ces trois commandes -- @code{\header},
-@code{\layout} et @code{\midi} -- sont spécifiques : à l'inverse de
+@code{\layout} et @code{\midi} -- sont spécifiques@tie{}: à l'inverse de
toutes les commandes débutant par une oblique inversée @code{\}
(@emph{backslash} en anglais), @strong{elles ne constituent pas} des
expressions musicales et ne peuvent pas faire partie d'expressions
-- que nous n'avons pas détaillées pour l'instant, auront respectivement
pour effet, lorsqu'elles interviennent, de produire une sortie
imprimable et un fichier MIDI. Nous nous y intéressons plus
-particulièrement dans le manuel de notation, aux chapitres
-@ruser{Mise en forme de la partition} et
+particulièrement dans le manuel de notation, aux chapitres
+@ruser{Mise en forme de la partition} et
@ruser{Création de fichiers MIDI}.
@cindex partitions multiples
Vous pouvez tout à fait mentionner plusieurs blocs @code{\score}. Ils
seront traités comme autant de partitions indépendantes qui seront
-regroupées dans un seul fichier résultant. La commande @code{\book}
+regroupées dans un seul fichier résultant. La commande @code{\book}
(@emph{recueil} ou @emph{ouvrage}) n'est pas obligatoire -- elle sera
créée implicitement. Néanmoins, le recours à la commande @code{\book}
vous permettra d'obtenir des fichiers résultants distincts à partir
@cindex layout, effets selon l'emplacement
Tout bloc @code{\layout} affecte le bloc @code{\score} ou @code{\book}
-au sein duquel il intervient : si c'est à l'intérieur d'un bloc
+au sein duquel il intervient@tie{}: si c'est à l'intérieur d'un bloc
@code{\score}, seul celui-ci en sera affecté. Dans le cas où le bloc
@code{\layout} se trouve à l'extérieur du bloc @code{\score}, que le
bloc @code{\book} soit explicite ou non, il affectera chacun des
@code{\score} compris dans ce @code{\book}.
-Pour plus de détail à ce sujet, consultez
+Pour plus de détail à ce sujet, consultez
@ruser{Plusieurs partitions dans un même ouvrage}.
@cindex variables
Un autre raccourci pratique est la possibilité de définir
des variables, également appelées @qq{identificateurs} -- voir
@ref{Organisation du code source avec des variables} à ce sujet. Dans
-tous les modèles, vous trouverez :
+tous les modèles, vous trouverez@tie{}:
@example
melodie = \relative c' @{
et l'insérer partout où il rencontrera @code{\melodie}. Vous êtes
libre de choisir comment dénommer vos variables@footnote{Les noms de
variables sont sensibles à la casse, et ne peuvent contenir ni
-chiffre, ni ponctuation, ni caractère accentué, ni espace.} ; ce peut être
-@code{melodie}, @code{global}, @code{maindroitepiano}, ou
+chiffre, ni ponctuation, ni caractère accentué, ni espace.}@tie{}; ce
+peut être @code{melodie}, @code{global}, @code{maindroitepiano}, ou
@code{laTeteAToto}, tant qu'il ne s'agit pas de @qq{mot réservé}. Pour
-plus de détails, voir
-@ref{Économie de saisie grâce aux identificateurs et fonctions}.
+plus de détails, voir
+@ref{Économie de saisie grâce aux identificateurs et fonctions}.
@seealso
-Pour une description complète du format des fichiers d'entrée, voir
+Pour une description complète du format des fichiers d'entrée, voir
@ruser{Structure de fichier}.
@cindex bloc score, contenu
@cindex expression musicale composite
-Dans la section précédente,
+Dans la section précédente,
@ref{Introduction à la structure de fichier LilyPond}, nous
avons vu l'organisation générale des fichiers d'entrée de LilyPond.
-Mais c'est comme si nous avions éludé la question essentielle : comment
-diable peut-on savoir quoi mettre après @code{\score} ?
+Mais c'est comme si nous avions éludé la question essentielle@tie{}:
+comment diable peut-on savoir quoi mettre après @code{\score}@tie{}?
-En fait, nous ne l'avons pas éludée du tout : le grand mystère est
+En fait, nous ne l'avons pas éludée du tout@tie{}: le grand mystère est
tout simplement qu'@strong{il n'y a pas} de mystère. Allez,
-expliquons-le en une ligne :
+expliquons-le en une ligne@tie{}:
@quotation
@emph{Un bloc @code{\score} doit commencer par une et une seule
chanteur accompagné au piano. On n'a pas besoin d'une partition
d'orchestre -- c.-à-d. des portées regroupées en @code{StaffGroup} --
donc laissons cela de côté. Par contre, nous voulons bien une voix et
-une double portée de piano.
+une double portée de piano.
@example
\score @{
@end example
Nous avons ici attribué des noms aux portées -- @qq{chanteur} et
-@qq{piano}. Bien que cela ne soit pas primordial, c'est une
-habitude qu'il est bon d'adopter dès le départ : vous saurez au premier
-coup d'œil à quoi correspond chaque portée.
+@qq{piano}. Bien que cela ne soit pas primordial, c'est une
+habitude qu'il est bon d'adopter dès le départ@tie{}: vous saurez au
+premier coup d'œil à quoi correspond chaque portée.
-Vous vous souvenez que nous avons recours à @code{<<} et @code{>>}
+Vous vous souvenez que nous avons recours à @code{<<} et @code{>>}
en lieu et place de @code{@{ @dots{} @}} pour gérer des musiques
simultanées. Et, pour le coup, on aimerait @emph{vraiment} que la
-partie vocale et l'accompagnement soient imprimés ensemble@dots{} Bien que
-faire appel à @code{<< ... >>} ne soit pas réellement nécessaire pour la
-portée du chanteur, dans la mesure où elle ne contient qu'une seule
-expression musicale, nous vous recommandons de prendre l'habitude de
-l'encadrer ainsi plutôt que par de simples accolades -- une portée peut
-en effet contenir plusieurs voix, ou bien des notes @strong{et} des
+partie vocale et l'accompagnement soient imprimés ensemble@dots{} Bien
+que faire appel à @code{<< ... >>} ne soit pas réellement nécessaire
+pour la portée du chanteur, dans la mesure où elle ne contient qu'une
+seule expression musicale, nous vous recommandons de prendre l'habitude
+de l'encadrer ainsi plutôt que par de simples accolades -- une portée
+peut en effet contenir plusieurs voix, ou bien des notes @strong{et} des
paroles. Dans la mesure où nous y ajouterons des paroles, les chevrons
sont donc obligatoires. Si vous avez oublié comment ajouter des
-paroles à l'aide de la commande @code{\addlyrics}, relisez le chapitre
+paroles à l'aide de la commande @code{\addlyrics}, relisez le chapitre
@ref{Écriture de chants simples}.
@lilypond[verbatim,quote,ragged-right]
que de voix chantée -- ce pourrait être une partie de violon par
exemple --, et des paroles.
-Nous avons également une partie de piano, qui contient deux portées :
-une pour la main droite, une autre pour la main gauche. Il nous faudra
-d'ailleurs ajouter une clef de fa à cette dernière.
+Nous avons également une partie de piano, qui contient deux
+portées@tie{}: une pour la main droite, une autre pour la main gauche.
+Il nous faudra d'ailleurs ajouter une clef de fa à cette dernière.
À ce point, on pourrait commencer à ajouter les notes. Dans les
tenterait d'interpréter le contenu de cette variable comme des notes, ce
qui déclencherait immanquablement des erreurs. LilyPond dispose de
différents types de données -- voir @ruser{Modes de saisie} pour plus de
-détails.
+détails.
-Avec quelques notes de plus et une clef de fa, nous pourrions avoir :
+Avec quelques notes de plus et une clef de fa, nous pourrions
+avoir@tie{}:
@lilypond[verbatim,quote,ragged-right]
melody = \relative c'' { r4 d8\noBeam g, c4 r }
Quand on écrit, ou que l'on lit, une section @code{\score}, mieux vaut
y aller lentement et soigneusement. Commencez par le niveau le plus
large, puis travaillez sur chaque niveau plus détaillé. À ce propos,
-une indentation stricte et propre est vraiment d'une aide précieuse :
-assurez-vous que chaque élément d'un même niveau a le même décalage
-horizontal dans votre éditeur de texte !
+une indentation stricte et propre est vraiment d'une aide
+précieuse@tie{}: assurez-vous que chaque élément d'un même niveau a le
+même décalage horizontal dans votre éditeur de texte@tie{}!
@seealso
-Manuel de notation :
+Manuel de notation :
@ruser{Structure d'une partition}.
@cindex portées, temporaires
@cindex ossias
-Déclarer toutes les portées dès le départ n'est pas une obligation ;
-elles peuvent intervenir temporairement n'importe où dans la partition.
-Ceci est tout à fait indiqué pour créer des sections @rglos{ossia}.
-L'exemple suivant illustre la manière de créer temporairement une
-nouvelle portée, l'espace de trois notes :
+Déclarer toutes les portées dès le départ n'est pas une
+obligation@tie{}; elles peuvent intervenir temporairement n'importe où
+dans la partition. Ceci est tout à fait indiqué pour créer des sections
+@rglos{ossia}. L'exemple suivant illustre la manière de créer
+temporairement une nouvelle portée, l'espace de trois notes@tie{}:
@lilypond[verbatim,quote,ragged-right]
\new Staff {
@cindex portée, positionnement
-Une section ossia se placera au dessus de la portée en procédant ainsi :
+Une section ossia se placera au dessus de la portée en procédant
+ainsi@tie{}:
@lilypond[verbatim,quote,ragged-right]
\new Staff = "main" {
Nous avons déjà rencontré plusieurs types de crochets au fil de nos
fichiers LilyPond. Ils obéissent à des règles différentes qui peuvent
paraître déroutantes de prime abord. Avant d'examiner ces règles, voici
-une liste des différents types de crochet :
+une liste des différents types de crochet@tie{}:
@c attempt to force this onto a new page
@need 50
@end multitable
D'autres constructions permettent d'obtenir des lignes regroupant ou en
-travers des notes : les liaisons de prolongation indiquées par un
-tilde (@code{~}), les marques de nolet avec
+travers des notes@tie{}: les liaisons de prolongation indiquées par un
+tilde (@code{~}), les marques de nolet avec
@w{@code{\times x/y @{..@}}}, ou
encore les notes d'ornement avec @code{\grace@{..@}}.
En dehors de LilyPond, l'imbrication correcte de différents types de
-crochets exige un strict respect des conventions, telles que
+crochets exige un strict respect des conventions, telles que
@code{<<@tie{}[@tie{}@{@tie{}(@tie{}..@tie{})@tie{}@}@tie{}]@tie{}>>},
-où les marques de fermeture interviennent
+où les marques de fermeture interviennent
obligatoirement dans l'ordre exactement inverse à celles d'ouverture.
Ceci @strong{doit} être rigoureusement respecté pour les trois
types de crochets utilisés pour @strong{délimiter} comme l'indique le
-tableau ci-dessus.
+tableau ci-dessus.
Une telle rigueur dans l'imbrication n'est @strong{pas} requise pour les
types de crochets dont la fonction est de @strong{marquer}, selon le
tableau ci-dessus, lorsqu'il sont utilisés en combinaison avec des
liaisons de prolongation ou des nolets. En effet, il ne s'agit pas
-de crochets ayant pour fonction de borner quelque chose ; ils agissent
-plutôt comme marquant le début de quelque chose et sa fin.
+de crochets ayant pour fonction de borner quelque chose@tie{}; ils
+agissent plutôt comme marquant le début de quelque chose et sa fin.
Ainsi, et bien que ce ne soit pas très musical, une liaison de phrasé
peut débuter avant l'insertion d'une ligature manuelle et s'arrêter
-avant la fin de la ligature :
+avant la fin de la ligature@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
{ g8\( a b[ c b\) a] }
@section Les voix contiennent la musique
@translationof Voices contain music
-Les chanteurs utilisent leur voix pour chanter ; il en va de même pour
-LilyPond. En fait, la musique de chacun des instruments d'une partition
-est contenue dans des voix (@emph{Voices} en anglais) et qui se trouvent
-être le concept fondamental de LilyPond.
+Les chanteurs utilisent leur voix pour chanter@tie{}; il en va de même
+pour LilyPond. En fait, la musique de chacun des instruments d'une
+partition est contenue dans des voix (@emph{Voices} en anglais) et qui
+se trouvent être le concept fondamental de LilyPond.
@menu
-* J'entends des Voix::
-* Instanciation explicite des voix::
-* Voix et paroles::
+* J'entends des Voix::
+* Instanciation explicite des voix::
+* Voix et paroles::
@end menu
@node J'entends des Voix
notes et rythmes différents.
Si une voix unique peut tout à fait contenir plusieurs notes dans un
-accord, à partir de quand aurons-nous vraiment besoin de plusieurs
-voix ? Considérons déjà ces quatre accords :
+accord, à partir de quand aurons-nous vraiment besoin de plusieurs
+voix@tie{}? Considérons déjà ces quatre accords@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
\key g \major
<d g>4 <d fis> <d a'> <d g>
@end lilypond
-Nous exprimons ici chacun des accords par l'utilisation de
+Nous exprimons ici chacun des accords par l'utilisation de
chevrons gauche et droite simples, @w{@code{< ... >}}, puisque nous
n'avons besoin que d'une seule voix. Supposons maintenant que le fa
dièse soit une croche, suivie d'un sol croche -- une note de passage
-vers le la ? Nous avons alors deux notes qui débutent au même moment,
-mais dont la durée est différente : un ré noire et un fa dièse croche.
-Comment coder cela ? Dans la mesure où toutes les notes d'un accord
-doivent avoir la même durée, nous ne pouvons pas écrire un accord. Nous
-ne pouvons pas non plus écrire deux notes séparées, puisqu'elles
-débutent en même temps. Nous avons alors besoin de deux voix.
+vers le la@tie{}? Nous avons alors deux notes qui débutent au même
+moment, mais dont la durée est différente@tie{}: un ré noire et un fa
+dièse croche. Comment coder cela@tie{}? Dans la mesure où toutes les
+notes d'un accord doivent avoir la même durée, nous ne pouvons pas
+écrire un accord. Nous ne pouvons pas non plus écrire deux notes
+séparées, puisqu'elles débutent en même temps. Nous avons alors besoin
+de deux voix.
Voyons comment cela se pratique selon la grammaire de LilyPond.
d'une pièce ne comportant que quelques courts passages de polyphonie.
Voici comment éclater les accords en deux voix, avec la note de passage
-et la liaison :
+et la liaison@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
\key g \major
Le recours à une construction @code{<< \\ >>} particulière à chaque
mesure n'est pas nécessaire. Bien qu'on y gagne en lisibilité si chaque
mesure ne contient que quelques notes, il est plus judicieux de
-carrément séparer chaque voix :
+carrément séparer chaque voix@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
\key d \minor
notes en dehors de la construction @code{<<...>>} -- que nous
appellerons @emph{construction simultanée}. Les liaisons, de
prolongation ou non, ne peuvent relier des notes que si elles
-appartiennent à la même voix ; elles ne peuvent ni pénétrer une
+appartiennent à la même voix@tie{}; elles ne peuvent ni pénétrer une
contruction simultanée, ni en sortir. Inversement, les voix parallèles
issues de constructions simultanées apparaissant sur une même portée
appartiennent à la même voix. Les autres propriétés liées au contexte
permettre une meilleure distinction entre les différentes voix. La
première voix comporte des têtes en losange rouge, la deuxième en
triangle bleu, la troisième en cercle barré vert, la quatrième (non
-utilisée ici) en croix magenta ; @code{\voiceNeutralStyle} (non utilisé
-ici) revient au style par défaut. Nous verrons plus tard comment créer
-de telles commandes.
+utilisée ici) en croix magenta@tie{}; @code{\voiceNeutralStyle} (non
+utilisé ici) revient au style par défaut. Nous verrons plus tard
+comment créer de telles commandes.
Voir @ref{Visibilité et couleur des objets} et
@ref{Utilisation de variables dans les retouches}.
@code{noteC} @*
@code{noteE} est relative à @code{noteD}, pas à @code{noteA}
-Une méthode alternative, et qui peut simplifier les choses si les notes
+Une méthode alternative, et qui peut simplifier les choses si les notes
des différentes voix sont espacées, consiste à placer une commande
-@code{\relative} au début de chacune des voix :
+@code{\relative} au début de chacune des voix@tie{}:
@example
\relative c' @{ noteA ... @}
La direction des hampes sert souvent à indiquer dans la continuité deux
lignes mélodiques simultanées. Ici, les hampes des notes les plus
hautes vont vers le haut, et celles des notes plus basses vers le
-bas. C'est une première indication de ce que nous avons eu recours à plus
-d'une voix.
+bas. C'est une première indication de ce que nous avons eu recours à
+plus d'une voix.
Mais le réel besoin de multiples voix se fait sentir dès lors que
plusieurs notes qui débutent en même temps ont des durées différentes.
-C'est évident au troisième temps de la première mesure : le la bémol est
-une noire pointée, le fa une noire, et le ré bémol une blanche. On ne
-peut les grouper dans un accord, puisque toutes les notes composant un
-accord doivent être de même durée. On ne peut non plus les écrire
-séquentiellement, puisqu'elles débutent toutes au même instant. Ce
-fragment de mesure nécessite trois voix, et une bonne pratique voudrait
-que l'intégralité de la mesure soit sur trois voix, comme ci-dessous où
-nous avons une allure et une couleur différentes aux notes de chacune
-d'entre elles. Une fois de plus, nous reviendrons plus tard sur le code
-que vous ne comprendriez pas.
+C'est évident au troisième temps de la première mesure@tie{}: le la
+bémol est une noire pointée, le fa une noire, et le ré bémol une
+blanche. On ne peut les grouper dans un accord, puisque toutes les
+notes composant un accord doivent être de même durée. On ne peut non
+plus les écrire séquentiellement, puisqu'elles débutent toutes au même
+instant. Ce fragment de mesure nécessite trois voix, et une bonne
+pratique voudrait que l'intégralité de la mesure soit sur trois voix,
+comme ci-dessous où nous avons une allure et une couleur différentes aux
+notes de chacune d'entre elles. Une fois de plus, nous reviendrons plus
+tard sur le code que vous ne comprendriez pas.
@c The following should appear as music without code
@c The three voice styles should be defined in -init
Essayons à présent de coder cette musique en partant de zéro. Comme
nous le verrons, certaines difficultés vont se présenter. Partons de ce
-que nous avons appris : utilisons la construction @code{<< \\ >>} pour
-saisir la première mesure dans trois voix :
+que nous avons appris@tie{}: utilisons la construction
+@code{<<@tie{}\\@tie{}>>} pour saisir la première mesure dans trois
+voix@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right]
\new Staff \relative c'' {
@cindex voix et direction des hampes
@cindex direction des hampes et voix
-La direction des hampes est attribuée automatiquement : les voix
+La direction des hampes est attribuée automatiquement@tie{}: les voix
impaires portent des hampes vers le haut, les voix paires des hampes
vers le bas. Les hampes des voix 1 et 2 sont orientées comme il faut
mais celles de la voix 3 devraient, dans le cas qui nous occupe, aller
vers le bas. Nous pouvons corriger cela en sautant la voix 3 et en
-plaçant la musique dans la voix 4 grâce à un @code{\\} supplémentaire :
+plaçant la musique dans la voix 4 grâce à un @code{\\}
+supplémentaire@tie{}:
@lilypond[quote,verbatim,fragment,ragged-right]
\new Staff \relative c'' {
note des autres voix. En matière de mise en forme des notes, LilyPond
tolère que des notes ou accords appartenant à deux voix se retrouvent
dans le même empilement de notes (@emph{note column} en anglais) si tant
-est que ces hampes vont dans des directions opposées ; néanmoins les
+est que ces hampes vont dans des directions opposées@tie{}; néanmoins les
notes des troisième et quatrième voix seront décalées si nécessaire pour
éviter que les têtes ne se chevauchent. Cela marche plutôt bien mais,
dans notre exemple, les notes de la voix la plus basse ne sont vraiment
@seealso
-Manuel de notation : @ruser{Plusieurs voix}.
+Manuel de notation :
+@ruser{Plusieurs voix}.
@node Instanciation explicite des voix
affecter un nom plus parlant.
En particulier, la construction @code{<< \\ >>} que nous avons vue
-précédemment :
+précédemment@tie{}:
@example
\new Staff @{
Dans certaines circonstances de polyphonie complexe, vous pourrez être
amené à recourir à une voix temporaire, ce qui peut être une manière
-plus naturelle de saisir la musique :
+plus naturelle de saisir la musique@tie{}:
@lilypond[quote,ragged-right,verbatim]
\new Staff \relative c' {
Cette manière de brièvement imbriquer des voix est bien utile pour de
courts fragments de musique polyphonique. Mais lorsqu'une portée est
très souvent polyphonique, on peut y gagner en clarté si l'on utilise
-plusieurs voix sur l'ensemble de cette portée et que l'on positionne des
+plusieurs voix sur l'ensemble de cette portée et que l'on positionne des
silences invisibles pour sauter les moments où il n'y a rien dans cette
-voix.
+voix.
@lilypond[quote,ragged-right,verbatim]
\new Staff \relative c' <<
Les notes rapprochées d'un accord, ou des notes de différentes voix qui
tombent ensemble, seront rangées sur deux colonnes, voire plus, pour
palier d'éventuels chevauchements des têtes. On appelle cela des
-empilements de notes. Chaque voix dispose de plusieurs empilements, et
+empilements de notes. Chaque voix dispose de plusieurs empilements, et
l'attribution d'un décalage à une voix en particulier s'appliquera à
l'empilement en question s'il y avait risque de collision.
Nous en avons une illustration à la deuxième mesure de l'exemple
-ci-dessus : le do de la deuxième voix est décalé à droite du ré de la
-première voix et, dans l'accord final, le do de la troisième voix est
+ci-dessus@tie{}: le do de la deuxième voix est décalé à droite du ré de
+la première voix et, dans l'accord final, le do de la troisième voix est
lui aussi décalé à droite des autres notes.
-Les commandes @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, et
+Les commandes @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, et
@code{\shiftOff} spécifient le degré nécessaire de décalage qui sera
appliqué aux notes ou accords de la voix en question afin d'éviter une
collision. Par défaut, les voix extérieures -- normalement les
@seealso
-Manuel de notation : @ruser{Plusieurs voix}.
+Manuel de notation :
+@ruser{Plusieurs voix}.
@node Voix et paroles
@subsection Voix et paroles
@translationof Voices and vocals
-La musique vocale est une gageure en soi : il nous faut combiner deux
+La musique vocale est une gageure en soi@tie{}: il nous faut combiner deux
expressions différentes -- des notes et des paroles.
@funindex \new Lyrics
gérer des partitions simples. Cette technique est cependant
relativement limitée. Pour de la musique un peu plus compliquée, il
vous faudra contenir les paroles dans un contexte @code{Lyrics}, créé
-par la commande @code{\new Lyrics} ; vous relierez ensuite ces paroles
-aux notes grâce à la commande @code{\lyricsto@{@}} et au nom assigné à
-la voix en question.
+par la commande @code{\new Lyrics}@tie{}; vous relierez ensuite ces
+paroles aux notes grâce à la commande @code{\lyricsto@{@}} et au nom
+assigné à la voix en question.
@lilypond[quote,verbatim,fragment]
<<
est pleinement adaptée en matière de musique instrumentale, il
n'en va pas de même dans le cas d'une musique associée à des paroles,
et pour laquelle soit les ligatures sont carrément absentes, soit elles
-servent à indiquer un mélisme -- plusieurs notes pour une même syllabe.
+servent à indiquer un mélisme -- plusieurs notes pour une même syllabe.
Dans l'exemple qui suit, nous utilisons la commande @code{\autoBeamOff}
afin de désactiver les ligatures automatiques.
Nous allons reprendre un extrait de Judas Maccabæus pour illustrer ce
que cette technique apporte en flexibilité. Nous commençons par
-utiliser des variables afin de séparer de la structure de la portée
+utiliser des variables afin de séparer de la structure de la portée
aussi bien la musique que les paroles. Nous ajoutons par la même
occasion un crochet spécifique aux portées pour chœur
(@code{ChoirStaff}). Quant aux blocs de paroles, nous les faisons
peut y ajouter d'autres portées si besoin est, d'autres voix à
chaque portée, plusieurs couplets aux paroles, et les variables
contenant la musique peuvent même être stockées dans des fichiers
-indépendants dès lors que leur longueur devient conséquente.
+indépendants dès lors que leur longueur devient conséquente.
@cindex structure d'hymne
@cindex SATB, structure
Commençons par ouvrir un bloc @code{score} qui contiendra un
@code{ChoirStaff}, puisque nous aimerions voir un crochet au début du
système choral. Nous devrions avoir, après @code{\new ChoirStaff}, un
-double chevron gauche pour synchroniser les portées ; mais comme nous
+double chevron gauche pour synchroniser les portées@tie{}; mais comme nous
reportons le parallélisme après le solo, nous utilisons des accolades --
un double chevron ne serait cependant pas génant. À l'intérieur du
@code{ChoirStaff}, nous voulons en premier la portée avec le couplet.
Puisqu'elle englobe parallèlement des notes et des paroles, nous devons
encadrer les @code{\new Voice} et @code{\new Lyrics} de doubles
-chevrons gauche/droite pour les faire démarrer de concert :
+chevrons gauche/droite pour les faire démarrer de concert@tie{}:
@lilypond[quote,verbatim,ragged-right]
versenotes = \relative c'' {
la suite du @code{\break} de la voix contenant le couplet -- il s'agit
bien de la @emph{même} voix. Voici cette section parallèle. On
pourrait tout à fait ajouter encore d'autres portées ici, toujours de la
-même manière.
+même manière.
@example
<<
Et voici le résultat final, avec ses deux portées pour la partie
chorale, et qui montre comment la section en parallèle s'enchaîne avec
-la voix du couplet :
+la voix du couplet@tie{}:
@lilypond[quote,verbatim, ragged-right]
versenotes = \relative c'' {
Bien que ce que nous venons de voir constitue un exercice intéressant et
fort utile pour comprendre comment s'articulent des blocs séquentiels et
simultanés, nous aurions aussi pu coder notre exemple sous la forme de
-deux blocs @code{\score} au sein d'un bloc @code{\book} implicite :
+deux blocs @code{\score} au sein d'un bloc @code{\book} implicite@tie{}:
@lilypond[quote,verbatim,ragged-right]
versenotes = \relative c'' {
@seealso
-Manuel de notation : @ruser{Musique vocale}.
+Manuel de notation :
+@ruser{Musique vocale}.
@node Contextes et graveurs
@translationof Contexts and engravers
Nous avons évoqué rapidement les contextes et graveurs dans les chapitres
-précédents ; examinons en détail ces concepts essentiels à la
+précédents@tie{}; examinons en détail ces concepts essentiels à la
maîtrise de LilyPond.
@menu
-* Tout savoir sur les contextes::
-* Création d'un contexte::
-* Tout savoir sur les graveurs::
-* Modification des propriétés d'un contexte::
-* Ajout et suppression de graveurs::
+* Tout savoir sur les contextes::
+* Création d'un contexte::
+* Tout savoir sur les graveurs::
+* Modification des propriétés d'un contexte::
+* Ajout et suppression de graveurs::
@end menu
@node Tout savoir sur les contextes
Imprimer de la musique impose d'ajouter un certain nombre d'éléments de
notation. Par exemple, voici un fragment de partition, précédé du code
-qui l'engendre :
+qui l'engendre@tie{}:
@lilypond[quote,verbatim,relative=2,fragment]
cis4 cis2. g4
Si le code est assez austère, dans la partition ont été ajoutés un
chiffre de mesure, des barres de mesure, des altérations et une clé.
-Pour une bonne raison : LilyPond @emph{interprète} le code. Il le
+Pour une bonne raison@tie{}: LilyPond @emph{interprète} le code. Il le
compulse dans l'ordre chronologique, de même qu'on lit une partition de
-gauche à droite ; et pendant ce traitement, le logiciel garde en
+gauche à droite@tie{}; et pendant ce traitement, le logiciel garde en
mémoire les limites des mesures, ou encore quelles hauteurs de note
demandent des altérations accidentelles. Ces informations se présentent
-à plusieurs niveaux : ainsi, une altération n'a d'effet que sur une
+à plusieurs niveaux@tie{}: ainsi, une altération n'a d'effet que sur une
seule portée, tandis qu'une barre de mesure doit être synchronisée sur
toute l'étendue verticale de la partition.
LilyPond regroupe ces règles et ces fragments d'information dans des
@emph{Contextes}. Certains contextes sont les voix (contexte @code{Voice}),
les portées (contexte @code{Staff}), ou la partition dans son ensemble
-(contexte @code{Score}). Ils sont ordonnés hiérarchiquement : ainsi un
-contexte @code{Staff} peut contenir plusieurs contextes
+(contexte @code{Score}). Ils sont ordonnés hiérarchiquement@tie{}:
+ainsi un contexte @code{Staff} peut contenir plusieurs contextes
@code{Voice}, et un contexte @code{Score} peut contenir plusieurs
contextes @code{Staff}.
@sourceimage{context-example,5cm,,}
@end quotation
-Chaque contexte est chargé de faire appliquer certaines règles de gravure,
-de créer certains objets, et de prendre en compte les propriétés qui leur
-sont associées. Ainsi, le contexte @code{Voice} peut faire intervenir une
-altération accidentelle, puis le contexte @code{Staff} devra déterminer s'il
-faudra imprimer ou non cette dernière dans la suite de la mesure.
+Chaque contexte est chargé de faire appliquer certaines règles de
+gravure, de créer certains objets, et de prendre en compte les
+propriétés qui leur sont associées. Ainsi, le contexte @code{Voice}
+peut faire intervenir une altération accidentelle, puis le contexte
+@code{Staff} devra déterminer s'il faudra imprimer ou non cette dernière
+dans la suite de la mesure.
-Les barres de mesure, quant à elles, sont alignées verticalement grâce au
-contexte @code{Score} par défaut.
+Les barres de mesure, quant à elles, sont alignées verticalement grâce
+au contexte @code{Score} par défaut.
En revanche, dans une musique polymétrique, par exemple mêlant une
portée à 3/4 et une autre à 4/4, les barres de mesures n'ont plus à être
-alignées : il faut alors modifier les comportement par défaut des
+alignées@tie{}: il faut alors modifier les comportement par défaut des
contextes @code{Score} et @code{Staff}.
Dans une partition très simple, les contextes sont créés implicitement
devient extrêment utile.
En plus des contextes @code{Score}, @code{Staff} et @code{Voice} sont
-disponibles d'autres contextes intermédiaires entre les niveaux
+disponibles d'autres contextes intermédiaires entre les niveaux
partition et portée, chargés de gérer certains regroupement, tels que
@code{PianoStaff} ou @code{ChoirStaff}. Vous disposez aussi d'autres
contextes de portée ou de voix alternatifs, ainsi que des contextes
@seealso
-Manuel de notation : @ruser{Tout savoir sur les contextes}.
+Manuel de notation :
+@ruser{Tout savoir sur les contextes}.
@node Création d'un contexte
@cindex nouveaux contextes
@cindex contextes, création de
-Il en va des contextes comme de toute hiérarchie : il faut un sommet --
+Il en va des contextes comme de toute hiérarchie@tie{}: il faut un sommet --
le contexte @code{Score} en l'occurence. La commande @code{\score} est
chargée de le créer, mais pour des partitions simples, il le sera
automatiquement. Le bloc @code{score} contient donc une expression
@code{\layout} pour du visuel ou @code{\midi} pour de l'acoustique.
Lorsqu'une partition ne comporte qu'une voix et une seule portée, vous
-pouvez laisser LilyPond créer automatiquement les contextes @code{Voice}
-et @code{Staff} ; mais leur présence explicite devient indispensable dès
-que la situation se complique.
+pouvez laisser LilyPond créer automatiquement les contextes @code{Voice}
+et @code{Staff}@tie{}; mais leur présence explicite devient indispensable dès
+que la situation se complique.
Le moyen le plus simple est d'utiliser la commande @code{\new}. Elle
-doit intervenir avant une expression musicale, ainsi :
+doit intervenir avant une expression musicale, ainsi@tie{}:
@example
\new @var{type} @var{expression-musicale}
@noindent
où @var{type} correspond au nom du contexte (tels @code{Staff} ou
-@code{Voice}). Cette commande crée un nouveau contexte, puis
+@code{Voice}). Cette commande crée un nouveau contexte, puis
interprète l'@var{expression-musicale} contenue dans ledit
-contexte.
+contexte.
Notez bien que la commande @code{\new Score} n'est pas obligatoire,
puisque le contexte premier que constitue @code{Score} est créé
@code{\new score} est lorsqu'il comprendra un bloc @code{\with} aux fins
de stipuler les propriétés de certains contextes qui s'appliqueront à
l'ensemble de la partition. Vous trouverez plus dinformation sur
-l'utilisation des blocs @code{\with} au chapitre
-@ref{Modification des propriétés d'un contexte}.
+l'utilisation des blocs @code{\with} au chapitre
+@ref{Modification des propriétés d'un contexte}.
Nous avons déjà vu au cours des chapitres précédents de nombreux
exemples où des contextes @code{Staff} ou @code{Voice} étaient créés au
besoin. Dans un but didactique, voici maintenant une application
-complète et abondamment commentée :
+complète et abondamment commentée@tie{}:
@lilypond[quote,verbatim,ragged-right]
\score { % start of single compound music expression
@cindex nommage des contextes
La commande @code{\new} peut aussi permettre de nommer le contexte créé,
-et ainsi le distinguer des autres contextes déjà existants :
+et ainsi le distinguer des autres contextes déjà existants@tie{}:
@example
\new @var{type} = @var{"UnNom"} @var{expression-musicale}
lettres au bon gré de l'utilisateur -- permettant d'identifier une
instance particulière du type en question. Vous pouvez utiliser des
chiffres et espaces, à la stricte condition d'englober le tout dans des
-guillemets ; l'identificateur suivant est tout à fait valide :
-@w{@code{\new Staff = "MaPortee 1" @var{expression-musicale}}}.
-Comme nous l'avons déjà vu dans le chapitre consacré aux paroles
+guillemets@tie{}; l'identificateur suivant est tout à fait valide@tie{}:
+@w{@code{\new Staff = "MaPortee 1" @var{expression-musicale}}}.
+Comme nous l'avons déjà vu dans le chapitre consacré aux paroles
(@ref{Voix et paroles}), cet identifiant permettra ensuite de se
-référer à ce contexte particulier.
+référer à ce contexte particulier.
@seealso
-Manuel de notation : @ruser{Création d'un contexte}.
+Manuel de notation :
+@ruser{Création d'un contexte}.
@node Tout savoir sur les graveurs
produit par un graveur (@emph{engraver} en anglais). Ainsi, il y en a
un qui imprime les portées, un autre les têtes de note, un autre les
hampes, un autre encore pour les ligatures, etc. LilyPond dispose de
-plus de 120 graveurs ! La plupart des partitions ne requièrent de
+plus de 120 graveurs@tie{}! La plupart des partitions ne requièrent de
s'intéresser qu'à quelques-uns seulement, et pour des partitions
simples, vous n'aurez même pas à vous en préoccuper.
Les graveurs résident et opèrent au sein des contextes.
-Les graveurs tels que le @code{Metronome_mark_engraver}, dont les effets
+Les graveurs tels que le @code{Metronome_mark_engraver}, dont les effets
s'appliquent à la partition dans son intégralité, opèrent au sein du
-contexte de plus haut niveau -- le contexte @code{Score}.
+contexte de plus haut niveau -- le contexte @code{Score}.
Les graveurs @code{Clef_engraver} et @code{Key_engraver} seront logés
-dans chacun des contextes @code{Staff} ; deux portées peuvent requérir
+dans chacun des contextes @code{Staff}@tie{}; deux portées peuvent requérir
des clefs et des armures différentes.
Les graveurs @code{Note_heads_engraver} et @code{Stem_engraver} résident
@seealso
-Référence des propriétés internes :
+Référence des propriétés internes :
@rinternals{Engravers and Performers}.
Les contextes gèrent les différentes valeurs des nombreuses
@emph{propriétés} qui leur sont attachées. Beaucoup d'entre elles
sont susceptibles d'être modifiées afin d'influer sur l'interprétation
-de l'input et ainsi changer l'apparence du résultat. On les modifie
-grâce à la commande @code{\set}, qui s'utilise ainsi :
+de l'input et ainsi changer l'apparence du résultat. On les modifie
+grâce à la commande @code{\set}, qui s'utilise ainsi@tie{}:
@example
\set @emph{ContexteNommé}.@emph{propriétéNommée} = #@emph{valeur}
un nombre entier positif, un réel est un nombre décimal positif ou
négatif, et texte correspond à une suite de caractères encadrée par des
apostrophes doubles. Attention à la présence des signes dièse
-(@code{#}) dans deux cas particuliers : ils sont partie intégrante des
+(@code{#}) dans deux cas particuliers@tie{}: ils sont partie intégrante des
valeurs boléennes et précèdent les @code{t} ou @code{f}, mais doivent
aussi précéder @emph{valeur} dans le libellé de la commande @code{\set}.
Il faudra donc, dans le cas d'une valeur boléenne, ne pas oublier de
@code{instrumentName} du contexte de voix. Puisque LilyPond n'ira pas
chercher une telle propriété dans le contexte @code{Voice}, celle-ci ne
sera pas interprétée. Il ne s'agit pas d'une erreur, aucun message
-d'erreur ne sera ni émis ni enregistré.
+d'erreur ne sera ni émis ni enregistré.
De la même manière, une faute d'orthographe dans le nom de la propriété
ne génèrera aucun message d'erreur et l'action escomptée ne se produira
est inconnu de LilyPond, rien ne se passera. Certains éditeurs de texte
disposent d'une prise en charge spécifique aux fichiers source LilyPond,
à l'instar de LilyPondTool couplé à JEdit et qui documente les noms des
-propriétés dans une infobulle lorsque vous les survolez à la souris, ou
+propriétés dans une infobulle lorsque vous les survolez à la souris, ou
les souligne différemment s'ils sont inconnus, comme ConTEXT. Dans le
cas où votre éditeur ne dispose pas de ces fonctionnalités, nous vous
recommandons de vérifier le nom des propriétés que vous manipulez dans
-le Manuel de références internes -- voir
+le Manuel de références internes -- voir
@rinternals{Tunable context properties}, ou @rinternals{Contexts}.
La propriété @code{instrumentName} ne sera prise en compte que si elle
-est définie dans un contexte @code{Staff} ; d'autres propriétés peuvent
+est définie dans un contexte @code{Staff}@tie{}; d'autres propriétés peuvent
par contre être définies dans plusieurs contextes différents. C'est le
cas de la propriété @code{extraNatural} qui est définie par défaut à
@code{##t} (vrai) pour toutes les portées. Si vous lui attribuez la
valeur @code{##f} (faux) dans un contexte @code{Staff} particulier, elle
-ne s'appliquera qu'aux altérations de la portée en question ; si vous
+ne s'appliquera qu'aux altérations de la portée en question@tie{}; si vous
lui attribuez la valeur @qq{faux} au niveau du contexte @code{Score},
cela s'appliquera alors à toutes les portées.
-Voici comment supprimer les bécarres supplémentaires pour une portée :
+Voici comment supprimer les bécarres supplémentaires pour une portée@tie{}:
@lilypond[quote,verbatim,ragged-right]
<<
Autre exemple, si la propriété @code{clefOctavation} est déterminée au
niveau du contexte @code{Score}, elle modifiera la valeur de l'octave en
-cours pour toutes les portées actives ; cette valeur sera considérée
+cours pour toutes les portées actives@tie{}; cette valeur sera considérée
comme étant la nouvelle valeur par défaut pour toutes les portées à
venir.
-La commande opposée, @code{\unset}, efface la propriété du contexte ; la
+La commande opposée, @code{\unset}, efface la propriété du contexte@tie{}; la
plupart des propriétés reviennent de ce fait à leur valeur par défaut.
En règle générale, la commande @code{\unset} n'est pas nécessaire dès
lors que vous faites appel à une nouvelle commande @code{\set} pour
@code{\new}, vous pouvez la faire suivre immédiatement d'un bloc
@w{@code{\with @{ .. @}}} qui contiendra les réglages des différentes
propriétés. Ainsi, si nous voulions par exemple annuler l'impression des
-bécarres supplémentaires sur la durée d'une portée, nous écririons :
+bécarres supplémentaires sur la durée d'une portée, nous écririons@tie{}:
@example
\new Staff \with @{ extraNatural = ##f @}
Dans le cas où ces ajustements de propriété doivent affecter
toutes les portées de la partition, nous utiliserons alors
-l'instruction @code{\new Score}, comme ici :
+l'instruction @code{\new Score}, comme ici@tie{}:
@lilypond[quote,verbatim,ragged-right]
\score {
@end lilypond
Les propriétés réglées de cette manière peuvent néanmoins être modifiées
-de façon dynamique grâce à @code{\set} ; un @code{\unset} les ramènera à
+de façon dynamique grâce à @code{\set}@tie{}; un @code{\unset} les ramènera à
leur valeur par défaut.
@cindex fontSize, valeur par défaut et réglage
-La propriété @code{fontSize} constitue une exception : lorsqu'elle est
+La propriété @code{fontSize} constitue une exception@tie{}: lorsqu'elle est
déterminée au sein d'un bloc @code{\with}, cela redéfinit la valeur par
défaut de la taille de fonte. Une modification est possible par la
commande @code{\set}, mais la commande @code{\unset fontSize} fera
@code{\context} inclus dans un bloc @code{\layout}. Chaque bloc
@code{\context} affectera tous les contextes concernés par le bloc
@code{\score} ou @code{\book} au sein duquel apparaît ce bloc
-@code{\layout}. Voici comment le mettre en place :
+@code{\layout}. Voici comment le mettre en place@tie{}:
@lilypond[verbatim,quote]
\score {
@seealso
-Manuel de notation :
+Manuel de notation :
@ruser{Modification des réglages par défaut d'un contexte},
@c uncomment when backslash-node-name issue is resolved -pm
@c @ruser{La commande de fixation (set)}.
-Référence des propriétés internes :
+Référence des propriétés internes :
@rinternals{Contexts},
@rinternals{Tunable context properties}.
@cindex ambitus, graveur
Vous pouvez aussi ajouter individuellement un graveur à un contexte. La
-commande se formule ainsi :
+commande se formule ainsi@tie{}:
@code{\consists @var{Nom_du_graveur}}
d'indiquer ses notes extrêmes. L'ambitus est généré par
l'@code{Ambitus_engraver}, que l'on peut adjoindre à n'importe quel
contexte. Si nous l'ajoutons au contexte @code{Voice}, seule la
-tessiture de cette voix sera calculée :
+tessiture de cette voix sera calculée@tie{}:
@lilypond[quote,verbatim,ragged-right]
\new Staff <<
@noindent
alors que si nous l'ajoutons au contexte @code{Staff},
l'@code{Ambitus_engraver} calculera l'écart maximal à partir de toutes
-les notes de toutes les voix de la portée :
+les notes de toutes les voix de la portée@tie{}:
@lilypond[quote,verbatim,ragged-right]
\new Staff \with {
supprimer des graveurs à tous les contextes d'un même type en insérant
les commandes pour le contexte approprié au sein d'un bloc
@code{\layout}. Si nous voulions afficher un ambitus pour chacune des
-portées d'un système à quatre portées, il nous suffirait d'écrire :
+portées d'un système à quatre portées, il nous suffirait d'écrire@tie{}:
@lilypond[quote,verbatim,ragged-right]
\score {
@seealso
-Manuel de notation : @ruser{Modification des greffons de contexte},
+Manuel de notation :
+@ruser{Modification des greffons de contexte},
@ruser{Modification des réglages par défaut d'un contexte}.
@translationof Extending the templates
Bon, vous avez lu le tutoriel, vous savez écrire de la musique. Mais
-comment obtenir les portées que vous voulez ? Les @ref{Modèles},
+comment obtenir les portées que vous voulez@tie{}? Les @ref{Modèles},
c'est bien beau, mais que faire quand ils ne traitent pas ce que l'on
-veut précisément ?
+veut précisément@tie{}?
Les exemples qui suivent vous donneront des méthodes générales pour
adapter des modèles.
@menu
-* Soprano et violoncelle::
-* Partition pour chœur à quatre voix mixtes::
-* Écriture d'une partition à partir de zéro::
-* Économie de saisie grâce aux identificateurs et fonctions::
-* Conducteurs et parties::
+* Soprano et violoncelle::
+* Partition pour chœur à quatre voix mixtes::
+* Écriture d'une partition à partir de zéro::
+* Économie de saisie grâce aux identificateurs et fonctions::
+* Conducteurs et parties::
@end menu
@node Soprano et violoncelle
Commencez par le modèle qui vous semblera le plus proche de ce à quoi
vous voulez aboutir. Disons par exemple que vous voulez écrire une pièce
-pour soprano et violoncelle : dans ce cas, on pourrait commencer par les
+pour soprano et violoncelle@tie{}: dans ce cas, on pourrait commencer par les
@qq{notes et paroles}, pour la partie de soprano.
@example
@end example
Maintenant, on veut ajouter une partie de violoncelle.
-Jetons un coup d'œil sur l'exemple avec les notes seules :
+Jetons un coup d'œil sur l'exemple avec les notes seules@tie{}:
@example
\version @w{"@version{}"}
On n'a pas besoin de deux commandes @code{\version}. Ce dont on a
besoin, c'est de la section @code{melodie}. De même, on n'a pas besoin
de deux sections @code{\score} -- si nous les gardions toutes les deux,
-on obtiendrait deux parties séparées ; mais nous voulons un vrai duo,
+on obtiendrait deux parties séparées@tie{}; mais nous voulons un vrai duo,
avec les deux parties ensemble. Dans la section @code{\score}, on n'a
pas besoin non plus de deux @code{\layout} ni de deux @code{\midi}.
Si on se contente de couper et coller les sections @code{melodie}, on se
-retrouvera avec deux sections de ce nom ; il nous faut donc les renommer.
+retrouvera avec deux sections de ce nom@tie{}; il nous faut donc les renommer.
Appelons la section pour la soprano @code{sopranoMusique} et celle pour le
-violoncelle @code{violoncelleMusique}. Tant qu'on y est, renommons
+violoncelle @code{violoncelleMusique}. Tant qu'on y est, renommons
@code{texte} en @code{sopranoParoles}. Attention à bien renommer les
-deux occurrences de chacune de ces dénominations : c'est-à-dire la
+deux occurrences de chacune de ces dénominations@tie{}: c'est-à-dire la
définition de départ, où l'on trouve @w{@code{melodie = \relative c' @{ }},
-et l'endroit où cette dénomination est utilisée, dans la section
+et l'endroit où cette dénomination est utilisée, dans la section
@code{\score}.
Et puis, toujours tant qu'on y est, mettons le violoncelle en clé de fa,
Voilà qui est mieux, mais la partie de violoncelle n'apparaît pas sur
la partition -- en effet, nous n'y avons pas fait appel dans la section
@code{\score}. Si l'on veut que la partie de violoncelle s'imprime sous
-la partie de soprano, on va devoir ajouter :
+la partie de soprano, on va devoir ajouter@tie{}:
@example
\new Staff \musiqueVioloncelle
@end example
@noindent
-C'est un peu le bazar dans tout ça ; mais il vous sera facile de
+C'est un peu le bazar dans tout ça@tie{}; mais il vous sera facile de
mettre un peu d'ordre dans l'indentation. Voici le modèle pour
-soprano et violoncelle au complet :
+soprano et violoncelle au complet@tie{}:
@lilypond[quote,verbatim,ragged-right,addversion]
sopranoMusic = \relative c' {
@seealso
Les patrons originaux sont disponibles à l'annexe @qq{Modèles}, voir
-@ref{Portée unique}.
+@ref{Portée unique}.
@node Partition pour chœur à quatre voix mixtes
la musique et les paroles du chœur sur quatre portées -- soprano, alto,
ténor et basse -- surmontant une réduction pour piano de
l'accompagnement orchestral. En voici un exemple, tiré du Messie de
-Haendel :
+Haendel@tie{}:
@c The following should appear as music without code
@lilypond[quote,ragged-right]
du modèle ne correspond pas à ce que nous voyons ci-dessus. Il nous
faudra y revenir pour obtenir quatre portées avec des paroles en dessous
de chacune d'elles. Toutes les voix devraient être @code{\voiceOne},
-ce qui est la position par défaut ; il nous faudra donc éliminer toutes
+ce qui est la position par défaut@tie{}; il nous faudra donc éliminer toutes
les commandes @code{\voiceXXX}. Les ténors auront besoin d'une clé
spécifique. Enfin, nous n'avons pas encore abordé la façon dont les
-paroles sont présentées dans le modèle ; nous procèderons donc comme
+paroles sont présentées dans le modèle@tie{}; nous procèderons donc comme
nous en avons l'habitude. Il faudra aussi ajouter un nom à chaque portée.
-Une fois tout ceci accompli, voici notre @code{ChoirStaff} :
+Une fois tout ceci accompli, voici notre @code{ChoirStaff}@tie{}:
@example
\new ChoirStaff <<
Il nous faut maintenant nous occuper de la partie de piano. Nous allons
nous contenter de récupérer la partie de piano du modèle
-@qq{Solo piano} :
+@qq{Solo piano}@tie{}:
@example
\new PianoStaff <<
@end example
puis d'ajouter les définitions de variable pour @code{superieur} et
-@code{inferieur}.
+@code{inferieur}.
Les systèmes pour chœur et pour piano doivent être combinés à l'aide de
-doubles chevrons gauche/droite puisqu'ils doivent s'empiler :
+doubles chevrons gauche/droite puisqu'ils doivent s'empiler@tie{}:
@example
<< % combine ChoirStaff et PianoStaff l'un au-dessus de l'autre
@end example
Une fois tout cela mis en place, et après avoir ajouté les notes et les
-paroles de ces trois mesures du Messie, nous obtenons :
+paroles de ces trois mesures du Messie, nous obtenons@tie{}:
@lilypond[quote,verbatim,ragged-right,addversion]
global = { \key d \major \time 4/4 }
particulièrement. Pour voir comment procéder, nous allons monter la
partition d'un prélude pour orgue.
-Nous débutons par une section d'en-tête ; nous y mettrons entre autres
+Nous débutons par une section d'en-tête@tie{}; nous y mettrons entre autres
le titre et le nom du compositeur. Puis viennent toutes les définitions
de toutes les variables. Nous terminons par le bloc @code{\score}.
Attelons-nous pour cette aventure, en gardant bien à l'esprit ce que
-nous venons de dire ; nous nous occuperons des détails en temps voulu.
+nous venons de dire@tie{}; nous nous occuperons des détails en temps voulu.
Nous nous appuyons sur les deux premières mesures du prélude sur
@emph{Jesu, meine Freude}, écrit pour orgue avec pédalier. Vous pouvez
voir ces deux mesures au bas de cette page. La main droite comporte
deux voix, la main gauche et le pédalier une seule. Il nous faut donc
quatre définitions de musique, plus une qui contiendra la métrique et
-l'armure :
+l'armure@tie{}:
@example
\version @w{"@version{}"}
>> % fin du contexte de portée ManuelUn
\new Staff = "ManuelDeux" <<
\new Voice @{ \ManuelDeuxMusique @}
- >> % fin du contexte de portée ManuelDeux
- >> % fin du contexte PianoStaff
+ >> % fin du contexte de portée ManuelDeux
+ >> % fin du contexte PianoStaff
@end example
Il nous faut ajouter à cela une portée pour le pédalier. Elle se place
sous le système de piano, mais puisqu'elle doit rester synchrone avec
lui, nous utilisons des doubles chevrons pour les regrouper.
Négliger ceci nous renverrait une erreur, et personne n'est à l'abri de
-cette faute ! Pour preuve, il vous suffit de copier l'exemple complet en
-fin de chapitre, de supprimer ces @code{<<} et @code{>>}, et de le
-compiler, pour voir de quoi il retourne.
+cette faute@tie{}! Pour preuve, il vous suffit de copier l'exemple
+complet en fin de chapitre, de supprimer ces @code{<<} et @code{>>}, et
+de le compiler, pour voir de quoi il retourne.
@example
-<< % Système pianistique et portée de pédalier sont synchrones
+<< % Système pianistique et portée de pédalier sont synchrones
\new PianoStaff <<
\new Staff = "ManuelUn" <<
\new Voice @{ \ManuelUnVoixUnMusique @}
>> % fin du contexte de portée ManuelUn
\new Staff = "ManualDeux" <<
\new Voice @{ \ManuelDeuxMusique @}
- >> % fin du contexte de portée ManuelDeux
- >> % fin du contexte PianoStaff
+ >> % fin du contexte de portée ManuelDeux
+ >> % fin du contexte PianoStaff
\new Staff = "PedalierOrgue" <<
\new Voice @{ \PedalierOrgueMusique @}
>>
La construction en simultané -- @code{<<...>>} -- n'est pas strictement
obligatoire pour les portées manuel deux et pédalier, qui ne contiennent
-chacune qu'une seule expression musicale ; mais cela ne mange pas de
+chacune qu'une seule expression musicale@tie{}; mais cela ne mange pas de
pain, et c'est une bonne habitude que de toujours encadrer par des
doubles chevrons gauche/droite ce qui suit une commande @code{\new
Staff} au cas où il y aurait plusieurs voix. Il en va autrement pour
-les contextes @code{Voice} : ils doivent être toujours suivis
+les contextes @code{Voice}@tie{}: ils doivent être toujours suivis
d'accolades -- @code{@{...@}} -- au cas où vous auriez employé
plusieurs variables qui doivent intervenir consécutivement.
effectuer les réglages concernant les hampes et liaisons de la portée
supérieure grâce à @code{\voiceOne} et @code{\voiceTwo}, et mettre en
place la métrique et l'armure de chaque portée grâce à notre variable
-@code{\MetriqueArmure}.
+@code{\MetriqueArmure}.
@example
\score @{
- << % Système pianistique et portée de pédalier sont synchrones
+ << % Système pianistique et portée de pédalier sont synchrones
\new PianoStaff <<
\new Staff = "ManuelUn" <<
\TimeKey % définition de la métrique et de l'armure
@cindex variables
@cindex identificateurs
-Jusqu'à maintenant, vous avez vu ce type de code :
+Jusqu'à maintenant, vous avez vu ce type de code@tie{}:
@lilypond[quote,verbatim,ragged-right]
hornNotes = \relative c'' { c4 b dis c }
@end lilypond
Vous comprendrez combien cela peut être utile pour écrire de la
-musique minimaliste :
+musique minimaliste@tie{}:
@lilypond[quote,verbatim,ragged-right]
fragmentA = \relative c'' { a4 a8. b16 }
Néanmoins vous pouvez aussi utiliser ces identificateurs
-- aussi connus sous le nom de variables, macros, ou commandes
-(définies par l'utilisateur) -- pour des retouches :
+(définies par l'utilisateur) -- pour des retouches@tie{}:
@c TODO Avoid padtext - not needed with skylining
@lilypond[quote,verbatim,ragged-right]
Ces identificateurs sont évidemment utiles pour économiser de la
frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une
-seule fois : ils réduisent la complexité. Regardons l'exemple
+seule fois@tie{}: ils réduisent la complexité. Regardons l'exemple
précédent sans aucun identificateur. C'est beaucoup plus laborieux à
lire, et particulièrement la dernière ligne.
@c TODO Replace the following with a better example -td
@c Skylining handles this correctly without padText
-Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond
+Jusqu'ici nous avons vu des substitutions statiques@tie{}: quand LilyPond
rencontre @code{\padText}, il le remplace par le contenu que nous lui
avons défini -- c'est-à-dire le contenu à droite de @code{padText=}.
Utiliser des identificateurs est aussi un bon moyen pour vous épargner
du travail si la syntaxe de LilyPond change un jour -- voir
-@rprogram{Mise à jour d'anciens avec convert-ly}. Si vous avez une seule
+@rprogram{Mise à jour avec convert-ly}. Si vous avez une seule
définition, par exemple @code{\dolce}, pour tous vos fichiers (voir
@ref{Feuilles de style}), et que la syntaxe change, alors vous n'aurez
qu'à mettre à jour votre seule définition @code{\dolce}, au lieu de
@end example
@noindent
-On établira alors une partie séparée en constituant un nouveau fichier :
+On établira alors une partie séparée en constituant un nouveau fichier@tie{}:
@example
\include "musique-Cor.ly"
sera substitué le contenu du fichier @code{musique-Cor.ly}, et de ce
fait la variable @code{notesCor} se trouvera définie. La commande
@w{@code{\transpose f c'}} indique que son argument @code{\notesCor}
-sera transposé à la quinte supérieure : le son réel @code{f} s'écrit
+sera transposé à la quinte supérieure@tie{}: le son réel @code{f} s'écrit
@code{c'}, ce qui est la caractéristique d'un Cor en fa. La
-transposition est visible comme suit :
+transposition est visible comme suit@tie{}:
@lilypond[quote,ragged-right]
\transpose f c' \relative c {
Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas
pendant plusieurs mesures. Un silence spécial, appelé silence
multimesures, l'indique alors. On l'obtient par un @code{R} majuscule,
-suivi d'une durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une
+suivi d'une durée@tie{}: @code{1}@tie{}pour une pause, @code{2}@tie{}pour une
demi-pause, etc. Cette durée peut être multipliée pour établir de plus
longs silences. Par exemple, le silence suivant dure 3@tie{}mesures à 2/4.
@end example
Dans une partie séparée, les silences multimesure sont compressés.
-Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai} :
+Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai}@tie{}:
@example
\set Score.skipBars = ##t
Cette commande assigne la valeur @qq{vrai} -- @emph{true} en anglais, et
@code{#t} dans le langage Scheme -- à cette propriété dans le
contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le
-silence multimesure et cette option, on obtient le résultat suivant :
+silence multimesure et cette option, on obtient le résultat suivant@tie{}:
@lilypond[quote,ragged-right]
\transpose f c' \relative c {
+++ /dev/null
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
-@ignore
- Translation of GIT committish: e3f4b2ada78eb676d4a07abb8affdd5ef3fd90b1
-
- 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 \version "2.13.4"
-
-@c Translators: Ludovic Sardain, John Mandereau
-@c Translation checkers: Jean-Charles Malahieude, Jean-Yves Baudais, Damien Heurtebise
-@c Translation status: post-GDP
-
-
-@node Introduction
-@chapter Introduction
-@translationof Introduction
-
-Ce chapitre constitue une première présentation de LilyPond et de sa
-documentation.
-
-@menu
-* Contexte::
-* À propos de la documentation::
-@end menu
-
-
-@node Contexte
-@section Contexte
-@translationof Background
-
-Cette partie présente les objectifs de LilyPond ainsi que son
-architecture.
-
-@menu
-* Gravure::
-* Gravure automatisée::
-* Gravure des symboles musicaux::
-* Représentation de la musique::
-* Exemples d'application::
-@end menu
-
-
-@node Gravure
-@unnumberedsubsec Gravure
-@translationof Engraving
-
-
-@cindex gravure
-@cindex typographie musicale
-@cindex musique et typographie
-
-L'art de la typographie musicale se nomme la @emph{gravure}. Ce terme
-est issu du processus traditionnel d'impression musicale. Il y a
-seulement quelques dizaines d'années, on faisait les partitions en
-coupant et en embossant une plaque de zinc ou d'étain en image miroir.
-Cette plaque était ensuite encrée, les dépressions créées par les
-creux et les bosses retenant l'encre. Une image était formée en
-pressant du papier sur la plaque. La découpe et l'embossage étaient
-entièrement faits à la main. Il était pénible d'appliquer une
-correction, quand celle-ci n'était pas impossible ; la gravure devait
-donc être parfaite du premier coup. La gravure demandait une
-qualification hautement spécialisée : un artisan devait accomplir
-environ cinq ans de formation avant de mériter le titre de maître
-graveur, et il lui fallait cinq années d'expérience supplémentaires
-pour devenir vraiment habile.
-
-De nos jours, toutes les partitions récentes sont produites avec des
-ordinateurs. Ceci a des avantages évidents : le coût des impressions
-a diminué, et le travail d'édition peut être envoyé par courriel.
-Malheureusement, l'utilisation dominante des ordinateurs a également
-diminué la qualité graphique des partitions. L'impression
-informatisée leur donne un aspect fade et mécanique qui les rend
-désagréables à jouer.
-
-@c introduce illustrating aspects of engraving, font...
-Les images ci-dessous illustrent la différence entre la gravure
-traditionelle et l'impression typique par ordinateur, et la troisième
-image montre comment LilyPond mime l'aspect traditionnel. L'image de
-gauche est une numérisation d'un symbole bémol d'une édition publiée
-en 2000. Celle du centre montre un bémol d'une gravure à la main de
-l'édition Bärenreiter de la même musique. L'image de gauche illustre
-des défauts typiques de l'impression informatique : les lignes de
-portée sont minces, l'épaisseur de trait du bémol est la même que les
-lignes fines, et il y a un aspect rigide avec des angles pointus. Par
-contraste, le bémol Bärenreiter possède un aspect gras et arrondi,
-presque voluptueux. Notre symbole bémol est créé, entre autres, à
-partir de celui-là. Il est arrondi, et son épaisseur de trait
-s'harmonise avec nos lignes de portée, lesquelles sont également plus
-épaisses que celles de l'édition informatique.
-
-@multitable @columnfractions .125 .25 .25 .25 .125
-@item @tab
-@ifnotinfo
-@iftex
-@image{pictures/henle-flat-gray,,4cm}
-@end iftex
-@ifnottex
-@image{pictures/henle-flat-gray,,,png}
-@end ifnottex
-
-@tab
-@iftex
-@image{pictures/baer-flat-gray,,4cm}
-@end iftex
-@ifnottex
-@image{pictures/baer-flat-gray,,,png}
-@end ifnottex
-
-@tab
-@iftex
-@image{pictures/lily-flat-bw,,4cm}
-@end iftex
-@ifnottex
-@image{pictures/lily-flat-bw,,,png}
-@end ifnottex
-@end ifnotinfo
-@ifinfo
-@image{lilypond/pictures/henle-flat-bw,,,png} @image{lilypond/pictures/baer-flat-bw,,,png}
-@image{lilypond/pictures/lily-flat-bw,,,png}
-@end ifinfo
-
-@item @tab
-Henle (2000)
-@tab
-Bärenreiter (1950)
-@tab
-Fonte Feta de LilyPond (2003)
-
-@end multitable
-
-
-@cindex symboles musicaux
-@cindex fonte
-@cindex police
-@cindex épaisseur des caractères
-@cindex équilibre
-
-@c introduce illustrating aspects of engraving, spacing...
-En matière d'espacement, la répartition de l'espace devrait refléter
-les durées entre les notes. Cependant, beaucoup de partitions
-modernes se contentent des durées avec une précision mathématique, ce
-qui mène à de mauvais résultats. Dans l'exemple suivant, un motif est
-imprimé deux fois : une fois en utilisant un espacement mathématique
-exact, et une autre fois avec des corrections. Pouvez-vous les
-repérer ?
-
-@cindex espacement optique
-@c file spacing-optical.
-@c need to include it here, because we want two images.
-@lilypond
-\paper {
- ragged-right = ##t
- indent = #0.0
-}
-
-music = {
- c'4 e''4 e'4 b'4 |
- \stemDown
- b'8[ e'' a' e'']
- \stemNeutral
- e'8[ e'8 e'8 e'8]
-}
-
-\score
-{
- \music
- \layout {
- \context {
- \Staff
- \override NoteSpacing #'stem-spacing-correction = #0.6
- }
- }
-}
-@end lilypond
-
-@lilypond
-\paper {
- ragged-right = ##t
- indent = #0.0
-}
-
-music = {
- c'4 e''4 e'4 b'4 |
- \stemDown
- b'8[ e'' a' e'']
- \stemNeutral
- e'8[ e'8 e'8 e'8]
-}
-\score
-{
- \music
- \layout {
- \context {
- \Staff
- \override NoteSpacing #'stem-spacing-correction = #0.0
- \override NoteSpacing #'same-direction-correction = #0.0
- \override StaffSpacing #'stem-spacing-correction = #0.0
- }
- }
-}
-@end lilypond
-
-@cindex régulier, rythme
-@cindex régulier, espacement
-@cindex espacement régulier
-
-L'extrait n'utilise que des notes de même durée ; l'espacement devrait
-le refléter. Malheureusement, notre oeil nous trompe quelque peu ; il
-ne se contente pas de remarquer la distance entre les têtes de notes,
-il prend en compte également la distance entre les hampes
-consécutives. Ainsi, par compensation, les notes avec une combinaison
-@qq{hampe vers le haut}/@/@qq{hampe vers le bas} doivent être éloignées
-l'une de l'autre, et les notes avec une combinaison @qq{hampe vers le
-bas}/@/@qq{hampe vers le haut} rapprochées, le tout dépendant de la
-position verticale des notes. Les deux premières mesures sont
-imprimées avec cette correction, les deux suivantes sans. Les notes
-dans les deux dernières mesures forment des blocs de notes @qq{hampe
-vers le bas}/@/@qq{hampe vers le haut}.
-
-@cindex typographie
-
-Les musiciens sont généralement plus absorbés par l'exécution que par
-l'étude de l'aspect graphique d'une partition, donc discutailler sur
-les détails typographiques peut paraître peu important. Il n'en est
-rien. Dans de longues pièces avec des rythmes monotones, les
-corrections d'espacement engendrent de subtiles variations dans la
-mise en forme de chaque ligne, donnant à chacune une signature
-visuelle distincte. Sans cette signature, toutes les lignes auraient
-le même aspect, et ressembleraient à un labyrinthe. Si un musicien
-regarde ailleurs un instant ou se déconcentre momentanement, il peut
-avoir du mal à se retrouver sur la page.
-
-De même, l'aspect robuste des symboles sur d'épaisses lignes de
-portée ressort mieux quand la partition est éloignée du lecteur,
-comme sur un pupitre par exemple. Une organisation minutieuse des
-espaces vides permet de minimiser l'espace qu'occupe la musique, tout
-en évitant que les symboles s'amassent les uns contre les autres. Le
-résultat permet de réduire le nombre de pages à tourner, ce qui est un
-grand avantage.
-
-Ceci est une caractéristique commune à toute typographie. La
-disposition doit être belle, non seulement pour des raisons
-esthétiques, mais également pour l'aide apportée au lecteur dans la
-tâche qu'il doit accomplir. Pour du matériel d'exécution comme les
-partitions de musique, cela prend une double importance : les
-musiciens ont une quantité limitée d'attention. Moins ils en ont
-besoin pour lire, plus ils peuvent se concentrer sur la musique
-elle-même. Autrement dit, une meilleure typographie permet une
-meilleure interprétation.
-
-Ces exemples démontrent que la typographie musicale est un art subtil
-et complexe, et que la produire demande une expertise considérable,
-que les musiciens ne possèdent généralement pas. LilyPond est le
-fruit de nos efforts pour restaurer l'excellence graphique de la
-gravure à la main à l'ère de l'ordinateur, et la rendre accessible à
-tous les musiciens. Nous avons conçu nos algorithmes, fontes et
-paramètres de programme pour retrouver la qualité d'édition des
-anciennes partitions que nous aimons tant lire et jouer.
-
-
-@node Gravure automatisée
-@unnumberedsubsec Gravure automatisée
-@translationof Automated engraving
-
-@cindex gravure automatisée
-@cindex automatisée, gravure
-
-Comment pouvons-nous implémenter la typographie ? Si les artisans ont
-besoin de plus de dix ans pour devenir de vrais maîtres, comment nous,
-simples programmeurs, pourrions-nous jamais écrire un programme pour
-faire leur travail ?
-
-La réponse est : nous ne le pouvons pas. La typographie se base sur
-le jugement visuel humain, donc les humains ne peuvent pas être
-complètement remplacés. Si LilyPond arrive à traiter la plupart des
-situations correctement, ce sera déjà une grande avancée sur les
-logiciels existants. Les problèmes restants peuvent être résolus à la
-main. Au fil des ans, le logiciel peut être affiné pour faire de plus
-en plus de choses automatiquement, pour que les ajustements manuels
-soient de moins en moins nécessaires.
-
-Quand nous avons commencé, nous avons écrit le programme Lilypond
-entièrement dans le language de programmation C++ ; les fonctions du
-programme étaient figées par les développeurs. Ceci s'est avéré
-insatisfaisant pour plusieurs raisons :
-
-@itemize
-
-@item Quand Lilypond fait des erreurs,
-les utilisateurs ont besoin de contredire les décisions de formatage.
-Les utilisateurs doivent donc avoir accès au moteur de formatage. Par
-conséquent, les règles et les propriétés ne peuvent pas être fixées
-par nous au moment de la compilation, mais doivent être accessibles
-aux utilisateurs au moment de l'exécution.
-
-@item La gravure est une question de jugement visuel, et donc de goût.
-Aussi bien informés que nous le sommes, les utilisateurs peuvent être
-en désaccord avec nos décisions personnelles. Par conséquent, les
-définitions du modèle typographique doivent également être accessibles
-à l'utilisateur.
-
-@item Enfin, nous affinons continuellement les algorithmes de formatage,
-donc nous avons besoin d'une approche souple des règles. Le langage
-C++ oblige à une certaine méthode de groupage des règles qui ne
-convient pas bien au fonctionnement de la notation musicale.
-
-@end itemize
-
-@cindex langage de programmation Scheme
-
-Ces problèmes ont été résolus en intégrant un interpréteur pour le
-langage de programmation Scheme, et en réécrivant des parties de
-LilyPond en Scheme. L'architecture actuelle de formatage est
-construite autour de la notion d'objets graphiques, décrits par des
-fonctions et des variables Scheme. Cette architecture comprend les
-règles de formatage, le style typographique, et des décisions
-individuelles de formatage. L'utilisateur a un accès direct à la
-plupart de ces contrôles.
-
-Les variables Scheme contrôlent les décisions de mise en page. Par
-exemple, beaucoup d'objets graphiques ont une variable de direction
-qui encode le choix entre haut et bas (ou gauche et droite). Vous
-pouvez voir ici deux accords, avec des accents, et des arpèges. Dans
-le premier accord, les objets graphiques sont tous dirigés vers le bas
-(ou la gauche). Dans le second accord ils sont tous dirigés vers le
-haut (droite).
-
-@lilypond[quote,ragged-right]
-\new Score \with {
- \override SpacingSpanner #'spacing-increment = #3
- \override TimeSignature #'transparent = ##t
-} \relative c' {
- \stemDown <e g b>4_>-\arpeggio
- \override Arpeggio #'direction = #RIGHT
- \stemUp <e g b>4^>-\arpeggio
-}
-@end lilypond
-
-@cindex partition, formatage
-@cindex formatage d'une partition
-@cindex formatage, règles de
-
-@noindent
-Le processus de formatage d'une partition consiste à lire et écrire
-les variables d'objets graphiques. Certaines variables ont une valeur
-prédéfinie. Par exemple, l'épaisseur d'un grand nombre de lignes --
-une caractéristique du style typographique -- est une variable avec
-une valeur prédéfinie. Vous êtes libres d'altérer cette valeur, ce
-qui vous donne une partition avec une impression typographique
-différente.
-
-@lilypond[quote,ragged-right]
-fragment = {
- \clef bass f8 as8
- c'4-~ c'16 as g f e16 g bes c' des'4
-}
-<<
- \new Staff \fragment
- \new Staff \with {
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #0.5
- \override Bar #'thickness = #3.6
- \override Tie #'thickness = #2.2
- \override StaffSymbol #'thickness = #3.0
- \override Tie #'extra-offset = #'(0 . 0.3)
- }
- \fragment
->>
-@end lilypond
-
-Les règles de formatage ont aussi des variables prédéfinies : chaque
-objet possède des variables contenant des procédures. Ces procédures
-exécutent le formatage, et en les substituant par d'autres, nous
-pouvons changer l'apparence des objets. Dans l'exemple suivant, la
-règle du choix de têtes de notes est changée au cours de l'extrait de
-musique.
-
-@lilypond[quote,ragged-right]
-#(set-global-staff-size 30)
-
-#(define (mc-squared grob orig current)
- (let* ((interfaces (ly:grob-interfaces grob))
- (pos (ly:grob-property grob 'staff-position)))
- (if (memq 'note-head-interface interfaces)
- (begin
- (ly:grob-set-property! grob 'stencil
- (grob-interpret-markup grob
- (make-lower-markup 0.5
- (case pos
- ((-5) "m")
- ((-3) "c ")
- ((-2) (make-smaller-markup (make-bold-markup "2")))
- (else "bla")))))))))
-
-\new Voice \relative c' {
- \stemUp
- \set autoBeaming = ##f
- \time 2/4
- <d f g>4
- \once \override NoteHead #'stencil = #note-head::brew-ez-stencil
- \once \override NoteHead #'font-size = #-7
- \once \override NoteHead #'font-family = #'sans
- \once \override NoteHead #'font-series = #'bold
- <d f g>4
- \once \override NoteHead #'style = #'cross
- <d f g>4
- \applyOutput #'Voice #mc-squared
- <d f g>4
- <<
- { d8[ es-( fis^^ g] fis2-) }
- \repeat unfold 5 { \applyOutput #'Voice #mc-squared s8 }
- >>
-}
-@end lilypond
-
-
-
-@node Gravure des symboles musicaux
-@unnumberedsubsec Gravure des symboles musicaux
-@translationof What symbols to engrave?
-
-@cindex gravure
-@cindex typographie
-@cindex graveur
-@cindex greffon
-
-Le processus de formatage décide où placer les symboles. Cependant,
-cela ne peut être fait qu'à partir du moment où il a été décidé
-@emph{quels} symboles doivent être imprimés, c'est-à-dire quelle
-notation utiliser.
-
-La notation musicale usuelle est un système d'écriture qui a évolué à
-travers les dix derniers siècles. La forme qui est aujourd'hui
-communément utilisée date du début de la Renaissance. Bien que la forme
-basique --- les têtes de notes sur une portée de cinq lignes --- n'ait pas
-changé, les détails continuent d'évoluer pour exprimer les innovations
-de la notation contemporaine. Par conséquent, elle comprend quelque 500
-ans de musique, avec des applications allant des mélodies monodiques à
-de monstrueux contrepoints pour grand orchestre.
-
-Comment pouvons nous appréhender un tel monstre à plusieurs têtes, et le
-confiner dans l'espace réduit d'un programme informatique ? Notre
-solution consiste à diviser le problème de la notation --- par
-opposition à la gravure, ou typographie --- en morceaux digestes et
-programmables : chaque type de symbole est géré par un module séparé,
-couramment appelé greffon@footnote{traduction de l'anglais
-@emph{plug-in}.}. Chaque greffon est entièrement modulaire et
-indépendant, et donc peut être développé et amélioré séparément. De
-tels greffons sont nommés @code{graveur}s@footnote{@code{engraver}s en
-anglais.}, par analogie avec les artisans qui traduisent les idées
-musicales en symboles graphiques.
-
-Dans l'exemple suivant, voyons comment nous commençons avec un greffon
-pour les têtes de notes, le graveur de têtes de note
-(@code{Note_heads_engraver}) :
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-
-\score {
- \topVoice
- \layout {
- \context {
- \Voice
- \remove "Stem_engraver"
- \remove "Phrasing_slur_engraver"
- \remove "Slur_engraver"
- \remove "Script_engraver"
- \remove "Beam_engraver"
- \remove "Auto_beam_engraver"
- }
- \context {
- \Staff
- \remove "Accidental_engraver"
- \remove "Key_engraver"
- \remove "Clef_engraver"
- \remove "Bar_engraver"
- \remove "Time_signature_engraver"
- \remove "Staff_symbol_engraver"
- \consists "Pitch_squash_engraver"
- }
- }
-}
-@end lilypond
-
-@noindent
-Ensuite, le graveur du symbole de portée
-(@code{Staff_symbol_engraver}) ajoute la portée
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-
-\score {
- \topVoice
- \layout {
- \context {
- \Voice
- \remove "Stem_engraver"
- \remove "Phrasing_slur_engraver"
- \remove "Slur_engraver"
- \remove "Script_engraver"
- \remove "Beam_engraver"
- \remove "Auto_beam_engraver"
- }
- \context {
- \Staff
- \remove "Accidental_engraver"
- \remove "Key_engraver"
- \remove "Clef_engraver"
- \remove "Bar_engraver"
- \consists "Pitch_squash_engraver"
- \remove "Time_signature_engraver"
- }
- }
-}
-@end lilypond
-
-@noindent
-le graveur de clef (@code{Clef_engraver}) définit un point de
-référence pour la portée
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-
-\score {
- \topVoice
- \layout {
- \context {
- \Voice
- \remove "Stem_engraver"
- \remove "Phrasing_slur_engraver"
- \remove "Slur_engraver"
- \remove "Script_engraver"
- \remove "Beam_engraver"
- \remove "Auto_beam_engraver"
- }
- \context {
- \Staff
- \remove "Accidental_engraver"
- \remove "Key_engraver"
- \remove "Bar_engraver"
- \remove "Time_signature_engraver"
- }
- }
-}
-@end lilypond
-
-@noindent
-et le graveur de hampes (@code{Stem_engraver}) ajoute les hampes :
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-
-\score {
- \topVoice
- \layout {
- \context {
- \Voice
- \remove "Phrasing_slur_engraver"
- \remove "Slur_engraver"
- \remove "Script_engraver"
- \remove "Beam_engraver"
- \remove "Auto_beam_engraver"
- }
- \context {
- \Staff
- \remove "Accidental_engraver"
- \remove "Key_engraver"
- \remove "Bar_engraver"
- \remove "Time_signature_engraver"
- }
- }
-}
-@end lilypond
-
-@noindent
-Le graveur de hampe est informé de chaque tête de note qui survient.
-Chaque fois qu'une tête de note --- plusieurs pour un accord --- est
-rencontrée, un objet hampe est créé et connecté à la tête de note. En
-ajoutant des graveurs pour les barres de ligature, les liaisons, les
-accents, les altérations accidentelles, les barres de mesure, la
-métrique, et les armures, nous obtenons un jeu de notation complet.
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-\score { \topVoice }
-@end lilypond
-
-@cindex polyphonie
-@cindex graver plusieurs voix
-@cindex contextes
-
-Ce système fonctionne bien pour de la musique monodique, mais qu'en
-est-il de la polyphonie ? En notation polyphonique, plusieurs voix
-peuvent partager une portée.
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-\new Staff << \topVoice \\ \botVoice >>
-@end lilypond
-
-Dans cette situation, la portée et les altérations accidentelles sont
-partagées, mais les hampes, liaisons etc., sont spécifiques à chaque
-voix. Par conséquent, les graveurs doivent être groupés. Les
-graveurs des têtes de notes, hampes, liaisons etc., vont dans un
-groupe appelé @qq{contexte de Voix} @footnote{@q{Voice context} en
-anglais, @q{Voice} commence par une majuscule comme tous les noms de
-contexte dans le programme LilyPond.}, alors que les graveurs des clés,
-altérations accidentelles, barres de mesure etc., vont dans un groupe
-appelé @qq{contexte de Portée}. Dans le cas de la polyphonie, un seul
-contexte de Portée contient plusieurs contextes de Voix. De même,
-plusieurs contextes de Portée peuvent être inclus dans un seul
-contexte de Partition. Le contexte de Partition est le contexte de
-notation de plus haut niveau.
-
-
-@seealso
-Référence du programme: @rinternals{Contexts}.
-
-
-@lilypond[quote,ragged-right]
-\include "engraver-example.ily"
-\score {
- <<
- \new Staff << \topVoice \\ \botVoice >>
- \new Staff << \pah \\ \hoom >>
- >>
-}
-@end lilypond
-
-@node Représentation de la musique
-@unnumberedsubsec Représentation de la musique
-@translationof Music representation
-
-@cindex syntaxe
-@cindex structures récursives
-
-Idéalement, le format d'entrée pour n'importe quel système de
-formatage est une description abstraite du contenu. Dans ce cas-ci,
-ce serait la musique elle-même. Cela pose un formidable problème :
-comment pouvons-nous définir ce qu'est réellement la musique ? Plutôt
-que d'essayer de trouver une réponse, nous avons renversé la question.
-Nous écrivons un logiciel capable de produire de la musique écrite, et
-adaptons le format pour atteindre la plus grande concision possible.
-Quand le format ne peut plus être simplifé, il nous reste par
-définition le contenu lui-même. Notre logiciel sert de définition
-formelle d'un document de musique.
-
-Pour LilyPond, la syntaxe est également l'interface utilisateur ; par
-conséquent il est facile de saisir
-
-@example
-@{
-c'4 d'8
-@}
-@end example
-
-@noindent
-c'est-à-dire un do central noire et, juste au-dessus, un ré croche
-
-@lilypond[quote]
-{
- c'4 d'8
-}
-@end lilypond
-
-Sur une échelle microscopique, une telle syntaxe est facile à
-utiliser. À plus grande échelle, la syntaxe a besoin aussi de
-structure. Comment serait-il possible autrement de rentrer des
-pièces complexes comme des symphonies ou des opéras ? La structure
-est formée par le concept d'expression musicale : en combinant
-de petits fragments de musique pour en former de plus grands, on peut
-exprimer de la musique plus complexe. Par exemple
-
-@lilypond[quote,verbatim,fragment,relative=1]
-f4
-@end lilypond
-
-@noindent
-Des accord peuvent être construits avec @code{<<} et @code{>>} autour
-des notes.
-
-@example
-<<c4 d4 e4>>
-@end example
-
-@lilypond[quote,fragment,relative=1]
-\new Voice { <<c4 d4 e>> }
-@end lilypond
-
-@noindent
-On met cette expression dans une séquence en l'encadrant par
-des accolades @code{@{@tie{}@dots{}@tie{}@}}
-
-@example
-@{ f4 <<c4 d4 e4>> @}
-@end example
-
-@lilypond[quote,relative=1,fragment]
-{ f4 <<c d e4>> }
-@end lilypond
-
-@noindent
-Ceci est également une expression, et peut donc encore une fois
-être combiné avec d'autres expressions simultanées (une blanche)
-en utilisant @code{<<}, @code{\\}, et @code{>>}.
-
-@example
-<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
-@end example
-
-@lilypond[quote,fragment,relative=2]
-\new Voice { << g2 \\ { f4 <<c d e>> } >> }
-@end lilypond
-
-De telles structures récursives peuvent être spécifiées formellement
-et de manière ordonnée dans une grammaire indépendante de tout
-contexte. Le code d'analyse est aussi généré à partir de cette
-grammaire. Autrement dit, la syntaxe de LilyPond est définie
-clairement et sans ambiguité.
-
-L'interface utilisateur et la syntaxe sont ce que les gens voient et
-manipulent le plus. Elles sont en partie une affaire de goût, et
-aussi sujettes à beaucoup de discussions. Même si ces discussions sur
-les goûts ont leur mérite, elles ne sont pas très productives. D'un
-point de vue plus large sur LilyPond, l'importance de la syntaxe est
-minime : il est facile d'inventer une syntaxe concise, alors qu'écrire
-un code de formatage décent est beaucoup plus difficile. Ceci est
-également illustré par le nombre de lignes de codes pour les
-composants respectifs : l'analyse et la représentation constituent
-moins de 10% du code source.
-
-@node Exemples d'application
-@unnumberedsubsec Exemples d'application
-@translationof Example applications
-
-@cindex exemples simples
-
-Nous avons conçu LilyPond comme une expérimentation visant à
-concentrer l'art de la gravure musicale dans un logiciel. Grâce à
-tout ce dur labeur, le programme peut maintenant être utilisé pour
-accomplir des travaux utiles. L'application la plus simple est
-d'imprimer des notes :
-
-@lilypond[quote,relative=1]
-{
- \time 2/4
- c4 c g'4 g a4 a g2
-}
-@end lilypond
-
-@noindent
-En ajoutant des noms d'accords et des paroles, nous obtenons
-une partition de chanson :
-
-@lilypond[quote,ragged-right]
-<<
- \chords { c2 c f2 c }
- \new Staff
- \relative c' {
- \time 2/4
- c4 c g' g a a g2
- }
- \addlyrics { twin -- kle twin -- kle lit -- tle star }
->>
-@end lilypond
-
-La notation polyphonique et la musique pour piano peuvent également
-être générées. L'exemple suivant associe quelques constructions
-plus exotiques :
-
-@lilypond[quote]
-\header {
- title = "Screech and boink"
- subtitle = "Random complex notation"
- composer = "Han-Wen Nienhuys"
-}
-
-\score {
- \context PianoStaff <<
- \new Staff = "up" {
- \time 4/8
- \key c \minor
- << {
- \revert Stem #'direction
- \change Staff = down
- \set subdivideBeams = ##t
- g16.[
- \change Staff = up
- c'''32
- \change Staff = down
- g32
- \change Staff = up
- c'''32
- \change Staff = down
- g16]
- \change Staff = up
- \stemUp
- \set followVoice = ##t
- c'''32([ b''16 a''16 gis''16 g''32)]
- } \\ {
- s4 \times 2/3 { d'16[ f' g'] } as'32[ b''32 e'' d'']
- } \\ {
- s4 \autoBeamOff d''8.. f''32
- } \\ {
- s4 es''4
- } >>
- }
-
- \new Staff = "down" {
- \clef bass
- \key c \minor
- \set subdivideBeams = ##f
- \override Stem #'french-beaming = ##t
- \override Beam #'beam-thickness = #0.3
- \override Stem #'thickness = #4.0
- g'16[ b16 fis16 g16]
- << \makeClusters {
- as16 <as b>
- <g b>
- <g cis>
- } \\ {
- \override Staff.Arpeggio #'arpeggio-direction =#down
- <cis, e, gis, b, cis>4\arpeggio
- }
- >> }
- >>
- \midi {
- \context {
- \Score
- tempoWholesPerMinute = #(ly:make-moment 60 8)
- }
- }
- \layout {
- \context {
- \Staff
- \consists Horizontal_bracket_engraver
- }
- }
-}
-@end lilypond
-
-Les extraits exposés ici ont tous été écrits à la main, mais ce n'est
-pas une obligation. Puisque le moteur de formatage est en grande
-partie automatique, il peut servir de sortie pour d'autres programmes
-qui manipulent la musique. Par exemple, il peut être utilisé pour
-convertir des bases de données d'extraits musicaux en images pour des
-sites Internet et des présentations multimédias.
-
-Ce manuel montre également une application : le format d'entrée est du
-texte, et peut donc facilement être intégré dans d'autres formats
-basés sur le texte comme @LaTeX{}, HTML, ou dans le cas de ce manuel,
-Texinfo. À l'aide d'un programme spécial, les extraits de code
-peuvent être remplacés par des images de musiques dans les fichiers de
-sortie PDF ou HTML. Cela donne la possibilité de mélanger de la
-musique et du texte dans les documents.
-
-
-@node À propos de la documentation
-@section À propos de la documentation
-@translationof About the documentation
-
-Cette partie présente les différents volumes de la documentation.
-
-@cindex Manuel d'initiation
-@cindex Glossaire musical
-@cindex Manuel de notation
-@cindex Utilisation des programmes
-@cindex Exemples de code
-@cindex Référence des propriétés internes
-
-@c leave these lines wrapping around. It's some texinfo 4.12 thing. -gp
-@c This is actually a limitation of texi2html. -jm
-@menu
-* À propos du manuel d'initiation:: introduction à LilyPond, ce manuel explique aux débutants la création de partitions.
-* À propos du glossaire musicologique:: ce document explique de nombreux termes musicaux et en donne la traduction dans d'autres langues.
-* À propos du manuel de notation:: ce manuel représente la partie la plus volumineuse de la documentation. Il fournit tous les détails sur la création de notation musicale. La lecture de cet ouvrage requiert une bonne compréhension des concepts exposés dans le manuel d'initiation.
-* À propos du manuel d'utilisation:: ce manuel aborde l'exécution des programmes LilyPond et les particularités dépendant du système d'exploitation.
-* À propos des morceaux choisis:: ce document rassemble une collection d'extraits de code LilyPond.
-* À propos des références du programme:: ce manuel constitue une source d'information sur le fonctionnement interne de LilyPond. C'est une référence complète pour l'élaboration de retouches.
-* Autres sources de documentation:: d'autres sources de documentation sont disponibles, telles que les notes de nouveautés et les archives des listes de diffusion.
-@end menu
-
-
-@node À propos du manuel d'initiation
-@unnumberedsubsec À propos du manuel d'initiation
-@translationof About the Learning Manual
-
-Ce manuel explique comment débuter avec LilyPond, et expose de manière
-simple quelques concepts clés. Il est conseillé de lire ces chapitres
-de manière linéaire.
-
-Dans ce manuel se trouve à chaque section un paragraphe @strong{Voir
-aussi} contenant des références vers d'autres sections : il est
-conseillé de ne pas les suivre en première lecture ; lorsque vous
-aurez lu l'ensemble du manuel d'initiation, vous pourrez en relisant
-certaines sections suivre ces références pour approfondir certains
-aspects.
-
-@itemize
-
-@item
-@ref{Introduction} : le pourquoi du comment de LilyPond.
-
-@item
-@ref{Tutoriel} : introduction en douceur à la typographie musicale.
-Les utilisateurs débutants sont invités à commencer par ce chapitre.
-
-@item
-@ref{Concepts fondamentaux} : concepts généraux du format de fichier
-@code{ly} spécifique à LilyPond. Si vous n'êtes pas certain de
-l'endroit où placer une commande, lisez ce chapitre !
-
-@item
-@ref{Retouche de partition} : introduction aux retouches de gravure avec
-LilyPond.
-
-@item
-@ref{Travail sur des projets LilyPond} : utilisation pratique de LilyPond,
-conseils généraux, prévention et résolution des problèmes les plus
-courants. À lire avant de se lancer dans des travaux d'envergure !
-
-@end itemize
-
-Ce volume contient aussi des annexes que vous pouvez consulter au gré de
-vos besoins :
-
-@itemize
-
-@item
-@ref{Modèles} de pièces LilyPond. Copiez et collez un modèle dans
-un fichier, ajoutez les notes, et c'est prêt !
-
-@item
-@ref{Tutoriel Scheme} : courte introduction à Scheme, le langage de
-programmation utilisé dans les fonctions de musique. Ces quelques
-lignes vous aideront à construire des retouches avancées ; nombre
-d'utilisateurs ne touchent jamais à Scheme.
-
-@end itemize
-
-
-@node À propos du glossaire musicologique
-@unnumberedsubsec À propos du glossaire musicologique
-@translationof About the Music Glossary
-
-@cindex Glossaire musical
-@cindex jargon
-@cindex terminologie
-@cindex langues étrangères
-@cindex langue
-@cindex langage
-
-@rglosnamed{Top,Glossaire musical} : ce document explique en anglais
-des termes musicaux, et donne leur traduction dans diverses langues.
-Si vous n'êtes pas familier avec la notation et la terminologie
-musicales, il est conseillé de consulter le glossaire, notamment pour
-les parties non encore traduites de la documentation.
-
-
-@node À propos du manuel de notation
-@unnumberedsubsec À propos du manuel de notation
-@translationof About the Notation Reference
-
-@cindex Manuel de notation
-@cindex annexes
-@cindex références, tables de
-@cindex tables de références
-
-Ce manuel détaille toutes les commandes LilyPond produisant une notation
-musicale. La lecture de cet ouvrage requiert une bonne compréhension des
-concepts exposés dans le manuel d'initiation.
-
-@itemize
-
-@c Normalement, il est impossible d'utiliser deux points en français,
-@c car une référence externe doit se terminer par un signe de
-@c ponctuation dans le format Info. Cependant, Info
-@c n'internationalise pas encore des documents Info, donc nous n'en
-@c avons rien à faire pour l'instant. -jm
-@item
-@ruser{Notation musicale générale} : cette partie décrit la notation de base,
-qui sera utile dans la plupart des projets de partition. Les sujets
-sont groupés par type de notation.
-
-@item
-@ruser{Notation spécialisée} : cette partie détaille des éléments de
-notation spécifiques à certains instruments ou styles. Les sujets
-sont groupés par type de notation.
-
-@item
-@ruser{Généralités en matière d'entrée et sortie} : informations générales sur les
-fichiers source LilyPond et le contrôle des sorties.
-
-@item
-@ruser{Gestion de l'espace} : différents aspects de l'espacement selon les
-axes et échelles, par exemple la sélection de la taille de papier, ou
-la gestion des sauts de page.
-
-@item
-@ruser{Modification des réglages prédéfinis} : ce chapitre est une référence des
-différentes formes de retouches, qui permettent d'obtenir de Lilypond
-(presque) tout ce que vous désirez.
-
-@item
-@ruser{Interfaces pour les programmeurs} : création de fonctions de musique
-à l'aide de Scheme.
-
-@end itemize
-
-Les annexes de ce manuel contiennent entre autres des tableaux de
-référence pratiques.
-
-@itemize
-
-@item
-@ruser{Bibliographie} : choix de livres de référence, pour en savoir
-plus sur la notation et la gravure.
-
-@item
-@ruser{Tables du manuel de notation} : tableaux montrant les noms d'accord,
-les instruments MIDI, les noms de couleur, et la police Feta.
-
-@item
-@ruser{Aide-mémoire} : référence pratique des commandes LilyPond les
-plus courantes.
-
-@item
-@ruser{Index des commandes LilyPond} : index de toutes les @code{\commandes}
-LilyPond.
-
-@item
-@ruser{Index de LilyPond} : un index complet.
-
-@end itemize
-
-
-@node À propos du manuel d'utilisation
-@unnumberedsubsec À propos du manuel d'utilisation
-@translationof About the Application Usage
-
-@cindex Utilisation des programmes
-@cindex intégration de LilyPond avec d'autres programmes
-
-Ce manuel explique l'exécution des programmes et l'intégration de
-partitions LilyPond dans d'autres programmes.
-
-@itemize
-
-@item
-@rprogram{Installation} : installation --- et éventuellement compilation ---
-de LilyPond.
-
-@item
-@rprogram{Environnement de travail} : configuration de votre système pour une utilisation
-optimale de LilyPond, comprenant l'utilisation d'environnements
-adaptés pour certains éditeurs de tecte.
-
-@item
-@rprogram{Exécution de LilyPond} : exécution de LilyPond et de ses
-programmes auxiliaires. De plus, cette partie explique comment
-effectuer la mise à jour de fichiers source écrits avec d'anciennes
-versions de LilyPond.
-
-@item
-@rprogram{LilyPond-book} : création de documents intégrant des
-extraits musicaux, comme ce manuel.
-
-@item
-@rprogram{Conversion à partir d'autres formats} : utilisation des programmes
-de conversion. Ces programmes sont livrés avec le paquetage LilyPond,
-et convertissent divers formats de musique vers le format @code{.ly}.
-
-@end itemize
-
-
-@node À propos des morceaux choisis
-@unnumberedsubsec À propos des morceaux choisis
-@translationof About the Snippet List
-
-@cindex snippets
-@cindex extraits de code
-@cindex morceaux choisis
-@cindex LSR
-@cindex LilyPond Snippet Repository
-
-@rlsrnamed{Top,Exemples de code} :
-il s'agit d'une sélection de petits exemples montrant des trucs,
-astuces et fonctionnalités particulières de LilyPond, issus de
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
-(LSR). Tous ces exemples sont dans le domaine public.
-
-Notez bien que cette annexe n'est en aucune manière un miroir ou même
-une partie du LSR. Dans la mesure où le LSR repose sur une version
-stable de LilyPond, les exemples illustrant des fonctionnalités
-introduites dans la dernière version de développement ne peuvent y
-figurer ; c'est pourquoi vous les trouverez dans le répertoire
-@file{input/new/} des sources de LilyPond.
-
-La liste des exemples correspondant à chacun des sous-chapitres du
-manuel de notation est accessible par des liens dans le paragraphe
-@strong{Voir aussi}.
-
-
-@node À propos des références du programme
-@unnumberedsubsec À propos des références du programme
-@translationof About the Internals Reference
-
-@cindex retoucher
-@cindex variables
-@cindex propriétés
-@cindex lilypond-internals
-@cindex documentation du fonctionnement interne
-@cindex Scheme
-@cindex étendre lilypond
-@cindex index
-
-@rinternalsnamed{Top,Référence des propriétés internes} : c'est un
-ensemble de pages HTML étroitement liées entre elles, qui documente
-les moindres petits détails de chaque classe, objet et fonction de
-LilyPond. Cette documentation est produite directement à partir des
-définitions de formatage utilisées.
-
-Presque toutes les fonctions de formatage utilisées en interne sont
-directement disponibles pour l'utilisateur. Par exemple, toutes les
-variables qui contrôlent les épaisseurs, les distances etc., peuvent
-être modifiées dans les fichiers d'entrée. Il y a un grand nombre
-d'options de formatage, et elles sont toutes décrites dans ce
-document. Chaque section du manuel de notation a un paragraphe @b{Voir
-aussi}, qui renvoie à la documentation générée automatiquement. Dans la
-documentation au format HTML, ces paragraphes disposent de liens
-cliquables.
-
-
-@node Autres sources de documentation
-@unnumberedsubsec Autres sources de documentation
-@translationof Other documentation
-
-Pour finir, présentons d'autres précieuses sources de documentation.
-
-@itemize
-
-@item
-@ifhtml
-@ifset bigpage
-@uref{../topdocs/NEWS.html,Nouveautés} :
-@end ifset
-@ifclear bigpage
-@uref{../../topdocs/NEWS.html,Nouveautés} :
-@end ifclear
-@end ifhtml
-@ifnothtml
-Nouveautés :
-@end ifnothtml
-ce document résume les changements importants et les nouvelles
-fonctionalités de LilyPond depuis la dernière version stable.
-
-@item @uref{http://lists.gnu.org/archive/html/lilypond-user/, Les
-archives de la liste lilypond-user} : c'est un dépôt archivant les
-courriels qui ont été envoyés à la liste anglophone des utilisateurs.
-Beaucoup de questions sont apparues plusieurs fois sur la liste, il y
-a donc des chances que si vous avez une question, la réponse puisse
-être dans ces archives.
-@c DIV specific
-@uref{http://lists.gnu.org/archive/html/lilypond-user-fr/,Les archives
-de la liste francophone} ne sont pas aussi bien fournies, mais vous
-pouvez toujours y chercher des conversations passées sur les
-traductions, et si vous avez de la chance une réponse à une question.
-@c END DIV
-
-@item @uref{http://lists.gnu.org/archive/html/lilypond-devel/, Les
-archives de la liste lilypond-devel} : les courriels envoyés à la
-liste des développeurs y sont archivés. Les sujets de discussion sont
-plus techniques ; si vous voulez vous renseigner sur l'histoire du
-développement ou si vous avez une question très technique, tentez
-votre chance en cherchant dans ces archives.
-
-@item Fragments de musique au cours du texte : dans tous les documents
-HTML qui incluent des fragments musicaux, le code LilyPond utilisé
-pour produire l'image est accessible par un clic sur l'image.
-
-@item L'emplacement des fichiers de documentation mentionnés ici peut varier
-d'un système à l'autre. De temps en temps, ce manuel fait référence
-aux fichiers d'exemple et d'initialisation. Tout au long de ce
-manuel, nous donnons les emplacements des fichiers d'entrée
-relativement au répértoire racine de l'archive source. Par exemple,
-@file{input/@/test/@/bla@/.ly} peut référer au fichier
-@file{lilypond@/2.x.y/@/input/@/test/@/bla@/.ly}. Dans les paquets
-binaires pour les plateformes Unix, la documentation et les exemples
-se trouvent généralement sous @file{/usr/@/share/@/doc/@/lilypond/}.
-Les fichiers d'initialisation, par exemple @file{scm/@/lily@/.scm}, ou
-@file{ly/@/engraver@/-init@/.ly}, se trouvent généralement dans le
-répertoire @file{/usr/@/share/@/lilypond/}. @c pas encore en français -jm.
-@c Pour plus de détails, consultez @ref{Autres sources de documentation}.
-
-@end itemize
d'Eindhoven, un jour de 1995, que Jan, du pupitre des altistes tordus,
aborda Han-Wen, un corniste déjanté, pour lui parler d'un mirifique
projet dans lequel il venait de se lancer. Il s'agissait d'un système
-automatisé de gravure musicale --- le préprocesseur MPP pour MusiXTeX
+automatisé de gravure musicale -- le préprocesseur MPP pour MusiXTeX
pour être précis. Han-Wen, qui voulait justement imprimer certaines
-parties d'une oeuvre, jeta un premier coup d'oeil à ce programme, et
+parties d'une œuvre, jeta un premier coup d'œil à ce programme, et
devint très vite accro. Le MPP s'avéra bientôt une voie sans issue.
Après avoir ratiociné et échangé un grand nombre de courriels
enflammés, Han-Wen lança le projet LilyPond en 1996, dans lequel,
pas encore à faire comme autant de défis. L'exaltation de la
nouveauté s'estompant, on doit s'entraîner encore et encore. Les
gammes, les études deviennent vite ennuyeuses, et peuvent, si l'on
-n'est pas encouragé par d'autres --- professeurs, chefs ou public ---
+n'est pas encouragé par d'autres -- professeurs, chefs ou public --
en décourager plus d'un. Pourtant, pour peu que l'on persévère,
l'instrument devient progressivement une partie de notre vie. Si
certains jours il semble naturel d'en jouer, c'est un vrai bonheur.
Notre principale motivation vient sans doute de l'utilité réelle de
notre logiciel. En flânant sur Internet, nous trouvons beaucoup de
gens qui utilisent LilyPond pour réaliser d'impressionnantes
-partitions : c'est incroyable, mais en même temps très flatteur.
+partitions@tie{}: c'est incroyable, mais en même temps très flatteur.
Les utilisateurs ne se contentent pas de nous encourager en utilisant
-notre logiciel ; nombre d'entre eux nous aident aussi en faisant des
+notre logiciel@tie{}; nombre d'entre eux nous aident aussi en faisant des
suggestions et en signalant des bogues. Aussi, nous voudrions
remercier ici tous les utilisateurs qui nous ont signalé des bugs, ont
fait des suggestions ou ont contribué d'une façon ou d'une autre au
ensemble, et qu'on éprouve une satisfaction profonde à aider les gens,
au bout du compte, notre travail sur LilyPond est avant tout une
manière d'exprimer notre amour sincère de la musique. Puisse-t-il
-vous aider à créer de nombreuses et belles oeuvres !
+vous aider à créer de nombreuses et belles œuvres@tie{}!
Han-Wen et Jan
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
+ Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@menu
* Portée unique::
-* Modèles pour claviers::
+* Modèles pour piano::
* Quatuor à cordes::
* Ensemble vocal::
+* Orchestre::
* Exemples de notation ancienne::
-* Symboles de jazz::
-* Squelettes pour lilypond-book::
+* Autres modèles::
@end menu
@node Portée unique
@appendixsec Portée unique
-@translationof Single staff
+@translationof Single staff
@appendixsubsec Notes seules
{single-staff-template-with-notes,-lyrics,-and-chords.ly}
-@node Modèles pour claviers
-@appendixsec Modèles pour claviers
+@node Modèles pour piano
+@appendixsec Modèles pour piano
@translationof Piano templates
@appendixsubsec Piano seul
@node Quatuor à cordes
@appendixsec Quatuor à cordes
-@translationof String quartet
+@translationof String quartet
@appendixsubsec Quatuor à cordes
@node Ensemble vocal
@appendixsec Ensemble vocal
-@translationof Vocal ensembles
+@translationof Vocal ensembles
@appendixsubsec Partition pour chœur à quatre voix mixtes
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
{vocal-ensemble-template-with-lyrics-aligned-below-and-above-the-staves.ly}
+@appendixsubsec Couplet pour solo et refrain à deux voix
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{vocal-ensemble-template-with-verse-and-refrain.ly}
+
+@appendixsubsec Hymnes et cantiques
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{hymn-template.ly}
+
@node Orchestre
@appendixsec Orchestre
{orchestra,-choir-and-piano-template.ly}
+@c bad node name to avoid node name conflict
@node Exemples de notation ancienne
@appendixsec Exemples de notation ancienne
-@translationof Ancient notation templates
+@translationof Ancient notation templates
@appendixsubsec Transcription de musique mensurale
{ancient-notation-template----modern-transcription-of-gregorian-music.ly}
-@node Symboles de jazz
-@appendixsec Symboles de jazz
-@translationof Jazz combo
+@node Autres modèles
+@appendixsec Autres modèles
+@translationof Other templates
+
+@appendixsubsec Symboles de jazz
+@translationof Jazz combo
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
{jazz-combo-template.ly}
-
-@node Squelettes pour lilypond-book
-@appendixsec Squelettes pour lilypond-book
-@translationof lilypond-book templates
-
-Les exemples qui suivent sont destinés à des travaux gérés avec
-@code{lilypond-book}. Pour plus d'information sur ce programme,
-consultez @rprogram{LilyPond-book}.
-
-
-@appendixsubsec LaTeX
-Vous pouvez inclure des fragments de LilyPond dans un document @LaTeX{}.
-
-@example
-\documentclass[]@{article@}
-
-\begin@{document@}
-
-Des banalités en LaTeX.
-
-\begin@{lilypond@}
-\relative c'' @{
-a4 b c d
-@}
-\end@{lilypond@}
-
-D'autres banalités en LaTeX.
-
-\begin@{lilypond@}
-\relative c'' @{
-d4 c b a
-@}
-\end@{lilypond@}
-\end@{document@}
-@end example
-
-@appendixsubsec Texinfo
-
-Vous pouvez insérer des fragments de LilyPond dans des documents
-Texinfo. C'est d'ailleurs comme ceci qu'est construite cette
-documentation.
-
-@example
-\input texinfo
-@@node Accueil
-
-Du texte Texinfo
-
-@@lilypond[verbatim,fragment,ragged-right]
-a4 b c d
-@@end lilypond
-
-Un peu plus de texte en Texinfo
-
-@@lilypond[verbatim,fragment,ragged-right]
-d4 c b a
-@@end lilypond
-
-@@bye
-@end example
-
-
-@appendixsubsec xelatex
-
-@verbatim
-\documentclass{article}
-\usepackage{ifxetex}
-\ifxetex
-%quelques commandes spécifiques à xetex
-\usepackage{xunicode,fontspec,xltxtra}
-\setmainfont[Numbers=OldStyle]{Times New Roman}
-\setsansfont{Arial}
-\else
-%Cette section n'est nécessaire que si vous utilisez pdftex
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage{mathptmx}%Times
-\usepackage{helvet}%Helvetica
-\fi
-%Vous pouvez inclure ici tous les paquetages gérés par pdftex
-\usepackage[french,ngerman,finnish,english]{babel}
-\usepackage{graphicx}
-
-\begin{document}
-\title{Un document succint utilisant LilyPond et xelatex}
-\maketitle
-
-Les commandes habituelles de \textbf{fonte} au fil du \emph{texte}
-sont opérationnelles dans la mesure où elles \textsf{sont supportées
-par \LaTeX{} et XeteX.}
-Pour des commandes du type \verb+\XeTeX+, elles doivent être icluses
-dans un environnement \verb+\ifxetex+. Ceci peut vous servir à imprimer
-la commande \ifxetex \XeTeX{} \else XeTeX \fi qui n'est pas reconnue en
-\LaTeX pur.
-
-Vous pouvez facilement insérer des commandes LilyPond comme ici :
-
-\begin{lilypond}
-{a2 b c'8 c' c' c'}
-\end{lilypond}
-
-\noindent
-et reprendre le fil de votre propos.
-
-Les fontes des inclusions de partition avec LilyPond doivent être
-spacifiées dans le code même de l'extrait. A cet effet, consultez le
-manuel d'utilisation des programmes pour savoir comment utiliser
-lilypond-book.
-
-\selectlanguage{ngerman}
-Auch Umlaute funktionieren ohne die \LaTeX -Befehle, wie auch alle
-anderen
-seltsamen Zeichen: ß,ł,ã,č,я,щ, wenn sie von der Schriftart
-unterstützt werden.
-\end{document}
-@end verbatim
-
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 7ae8371e16d414819ac7d9a4d0abd8370c5f3d8f
+ Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@funindex '
@funindex ,
-Glossaire musicologique : @rglos{pitch}, @rglos{interval},
-@rglos{scale}, @rglos{middle C}, @rglos{octave},
-@rglos{accidental}.
+Glossaire musicologique :
+@rglosnamed{pitch,hauteur},
+@rglosnamed{interval,intervalle},
+@rglosnamed{scale,gamme},
+@rglosnamed{middle C,do central},
+@rglos{octave},
+@rglosnamed{accidental,altération}.
Le moyen le plus simple d'entrer des notes est d'utiliser le mode
d'octaves relatives, ou mode @code{\relative}. Dans ce mode, l'octave
@cindex note pointée
@cindex spécification des durées
-Glossaire musicologique : @rglos{beam}, @rglos{duration},
-@rglos{whole note}, @rglos{half note}, @rglos{quarter note},
-@rglos{dotted note}.
+Glossaire musicologique :
+@rglosnamed{beam,ligature},
+@rglosnamed{duration,durée},
+@rglosnamed{whole note,ronde},
+@rglosnamed{half note,blanche},
+@rglosnamed{quarter note,noire},
+@rglosnamed{dotted note,note pointée}.
La @notation{durée} d'une note est indiquée par un nombre qui suit sa
hauteur@tie{}: @code{1} pour une @notation{ronde}, @code{2} pour une
@cindex silences
@cindex notation des silences
-Glossaire musicologique : @rglos{rest}.
+Glossaire musicologique :
+@rglosnamed{rest,silence}.
On saisit un @notation{silence} tout comme une note, mais avec la
lettre @code{r} (pour @emph{rest}).
@funindex \time
@funindex time
-Glossaire musicologique : @rglos{time signature}.
+Glossaire musicologique : @rglosnamed{time signature,métrique}.
La @notation{métrique}, aussi appelée @notation{chiffre de mesure},
peut être définie à l'aide de la commande @code{\time}@tie{}:
@funindex \tempo
@funindex tempo
-Glossaire musicologique : @rglos{tempo indication}, @rglos{metronome}.
+Glossaire musicologique :
+@rglosnamed{tempo indication,indication de tempo},
+@rglosnamed{metronome,métronome}.
La commande @code{\tempo} permet de stipuler aussi bien le @emph{tempo}
que le métronome@tie{}:
@seealso
Manuel de notation : @ruser{Écriture des hauteurs de note},
@ruser{Écriture du rythme}, @ruser{Écriture des silences},
-@ruser{Métrique}, @ruser{Clefs}.
+@ruser{Gravure du rythme}, @ruser{Gravure des hauteurs}.
@node Travail sur les fichiers d'entrée
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+r@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
Translation of GIT committish: 11b44eeed204540f7a4e638f12afe5a9f5466ca8
@item @code{\phrasingSlurDown}
@tab @code{\phrasingSlurUp}
@tab @code{\phrasingSlurNeutral}
- @tab Attention : à distinguer des commandes de liaison ci-dessous
+ @tab Attention@tie{}: à distinguer des commandes de liaison ci-dessous
@item @code{\slurDown}
@tab @code{\slurUp}
@tab @code{\slurNeutral}
@end example
@noindent
-Voyons si ça marche sur notre exemple précédent :
+Voyons si ça marche sur notre exemple précédent@tie{}:
@cindex DynamicText, exemple de dérogation
@cindex extra-spacing-width, exemple d'utilisation de la propriété
@code{\once \override Tie #'staff-position = #3.5}
-Cela s'adjoint à la deuxième mesure, pour donner :
+Cela s'adjoint à la deuxième mesure, pour donner@tie{}:
@c line-width ensures no break
@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+++ /dev/null
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
-@ignore
- Translation of GIT committish: 60c59602bb30b60154a2310ebf0c88036eca71b2
-
- 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 \version "2.12.0"
-
-@c Translators: Ludovic Sardain, Jean-Charles Malahieude
-@c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude
-
-@node Travail sur des projets LilyPond
-@chapter Travail sur des projets LilyPond
-@translationof Working on LilyPond projects
-
-Cette section explique comment résoudre ou éviter certains problèmes
-courants. Si vous avez de l'expérience en programmation, beaucoup de
-ces astuces peuvent vous paraître évidentes, mais vous ne perdrez tout
-de même pas votre temps à lire ce chapitre.
-
-@menu
-* Suggestions pour la saisie de fichiers LilyPond::
-* Quand ça ne fonctionne pas::
-* De la commande @command{make} et des fichiers @code{Makefile}::
-@end menu
-
-@node Suggestions pour la saisie de fichiers LilyPond
-@section Suggestions pour la saisie de fichiers LilyPond
-@translationof Suggestions for writing LilyPond input files
-
-Maintenant vous êtes prêt à travailler sur de plus gros fichiers
-LilyPond -- des pièces entières, et plus seulement les petits
-exemples du tutoriel. Mais comment devriez-vous vous y prendre ?
-
-Tant que LilyPond parvient à comprendre vos fichiers et produit le
-résultat que vous souhaitez, peu importe la manière dont le code est
-organisé. Néanmoins, quelques critères doivent être pris en compte
-lorsque l'on écrit un fichier LilyPond.
-
-@itemize
-@item Si vous faites une erreur, la structure même du fichier LilyPond
-peut permettre de la localiser plus ou moins facilement.
-
-@item Et si vous souhaitez partager vos fichiers avec quelqu'un
-d'autre, ou si vous souhaitez modifier vos propres fichiers dans
-quelques années ? Si certains fichiers LilyPond sont compréhensibles
-au premier coup d'oeil, d'autres vous feront vous arracher les cheveux
-pendant une heure.
-
-@item Et si vous souhaitez mettre à jour votre fichier pour
-l'utiliser avec une version plus récente de LilyPond ? La syntaxe du
-langage d'entrée change parfois lorsque LilyPond s'améliore. La
-plupart des changements peuvent être appliqués automatiquement avec
-@code{convert-ly}, mais quelques-uns peuvent requérir une intervention
-manuelle. Vos fichiers LilyPond peuvent être structurés de manière à
-faciliter leur mise à jour.
-@end itemize
-
-@menu
-* Suggestions générales::
-* Gravure de musique existante::
-* Projets d'envergure::
-* Feuilles de style::
-@end menu
-
-@node Suggestions générales
-@subsection Suggestions générales
-@translationof General suggestions
-
-Voici quelques conseils qui peuvent vous éviter certains problèmes ou
-en résoudre d'autres.
-
-@itemize
-@item @strong{Ajoutez le numéro de version dans chaque fichier}.
-Notez que chaque fichier modèle contient une ligne @w{@code{\version
-"@version{}"}}. Nous vous conseillons fortement d'inclure cette ligne,
-même pour de petits fichiers. Par expérience, il est très difficile
-de se rappeler quelle version de LilyPond on utilisait quelques
-années auparavant. L'utilitaire @command{convert-ly} demande que vous
-spécifiiez la version de LilyPond vous utilisiez alors.
-
-@item @strong{Ajoutez des contrôles} : @ruser{Vérifications d'octave}
-et @ruser{Vérification des limites et numéros de mesure}. Si vous avez
-ajouté des contrôles de loin en loin, et que vous faites une erreur,
-vous pourrez la retrouver plus rapidement. @qq{De loin en loin},
-qu'est-ce à dire ? Cela dépend de la complexité de la musique. Pour de
-la musique très simple, peut-être une ou deux fois. Pour de la musique
-très complexe, peut-être à chaque mesure.
-
-@item @strong{Une mesure par ligne de texte}. Si la musique en
-elle-même ou le résultat que vous désirez contient quelque chose de
-compliqué, il est souvent bon de n'écrire qu'une seule mesure par ligne.
-Économiser de la place en tassant huit mesures par ligne, ça ne vaut pas
-vraiment le coup si l'on doît corriger vos fichiers.
-
-@item @strong{Ajoutez des commentaires}. Utilisez soit des
-numéros de mesure (assez souvent), soit des références au contenu
-musical -- @qq{second thème des violons}, @qq{quatrième variation}, etc.
-Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez
-une pièce pour la première fois, mais si vous souhaitez y revenir deux
-ou trois ans plus tard pour changer quelque chose, ou si vous donnez
-le fichier source à un ami, ce sera beaucoup plus difficile de
-déterminer vos intentions ou la manière dont votre fichier est
-structuré si vous n'y avez pas adjoint de commentaires.
-
-@item @strong{Indentez les accolades}. Beaucoup de problèmes
-viennent d'un défaut de parité entre @code{@{} et @code{@}}.
-
-@item @strong{Mentionnez les durées} au début de chaque section ou
-variable. Si vous saisissez @code{c4 d e} au début d'une phrase, vous
-vous épargnerez des problèmes si, plus tard, vous modifiez votre musique.
-
-@item @strong{Séparez les affinages de mise en forme} de la musique
-elle-même. Voyez
-@ref{Économie de saisie grâce aux identificateurs et fonctions} et
-@ref{Feuilles de style}.
-
-@end itemize
-
-
-@node Gravure de musique existante
-@subsection Gravure de musique existante
-@translationof Typesetting existing music
-
-Si vous saisissez de la musique à partir d'une partition existante,
-c'est-à-dire de la musique déjà écrite,
-
-@itemize
-
-@item n'entrez qu'un seul système de la partition originale
-à la fois -- mais toujours une seule mesure par ligne de texte --,
-et vérifiez chaque système lorsqu'il est terminé. Vous pouvez
-utiliser les commandes @code{showLastLength} et @code{showFirstLength}
-pour accélérer la compilation -- voir
-@ruser{Ignorer des passages de la partition} ;
-
-@item définissez @code{mBreak = @{\break @}} et insérez
-@code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de
-ligne identiques à la partition originale. Cela facilite la
-comparaison entre la partition originale et la partition de
-LilyPond. Lorsque vous avez fini de relire votre musique, vous pouvez
-définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et
-laisser LilyPond placer les sauts de ligne selon son propre algorithme.
-
-@item encadrez les notes d'une partie pour instrument transpositeur
-dans un
-
-@example
-\transpose c @var{tonalité-naturelle} @{...@}
-@end example
-(où @var{tonalité-naturelle} correspond à celle de l'instrument en
-question) de telle sorte que la musique comprise dans cette variable se
-retrouve en ut. Vous pourrez toujours transposer à l'inverse si besoin
-lorsque vous ferez appel à cette variable. Des erreurs de transposition
-seront moins susceptibles de se produire si la musique de toutes les
-variables est dans la même et unique tonalité.
-
-De la même manière, prenez toujours le do comme note de départ ou
-d'arrivée. Ceci aura pour simple conséquence que les autres tonalités
-que vous utiliserez seront celles propres à chacun des instruments --
-sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol.
-
-@end itemize
-
-
-@node Projets d'envergure
-@subsection Projets d'envergure
-@translationof Large projects
-
-Lorsque l'on travaille sur un gros projet, il devient vital
-de structurer clairement ses fichiers LilyPond.
-
-@itemize @bullet
-
-@item @strong{Utilisez un identificateur pour chaque voix},
-avec un minimum de structure dans la définition. La structure de la
-section @code{\score} est la plus susceptible de changer, notamment
-dans une nouvelle version de LilyPond, alors que la définition du
-@code{violon} l'est beaucoup moins.
-
-@example
-violin = \relative c'' @{
-g4 c'8. e16
-@}
-...
-\score @{
- \new GrandStaff @{
- \new Staff @{
- \violin
- @}
- @}
-@}
-@end example
-
-@item @strong{Séparez les retouches} des définitions de
-musique. Nous vous avons déjà invité à adopter une telle pratique, qui
-par ailleurs devient vitale pour des projets d'importance. Nous
-pouvons avoir besoin de changer la définition de
-@code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire
-qu'une seule fois, et nous pourrons encore éviter de
-modifier quoi que ce soit à l'intérieur de la définition
-du @code{violon}.
-
-@example
-fpuisp = _\markup@{
- \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
-violin = \relative c'' @{
-g4\fpuisp c'8. e16
-@}
-@end example
-
-@end itemize
-
-
-@node Feuilles de style
-@subsection Feuilles de style
-@translationof Style sheets
-
-La sortie que produit LilyPond peut être largement modifiée -- voir
-@ref{Retouche de partition} pour plus de détails. Mais que faire si
-vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
-retouches ? Ou si vous souhaitez simplement séparer les retouches de
-la musique elle-même ? Rien de plus facile.
-
-Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas
-les parties avec tous les @code{#()}. Celles-ci sont expliquées dans
-@ref{Retouches avancées avec Scheme}.
-
-@lilypond[quote,verbatim,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line(#:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-\relative c'' {
- \tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \inst "Clarinet"
- cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
-}
-@end lilypond
-
-Il y a quelques problèmes de chevauchement ; nous allons arranger
-cela en utilisant les techniques de @ref{Déplacement d'objets}. On peut
-aussi faire quelque chose pour les définitions de @code{mpdolce}
-et @code{inst}. Elles produisent le résultat que nous désirons,
-mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
-Il suffirait de les copier et coller au début de chaque
-fichier, mais c'est fastidieux. De plus, cela laisse les définitions
-dans nos fichiers de musique, et je trouve personnellement tous ces
-@code{#()} assez laids. Stockons-les dans un autre fichier :
-
-@example
-%%% enregistrez ceci dans un fichier nommé "definitions.ily"
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line(#:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-@end example
-
-Nous rappellerons ce fichier par une simple commande @code{\include} au
-début de notre fichier de musique. Lui attribuer l'extension
-@code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
-voué à être inclus dans un fichier maître ; il n'est pas destiné à être
-compilé isolément.
-Maintenant, modifions notre musique (enregistrez ce fichier
-sous @code{musique.ly}).
-
-@c We have to do this awkward example/lilypond-non-verbatim
-@c because we can't do the \include stuff in the manual.
-
-@example
-\include "definitions.ily"
-
-\relative c'' @{
- \tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \inst "Clarinet"
- cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
-@}
-@end example
-
-@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line(#:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-\relative c'' {
- \tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \inst "Clarinet"
- cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
-}
-@end lilypond
-
-C'est mieux, mais effectuons encore quelques retouches. Le glissando
-est peu visible, c'est pourquoi nous allons l'épaissir et le
-rapprocher des têtes de note. Déplaçons l'indication métronomique
-au-dessus de la clef, au lieu de la laisser au-dessus de la première
-note. Et pour finir, mon professeur de composition déteste les
-chiffrages de mesure en @qq{C}, nous allons donc le transformer en
-@qq{4/4}.
-
-Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le
-fichier @file{definitions.ily} par ceci :
-
-@example
-%%% definitions.ily
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line( #:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-\layout@{
- \context @{ \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
- @}
- \context @{ \Staff
- \override TimeSignature #'style = #'numbered
- @}
- \context @{ \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
- @}
-@}
-@end example
-
-@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line( #:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-\layout{
- \context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
- }
- \context { \Staff
- \override TimeSignature #'style = #'numbered
- }
- \context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
- }
-}
-
-\relative c'' {
- \tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \inst "Clarinet"
- cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
-}
-@end lilypond
-
-C'est encore mieux ! Mais supposons maintenant que je veuille publier
-cette pièce. Mon professeur de composition n'aime pas les chiffrages
-de mesure en @qq{C}, mais moi je les aime bien. Copions l'actuel
-@file{definitions.ily} dans le fichier @file{publication-web.ily}, et
-modifions ce dernier. Puisque la musique est destinée à produire un
-fichier PDF affiché sur écran, nous allons aussi augmenter la taille
-globale de police.
-
-@example
-%%% definitions.ily
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line( #:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-#(set-global-staff-size 23)
-\layout@{
- \context @{ \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
- @}
- \context @{ \Staff
- @}
- \context @{ \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
- @}
-@}
-@end example
-
-@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
- #:line( #:dynamic "mp" #:text #:italic "dolce" )))
-
-inst = #(define-music-function (parser location string) (string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
-
-#(set-global-staff-size 23)
-\layout{
- \context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
- }
- \context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
- }
-}
-
-\relative c'' {
- \tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \inst "Clarinet"
- cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
-}
-@end lilypond
-
-Il ne nous reste plus qu'à remplacer @code{\include "definitions.ily"}
-par @code{\include "publication-web.ily"} dans notre fichier de musique.
-
-Il est possible, bien sûr, de rendre cela encore plus pratique. Nous
-pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
-que les définitions de @code{mpdolce} et de @code{inst}, un
-fichier @file{publication-web.ily} qui ne contiendrait que la section
-@code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
-ne contiendrait que les retouches pour produire le résultat que mon
-professeur préfère. Le début du fichier @file{musique.ly} ressemblerait
-alors à
-
-@example
-\include "definitions.ily"
-
-%%% Décommentez seulement une de ces deux lignes !
-\include "publication-web.ily"
-%\include "universite.ily"
-@end example
-
-Cette approche peut être utile même si vous ne produisez qu'un seul
-jeu de partitions. J'utilise personnellement une demi-douzaine de
-fichiers de @qq{feuille de style} pour mes projets. Je commence
-chaque fichier de musique par @code{\include "../global.ily"} qui contient :
-
-@example
-%%% global.ily
-\version @w{"@version{}"}
-#(ly:set-option 'point-and-click #f)
-\include "../init/init-defs.ly"
-\include "../init/init-mise-en-page.ly"
-\include "../init/init-en-tetes.ly"
-\include "../init/init-papier.ly"
-@end example
-
-@node Quand ça ne fonctionne pas
-@section Quand ça ne fonctionne pas
-@translationof When things don't work
-
-@menu
-* Mise à jour d'anciens fichiers::
-* Résolution de problèmes -- tout remettre à plat::
-* Exemples minimalistes::
-@end menu
-
-@node Mise à jour d'anciens fichiers
-@subsection Mise à jour d'anciens fichiers
-@translationof Updating old input files
-
-@cindex convert-ly
-@cindex mise à jour d'anciens fichiers
-
-La syntaxe de LilyPond change de temps en temps. Ces changements de
-syntaxe du langage d'entrée accompagnent les améliorations du
-logiciel. Ces changements sont parfois destinés à rendre les fichiers
-plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles
-fonctionnalités.
-
-LilyPond est fourni avec un utilitaire qui facilite cette mise à
-jour : @command{convert-ly}. Pour savoir comment utiliser ce programme,
-voir @rprogram{Mise à jour des fichiers avec convert-ly}.
-
-Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les
-modifications. Il s'occupe des changements qui ne requièrent qu'une
-simple substitution de texte -- comme @code{raggedright} devenant
-@code{ragged-right} --, les autres étant trop compliqués à effectuer.
-Les changements de syntaxe qui ne sont pas gérés par
-@command{convert-ly} sont énumérés dans
-@rprogram{Mise à jour des fichiers avec convert-ly}.
-
-Par exemple, dans les versions 2.4 et antérieures de LilyPond,
-les accents et les lettres non anglaises étaient entrées en
-utilisant LaTeX -- par exemple, @code{No\"el}. À partir de la
-version 2.6, le caratère @code{ë} doit être entré directement
-dans le fichier LilyPond comme caractère UTF-8.
-@code{convert-ly} ne peut pas changer tous les caractères
-LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux
-fichiers LilyPond manuellement.
-
-
-
-@node Quelques erreurs des plus courantes
-@subsection Quelques erreurs des plus courantes
-@translationof Common errors
-
-Les conditions amenant aux erreurs qui suivent sont fréquentes, bien
-qu'elles ne soient pas évidentes ni facilement localisables. Nous
-espérons que ces explications vous aideront à les résoudre plus
-facilement.
-
-
-@menu
-* La musique déborde de la page::
-* Apparition d'une portée supplémentaire::
-* Erreur renvoyant à ../ly/init.ly::
-* Message d'erreur « Unbound variable % »::
-@end menu
-
-@node La musique déborde de la page
-@unnumberedsubsubsec La musique déborde de la page
-@translationof Music runs off the page
-
-Lorsque la musique s'épanche au delà de la marge droite ou bien semble
-anormalement comprimée, la raison en est le plus souvent une note à la
-durée erronée ; cela finit par provoquer le débordement de la dernière
-note d'une mesure. Rien ne s'oppose à ce que la dernière note d'une
-mesure ne s'arrête avant la barre de mesure ; on considère simplement
-qu'elle se prolonge sur la mesure suivante. Des débordements à
-répétition finissent par générer une musique comprimée ou qui sort de la
-page, pour la simple et bonne raison que les sauts de ligne automatiques
-ne peuvent intervenir qu'à la fin d'une mesure complète, autrement dit
-lorsque toutes les notes sont terminées avant la fin de la mesure.
-
-@warning{Une durée erronée peut empêcher les sauts de ligne, ce qui
-conduit à une musique compressée, voire à un débordement de la page.}
-
-Une erreur de durée sera bien plus facilement localisable si vous
-positionnez régulièrement des contrôles de barre de mesure -- voir
-@ruser{Vérification des limites et numéros de mesure}.
-
-Si vous tenez absolument à enchainer de tels débordements, vous devrez
-insérer des barres de mesure invisibles là où vous souhaitez positionner
-un saut de ligne. Consultez le chapitre @ruser{Barres de mesure} pour
-plus de détails.
-
-
-@node Apparition d'une portée supplémentaire
-@unnumberedsubsubsec Apparition d'une portée supplémentaire
-@translationof An extra staff appears
-
-Lorsque les contextes ne sont pas créés explicitement par la commande
-@code{\new}, ils le seront si la commande à exécuter n'est pas censée
-s'appliquer au contexte en cours. Pour des partitions simples, les fait
-que les contextes soient automatiquement créés rend bien des services,
-et c'est d'ailleurs le cas pour la majorité des exemples contenus dans
-les manuels de LilyPond. Cependant, la création implicite d'un contexte
-peut aboutir à l'apparition d'une portée @qq{parasite}. On s'attend par
-exemple, en lisant le code qui suit, à ce que toutes les têtes de notes
-soient en rouge, alors que le résultat nous présente deux portées et que
-les notes, placées sur la portée inférieure, restent en noir.
-
-@lilypond[quote,verbatim,relative=2]
-\override Staff.NoteHead #'color = #red
-\new Staff { a }
-@end lilypond
-
-Étant donné qu'aucun contexte @code{Staff} n'existe lorsque la
-dérogation est introduite, LilyPond le crée implicitement pour lui
-appliquer la directive considérée. Survient alors la commande
-@w{@code{\new Staff}} qui, à son tour, crée une nouvelle portée pour
-contenir les notes qui suivent. Voici la syntaxe correcte pour obtenir
-ces notes en rouge :
-
-@lilypond[quote,verbatim,relative=2]
-\new Staff {
- \override Staff.NoteHead #'color = #red
- a
-}
-@end lilypond
-
-Autre exemple : la présence d'une commande @code{\relative} à
-l'intérieur d'une section @code{\repeat} génèrera obligatoirement une
-portée intempestive. Cela tient au fait que la commande @code{\repeat}
-va créer deux blocs @code{\relative} qui, chacun à leur tour, créeront
-implicitement un bloc @code{Staff} assorti d'un bloc @code{Voice}.
-
-@lilypond[quote,verbatim]
-\repeat unfold 2 \relative { c d e f }
-@end lilypond
-
-La manière adéquate de procéder consiste à inverser les commandes
-@code{\repeat} et @code{\relative}, comme ceci :
-
-@lilypond[quote,verbatim]
-\relative {
- \repeat unfold 2 { c d e f }
-}
-@end lilypond
-
-
-@node Erreur renvoyant à ../ly/init.ly
-@unnumberedsubsubsec Erreur renvoyant à @code{../ly/init.ly}
-@translationof Apparent error in ../ly/init.ly
-
-Certains messages d'erreur relatifs à une erreur de syntaxe dans le
-fichier @code{../ly/init.ly} peuvent survenir lorsque le fichier est mal
-formaté. Cela se produit notamment lors d'un défaut de parité de
-bornages ou de guillemets.
-
-L'erreur la plus courante est la simple omission d'une accolade
-fermante (@code{@}} à la fin du bloc @code{Score}. La solution est
-évidente en pareil cas : il suffit de vérifier que le bloc @code{Score}
-est bien clôturé. La structure des fichiers LilyPond est abordée plus
-en détails au chapitre @ref{Organisation des fichiers LilyPond}. C'est la
-raison pour laquelle nous vous invitons à utiliser un éditeur de texte
-qui prenne en charge le contrôle de parité des parenthèses, crochets et
-accolades afin de vous éviter de telles erreurs.
-
-Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message
-d'erreur devrait vous indiquer un numéro de ligne avoisinant. L'erreur
-se situe la plupart du temps une ou deux lignes au-dessus de celle
-indiquée.
-
-
-@node Message d'erreur « Unbound variable % »
-@unnumberedsubsubsec Message d'erreur « Unbound variable % »
-@translationof Error message Unbound variable %
-
-Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
-fichier journal, est associé à un message du type @qq{GUILE a signalé
-une erreur @dots{}}, survient à chaque fois qu'un commentaire
-@emph{LilyPond} est indûment placé dans une routine @emph{Scheme}.
-
-Un commentaire LilyPond est introduit par le signe pourcent (@code{%})
-et ne doit en aucun cas se trouver dans une routine Scheme. En Scheme,
-les commentaires s'introduisent par un point-virgule (@code{;}).
-
-
-@node Résolution de problèmes -- tout remettre à plat
-@subsection Résolution de problèmes -- tout remettre à plat
-@translationof Troubleshooting (taking it all apart)
-
-Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas
-compiler. Les messages que LilyPond affiche peuvent vous aider à
-trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire
-quelques recherches pour déterminer la source du problème.
-
-Pour ce faire, les outils les plus puissants sont le commentaire de
-fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
-bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne
-pouvez localiser le problème, commencez par mettre en commentaire de
-grandes parties de votre fichier source. Après avoir mis en
-commentaire une section, essayez de compiler à nouveau. Si cela
-fonctionne, c'est que le problème se situe dans cette partie du
-fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire
-d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile.
-
-Dans un cas extrême, vous pourriez en arriver à
-
-@example
-\score @{
- <<
- % \melodie
- % \harmonie
- % \basse
- >>
- \layout@{@}
-@}
-@end example
-
-@noindent
-c'est-à-dire un fichier sans aucune musique.
-
-Si cela se produit, ne vous découragez pas. Décommentez un peu, la
-partie de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas
-le cas, placez en commentaire toute la partie de basse, mais laissez
-@code{\basse} décommenté dans le bloc @code{\score}.
-
-@example
-basse = \relative c' @{
-%@{
- c4 c c c
- d d d d
-%@}
-@}
-@end example
-
-Maintenant commencez à décommenter petit à petit le partie de
-@code{basse} jusqu'à ce que vous localisiez la ligne qui pose
-problème.
-
-Une autre technique de déboguage très utile est la construction
-d'@ref{Exemples minimalistes}.
-
-
-@node Exemples minimalistes
-@subsection Exemples minimalistes
-@translationof Minimal examples
-
-Un exemple minimal est un exemple de code aussi court que possible.
-De tels exemples sont bien plus compréhensibles que des exemples
-longs. Les exemples minimalises sont utilisés pour
-
-@itemize
-@item les rapports de bogue,
-@item les demandes d'aide sur les listes de diffusion,
-@item un ajout au
-@uref{http://lsr.dsi.unimi.it/,LilyPond Snippet Repository}.
-@end itemize
-
-Pour construire un exemple minimal, la règle est très simple : enlevez
-tout ce qui n'est pas nécessaire. Il est préférable de commenter les
-lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous
-apercevez que certaines étaient @emph{réellement} nécessaires, vous
-pouvez les décommenter au lieu de les resaisir.
-
-Il y a deux exceptions à cette règle du strict nécessaire :
-
-@itemize
-@item incluez le numéro de @code{\version} en début de fichier
-@item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au
-début de votre exemple.
-@end itemize
-
-Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture :
-
-@itemize
-@item évitez d'utiliser des notes, armures ou métriques compliquées, à
-moins que vous ne vouliez montrer quelque chose en rapport avec
-celles-ci,
-@item n'utilisez pas de commandes @code{\override} sauf si elles font
-l'intérêt de l'exemple.
-@end itemize
-
-
-
-
-
-@node De la commande @command{make} et des fichiers @code{Makefile}
-@section De la commande @command{make} et des fichiers @code{Makefile}
-@translationof Make and Makefiles
-
-@cindex makefiles
-@cindex make
-
-La plupart des plates-formes sur lesquelles tourne LilyPond disposent
-d'un logiciel appelé @code{make}. Ce logiciel va lire un fichier
-spécial, nommé de @code{Makefile}, qui contient tout ce qu'il
-faut -- les dépendances entre certains fichiers, les instructions
-successives à traiter par le système -- pour aboutir au fichier que
-vous désirez obtenir. Il pourrait par exemple contenir tout ce qu'il
-faut pour produire @code{ballade.pdf} et @code{ballade.midi} à partir de
-@code{ballade.ly} en lançant LilyPond.
-
-La création d'un @code{Makefile} peut se révéler pertinente pour
-certains projets, que ce soit par simple goût personnel ou bien par
-respect de ceux qui pourront accéder à vos sources. Cette manière de
-procéder est particulièrement indiquée lorsque vous travaillez sur un
-projet de grande envergure impliquant de nombreuses inclusions de
-fichiers et différentes éditions -- par exemple un conducteur et un
-matériel d'orchestre complet avec la partition pour le chef et une
-partition séparée pour chacun des pupitres -- ou bien si votre projet
-requiert certaines commandes particulières comme @code{lilypond-book}.
-Les @emph{Makefiles} varient tant en complexité qu'en flexibilité selon
-les besoin et les aptitudes de celui qui les crée. Le programme GNU Make
-est installé par défaut sur les distributions Linux et sur MacOS@tie{}X,
-et il en existe une version pour les environnements Windows.
-
-Consultez le @strong{GNU Make Manual} pour plus de détails sur ce dont
-@code{make} est capable -- vous pourrez même en trouver des versions
-françaises à l'aide des moteurs de recherche --, dans la mesure où ce
-qui suit ne donne qu'un bref apperçu de ses possibilités.
-
-Les commandes permettant de définir les règles diffèrent selon la
-plate-forme : si les différents Linux et MacOS@tie{}X utilisent
-@code{bash}, Windows utilise @code{cmd}. Dans le cas de MacOS@tie{}X,
-vous devrez toutefois configurer votre système de telle sorte qu'il
-utilise l'interpréteur en ligne de commande. Voici quelques exemples de
-fichier @emph{Makefile}, avec une version pour Linux ou MacOS et une
-pour Windows.
-
-Pour commencer, une pièce à quatre mouvements pour orchestre et dont les
-fichiers sont répartis selon l'arborescence suivante :
-
-@example
-Symphonie/
-|-- MIDI/
-|-- Makefile
-|-- Notes/
-| |-- alto.ily
-| |-- cor.ily
-| |-- cello.ily
-| |-- figures.ily
-| |-- hautbois.ily
-| |-- trioCordes.ily
-| |-- violonOne.ily
-| `-- violonTwo.ily
-|-- Partitions/
-| |-- symphonie.ly
-| |-- symphonieI.ly
-| |-- symphonieII.ly
-| |-- symphonieIII.ly
-| `-- symphonieIV.ly
-|-- PDF/
-|-- Pupitres/
-| |-- symphon-alto.ly
-| |-- symphonie-cello.ly
-| |-- symphonie-cor.ly
-| |-- symphonie-hautbois.ly
-| |-- symphonie-violonUn.ly
-| `-- symphonie-violonDeux.ly
-`-- symphonieDefs.ily
-@end example
-
-Les fichiers @code{.ly} des répertoires @code{Partitions} et
-@code{Pupitres} récupèreront la notation des fichiers @code{.ily}
-contenus dans le répertoire @code{Notes} :
-
-@example
-%%% début du fichier "symphone-cello.ly"
-\include ../symphonieDefs.ily
-\include ../Notes/cello.ily
-@end example
-
-Le @emph{Makefile} répertorie des cibles correspondant à @code{score}
-(l'intégrale au format conducteur), @code{mouvements} (chacun des
-mouvements au format conducteur) et @code{pupitres} (une partition par
-pupitre). Il contient aussi une cible @code{archive} chargée de générer
-une archive des fichiers source qui pourra être diffusée sur la toile ou
-transmise par courriel. Voici ce que contiendrait ce @emph{Makefile}
-pour Linux ou MacOS@tie{}X. Ce fichier doit être enregistré sous le nom
-de @code{Makefile} à la racine du projet -- ici @code{Symphonie}.
-
-@warning{Lorsque vous définissez une cible ou une règle sur plusieurs
-lignes, les lignes à partir de la deuxième @strong{doivent} débuter par
-une tabulation, non pas par des espaces.}
-
-@example
-# Le préfixe au nom des fichiers résultants
-piece = symphonie
-# Détermination du nombre de processeurs
-CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
-# La commande d'appel à lilypond
-LILY_CMD = lilypond -ddelete-intermediate-files \
- -dno-point-and-click -djob-count=$(CPU_CORES)
-
-# Les suffixes utilisés dans ce Makefile
-.SUFFIXES: .ly .ily .pdf .midi
-
-# Les fichiers sources et résultants sont recherchés dans les répertoires
-# listés dans la variable VPATH. Ceux-ci sont tous des sous-répertoires
-# du répertoire courant (fourni par la variable de GNU make `CURDIR').
-VPATH = \
- $(CURDIR)/Partitions \
- $(CURDIR)/PDF \
- $(CURDIR)/Pupitres \
- $(CURDIR)/Notes
-
-# La règle type pour créer un PDF et un MIDI à partir d'un fichier
-# source LY.
-# Les .pdf résultants iront dans le sous-répertoire "PDF" et les fichiers
-# .midi dans le sous-répertoire "MIDI".
-%.pdf %.midi: %.ly
- $(LILY_CMD) $<; \ # cette ligne commence par une tabulation
- if test -f "$*.pdf"; then \
- mv "$*.pdf" PDF/; \
- fi; \
- if test -f "$*.midi"; then \
- mv "$*.midi" MIDI/; \
- fi
-
-notes = \
- alto.ily \
- cello.ily \
- cor.ily \
- hautbois.ily \
- violonUn.ily \
- violonDeux.ily
-
-# Les dépendances selon le mouvement.
-$(piece)I.pdf: $(piece)I.ly $(notes)
-$(piece)II.pdf: $(piece)II.ly $(notes)
-$(piece)III.pdf: $(piece)III.ly $(notes)
-$(piece)IV.pdf: $(piece)IV.ly $(notes)
-
-# Les dépendances pour la partition intégrale.
-$(piece).pdf: $(piece).ly $(notes)
-
-# Les dépendances pour les pupitres.
-$(piece)-alto.pdf: $(piece)-alto.ly alto.ily
-$(piece)-cello.pdf: $(piece)-cello.ly cello.ily
-$(piece)-cor.pdf: $(piece)-cor.ly cor.ily
-$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
-$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
-$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
-
-# Lancer `make score' pour générer l'intégrale des quatre mouvements en
-# un seul fichier.
-.PHONY: score
-score: $(piece).pdf
-
-# Lancer `make parties' pour obtenir tous les pupitres.
-# Lancer `make toto.pdf' pour obtenir la partie instrumentale de toto.
-# Par exemple : `make symphonie-cello.pdf'.
-.PHONY: parties
-parties: $(piece)-cello.pdf \
- $(piece)-violonUn.pdf \
- $(piece)-violonDeux.pdf \
- $(piece)-alto.pdf \
- $(piece)-hautbois.pdf \
- $(piece)-cor.pdf
-
-# Lancer `make mouvements' pour générer un fichier séparé pour chacun
-# des mouvements.
-.PHONY: mouvements
-mouvements: $(piece)I.pdf \
- $(piece)II.pdf \
- $(piece)III.pdf \
- $(piece)IV.pdf
-
-all: score parties mouvements
-
-archive:
- tar -cvvf symphonie.tar \ # cette ligne commence par une tabulation
- --exclude=*pdf --exclude=*~ \
- --exclude=*midi --exclude=*.tar \
- ../Symphonie/*
-@end example
-
-
-Les choses se compliquent sous Windows. Une fois GNU Make pour Windows
-téléchargé et installé, il vous faudra correctement définir le chemin
-d'accès au programme @emph{Make} -- dans les variables d'environnement
-du système -- afin que l'interpréteur de commandes DOS puisse le
-localiser. Pour cela, faites un clic droite sur @qq{Poste de travail},
-choisissez @code{Propriétés} puis @code{Avancées}. Cliquez sur
-@code{Variables d'environnement} puis, dans l'onglet @w{@code{Variables
-système}}, mettez @code{path} en surbrillance et cliquez sur
-@code{Modifier}. Ajoutez alors le chemin d'accès complet à l'exécutable
-de GNU Make, qui devrait ressembler à :
-
-@example
-C:\Program Files\GnuWin32\bin
-@end example
-
-Il va également falloir adapter le @emph{makefile} aux particularités de
-l'interpréteur de commandes et à la présence d'espaces dans le nom de
-certains répertoire de ce système.
-La cible @code{archive} est tout bonnement supprimée, puisque Windows ne
-dispose pas de la commande @code{tar}. Enfin, les fichiers MIDI ont une
-extension par défaut propre à Windows.
-
-
-@example
-## VERSION POUR WINDOWS
-##
-piece = symphonie
-LILY_CMD = lilypond -ddelete-intermediate-files \
- -dno-point-and-click \
- -djob-count=$(NUMBER_OF_PROCESSORS)
-
-#get the 8.3 name of CURDIR (workaround for spaces in PATH)
-workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
- do @@echo %%~sb)
-
-.SUFFIXES: .ly .ily .pdf .mid
-
-VPATH = \
- $(workdir)/Partitions \
- $(workdir)/PDF \
- $(workdir)/Pupitress \
- $(workdir)/Notes
-
-%.pdf %.mid: %.ly
- $(LILY_CMD) $< # cette ligne commence par une tabulation
- if exist "$*.pdf" move /Y "$*.pdf" PDF/ # tabulation au début
- if exist "$*.mid" move /Y "$*.mid" MIDI/ # tabulation au début
-
-notes = \
- cello.ily \
- figures.ily \
- cor.ily \
- hautbois.ily \
- trioCordes.ily \
- alto.ily \
- violonUn.ily \
- violonDeux.ily
-
-$(piece)I.pdf: $(piece)I.ly $(notes)
-$(piece)II.pdf: $(piece)II.ly $(notes)
-$(piece)III.pdf: $(piece)III.ly $(notes)
-$(piece)IV.pdf: $(piece)IV.ly $(notes)
-
-$(piece).pdf: $(piece).ly $(notes)
-
-$(piece)-cello.pdf: $(piece)-cello.ly cello.ily
-$(piece)-cor.pdf: $(piece)-cor.ly cor.ily
-$(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
-$(piece)-alto.pdf: $(piece)-alto.ly alto.ily
-$(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
-$(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
-
-.PHONY: score
-score: $(piece).pdf
-
-.PHONY: parties
-parties: $(piece)-cello.pdf \
- $(piece)-violonUn.pdf \
- $(piece)-violonDeux.pdf \
- $(piece)-alto.pdf \
- $(piece)-hautbois.pdf \
- $(piece)-cor.pdf
-
-.PHONY: mouvements
-mouvements: $(piece)I.pdf \
- $(piece)II.pdf \
- $(piece)III.pdf \
- $(piece)IV.pdf
-
-all: score parties mouvements
-@end example
-
-
-Le @emph{Makefile} suivant convient pour un document
-@command{lilypond-book} réalisé avec @LaTeX{}. Ce projet contiendra un
-index, ce qui nécessitera de lancer une deuxième fois @command{latex}
-pour mettre à jour les liens. Les fichiers résultants iront dans le
-répertoire @code{out} pour ce qui est des .pdf et dans le répertoire
-@code{htmlout} pour ce qui est du html.
-
-@example
-SHELL=/bin/sh
-FILE=monprojet
-OUTDIR=out
-WEBDIR=htmlout
-VIEWER=acroread
-BROWSER=firefox
-LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
-LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
-PDF=cd $(OUTDIR) && pdflatex $(FILE)
-HTML=cd $(WEBDIR) && latex2html $(FILE)
-INDEX=cd $(OUTDIR) && makeindex $(FILE)
-PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
-
-all: pdf web keep
-
-pdf:
- $(LILYBOOK_PDF) # tabulation en début de ligne
- $(PDF) # tabulation en début de ligne
- $(INDEX) # tabulation en début de ligne
- $(PDF) # tabulation en début de ligne
- $(PREVIEW) # tabulation en début de ligne
-
-web:
- $(LILYBOOK_HTML) # tabulation en début de ligne
- $(HTML) # tabulation en début de ligne
- cp -R $(WEBDIR)/$(FILE)/ ./ # tabulation en début de ligne
- $(BROWSER) $(FILE)/$(FILE).html & # tabulation en début de ligne
-
-keep: pdf
- cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # tabulation en début de ligne
-
-clean:
- rm -rf $(OUTDIR) # tabulation en début de ligne
-
-web-clean:
- rm -rf $(WEBDIR) # tabulation en début de ligne
-
-archive:
- tar -cvvf monprojet.tar \ # tabulation en début de ligne
- --exclude=out/* \
- --exclude=htmlout/* \
- --exclude=monprojet/* \
- --exclude=*midi \
- --exclude=*pdf \
- --exclude=*~ \
- ../MonProjet/*
-@end example
-
-AVENIR: faire que ça marche sous Windows
-
-Ce @emph{makefile} n'est malheureusement pas opérationnel sous Windows.
-La seule alternative qui s'offre aux utilisateurs de Windows consiste à
-créer un fichier de traitement par lot (@code{.bat}) qui contienne les
-différentes commandes successives. Bien que cette manière de procéder
-ne tienne aucun compte des dépendances entre fichiers, elle permet de
-réduire le nombre de processus à lancer dans une seule commande. Vous
-devrez enregistrer les lignes suivantes dans un fichier
-@code{construire.bat} ou @code{construire.cmd}. Ce fichier pourra être
-exécuté soit en ligne de commande, soit par un double clic sur son
-icone.
-
-@example
-lilypond-book --output=out --pdf monprojet.lytex
-cd out
-pdflatex monprojet
-makeindex monprojet
-pdflatex monprojet
-cd ..
-copy out\monprojet.pdf MonProjet.pdf
-@end example
-
-
-@seealso
-Manuel d'utilisation :
-@rprogram{Spécificités pour MacOS X},
-@rprogram{Utilisation en ligne de commande},
-@rprogram{LilyPond-book}
@macro rcontrib{TEXT}
@vindex \TEXT\
-@ref{\TEXT\,,,contributor,Guide des contributeurs}
+@ref{\TEXT\,,,contributor,Guide du contributeur}
@end macro
@macro rcontribnamed{TEXT,DISPLAY}
@vindex \TEXT\
-@ref{\TEXT\,,\DISPLAY\,contributor,Guide des contributeurs}
+@ref{\TEXT\,,\DISPLAY\,contributor,Guide du contributeur}
@end macro
@macro rweb{TEXT}
@macro rcontrib{TEXT}
@vindex \TEXT\
-@ref{\TEXT\,,,lilypond-contributor,Guide des contributeurs}
+@ref{\TEXT\,,,lilypond-contributor,Guide du contributeur}
@end macro
@macro rcontribnamed{TEXT,DISPLAY}
@vindex \TEXT\
-@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Guide des contributeurs}
+@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Guide du contributeur}
@end macro
@macro rweb{TEXT}
@macro rcontrib{TEXT}
@vindex{\TEXT\}
-@ref{\TEXT\,,,contributor,Guide des contributeurs}
+@ref{\TEXT\,,,contributor,Guide du contributeur}
@end macro
@macro rcontribnamed{TEXT,DISPLAY}
@vindex{\TEXT\}
-@ref{\TEXT\,,\DISPLAY\,contributor,Guide des contributeurs}
+@ref{\TEXT\,,\DISPLAY\,contributor,Guide du contributeur}
@end macro
@macro rweb{TEXT}
--- /dev/null
+%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
+
+ texidocfr = "
+Le code ci-dessous illustre la manière d'agencer un cantique liturgique
+dans lequel chaque ligne débute et se termine par une mesure incomplète.
+Vous noterez par ailleurs l'affichage des paroles indépendamment de la
+musique.
+
+"
+ doctitlefr = "Modèle pour cantique"
--- /dev/null
+%% Translation of GIT committish: 26375d5016d8d180fc914bfd07cf76f4168f2e37
+
+ texidocfr = "
+Ce canevas illustre la manière d'agencer une œuvre vocale où le couplet
+est chanté en solo et le refrain à deux voix. Vous noterez le recours
+aux silences invisibles dans la variable @code{\global}@tie{}; ils
+permettent de positionner les changements de métrique et autres éléments
+communs à toutes les parties et pour l'intégralité du morceau.
+"
+ doctitlefr = "Ensemble vocal avec couplet et refrain"
-%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocfr = "
Ce fichier constitue un canevas standard de partition pour chœur à
quatre voix mixtes. Lorsque les ensembles s'étoffent, il est judicieux
\input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@ignore
- Translation of GIT committish: 20c486ef2a4e98030fa128052d7257b66bc1599c
+ Translation of GIT committish: 7e4dc7d03c5bc354f343550f313a10f857367556
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@end copying
+@c Info files are no longer installed in a subdirectory, images are
+@c expected to be found in lilypond/ subdirectory.
+@dircategory GNU LilyPond -- le typographe de musique
+@direntry
+* Manuel d'initiation à LilyPond: (lilypond-learning). Les premiers pas.
+* Glossaire musicologique: (music-glossary). Pour l'utilisateur non anglophone.
+* Manuel de notation: (lilypond-notation). Gravure de musique avec LilyPond.
+* Morceaux choisis de LilyPond: (lilypond-snippets). Petits trucs, astuces et exemples.
+* Références des propriétés internes: (lilypond-internals). Définitions pour les retouches.
+* Utilisation des programmes: (lilypond-usage). Installation et exécution des programmes.
+* LilyPond Website: (lilypond-web). Prévisualisation du site.
+* abc2ly: (lilypond-usage) Lancement de abc2ly. Import de fichier ABC.
+* convert-ly: (lilypond-usage) Mise à jour de fichiers. Pour d'anciens fichiers LilyPond.
+* etf2ly: (lilypond-usage) Lancement de etf2ly. Import de fichier Finale.
+* lilypond-book: (lilypond-usage) LilyPond-book. Association musique-texte.
+* midi2ly: (lilypond-usage) Lancement de midi2ly. Import de fichier MIDI.
+* musicxml2ly: (lilypond-usage) Lancement de musicxml2ly. Import de fichier MusicXML.
+@end direntry
+
+
@c TITLE PAGE
@ifnottex
@node Top
* List all commands in direntry.
-@c * lilypond: (lilypond-application)Running LilyPond. Invoking the
-@c LilyPond program.
@end ignore
-@c Info files are no longer installed in a subdirectory, images are
-@c expected to be found in lilypond/ subdirectory.
-@dircategory GNU LilyPond -- le typographe de musique
-@direntry
-* Manuel d'initiation à LilyPond: (lilypond-learning). Les premiers pas.
-* Glossaire musicologique: (music-glossary). Pour l'utilisateur non anglophone.
-* Manuel de notation: (lilypond-notation). Gravure de musique avec LilyPond.
-* Morceaux choisis de LilyPond: (lilypond-snippets). Petits trucs, astuces et exemples.
-* Références des propriétés internes: (lilypond-internals). Définitions pour les retouches.
-* Utilisation des programmes: (lilypond-application). Installation et exécution des programmes.
-* LilyPond Website: (lilypond-general). Prévisualisation du site.
-* abc2ly: (lilypond-application)lancement de abc2ly. Import de fichier ABC.
-* convert-ly: (lilypond-application)Mise à jour de fichiers. Pour d'anciens fichiers LilyPond.
-* etf2ly: (lilypond-application)Lancement de etf2ly. Import de fichier Finale.
-* lilypond-book: (lilypond-application)LilyPond-book. Association musique-texte.
-* midi2ly: (lilypond-application)Lancement de midi2ly. Import de fichier MIDI.
-* musicxml2ly: (lilypond-application)Lancement de musicxml2ly. Import de fichier MusicXML.
-@end direntry
-
-
@c FIXME: this still doesn't solve the broken links in pdf and big
@c html; we'll need a bunch of @iftext and stuff in here. -gp
@c ****************** SPECIAL MACROS FOR WEB MANUAL ************
@c -*- coding: utf-8; mode: texinfo; documentlanguage : fr -*-
@ignore
- Translation of GIT committish: 7c9a0da142b6037180d557f12ba1ada366226606
+ Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@unnumbered Communauté
@translationof Community
+@divClass{link-headings}
+
@divClass{column-center-top}
@subheading Échanger avec la communauté
@translationof Interacting with the community
@end itemize
@divEnd
+@divEnd
@divClass{hide}
@menu
@unnumberedsec Contact
@translationof Contact
+
@divClass{column-left-bottom}
@subheading Discuter entre utilisateurs et demander de l'aide
@translationof Discussions and Help
page de souscription à lilypond-user}
@uref{http://lists.gnu.org/archive/html/lilypond-user/,
-archive1 de la liste},
+archive1 de la liste},
@uref{http://www.mail-archive.com/lilypond-user@@gnu.org/,
-archive2},
+archive2},
@uref{http://dir.gmane.org/gmane.comp.gnu.lilypond.general,
archive3}.
@ref{Exemples minimaux}@tie{}!}
+@subsubheading LilyPond Snippet Repository
+
+Le LilyPond Snippet Repository regroupe des exemples de situations
+particulières auxquelles ont été confontés les utilisateurs de LilyPond.
+Ils sont librement réutilisables dans vos propres travaux. N'hésitez
+pas à apporter votre concours à cette banque de trucs et astuces@tie{}!
+
+@example
+@uref{http://lsr.dsi.unimi.it}
+@end example
+
+Un certain nombre d'exemples issus du LSR et particulièrement pertinents
+sont directement inclus dans la documentation, volume
+@ref{Morceaux choisis}.
+
+
@subsubheading IRC
Vous pouvez obtenir quelque support au travers de notre canal IRC@tie{}:
@end itemize
@divEnd
-Une fois le message reçu, notre @qq{responsable des bogues} analysera
-votre rapport et vous demandera peut-être des informations
-supplémentaires avant de l'ajouter au traceur. Il vous transmettra
-ensuite le numéro de référence de votre signalement une fois qu'il
-l'aura ajouté.
+Une fois le message reçu, nos @qq{exterminateurs de bogues} analyseront
+votre rapport et vous demanderont peut-être des informations
+supplémentaires avant de l'ajouter au traceur. Dans la mesure où
+l'équipe est réduite, merci de leur laisser une bonne journée avant
+qu'ils ne vous transmettent le numéro de référence de votre signalement
+une fois qu'il aura été ajouté à la base.
Vous serez automatiquement notifié du traitement apporté à ce bogue, dès
lors que vous avez une compte chez google.
traduit@dots{}}
@docLinksBare{Guide du contributeur, contributor,
- @rcontribnamed{Top,Guide du Contributeur},
+ @rcontribnamed{Top,Guide du contributeur},
@manualDevelContributorSplit,
@manualDevelContributorBig, 500 kB,
@manualDevelContributorPdf, 2.8 MB}
@subheading Tests de régression
@divClass{keep-bullets}
-@itemize
@ifclear web_version
+@itemize
@item
@uref{../../input/regression/collated-files.html, Tests de régression}
relatifs à ce niveau de mise à jour
@uref{../../input/regression/musicxml/collated-files.html, Tests de MusicXML}
relatifs à ce niveau de mise à jour
(@uref{../../input/regression/musicxml/collated-files.pdf, version pdf}).
+
+@item
+@uref{../../input/regression/abc2ly/collated-files.html, Test de abc2ly}
+relatifs à ce niveau de mise à jour
+(@uref{../../input/regression/abc2ly/collated-files.pdf, version pdf}).
+
+@item
+@uref{../../input/regression/lilypond-book/collated-files.html,
+Test de lilypond-book} relatifs à ce niveau de mise à jour
+(@uref{../../input/regression/lilypond-book/collated-files.pdf, versionpdf}).
+@end itemize
+
@end ifclear
@ifset web_version
+@subsubheading Version de développement
+
+@itemize
@item @regtestDevel (@regtestDevelPdf{})
@item @regtestDevelXml (@regtestDevelXmlPdf{})
+@item @regtestDevelAbc (@regtestDevelAbcPdf{})
+
+@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{})
+@end itemize
+
+@subsubheading Version stable
+
+@itemize
@item @regtestStable (@regtestStablePdf{})
@item @regtestStableXml (@regtestStableXmlPdf{})
+
+@item @regtestStableAbc (@regtestStableAbcPdf{})
+
+@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{})
+@end itemize
@end ifset
+@subsubheading Toutes versions
+
+@itemize
@item @uref{http://lilypond.org/test, Archives des tests de régression} :
Comparaisons entre différentes versions.
@end itemize
+
@divEnd
@divEnd
@item
Han-Wen Nienhuys et Jan Nieuwenhuizen, @emph{LilyPond, un système de
gravure musicale automatisée}. Actes du 14e Colloque d'informatique
-musicale (XIV CIM 2003), Florence, Itale, mai@tie{}2003.
+musicale (XIV CIM 2003), Florence, Itale, mai@tie{}2003.
(@uref{ http://lilypond.org/web/images/xivcim.pdf, PDF 95k})
@end itemize
New Trends in Artificial Intelligence, 2007 J. Neves et al ed.
@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
@include web/news.itexi
-
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 68cf70682a542701a918f8bfff50f2b8b85f84e2
+ Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading Pour l'utilisateur
@ref{Anciennes versions} :
versions antérieures
-@item
+@item
@ref{Development} :
version instable la plus récente
@end itemize
@divEnd
+@divEnd
@divClass{column-center-bottom}
@item
Créez un fichier @command{lilypond} qui contiendra
-@help défaut évident de css à régler. :(
-@c we need a small font here to fit. -gp
-@smallexample
+@divClass{h-scroll-auto}
+@example
exec @var{RÉP}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
-@end smallexample
+@end example
+@divEnd
@warning{@var{RÉP} sera en règle générale @code{/Applications/}}
Ces scripts peuvent se lancer directement en ligne de commande :
+@divClass{h-scroll-auto}
@example
@var{chemin/vers}/LilyPond.app/Contents/Resources/bin/lilypond
@end example
+@divEnd
Il en va de même pour les autres scripts de ce répertoire, tels que
@command{lilypond-book} et @command{convert-ly}.
L'intégralité des versions, récentes ou non, est accessible sur notre
@uref{http://download.linuxaudio.org/lilypond/source/?C=N;O=D, site de
-téléchargement}.
+téléchargement}.
@divEnd
@subheading Licence logicielle
@translationof GPL
-GNU LilyPond est distribué selon la
+GNU LilyPond est distribué selon la
@ref{GPL,Licence Publique Générale GNU GPL}. Pour une introduction à
cette licence, et les raisons qui nous ont fait l'adopter, lisez
@ref{Liberté}.
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 7c9a0da142b6037180d557f12ba1ada366226606
+ Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
bricolage. Ne perdez pas de temps à ajuster l'espacement, déplacer des
symboles un par un ou remodeler des liaisons. Vous impressionnerez vos
amis et collègues avec des partitions soignées@tie{}!
+
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading Ce que LilyPond sait faire
@end itemize
@divEnd
+@divEnd
+
@c Les traductions ne se compilent pas encore au format Info, il est
@c donc inutile de traduire la colonne de droite du menu suivant. -JM
@divClass{hide}
@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
@c This file is part of web.texi
@ignore
- Translation of GIT committish: 3c3484ad3caf94656ee05aa601cb041426530d57
+ Translation of GIT committish: 0ab366a101ef8c3439dd8d6ff6c634f70fa5f63b
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@macro details{reference}
@spanClass{detail}
-(@ref{\reference\, détails de \reference\})
-@spanEnd
+(@ref{\reference\, détails de \reference\}) @spanEnd
@end macro
@divEnd
-@c TODO: do we want these links to be in larger text / bold ? CSS.
+@divClass{link-headings}
@divClass{column-center-top}
@subheading Introduction
@itemize
-@item @ref{Entrée sous forme de texte} :
+@item
+@ref{Entrée sous forme de texte}@tie{}:
LilyPond est un système de gravure musicale @strong{en mode texte}. Si
-vous ne savez pas du tout ce que ça veut dire, lisez tout d'abord ceci !
+vous ne savez pas du tout ce que ça veut dire, lisez tout d'abord
+ceci@tie{}!
@item
@ifWebLinks{@manualStableLearningSplitNoName-fr,@rlearningnamed{Top,Initiation}}
une introduction pas-à-pas à LilyPond.
@details{Initiation}
-@item @ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossaire}}
-@emph{(lecture optionnelle)}
-répertoire de définition et de traduction de termes musicaux, utile en
-particulier pour connaître les termes musicaux en anglais.
+@item
+@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossaire}}
+@emph{(lecture optionnelle)} répertoire de définition et de traduction
+de termes musicaux, utile en particulier pour connaître les termes
+musicaux en anglais.
@details{Glossaire}
-@item @ifWebLinks{@manualStableEssaySplitNoName-fr,@ressaynamed{Top,Essai}}
-@emph{(lecture optionnelle)}
-essai sur la conception des processus de gravure d'après l'esthétique et
-la technique de la gravure traditionnelle avec poinçons et plaques de plomb.
+@item
+@ifWebLinks{@manualStableEssaySplitNoName-fr,@ressaynamed{Top,Essai}}
+@emph{(lecture optionnelle)} essai sur la conception des processus de
+gravure d'après l'esthétique et la technique de la gravure
+traditionnelle avec poinçons et plaques de plomb.
@details{Essai}
-
@end itemize
@divEnd
@itemize
-@item @ifWebLinks{@manualStableNotationSplitNoName-fr,@rusernamed{Top,Notation}}
+@item
+@ifWebLinks{@manualStableNotationSplitNoName-fr,@rusernamed{Top,Notation}}
partie la plus importante de la documentation, ce manuel fournit toutes
les informations détaillées dont vous aurez besoin en matière de notation.
@details{Notation}
-@item @ifWebLinks{@manualStableUsageSplitNoName-fr,@rprogramnamed{Top,Utilisation}}
+@item
+@ifWebLinks{@manualStableUsageSplitNoName-fr,@rprogramnamed{Top,Utilisation}}
présentation des différentes composantes de LilyPond, ainsi que les
particularités de certains systèmes d'exploitation.
@details{Utilisation}
@itemize
-@item @ref{FAQ} :
+@item
+@ref{FAQ}@tie{}:
la Foire Aux Questions.
-@item @ref{Web} :
+@item
+@ref{Web}@tie{}:
ce document.
@details{Web}
-@item
+@item
@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Nouveautés}}
changements depuis la dernière version stable.
@details{Nouveautés}
-@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extension}}
+@item
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extension}}
programmation avancée d'ajustements et retouches dans LilyPond.
@details{Extension}
-@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Propriétés internes}}
+@item
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Propriétés internes}}
information sur les structures internes de LilyPond, nécessaire en
particulier pour élaborer des retouches.
@details{Propriétés internes}
@itemize
-@item @ref{Traductions} :
+@item
+@ref{Traductions}@tie{}:
état des traductions pour les lecteurs non anglophones.
-@item @ref{Tous} :
+@item
+@ref{Tous}@tie{}:
liens rapides, manuels téléchargeables, et documentation des anciennes
versions.
-@item @ref{Développement} :
+@item
+@ref{Développement}@tie{}:
manuels pour la version de développement.
-@item @ref{FDL} :
+@item
+@ref{FDL}@tie{}:
ces manuels sont publiés sous la licence GNU de documentation libre FDL.
@end itemize
@divEnd
+@divEnd
+
@divClass{hide}
@menu
* Utilisation:: Les différentes composantes de LilyPond
* Morceaux choisis:: Exemples de code, trucs et astuces
* FAQ:: Foire aux questions
-* Web::
-* Nouveautés::
-* Extension::
-* Propriétés internes::
-* Traductions::
-* Tous::
+* Web:: Le site de LilyPond
+* Nouveautés:: Ce qui change au fil des versions
+* Extension:: Programmation au sein de LilyPond
+* Propriétés internes:: Références du programme
+* Traductions:: État d'avancement des différentes traductions
+* Tous:: Tous les manuels
* FDL:: Licence.
@end menu
de manière linéaire.
Dans ce manuel se trouve à chaque section un paragraphe @strong{Voir
-aussi} contenant des références vers d'autres sections : il est
-conseillé de ne pas les suivre en première lecture ; lorsque vous
+aussi} contenant des références vers d'autres sections@tie{}: il est
+conseillé de ne pas les suivre en première lecture@tie{}; lorsque vous
aurez lu l'ensemble du manuel d'initiation, vous pourrez en relisant
certaines sections suivre ces références pour approfondir certains
aspects.
une partie du LSR. Dans la mesure où le LSR repose sur une version
stable de LilyPond, les exemples illustrant des fonctionnalités
introduites dans la dernière version de développement ne peuvent y
-figurer ; c'est pourquoi vous les trouverez dans le répertoire
+figurer@tie{}; c'est pourquoi vous les trouverez dans le répertoire
@file{Documentation/snippets/new/} des sources de LilyPond.
La liste des exemples correspondant à chacun des sous-chapitres du
@subsubheading Ça fait encore beaucoup à lire ! Ai-je besoin de lire tout cela ?
-C'est vous qui voyez ; les raisons pour lesquelles vous souhaitez
+C'est vous qui voyez@tie{}; les raisons pour lesquelles vous souhaitez
utiliser LilyPond se trouvent peut-être dans l'@ref{Introduction}.
@divEnd
Support guru
@item Trevor Daniels:
+@email{t.daniels@@treda.co.uk},
Assistant documentation editor
@item Reinhold Kainhofer:
@c no comma for last entry
@end macro
-
-
\header {
texidoc = " Chord names are generated from a list pitches. The
-functions which construct these names can be customised. Here are shown
+functions which construct these names can be customised. Here are shown
Jazz chords, following Ignatzek (pp. 17-18, 1995) and
an alternative Jazz chord notation.
@item @uref{http://netpbm.sourceforge.net/, Netpbm}
+@item @uref{http://gzip.org/, gzip}
+
@item @uref{http://rsync.samba.org/, rsync}
@item @uref{http://www.nongnu.org/texi2html/, Texi2HTML} (1.82)
LilyPond comes with an extensive suite that exercises the entire
-program. This suite can be used to test that the binary has
+program. This suite can be used to test that the binary has
been built correctly.
The test suite can be executed with:
First, install the relevant dependencies using MacPorts.
Next, add the following to your relevant shell initialization
-files. This is @code{~/.profile} by default. You should create
+files. This is @code{~/.profile} by default. You should create
this file if it does not exist.
@example
@end example
At this point, you should verify that you have the appropriate
-fonts installed with your ghostscript installation. Check @code{ls
+fonts installed with your ghostscript installation. Check @code{ls
/opt/local/share/ghostscript/fonts} for: 'c0590*' files (.pfb,
.pfb and .afm). If you don't have them, run the following
commands to grab them from the ghostscript SVN server and install
rm -rf urw-fonts-1.07pre44
@end example
-Now run the @code{./configure} script. To avoid complications with
+Now run the @code{./configure} script. To avoid complications with
automatic font detection, add
@example
It can be useful to have both the stable and the development versions
-of Lilypond available at once. One way to do this on GNU/Linux is to
+of Lilypond available at once. One way to do this on GNU/Linux is to
install the stable version using the precompiled binary, and run the
-development version from the source tree. After running @command{make
+development version from the source tree. After running @command{make
all} from the top directory of the Lilypond source files, there will
be a binary called @code{lilypond} in the @code{out} directory:
@end example
This binary can be run without actually doing the @code{make
-install} command. The advantage to this is that you can have all
+install} command. The advantage to this is that you can have all
of the latest changes available after pulling from git and running
@code{make all}, without having to uninstall the old version and
reinstall the new.
Since it is not possible to compile Lilypond on Windows, some
developers may find it useful to install a GNU/Linux virtual
-machine. A disk image with a special remix of @strong{Ubuntu}
-has been created for this purpose. It has all of the Lilypond
+machine. A disk image with a special remix of @strong{Ubuntu}
+has been created for this purpose. It has all of the Lilypond
build dependencies in place, so that once installed, it is
ready to compile both Lilypond and the Documentation.
The @code{lilybuntu} remix is available for download here:
We do not necessarily recommend any one virtualization tool,
however the @code{lilybuntu} remix is known to work well on
@uref{http://www.virtualbox.org/wiki/Downloads, Sun VirtualBox},
-which is a free download. Consult your virtualization software's
+which is a free download. Consult your virtualization software's
documentation for instructions on setting up the software and
for general instructions on installing a virtual machine.
@enumerate
@item Download the @code{lilybuntu} disk image.
-@item Install @code{lilybuntu}. You will use the @code{.iso}
-file as the boot disk. It should not be necessary to burn it
+@item Install @code{lilybuntu}. You will use the @code{.iso}
+file as the boot disk. It should not be necessary to burn it
to a DVD, but consult the documentation for your virtualization
-software for specific instructions. If possible, use at least
-the recommended amount of RAM for the virtual machine (384 MB on
-VirtualBox), and use a dynamically expanding virtual hard drive.
+software for specific instructions. If possible, use at least 500
+MB of RAM (1GB would be better!) for the virtual machine, and use
+a dynamically expanding virtual hard drive.
A virtual hard drive with 6 GB will be enough to compile LilyPond,
but if you intend to build the docs and run the regression tests
the virtual hard drive should be at least 10 GB.
@item To retrieve the Lilypond source code from @code{git},
copy-and-paste each command from the CG @qq{Main source code}
-section into the terminal. (paste into the terminal with keystroke
-@code{CTRL+SHIFT+V})
+section into the terminal (paste into the terminal with keystroke
+@code{CTRL+SHIFT+V}).
@item Prepare to build Lilypond by running the configuration script.
Type
Edit local.make for local Makefile overrides.
@end example
-@item First type @code{make all} to build Lilypond. This will take
+@item First type @code{make all} to build Lilypond. This will take
a while.
@item When Lilypond is finished building, build the documentation
@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
From the menus that appear along the top of the example file,
-select @w{@code{File > Save as}}. Do not use the @w{@code{File > Save}}
+select @w{@code{File > Save as}}. Do not use the @w{@code{File > Save}}
for the example file as this will not work until you have given it a
valid LilyPond file name.
@subsubheading Step 3. View output
During the compilation of the @file{test.ly} file, a command window
-will, very briefly open and then close. Three additional files will
+will, very briefly open and then close. Three additional files will
have been created during this process.
@sourceimage{Learning_Win7_All_Files_Created,,,}
This log file is overwritten each time you compile your LilyPond file.
The PS file is used internally by LilyPond to create the PDF file and
-can be ignored. It also gets overwritten each time you compile your
+can be ignored. It also gets overwritten each time you compile your
file.
If you are viewing your file in a PDF viewer, then you must close the
-%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocja = "
これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c
もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c
Polyphonic music in lilypond, while not difficult, uses concepts
that we haven't discussed yet, so we're not going to introduce
-them here. Instead, the following sections introduce these concepts
+them here. Instead, the following sections introduce these concepts
and explain them thoroughly.
@seealso
@end lilypond
It is not necessary to use a separate @code{<< \\ >>} construct
-for each bar. For music with few notes in each bar this layout
+for each bar. For music with few notes in each bar this layout
can help the legibility of the code, but if there are many
notes in each bar it may be better to split out each voice
separately, like this:
voices downward ones. The stems for voices 1 and 2 are right,
but the stems in voice 3 should go down in this particular piece
of music. We can correct this by skipping voice three
-and placing the music in voice four. This is done by simply
+and placing the music in voice four. This is done by simply
adding another pair of @code{\\}.
@lilypond[quote,verbatim,fragment,ragged-right]
in opposite directions, but the notes from the third and fourth voices
are displaced, if necessary, to avoid the note heads colliding. This
usually works well, but in this example the notes of the lowest voice
-are clearly not well placed by default. LilyPond provides several ways
+are clearly not well placed by default. LilyPond provides several ways
to adjust the horizontal placing of notes. We are not quite ready yet
to see how to correct this, so we shall leave this problem until a
later section --- see the @code{force-hshift} property in @ref{Fixing
The @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn}, and
@code{\shiftOff} commands specify the degree to which notes and
chords of the voice should be shifted if a collision
-would otherwise occur. By default, the outer voices (normally
+would otherwise occur. By default, the outer voices (normally
voices one and two) have @code{\shiftOff} specified, while the
inner voices (three and four) have @code{\shiftOn} specified.
When a shift is applied, voices one and three are shifted to
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
{vocal-ensemble-template-with-verse-and-refrain.ly}
+@appendixsubsec Hymn tunes
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc]
+{hymn-template.ly}
+
@node Orchestral templates
@appendixsec Orchestral templates
Line thickness, generally measured in @code{line-thickness}
@end example
-This looks a good bet to change the heaviness. It tells us that
+This looks a good bet to change the heaviness. It tells us that
the value of @code{thickness} is a simple @emph{number},
that the default value is 1.2, and that the units are
in another property called @code{line-thickness}.
@code{outside-staff-priority}. The outside-staff objects are
taken one by one, beginning with the object with the lowest
@code{outside-staff-priority}, and placed so that they do not
-collide with any objects that have already been placed. That is,
+collide with any objects that have already been placed. That is,
if two outside-staff grobs are competing for the same space, the
one with the lower @code{outside-staff-priority} will be placed
closer to the staff. If two objects have the same
@cindex rehearsal marks, tweaking placement
Note that bar numbers, metronome marks and rehearsal marks are not
-shown. By default these are created in the @code{Score} context and
+shown. By default these are created in the @code{Score} context and
their @code{outside-staff-priority} is ignored relative to the layout
objects which are created in the @code{Staff} context. If you wish to
place bar numbers, metronome marks or rehearsal marks in accordance
@cindex positions property
This is most useful for manually adjusting the slope and height
-of beams, slurs, and tuplets. It takes a pair of numbers
+of beams, slurs, and tuplets. It takes a pair of numbers
giving the position of the left and right ends of the beam, slur,
etc. relative to the center line of the staff. Units are
staff-spaces. Note, though, that slurs and phrasing slurs cannot
@end example
We will refer to this file using the @code{\include} command near
-the top of the music file. (The extension @code{.ily} is used to
+the top of the music file. (The extension @code{.ily} is used to
distinguish this included file, which is not meant to be compiled
on its own, from the main file.)
Now let's modify our music (let's save this file as @file{"music.ly"}).
FI: kohotahti.
An anacrusis (also known as pickup or upbeat) is an incomplete measure
-of music before a section of music. It also refers to the initial
+of music before a section of music. It also refers to the initial
note(s) of a melody occurring in that incomplete measure.
@lilypond[quote,relative=1]
No cross-references.
-@node augmented interval
-@section augmented interval
-
-ES: intervalo aumentado,
-I: intervallo aumentato,
-F: intervalle augmenté,
-D: übermäßiges Intervall,
-NL: overmatig interval,
-DK: forstørret interval,
-S: överstigande intervall,
-FI: ylinouseva intervalli.
-
-@seealso
-@ref{interval}.
-
-
@node augmentation
@section augmentation
@ref{diminution}, @ref{mensural notation}.
+@node augmented interval
+@section augmented interval
+
+ES: intervalo aumentado,
+I: intervallo aumentato,
+F: intervalle augmenté,
+D: übermäßiges Intervall,
+NL: overmatig interval,
+DK: forstørret interval,
+S: överstigande intervall,
+FI: ylinouseva intervalli.
+
+@seealso
+@ref{interval}.
+
+
@node autograph
@section autograph
@item Music prepared for photoreproduction by freehand drawing, with
the aid of a straightedge ruler and T-square only, which attempts to
-emulate engraving. This required more skill than did engraving.
+emulate engraving. This required more skill than did engraving.
@end itemize
S: balk,
FI: palkki.
-Line connecting a series of notes (shorter than a quarter note). The
+Line connecting a series of notes (shorter than a quarter note). The
number of beams determines the note value of the connected notes.
@lilypond[quote,notime,relative=2,line-width=13\cm]
FI: sointu.
Three or more tones sounding simultaneously. In traditional European music
-the base chord is a @emph{triad} consisting of two thirds. @emph{Major}
+the base chord is a @emph{triad} consisting of two thirds. @emph{Major}
(major + minor third) as well as @emph{minor} (minor + major third) chords
-may be extended with more thirds. Four-tone @emph{seventh chords} and
+may be extended with more thirds. Four-tone @emph{seventh chords} and
five-tone @emph{ninth} major chords are most often used as dominants
(functional harmony). Chords having no third above the lower notes to
define their mood are a special case called @q{open chords}. The lack of
Staves of five lines are usually used, and the clef superimposed on them
indicates which five lines have been selected from this @notation{grand
-staff}. For example, the treble or G clef indicates that the top five lines
+staff}. For example, the treble or G clef indicates that the top five lines
have been selected:
@lilypond[quote]
S: diatonisk skala,
FI: diatoninen asteikko.
-A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales
+A scale consisting of 5@w{ }whole tones and 2@w{ }semitones (S). Scales
played on the white keys of a piano keyboard are diatonic. These scales
are sometimes called, somewhat inaccurately, @q{church modes}).
FI: käännös.
When a chord sounds with a bass note that differs from the root of the
-chord, it is said to be @emph{inverted}. The number of inversions that a
+chord, it is said to be @emph{inverted}. The number of inversions that a
chord can have is one fewer than the number of constituent notes. For
example, triads (which have three constituent notes) can have three
positions, two of which are inversions:
@table @dfn
@item Root position
-The root note is in the bass, and above that are the third and the fifth. A
+The root note is in the bass, and above that are the third and the fifth. A
triad built on the first scale degree, for example, is marked @notation{I}.
@item First inversion
-The third is in the bass, and above it are the fifth and the root. This
+The third is in the bass, and above it are the fifth and the root. This
creates an interval of a sixth and a third above the bass note, and so is
-marked in figured Roman notation as @notation{6/3}. This is commonly
+marked in figured Roman notation as @notation{6/3}. This is commonly
abbreviated to @notation{I6} (or @notation{Ib}) since the sixth is the
characteristic interval of the inversion, and so always implies
@notation{6/3}.
@item Second inversion
-The fifth is in the bass, and above it are the root and the third. This
+The fifth is in the bass, and above it are the root and the third. This
creates an interval of a sixth and a fourth above the bass note, and so is
-marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most
+marked as @notation{I6/4} or @notation{Ic}. Second inversion is the most
unstable chord position.
@end table
FI: antaa väristä.
[French: @q{Let vibrate}] Most frequently associated with harp
-parts. Marked @notation{l.v.} in the score.
+parts. Marked @notation{l.v.} in the score.
@seealso
No cross-references.
FI: largo, hitaasti, leveästi.
[Italian: @q{wide}.] Very slow in tempo, usually combined with great
-expressiveness. @emph{Larghetto} is less slow than largo.
+expressiveness. @emph{Larghetto} is less slow than largo.
@node leading note
Multi-measure rests are conventionally typeset with a combination of
longa, breve and whole rests for shorter and a long horizontal bar for
longer spans of rest, with a number above to indicate the duration (in
-measures) of the rest. The former style is called @q{Kirchenpausen} in
+measures) of the rest. The former style is called @q{Kirchenpausen} in
German, as a reminiscence of its use in Renaissance vocal polyphony.
@lilypond[quote,relative=2]
[Italian: past participle of @emph{portare}, @q{to carry}]
A stroke in which each of several notes is separated slightly within a slur,
-without changing the bow's direction. It is used for passages of a
+without changing the bow's direction. It is used for passages of a
@notation{cantabile} character.
@seealso
intervals. Tertian triads can be described as a series of three notes. The
first element is the root note (or simply @q{root}) of the chord, the second
note is the @q{third} of the chord, and the last note is the @q{fifth} of
-the chord. These are described below:
+the chord. These are described below:
@multitable {Chord name} {Component intervals} {Example} {C, CM, Cma, Cmaj, CΔ}
@headitem Chord name
There are various types of seventh chords depending on the quality of the
original chord and the quality of the seventh added.
-Five common types of seventh chords have standard symbols. The chord quality
+Five common types of seventh chords have standard symbols. The chord quality
indications are sometimes superscripted and sometimes not (e.g. Dm7, Dm^7,
-and D^m7 are all identical). The last three chords are not commonly used
+and D^m7 are all identical). The last three chords are not commonly used
except in jazz.
@seealso
@cindex rests, ancient
Use the @code{style} property of grob @code{Rest} to select
-ancient rests. Supported styles are @code{classical},
+ancient rests. Supported styles are @code{classical},
@code{neomensural}, and @code{mensural}. @code{classical} differs
from the @code{default} style only in that the quarter rest looks
like a horizontally mirrored 8th rest. The @code{mensural} and
@node Score - the master of all contexts
@unnumberedsubsubsec Score - the master of all contexts
-This is the top level notation context. No other context can
-contain a Score context. By default the Score context handles
+This is the top level notation context. No other context can
+contain a Score context. By default the Score context handles
the administration of time signatures and makes sure that items
such as clefs, time signatures, and key-signatures are aligned
across staves.
@strong{@emph{StaffGroup}}
Groups staves while adding a bracket on the left side, grouping
-the staves together. The bar lines of the contained staves are
+the staves together. The bar lines of the contained staves are
connected vertically. @code{StaffGroup} only consists of a collection
of staves, with a bracket in front and spanning bar lines.
For some layout objects, the @code{minimum-length} property becomes
effective only if the @code{set-spacing-rods} procedure is called
explicitly. To do this, the @code{springs-and-rods} property should
-be set to @code{ly:spanner::set-spacing-rods}. For example,
+be set to @code{ly:spanner::set-spacing-rods}. For example,
the minimum length of a glissando has no effect unless the
@code{springs-and-rods} property is set:
Chords entered using chord mode are music elements, and can be
transposed just like chords entered using simultaneous music.
@code{\chordmode} is absolute, as @code{\relative} has no effect
-on @code{chordmode} blocks. However, in @code{\chordmode} the
+on @code{chordmode} blocks. However, in @code{\chordmode} the
absolute pitches are one octave higher than in note mode.
Chord mode and note mode can be mixed in sequential music:
There is no unique system for naming chords. Different musical
traditions use different names for the same set of chords. There
-are also different symbols displayed for a given chord name. The
+are also different symbols displayed for a given chord name. The
names and symbols displayed for chord names are customizable.
@cindex jazz chords
@item majorSevenSymbol
This property contains the markup object used to follow the output
-of @code{chordRootNamer} to identify a major 7 chord. Predefined
+of @code{chordRootNamer} to identify a major 7 chord. Predefined
options are @code{whiteTriangleMarkup} and
@code{blackTriangleMarkup}.
When the chord name contains additional pitches other than the root
(e.g., an added bass note), this function is used to print the
additional pitch. By default the pitch is printed using
-@code{chordRootNamer}. The @code{chordNoteNamer} property can be set
+@code{chordRootNamer}. The @code{chordNoteNamer} property can be set
to a specialized function to change this behavior. For example, the
bass note can be printed in lower case.
c2 <c \parenthesize e g>
@end lilypond
-Non-note objects may be parenthesized as well. For articulations,
+Non-note objects may be parenthesized as well. For articulations,
a hyphen is needed before the @code{\parenthesize} command.
@lilypond[verbatim,quote,relative=2]
Learning Manual:
@rlearning{Placement of objects}.
-
Notation Reference:
@ref{Text scripts},
@ref{Direction and placement},
c1\!
@end lilypond
-Spacer rests are needed to engrave multiple marks on one note.
+A hairpin that is terminated with @code{\!} will end at the
+right edge of the note that has the @code{\!} assigned to it. In the
+case where it is terminated with the start of another @notation{crescendo}
+or @notation{decrescendo} mark, it will end at the centre of the note
+that has the next @code{\<} or @code{\>} assigned to it. The next
+hairpin will then start at the right edge of the same note
+instead of the usual left edge had it been terminated with @code{\!}
+before.
+
+@lilypond[verbatim,quote,relative=2]
+c1\< | c4 a c\< a | c4 a c\! a\< | c4 a c a\!
+@end lilypond
+
+Hairpins that are terminated with absolute dynamic marks instead of
+@code{\!} will also be engraved in a similar way. However, the length
+of the absolute dynamic itself can alter where the preceding hairpin
+ends.
+
+@lilypond[verbatim,quote,relative=2]
+c1\< | c4 a c\mf a | c1\< | c4 a c\ffff a
+@end lilypond
@cindex multiple dynamic marks on one note
@cindex dynamic marks, multiple on one note
+Spacer rests are needed to engrave multiple marks on one note.
+This is particularly useful when adding a @notation{crescendo} and
+@notation{decrescendo} to the same note:
@lilypond[verbatim,quote,relative=2]
c4\< c\! d\> e\!
@funindex \espressivo
@funindex espressivo
-In some situations the @code{\espressivo} articulation mark may be
-the appropriate choice to indicate a crescendo and decrescendo on
-one note:
+The @code{\espressivo} command can be used to indicate a crescendo
+and decrescendo on the same note. However, be warned that this is
+implemented as an articulation, not a dynamic.
@lilypond[verbatim,quote,relative=2]
c2 b4 a
you can add a string number indication to the pitch name. If you
define pitch names and string numbers without a chord construct
(@code{<>}) the string number indications do not appear in traditional
-notation. It is much more comfortable to define the playing position
+notation. It is much more comfortable to define the playing position
by using the value of @code{minimumFret}. The default value for
minimumFret is 0.
@end lilypond
Another playing technique (especially used on electric guitars) is
-called @notation{palm mute}. The string is hereby partly muted by the
-palm of the striking hand (hence the name). Lilypond supports
+called @notation{palm mute}. The string is hereby partly muted by the
+palm of the striking hand (hence the name). Lilypond supports
the notation of palm mute-style notes by changing the note head to a
triangle shape.
@menu
* Structure of a score::
* Multiple scores in a book::
+* Multiple output files from one input file::
+* Output file names::
* File structure::
@end menu
block, and inside or outside the single music expression within a
@code{\score} block.
+Remember that even in a file containing only a @code{\score} block, it
+is implicitly enclosed in a \book block. A \book block in a source
+file produces at least one output file, and by default the name of the
+output file produced is derived from the name of the input file, so
+@file{fandangoforelephants.ly} will produce
+@file{fandangoforelephants.pdf}.
+
+(For more details about @code{\book} blocks, see
+@ref{Multiple scores in a book},
+@ref{Multiple output files from one input file} @ref{File structure}.)
@seealso
Learning Manual:
@}
@end example
-However, if you want multiple output files from the same @code{.ly}
-file, then you can add multiple @code{\book} blocks, where each such
-@code{\book} block will result in a separate output. If you do not
-specify any @code{\book} block in the file, LilyPond will implicitly
-treat the full file as a single @code{\book} block, see @ref{File
-structure}. One important exception is within lilypond-book documents,
+One important exception is within lilypond-book documents,
where you explicitly have to add a @code{\book} block, otherwise only
the first @code{\score} or @code{\markup} will appear in the output.
@}
@end example
+@node Multiple output files from one input file
+@subsection Multiple output files from one input file
+
+If you want multiple output files from the same .ly file, then you can
+add multiple @code{\book} blocks, where each such \book block will
+result in a separate output file. If you do not specify any
+@code{\book} block in the input file, LilyPond will implicitly treat
+the whole file as a single \book block, see @ref{File structure}.
+
+When producing multiple files from a single source file, Lilypond
+ensures that none of the output files from any @code{\book} block
+overwrites the output file produced by a preceding @code{\book} from
+the same input file.
+
+It does this by adding a suffix to the output name for each
+@code{\book} which uses the default output file name derived from the
+input source file.
+
+The default behaviour is to append a version-number suffix for each
+name which may clash, so
+
+@example
+\book @{
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+@end example
+
+in source file @file{eightminiatures.ly}
+will produce
+
+@itemize
+@item
+@file{eightminiatures.pdf},
+@item
+@file{eightminiatures-1.pdf} and
+@item
+@file{eightminiatures-2.pdf}.
+@end itemize
+
+@node Output file names
+@subsection Output file names
+
+@funindex \bookOutputSuffix
+@funindex \bookOutputName
+
+Lilypond provides facilities to allow you to control what file names
+are used by the various back-ends when producing output files.
+
+In the previous section, we saw how Lilypond prevents name-clashes when
+producing several ouputs from a single source file. You also have the
+ability to specify your own suffixes for each @code{\book} block, so
+for example you can produce files called
+@file{eightminiatures-Romanze.pdf}, @file{eightminiatures-Menuetto.pdf}
+and @file{eightminiatures-Nocturne.pdf} by adding a
+@code{\bookOutputSuffix} declaration inside each @code{\book} block.
+
+@example
+\book @{
+ \bookOutputSuffix "Romanze"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \bookOutputSuffix "Menuetto"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \bookOutputSuffix "Nocturne"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+@end example
+
+You can also specify a different output filename for @code{book} block,
+by using @code{\bookOutputName} declarations
+
+@example
+\book @{
+ \bookOutputName "Romanze"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \bookOutputName "Menuetto"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+\book @{
+ \bookOutputName "Nocturne"
+ \score @{ @dots{} @}
+ \layout @{ @dots{} @}
+@}
+@end example
+
+The file above will produce these output files:
+
+@itemize
+@item
+@file{Romanze.pdf},
+@item
+@file{Menuetto.pdf} and
+@item
+@file{Nocturne.pdf}.
+@end itemize
+
+
@node File structure
@subsection File structure
A @code{.ly} file may contain any number of toplevel expressions, where a
toplevel expression is one of the following:
-@itemize @bullet
+@itemize
@item
An output definition, such as @code{\paper}, @code{\midi}, and
@code{\layout}. Such a definition at the toplevel changes the default
@code{\include} statements are not interpreted until they have
been brought into the main file, so the file names they specify
must all be relative to the directory containing the main file,
-not the directory containing the included file. However,
+not the directory containing the included file. However,
this behavior can be changed by passing the option
@code{-drelative-includes} option at the command line
(or by adding @code{#(ly:set-option 'relative-includes #t)}
-at the top of the main input file). With @code{relative-includes}
+at the top of the main input file). With @code{relative-includes}
set, the path for each @code{\include} command will be taken
-relative to the file containing that command. This behavior is
+relative to the file containing that command. This behavior is
recommended and it will become the default behavior in a future
version of lilypond.
see @ref{MIDI block}.
Due to some limitations on Windows, the default extension for
-MIDI files on Windows is @code{.mid}. Other operating systems still
-use the extension @code{.midi}. If a different extension is preferred,
+MIDI files on Windows is @code{.mid}. Other operating systems still
+use the extension @code{.midi}. If a different extension is preferred,
insert the following line at the top-level of the input file,
before the start of any @code{\book}, @code{\bookpart} or @code{\score} blocks:
@itemize
@item Pitches
-@item Microtones (See @ref{Accidentals}. Rendering needs a
+@item Microtones (See @ref{Accidentals}. Rendering needs a
player that supports pitch bend.)
@item Chords entered as chord names
@item Rhythms entered as note durations, including tuplets
@cindex pedal diagrams, harp
Harps have seven strings per octave that may be sounded at the natural,
-flattened, or sharpened pitch. In lever harps, each string is adjusted
+flattened, or sharpened pitch. In lever harps, each string is adjusted
individually, but in pedal harps every string with the same pitch name
-is controlled by a single pedal. From the player's left to right, the
+is controlled by a single pedal. From the player's left to right, the
pedals are D, C, and B on the left and E, F, G, and A on the right.
The position of the pedals may be indicated with text marks:
The @code{\harp-pedal} command accepts a string of characters, where
@code{^} is the highest pedal position (flattened pitch), @code{-} is
the middle pedal position (natural pitch), @code{v} is the lowest pedal
-position (sharpened pitch), and @code{|} is the divider. A prefixed
+position (sharpened pitch), and @code{|} is the divider. A prefixed
@code{o} will circle the following pedal symbol.
@seealso
Note for editors and translators: In the following menu, two entries
are needed to link to a pair of automatically generated sections.
Please keep them and, if using emacs, do not run
-texinfo-all-menus-update without manually restoring them back. These
+texinfo-all-menus-update without manually restoring them back. These
menu entries are:
* Text markup commands::
@cindex percussion clef
Note that the normal notation of pitches (such as @code{cis4}) in a
-@code{DrumStaff} context will cause an error message. Percussion clefs
+@code{DrumStaff} context will cause an error message. Percussion clefs
are added automatically to a @code{DrumStaff} context but they can also
be set explicitly. Other clefs may be used as well.
@funindex \clef
@funindex clef
-The clef may be altered. Middle C is shown in every example. The
+The clef may be altered. Middle C is shown in every example. The
following clef names can (but do not need to) be enclosed in quotes.
@lilypond[verbatim,quote,relative=1]
@cindex practice note heads
@cindex note heads, easy notation
@cindex easy notation
-@cindex Hal Leonard
@cindex beginners' music
@cindex music, beginners'
@cindex easy play note heads
@funindex tremolo
Tremolos can take two forms: alternation between two chords or two
-notes, and rapid repetition of a single note or chord. Tremolos
+notes, and rapid repetition of a single note or chord. Tremolos
consisting of an alternation are indicated by adding beams between the
notes or chords being alternated, while tremolos consisting of the
rapid repetition of a single note are indicated by adding beams or
automatic beaming should be switched off with @code{\autoBeamOff}
and the beams indicated manually.}
+@warning{Using @code{@bs{}partcombine} with @code{@bs{}autoBeamOff} can
+produce unintended results. See the snippet below for more information.}
+
Beaming patterns that differ from the automatic defaults can be
created; see @ref{Setting automatic beam behavior}.
@snippets
+
@cindex line breaks and beams
@cindex beams and line breaks
@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
{changing-beam-knee-gap.ly}
+@cindex \partcombine and \autoBeamOff
+@cindex \autoBeamOff and \partcombine
+
+
+@lilypondfile [verbatim, lilyquote, ragged-right, texidoc, doctitle]
+{partcombine-and-autobeamoff.ly}
+
@seealso
Notation Reference:
@funindex \grace
@funindex grace
-Grace notes are ornaments that are written out. Grace notes
+Grace notes are ornaments that are written out. Grace notes
are printed in a smaller font and take up no logical time
in a measure.
@end lilypond
The space between the main note and the grace note may also be
-specified using spacers. The following example places the grace
+specified using spacers. The following example places the grace
note after a space lasting 7/8 of the main note.
@lilypond[quote,verbatim,relative=2]
@end lilypond
@noindent
-Here, voices are instantiated explicitly and are given names. The
+Here, voices are instantiated explicitly and are given names. The
@code{\voiceOne} ... @code{\voiceFour} commands set up the voices
so that first and third voices get stems up, second and fourth
voices get stems down, third and fourth voice note heads are
when one of the voices is explicitly named in order to attach lyrics to
it, the partcombining stops working.
-@code{\partcombine} only observes onset times of notes. It cannot
+@code{\partcombine} only observes onset times of notes. It cannot
determine whether a previously started note is playing or not, leading
to various problems.
Actually I found, that the @internalsref{StaffSymbol} at line 481
sends to an incomplete
-documentation. The property staff-space is not explained here. I
+documentation. The property staff-space is not explained here. I
thought Y-extent might be of
help, but it is in turn explained by x-space which again is
-missing from the list. Who has the
+missing from the list. Who has the
knowledge to fix this?
space increases when a page is stretched.
If this is zero, the distance to the next staff will not stretch at all;
@item @var{minimum-distance} -- the minimum distance to place between
-the baseline of a title and the center of the staff that follows it. This differs
+the baseline of a title and the center of the staff that follows it. This differs
from @var{padding} in that the height of a staff has no effect on
the application of @var{minimum-distance} (whereas the height of a
staff is crucial for @var{padding}).
@end example
-If a page has a ragged bottom, @var{space} is not stretched. In particular, the
+If a page has a ragged bottom, @var{space} is not stretched. In particular, the
resulting distance on such a page is the largest of
@itemize @bullet
@item @var{space},
@funindex between-scores-system-spacing
Specifies the spacing between two systems if they are in different scores, but
-there is no title between them. See @var{after-title-spacing}.
+there is no title between them. See @var{after-title-spacing}.
@item between-system-spacing
@funindex between-system-spacing
@end table
-If some values are not set, defaults will be taken. Their exact
+If some values are not set, defaults will be taken. Their exact
value is adjusted, depending on the paper size specified. Currently,
the following values are affected by this scaling:
@funindex check-consistency
If set to true, check whether @code{left-margin}, @code{right-margin} and
-@code{line-width} fit each other. Also make sure that their combination
+@code{line-width} fit each other. Also make sure that their combination
does not exceed the available @code{paper-width}. Default: @code{##t}.
@item first-page-number
@code{#1}.
@item max-systems-per-page
-The maximum number of systems that will be placed on a page. This
+The maximum number of systems that will be placed on a page. This
is currently supported only by the @code{ly:optimal-breaking} algorithm.
Default: unset.
@item min-systems-per-page
-The minimum number of systems that will be placed on a page. This
-may cause pages to be overfilled if it is made too large. This is
+The minimum number of systems that will be placed on a page. This
+may cause pages to be overfilled if it is made too large. This is
currently supported only by the @code{ly:optimal-breaking} algorithm.
Default: unset.
@cindex line breaks
@cindex breaking lines
-Line breaks are normally determined automatically. They are chosen
+Line breaks are normally determined automatically. They are chosen
so that lines look neither cramped nor loose, and consecutive
lines have similar density. Occasionally you might want to
override the automatic breaks; you can do this by specifying
-@code{\break}. This will force a line break at this point. However,
+@code{\break}. This will force a line break at this point. However,
line breaks can only occur at the end of @q{complete} bars, i.e.,
where there are no notes or tuplets left @q{hanging} over the bar
line. If you want to have a line break where there is no bar line,
bar line where it is inserted.
The most basic settings influencing line spacing are @code{indent}
-and @code{line-width}. They are set in the @code{\layout} block.
+and @code{line-width}. They are set in the @code{\layout} block.
They control the indentation of the first line of music, and the
lengths of the lines.
If @code{ragged-right} is set to true in the @code{\layout} block,
then systems end at their natural horizontal length, instead of
-being spread horizontally to fill the whole line. This is useful
+being spread horizontally to fill the whole line. This is useful
for short fragments, and for checking how tight the natural
spacing is.
\layout {
\context {
\Lyrics
- % By default, Lyrics are placed close together. Here, we allow them to
+ % By default, Lyrics are placed close together. Here, we allow them to
% be stretched more widely.
\override VerticalAxisGroup
#'inter-loose-line-spacing #'stretchability = #1000
There are two more @code{\paper} block variables that affect vertical
spacing: if @var{ragged-bottom} is set to @code{##t} then no pages will
be stretched (which means that neither the space between systems nor the
-space within systems will be stretched). If @var{ragged-last-bottom}
+space within systems will be stretched). If @var{ragged-last-bottom}
is set to @code{##t} then the last page will not be stretched.
@seealso
Note that the LilyPond's proportional notation package expects
that all proportional scores set the SpacingSpanner's
-'uniform-stretching attribute to ##t. Setting
+'uniform-stretching attribute to ##t. Setting
proportionalNotationDuration without also setting the
SpacingSpanner's 'uniform-stretching attribute to ##t will, for
example, cause Skips to consume an incorrect amount of horizontal
space.
The SpacingSpanner is an abstract grob that lives in the Score
-context. As with our settings of proportionalNotationDuration,
+context. As with our settings of proportionalNotationDuration,
overrides to the SpacingSpanner can occur in any of three
different places in our input file – in the Score \with block, in
a Score \context block, or in note entry directly.
@end lilypond
Both scores are proportional, but the spacing in the first score
-is too loose because of the clef change. The spacing of the second
+is too loose because of the clef change. The spacing of the second
score remains strict, however, because strict-note-spacing is
turned on. Turning on strict-note-spacing causes the width of
time signatures, key signatures, clefs and accidentals to play no
part in the spacing algorithm.
In addition to the settings given here, there are other settings
-that frequently appear in proportional scores. These include:
+that frequently appear in proportional scores. These include:
@itemize
@item @code{\override SpacingSpanner #'strict-grace-spacing = ##t}
of the units specified in the @code{\paper} or @code{\layout} block.
In the above example, @code{paper-height} has a value of 59.75
@code{staff-spaces}, and the @code{staff-size} is 20 points (the
-default value). Note that:
+default value). Note that:
@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm}
@noindent
In this case, one @code{staff-space} is approximately equal to
-1.757mm. Thus the @code{paper-height} measurement of 59.75
+1.757mm. Thus the @code{paper-height} measurement of 59.75
@code{staff-spaces} is equivalent to 105 millimeters, the height
of @code{a6} paper in landscape orientation. The pairs
(@var{a},@var{b}) are intervals, where @var{a} is the lower
being typeset by default, will sometimes cause more systems to
be fitted onto each page, as an estimation step is then bypassed,
giving a more accurate fit to each page. Also, forcing an actual
-reduction in the number of systems may save a further page. For
+reduction in the number of systems may save a further page. For
example, if the default layout has 11 systems, the following
assignment will force a layout with 10 systems.
@code{RhythmicStaff} creates a single-line staff that only
displays the rhythmic values of the input. Real durations are
-preserved. For details, see @ref{Showing melody rhythms}.
+preserved. For details, see @ref{Showing melody rhythms}.
@lilypond[verbatim,quote,relative=2]
\new RhythmicStaff { c4 d e f }
The line style, as well as the text string, can be defined as an
object property. This syntax is described in @ref{Line styles}.
+Text spanners are part of the @code{Dynamics} context; see
+@rinternals{Dynamics}.
@funindex \textSpannerUp
@knownissues
LilyPond is only able to handle one text spanner per voice.
+@snippets
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{dynamics-text-spanner-postfix.ly}
+
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{dynamics-custom-text-spanner-postfix.ly}
+
@seealso
Notation Reference:
@ref{Line styles},
@ref{Dynamics}.
Snippets:
-@rlsr{Text}.
+@rlsr{Text},
+@rlsr{Expressive marks}.
Internals Reference:
-@rinternals{TextSpanner}.
+@rinternals{TextSpanner},
+@rinternals{Dynamics}.
@node Text marks
dynamic marks} and @ref{Manual repeat marks}.
@c \concat is actually documented in Align (it is not
-@c a font-switching command). But we need it here. -vv
+@c a font-switching command). But we need it here. -vv
When used inside a word, some font-switching or formatting commands
may produce an unwanted blank space. This can easily be solved by
\line \bold { Acto I }
\wordwrap \italic {
(La escena representa el corral de una casa de
- gitanos en el Albaicín de Granada. Al fondo una
+ gitanos en el Albaicín de Granada. Al fondo una
puerta por la que se ve el negro interior de
una Fragua, iluminado por los rojos resplandores
del fuego.)
\line \bold { Acto II }
\override #'(line-width . 50)
\justify \italic {
- (Calle de Granada. Fachada de la casa de Carmela
+ (Calle de Granada. Fachada de la casa de Carmela
y su hermano Manuel con grandes ventanas abiertas
a través de las que se ve el patio
donde se celebra una alegre fiesta)
* Common notation for vocal music::
* Entering lyrics::
* Aligning lyrics to a melody::
-* Specific uses of lyrics::
+* Techniques specific to lyrics::
* Stanzas::
+* Songs::
+* Choral::
+* Opera and stage musicals::
+* Chants psalms and hymns::
+* Ancient vocal music::
+
@end menu
@node Common notation for vocal music
@subsection Common notation for vocal music
-This section discusses issues related to vocal music in general, and
-to some particular styles of vocal music.
+This section and sections 2.1.2 to 2.1.5 discuss issues common to
+all types of vocal music. Issues specific to certain types of
+vocal music are covered in section 2.1.6 on.
@menu
-* References for vocal music and lyrics::
-* Opera::
-* Song books::
-* Spoken music::
-* Chants::
-* Ancient vocal music::
+* Common references for vocal music::
@end menu
-@node References for vocal music and lyrics
-@unnumberedsubsubsec References for vocal music and lyrics
-
-@c TODO: split this section in two parts? -vv
+@node Common references for vocal music
+@unnumberedsubsubsec Common references for vocal music
-Various issues may arise when engraving vocal music. Some of these
-are discussed in this section, while others are explained elsewhere:
+This section indicates where to find details of notation issues
+that may arise in any type of vocal music.
@itemize
+
@item
Most styles of vocal music use written text as lyrics. An introduction
to this notation is to be found in @rlearning{Setting simple songs}.
for lyrics of for other text elements (character's names, etc.).
This syntax is described in @ref{Text markup introduction}.
-@item
-Lead sheets may be printed by combining vocal parts and @q{chord mode};
-this syntax is explained in @ref{Chord notation}.
-
@item
@q{Ambitus} may be added at the beginning of vocal staves, as explained
in @ref{Ambitus}.
-@item
-Vocal parts may be printed using traditional clefs, as shown in @ref{Clef}.
-
-@item
-Ancient vocal music is supported, as explained in @ref{Ancient notation}.
@end itemize
-@node Opera
-@unnumberedsubsubsec Opera
-
-@c TODO
-TBC
-
-@c add characters names snippet -vv
-
-@node Song books
-@unnumberedsubsubsec Song books
-
-@c TODO
-TBC
-
-@snippets
-@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-{simple-lead-sheet.ly}
-
-
-@seealso
-Notation Reference:
-@ref{Chord notation}.
-
-
-@node Spoken music
-@unnumberedsubsubsec Spoken music
-@cindex parlato
-@cindex Sprechgesang
-Such effects as @q{parlato} or @q{Sprechgesang} require performers to speak
-without pitch but still with rhythm; these are notated by cross
-note heads, as demonstrated in @ref{Special note heads}.
-
-@c TODO add "marking-notes-on-spoken-parts" snippet -vv
-@c add "showing the rhythm of a melody" snip
-@c add "one staff-line notation"
-@c add "improvisation" ref
-@c add "lyrics independents of notes" ref
-
-@node Chants
-@unnumberedsubsubsec Chants
-
-@c TODO Add text from lsr and -user
-TBC
-
-@node Ancient vocal music
-@unnumberedsubsubsec Ancient vocal music
-
-@c TODO
-TBC
-
-@c Add "Printing both the ancient and the modern clef in vocal music" snippet,
-@c and "Transcription of Ancient music with incipit" snippet. -vv
-
-
-@seealso
-Notation Reference:
-@ref{Ancient notation}.
-
-
@node Entering lyrics
@subsection Entering lyrics
-@c TODO add one sentence here. -vv
+Lyrics are entered in lyric mode. This section explains how this
+done.
@menu
* Lyrics explained::
-* Setting simple songs::
* Working with lyrics and variables::
@end menu
@rinternals{LyricSpace}.
-@c TODO: this title has to be changed (possible confusion with LM) -vv
-@node Setting simple songs
-@unnumberedsubsubsec Setting simple songs
-
-@cindex \addlyrics
-
-The easiest way to add lyrics to a melody is to append
-
-@example
-\addlyrics @{ @var{the lyrics} @}
-@end example
-
-@noindent
-to a melody. Here is an example,
-
-@lilypond[ragged-right,verbatim,fragment,quote]
-\time 3/4
-\relative c' { c2 e4 g2. }
-\addlyrics { play the game }
-@end lilypond
-
-More stanzas can be added by adding more
-@code{\addlyrics} sections
-
-@lilypond[ragged-right,verbatim,fragment,quote]
-\time 3/4
-\relative c' { c2 e4 g2. }
-\addlyrics { play the game }
-\addlyrics { speel het spel }
-\addlyrics { joue le jeu }
-@end lilypond
-
-The command @code{\addlyrics} cannot handle polyphony settings. For these
-cases you should use @code{\lyricsto} and @code{\lyricmode}, as will be
-introduced in @ref{Lyrics explained}.
-
-@c TODO: one additional section may be needed here,
-@c such as "advanced lyric syntax" or whatever -vv
-
@node Working with lyrics and variables
@unnumberedsubsubsec Working with lyrics and variables
Be careful when defining a variable with lyrics that creates a new
-context, for example, using the deprecated @code{\lyrics} command. See
+context, for example, using the deprecated @code{\lyrics} command. See
the next erroneous example:
@example
The second stanza is not properly aligned because the durations
were not specified. A solution for that would be to use @code{\lyricsto}.
+@cindex \addlyrics
+
The @code{\addlyrics} command is actually just a convenient way
to write a more complicated LilyPond structure that sets up the
lyrics.
\new Lyrics \lyricsto "blah" @{ LYRICS @}
@end example
+Here is an example,
+
+@lilypond[ragged-right,verbatim,fragment,quote]
+\time 3/4
+\relative c' { c2 e4 g2. }
+\addlyrics { play the game }
+@end lilypond
+
+More stanzas can be added by adding more
+@code{\addlyrics} sections
+
+@lilypond[ragged-right,verbatim,fragment,quote]
+\time 3/4
+\relative c' { c2 e4 g2. }
+\addlyrics { play the game }
+\addlyrics { speel het spel }
+\addlyrics { joue le jeu }
+@end lilypond
+
+The command @code{\addlyrics} cannot handle polyphony settings.
+For these cases you should use @code{\lyricsto} and
+@code{\lyricmode}, for details see@ref{Lyrics explained}.
+
@node Manual syllable durations
@unnumberedsubsubsec Manual syllable durations
@c duplicated: TODO fix
Additionally, you can make an extender line to be typeset to indicate
the melisma in the score, writing a double underscore next to the
-first syllable of the melisma. This example shows the three elements
+first syllable of the melisma. This example shows the three elements
that are used for this purpose (all of them surrounded by spaces):
double hyphens to separate syllables in a word, underscores to add
notes to a melisma, and a double underscore to put an extender line.
-@c wrong: extender line only on last syllable of a word. Change example
+@c wrong: extender line only on last syllable of a word. Change example
@lilypond[relative=1,verbatim,fragment,quote]
{ \set melismaBusyProperties = #'()
c d( e) f f( e) e e }
TBC
-@node Specific uses of lyrics
-@subsection Specific uses of lyrics
+@node Techniques specific to lyrics
+@subsection Techniques specific to lyrics
@c TODO This whole section is to be reorganized. -vv
* Divisi lyrics::
* Lyrics independent of notes::
* Spacing out syllables::
-* Centering lyrics between staves::
+* Placement of lyrics between staves::
@end menu
This method is recommended only if the music in the @code{Devnull}
context does not contain melismata. Melismata are defined by the
-@code{Voice} context. Connecting lyrics to a @code{Devnull} context
+@code{Voice} context. Connecting lyrics to a @code{Devnull} context
makes the voice/lyrics links to get lost, and so does the info on
melismata. Therefore, if you link lyrics to a @code{Devnull} context,
the implicit melismata get ignored.
@end ignore
-@node Centering lyrics between staves
-@unnumberedsubsubsec Centering lyrics between staves
+@node Placement of lyrics between staves
+@unnumberedsubsubsec Placement of lyrics between staves
@c TODO Add text from -user
+@c TODO Add new spacing properties, centering lyrics, etc
TBC
@node Stanzas
@rinternals{StanzaNumber}.
+@node Songs
+@subsection Songs
+
+@menu
+* References for songs::
+* Lead sheets::
+@end menu
+
+@node References for songs
+@unnumberedsubsubsec References for songs
+
+@c TODO chords, setting simple songs (LM), stanzas
+TBC
+
+@node Lead sheets
+@unnumberedsubsubsec Lead sheets
+
+Lead sheets may be printed by combining vocal parts and @q{chord mode};
+this syntax is explained in @ref{Chord notation}.
+
+@snippets
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{simple-lead-sheet.ly}
+
+@seealso
+Notation Reference:
+@ref{Chord notation}.
+
+
+@node Choral
+@subsection Choral
+
+@cindex anthems
+@cindex part songs
+@cindex oratorio
+@cindex SATB
+
+This section discusses notation issues that relate most directly
+to choral music. This includes anthems, part songs, oratorio,
+etc.
+
+@menu
+* References for choral::
+* Score layouts for choral::
+@end menu
+
+@node References for choral
+@unnumberedsubsubsec References for choral
+
+Choral music is usually notated on two, three or four staves within
+a @code{ChoirStaff} group. Accompaniment, if required, is placed
+beneath in a @code{PianoStaff} group, which is usually reduced in
+size for @emph{a capella} choral works. The notes for each vocal
+part are placed in a @code{Voice} context, with each either on a
+staff of its own or grouped in pairs on a single staff.
+
+Words are placed in @code{Lyrics} contexts, either underneath each
+corresponding music staff, or one above and one below the music
+staff if this contains the music for two parts.
+
+Several common topics in choral music are described fully elsewhere:
+
+@itemize
+
+@item
+An introduction to creating an SATB vocal score can be found in
+the Learning Manual, see @rlearning{Four-part SATB vocal score}.
+
+@item
+Several templates suitable for various styles of choral music can
+also be found in the Learning Manual, see
+@rlearning{Vocal ensembles}.
+
+@item
+For information about @code{ChoirStaff} and @code{PianoStaff} see
+@ref{Grouping staves}.
+
+@item
+General information about entering the words (i.e. @qq{lyrics}) to
+vocal music is described in sections 2.1.2 to 2.1.5 of this manual.
+All these sections are relevant to choral music.
+
+@item
+Shape noteheads, as used in Sacred Harp and similar notation, are
+described in @ref{Shape note heads}.
+
+@end itemize
+
+@seealso
+Learning Manual:
+@rlearning{Four-part SATB vocal score},
+@rlearning{Vocal ensembles}.
+
+Notation Reference:
+@ref{Grouping staves},
+@ref{Context layout order},
+@ref{Shape note heads}.
+
+Internals Reference:
+@rinternals{ChoirStaff},
+@rinternals{Lyrics},
+@rinternals{PianoStaff}.
+
+@node Score layouts for choral
+@unnumberedsubsubsec Score layouts for choral
+
+Choral music containing four staves, with or without piano
+accompaniment, is usually laid out with two systems per page.
+Depending on the page size, achieving this may require changes
+to several default settings. The following settings should be
+considered:
+
+@itemize
+
+@item
+The global staff size can be modified to change the overall size
+of the elements of the score. See @ref{Setting the staff size}.
+
+@item
+The distances between the systems, the staves and the lyrics can
+all be adjusted independently. See @ref{Vertical spacing}.
+
+@item
+Setting @code{annotate-spacing = ##t} in the layout block will
+display the dimensions of the vertical layout variables. This
+may help in adjusting them. For details, see
+@ref{Displaying spacing}.
+
+@item
+Other possibilities for fitting the music onto fewer pages are
+described in @ref{Changing spacing}.
+
+@end itemize
+
+If the number of systems per page changes from one to two it is
+customary to indicate this with a system separator mark between
+the two systems. By default the system separator is blank. It
+may be activated with
+
+@example
+\paper @{
+ system-separator-markup = \slashSeparator
+@}
+@end example
+
+@noindent
+For details of this and other page formatting properties, see
+@ref{Page formatting}.
+
+Dynamic markings by default are placed below the staff, but in
+choral music they are often placed above the staff in order to
+avoid the lyrics. The predefined command @code{\dynamicUp} does
+this for the dynamic markings in a single @code{Voice} context.
+To place all dynamic markings in the score above their respective
+staves use the following in a @code{\layout} block within the
+@code{\score} block:
+
+@example
+\layout @{
+ \context @{
+ \Score
+ \override DynamicText #'direction = #UP
+ \override DynamicLineSpanner #'direction = #UP
+ @}
+@}
+@end example
+
+@predefined
+@code{\dynamicUp}.
+
+@seealso
+Notation Reference:
+@ref{Setting the staff size},
+@ref{Vertical spacing},
+@ref{Displaying spacing},
+@ref{Changing spacing},
+@ref{Score layout},
+@ref{Using an extra voice for breaks},
+@ref{Page formatting}.
+
+Internals Reference:
+@rinternals{VerticalAxisGroup},
+@rinternals{StaffGrouper}.
+
+
+@node Opera and stage musicals
+@subsection Opera and stage musicals
+
+@menu
+* References for opera and stage musicals::
+* Spoken music::
+* Dialogue over music::
+@end menu
+
+@node References for opera and stage musicals
+@unnumberedsubsubsec References for opera and stage musicals
+
+@c TODO Choral, cues, character names, French staves
+@c vocal/conductor scores
+@c add characters names snippet -vv
+
+TBC
+
+@node Spoken music
+@unnumberedsubsubsec Spoken music
+
+@cindex parlato
+@cindex Sprechgesang
+Such effects as @q{parlato} or @q{Sprechgesang} require performers to speak
+without pitch but still with rhythm; these are notated by cross
+note heads, as demonstrated in @ref{Special note heads}.
+
+@c TODO add "marking-notes-on-spoken-parts" snippet -vv
+@c add "showing the rhythm of a melody" snip
+@c add "one staff-line notation"
+@c add "improvisation" ref
+@c add "lyrics independents of notes" ref
+
+@node Dialogue over music
+@unnumberedsubsubsec Dialogue over music
+
+TBC
+
+
+@node Chants psalms and hymns
+@subsection Chants psalms and hymns
+
+@cindex chants
+@cindex psalms
+@cindex hymns
+@cindex religious music
+
+The music and words for chants, psalms and hymns usually follow a
+well-established format in any particular church. Although the
+formats may differ from church to church the type-setting problems
+which arise are broadly similar, and are covered in this section.
+
+@menu
+* References for chants and psalms::
+* Setting a chant::
+* Pointing a psalm::
+* Partial measures in hymn tunes::
+@end menu
+
+@node References for chants and psalms
+@unnumberedsubsubsec References for chants and psalms
+
+Typesetting Gregorian chant in various styles of ancient notation
+is described in @ref{Ancient notation}.
+
+Modern chant settings use modern notation with varying numbers of
+elements taken from ancient notation. Some of the elements and
+methods to consider are these:
+
+@itemize
+
+@item
+Chants often use quarter notes without stems to indicate the pitch,
+with the rhythm being taken from the spoken rhythm of the words. To
+remove the stem set the @code{transparent} property of the
+@code{Stem} grob to @code{#t}. See
+@rlearning{Visibility and color of objects} and
+@ref{Visibility of objects}. An alternative is set the
+@code{length} property to @code{0}.
+
+@item
+Chants usually omit the bar lines or use shortened or dotted bar
+lines to indicate pauses in the music. To omit bar lines
+completely use @code{\cadenzaOn} or remove the @code{Bar_engraver}.
+See @ref{Unmetered music} and @ref{Modifying context plug-ins}.
+
+@item
+To use modified bar lines see the @emph{Bar lines} section in
+@ref{Bars}. Alternatively, the correct Gregorian chant notation
+for pauses or rests in the music are described in @emph{Divisiones}
+in @ref{Typesetting Gregorian chant}.
+
+@item
+Chants usually omit the time signature and often omit the clef too.
+To omit these remove the @code{Time_signature_engraver} and
+@code{Clef_engraver} from the @code{Staff} context respectively.
+For details, see @ref{Modifying context plug-ins}.
+
+@end itemize
+
+@seealso
+Learning Manual:
+@rlearning{Visibility and color of objects}.
+
+Notation reference:
+@ref{Ancient notation},
+@ref{Visibility of objects},
+@ref{Bars},
+@ref{Unmetered music},
+@ref{Modifying context plug-ins},
+@ref{Typesetting Gregorian chant}.
+
+@node Setting a chant
+@unnumberedsubsubsec Setting a chant
+
+Some approaches to setting a chant are shown in the following
+snippets.
+
+@snippets
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{chant-or-psalms-notation.ly}
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{ancient-notation-template----modern-transcription-of-gregorian-music.ly}
+
+
+@node Pointing a psalm
+@unnumberedsubsubsec Pointing a psalm
+
+TBC
+
+@node Partial measures in hymn tunes
+@unnumberedsubsubsec Partial measures in hymn tunes
+
+Hymn tunes frequently start and end every line of music with
+partial measures so that each line of music corresponds exactly
+with a line of text. This requires a @code{\partial} command at
+the start of the music and @code{\bar "|"} or @code{\bar "||"}
+commands at the end of each line.
+
+@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+{hymn-template.ly}
+
+
+@node Ancient vocal music
+@subsection Ancient vocal music
+
+Ancient vocal music is supported, as explained in @ref{Ancient notation}.
+
+@c TODO
+
+@c Add "Printing both the ancient and the modern clef in vocal music" snippet,
+@c and "Transcription of Ancient music with incipit" snippet. -vv
+
+@seealso
+Notation Reference:
+@ref{Ancient notation}.
+
+
@menu
* Common notation for wind instruments::
* Bagpipes::
+* Woodwinds::
@end menu
@node Common notation for wind instruments
with slurs, see @ref{Articulations and ornamentations} and @ref{List of
articulations}.
@item Flutter tonguing is usually indicated by placing a tremolo mark
-and a text markup on the note. See @ref{Tremolo repeats}.
+and a text markup on the note. See @ref{Tremolo repeats}.
@end itemize
There are also other aspects of musical notation that can apply to wind
@item Many wind instruments are transposing instruments, see
@ref{Instrument transpositions}.
@item The slide glissando are characteristic of the trombone, but other
-winds may perform keyed or valved glissandi. See @ref{Glissando}.
+winds may perform keyed or valved glissandi. See @ref{Glissando}.
@item Harmonic series glissandi, which are possible on all brass
instruments but common for French Horns, are usually written out as
@ref{Grace notes}.
and doits}.
@item Key slaps or valve slaps are often shown by the @code{cross} style
of @ref{Special note heads}.
-@item Woodwinds can overblow low notes to sound harmonics. These are
-shown by the @code{flageolet} articulation. See @ref{List of articulations}.
+@item Woodwinds can overblow low notes to sound harmonics. These are
+shown by the @code{flageolet} articulation. See @ref{List of articulations}.
@item The use of brass mutes is usually indicated by a text markup, but
where there are many rapid changes it is better to use the
-@code{stopped} and @code{open} articulations. See @ref{Articulations and
+@code{stopped} and @code{open} articulations. See @ref{Articulations and
ornamentations} and @ref{List of articulations}.
@item Stopped horns are indicated by the @code{stopped} articulation.
See @ref{Articulations and ornamentations}.
@unnumberedsubsubsec Fingerings
All wind instruments other than the trombone require the use of several
-fingers to produce each pitch.
+fingers to produce each pitch. Some fingering helps are shown in
+the snippets below.
+
+Woodwind diagrams can be produced and are described in
+@ref{Woodwind diagrams}.
@snippets
@seealso
+Notation Reference:
+@ref{Woodwind diagrams}.
+
Snippets:
@rlsr{Winds}.
@seealso
@rlsr{Winds}.
+
+@node Woodwinds
+@subsection Woodwinds
+
+This section describes notation specifically for woodwinds.
+
+@menu
+* Woodwind diagrams::
+@end menu
+
+@node Woodwind diagrams
+@subsubsection Woodwind diagrams
+
+Woodwind diagrams can be used to indicate the fingering to be used
+to play specific notes. Woodwind diagrams are available for most woodwind
+instruments.
+
+Woodwind diagrams are available for the following instruments:
+
+@itemize
+@item piccolo
+@item flute
+@item oboe
+@item clarinet
+@item bass clarinet
+@item saxophone
+@item basson
+@item contrabassoon
+@end itemize
+
+@noindent
+The diagrams and the scheme instrument names are shown in the snippet below.
+
+Woodwind diagrams are created as markups:
+
+
+@lilypond[verbatim, quote, relative=2]
+c1^ \markup \woodwind-diagram #'piccolo #'((lh . (gis))
+ (cc . (one three))
+ (rh . (ees)))
+@end lilypond
+
+Keys can be open, partially-covered, ring-depressed, or fully covered:
+
+@lilypond [verbatim, quote, relative=2]
+\textLengthOn
+c1^ \markup \center-column {
+ "one quarter"
+ \woodwind-diagram #'flute #'((cc . (one1q))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "one half"
+ \woodwind-diagram #'flute #'((cc . (one1h))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "three quarter"
+ \woodwind-diagram #'flute #'((cc . (one3q))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "ring"
+ \woodwind-diagram #'flute #'((cc . (oneR))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "full"
+ \woodwind-diagram #'flute #'((cc . (oneF two))
+ (lh . ())
+ (rh . ()))
+}
+@end lilypond
+
+Trills are indicated in the woodwind diagrams as shaded keys:
+
+@lilypond [verbatim, quote, relative=2]
+c1^ \markup \woodwind-diagram #'bass-clarinet
+ #'((cc . (threeT four))
+ (lh . ())
+ (rh . (b fis)))
+@end lilypond
+
+A variety of trills can be displayed:
+
+@lilypond [verbatim, quote, relative=2]
+\textLengthOn
+c1^ \markup \center-column {
+ "one quarter to ring"
+ \woodwind-diagram #'flute #'((cc . (one1qTR))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "ring to shut"
+ \woodwind-diagram #'flute #'((cc . (oneTR))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "ring to open"
+ \woodwind-diagram #'flute #'((cc . (oneRT))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "open to shut"
+ \woodwind-diagram #'flute #'((cc . (oneT))
+ (lh . ())
+ (rh . ()))
+}
+c1^ \markup \center-column {
+ "one quarter to three quarters"
+ \woodwind-diagram #'flute #'((cc . (one1qT3q))
+ (lh . ())
+ (rh . ()))
+}
+@end lilypond
+
+The list of all possible keys and settings for a given instrument
+can be displayed on the console or in the log file, although they
+will not show up in the music output:
+
+@lilypond[verbatim, quote]
+
+#(print-keys-verbose 'flute)
+
+@end lilypond
+
+New diagrams can be created by following the patterns in
+@file{scm/define-woodwind-diagrams.scm} and
+@file{scm/display-woodwind-diagrams.scm}. However, this will
+require Scheme ability and may not be accessible to all users.
+
+@predefined
+@endpredefined
+
+@snippets
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{woodwind-diagrams-listing.ly}
+
+@lilypondfile[verbatim, lilyquote, texidoc, doctitle]
+{graphical-and-text-woodwind-diagrams.ly}
+
+@lilypondfile[verbatim, lilyquote, texidoc, doctitle]
+{changing-the-size-of-woodwind-diagrams.ly}
+
+@lilypondfile[verbatim, lilyquote, texidoc, doctitle]
+{woodwind-diagrams-key-lists.ly}
+
+@seealso
+
+Installed Files:
+@file{scm/define-woodwind-diagrams.scm},
+@file{scm/display-woodwind-diagrams.scm}.
+
+Snippets: @rlsr{Winds}.
+
+Internals Reference:
+@rinternals{TextScript},
+@rinternals{instrument-specific-markup-interface}.
+
+@knownissues
@menu
* References for Arabic music::
-* Arabic note names ::
+* Arabic note names::
* Arabic key signatures::
* Arabic time signatures::
* Arabic music example::
@item
There is not a complete consistency, sometimes even in the same
text on how key signatures for particular maqams should be
-specified. It is common, however, to use a key signature per
+specified. It is common, however, to use a key signature per
group, rather than a different key signature for each different
maqam.
@macro manualIntro
This document shows a selected set of LilyPond snippets from the
@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
-(LSR). It is in the public domain.
+(LSR). It is in the public domain.
We would like to address many thanks to Sebastiano Vigna for maintaining
LSR web site and database, and the University of Milano for hosting LSR.
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards"
"
doctitlees = "Símbolos de acordeón discanto"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Symbole für Akkordeon-Diskantregister"
texidocde = "
} % begin verbatim
discant = \markup {
- \musicglyph #"accordion.accDiscant"
+ \musicglyph #"accordion.discant"
}
dot = \markup {
- \musicglyph #"accordion.accDot"
+ \musicglyph #"accordion.dot"
}
\layout { ragged-right = ##t }
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords, ancient-notation, contexts-and-engravers"
"
doctitlees = "Añadir un bajo cifrado encima o debajo de las notas"
+
%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5
doctitlefr = "Ajout d'une basse chiffrée au-dessus ou au-dessous des notes"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
debe desplazar manualmente para evitar colisiones.
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ambitus können pro Stimme gesetzt werden. In diesem Fall müssen sie
"
doctitlede = "Ambitus pro Stimme hinzufügen"
+
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
L'@code{ambitus} peut être individualisé par voix. Il faut en pareil
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, contexts-and-engravers, breaks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, contexts-and-engravers"
\score {
<<
- \new Staff \relative c'' { c1 | c | c | c | c }
+ \new Staff \relative c'' {
+ c1 | c | c | c | c
+ }
\new StaffGroup \relative c'' {
\new Staff {
- c1 | c <<
- c1
+ c1 | c
+ <<
+ {
+ c1 | d
+ }
\new Staff {
\once \override Staff.TimeSignature #'stencil = ##f
- c1
+ c1 | b
}
>>
c1
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Añadir barras de compás al contexto de nombres de acorde (ChordNames)"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um Taktstriche in einem @code{ChordNames}-Kontext anzeigen zu lassen, muss der
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, expressive-marks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, percussion"
"
doctitlees = "Escritura de partes de percusión"
+
%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea
texidocfr = "
Grâce à la puissance des outils préconfigurés tels que la fonction
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, fretted-strings"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.17
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, titles"
"
doctitlees = "Añadir la fecha actual a una partitura"
+
%% Translation of GIT committish: 05624d5147843d2fcbd6e4e126f1fd43142ac6e5
texidocfr = "
Avec un peu de code Scheme, voici comment ajouter facilement
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats"
"
doctitlees = "Añadir corchetes de primera y segunda vez a más pentagramas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der @code{Volta_engraver} befindet sich im @code{Score}-Kontext und Klammern
"
doctitlede = "Volta-Klammern zu zusätzlichen Systemen hinzufügen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
D'ordinaire, le graveur @code{Volta_engraver} réside dans le contexte
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein einigen Fällen von sehr komplexer polyphoner Musik sind zusätzliche
"
doctitlede = "Zusätzliche Stimmen um Zusammenstöße zu vermeiden"
+
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Dans certains cas de musique polyphonie complexe, une voix
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.16
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Ajustar la forma de las subidas y caídas de tono"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die @code{shortest-duration-space}-Eigenschaft kann verändert werden, um
"
doctitlede = "Das Aussehen von unbestimmten Glissandi anpassen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
La propriété @code{shortest-duration-space} peut devoir être retouchée
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, paper-and-layout, titles"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Alineación de los números de compás"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern sind standardmäßig links an ihrem Ursprungsobjet
doctitlede = "Taktnummern ausrichten"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Les numéros de mesure s'alignent en principe sur la droite de l'objet
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
"
doctitlees = "Alinear marcas con varios objetos de notación"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn angegeben, können Textzeichen auch an anderen Objekten als Taktstrichen
"
doctitlede = "Zeichen an verschiedenen Notationsobjekten ausrichten"
+
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
Les indications textuelles peuvent s'aligner par rapport à d'autres
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing"
"
doctitlees = "Permitir que las digitaciones se impriman dentro del pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden vertikal orientierte Fingersatzzahlen außerhalb des Systems
"
doctitlede = "Fingersatz auch innerhalb des Systems setzen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
L'empilement des indications de doigté se fait par défaut à l'extérieur
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, vocal-music"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man den @code{Ambitus_engraver} im @code{Staff}-Kontext
Fall, dass mehrere Stimmen sich im gleichen System befinden.
"
doctitlede = "Ambitus mit vielen Stimmen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Si plusieurs voix se trouvent sur une même portée, on peut attribuer le
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "ancient-notation"
doctitlees = "Tipografía de música antigua"
+
%% Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea
texidocfr ="
Voici comment graver la plupart, sinon tous les symboles que
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
- lsrtags = "ancient-notation, template"
+ lsrtags = "vocal-music, ancient-notation, template"
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
texidoces = "
"
doctitlees = "Plantilla para notación de música antigua (transcripción moderna de canto gregoriano)"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
"
doctitlede = "Vorlage für Alte Notation -- moderne Transkription des gregorianischen Chorals"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Voici comment vous pourriez transcrire du grégorien. Pour mémoire, il
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "ancient-notation, template"
"
doctitlees = "Plantilla de notación de música antigua (transcripción moderna de música mensural)"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bei der Transkription von Mensuralmusik ist es oft erwünscht, ein
doctitlede = "Vorlage für Alte Notation -- moderne Transkription von Mensuralmusik"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Lorsque l'on transcrit de la musique mensurale, un @emph{incipit} permet
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "ancient-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, editorial-annotations"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Notenkopfstile basierend auf der Tonleiterstufe erstellen"
texidocde = "
harmonischen Funktionen und dem Notenstil verloren geht.
"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La propriété @code{shapeNoteStyles} permet d'affecter un profil
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "world-music"
"
doctitlees = "Improvisación de música árabe"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bei Improvisation oder @emph{taqasim}, die zeitlich frei gespielt
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords, fretted-strings"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
doctitlees = "Barras que atraviesan saltos de línea"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zeilenumbrüche sind normalerweise während Balken verboten. Das kann geändert
doctitlede = "Balken über Zeilenumbrüche"
+
%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "paper-and-layout"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, text"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.15
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, unfretted-strings"
"
doctitlees = "Cambiar el tamaño de la marca de \\flageolet"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um den @code{\\flageolet}-Kreis kleiner zu machen, kann diese
"
doctitlede = "\\flageolet-Zeichen verkleinern"
+
%% Translation of GIT committish: 5b980ee07bba23d3633de1d371fb2926f164e295
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
doctitlees = "Cambiar el salto de las barras en ángulo"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Balken mit Hälsen in unterschiedliche Richtungen werden automatisch
doctitlede = "Balken für weit auseinander liegende Noten ändern"
+
%% Translation of GIT committish: 708e0d9c660856b19929736ca18a6f9d68539c60
texidocfr = "
LilyPond insère automatiquement des ligatures coudées --- certaines
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Modificación del separador de acordes"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der Trenner zwischen unterschiedlichen Teilen eines Akkordsymbols kann
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn zehn oder weniger Pausentakte vorkommen, wird eine Reihe von Longa-
doctitlede = "Die Erscheinung von Pausentakten ändern"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Dans le cas où ce silence dure moins de dix mesures, LilyPond imprime sur
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "contexts-and-engravers, midi"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes"
"
doctitlees = "Cambiar los textos de partcombine"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn Stimmen automatisch kombiniert werden, kann der Text, der für
"
doctitlede = "Partcombine-Text ändern"
+
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Lorsque vous regroupez automatiquement des parties, vous pouvez
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Cambiar el texto y los estilos de objeto de extensión para las indicaciones dinámicas textuales"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Der Text, der für Crescendo und Decrescendo gestzt wird, kann geändert
und @code{'dotted-line}.
"
doctitlede = "Text und Strecker-Stile für Dynamik-Texte ändern"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Le texte par défaut des crescendos et decrescendos se change en
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.26
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
texidoc = "It is possible to change the default gap setting for
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, editorial-annotations"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Cambiar el símbolo de la marca de respiración"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Schriftzeichen für das Atemzeichen kann verändert werden, indem
"
doctitlede = "Das Atemzeichen-Symbol verändern"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
On peut choisir le glyphe imprimé par cette commande, en modifiant la
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.26
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Cambiar las posiciones de las alteraciones del bajo cifrado"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Versetzungszeichen und Pluszeichen können vor oder nach den Ziffern erscheinen,
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+The size and thickness of woodwind diagrams can be changed.
+"
+
+ doctitle = "Changing the size of woodwind diagrams"
+} % begin verbatim
+
+
+\relative c'' {
+ \textLengthOn
+ c1^\markup
+ \woodwind-diagram
+ #'piccolo
+ #'()
+
+ c^\markup
+ \override #'(size . 1.5) {
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+ c^\markup
+ \override #'(thickness . 0.15) {
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+}
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, midi"
doctitlees = "Cambiar el tempo sin indicación metronómica"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Um das Tempo für die MIDI-Ausgabe zu ändern, ohne eine Tempoangabe in den
"
doctitlede = "Das Tempo ohne Metronom-Angabe verändern"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Vous pouvez indiquer un changement de tempo pour le fichier MIDI sans
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.5
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Standardmäßig wird nur der Zähler des N-tolen-Bruchs über der Klammer
doctitlede = "Die Zahl der N-tole verändern"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
L'apparence du chiffre est déterminée par la propriété @code{text} dans
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, contexts-and-engravers"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Excepciones para los nombres de acorde"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{chordNameExceptions} kann benutzt werden, um eine
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Nombre de acorde maj7"
+
%% Translation of GIT committish: 134d9cb2e14ae624aec6fa2dd1630e284807dc42
texidocde = "
Das Aussehen des großen Septakkords kann mit @code{majorSevenSymbol} verändert werden.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
\paper {
ragged-right = ##f
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes, chords, keyboards"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, editorial-annotations"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes, text"
"
doctitlees = "Combinar dos partes sobre el mismo pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Funktion, die Stimmen kombiniert (also der @code{\\partcombine}-Befehl)
"
doctitlede = "Zwei Stimmen auf einem System kombinieren"
+
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
L'outil de combinaison de parties (la commande @code{\\partcombine})
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Glissando contemporáneo"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein modernes Glissando ohne eine Endnote kann gesetzt werden, indem
"
doctitlede = "Moderne Glissandi"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
De nos jours, il peut arriver que la note d'arrivée d'un glissando soit
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, chords, keyboards, fretted-strings"
doctitlees = "Controlar la colocación de las digitaciones de acordes"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Position von Fingersatzzahlen kann exakt kontrolliert werden.
"
doctitlede = "Position von Fingersatz in Akkorden kontrollieren"
+
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
"
doctitlees = "Controlar la ordenación vertical de las inscripciones"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die vertikale Anordnung von Beschriftungen wird mit der
"
doctitlede = "Die vertikale Anordnung von Beschriftungen kontrollieren"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les symboles s'ordonnent verticalement suivant la propriété
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
doctitlees = "Crear un grupeto de anticipación"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Einen Doppelschlag mit Vorhalt zu erstellen, wobei die untere Note das
"
doctitlede = "Einen Doppelschlag mit Vorhalt erstellen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Obtenir un @emph{grupetto} retardé et dans lequel la note la plus basse
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Crear arpegios entre notas de voces distintas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein Arpeggio kann zwischen Noten aus unterschidlichen Stimmen auf demselben
"
doctitlede = "Arpeggios zwischen unterschiedlichen Stimmen erzeugen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Affecter le graveur @code{Span_arpeggio_engraver} au contexte de la
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Crear arpegios que se cruzan entre pentagramas dentro de un sistema de piano"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Arpeggio über mehrere Systeme können in anderen Kontexten als dem
"
doctitlede = "Arpeggio über mehrere Systeme in anderen Kontexten"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Dans une double portée pour piano (@code{PianoStaff}), un arpège peut
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Creación de arpegios que se cruzan entre pentagramas dentro de otros contextos"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In einem Klaviersystem (@code{PianoStaff}) ist es möglich, ein Arpeggio
"
doctitlede = "Arpeggio zwischen Systemen in einem Klaviersystem erstellen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Il est possible de distribuer un arpège sur plusieurs portées d'un
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
"
doctitlees = "Crear indicaciones metronómicas en modo de marcado"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Neue Metronombezeichnungen können als Textbeschriftung erstellt werden,
"
doctitlede = "Eine Metronombezeichnung als Textbeschriftung erstellen"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Vous pouvez créer des indications de tempo sous la forme d'étiquettes
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, keyboards, unfretted-strings"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, keyboards"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
"
doctitlees = "Personalizar los diagramas de posiciones"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Eigenschaften von Bunddiagrammen können in
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
"
doctitlees = "Personalizar diagramas de posiciones de marcado"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Bunddiagramme können mit der Eigenschaft @code{'fret-diagram-details}
"
doctitlede = "Anpassung von Beschriftungs-Bunddiagrammen"
+
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations"
"
doctitlees = "Dirección predeterminada de las plicas sobre la tercera línea del pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Richtung von Hälsen auf der mittleren Linie kann mit der @code{Stem}-Eigenschaft
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.15
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings"
"
doctitlees = "Definición de posiciones predefinidas para otros instrumentos"
+
%% Translation of GIT committish: f23429bc5cfa9d141ef7b4509afc46c140308a1e
texidocde = "
Vordefinierte Bunddiagramme können für neue Instrumente hinzugefügt werden
"
doctitlede = "Eigene vordefinierte Bunddiagramme für andere Instrumente erstellen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "midi"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, paper-and-layout, titles"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
doctitlees = "Mostrar corchete o llave en grupos de un solo pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn nur ein System einer Systemgruppe vom Typ @code{ChoirStaff} oder
"
doctitlede = "Klammer anzeigen wenn nur ein System gesetzt wird"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Lorsque, dans des regoupements de type @code{ChoirStaff} ou
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "unfretted-strings, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, simultaneous-notes"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.8
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.20
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "contexts-and-engravers"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Überbindungen können manuell gesetzt werden, indem man die
doctitlede = "Bindebögen manuell setzen"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Il est possible de graver manuellement les liaisons de tenue, en
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, repeats"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{tupletSpannerDuration} bestimmt, wie lange jede
doctitlede = "Mehrere Triolen notieren aber nur einmal \\times benutzen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La propriété @code{tupletSpannerDuration} spécifie la longueur voulue de
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
setting-the-minimum-length-of-hairpins.ly
showing-the-same-articulation-above-and-below-a-note-or-chord.ly
snap-pizzicato-bartok-pizzicato.ly
+using-arpeggiobracket-to-make-divisi-more-visible.ly
using-double-slurs-for-legato-chords.ly
using-the-whiteout-property.ly
vertical-line-as-a-baroque-articulation-mark.ly
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
\paper {
ragged-right = ##f
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "winds"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings"
"
doctitlees = "Digitaciones - indicación del número de cuerda y digitaciones de mano derecha"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses Beispiel kombiniert Fingersatz für die linke Hand, Saitennummern
"
doctitlede = "Fingersatz Saitennummern und Fingersatz für die rechte Hand"
+
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Corchetes rectos y extremos de barra sueltos"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Gerade Fähnchen an einzelnen Noten und überstehende Balkenenden bei
doctitlede = "Gerade Fähnchen und überstehende Balkenenden"
+
%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033
texidocfr = "
En combinant @code{stemLeftBeamCount}, @code{stemRightBeamCount} et des
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "winds"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn es zu Zusammenstößen kommt, kann mit folgender Lösung eine andere
"
doctitlede = "Horizontale Verschiebung von Noten erzwingen"
+
%% Translation of GIT committish: 1baa2adf57c84e8d50e6907416eadb93e2e2eb5c
texidocfr = "
Quand LilyPond est dépassé, la propriété @code{force-hshift} de l'objet
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+In may cases, the keys other than the central column can be
+displayed by key name as well as by graphical means.
+"
+
+ doctitle = "Graphical and text woodwind diagrams"
+} % begin verbatim
+
+
+\relative c'' {
+ \textLengthOn
+ c1^\markup
+ \woodwind-diagram
+ #'piccolo
+ #'((cc . (one three))
+ (lh . (gis))
+ (rh . (ees)))
+
+ c^\markup
+ \override #'(graphical . #f) {
+ \woodwind-diagram
+ #'piccolo
+ #'((cc . (one three))
+ (lh . (gis))
+ (rh . (ees)))
+ }
+}
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations"
"
doctitlees = "Líneas de rejilla: modificar su aspecto"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Erscheinung der Gitternetzlinien kann durch einige Eigenschaften
"
doctitlede = "Gitternetzlinien: Aussehen verändern"
+
%% Translation of GIT committish: 9ccf7f0f5e52e074f3b7852416ad5b78718395c8
texidocfr = "
Modifier certaines des propriétés du cadrillage temporel aura pour effet
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, fretted-strings"
"
doctitlees = "Ritmos rasgueados de guitarra"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In Guitarrennotation kann neben Melodie, Akkordbezeichnungen und
doctitlede = "Schlagrhythmus für Guitarren"
+
%% Translation of GIT committish: 015b8e65e5e9a74cea1618b597402b5b74f89b89
texidocfr = "
En matière de notation pour guitare, il arrive que soient indiqués les
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, percussion"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.26
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
texidoc = "This shows how to hide accidentals on tied notes at the beginning of a
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Ocultar la línea de extensión de las expresiones textuales de dinámica"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dynamik-Texte (wie cresc. und dim.) werden mit einer gestrichelten Linie
"
doctitlede = "Crescendo-Linien von Dynamik-Texten unterdrücken"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les crescendos et decrescendos indiqués textuellement -- tels que
} % begin verbatim
\relative c'' {
- \override DynamicTextSpanner #'dash-period = #-1.0
+ \override DynamicTextSpanner #'style = #'none
\crescTextCresc
c1\< | d | b | c\!
}
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, vocal-music"
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
+\header {
+ lsrtags = "vocal-music, template"
+ texidoc = "
+This code shows one way of setting out a hymn tune when each line
+starts and ends with a partial measure. It also shows how to add
+the verses as stand-alone text under the music.
+
+"
+ doctitle = "Hymn template"
+} % begin verbatim
+
+
+Timeline = {
+ \time 4/4
+ \tempo 4=96
+ \partial 2
+ s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" \break
+ s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||"
+}
+
+SopranoMusic = \relative g' {
+ g4 g | g g g g | g g g g | g g g g | g2
+ g4 g | g g g g | g g g g | g g g g | g2
+}
+
+AltoMusic = \relative c' {
+ d4 d | d d d d | d d d d | d d d d | d2
+ d4 d | d d d d | d d d d | d d d d | d2
+}
+
+TenorMusic = \relative a {
+ b4 b | b b b b | b b b b | b b b b | b2
+ b4 b | b b b b | b b b b | b b b b | b2
+}
+
+BassMusic = \relative g {
+ g4 g | g g g g | g g g g | g g g g | g2
+ g4 g | g g g g | g g g g | g g g g | g2
+}
+
+global = {
+ \key g \major
+}
+
+\score { % Start score
+ <<
+ \new PianoStaff << % Start pianostaff
+ \new Staff << % Start Staff = RH
+ \global
+ \clef "treble"
+ \new Voice = "Soprano" << % Start Voice = "Soprano"
+ \Timeline
+ \voiceOne
+ \SopranoMusic
+ >> % End Voice = "Soprano"
+ \new Voice = "Alto" << % Start Voice = "Alto"
+ \Timeline
+ \voiceTwo
+ \AltoMusic
+ >> % End Voice = "Alto"
+ >> % End Staff = RH
+ \new Staff << % Start Staff = LH
+ \global
+ \clef "bass"
+ \new Voice = "Tenor" << % Start Voice = "Tenor"
+ \Timeline
+ \voiceOne
+ \TenorMusic
+ >> % End Voice = "Tenor"
+ \new Voice = "Bass" << % Start Voice = "Bass"
+ \Timeline
+ \voiceTwo
+ \BassMusic
+ >> % End Voice = "Bass"
+ >> % End Staff = LH
+ >> % End pianostaff
+ >>
+} % End score
+
+\markup {
+ \fill-line {
+ ""
+ {
+ \column {
+ \left-align {
+ "This is line one of the first verse"
+ "This is line two of the same"
+ "And here's line three of the first verse"
+ "And the last line of the same"
+ }
+ }
+ }
+ ""
+ }
+}
+
+\paper { % Start paper block
+ indent = 0 % don't indent first system
+ line-width = 130 % shorten line length to suit music
+} % End paper block
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards"
"
doctitlees = "Indicar acordes de pentagrama cruzado con corchetes de arpegio"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Eine Arpeggioklammer kann anzeigen, dass Noten auf zwei unterschiedlichen
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
"
doctitlees = "Insertar una cesura"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zäsurzeichen können erstellt werden, indem die @code{'text}-Eigenschaft
Zäsurzeichen ist auch möglich.
"
doctitlede = "Eine Zäsur einfügen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Une surcharge de la propriété @code{'text} de l'objet
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats"
"
doctitlees = "Símbolos de porcentaje sueltos"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Isolierte Prozentwiederholungen können auch ausgegeben werden. Das wird
"
doctitlede = "Isolierte Prozentwiederholungen"
+
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Des symboles de pourcentage isolés peuvent aussi être obtenus, au
texidoc = "
-Isolated percents can also be printed. This is done by entering a
-multi-measure rest with a different print function:
+Isolated percents can also be printed.
"
doctitle = "Isolated percent repeats"
} % begin verbatim
+makePercent =
+#(define-music-function (parser location note) (ly:music?)
+ "Make a percent repeat the same length as NOTE."
+ (make-music 'PercentEvent
+ 'length (ly:music-length note)))
+
\relative c'' {
- \override MultiMeasureRest #'stencil
- = #ly:multi-measure-rest::percent
- \override MultiMeasureRest #'thickness = #0.48
- R1
+ \makePercent s1
}
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards, percussion, fretted-strings, template"
"
doctitlees = "Plantilla para combo de jazz"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Hier ist ein ziemlich kompliziertes Beispiel für ein Jazz-Ensemble. Achtung:
"
doctitlede = "Vorlage für Jazz-Combo"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Bien que compliqué de prime abord, voici un canevas tout à fait indiqué
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, keyboards, fretted-strings"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, vocal-music"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, editorial-annotations"
"
doctitlees = "Hacer unas líneas del pentagrama más gruesas que las otras"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Für den pädagogischen Einsatz kann eine Linie des Notensystems dicker
"
doctitlede = "Eine Linie des Notensystems dicker als die anderen machen"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Vous pourriez avoir envie, dans un but pédagogique, de rendre certaines
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, staff-notation, editorial-annotations"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides"
doctitlees = "Disposición Mensurstriche (líneas divisorias entre pentagramas)"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Mensurstiche-Layout, in welchem die Taktlinien nicht auf den Systemen,
"
doctitlede = "Mensurstriche-Layout (Taktstriche zwischen den Systemen"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
En musique mensurale, les barres de mesure ne traversent pas les
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Modificar los valores predeterminados para la notación abreviada de las articulaciones"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Abkürzungen sind in der Datei @samp{ly/script-init.ly} definiert, wo
"
doctitlede = "Die Standardwerte der Abkürzungen von Artikulationen verändern"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Les raccourcis sont répertoriés dans le fichier
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, text"
doctitlees = "Marcado de silencios multicompás"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "Textbeschriftungen, die an Mehrtaktpausen gehängt wird,
wird über oder unter der Pause zentriert. Lange Beschriftungen
doctitlede = "Textbeschriftung und Mehrtaktpausen"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Lorsque du texte est attaché à un silence multi-mesures, il sera centré
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides"
"
doctitlees = "Anidado de grupos de pentagramas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Eigenschaft @code{systemStartDelimiterHierarchy} kann eingesetzt
"
doctitlede = "Systeme schachteln"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
La propriété @code{systemStartDelimiterHierarchy} permet de créer des
--- /dev/null
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+The size and thickness of woodwind diagrams can be changed.
+"
+
+ doctitle = "Changing the size of woodwind diagrams"
+}
+
+\relative c'' {
+ \textLengthOn
+ c1^\markup
+ \woodwind-diagram
+ #'piccolo
+ #'()
+
+ c^\markup
+ \override #'(size . 1.5) {
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+ c^\markup
+ \override #'(thickness . 0.15) {
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+}
--- /dev/null
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+In may cases, the keys other than the central column can be
+displayed by key name as well as by graphical means.
+"
+
+ doctitle = "Graphical and text woodwind diagrams"
+}
+
+\relative c'' {
+ \textLengthOn
+ c1^\markup
+ \woodwind-diagram
+ #'piccolo
+ #'((cc . (one three))
+ (lh . (gis))
+ (rh . (ees)))
+
+ c^\markup
+ \override #'(graphical . #f) {
+ \woodwind-diagram
+ #'piccolo
+ #'((cc . (one three))
+ (lh . (gis))
+ (rh . (ees)))
+ }
+}
--- /dev/null
+\version "2.13.31"
+\header {
+ lsrtags = "vocal-music, template"
+ texidoc = "
+This code shows one way of setting out a hymn tune when each line
+starts and ends with a partial measure. It also shows how to add
+the verses as stand-alone text under the music.
+
+"
+ doctitle = "Hymn template"
+}
+
+Timeline = {
+ \time 4/4
+ \tempo 4=96
+ \partial 2
+ s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||" \break
+ s2 | s1 | s2 \breathe s2 | s1 | s2 \bar "||"
+}
+
+SopranoMusic = \relative g' {
+ g4 g | g g g g | g g g g | g g g g | g2
+ g4 g | g g g g | g g g g | g g g g | g2
+}
+
+AltoMusic = \relative c' {
+ d4 d | d d d d | d d d d | d d d d | d2
+ d4 d | d d d d | d d d d | d d d d | d2
+}
+
+TenorMusic = \relative a {
+ b4 b | b b b b | b b b b | b b b b | b2
+ b4 b | b b b b | b b b b | b b b b | b2
+}
+
+BassMusic = \relative g {
+ g4 g | g g g g | g g g g | g g g g | g2
+ g4 g | g g g g | g g g g | g g g g | g2
+}
+
+global = {
+ \key g \major
+}
+
+\score { % Start score
+ <<
+ \new PianoStaff << % Start pianostaff
+ \new Staff << % Start Staff = RH
+ \global
+ \clef "treble"
+ \new Voice = "Soprano" << % Start Voice = "Soprano"
+ \Timeline
+ \voiceOne
+ \SopranoMusic
+ >> % End Voice = "Soprano"
+ \new Voice = "Alto" << % Start Voice = "Alto"
+ \Timeline
+ \voiceTwo
+ \AltoMusic
+ >> % End Voice = "Alto"
+ >> % End Staff = RH
+ \new Staff << % Start Staff = LH
+ \global
+ \clef "bass"
+ \new Voice = "Tenor" << % Start Voice = "Tenor"
+ \Timeline
+ \voiceOne
+ \TenorMusic
+ >> % End Voice = "Tenor"
+ \new Voice = "Bass" << % Start Voice = "Bass"
+ \Timeline
+ \voiceTwo
+ \BassMusic
+ >> % End Voice = "Bass"
+ >> % End Staff = LH
+ >> % End pianostaff
+ >>
+} % End score
+
+\markup {
+ \fill-line {
+ ""
+ {
+ \column {
+ \left-align {
+ "This is line one of the first verse"
+ "This is line two of the same"
+ "And here's line three of the first verse"
+ "And the last line of the same"
+ }
+ }
+ }
+ ""
+ }
+}
+
+\paper { % Start paper block
+ indent = 0 % don't indent first system
+ line-width = 130 % shorten line length to suit music
+} % End paper block
--- /dev/null
+\version "2.13.31"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+The function of @code{@bs{}autoBeamOff} when used with
+@code{@bs{}partcombine} can be difficult to understand. It may
+be preferable to use
+
+@example
+\set Staff.autobeaming = ##f
+@end example
+
+@noindent
+instead, to ensure that autobeaming will be turned off for the entire
+staff.
+
+@code{\partcombine} apparently works with 3 voices -- stem up single,
+stem down single, stem up combined.
+
+An @code{\autoBeamOff} call in the first argument to partcombine will
+apply to the voice that is active at the time the call is processed,
+either stem up single or stem up combined.
+An @code{\autoBeamOff} call in the second argument will apply to the
+voice that is stem down single.
+
+In order to use @code{\autoBeamOff} to stop all autobeaming when used
+with @code{\partcombine},
+it will be necessary to use @emph{three} calls to @code{\autoBeamOff}.
+
+"
+doctitle = "Partcombine and autoBeamOff"
+}
+
+{
+ %\set Staff.autoBeaming = ##f % turns off all autobeaming
+ \partcombine
+ {
+ \autoBeamOff % applies to split up stems
+ \repeat unfold 4 a'16
+ %\autoBeamOff % applies to combined up stems
+ \repeat unfold 4 a'8
+ \repeat unfold 4 a'16
+ }
+ {
+ \autoBeamOff % applies to down stems
+ \repeat unfold 4 f'8
+ \repeat unfold 8 f'16 |
+ }
+}
+
--- /dev/null
+\version "2.13.31"
+
+\header {
+ lsrtags = "vocal-music, template"
+ texidoc = "
+Here is a standard four-part SATB vocal score. With larger ensembles,
+it is often useful to include a section which is included in all parts.
+For example, the time signature and key signature are almost always the
+same for all parts. Like in the @qq{Hymn} template, the four voices are
+regrouped on only two staves.
+
+"
+ doctitle = "Vocal ensemble template"
+} % begin verbatim
+
+global = {
+ \key c \major
+ \time 4/4
+}
+
+sopMusic = \relative c'' {
+ c4 c c8[( b)] c4
+}
+sopWords = \lyricmode {
+ hi hi hi hi
+}
+
+altoMusic = \relative c' {
+ e4 f d e
+}
+altoWords = \lyricmode {
+ ha ha ha ha
+}
+
+tenorMusic = \relative c' {
+ g4 a f g
+}
+tenorWords = \lyricmode {
+ hu hu hu hu
+}
+
+bassMusic = \relative c {
+ c4 c g c
+}
+bassWords = \lyricmode {
+ ho ho ho ho
+}
+
+\score {
+ \new ChoirStaff <<
+ \new Lyrics = "sopranos"
+ \new Staff = "women" <<
+ \new Voice = "sopranos" {
+ \voiceOne
+ << \global \sopMusic >>
+ }
+ \new Voice = "altos" {
+ \voiceTwo
+ << \global \altoMusic >>
+ }
+ >>
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors"
+ \new Staff = "men" <<
+ \clef bass
+ \new Voice = "tenors" {
+ \voiceOne
+ << \global \tenorMusic >>
+ }
+ \new Voice = "basses" {
+ \voiceTwo << \global \bassMusic >>
+ }
+ >>
+ \new Lyrics = "basses"
+ \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
+ \context Lyrics = "altos" \lyricsto "altos" \altoWords
+ \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
+ \context Lyrics = "basses" \lyricsto "basses" \bassWords
+ >>
+}
+
--- /dev/null
+\version "2.13.24"
+
+\header {
+ lsrtags = "winds"
+
+ texidoc="
+The snippet below produces a list of all possible keys and key
+settings for woodwind diagrams as defined in
+@file{scm/define-woodwind-diagrams.scm}. The list will be displayed
+on the console and in the log file, but not in the music.
+"
+ doctitle = "Woodwind diagrams key lists"
+}
+
+#(print-keys-verbose 'piccolo)
+#(print-keys-verbose 'flute)
+#(print-keys-verbose 'flute-b-extension)
+#(print-keys-verbose 'oboe)
+#(print-keys-verbose 'clarinet)
+#(print-keys-verbose 'bass-clarinet)
+#(print-keys-verbose 'low-bass-clarinet)
+#(print-keys-verbose 'saxophone)
+#(print-keys-verbose 'baritone-saxophone)
+#(print-keys-verbose 'bassoon)
+#(print-keys-verbose 'contrabassoon)
--- /dev/null
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+The following music shows all of the woodwind diagrams currently
+defined in LilyPond.
+"
+ doctitle = "Woodwind diagrams listing"
+
+}
+
+\relative c' {
+ \textLengthOn
+ c1^
+ \markup {
+ \center-column {
+ 'piccolo
+ " "
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+ }
+
+ c1^
+ \markup {
+ \center-column {
+ 'flute
+ " "
+ \woodwind-diagram
+ #'flute
+ #'()
+ }
+ }
+ c1^\markup {
+ \center-column {
+ 'oboe
+ " "
+ \woodwind-diagram
+ #'oboe
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'clarinet
+ " "
+ \woodwind-diagram
+ #'clarinet
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'bass-clarinet
+ " "
+ \woodwind-diagram
+ #'bass-clarinet
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'saxophone
+ " "
+ \woodwind-diagram
+ #'saxophone
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'bassoon
+ " "
+ \woodwind-diagram
+ #'bassoon
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'contrabassoon
+ " "
+ \woodwind-diagram
+ #'contrabassoon
+ #'()
+ }
+ }
+}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.1
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.0
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.11
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "template"
"
doctitlees = "Plantilla de orquesta con coro y piano"
+
+%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b
+
+ texidocde = "
+Diese Vorlage zeigt die Benutzung von geschachtelten
+@code{StaffGroup}- und @code{GrandStaff}-Kontexte, um
+Instrumente in Untergruppen zu unterteilen, und die
+Benutzung von @code{\\transpose} für transponierende
+Instrumente. Alle Noten werden in C geschrieben. Noten
+können in C eingegeben werden, oder auch in der Tonart
+des Instrumentes: dann müssen sie zuerst nach C transponiert
+werden, bevor sie einer Variable zugewiesen werden.
+
+"
+ doctitlede = "Orchester Chor und Klavier"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas illustre l'utilisation de contextes @code{StaffGroup} pour
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, text"
doctitlees = "Texto de octava alta y baja"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Intern setzt die @code{set-octavation}-Funktion die Eigenschaften
"
doctitlede = "Ottava-Text"
+
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
En interne, la fonction @code{\\ottava} détermine les
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, titles"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "spacing"
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+The function of @code{@bs{}autoBeamOff} when used with
+@code{@bs{}partcombine} can be difficult to understand. It may
+be preferable to use
+
+@example
+\set Staff.autobeaming = ##f
+@end example
+
+@noindent
+instead, to ensure that autobeaming will be turned off for the entire
+staff.
+
+@code{\partcombine} apparently works with 3 voices -- stem up single,
+stem down single, stem up combined.
+
+An @code{\autoBeamOff} call in the first argument to partcombine will
+apply to the voice that is active at the time the call is processed,
+either stem up single or stem up combined.
+An @code{\autoBeamOff} call in the second argument will apply to the
+voice that is stem down single.
+
+In order to use @code{\autoBeamOff} to stop all autobeaming when used
+with @code{\partcombine},
+it will be necessary to use @emph{three} calls to @code{\autoBeamOff}.
+
+"
+doctitle = "Partcombine and autoBeamOff"
+} % begin verbatim
+
+
+{
+ %\set Staff.autoBeaming = ##f % turns off all autobeaming
+ \partcombine
+ {
+ \autoBeamOff % applies to split up stems
+ \repeat unfold 4 a'16
+ %\autoBeamOff % applies to combined up stems
+ \repeat unfold 4 a'8
+ \repeat unfold 4 a'16
+ }
+ {
+ \autoBeamOff % applies to down stems
+ \repeat unfold 4 f'8
+ \repeat unfold 8 f'16 |
+ }
+}
+
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, tweaks-and-overrides"
"
doctitlees = "Visibilidad del contador de repeticiones de tipo porcentaje"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Prozentwiederholungszähler können in regelmäßigen Intervallen angezeigt
werden, indem man die Eigenschaft @code{repeatCountVisibility} beeinflusst.
"
doctitlede = "Sichtbarkeit von Prozent-Wiederholungen"
+
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Le numéro de mesure répétée sera imprimé à intervalle régulier si vous
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats"
"
doctitlees = "Percent repeat counter"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ganztaktwiederholungen mit mehr als zwei Wiederholungen erhalten einen
"
doctitlede = "Prozent-Wiederholungen zählen"
+
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Les répétitions de plus de 2 mesures sont surmontées d'un compteur,
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "percussion"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses künstliche Beispiel zeigt, wie sowohl automatische als auch
doctitlede = "Zeilenumbrüche bei N-tolen mit Balken erlauben"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Cet exemple peu académique démontre comment il est possible d'insérer un saut
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "keyboards, template"
"
doctitlees = "Plantilla de piano (sencilla)"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Hier ein einfaches Klaviersystem.
"
doctitlede = "Vorlage für einfache Klaviernotation"
+
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Voici une simple partition pour piano avec quelques notes.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, keyboards, template"
"
doctitlees = "Plantilla de piano con letra centrada"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
旋律と歌詞のための譜表を持つ代わりに、歌詞をピアノ譜の 2 つの譜の間に置くことができます。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Anstatt ein eigenes System für Melodie und Text zu schreiben, können
(und damit das zusätzliche System für die Gesangstimme auslassen).
"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Lorsque la mélodie est doublée au piano, cela ne nécessite pas forcément
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, keyboards, template"
"
doctitlees = "Plantilla de piano con melodía y letra"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは一般的な歌曲のフォーマットです: 旋律と歌詞を持つ譜表と、その下にピアノ伴奏譜があります。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das nächste Beispiel ist typisch für ein Lied: Im oberen System die
doctitlede = "Vorlage für Klavier und Gesangsstimme"
+
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Il s'agit du format classique pour le chant : une portée pour la mélodie
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings"
"
doctitlees = "Posicionamiento de digitaciones de mano derecha"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Man kann die Positionierung von Fingersatz der rechten Hand besser
"
doctitlede = "Positionierung von Fingersatz der rechten Hand"
+
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "fretted-strings"
"
doctitlees = "Polifonía en tablaturas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Polyphonie kann in einer Tabulatur (@code{TabStaff}) genauso wie in einem
"
doctitlede = "Polyphonie in einer Tabulatur"
+
%% Translation of GIT committish: ac6297e4fa174ac5759cc450ad085c2fac9ba00b
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Posicionamiento de las notas de adorno con espacio flotante"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn man die Eigenschaft @code{'strict-grace-spacing} aktiviert,
doctitlede = "Positionierung von Verzierungen mit verschiebbarem Platz"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Lorsque vous activez la propriété @code{'strict-grace-spacing},
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
ve a continuación:
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Anders als bei normalen Pausen gibt es keinen direkten Befehl, um die
doctitlede = "Positionierung von Ganztaktpausen"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Si l'on peut positionner verticalement un silence simple en le
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, breaks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
"
doctitlees = "Situar los elementos de marcado de texto por dentro de las ligaduras"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Textbeschriftung kann innerhalb von Bögen gesetzt werden, wenn die
"
doctitlede = "Textbeschriftung innerhalb von Bögen positionieren"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Lorsqu'il vous faut inscrire une annotation à l'intérieur d'une liaison,
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Verhindern, dass zusätzliche Auflösungszeichen automatisch
hinzugefügt werden"
soll. Um dieses Verhalten zu ändern, muss die Eigenschaft
@code{extraNatural} im @code{Staff}-Kontext auf \"false\" gesetzt werden.
"
+
%% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
texidocfr = "
En accord avec les règles standards de l'écriture musicale, on grave
--- /dev/null
+%% Do not edit this file; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.13.31"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+The addition of a final @code{mark} can result in the loss of a final
+tuplet marking. This can be overcome by setting @code{TupletBracket
+#'full-length-to-extent} to @code{false}.
+
+"
+ doctitle = "Preventing final mark from removing final tuplet"
+} % begin verbatim
+
+\new Staff {
+ \set tupletFullLength = ##t
+ \time 1/8
+ \times 2/3 { c'16 c'16 c'16 }
+ \times 2/3 { c'16 c'16 c'16 }
+ \times 2/3 { c'16 c'16 c'16 }
+ \override Score.RehearsalMark #'break-visibility = ##(#t #t #t)
+ \override Score.RehearsalMark #'direction = #down
+ \override Score.RehearsalMark #'break-align-symbol = #'clef
+ \override Score.RehearsalMark #'self-alignment-X = #right
+ \mark "Composed Feb 2007 - Feb 2008"
+}
+
+\new Staff {
+ \set tupletFullLength = ##t
+
+ \override TupletBracket #'full-length-to-extent = ##f
+
+ \time 1/8
+ \times 2/3 { c'16 c'16 c'16 }
+ \times 2/3 { c'16 c'16 c'16 }
+ \times 2/3 { c'16 c'16 c'16 }
+ \override Score.RehearsalMark #'break-visibility = ##(#t #t #t)
+ \override Score.RehearsalMark #'direction = #down
+ \override Score.RehearsalMark #'break-align-symbol = #'clef
+ \override Score.RehearsalMark #'self-alignment-X = #right
+ \mark "Composed Feb 2007 - Feb 2008"
+}
+
+
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Auflösungzeichen nicht setzen wenn die Tonart wechselt"
verhindert werden, indem die @code{printKeyCancellation}-Eigenschaft
im @code{Staff}-Kontext auf \"false\" gesetzt wird.
"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Après un changement de tonalité, un bécarre est imprimé pour annuler
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, tweaks-and-overrides"
"
doctitlees = "Imprimir puntos de repetición al prinicpio de la pieza"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein @code{|:}-Taktstrich kann auch zu Beginn eines Stückes ausgegeben werden, indem
"
doctitlede = "Ein Wiederholungszeichen zu Beginn eines Stückes ausgeben"
+
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Bien qu'allant à l'encontre des usages en matière de gravure, vous
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Imprimir números de compás a intervalos regulares"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können in regelmäßigen Intervallen gesetzt werden, indem
doctitlede = "Setzen der Taktnummern in regelmäßigen Intevallen"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Vous pouvez imprimer un numéro de mesure à intervalle régulier plutôt
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitlees = "Imprimir números de compás dentro de rectángulos o circunferencias"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können auch in Boxen oder Kreisen gesetzt werden.
doctitlede = "Setzen von Taktnummern in Kästen oder Kreisen"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Les numéros de mesures peuvent être encadrés ou entourés d'un cercle.
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Impresión de reguladores utilizando la notación «al niente»"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Crescendo-Klammern können mit einem kleinen Kreis vor der Spitze
"
doctitlede = "Crescendo Klammern al niente schreiben"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Des crescendos ou decrescendos @emph{al niente} peuvent être indiqués de
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
"
doctitlees = "Imprimir marcas en cualquier pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden Textzeichen nur über dem obersten Notensystem gesetzt. Sie
"
doctitlede = "Zeichen über jedem System ausgeben"
+
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
Bien que ces indications textuelles ne soient habituellement imprimées
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, expressive-marks, staff-notation, tweaks-and-overrides"
doctitlees = "Impresión de indicaciones metronómicas y letras de ensayo debajo del pentagrama"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Normalerweise werden Metronom- und Übungszeichen über dem Notensystem ausgegeben.
"
doctitlede = "Metronom- und Übungszeichen unter das System setzen"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Les indications de tempo et les marques de repère s'impriment par défaut
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, percussion"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, text, world-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Imprimir el número de compás en el primer compás"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Standardmäßig wird die erste Taktzahl einer Paritur nicht gesetzt,
doctitlede = "Setzen der Taktnummer für den ersten Takt"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Par défaut, LilyPond n'affiche pas le premier numéro de mesure s'il est
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides, spacing"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, staff-notation"
doctitlees = "Citar otra voz con transposición"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Zitate berücksichtigen sowohl die Transposition der Quelle als auch
"
doctitlede = "Eine Stimme mit Transposition zitieren"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Les citations tiennent compte de la transposition, aussi bien celle de
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
"
doctitlees = "Citar otra voz"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die @code{quotedEventTypes}-Eigenschaft bestimmt die
"
doctitlede = "Eine andere Stimme zitieren"
+
%% Translation of GIT committish: 99dc90bbc369722cf4d3bb9f30b7288762f2167f6
texidocfr = "
Les types d'événement pris en charge pour la citation peuvent se régler
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "winds"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Redefinición de los valores globales predeterminados para notas de adorno"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die globalen Standardeinstellungen für Verzierungsnoten werden in
doctitlede = "Globale Umdefinition von Verzierungsnoten"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Vous pouvez modifier les valeurs des variables @code{startGraceMusic},
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, contexts-and-engravers"
doctitlees = "Suprimir los números de compás de toda la partitura"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Taktnummern können vollkommen aus den Noten entfernt werden, indem
doctitlede = "Entfernung von Taktnummern in einer Partitur"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Désactiver le graveur concerné --- @code{Bar_number_engraver} ---
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, tweaks-and-overrides, breaks"
"
doctitlees = "Quitar la primera línea vacía"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein leeres Notensystem kann auch aus der ersten Zeile einer Partitur
"
doctitlede = "Die erste leere Notenzeile auch entfernen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Par défaut, le premier système comportera absolument toutes les portées.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, ancient-notation, tweaks-and-overrides"
texidoces = "
Los silencios se pueden imprimir en distintos estilos.
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Pausenstile"
"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Les silences peuvent être gravés selon différents styles.
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
moving-dotted-notes-in-polyphony.ly
multi-measure-rest-markup.ly
non-default-tuplet-numbers.ly
+partcombine-and-autobeamoff.ly
permitting-line-breaks-within-beamed-tuplets.ly
positioning-grace-note-beams-at-the-height-of-normal-note-beams.ly
positioning-grace-notes-with-floating-space.ly
positioning-multi-measure-rests.ly
+preventing-final-mark-from-removing-final-tuplet.ly
printing-bar-numbers-at-regular-intervals.ly
printing-bar-numbers-inside-boxes-or-circles.ly
printing-metronome-and-rehearsal-marks-below-the-staff.ly
--- /dev/null
+%% Do not edit this file; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.13.31"
+
+\header {
+ lsrtags = "vocal-music, template"
+
+ texidoc = "
+SATB choir template (four staves)
+
+"
+ doctitle = "SATB Choir template - four staves"
+} % begin verbatim
+
+global = {
+ \key c \major
+ \time 4/4
+}
+sopranonotes = \relative c'' {c2 d2}
+sopranowords = \lyricmode { do do }
+altonotes = \relative c'' {c2 d2}
+altowords = \lyricmode { re re }
+tenornotes = {
+ \clef "G_8" c2 d2}
+tenorwords = \lyricmode { mi mi }
+bassnotes = {
+ \clef bass c2 d2}
+basswords = \lyricmode { mi mi }
+
+\score{
+ \context ChoirStaff
+ <<
+ \context Staff = soprano <<
+ \context Voice = sop { << \global \sopranonotes >> }
+ \lyricsto "sop" \new Lyrics \sopranowords
+ >>
+ \context Staff = alto <<
+ \context Voice = alt { << \global \altonotes >> }
+ \lyricsto "alt" \new Lyrics \altowords
+ >>
+ \context Staff = tenor <<
+ \context Voice = ten { << \global \tenornotes >> }
+ \lyricsto "ten" \new Lyrics \tenorwords
+ >>
+ \context Staff = bass <<
+ \context Voice = bas { << \global \bassnotes >> }
+ \lyricsto "bas" \new Lyrics \basswords
+ >>
+ >>
+}
+
+
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "template"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "headwords"
texidoc = "Random complex notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
"
doctitlees = "Establecer el comportamiento de los reguladores en las barras de compás"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn die Note, an welcher eine Crescendo-Klammer endet, die erste Note
@code{'to-barline} geändert werden:
"
doctitlede = "Das Verhalten von Crescendo-Klammern an Taktlinien beeinflussen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
En principe, un soufflet -- (de)crescendo imprimé sous forme graphique --
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides, paper-and-layout"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.26
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 158658dc75b6f6553e77ff53119ac802eb91f50c
texidocfr = "LilyPond dispose de trois styles de barre différents
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Ajustar la longitud mínima de los reguladores"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wenn Crescendo-Klammern zu kurz sind, können sie verlängert werden, indem
"
doctitlede = "Die Mindestlänge von Crescendo-Klammern bestimmen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Si un soufflet est trop court, il suffit d'ajuster la propriété
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats"
"
doctitlees = "Shortening volta brackets"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Volta-Klammern werden normalerweise über alle Noten der Klammer gezogen, aber
"
doctitlede = "Volta-Klammern verkürzen"
+
%% Translation of GIT committish: a5bde6d51a5c88e952d95ae36c61a5efc22ba441
texidocfr = "
Les crochets indiquant les fins alternatives s'étalent tout au long ce
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Imprimir los acordes cuando se produce un cambio"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Akkordsymbole können so eingestellt werden, dass sie nur zu Beginn der Zeile
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.27
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords"
"
doctitlees = "Hoja guía de acordes o «lead sheet» sencilla"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Ein Liedblatt besteht aus Akkordbezeichnungen, einer Melodie und dem Liedtext:
"
doctitlede = "Ein einfaches Liedblatt"
+
%% Translation of GIT committish: 9594a4569164407a146bbc4aad8be3a60a4725cf
texidocfr = "
Assembler des noms d'accords, une mélodie et des paroles permet
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, chords, template"
"
doctitlees = "Plantilla de pentagrama único con música letra y acordes"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは旋律、単語、コードを持つ歌曲の楽譜のためのテンプレートです。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Mit diesem Beispiel können Sie einen Song mit Melodie,
doctitlede = "Vorlage für eine Notenzeile mit Noten Text und Akkorden"
+
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Ce cannevas comporte tous les éléments d'une chanson : la mélodie,
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, chords, template"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords, template"
doctitlees = "Plantilla de pentagrama único con música y acordes"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
旋律とコードを持つリード譜を欲しくはありませんか?他を見る必要はありません!
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Wollen Sie ein Liedblatt mit Melodie und Akkorden schreiben? Hier ist
doctitlede = "Vorlage für eine Notenzeile mit Akkorden"
+
%% Translation of GIT committish: ceb0afe7d4d0bdb3d17b9d0bff7936bb2a424d16
texidocfr = "
Vous avez besoin de la partition d'une mélodie avec les accords ?
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, template"
"
doctitlees = "Plantilla de pentagrama único don notas y letra"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
この小さなテンプレートは歌詞を持つ簡単な旋律を表しています。カット&ペーストして、音符@c
行を変更するか、コメント アウトしてください。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das nächste Beispiel zeigt eine einfache Melodie mit Text. Kopieren
doctitlede = "Vorlage für ein Notensystem mit Noten und Gesangstext"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "template"
"
doctitlees = "Plantilla de un solo pentagrama con notas únicamente"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは音符を持つ譜表を提供するとても簡単なテンプレートであり、ソロの楽器や旋律に適しています。@c
これをファイルにカット&ペーストして、音符を付け加えれば完了です!
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das erste Beispiel zeigt ein Notensystem mit Noten, passend für ein
doctitlede = "Vorlage für ein Notensystem"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Cet exemple simpliste se compose d'une portée agrémentée de quelques
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, vocal-music"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "catalan.ly"
#(set-global-staff-size 15)
\paper{
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
"
doctitlees = "Elemento de marcado de texto independiente en dos columnas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Isolierter Text kann in mehreren Spalten mit @code{\\markup}-Befehlen
"
doctitlede = "Isolierter Text in zwei Spalten"
+
%% Translation of GIT committish: 548ef200973bd3d46ea75c5498461d9e5f168334
texidocfr = "
L'utilisation de la commande @code{\\markup} permet de distribuer un bloc
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.4
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, text, fretted-strings, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "unfretted-strings, template"
"
doctitlees = "Plantilla de cuarteto de cuerda (sencilla)"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
これは簡単な弦楽四重奏のためのテンプレートです。これは拍子記号と調号のために
@code{@bs{}global} セクションを使っています。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieses Beispiel demonstriert die Partitur für ein Streichquartett. Hier
doctitlede = "Vorlage für Streichquartett (einfach)"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Voici un canevas pour quatuor à cordes. Notez l'utilisation de la
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "unfretted-strings, template"
"
doctitlees = "Plantilla de cuarteto de cuerda con particellas independientes"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
\"弦楽四重奏テンプレート\" は適切な弦楽四重奏の楽譜を作り出しますが、個々の@c
別々のファイルに分ける場合は、指定されたコメントを外すことを忘れないでください!
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Mit diesem Beispiel können Sie ein schönes Streichquartett notieren,
doctitlede = "Vorlage für Streichquartett mit einzelnen Stimmen"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Grâce à ce canevas, vous pouvez obtenir une partition d'excellente
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.29
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 190a067275167c6dc9dd0afef683d14d392b7033
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "paper-and-layout"
ancient-notation-template----modern-transcription-of-gregorian-music.ly
ancient-notation-template----modern-transcription-of-mensural-music.ly
+hymn-template.ly
jazz-combo-template.ly
orchestra,-choir-and-piano-template.ly
piano-template-simple.ly
piano-template-with-centered-dynamics.ly
piano-template-with-centered-lyrics.ly
piano-template-with-melody-and-lyrics.ly
+satb-choir-template---four-staves.ly
score-for-diatonic-accordion.ly
single-staff-template-with-notes,-lyrics,-and-chords.ly
single-staff-template-with-notes,-lyrics,-chords-and-frets.ly
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
\include "english.ly"
#(set-global-staff-size 15)
\paper {
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
Variante gewählt.
"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Cet exemple, grâce à un peu de code Scheme, donne la priorité aux
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
las claves y las notas, pero no lo hacen en la segunda línea.
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
doctitlede = "Eigenschaften des Schlüssels optimieren"
texidocde = "
Änderungen die ursprüngliche relative Positionierung von Schlüssel und
Noten, auf der zweiten Zeile nicht.
"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
La commande @code{\\clef \"treble_8\"} équivaut à définir @code{clefGlyph},
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitlees = "Trucar la disposición de las notas de adorno dentro de la música"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Das Layout von Verzierungsausdrücken kann in der Musik verändert
doctitlede = "Veränderung des Layouts von Verzierungen innerhalb der Noten"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Il est possible de changer globalement la mise en forme des petites
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
%%%
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "staff-notation, contexts-and-engravers"
"
doctitlees = "Uso del corchete recto al comienzo de un grupo de pentagramas"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Die Klammer zu Beginn von Systemgruppen kann auch in eine eckige Klammer
"
doctitlede = "Eine eckige Klammer zu Beginn von Systemgruppen benutzen"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Un regroupement de portées sera indiqué par un simple rectangle
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
--- /dev/null
+%% Do not edit this file; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% This file is in the public domain.
+\version "2.13.31"
+
+\header {
+ lsrtags = "expressive-marks, vocal-music"
+
+ texidoc = "
+The @code{arpeggioBracket} can be used to indicate the division of
+voices where there are no stems to provide the information. This is
+often seen in choral music.
+
+"
+ doctitle = "Using arpeggioBracket to make divisi more visible"
+} % begin verbatim
+
+\include "english.ly"
+
+\score {
+ \relative c'' {
+ \key a \major
+ \time 2/2
+ <<
+ \new Voice = "upper"
+ <<
+ { \voiceOne \arpeggioBracket
+ a2( b2
+ <b d>1\arpeggio)
+ <cs e>\arpeggio ~
+ <cs e>4
+ }
+ \addlyrics { \lyricmode { A -- men. } }
+ >>
+ \new Voice = "lower"
+ { \voiceTwo
+ a1 ~
+ a
+ a ~
+ a4 \bar "|."
+ }
+ >>
+ }
+ \layout { ragged-right = ##t }
+}
+
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
"
doctitlees = "Utilizar ligaduras dobles para acordes legato"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Einige Komponisten schreiben doppelte Bögen, wenn Legato-Akkorde notiert
"
doctitlede = "Doppelte Bögen für Legato-Akkorde benutzen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Certains auteurs utilisent deux liaisons lorsqu'ils veulent
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
doctitlees = "Utilizar la barra que tacha las notas de adorno con notas normales"
+
%% Translation of GIT committish: 374d57cf9b68ddf32a95409ce08ba75816900f6b
texidocfr = "
Le trait que l'on trouve sur les hampes des acciaccatures peut
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.10
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
lsrtags = "expressive-marks, editorial-annotations"
texidoc = "
-Any graphical object can be printed over a white backgound to
+Any graphical object can be printed over a white background to
mask parts of objects that lie beneath. This can be useful to
improve the appearance of collisions in complex situations when
repositioning objects is impractical. It is necessary to explicitly
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "rhythms"
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Überbindungen werden teilweise benutzt, um Arpeggios zu notieren. In
doctitlede = "Überbingungen für Arpeggio genutzen"
+
%% Translation of GIT committish: 4da4307e396243a5a3bc33a0c2753acac92cb685
texidocfr = "
Les liaisons de tenue servent parfois à rendre un accord arpégé. Dans
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks, ancient-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "tweaks-and-overrides, spacing"
"
doctitlees = "Indicaciones dinámicas y textuales alineadas verticalmente"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man die @code{'Y-extent}-Eigenschaft auf einen passenden Wert setzt,
"
doctitlede = "Vertikale Ausrichtung von Dynamik und Textbeschriftung beeinflussen"
+
%% Translation of GIT committish: 217cd2b9de6e783f2a5c8a42be9c70a82195ad20
texidocfr = "
Vous pourrez, en jouant sur la propriété @code{'Y-extent}, aligner les
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "expressive-marks"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, tweaks-and-overrides, spacing"
"
doctitlees = "Alineación vertical de la letra y los compases de ossia"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Dieser Schnipsel zeigt, wie man die Kontexteigenschaften
"
doctitlede = "Gesangstext und Ossia vertikal ausrichten"
+
%% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
texidocfr = "
Cet exemple illustre la manière de positionner une portée d'ossia et
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "chords, tweaks-and-overrides"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "vocal-music, keyboards, template"
"
doctitlees = "Plantilla de conjunto vocal con reducción de piano automática"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
このテンプレートは、\"合唱テンプレート\"で示された標準の SATB ボーカル譜に自動@c
定義を何回も使用することができます。ボーカルの音符 (例えば、@code{tenorMusic}
の音符) に変更が加えられた場合、その変更はピアノ譜にも適用されます。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In diesem Beispiel wird ein automatischer Klavierauszug zu der
tenorMusic), verändert sich auch der Klavierauszug entsprechend.
"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas ajoute une réduction pour piano à une partition standard pour
\score {
<<
\new ChoirStaff <<
- \new Lyrics = sopranos { s1 }
- \new Staff = women <<
- \new Voice = sopranos { \voiceOne << \global \sopMusic >> }
- \new Voice = altos { \voiceTwo << \global \altoMusic >> }
+ \new Lyrics = "sopranos"
+ \new Staff = "women" <<
+ \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
+ \new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
- \new Lyrics = altos { s1 }
- \new Lyrics = tenors { s1 }
- \new Staff = men <<
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors"
+ \new Staff = "men" <<
\clef bass
- \new Voice = tenors { \voiceOne <<\global \tenorMusic >> }
- \new Voice = basses { \voiceTwo <<\global \bassMusic >> }
+ \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
+ \new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
- \new Lyrics = basses { s1 }
- \context Lyrics = sopranos \lyricsto sopranos \sopWords
- \context Lyrics = altos \lyricsto altos \altoWords
- \context Lyrics = tenors \lyricsto tenors \tenorWords
- \context Lyrics = basses \lyricsto basses \bassWords
+ \new Lyrics = "basses"
+ \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
+ \context Lyrics = "altos" \lyricsto "altos" \altoWords
+ \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
+ \context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
\new PianoStaff <<
\new Staff <<
>>
>>
>>
- \layout {
- \context {
- % a little smaller so lyrics
- % can be closer to the staff
- \Staff
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
- }
- }
}
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "text, vocal-music, contexts-and-engravers, template"
"
doctitlees = "Plantilla para conjunto vocal con letras alineadas encima y debajo de los pentagramas"
+
%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
texidocja = "
このテンプレートは基本的に単純な \"合唱\" テンプレートと同じですが、歌詞が
@code{alignAboveContext} と @code{alignBelowContext} を用いて配置されています。
"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
In diesem Beispiel werden die Texte mit den Befehlen
doctitlede = "Vorlage für Vokalensemble mit dem Gesangstext über und unter dem System"
+
%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
texidocfr = "
Ce canevas ressemble beaucoup à celui pour chœur à quatre voix mixtes.
\score {
\new ChoirStaff <<
- \new Staff = women <<
+ \new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
- \new Lyrics \with { alignAboveContext = women } \lyricsto sopranos \sopWords
- \new Lyrics \with { alignBelowContext = women } \lyricsto altos \altoWords
+ \new Lyrics \with { alignAboveContext = #"women" } \lyricsto "sopranos" \sopWords
+ \new Lyrics \with { alignBelowContext = #"women" } \lyricsto "altos" \altoWords
% we could remove the line about this with the line below, since we want
% the alto lyrics to be below the alto Voice anyway.
- % \new Lyrics \lyricsto altos \altoWords
+ % \new Lyrics \lyricsto "altos" \altoWords
- \new Staff = men <<
+ \new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
\new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
>>
- \new Lyrics \with { alignAboveContext = men } \lyricsto tenors \tenorWords
- \new Lyrics \with { alignBelowContext = men } \lyricsto basses \bassWords
+ \new Lyrics \with { alignAboveContext = #"men" } \lyricsto "tenors" \tenorWords
+ \new Lyrics \with { alignBelowContext = #"men" } \lyricsto "basses" \bassWords
% again, we could replace the line above this with the line below.
- % \new Lyrics \lyricsto basses \bassWords
+ % \new Lyrics \lyricsto "basses" \bassWords
>>
- \layout {
- \context {
- % a little smaller so lyrics
- % can be closer to the staff
- \Staff
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
- }
- }
}
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.13.21
-\version "2.13.29"
+\version "2.13.31"
\header {
%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
doctitlees = "Estrofa para solista y estribillo a dos voces"
+%% Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b
+
+ texidocde = "
+Diese Vorlage erstellt eine Partitur, die mit Sologesang beginnt und einen
+Refrain für zwei Stimmen enthält. Sie zeigt auch die Benutzung von
+Platzhalter-Pausen innerhalb der @code{\global}-Variable, um Taktwechsel
+(und andere Elemente, die für alle Stimmen gleich sind) für das gesamte
+Stück zu definieren.
+
+"
+ doctitlede = "Sologesang und zweistimmiger Refrain"
+
lsrtags = "vocal-music, contexts-and-engravers, template"
texidoc = "
This template creates a score which starts with a solo verse and
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.13.29"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
\header {
- lsrtags = "vocal-music, template"
-
-%% Translation of GIT committish: 0b55335aeca1de539bf1125b717e0c21bb6fa31b
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
"
doctitlees = "Plantilla de conjunto vocal"
-%% Translation of GIT committish: fa1aa6efe68346f465cfdb9565ffe35083797b86
+
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocja = "
これは標準の 4 パート SATB (ソプラノ、アルト、テナー、バス) ボーカル譜です。@c
もっと大きな合唱では、すべてのパートで使用されるセクションをインクルードすると@c
便利です。例えば、拍子記号と調号はほとんど常にすべてのパートで同じです。\"賛美@c
歌\" テンプレートのように、4 つのボイスは 2 つの譜にグループ分けされています。"
-%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
+
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocde = "
Dieses Beispiel ist für vierstimmigen Gesang (SATB). Bei größeren
Stücken ist es oft sinnvoll, eine allgemeine Variable zu bestimmen,
doctitlede = "Vorlage für Vokalensemble"
-%% Translation of GIT committish: bdfe3dc8175a2d7e9ea0800b5b04cfb68fe58a7a
+
+%% Translation of GIT committish: bfc88203ac2572737480e78ef2635ed35b458441
texidocfr = "
Ce fichier constitue un canevas standard de partition pour chœur à
quatre voix mixtes. Lorsque les ensembles s'étoffent, il est judicieux
"
doctitlefr = "Ensemble vocal (simple)"
+ lsrtags = "vocal-music, template"
texidoc = "
Here is a standard four-part SATB vocal score. With larger ensembles,
it is often useful to include a section which is included in all parts.
global = {
\key c \major
\time 4/4
-}
+} % begin verbatim
+
sopMusic = \relative c'' {
c4 c c8[( b)] c4
\score {
\new ChoirStaff <<
- \new Lyrics = sopranos { s1 }
- \new Staff = women <<
+ \new Lyrics = "sopranos"
+ \new Staff = "women" <<
\new Voice = "sopranos" {
\voiceOne
<< \global \sopMusic >>
<< \global \altoMusic >>
}
>>
- \new Lyrics = "altos" { s1 }
- \new Lyrics = "tenors" { s1 }
- \new Staff = men <<
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors"
+ \new Staff = "men" <<
\clef bass
\new Voice = "tenors" {
\voiceOne
\voiceTwo << \global \bassMusic >>
}
>>
- \new Lyrics = basses { s1 }
- \context Lyrics = sopranos \lyricsto sopranos \sopWords
- \context Lyrics = altos \lyricsto altos \altoWords
- \context Lyrics = tenors \lyricsto tenors \tenorWords
- \context Lyrics = basses \lyricsto basses \bassWords
+ \new Lyrics = "basses"
+ \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
+ \context Lyrics = "altos" \lyricsto "altos" \altoWords
+ \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
+ \context Lyrics = "basses" \lyricsto "basses" \bassWords
>>
- \layout {
- \context {
- % a little smaller so lyrics
- % can be closer to the staff
- \Staff
- \override VerticalAxisGroup #'minimum-Y-extent = #'(-3 . 3)
- }
- }
}
adjusting-lyrics-vertical-spacing.ly
ambitus-with-multiple-voices.ly
ambitus.ly
+ancient-notation-template----modern-transcription-of-gregorian-music.ly
changing-stanza-fonts.ly
chant-or-psalms-notation.ly
forcing-hyphens-to-be-shown.ly
formatting-lyrics-syllables.ly
how-to-put-ties-between-syllables-in-lyrics.ly
+hymn-template.ly
lyrics-alignment.ly
marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
piano-template-with-melody-and-lyrics.ly
+satb-choir-template---four-staves.ly
single-staff-template-with-notes,-lyrics,-and-chords.ly
single-staff-template-with-notes,-lyrics,-chords-and-frets.ly
single-staff-template-with-notes-and-lyrics.ly
skips-in-lyric-mode-2.ly
skips-in-lyric-mode.ly
+using-arpeggiobracket-to-make-divisi-more-visible.ly
vertically-aligning-ossias-and-lyrics.ly
vertically-centered-common-lyrics.ly
vocal-ensemble-template-with-automatic-piano-reduction.ly
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, staff-notation, chords"
doctitlees = "Corchetes de primera y segunda vez debajo de los acordes"
+
%% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
texidocde = "
Indem man den @code{Volta_engraver} zu dem entsprechenden Notensystem
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, staff-notation"
%% Do not edit this file; it is automatically
%% generated from LSR http://lsr.dsi.unimi.it
%% This file is in the public domain.
-\version "2.13.29"
+\version "2.13.31"
\header {
lsrtags = "repeats, text"
% generated from Documentation/snippets/new
% This file is in the public domain.
%% Note: this file works from version 2.12.0
-\version "2.13.29"
+\version "2.13.31"
#(set-global-staff-size 15)
\paper {
line-width = 16\cm
+changing-the-size-of-woodwind-diagrams.ly
fingering-symbols-for-wind-instruments.ly
flute-slap-notation.ly
+graphical-and-text-woodwind-diagrams.ly
recorder-fingering-chart.ly
+woodwind-diagrams-key-lists.ly
+woodwind-diagrams-listing.ly
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.24
+\version "2.13.31"
+
+\header {
+ lsrtags = "winds"
+
+ texidoc="
+The snippet below produces a list of all possible keys and key
+settings for woodwind diagrams as defined in
+@file{scm/define-woodwind-diagrams.scm}. The list will be displayed
+on the console and in the log file, but not in the music.
+"
+ doctitle = "Woodwind diagrams key lists"
+} % begin verbatim
+
+
+#(print-keys-verbose 'piccolo)
+#(print-keys-verbose 'flute)
+#(print-keys-verbose 'flute-b-extension)
+#(print-keys-verbose 'oboe)
+#(print-keys-verbose 'clarinet)
+#(print-keys-verbose 'bass-clarinet)
+#(print-keys-verbose 'low-bass-clarinet)
+#(print-keys-verbose 'saxophone)
+#(print-keys-verbose 'baritone-saxophone)
+#(print-keys-verbose 'bassoon)
+#(print-keys-verbose 'contrabassoon)
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.31
+\version "2.13.31"
+
+\header {
+ lsrtags="winds"
+ texidoc="
+The following music shows all of the woodwind diagrams currently
+defined in LilyPond.
+"
+ doctitle = "Woodwind diagrams listing"
+
+} % begin verbatim
+
+
+\relative c' {
+ \textLengthOn
+ c1^
+ \markup {
+ \center-column {
+ 'piccolo
+ " "
+ \woodwind-diagram
+ #'piccolo
+ #'()
+ }
+ }
+
+ c1^
+ \markup {
+ \center-column {
+ 'flute
+ " "
+ \woodwind-diagram
+ #'flute
+ #'()
+ }
+ }
+ c1^\markup {
+ \center-column {
+ 'oboe
+ " "
+ \woodwind-diagram
+ #'oboe
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'clarinet
+ " "
+ \woodwind-diagram
+ #'clarinet
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'bass-clarinet
+ " "
+ \woodwind-diagram
+ #'bass-clarinet
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'saxophone
+ " "
+ \woodwind-diagram
+ #'saxophone
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'bassoon
+ " "
+ \woodwind-diagram
+ #'bassoon
+ #'()
+ }
+ }
+
+ c1^\markup {
+ \center-column {
+ 'contrabassoon
+ " "
+ \woodwind-diagram
+ #'contrabassoon
+ #'()
+ }
+ }
+}
For compiling and running LilyPond see the installation instructions.
These instructions can be found when you unpack lilypond, as
-@file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web
+@file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web
at
@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/INSTALL.html}.
\section{LilyPond-book + LaTeX}
-This is an examplefile for mixing LilyPond and Latex. It is also
-used to test lilypond-book. View the source to see how it is done.
+This is an examplefile for mixing LilyPond and Latex. It is also
+used to test lilypond-book. View the source to see how it is done.
A simple scale:
\end{lilypond}
LilyPond-book search for the \verb|\score| command when it decides
-if the code is only a fragment. Thus, in the following code, you have
+if the code is only a fragment. Thus, in the following code, you have
to use \verb|fragment| option, because the comment confuses lilypond-book.
\begin{lilypond}[fragment]
\end{lilypond}
has also the \verb|eps| options, but is not floating because there
-are an empty line before and after the lilypond block. That is
+are an empty line before and after the lilypond block. That is
correct behaviour because it follows La\TeX{} convention that an
-empty line signals a new paragraph. The \verb|eps| option
+empty line signals a new paragraph. The \verb|eps| option
is not necessary when you want the music in a paragraph on its own.
\subsection{More examples}
\pagebreak
-Testing of spacing. The next music is surrounded by an empty line.
+Testing of spacing. The next music is surrounded by an empty line.
text text text text text text text text text text text text
text text text text text text text text text text text text
@example
\def\betweenLilyPondSystem#1@{
- \ifnum##1<2\else\expandafter\endinput\fi
+ \ifnum#1<2\else\expandafter\endinput\fi
@}
@end example
For inserting LilyPond snippets it is good to keep the conformity of our
DocBook document, thus allowing us to use DocBook editors, validation
-etc. So we don't use custom tags, only specify a convention based on the
+etc. So we don't use custom tags, only specify a convention based on the
standard DocBook elements.
@subheading Common conventions
@item indent=@var{size}\@var{unit}
Set indentation of the first music system to @var{size}, using
-@var{unit} as units. @var{unit} is one of the following strings:
+@var{unit} as units. @var{unit} is one of the following strings:
@code{cm}, @code{mm}, @code{in}, or @code{pt}. This option affects
LilyPond, not the text layout.
Specify the document type to process: @code{html}, @code{latex},
@code{texi} (the default) or @code{docbook}. If this option is missing,
@command{lilypond-book} tries to detect the format automatically, see
-@ref{Filename extensions}. Currently, @code{texi} is the same as
+@ref{Filename extensions}. Currently, @code{texi} is the same as
@code{texi-html}.
@c This complicated detail is not implemented, comment it out -jm
example.
@itemx --left-padding=@var{amount}
-Pad EPS boxes by this much. @var{amount} is measured in millimeters,
+Pad EPS boxes by this much. @var{amount} is measured in millimeters,
and is 3.0 by default. This option should be used if the lines of
music stick out of the right margin.
The fonts of snippets set with LilyPond will have to be set from
inside
-of the snippet. For this you should read the AU on how to use
+of the snippet. For this you should read the AU on how to use
lilypond-book.
\selectlanguage{ngerman}
@var{base}@file{-cello-1.pdf}.
+@unnumberedsubsubsec Standard shell commands
+
+If your shell (i.e. command window) supports normal redirects,
+then you might find it useful to use the following commands to
+redirect console output to a file:
+
+@itemize
+
+@item
+@code{lilypond file.ly 1>stdout.log} to redirect normal output
+
+@item
+@code{lilypond file.ly 2>stderr.log} to redirect error messages
+
+@item
+@code{lilypond file.ly &>all.log} to redirect all output
+
+@end itemize
+
+Consult the documentation for your shell to see if it supports these
+options, or if the syntax is different. Note that these are shell
+commands and have nothing to do with lilypond.
+
+
@node Command line options for lilypond
@unnumberedsubsec Command line options for @command{lilypond}
@item -H,--header=@var{FIELD}
Dump a header field to file @file{BASENAME.@var{FIELD}}.
-@item --include, -I=@var{directory}
-Add @var{directory} to the search path for input files.
@cindex file searching
@cindex search path
+@item --include, -I=@var{directory}
+Add @var{directory} to the search path for input files.
+
+Multiple -I options may be given. The search will start in the
+first defined directory, and if the file to be included is not
+found the search will continue in subsequent directories.
@item -i,--init=@var{file}
Set init file to @var{file} (default: @file{init.ly}).
-@item -o,--output=@var{FILE}
-Set the default output file to @var{FILE}. The appropriate
-suffix will be added (e.g. @code{.pdf} for pdf)
+@cindex folder, directing output to
+@cindex output filename, setting
+
+@item -o,--output=@var{FILE} or @var{FOLDER}
+Set the default output file to @var{FILE} or, if a folder with
+that name exists, direct the output to @var{FOLDER}, taking the
+file name from the input file. The appropriate suffix will be
+added (e.g. @code{.pdf} for pdf) in both cases.
+
@cindex PostScript output
information.
@item -w,--warranty
-Show the warranty with which GNU LilyPond comes. (It comes with
+Show the warranty with which GNU LilyPond comes. (It comes with
@strong{NO WARRANTY}!)
@end table
executable:
@example
-for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done
+for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \
+ do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \
+ cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \
+ \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done
@end example
@end itemize
cp -L /usr/share/fonts/truetype usr/share/fonts
# Now the library copying magic
-for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done | sh -s
+for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \
+ "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \
+ \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \
+ 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \
+ | sed '/.*=>.*/d'; done | sh -s
# The shared files for ghostscript...
cp -L -r /usr/share/ghostscript usr/share
# The shared files for ImageMagick
cp -L -r /usr/lib/ImageMagick* usr/lib
-### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, you should be able to run:
-### Note that /$lilyprefix/bin/lilypond is a script, which sets the LD_LIBRARY_PATH - this is crucial
+### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome,
+### you should be able to run:
+### Note that /$lilyprefix/bin/lilypond is a script, which sets the
+### LD_LIBRARY_PATH - this is crucial
/$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly
@end example
+@c " keep quote signs balanced for context-sensitive editors
@node Error messages
@section Error messages
* Apparent error in ../ly/init.ly::
* Error message Unbound variable %::
* Error message FT_Get_Glyph_Name::
+* Warning staff affinities should only decrease::
@end menu
@node Music runs off the page
UTF-8 encoding. For details, see @ruser{Text encoding}.
+@node Warning staff affinities should only decrease
+@unnumberedsubsec Warning staff affinities should only decrease
+This warning can appear if there are no staves in the printed
+output, for example if there are just a @code{ChordName} context
+and a @code{Lyrics} context as in a lead sheet. The warning
+messages can be avoided by making one of the contexts behave as a
+staff by inserting
+@example
+\override VerticalAxisGroup #'staff-affinity = ##f
+@end example
+
+@noindent
+at its start. For details, see @qq{Spacing of non-staff lines} in
+@ruser{Vertical spacing inside a system}.
@cindex make
Pretty well all the platforms Lilypond can run on support a software
-facility called @code{make}. This software reads a special file called a
+facility called @code{make}. This software reads a special file called a
@code{Makefile} that defines what files depend on what others and what
commands you need to give the operating system to produce one file from
-another. For example the makefile would spell out how to produce
+another. For example the makefile would spell out how to produce
@code{ballad.pdf} and @code{ballad.midi} from @code{ballad.ly} by
running Lilypond.
different output options (e.g. full score, parts, conductor's
score, piano reduction, etc.), or for projects that
require difficult commands to build them (such as
-@code{lilypond-book} projects). Makefiles vary greatly in
+@code{lilypond-book} projects). Makefiles vary greatly in
complexity and flexibility, according to the needs and skills of
-the authors. The program GNU Make comes installed on GNU/Linux
+the authors. The program GNU Make comes installed on GNU/Linux
distributions and on MacOS X, and it is also available for Windows.
See the @strong{GNU Make Manual} for full details on using
The commands to define rules in a makefile differ
according to platform; for instance the various forms of Linux and
-MacOS use @code{bash}, while Windows uses @code{cmd}. Note that on
+MacOS use @code{bash}, while Windows uses @code{cmd}. Note that on
MacOS X, you need to configure the system to use the command-line
-interpreter. Here are some example makefiles, with versions for both
+interpreter. Here are some example makefiles, with versions for both
Linux/MacOS and Windows.
The first example is for an orchestral work in four
The makefile will have targets of @code{score} (entire piece in
full score), @code{movements} (individual movements in full score),
-and @code{parts} (individual parts for performers). There
+and @code{parts} (individual parts for performers). There
is also a target @code{archive} that will create a tarball of
-the source files, suitable for sharing via web or email. Here is
-the makefile for GNU/Linux or MacOS X. It should be saved with the
+the source files, suitable for sharing via web or email. Here is
+the makefile for GNU/Linux or MacOS X. It should be saved with the
name @code{Makefile} in the top directory of the project:
@warning{When a target or pattern rule is defined, the
@end example
-There are special complications on the Windows platform. After
+There are special complications on the Windows platform. After
downloading and installing GNU Make for Windows, you must set the
correct path in the system's environment variables so that the
-DOS shell can find the Make program. To do this, right-click on
+DOS shell can find the Make program. To do this, right-click on
"My Computer," then choose @code{Properties} and
-@code{Advanced}. Click @code{Environment Variables}, and then
+@code{Advanced}. Click @code{Environment Variables}, and then
in the @code{System Variables} pane, highlight @code{Path}, click
@code{edit}, and add the path to the GNU Make executable file, which
will look something like this:
The makefile itself has to be altered to handle different shell
commands and to deal with spaces that are present
-in some default system directories. The @code{archive} target
+in some default system directories. The @code{archive} target
is eliminated since Windows does not have the @code{tar} command,
and Windows also has a different default extension for midi files.
The next Makefile is for a @command{lilypond-book} document done in
-LaTeX. This project has an index, which requires that the
-@command{latex} command be run twice to update links. Output files are
+LaTeX. This project has an index, which requires that the
+@command{latex} command be run twice to update links. Output files are
all stored in the @code{out} directory for .pdf output and in the
@code{htmlout} directory for the html output.
TODO: make this thing work on Windows
-The previous makefile does not work on Windows. An alternative
+The previous makefile does not work on Windows. An alternative
for Windows users would be to create a simple batch file
-containing the build commands. This will not
+containing the build commands. This will not
keep track of dependencies the way a makefile does, but it at
-least reduces the build process to a single command. Save the
+least reduces the build process to a single command. Save the
following code as @command{build.bat} or @command{build.cmd}.
The batch file can be run at the DOS prompt or by simply
double-clicking its icon.
depth = ../..
+
LOCALSTEPMAKE_TEMPLATES = ly
+
SUBDIRS = ly-examples server
include $(depth)/make/stepmake.make
+
+#OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
+BIB_FILES = $(call src-wildcard,*.bib)
+EXTRA_DIST_FILES += $(BIB_FILES) $(call src-wildcard,*.bst)
+
@node Community
@unnumbered Community
+@divClass{link-headings}
@divClass{column-center-top}
@subheading Interacting with the community
@end itemize
@divEnd
+@divEnd
@divClass{hide}
@menu
@subheading Regression tests
@divClass{keep-bullets}
-@itemize
@ifclear web_version
+@itemize
@item
@uref{../../input/regression/collated-files.html, Regression tests}:
This release's regtests.
@uref{../../input/regression/musicxml/collated-files.html, MusicXML tests}:
This release's musicXML tests.
(@uref{../../input/regression/musicxml/collated-files.pdf, pdf version})
+
+@item
+@uref{../../input/regression/abc2ly/collated-files.html, abc2ly tests}:
+This release's abc2ly tests.
+(@uref{../../input/regression/abc2ly/collated-files.pdf, pdf version})
+
+@item
+@uref{../../input/regression/lilypond-book/collated-files.html, lilypond-book tests}:
+This release's lilypond-book tests.
+(@uref{../../input/regression/lilypond-book/collated-files.pdf, pdf version})
+@end itemize
+
@end ifclear
@ifset web_version
+@subsubheading Development version
+
+@itemize
@item @regtestDevel (@regtestDevelPdf{})
@item @regtestDevelXml (@regtestDevelXmlPdf{})
+@item @regtestDevelAbc (@regtestDevelAbcPdf{})
+
+@item @regtestDevelLilypondBook (@regtestDevelLilypondBookPdf{})
+@end itemize
+
+@subsubheading Stable version
+
+@itemize
@item @regtestStable (@regtestStablePdf{})
@item @regtestStableXml (@regtestStableXmlPdf{})
+
+@item @regtestStableAbc (@regtestStableAbcPdf{})
+
+@item @regtestStableLilypondBook (@regtestStableLilypondBookPdf{})
+@end itemize
@end ifset
+@subsubheading All versions
+
+@itemize
@item @uref{http://lilypond.org/test, Archive of regression tests}:
Comparisons between versions.
-
@end itemize
+
@divEnd
@divEnd
@subheading What we wrote about LilyPond
@divClass{keep-bullets}
-@itemize
-
-@item
-Han-Wen Nienhuys, @emph{LilyPond, Automated music formatting and
-the Art of Shipping}. Forum Internacional Software Livre 2006
-(FISL7.0) (@uref{http://lilypond.org/web/images/FISL7-slides.pdf,
-PDF 1095k})
-@item
-Erik Sandberg, @emph{Separating input language and formatter in
-GNU LilyPond}. Master's Thesis, Uppsala University, Department of
-Information Technology March 2006.
-(@uref{http://lilypond.org/web/images/thesis-erik-sandberg.pdf,
-PDF 750k})
-
-@item
-Han-Wen Nienhuys and Jan Nieuwenhuizen, @emph{LilyPond, a system
-for automated music engraving}. Proceedings of the XIV Colloquium
-on Musical Informatics (XIV CIM 2003), Firenze, Italy, May 2003.
-(@uref{ http://lilypond.org/web/images/xivcim.pdf, PDF 95k})
-
-@end itemize
+@include we-wrote.itexi
@divEnd
@divEnd
@divClass{keep-bullets}
-@itemize
-
-@item
-Graham Percival, Tosten Anders, and George Tzanetakis,
-@emph{Generating Targeted Rhythmic Exercises for Music Students
-with Constraint Satisfaction Programming}, International Computer
-Music Conference 2008.
-@item
-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, pp. 207-210.
-
-@item
-Alberto Simões, Anália Lourenço and José João Almeida,
-@emph{Using Text Mining Techniques for Classical Music Scores Analysis},
-New Trends in Artificial Intelligence, 2007 J. Neves et al ed.
-
-@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).
-
-
-@end itemize
+@include others-did.itexi
@divEnd
@divEnd
@include web/news-front.itexi
@include web/news.itexi
-
-
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading For users
@itemize
@item
-@c TODO: duplicate to avoid underlined refs in HTML? icky.
+@c ref is duplicated to avoid underlining ref as image.
@ref{Unix, @sourceimage{logo-linux,,,}
@sourceimage{logo-freebsd,,,}}
@ref{Unix, Unix (Linux and FreeBSD)}
@end itemize
@divEnd
+@divEnd
@divClass{column-center-bottom}
@item
Create a file called @command{lilypond} which contains
-@help obvious css issue to be dealt with. :(
-@c we need a small font here to fit. -gp
-@smallexample
+@divClass{h-scroll-auto}
+@example
exec @var{DIR}/LilyPond.app/Contents/Resources/bin/lilypond "$@@"
-@end smallexample
+@end example
+@divEnd
@warning{@var{DIR} will generally be @code{/Applications/}}
Scripts can also be run from the command line by invoking them
directly:
+@divClass{h-scroll-auto}
@example
@var{path/to}/LilyPond.app/Contents/Resources/bin/lilypond
@end example
+@divEnd
The same is true for all other scripts in that directory, such as
@command{lilypond-book} and @command{convert-ly}.
@item
Locate the downloaded file and double-click on it to start the
-installer. Follow the instructions given to you by the installer;
+installer. Follow the instructions given to you by the installer;
we recommend that you leave all the install options checked and
-use the default installation location. Click the @q{Finish} button
-when the installer has completed. LilyPond is now installed.
+use the default installation location. Click the @q{Finish} button
+when the installer has completed. LilyPond is now installed.
@end enumerate
@item
Locate the LilyPond folder from the @q{Start} menu and click on the
-@q{Uninstall} icon. Click the @q{Finish} button when the uninstaller
+@q{Uninstall} icon. Click the @q{Finish} button when the uninstaller
has completed.
@item
Or from within the Control Panel, locate and select LilyPond and then
-choose the option to uninstall/remove the software. Click the @q{Finish}
+choose the option to uninstall/remove the software. Click the @q{Finish}
button when the uninstaller has completed.
@end enumerate
@include gpl.itexi
@divEnd
-
-
-
@divEnd
+@divClass{link-headings}
+
@divClass{column-left-top}
@subheading What LilyPond does
@end itemize
@divEnd
+@divEnd
+
@c TRANSLATORS, translations are not yet compiled in Info format, so
@c it's not worth translating the right column of the following
@c menu. -JM
Put fragments of music into texts without cutting and pasting
pictures. Integrate music into @LaTeX{} or HTML seamlessly, or add
-music to OpenOffice.org with OOoLilyPond. Plugins are also available
+music to OpenOffice.org with OOoLilyPond. Plugins are also available
to allow LilyPond code in various blogs and wikis, making online
collaboration possible.
Several developers, themselves active LilyPond users, have also
written tools specifically aimed at making the process of editing
-LilyPond files faster and more effective. For some examples, see
+LilyPond files faster and more effective. For some examples, see
@ref{Easier editing}.
@divEnd
@unnumberedsec Examples
LilyPond is a powerful and flexible tool for engraving tasks of
-all kinds. Please browse our gallery of examples and be inspired!
+all kinds. Please browse our gallery of examples and be inspired!
@newsItem
@newsItem
@subsubheading Schenker Graphs
-Standard output can be modified heavily. Here is an impressive
+Standard output can be modified heavily. Here is an impressive
Schenkerian analysis, created by Kris Schaffer, for an article
in @uref{http://www.linuxjournal.com/article/8364 , Linux Journal.}.
The colors have been added for better visibility.
Delen van KENNIS zonder WINSTBEJAG} (Non-profit sharing of
knowlegde) in its @q{DS2 bijlage}. LilyPond is used as an example
and the article is interspersed with quotes from an email
-interview with Jan Nieuwenhuizen. This marks LilyPond's first
+interview with Jan Nieuwenhuizen. This marks LilyPond's first
appearance in mainstream printed press.
@item
Denemo is a graphical editor which generates LilyPond source code,
and also allows audio playback. It allows users to view the
-LilyPond source code in parallel to the graphical view. Extra
+LilyPond source code in parallel to the graphical view. Extra
LilyPond tweaks can be attached to notes, chords etc. and are stored
with the Denemo file, so that users can continue to edit graphically.
the text view when printed from there.
@warning{Denemo officially supports an outdated Lilypond version 2.8.7,
-which lacks many of the features added since then. The Denemo developers
+which lacks many of the features added since then. The Denemo developers
are actively working to bring it up to our present stable version, 2.12.}
@divEnd
many different computer languages. Emacs is a highly extensible
editor and can be used as an Integrated Development Environment.
There is a @q{lilypond mode} which supplies the language
-definitions for working with LilyPond source files. As well, one of
-our developers has written @uref{http://nicolas.sceaux.free.fr/
-lilypond/lyqi.html,lyqi}, an Emacs major mode.
+definitions for working with LilyPond source files. As well, one of
+our developers has written
+@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, an
+Emacs major mode.
@uref{http://www.vim.org}
@item
@uref{http://canorus.org,Canorus} can also export to LilyPond, but
-is still beta-software. Testers are welcome, though.
+is still beta-software. Testers are welcome, though.
@item
@uref{http://www.volny.cz/smilauer/rumor/rumor.html,Rumor}, a realtime
@spanEnd
@end macro
-
@divClass{heading-center}
@ifclear web_version
@heading Manuals for LilyPond @version
@divEnd
-@c TODO: do we want these links to be in larger text / bold ? CSS.
+@divClass{link-headings}
@divClass{column-center-top}
@subheading Introduction
@itemize
-@item @ref{Text input}:
-LilyPond is a @strong{text-based} music engraver. Read this
-first!
+@item
+@ref{Text input}:
+LilyPond is a @strong{text-based} music engraver. Read this first!
-@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}}
+@item
+@ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,Learning}}
a @qq{must-read} gentle introduction to LilyPond.
@details{Learning}
-@item @ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}}
-@emph{(optional reading)}
-musical terms and translations.
+@item
+@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Glossary}}
+@emph{(optional reading)} musical terms and translations.
@details{Glossary}
-@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
-@emph{(optional reading)}
-background information about computer engraving.
+@item
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
+@emph{(optional reading)} background information about computer engraving.
@details{Essay}
-
@end itemize
@divEnd
@itemize
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}}
+@item
+@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notation}}
syntax reference.
@details{Notation}
-@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}}
+@item
+@ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,Usage}}
running the programs.
@details{Usage}
-@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}}
+@item
+@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}}
short tricks and tips.
@details{Snippets}
@itemize
-@item @ref{FAQ}:
+@item
+@ref{FAQ}:
Frequently Asked Questions.
-@item @ref{Top, Web}:
+@item
+@ref{Top, Web}:
this document.
@details{Web}
-@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}}
+@item
+@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}}
what's new?
@details{Changes}
-@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}}
+@item
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}}
fancy tweaks.
@details{Extending}
-@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
+@item
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
tweaks reference.
@details{Internals}
@itemize
-@item @ref{Translated}:
+@item
+@ref{Translated}:
translation status for non-English readers.
-@item @ref{All}:
+@item
+@ref{All}:
downloadable and old manuals.
-@item @ref{Development}:
+@item
+@ref{Development}:
manuals for the unstable version.
-@item @ref{FDL}:
-these manuals are published under the GNU Free Documentation
-License.
+@item
+@ref{FDL}:
+these manuals are published under the GNU Free Documentation License.
@end itemize
@divEnd
+@divEnd
+
@divClass{hide}
@menu
@include fdl.itexi
@divEnd
-
-
@c keep two blank lines between news entries
-@c FIXME: fill in number
-@c used for news about the upcoming release; see CG x.y
+@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.13.29 released! @emph{July 13, 2010}
+@subsubheading LilyPond 2.13.31 released! @emph{Aug 24, 2010}
-We are happy to announce the release of LilyPond 2.13.29. This
+We are happy to announce the release of LilyPond 2.13.31. This
release contains the usual number of bugfixes. However, a number
of critical issues still remain, so this release is intended for
developers only.
-This release includes some major untested changes to the windows
-lilypad editor. Windows users should not be using this release
-because it is intended for developers only, but you ignore these
-warnings and try it anyway, use extra caution.
@newsEnd
@newsItem
-@subsubheading LilyPond 2.13.27 released! @emph{July 5, 2010}
+@subsubheading LilyPond 2.13.30 released! @emph{Aug 13, 2010}
-We are happy to announce the release of LilyPond 2.13.27. This
+We are happy to announce the release of LilyPond 2.13.30. This
release contains the usual number of bugfixes. However, a number
of critical issues still remain, so this release is intended for
developers only.
-@newsEnd
-
-
-@newsItem
-@subsubheading Testing our new website! @emph{June 29, 2010}
-
-We're testing our new website! For the next 24 hours, the new
-website will be the default website; after that, we will switch
-back to the old website while we examine feedback and make
-improvements to the new website.
-
-Please send feedback to @code{lilypond-user}; you can find more
-information on our page about @ref{Contact}.
-
-@warning{There are a few known problems with translations. If you
-are a non-English speaker, you may prefer to view the old lilypond
-website at:
-@uref{http://lilypond.org/web/}}
-
-@newsEnd
-
-
-@newsItem
-@subsubheading LilyPond 2.13.26 released! @emph{June 26, 2010}
-
-We are happy to announce the release of LilyPond 2.13.26. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
-@newsEnd
-
-@newsItem
-@subsubheading LilyPond 2.13.25 released! @emph{June 20, 2010}
-
-We are happy to announce the release of LilyPond 2.13.25. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
-@newsEnd
-
-
-@newsItem
-@subsubheading LilyPond 2.13.24 released! @emph{June 14, 2010}
-We are happy to announce the release of LilyPond 2.13.24. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
@newsEnd
@newsItem
-@subsubheading LilyPond 2.13.23 released! @emph{June 3, 2010}
-
-We are happy to announce the release of LilyPond 2.13.23. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
-@newsEnd
-
-@newsItem
-@subsubheading LilyPond 2.13.22 released! @emph{May 27, 2010}
-
-We are happy to announce the release of LilyPond 2.13.22. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
-@newsEnd
-
-@newsItem
-@subsubheading LilyPond 2.13.21 released! @emph{May 12, 2010}
-
-We are happy to announce the release of LilyPond 2.13.21. This
-release contains the usual number of bugfixes. However, a number
-of critical issues still remain, so this release is intended for
-developers only.
-
-This release should be of particular interest to package
-maintainers: we have made a few changes to the configure script
-and the required libraries. Barring any urgent bug reports, this
-is the build system and libraries that will be used for the next
-stable release.
-@newsEnd
-
-
-@newsItem
-@subsubheading LilyPond Report #18. @emph{May 11, 2010}
+@subsubheading LilyPond Report #19. @emph{Aug 9, 2010}
The @emph{LilyPond Report} is back, with its two
-@qq{grumpy-and-fluffy} editors! This issue will be filled
-with emotion and coolness, paper bags and zigzag-ending
-staves, plus the usual Frogs and Bugs.
+@qq{grumpy-and-fluffy} editors! This issue contains some
+conference news, along with the regular release news, snippet of
+the report, news from the frog pond, and the bug report of the
+report!
Come
-@uref{http://news.lilynet.net/The-LilyPond-Report-18, read
-LilyPond Report 18} now; comments and contributions are
+@uref{http://news.lilynet.net/The-LilyPond-Report-19, read
+LilyPond Report 19} now; comments and contributions are
warmly encouraged!
@newsEnd
+
@end ignore
+@newsItem
+@subsubheading LilyPond 2.13.29 released! @emph{Aug 4, 2010}
+
+We are happy to announce the release of LilyPond 2.13.29. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+
+This release radically changes the autobeaming rules, so use extra
+caution and expect breakage.
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.13.28 released! @emph{July 13, 2010}
+
+We are happy to announce the release of LilyPond 2.13.28. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+
+This release includes some major untested changes to the windows
+lilypad editor. Windows users should not be using this release
+because it is intended for developers only, but you ignore these
+warnings and try it anyway, use extra caution.
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.13.27 released! @emph{July 5, 2010}
+
+We are happy to announce the release of LilyPond 2.13.27. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+
+@newsItem
+@subsubheading Testing our new website! @emph{June 29, 2010}
+
+We're testing our new website! For the next 24 hours, the new
+website will be the default website; after that, we will switch
+back to the old website while we examine feedback and make
+improvements to the new website.
+
+Please send feedback to @code{lilypond-user}; you can find more
+information on our page about @ref{Contact}.
+
+@warning{There are a few known problems with translations. If you
+are a non-English speaker, you may prefer to view the old lilypond
+website at:
+@uref{http://lilypond.org/web/}}
+
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.13.26 released! @emph{June 26, 2010}
+
+We are happy to announce the release of LilyPond 2.13.26. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.13.25 released! @emph{June 20, 2010}
+
+We are happy to announce the release of LilyPond 2.13.25. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.13.24 released! @emph{June 14, 2010}
+
+We are happy to announce the release of LilyPond 2.13.24. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond 2.13.23 released! @emph{June 3, 2010}
+
+We are happy to announce the release of LilyPond 2.13.23. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.13.22 released! @emph{May 27, 2010}
+
+We are happy to announce the release of LilyPond 2.13.22. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.13.21 released! @emph{May 12, 2010}
+
+We are happy to announce the release of LilyPond 2.13.21. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+
+This release should be of particular interest to package
+maintainers: we have made a few changes to the configure script
+and the required libraries. Barring any urgent bug reports, this
+is the build system and libraries that will be used for the next
+stable release.
+@newsEnd
+
+
+@newsItem
+@subsubheading LilyPond Report #18. @emph{May 11, 2010}
+
+The @emph{LilyPond Report} is back, with its two
+@qq{grumpy-and-fluffy} editors! This issue will be filled
+with emotion and coolness, paper bags and zigzag-ending
+staves, plus the usual Frogs and Bugs.
+
+Come
+@uref{http://news.lilynet.net/The-LilyPond-Report-18, read
+LilyPond Report 18} now; comments and contributions are
+warmly encouraged!
+@newsEnd
+
+
+
@newsItem
@subsubheading LilyPond 2.13.20 released! @emph{May 5, 2010}
--- /dev/null
+# use two {{ for title, but one { for all others.
+
+@inproceedings{percival08,
+ title={{Generating Targeted Rhythmic Exercises for Music Students
+with Constraint Satisfaction Programming}},
+ author={Graham Percival and Tosten Anders and George Tzanetakis},
+ booktitle={International Computer Music Conference},
+ year=2008,
+}
+
+@inproceedings{passos09,
+ title={{Functional Harmonic Analysis and Computational Musicology
+in Rameau}},
+ author={Alexandre Tachard Passos and Marcos Sampaio and Pedro
+Kröger and Givaldo de Cidra},
+ booktitle={Proceedings of the 12th Brazilian Symposium on Computer
+Music},
+ year=2009,
+ pages={207--210},
+}
+
+@inproceedings{simoes07,
+ title={{Using Text Mining Techniques for Classical Music Scores
+Analysis}},
+ author={Alberto Simões and Anália Lourenço and José João Almeida},
+ booktitle={New Trends in Artificial Intelligence},
+ editor={J. Neves et al.},
+ year=2007,
+}
+
+@inproceedings{baird05,
+ title={{Real-time generation of music notation via audience interaction using
+python and GNU LilyPond}},
+ author={Kevin C. Baird},
+ booktitle={New Interfaces for Music Expression},
+ year=2005,
+ month="May",
+ location="Vancouver, Canada"
+}
+
--- /dev/null
+% 18/aug/2010:
+% - changed into texi-long.bst by Graham Percival for GNU LilyPond
+% - only a minimum of changes were made; some html remains in
+% this file, but it does not appear in our output
+% BibTeX bibliography style `html-long'
+% spits out texinfo-formatted bibliography in place of bbl output
+% by David Kotz dfk@cs.dartmouth.edu
+% $Id: html-long.bst,v 1.4 2005/07/21 21:29:50 hjunes Exp $
+% modified from
+% BibTeX standard bibliography style `alpha'
+ % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09.
+ % Copyright (C) 1985, all rights reserved.
+ % Copying of this file is authorized only if either
+ % (1) you make absolutely no changes to your copy, including name, or
+ % (2) if you do make changes, you name it something other than
+ % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst.
+ % This restriction helps ensure that all standard styles are identical.
+ % The file btxbst.doc has the documentation for this style.
+
+% DFK added abstract, comment, earlier, keyword, later, URL
+ENTRY
+ { abstract
+ address
+ author
+ booktitle
+ chapter
+ comment
+ earlier
+ edition
+ editor
+ howpublished
+ institution
+ journal
+ key
+ keyword
+ later
+ month
+ note
+ number
+ organization
+ pages
+ private
+ publisher
+ school
+ series
+ title
+ type
+ URL
+ volume
+ year
+ }
+ {}
+ { label extra.label sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+ #1 'mid.sentence :=
+ #2 'after.sentence :=
+ #3 'after.block :=
+}
+
+STRINGS { s t }
+
+FUNCTION {output.nonnull}
+{ 's :=
+ output.state mid.sentence =
+ { ", " * write$ }
+ { output.state after.block =
+ { add.period$ write$
+ newline$
+ }
+ { output.state before.all =
+ 'write$
+ { add.period$ " " * write$ }
+ if$
+ }
+ if$
+ mid.sentence 'output.state :=
+ }
+ if$
+ s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+ 'pop$
+ 'output.nonnull
+ if$
+}
+
+FUNCTION {output.check}
+{ 't :=
+ duplicate$ empty$
+ { pop$ "empty " t * " in " * cite$ * warning$ }
+ 'output.nonnull
+ if$
+}
+
+% DFK changed to use cite$ for the label
+% DFK changed to texinfo, and use URL to make cite key a link
+FUNCTION {output.bibitem}
+{ newline$
+ URL empty$
+ { "@item " write$
+ }
+ { "" quote$ * cite$ * quote$ * " HREF=" * quote$ *
+ URL * quote$ * "> " * cite$ * ":</A></DT>" * write$
+ }
+ if$
+ newline$
+% "" write$ newline$
+ ""
+ before.all 'output.state :=
+}
+
+% DFK changed to HTML
+FUNCTION {fin.entry}
+{ add.period$
+ write$
+ newline$
+ earlier empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also earlier version <A HREF=" quote$ * "#" * earlier * quote$ *
+ ">" * earlier * "</A>." * write$ newline$
+ }
+ if$
+ later empty$
+ 'skip$
+ { "<br>" write$ newline$
+ "See also later version <A HREF=" quote$ * "#" * later * quote$ *
+ ">" * later * "</A>." * write$ newline$
+ }
+ if$
+% "" write$ newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+ 'skip$
+ { after.block 'output.state := }
+ if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+ 'skip$
+ { output.state before.all =
+ 'skip$
+ { after.sentence 'output.state := }
+ if$
+ }
+ if$
+}
+
+FUNCTION {not}
+{ { #0 }
+ { #1 }
+ if$
+}
+
+FUNCTION {and}
+{ 'skip$
+ { pop$ #0 }
+ if$
+}
+
+FUNCTION {or}
+{ { pop$ #1 }
+ 'skip$
+ if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.block
+ if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+ swap$ empty$
+ and
+ 'skip$
+ 'new.sentence
+ if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+ { pop$ "" }
+ 'skip$
+ if$
+}
+
+% DFK changed to texinfo
+FUNCTION {emphasize}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "@emph{" swap$ * "}" * }
+ if$
+}
+
+% DFK added for texinfo strong emphasis
+FUNCTION {strong}
+{ duplicate$ empty$
+ { pop$ "" }
+ { "@strong{" swap$ * "}" * }
+ if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+% DFK added this, to strip {} and ~ from titles and authors
+% It's not a great idea, because it will screw up in math mode and some
+% special characters... but it makes most things much prettier.
+FUNCTION {author.title.purify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "{" =
+ t #1 #1 substring$ "}" = or
+ 'skip$
+ { t #1 #1 substring$ "~" =
+ { " " * }
+ { t #1 #1 substring$ * }
+ if$
+ }
+ if$
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+}
+
+FUNCTION {format.names}
+{ 's :=
+ #1 'nameptr :=
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
+ nameptr #1 >
+ { namesleft #1 >
+ { ", " * t * }
+ { numnames #2 >
+ { "," * }
+ 'skip$
+ if$
+ t "others" =
+ { " et al." * }
+ { " and " * t * }
+ if$
+ }
+ if$
+ }
+ 't
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+ { "" }
+ { author format.names author.title.purify }
+ if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+ { "" }
+ { editor format.names author.title.purify
+ editor num.names$ #1 >
+ { ", editors" * }
+ { ", editor" * }
+ if$
+ }
+ if$
+}
+
+% DFK added strong, so it will be bold.
+FUNCTION {format.title}
+{ title empty$
+ { "" }
+ { title "t" change.case$ author.title.purify strong }
+ if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+ ""
+ { t empty$ not }
+ { t #1 #1 substring$ "-" =
+ { t #1 #2 substring$ "--" = not
+ { "--" *
+ t #2 global.max$ substring$ 't :=
+ }
+ { { t #1 #1 substring$ "-" = }
+ { "-" *
+ t #2 global.max$ substring$ 't :=
+ }
+ while$
+ }
+ if$
+ }
+ { t #1 #1 substring$ *
+ t #2 global.max$ substring$ 't :=
+ }
+ if$
+ }
+ while$
+}
+
+FUNCTION {format.date}
+{ year empty$
+ { month empty$
+ { "" }
+ { "there's a month but no year in " cite$ * warning$
+ month
+ }
+ if$
+ }
+ { month empty$
+ 'year
+ { month " " * year * }
+ if$
+ }
+ if$
+}
+
+% DFK changed emphasize to strong
+FUNCTION {format.btitle}
+{ title author.title.purify strong
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+ { " " }
+ { " " }
+ if$
+ swap$ * *
+}
+
+FUNCTION {either.or.check}
+{ empty$
+ 'pop$
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+ if$
+}
+
+FUNCTION {format.bvolume}
+{ volume empty$
+ { "" }
+ { "volume" volume tie.or.space.connect
+ series empty$
+ 'skip$
+ { " of " * series emphasize * }
+ if$
+ "volume and number" number either.or.check
+ }
+ if$
+}
+
+FUNCTION {format.number.series}
+{ volume empty$
+ { number empty$
+ { series field.or.null }
+ { output.state mid.sentence =
+ { "number" }
+ { "Number" }
+ if$
+ number tie.or.space.connect
+ series empty$
+ { "there's a number but no series in " cite$ * warning$ }
+ { " in " * series * }
+ if$
+ }
+ if$
+ }
+ { "" }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+ { "" }
+ { output.state mid.sentence =
+ { edition "l" change.case$ " edition" * }
+ { edition "t" change.case$ " edition" * }
+ if$
+ }
+ if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+ #0 'multiresult :=
+ { multiresult not
+ t empty$ not
+ and
+ }
+ { t #1 #1 substring$
+ duplicate$ "-" =
+ swap$ duplicate$ "," =
+ swap$ "+" =
+ or or
+ { #1 'multiresult := }
+ { t #2 global.max$ substring$ 't := }
+ if$
+ }
+ while$
+ multiresult
+}
+
+FUNCTION {format.pages}
+{ pages empty$
+ { "" }
+ { pages multi.page.check
+ { "pages" pages n.dashify tie.or.space.connect }
+ { "page" pages tie.or.space.connect }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+ number empty$
+ 'skip$
+ { "(" number * ")" * *
+ volume empty$
+ { "there's a number but no volume in " cite$ * warning$ }
+ 'skip$
+ if$
+ }
+ if$
+ pages empty$
+ 'skip$
+ { duplicate$ empty$
+ { pop$ format.pages }
+ { ":" * pages n.dashify * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+ 'format.pages
+ { type empty$
+ { "chapter" }
+ { type "l" change.case$ }
+ if$
+ chapter tie.or.space.connect
+ pages empty$
+ 'skip$
+ { ", " * format.pages * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+ { "" }
+ { editor empty$
+ { "In " booktitle emphasize * }
+ { "In " format.editors * ", " * booktitle emphasize * }
+ if$
+ }
+ if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+ month empty$ year empty$ note empty$
+ and and and and and
+ key empty$ not and
+ { "all relevant fields are empty in " cite$ * warning$ }
+ 'skip$
+ if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+ 'skip$
+ { pop$
+ type "t" change.case$
+ }
+ if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+ { "Technical Report" }
+ 'type
+ if$
+ number empty$
+ { "t" change.case$ }
+ { number tie.or.space.connect }
+ if$
+}
+
+FUNCTION {format.article.crossref}
+{ key empty$
+ { journal empty$
+ { "need key or journal for " cite$ * " to crossref " * crossref *
+ warning$
+ ""
+ }
+ { "In {\em " journal * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+ editor num.names$ duplicate$
+ #2 >
+ { pop$ " et al." * }
+ { #2 <
+ 'skip$
+ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { " et al." * }
+ { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+ if$
+ }
+ if$
+ }
+ if$
+}
+
+FUNCTION {format.book.crossref}
+{ volume empty$
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+ "In "
+ }
+ { "Volume" volume tie.or.space.connect
+ " of " *
+ }
+ if$
+ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { series empty$
+ { "need editor, key, or series for " cite$ * " to crossref " *
+ crossref * warning$
+ "" *
+ }
+ { "{\em " * series * "\/}" * }
+ if$
+ }
+ { key * }
+ if$
+ }
+ { format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.incoll.inproc.crossref}
+{ editor empty$
+ editor field.or.null author field.or.null =
+ or
+ { key empty$
+ { booktitle empty$
+ { "need editor, key, or booktitle for " cite$ * " to crossref " *
+ crossref * warning$
+ ""
+ }
+ { "In {\em " booktitle * "\/}" * }
+ if$
+ }
+ { "In " key * }
+ if$
+ }
+ { "In " format.crossref.editor * }
+ if$
+ " \cite{" * crossref * "}" *
+}
+
+
+% DFK added
+% top of stack is the string we want to be a quoted paragraph
+FUNCTION {format.quotedParagraph}
+{ duplicate$ empty$
+ { skip$ }
+ { "<P><QUOTE> " swap$ * " </QUOTE></P>" *}
+ if$
+}
+
+
+% DFK added, to support comment, private, keyword, etc
+% next-to-top is field name (eg, "Comment")
+% top is field value (eg, value of comment)
+% both are popped; resulting top is either empty,
+% or string describing field
+FUNCTION {format.dfkfield}
+{ duplicate$ empty$
+ { pop$ pop$ "" }
+ { swap$
+ "<strong> " swap$ * ":</strong> " * swap$ * }
+ if$
+}
+
+% DFK added
+FUNCTION {dfk.stuff}
+{ new.block
+ "Abstract" abstract format.dfkfield format.quotedParagraph write$ newline$
+ "Keyword" keyword format.dfkfield format.quotedParagraph write$ newline$
+ "Comment" comment format.dfkfield format.quotedParagraph write$ newline$
+}
+
+% DFK: added a call to dfk.stuff in all entry-type functions below
+
+FUNCTION {article}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { journal emphasize "journal" output.check
+ format.vol.num.pages output
+ format.date "year" output.check
+ }
+ { format.article.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {book}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {booklet}
+{ output.bibitem
+ format.authors output
+ new.block
+ format.title "title" output.check
+ howpublished address new.block.checkb
+ howpublished output
+ address output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+ author empty$
+ { format.editors "author and editor" output.check }
+ { format.authors output.nonnull
+ crossref missing$
+ { "author and editor" editor either.or.check }
+ 'skip$
+ if$
+ }
+ if$
+ new.block
+ format.btitle "title" output.check
+ crossref missing$
+ { format.bvolume output
+ format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.number.series output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ }
+ { format.chapter.pages "chapter and pages" output.check
+ new.block
+ format.book.crossref output.nonnull
+ }
+ if$
+ format.edition output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.chapter.pages output
+ new.sentence
+ publisher "publisher" output.check
+ address output
+ format.edition output
+ format.date "year" output.check
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.chapter.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {inproceedings}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ crossref missing$
+ { format.in.ed.booktitle "booktitle" output.check
+ format.bvolume output
+ format.number.series output
+ format.pages output
+ address empty$
+ { organization publisher new.sentence.checkb
+ organization output
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ organization output
+ publisher output
+ }
+ if$
+ }
+ { format.incoll.inproc.crossref output.nonnull
+ format.pages output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{ output.bibitem
+ author empty$
+ { organization empty$
+ 'skip$
+ { organization output.nonnull
+ address output
+ }
+ if$
+ }
+ { format.authors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ author empty$
+ { organization empty$
+ { address new.block.checka
+ address output
+ }
+ 'skip$
+ if$
+ }
+ { organization address new.block.checkb
+ organization output
+ address output
+ }
+ if$
+ format.edition output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ "Master's thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {misc}
+{ output.bibitem
+ format.authors output
+ title howpublished new.block.checkb
+ format.title output
+ howpublished new.block.checka
+ howpublished output
+ format.date output
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+ empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.btitle "title" output.check
+ new.block
+ "PhD thesis" format.thesis.type output.nonnull
+ school "school" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+ editor empty$
+ { organization output }
+ { format.editors output.nonnull }
+ if$
+ new.block
+ format.btitle "title" output.check
+ format.bvolume output
+ format.number.series output
+ address empty$
+ { editor empty$
+ { publisher new.sentence.checka }
+ { organization publisher new.sentence.checkb
+ organization output
+ }
+ if$
+ publisher output
+ format.date "year" output.check
+ }
+ { address output.nonnull
+ format.date "year" output.check
+ new.sentence
+ editor empty$
+ 'skip$
+ { organization output }
+ if$
+ publisher output
+ }
+ if$
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ format.tr.number output.nonnull
+ institution "institution" output.check
+ address output
+ format.date "year" output.check
+ new.block
+ note output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+ format.authors "author" output.check
+ new.block
+ format.title "title" output.check
+ new.block
+ note "note" output.check
+ format.date output
+ fin.entry
+ dfk.stuff
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+ "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+ 'len :=
+ s #1 len substring$ =
+ { s len #1 + global.max$ substring$ }
+ 's
+ if$
+}
+
+INTEGERS { et.al.char.used }
+
+FUNCTION {initialize.et.al.char.used}
+{ #0 'et.al.char.used :=
+}
+
+EXECUTE {initialize.et.al.char.used}
+
+FUNCTION {format.lab.names}
+{ 's :=
+ s num.names$ 'numnames :=
+ numnames #1 >
+ { numnames #4 >
+ { #3 'namesleft := }
+ { numnames 'namesleft := }
+ if$
+ #1 'nameptr :=
+ ""
+ { namesleft #0 > }
+ { nameptr numnames =
+ { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ }
+ { s nameptr "{v{}}{l{}}" format.name$ * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+ numnames #4 >
+ { "{\etalchar{+}}" *
+ #1 'et.al.char.used :=
+ }
+ 'skip$
+ if$
+ }
+ { s #1 "{v{}}{l{}}" format.name$
+ duplicate$ text.length$ #2 <
+ { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
+ 'skip$
+ if$
+ }
+ if$
+}
+
+FUNCTION {author.key.label}
+{ author empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.editor.key.label}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { cite$ #1 #3 substring$ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {author.key.organization.label}
+{ author empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { author format.lab.names }
+ if$
+}
+
+FUNCTION {editor.key.organization.label}
+{ editor empty$
+ { key empty$
+ { organization empty$
+ { cite$ #1 #3 substring$ }
+ { "The " #4 organization chop.word #3 text.prefix$ }
+ if$
+ }
+ { key #3 text.prefix$ }
+ if$
+ }
+ { editor format.lab.names }
+ if$
+}
+
+FUNCTION {calc.label}
+{ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.key.label
+ { type$ "proceedings" =
+ 'editor.key.organization.label
+ { type$ "manual" =
+ 'author.key.organization.label
+ 'author.key.label
+ if$
+ }
+ if$
+ }
+ if$
+ duplicate$
+ year field.or.null purify$ #-1 #2 substring$
+ *
+ 'label :=
+ year field.or.null purify$ #-1 #4 substring$
+ *
+ sortify 'sort.label :=
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+ #1 'nameptr :=
+ ""
+ s num.names$ 'numnames :=
+ numnames 'namesleft :=
+ { namesleft #0 > }
+ { nameptr #1 >
+ { " " * }
+ 'skip$
+ if$
+ s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
+ nameptr numnames = t "others" = and
+ { "et al" * }
+ { t sortify * }
+ if$
+ nameptr #1 + 'nameptr :=
+ namesleft #1 - 'namesleft :=
+ }
+ while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+ "A " #2
+ "An " #3
+ "The " #4 t chop.word
+ chop.word
+ chop.word
+ sortify
+ #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+ { key empty$
+ { "to sort, need author or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+ { editor empty$
+ { key empty$
+ { "to sort, need author, editor, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need author, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { author sort.format.names }
+ if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+ { organization empty$
+ { key empty$
+ { "to sort, need editor, organization, or key in " cite$ * warning$
+ ""
+ }
+ { key sortify }
+ if$
+ }
+ { "The " #4 organization chop.word sortify }
+ if$
+ }
+ { editor sort.format.names }
+ if$
+}
+
+FUNCTION {presort}
+{ calc.label
+ sort.label
+ " "
+ *
+ type$ "book" =
+ type$ "inbook" =
+ or
+ 'author.editor.sort
+ { type$ "proceedings" =
+ 'editor.organization.sort
+ { type$ "manual" =
+ 'author.organization.sort
+ 'author.sort
+ if$
+ }
+ if$
+ }
+ if$
+ *
+ " "
+ *
+ year field.or.null sortify
+ *
+ " "
+ *
+ title field.or.null
+ sort.format.title
+ *
+% DFK throw away stuff above and use cite$ for sort key
+ pop$
+ cite$
+ #1 entry.max$ substring$
+ 'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label last.sort.label next.extra }
+
+INTEGERS { longest.label.width last.extra.num }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+ #0 int.to.chr$ 'last.sort.label :=
+ "" 'next.extra :=
+ #0 'longest.label.width :=
+ #0 'last.extra.num :=
+}
+
+FUNCTION {forward.pass}
+{ last.sort.label sort.label =
+ { last.extra.num #1 + 'last.extra.num :=
+ last.extra.num int.to.chr$ 'extra.label :=
+ }
+ { "a" chr.to.int$ 'last.extra.num :=
+ "" 'extra.label :=
+ sort.label 'last.sort.label :=
+ }
+ if$
+}
+
+FUNCTION {reverse.pass}
+{ next.extra "b" =
+ { "a" 'extra.label := }
+ 'skip$
+ if$
+ label extra.label * 'label :=
+ label width$ longest.label.width >
+ { label 'longest.label :=
+ label width$ 'longest.label.width :=
+ }
+ 'skip$
+ if$
+ extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+% DFK removed code about et.al.char
+% DFK changed to texinfo
+FUNCTION {begin.bib}
+{ "@c bib -> itexi intro" write$ newline$
+ "@itemize" write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+% DFK changed to texinfo
+FUNCTION {end.bib}
+{ newline$
+ "@end itemize" write$ newline$
+ "@c bib -> itexi end" write$ newline$
+}
+
+EXECUTE {end.bib}
--- /dev/null
+# use two {{ for title, but one { for all others.
+
+@inproceedings{hanwen06,
+ title={{LilyPond, Automated music formatting and the Art of Shipping}},
+ author={Han-Wen Nienhuys},
+ booktitle={Forum Internacional Software Livre 2006 (FISL7.0)},
+ year=2006,
+ note={(@uref{http://lilypond.org/web/images/FISL7-slides.pdf, PDF 1095k})}
+}
+
+@mastersthesis{sandberg06,
+ title={{Separating input language and formatter in GNU LilyPond}},
+ author={Erik Sandberg},
+ year=2006,
+ month="March",
+ school={Uppsala University, Department of Information Technology},
+ note={(@uref{http://lilypond.org/web/images/thesis-erik-sandberg, PDF 750k})}
+}
+
+@inproceedings{hanwen03,
+ title={{LilyPond, a system for automated music engraving}},
+ author={Han-Wen Nienhuys and Jan Nieuwenhuizen},
+ booktitle={Colloquium on Musical Informatics (XIV CIM 2003)},
+ year=2003,
+ month=May,
+ location={Firenze, Italy},
+ note={(@uref{http://lilypond.org/web/images/xivcim.pdf, PDF 95k})}
+}
+
+
+
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=13
-PATCH_LEVEL=29
+PATCH_LEVEL=32
MY_PATCH_LEVEL=
VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.29
+VERSION_DEVEL=2.13.31
--- /dev/null
+\version "2.13.31"
+
+\header {
+
+ texidoc = "
+Long titles should be properly centered.
+
+"
+
+ title = \markup \center-column {
+ "How Razorback Jumping Frogs Level Six Piqued Gymnasts"
+ }
+}
+
+\score {
+ s1
+}
\header {
texidoc="
-The label for the lowest fret can be changed in location,
-size, and number type.
+The size, spacing, and symbols used to indicate open and muted strings
+can be changed.
"
}
\new Voice {
\textLengthOn
- %% D major for guitar, terse style
+ %% D major for guitar, terse style
d'1 ^\markup {
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
- %% D major for guitar, terse style
- \once \override TextScript #'fret-diagram-details
- #'top-fret-thickness = #5
- \once \override TextScript #'fret-diagram-details
+ %% D major for guitar, terse style
+ \once \override TextScript #'fret-diagram-details
+ #'top-fret-thickness = #5
+ \once \override TextScript #'fret-diagram-details
#'xo-font-magnification = #0.3
d'1 ^\markup {
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
- %% D major for guitar, terse style
- \override TextScript #'fret-diagram-details
- #'mute-string = #"M"
- \override TextScript #'fret-diagram-details
+ %% D major for guitar, terse style
+ \override TextScript #'fret-diagram-details
+ #'mute-string = #"M"
+ \override TextScript #'fret-diagram-details
#'open-string = #"*"
- \override TextScript #'fret-diagram-details
+ \override TextScript #'fret-diagram-details
#'xo-padding = #0.5
d'1 ^\markup {
\fret-diagram-terse #"x;x;o;2-1;3-2;2-3;"}
--- /dev/null
+\version "2.13.29"
+
+\header {
+ texidoc = "Staves in a PianoStaff remain alive as long as any of
+the staves has something interesting."
+}
+
+\layout {
+ \context {
+ \Staff
+ \RemoveEmptyStaves
+ \override VerticalAxisGroup #'remove-first = ##t
+ }
+}
+
+<<
+ \new Staff { c'1 \break c'1 \break c'1 }
+ \new PianoStaff
+ <<
+ \new Staff { d'1 R1 R1 }
+ \new Staff { R1 e'1 R1 }
+ >>
+>>
+++ /dev/null
-\version "2.13.18"
-
-\header { texidoc =
-
- " Hara-kiri staves kill themselves if they are empty. This
-example really contains three staves, but as they progress, empty ones
-are removed: this example has three staves, but some of them
-disappear: note how the 2nd line only has the bar number 2. (That the
-bar number is printed might be considered a bug, however, the scenario
-of all staves disappearing does not happen in practice.)
-
-Any staff brackets and braces are removed, both in the single staff
-and no staff case.
-
-This example was done with a pianostaff, which has fixed distance
-alignment; this should not confuse the mechanism.
-"
-
-}
-
-\layout {
- ragged-right= ##t
- \context {
- \Staff
- \RemoveEmptyStaves
- }
-}
-
-\transpose c c''
-\context PianoStaff <<
- \new Staff { c4 c c c \break s1 \break c4 c c c \break c c c c}
- \new Staff { d4 d d d s1 s1 s1 }
- \new Staff { e4 e e e s1 e4 e e e s1 }
->>
-
-
-
--- /dev/null
+\version "2.13.18"
+
+\header { texidoc =
+
+ " Hara-kiri staves kill themselves if they are empty. This
+example really contains three staves, but as they progress, empty ones
+are removed: this example has three staves, but some of them
+disappear: note how the 2nd line only has the bar number 2. (That the
+bar number is printed might be considered a bug, however, the scenario
+of all staves disappearing does not happen in practice.)
+
+Any staff brackets and braces are removed, both in the single staff
+and no staff case.
+"
+
+}
+
+\layout {
+ ragged-right= ##t
+ \context {
+ \Staff
+ \RemoveEmptyStaves
+ }
+}
+
+\transpose c c''
+\context GrandStaff <<
+ \new Staff { c4 c c c \break s1 \break c4 c c c \break c c c c}
+ \new Staff { d4 d d d s1 s1 s1 }
+ \new Staff { e4 e e e s1 e4 e e e s1 }
+>>
+
+
+
--- /dev/null
+\version "2.13.31"
+
+\header {
+ texidoc = "
+The @code{\\path} markup command supports the @code{filled}
+property to toggle its fill.
+"
+}
+
+\markup {
+ \override #'(filled . #t) {
+ \path #0.2 #'((moveto 1 1)
+ (lineto 1 6)
+ (curveto 3 8 5 6 1 1)
+ (closepath))
+ }
+}
--- /dev/null
+\version "2.13.31"
+
+\header {
+ texidoc = "
+The @code{\\path} markup command supports the
+@code{line-cap-style} property with values of @code{butt},
+@code{round}, and @code{square}.
+"
+}
+
+myPath =
+#'((moveto 0 0) (lineto 5 0))
+
+\markup {
+ \column {
+ \override #'(line-cap-style . butt) {
+ \path #1 #myPath
+ }
+ \override #'(line-cap-style . round) {
+ \path #1 #myPath
+ }
+ \override #'(line-cap-style . square) {
+ \path #1 #myPath
+ }
+ }
+}
--- /dev/null
+\version "2.13.31"
+
+\header {
+ texidoc = "
+The @code{\\path} markup command supports the
+@code{line-join-style} property with values of @code{bevel},
+@code{round}, and @code{miter}.
+"
+}
+
+myPath =
+#'((moveto 0 0) (rlineto 2 5) (rlineto 2 -5))
+
+\markup {
+ \column {
+ \override #'(line-join-style . bevel) {
+ \path #1 #myPath
+ }
+ \override #'(line-join-style . round) {
+ \path #1 #myPath
+ }
+ \override #'(line-join-style . miter) {
+ \path #1 #myPath
+ }
+ }
+}
--- /dev/null
+\version "2.13.31"
+
+\header {
+ texidoc = "
+The @code{\\path} markup command allows the user to draw
+arbitrary paths using a simple syntax. The two paths below
+should be identical.
+"
+}
+
+\markup {
+ \column {
+ \path #0.2 #'((moveto 1 1)
+ (lineto 1 6)
+ (curveto 3 8 5 6 1 1)
+ (closepath))
+
+ \path #0.2 #'((rmoveto 1 1)
+ (rlineto 0 5)
+ (rcurveto 2 2 4 0 0 -5)
+ (closepath))
+ }
+}
--- /dev/null
+\version "2.13.31"
+
+\header
+{
+
+ texidoc = "
+Nested fill-lines should work properly. In this example, both occurences
+of FOO should be centered.
+
+"
+ title = \markup \column {
+ \fill-line { "|FOO|" }
+ \fill-line { \fill-line { "|FOO|" } }
+ }
+}
+\score {c''}
--- /dev/null
+\version "2.13.30"
+
+\header {
+ texidoc = "
+If a nested property revert follows an override in the same grob for
+a different property, the nested property's default setting should not
+be evicted from the property alist.
+"
+}
+
+\relative c' {
+ c1\startTrillSpan
+ c1\stopTrillSpan
+ \override TrillSpanner #'color = #red
+ \revert TrillSpanner #'(bound-details left text)
+ c1\startTrillSpan
+ c1\stopTrillSpan
+}
--- /dev/null
+\version "2.13.27"
+
+\header {
+ texidoc = "The height of RehearsalMarks is taken into account during page
+breaking."
+}
+
+#(set-default-paper-size "a6")
+
+\book {
+ \repeat unfold 2
+ { \mark \markup \column {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} c1 \break }
+}
\ No newline at end of file
\header {
texidoc = "By default, we start with page 1, which is on the right hand side
of a double page. In this example, auto-first-page-number is set to ##t.
-ALthough the music will fit on a single page, it would require stretching the
-first page badly, so we should automatically set the first page
+Although the first measure could go on a page by itself, this would require
+stretching the first page badly, so we should automatically set the first page
number to 2 in order to avoid a bad page turn."
}
\score {
{
a b c d R1
- \repeat unfold 26 {a4 b c d}
+ \repeat unfold 30 {a4 b c d}
}
}
}
--- /dev/null
+\version "2.13.31"
+
+\header {
+ texidoc = "@code{\partial} works with polymetric staves."
+}
+
+\score {
+ \relative c' <<
+ \new Staff {
+ \partial 4
+ c4 |
+ c4 c c c |
+ }
+ \new Staff {
+ \time 3/4
+ \partial 2
+ c4 c |
+ c4 c c |
+ }
+ >>
+ \layout {
+ \context {
+ \Score
+ \remove "Timing_translator"
+ \remove "Default_bar_line_engraver"
+ }
+ \context {
+ \Staff
+ \consists "Timing_translator"
+ \consists "Default_bar_line_engraver"
+ }
+ }
+}
c1^\markup {
\woodwind-diagram
#'piccolo
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'flute
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'oboe
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'clarinet
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'bass-clarinet
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'saxophone
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'bassoon
- #'(1.0 0.1 #t ())
+ #'()
}
}
c1^\markup {
\woodwind-diagram
#'contrabassoon
- #'(1.0 0.1 #t ())
+ #'()
}
-}
\ No newline at end of file
+}
#(print-keys-verbose 'saxophone)
#(print-keys-verbose 'baritone-saxophone)
#(print-keys-verbose 'bassoon)
-#(print-keys-verbose 'contrabassoon)
\ No newline at end of file
+#(print-keys-verbose 'contrabassoon)
" line without special bar lines.\n"
"\n"
"@code{S|:} and @code{:|S} are used for repeat/segno combinations that are"
- " separated at line breaks. Alternatively, @code{.S|:} and @code{:|S.}"
+ " separated at line breaks. Alternatively, @code{.S|:} and @code{:|S.}"
" may be used which combine repeat signs and segno at the same line in"
- " case of a line break. @code{:|S|:} is a combination of a left repeat"
+ " case of a line break. @code{:|S|:} is a combination of a left repeat"
" (@code{:|}), a segno (@code{S}) and a right repeat @code{|:} which"
" splits before the segno at line breaks; @code{:|S.|:} splits after"
" the segno sign.\n"
SCM title_spec = paper->c_variable ("between-title-spacing");
padding_ = 0;
title_padding_ = 0;
+ min_distance_ = 0;
+ title_min_distance_ = 0;
Page_layout_problem::read_spacing_spec (spec, &padding_, ly_symbol2scm ("padding"));
Page_layout_problem::read_spacing_spec (title_spec, &title_padding_, ly_symbol2scm ("padding"));
Page_layout_problem::read_spacing_spec (spec, &min_distance_, ly_symbol2scm ("minimum-distance"));
LY_DEFINE (ly_get_context_mods,
"ly:get-context-mods",
1, 0, 0, (SCM contextmod),
- "Returns the list of context modifications stored in @var{contextmod}.")
+ "Returns the list of context modifications stored in"
+ " @var{contextmod}.")
{
Context_mod *tr = unsmob_context_mod (contextmod);
LY_ASSERT_SMOB (Context_mod, contextmod, 1);
LY_DEFINE (ly_add_context_mod,
"ly:add-context-mod",
2, 0, 0, (SCM contextmods, SCM modification),
- "Adds the given context @var{modification} to the list @var{contextmods} of context modifications.")
+ "Adds the given context @var{modification} to the list"
+ " @var{contextmods} of context modifications.")
{
Context_mod *ctxmod = unsmob_context_mod (contextmods);
LY_ASSERT_SMOB (Context_mod, contextmods, 1);
SCM d = me->get_property ("direction");
if (d == ly_symbol2scm ("calculation-in-progress"))
{
- programming_error ("Grob direction requested while calculation in progress. ");
+ programming_error ("Grob direction requested while calculation in"
+ " progress. ");
return UP;
}
if (!is_direction (d))
LY_DEFINE (ly_engraver_make_grob, "ly:engraver-make-grob",
3, 0, 0, (SCM engraver, SCM grob_name, SCM cause),
- "Creates a grob originating from given engraver instance, "
- "with give @code{grob_name}, a symbol. "
- "@code{cause} should either be another grob "
- "or a music event.")
+ "Create a grob originating from given @var{engraver} instance,"
+ " with given @var{grob-name}, a symbol."
+ " @var{cause} should either be another grob"
+ " or a music event.")
{
LY_ASSERT_TYPE (unsmob_engraver, engraver, 1);
LY_ASSERT_TYPE (ly_is_symbol, grob_name, 2);
return g->self_scm ();
}
+LY_DEFINE (ly_engraver_announce_end_grob, "ly:engraver-announce-end-grob",
+ 3, 0, 0, (SCM engraver, SCM grob, SCM cause),
+ "Announce the end of a grob (i.e., the end of a spanner)"
+ " originating from given @var{engraver} instance, with"
+ " @var{grob} being a grob. @var{cause} should either"
+ " be another grob or a music event.")
+{
+ LY_ASSERT_TYPE (unsmob_engraver, engraver, 1);
+ LY_ASSERT_SMOB (Grob, grob, 2);
+ LY_ASSERT_TYPE (ly_is_grob_cause, cause, 3);
+
+ unsmob_engraver (engraver)->
+ announce_end_grob (unsmob_grob (grob), cause);
+
+ return SCM_UNSPECIFIED;
+}
LY_DEFINE (ly_success, "ly:success",
1, 0, 1, (SCM str, SCM rest),
- "A Scheme callable function to issue a success message @code{str}."
- " The message is formatted with @code{format} and @code{rest}.")
+ "A Scheme callable function to issue a success message @var{str}."
+ " The message is formatted with @code{format} and @var{rest}.")
{
LY_ASSERT_TYPE (scm_is_string, str, 1);
str = scm_simple_format (SCM_BOOL_F, str, rest);
}
LY_DEFINE (ly_warning, "ly:warning",
1, 0, 1, (SCM str, SCM rest),
- "A Scheme callable function to issue the warning @code{str}."
- " The message is formatted with @code{format} and @code{rest}.")
+ "A Scheme callable function to issue the warning @var{str}."
+ " The message is formatted with @code{format} and @var{rest}.")
{
LY_ASSERT_TYPE (scm_is_string, str, 1);
str = scm_simple_format (SCM_BOOL_F, str, rest);
LY_DEFINE (ly_format, "ly:format",
1, 0, 1, (SCM str, SCM rest),
- "LilyPond specific format, supporting @code{~a} and @code{~[0-9]f}. "
- "Basic support for @code{~s} is also provided.")
+ "LilyPond specific format, supporting @code{~a} and @code{~[0-9]f}."
+ " Basic support for @code{~s} is also provided.")
{
LY_ASSERT_TYPE (scm_is_string, str, 1);
if (scm_is_pair (rest))
programming_error (string (__FUNCTION__)
- + ": too many arguments");
+ + ": too many arguments");
vsize len = 0;
for (vsize i = 0; i < results.size (); i++)
Grob *refp = common_refpoint_of_array (ga->array (), gr, Axis (scm_to_int (axis)));
return refp ? refp->self_scm () : SCM_BOOL_F;
}
+
+LY_DEFINE (ly_grob_chain_callback, "ly:grob-chain-callback",
+ 3, 0, 0, (SCM grob, SCM proc, SCM sym),
+ "Find the callback that is stored as property"
+ " @var{sym} of grob @var{grob} and chain @var{proc}"
+ " to the head of this, meaning that it is called"
+ " using @var{grob} and the previous callback's result.")
+{
+ Grob *gr = unsmob_grob (grob);
+
+ LY_ASSERT_SMOB (Grob, grob, 1);
+ LY_ASSERT_TYPE (ly_is_procedure, proc, 2);
+ LY_ASSERT_TYPE (ly_is_symbol, sym, 3);
+
+ chain_callback (gr, proc, sym);
+ return SCM_UNSPECIFIED;
+}
bool
Hara_kiri_group_spanner::request_suicide (Grob *me, int start, int end)
+{
+ if (!request_suicide_alone (me, start, end))
+ return false;
+
+ extract_grob_set (me, "keep-alive-with", friends);
+ for (vsize i = 0; i < friends.size (); ++i)
+ if (friends[i]->is_live () && !request_suicide_alone (friends[i], start, end))
+ return false;
+
+ return true;
+}
+
+bool
+Hara_kiri_group_spanner::request_suicide_alone (Grob *me, int start, int end)
{
if (!to_boolean (me->get_property ("remove-empty")))
return false;
/* properties */
"items-worth-living "
"important-column-ranks "
+ "keep-alive-with "
"remove-empty "
"remove-first "
);
DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));
DECLARE_GROB_INTERFACE();
static bool request_suicide (Grob *me, int start, int end);
+ static bool request_suicide_alone (Grob *me, int start, int end);
static void consider_suicide (Grob *me);
static void add_interesting_item (Grob *me, Grob *n);
};
{
public:
typedef bool (*Break_predicate) (Grob *);
+ typedef bool (*Prob_break_predicate) (Prob *);
typedef vector<vsize> Line_division;
/*
*/
virtual SCM solve () = 0;
- Page_breaking (Paper_book *pb, Break_predicate);
+ Page_breaking (Paper_book *pb, Break_predicate, Prob_break_predicate);
virtual ~Page_breaking ();
bool ragged () const;
vector<Line_details> cached_line_details_;
vector<Line_details> uncompressed_line_details_;
+ mutable vector<Real> page_height_cache_;
+ mutable vector<Real> last_page_height_cache_;
+
vector<Break_position> chunk_list (vsize start, vsize end);
Line_division system_count_bounds (vector<Break_position> const &chunks, bool min);
void line_breaker_args (vsize i,
Page_spacing_result space_systems_on_2_pages (vsize configuration_index, vsize first_page_num);
Page_spacing_result finalize_spacing_result (vsize configuration_index, Page_spacing_result);
void create_system_list ();
- void find_chunks_and_breaks (Break_predicate);
+ void find_chunks_and_breaks (Break_predicate, Prob_break_predicate);
SCM make_page (int page_num, bool last) const;
SCM get_page_configuration (SCM systems, int page_num, bool ragged, bool last);
SCM draw_page (SCM systems, SCM config, int page_num, bool last);
public:
Page_spacer (vector<Line_details> const &lines, vsize first_page_num, Page_breaking const*);
Page_spacing_result solve (vsize page_count);
+ Page_spacing_result solve ();
private:
struct Page_spacing_node
penalty_ = infinity_f;
prev_ = VPOS;
system_count_status_ = SYSTEM_COUNT_OK;
+ page_ = 0;
}
Real demerits_;
Real force_;
Real penalty_;
vsize prev_;
+ vsize page_;
int system_count_status_;
};
Page_breaking const *breaker_;
vsize first_page_num_;
vector<Line_details> lines_;
+
+ // If a page-count is requested, we use state_, which
+ // is indexed by page*system, for our dynamic programming
+ // intermediate storage. Otherwise, we use simple_state_,
+ // which is indexed only by system.
Matrix<Page_spacing_node> state_;
+ vector<Page_spacing_node> simple_state_;
vsize max_page_count_;
bool ragged_;
--- /dev/null
+/*
+ This file is part of LilyPond, the GNU music typesetter.
+
+ Copyright (C) 2010 Joe Neeman <joeneeman@gmail.com>
+
+ 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 "context.hh"
+#include "dispatcher.hh"
+#include "engraver.hh"
+#include "grob.hh"
+#include "grob-array.hh"
+
+#include "translator.icc"
+
+class Keep_alive_together_engraver: public Engraver
+{
+ vector<Grob*> group_spanners_;
+
+public:
+ TRANSLATOR_DECLARATIONS (Keep_alive_together_engraver);
+ DECLARE_ACKNOWLEDGER (hara_kiri_group_spanner);
+
+ virtual void finalize ();
+};
+
+Keep_alive_together_engraver::Keep_alive_together_engraver ()
+{
+}
+
+void
+Keep_alive_together_engraver::acknowledge_hara_kiri_group_spanner (Grob_info i)
+{
+ group_spanners_.push_back (i.grob ());
+}
+
+void
+Keep_alive_together_engraver::finalize ()
+{
+ for (vsize i = 0; i < group_spanners_.size (); ++i)
+ {
+ SCM grob_array_scm = Grob_array::make_array ();
+ Grob_array *ga = unsmob_grob_array (grob_array_scm);
+
+ // It would make Hara_kiri_group_spanner::request_suicide a _little_
+ // faster if we removed each grob from its own array. It seems
+ // unnecessary for now, though.
+ ga->set_array (group_spanners_);
+ group_spanners_[i]->set_object ("keep-alive-with", grob_array_scm);
+ }
+}
+
+ADD_ACKNOWLEDGER (Keep_alive_together_engraver, hara_kiri_group_spanner);
+
+ADD_TRANSLATOR (Keep_alive_together_engraver,
+ /* doc */
+ "This engraver collects all @code{Hara_kiri_group_spanner}s "
+ "that are created in contexts at or below its own. "
+ "These spanners are then tied together so that one will "
+ "be removed only if all are removed. For example, "
+ "if a @code{StaffGroup} uses this engraver, then the staves "
+ "in the group will all be visible as long as there is a note "
+ "in at least one of them.",
+
+ /* create */
+ "",
+
+ /* read */
+ "",
+
+ /* write */
+ ""
+ );
{
if (!finished_primitives_.size ())
{
- finished_ligature_->programming_error ("Ligature_engraver::stop_translation_timestep (): "
- "junking empty ligature");
+ finished_ligature_->programming_error (
+ "Ligature_engraver::stop_translation_timestep ():"
+ " junking empty ligature");
}
else
{
SCM primitive_scm = me->get_property ("primitive");
if (primitive_scm == SCM_EOL)
{
- programming_error ("Mensural_ligature: "
- "undefined primitive -> ignoring grob");
+ programming_error ("Mensural_ligature:"
+ " undefined primitive -> ignoring grob");
return Lookup::blank (Box (Interval (0, 0), Interval (0, 0)));
}
int primitive = scm_to_int (primitive_scm);
out = brew_flexa (me, delta_pitch, false, width, thickness);
break;
default:
- programming_error (_ ("Mensural_ligature: "
- "unexpected case fall-through"));
+ programming_error (_ ("Mensural_ligature:"
+ " unexpected case fall-through"));
return Lookup::blank (Box (Interval (0, 0), Interval (0, 0)));
}
#include "page-spacing.hh"
#include "paper-book.hh"
-static bool
-is_break (Grob *)
-{
- return false;
-}
-
Minimal_page_breaking::Minimal_page_breaking (Paper_book *pb)
- : Page_breaking (pb, is_break)
+ : Page_breaking (pb, 0, 0)
{
}
LY_DEFINE (ly_make_music_function, "ly:make-music-function", 2, 0, 0,
(SCM signature, SCM func),
"Make a function to process music, to be used for the"
- " parser. @code{func} is the function, and @code{signature}"
- " describes its arguments. @code{signature} is a list"
+ " parser. @var{func} is the function, and @var{signature}"
+ " describes its arguments. @var{signature} is a list"
" containing either @code{ly:music?} predicates or other type"
" predicates.")
{
/*
PROP_PATH should be big-to-small ordering
*/
-SCM
+SCM
nested_property_alist (SCM alist, SCM prop_path, SCM value)
{
SCM new_value = SCM_BOOL_F;
Recursively purge alist of prop_path:
revert ((sym, val) : L, [sym]) = L
- revert ((sym, val) : L, sym : props) =
+ revert ((sym, val) : L, sym : props) =
(sym, revert (val, rest-props)) ++ L
revert ((sym, val) : L, p ++ rest-props) =
(sym, val) : revert (L, p ++ rest-props)
*/
-SCM
+SCM
nested_property_revert_alist (SCM alist, SCM prop_path)
{
+ int copy_count = 0;
+ bool drop = false;
assert(scm_is_pair (prop_path));
-
+
SCM wanted_sym = scm_car (prop_path);
SCM new_list = SCM_EOL;
{
SCM sub_sym = scm_caar (s);
SCM old_val = scm_cdar (s);
+ drop = false;
if (sub_sym == wanted_sym)
{
/* nothing changed: drop newly constructed list. */
if (old_val == new_val)
return alist;
-
+
*tail = scm_acons (sub_sym, new_val, SCM_EOL);
tail = SCM_CDRLOC(*tail);
+ *tail = scm_cdr (s);
+ return new_list;
}
else
{
- /* old value is dropped. */
+ /* old value should be dropped only if we have another copy of it in the alist */
+ copy_count++;
+ /*
+ Only drop the first instance found.
+ the overridden value is always the first
+ if this was the only copy, we will return
+ the original list anyways so it is not relevant
+ if we drop this pair
+ */
+ if (copy_count == 1)
+ drop = true;
}
-
- *tail = scm_cdr (s);
- return new_list;
+ /* we now iterate over every item */
}
-
- *tail = scm_acons (sub_sym, old_val, SCM_EOL);
- tail = SCM_CDRLOC (*tail);
+ /*
+ Make a new list with every item
+ except for the eventual dropped one
+ */
+ if (!drop)
+ {
+ *tail = scm_acons (sub_sym, old_val, SCM_EOL);
+ tail = SCM_CDRLOC (*tail);
+ }
}
- /* Wanted symbol not found: drop newly constructed list. */
- return alist;
+ /*
+ If we find more than one copy of the property
+ push the new list, else it means we are trying to
+ revert the original value
+ */
+ if (copy_count > 1)
+ return new_list;
+ else
+ return alist;
}
SCM alist = me->get_property (scm_car (big_to_small));
alist = nested_property_alist (alist, scm_cdr (big_to_small), value);
-
+
me->set_property (scm_car (big_to_small), alist);
}
#include "prob.hh"
#include "system.hh"
-static bool
-is_break (Grob *)
-{
- return false;
-}
-
Optimal_page_breaking::Optimal_page_breaking (Paper_book *pb)
- : Page_breaking (pb, is_break)
+ : Page_breaking (pb, 0, 0)
{
}
for (vsize i = 0; i < current_configuration_count (); i++)
{
- vsize min_p_count = min_page_count (i, first_page_num);
Page_spacing_result cur;
- if (min_p_count == page_count || scm_is_integer (forced_page_count))
+ if (scm_is_integer (forced_page_count))
cur = space_systems_on_n_pages (i, page_count, first_page_num);
else
- cur = space_systems_on_n_or_one_more_pages (i, page_count-1, first_page_num, 0);
+ cur = space_systems_on_best_pages (i, first_page_num);
if (cur.demerits_ < best_for_this_sys_count.demerits_)
{
if (min_p_count > page_count)
continue;
- else
+ else if (scm_is_integer (forced_page_count))
cur = space_systems_on_n_pages (i, page_count, first_page_num);
+ else
+ cur = space_systems_on_best_pages (i, first_page_num);
if (cur.demerits_ < best.demerits_)
{
return sys + 1; /* this page starts with a new System_spec */
}
-Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break)
+Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break, Prob_break_predicate prob_break)
{
book_ = pb;
system_count_ = 0;
}
create_system_list ();
- find_chunks_and_breaks (is_break);
+ find_chunks_and_breaks (is_break, prob_break);
}
Page_breaking::~Page_breaking ()
Real
Page_breaking::page_height (int page_num, bool last) const
{
- SCM mod = scm_c_resolve_module ("scm page");
- SCM page = make_page (page_num, last);
- SCM calc_height = scm_c_module_lookup (mod, "calc-printable-height");
- calc_height = scm_variable_ref (calc_height);
+ // The caches allow us to store the page heights for any
+ // non-negative page numbers. We use a negative value in the
+ // cache to signal that that position has not yet been initialized.
+ // This means that we won't cache properly if page_num is negative or
+ // if calc_height returns a negative number. But that's likely to
+ // be rare, so it shouldn't affect performance.
+ vector<Real>& cache = last ? last_page_height_cache_ : page_height_cache_;
+ if (page_num >= 0 && (int) cache.size () > page_num && cache[page_num] >= 0)
+ return cache[page_num];
+ else
+ {
+ SCM mod = scm_c_resolve_module ("scm page");
+ SCM page = make_page (page_num, last);
+ SCM calc_height = scm_c_module_lookup (mod, "calc-printable-height");
+ calc_height = scm_variable_ref (calc_height);
- SCM height = scm_apply_1 (calc_height, page, SCM_EOL);
- return scm_to_double (height);
+ SCM height_scm = scm_apply_1 (calc_height, page, SCM_EOL);
+ Real height = scm_to_double (height_scm);
+
+ if (page_num >= 0)
+ {
+ if ((int) cache.size () <= page_num)
+ cache.resize (page_num + 1, -1);
+ cache[page_num] = height;
+ }
+ return height;
+ }
}
SCM
}
void
-Page_breaking::find_chunks_and_breaks (Break_predicate is_break)
+Page_breaking::find_chunks_and_breaks (Break_predicate is_break, Prob_break_predicate prob_is_break)
{
SCM force_sym = ly_symbol2scm ("force");
}
bool last = (j == cols.size () - 1);
- bool break_point = is_break (cols[j]);
+ bool break_point = is_break && is_break (cols[j]);
bool chunk_end = cols[j]->get_property ("page-break-permission") == force_sym;
Break_position cur_pos = Break_position (i,
line_breaker_columns.size (),
}
else
{
- /* TODO: we want some way of applying Break_p to a prob? */
- if (i == system_specs_.size () - 1)
+ bool break_point = prob_is_break && prob_is_break (system_specs_[i].prob_);
+ if (break_point || i == system_specs_.size () - 1)
breaks_.push_back (Break_position (i));
chunks_.push_back (Break_position (i));
}
}
cached_line_details_ = compress_lines (uncompressed_line_details_);
+ compute_line_heights ();
}
}
int line_count = 0;
cache_line_details (configuration);
- compute_line_heights ();
if (cached_line_details_.size ())
cur_page_height -= min_whitespace_at_top_of_page (cached_line_details_[0]);
Page_spacing_result
Page_breaking::space_systems_on_best_pages (vsize configuration, vsize first_page_num)
{
- vsize min_p_count = min_page_count (configuration, first_page_num);
-
cache_line_details (configuration);
Page_spacer ps (cached_line_details_, first_page_num, this);
- Page_spacing_result best = ps.solve (min_p_count);
- for (vsize i = min_p_count+1; i <= cached_line_details_.size (); i++)
- {
- Page_spacing_result cur = ps.solve (i);
- if (cur.demerits_ < best.demerits_)
- best = cur;
- }
-
- Page_spacing_result ret = finalize_spacing_result (configuration, best);
- return ret;
+ return finalize_spacing_result (configuration, ps.solve ());
}
Page_spacing_result
Page_spacing space (page_height (first_page_num, false), this);
cache_line_details (configuration);
- compute_line_heights ();
for (vsize line = 0; line < cached_line_details_.size (); line++)
{
Real prev_force = space.force_;
solution_ = spacer.spring_positions ();
if (!spacer.fits ())
- warning (_ ("couldn't fit music on page"));
+ warning (_f ("couldn't fit music on page: overflow is %f",
+ spacer.configuration_length(spacer.force()) - page_height_));
}
// The solution_ vector stores the position of every live VerticalAxisGroup
ragged_last_ = breaker->is_last () && breaker->ragged_last ();
}
+Page_spacing_result
+Page_spacer::solve ()
+{
+ if (simple_state_.empty ())
+ {
+ simple_state_.resize (lines_.size ());
+ for (vsize i = 0; i < lines_.size (); ++i)
+ calc_subproblem (VPOS, i);
+ }
+
+ Page_spacing_result ret;
+ vsize system = lines_.size () - 1;
+ while (system != VPOS)
+ {
+ Page_spacing_node const& cur = simple_state_[system];
+ vsize system_count = (cur.prev_ == VPOS) ? system + 1 : system - cur.prev_;
+
+ ret.force_.push_back (cur.force_);
+ ret.systems_per_page_.push_back (system_count);
+ ret.demerits_ += cur.force_ * cur.force_;
+ system = cur.prev_;
+ }
+
+ reverse (ret.force_);
+ reverse (ret.systems_per_page_);
+ return ret;
+}
+
Page_spacing_result
Page_spacer::solve (vsize page_count)
{
// we have previously called calc_subproblem(page-1, k) for every k < LINE.
//
// This algorithm is similar to the constrained-breaking algorithm.
+//
+// If page == VPOS, we act on simple_state_ instead of state_. This is useful if
+// we don't want to constrain the number of pages that the solution has. In this
+// case, the algorithm looks more like the page-turn-page-breaking algorithm. But
+// the subproblems look similar for both, so we reuse this method.
bool
Page_spacer::calc_subproblem (vsize page, vsize line)
{
bool last = line == lines_.size () - 1;
- Page_spacing space (breaker_->page_height (page + first_page_num_, last),
+
+ // Note: if page == VPOS then we don't actually know yet which page number we're
+ // working on, so we have to recalculate the page height in the loop. In that case,
+ // the algorithm may not be optimal: if our page has a very large header then perhaps
+ // we need to look ahead a few systems in order to find the best solution. But
+ // we won't, because we stop once we overfill the page with the large header.
+ vsize page_num = page == VPOS ? 0 : page;
+ Page_spacing space (breaker_->page_height (page_num + first_page_num_, last),
breaker_);
- Page_spacing_node &cur = state_.at (line, page);
+ Page_spacing_node &cur = page == VPOS ? simple_state_[line] : state_.at (line, page);
bool ragged = ragged_ || (ragged_last_ && last);
int line_count = 0;
- for (vsize page_start = line+1; page_start > page && page_start--;)
+ for (vsize page_start = line+1; page_start > page_num && page_start--;)
{
- Page_spacing_node const *prev = page > 0 ? &state_.at (page_start-1, page-1) : 0;
+ Page_spacing_node const *prev = 0;
+
+ if (page == VPOS)
+ {
+ if (page_start > 0)
+ {
+ prev = &simple_state_[page_start-1];
+ space.resize (breaker_->page_height (prev->page_ + 1, last));
+ }
+ else
+ space.resize (breaker_->page_height (first_page_num_, last));
+ }
+ else if (page > 0)
+ prev = &state_.at (page_start-1, page-1);
space.prepend_system (lines_[page_start]);
cur.system_count_status_ = breaker_->line_count_status (line_count)
| (prev ? prev->system_count_status_ : 0);
cur.prev_ = page_start - 1;
+ cur.page_ = prev ? prev->page_ + 1 : first_page_num_;
}
}
#include "system.hh"
#include "warn.hh"
+template<typename T>
static bool
-is_break (Grob *g)
+is_break (T *g)
{
bool turnable = scm_is_symbol (g->get_property ("page-turn-permission"));
}
Page_turn_page_breaking::Page_turn_page_breaking (Paper_book *pb)
- : Page_breaking (pb, is_break)
+ : Page_breaking (pb, is_break<Grob>, is_break<Prob>)
{
}
if (start == 0 && end == 1
&& this_start_best.first_page_number_ == 1
&& this_start_best.page_count_ > 1)
- warning (_ ("cannot fit the first page turn onto a single page. "
- "Consider setting first-page-number to an even number."));
+ warning (_ ("cannot fit the first page turn onto a single page."
+ " Consider setting first-page-number to an even number."));
if (this_start_best.demerits_ < best.demerits_)
best = this_start_best;
}
| PARTIAL duration_length {
- Moment m = - unsmob_duration ($2)->get_length ();
- $$ = MAKE_SYNTAX ("property-operation", @$, SCM_BOOL_F, ly_symbol2scm ("Timing"), ly_symbol2scm ("PropertySet"), ly_symbol2scm ("measurePosition"), m.smobbed_copy ());
- $$ = MAKE_SYNTAX ("context-specification", @$, ly_symbol2scm ("Score"), SCM_BOOL_F, $$, SCM_EOL, SCM_BOOL_F);
+ $$ = MAKE_SYNTAX ("partial", @$, $2);
}
| TIME_T fraction {
$$ = scm_apply_2 (proc, scm_car ($2), scm_cdr ($2), SCM_EOL);
}
| MARK scalar {
- SCM proc = ly_lily_module_constant ("make-mark-set");
-
- $$ = scm_call_1 (proc, $2);
+ $$ = MAKE_SYNTAX ("make-mark-set", @$, $2);
}
;
ADD_TRANSLATOR (Scheme_engraver,
/* doc */
- "Implement engravers in Scheme. Interprets arguments to @code{\\consists} "
- "as callbacks. ",
+ "Implement engravers in Scheme. Interprets arguments to"
+ " @code{\\consists} as callbacks.",
/* create */
"",
if (art == SCM_BOOL_F)
{
/* FIXME: */
- warning (_ ("do not know how to interpret articulation: "));
- warning (_ ("scheme encoding: "));
+ warning (_ ("do not know how to interpret articulation:"));
+ warning (_ (" scheme encoding: "));
scm_write (art_type, scm_current_error_port ());
message ("");
return;
bool touches = right_stickout - left_stickout + cur_dist[d] < 0.0;
Real dist = 0.0;
- /* we set a distance for the line-starter column even if it's non-broken counterpart
+ /* we set a distance for the line-starter column even if its non-broken counterpart
doesn't touch the right column. */
if (lb)
Separation_item::set_distance (lb, r_col, padding);
if (j == i-1)
cur_dist[d] = distances[j];
+ cur_dist[d] = max (cur_dist[d], dist);
done = done && !touches;
}
while (flip (&d) != LEFT && rb);
ADD_INTERFACE (Tie_column,
- "Object that sets directions of multiple ties in a tied chord.",
+ "Object that sets directions of multiple ties in a tied"
+ " chord.",
/* properties */
"positioning-done "
{
if (!primitives.size ())
{
- programming_error ("Vaticana_ligature: "
- "empty ligature [ignored]");
+ programming_error ("Vaticana_ligature:"
+ " empty ligature [ignored]");
return 0.0;
}
{
if (!prev_primitive)
{
- primitive->programming_error ("vaticana ligature: add-join: "
- "missing previous primitive");
+ primitive->programming_error ("Vaticana ligature: add-join:"
+ " missing previous primitive");
}
else
{
if (prefix_set & ~PES_OR_FLEXA)
{
string prefs = Gregorian_ligature::prefixes_to_str (primitive);
- primitive->warning (_f ("ignored prefix (es) `%s' of this head according "
- "to restrictions of the selected ligature style",
+ primitive->warning (_f ("ignored prefix(es) `%s' of this head"
+ " according to restrictions of the selected"
+ " ligature style",
prefs.c_str ()));
}
}
if (pitch == new_pitch)
{
primitive.grob ()->
- warning ("Ambiguous use of dots in ligature: there are "
- "multiple dotted notes with the same pitch. "
- "The ligature should be split.");
+ warning ("Ambiguous use of dots in ligature: there are"
+ " multiple dotted notes with the same pitch."
+ " The ligature should be split.");
return; // supress multiple identical warnings
}
}
}
else if (augmented_primitives_.size () > 0)
{
- primitive->warning ("This ligature has a dotted head followed by "
- "a non-dotted head. The ligature should be "
- "split after the last dotted head before "
- "this head.");
+ primitive->warning ("This ligature has a dotted head followed by"
+ " a non-dotted head. The ligature should be"
+ " split after the last dotted head before"
+ " this head.");
}
if (is_stacked_head (prefix_set, context_info))
voices/staves also may want to set this property. */
Item *first_primitive = dynamic_cast<Item *> (primitives[0].grob ());
Paper_column *paper_column = first_primitive->get_column ();
- paper_column->warning (_f ("Vaticana_ligature_engraver: "
- "setting `spacing-increment = %f': ptr =%ul",
+ paper_column->warning (_f ("Vaticana_ligature_engraver:"
+ " setting `spacing-increment = %f': ptr =%ul",
ligature_width, paper_column));
paper_column->
set_property ("forced-spacing", scm_from_double (ligature_width));
ADD_ACKNOWLEDGER (Vaticana_ligature_engraver, note_head);
ADD_TRANSLATOR (Vaticana_ligature_engraver,
/* doc */
- "Handle ligatures by glueing special ligature heads together.",
+ "Handle ligatures by glueing special ligature heads"
+ " together.",
/* create */
"VaticanaLigature "
\consists "Instrument_name_engraver"
\consists "Vertical_align_engraver"
+ \consists "Keep_alive_together_engraver"
topLevelAlignment = ##f
\override StaffGrouper #'between-staff-spacing #'stretchability = #5
#(define book-filename #f)
#(define book-output-suffix #f)
#(use-modules (scm clip-region))
+
+#(if (ly:get-option 'include-settings)
+ (ly:parser-include-string parser
+ (format "\\include \"~a\"" (ly:get-option 'include-settings))))
+
\maininput
%% there is a problem at the end of the input file
CREATE_WEBLINKS=python $(script-dir)/create-weblinks-itexi.py
MASS_LINK=python $(script-dir)/mass-link.py
WEB_POST=python $(script-dir)/website_post.py
+WEB_BIBS=python $(script-dir)/bib2texi.py
SERVER_FILES=$(top-src-dir)/Documentation/web/server/
done; \
done;
+website-bibs: website-version
+ BSTINPUTS=$(top-src-dir)/Documentation/web/ \
+ $(WEB_BIBS) -s web \
+ -o $(OUT)/others-did.itexi \
+ $(top-src-dir)/Documentation/web/others-did.bib
+ BSTINPUTS=$(top-src-dir)/Documentation/web/ \
+ $(WEB_BIBS) -s web \
+ -o $(OUT)/we-wrote.itexi \
+ $(top-src-dir)/Documentation/web/we-wrote.bib
-website-texinfo: website-version website-xrefs
+website-texinfo: website-version website-xrefs website-bibs
for l in '' $(WEB_LANGS); do \
if test -n "$$l"; then \
langopt=--lang="$$l"; \
define_pixels (accreg_dot_size, accreg_linethickness, accreg_lh);
-fet_beginchar ("accDiscant", "accDiscant")
+fet_beginchar ("accordion register discant", "discant")
save r, pat, lh, lt;
path pat;
fet_endchar;
-fet_beginchar ("accDot", "accDot")
+fet_beginchar ("accordion register dot", "dot")
set_char_box (accreg_dot_size# / 2, accreg_dot_size# / 2,
accreg_dot_size# / 2, accreg_dot_size# / 2);
fet_endchar;
-fet_beginchar ("accFreebase", "accFreebase")
+fet_beginchar ("accordion register freebass", "freebass")
save r, lh, lt;
r# = accreg_lh#;
fet_endchar;
-fet_beginchar ("accStdbase", "accStdbase")
+fet_beginchar ("accordion register stdbass", "stdbass")
save r, p, lh, lt;
path pat;
fet_endchar;
-fet_beginchar ("accBayanbase", "accBayanbase")
+fet_beginchar ("accordion register bayanbass", "bayanbass")
save lh, lt;
lh = vround accreg_lh;
enddef;
-fet_beginchar ("accOldEE", "accOldEE")
+fet_beginchar ("accordion oldEE", "oldEE")
save r, pp, ir, lh, lt, stroke_width;
r# = staff_space#;
fi;
fet_endchar;
-fet_beginchar ("Accordion push", "push");
+fet_beginchar ("accordion push", "push");
save width, height;
height# := 2.0 staff_space# + 3.0 stafflinethickness#;
fet_endchar;
-fet_beginchar ("Accordion pull", "pull");
+fet_beginchar ("accordion pull", "pull");
save width, height;
height# := 2.0 staff_space# + 3.0 stafflinethickness#;
grestore
} bind def
-/draw_connected_shape
-{
- gsave
- currentpoint translate
- /filled exch def
- /connect exch def
- /savematrix matrix currentmatrix def
- setlinewidth
- scale
- /arlen exch def
- arlen {
- /shlen exch def
- shlen { } repeat shlen 2 eq { lineto } { curveto } ifelse
- } repeat connect { closepath } if
- savematrix setmatrix filled { stroke_and_fill } { stroke } ifelse
- grestore
-} bind def
-
/draw_line % dx dy x1 y1 thickness draw_line
{
setlinewidth % dx dy x1 y1
s = s.replace ('%', '%%')
s = hack_urls (s, prefix)
s = add_header (s, prefix)
+ # make the "return to doc index" work with the online website.
+ if target == 'online':
+ if 'Documentation/contributor' in prefix:
+ s = s.replace (
+ 'href=\"../..//Documentation/web/manuals.html\"',
+ 'href=\"../../../../website/development.html\"')
+ else:
+ s = s.replace (
+ 'href=\"../..//Documentation/web/manuals.html\"',
+ 'href=\"../../../../website/manuals.html\"')
### add footer
if footer_tag_re.search (s) == None:
import re
import os
import copy
-from subprocess import Popen, PIPE
+# TODO: We are using os.popen3, which has been deprecated since python 2.6. The
+# suggested replacement is the Popen function of the subprocess module.
+# Unfortunately, on windows this needs the msvcrt module, which doesn't seem
+# to be available in GUB?!?!?!
+# from subprocess import Popen, PIPE
progress = ly.progress
warning = ly.warning
os.makedirs (directory)
filename = path + '.ly'
if os.path.exists (filename):
- diff_against_existing = self.filter_pipe (self.full_ly (), 'diff -u %s -' % filename)
- if diff_against_existing:
+ existing = open (filename, 'r').read ()
+
+ if self.relevant_contents (existing) != self.relevant_contents (self.full_ly ()):
warning ("%s: duplicate filename but different contents of orginal file,\n\
printing diff against existing file." % filename)
- ly.stderr_write (diff_against_existing)
+ ly.stderr_write (self.filter_pipe (self.full_ly (), 'diff -u %s -' % filename))
else:
out = file (filename, 'w')
out.write (self.full_ly ())
if self.global_options.verbose:
progress (_ ("Opening filter `%s'\n") % cmd)
- #(stdin, stdout, stderr) = os.popen3 (cmd)
-
- p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
- (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
+ # TODO: Use Popen once we resolve the problem with msvcrt in Windows:
+ (stdin, stdout, stderr) = os.popen3 (cmd)
+ # p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
+ # (stdin, stdout, stderr) = (p.stdin, p.stdout, p.stderr)
stdin.write (input)
status = stdin.close ()
signal = 0x0f & status
if status or (not output and error):
exit_status = status >> 8
- error (_ ("`%s' failed (%d)") % (cmd, exit_status))
- error (_ ("The error log is as follows:"))
+ ly.error (_ ("`%s' failed (%d)") % (cmd, exit_status))
+ ly.error (_ ("The error log is as follows:"))
ly.stderr_write (error)
ly.stderr_write (stderr.read ())
exit (status)
return str
@rule ((2, 13, 29),
- _ ("Eliminate beamSettings, beatLength, \setBeatGrouping, \overrideBeamSettings and \revertBeamSettings"))
+ _ ("Eliminate beamSettings, beatLength, \setBeatGrouping, \overrideBeamSettings and \revertBeamSettings\n\
+\"accordion.accEtcbase\" -> \"accordion.etcbass\""))
def conv(str):
+ def sub_acc (m):
+ d = {
+ 'Dot': 'dot',
+ 'Discant': 'discant',
+ 'Bayanbase': 'bayanbass',
+ 'Stdbase': 'stdbass',
+ 'Freebase': 'freebass',
+ 'OldEE': 'oldEE'
+ }
+ return '"accordion.%s"' % d[m.group (1)]
+
+ str = re.sub (r'"accordion\.acc([a-zA-Z]+)"',
+ sub_acc, str)
if re.search(r'overrideBeamSettings', str):
stderr_write("\n")
stderr_write(NOT_SMART % _("\overrideBeamSettings. Use \set beamExceptions or \overrideTimeSignatureSettings.\n"))
stderr_write(UPDATE_MANUALLY)
return str
+@rule ((2, 13, 31),
+ _ ("Woodwind diagrams: Move size, thickness, and graphic from argument list to properties.\n\
+Deprecate negative dash-period for hidden lines: use #'style = #'none instead."))
+def conv(str):
+ if re.search(r'woodwind-diagram', str):
+ stderr_write("\n")
+ stderr_write(NOT_SMART % _("woodwind-diagrams. Move size, thickness, and graphic to properties. Argument should be just the key list.\n"))
+ stderr_write(UPDATE_MANUALLY)
+ str = re.sub (r"dash-period\s+=\s*#\s*-[0-9.]+",
+ r"style = #'none",
+ str);
+ return str
# Guidelines to write rules (please keep this at the end of this file)
#
# - keep at most one rule per version; if several conversions should be done,
(ly:add-interface
'instrument-specific-markup-interface
"Instrument-specific markup (like fret boards or harp pedal diagrams)."
- '(fret-diagram-details harp-pedal-details size thickness))
+ '(fret-diagram-details graphical harp-pedal-details size thickness))
(ly:add-interface
'key-cancellation-interface
property.")
(glyph-name ,string? "The glyph name within the font.")
(glyph-name-alist ,list? "An alist of key-string pairs.")
+ (graphical ,boolean? "Display in graphical (vs. text) form.")
(grow-direction ,ly:dir? "Crescendo or decrescendo?")
(items-worth-living ,ly:grob-array? "An array of interesting items. If
empty in a particular staff, then that staff is erased.")
+ (keep-alive-with ,ly:grob-array? "An array of other
+@code{VerticalAxisGroup}s. If any of them are alive, then we will stay alive.")
+
(left-items ,ly:grob-array? "DOCME")
(left-neighbor ,ly:grob? "The right-most column that has a spacing-wish
for this column.")
ly:clef::print
ly:percent-repeat-item-interface::beat-slash
ly:text-interface::print
- ly:script-interface::print))
+ ly:script-interface::print
+ ly:sustain-pedal::print))
;; Sometimes we have grobs with (Y-extent . ,ly:grob::stencil-height)
;; and the print function is not pure, but there is a easy way to
(define-markup-command (underline layout props arg)
(markup?)
#:category font
- #:properties ((thickness 1))
+ #:properties ((thickness 1) (offset 2))
"
@cindex underlining text
Underline @var{arg}. Looks at @code{thickness} to determine line
-thickness and y-offset.
+thickness, and @code{offset} to determine line y-offset.
@lilypond[verbatim,quote]
-\\markup {
- default
- \\hspace #2
- \\override #'(thickness . 2)
- \\underline {
- underline
- }
+\\markup \\fill-line {
+ \\underline \"underlined\"
+ \\override #'(offset . 5)
+ \\override #'(thickness . 1)
+ \\underline \"underlined\"
+ \\override #'(offset . 1)
+ \\override #'(thickness . 5)
+ \\underline \"underlined\"
}
@end lilypond"
- (let* ((thick (* (ly:output-def-lookup layout 'line-thickness)
- thickness))
+ (let* ((thick (ly:output-def-lookup layout 'line-thickness))
+ (underline-thick (* thickness thick))
(markup (interpret-markup layout props arg))
(x1 (car (ly:stencil-extent markup X)))
(x2 (cdr (ly:stencil-extent markup X)))
- (y (* thick -2))
- (line (make-line-stencil thick x1 y x2 y)))
+ (y (* thick (- offset)))
+ (line (make-line-stencil underline-thick x1 y x2 y)))
(ly:stencil-add markup line)))
(define-markup-command (box layout props arg)
str))
'(0 . 0) '(0 . 0)))
+(define-markup-command (path layout props thickness commands) (number? list?)
+ #:category graphic
+ #:properties ((line-cap-style 'round)
+ (line-join-style 'round)
+ (filled #f))
+ "
+@cindex paths, drawing
+@cindex drawing paths
+Draws a path with line thickness @var{thickness} according to the
+directions given in @var{commands}. @var{commands} is a list of
+lists where the @code{car} of each sublist is a drawing command and
+the @code{cdr} comprises the associated arguments for each command.
+
+Line-cap styles and line-join styles may be customized by
+overriding the @code{line-cap-style} and @code{line-join-style}
+properties, respectively. Available line-cap styles are
+@code{'butt}, @code{'round}, and @code{'square}. Available
+line-join styles are @code{'miter}, @code{'round}, and
+@code{'bevel}.
+
+The property @code{filled} specifies whether or not the path is
+filled with color.
+
+There are seven commands available to use in the list
+@code{commands}: @code{moveto}, @code{rmoveto}, @code{lineto},
+@code{rlineto}, @code{curveto}, @code{rcurveto}, and
+@code{closepath}. Note that the commands that begin with @emph{r}
+are the relative variants of the other three commands.
+
+The commands @code{moveto}, @code{rmoveto}, @code{lineto}, and
+@code{rlineto} take 2 arguments; they are the X and Y coordinates
+for the destination point.
+
+The commands @code{curveto} and @code{rcurveto} create cubic
+Bézier curves, and take 6 arguments; the first two are the X and Y
+coordinates for the first control point, the second two are the X
+and Y coordinates for the second control point, and the last two
+are the X and Y coordinates for the destination point.
+
+The @code{closepath} command takes zero arguments and closes the
+current subpath in the active path.
+
+Note that a sequence of commands @emph{must} begin with a
+@code{moveto} or @code{rmoveto} to work with the SVG output.
+
+@lilypond[verbatim,quote]
+samplePath =
+ #'((moveto 0 0)
+ (lineto -1 1)
+ (lineto 1 1)
+ (lineto 1 -1)
+ (curveto -5 -5 -5 5 -1 0)
+ (closepath))
+
+\\markup {
+ \\path #0.25 #samplePath
+}
+@end lilypond"
+ (let* ((half-thickness (/ thickness 2))
+ (current-point '(0 . 0))
+ (set-point (lambda (lst) (set! current-point lst)))
+ (relative? (lambda (x)
+ (string-prefix? "r" (symbol->string (car x)))))
+ ;; For calculating extents, we want to modify the command
+ ;; list so that all coordinates are absolute.
+ (new-commands (map (lambda (x)
+ (cond
+ ;; for rmoveto, rlineto
+ ((and (relative? x) (eq? 3 (length x)))
+ (let ((cp (cons
+ (+ (car current-point)
+ (second x))
+ (+ (cdr current-point)
+ (third x)))))
+ (set-point cp)
+ (list (car cp)
+ (cdr cp))))
+ ;; for rcurveto
+ ((and (relative? x) (eq? 7 (length x)))
+ (let* ((old-cp current-point)
+ (cp (cons
+ (+ (car old-cp)
+ (sixth x))
+ (+ (cdr old-cp)
+ (seventh x)))))
+ (set-point cp)
+ (list (+ (car old-cp) (second x))
+ (+ (cdr old-cp) (third x))
+ (+ (car old-cp) (fourth x))
+ (+ (cdr old-cp) (fifth x))
+ (car cp)
+ (cdr cp))))
+ ;; for moveto, lineto
+ ((eq? 3 (length x))
+ (set-point (cons (second x)
+ (third x)))
+ (drop x 1))
+ ;; for curveto
+ ((eq? 7 (length x))
+ (set-point (cons (sixth x)
+ (seventh x)))
+ (drop x 1))
+ ;; keep closepath for filtering;
+ ;; see `without-closepath'.
+ (else x)))
+ commands))
+ ;; path-min-max does not accept 0-arg lists,
+ ;; and since closepath does not affect extents, filter
+ ;; out those commands here.
+ (without-closepath (filter (lambda (x)
+ (not (equal? 'closepath (car x))))
+ new-commands))
+ (extents (path-min-max
+ ;; set the origin to the first moveto
+ (list (list-ref (car without-closepath) 0)
+ (list-ref (car without-closepath) 1))
+ without-closepath))
+ (X-extent (cons (list-ref extents 0) (list-ref extents 1)))
+ (Y-extent (cons (list-ref extents 2) (list-ref extents 3)))
+ (command-list (fold-right append '() commands)))
+
+ ;; account for line thickness
+ (set! X-extent (interval-widen X-extent half-thickness))
+ (set! Y-extent (interval-widen Y-extent half-thickness))
+
+ (ly:make-stencil
+ `(path ,thickness `(,@',command-list)
+ ',line-cap-style ',line-join-style ,filled)
+ X-extent
+ Y-extent)))
+
(define-markup-command (score layout props score)
(ly:score?)
#:category music
(make-simple-markup ""))
;; helper for justifying lines.
-(define (get-fill-space word-count line-width text-widths)
+(define (get-fill-space word-count line-width word-space text-widths)
"Calculate the necessary paddings between each two adjacent texts.
- The lengths of all texts are stored in @var{text-widths}.
- The normal formula for the padding between texts a and b is:
- padding = line-width/(word-count - 1) - (length(a) + length(b))/2
- The first and last padding have to be calculated specially using the
- whole length of the first or last text.
- Return a list of paddings."
+ The lengths of all texts are stored in @var{text-widths}.
+ The normal formula for the padding between texts a and b is:
+ padding = line-width/(word-count - 1) - (length(a) + length(b))/2
+ The first and last padding have to be calculated specially using the
+ whole length of the first or last text.
+ All paddings are checked to be at least word-space, to ensure that
+ no texts collide.
+ Return a list of paddings."
(cond
((null? text-widths) '())
(cons
(- (- (/ line-width (1- word-count)) (car text-widths))
(/ (car (cdr text-widths)) 2))
- (get-fill-space word-count line-width (cdr text-widths))))
+ (get-fill-space word-count line-width word-space (cdr text-widths))))
;; special case last padding
((= (length text-widths) 2)
(list (- (/ line-width (1- word-count))
(+ (/ (car text-widths) 2) (car (cdr text-widths)))) 0))
(else
- (cons
- (- (/ line-width (1- word-count))
- (/ (+ (car text-widths) (car (cdr text-widths))) 2))
- (get-fill-space word-count line-width (cdr text-widths))))))
+ (let ((default-padding
+ (- (/ line-width (1- word-count))
+ (/ (+ (car text-widths) (car (cdr text-widths))) 2))))
+ (cons
+ (if (> word-space default-padding)
+ word-space
+ default-padding)
+ (get-fill-space word-count line-width word-space (cdr text-widths)))))))
(define-markup-command (fill-line layout props args)
(markup-list?)
#:category align
#:properties ((text-direction RIGHT)
- (word-space 1)
- (line-width #f))
+ (word-space 0.6)
+ (line-width #f))
"Put @var{markups} in a horizontal line of width @var{line-width}.
The markups are spaced or flushed to fill the entire line.
If there are no arguments, return an empty stencil.
}
@end lilypond"
(let* ((orig-stencils (interpret-markup-list layout props args))
- (stencils
- (map (lambda (stc)
- (if (ly:stencil-empty? stc)
- point-stencil
- stc)) orig-stencils))
- (text-widths
- (map (lambda (stc)
- (if (ly:stencil-empty? stc)
- 0.0
- (interval-length (ly:stencil-extent stc X))))
- stencils))
- (text-width (apply + text-widths))
- (word-count (length stencils))
- (line-width (or line-width (ly:output-def-lookup layout 'line-width)))
- (fill-space
- (cond
- ((= word-count 1)
- (list
- (/ (- line-width text-width) 2)
- (/ (- line-width text-width) 2)))
- ((= word-count 2)
- (list
- (- line-width text-width)))
- (else
- (get-fill-space word-count line-width text-widths))))
- (fill-space-normal
- (map (lambda (x)
- (if (< x word-space)
- word-space
- x))
- fill-space))
-
- (line-stencils (if (= word-count 1)
- (list
- point-stencil
- (car stencils)
- point-stencil)
- stencils)))
-
- (if (= text-direction LEFT)
- (set! line-stencils (reverse line-stencils)))
+ (stencils
+ (map (lambda (stc)
+ (if (ly:stencil-empty? stc)
+ point-stencil
+ stc)) orig-stencils))
+ (text-widths
+ (map (lambda (stc)
+ (if (ly:stencil-empty? stc)
+ 0.0
+ (interval-length (ly:stencil-extent stc X))))
+ stencils))
+ (text-width (apply + text-widths))
+ (word-count (length stencils))
+ (line-width (or line-width (ly:output-def-lookup layout 'line-width)))
+ (fill-space
+ (cond
+ ((= word-count 1)
+ (list
+ (/ (- line-width text-width) 2)
+ (/ (- line-width text-width) 2)))
+ ((= word-count 2)
+ (list
+ (- line-width text-width)))
+ (else
+ (get-fill-space word-count line-width word-space text-widths))))
+
+ (line-contents (if (= word-count 1)
+ (list
+ point-stencil
+ (car stencils)
+ point-stencil)
+ stencils)))
(if (null? (remove ly:stencil-empty? orig-stencils))
- empty-stencil
- (ly:stencil-translate-axis
- (stack-stencils-padding-list X
- RIGHT fill-space-normal line-stencils)
- (- (car (ly:stencil-extent (car stencils) X)))
- X))))
+ empty-stencil
+ (begin
+ (if (= text-direction LEFT)
+ (set! line-contents (reverse line-contents)))
+ (set! line-contents
+ (stack-stencils-padding-list
+ X RIGHT fill-space line-contents))
+ (if (> word-count 1)
+ ;; shift s.t. stencils align on the left edge, even if
+ ;; first stencil had negative X-extent (e.g. center-column)
+ ;; (if word-count = 1, X-extents are already normalized in
+ ;; the definition of line-contents)
+ (set! line-contents
+ (ly:stencil-translate-axis
+ line-contents
+ (- (car (ly:stencil-extent (car stencils) X)))
+ X)))
+ line-contents))))
(define-markup-command (line layout props args)
(markup-list?)
(slashed-digit-internal layout props num #f font-size thickness))
;; eyeglasses
-(define eyeglassesps
- "0.15 setlinewidth
- -0.9 0 translate
- 1.1 1.1 scale
- 1.2 0.7 moveto
- 0.7 0.7 0.5 0 361 arc
- stroke
- 2.20 0.70 0.50 0 361 arc
- stroke
- 1.45 0.85 0.30 0 180 arc
- stroke
- 0.20 0.70 moveto
- 0.80 2.00 lineto
- 0.92 2.26 1.30 2.40 1.15 1.70 curveto
- stroke
- 2.70 0.70 moveto
- 3.30 2.00 lineto
- 3.42 2.26 3.80 2.40 3.65 1.70 curveto
- stroke")
+(define eyeglassespath
+ '((moveto 0.42 0.77)
+ (rcurveto 0 0.304 -0.246 0.55 -0.55 0.55)
+ (rcurveto -0.304 0 -0.55 -0.246 -0.55 -0.55)
+ (rcurveto 0 -0.304 0.246 -0.55 0.55 -0.55)
+ (rcurveto 0.304 0 0.55 0.246 0.55 0.55)
+ (closepath)
+ (moveto 2.07 0.77)
+ (rcurveto 0 0.304 -0.246 0.55 -0.55 0.55)
+ (rcurveto -0.304 0 -0.55 -0.246 -0.55 -0.55)
+ (rcurveto 0 -0.304 0.246 -0.55 0.55 -0.55)
+ (rcurveto 0.304 0 0.55 0.246 0.55 0.55)
+ (closepath)
+ (moveto 1.025 0.935)
+ (rcurveto 0 0.182 -0.148 0.33 -0.33 0.33)
+ (rcurveto -0.182 0 -0.33 -0.148 -0.33 -0.33)
+ (moveto -0.68 0.77)
+ (rlineto 0.66 1.43)
+ (rcurveto 0.132 0.286 0.55 0.44 0.385 -0.33)
+ (moveto 2.07 0.77)
+ (rlineto 0.66 1.43)
+ (rcurveto 0.132 0.286 0.55 0.44 0.385 -0.33)))
(define-markup-command (eyeglasses layout props)
()
\\markup { \\eyeglasses }
@end lilypond"
(interpret-markup layout props
- (make-with-dimensions-markup '(-0.61 . 3.22) '(0.2 . 2.41)
- (make-postscript-markup eyeglassesps))))
+ (make-override-markup '(line-cap-style . butt)
+ (make-path-markup 0.15 eyeglassespath))))
(define-markup-command (left-brace layout props size)
(number?)
--- /dev/null
+;;;; This file is part of LilyPond, the GNU music typesetter.
+;;;;
+;;;; Copyright (C) 1998--2010 Han-Wen Nienhuys <hanwen@xs4all.nl>
+;;;; Jan Nieuwenhuizen <janneke@gnu.org>
+;;;; Neil Puttock <n.puttock@gmail.com>
+;;;; Carl Sorensen <c_sorensen@byu.edu>
+;;;;
+;;;; LilyPond is free software: you can redistribute it and/or modify
+;;;; it under the terms of the GNU General Public License as published by
+;;;; the Free Software Foundation, either version 3 of the License, or
+;;;; (at your option) any later version.
+;;;;
+;;;; LilyPond is distributed in the hope that it will be useful,
+;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;;; GNU General Public License for more details.
+;;;;
+;;;; You should have received a copy of the GNU General Public License
+;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+
+;; TODO: should link back into user manual.
+
+(define (mm-rest-child-list music)
+ "Generate events for multimeasure rests,
+to be used by the sequential-iterator"
+ (let ((location (ly:music-property music 'origin))
+ (duration (ly:music-property music 'duration)))
+ (list (make-music 'BarCheck
+ 'origin location)
+ (make-event-chord (cons (make-music 'MultiMeasureRestEvent
+ 'origin location
+ 'duration duration)
+ (ly:music-property music 'articulations)))
+ (make-music 'BarCheck
+ 'origin location))))
+
+(define (make-ottava-set music)
+ "Set context properties for an ottava bracket."
+ (let ((octavation (ly:music-property music 'ottava-number)))
+
+ (list (context-spec-music
+ (make-apply-context
+ (lambda (context)
+ (let ((offset (* -7 octavation))
+ (string (assoc-get octavation '((2 . "15ma")
+ (1 . "8va")
+ (0 . #f)
+ (-1 . "8vb")
+ (-2 . "15mb")))))
+ (set! (ly:context-property context 'middleCOffset) offset)
+ (set! (ly:context-property context 'ottavation) string)
+ (ly:set-middle-C! context))))
+ 'Staff))))
+
+(define (make-time-signature-set music)
+ "Set context properties for a time signature."
+ (let* ((num (ly:music-property music 'numerator))
+ (den (ly:music-property music 'denominator))
+ (structure (ly:music-property music 'beat-structure))
+ (fraction (cons num den)))
+ (list (descend-to-context
+ (context-spec-music
+ (make-apply-context
+ (lambda (context)
+ (let* ((time-signature-settings
+ (ly:context-property context 'timeSignatureSettings))
+ (my-base-fraction
+ (base-fraction fraction time-signature-settings))
+ (my-beat-structure
+ (if (null? structure)
+ (beat-structure my-base-fraction
+ fraction
+ time-signature-settings)
+ structure))
+ (beaming-exception
+ (beam-exceptions fraction time-signature-settings))
+ (new-measure-length (ly:make-moment num den)))
+ (ly:context-set-property!
+ context 'timeSignatureFraction fraction)
+ (ly:context-set-property!
+ context 'baseMoment (fraction->moment my-base-fraction))
+ (ly:context-set-property!
+ context 'beatStructure my-beat-structure)
+ (ly:context-set-property!
+ context 'beamExceptions beaming-exception)
+ (ly:context-set-property!
+ context 'measureLength new-measure-length))))
+ 'Timing)
+ 'Score))))
properties)
(new-line->lily-string))))
+(define-display-method TimeSignatureMusic (expr parser)
+ (let* ((num (ly:music-property expr 'numerator))
+ (den (ly:music-property expr 'denominator))
+ (structure (ly:music-property expr 'beat-structure)))
+ (if (null? structure)
+ (format #f
+ "\\time ~a/~a~a"
+ num den
+ (new-line->lily-string))
+ (format #f
+ "#(set-time-signature ~a ~a '~a)~a"
+ num den structure
+ (new-line->lily-string)))))
+
;;; \melisma and \melismaEnd
(define-extra-display-method ContextSpeccedMusic (expr parser)
"If expr is a melisma, return \"\\melisma\", otherwise, return #f."
(new-line->lily-string))
#f))))
-;;; \time
-(define-extra-display-method ContextSpeccedMusic (expr parser)
- "If `expr' is a time signature set, return \"\\time ...\".
-Otherwise, return #f. Note: default grouping is not available."
- (with-music-match
- (expr (music
- 'ContextSpeccedMusic
- element (music
- 'ContextSpeccedMusic
- context-type 'Timing
- element (music
- 'SequentialMusic
- elements ?elts))))
- (and
- (> (length ?elts) 2)
- (with-music-match ((cadr ?elts)
- (music 'PropertySet
- symbol 'baseMoment))
- #t)
- (with-music-match ((caddr ?elts)
- (music 'PropertySet
- symbol 'measureLength))
- #t)
- (with-music-match ((car ?elts)
- (music 'PropertySet
- value ?num+den
- symbol 'timeSignatureFraction))
- (if (eq? (length ?elts) 3)
- (format
- #f "\\time ~a/~a~a"
- (car ?num+den) (cdr ?num+den) (new-line->lily-string))
- (format
- #f "#(set-time-signature ~a ~a '(<grouping-specifier>))~a"
- (car ?num+den) (cdr ?num+den) (new-line->lily-string)))))))
-
;;; \bar
(define-extra-display-method ContextSpeccedMusic (expr parser)
"If `expr' is a bar, return \"\\bar ...\".
(back-slashed number).")
(bass ,boolean? "Set if this note is a bass note in a chord.")
+ (beat-structure ,list? "A beatStructure to be used in autobeaming.")
(bracket-start ,boolean? "Start a bracket here.
TODO: Use SpanEvents?")
;; TODO: should link back into user manual.
-(define (mm-rest-child-list music)
- "Generate events for multimeasure rests,
-to be used by the sequential-iterator"
- (let ((location (ly:music-property music 'origin))
- (duration (ly:music-property music 'duration)))
- (list (make-music 'BarCheck
- 'origin location)
- (make-event-chord (cons (make-music 'MultiMeasureRestEvent
- 'origin location
- 'duration duration)
- (ly:music-property music 'articulations)))
- (make-music 'BarCheck
- 'origin location))))
-
-(define (make-ottava-set music)
- "Set context properties for an ottava bracket."
- (let ((octavation (ly:music-property music 'ottava-number)))
-
- (list (context-spec-music
- (make-apply-context
- (lambda (context)
- (let ((offset (* -7 octavation))
- (string (assoc-get octavation '((2 . "15ma")
- (1 . "8va")
- (0 . #f)
- (-1 . "8vb")
- (-2 . "15mb")))))
- (set! (ly:context-property context 'middleCOffset) offset)
- (set! (ly:context-property context 'ottavation) string)
- (ly:set-middle-C! context))))
- 'Staff))))
-
(define-public music-descriptions
`(
(AbsoluteDynamicEvent
(types . (time-scaled-music music-wrapper-music general-music))
))
+ (TimeSignatureMusic
+ . ((description . "Set a new time signature")
+ (iterator-ctor . ,ly:sequential-iterator::constructor)
+ (elements-callback . ,make-time-signature-set)
+ (types . (general-music time-signature-music))
+ ))
+
(TransposedMusic
. ((description . "Music that has been transposed.")
(iterator-ctor . ,ly:music-wrapper-iterator::constructor)
bracket
char
circle
- connected-shape
dashed-line
dashed-slur
dot
(reduce + 0 (map (lambda (x) (if x 1 0)) input-list)))
(define (bezier-head-for-stencil bezier cut-point)
- "Prepares a split-bezier to be used in a connected shape stencil."
+ "Prepares a split-bezier to be used in a connected path stencil."
(list-tail (flatten-list (car (split-bezier bezier cut-point))) 2))
;; Translators for keys
(define (gray-colorize stencil)
(apply ly:stencil-in-color (cons stencil (x11-color 'grey))))
-; A connected shape stencil that is surrounded by proc
-(define (rich-mcs-stencil ls x-stretch y-stretch proc)
+; A connected path stencil that is surrounded by proc
+(define (rich-path-stencil ls x-stretch y-stretch proc)
(lambda (radius thick fill layout props)
(let*
((fill-translate (key-fill-translate fill))
(ly:stencil-add
((if gray? gray-colorize identity)
(proc
- (make-connected-shape-stencil
+ (make-connected-path-stencil
ls
thick
(* x-stretch radius)
(if gray? #t fill-translate))))
(if (not gray?)
empty-stencil
- ((rich-mcs-stencil ls x-stretch y-stretch proc)
+ ((rich-path-stencil ls x-stretch y-stretch proc)
radius
thick
1
layout
props))))))
-; A connected shape stencil without a surrounding proc
-(define (standard-mcs-stencil ls x-stretch y-stretch)
- (rich-mcs-stencil ls x-stretch y-stretch identity))
+; A connected path stencil without a surrounding proc
+(define (standard-path-stencil ls x-stretch y-stretch)
+ (rich-path-stencil ls x-stretch y-stretch identity))
; An ellipse stencil that is surrounded by a proc
(define (rich-pe-stencil x-stretch y-stretch start end proc)
(let*
((xmove (lambda (x) (+ tailw (+ 0.2 (* bodyw (- x 0.2))))))
(ymove (lambda (x) (+ (- tailh) (+ -0.05 (* bodyh (+ x 0.05)))))))
- (standard-mcs-stencil
+ (standard-path-stencil
`((,(xmove 0.7)
,(ymove -0.2)
,(xmove 1.0)
;;; Flute family stencils
(define flute-lh-b-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0 1.3)
(0 1.625 -0.125 1.75 -0.25 1.75)
(-0.55 1.75 -0.55 0.95 -0.25 0.7)
1.55))
(define flute-lh-bes-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0 1.3)
(0 1.625 -0.125 1.75 -0.25 1.75)
(-0.55 1.75 -0.55 0.95 -0.25 0.7)
1.3))
(define (flute-lh-gis-rh-bes-key-stencil deg)
- (rich-mcs-stencil
+ (rich-path-stencil
'((0.1 0.1 0.2 0.4 0.3 0.6)
(0.3 1.0 0.8 1.0 0.8 0.7)
(0.8 0.3 0.5 0.3 0 0))
(define flute-rh-dis-key-stencil little-elliptical-key-stencil)
(define flute-rh-ees-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.8 0) (1.1 0 1.1 0.75 0.7 0.75) (0.5 0.75) (0.15 0.75 0.1 0.2 0 0))
-2.38
1.4))
(define flute-lower-row-stretch 1.4)
(define flute-rh-cis-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0 0.75) (-0.8 0.75 -0.8 0 0 0))
flute-lower-row-stretch
flute-lower-row-stretch))
(define flute-rh-c-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0 0.75) (0.4 0.75) (0.4 0) (0 0))
flute-lower-row-stretch
flute-lower-row-stretch))
(define flute-rh-b-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0 0.75) (0.25 0.75) (0.25 0) (0 0))
flute-lower-row-stretch
flute-lower-row-stretch))
(define flute-rh-gz-key-stencil
- (rich-mcs-stencil
+ (rich-path-stencil
'((0.1 0.1 0.4 0.2 0.6 0.3)
(1.0 0.3 1.0 0.8 0.7 0.8)
(0.3 0.8 0.3 0.5 0 0))
`((,x . 0.0) (,x . ,(- y)) (0.0 . ,(- y)) (0.0 . 0.0))
0.2))))
(if gis?
- (standard-mcs-stencil
+ (standard-path-stencil
(append
(append
`((0.25 ,(/ y -2) 0.75 ,(/ y -2) 1.0 0.0))
`((0.75 ,(/ y -2) 0.25 ,(/ y -2) 0.0 0.0)))
scaling-factor
scaling-factor)
- (standard-mcs-stencil
+ (standard-path-stencil
(map (lambda (l)
(flatten-list
(map (lambda (x)
(define oboe-lh-low-b-key-stencil (oboe-lh-gis-lh-low-b-key-stencil #f))
(define (oboe-lh-ees-lh-bes-key-stencil ees?)
- (standard-mcs-stencil
+ (standard-path-stencil
`((0 1.5)
(0 1.625 -0.125 1.75 -0.25 1.75)
(-0.5 1.75 -0.5 0.816 -0.25 0.5)
(define (oboe-lh-octave-key-stencil long?)
(let* ((h (if long? 1.4 1.2)))
- (standard-mcs-stencil
+ (standard-path-stencil
`((-0.4 0 -0.4 1.0 -0.1 1.0)
(-0.1 ,h)
(0.1 ,h)
(define oboe-rh-f-key-stencil little-elliptical-key-stencil)
(define (oboe-rh-c-rh-ees-key-stencil c?)
- (rich-mcs-stencil
+ (rich-path-stencil
'((1.0 0.0 1.0 0.70 1.5 0.70)
(2.25 0.70 2.25 -0.4 1.5 -0.4)
(1.0 -0.4 1.0 0 0 0)
(define oboe-rh-c-key-stencil (oboe-rh-c-rh-ees-key-stencil #t))
(define oboe-rh-cis-key-stencil
- (rich-mcs-stencil
+ (rich-path-stencil
'((0.6 0.0 0.6 0.50 1.25 0.50)
(2.25 0.50 2.25 -0.4 1.25 -0.4)
(0.6 -0.4 0.6 0 0 0))
(height (*
halfbase
(/ (sin (/ (* 4 PI) 10)) (cos (/ (* 4 PI) 10))))))
- (standard-mcs-stencil
+ (standard-path-stencil
`(
(0 ,(/ -4.0 3.0) -2.0 ,(/ -4.0 3.0) -2.0 0.0)
(-1.5 ,(* 0.5 height) -1.25 ,(* 0.75 height) -1.0 ,height)
(define clarinet-lh-d-key-stencil (standard-e-stencil 1.0 0.4))
(define clarinet-rh-low-c-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 1.5)
(0.0 2.5 -1.0 2.5 -1.0 0.75)
(-1.0 0.1 0.0 0.25 0.0 0.3)
0.8))
(define clarinet-rh-low-cis-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 1.17)
(0.0 1.67 -1.0 1.67 -1.0 0.92)
(-1.0 0.47 0.0 0.52 0.0 0.62)
0.8))
(define clarinet-rh-low-d-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 1.05)
(0.0 1.55 -1.0 1.55 -1.0 0.8)
(-1.0 0.35 0.0 0.4 0.0 0.5)
; changes, all change...
(define clarinet-rh-fis-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
`(,(bezier-head-for-stencil
'((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
0.5)
CL-RH-V-STRETCH))
(define clarinet-rh-e-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 1.0 1.0 1.0 1.0 0.0) (1.0 -1.0 0.0 -1.0 0.0 0.0))
CL-RH-H-STRETCH
CL-RH-V-STRETCH))
(define clarinet-rh-ees-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
`(,(bezier-head-for-stencil
'((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
0.5)
(define clarinet-rh-gis-key-stencil clarinet-rh-e-key-stencil)
(define bass-clarinet-rh-f-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
`(,(bezier-head-for-stencil
'((0.0 . 0.0) (0.0 . -1.0) (1.0 . -1.0) (1.0 . 0.0))
0.5)
(define saxophone-lh-T-key-stencil (standard-e-stencil 0.75 0.75))
(define saxophone-lh-gis-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 0.4)
(0.0 0.8 3.0 0.8 3.0 0.4)
(3.0 0.0)
0.8))
(define (saxophone-lh-b-cis-key-stencil flip?)
- (standard-mcs-stencil
+ (standard-path-stencil
'((0.0 1.0)
(0.4 1.0 0.8 0.9 1.35 0.8)
(1.35 0.0)
(define saxophone-lh-b-key-stencil (saxophone-lh-b-cis-key-stencil #f))
(define saxophone-lh-low-bes-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
0.8
0.8))
(define (saxophone-rh-side-key-stencil width height)
- (standard-mcs-stencil
+ (standard-path-stencil
`((0.0 ,height)
(0.05 ,(+ height 0.05) 0.1 ,(+ height 0.1) 0.15 ,(+ height 0.15))
(,(- width 0.15) ,(+ height 0.15))
(define saxophone-rh-bes-key-stencil (saxophone-rh-side-key-stencil 0.9 0.45))
(define saxophone-rh-high-fis-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
(append
'((0.0 1.0) (0.0 1.4 0.6 1.4 0.6 1.0) (0.6 0.0))
(map (lambda (l)
(define saxophone-rh-ees-key-stencil (standard-e-stencil 1.2 0.5))
(define saxophone-rh-low-c-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((3.0 0.0) (3.0 -1.5 0.0 -1.5 0.0 0.0))
0.8
0.8))
(second-bezier (cadr info-list))
(slope-offset1 (caddr info-list))
(slope-offset2 (cadddr info-list)))
- (rich-mcs-stencil
+ (rich-path-stencil
(append
`((0.0 ,(+ height gap))
,(list-tail first-bezier 2))
(rich-pe-stencil 1.0 1.0 135 315 identity))
(define bassoon-lh-ld-key-stencil
- (standard-mcs-stencil
+ (standard-path-stencil
'((-0.8 4.0 1.4 4.0 0.6 0.0)
(0.5 -0.5 0.5 -0.8 0.6 -1.0)
(0.7 -1.2 0.8 -1.3 0.8 -1.8)
(define bassoon-lh-d-flick-key-stencil
(let ((height 3.0))
- (standard-mcs-stencil
+ (standard-path-stencil
`((0.0 ,height)
(0.2 ,(+ height 1.6) 0.8 ,(+ height 1.8) 1.0 ,(+ height 1.8))
(1.4 ,(+ height 1.8) 1.9 ,(+ height 1.3) 1.9 ,(+ height 1.0))
(define bassoon-lh-c-flick-key-stencil
(let ((height 3.0))
- (standard-mcs-stencil
+ (standard-path-stencil
`((0.0 ,height)
(0.0 ,(+ height 1.6) 0.4 ,(+ height 1.8) 0.5 ,(+ height 1.8))
(0.7 ,(+ height 1.8) 0.9 ,(+ height 1.3) 0.9 ,(+ height 1.0))
(second-bezier (cadr info-list))
(slope-offset1 (caddr info-list))
(slope-offset2 (cadddr info-list)))
- (standard-mcs-stencil
+ (standard-path-stencil
(append
(map
(lambda (l)
(bassoon-uber-key-stencil 1.0 1.2 0.9 1.0 0.7 0.7))
(define bassoon-rh-thumb-gis-key-stencil
- (bassoon-uber-key-stencil 1.2 0.8 0.9 0.4 0.7 0.7))
\ No newline at end of file
+ (bassoon-uber-key-stencil 1.2 0.8 0.9 0.4 0.7 0.7))
(key-list-loop key-list)))
(define-markup-command
- (woodwind-diagram layout props instrument input-list)
+ (woodwind-diagram layout props instrument user-draw-commands)
(symbol? list?)
#:category instrument-specific-markup ; markup category
+ #:properties ((size 1)
+ (thickness 0.1)
+ (graphical #t))
"Make a woodwind-instrument diagram. For example, say
@example
-\\markup \\woodwind-diagram #'oboe #'(1.4 0.1 #t ((lh . (d ees)) (cc . (five3qT1q)) (rh . (gis))))
+\\markup \\woodwind-diagram #'oboe #'((lh . (d ees)) (cc . (five3qT1q)) (rh . (gis)))
@end example
@noindent
a diagram with all of the keys drawn but none filled. ie...
@example
-\\markup \\woodwind-diagram #'oboe #'(1.4 0.1 #t ())
+\\markup \\woodwind-diagram #'oboe #'()
@end example"
- (let* ((radius (car input-list))
- (thick (cadr input-list))
- (display-graphic (caddr input-list))
- (xy-stretch `(1.0 . 2.5))
- (chosen-instrument (assoc-get instrument woodwind-data-alist))
- (chosen-instrument
- (if (not chosen-instrument)
- (ly:error "~a is not a valid woodwind instrument."
- instrument)
- chosen-instrument))
- (stencil-info
- (assoc-get
- (if display-graphic 'graphical-commands 'text-commands)
- chosen-instrument))
- (user-draw-commands (cadddr input-list))
- (pressed-info
- (if (null? user-draw-commands)
- (uniform-draw-instructions (assoc-get 'keys chosen-instrument))
- (translate-draw-instructions
- (append '((hd . ())) user-draw-commands)
- (assoc-get 'keys chosen-instrument))))
- (draw-info
- (function-chain
- pressed-info
- (assoc-get 'draw-instructions stencil-info)))
- (extra-offset-info
- (function-chain
- pressed-info
- (assoc-get 'extra-offset-instructions stencil-info))))
- (assemble-stencils
- (assoc-get 'stencil-alist stencil-info)
- (assoc-get 'keys chosen-instrument)
- draw-info
- extra-offset-info
- radius
- thick
- xy-stretch
- layout
- props)))
\ No newline at end of file
+ (let* ((radius size)
+ (thick (* size thickness))
+ (display-graphic graphical)
+ (xy-stretch `(1.0 . 2.5))
+ (chosen-instrument (assoc-get instrument woodwind-data-alist))
+ (chosen-instrument
+ (if (not chosen-instrument)
+ (ly:error "~a is not a valid woodwind instrument."
+ instrument)
+ chosen-instrument))
+ (stencil-info
+ (assoc-get
+ (if display-graphic 'graphical-commands 'text-commands)
+ chosen-instrument))
+ (pressed-info
+ (if (null? user-draw-commands)
+ (uniform-draw-instructions (assoc-get 'keys chosen-instrument))
+ (translate-draw-instructions
+ (append '((hd . ())) user-draw-commands)
+ (assoc-get 'keys chosen-instrument))))
+ (draw-info
+ (function-chain
+ pressed-info
+ (assoc-get 'draw-instructions stencil-info)))
+ (extra-offset-info
+ (function-chain
+ pressed-info
+ (assoc-get 'extra-offset-instructions stencil-info))))
+ (assemble-stencils
+ (assoc-get 'stencil-alist stencil-info)
+ (assoc-get 'keys chosen-instrument)
+ draw-info
+ extra-offset-info
+ radius
+ thick
+ xy-stretch
+ layout
+ props)))
"Include book titles in preview images.")
(include-eps-fonts #t
"Include fonts in separate-system EPS files.")
+ (include-settings #f
+"Include file for global settings, included before the score is processed.")
(job-count #f
"Process in parallel, using the given number of
jobs.")
'("lily-library.scm"
"file-cache.scm"
"define-event-classes.scm"
+ "define-music-callbacks.scm"
"define-music-types.scm"
"output-lib.scm"
"c++.scm"
(make-repeat type num body alts))
(define (script-to-mmrest-text music)
- "Extract 'direction and 'text from SCRIPT-MUSIC, and transform MultiMeasureTextEvent"
+ "Extract @code{'direction} and @code{'text} from @var{music}, and transform
+into a @code{MultiMeasureTextEvent}."
(if (memq 'script-event (ly:music-property music 'types))
-
- (let*
- ((dir (ly:music-property music 'direction))
- (tags (ly:music-property music 'tags))
- (p (make-music 'MultiMeasureTextEvent
- 'tags tags
- 'text (ly:music-property music 'text))))
+ (let* ((location (ly:music-property music 'origin))
+ (dir (ly:music-property music 'direction))
+ (tags (ly:music-property music 'tags))
+ (p (make-music 'MultiMeasureTextEvent
+ 'origin location
+ 'tags tags
+ 'text (ly:music-property music 'text))))
(if (ly:dir? dir)
(set! (ly:music-property p 'direction) dir))
p)
'origin loc)))
addlyrics-list)))
(make-simultaneous-music (cons voice lyricstos))))
+
+(define-ly-syntax (make-mark-set parser location label)
+ "Make the music for the \\mark command."
+ (let* ((set (and (integer? label)
+ (context-spec-music (make-property-set 'rehearsalMark label)
+ 'Score)))
+ (ev (make-music 'MarkEvent))
+ (ch (make-event-chord (list ev))))
+
+ (set! (ly:music-property ev 'origin) location)
+ (if set
+ (make-sequential-music (list set ch))
+ (begin
+ (set! (ly:music-property ev 'label) label)
+ ch))))
+
+(define-ly-syntax-simple (partial dur)
+ "Make a partial measure."
+ (let ((mom (ly:moment-sub ZERO-MOMENT (ly:duration-length dur))))
+
+ ;; We use `descend-to-context' here instead of `context-spec-music' to
+ ;; ensure \partial still works if the Timing_translator is moved
+ (descend-to-context
+ (context-spec-music (make-property-set 'measurePosition mom) 'Timing)
+ 'Score)))
Syntax:
(define-markup-command (COMMAND layout props . arguments)
argument-types
- [ #:category category ]
[ #:properties properties ]
\"documentation string\"
...command body...)
- or:
- (define-markup-command COMMAND
- argument-types
- [ #:category category ]
- function)
where:
- argument-types is a list of type predicates for arguments
- category is either a symbol or a symbol list
- properties a list of (property default-value) lists or COMMANDx-markup elements
- (when a COMMANDx-markup is found, the properties of the said commandx are
- added instead). No check is performed against cyclical references!
-
- The specified properties are available as let-bound variables in the
- command body.
+ `argument-types' is a list of type predicates for arguments
+ `properties' a list of (property default-value) lists
+
+The specified properties are available as let-bound variables in the
+command body, using the respective `default-value' as fallback in case
+`property' is not found in `props'. `props' itself is left unchanged:
+if you want defaults specified in that manner passed down into other
+markup functions, you need to adjust `props' yourself.
+
+The autogenerated documentation makes use of some optional
+specifications that are otherwise ignored:
+
+After `argument-types', you may also specify
+ [ #:category category ]
+where:
+ `category' is either a symbol or a symbol list specifying the
+ category for this markup command in the docs.
+
+As an element of the `properties' list, you may directly use a
+COMMANDx-markup symbol instead of a `(prop value)' list to indicate
+that this markup command is called by the newly defined command,
+adding its properties to the documented properties of the new
+command. There is no protection against circular definitions.
"
- (let* ((command (if (pair? command-and-args) (car command-and-args) command-and-args))
- (args (if (pair? command-and-args) (cdr command-and-args) '()))
+ (let* ((command (car command-and-args))
+ (args (cdr command-and-args))
(command-name (string->symbol (format #f "~a-markup" command)))
(make-markup-name (string->symbol (format #f "make-~a-markup" command))))
(while (and (pair? body) (keyword? (car body)))
(set! body (cddr body)))
`(begin
;; define the COMMAND-markup function
- ,(if (pair? args)
- (let* ((documentation (if (string? (car body))
- (list (car body))
- '()))
- (real-body (if (or (null? documentation)
- (null? (cdr body)))
- body (cdr body))))
- `(define-public (,command-name ,@args)
- ,@documentation
- (let ,(filter identity
- (map (lambda (prop-spec)
- (if (pair? prop-spec)
- (let ((prop (car prop-spec))
- (default-value (if (null? (cdr prop-spec))
- #f
- (cadr prop-spec)))
- (props (cadr args)))
- `(,prop (chain-assoc-get ',prop ,props ,default-value)))
- #f))
- properties))
- ,@real-body)))
- (let ((args (gensym "args"))
- (markup-command (car body)))
- `(define-public (,command-name . ,args)
- ,(format #f "Copy of the ~a command." markup-command)
- (apply ,markup-command ,args))))
+ ,(let* ((documentation (if (string? (car body))
+ (list (car body))
+ '()))
+ (real-body (if (or (null? documentation)
+ (null? (cdr body)))
+ body (cdr body))))
+ `(define-public (,command-name ,@args)
+ ,@documentation
+ (let ,(map (lambda (prop-spec)
+ (let ((prop (car prop-spec))
+ (default-value (if (null? (cdr prop-spec))
+ #f
+ (cadr prop-spec)))
+ (props (cadr args)))
+ `(,prop (chain-assoc-get ',prop ,props ,default-value))))
+ (filter pair? properties))
+ ,@real-body)))
(set! (markup-command-signature ,command-name) (list ,@signature))
;; Register the new function, for markup documentation
,@(map (lambda (category)
(if (list? category) category (list category)))
;; Used properties, for markup documentation
(hashq-set! markup-functions-properties
- ,command-name
- (list ,@(map (lambda (prop-spec)
- (cond ((symbol? prop-spec)
- prop-spec)
- ((not (null? (cdr prop-spec)))
- `(list ',(car prop-spec) ,(cadr prop-spec)))
- (else
- `(list ',(car prop-spec)))))
- (if (pair? args)
- properties
- (list)))))
+ ,command-name
+ (list ,@(map (lambda (prop-spec)
+ (cond ((symbol? prop-spec)
+ prop-spec)
+ ((not (null? (cdr prop-spec)))
+ `(list ',(car prop-spec) ,(cadr prop-spec)))
+ (else
+ `(list ',(car prop-spec)))))
+ (if (pair? args)
+ properties
+ (list)))))
;; define the make-COMMAND-markup function
(define-public (,make-markup-name . args)
- (let ((sig (list ,@signature)))
- (make-markup ,command-name ,(symbol->string make-markup-name) sig args))))))
+ (let ((sig (list ,@signature)))
+ (make-markup ,command-name ,(symbol->string make-markup-name) sig args))))))
(defmacro*-public define-markup-list-command
(command-and-args signature #:key (properties '()) #:rest body)
- "Same as `define-markup-command, but defines a command that, when
-interpreted, returns a list of stencils instead os a single one"
- (let* ((command (if (pair? command-and-args) (car command-and-args) command-and-args))
- (args (if (pair? command-and-args) (cdr command-and-args) '()))
+ "Same as `define-markup-command', but defines a command that, when
+interpreted, returns a list of stencils instead of a single one"
+ (let* ((command (car command-and-args))
+ (args (cdr command-and-args))
(command-name (string->symbol (format #f "~a-markup-list" command)))
(make-markup-name (string->symbol (format #f "make-~a-markup-list" command))))
(while (and (pair? body) (keyword? (car body)))
(set! body (cddr body)))
`(begin
;; define the COMMAND-markup-list function
- ,(if (pair? args)
- (let* ((documentation (if (string? (car body))
- (list (car body))
- '()))
- (real-body (if (or (null? documentation)
- (null? (cdr body)))
- body (cdr body))))
- `(define-public (,command-name ,@args)
- ,@documentation
- (let ,(filter identity
- (map (lambda (prop-spec)
- (if (pair? prop-spec)
- (let ((prop (car prop-spec))
- (default-value (if (null? (cdr prop-spec))
- #f
- (cadr prop-spec)))
- (props (cadr args)))
- `(,prop (chain-assoc-get ',prop ,props ,default-value)))
- #f))
- properties))
- ,@real-body)))
- (let ((args (gensym "args"))
- (markup-command (car body)))
- `(define-public (,command-name . ,args)
- ,(format #f "Copy of the ~a command." markup-command)
- (apply ,markup-command ,args))))
+ ,(let* ((documentation (if (string? (car body))
+ (list (car body))
+ '()))
+ (real-body (if (or (null? documentation)
+ (null? (cdr body)))
+ body (cdr body))))
+ `(define-public (,command-name ,@args)
+ ,@documentation
+ (let ,(map (lambda (prop-spec)
+ (let ((prop (car prop-spec))
+ (default-value (if (null? (cdr prop-spec))
+ #f
+ (cadr prop-spec)))
+ (props (cadr args)))
+ `(,prop (chain-assoc-get ',prop ,props ,default-value))))
+ (filter pair? properties))
+ ,@real-body)))
(set! (markup-command-signature ,command-name) (list ,@signature))
;; add the command to markup-list-function-list, for markup documentation
(hashq-set! markup-list-functions ,command-name #t)
;; Used properties, for markup documentation
(hashq-set! markup-functions-properties
- ,command-name
- (list ,@(map (lambda (prop-spec)
- (cond ((symbol? prop-spec)
- prop-spec)
- ((not (null? (cdr prop-spec)))
- `(list ',(car prop-spec) ,(cadr prop-spec)))
- (else
- `(list ',(car prop-spec)))))
- (if (pair? args)
- properties
- (list)))))
+ ,command-name
+ (list ,@(map (lambda (prop-spec)
+ (cond ((symbol? prop-spec)
+ prop-spec)
+ ((not (null? (cdr prop-spec)))
+ `(list ',(car prop-spec) ,(cadr prop-spec)))
+ (else
+ `(list ',(car prop-spec)))))
+ (if (pair? args)
+ properties
+ (list)))))
;; it's a markup-list command:
(set-object-property! ,command-name 'markup-list-command #t)
;; define the make-COMMAND-markup-list function
(define-public (,make-markup-name . args)
- (let ((sig (list ,@signature)))
- (list (make-markup ,command-name
- ,(symbol->string make-markup-name) sig args)))))))
+ (let ((sig (list ,@signature)))
+ (list (make-markup ,command-name
+ ,(symbol->string make-markup-name) sig args)))))))
(define-public (make-markup markup-function make-name signature args)
" Construct a markup object from MARKUP-FUNCTION and ARGS. Typecheck
against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
"
(let* ((arglen (length args))
- (siglen (length signature))
- (error-msg (if (and (> siglen 0) (> arglen 0))
- (markup-argument-list-error signature args 1)
- #f)))
+ (siglen (length signature))
+ (error-msg (if (and (> siglen 0) (> arglen 0))
+ (markup-argument-list-error signature args 1)
+ #f)))
(if (or (not (= arglen siglen)) (< siglen 0) (< arglen 0))
- (ly:error (string-append make-name ": "
- (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S"))
+ (ly:error (string-append make-name ": "
+ (_ "Wrong number of arguments. Expect: ~A, found ~A: ~S"))
siglen arglen args))
(if error-msg
- (ly:error
+ (ly:error
(string-append
make-name ": "
(_ "Invalid argument in position ~A. Expect: ~A, found: ~S."))
1))
;; # of dots is equal to the 1 in bitwise representation (minus 1)!
(dots (1- (logcount (* times children))))
- ;; The remaining missing multiplicator to scale the notes by
+ ;; The remaining missing multiplicator to scale the notes by
;; times * children
(mult (/ (* times children (ash 1 dots)) (1- (ash 2 dots))))
(shift (- (ly:intlog2 (floor mult))))
;;; Need to keep this definition for \time calls from parser
(define-public (make-time-signature-set num den)
"Set properties for time signature NUM/DEN."
- (make-beam-rule-time-signature-set num den '()))
+ (make-music 'TimeSignatureMusic
+ 'numerator num
+ 'denominator den
+ 'beat-structure '()))
;;; Used for calls that include beat-grouping setting
(define-public (set-time-signature num den . rest)
"Set properties for time signature @var{num/den}.
If @var{rest} is present, it is used to set
@code{beatStructure}."
- (ly:export (apply make-beam-rule-time-signature-set
- (list num den rest))))
-
-(define-public (make-beam-rule-time-signature-set num den rest)
- "Implement settings for new time signature. Can be
-called from either make-time-signature-set (used by \time
-in parser) or set-time-signature (called from scheme code
-included in .ly file)."
-
- (let ((m (make-music 'ApplyContext)))
- (define (make-time-settings context)
- (let* ((fraction (cons num den))
- (time-signature-settings (ly:context-property context 'timeSignatureSettings))
- (my-base-fraction (base-fraction fraction time-signature-settings))
- (my-beat-structure (if (null? rest)
- (beat-structure my-base-fraction
- fraction
- time-signature-settings)
- (car rest)))
- (beaming-exception
- (beam-exceptions fraction time-signature-settings))
- (new-measure-length (ly:make-moment num den)))
- (ly:context-set-property! context 'timeSignatureFraction fraction)
- (ly:context-set-property!
- context 'baseMoment (fraction->moment my-base-fraction))
- (ly:context-set-property! context 'beatStructure my-beat-structure)
- (ly:context-set-property! context 'beamExceptions beaming-exception)
- (ly:context-set-property! context 'measureLength new-measure-length)))
- (set! (ly:music-property m 'procedure) make-time-settings)
- (descend-to-context
- (context-spec-music m 'Timing)
- 'Score)))
-
-
-(define-public (make-mark-set label)
- "Make the music for the \\mark command."
- (let* ((set (if (integer? label)
- (context-spec-music (make-property-set 'rehearsalMark label)
- 'Score)
- #f))
- (ev (make-music 'MarkEvent))
- (ch (make-event-chord (list ev))))
- (if set
- (make-sequential-music (list set ch))
- (begin
- (set! (ly:music-property ev 'label) label)
- ch))))
+ (ly:export
+ (make-music 'TimeSignatureMusic
+ 'numerator num
+ 'denominator den
+ 'beat-structure (if (null? rest) rest (car rest)))))
(define-safe-public (make-articulation name)
(make-music 'ArticulationEvent
(use-modules (guile)
(ice-9 regex)
+ (ice-9 optargs)
(srfi srfi-1)
(srfi srfi-13)
(scm framework-ps)
(- x2 x1) (- y2 y1)
x1 y1 thick))
-(define (connected-shape pointlist thick x-scale y-scale connect fill)
- (ly:format "~a~4f ~4f ~4f ~4f ~a ~a draw_connected_shape"
- (string-concatenate
- (map (lambda (x)
- (apply (if (eq? (length x) 6)
- (lambda (x1 x2 x3 x4 x5 x6)
- (ly:format "~4f ~4f ~4f ~4f ~4f ~4f 6 "
- x1
- x2
- x3
- x4
- x5
- x6))
- (lambda (x1 x2)
- (ly:format "~4f ~4f 2 " x1 x2)))
- x))
- (reverse pointlist)))
- (length pointlist)
- x-scale
- y-scale
- thick
- (if connect "true" "false")
- (if fill "true" "false")))
-
(define (partial-ellipse x-radius y-radius start-angle end-angle thick connect fill)
(ly:format "~a ~a ~4f ~4f ~4f ~4f ~4f draw_partial_ellipse"
(if fill "true" "false")
(cdr y)
url))
-(define (path thickness exps)
+(define* (path thickness exps #:optional (cap 'round) (join 'round) (fill? #f))
(define (convert-path-exps exps)
(if (pair? exps)
(let*
(convert-path-exps (drop rest arity))))
'()))
-
- (ly:format
- "gsave currentpoint translate 1 setlinecap ~a setlinewidth\n~l stroke grestore"
- thickness
- (convert-path-exps exps)))
+ (let ((cap-numeric (case cap ((butt) 0) ((round) 1) ((square) 2)
+ (else (begin
+ (ly:warning (_ "unknown line-cap-style: ~S")
+ (symbol->string cap))
+ 1))))
+ (join-numeric (case join ((miter) 0) ((round) 1) ((bevel) 2)
+ (else (begin
+ (ly:warning (_ "unknown line-join-style: ~S")
+ (symbol->string join))
+ 1)))))
+ (ly:format
+ "gsave currentpoint translate
+~a setlinecap ~a setlinejoin ~a setlinewidth
+~l gsave stroke grestore ~a grestore"
+ cap-numeric
+ join-numeric
+ thickness
+ (convert-path-exps exps)
+ (if fill? "fill" ""))))
(guile)
(ice-9 regex)
(ice-9 format)
+ (ice-9 optargs)
(lily)
(srfi srfi-1)
(srfi srfi-13))
(- (* start-radius (sin new-start-angle))))
"")))))))
-(define (connected-shape pointlist thick x-scale y-scale connect fill)
- (entity
- 'path ""
- `(fill . ,(if fill "currentColor" "none"))
- `(stroke . "currentColor")
- `(stroke-width . ,thick)
- '(stroke-linejoin . "round")
- '(stroke-linecap . "round")
- (cons
- 'd
- (ly:format
- "M0 0~a ~a"
- (string-concatenate
- (map (lambda (x)
- (apply
- (if (eq? (length x) 6)
- (lambda (x1 x2 x3 x4 x5 x6)
- (ly:format "C~4f ~4f ~4f ~4f ~4f ~4f"
- (* x1 x-scale)
- (- (* x2 y-scale))
- (* x3 x-scale)
- (- (* x4 y-scale))
- (* x5 x-scale)
- (- (* x6 y-scale))))
- (lambda (x1 x2)
- (ly:format "L~4f ~4f"
- (* x-scale x1)
- (- (* y-scale x2)))))
- x))
- pointlist))
- (if connect "z " "")))))
-
(define (embedded-svg string)
string)
x-max y-min
x-max 0)))))
-(define (path thick commands)
+(define* (path thick commands #:optional (cap 'round) (join 'round) (fill? #f))
(define (convert-path-exps exps)
(if (pair? exps)
(let*
(convert-path-exps (drop rest arity))))
'()))
- (entity 'path ""
- `(stroke-width . ,thick)
- '(stroke-linejoin . "round")
- '(stroke-linecap . "round")
- '(stroke . "currentColor")
- '(fill . "none")
- `(d . ,(apply string-append (convert-path-exps commands)))))
+ (let* ((line-cap-styles '(butt round square))
+ (line-join-styles '(miter round bevel))
+ (cap-style (if (not (memv cap line-cap-styles))
+ (begin
+ (ly:warning (_ "unknown line-cap-style: ~S")
+ (symbol->string cap))
+ 'round)
+ cap))
+ (join-style (if (not (memv join line-join-styles))
+ (begin
+ (ly:warning (_ "unknown line-join-style: ~S")
+ (symbol->string join))
+ 'round)
+ join)))
+ (entity 'path ""
+ `(stroke-width . ,thick)
+ `(stroke-linejoin . ,(symbol->string join-style))
+ `(stroke-linecap . ,(symbol->string cap-style))
+ '(stroke . "currentColor")
+ `(fill . ,(if fill? "currentColor" "none"))
+ `(d . ,(apply string-append (convert-path-exps commands))))))
(define (placebox x y expr)
(if (string-null? expr)
page-prev
page-printable-height
layout->page-init
- page-lines
page-force
page-penalty
page-configuration
(cons (min-max-crawler min cddr possible-extrema)
(min-max-crawler max cddr possible-extrema)))))
-(define-public
- (make-connected-shape-stencil pointlist
- thickness
- x-scale
- y-scale
- connect
- fill)
-
- (define (connected-shape-min-max pointlist)
-
- (define (line-part-min-max x1 x2)
- (list (min x1 x2) (max x1 x2)))
-
- (define (bezier-part-min-max x1 x2 x3 x4)
- ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
- (map
- (lambda (x)
- (+ (* x1 (expt (- 1 x) 3))
- (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
- (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
- (* x4 (expt x 3))))))
- (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
- (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
- (list 0.0 1.0)
- (filter
- (lambda (x) (and (>= x 0) (<= x 1)))
- (append
- (list 0.0 1.0)
- (map (lambda (op)
- (if (not (eqv? 0.0
- (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2)))))
- ;; Zeros of the bezier curve
- (/ (+ (- x1 (* 2 x2))
- (op x3
- (sqrt (- (+ (expt x2 2)
- (+ (expt x3 2) (* x1 x4)))
- (+ (* x1 x3)
- (+ (* x2 x4) (* x2 x3)))))))
- (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
- ;; Apply L'hopital's rule to get the zeros if 0/0
- (* (op 0 1)
- (/ (/ (- x4 x3) 2)
- (sqrt (- (+ (* x2 x2)
- (+ (* x3 x3) (* x1 x4)))
- (+ (* x1 x3)
- (+ (* x2 x4) (* x2 x3)))))))))
- (list + -))))))))
+(define (path-min-max origin pointlist)
+
+ (define (line-part-min-max x1 x2)
+ (list (min x1 x2) (max x1 x2)))
+
+ (define (bezier-part-min-max x1 x2 x3 x4)
+ ((lambda (x) (list (reduce min 10000 x) (reduce max -10000 x)))
+ (map
+ (lambda (x)
+ (+ (* x1 (expt (- 1 x) 3))
+ (+ (* 3 (* x2 (* (expt (- 1 x) 2) x)))
+ (+ (* 3 (* x3 (* (- 1 x) (expt x 2))))
+ (* x4 (expt x 3))))))
+ (if (< (+ (expt x2 2) (+ (expt x3 2) (* x1 x4)))
+ (+ (* x1 x3) (+ (* x2 x4) (* x2 x3))))
+ (list 0.0 1.0)
+ (filter
+ (lambda (x) (and (>= x 0) (<= x 1)))
+ (append
+ (list 0.0 1.0)
+ (map (lambda (op)
+ (if (not (eqv? 0.0
+ (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2)))))
+ ;; Zeros of the bezier curve
+ (/ (+ (- x1 (* 2 x2))
+ (op x3
+ (sqrt (- (+ (expt x2 2)
+ (+ (expt x3 2) (* x1 x4)))
+ (+ (* x1 x3)
+ (+ (* x2 x4) (* x2 x3)))))))
+ (- (+ x1 (* 3 x3)) (+ x4 (* 3 x2))))
+ ;; Apply L'hopital's rule to get the zeros if 0/0
+ (* (op 0 1)
+ (/ (/ (- x4 x3) 2)
+ (sqrt (- (+ (* x2 x2)
+ (+ (* x3 x3) (* x1 x4)))
+ (+ (* x1 x3)
+ (+ (* x2 x4) (* x2 x3)))))))))
+ (list + -))))))))
(define (bezier-min-max x1 y1 x2 y2 x3 y3 x4 y4)
(map (lambda (x)
- (apply bezier-part-min-max x))
- `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
+ (apply bezier-part-min-max x))
+ `((,x1 ,x2 ,x3 ,x4) (,y1 ,y2 ,y3 ,y4))))
(define (line-min-max x1 y1 x2 y2)
(map (lambda (x)
- (apply line-part-min-max x))
- `((,x1 ,x2) (,y1 ,y2))))
+ (apply line-part-min-max x))
+ `((,x1 ,x2) (,y1 ,y2))))
((lambda (x)
(list
(reduce min +inf.0 (map caadr x))
(reduce max -inf.0 (map cadadr x))))
(map (lambda (x)
- (if (eq? (length x) 8)
- (apply bezier-min-max x)
- (apply line-min-max x)))
- (map (lambda (x y)
- (append (list (cadr (reverse x)) (car (reverse x))) y))
- (append (list (list 0 0))
- (reverse (cdr (reverse pointlist)))) pointlist))))
-
- (let* ((boundlist (connected-shape-min-max pointlist)))
+ (if (eq? (length x) 8)
+ (apply bezier-min-max x)
+ (apply line-min-max x)))
+ (map (lambda (x y)
+ (append (list (cadr (reverse x)) (car (reverse x))) y))
+ (append (list origin)
+ (reverse (cdr (reverse pointlist)))) pointlist))))
+
+(define-public (make-connected-path-stencil pointlist thickness
+ x-scale y-scale connect fill)
+ "Make a connected path described by the list @var{pointlist}, with
+thickness @var{thickness}, and scaled by @var{x-scale} in the X direction
+and @var{y-scale} in the Y direction. @var{connect} and @var{fill} are
+boolean arguments that specify if the path should be connected or filled,
+respectively."
+
+ ;; paths using this routine are designed to begin at point '(0 . 0)
+ (let* ((origin (list 0 0))
+ (boundlist (path-min-max origin pointlist))
+ ;; modify pointlist to scale the coordinates
+ (path (map (lambda (x)
+ (apply
+ (if (eq? 6 (length x))
+ (lambda (x1 x2 x3 x4 x5 x6)
+ (list 'curveto
+ (* x1 x-scale)
+ (* x2 y-scale)
+ (* x3 x-scale)
+ (* x4 y-scale)
+ (* x5 x-scale)
+ (* x6 y-scale)))
+ (lambda (x1 x2)
+ (list 'lineto
+ (* x1 x-scale)
+ (* x2 y-scale))))
+ x))
+ pointlist))
+ ;; a path must begin with a `moveto'
+ (prepend-origin (apply list (cons 'moveto origin) path))
+ ;; if this path is connected, add closepath to the end
+ (final-path (if connect
+ (append prepend-origin (list 'closepath))
+ prepend-origin))
+ (command-list (fold-right append '() final-path)))
+
(ly:make-stencil
- `(connected-shape
- ',pointlist
- ',thickness
- ',x-scale
- ',y-scale
- ',connect
- ',fill)
+ `(path ,thickness
+ `(,@',command-list)
+ 'round
+ 'round
+ ,(if fill #t #f))
(coord-translate
((if (< x-scale 0) reverse-interval identity)
(cons (* x-scale (list-ref boundlist 0))
EXTRA_DIST_FILES = $(call src-wildcard,*.sh) $(call src-wildcard,*.py)
EXTRA_DIST_FILES += pfx2ttf.fontforge
EXTRA_DIST_FILES += lily-git.tcl
+EXTRA_DIST_FILES += ref_check.tely
include $(depth)/make/stepmake.make
--- /dev/null
+#!/bin/sh
+
+# Build html versions of sections of lilypond Contributors' Guide
+#
+# Usage: cg-section.sh SECTION
+#
+# where SECTION is the section to be built.
+#
+# For example, CG 4 would be built by
+# cg-section.sh doc-work
+#
+# At the end of the run, the user is prompted whether or not to remove files
+#
+# Before first use, the following must be done:
+# * Set FROMDIR, DOCDIR, TODIR, LILYPONDBOOK, and TEXI2HTML for your system
+# * Create $DOCDIR
+# * Copy version.itexi from somewhere in your Documentation tree
+# (probably Documentation/out) to $DOCDIR
+#
+# Known limitations:
+#
+# * Doesn't use website css files
+# * Bitmap images aren't loaded properly
+#
+
+#
+# Customize the file here
+#
+FROMDIR="$HOME/lilypond"
+DOCDIR="$HOME/lilypond/tempdocs"
+TODIR="$DOCDIR/contributor"
+TEXI2HTML="texi2html"
+REFCHECK="$FROMDIR/scripts/auxiliar/ref_check.py"
+
+NAME=$1
+
+if test ! -d $TODIR; then
+ mkdir $TODIR
+fi
+if test ! -d $TODIR/out; then
+ mkdir $TODIR/out
+fi
+
+cp $FROMDIR/Documentation/common-macros.itexi $TODIR/common-macros.itexi
+cp $FROMDIR/Documentation/macros.itexi $DOCDIR/macros.itexi
+cp $DOCDIR/version.itexi $TODIR/version.itexi
+
+if test -e $TODIR/$NAME.html; then
+ rm $TODIR/$NAME.html
+fi
+
+if test -e $TODIR/out/$NAME.texi; then
+ rm $TODIR/out/$NAME.texi
+fi
+
+echo Running RefCheck
+python $REFCHECK
+
+cd $DOCDIR
+echo Running texi2html
+cat $DOCDIR/macros.itexi $FROMDIR/Documentation/contributor/$NAME.itexi > $TODIR/$NAME.texi
+$TEXI2HTML \
+ --no-validate \
+ --output=$TODIR/out/$NAME.html \
+ --I=$FROMDIR/Documentation \
+ --I=$TODIR/out \
+ $TODIR/$NAME.texi
+
+read -p "delete files? (y/n): "
+if [ "$REPLY" = "y" ]; then
+ echo "deleting files"
+ rm -rf $TODIR
+fi
--- /dev/null
+#!/bin/sh
+
+# Build html versions of sections of lilypond documentation
+#
+# Usage: doc-section.sh MANUAL SECTION
+#
+# where MANUAL is the manual and SECTION is the section to be built.
+#
+# For example, NR 1.2 would be built by
+# doc-section.sh notation rhythms
+#
+# and LM 1 would be built by
+# doc-section.sh learning tutorial
+#
+# At the end of the run, the user is prompted whether or not to remove files
+#
+# Before first use, the following must be done:
+# * Set FROMDIR, DOCDIR, TODIR, LILYPONDBOOK, and TEXI2HTML for your system
+# * Create $DOCDIR
+# * Copy version.itexi from somewhere in your Documentation tree
+# (probably Documentation/out) to $DOCDIR
+#
+# Known limitations:
+#
+# * Doesn't use website css files
+# * Bitmap images aren't loaded properly
+# * Won't build Contributors' Guide; see scripts/auxiliar/cg-section.sh
+#
+
+#
+# Customize the file here
+#
+FROMDIR="$HOME/lilypond"
+DOCDIR="$HOME/lilypond/tempdocs"
+LILYPONDBOOK="lilypond-book"
+TEXI2HTML="texi2html"
+REFCHECK="$FROMDIR/scripts/auxiliar/ref_check.py"
+
+DIRECTORY=$1
+NAME=$2
+TODIR=$DOCDIR/$NAME
+
+if test ! -d $TODIR; then
+ mkdir $TODIR
+fi
+if test ! -d $TODIR/out; then
+ mkdir $TODIR/out
+fi
+
+cp $FROMDIR/Documentation/common-macros.itexi $TODIR/common-macros.itexi
+cp $FROMDIR/Documentation/macros.itexi $DOCDIR/macros.itexi
+cp $DOCDIR/version.itexi $TODIR/version.itexi
+
+if test -e $TODIR/$NAME.html; then
+ rm $TODIR/$NAME.html
+fi
+
+if test -e $TODIR/out/$NAME.texi; then
+ rm $TODIR/out/$NAME.texi
+fi
+
+echo "Running lilypond-book"
+$LILYPONDBOOK \
+ -f texi-html \
+ -I $FROMDIR/Documentation/snippets \
+ -I $FROMDIR/Documentation/snippets/new \
+ -I $FROMDIR/input/manual \
+ -I $FROMDIR/Documentation \
+ -I $FROMDIR/Documentation/included \
+ -o $TODIR/out \
+ $FROMDIR/Documentation/$DIRECTORY/$NAME.itely
+BOOKRC=$?
+if [ $BOOKRC != 0 ]; then
+ echo "Lilypond-book returned code $BOOKRC"
+ exit $BOOKRC
+fi
+
+echo Running RefCheck
+python $REFCHECK
+
+cd $DOCDIR
+if test -f $TODIR/out/$NAME.texi; then
+ echo Running texi2html
+ cat $DOCDIR/macros.itexi $TODIR/out/$NAME.texi > $TODIR/$NAME.texi
+ $TEXI2HTML \
+ --no-validate \
+ --output=$TODIR/out/$NAME.html \
+ --I=$TODIR/out \
+ $TODIR/$NAME.texi
+fi
+
+read -p "delete files? (y/n): "
+if [ "$REPLY" = "y" ]; then
+ echo "deleting files"
+ rm -rf $TODIR
+fi
snippet_path,
visited_languages),
contents)
+ need_line_break_workaround = False
for language_code in langdefs.LANGDICT:
if not language_code in visited_languages:
base = os.path.splitext (os.path.basename (snippet_path))[0]
texidoc_translation = open (texidoc_path).read ()
texidoc_translation = texidoc_translation.replace ('\\', '\\\\')
contents = begin_header_re.sub ('\\g<0>\n' + texidoc_translation, contents, 1)
+ else:
+ need_line_break_workaround = True
contents = doctitle_re.sub (doctitle_sub, contents)
+ # workaround for a bug in the regex's that I'm not smart
+ # enough to figure out. -gp
+ if need_line_break_workaround:
+ first_translated = contents.find('%% Translation of')
+ keep = contents[:first_translated+5]
+ contents = keep + contents[first_translated+5:].replace('%% Translation of', '\n%% Translation of')
+
open (snippet_path, 'w').write (contents)
if in_dir:
--- /dev/null
+#!/usr/bin/env python
+import sys
+
+try:
+ infile = sys.argv[1]
+ lines = open(infile).readlines()
+except:
+ print "ERROR: need a filename"
+ sys.exit(1)
+
+nodes = []
+
+# Generate TOC
+for i in range(len(lines)):
+ line = lines[i]
+ if line.startswith('@node '):
+ node_name = line[6:].rstrip()
+ # ASSUME: the last line of the file is not @node
+ section_line = lines[i+1]
+ if (section_line.startswith('@chapter ') or
+ section_line.startswith('@unnumbered ') or
+ section_line.startswith('@appendix ')):
+ section_type = 1
+ elif (section_line.startswith('@section ') or
+ section_line.startswith('@unnumberedsec ') or
+ section_line.startswith('@appendixsec ')):
+ section_type = 2
+ elif (section_line.startswith('@subsection ') or
+ section_line.startswith('@unnumberedsubsec ') or
+ section_line.startswith('@appendixsubsec ')):
+ section_type = 3
+ elif (section_line.startswith('@subsubsection ') or
+ section_line.startswith('@unnumberedsubsubsec ') or
+ section_line.startswith('@appendixsubsubsec ')):
+ section_type = 4
+ else:
+ print "ERROR: unknown sectioning command"
+ print section_line
+ sys.exit(1)
+ nodes.append( (section_type, node_name) )
+
+# rewrite file with new menus from TOC
+outfile = open(infile, 'w')
+line_index = 0
+toc_index = 0
+while line_index < len(lines):
+ line = lines[ line_index ]
+ if line.startswith('@menu'):
+ outfile.write('@menu\n')
+ # ASSUME: every @menu has a proper @end menu
+ while not lines[line_index].startswith('@end menu'):
+ line_index += 1
+
+ # write new menu entries
+ menu_type = nodes[toc_index][0]
+ i = toc_index
+ while nodes[i][0] == menu_type:
+ i += 1
+ if i >= len(nodes):
+ break
+ added = 0
+ while True:
+ if i >= len(nodes):
+ added = 1
+ break
+ section_type = nodes[i][0]
+ if section_type == menu_type+1:
+ node_name = nodes[i][1]
+ node_formatted = '* ' + node_name + '::\n'
+ outfile.write( node_formatted )
+ added += 1
+ if section_type == menu_type:
+ added += 1
+ break
+ i += 1
+ toc_index += added
+ line = lines[line_index]
+ line_index += 1
+ # write normal line. Removes tabs and spaces; leaves EOL
+ outfile.write(line.rstrip('\t '))
+outfile.close()
+
--- /dev/null
+
+"""
+*** RefCheck
+
+Flow
+ Read files
+ On @defManual manual refManual eg @defManual LM rlearning
+ Associate manual name 'manual' with reference @'refManual'{ ... }
+ Add 'refManual' to list of keywords
+ On @setManual manual set current manual name to 'manual'
+ On @include open and process new file
+ On @node add node to Nodes list with current manual name and current file name
+ On @ref add contents to References list with refManual, current manual name and current file name
+ On one of refManual keywords add contents to References list with ditto
+ Match refs and nodes
+ Process References list:
+ Check reference is contained in Nodes list with refManual in Nodes = refManual in References
+ Print results
+
+Known issues
+ Node names containing commas are only checked up to the comma
+ Spurious warnings "Xref should be internal" for files in /included
+
+"""
+
+
+##################################################
+class CrossRefs:
+ """ Holds References and Nodes """
+ def __init__(self):
+ self.Manuals = {}
+ self.Nodes = {}
+ self.nodeNames = {} # used to check for duplicates only
+ self.Refs = []
+ self.nodeCount = 0
+
+ def addManual(self, manualName, refManual):
+ self.Manuals[refManual] = manualName
+
+ def getRefManuals(self):
+ return self.Manuals.keys()
+
+ def getManualName(self, refManual):
+ return self.Manuals[refManual]
+
+ def addNode(self, nodeName, manualName, fileName):
+ global returnCode
+# print "Node: ", nodeName, " in ", manualName, " found in ", fileName
+ if manualName+"/"+nodeName in self.Nodes.keys():
+ print "Error: Duplicate nodename ",nodeName, " in ", fileName, " and ", self.Nodes[manualName+nodeName]
+ returnCode=1
+ self.Nodes[manualName + "/" + nodeName] = [manualName, fileName]
+ self.nodeNames[nodeName] = fileName
+
+ def addRef(self, toManualName, toHeading, inFileName):
+# if inFileName == "notation/vocal.itely":
+# print "Ref to ", toManualName, "/",toHeading, " found in ", inFileName
+ self.Refs.append([toManualName + "/" + toHeading, inFileName])
+
+ def check(self):
+ noErrors = True
+ for [refHeading, refFileName] in self.Refs:
+ try:
+ targetFileName = self.Nodes[refHeading]
+# if refFileName == "notation/vocal.itely":
+# print "ref to: ", refHeading, " in ", refFileName, " found in ", targetFileName
+ except KeyError:
+ noErrors = False
+ print "ref to: ", refHeading, " in ", refFileName, " not found"
+ if noErrors:
+ print " All references satisfied"
+ else:
+ returnCode=1
+
+##################################################
+class File:
+ """ Process an included file """
+
+ # Class variables
+ CurrentManualName = ""
+ DefaultPath = ""
+ Excludes = []
+ Paths = {}
+
+ # Methods
+ def __init__(self, fileName):
+ self.fileName = fileName
+ try:
+ self.fullFileName = File.Paths[fileName] + fileName
+ except KeyError:
+ self.fullFileName = File.DefaultPath + fileName
+
+ def read(self, crossRefs):
+ """ Process File """
+
+ skip = False
+ try:
+ myfile = open(self.fullFileName, 'r')
+ except IOError:
+ print "File ", self.fullFileName, " referenced in ", File.CurrentManualName, " but not found"
+ return
+ remainderLine = ""
+ lineNo = 0
+ for line in myfile:
+ lineNo += 1
+ words = line.split()
+ if len(words) > 0:
+ if words[0] == "@ignore" or words[0] == "@macro":
+ skip = True
+ if skip and len(words) > 1:
+ if words[0] == "@end" and (words[1].find("ignore") >= 0 or words[1].find("macro") >= 0):
+ skip = False
+
+ if not skip and words[0].find("@c") < 0:
+ if words[0].find("@defManual") >= 0:
+ # Manual definition found - extract manual name and refManual string
+ manualName = words[1]
+ refManual = words[2]
+ crossRefs.addManual(manualName, refManual)
+# print manualName, refManual
+
+ elif words[0].find("@defaultPath") >=0:
+ File.DefaultPath = words[1]
+
+ elif words[0].find("@path") >=0:
+ File.Paths[words[1]] = words[2]
+
+ elif words[0].find("@setManual") >= 0:
+ File.CurrentManualName = words[1]
+# print " Checking ", File.CurrentManualName
+
+ elif words[0].find("@exclude") >=0:
+ File.Excludes.append(words[1])
+
+ elif words[0].find("@include") >= 0:
+ if words[1] not in File.Excludes:
+ currentFileName = words[1]
+# print " File: ", currentFileName
+ currentFile = File(currentFileName)
+ currentFile.read(crossRefs)
+
+ elif words[0] == "@node":
+ nodeName = line[6:-1]
+ crossRefs.addNode(nodeName, File.CurrentManualName, self.fileName)
+
+ # Find references
+
+ twoLines = remainderLine + ' ' + line.strip()
+ manualRefStrings = crossRefs.getRefManuals()
+ refFound = False
+ for manualRefString in manualRefStrings:
+ toManualName = crossRefs.getManualName(manualRefString)
+ actualToManualName = toManualName
+ if toManualName == "this":
+ toManualName = File.CurrentManualName
+ refString = "@" + manualRefString + "{"
+ refStart = twoLines.find(refString)
+ if refStart >= 0:
+ refFound = True
+ if actualToManualName == File.CurrentManualName:
+ print "Warning: xref should be internal around line ", lineNo, " in ", self.fileName
+ twoLines = twoLines[refStart:]
+ refNodeStart = twoLines.find("{") + 1
+ # TODO Need to check here for nested {}
+ refNodeEnd = twoLines.find("}")
+ refNodeEndComma = twoLines.find(",")
+ if refNodeEndComma > 0:
+ refNodeEnd = min(refNodeEnd, refNodeEndComma)
+ if refNodeEnd >= 0:
+ crossRefs.addRef(toManualName, twoLines[refNodeStart:refNodeEnd], self.fileName)
+ remainderLine=twoLines[refNodeEnd+1:]
+ if refFound:
+ refFound = False
+ break
+ if not refFound:
+ remainderLine = ""
+
+ myfile.close()
+ return
+
+topFile = File("scripts/auxiliar/ref_check.tely") # TODO get from input params
+print "RefCheck ver 0.1"
+returnCode=0
+crossRefs = CrossRefs()
+topFile.read(crossRefs)
+crossRefs.check()
+if returnCode > 0:
+ print "Errors found: status code: ",returnCode
\ No newline at end of file
--- /dev/null
+
+Manual names and reference keywords:
+(refs to IR not checked)
+@defManual this ref
+@defManual CH rchanges
+@defManual EL rextend
+@defManual WE rgeneral
+@defManual ES ressay
+@defManual LM rlearning
+@defManual MG rgloss
+@defManual NR ruser
+@defManual AU rprogram
+@defManual CG rcontrib
+
+Files to be excluded (not available in git):
+@exclude colorado.itexi
+@exclude computer-notation.itexi
+@exclude context-properties.tely
+@exclude engravingbib.itexi
+@exclude identifiers.tely
+@exclude layout-properties.tely
+@exclude macros.itexi
+@exclude markup-commands.tely
+@exclude markup-list-commands.tely
+@exclude scheme-functions.tely
+@exclude type-predicates.tely
+@exclude version.itexi
+@exclude weblinks.itexi
+
+@defaultPath Documentation/
+
+Learning Manual
+@setManual LM
+@include learning.tely
+
+Music Glossary
+@setManual MG
+@include music-glossary.tely
+
+Notation Reference
+@setManual NR
+@include notation.tely
+Dummy nodes to satisfy refs to text markup
+@node Text markup commands
+@node Font
+@node Align
+@node Graphic
+@node Instrument Specific Markup
+@node Music
+@node Text markup list commands
+
+Application Usage
+@setManual AU
+@include usage.tely
+
+Contributors Guide
+@setManual CG
+@include contributor.texi
+
+Extending Lilypond
+@setManual EL
+@include extending.tely
+
+Essay
+@setManual ES
+@include essay.tely
+
+General (web)
+@setManual WE
+@include web.texi
+
--- /dev/null
+#! /bin/bash
+#
+# Update the version number in lilypond snippets without running convert-ly
+# on the snippets
+# Note: this does not change anything but the version number, and it will only
+# change the specified version number
+#
+# This is useful when a patch containing a number of snippets (due to a change
+# in syntax) has not completed review before a new development release
+# is made.
+#
+# Usage: update-patch-version old-version new-version
+
+if [ $# -ne 2 ] # need exactly 2 arguments
+then
+ echo "Usage: update-patch-version old-version new-version"
+ exit 1
+fi
+
+git grep --name-only $1 | xargs sed -i -e s/$1/$2/g
+
+++ /dev/null
-#!@PYTHON@
-import os
-import sys
-import getopt
-import tempfile
-
-# usage:
-def usage ():
- print 'usage: %s [-s style] [-o <outfile>] BIBFILES...'
-
-(options, files) = getopt.getopt (sys.argv[1:], 's:o:', [])
-
-output = 'bib.html'
-style = 'long'
-
-for (o,a) in options:
- if o == '-h' or o == '--help':
- usage ()
- sys.exit (0)
- elif o == '-s' or o == '--style':
- style = a
- elif o == '-o' or o == '--output':
- output = a
- else:
- raise Exception ('unknown option: %s' % o)
-
-
-if style not in ['alpha','index','long','longp','long-pario','short','short-pario','split']:
- sys.stderr.write ("Unknown style \`%s'\n" % style)
-
-if not files:
- usage ()
- sys.exit (2)
-
-
-def strip_extension (f, ext):
- (p, e) = os.path.splitext (f)
- if e == ext:
- e = ''
- return p + e
-
-nf = []
-for f in files:
- nf.append (strip_extension (f, '.bib'))
-
-files = ','.join (nf)
-
-tmpfile = tempfile.mkstemp ('bib2html')[1]
-
-open (tmpfile + '.aux', 'w').write (r'''
-\relax
-\citation{*}
-\bibstyle{html-%(style)s}
-\bibdata{%(files)s}''' % vars ())
-
-tmpdir = tempfile.gettempdir ()
-
-cmd = "TEXMFOUTPUT=%s bibtex %s" % (tmpdir, tmpfile)
-
-sys.stdout.write ("Invoking `%s'\n" % cmd)
-stat = os.system (cmd)
-if stat <> 0:
- sys.exit(1)
-
-
-#TODO: do tex -> html on output
-
-bbl = open (tmpfile + '.bbl').read ()
-
-open (output, 'w').write (bbl)
-
-
-def cleanup (tmpfile):
- for a in ['aux','bbl', 'blg']:
- os.unlink (tmpfile + '.' + a)
-
-cleanup (tmpfile)
-
--- /dev/null
+#!@PYTHON@
+import os
+import sys
+import getopt
+import tempfile
+
+# usage:
+def usage ():
+ print 'usage: %s [-s style] [-o <outfile>] BIBFILES...'
+
+(options, files) = getopt.getopt (sys.argv[1:], 's:o:', [])
+
+output = 'bib.itexi'
+style = 'long'
+
+for (o,a) in options:
+ if o == '-h' or o == '--help':
+ usage ()
+ sys.exit (0)
+ elif o == '-s' or o == '--style':
+ style = a
+ elif o == '-o' or o == '--output':
+ output = a
+ else:
+ raise Exception ('unknown option: %s' % o)
+
+
+if style not in ['alpha','index','long','longp','long-pario','short','short-pario','split']:
+ sys.stderr.write ("Unknown style \`%s'\n" % style)
+
+if not files:
+ usage ()
+ sys.exit (2)
+
+
+def strip_extension (f, ext):
+ (p, e) = os.path.splitext (f)
+ if e == ext:
+ e = ''
+ return p + e
+
+nf = []
+for f in files:
+ nf.append (strip_extension (f, '.bib'))
+
+files = ','.join (nf)
+
+tmpfile = tempfile.mkstemp ('bib2texi')[1]
+
+open (tmpfile + '.aux', 'w').write (r'''
+\relax
+\citation{*}
+\bibstyle{texi-%(style)s}
+\bibdata{%(files)s}''' % vars ())
+
+tmpdir = tempfile.gettempdir ()
+
+cmd = "TEXMFOUTPUT=%s bibtex %s" % (tmpdir, tmpfile)
+
+sys.stdout.write ("Invoking `%s'\n" % cmd)
+stat = os.system (cmd)
+if stat <> 0:
+ sys.exit(1)
+
+
+#TODO: do tex -> itexi on output
+
+bbl = open (tmpfile + '.bbl').read ()
+
+open (output, 'w').write (bbl)
+
+
+def cleanup (tmpfile):
+ for a in ['aux','bbl', 'blg']:
+ os.unlink (tmpfile + '.' + a)
+
+cleanup (tmpfile)
+
"http://lilypond.org",
mshort+getTrans(" (did not exist in 2.12)",lang))
continue
- make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
- url + '.pdf',
- getTrans(manual.capitalize(),lang) + '.pdf')
- make_ver_link(macroLang("manual"+name+mshort+'Split',lang),
- url + '/index.html',
- getTrans(manual.capitalize(),lang) +
- getTrans(' (split HTML)',lang))
- make_ver_link(macroLang("manual"+name+mshort+'Big',lang),
- url + '-big-page.html',
- getTrans(manual.capitalize(),lang) +
- getTrans(' (big HTML)',lang))
# this is stupid and I shouldn't have bothered trying
# to support the 2.12 docs and it will be deleted once
# 2.14 is out and the website won't be visible to users
# until 2.14 is out. -gp
if (url.endswith('.html')):
+ make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
+ url,
+ getTrans(manual.capitalize(),lang) + '.pdf')
+ make_ver_link(macroLang("manual"+name+mshort+'Split',lang),
+ url,
+ getTrans(manual.capitalize(),lang) +
+ getTrans(' (split HTML)',lang))
+ make_ver_link(macroLang("manual"+name+mshort+'Big',lang),
+ url,
+ getTrans(manual.capitalize(),lang) +
+ getTrans(' (big HTML)',lang))
newurl = url
else:
+ make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
+ url + '.pdf',
+ getTrans(manual.capitalize(),lang) + '.pdf')
+ make_ver_link(macroLang("manual"+name+mshort+'Split',lang),
+ url + '/index.html',
+ getTrans(manual.capitalize(),lang) +
+ getTrans(' (split HTML)',lang))
+ make_ver_link(macroLang("manual"+name+mshort+'Big',lang),
+ url + '-big-page.html',
+ getTrans(manual.capitalize(),lang) +
+ getTrans(' (big HTML)',lang))
newurl = url + '/index.html'
make_ver_link(macroLang("manual"+name+mshort+'SplitNoName',lang),
newurl,
make_ver_link(macroLang("regtest"+name+"Xml", lang),
url+"musicxml/collated-files.html",
getTrans("MusicXML Regression tests for ", lang)+version)
+ make_ver_link(macroLang("regtest"+name+"Abc", lang),
+ url+"abc2ly/collated-files.html",
+ getTrans("abc2ly Regression tests for ", lang)+version)
+ make_ver_link(macroLang("regtest"+name+"LilypondBook", lang),
+ url+"lilypond-book/collated-files.html",
+ getTrans("lilypond-book Regression tests for ", lang)+version)
make_ver_link(macroLang("regtest"+name+"XmlPdf", lang),
url+"musicxml/collated-files.html",
getTrans("PDF of MusicXML regtests for ", lang)+version)
+ make_ver_link(macroLang("regtest"+name+"AbcPdf", lang),
+ url+"abc2ly/collated-files.html",
+ getTrans("PDF of abc2ly regtests for ", lang)+version)
+ make_ver_link(macroLang("regtest"+name+"LilypondBookPdf", lang),
+ url+"lilypond-book/collated-files.html",
+ getTrans("PDF of lilypond-book regtests for ", lang)+version)
def make_doctarball_links(name, version, lang):
url = depth + "download/binaries/documentation/lilypond-"
urchinTracker();
</script>
""");
+ #### add google tracker goals
+ if (line.find("href=\"http://download.linuxaudio.org") >= 0):
+ # TODO: more ugly hardcoding to make releases hard. :(
+ if (line.find('2.12') >= 0):
+ line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.12\');\" href=')
+ elif (line.find('2.13') >= 0):
+ line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.13\');\" href=')
### add language selection footer
if (line.find("<div id=\"verifier_texinfo\">") >= 0):
outfile.write("<div id=\"footer\">\n")
if high:
commandname += "H"
command += """\\combine
- \\raise #2.5 \\musicglyph #\"accordion.accDot\"
+ \\raise #2.5 \\musicglyph #\"accordion.dot\"
"""
middle = mxl_event.get_maybe_exist_named_child ('accordion-middle')
if middle:
if txt == 3:
commandname += "MMM"
command += """\\combine
- \\raise #1.5 \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\musicglyph #\"accordion.dot\"
\\combine
- \\raise #1.5 \\translate #(cons 1 0) \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\translate #(cons 1 0) \\musicglyph #\"accordion.dot\"
\\combine
- \\raise #1.5 \\translate #(cons -1 0) \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\translate #(cons -1 0) \\musicglyph #\"accordion.dot\"
"""
elif txt == 2:
commandname += "MM"
command += """\\combine
- \\raise #1.5 \\translate #(cons 0.5 0) \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\translate #(cons 0.5 0) \\musicglyph #\"accordion.dot\"
\\combine
- \\raise #1.5 \\translate #(cons -0.5 0) \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\translate #(cons -0.5 0) \\musicglyph #\"accordion.dot\"
"""
elif not txt <= 0:
commandname += "M"
command += """\\combine
- \\raise #1.5 \\musicglyph #\"accordion.accDot\"
+ \\raise #1.5 \\musicglyph #\"accordion.dot\"
"""
low = mxl_event.get_maybe_exist_named_child ('accordion-low')
if low:
commandname += "L"
command += """\\combine
- \\raise #0.5 \musicglyph #\"accordion.accDot\"
+ \\raise #0.5 \musicglyph #\"accordion.dot\"
"""
- command += "\musicglyph #\"accordion.accDiscant\""
+ command += "\musicglyph #\"accordion.discant\""
command = "\\markup { \\normalsize %s }" % command
# Define the newly built command \accReg[H][MMM][L]
additional_definitions[commandname] = "%s = %s" % (commandname, command)