@end ignore
+@item
+Tuplets are now created with the @code{\tuplet} command, which
+takes a fraction @code{@var{t}/@var{n}} to specify that @var{t}
+notes are played in the time usually allowed for @var{n}. One
+@code{\tuplet} command can create several tuplet groups if their
+duration is typed after the fraction.
+@lilypond[quote,verbatim,relative=2]
+\tuplet 3/2 { c8 d e } \tuplet 3/2 { f e d } c2
+\tuplet 3/2 4 { c8 d e f e d } c2
+@end lilypond
+The @code{\times} command with its inverted fraction order
+@code{@var{n}/@var{t}} is still available.
+
@item
Introducing two new markup-commands; @code{\draw-dashed-line} and
@code{\draw-dotted-line}.
@item
other than that, everything is on the table. Is it a problem to
have the tagline inside \header? What should the default behavior
-of \include be? When we abolish \times, do we move to \tuplet 3:2
-or \tuplet 2/3 or what (for typical triplets in 4/4 time)?
+of \include be?
@item
we need to get standards for command names. This will help users
* Doc build::
* Website build::
* Building an Ubuntu distro::
-* Building GUB::
@end menu
getting source files and building lp and docs.
@end enumerate
-
-@node Building GUB
-@section Building GUB
-
-GUB - the Grand Unified Builder - is used to build the release
-versions of LilyPond. For background information, see
-@ref{Grand Unified Builder (GUB)}. The simplest way to set up a
-GUB build environment is to use a virtual machine with LilyDev
-(@ref{LilyDev}). Follow the instructions on that page to set this
-up. Make sure that your virtual machine has enough disk space -
-a GUB installation takes over 30 GBytes of disk space, and if you
-allocate too little, it will fail during the setting up stage and
-you will have to start again. 64 GBytes should be sufficient.
-
-While GUB is being built, any interruptions are likely to make it
-almost impossible to restart. If at all possible, leave the build
-to continue uniterrupted.
-
-Download GUB and start the set up:
-
-@example
-git clone git://github.com/gperciva/gub/gub.git
-cd gub
-make bootstrap
-@end example
-
-This downloads and installs a number of packages. You may find
-some fail during download and you will need to download them
-manually. For example, the perl archive. If this happens,
-download it from
-@uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
-archive to @file{gub/downloads/perl/}. Continue the set up with:
-
-@example
-make bootstrap
-@end example
-
-Once this has completed successfully, you can build the LilyPond
-release package. However, this uses an archived version of the
-regression tests, so it is better to download this first.
-Download the test output from lilypond.org:
-
-@smallexample
-@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
-@end smallexample
-
-Copy the tarball into @file{gub/regtests/}, and tell the build
-system that you have done this:
-
-@example
-touch regtests/ignore
-@end example
-
-Now start the GUB build:
-
-@example
-make lilypond
-@end example
-
-That's it. This will build LilyPond from current master. To build
-the current unstable release, run:
-
-@example
-make LILYPOND_BRANCH=release/unstable lilypond
-@end example
For contributors/developers: follow the steps in
@ref{Commits and patches}, and @ref{Pushing to staging}.
+@ignore
For people doing maintenance tasks: git-cl is adding issues, James
is testing them, Colin is selecting them for countdowns, and
Patchy is merging from staging to master. In the coming weeks,
these tasks will be more and more automated.
+@end ignore
+
+@subheading Patch cycle
+
+@itemize
+
+@item
+Patches get added to the tracker and to Rietveld by the @qq{git-cl} tool, with
+a status of @qq{patch-new}.
+
+@item
+The automated tester, Patchy, verifies that the patch can be applied
+to current master. By default, it checks that the patch allows @code{make}
+and @code{make test} to complete successfully. It can also be configured to
+check that @code{make doc} is successful. If it passes, Patchy changes the
+status to @qq{patch-review} and emails the developer list. If the patch
+fails, Patchy sets it to @qq{patch-needs_work} and notifies the developer list.
+
+@item
+The Patch Handler reviews the tracker periodically, to list patches
+which have been on review for at least 24 hours. The list is found at
+
+@smallexample
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch%20patch=review&sort=modified+patch&colspec=ID%20Type%20Status%20Priority%20Owner%20Patch%20Summary%20Modified}
+@end smallexample
+
+@item
+For each patch, the Handler reviews any discussion on the tracker
+and on Rietveld, to determine whether the patch can go forward. If
+there is any indication that a developer thinks the patch is not
+ready, the Handler marks it @qq{patch-needs_work} and makes a comment
+regarding the reason, referring to the Rietveld item if needed.
+
+@item
+Patches with explicit approval, or at least no negative comment, can
+be updated to @qq{patch-countdown}. When saving the tracker item,
+clear the @qq{send email} box to prevent sending notification for
+each patch.
+
+@item
+The Patch Handler sends an email to the developer list, with a fixed
+subject line, to enable filtering by email clients:
+
+@example
+PATCH: Countdown to 20130113
+@end example
+
+The text of the email sets the deadline for this countdown batch. At
+present, batches are done on Tuesday, Thursday and Sunday evenings.
+
+The body of the email lists the patches grouped by patch type, and for
+each patch, shows the tracker issue number and title, with a link to
+the Rietveld item. Copying the information from the website and pasting
+into the email gives a hyperlinked version of the information.
+
+@smallexample
+
+For 20:00 MST Tuesday January 8:
+
+Crash:
+ Issue 2990: \RemoveEmptyStaves in StaffGroup context crashes - R 7069044
+
+Defect:
+ Issue 677: \score markup confuses paper settings - R 7028045
+ Issue 3050: displayLilyMusic produced erroneous code for rightHandFinger arguments - R 7032045
+
+Documentation:
+ Issue 2952: Upgrade documentation of \once - R 7031053
+ Issue 3044: Dual license the files under mf/ using OFL. - R 6970046
+ Issue 3084: [DOC]Add "Known issue" in NR 1.2.1 about Scaling durations with rational numbers - R 7071044
+
+Enhancement:
+ Issue 3061: make \articulate handle colon-type tremolos - R 7033045
+ Issue 3082: Patch: Let ChordNameVoice use the same performers as Voice - R 7054043
+ Issue 3083: Patch: Chord change detection in fretboards should depend on placements, not notes - R 7062043
+ Issue 2983: assertion failed with \glissando - R 6625078
+
+
+Cheers,
+Colin
+
+@end smallexample
+
+@item
+On the scheduled countdown day, the Patch Handler reviews the
+previous list of patches on countdown, with the same procedure and
+criteria as before. Patches with no controversy can be set to
+@qq{patch-push} with a courtesy message added to the comment block.
+
+@item
+Roughly at six month intervals, the Patch Handler can list the
+patches which have been set to @qq{patch-needs-work} and send the
+results to the developer list for review. In most cases, these
+patches should be marked @qq{patch-abandoned} but this should come
+from the developer if possible.
+
+@item
+As in most organisations of unpaid volunteers, fixed procedures are
+useful in as much as they get the job done. In our community, there
+is room for senior developers to bypass normal patch handling flows,
+particularly now that the testing of patches is largely automated.
+Similarly, the minimum age of 24 hours can reasonably be waived if
+the patch is minor and from an experienced developer.
+
+
+@end itemize
@ignore
There is a single Patch Meister, and a number of Patch Helpers
* Minor release checklist::
* Major release checklist::
* Release extra notes::
+* Notes on builds with GUB::
@end menu
@enumerate
@item
-Switch to the release branch, get changes, prep release
-announcement. This requires a clean index and work tree. If the
-checkout displays modified files, you might want to run @code{git reset
---hard} before continuing.
+Using any system with git pull access (not necessarily the GUB
+build machine), use the commands below to switch to the release
+branch, get changes and prepare the release
+announcement. This requires a system which has the release/unstable
+branch. If you get a warning saying you are in @code{detached HEAD}
+state, then you should create a release/unstable branch with
+@code{git checkout release/unstable}.
+
+Check the environment variables are set as in
+@ref{Environment variables}.
+
+You need to ensure you have a clean index and work tree. If the
+checkout displays modified files, you might want to run
+@code{git reset --hard} before continuing.
@example
git fetch
-git checkout origin/release/unstable
-git merge origin
+git checkout release/unstable
+git merge origin/master
make -C $LILYPOND_BUILD_DIR po-replace
mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
-vi Documentation/web/news-front.itexi Documentation/web/news.itexi
+gedit Documentation/web/news-front.itexi Documentation/web/news.itexi
@end example
@item
@end enumerate
+@node Notes on builds with GUB
+@section Notes on builds with GUB
+
+@subsubheading Building GUB
+
+GUB - the Grand Unified Builder - is used to build the release
+versions of LilyPond. For background information, see
+@ref{Grand Unified Builder (GUB)}. The simplest way to set up a
+GUB build environment is to use a virtual machine with LilyDev
+(@ref{LilyDev}). Follow the instructions on that page to set this
+up. Make sure that your virtual machine has enough disk space -
+a GUB installation takes over 30 GBytes of disk space, and if you
+allocate too little, it will fail during the setting up stage and
+you will have to start again. 64 GBytes should be sufficient.
+
+While GUB is being built, any interruptions are likely to make it
+almost impossible to restart. If at all possible, leave the build
+to continue uninterrupted.
+
+Download GUB and start the set up:
+
+@example
+git clone git://github.com/gperciva/gub/gub.git
+cd gub
+make bootstrap
+@end example
+
+This will take a very long time, even on a very fast computer.
+You will need to be patient. It's also liable to fail - it
+downloads a number of tools, and some will have moved and others
+won't respond to the network. For example, the perl archive.
+If this happens, download it from
+@uref{http://www.cpan.org/src/5.0/perl-5.10.0.tar.gz}, saving the
+archive to @file{gub/downloads/perl/}. Continue the set up with:
+
+@example
+make bootstrap
+@end example
+
+Once this has completed successfully, you can build the LilyPond
+release package. However, this uses an archived version of the
+regression tests, so it is better to download this first.
+Download the test output from lilypond.org (you will need to
+replace @code{2.15.33-1} with the latest build):
+
+@smallexample
+@uref{http://lilypond.org/download/binaries/test-output/lilypond-2.15.33-1.test-output.tar.bz2}
+@end smallexample
+
+Copy the tarball into @file{gub/regtests/}, and tell the build
+system that you have done this:
+
+@example
+touch regtests/ignore
+@end example
+
+Now start the GUB build:
+@example
+make lilypond
+@end example
+
+That's it. This will build LilyPond from current master. To build
+the current unstable release, run:
+
+@example
+make LILYPOND_BRANCH=release/unstable lilypond
+@end example
+
+The first time you do this, it will take a very long time.
+
+Assuming the build has gone well, it can be uploaded using:
+
+@example
+make lilypond-upload
+ LILYPOND_BRANCH=release/unstable
+ LILYPOND_REPO_URL=git://git.sv.gnu.org/lilypond.git
+@end example
+
+@subsubheading Output files
+
+GUB builds the files it needs into the directory
+@code{gub/target/}. As a general rule, these don't need to be
+touched unless there is a problem building GUB (see below).
+The files to be uploaded are in @code{gub/uploads/}. Once the
+build has completed successfully, there should be 8
+installation files and 3 archives, totalling about 600MB.
+There are also 4 directories:
+
+@example
+gub/signatures
+gub/localdoc
+gub/webdoc
+gub/webtest
+@end example
+
+@code{signatures} contains files that are used to track whether
+some of the archives have already been built. Don't touch
+these.
+
+@code{localdoc} probably contains local copies of the
+documentation.
+
+@code{webdoc} contains the documentation to be uploaded.
+
+@code{webtest} contains the regtest comparison, which should
+be checked before upload, and is also uploaded for subsequent
+checking.
+
+The total upload is about 700 MB in total, and on an ADSL
+connection will take about 4 hours to upload.
+
+@subsubheading Subsequent builds
+
+In principle, building the next release of LilyPond requires
+no action other then following the instructions in
+@ref{Minor release checklist}. Because much of the
+infrastructure has already been built, it will take much less
+time - about an hour on a fast computer.
+
+Continuing to build LilyPond without any other
+archiving/deletion of previous builds is likely to be successful,
+but will take up a fair amount of disk space (around 2GB per
+build) which may be a problem with a Virtual Machine. It's
+therefore recommended to move (not copy) @code{gub/uploads} to
+another machine/disk after each build, if space is at a premium.
+
+However, if a significant change has been made to the LilyPond
+source (e.g. added source files) the build may fail if tried on
+top of a previous build. If this happens, be sure to
+move/delete @code{gub/uploads} and all mentions of LilyPond
+in @code{gub/target}. The latter can be achieved with this
+command:
+
+@example
+rm -rf target/*/*/*lilypond*
+@end example
+Be @emph{very} careful with this command. Typing it wrongly
+could wipe your disk completely.
+
+@subsubheading Updating the web site
+
+The @code{make lilypond-upload} command updates the documentation
+on the LilyPond web site. However, it does @emph{not} update
+any part of the site that is not part of the documentation - for
+example, the front page (@code{index.html}). The website is
+updated by 2 cron jobs running on the web server. One of these
+pulls git master to the web server, and the other makes the
+website with the standard @code{make website} command. They run
+hourly, 30 minutes apart. So - to update the front page of the
+website, it's necessary to update @code{VERSION} and
+@code{news-front.itexi} in master and then wait for the cron
+jobs to run. (N.B. - this is done by pushing the changes to
+staging and letting patchy do its checks before it pushes to
+master).
@item
Move into the top source directory and then configure @command{git
-cl} with the following commands. If you do not understand any
-question, just answer with a newline (CR).
+cl} with the following commands:
@example
cd $LILYPOND_GIT
git cl config
@end example
+For the @qq{Rietveld server} question, the default value
+(@qq{codereview.appspot.com}) should be accepted by
+answering with a newline (CR).
+
The @qq{CC list} question should be answered with:
@example
lilypond-devel@@gnu.org
@end example
+The @qq{Tree status URL} value should be left blank. So should
+the @qq{ViewVC URL} value, since it is used by @command{git cl
+dcommit} which is only for repositories which use @command{git
+svn} (LilyPond doesn't).
+
@end enumerate
@subsubheading Uploading patch set
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines:
takže triola má 2/3 jako svůj zlomek:
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Ozdoby
ulehčit, když se skupiny not často opakují.
@lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
barA = { \tripletA \tripletA \tripletA \tripletA }
\relative c'' {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Pavel Fric
@node Základní pojmy
@lilypond[quote,verbatim,ragged-right]
{
-r16[ g \times 2/3 { r16 e'8] }
-g16( a \times 2/3 { b16 d) e' }
-g8[( a \times 2/3 { b8 d') e'~] } |
-\times 4/5 { e'32\( a b d' e' } a'4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g16( a \tuplet 3/2 { b16 d) e' }
+g8[( a \tuplet 3/2 { b8 d') e'~] } |
+\tuplet 5/4 { e'32\( a b d' e' } a'4.\)
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Ladění výstupu
@chapter Ladění výstupu
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@c NOTE Tuplet brackets collide if notes are high on staff
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@item Moment
@tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
konstruiert
- @tab @code{(ly:make-moment 1 4)},
- @code{(ly:make-moment 3 8)}
+ @tab @code{(ly:make-moment 1/4)},
+ @code{(ly:make-moment 3/8)}
@item Zahl
@tab Eine beliebige positive oder negative Dezimalzahl
@tab @code{3.5}, @code{-2.45}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Pavel Fric
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@docLinksBare{Příručka pro vývojářské práce, přispěvatel,
@rcontribnamed{Top,Příručka pro vývojářské práce},
- @manualDevelContributorSplit-cs,
- @manualDevelContributorBig-cs, 500 kB,
- @manualDevelContributorPdf-cs, 2.8 MB}
+ @manualDevelContributorSplit,
+ @manualDevelContributorBig, 500 kB,
+ @manualDevelContributorPdf, 2.8 MB}
@divEnd
@docLinkPdf{Lernen,learning,@manualDevelLearningPdf-cs}
@item
-@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit-cs}
+@docLinkSplit{Glossar,music-glossary,@manualDevelGlossarySplit}
@tab
-@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig-cs}
+@docLinkBig{Glossar,music-glossary,@manualDevelGlossaryBig}
@tab
-@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf-cs}
+@docLinkPdf{Glossar,music-glossary,@manualDevelGlossaryPdf}
@item
-@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit-cs}
+@docLinkSplit{Aufsatz,essay,@manualDevelEssaySplit}
@tab
-@docLinkBig{Aufsatz,essay,@manualDevelEssayBig-cs}
+@docLinkBig{Aufsatz,essay,@manualDevelEssayBig}
@tab
-@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf-cs}
+@docLinkPdf{Aufsatz,essay,@manualDevelEssayPdf}
@headitem Často používané příručky
@item
-@docLinkSplit{Notation,notation,@manualDevelNotationSplit-cs}
+@docLinkSplit{Notation,notation,@manualDevelNotationSplit}
@tab
-@docLinkBig{Notation,notation,@manualDevelNotationBig-cs}
+@docLinkBig{Notation,notation,@manualDevelNotationBig}
@tab
-@docLinkPdf{Notation,notation,@manualDevelNotationPdf-cs}
+@docLinkPdf{Notation,notation,@manualDevelNotationPdf}
@item
-@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit-cs}
+@docLinkSplit{Benutzung,usage,@manualDevelUsageSplit}
@tab
-@docLinkBig{Benutzung,usage,@manualDevelUsageBig-cs}
+@docLinkBig{Benutzung,usage,@manualDevelUsageBig}
@tab
-@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf-cs}
+@docLinkPdf{Benutzung,usage,@manualDevelUsagePdf}
@item
-@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit-cs}
+@docLinkSplit{Schnipsel,snippets,@manualDevelSnippetsSplit}
@tab
-@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig-cs}
+@docLinkBig{Schnipsel,snippets,@manualDevelSnippetsBig}
@tab
-@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf-cs}
+@docLinkPdf{Schnipsel,snippets,@manualDevelSnippetsPdf}
@headitem Zřídka používané příručky
@docLinkPdf{Webseite,web,@manualDevelWebPdf-cs}
@item
-@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit-cs}
+@docLinkSplit{Veränderungen,changes,@manualDevelChangesSplit}
@tab
-@docLinkBig{Veränderungen,changes,@manualDevelChangesBig-cs}
+@docLinkBig{Veränderungen,changes,@manualDevelChangesBig}
@tab
-@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf-cs}
+@docLinkPdf{Veränderungen,changes,@manualDevelChangesPdf}
@item
-@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit-cs}
+@docLinkSplit{Erweitern,extending,@manualDevelExtendingSplit}
@tab
-@docLinkBig{Erweitern,extending,@manualDevelExtendingBig-cs}
+@docLinkBig{Erweitern,extending,@manualDevelExtendingBig}
@tab
-@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf-cs}
+@docLinkPdf{Erweitern,extending,@manualDevelExtendingPdf}
@item
-@docLinkSplit{Interna,internals,@manualDevelInternalsSplit-cs}
+@docLinkSplit{Interna,internals,@manualDevelInternalsSplit}
@tab
-@docLinkBig{Interna,internals,@manualDevelInternalsBig-cs}
+@docLinkBig{Interna,internals,@manualDevelInternalsBig}
@tab
-@docLinkPdf{Interna,internals,@manualDevelInternalsPdf-cs}
+@docLinkPdf{Interna,internals,@manualDevelInternalsPdf}
@ifset web_version
@headitem Ke stažení
@docLinks{Slovníček, music-glossary,
@rglosnamed{Top,Slovníček},
- @manualStableGlossarySplit-cs,
- @manualStableGlossaryBig-cs, 1 MB,
- @manualStableGlossaryPdf-cs, 1.5 MB}
+ @manualStableGlossarySplit,
+ @manualStableGlossaryBig, 1 MB,
+ @manualStableGlossaryPdf, 1.5 MB}
@divEnd
@docLinks{Článek, essay,
@ressaynamed{Top,Článek},
- @manualStableEssaySplit-cs,
- @manualStableEssayBig-cs, 2 MB,
- @manualStableEssayPdf-cs, 2.5 MB}
+ @manualStableEssaySplit,
+ @manualStableEssayBig, 2 MB,
+ @manualStableEssayPdf, 2.5 MB}
@divEnd
@docLinks{Notový zápis, notation,
@rusernamed{Top,Notový zápis},
- @manualStableNotationSplit-cs,
- @manualStableNotationBig-cs, 7 MB,
- @manualStableNotationPdf-cs, 18 MB}
+ @manualStableNotationSplit,
+ @manualStableNotationBig, 7 MB,
+ @manualStableNotationPdf, 18 MB}
@divEnd
@docLinks{Používání, usage,
@rprogramnamed{Top,Používání},
- @manualStableUsageSplit-cs,
- @manualStableUsageBig-cs, 300 KB,
- @manualStableUsagePdf-cs, 400 KB}
+ @manualStableUsageSplit,
+ @manualStableUsageBig, 300 KB,
+ @manualStableUsagePdf, 400 KB}
@divEnd
@docLinks{Změny, changes,
@rchangesnamed{Top,Změny},
- @manualStableChangesSplit-cs,
- @manualStableChangesBig-cs, 6 KB,
- @manualStableChangesPdf-cs, 200 KB}
+ @manualStableChangesSplit,
+ @manualStableChangesBig, 6 KB,
+ @manualStableChangesPdf, 200 KB}
@divEnd
@docLinks{Rozšíření, extending,
@rextendnamed{Top,Rozšíření},
- @manualStableExtendingSplit-cs,
- @manualStableExtendingBig-cs, 200 KB,
- @manualStableExtendingPdf-cs, 400 KB}
+ @manualStableExtendingSplit,
+ @manualStableExtendingBig, 200 KB,
+ @manualStableExtendingPdf, 400 KB}
@divEnd
@docLinks{Vnitřnosti, internals,
@rinternalsnamed{Top,Vnitřnosti},
- @manualStableInternalsSplit-cs,
- @manualStableInternalsBig-cs, 2.5 MB,
- @manualStableInternalsPdf-cs, 2.8 MB}
+ @manualStableInternalsSplit,
+ @manualStableInternalsBig, 2.5 MB,
+ @manualStableInternalsPdf, 2.8 MB}
@divEnd
@unnumberedsec Vše
@translationof All
-@divClass{column-center-bottom}
+@divClass{column-left-top}
@subheading Verze ke stažení
@ifclear web_version
@divClass{keep-bullets}
@itemize
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
-LilyPond 2.12 Dokumentation} (německy)
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.de.html,
+LilyPond 2.14 Dokumentation} (německy)
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Dokumentation} (německy)
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.de.html,
+LilyPond 2.12 Dokumentation} (německy)
@item @uref{http://lilypond.org/doc/v2.10/Documentation/,
-LilyPond 2.10 Dokumentation} (německy)
+LilyPond 2.10 Dokumentation} (anglicky)
@item @uref{http://lilypond.org/doc/v2.8/Documentation/,
-LilyPond 2.8 Dokumentation} (německy)
+LilyPond 2.8 Dokumentation} (anglicky)
@item @uref{http://lilypond.org/doc/v2.6/Documentation/,
LilyPond 2.6 Dokumentation} (anglicky)
+++ /dev/null
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: cs -*-
-@c This file is part of web.texi
-@ignore
- Translation of GIT committish: 5e2900b22db1d1ea433d4e8445cbcba3ffe399a4
-
- When revising a translation, copy the HEAD committish of the
- version that you are working on. See TRANSLATION for details.
-@end ignore
-
-
-@subsubheading LilyPond 2.13.47 released! @emph{Jan 28, 2011}
-@subsubheading Release candidate 1 withdrawn @emph{Jan 13, 2011}
-@subsubheading Release candidate 1 of 2.14 - LilyPond 2.13.46 released! @emph{Jan 12, 2011}
-@subsubheading LilyPond 2.13.45 released! @emph{Jan 3, 2011}
-
-@c -- SKELETON FILE --
@settitle Aufsatz über den automatischen Musiksatz
@documentencoding UTF-8
@documentlanguage de
-
+@afourpaper
@c Translators: Till Paala
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
\new Voice = "I" \relative c''' {
\time 3/4
\voiceOne
- \times 6/7 { g8 g g g g g g }
+ \tuplet 7/6 { g8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
\new Voice = "II" \relative c' {
\voiceTwo
c4
- \times 4/5 {
+ \tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
\stemUp g,( c}
\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 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
} \\ {
s4 \autoBeamOff d''8.. f''32
} \\ {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Scheme-Übung
@chapter Scheme-Übung
'text
"f"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music 'AbsoluteDynamicEvent
'text
"f"))
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
'span-direction
-1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'span-direction
1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))))
=====
'articulation-type
"accent"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))
\displayMusic c4
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))))
@end example
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines:
also hat eine Triole 2/3 als Bruch:
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Verzierungen
@c KEEP LY
@lilypond[verbatim,quote]
-trioleA = \times 2/3 { c,8 e g }
+trioleA = \tuplet 3/2 { c,8 e g }
TaktA = { \trioleA \trioleA \trioleA \trioleA }
\relative c'' {
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala, Reinhold Kainhofer
@node Grundbegriffe
@lilypond[quote,verbatim,ragged-right]
{
-r16[ g \times 2/3 { r16 e'8] }
-g16( a \times 2/3 { b16 d) e' }
-g8[( a \times 2/3 { b8 d') e'~] } |
-\times 4/5 { e'32\( a b d' e' } a'4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g16( a \tuplet 3/2 { b16 d) e' }
+g8[( a \tuplet 3/2 { b8 d') e'~] } |
+\tuplet 5/4 { e'32\( a b d' e' } a'4.\)
}
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Die Ausgabe verändern
@chapter Die Ausgabe verändern
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@c NOTE Tuplet brackets collide if notes are high on staff
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@item Moment
@tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
konstruiert
- @tab @code{(ly:make-moment 1 4)},
- @code{(ly:make-moment 3 8)}
+ @tab @code{(ly:make-moment 1/4)},
+ @code{(ly:make-moment 3/8)}
@item Zahl
@tab Eine beliebige positive oder negative Dezimalzahl
@tab @code{3.5}, @w{@code{-2.45}}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
wird:
@example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
@dots{}
@{ c\breveTP f1 @}
@end example
spiritus = \relative c' {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \times 2/3 { f8 a g } g a a4 g f8 e
+ d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
- \times 2/3 { g8 f d } e f g a g4
+ \tuplet 3/2 { g8 f d } e f g a g4
}
spirLyr = \lyricmode {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
@end lilypond
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
@tab Triolen
@tab
@lilypond[relative=1]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
< b\3 \deadNote d\2 b'\1 >
< c\3 \deadNote e\2 c'\1 >
\deadNotesOn
- \times 2/3 { g8 b e }
+ \tuplet 3/2 { g8 b e }
\deadNotesOff
< a,\3 c\2 e\1 >1
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Till Paala
\alternative {
{
f2 d |
- \set Timing.measureLength = #(ly:make-moment 3 4)
+ \set Timing.measureLength = #(ly:make-moment 3/4)
g4 g g % optional bar check is allowed here
}
{
- \set Timing.measureLength = #(ly:make-moment 4 4)
+ \set Timing.measureLength = #(ly:make-moment 4/4)
a2 a |
}
}
@lilypond[verbatim,quote,relative=2]
\repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
@end lilypond
@snippets
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
einzelnen Note ist also 2/3 der notierten Länge.
@lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
@end lilypond
@cindex Triolenklammer, Platzierung
@lilypond[quote,verbatim,relative=2]
\autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
@end lilypond
Wenn man die Eigenschaften von N-tolen verändern will, die zum
@lilypond[quote,verbatim,relative=1]
\time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
e8 | a4 c8 b c4 |
@end lilypond
\time 6/8
\partial 8
e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
r8 e,8 | a4 c8 b[ c b] |
@end lilypond
\scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
- c4. c4. \times 2/3 { c8[ c c] } c4
+ c4. c4. \tuplet 3/2 { c8[ c c] } c4
}
}
>>
\time 4/4
a8^"default" a a a a a a a
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"no change" a a a a a a a
\set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"changed" a a a a a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
\set Timing.beatStructure = #'(7 3)
\repeat unfold 10 { a16 }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3 2)
% This won't beam (3 3 2) because of beamExceptions
\repeat unfold 8 {c8} |
<<
\new Staff {
\time 3/4
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
\repeat unfold 6 { a8 }
}
@lilypond[relative=1,verbatim,quote]
\override Beam.grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\featherDurations #(ly:make-moment 2/1)
{ c16[ c c c c c c c] }
\override Beam.grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\featherDurations #(ly:make-moment 2/3)
{ c32[ d e f] }
% revert to non-feathered beams
\override Beam.grow-direction = #'()
wird dann auch bei 9/8 gezogen und nicht bei 5/4.
@lilypond[quote,verbatim,relative=1]
-\set Score.measureLength = #(ly:make-moment 5 4)
+\set Score.measureLength = #(ly:make-moment 5/4)
c1 c4
c1 c4
c4 c4
-\set Score.measurePosition = #(ly:make-moment 5 8)
+\set Score.measurePosition = #(ly:make-moment 5/8)
b4 b4 b8
c4 c1
@end lilypond
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
\remove "Forbid_line_break_engraver"
} \relative c'' {
<<
- { c2. \times 2/3 { c4 c c } c2. | }
+ { c2. \tuplet 3/2 { c4 c c } c2. | }
{ s1 | \break s1 | }
>>
}
Der @code{Page_turn_engraver} liest die Kontexteigenschaft
@code{minimumPageTurnLength} um zu erkennen, wie lang eine Stelle
frei von Noten sein muss, damit ein Seitenumbruch in Frage kommt. Der
-Standardwert hierfür ist @code{(ly:make-moment 1 1)}. Wenn Sie
+Standardwert hierfür ist @code{(ly:make-moment 1/1)}. Wenn Sie
Seitenumbrüche zum Umblättern ausschalten wollen, können Sie
einen sehr großen Wert angeben.
a4 b c d |
R1 | % Ein Seitenumbruch zum Umblättern erlaubt
a4 b c d |
- \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+ \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
R1 | % Seitenumbruch nicht erlaubt
a4 b r2 |
R1*2 | % Seitenumbruch erlaubt
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
\score {
<<
\new Staff {
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
c8 c8 c8 c8
}
\new Staff {
c8 c8 c8 c8
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
welches die Referenzdauer ist, anhand welcher alle Noten platziert werden.
Hier wird die LilyPond Scheme-Funktion @code{make-moment} eingesetzt. Sie
braucht zwei Argumente: einen Zähler und einen Nenner, die einen Bruch einer
-Ganzen darstellen. Die Funktion @code{(ly:make-moment 1 20)} ergibt also
+Ganzen darstellen. Die Funktion @code{(ly:make-moment 1/20)} ergibt also
eine Referenzdauer von einer Zwanzigstel. Genauso gut können etwa die Dauern
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)} oder
-@code{(ly:make-moment 3 97)} eingesetzt werden.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} oder
+@code{(ly:make-moment 3/97)} eingesetzt werden.
Die richtige Referenzdauer, mit der eine vernünftige Verteilung der Noten
proportional möglich ist, muss durch Ausprobieren herausgefunden werden.
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 8)
+ proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 16)
+ proportionalNotationDuration = #(ly:make-moment 1/16)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 32)
+ proportionalNotationDuration = #(ly:make-moment 1/32)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
\override SpacingSpanner.uniform-stretching = ##t
}
}
@lilypond[quote,verbatim,ragged-right]
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
c''8
c''8
c''8
}
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
\layout {
\context {
\Score
- \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
}
}
}
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Till Paala
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
% show associations clearly.
\override NoteColumn.force-hshift = #-3
f8 f g
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Reinhold Kainhofer
@c Translation checkers: Till Paala
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@docLinks{Glossar, music-glossary,
@rglosnamed{Top,Glossar},
- @manualStableGlossarySplit-de,
- @manualStableGlossaryBig-de, 1 MB,
- @manualStableGlossaryPdf-de, 1.5 MB}
+ @manualStableGlossarySplit,
+ @manualStableGlossaryBig, 1 MB,
+ @manualStableGlossaryPdf, 1.5 MB}
@divEnd
@docLinks{Interna, internals,
@rinternalsnamed{Top,Interna},
- @manualStableInternalsSplit-de,
- @manualStableInternalsBig-de, 2.5 MB,
- @manualStableInternalsPdf-de, 2.8 MB}
+ @manualStableInternalsSplit,
+ @manualStableInternalsBig, 2.5 MB,
+ @manualStableInternalsPdf, 2.8 MB}
@divEnd
@unnumberedsec Alles
@translationof All
-@divClass{column-center-bottom}
+@divClass{column-left-top}
@subheading Versionen zum Herunterladen
@ifclear web_version
@divClass{keep-bullets}
@itemize
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
-LilyPond 2.12 Dokumentation} (auf deutsch)
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.de.html,
+LilyPond 2.14 Dokumentation} (auf deutsch)
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Dokumentation} (auf deutsch)
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.de.html,
+LilyPond 2.12 Dokumentation} (auf deutsch)
@item @uref{http://lilypond.org/doc/v2.10/Documentation/,
LilyPond 2.10 Dokumentation} (auf englisch)
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Grabado musical
@chapter Grabado musical
\new Voice = "I" \relative c''' {
\time 3/4
\voiceOne
- \times 6/7 { g8 g g g g g g }
+ \tuplet 7/6 { g8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
\new Voice = "II" \relative c' {
\voiceTwo
c4
- \times 4/5 {
+ \tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
\stemUp g,( c}
\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 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
} \\ {
s4 \autoBeamOff d''8.. f''32
} \\ {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Tutorial de Scheme
@appendix Tutorial de Scheme
'text
"f"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music 'AbsoluteDynamicEvent
'text
"f"))
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
'span-direction
-1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'span-direction
1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))))
=====
'articulation-type
"accent"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))
@end example
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines: (different from policy.txt!)
expresa, por tanto un @notation{tresillo} lleva una fracción de 2/3:
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Notas de adorno
@c KEEP LY
@lilypond[verbatim,quote,ragged-right]
-tresilloA = \times 2/3 { c,8 e g }
+tresilloA = \tuplet 3/2 { c,8 e g }
compasA = { \tresilloA \tresilloA \tresilloA \tresilloA }
\relative c'' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Conceptos fundamentales
que sale del interior de un grupo especial (líneas 3 y 4).
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Trucar la salida
@chapter Trucar la salida
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@cindex TupletNumber, ejemplo de sobreescritura
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Notación antigua
establecimiento de
@example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
@dots{}
@{ c\breveTP f1 @}
@end example
spiritus = \relative c' {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \times 2/3 { f8 a g } g a a4 g f8 e
+ d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
- \times 2/3 { g8 f d } e f g a g4
+ \tuplet 3/2 { g8 f d } e f g a g4
}
spirLyr = \lyricmode {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c TODO: add tablature.
@end lilypond
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
@tab tresillos
@tab
@lilypond[relative=1]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Anotaciones editoriales
@section Anotaciones editoriales
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Instrumentos de cuerda con trastes
@section Instrumentos de cuerda con trastes
< b\3 \deadNote d\2 b'\1 >
< c\3 \deadNote e\2 c'\1 >
\deadNotesOn
- \times 2/3 { g8 b e }
+ \tuplet 3/2 { g8 b e }
\deadNotesOff
< a,\3 c\2 e\1 >1
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@node Repeticiones
@section Repeticiones
\alternative {
{
f2 d |
- \set Timing.measureLength = #(ly:make-moment 3 4)
+ \set Timing.measureLength = #(ly:make-moment 3/4)
g4 g g % optional bar check is allowed here
}
{
- \set Timing.measureLength = #(ly:make-moment 4 4)
+ \set Timing.measureLength = #(ly:make-moment 4/4)
a2 a |
}
}
@lilypond[verbatim,quote,relative=2]
\repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
@end lilypond
@snippets
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Duraciones
@section Duraciones
valor escrito:
@lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
@end lilypond
@cindex grupos de valoración especial, colocación del corchete
@lilypond[quote,verbatim,relative=2]
\autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
@end lilypond
La modificación de los grupos especiales anidados que comienzan en el
@lilypond[quote,verbatim,relative=1]
\time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
e8 | a4 c8 b c4 |
@end lilypond
\time 6/8
\partial 8
e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
r8 e,8 | a4 c8 b[ c b] |
@end lilypond
\scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
- c4. c \times 2/3 { c8[ c c] } c4
+ c4. c \tuplet 3/2 { c8[ c c] } c4
}
}
>>
\time 4/4
a8^"default" a a a a a a a
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"no change" a a a a a a a
\set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"changed" a a a a a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
\set Timing.beatStructure = #'(7 3)
\repeat unfold 10 { a16 }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3 2)
% This won't beam (3 3 2) because of beamExceptions
\repeat unfold 8 {c8} |
<<
\new Staff {
\time 3/4
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
\repeat unfold 6 { a8 }
}
@lilypond[relative=1,verbatim,quote]
\override Beam.grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\featherDurations #(ly:make-moment 2/1)
{ c16[ c c c c c c c] }
\override Beam.grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\featherDurations #(ly:make-moment 2/3)
{ c32[ d e f] }
% revert to non-feathered beams
\override Beam.grow-direction = #'()
@lilypond[quote,verbatim]
\new Voice \relative c' {
- \set Timing.measureLength = #(ly:make-moment 5 4)
+ \set Timing.measureLength = #(ly:make-moment 5/4)
c1 c4 |
c1 c4 |
c4 c
- \set Timing.measurePosition = #(ly:make-moment 5 8)
+ \set Timing.measurePosition = #(ly:make-moment 5/8)
b4 b b8 |
c4 c1 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@ignore
GDP TODO list
\remove "Forbid_line_break_engraver"
} \relative c'' {
<<
- { c2. \times 2/3 { c4 c c } c2. | }
+ { c2. \tuplet 3/2 { c4 c c } c2. | }
{ s1 | \break s1 | }
>>
}
@code{minimumPageTurnLength} para determinar qué longitud debe tener
una sección sin notas antes de que se considere la posibilidad de un
paso de página. El valor predeterminado para
-@code{minimumPageTurnLength} es @code{(ly:make-moment 1 1)}. Si
+@code{minimumPageTurnLength} es @code{(ly:make-moment 1/1)}. Si
quiere inhabilitar las vueltas de página, puede establecerlo a algún
valor muy grande.
a4 b c d |
R1 | % aquí se permite un salto de página
a4 b c d |
- \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+ \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
R1 | % aquí no se permite un salto de página
a4 b r2 |
R1*2 | % aquí se permite un salto de página
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
\score {
<<
\new Staff {
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
c8 c8 c8 c8
}
\new Staff {
c8 c8 c8 c8
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
espaciado de toda la música. La función Scheme de LilyPond
@code{make-moment} acepta dos argumentos: un numerador y un
denominador que, juntos, expresan una cierta fracción de redonda. La
-llamada @code{(ly:make-moment 1 20)}, por tanto, produce una duración
+llamada @code{(ly:make-moment 1/20)}, por tanto, produce una duración
de referencia de una nota de un veinteavo de redonda (semicorcheas de
cinquillo). Son también posibles valores como
-@code{(ly:make-moment 1 16)},
-@code{(ly:make-moment 1 8)} y @code{(ly:make-moment 3 97)}.
+@code{(ly:make-moment 1/16)},
+@code{(ly:make-moment 1/8)} y @code{(ly:make-moment 3/97)}.
¿Cómo seleccionamos la duración correcta de referencia para pasarla a
@code{proportionalNotationDuration}? Normalmente mediante un proceso
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 8)
+ proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 16)
+ proportionalNotationDuration = #(ly:make-moment 1/16)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 32)
+ proportionalNotationDuration = #(ly:make-moment 1/32)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
\override SpacingSpanner.uniform-stretching = ##t
}
}
@lilypond[quote,verbatim,ragged-right]
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
c''8
c''8
c''8
}
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
\layout {
\context {
\Score
- \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Música vocal
@section Música vocal
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
% show associations clearly.
\override NoteColumn.force-hshift = #-3
f8 f g
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Note: keep this node named so that `info lilypond-book' brings you here.
@node lilypond-book
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@divClass{keep-bullets}
@itemize
-@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
-LilyPond 2.14 Documentation}
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.es.html,
+Documentación de LilyPond 2.14}
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.es.html,
Documentación de LilyPond 2.12}
@item @uref{http://lilypond.org/doc/v2.10/Documentation/,
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Music engraving
@chapter Music engraving
\new Voice = "I" \relative c''' {
\time 3/4
\voiceOne
- \times 6/7 { g8 g g g g g g }
+ \tuplet 7/6 { g8 g g g g g g }
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
\new Voice = "II" \relative c' {
\voiceTwo
c4
- \times 4/5 {
+ \tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
\stemUp g,( c}
\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 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
} \\ {
s4 \autoBeamOff d''8.. f''32
} \\ {
and@w{ }@code{#}.
It extracts the Lilypond code block and generates a call to the
-LilyPond @code{parser} which is executed at runtime to interpret the
-LilyPond code block. Any embedded Scheme expression is executed in
-the lexical environment of the Lilypond code block, so you have access
-to local variables and function parameters at the point the Lilypond
-code block is written.
+LilyPond @code{parser} which is executed at runtime to interpret
+the LilyPond code block. Any embedded Scheme expression is
+executed in the lexical environment of the Lilypond code block, so
+you have access to local variables and function parameters at the
+point the Lilypond code block is written. If @code{location}
+refers to a valid input location (which it usually does inside of
+music/@/scheme functions), all music generated inside the code
+block has its @samp{origin} set to @code{location}.
A LilyPond code block may contain anything that you can use on the right
side of an assignment. In addition, an empty LilyPond block corresponds
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Scheme tutorial
@chapter Scheme tutorial
'text
"f"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music 'AbsoluteDynamicEvent
'text
"f"))
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
'span-direction
-1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'span-direction
1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))))
=====
'articulation-type
"accent"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))
@end example
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude, John Mandereau, Gauvain Pocentek
\new Voice = "I" \relative c''' {
\time 3/4
\voiceOne
- \times 6/7 {g8 g g g g g g}
+ \tuplet 7/6 {g8 g g g g g g}
\oneVoice
r4 <b,, fis' g bes> r4\fermata
}
\new Voice = "II" \relative c' {
\voiceTwo
c4
- \times 4/5 {
+ \tuplet 5/4 {
<c ees>8 f g
\change Staff = "LH" \oneVoice
\stemUp g,( c}
\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 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
} \\ {
s4 \autoBeamOff d''8.. f''32
} \\ {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude
'text
"f"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music 'AbsoluteDynamicEvent
'text
"f"))
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
@end example
'span-direction
-1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))
(make-music
'span-direction
1))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 5 0))))
@end example
(make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))))
=====
'articulation-type
"accent"))
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch -1 0 0))
@end example
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Nicolas Grandclaude, Ludovic Sardain, Gauvain Pocentek
@c Translation checkers: Jean-Charles Malahieude, Valentin Villenave, John Mandereau
donc de 2/3 pour les triolets :
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
s'il se répète un grand nombre de fois dans la pièce.
@lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
barA = { \tripletA \tripletA \tripletA \tripletA }
\relative c'' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: John Mandereau
d'une liaison de phrasé se poursuivant (lignes 3 et 4).
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Valentin Villenave, Nicolas Klutchnikoff, Damien Heurtebise
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@cindex TupletNumber, exemple de dérogation
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude
entrant :
@example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
@dots{}
@{ c\breveTP f1 @}
@end example
spiritus = \relative c' {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \times 2/3 { f8 a g } g a a4 g f8 e
+ d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
- \times 2/3 { g8 f d } e f g a g4
+ \tuplet 3/2 { g8 f d } e f g a g4
}
spirLyr = \lyricmode {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Valentin Villenave
@c Translation checkers: Jean-Charles Malahieude
@end lilypond
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
@tab triolets
@tab
@lilypond[relative=1]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude
\context {
\Staff
\consists "Grid_point_engraver" %% active les guides
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Matthieu Jacquot
@c Translation checkers: Jean-Charles Malahieude
< b\3 \deadNote d\2 b'\1 >
< c\3 \deadNote e\2 c'\1 >
\deadNotesOn
- \times 2/3 { g8 b e }
+ \tuplet 3/2 { g8 b e }
\deadNotesOff
< a,\3 c\2 e\1 >1
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude, Valentin Villenave
270 croches à la minute :
@example
-tempoWholesPerMinute = #(ly:make-moment 270 8)
+tempoWholesPerMinute = #(ly:make-moment 270/8)
@end example
@cindex MIDI et définition de contexte
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Charles Malahieude, John Mandereau
\alternative {
{
f2 d |
- \set Timing.measureLength = #(ly:make-moment 3 4)
+ \set Timing.measureLength = #(ly:make-moment 3/4)
g4 g g % optional bar check is allowed here
}
{
- \set Timing.measureLength = #(ly:make-moment 4 4)
+ \set Timing.measureLength = #(ly:make-moment 4/4)
a2 a |
}
}
@lilypond[verbatim,quote,relative=2]
\repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
@end lilypond
@snippets
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
@c Translation checkers: Valentin Villenave, François Martin, Xavier Scheuer
notes durent donc deux tiers de leur valeur écrite.
@lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
@end lilypond
@cindex crochet de nolet, positionnement
@lilypond[quote,verbatim,relative=2]
\autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4 |
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4 |
@end lilypond
Lorsque, dans une imbrication, les nolets débutent au même instant, il
@lilypond[quote,verbatim,relative=1]
\time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
e8 | a4 c8 b c4 |
@end lilypond
\time 6/8
\partial 8
e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
r8 e,8 | a4 c8 b[ c b] |
@end lilypond
\scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
- c4. c \times 2/3 { c8[ c c] } c4
+ c4. c \tuplet 3/2 { c8[ c c] } c4
}
}
>>
\time 4/4
a8^"default" a a a a a a a
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"no change" a a a a a a a
\set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"changed" a a a a a a a
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
\set Timing.beatStructure = #'(7 3)
\repeat unfold 10 { a16 }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3 2)
% This won't beam (3 3 2) because of beamExceptions
\repeat unfold 8 {c8} |
<<
\new Staff {
\time 3/4
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
\set Timing.beamExceptions = #'()
\repeat unfold 6 { a8 }
@lilypond[relative=1,verbatim,quote]
\override Beam.grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\featherDurations #(ly:make-moment 2/1)
{ c16[ c c c c c c c] }
\override Beam.grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\featherDurations #(ly:make-moment 2/3)
{ c32[ d e f] }
% revert to non-feathered beams
\override Beam.grow-direction = #'()
@lilypond[quote,verbatim]
\new Voice \relative c' {
- \set Timing.measureLength = #(ly:make-moment 5 4)
+ \set Timing.measureLength = #(ly:make-moment 5/4)
c1 c4 |
c1 c4 |
c4 c
- \set Timing.measurePosition = #(ly:make-moment 5 8)
+ \set Timing.measurePosition = #(ly:make-moment 5/8)
b4 b b8 |
c4 c1 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Frédéric Chiasson, Jean-Charles Malahieude
\remove "Forbid_line_break_engraver"
} \relative c'' {
<<
- { c2. \times 2/3 { c4 c c } c2. | }
+ { c2. \tuplet 3/2 { c4 c c } c2. | }
{ s1 | \break s1 | }
>>
}
a4 b c d |
R1 | % une tourne peut se placer ici
a4 b c d |
- \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+ \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
R1 | % il ne peut pas y avoir de tourne ici
a4 b r2 |
R1*2 | % une tourne peut se placer ici
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
\score {
<<
\new Staff {
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
c8 c8 c8 c8
}
\new Staff {
c8 c8 c8 c8
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
représentent une fraction de ronde. L'appel de
@w{@code{(ly:make-moment 1 20)}} produit donc une durée de référence
égale à un vingtième de ronde. Vous pourriez tout aussi bien utiliser
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)} ou
-@code{(ly:make-moment 3 97)}.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} ou
+@code{(ly:make-moment 3/97)}.
Se pose alors le problème de fournir la juste durée de référence à
@code{proportionalNotationDuration}. Il faut en l'occurrence procéder par
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 8)
+ proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 16)
+ proportionalNotationDuration = #(ly:make-moment 1/16)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 32)
+ proportionalNotationDuration = #(ly:make-moment 1/32)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
\override SpacingSpanner.uniform-stretching = ##t
}
}
@lilypond[quote,verbatim,ragged-right]
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
c''8
c''8
c''8
}
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
\layout {
\context {
\Score
- \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Valentin Villenave, Jean-Charles Malahieude
@c Translation checkers: Jean-Jacques Gerbaud
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
% show associations clearly.
\override NoteColumn.force-hshift = #-3
f8 f g
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Jean-Charles Malahieude
@c Translation checkers:
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@divClass{keep-bullets}
@itemize
-@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.fr.html,
LilyPond 2.14 Documentation}
-@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
+@item @uref{http://lilypond.org/doc/v2.12/Documentation/index.fr.html,
LilyPond 2.12 Documentation}
@item @uref{http://lilypond.org/doc/v2.10/Documentation/,
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@node Elemi kottaírás
@chapter Elemi kottaírás
2/3 kell, hogy legyen a tört értéke.
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Előkék
@c KEEP LY
@lilypond[verbatim,quote]
-triolaA = \times 2/3 { c,8 e g }
+triolaA = \tuplet 3/2 { c,8 e g }
ütemA = { \triolaA \triolaA \triolaA \triolaA }
\relative c'' {
@c -*- coding: utf-8; mode: texinfo; -*-
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Alapfogalmak
@chapter Alapfogalmak
@translationof Fundamental concepts
@lilypond[quote,verbatim,fragment,ragged-right]
{
- r16[ g16 \times 2/3 {r16 e'8] }
- g16( a \times 2/3 {b d) e' }
- g8[( a \times 2/3 {b d') e'~]}
- \times 4/5 {e'32\( a b d' e'} a'4.\)
+ r16[ g16 \tuplet 3/2 {r16 e'8] }
+ g16( a \tuplet 3/2 {b d) e' }
+ g8[( a \tuplet 3/2 {b d') e'~]}
+ \tuplet 5/4 {e'32\( a b d' e'} a'4.\)
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Note: keep this node named so that `info lilypond-book' brings you here.
@node lilypond-book
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
+++ /dev/null
-@c -*- coding: utf-8; mode: texinfo; -*-
-@c This file is part of community.itexi
-
-@ignore
-
- This file lists authors of LilyPond, and what they wrote. Each
- list is sorted alphabetically by surname. This file lists people
- that have contributed more than a few hours of work.
-
- Developers are people who have been listed under the "Development
- Team" in Documentation/misc/THANKS*, or who are added when they
- reach a significant amount of contributions with respect to the
- existing Developers list, and can choose their own titles.
- Contributors are everybody else, and simply list their
- contributions. All lists are sorted alphabetically.
-
- Anybody who has finished doing a "main devel team" task should
- list it under developersPrevious, even if they're still doing
- other "main devel team" stuff. See "Graham Percival" for an
- example.
-
- Contributors are also split between Current and Previous, and
- each category contains:
- core... (programming)
- font... (duh)
- doc... (documentation and examples)
- support... (building, distributions, editors,
- lilypond-book, LSR, but *not* answering emails)
- translations... (duh)
- We might add a "general" or "other" if there's something else.
-
-@end ignore
-
-
-@macro developersCurrent
-
-@itemize
-
-@item Mats Bengtsson:
-@email{mats.bengtsson@@ee.kth.se},
-@uref{http://www.s3.kth.se/~mabe/},
-Támogatás
-
-@item Trevor Daniels:
-Dokumentációszerkesztő asszisztens
-
-@item Reinhold Kainhofer:
-@email{reinhold@@kainhofer.com},
-@uref{http://reinhold.kainhofer.com},
-MusicXML guru, hibajavítás
-
-@item Jonathan Kulp:
-Dokumentációszerkesztő asszisztens
-
-@item Werner Lemberg,
-@email{wl@@gnu.org},
-Betűtípus-tervező, hibajavítás
-
-@item John Mandereau:
-@email{john.mandereau@@free.fr},
-Honosításfelelős
-
-@item Patrick McCarty:
-SVG guru, hibajavítás, szövegkezelés
-
-@item Joe Neeman:
-Fejlesztő
-
-@item Han-Wen Nienhuys:
-@email{hanwen@@xs4all.nl},
-@uref{http://www.xs4all.nl/~hanwen/},
-Fő fejlesztő
-
-@item Jan Nieuwenhuizen:
-@email{janneke@@gnu.org},
-@uref{http://www.xs4all.nl/~jantien/},
-Fő fejlesztő
-
-@item Graham Percival:
-@uref{http://percival-music.ca},
-Projekt manager, dokumentációszerkesztő
-
-@item Mark Polesky:
-Dokumentációszerkesztő assisztens, kódtisztítás
-
-@item Neil Puttock:
-Fejlesztő
-
-@item Nicolas Sceaux:
-Fejlesztő, Scheme guru
-
-@item Carl Sorensen:
-@email{c_sorensen@@byu.edu},
-Fejlesztő, a Békák felelőse
-
-@item Francisco Vila:
-Honosítás
-
-@item Valentin Villenave:
-LilyPond Kódrészletek Tárházának szerkesztője, hibafelelős
-
-@end itemize
-@end macro
-
-
-
-@macro developersPrevious
-
-@itemize
-
-@c use colons not commas for @item entries.
-
-@item Pedro Kroeger:
-Fordításfelelős
-
-@item Graham Percival:
-@uref{http://percival-music.ca},
-Hibafelelős, a Nagy Dokumentációs Projekt vezetője
-
-@item Jürgen Reuter:
-@email{reuter_j@@web.de},
-@uref{http://www.juergen-reuter.de},
-Régizene lejegyzése
-
-@item Erik Sandberg:
-Hibafelelős
-
-@end itemize
-@end macro
-
-
-@c ***************** current contributors
-
-@macro coreCurrent
-
-@c use commas not colons
-
-Frédéric Bron,
-Hajo Dezelski,
-Andrew Hawryluk,
-Ian Hulin,
-Michael Käppler,
-Marek Klein,
-Kieren MacMillan,
-Andrew Wilson
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro fontCurrent
-
-@c use commas not colons
-
-Simon Tatham
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro docCurrent
-
-@c use commas not colons
-
-James Lowe,
-Ralph Palmer,
-Patrick Schmidt
-
-@c no comma for last entry
-
-@end macro
-
-
-@macro supportCurrent
-
-@c use commas not colons
-
-James E. Bailey,
-Christian Hitz
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro translationsCurrent
-
-@c use commas not colons
-
-Benkő Pál,
-Fodor Bertalan,
-Harmath Dénes,
-Rébeli-Szabó Tamás,
-Selyem Zoltán Csaba,
-Szervác Attila,
-Udvari Gábor
-
-@c no comma for last entry
-
-@end macro
-
-
-@c ***************** previous contributors
-
-@macro corePrevious
-
-@c use commas not colons
-
-Erlend Aasland,
-Maximilian Albert,
-Guido Amoruso,
-Kristof Bastiaensen,
-Pal Benko,
-@c @email{benkop@@freestart.hu},
-Juliusz Chroboczek,
-@c @email{jch@@pps.jussieu.fr},
-Angelo Contardi,
-David Feuer,
-@c @email{david.feuer@@gmail.com},
-Bertalan Fodor,
-Mathieu Giraud,
-Yuval Harel,
-Bernard Hurley,
-@c @email{bernard@@fong-hurley.org.uk},
-Yoshinobu Ishizaki,
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-David Jedlinsky,
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Michael Krause,
-@c @email{m.krause@@tu-harburg.de},
-Jean-Baptiste Lamy,
-@c @email{jiba@@tuxfamily.org},
-Jonatan Liljedahl,
-Peter Lutek,
-Hendrik Maryns,
-Joe Neeman,
-@c @email{joeneeman@@gmail.com},
-Matthias Neeracher,
-Tatsuya Ono,
-Lisa Opus Goldstein,
-Guy Gascoigne-Piggford,
-Stan Sanderson,
-Edward Sanford Sutton,
-Andreas Scherer,
-Johannes Schindelin,
-Kim Shrier,
-Vicente Solsona Della,
-David Svoboda,
-Sebastiano Vigna,
-Arno Waschk,
-Michael Welsh Duggan,
-John Williams,
-Milan Zamazal,
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro fontPrevious
-
-@c use commas not colons
-
-Tom Cato Amundsen,
-@c @email{tca@@gnu.org},
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-Arno Waschk,
-@c @email{arno@@arnowaschk.de},
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro docPrevious
-
-@c use commas not colons
-
-Erlend Aasland,
-Trevor Bača,
-Alard de Boer,
-Jay Hamilton,
-Andrew Hawryluk,
-Joseph Harfouch,
-Cameron Horsburgh,
-Geoff Horton,
-Ian Hulin,
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Kurtis Kroon,
-Dave Luttinen,
-Kieren MacMillan,
-Christian Mondrup,
-@c @email{scancm@@biobase.dk},
-Eyolf Østrem,
-Ralph Palmer,
-François Pinard,
-@c @email{pinard@@iro.umontreal.ca},
-@c @uref{http://pinard.progiciels-bpi.ca/},
-Eduardo Vieira,
-Michael Rasmussen,
-Till Rettig,
-Carl D. Sorensen,
-Anh Hai Trinh,
-Rune Zedeler
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro supportPrevious
-
-@c use commas not colons
-
-Anthony Fok,
-@c @email{foka@@debian.org},
-Chris Jackson,
-@c @email{chris@@fluffhouse.org.uk},
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-David Svoboda
-@c @email{svoboda@@cmu.edu}
-
-@c no comma for last entry
-
-@end macro
-
-
-
-@macro translationsPrevious
-
-@c use commas not colons
-
-Frédéric Chiasson,
-Abel Cheung,
-Alard de Boer,
-Simon Dahlbacka,
-Orm Finnendahl,
-David González,
-Nicolas Grandclaude,
-@c @email{ngclaude@@123mail.org},
-Damien Heurtebise,
-Matthieu Jacquot,
-Bjoern Jacke,
-@c @email{bjoern.jacke@@gmx.de},
-Neil Jerram,
-@c @email{nj104@@cus.cam.ac.uk},
-Heikki Junes,
-@c @email{heikki.junes@@hut.fi},
-Nicolas Klutchnikoff,
-Jean-Charles Malahieude,
-@c @email{lolyfan@@wanadoo.fr},
-Adrian Mariano,
-Christian Mondrup,
-Tineke de Munnik,
-@c @email{tdm@@dds.nl},
-Steven Michael Murphy,
-François Pinard,
-Gauvain Pocentek,
-@c @email{gauvainpocentek@@yahoo.fr},
-Till Rettig,
-Ludovic Sardain,
-@c @email{ludovicsardain@@gmail.com},
-Yoshiki Sawada,
-Thomas Scharkowski,
-Clytie Siddall,
-August S. Sigov,
-@c @email{august@@infran.ru},
-Roland Stigge,
-Risto Vääräniemi,
-Andrea Valle,
-Olcay Yıldırım
-
-@c no comma for last entry
-
-@end macro
-
-
@end quotation
-@subheading Dokumentáció
-
-@divClass{keep-bullets}
-@itemize
-
-@item
-Tankönyv:
-
-@manualDevelLearningSplit-hu
-@* @manualDevelLearningBig-hu
-@* @manualDevelLearningPdf-hu
-
-@item
-Fogalomtár:
-
-@manualDevelGlossarySplit-hu
-
-@manualDevelGlossaryBig-hu
-
-@manualDevelGlossaryPdf-hu
-
-@item
-Esszé:
-
-@manualDevelEssaySplit-hu
-
-@manualDevelEssayBig-hu
-
-@manualDevelEssayPdf-hu
-
-
-@c separate introduction, regular, infrequent manuals
-@smallspace
-
-@item
-Kottaírás:
-
-@manualDevelNotationSplit-hu
-
-@manualDevelNotationBig-hu
-
-@manualDevelNotationPdf-hu
-
-@item
-Használat:
-
-@manualDevelUsageSplit-hu
-
-@manualDevelUsageBig-hu
-
-@manualDevelUsagePdf-hu
-
-@item
-Kódrészletek:
-
-@manualDevelSnippetsSplit-hu
-
-@manualDevelSnippetsBig-hu
-
-@manualDevelSnippetsPdf-hu
-
-
-@c separate introduction, regular, infrequent manuals
-@smallspace
-
-@item
-Web:
-
-@manualDevelWebSplit-hu
-
-@manualDevelWebBig-hu
-
-@manualDevelWebPdf-hu
-
-@item
-Változások:
-
-@manualDevelChangesSplit-hu
-
-@manualDevelChangesBig-hu
-
-@manualDevelChangesPdf-hu
-
-@item
-Bővítés:
-
-@manualDevelExtendingSplit-hu
-
-@manualDevelExtendingBig-hu
-
-@manualDevelExtendingPdf-hu
-
-@item
-Belső működés:
-
-@manualDevelInternalsSplit-hu
-
-@manualDevelInternalsBig-hu
-
-@manualDevelInternalsPdf-hu
-
-@end itemize
-@divEnd
-@divEnd
-
@divClass{column-right-top}
@subheading Útmutató közreműködőknek
@docLinksBare{Útmutató közreműködőknek, contributor,
@rcontribnamed{Top,Útmutató közreműködőknek},
- @manualDevelContributorSplit-hu,
- @manualDevelContributorBig-hu, 500 kB,
- @manualDevelContributorPdf-hu, 2.8 MB}
+ @manualDevelContributorSplit,
+ @manualDevelContributorBig, 500 kB,
+ @manualDevelContributorPdf, 2.8 MB}
@divEnd
@divEnd
@divEnd
+@subheading Dokumentáció
+
+@divClass{normal-table}
+@multitable @columnfractions .3 .3 .3
+@headitem Introduction
+@item
+@docLinkSplit{Tankönyv,learning,@manualDevelLearningSplit-hu}
+@tab
+@docLinkBig{Tankönyv,learning,@manualDevelLearningBig-hu}
+@tab
+@docLinkPdf{Tankönyv,learning,@manualDevelLearningPdf-hu}
+
+@item
+@docLinkSplit{Fogalomtár,music-glossary,@manualDevelGlossarySplit}
+@tab
+@docLinkBig{Fogalomtár,music-glossary,@manualDevelGlossaryBig}
+@tab
+@docLinkPdf{Fogalomtár,music-glossary,@manualDevelGlossaryPdf}
+
+@item
+@docLinkSplit{Esszé,essay,@manualDevelEssaySplit}
+@tab
+@docLinkBig{Esszé,essay,@manualDevelEssayBig}
+@tab
+@docLinkPdf{Esszé,essay,@manualDevelEssayPdf}
+
+@headitem Regular
+
+@item
+@docLinkSplit{Kottaírás,notation,@manualDevelNotationSplit}
+@tab
+@docLinkBig{Kottaírás,notation,@manualDevelNotationBig}
+@tab
+@docLinkPdf{Kottaírás,notation,@manualDevelNotationPdf}
+
+@item
+@docLinkSplit{Használat,usage,@manualDevelUsageSplit-hu}
+@tab
+@docLinkBig{Használat,usage,@manualDevelUsageBig-hu}
+@tab
+@docLinkPdf{Használat,usage,@manualDevelUsagePdf-hu}
+
+@item
+@docLinkSplit{Kódrészletek,snippets,@manualDevelSnippetsSplit}
+@tab
+@docLinkBig{Kódrészletek,snippets,@manualDevelSnippetsBig}
+@tab
+@docLinkPdf{Kódrészletek,snippets,@manualDevelSnippetsPdf}
+
+@headitem Infrequent
+
+@item
+@docLinkSplit{Web,web,@manualDevelWebSplit-hu}
+@tab
+@docLinkBig{Web,web,@manualDevelWebBig-hu}
+@tab
+@docLinkPdf{Web,web,@manualDevelWebPdf-hu}
+
+@item
+@docLinkSplit{Változások,changes,@manualDevelChangesSplit}
+@tab
+@docLinkBig{Változások,changes,@manualDevelChangesBig}
+@tab
+@docLinkPdf{Változások,changes,@manualDevelChangesPdf}
+
+@item
+@docLinkSplit{Bővítés,extending,@manualDevelExtendingSplit}
+@tab
+@docLinkBig{Bővítés,extending,@manualDevelExtendingBig}
+@tab
+@docLinkPdf{Bővítés,extending,@manualDevelExtendingPdf}
+
+@item
+@docLinkSplit{működés,internals,@manualDevelInternalsSplit}
+@tab
+@docLinkBig{működés,internals,@manualDevelInternalsBig}
+@tab
+@docLinkPdf{működés,internals,@manualDevelInternalsPdf}
+
+@ifset web_version
+@headitem Downloadable
+
+@item
+@doctarballDevel
+@end ifset
+
+@end multitable
+
+@divEnd
+@divEnd
+
@node Készítők
@unnumberedsec Készítők
@translationof Authors
@details{Tankönyv}
@item
-@ifWebLinks{@manualStableGlossarySplitNoName-hu,@rglosnamed{Top,Fogalomtár}}
+@ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,Fogalomtár}}
@emph{(opcionális)}
Zenei fogalmak gyűjteménye több nyelven.
@details{Fogalomtár}
@item
-@ifWebLinks{@manualStableEssaySplitNoName-hu,@ressaynamed{Top,Esszé}}
+@ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Esszé}}
@emph{(opcionális)}
Háttérinformáció a kottaszedés folyamatáról és a 19. századi kottaszedés
esztétikai elveiről.
@itemize
@item
-@ifWebLinks{@manualStableNotationSplitNoName-hu,@rusernamed{Top,Kottaírás}}
+@ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Kottaírás}}
A dokumentáció törzsanyaga; részletesen bemutatja a különböző kottaelemek
beviteli módját.
@details{Kottaírás}
@details{Használat}
@item
-@ifWebLinks{@manualStableSnippetsSplitNoName-hu,@rlsrnamed{Top,Kódrészletek}}
+@ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Kódrészletek}}
Hasznos példák, tippek, trükkök.
@details{Kódrészletek}
A weboldal.
@item
-@ifWebLinks{@manualStableChangesSplitNoName-hu,@rchangesnamed{Top,Változások}}
+@ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Változások}}
A legutóbbi verzióváltás óta történt változások.
@details{Változások}
@item
-@ifWebLinks{@manualStableExtendingSplitNoName-hu,@rextendnamed{Top,Bővítés}}
+@ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Bővítés}}
A LilyPond képességeinek kiterjesztése.
@details{Bővítés}
@item
-@ifWebLinks{@manualStableInternalsSplitNoName-hu,@rinternalsnamed{Top,Belső működés}}
+@ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Belső működés}}
A LilyPond belső szerkezetének referenciája. A kimenet finomhangolásához
szükséges.
@details{Belső működés}
@docLinks{Fogalomtár, music-glossary,
@rglosnamed{Top,Fogalomtár},
- @manualStableGlossarySplit-hu,
- @manualStableGlossaryBig-hu, 1 MB,
- @manualStableGlossaryPdf-hu, 1.5 MB}
+ @manualStableGlossarySplit,
+ @manualStableGlossaryBig, 1 MB,
+ @manualStableGlossaryPdf, 1.5 MB}
@divEnd
@docLinks{Esszé, essay,
@ressaynamed{Top,Esszé},
- @manualStableEssaySplit-hu,
- @manualStableEssayBig-hu, 2 MB,
- @manualStableEssayPdf-hu, 2.5 MB}
+ @manualStableEssaySplit,
+ @manualStableEssayBig, 2 MB,
+ @manualStableEssayPdf, 2.5 MB}
@divEnd
@docLinks{Kottaírás, notation,
@rusernamed{Top,Kottaírás},
- @manualStableNotationSplit-hu,
- @manualStableNotationBig-hu, 7 MB,
- @manualStableNotationPdf-hu, 18 MB}
+ @manualStableNotationSplit,
+ @manualStableNotationBig, 7 MB,
+ @manualStableNotationPdf, 18 MB}
@divEnd
@docLinks{Kódrészletek, snippets,
@rlsrnamed{Top,Kódrészletek},
- @manualStableSnippetsSplit-hu,
- @manualStableSnippetsBig-hu, 2.5 MB,
- @manualStableSnippetsPdf-hu, 8 MB}
+ @manualStableSnippetsSplit,
+ @manualStableSnippetsBig, 2.5 MB,
+ @manualStableSnippetsPdf, 8 MB}
@divEnd
@docLinks{Változások, changes,
@rchangesnamed{Top,Változások},
- @manualStableChangesSplit-hu,
- @manualStableChangesBig-hu, 6 KB,
- @manualStableChangesPdf-hu, 200 KB}
+ @manualStableChangesSplit,
+ @manualStableChangesBig, 6 KB,
+ @manualStableChangesPdf, 200 KB}
@divEnd
@docLinks{Bővítés, extending,
@rextendnamed{Top,Bővítés},
- @manualStableExtendingSplit-hu,
- @manualStableExtendingBig-hu, 200 KB,
- @manualStableExtendingPdf-hu, 400 KB}
+ @manualStableExtendingSplit,
+ @manualStableExtendingBig, 200 KB,
+ @manualStableExtendingPdf, 400 KB}
@divEnd
@docLinks{Belső működés, internals,
@rinternalsnamed{Top,Belső működés},
- @manualStableInternalsSplit-hu,
- @manualStableInternalsBig-hu, 2.5 MB,
- @manualStableInternalsPdf-hu, 2.8 MB}
+ @manualStableInternalsSplit,
+ @manualStableInternalsBig, 2.5 MB,
+ @manualStableInternalsPdf, 2.8 MB}
@divEnd
@divClass{keep-bullets}
@itemize
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+2.14}
+
@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
2.12}
-\version "2.17.6"
+\version "2.17.11"
#(define (filter-instrument instrument-name tuning-alist)
(filter (lambda (entry)
'text (symbol->string tuning-symbol))
(map (lambda (pitch)
(make-music 'NoteEvent
- 'duration (ly:make-duration 0 0 1 1)
+ 'duration (ly:make-duration 0 0 1/1)
'pitch pitch))
pitches)))))
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc ="@cindex Feta scripts
(list (make-music
'NoteEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'pitch
(ly:make-pitch 0 0 0))
(make-music
(list (make-music
'LyricEvent
'duration
- (ly:make-duration 2 0 1 1)
+ (ly:make-duration 2 0 1/1)
'text
script))))
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines: (different from policy.txt!)
una @notation{terzina} ha 2/3 come frazione:
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Abbellimenti
una sezione della musica viene ripetuta molte volte.
@lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
barA = { \tripletA \tripletA \tripletA \tripletA }
\relative c'' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Concetti fondamentali
@chapter Concetti fondamentali
irregolare (linee 3 e 4).
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Modifica dell'output
@chapter Modifica dell'output
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@c NOTE Tuplet brackets collide if notes are high on staff
@c See issue 509
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@item Moment
@tab Una frazione di una nota intera costruita con la
funzione make-moment
- @tab @code{(ly:make-moment 1 4)},
- @code{(ly:make-moment 3 8)}
+ @tab @code{(ly:make-moment 1/4)},
+ @code{(ly:make-moment 3/8)}
@item Number
@tab Qualsiasi valore decimale positivo o negativo
@tab @code{3.5}, @w{@code{-2.45}}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Note: keep this node named so that `info lilypond-book' brings you here.
@node lilypond-book
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@multitable @columnfractions .3 .3 .3
@headitem Introduzione
@item
-@docLinkSplit{Learning,learning,@manualDevelLearningSplit}
+@docLinkSplit{Learning,learning,@manualDevelLearningSplit-it}
@tab
-@docLinkBig{Learning,learning,@manualDevelLearningBig}
+@docLinkBig{Learning,learning,@manualDevelLearningBig-it}
@tab
-@docLinkPdf{Learning,learning,@manualDevelLearningPdf}
+@docLinkPdf{Learning,learning,@manualDevelLearningPdf-it}
@item
@docLinkSplit{Glossary,music-glossary,@manualDevelGlossarySplit}
@docLinkPdf{Glossary,music-glossary,@manualDevelGlossaryPdf}
@item
-@docLinkSplit{Essay,essay,@manualDevelEssaySplit}
+@docLinkSplit{Essay,essay,@manualDevelEssaySplit-it}
@tab
-@docLinkBig{Essay,essay,@manualDevelEssayBig}
+@docLinkBig{Essay,essay,@manualDevelEssayBig-it}
@tab
-@docLinkPdf{Essay,essay,@manualDevelEssayPdf}
+@docLinkPdf{Essay,essay,@manualDevelEssayPdf-it}
@headitem Regolare
@item
-@docLinkSplit{Notation,notation,@manualDevelNotationSplit}
+@docLinkSplit{Notation,notation,@manualDevelNotationSplit-it}
@tab
-@docLinkBig{Notation,notation,@manualDevelNotationBig}
+@docLinkBig{Notation,notation,@manualDevelNotationBig-it}
@tab
-@docLinkPdf{Notation,notation,@manualDevelNotationPdf}
+@docLinkPdf{Notation,notation,@manualDevelNotationPdf-it}
@item
-@docLinkSplit{Usage,usage,@manualDevelUsageSplit}
+@docLinkSplit{Usage,usage,@manualDevelUsageSplit-it}
@tab
-@docLinkBig{Usage,usage,@manualDevelUsageBig}
+@docLinkBig{Usage,usage,@manualDevelUsageBig-it}
@tab
-@docLinkPdf{Usage,usage,@manualDevelUsagePdf}
+@docLinkPdf{Usage,usage,@manualDevelUsagePdf-it}
@item
@docLinkSplit{Snippets,snippets,@manualDevelSnippetsSplit}
@headitem Saltuario
@item
-@docLinkSplit{Web,web,@manualDevelWebSplit}
+@docLinkSplit{Web,web,@manualDevelWebSplit-it}
@tab
-@docLinkBig{Web,web,@manualDevelWebBig}
+@docLinkBig{Web,web,@manualDevelWebBig-it}
@tab
-@docLinkPdf{Web,web,@manualDevelWebPdf}
+@docLinkPdf{Web,web,@manualDevelWebPdf-it}
@item
@docLinkSplit{Changes,changes,@manualDevelChangesSplit}
@itemize
-@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,Notazione}}
+@item @ifWebLinks{@manualStableNotationSplitNoName-it,@rusernamed{Top,Notazione}}
guida alla sintassi.
@details{Notazione}
@docLinks{Apprendimento, learning,
@rlearningnamed{Top,Apprendimento},
- @manualStableLearningSplit,
- @manualStableLearningBig, 1.5 MB,
- @manualStableLearningPdf, 3 MB}
+ @manualStableLearningSplit-it,
+ @manualStableLearningBig-it, 1.5 MB,
+ @manualStableLearningPdf-it, 3 MB}
@divEnd
@docLinks{Notazione, notation,
@rusernamed{Top,Notazione},
- @manualStableNotationSplit,
- @manualStableNotationBig, 7 MB,
- @manualStableNotationPdf, 18 MB}
+ @manualStableNotationSplit-it,
+ @manualStableNotationBig-it, 7 MB,
+ @manualStableNotationPdf-it, 18 MB}
@divEnd
@docLinks{Uso, usage,
@rprogramnamed{Top,Uso},
- @manualStableUsageSplit,
- @manualStableUsageBig, 400 KB,
- @manualStableUsagePdf, 600 KB}
+ @manualStableUsageSplit-it,
+ @manualStableUsageBig-it, 400 KB,
+ @manualStableUsagePdf-it, 600 KB}
@divEnd
@docLinksBare{Web, web,
@ref{Top,Web},
- @manualDevelWebSplit,
- @manualDevelWebBig, 1 MB,
- @manualDevelWebPdf, 2 MB}
+ @manualDevelWebSplit-it,
+ @manualDevelWebBig-it, 1 MB,
+ @manualDevelWebPdf-it, 2 MB}
@divEnd
@divClass{keep-bullets}
@itemize
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals.it.html,
+Documentazione di LilyPond 2.14}
+
@item @uref{http://lilypond.org/doc/v2.12/Documentation/,
Documentazione di LilyPond 2.12}
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-Documentazione di LilyPond 2.11}
-
@item @uref{http://lilypond.org/doc/v2.10/Documentation/,
Documentazione di LilyPond 2.10}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines: (different from policy.txt!)
分数として 2/3 を持ちます。
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
楽曲のある部分が何度もリピートしている場合に入力の手間を省くことができます。
@lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
barA = { \tripletA \tripletA \tripletA \tripletA }
\relative c'' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
さらにフレージング スラーが連符の外にまで伸びています (行 3 と 4)。
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@cindex TupletNumber, example of overriding (TupletNumber をオーバライドする例)
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@end lilypond
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
@tab 3 連符
@tab
@lilypond[relative=1,fragment]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
< b\3 \deadNote d\2 b'\1 >
< c\3 \deadNote e\2 c'\1 >
\deadNotesOn
- \times 2/3 { g8 b e }
+ \tuplet 3/2 { g8 b e }
\deadNotesOff
< a,\3 c\2 e\1 >1
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
\alternative {
{
f2 d |
- \set Timing.measureLength = #(ly:make-moment 3 4)
+ \set Timing.measureLength = #(ly:make-moment 3/4)
g4 g g % optional bar check is allowed here
}
{
- \set Timing.measureLength = #(ly:make-moment 4 4)
+ \set Timing.measureLength = #(ly:make-moment 4/4)
a2 a |
}
}
@lilypond[verbatim,quote,relative=2]
\repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
@end lilypond
@snippets
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
そのため、3 連符で指定する分数は 2/3 です。
@lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
@end lilypond
@cindex tuplet bracket placement (連符囲みの配置)
@lilypond[quote,verbatim,relative=2]
\autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
@end lilypond
ネストされた連符の演奏開始点が同時である場合に、それらの連符を変更するには
@lilypond[quote,verbatim,relative=1]
\time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
e8 | a4 c8 b c4 |
@end lilypond
\time 6/8
\partial 8
e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
r8 e,8 | a4 c8 b[ c b] |
@end lilypond
\scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
- c4. c \times 2/3 { c8[ c c] } c4
+ c4. c \tuplet 3/2 { c8[ c c] } c4
}
}
>>
@lilypond[quote,verbatim,relative=2]
\time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+\set Timing.baseMoment = #(ly:make-moment 1/16)
\set Timing.beatStructure = #'(7 3)
\repeat unfold 10 { a16 }
@end lilypond
@c KEEP LY
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3 2)
% 以下は beamExceptions のため、(3 3 2) の連桁にはなりません
\repeat unfold 8 {c8} |
<<
\new Staff {
\time 3/4
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
\repeat unfold 6 { a8 }
}
@lilypond[relative=1,verbatim,quote]
\override Beam.grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\featherDurations #(ly:make-moment 2/1)
{ c16[ c c c c c c c] }
\override Beam.grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\featherDurations #(ly:make-moment 2/3)
{ c32[ d e f] }
% revert to non-feathered beams
\override Beam.grow-direction = #'()
@lilypond[quote,verbatim]
\new Voice \relative c' {
- \set Timing.measureLength = #(ly:make-moment 5 4)
+ \set Timing.measureLength = #(ly:make-moment 5/4)
c1 c4 |
c1 c4 |
c4 c
- \set Timing.measurePosition = #(ly:make-moment 5 8)
+ \set Timing.measurePosition = #(ly:make-moment 5/8)
b4 b b8 |
c4 c1 |
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
\remove "Forbid_line_break_engraver"
} \relative c'' {
<<
- { c2. \times 2/3 { c4 c c } c2. | }
+ { c2. \tuplet 3/2 { c4 c c } c2. | }
{ s1 | \break s1 | }
>>
}
コンテキスト プロパティ @code{minimumPageTurnLength} を読み込んで、@c
どれくらい音符が無いセクションが続いたらページめくりを考慮するかを決定します。@c
@code{minimumPageTurnLength} のデフォルト値は
-@code{(ly:make-moment 1 1)} です。@c
+@code{(ly:make-moment 1/1)} です。@c
ページめくりを不可にしたいのならば、@c
@code{minimumPageTurnLength} に非常に大きな値をセットします。
a4 b c d |
R1 | % ここでページめくりが許可されます
a4 b c d |
- \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+ \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
R1 | % ここではページめくりは許可されません
a4 b r2 |
R1*2 | % ここでページめくりが許可されます
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
\score {
<<
\new Staff {
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
c8 c8 c8 c8
}
\new Staff {
c8 c8 c8 c8
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
これはすべての音楽要素へのスペースに関係する参照演奏時間です。@c
LilyPond Scheme 関数 @code{make-moment} は 2 つの引数をとります
-- 全音符の分数を表す分子と分母です。@c
-それゆえ、@code{(ly:make-moment 1 20)} という呼び出しは、@c
+それゆえ、@code{(ly:make-moment 1/20)} という呼び出しは、@c
20 分音符の参照演奏時間となります。@c
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)}, それに
-@code{(ly:make-moment 3 97)} という値はすべてとり得る値です。
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)}, それに
+@code{(ly:make-moment 3/97)} という値はすべてとり得る値です。
では、どのように @code{proportionalNotationDuration} に渡す@c
適切な参照演奏時間を決めるのでしょうか?@c
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 8)
+ proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 16)
+ proportionalNotationDuration = #(ly:make-moment 1/16)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 32)
+ proportionalNotationDuration = #(ly:make-moment 1/32)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
\override SpacingSpanner.uniform-stretching = ##t
}
}
@lilypond[quote,verbatim,ragged-right]
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
c''8
c''8
c''8
}
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
\layout {
\context {
\Score
- \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
}
}
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
@c Translation status: post-GDP
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
% show associations clearly.
\override NoteColumn.force-hshift = #-3
f8 f g
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Translators: Yoshiki Sawada
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines: (different from policy.txt!)
@cindex tuplets
@cindex triplets
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
Music Glossary: @rglos{note value}, @rglos{triplet}.
-@notation{Tuplets} are made with the @code{\times} keyword. It
+@notation{Tuplets} are made with the @code{\tuplet} keyword. It
takes two arguments: a fraction and a piece of music. The
-duration of the piece of music is multiplied by the fraction.
-Triplets make notes occupy 2/3 of their notated duration, so a
-@notation{triplet} has 2/3 as its fraction
+fraction is the number of tuplet notes over the number
+of notes normally filling the same duration.
+For triplets, there are three notes instead of two, so
+@notation{triplets} have 3/2 as their fraction.
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Grace notes
section of music is repeated many times.
@lilypond[verbatim,quote]
-tripletA = \times 2/3 { c,8 e g }
+tripletA = \tuplet 3/2 { c,8 e g }
barA = { \tripletA \tripletA \tripletA \tripletA }
\relative c'' {
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Fundamental concepts
@chapter Fundamental concepts
phrasing slur extending out of a tuplet (lines 3 and 4).
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Tweaking output
@chapter Tweaking output
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@cindex TupletNumber, example of overriding
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
\layout@{
\context @{
\Score
- \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
@}
\context @{
\layout{
\context {
\Score
- \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context {
\layout@{
\context @{
\Score
- \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
@}
\context @{
\layout{
\context { \Score
- \override MetronomeMark.extra-offset = #'(-9 . 0)
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
\override MetronomeMark.padding = #'3
}
\context { \Voice
-\version "2.17.6"
+\version "2.17.11"
\include "example-header.ily"
\paper {
f8 f4 e8 d c f f f | % 1
% the \scaleDurations command below makes 5 notes last the
% duration of a dotted quarter
- e8 c4 \scaleDurations 3/2 { \times 4/5{e16[ d e d e]} } e8 f4 | % 2
+ e8 c4 \scaleDurations 3/2 { \tuplet 5/4{e16[ d e d e]} } e8 f4 | % 2
g2. ~ g4. | % 3
- f8 d4 f4. \scaleDurations 3/2 { \times 4/6{ g16[ f e f e f]}} % 4
+ f8 d4 f4. \scaleDurations 3/2 { \tuplet 6/4{ g16[ f e f e f]}} % 4
g8 g4 g4. e4. | % 5
fis8 d4 e8\startGroup g4\stopGroup f8[ e d] | % 6
c2. r4. | % 7
-\version "2.17.6"
+\version "2.17.11"
\layout {
indent = #0
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 64)
+ proportionalNotationDuration = #(ly:make-moment 1/64)
\override Beam.breakable = ##t
autoBeaming = ##f
tupletFullLength = ##t
-\version "2.17.6"
+\version "2.17.11"
% the example header file caused the head to be chopped off
%\include "example-header.ily"
} {
% measure 6
- \fraction \times 5/3 {
- \times 4/5 {
+ \fraction \tuplet 3/5 {
+ \tuplet 5/4 {
a'64 [ % 36
cs''64 % 37
f''64 % 38
cs''64 % 39
ef'''64 ] % 40
}
- \times 4/5 {
+ \tuplet 5/4 {
g''64 [ % 41
c''64 % 42
e''64 % 43
% measure 7
r8 % 47
- \times 4/5 {
+ \tuplet 5/4 {
d''32 [ % 48
af''32 % 49
e'32 % 50
} {
% measure 6
- \fraction \times 5/3 {
+ \fraction \tuplet 3/5 {
\square f''16 * 1/8 % 40
\square f''16 * 1/8 % 41
\square f''16 * 1/8 % 42
\square f''16 * 1/8 % 45
\square f''16 * 1/8 % 46
\square f''16 * 1/8 % 47
- \times 2/3 {
+ \tuplet 3/2 {
\square f''16 % 48
\square f''16 * 1/2 % 49
}
- \times 2/3 {
+ \tuplet 3/2 {
\square f''16 * 1/4 % 50
\square f''16 * 1/4 % 51
\square f''16 * 1/4 % 52
\square g''16 * 2/1 % 57
\square g''16 % 58
\square g''16 % 59
- \times 8/9 {
+ \tuplet 9/8 {
s16 % 60
f''16 * 1/4 % 61
f''16 * 1/4 % 62
}
% measure 8
- \times 4/5 {
- \times 4/7 {
+ \tuplet 5/4 {
+ \tuplet 7/4 {
s4 % 66
\triangle a''16 % 67
\triangle a''16 % 68
} {
% measure 6
- \fraction \times 5/3 {
+ \fraction \tuplet 3/5 {
\blackdiamond f'128 [ % 40
\blackdiamond f'128 % 41
\blackdiamond f'128 % 42
\blackdiamond f'128 % 45
\blackdiamond f'128 % 46
\blackdiamond f'128 ] % 47
- \times 2/3 {
+ \tuplet 3/2 {
\blackdiamond f'16 % 48
\blackdiamond f'32 % 49
}
- \times 2/3 {
+ \tuplet 3/2 {
\blackdiamond f'64 % 50
\blackdiamond f'64 % 51
\blackdiamond f'64 % 52
\harmonic a'8 \glissando % 57
\harmonic a'16 \glissando % 58
\blackdiamond a'16 % 59
- \times 8/9 {
+ \tuplet 9/8 {
s16 % 60
\harmonic g'64 \glissando % 61
\harmonic g'64 \glissando % 62
}
% measure 8
- \times 4/5 {
- \times 4/7 {
+ \tuplet 5/4 {
+ \tuplet 7/4 {
s4 % 66
\blackdiamond f'16 % 67
\blackdiamond f'16 % 68
} {
% measure 6
- \fraction \times 5/3 {
+ \fraction \tuplet 3/5 {
s128 % 40
s128 % 41
s128 % 42
s128 % 45
s128 % 46
s128 % 47
- \times 2/3 {
+ \tuplet 3/2 {
\semicircle a16 % 48
\semicircle a16 * 1/2 % 49
}
- \times 2/3 {
+ \tuplet 3/2 {
\semicircle a16 * 1/4 % 50
\semicircle a16 * 1/4 % 51
\semicircle a16 * 1/4 % 52
s8 % 57
s16 % 58
\triangle a16 % 59
- \times 8/9 {
+ \tuplet 9/8 {
s16 % 60
s64 % 61
s64 % 62
}
% measure 8
- \times 4/5 {
- \times 4/7 {
+ \tuplet 5/4 {
+ \tuplet 7/4 {
s4 % 66
\semicircle a16 % 67
\semicircle a16 % 68
} {
% measure 6
- \fraction \times 5/3 {
+ \fraction \tuplet 3/5 {
\beam #0 #5 g,128 \sffp \< [ % 40
\beam #5 #5 g,128 % 41
\beam #5 #5 g,128 % 42
\beam #5 #5 g,128 % 45
\beam #5 #5 g,128 % 46
\beam #5 #1 g,128 % 47
- \times 2/3 {
+ \tuplet 3/2 {
\beam #1 #2 g,16 % 48
\beam #3 #1 g,32 \fX % 49
}
- \times 2/3 {
+ \tuplet 3/2 {
\beam #1 #4 g,64 \sffp \< % 50
\beam #4 #4 g,64 % 51
\beam #4 #4 g,64 % 52
g,8 \sf \< [ % 57
g,16 % 58
\beam #2 #0 g,16 \ffX ] % 59
- \times 8/9 {
+ \tuplet 9/8 {
r16 % 60
\beam #4 #4 g,64 \sfp \< [ % 61
\beam #4 #4 g,64 % 62
}
% measure 8
- \times 4/5 {
- \times 4/7 {
+ \tuplet 5/4 {
+ \tuplet 7/4 {
r4 % 66
\beam #2 #2 g,16 \fX [ % 67
\beam #2 #2 g,16 \f % 68
-\version "2.17.6"
+\version "2.17.11"
\include "example-header.ily"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
upperVoiceOne = \relative c'' {
\voiceOne
\override TupletBracket.transparent = ##t
- <aes f'>8\([ \times 4/5{g'32( aes g f g]) }
- <es aes>8[ \times 4/5{<d bes'>32( c' bes aes bes]) }
+ <aes f'>8\([ \tuplet 5/4{g'32( aes g f g]) }
+ <es aes>8[ \tuplet 5/4{<d bes'>32( c' bes aes bes]) }
<es, aes es'>8 <d fis b d>\) | % end m. 1
%--------------------------------------------------%
<c g' c>4\( \voiceTwo <bes es bes'\arpeggio>\)
%--------------------------------------------------%
\noBreak
\voiceOne
- <f aes d f>8\([ \times 4/5{<g g'>32( aes' g f g]) }
+ <f aes d f>8\([ \tuplet 5/4{<g g'>32( aes' g f g]) }
\set subdivideBeams = ##t
- \set baseMoment = #(ly:make-moment 1 8)
+ \set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = #'(2 2 2)
- <aes, aes'>16 <c f> \times 4/5{ bes'32( c bes aes bes]) }
+ <aes, aes'>16 <c f> \tuplet 5/4{ bes'32( c bes aes bes]) }
\set subdivideBeams = ##f
\ottava #1 <es es'>16 <f f'> <d d'> \appoggiatura f8 <es es'>16\)
}
bes8 \csm \stemDown <bes'' c es>8 s2
\csl \stemUp
\set subdivideBeams = ##t
- \set baseMoment = #(ly:make-moment 1 16)
+ \set baseMoment = #(ly:make-moment 1/16)
\set beatStructure = #'(4 4 4)
s8 \hideNotes \slurUp \stemDown
es,,64( bes'' s64 \unHideNotes \stemUp g64[ bes c d c]) s2
\context {
\Score
\override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 32)
+ #'base-shortest-duration = #(ly:make-moment 1/32)
}
}
}
\context {
\Score
\override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 1 1)
+ #'base-shortest-duration = #(ly:make-moment 1/1)
\override NonMusicalPaperColumn
#'line-break-system-details = #'((alignment-distances . (3 3)))
\override BarLine #'stencil = ##f
\context {
\Score
\override SpacingSpanner
- #'base-shortest-duration = #(ly:make-moment 2 1)
+ #'base-shortest-duration = #(ly:make-moment 2/1)
\override NonMusicalPaperColumn
#'line-break-system-details = #'((alignment-distances . (3 3)))
\override BarLine #'stencil = ##f
\context {
\Score
\override SpacingSpanner #'base-shortest-duration =
- #(ly:make-moment 2 1)
+ #(ly:make-moment 2/1)
\override NonMusicalPaperColumn
#'line-break-system-details = #'((alignment-distances . (3 3)))
\override BarLine #'stencil = ##f
@lilypond[quote,notime]
\relative c'' {
\override Staff.Clef #'full-size-change = ##t
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 8)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/8)
\clef french
g1
\clef treble
@lilypond[quote,line-width=13.0\cm]
\relative c'' {
\time 4/4
- \times 2/3 {g8_"triplets" g g} g4 g8 g g4 \bar "||"
- \times 2/5 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||"
+ \tuplet 3/2 {g8_"triplets" g g} g4 g8 g g4 \bar "||"
+ \tuplet 5/2 {g8_"quintuplets" g g g g} g4 g8 g g4 \bar "||"
}
@end lilypond
@lilypond[quote,line-width=13.0\cm]
\relative c'' {
\time 3/4
- \times 3/2 {g4_"duplets" g} |
+ \tuplet 2/3 {g4_"duplets" g} |
g4 g g \bar "||"
- \times 6/4 {g8_"quadruplets" g g g} |
+ \tuplet 4/6 {g8_"quadruplets" g g g} |
g8 g g g g4 \bar "||"
}
@end lilypond
}
\relative c'' {
c2. c32 b c b c b c b | c1
- c2. b32 c b c \times 4/5 { b c b c b } | c1
+ c2. b32 c b c \tuplet 5/4 { b c b c b } | c1
}
>>
@end lilypond
@c Translation checker:
@c Translation checker committish:
-@c \version "2.16.0"
+@c \version "2.17.11"
@ignore
Tutorial guidelines: (different from policy.txt!)
@notation{triool} heeft als fractie 2/3
@lilypond[verbatim,quote,relative=2]
-\times 2/3 { f8 g a }
-\times 2/3 { c8 r c }
-\times 2/3 { f,8 g16[ a g a] }
-\times 2/3 { d4 a8 }
+\tuplet 3/2 { f8 g a }
+\tuplet 3/2 { c8 r c }
+\tuplet 3/2 { f,8 g16[ a g a] }
+\tuplet 3/2 { d4 a8 }
@end lilypond
@subheading Versieringen
@c KEEP LY
@lilypond[verbatim,quote]
-trioolA = \times 2/3 { c,8 e g }
+trioolA = \tuplet 3/2 { c,8 e g }
maatA = { \trioolA \trioolA \trioolA \trioolA }
\relative c'' {
@c Translation checker:
@c Translation checker committish:
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Fundamentele concepten
@translationof Fundamental concepts
phrasing slur extending out of a tuplet (lines 3 and 4).
@lilypond[quote,verbatim,ragged-right,relative=1]
-r16[ g \times 2/3 { r16 e'8] }
-g,16( a \times 2/3 { b16 d) e }
-g,8[( a \times 2/3 { b8 d) e~] } |
-\times 4/5 { e32\( a, b d e } a4.\)
+r16[ g \tuplet 3/2 { r16 e'8] }
+g,16( a \tuplet 3/2 { b16 d) e }
+g,8[( a \tuplet 3/2 { b8 d) e~] } |
+\tuplet 5/4 { e32\( a, b d e } a4.\)
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Tweaking output
@chapter Tweaking output
@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
\tweak direction #up
-\times 4/3 {
+\tuplet 3/4 {
\tweak color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@cindex TupletNumber, example of overriding
@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
+\tuplet 3/2 { c8[ c c] }
\once \override TupletNumber.text = #tuplet-number::calc-fraction-text
-\times 2/3 {
+\tuplet 3/2 {
c8[ c]
c8[ c]
\once \override TupletNumber.transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
@end lilypond
@docLinks{Beginnen, learning,
@rlearningnamed{Top,Learning},
- @manualStableLearningSplit,
- @manualStableLearningBig, 1.5 MB,
- @manualStableLearningPdf, 3 MB}
+ @manualStableLearningSplit-nl,
+ @manualStableLearningBig-nl, 1.5 MB,
+ @manualStableLearningPdf-nl, 3 MB}
@divEnd
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Ancient notation
(@emph{tempus perfectum}) can be made by hand, by setting
@example
-breveTP = #(ly:make-duration -1 0 3 2)
+breveTP = #(ly:make-duration -1 0 3/2)
@dots{}
@{ c\breveTP f1 @}
@end example
spiritus = \relative c' {
\time 1/4
\override Lyrics.LyricText.X-extent = #'(0 . 3)
- d4 \times 2/3 { f8 a g } g a a4 g f8 e
+ d4 \tuplet 3/2 { f8 a g } g a a4 g f8 e
d4 f8 g g8 d f g a g f4 g8 a a4 s
- \times 2/3 { g8 f d } e f g a g4
+ \tuplet 3/2 { g8 f d } e f g a g4
}
spirLyr = \lyricmode {
Internals Reference:
@rinternals{Tunable context properties}.
-@cindex grob properties
-@cindex properties, grob
-@funindex \override
-
@node The override command
@subsection The @code{\override} command
+@cindex grob properties
+@cindex properties, grob
+@funindex \override
+
There is a special type of context property: the grob
description. Grob descriptions are named in @code{StudlyCaps}
(starting with capital letters). They contain the
Internals Reference:
@rinternals{TieColumn}.
+
+@node Unpure-pure containers
+@subsection Unpure-pure containers
+
@cindex Scheme, pure containers
@cindex Scheme, unpure containers
@cindex pure containers, Scheme
@cindex unpure containers, Scheme
@cindex horizontal spacing, overriding
-
-@node Unpure-pure containers
-@subsection Unpure-pure containers
-
Unpure-pure containers are useful for overriding @emph{Y-axis} spacing
calculations - specifically @code{Y-offset} and @code{Y-extent} - with a
Scheme function instead of a literal (i.e. a number or pair).
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@c TODO: add tablature.
@end lilypond
-@item @code{\times 2/3 @{f g a@}}
+@item @code{\tuplet 3/2 @{f g a@}}
@tab triplets
@tab
@lilypond[relative=1]
\set Staff.implicitTimeSignatureVisibility = #all-invisible
-\times 2/3 { f8 g a }
+\tuplet 3/2 { f8 g a }
@end lilypond
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Editorial annotations
@section Editorial annotations
c4-1 d-2 f-4 e-3
@end lilypond
-Markup texts may be used for finger changes.
+Markup texts or strings may be used for finger changes.
@lilypond[verbatim,quote,relative=2]
-c4-1 d-2 f-4 c^\markup { \finger "2 - 3" }
+c4-1 d-2 f\finger \markup \tied-lyric #"4~3" c\finger "2 - 3"
@end lilypond
@cindex thumb-script
@rinternals{New_fingering_engraver},
@rinternals{Fingering}.
-@knownissues
-By default, numbers greater than 9 are not supported using
-@samp{@var{note}-@var{digit}}.
-
@node Hidden notes
@unnumberedsubsubsec Hidden notes
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Fretted string instruments
@section Fretted string instruments
< b\3 \deadNote d\2 b'\1 >
< c\3 \deadNote e\2 c'\1 >
\deadNotesOn
- \times 2/3 { g8 b e }
+ \tuplet 3/2 { g8 b e }
\deadNotesOff
< a,\3 c\2 e\1 >1
}
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@node Repeats
@section Repeats
\alternative {
{
f2 d |
- \set Timing.measureLength = #(ly:make-moment 3 4)
+ \set Timing.measureLength = #(ly:make-moment 3/4)
g4 g g % optional bar check is allowed here
}
{
- \set Timing.measureLength = #(ly:make-moment 4 4)
+ \set Timing.measureLength = #(ly:make-moment 4/4)
a2 a |
}
}
@table @code
@item start-repeat
-Print a @code{|:} bar line.
+Print a @code{.|:} bar line.
@lilypond[verbatim,quote,relative=2]
c1
at the beginning of a piece.
@item end-repeat
-Print a @code{:|} bar line:
+Print a @code{:|.} bar line:
@lilypond[verbatim,quote,relative=2]
c1
@lilypond[verbatim,quote,relative=2]
\repeat percent 4 { c8. <d f>16 }
-\repeat percent 2 { \times 2/3 { r8 c d } e4 }
+\repeat percent 2 { \tuplet 3/2 { r8 c d } e4 }
@end lilypond
@snippets
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Rhythms
@section Rhythms
@cindex tuplets
@cindex triplets
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
-Tuplets are made from a music expression by multiplying all the
-durations with a fraction:
+Tuplets are made from a music expression with the @code{\tuplet}
+command, multiplying the speed of the music expression by a
+fraction:
@example
-\times @var{fraction} @{ @var{music} @}
+\tuplet @var{fraction} @{ @var{music} @}
@end example
@noindent
-The duration of @code{@var{music}} will be multiplied by the
-fraction. The fraction's denominator will be printed over or
+The fraction's numerator will be printed over or
under the notes, optionally with a bracket. The most common
-tuplet is the triplet in which 3 notes have the duration of 2, so
-the notes are 2/3 of their written length.
+tuplets are triplets: 3@tie{}notes sound within the duration
+normally allowed for@tie{}2:
@lilypond[quote,verbatim,relative=2]
-a2 \times 2/3 { b4 b b }
-c4 c \times 2/3 { b4 a g }
+a2 \tuplet 3/2 { b4 b b }
+c4 c \tuplet 3/2 { b4 a g }
+@end lilypond
+
+@cindex tuplet grouping
+@noindent
+When entering long passages of tuplets, having to write a separate
+@code{\tuplet} command for each group is inconvenient. It is
+possible to specify the duration of one tuplet group directly
+before the music in order to have the tuplets grouped
+automatically:
+
+@lilypond[quote,verbatim,relative=2]
+g2 r8 \tuplet 3/2 8 { cis16 d e e f g g f e }
@end lilypond
@cindex tuplet bracket placement
@lilypond[quote,verbatim,relative=2]
\autoBeamOff
-c4 \times 4/5 { f8 e f \times 2/3 { e[ f g] } } f4
+c4 \tuplet 5/4 { f8 e f \tuplet 3/2 { e[ f g] } } f4
@end lilypond
Modifying nested tuplets which begin at the same musical moment
@knownissues
Grace notes may be placed within tuplet brackets, @emph{except}
when a staff begins with a grace note followed by a tuplet. In this
-particular case, the grace note must be placed before the @code{\times}
+particular case, the grace note must be placed before the @code{\tuplet}
command to avoid errors.
@cindex tempo marks within tuplet brackets
@lilypond[quote,verbatim,relative=1]
\time 3/4
-\set Timing.measurePosition = #(ly:make-moment -1 8)
+\set Timing.measurePosition = #(ly:make-moment -1/8)
e8 | a4 c8 b c4 |
@end lilypond
\time 6/8
\partial 8
e8 | a4 c8 b[ c b] |
-\set Timing.measurePosition = #(ly:make-moment -1 4)
+\set Timing.measurePosition = #(ly:make-moment -1/4)
r8 e,8 | a4 c8 b[ c b] |
@end lilypond
@funindex timeSignatureFraction
@funindex \scaleDurations
@funindex scaleDurations
-@funindex \times
-@funindex times
+@funindex \tuplet
+@funindex tuplet
Polymetric notation is supported explicitly or by manually modifying the
visible time signature symbol and/or scaling note durations.
\scaleDurations 3/5 {
\repeat unfold 2 { c8[ c c] }
\repeat unfold 2 { c8[ c] } |
- c4. c \times 2/3 { c8[ c c] } c4
+ c4. c \tuplet 3/2 { c8[ c c] } c4
}
}
>>
@cindex beams, with melismata
@warning{If beams are used to indicate melismata in songs, then
-automatic beaming should be switched off with @code{\autoBeamOff}
+automatic beaming should be switched off with @code{@bs{}autoBeamOff}
and the beams indicated manually. Using @code{@bs{}partcombine} with
@code{@bs{}autoBeamOff} can produce unintended results. See the
snippets for more information.}
as explained in @ref{Time signature}.
If a @code{beamExceptions} rule is defined for the time signature in
-force, that rule is used to determine the beam placement. If no
-@code{beamExceptions} rule is defined for the time signature in force,
-the beam placement is determined by the settings of @code{baseMoment}
-and @code{beatStructure}.
+force, that rule alone is used to determine the beam placement; the
+values of @code{baseMoment} and @code{beatStructure} are ignored.
+
+If no @code{beamExceptions} rule is defined for the time signature
+in force, the beam placement is determined by the values of
+@code{baseMoment} and @code{beatStructure}.
+
+
+@subsubsubheading Beaming based on @code{baseMoment} and @code{beatStructure}
By default, @code{beamExceptions} rules are defined for most common
-time signatures, so the @code{beamException} rules must be disabled
+time signatures, so the @code{beamExceptions} rules must be disabled
if automatic beaming is to be based on @code{baseMoment} and
@code{beatStructure}. The @code{beamExceptions} rules are disabled
by
\set Timing.beamExceptions = #'()
@end example
-
-@subsubsubheading Beaming based on @code{baseMoment} and @code{beatStructure}
-
-In most instances, automatic beams will end at the end of a beat.
-The ending points for beats are determined by the context properties
-@code{baseMoment} and @code{beatStructure}. @code{beatStructure}
-is a scheme list that defines the length of each beat in the measure
-in units of @code{baseMoment}. By default, @code{baseMoment} is
-one over the denominator of the time signature. By default,
-each unit of length @code{baseMoment} is a single beat.
+When @code{beamExceptions} is set to @code{#'()}, either due to an
+explicit setting or because no @code{beamExceptions} rules are defined
+internally for the time signature in force, the ending points for
+beams are on beats as specified by the context properties
+@code{baseMoment} and @code{beatStructure}. @code{beatStructure} is
+a scheme list that defines the length of each beat in the measure in
+units of @code{baseMoment}. By default, @code{baseMoment} is one
+over the denominator of the time signature. By default, each unit of
+length @code{baseMoment} is a single beat.
@lilypond[quote,relative=2,verbatim]
\time 5/16
c16^"default" c c c c |
+% beamExceptions are unlikely to be defined for 5/16 time,
+% but let's disable them anyway to be sure
+\set Timing.beamExceptions = #'()
\set Timing.beatStructure = #'(2 3)
c16^"(2+3)" c c c c |
\set Timing.beatStructure = #'(3 2)
c16^"(3+2)" c c c c |
@end lilypond
-If a common time signature is being used, @code{beamExceptions}
-@emph{must} be disabled to enable @code{beatStructure} to work.
-The @code{\set Timing.beamExceptions = #'()} command can always
-be included if beaming is being determined by @code{beatStructure}.
-
@lilypond[quote,relative=2,verbatim]
\time 4/4
a8^"default" a a a a a a a
-
-\set Timing.baseMoment = #(ly:make-moment 1 4)
-\set Timing.beatStructure = #'(1 1 1 1)
-a8^"no change" a a a a a a a
-
+% Disable beamExceptions because they are definitely
+% defined for 4/4 time
\set Timing.beamExceptions = #'()
-\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.baseMoment = #(ly:make-moment 1/4)
\set Timing.beatStructure = #'(1 1 1 1)
a8^"changed" a a a a a a a
@end lilypond
@lilypond[quote, verbatim,relative=1]
\new Staff {
\time 7/8
+ % No need to disable beamExceptions as they are not defined for 7/8 time
\set Staff.beatStructure = #'(2 3 2)
<<
\new Voice = one {
@lilypond[quote,verbatim,relative=2]
\time 5/8
-\set Timing.baseMoment = #(ly:make-moment 1 16)
+% No need to disable beamExceptions as they are not defined for 5/8 time
+\set Timing.baseMoment = #(ly:make-moment 1/16)
\set Timing.beatStructure = #'(7 3)
\repeat unfold 10 { a16 }
@end lilypond
@lilypond[quote,verbatim,relative=2]
\time 4/4
-\set Timing.baseMoment = #(ly:make-moment 1 8)
+\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3 2)
% This won't beam (3 3 2) because of beamExceptions
\repeat unfold 8 {c8} |
\time 3/4
% by default we beam in (6) due to beamExceptions
\repeat unfold 6 {a8} |
-% This will beam (1 1 1) due to beatLength
+% This will beam (1 1 1) due to default baseMoment and beatStructure
\set Timing.beamExceptions = #'()
\repeat unfold 6 {a8}
@end lilypond
@item
if a beam-ending rule is defined in @code{beamExceptions}
-for a longer beam-type, use it to determined the valid places
+for a longer beam-type, use it to determine the valid places
where beams may end, otherwise
@item
<<
\new Staff {
\time 3/4
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
\repeat unfold 6 { a8 }
}
@lilypond[relative=1,verbatim,quote]
\override Beam.grow-direction = #LEFT
-\featherDurations #(ly:make-moment 2 1)
+\featherDurations #(ly:make-moment 2/1)
{ c16[ c c c c c c c] }
\override Beam.grow-direction = #RIGHT
-\featherDurations #(ly:make-moment 2 3)
+\featherDurations #(ly:make-moment 2/3)
{ c32[ d e f] }
% revert to non-feathered beams
\override Beam.grow-direction = #'()
@lilypond[quote,verbatim]
\new Voice \relative c' {
- \set Timing.measureLength = #(ly:make-moment 5 4)
+ \set Timing.measureLength = #(ly:make-moment 5/4)
c1 c4 |
c1 c4 |
c4 c
- \set Timing.measurePosition = #(ly:make-moment 5 8)
+ \set Timing.measurePosition = #(ly:make-moment 5/8)
b4 b b8 |
c4 c1 |
}
explicitly named in order to attach lyrics to it, the partcombiner will
stop working.
-@code{\partcombine...} functions cannot be placed inside a @code{\times}
+@code{\partcombine...} functions cannot be placed inside a @code{\tuplet}
or @code{\relative} block.
If @code{printPartCombineTexts} is set and the two voices play the same
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@ignore
GDP TODO list
\remove "Forbid_line_break_engraver"
} \relative c'' {
<<
- { c2. \times 2/3 { c4 c c } c2. | }
+ { c2. \tuplet 3/2 { c4 c c } c2. | }
{ s1 | \break s1 | }
>>
}
The @code{Page_turn_engraver} reads the context property
@code{minimumPageTurnLength} to determine how long a note-free section must
be before a page turn is considered. The default value for
-@code{minimumPageTurnLength} is @code{(ly:make-moment 1 1)}. If you want
+@code{minimumPageTurnLength} is @code{(ly:make-moment 1/1)}. If you want
to disable page turns, you can set it to something very large.
@example
a4 b c d |
R1 | % a page turn will be allowed here
a4 b c d |
- \set Staff.minimumPageTurnLength = #(ly:make-moment 5 2)
+ \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
R1 | % a page turn will not be allowed here
a4 b r2 |
R1*2 | % a page turn will be allowed here
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
}
\score {
<<
\new Staff {
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
c8 c8 c8 c8
}
\new Staff {
c8 c8 c8 c8
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8 c8 c8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
which is the reference duration against that all music will be spaced.
The LilyPond Scheme function @code{make-moment} takes two arguments
-- a numerator and denominator which together express some fraction of
-a whole note. The call @code{(ly:make-moment 1 20)} therefore produces
+a whole note. The call @code{(ly:make-moment 1/20)} therefore produces
a reference duration of a twentieth note. Values such as
-@code{(ly:make-moment 1 16)}, @code{(ly:make-moment 1 8)}, and
-@code{(ly:make-moment 3 97)} are all possible as well.
+@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)}, and
+@code{(ly:make-moment 3/97)} are all possible as well.
How do we select the right reference duration to pass to
@code{proportionalNotationDuration}? Usually by a process of trial
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 8)
+ proportionalNotationDuration = #(ly:make-moment 1/8)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 16)
+ proportionalNotationDuration = #(ly:make-moment 1/16)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 32)
+ proportionalNotationDuration = #(ly:make-moment 1/32)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
}
}
}
\new RhythmicStaff {
c'2
c'16 c'16 c'16 c'16
- \times 4/5 {
+ \tuplet 5/4 {
c'16 c'16 c'16 c'16 c'16
}
}
\new RhythmicStaff {
- \times 8/9 {
+ \tuplet 9/8 {
c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
}
}
\layout {
\context {
\Score
- proportionalNotationDuration = #(ly:make-moment 1 20)
+ proportionalNotationDuration = #(ly:make-moment 1/20)
\override SpacingSpanner.uniform-stretching = ##t
}
}
@lilypond[quote,verbatim,ragged-right]
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
c''8
c''8
c''8
}
\new Staff {
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\override Score.SpacingSpanner.strict-note-spacing = ##t
c''8
c''8
\layout {
\context {
\Score
- \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
}
}
}
@lilypond[quote,verbatim,relative=1]
g1 bes
-ees-\markup {
- \finger 4
- \tied-lyric #"~"
- \finger 1
-}
+ees\finger \markup \tied-lyric #"4~1"
fis_\markup { \dynamic rf }
bes^\markup {
\beam #8 #0.1 #0.5
(make-pango-font-tree "Times New Roman"
"Nimbus Sans"
"Luxi Mono"
- (/ (* staff-height pt) 2)))
+ (/ staff-height pt 20)))
}
\relative c'{
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.17.6"
+@c \version "2.17.11"
@node Vocal music
@section Vocal music
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
% show associations clearly.
\override NoteColumn.force-hshift = #-3
f8 f g
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
+%% Note: this file works from version 2.17.6
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
\version "2.17.6"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "breaks, contexts-and-engravers, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contexts-and-engravers, really-simple, staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "chords, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms"
{
- r16[ g16 \times 2/3 { r16 e'8] }
- g16( a \times 2/3 { b d e') }
- g8[( a \times 2/3 { b d') e'] ~ }
+ r16[ g16 \tuplet 3/2 { r16 e'8] }
+ g16( a \tuplet 3/2 { b d e') }
+ g8[( a \tuplet 3/2 { b d') e'] ~ }
\time 2/4
- \times 4/5 { e'32\( a b d' e' } a'4.\)
+ \tuplet 5/4 { e'32\( a b d' e' } a'4.\)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "staff-notation, symbols-and-glyphs, vocal-music"
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.17.11"
+
+\header {
+ lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
+
+ texidoc = "
+To add a link to a grob-stencil you could use @code{add-link} as
+defined here. Works with @code{\\override} and @code{\\tweak}.
+Drawback: @code{point-and-click} will be disturbed for the linked grobs.
+
+Limitation: Works for PDF only.
+
+The linked objects are colored with a separate command.
+
+"
+ doctitle = "Adding links to objects"
+} % begin verbatim
+
+% Code by Thomas Morley
+% Contributed by harm6
+% Tested with 2.14.2 up to 2.17.9
+
+#(define (add-link url-strg)
+ (lambda (grob)
+ (let* ((stil (ly:grob-property grob 'stencil)))
+ (if (ly:stencil? stil)
+ (begin
+ (let* (
+ (x-ext (ly:stencil-extent stil X))
+ (y-ext (ly:stencil-extent stil Y))
+ (url-expr (list 'url-link url-strg `(quote ,x-ext) `(quote ,y-ext)))
+ (new-stil (ly:stencil-add (ly:make-stencil url-expr x-ext y-ext) stil)))
+ (ly:grob-set-property! grob 'stencil new-stil)))
+ #f))))
+
+%%%% test
+
+urlI =
+"http://lilypond.org/doc/v2.14/Documentation/notation/writing-pitches"
+
+urlII =
+"http://lilypond.org/doc/v2.14/Documentation/notation/rhythms"
+
+urlIII =
+"http://lilypond.org/doc/v2.14/Documentation/notation/note-heads"
+
+urlIV =
+"http://lilypond.org/doc/v2.14/Documentation/notation/beams"
+
+urlV =
+"http://lilypond.org/doc/v2.14/Documentation/notation/note-head-styles"
+
+\relative c' {
+ \key cis\minor
+
+ \once \override Staff.Clef.color = #green
+ \once \override Staff.Clef.after-line-breaking =
+ #(add-link urlI)
+
+ \once \override Staff.TimeSignature.color = #green
+ \once \override Staff.TimeSignature.after-line-breaking =
+ #(add-link urlII)
+
+ \once \override NoteHead.color = #green
+ \once \override NoteHead.after-line-breaking =
+ #(add-link urlIII)
+
+ cis'1
+ \once \override Beam.color = #green
+ \once \override Beam.after-line-breaking =
+ #(add-link urlIV)
+ cis8 dis e fis gis2
+ <gis,
+ % With 2.17.9 you could use the command below to address the Accidental.
+ % \tweak Accidental.before-line-breaking #(add-link url)
+ \tweak color #green
+ \tweak after-line-breaking #(add-link urlV)
+ \tweak style #'harmonic
+ bis
+ dis
+ fis
+ >1
+ <cis, cis' e>
+}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "correction-wanted, spacing, text, vocal-music, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "paper-and-layout, text, titles"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, really-simple, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation, real-music, really-cool, template"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "template, vocal-music"
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 2)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/2)
}
\context {
\Staff
\new Staff {
\transpose c d
\relative c' {
- \set shapeNoteStyles = ##(do re mi fa
+ \set shapeNoteStyles = #'#(do re mi fa
#f la ti)
\fragment
}
\break
\relative c' {
- \set shapeNoteStyles = ##(cross triangle fa #f
+ \set shapeNoteStyles = #'#(cross triangle fa #f
mensural xcircle diamond)
\fragment
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "world-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "automatic-notation, connecting-notes, rhythms"
}
>>
\oneVoice
- \set baseMoment = #(ly:make-moment 1 8)
+ \set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = #'(2 2 2 2)
b32^"baseMoment 1 8"[ a g f c' b a g]
- \set baseMoment = #(ly:make-moment 1 16)
+ \set baseMoment = #(ly:make-moment 1/16)
\set beatStructure = #'(4 4 4 4)
b32^"baseMoment 1 16"[ a g f c' b a g]
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "chords, editorial-annotations, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
\relative c'' {
\time 5/4
% Set default beaming for all staves
- \set Score.baseMoment = #(ly:make-moment 1 8)
+ \set Score.baseMoment = #(ly:make-moment 1/8)
\set Score.beatStructure = #'(3 4 3)
<<
\new Staff {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, really-cool, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, really-cool, scheme-language, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, really-simple, simultaneous-notes, specific-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contexts-and-engravers, midi, real-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "specific-notation, staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.17.6"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
\header {
lsrtags = "rhythms"
texidoc = "
By default, only the numerator of the tuplet number is printed over the
-tuplet bracket, i.e., the denominator of the argument to the
-@code{\\times} command. Alternatively, num:den of the tuplet number may
+tuplet bracket. Alternatively, num:den of the tuplet number may
be printed, or the tuplet number may be suppressed altogether.
"
} % begin verbatim
+
\relative c'' {
- \times 2/3 { c8 c c }
- \times 2/3 { c8 c c }
+ \tuplet 3/2 { c8 c c }
+ \tuplet 3/2 { c8 c c }
\override TupletNumber.text = #tuplet-number::calc-fraction-text
- \times 2/3 { c8 c c }
+ \tuplet 3/2 { c8 c c }
\override TupletNumber.stencil = ##f
- \times 2/3 { c8 c c }
+ \tuplet 3/2 { c8 c c }
}
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.16.0
-\version "2.16.0"
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
\header {
lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
\new Staff {
\scaleDurations 8/5 {
\time 6/8
- \set Timing.measureLength = #(ly:make-moment 6 5)
+ \set Timing.measureLength = #(ly:make-moment 6/5)
b8 b b b b b
\time 2/4
- \set Timing.measureLength = #(ly:make-moment 4 5)
+ \set Timing.measureLength = #(ly:make-moment 4/5)
b4 b
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, pitches, really-cool"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "simultaneous-notes, syntax-and-expressions, text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, expressive-marks, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
music = \relative c'' {
- \times 2/3 { c16[ d e } f8]
- \times 2/3 { c8 d e }
- \times 2/3 { c4 d e }
+ \tuplet 3/2 { c16[ d e } f8]
+ \tuplet 3/2 { c8 d e }
+ \tuplet 3/2 { c4 d e }
}
\new Voice {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.16.0
-\version "2.16.0"
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
\header {
lsrtags = "pitches, real-music, really-cool, scheme-language"
rhythm =
#(define-music-function (parser location p) (ly:pitch?)
"Make the rhythm in Mars (the Planets) at the given pitch"
- #{ \times 2/3 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+ #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
\new Staff {
\time 5/4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.13"
\header {
lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
#(make-music 'FingeringEvent
'digit 50)
-finger =
-#(define-music-function (parser location digit) (integer?)
- (make-music 'FingeringEvent
- 'digit digit))
-
#(define (calc-finger-without-warning grob)
(let* ((event (event-cause grob))
(digit (ly:event-property event 'digit)))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "chords, keyboards, tweaks-and-overrides, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation, specific-notation, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
}
}
\midi { }
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "chords, simultaneous-notes, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
adding-fingerings-to-a-score.ly
+adding-links-to-objects.ly
allowing-fingerings-to-be-printed-inside-the-staff.ly
alternative-bar-numbering.ly
analysis-brackets-above-the-staff.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "repeats, rhythms"
-%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
-%% and then run scripts/auxiliar/makelsr.py
-%%
-%% This file is in the public domain.
-\version "2.16.0"
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
\header {
lsrtags = "rhythms, syntax-and-expressions"
texidoc = "
The property @code{tupletSpannerDuration} sets how long each of the
-tuplets contained within the brackets after @code{\\times} should last.
+tuplets contained within the brackets after @code{\\tuplet} should last.
Many consecutive tuplets can then be placed within a single
-@code{\\times} expression, thus saving typing.
-
-In the example, two triplets are shown, while @code{\\times} was
-entered only once.
-
-
-Read the relevant sections of the Notation Reference for more
-information about @code{ly:make-moment}.
+@code{\\tuplet} expression, thus saving typing.
+There are several ways to set @code{tupletSpannerDuration}. The command
+@code{\\tupletSpan} sets it to a given duration, and clears it when
+instead of a duration @code{\\default} is specified. Another way is
+to use an optional argument with @code{\\tuplet}.
"
- doctitle = "Entering several tuplets using only one \\times command"
+ doctitle = "Entering several tuplets using only one \\tuplet command"
} % begin verbatim
+
\relative c' {
\time 2/4
- \set tupletSpannerDuration = #(ly:make-moment 1 4)
- \times 2/3 { c8 c c c c c }
+ \tupletSpan 4
+ \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
+ \tupletSpan \default
+ \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
+ \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
% \context {
% \Score
% \override SpacingSpanner.base-shortest-duration =
-% #(ly:make-moment 1 20)
+% #(ly:make-moment 1/20)
% }
%}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "symbols-and-glyphs, winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, specific-notation, stylesheet, version-specific"
r4
\tupletOff
- \times 4/5 {
+ \tuplet 5/4 {
<a e' a cis e>16^\xUp
\headsOff
<a e' a cis e>^\aUp
r4
\tupletsOff
- \times 2/3 {
+ \tuplet 3/2 {
<a e' a cis e>8^\pDown
\headsOff
<a e' a cis e>^\xUp
\headsOn
}
- \times 2/3 {
+ \tuplet 3/2 {
<a e' a cis e>8^\pDown
\headsOff
<a e' a cis e>^\xUp
\headsOn
}
- \times 2/3 {
+ \tuplet 3/2 {
<a e' a cis e>8^\pDown
\headsOff
<a e' a cis e>^\xUp
<a e' a cis e>^\iUp
\headsOn
}
- \times 2/3 {
+ \tuplet 3/2 {
<a e' a cis e>8^\pDown
\headsOff
<a e' a cis e>^\xUp
\tupletsOff
\override Beam.positions = #'(2 . 2)
- \times 2/3 {
+ \tuplet 3/2 {
a8^\markup{ \small p }
<e' a>^\strokeUpGolpe
<e a>^\strokeDown
}
- \times 2/3 {
+ \tuplet 3/2 {
a,8^\markup{ \small p }
<e' a>^\strokeUpGolpe
<e a>^\strokeDown
}
- \times 2/3 {
+ \tuplet 3/2 {
a,8^\markup{ \small p }
<e' a>^\strokeUpGolpe
<e a>^\strokeDown
}
- \times 2/3 {
+ \tuplet 3/2 {
a,8^\markup{ \small p }
<e' a>^\strokeUpGolpe
<e a>^\strokeDown
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.6
+%% Note: this file works from version 2.17.11
% INSPIRATIONAL HEADER FOR LILYPOND DOCUMENTATION fretted-strings %
% Passage from Johann Kaspar Mertz "Opern Revue, Op. 8, no. 17" %
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
R1 % m. 5
e'4^\benmarcato e8. d16-4
- d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
+ d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
\FO #'-0.3 #'0.3
- <a-3>4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7
+ <a-3>4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7
\FO #'-0.3 #'0.3
- <g-4>4 \times 2/3 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4 % beg of m. 8
- \times 2/3 { \sfou <d-4>4 c8 } | % end of m. 8
+ <g-4>4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4 % beg of m. 8
+ \tuplet 3/2 { \sfou <d-4>4 c8 } | % end of m. 8
- b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
+ b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
- e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10
+ e4 e8. d16-4 d4 \tuplet 3/2 { c4 b8 } | % m. 10
- \times 2/3 { a4 a8 b4 c8 } % beg of m. 11
+ \tuplet 3/2 { a4 a8 b4 c8 } % beg of m. 11
\sfou \FO #'-0.3 #'0.3
- <d-4>4^\< \times 2/3 { e4 <d f>8\! } | % end of m. 11
+ <d-4>4^\< \tuplet 3/2 { e4 <d f>8\! } | % end of m. 11
}
bass = \relative c {
%% new section starts here in A minor
\set Score.beamExceptions = #'()
\once \override TextScript.staff-padding = #1.7
- \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
+ \tuplet 3/2 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
- \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
- \times 2/3 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
+ \tuplet 3/2 { a,8\pdolce e' a c a e } % beg m. 6
+ \tuplet 3/2 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
- \times 2/3 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
+ \tuplet 3/2 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
- \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
+ \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
- \times 2/3 { <g,-3>8 d' g d' g, d % beg m. 9
+ \tuplet 3/2 { <g,-3>8 d' g d' g, d % beg m. 9
\sfod \FO #'0.0 #'-2.0 <gis,-4> \sfou <e'-2> <gis-1> b gis e } | % end m. 9
- \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
+ \tuplet 3/2 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
- \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11
+ \tuplet 3/2 { a,8 e' a b a e f, f' a d a f } | % m. 11
}
\score {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches, really-cool, scheme-language"
(make-event-chord
(list
(make-music 'NoteEvent
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch
(quotient idx 7)
(remainder idx 7)
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "automatic-notation, really-cool, scheme-language"
(lambda (parser)
(let* ((music (make-music 'EventChord
'elements (list (make-music 'NoteEvent
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch (ly:make-pitch 0 pitch 0)))))
(score (scorify-music music parser))
(layout (ly:output-def-clone $defaultlayout))
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
% set up grids
\consists "Grid_point_engraver"
% set the grid interval to one quarter note
- gridInterval = #(ly:make-moment 1 4)
+ gridInterval = #(ly:make-moment 1/4)
}
\context {
\Score
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 8)
+ gridInterval = #(ly:make-moment 1/8)
% set line length and positioning:
% two staff spaces above center line on hidden staff
% to four spaces below center line on visible staff
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, percussion, real-music, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
+%% Note: this file works from version 2.17.6
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
\version "2.17.6"
\header {
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "keyboards, real-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "real-music, staff-notation"
\relative c'' {
\time 4/8
- \times 2/3 { c8 d e } \times 2/3 { c d e }
- \times 2/3 { c8 d e } \times 2/3 { c d e }
+ \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
+ \tuplet 3/2 { c8 d e } \tuplet 3/2 { c d e }
g8 a g a
g8 a g a
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "connecting-notes, contemporary-notation, expressive-marks, fretted-strings, keyboards, specific-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, text, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, really-cool, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "connecting-notes, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, repeats, staff-notation, workaround"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation, contexts-and-engravers, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, rhythms, version-specific"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "really-simple, rhythms"
% ...to cover all items up to the next note
\set tupletFullLengthNote = ##t
\time 2/4
- \times 2/3 { c4 c c }
+ \tuplet 3/2 { c4 c c }
% ...or to cover just whitespace
\set tupletFullLengthNote = ##f
\time 4/4
- \times 4/5 { c4 c1 }
+ \tuplet 5/4 { c4 c1 }
\time 3/4
c2.
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
Markups attached to a multi-measure rest will be centered above or
below it. Long markups attached to multi-measure rests do not cause
the measure to expand. To expand a multi-measure rest to fit the
-markup, use a spacer rest with an attached markup before the
+markup, use an empty chord with an attached markup before the
multi-measure rest.
-Note that the spacer rest causes a bar line to be inserted. Text
-attached to a spacer rest in this way is left-aligned to the position
-where the note would be placed in the measure, but if the measure
-length is determined by the length of the text, the text will appear to
-be centered.
+Text attached to a spacer rest in this way is left-aligned to the
+position where the note would be placed in the measure, but if the
+measure length is determined by the length of the text, the text will
+appear to be centered.
"
doctitle = "Multi-measure rest markup"
} % begin verbatim
-
\relative c' {
\compressFullBarRests
\textLengthOn
- s1*0^\markup { [MAJOR GENERAL] }
+ <>^\markup { [MAJOR GENERAL] }
R1*19
- s1*0_\markup { \italic { Cue: ... it is yours } }
- s1*0^\markup { A }
+ <>_\markup { \italic { Cue: ... it is yours } }
+ <>^\markup { A }
R1*30^\markup { [MABEL] }
\textLengthOff
c4^\markup { CHORUS } d f c
--- /dev/null
+\version "2.17.11"
+
+\header {
+ lsrtags = "rhythms"
+
+ texidoc = "
+By default, only the numerator of the tuplet number is printed over the
+tuplet bracket. Alternatively, num:den of the tuplet number may
+be printed, or the tuplet number may be suppressed altogether.
+
+"
+ doctitle = "Changing the tuplet number"
+}
+
+
+\relative c'' {
+ \tuplet 3/2 { c8 c c }
+ \tuplet 3/2 { c8 c c }
+ \override TupletNumber.text = #tuplet-number::calc-fraction-text
+ \tuplet 3/2 { c8 c c }
+ \override TupletNumber.stencil = ##f
+ \tuplet 3/2 { c8 c c }
+}
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
\new Staff {
\scaleDurations 8/5 {
\time 6/8
- \set Timing.measureLength = #(ly:make-moment 6 5)
+ \set Timing.measureLength = #(ly:make-moment 6/5)
b8 b b b b b
\time 2/4
- \set Timing.measureLength = #(ly:make-moment 4 5)
+ \set Timing.measureLength = #(ly:make-moment 4/5)
b4 b
}
}
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "pitches, real-music, really-cool, scheme-language"
rhythm =
#(define-music-function (parser location p) (ly:pitch?)
"Make the rhythm in Mars (the Planets) at the given pitch"
- #{ \times 2/3 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+ #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
\new Staff {
\time 5/4
--- /dev/null
+\version "2.17.11"
+
+\header {
+ lsrtags = "rhythms, syntax-and-expressions"
+
+ texidoc = "
+The property @code{tupletSpannerDuration} sets how long each of the
+tuplets contained within the brackets after @code{\\tuplet} should last.
+Many consecutive tuplets can then be placed within a single
+@code{\\tuplet} expression, thus saving typing.
+
+There are several ways to set @code{tupletSpannerDuration}. The command
+@code{\\tupletSpan} sets it to a given duration, and clears it when
+instead of a duration @code{\\default} is specified. Another way is
+to use an optional argument with @code{\\tuplet}.
+"
+ doctitle = "Entering several tuplets using only one \\tuplet command"
+}
+
+
+\relative c' {
+ \time 2/4
+ \tupletSpan 4
+ \tuplet 3/2 { c8^"\\tupletSpan 4" c c c c c }
+ \tupletSpan \default
+ \tuplet 3/2 { c8^"\\tupletSpan \\default" c c c c c }
+ \tuplet 3/2 4 { c8^"\\tuplet 3/2 4 {...}" c c c c c }
+}
% on melodies from Bellini's "Norma" %
%*****************************************************************%
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
R1 % m. 5
e'4^\benmarcato e8. d16-4
- d4-4 \times 2/3 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
+ d4-4 \tuplet 3/2 { \sfou \FO #'-0.3 #'0.6 <c-2>4 b8 } | % end of m. 6
\FO #'-0.3 #'0.3
- <a-3>4 \times 2/3 { c4 b8 } a4 e'8. e16 | % m. 7
+ <a-3>4 \tuplet 3/2 { c4 b8 } a4 e'8. e16 | % m. 7
\FO #'-0.3 #'0.3
- <g-4>4 \times 2/3 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4 % beg of m. 8
- \times 2/3 { \sfou <d-4>4 c8 } | % end of m. 8
+ <g-4>4 \tuplet 3/2 { \sfol \FO #'0.3 #'0.0 <f-1>4 e8 } e4 % beg of m. 8
+ \tuplet 3/2 { \sfou <d-4>4 c8 } | % end of m. 8
- b4 \times 2/3 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
+ b4 \tuplet 3/2 { d4-4 c8 } \sfou \FO #'-1.7 #'-1.5 <b-0>4 e | % end of m. 9
- e4 e8. d16-4 d4 \times 2/3 { c4 b8 } | % m. 10
+ e4 e8. d16-4 d4 \tuplet 3/2 { c4 b8 } | % m. 10
- \times 2/3 { a4 a8 b4 c8 } % beg of m. 11
+ \tuplet 3/2 { a4 a8 b4 c8 } % beg of m. 11
\sfou \FO #'-0.3 #'0.3
- <d-4>4^\< \times 2/3 { e4 <d f>8\! } | % end of m. 11
+ <d-4>4^\< \tuplet 3/2 { e4 <d f>8\! } | % end of m. 11
}
bass = \relative c {
%% new section starts here in A minor
\set Score.beamExceptions = #'()
\once \override TextScript.staff-padding = #1.7
- \times 2/3 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
+ \tuplet 3/2 { a8\p^\andantino e' a c a e a, e' a c a e } | % m. 5
- \times 2/3 { a,8\pdolce e' a c a e } % beg m. 6
- \times 2/3 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
+ \tuplet 3/2 { a,8\pdolce e' a c a e } % beg m. 6
+ \tuplet 3/2 { e,8 \sfou <e'-3> <gis-1> c gis e } | % end m. 6
- \times 2/3 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
+ \tuplet 3/2 { a,8 <e'-2> a c e, b' a, e' a c a e } | % m. 7
- \times 2/3 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
+ \tuplet 3/2 { f,8 f' a \sfol \FO #'0.3 #'-0.5 <d-4> a f fis, d' a' d a d, } | % m. 8
- \times 2/3 { <g,-3>8 d' g d' g, d % beg m. 9
+ \tuplet 3/2 { <g,-3>8 d' g d' g, d % beg m. 9
\sfod \FO #'0.0 #'-2.0 <gis,-4> \sfou <e'-2> <gis-1> b gis e } | % end m. 9
- \times 2/3 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
+ \tuplet 3/2 { a,8 e' a c a e e, e' gis c gis e } | % m. 10
- \times 2/3 { a,8 e' a b a e f, f' a d a f } | % m. 11
+ \tuplet 3/2 { a,8 e' a b a e f, f' a d a f } | % m. 11
}
\score {
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "template, real-music, specific-notation"
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
+ gridInterval = #(ly:make-moment 4/4) % 4/4 - tact. How many beats per bar
% The following line has to be adjusted O-F-T-E-N.
\override GridPoint.Y-extent = #'(-2 . -21)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
\relative c'' {
\once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-denominator-text 7)
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::non-default-tuplet-fraction-text 12 7)
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
(tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-denominator-text "4")
- \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-fraction-text "4")
- \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text =
#(tuplet-number::fraction-with-notes "4." "8")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text =
#(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, scheme-language, text, titles"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "spacing"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, version-specific"
}
\relative c'' {
a8
- \repeat unfold 5 { \times 2/3 { c[ b a] } }
+ \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
% Insert a manual line break within a tuplet
- \times 2/3 { c[ b \bar "" \break a] }
- \repeat unfold 5 { \times 2/3 { c[ b a] } }
+ \tuplet 3/2 { c[ b \bar "" \break a] }
+ \repeat unfold 5 { \tuplet 3/2 { c[ b a] } }
c8
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "breaks, repeats, symbols-and-glyphs, workaround"
% ==================
% Move text to the desired position
% \once \override TextScript.extra-offset = #'( 2 . -3.5 )
- % | s1*0^\markup { D.S. al Coda } }
+ % | <>^\markup { D.S. al Coda } }
% text center-aligned
% ====================
% Move text to the desired position
% \once \override TextScript.extra-offset = #'( 6 . -5.0 )
- % | s1*0^\markup { \center-column { D.S. "al Coda" } }
+ % | <>^\markup { \center-column { D.S. "al Coda" } }
% text and symbols center-aligned
% ===============================
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
\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)
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
\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)
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \override Score.RehearsalMark.break-visibility = #'#(#t #t #t)
\override Score.RehearsalMark.direction = #DOWN
\override Score.RehearsalMark.self-alignment-X = #RIGHT
% due to issue 2362 the following line is commented
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "text"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, percussion, real-music, really-cool, rhythms"
\remove "Bar_number_engraver"
\override SpacingSpanner.uniform-stretching = ##t
\override SpacingSpanner.strict-note-spacing = ##t
- proportionalNotationDuration = #(ly:make-moment 1 64)
+ proportionalNotationDuration = #(ly:make-moment 1/64)
}
\context {
\Staff
\bar "|"
\time 2/4
\tupletUp
- \times 2/3 { ees''4 r4 d''4 ~ }
+ \tuplet 3/2 { ees''4 r4 d''4 ~ }
\bar "|"
\time 3/8
\tupletUp
- \times 3/4 { d''4 r4 }
+ \tuplet 4/3 { d''4 r4 }
\bar "|"
\time 2/4
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "spacing, tweaks-and-overrides"
\relative c'' <<
\override Score.SpacingSpanner.strict-note-spacing = ##t
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4
c2 \grace { c16[ c16] } c2
}
\new Staff {
- c2 \times 2/3 { c8 \clef bass cis,, c } c4
+ c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
c1
}
>>
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "staff-notation, text, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "staff-notation"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "winds"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "breaks, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation, rhythms, symbols-and-glyphs, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
\context {
\Score
\override SpacingSpanner.base-shortest-duration =
- #(ly:make-moment 1 40)
+ #(ly:make-moment 1/40)
%\override SpacingSpanner.strict-grace-spacing = ##t
}
}
adding-extra-fingering-with-scheme.ly
+adding-links-to-objects.ly
adding-the-current-date-to-a-score.ly
center-text-below-hairpin-dynamics.ly
changing--flageolet-mark-size.ly
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.17.6
-\version "2.17.6"
+%% Note: this file works from version 2.17.11
+\version "2.17.11"
\header {
lsrtags = "template, real-music, specific-notation"
\context {
\Staff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 4 4) % 4/4 - tact. How many beats per bar
+ gridInterval = #(ly:make-moment 4/4) % 4/4 - tact. How many beats per bar
% The following line has to be adjusted O-F-T-E-N.
\override GridPoint.Y-extent = #'(-2 . -21)
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
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 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d''] }
\\
{ s4 \autoBeamOff d''8.. f''32 }
\\
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "pitches, tweaks-and-overrides"
\new Staff {
\override Score.BreakAlignment.break-align-orders =
- ##((left-edge ambitus breathing-sign clef staff-bar
+ #'#((left-edge ambitus breathing-sign clef staff-bar
key-cancellation key-signature time-signature custos)
(left-edge ambitus breathing-sign clef key-cancellation
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "repeats"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "repeats"
\relative c'' {
\time 3/4
c4 c c
- \set Score.voltaSpannerDuration = #(ly:make-moment 3 4)
+ \set Score.voltaSpannerDuration = #(ly:make-moment 3/4)
\repeat volta 5 { d4 d d }
\alternative {
{
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
\context {
\Score
\override SpacingSpanner.base-shortest-duration =
- #(ly:make-moment 1 18)
+ #(ly:make-moment 1/18)
\override NonMusicalPaperColumn.line-break-system-details =
#'((alignment-distances . (12)))
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "fretted-strings"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contemporary-notation, rhythms"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.16.0"
+\version "2.17.11"
\header {
lsrtags = "rhythms"
c32[ c c c c c c c]
% Set beam sub-group length to an eighth note
- \set baseMoment = #(ly:make-moment 1 8)
+ \set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = #'(2 2 2 2)
c32[ c c c c c c c]
% Set beam sub-group length to a sixteenth note
- \set baseMoment = #(ly:make-moment 1 16)
+ \set baseMoment = #(ly:make-moment 1/16)
\set beatStructure = #'(4 4 4 4)
c32[ c c c c c c c]
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "paper-and-layout"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
\context {
\Score
\override SpacingSpanner.base-shortest-duration =
- #(ly:make-moment 1 20)
+ #(ly:make-moment 1/20)
}
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "ancient-notation, specific-notation, tweaks-and-overrides, workaround"
;; for historical reasons
(n (ly:pitch-notename p)))
(cond
- ((and (> a 1) (or (eq? n 6) (eq? n 2)))
+ ((and (> a 1) (or (= n 6) (= n 2)))
(set! a (- a 2))
(set! n (+ n 1)))
- ((and (< a -1) (or (eq? n 0) (eq? n 3)))
+ ((and (< a -1) (or (= n 0) (= n 3)))
(set! a (+ a 2))
(set! n (- n 1))))
(cond
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
+adding-links-to-objects.ly
adding-timing-marks-to-long-glissandi.ly
adjusting-grace-note-spacing.ly
altering-the-length-of-beamed-stems.ly
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
\time 4/4
\stemUp
\tupletDown
- \times 2/3 { d4 ^\markup \colmark { \quatre \db \accel } d d }
- \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d }
+ \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \accel } d d }
+ \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d }
%% Measure 5
\time 5/4
- \tupletbp \times 2/3 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d }
- \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db \sulp } d _\open d }
- \tupletbp \times 2/3 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d }
+ \tupletbp \tuplet 3/2 { d8 \mf \< ^\markup \colmark { \quatre \db \norm } d _\open d }
+ \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db \sulp } d _\open d }
+ \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { " " \db \norm } d _\open d d d _\open d }
d2 \ff ^\markup \colmark { " " \pvib } \>
%% Measure 6
\time 5/8
- \once \override Beam.grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2 3)
+ \once \override Beam.grow-direction = #RIGHT % \featherDurations #(ly:make-moment 2/3)
{ d16 \staccato
[ d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato d \staccato]
}
%% Measure 7
\time 7/4
- \tupletbp \times 2/3 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d }
- \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db } d _\open d }
- \tupletbp \times 2/3 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d }
- \times 2/3 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d }
- \times 2/3 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ }
+ \tupletbp \tuplet 3/2 { d16 ^\markup \colmark { \quatre } d _\open d d d _\open d }
+ \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db } d _\open d }
+ \tupletbp \tuplet 3/2 { d8 ^\markup \colmark { " " \db " " \sulp } d _\open d }
+ \tuplet 3/2 { d4 ^\markup \colmark { \quatre \db \ritar \norm } d d }
+ \tuplet 3/2 { d4 ^\markup \colmark { " " \db " " \sulp } d d \ppp ~ }
%% Measure 8
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, really-cool, scheme-language, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, tweaks-and-overrides"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "editorial-annotations, expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "spacing, tweaks-and-overrides, workaround"
This way, every element will be vertically aligned, thus producing a
more pleasing output.
-The same idea is used to align the text scripts along their baseline.
+The same idea, together with \\textLengthOn, is used to align the text
+scripts along their baseline.
"
doctitle = "Vertically aligned dynamics and textscripts"
} % begin verbatim
-
music = \relative c' {
a'2\p b\f
e4\p f\f\> g, b\p
\break
\override DynamicLineSpanner.staff-padding = #2.0
\override DynamicLineSpanner.Y-extent = #'(-1.5 . 1.5)
+ \textLengthOn
\override TextScript.Y-extent = #'(-1.5 . 1.5)
\music
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "expressive-marks"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "spacing, tweaks-and-overrides, vocal-music"
\override StaffSymbol.staff-space = #(magstep -2)
\remove "Time_signature_engraver"
} {
- \times 4/6 {
+ \tuplet 6/4 {
\override TextScript.padding = #3
c8[^"ossia above" d e d e f]
}
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "automatic-notation, keyboards, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "contexts-and-engravers, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "really-simple, template, vocal-music"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
%% and then run scripts/auxiliar/makelsr.py
%%
%% This file is in the public domain.
-\version "2.17.6"
+\version "2.17.11"
\header {
lsrtags = "headword"
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.16.0"
+@c \version "2.17.11"
@c Note: keep this node named so that `info lilypond-book' brings you here.
@node lilypond-book
\begin{lilypond}
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
\end{lilypond}
@lilypond
\relative c' {
- c2 e2 \times 2/3 { f8 a b } a2 e4
+ c2 e2 \tuplet 3/2 { f8 a b } a2 e4
}
@end lilypond
@itemize
@item
-@uref{http://www.canorus.org,Canorus}, a score editor, can also export to
-LilyPond, but is still beta-software. Testers are welcome, though.
+@uref{http://www.jezra.net/projects/bwwtolily,bwwtolily} attempts to
+convert a @code{.bww} or @code{.bmw} file to LilyPond. While not all of
+the embellishments may get converted properly (this is especially true
+with piobaireachd), the program will list them.
+
+@item
+@uref{http://www.canorus.org,Canorus}, a score editor, can also export
+to LilyPond, but is still beta-software. Testers are welcome, though.
@item
@uref{http://enc2ly.sourceforge.net/en/,Enc2ly} is a GNU/Linux program
a LilyPond one.
@item
-@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} is a Go tool that converts
-@uref{http://www.gvox.com/,Encore} files to LilyPond. It was created using
-Felipe Castro's research and reverse engineering by tweaking existing .enc files
-and loading them using the 4.55 demo version.
+@uref{https://github.com/hanwen/go-enc2ly,go-enc2ly} is a Go tool that
+converts @uref{http://www.gvox.com/,Encore} files to LilyPond. It was
+created using Felipe Castro's research and reverse engineering by
+tweaking existing .enc files and loading them using the 4.55 demo
+version.
@item
-@uref{http://www.musescore.org,MuseScore}, a score editor, has incomplete
-LilyPond export but is being actively developed.
+@uref{http://www.musescore.org,MuseScore}, a score editor, has
+incomplete LilyPond export but is being actively developed.
@item
-@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}, a
-score editor based on the @uref{http://www.cairographics.org,Cairo} library,
-has experimental support for exporting to LilyPond.
+@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd},
+a score editor based on the @uref{http://www.cairographics.org,Cairo}
+library, it has experimental support for exporting to LilyPond.
@item
-@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY} is
-a C# program which converts a
-@c @uref{http://www.noteworthysoftware.com/,NoteWorthy}
-NoteWorthy composer song into LilyPond.
+@uref{http://www.holmessoft.co.uk/homepage/software/NWC2LY/index.htm,NW2LY}
+is a C# program which converts a NoteWorthy composer song into LilyPond.
@item
-@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple} is
-a program that helps create scores and parts, including a mode for mixing
-different musical works together in a single score or part.
+@uref{https://github.com/ciconia/ripple/blob/master/README.markdown,Ripple}
+is a program that helps create scores and parts, including a mode for
+mixing different musical works together in a single score or part.
@item
-@uref{http://www.rosegardenmusic.com,Rosegarden}, an audio and MIDI sequencer,
-which also has a score editor for single-staff editing.
+@uref{http://www.rosegardenmusic.com,Rosegarden}, an audio and MIDI
+sequencer, which also has a score editor for single-staff editing.
@item
-@uref{https://launchpad.net/rumor/,Rumor}, a realtime monophonic MIDI to
-LilyPond converter.
+@uref{https://launchpad.net/rumor/,Rumor}, a realtime monophonic
+MIDI-to-LilyPond converter.
@item
-@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, a multitrack tablature editor
-and player, includes a score viewer and can export to LilyPond.
+@uref{http://www.tuxguitar.com.ar/,TuxGuitar}, a multitrack tablature
+editor and player, includes a score viewer and can export to LilyPond.
@end itemize
@item
@uref{http://www.projectabjad.org/,Abjad}, a
-@uref{http://www.python.org/,Python} API for Formalized Score
-Control designed to help composers build up complex pieces of
-LilyPond notation in an iterative and incremental way.
+@uref{http://www.python.org/,Python} API for Formalized Score Control
+designed to help composers build up complex pieces of LilyPond notation
+in an iterative and incremental way.
@item
-@uref{http://common-lisp.net/project/fomus/,FOMUS}, a LISP library
-to generate music notation from computer music software
-environments.
+@uref{http://common-lisp.net/project/fomus/,FOMUS}, (FOrmat MUSic) is a
+music notation tool for computer music composers. It is written in the
+Lisp programming language, and has been tested in a variety of
+interpreters. A C++ port is also available.
@item
-@uref{http://strasheela.sourceforge.net,Strasheela}, an
-environment built on top of the
+@uref{http://strasheela.sourceforge.net/strasheela/doc/index.html,Strasheela},
+an environment built on top of the
@uref{http://www.mozart-oz.org/, Mozart/Oz} constraint programming
language.
@item
@uref{http://lilykde.googlecode.com/,LilyKDE} has been replaced by
-@uref{http://www.frescobaldi.org/,Frescobaldi}, and exists as
-LilyKDE3 for KDE 3.5 and lilypond-KDE4 for KDE 4.1 only.
+@uref{http://www.frescobaldi.org/,Frescobaldi}, and exists as LilyKDE3
+for KDE 3.5 and lilypond-KDE4 for KDE 4.1 only.
@item
@uref{http://noteedit.berlios.de,NoteEdit}, which imported
-@uref{http://www.musicxml.com/xml.html,MusicXML}, has been forked
+@uref{http://www.makemusic.com/musicxml,MusicXML}, has been forked
into
@uref{http://vsr.informatik.tu-chemnitz.de/staff/jan/nted/nted.xhtml,NtEd}
and @uref{http://canorus.org,Canorus}.
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.17.10 released! @emph{January 12 2013}
+@subsubheading LilyPond 2.17.12 released! @emph{February 8, 2013}
-We are happy to announce the release of LilyPond 2.17.10. This
+We are happy to announce the release of LilyPond 2.17.12. This
release contains the usual number of bugfixes and enhancements, and contains
some work in progress. You will have access to the very latest features, but
some may be incomplete, and you may encounter bugs and crashes. If you require
We are happy to announce the release of LilyPond 2.16.2. This release is mainly
to correct a problem with lilypond-book running on Windows. We recommend that
only people requiring this functionality upgrade to this version.
-@newsEnd
-
-@newsItem
-@subsubheading LilyPond 2.17.9 released! @emph{December 15, 2012}
-
-We are happy to announce the release of LilyPond 2.17.9. This
-release contains the usual number of bugfixes and enhancements, and contains
-some work in progress. You will have access to the very latest features, but
-some may be incomplete, and you may encounter bugs and crashes. If you require
-a stable version of Lilypond, we recommend using the 2.16 version.
@newsEnd
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.17.11 released! @emph{January 26, 2013}
+
+We are happy to announce the release of LilyPond 2.17.11. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.10 released! @emph{January 12 2013}
+
+We are happy to announce the release of LilyPond 2.17.10. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.17.9 released! @emph{December 15, 2012}
+
+We are happy to announce the release of LilyPond 2.17.9. This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress. You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes. If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
@newsItem
@subsubheading LilyPond 2.17.8 released! @emph{December 1, 2012}
<tweets>
<tweet>
- Nov 6, at Xinghai Conservatory of Music in Guangzhou, China, a premiere of
- James Harkins's new piece for sheng and electronics, typeset in
- lilypond.
+ <a href="http://www.contemporary-music.de">Stefan Thomas</a>'s "ab und zu" for accordion and 5 players will be performed
+ on February 27th in the "<a
+ href="http://www.tonhalle.de/suchausgabe_datum/%26datum=2013/02/27">
+ Tonhalle</a>" in Düsseldorf, Germany.
</tweet>
</tweets>
@headitem Infrequent
@item
-@docLinkSplit{Web,web,@manualDevelWebSplit}
+@docLinkSplit{Web,web,@manualDevelWebSplit-zh}
@tab
-@docLinkBig{Web,web,@manualDevelWebBig}
+@docLinkBig{Web,web,@manualDevelWebBig-zh}
@tab
-@docLinkPdf{Web,web,@manualDevelWebPdf}
+@docLinkPdf{Web,web,@manualDevelWebPdf-zh}
@item
@docLinkSplit{Changes,changes,@manualDevelChangesSplit}
* It does not apply to ly/articulate.ly, which is only licensed
under the GPL version 3 (not any later versions).
- * If you create a document which uses fonts included in LilyPond,
- and embed this font or unaltered portions of this font into the
- document, then this font does not by itself cause the resulting
- document to be covered by the GNU General Public License. This
- exception does not however invalidate any other reasons why the
- document might be covered by the GNU General Public License.
- If you modify one or more of the fonts, you may extend this
- exception to your version of the fonts but you are not obliged
- to do so. If you do not wish to do so, delete this exception
- statement from your version.
+ * The files under mf/ form a font, and this font is dual-licensed
+ under the GPL+Font exception and the SIL Open Font License (OFL).
+ A copy of the OFL is in the file LICENSE.OFL.
+
+ The font exception for the GPL stipulates the following exception:
+
+ If you create a document which uses fonts included in LilyPond,
+ and embed this font or unaltered portions of this font into the
+ document, then this font does not by itself cause the resulting
+ document to be covered by the GNU General Public License. This
+ exception does not however invalidate any other reasons why the
+ document might be covered by the GNU General Public License.
+ If you modify one or more of the fonts, you may extend this
+ exception to your version of the fonts but you are not obliged
+ to do so. If you do not wish to do so, delete this exception
+ statement from your version.
+
--- /dev/null
+
+Copyright (c) 1996--2013, The LilyPond authors (lilypond.org)
+with Reserved Font Name "Emmentaler" and "Feta".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=17
-PATCH_LEVEL=11
+PATCH_LEVEL=13
MY_PATCH_LEVEL=
VERSION_STABLE=2.16.2
-VERSION_DEVEL=2.17.10
+VERSION_DEVEL=2.17.12
dnl aclocal.m4 -*-shell-script-*-
-dnl StepMake subroutines for configure.in
+dnl StepMake subroutines for configure.ac
### mostly interal macros
fi
])
-### Macros to build configure.in
+### Macros to build configure.ac
AC_DEFUN(STEPMAKE_BIBTEX2HTML, [
--noconf*) NOCONFIGURE=true;;
esac
-for i in $srcdir/configure.in #`find $srcdir -name configure.in -print`
+for i in $srcdir/configure.ac #`find $srcdir -name configure.ac -print`
do
dir=`dirname $i`
echo processing $dir
--- /dev/null
+dnl configure.ac -*-shell-script-*-
+dnl Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.60)
+
+# Bootstrap the init process.
+AC_INIT
+
+# Bootstrap StepMake configure
+AC_CONFIG_AUX_DIR([config])
+
+STEPMAKE_INIT
+
+# List a file that identifies your package.
+AC_CONFIG_SRCDIR([lily/main.cc])
+
+# Move to aclocal.m4?
+AC_CONFIG_HEADERS([$CONFIGFILE.hh:config.hh.in])
+
+# Uncomment the configuration options your package needs.
+
+DOCUMENTATION=yes
+AC_ARG_ENABLE(documentation,
+ [AS_HELP_STRING([--enable-documentation],
+ [build Documentation. Default: on])],
+ [DOCUMENTATION=$enableval])
+AC_SUBST(DOCUMENTATION)
+
+AC_ARG_WITH(ncsb-dir,
+ [AS_HELP_STRING([--with-ncsb-dir=DIR],
+ [location of Century Schoolbook fonts.])],
+ [NCSB_DIR=$withval],
+ [NCSB_DIR=""])
+
+reloc_b=no
+AC_ARG_ENABLE(relocation,
+ [AS_HELP_STRING([--enable-relocation],
+ [compile with dynamic relocation. Default: off])],
+ [reloc_b=$enableval])
+
+rpath_b=no
+AC_ARG_ENABLE(rpath,
+ [AS_HELP_STRING([--enable-rpath],
+ [hardcode runtime library path. Default: off])],
+ [rpath_b=$enableval])
+
+LINK_GXX_STATICALLY=no
+AC_ARG_ENABLE(static-gxx,
+ [AS_HELP_STRING([--enable-static-gxx],
+ [link libstdc++.a statically. Default: off])],
+ [LINK_GXX_STATICALLY=$enableval])
+AC_SUBST(LINK_GXX_STATICALLY)
+
+# must come before any header checks
+STEPMAKE_COMPILE
+
+AC_CHECK_PROG(FCLIST, fc-list, fc-list)
+AC_MSG_CHECKING([New Century Schoolbook PFB files])
+AC_SUBST(NCSB_SOURCE_FILES)
+AC_SUBST(NCSB_DIR)
+UNCHECKED_NCSB_SOURCE_FILES=""
+if test "$NCSB_DIR" != "" ; then
+ for f in c059013l c059016l c059033l c059036l; do
+ if test ! -f "$NCSB_DIR/$f.pfb"; then
+ STEPMAKE_WARN($NCSB_DIR does not contain $f.pfb.)
+ else
+ UNCHECKED_NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $UNCHECKED_NCSB_SOURCE_FILES"
+ fi
+ done
+else
+ if test "$FCLIST" != ""; then
+ for style in Roman Italic "Bold Italic" Bold; do
+ NCSB_FILE=`$FCLIST "Century Schoolbook L:style=$style:foundry=urw:fontformat=Type 1" file \
+ | head -n 1`
+ NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
+ NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
+ UNCHECKED_NCSB_SOURCE_FILES="$NCSB_FILE $UNCHECKED_NCSB_SOURCE_FILES"
+ done
+ NCSB_DIR=`AS_DIRNAME($NCSB_FILE)`
+ else
+ AC_MSG_RESULT(not found)
+ echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
+ echo "or use --with-ncsb-dir"
+ STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
+ fi
+fi
+NCSB_SOURCE_FILES=""
+for f in $UNCHECKED_NCSB_SOURCE_FILES; do
+ if test "`grep Cyrillic "$f"`" = ""; then
+ STEPMAKE_WARN($f does not have Cyrillic characters.)
+ STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
+ else
+ NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
+ fi
+done
+AC_MSG_RESULT($NCSB_SOURCE_FILES)
+
+AC_LANG([C++])
+
+STEPMAKE_PYTHON(REQUIRED, 2.4)
+# this checks if we have GNU C by compiling a program with
+# __GNUC__, but that macro now unofficially means "the compiler
+# supports the GNU C extensions" -- the intel C compiler and clang
+# both support __GNUC__!
+STEPMAKE_GCC_OR_CLANG(REQUIRED, 3.4)
+
+STEPMAKE_CXX(REQUIRED)
+STEPMAKE_GXX_OR_CLANG(REQUIRED, 3.4)
+STEPMAKE_GXXCODEGENBUG
+STEPMAKE_CXXTEMPLATE
+STEPMAKE_STL_DATA_METHOD
+STEPMAKE_LIB(REQUIRED)
+STEPMAKE_DLOPEN
+# Do not use bison 1.50 and 1.75.
+# 1.29 is required fr %locations, but I'm not sure it's enough --ns
+STEPMAKE_BISON(OPTIONAL, 1.29)
+STEPMAKE_FLEX(REQUIRED)
+STEPMAKE_FLEXLEXER(REQUIRED)
+STEPMAKE_FLEXLEXER_LOCATION
+STEPMAKE_LOCALE
+STEPMAKE_GETTEXT
+STEPMAKE_MSGFMT(REQUIRED)
+STEPMAKE_TEXMF(REQUIRED)
+STEPMAKE_TEXMF_DIRS
+STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2)
+
+# check for 3 typedefs added in Guile 1.9
+save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS"
+AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn],
+ [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [],
+ [#include <libguile.h>])
+AC_CHECK_TYPES([scm_t_subr],
+ [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [],
+ [#include <libguile.h>])
+CXXFLAGS="$save_CXXFLAGS"
+
+## Check for usable cxxabi
+save_LIBS="$LIBS"
+LIBS="$LIBS $CXXABI_LIBS"
+AC_MSG_CHECKING(for usable C++ demangler)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
+ [abi::__cxa_demangle ("", 0, 0, 0)])],
+ [AC_DEFINE(HAVE_CXA_DEMANGLE)
+ AC_MSG_RESULT(yes)],[
+ LIBS="$LIBS -lsupc++"
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
+ [abi::__cxa_demangle ("", 0, 0, 0)])],
+ [AC_DEFINE(HAVE_CXA_DEMANGLE)
+ AC_MSG_RESULT([yes, using -lsupc++])
+ CXXABI_LIBS="$CXXABI_LIBS -lsupc++"],
+ [AC_MSG_RESULT([no, use c++filt -t for manual demangling])])])
+LIBS="$save_LIBS"
+AC_SUBST(CXXABI_LIBS)
+
+## check rational bugfix.
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
+AC_MSG_CHECKING(GUILE rational bugfix)
+AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libguile.h>
+#ifdef SCM_FRACTION_REDUCED_BIT
+#error
+#endif
+]])],[AC_MSG_RESULT(ok)],[REQUIRED="$REQUIRED GUILE-with-rational-bugfix"
+AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)])
+CPPFLAGS="$save_CPPFLAGS"
+
+
+STEPMAKE_PYTHON_DEVEL(REQUIRED)
+
+STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20110222)
+
+STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
+
+AC_CHECK_HEADERS([assert.h grp.h libio.h pwd.h sys/stat.h wchar.h fpu_control.h])
+AC_CHECK_HEADERS([sstream])
+AC_HEADER_STAT
+AC_FUNC_MEMCMP
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([chroot fopencookie gettext isinf memmem snprintf vsnprintf])
+
+STEPMAKE_PROGS(PKG_CONFIG, pkg-config, REQUIRED, 0.9.0)
+
+AC_MSG_CHECKING(whether to enable dynamic relocation)
+if test "$reloc_b" = "yes"; then
+ AC_DEFINE(ARGV0_RELOCATION)
+fi
+AC_MSG_RESULT($reloc_b)
+
+AC_MSG_CHECKING(for rpath linkage)
+if test "$rpath_b" = "yes"; then
+ LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib"
+elif test "$rpath_b" != "no"; then
+ LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b"
+fi
+AC_MSG_RESULT($rpath_b)
+
+HOST_ARCH=`$CC -dumpmachine`
+AC_SUBST(HOST_ARCH)
+
+STEPMAKE_PANGO_FT2(pangoft2, REQUIRED, 1.6.0)
+STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.4.0)
+STEPMAKE_FREETYPE2(freetype2, REQUIRED, 2.1.10)
+
+STEPMAKE_WINDOWS
+
+# guile executable for some scripts
+STEPMAKE_GUILE(OPTIONAL)
+
+# perl for help2man.
+STEPMAKE_PERL(OPTIONAL)
+
+## Optional tools for building documentation, website, extra fonts.
+if test "$DOCUMENTATION" = "yes"; then
+ DOCUMENTATION_REQUIRED=REQUIRED
+else
+ DOCUMENTATION_REQUIRED=OPTIONAL
+fi
+
+STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 8.60)
+
+STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
+STEPMAKE_PROGS(TEXI2HTML, texi2html, $DOCUMENTATION_REQUIRED, 1.82)
+STEPMAKE_PROGS(DBLATEX, dblatex, $DOCUMENTATION_REQUIRED, 0.1.4)
+STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFLATEX, pdflatex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
+AC_MSG_CHECKING(for epsf.tex)
+TEX_EPSF=`kpsewhich tex epsf`
+if test "$TEX_EPSF" = ""; then
+ AC_MSG_RESULT(not found)
+ STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,epsf.tex)
+else
+ AC_MSG_RESULT($TEX_EPSF)
+fi
+AC_MSG_CHECKING(for Cyrillic characters support in TeX)
+TEX_FIKPARM=`kpsewhich -format=mf fikparm`
+if test "$TEX_FIKPARM" = ""; then
+ AC_MSG_RESULT(not found)
+ STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
+['lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'])
+else
+ AC_MSG_RESULT(yes)
+fi
+STEPMAKE_PROGS(NETPBM, pngtopnm, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
+# this name avoids a conflict with ZIP in stepmake/aclocal.m4
+STEPMAKE_PROGS(ZIPDOC, zip, $DOCUMENTATION_REQUIRED)
+STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
+
+AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
+
+# must also have local.make if configure fails.
+touch local.make
+
+if test "$reloc_b$rpath_b" = "yesno"; then
+ STEPMAKE_WARN([Using --enable-relocation without --enable-rpath. LilyPond may have trouble finding libraries.])
+fi
+
+# Gather requirements and generate output.
+STEPMAKE_END
+
+test -n "$CONFIGURATION" && mc=" conf=$CONFIGURATION" || mc=""
+
+if make top-doc 1>/dev/null 2>&1; then
+ rm -f INSTALL.txt && ln Documentation/topdocs/out/INSTALL.txt .
+ rm -f README.txt && ln Documentation/topdocs/out/README.txt .
+fi
+
+cat <<EOF
+
+Type:
+ make$mc all to build LilyPond
+ make$mc install to install LilyPond
+ make$mc help to see all possible targets
+
+Edit local.make for local Makefile overrides.
+
+
+EOF
+++ /dev/null
-dnl configure.in -*-shell-script-*-
-dnl Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.60)
-
-# Bootstrap the init process.
-AC_INIT
-
-# Bootstrap StepMake configure
-AC_CONFIG_AUX_DIR([config])
-
-STEPMAKE_INIT
-
-# List a file that identifies your package.
-AC_CONFIG_SRCDIR([lily/main.cc])
-
-# Move to aclocal.m4?
-AC_CONFIG_HEADERS([$CONFIGFILE.hh:config.hh.in])
-
-# Uncomment the configuration options your package needs.
-
-DOCUMENTATION=yes
-AC_ARG_ENABLE(documentation,
- [AS_HELP_STRING([--enable-documentation],
- [build Documentation. Default: on])],
- [DOCUMENTATION=$enableval])
-AC_SUBST(DOCUMENTATION)
-
-AC_ARG_WITH(ncsb-dir,
- [AS_HELP_STRING([--with-ncsb-dir=DIR],
- [location of Century Schoolbook fonts.])],
- [NCSB_DIR=$withval],
- [NCSB_DIR=""])
-
-reloc_b=no
-AC_ARG_ENABLE(relocation,
- [AS_HELP_STRING([--enable-relocation],
- [compile with dynamic relocation. Default: off])],
- [reloc_b=$enableval])
-
-rpath_b=no
-AC_ARG_ENABLE(rpath,
- [AS_HELP_STRING([--enable-rpath],
- [hardcode runtime library path. Default: off])],
- [rpath_b=$enableval])
-
-LINK_GXX_STATICALLY=no
-AC_ARG_ENABLE(static-gxx,
- [AS_HELP_STRING([--enable-static-gxx],
- [link libstdc++.a statically. Default: off])],
- [LINK_GXX_STATICALLY=$enableval])
-AC_SUBST(LINK_GXX_STATICALLY)
-
-# must come before any header checks
-STEPMAKE_COMPILE
-
-AC_CHECK_PROG(FCLIST, fc-list, fc-list)
-AC_MSG_CHECKING([New Century Schoolbook PFB files])
-AC_SUBST(NCSB_SOURCE_FILES)
-AC_SUBST(NCSB_DIR)
-UNCHECKED_NCSB_SOURCE_FILES=""
-if test "$NCSB_DIR" != "" ; then
- for f in c059013l c059016l c059033l c059036l; do
- if test ! -f "$NCSB_DIR/$f.pfb"; then
- STEPMAKE_WARN($NCSB_DIR does not contain $f.pfb.)
- else
- UNCHECKED_NCSB_SOURCE_FILES="$NCSB_DIR/$f.pfb $UNCHECKED_NCSB_SOURCE_FILES"
- fi
- done
-else
- if test "$FCLIST" != ""; then
- for style in Roman Italic "Bold Italic" Bold; do
- NCSB_FILE=`$FCLIST "Century Schoolbook L:style=$style:foundry=urw:fontformat=Type 1" file \
- | head -n 1`
- NCSB_FILE=`echo $NCSB_FILE | sed 's/\(:.*\)$//g'`
- NCSB_FILE=`$PYTHON "$srcdir/scripts/auxiliar/readlink.py" $NCSB_FILE`
- UNCHECKED_NCSB_SOURCE_FILES="$NCSB_FILE $UNCHECKED_NCSB_SOURCE_FILES"
- done
- NCSB_DIR=`AS_DIRNAME($NCSB_FILE)`
- else
- AC_MSG_RESULT(not found)
- echo "Can't find Century Schoolbook files. Install FontConfig's fc-list,"
- echo "or use --with-ncsb-dir"
- STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
- fi
-fi
-NCSB_SOURCE_FILES=""
-for f in $UNCHECKED_NCSB_SOURCE_FILES; do
- if test "`grep Cyrillic "$f"`" = ""; then
- STEPMAKE_WARN($f does not have Cyrillic characters.)
- STEPMAKE_ADD_ENTRY(REQUIRED,International New Century Schoolbook fonts)
- else
- NCSB_SOURCE_FILES="$f $NCSB_SOURCE_FILES"
- fi
-done
-AC_MSG_RESULT($NCSB_SOURCE_FILES)
-
-AC_LANG([C++])
-
-STEPMAKE_PYTHON(REQUIRED, 2.4)
-# this checks if we have GNU C by compiling a program with
-# __GNUC__, but that macro now unofficially means "the compiler
-# supports the GNU C extensions" -- the intel C compiler and clang
-# both support __GNUC__!
-STEPMAKE_GCC_OR_CLANG(REQUIRED, 3.4)
-
-STEPMAKE_CXX(REQUIRED)
-STEPMAKE_GXX_OR_CLANG(REQUIRED, 3.4)
-STEPMAKE_GXXCODEGENBUG
-STEPMAKE_CXXTEMPLATE
-STEPMAKE_STL_DATA_METHOD
-STEPMAKE_LIB(REQUIRED)
-STEPMAKE_DLOPEN
-# Do not use bison 1.50 and 1.75.
-# 1.29 is required fr %locations, but I'm not sure it's enough --ns
-STEPMAKE_BISON(OPTIONAL, 1.29)
-STEPMAKE_FLEX(REQUIRED)
-STEPMAKE_FLEXLEXER(REQUIRED)
-STEPMAKE_FLEXLEXER_LOCATION
-STEPMAKE_LOCALE
-STEPMAKE_GETTEXT
-STEPMAKE_MSGFMT(REQUIRED)
-STEPMAKE_TEXMF(REQUIRED)
-STEPMAKE_TEXMF_DIRS
-STEPMAKE_GUILE_DEVEL(REQUIRED, 1.8.2)
-
-# check for 3 typedefs added in Guile 1.9
-save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS="$GUILE_CFLAGS $CXXFLAGS"
-AC_CHECK_TYPES([scm_t_hash_fold_fn, scm_t_hash_handle_fn],
- [AC_DEFINE(HAVE_GUILE_HASH_FUNC)], [],
- [#include <libguile.h>])
-AC_CHECK_TYPES([scm_t_subr],
- [AC_DEFINE(HAVE_GUILE_SUBR_TYPE)], [],
- [#include <libguile.h>])
-CXXFLAGS="$save_CXXFLAGS"
-
-## Check for usable cxxabi
-save_LIBS="$LIBS"
-LIBS="$LIBS $CXXABI_LIBS"
-AC_MSG_CHECKING(for usable C++ demangler)
-AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
- [abi::__cxa_demangle ("", 0, 0, 0)])],
- [AC_DEFINE(HAVE_CXA_DEMANGLE)
- AC_MSG_RESULT(yes)],[
- LIBS="$LIBS -lsupc++"
- AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <cxxabi.h>],
- [abi::__cxa_demangle ("", 0, 0, 0)])],
- [AC_DEFINE(HAVE_CXA_DEMANGLE)
- AC_MSG_RESULT([yes, using -lsupc++])
- CXXABI_LIBS="$CXXABI_LIBS -lsupc++"],
- [AC_MSG_RESULT([no, use c++filt -t for manual demangling])])])
-LIBS="$save_LIBS"
-AC_SUBST(CXXABI_LIBS)
-
-## check rational bugfix.
-save_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="$GUILE_CFLAGS $CPPFLAGS"
-AC_MSG_CHECKING(GUILE rational bugfix)
-AC_PREPROC_IFELSE([AC_LANG_SOURCE([[#include <libguile.h>
-#ifdef SCM_FRACTION_REDUCED_BIT
-#error
-#endif
-]])],[AC_MSG_RESULT(ok)],[REQUIRED="$REQUIRED GUILE-with-rational-bugfix"
-AC_MSG_RESULT(Must have patched GUILE rational support. See INSTALL.txt)])
-CPPFLAGS="$save_CPPFLAGS"
-
-
-STEPMAKE_PYTHON_DEVEL(REQUIRED)
-
-STEPMAKE_PATH_PROG(FONTFORGE, fontforge, REQUIRED, 20110222)
-
-STEPMAKE_PATH_PROG(T1ASM, t1asm, REQUIRED)
-
-AC_CHECK_HEADERS([assert.h grp.h libio.h pwd.h sys/stat.h wchar.h fpu_control.h])
-AC_CHECK_HEADERS([sstream])
-AC_HEADER_STAT
-AC_FUNC_MEMCMP
-AC_FUNC_VPRINTF
-AC_CHECK_FUNCS([chroot fopencookie gettext isinf memmem snprintf vsnprintf])
-
-STEPMAKE_PROGS(PKG_CONFIG, pkg-config, REQUIRED, 0.9.0)
-
-AC_MSG_CHECKING(whether to enable dynamic relocation)
-if test "$reloc_b" = "yes"; then
- AC_DEFINE(ARGV0_RELOCATION)
-fi
-AC_MSG_RESULT($reloc_b)
-
-AC_MSG_CHECKING(for rpath linkage)
-if test "$rpath_b" = "yes"; then
- LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,\\\$\$ORIGIN/../lib"
-elif test "$rpath_b" != "no"; then
- LDFLAGS="$LDFLAGS -Wl,-rpath -Wl,$rpath_b"
-fi
-AC_MSG_RESULT($rpath_b)
-
-HOST_ARCH=`$CC -dumpmachine`
-AC_SUBST(HOST_ARCH)
-
-STEPMAKE_PANGO_FT2(pangoft2, REQUIRED, 1.6.0)
-STEPMAKE_FONTCONFIG(fontconfig, REQUIRED, 2.4.0)
-STEPMAKE_FREETYPE2(freetype2, REQUIRED, 2.1.10)
-
-STEPMAKE_WINDOWS
-
-# guile executable for some scripts
-STEPMAKE_GUILE(OPTIONAL)
-
-# perl for help2man.
-STEPMAKE_PERL(OPTIONAL)
-
-## Optional tools for building documentation, website, extra fonts.
-if test "$DOCUMENTATION" = "yes"; then
- DOCUMENTATION_REQUIRED=REQUIRED
-else
- DOCUMENTATION_REQUIRED=OPTIONAL
-fi
-
-STEPMAKE_PATH_PROG(GHOSTSCRIPT, gs, $DOCUMENTATION_REQUIRED, 8.60)
-
-STEPMAKE_PROGS(MAKEINFO, makeinfo, REQUIRED, 4.11)
-STEPMAKE_PROGS(TEXI2HTML, texi2html, $DOCUMENTATION_REQUIRED, 1.82)
-STEPMAKE_PROGS(DBLATEX, dblatex, $DOCUMENTATION_REQUIRED, 0.1.4)
-STEPMAKE_PROGS(BIBTEX, bibtex, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(PDFLATEX, pdflatex, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(PDFTEX, pdfetex pdftex etex, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(TEXI2PDF, texi2pdf, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(TEXINDEX, texindex, $DOCUMENTATION_REQUIRED)
-AC_MSG_CHECKING(for epsf.tex)
-TEX_EPSF=`kpsewhich tex epsf`
-if test "$TEX_EPSF" = ""; then
- AC_MSG_RESULT(not found)
- STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,epsf.tex)
-else
- AC_MSG_RESULT($TEX_EPSF)
-fi
-AC_MSG_CHECKING(for Cyrillic characters support in TeX)
-TEX_FIKPARM=`kpsewhich -format=mf fikparm`
-if test "$TEX_FIKPARM" = ""; then
- AC_MSG_RESULT(not found)
- STEPMAKE_ADD_ENTRY($DOCUMENTATION_REQUIRED,
-['lh CTAN package (texlive-lang-cyrillic or texlive-texmf-fonts)'])
-else
- AC_MSG_RESULT(yes)
-fi
-STEPMAKE_PROGS(NETPBM, pngtopnm, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(IMAGEMAGICK, convert, $DOCUMENTATION_REQUIRED)
-# this name avoids a conflict with ZIP in stepmake/aclocal.m4
-STEPMAKE_PROGS(ZIPDOC, zip, $DOCUMENTATION_REQUIRED)
-STEPMAKE_PROGS(RSYNC, rsync, $DOCUMENTATION_REQUIRED)
-
-AC_DEFINE_UNQUOTED(FLOWER_VERSION, "${FULL_FLOWER_VERSION}")
-
-# must also have local.make if configure fails.
-touch local.make
-
-if test "$reloc_b$rpath_b" = "yesno"; then
- STEPMAKE_WARN([Using --enable-relocation without --enable-rpath. LilyPond may have trouble finding libraries.])
-fi
-
-# Gather requirements and generate output.
-STEPMAKE_END
-
-test -n "$CONFIGURATION" && mc=" conf=$CONFIGURATION" || mc=""
-
-if make top-doc 1>/dev/null 2>&1; then
- rm -f INSTALL.txt && ln Documentation/topdocs/out/INSTALL.txt .
- rm -f README.txt && ln Documentation/topdocs/out/README.txt .
-fi
-
-cat <<EOF
-
-Type:
- make$mc all to build LilyPond
- make$mc install to install LilyPond
- make$mc help to see all possible targets
-
-Edit local.make for local Makefile overrides.
-
-
-EOF
--- /dev/null
+\version "2.17.10"
+
+\header {
+ texidoc = "By setting @code{accidentalGrouping} to @code{'voice},
+LilyPond will horizontally stagger the accidentals of octaves
+in different voices as seen in this test's E-sharp.
+"
+}
+
+ \relative c''' {
+ << { <gis cis eis gis>1 } \\
+ { eis, } >>
+ \set Staff . accidentalGrouping = #'voice
+ << { <gis' cis eis gis>1 } \\
+ { eis, } >>
+}
anywhere in the vertical alignment. "
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
}
\new Staff {
\set Staff.alignAboveContext = #"3"
- \times 4/6 {
+ \tuplet 6/4 {
\override TextScript.padding = #3
c4^"this" d_"staff" e^"above" d_"last" e^"staff" f
}
\new Voice \with {
\consists "Ambitus_engraver"
\consists "Mensural_ligature_engraver"
+ \remove "Ligature_bracket_engraver"
} {
+ \cadenzaOn
\[ c'\longa c''\longa \]
}
}
-\version "2.16.0"
+\version "2.17.11"
\paper { ragged-right = ##t }
{
\time 2/4
b16 b b b
b16 b b b
\set subdivideBeams = ##t
- \set Score.baseMoment = #(ly:make-moment 1 8)
+ \set Score.baseMoment = #(ly:make-moment 1/8)
b16 b b b
b16 b b b
}
texidoc = "Automatic beaming is also done on tuplets."
}
-\version "2.16.0"
+\version "2.17.11"
\layout { ragged-right= ##t }
\relative c''{
c8 c c c
- \times 4/6 { c c c c c c}
+ \tuplet 6/4 { c c c c c c}
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Tuplet-spanner should not put (visible) brackets on
\layout { ragged-right= ##t }
\relative c' {
- \set tupletSpannerDuration = #(ly:make-moment 1 4)
+ \tupletSpan 4
\override TupletBracket.bracket-visibility = #'if-no-beam
- \times 2/3 {
+ \tuplet 3/2 {
f8[ f f ] f8[ f f ] f f f f f f
}
}
-\version "2.16.0"
+\version "2.17.11"
\header {
r8^\markup "Beam to the beat" c c c c c
c c c r r4 \bar "||"
- \set Timing.baseMoment = #(ly:make-moment 1 8)
+ \set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(3 3)
r8^\markup "Override to beam groups of 3 eighth notes" c c c c c
r4. c8 c c c c c r4.
-\version "2.16.0"
+\version "2.17.11"
\header {
\relative c' {
\time 2/4
c16 c
- \times 2/3 { c8 c16 }
- \times 2/3 { c8 c16 }
+ \tuplet 3/2 { c8 c16 }
+ \tuplet 3/2 { c8 c16 }
c16 c
}
texidoc = "Exercise all output functions"
}
-\version "2.17.6"
+\version "2.17.11"
\paper { ragged-right = ##t }
\new Staff
{
\ottava #1
- \times 2/3 { c8[\< f]( f''\!) }
+ \tuplet 3/2 { c8[\< f]( f''\!) }
\ottava #0
<f,, \5>4
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc = "Fully concave beams should be horizontal. Informally spoken,
}
-resetMeasure = \set Score.measurePosition = #(ly:make-moment 0 1)
+resetMeasure = \set Score.measurePosition = #(ly:make-moment 0/1)
%% examples from Ross.
rossFourBeams =\relative c'' {
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc="
Beams should behave reasonably well, even under extreme circumstances.
%%%%%%%
\stemNeutral
- \times 2/3{ d16[ fis' d,]} \times 2/3{ cis[ g'' cis,,]}
+ \tuplet 3/2{ d16[ fis' d,]} \tuplet 3/2{ cis[ g'' cis,,]}
a'16 cis a, g''' % Used to give a nice beam directed upwards.
\stemNeutral
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
% a linear decrease instead?
%
-\featherDurations #(ly:make-moment 3 4) \relative c'' {
+\featherDurations #(ly:make-moment 3/4) \relative c'' {
\override Beam.grow-direction = #LEFT
c16[
c c c
}
-\version "2.17.6"
+\version "2.17.11"
\layout {
ragged-right = ##t
}
\relative c' {
- \times 2/3 {r8[ c' g']}
+ \tuplet 3/2 {r8[ c' g']}
\override Stem.stemlet-length = #0.5
- \times 2/3 {r8[ c, g']}
+ \tuplet 3/2 {r8[ c, g']}
}
-\version "2.16.0"
+\version "2.17.11"
\header {
}
\relative c' {
- \set tupletSpannerDuration = #(ly:make-moment 1 4)
- \set baseMoment = #(ly:make-moment 1 8)
+ \tupletSpan 4
+ \set baseMoment = #(ly:make-moment 1/8)
\set subdivideBeams = ##t
- \times 4/6 { \repeat unfold 24 { c16 } }
+ \tuplet 6/4 { \repeat unfold 24 { c16 } }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
}
{
- \times 2/3 {b16 b b} b8 b8 \times 2/3 {b16 b b}
- \times 1/3 {b16 b b} b8. b \times 1/3 {b16 b b}
+ \tuplet 3/2 {b16 b b} b8 b8 \tuplet 3/2 {b16 b b}
+ \tuplet 3/1 {b16 b b} b8. b \tuplet 3/1 {b16 b b}
}
-\version "2.16.0"
+\version "2.17.11"
\header{
texidoc="
\context Staff \relative c'' {
- c8[ \times 2/3 { c16 d e] }
+ c8[ \tuplet 3/2 { c16 d e] }
s4*3
c8.[ c16]
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "
}
\relative c'' {
- \times 2/3 {
+ \tuplet 3/2 {
c8. c16 c8
}
- \times 2/3 {
+ \tuplet 3/2 {
c8 c16 c8.
}
- \times 4/5 {
+ \tuplet 5/4 {
c8[ c8. c16 c8 c8]
}
- \times 4/5 {
+ \tuplet 5/4 {
c8[ c8 c16 c8. c8]
}
- \times 4/5 {
+ \tuplet 5/4 {
c8 c16 c8. c8 c8
}
- \times 4/5 {
+ \tuplet 5/4 {
c8 c8 c8. c16 c8
}
c8.[ c16 c8 c8]
c8[ c16 c8. c8]
c8[ c8. c16 c8]
c8.[ c16 c8. c16]
- \times 4/5 { c8 [ c16 c8 c16 c8 c8 ] }
- \times 4/5 { a8 a32 a8 a16. a8 a8 }
+ \tuplet 5/4 { c8 [ c16 c8 c16 c8 c8 ] }
+ \tuplet 5/4 { a8 a32 a8 a16. a8 a8 }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
\relative c' {
<c e g>4 r <c e g>2 ~ |
- \times 2/3 { <c e g>4 q q } \times 2/3 { q q q } |
+ \tuplet 3/2 { <c e g>4 q q } \tuplet 3/2 { q q q } |
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "
}
\context Staff \relative c'' {
- \set tupletSpannerDuration = #(ly:make-moment 1 1)
- \times 2/3 { g1 g g }
+ \tupletSpan 1
+ \tuplet 3/2 { g1 g g }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "
\context Staff \relative f {
\time 9/8
- \set completionUnit = #(ly:make-moment 3 8)
+ \set completionUnit = #(ly:make-moment 3/8)
g'1.. g2
\time 6/4
- \set completionUnit = #(ly:make-moment 1 4)
- \set tupletSpannerDuration = #(ly:make-moment 1 4)
- \times 2/3 { e4 c8 f g a4 b8 c4 b8 a4 g8 a e f4 }
+ \set completionUnit = #(ly:make-moment 1/4)
+ \tupletSpan 4
+ \tuplet 3/2 { e4 c8 f g a4 b8 c4 b8 a4 g8 a e f4 }
}
-\version "2.17.6"
+\version "2.17.11"
#(use-modules (srfi srfi-13)
(ice-9 format))
\test ##[ { \change Staff = "up" { c d } } #] % ContextChange
%% Tuplets
-\test ##[ \times 2/3 { c8 d e } #] % TimeScaledMusic
-\test ##[ \times 4/6 { c16 d e f g a } #]
-\test ##[ \times 2/3 { c d e \times 2/5 { f e d2 d4 } c } #]
-%}
+\test ##[ \tuplet 3/2 { c8 d e } #] % TimeScaledMusic
+\test ##[ \tuplet 6/4 { c16 d e f g a } #]
+\test ##[ \tuplet 3/2 { c d e \tuplet 5/2 { f e d2 d4 } c } #]
+\test ##[ \tuplet 3/2 2 { c d e \tuplet 5/2 2 { f e d2 d4 } c } #]
+
%% \relative and \tranpose
\test #"NOT A BUG" ##[ \relative c' { c b } #] % RelativeOctaveMusic
\test #"NOT A BUG" ##[ \transpose c d { c d } #] % TransposedMusic
-%}
+
%% Repeats
\test ##[ \repeat volta 2 { c d } #] % VoltaRepeatedMusic
\test ##[ \repeat unfold 2 { c d } #] % UnfoldedRepeatedMusic
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Dot Columns are engraved in the Staff by default,
music = \relative c'' { \time 3/4 << {
<d f g>4. c c b g f a <a b> a <a' b>
-} \\ \times 1/2 {
+} \\ \tuplet 2/1 {
<f, g b>2. a-- <a b> <g a>-. a2. a-- a a b <a b> \bar "|."
} >> }
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "The compression factor of a duration identifier is
}
% looks like a whole note, has duration of half note
-wholeHalved = #(ly:make-duration 0 0 1 2)
+wholeHalved = #(ly:make-duration 0 0 1/2)
\relative c' {
--- /dev/null
+\version "2.16.0"
+
+\header {
+ texidoc = "Fingering directions in directed and undirected contexts."
+}
+
+\layout { ragged-right= ##t }
+
+{
+ \relative c''
+ \new Voice {
+ \tempo "\\voiceTwo"
+ \voiceTwo
+ c2^5 <c^5>
+ c_5 <c_5>
+ c-5 <c-5>
+ \tempo "\\oneVoice"
+ \oneVoice
+ c^5 <c^5>
+ c_5 <c_5>
+ c-5 <c-5>
+ } \addlyrics {
+ \override LyricText . font-size = #-2
+ \override LyricText . font-series = #'bold
+ "c^5" "<c^5>"
+ "c_5" "<c_5>"
+ "c-5" "<c-5>"
+ "c^5" "<c^5>"
+ "c_5" "<c_5>"
+ "c-5" "<c-5>"
+ }
+}
}
-\version "2.16.0"
+\version "2.17.11"
%% todo : use macro, to show the statement tested.
#(ly:progress "~a\n" (ly:expand-environment "${HOME} $HOME $$ "))
%% very platform dependent.
%% #(ly:font-config-display-fonts)
-#(ly:progress "~A\n" (ly:duration->string (ly:make-duration 2 2 3 7)))
+#(ly:progress "~A\n" (ly:duration->string (ly:make-duration 2 2 3/7)))
#(ly:parser-parse-string (ly:parser-clone parser) "foo = #1 #(ly:progress \"hello there\n\")")
#(ly:progress "~a\n" (ly:truncate-list! (iota 5) 10))
\relative c' {
\once \override Voice.Glissando.style =
#(lambda (grob)
- (if (eq? 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
+ (if (= 1 (ly:grob-property grob 'glissando-index)) 'zigzag 'default))
<d f a>1 \glissando s1 <f a c>
}
-\version "2.16.0"
+\version "2.17.11"
\header{
\grace b8 c4\fermata
\grace { c32[ cis32] } gis4
\grace { cis32[ dis32] } e4
- \grace { c32[ d] }\times 2/3 { c8[ c c] }
+ \grace { c32[ d] }\tuplet 3/2 { c8[ c c] }
\grace { b32[ ( c32] } c4)
\grace <c d>16 c8[ c8]
% \grace c16 c8[ c8]
staves synchronized with the notes."
}
-\version "2.17.6"
+\version "2.17.11"
skips =
{
\context {
\RhythmicStaff
\consists "Grid_point_engraver"
- gridInterval = #(ly:make-moment 1 8)
+ gridInterval = #(ly:make-moment 1/8)
\override BarLine.bar-extent = #'(-0.025 . 0.025)
}
\context {
}
-\version "2.17.6"
+\version "2.17.11"
<<
\relative \new Voice = "lahlah" {
<<
\new Voice = "alternative" {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
%% show associations clearly.
\override NoteColumn.force-hshift = #-3
r8 f g
-\version "2.16.0"
+\version "2.17.11"
\header{
m = \relative c'' {
\autoBeamOff
- g8( a) r8 \times 2/3 { g'8( f e) } r8 \grace { d16[ c b] } e4
+ g8( a) r8 \tuplet 3/2 { g'8( f e) } r8 \grace { d16[ c b] } e4
\textLengthOff
d8.^"melisma" \melisma c16
\melismaEnd
--- /dev/null
+\version "2.17.11"
+\header {
+
+ texidoc = "@code{make-relative} is a Scheme utility macro mainly
+useful for creating music functions accepting pitches as arguments.
+Its purpose is to make music functions taking pitch arguments for
+producing complex music fragments integrate nicely within a
+@code{\\relative} section. This regtest typesets a short music
+fragment twice, once without using @code{\\relative}, once using it.
+The fragment should appear identical in both cases."
+
+}
+
+\layout { ragged-right= ##t }
+
+ph =
+#(define-music-function (parser location p1 p2 p3 p4 p5)
+ (ly:pitch? ly:pitch? ly:pitch? ly:pitch? ly:pitch?)
+ (make-relative (p1 p2 p3 p4 p5) p1
+ #{
+ \repeat unfold 2 { $p1 2 } |
+ \repeat unfold 2 { r16 $p2 8. ~ $p2 4 } |
+ \repeat unfold 2 { r8 $p3 16 $p4 $p5 $p3 $p4 $p5 } |
+ #}))
+
+\parallelMusic #'(low middle high)
+{
+ \ph c' e' g' c'' e''
+ R1*7 | \skip 1*7 | \oneVoice R1*7 \voiceOne |
+ \ph a c' e' g' c''
+ \voiceTwo | \change Staff = "down" \voiceOne | \oneVoice |
+ \ph d a d' fis' c''
+ \oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
+ \ph c, c g bes e'
+ c,2~ c, | r16 c8. ~ c4 ~ c2
+ | r8 f16 a c' f' c' a c' a f a f d f d |
+ c,2~ c, | r16 b,8. ~ b,4 ~ b,2
+ | r8 g'16 b' d'' f'' d'' b' d'' b' g' b' d' f' e' d' |
+ c,1\fermata | c1 | <e' g' c''>1\fermata \bar "|." |
+}
+
+\score {
+ \new PianoStaff <<
+ \compressFullBarRests
+ \new Staff = "up" {
+ << \high \\ \middle >>
+ }
+ \new Staff = "down" {
+ \clef bass
+ \low
+ }
+ >>
+}
+
+\parallelMusic #'(low middle high)
+\relative c' {
+ \ph c e g c e
+ R1*7 | \skip 1*7 | \oneVoice R1*7 \voiceOne |
+ \ph a c e g c
+ \voiceTwo | \change Staff = "down" \voiceOne | \oneVoice |
+ \ph d, a' d fis c'
+ \oneVoice R1*21 \voiceTwo | \skip 1*21 | R1*21 |
+ \ph c, c' g' bes e
+ c2~ c | r16 c'8. ~ c4 ~ c2
+ | r8 f16 a c f c' a c a f a f d f d |
+ c,,2~ c | r16 b'8. ~ b4 ~ b2
+ | r8 g'16 b d f d b d b g b d f e d |
+ c,,1\fermata | c'1 | <e' g c>1\fermata \bar "|." |
+}
+
+\score {
+ \new PianoStaff <<
+ \compressFullBarRests
+ \new Staff = "up" {
+ << \high \\ \middle >>
+ }
+ \new Staff = "down" {
+ \clef bass
+ \low
+ }
+ >>
+}
-\version "2.16.0"
+\version "2.17.12"
\header {
texidoc = "@code{\\note-by-number} and @code{\\note} support
-all note head styles."
+all note head styles and straight flags."
}
-#(define-markup-command (show-note-styles layout props) ()
+#(define styles-list
+ '(default altdefault
+ baroque neomensural
+ mensural petrucci
+ harmonic harmonic-black
+ harmonic-mixed diamond
+ cross xcircle
+ triangle slash))
+
+#(define-markup-command (show-note-styles layout props styles) (list?)
(interpret-markup layout props
(make-column-markup
(map
(lambda (dur-log)
(make-note-by-number-markup
dur-log 0 UP))
- '(-3 -2 -1 0 1 2))))))))
- '(default altdefault
- baroque neomensural
- mensural petrucci
- harmonic harmonic-black
- harmonic-mixed diamond
- cross xcircle
- triangle slash)))))
+ '(-3 -2 -1 0 1 2 3 4 5 6))))))))
+ styles))))
+
+\markup {
+ \column {
+ \vspace #1
+ \underline "Note-head-styles:"
+ \override #'(baseline-skip . 6)
+ \show-note-styles #styles-list
+ }
+}
+
+\markup {
+ \column {
+ \vspace #1
+ \underline "Modern-straight-flag:"
+ \override #'(flag-style . modern-straight-flag)
+ \show-note-styles #'(default)
+ }
+}
\markup {
- \override #'(baseline-skip . 6)
- \show-note-styles
+ \column {
+ \vspace #1
+ \underline "Old-straight-flag:"
+ \override #'(flag-style . old-straight-flag)
+ \show-note-styles #'(default)
+ }
}
texidoc = "The note markup function may be used to make metronome
markings. It works for a variety of flag, dot and duration settings."
}
-\version "2.17.6"
+\version "2.17.12"
-\score {
- \relative c''
- {
- c4^\markup {
- \note #"1" #1
- \note #"2" #1
- \note #"4" #1
- \note #"8" #1
- \note #"16" #1
- \note #"32" #1
- \note #"64" #1
+mrkp =
+\markup {
+ \note #"1" #1
+ \note #"2" #1
+ \note #"4" #1
+ \note #"8" #1
+ \note #"16" #1
+ \note #"32" #1
+ \note #"64" #1
- \note #"1" #-1
- \note #"2" #-1
- \note #"4" #-1
- \note #"8" #-1
- \note #"16" #-1
- \note #"32" #-1
- \note #"64" #-1
+ \note #"1" #-1
+ \note #"2" #-1
+ \note #"4" #-1
+ \note #"8" #-1
+ \note #"16" #-1
+ \note #"32" #-1
+ \note #"64" #-1
- \note #"1." #-1
- \note #"2." #-1
- \note #"4." #-1
- \note #"8." #-1
- \note #"16." #-1
- \note #"32." #-1
- \note #"64." #-1
+ \note #"1." #-1
+ \note #"2." #-1
+ \note #"4." #-1
+ \note #"8." #-1
+ \note #"16." #-1
+ \note #"32." #-1
+ \note #"64." #-1
- \note #"1." #1
- \note #"2." #1
- \note #"4." #1
- \note #"8." #1
- \note #"16." #1
- \note #"32." #1
- \note #"64." #1
+ \note #"1." #1
+ \note #"2." #1
+ \note #"4." #1
+ \note #"8." #1
+ \note #"16." #1
+ \note #"32." #1
+ \note #"64." #1
- \override #'(style . cross)
- { \note-by-number #2 #1 #1
- \note-by-number #2 #1 #-1
- }
- \override #'(style . triangle)
- { \note-by-number #2 #1 #1
- \note-by-number #2 #1 #-1
- }
+ \override #'(style . cross)
+ { \note-by-number #2 #1 #1
+ \note-by-number #2 #1 #-1
+ }
+ \override #'(style . triangle)
+ { \note-by-number #2 #1 #1
+ \note-by-number #2 #1 #-1
+ }
+}
+\score {
+ \relative c''
+ {
+ c4^\markup {
+ \column {
+ \mrkp
+ \override #'(style . mensural) \mrkp
+ \override #'(flag-style . modern-straight-flag) \mrkp
+ \override #'(flag-style . old-straight-flag) \mrkp
+ }
}
-
\override NoteHead.style = #'triangle
c4 a
}
-
\layout {
\context {
\Score
\override PaperColumn.keep-inside-line = ##f
}
}
-
}
texidoc = "Use \\score block as markup command."
}
-\version "2.16.0"
+\version "2.17.11"
tuning = \markup {
\score {
\relative c'' {
\time 4/8
- \times 2/3 { c8 d e } \times 2/3 {c d e}
- \times 2/3 { c8 d e } \times 2/3 {c d e}
+ \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
+ \tuplet 3/2 { c8 d e } \tuplet 3/2 {c d e}
g8 a8 g8 a
g8 a8 g8 a
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "A @code{MetronomeMark}, @code{RehearsalMark} and @code{BarNumber}
\override Beam.breakable = ##t
\override Glissando.breakable = ##t
- \ottava #1 \times 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
+ \ottava #1 \tuplet 1/1 { e'8\<\startTextSpan\startTrillSpan\glissando
[ \override NoteColumn.glissando-skip = ##t\repeat unfold 22 e'8
\revert NoteColumn.glissando-skip e'8\!\stopTextSpan\stopTrillSpan ] } |
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "
\tempo 4 = 66 ~ 72
c1 | c
$(make-event-chord (list (make-music 'TempoChangeEvent
- 'tempo-unit (ly:make-duration 2 0 1 1)
+ 'tempo-unit (ly:make-duration 2 0 1/1)
'metronome-count (cons 124 132))))
c1 | c
}
--- /dev/null
+\header {
+
+ texidoc = "Tied notes sound as one note in MIDI. Grace notes
+ following a tied note shorten the resulting single note in MIDI."
+
+ % https://code.google.com/p/lilypond/issues/detail?id=3091
+}
+\version "2.16.0"
+\score {
+ \relative c' {
+ % This first b~ tie should be honoured in the MIDI output:
+ a2. b4~
+ % i.e. this b8 must not be sounded:
+ | b8 \grace c16 d4
+ }
+ \midi { }
+}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "
a1 a2 a2. a4 a4. a8 a8. a16 a16. a32 a32. a64
- \times 2/3 { b4 b4 b4 }
- \times 3/5 { b4 b4 b4 b4 b4 }
+ \tuplet 3/2 { b4 b4 b4 }
+ \tuplet 5/3 { b4 b4 b4 b4 b4 }
- \times 2/3 { c8 c8 c8 }
- \times 3/5 { c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c8 c8 c8 }
+ \tuplet 5/3 { c8 c8 c8 c8 c8 }
}
\layout { }
-\version "2.16.0"
+\version "2.17.11"
\include "mozart-hrn3-defs.ily"
allegro = \relative c' {
c4) r r2
R1 |
\mark "H"
- \times 2/3 { c8[ b a ] }
- \times 2/3 { g[ a b] }
- \times 2/3 { c[ d e] }
- \times 2/3 { f[ e d] } |
- \times 2/3 { c[ b a ] }
- \times 2/3 { g[ a b] }
- \times 2/3 { c[ d e] }
- \times 2/3 { f[ e d] }|
- c4 \times 2/3 { r8 g'[( e)]} c4
- \times 2/3 { r8 e[ ( c)]} |
- g4 \times 2/3 { r8 c8[( g)] }
- \times 2/3 { e[ ( g) e-. ] }
- \times 2/3 { c[ ( e) c-.] }|
+ \tuplet 3/2 { c8[ b a ] }
+ \tuplet 3/2 { g[ a b] }
+ \tuplet 3/2 { c[ d e] }
+ \tuplet 3/2 { f[ e d] } |
+ \tuplet 3/2 { c[ b a ] }
+ \tuplet 3/2 { g[ a b] }
+ \tuplet 3/2 { c[ d e] }
+ \tuplet 3/2 { f[ e d] }|
+ c4 \tuplet 3/2 { r8 g'[( e)]} c4
+ \tuplet 3/2 { r8 e[ ( c)]} |
+ g4 \tuplet 3/2 { r8 c8[( g)] }
+ \tuplet 3/2 { e[ ( g) e-. ] }
+ \tuplet 3/2 { c[ ( e) c-.] }|
g4 r8 g'\f a[ b c d]|
\afterGrace d1_(\trill { c16[ d] }
c4) r r2
}
-\version "2.16.0"
+\version "2.17.11"
\new Staff <<
\partcombine
\relative c'' {
r2
- \times 2/3 { g8[ g g] }
- \times 2/3 { g[ g g] } g1
+ \tuplet 3/2 { g8[ g g] }
+ \tuplet 3/2 { g[ g g] } g1
}
\relative c'' { R1 g1 }
>>
\paper { ragged-right = ##T }
-\version "2.16.0"
+\version "2.17.11"
\score {
<<
\new Staff {
\partcombine
\relative c'' {
- \times 2/3 { d4 d d ~ } d2
+ \tuplet 3/2 { d4 d d ~ } d2
}
\relative c'' {
- \times 2/3 { b4 a g ~ } g2
+ \tuplet 3/2 { b4 a g ~ } g2
}
}
>>
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Phrasing slurs do not collide with tuplet numbers."
\relative c'' {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
c8\( b c
}
a2.\)
texidoc = "Quotations take into account the transposition of both
source and target. In this example, all instruments play sounding
central C, the target is a instrument in F. The target part may be
-@code{\\transpose}d. In this case, all the pitches (including the
-quoted ones) will transposed as well. "
+@code{\\transpose}d. The quoted pitches will stay unchanged."
}
texidoc ="Tuplet bracket ends properly when quoting."
}
-\version "2.16.0"
+\version "2.17.11"
\paper { ragged-right = ##t }
\addQuote x {
- \times 2/3 { a'8 a' a' } a'4 a'2 |
+ \tuplet 3/2 { a'8 a' a' } a'4 a'2 |
}
\new Staff <<
-\version "2.17.6"
+\version "2.17.11"
\header {
}
foo = \relative c' {
- \times 2/3 { c4 c c } \times 2/3 { c4 c c }
+ \tuplet 3/2 { c4 c c } \tuplet 3/2 { c4 c c }
}
\addQuote "foo" { \foo }
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Beat repeats for patterns containing mixed durations use
c8. <d f>16
}
\repeat percent 2 {
- \times 2/3 {
+ \tuplet 3/2 {
r8 d e
}
c4
-\version "2.16.0"
+\version "2.17.11"
\header {
(let* ((scmpitch (ly:make-pitch 0 pitch 0))
(music (make-music 'EventChord
'elements (list (make-music 'NoteEvent
- 'duration (ly:make-duration 2 0 1 1)
+ 'duration (ly:make-duration 2 0 1/1)
'pitch scmpitch))))
(score (scorify-music music parser))
(layout (ly:output-def-clone $defaultlayout))
}
-\version "2.16.0"
+\version "2.17.11"
\paper {
ragged-right = ##T
}
\new Staff \relative c' {
\set Score.skipTypesetting = ##t
- \times 2/3 { c8 c c } \times 2/3 { c c c }
- \times 2/3 { c c c } \times 2/3 { c c c}
+ \tuplet 3/2 { c8 c c } \tuplet 3/2 { c c c }
+ \tuplet 3/2 { c c c } \tuplet 3/2 { c c c}
\set Score.skipTypesetting = ##f
d1 \break
c
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "A slur's shift region is automatically made
}
\relative c' {
- c'2( \times 2/3 { g4 e c) }
+ c'2( \tuplet 3/2 { g4 e c) }
}
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
\override TupletBracket.bracket-visibility = ##f
\override Slur.details.region-size = #6
- \times 2/3
+ \tuplet 3/2
{
c( g' c,)
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
<<
\context Voice = alternative {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
\override NoteColumn.force-hshift = #-3
f8 f g
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc="Festival song synthesis output supports
reordered lyrics.
}
\context Voice = alternative {
\voiceOne
- \times 2/3 {
+ \tuplet 3/2 {
\override NoteColumn.force-hshift = #-3
f8 f g
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Loose columns (here, the treble clef) are spaced
\new PianoStaff <<
\new Staff \relative c' {
- \times 2/3 { g'4 a2 }
+ \tuplet 3/2 { g'4 a2 }
}
\new Staff \relative c' {
\clef bass fis,,8 cis'
}
-\version "2.17.6"
+\version "2.17.11"
\layout {
ragged-right = ##t
} {
\relative c' {
\override Score.SpacingSpanner.uniform-stretching = ##t
- \set Score.proportionalNotationDuration = #(ly:make-moment 4 25)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 4/25)
r1
\time 3/8 r4.
}
-\version "2.17.6"
+\version "2.17.11"
\header{
\relative c' {
\context StaffGroup <<
\new Staff \context Voice {
- \times 2/10 { c8[ c c c c c c c c c] }
- \times 2/10 { c[ c c c c c c c c c] }
+ \tuplet 10/2 { c8[ c c c c c c c c c] }
+ \tuplet 10/2 { c[ c c c c c c c c c] }
}
\new Staff \context Voice {
- \times 2/11 { c8[ c c c c c c c c c c] }
- \times 2/11 { c[ c c c c c c c c c c] }
+ \tuplet 11/2 { c8[ c c c c c c c c c c] }
+ \tuplet 11/2 { c[ c c c c c c c c c c] }
}
>>
}
}
-\version "2.16.0"
+\version "2.17.11"
\paper { ragged-right = ##t }
\relative c''
<<
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff { c8[ c c c c c] c4 c2 r2 }
- \new Staff { c2 \times 2/3 { c8 c c } c4 c1 }
+ \new Staff { c2 \tuplet 3/2 { c8 c c } c4 c1 }
>>
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "When space-to-barline is false, we measure the space between the note and the
\paper {ragged-right = ##t}
{
- \override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1 16)
+ \override Score.SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/16)
c'2 \clef bass c'2 \clef treble
\override NoteSpacing.space-to-barline = ##f
c'2 \clef bass c'2 \clef treble
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
\relative c''
<<
\override Score.SpacingSpanner.strict-note-spacing = ##t
- \set Score.proportionalNotationDuration = #(ly:make-moment 1 16)
+ \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
\new Staff {
c8[ c \clef alto c c \grace { d16 } c8 c] c4 c2
\grace { c16[ c16] }
c2 }
\new Staff {
- c2 \times 2/3 { c8 \clef bass cis,, c }
+ c2 \tuplet 3/2 { c8 \clef bass cis,, c }
c4
c1
}
}
-\version "2.17.6"
+\version "2.17.11"
\relative c''
<<
c16[ c c c c c c c c c16]
}
\new Staff {
- \times 6/7 { c16 c c cis c c c }
+ \tuplet 7/6 { c16 c c cis c c c }
c8[ c32 c32 c16]
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "The @code{break-overshoot} property sets the amount that
\override TupletBracket.break-overshoot = #'(1.0 . 2.0)
\override TupletBracket.bracket-visibility = ##t
\override Beam.breakable = ##t
- c2.. \times 2/3 { c8.[ \break c8.] }
+ c2.. \tuplet 3/2 { c8.[ \break c8.] }
}
}
-\version "2.17.6"
+\version "2.17.11"
\layout {
ragged-right = ##t
melody = \relative c''' {
\override DynamicText.extra-offset = #'(0 . 3)
- s1-\f c8[(\< r a g]) e[ r d( <f a>])\! \times 2/3 { d4 d d }
+ s1-\f c8[(\< r a g]) e[ r d( <f a>])\! \tuplet 3/2 { d4 d d }
}
<<
-\version "2.17.6"
+\version "2.17.11"
\header{ texidoc = "As default, tablature staves show only the fret numbers, because
in most situations, they are combined with normal staves.
\ottava #1
r4 d'4 r8 e |
\ottava #0
- \times 3/4 { b,4 c \glissando d\5 \glissando c } |
+ \tuplet 4/3 { b,4 c \glissando d\5 \glissando c } |
c4. d-_( |
e\varcoda-> )
\override TextSpanner.bound-details.left.text = "rit." f\startTextSpan |
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "In combination with a beam, the bracket of the tuplet
\layout { ragged-right= ##t }
\context Voice\relative c'' {
- \times 2/3 { r c8[ c8] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c16[ c16] c8[ c8] }
+ \tuplet 3/2 { r c8[ c8] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c16[ c16] c8[ c8] }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{Fingering} grobs.
\relative d'' {
\override TupletBracket.direction = #UP
- \times 2/3 { d4 a8-4 }
+ \tuplet 3/2 { d4 a8-4 }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Tuplet brackets avoid scripts by default.
}
\relative c'' {
- \times 2/3 { a8^\espressivo r a^\espressivo }
+ \tuplet 3/2 { a8^\espressivo r a^\espressivo }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "@code{TupletBracket} grobs avoid @code{StringNumber} grobs.
\relative d'' {
\override TupletBracket.direction = #UP
- \times 2/3 { d4 <a\4>8 }
+ \tuplet 3/2 { d4 <a\4>8 }
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
}
voice = {
- \times 2/3 { b8 \change Staff=I c' d' }
- \times 2/3 { d' c' \change Staff=II b }
- \times 2/3 { \change Staff=III c,
+ \tuplet 3/2 { b8 \change Staff=I c' d' }
+ \tuplet 3/2 { d' c' \change Staff=II b }
+ \tuplet 3/2 { \change Staff=III c,
\change Staff=II b
\change Staff=I c' }
- \times 2/3 { c'[ \change Staff=II b] c }
+ \tuplet 3/2 { c'[ \change Staff=II b] c }
}
\score {
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "The direction of tuplet brackets is the direction
}
\relative c'' {
- \times 2/3 { r r r }
- \times 2/3 { r c r }
- \times 2/3 { r a r }
- \times 2/3 { c' f,, r }
- \times 2/3 { f, c'' r }
- \times 2/3 { a a c }
- \times 2/3 { c c a }
- \times 2/3 { a a a }
- \times 2/3 { c c c }
+ \tuplet 3/2 { r r r }
+ \tuplet 3/2 { r c r }
+ \tuplet 3/2 { r a r }
+ \tuplet 3/2 { c' f,, r }
+ \tuplet 3/2 { f, c'' r }
+ \tuplet 3/2 { a a c }
+ \tuplet 3/2 { c c a }
+ \tuplet 3/2 { a a a }
+ \tuplet 3/2 { c c c }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Tuplet brackets' outside staff priority can be
\relative c'' {
\override TupletBracket.avoid-scripts = ##f
% Plain old tuplet
- \times 2/3 { a8 r a }
+ \tuplet 3/2 { a8 r a }
% With nothing set, collisions abound both horizontally and
% vertically
- \times 2/3 { a8^\espressivo r a^\espressivo }
+ \tuplet 3/2 { a8^\espressivo r a^\espressivo }
% Setting the staff priority prevents collisions
\override TupletBracket.outside-staff-priority = #1
- \times 2/3 { a8^\espressivo r a^\espressivo }
+ \tuplet 3/2 { a8^\espressivo r a^\espressivo }
% Note that, with the outside-staff-priority set, this bracket
% should be at the same vertical level as the first one
- \times 2/3 { a8 r a }
+ \tuplet 3/2 { a8 r a }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Tuplet brackets do not push objects with outside-staff-priority
\relative c' {
\override TupletBracket.direction = #UP
- \times 1/1 { a^"foo" a' a' a' }
+ \tuplet 1/1 { a^"foo" a' a' a' }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "The default behavior of tuplet-bracket visibility is to print a bracket
}
music = \relative c'' {
- \times 2/3 { c16[ d e } f8]
- \times 2/3 { c8 d e }
- \times 2/3 { c4 d e }
+ \tuplet 3/2 { c16[ d e } f8]
+ \tuplet 3/2 { c8 d e }
+ \tuplet 3/2 { c4 d e }
}
\new Voice {
}
-\version "2.17.6"
+\version "2.17.11"
\paper {
ragged-right = ##t
(markup #:fontsize 6
#:arrow-head X LEFT #f)
(markup #:arrow-head X RIGHT #f))
- \times 11/19 {
+ \tuplet 19/11 {
c4 c4 c4 c4
\bar "-" \break
c4 c4 c4 c4
attaching column for a full-length tuplet bracket can be ignored."
}
-\version "2.17.6"
+\version "2.17.11"
\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 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
\override TupletBracket.full-length-to-extent = ##f
- \times 2/3 { c'16 c'16 c'16 }
+ \tuplet 3/2 { c'16 c'16 c'16 }
\override Score.RehearsalMark.break-visibility = ##(#t #t #t)
\override Score.RehearsalMark.direction = #down
\mark "xxxxxxxxxxxxxxxxxxxxxxx"
}
-\version "2.16.0"
+\version "2.17.11"
\new RhythmicStaff {
\set tupletFullLength = ##t
\time 4/4
- \times 4/5 {
+ \tuplet 5/4 {
c'4 c'1
}
\set tupletFullLengthNote = ##t
\time 2/4
- \times 2/3 {
+ \tuplet 3/2 {
c4 c c
}
\time 3/4
start of the next non-tuplet note. "
}
-\version "2.17.6"
+\version "2.17.11"
\paper { ragged-right = ##t
indent = 0.0 }
{
\set tupletFullLength = ##t
c4
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c \bar "-" \break c] }
- << \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c \bar "-" \break c] }
+ << \tuplet 3/2 { c8[ c c] }
{ s4*5/6 \bar "-" \break } >>
c4
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
\bar "|." \key c\minor
}
}
-\version "2.17.6"
+\version "2.17.11"
\layout {
indent = 0.0\mm
\relative c'' {
\override TupletNumber.text = #tuplet-number::calc-fraction-text
- \times 17/12 { c8 c4 c8 c8}
+ \tuplet 12/17 { c8 c4 c8 c8}
}
}
-\version "2.16.0"
+\version "2.17.11"
\paper{
ragged-right=##t
}
{
- \times 4/7 {
- \times 4/5 { c'8 d' e' f' g' } a' b' c''
+ \tuplet 7/4 {
+ \tuplet 5/4 { c'8 d' e' f' g' } a' b' c''
}
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Broken nested tuplets avoid each other correctly.
r2
- \times 4/3 {
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/4 {
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
- \times 4/3 {
- \times 2/3 { a8[ a a] }
- \times 2/3 { a8[ a a] }
- \times 2/3 { a8[ a a] }
+ \tuplet 3/4 {
+ \tuplet 3/2 { a8[ a a] }
+ \tuplet 3/2 { a8[ a a] }
+ \tuplet 3/2 { a8[ a a] }
}
\override TupletNumber.text = #tuplet-number::calc-fraction-text
- \times 4/6 {
- \times 2/3 {
+ \tuplet 6/4 {
+ \tuplet 3/2 {
a4 a a
}
- \times 3/5 {
+ \tuplet 5/3 {
a4 a a a a
}
a4
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc=" Tuplets may be nested."
}
\relative c'' {
- \times 4/3 {
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+ \tuplet 3/4 {
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
}
- \times 4/3 {
- \times 2/3 { a8[ a a] }
- \times 2/3 { a8[ a a] }
- \times 2/3 { a8[ a a] }
+ \tuplet 3/4 {
+ \tuplet 3/2 { a8[ a a] }
+ \tuplet 3/2 { a8[ a a] }
+ \tuplet 3/2 { a8[ a a] }
}
\override TupletNumber.text = #tuplet-number::calc-fraction-text
- \times 4/6 {
- \times 2/3 {
+ \tuplet 6/4 {
+ \tuplet 3/2 {
a4 a a
}
- \times 3/5 {
+ \tuplet 5/3 {
a4 a a a a
}
}
s1*1/6
\stemUp
- \times 4/6 {
- \times 2/3 {
+ \tuplet 6/4 {
+ \tuplet 3/2 {
a1*1/6 a f'
}
- \times 3/5 {
+ \tuplet 5/3 {
c f g a b
}
}
}
-\version "2.17.6"
+\version "2.17.11"
\layout{
\context{
}
partition = {
- \times 2/3 { f8 g a }
+ \tuplet 3/2 { f8 g a }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
\relative c'' {
\override TupletBracket.outside-staff-priority = #1
\override TupletNumber.font-size = #5
- \times 2/3 { a4\trill a\trill^"foo" a\trill }
+ \tuplet 3/2 { a4\trill a\trill^"foo" a\trill }
}
\ No newline at end of file
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Tuplet numbers' outside staff priority can be
\relative c'' {
\override TupletBracket.avoid-scripts = ##f
- \times 2/3 { a8\trill a\trill a\trill }
+ \tuplet 3/2 { a8\trill a\trill a\trill }
\override TupletNumber.outside-staff-priority = #1
- \times 2/3 { a8\trill a\trill a\trill }
+ \tuplet 3/2 { a8\trill a\trill a\trill }
\override Script.outside-staff-priority = #2
- \times 2/3 { a8\trill a\trill a\trill }
+ \tuplet 3/2 { a8\trill a\trill a\trill }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Tuplet number position is correct when slurs and scripts
{
R1 |
\break
- \times 2/3 { e8(-> e e) }
+ \tuplet 3/2 { e8(-> e e) }
}
-\version "2.17.6"
+\version "2.17.11"
\header {
texidoc = "Tuplet bracket formatting supports numerous options,
\context Voice \relative c'' {
- \times 2/3 { c'8 c,, c }
- \times 2/3 { c'8 c'' c,, }
+ \tuplet 3/2 { c'8 c,, c }
+ \tuplet 3/2 { c'8 c'' c,, }
- \times 2/3 { c8[^"NB" c c] }
+ \tuplet 3/2 { c8[^"NB" c c] }
- \times 2/3 { c8^"B" c[ c] }
- \times 2/4 { r8_"B" c,[ c'] r8 }
+ \tuplet 3/2 { c8^"B" c[ c] }
+ \tuplet 4/2 { r8_"B" c,[ c'] r8 }
\override TupletBracket.bracket-visibility = #'if-no-beam
- \times 2/3 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
\tupletUp
\override TupletNumber.stencil = ##f
- \times 2/3 { c8^""^""^"up, no digit" c[ c] }
+ \tuplet 3/2 { c8^""^""^"up, no digit" c[ c] }
\revert TupletNumber.stencil
\override TupletBracket.bracket-visibility = ##t
\override TupletBracket.edge-height = #'(0 . 0)
\override TupletBracket.shorten-pair = #'(2.0 . 2.0)
- \times 4/6 { c_"shorter, no edges" f b b f c}
+ \tuplet 6/4 { c_"shorter, no edges" f b b f c}
\revert TupletBracket.edge-height
\revert TupletBracket.shorten-pair
\override TupletBracket.bracket-flare = #'(0.5 . 0.5)
- \times 2/3 { b^""^""^"angled edges" b b }
+ \tuplet 3/2 { b^""^""^"angled edges" b b }
\tupletNeutral
- \times 2/3 { b b b }
+ \tuplet 3/2 { b b b }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Tuplets may contain rests. "
\context Voice \relative c'' {
\time 2/4
- \times 2/3 { r c,,, c''' }
- \times 2/3 { r c c }
- \times 2/3 { r c r }
- \times 2/3 { r r r }
- \times 2/3 { r c e }
- \times 2/3 { c r e }
- \times 2/3 { r c g }
- \times 2/3 { c r g }
+ \tuplet 3/2 { r c,,, c''' }
+ \tuplet 3/2 { r c c }
+ \tuplet 3/2 { r c r }
+ \tuplet 3/2 { r r r }
+ \tuplet 3/2 { r c e }
+ \tuplet 3/2 { c r e }
+ \tuplet 3/2 { r c g }
+ \tuplet 3/2 { c r g }
}
texidoc = "Show tuplet numbers also on single-note tuplets (otherwise the timing would look messed up!), but don't show a bracket. Make sure that tuplets without any notes don't show any number, either."
}
-\version "2.16.0"
+\version "2.17.11"
\paper { ragged-right = ##t
indent = 0.0 }
\new Staff <<
\new Voice \relative c'' {
- \times 4/6 { c2.:8 } \times 2/3 { g4.:8 } \times 2/3 { a,4.:8 } \times 4/6 {} \bar"|."
+ \tuplet 6/4 { c2.:8 } \tuplet 3/2 { g4.:8 } \tuplet 3/2 { a,4.:8 } \tuplet 6/4 {} \bar"|."
}
>>
ragged-right = ##t
}
-\version "2.16.0"
+\version "2.17.11"
\new Voice {
\relative c'' {
- \times 2/3 { c4 d e}
- \times 2/3 { c4 d e}
+ \tuplet 3/2 { c4 d e}
+ \tuplet 3/2 { c4 d e}
}
\relative c' {
- \times 4/5 { a'4 as g fis f }
- \times 4/5 { fis4 e es d des }
- \times 4/5 { fis,4 e es d des }
- \times 4/5 { bes'''4 bes,, b c cis }
- \times 4/5 { a''4 b b c cis }
+ \tuplet 5/4 { a'4 as g fis f }
+ \tuplet 5/4 { fis4 e es d des }
+ \tuplet 5/4 { fis,4 e es d des }
+ \tuplet 5/4 { bes'''4 bes,, b c cis }
+ \tuplet 5/4 { a''4 b b c cis }
}
}
-\version "2.16.0"
+\version "2.17.11"
\header {
texidoc = "Horizontal tuplet brackets are shifted vertically
\layout { ragged-right= ##t }
\context Voice\relative c'' {
- \times 2/3 { b'4 b b }
- \times 2/3 { f4 f f }
- \times 2/3 { g4 g g }
- \times 2/3 { a4 a a }
+ \tuplet 3/2 { b'4 b b }
+ \tuplet 3/2 { f4 f f }
+ \tuplet 3/2 { g4 g g }
+ \tuplet 3/2 { a4 a a }
}
-\version "2.16.0"
+\version "2.17.11"
\header {
\relative c'' {
\set subdivideBeams = ##t
- \set baseMoment = #(ly:make-moment 1 8)
+ \set baseMoment = #(ly:make-moment 1/8)
\set beatStructure = #'(2 2 2 2)
\repeat unfold 8 {
- \times 2/3 { c16 e d }
+ \tuplet 3/2 { c16 e d }
}
}
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc="Non-standard tuplet texts: Printing other tuplet fractions than the ones actually assigned."
}
\context Voice \relative c'' {
\once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-denominator-text 7)
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::non-default-tuplet-fraction-text 12 7)
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper (tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
}
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc="Non-standard tuplet texts: Printing a tuplet fraction with note durations assigned to both the denominator and the numerator."
}
\context Voice \relative c'' {
\once \override TupletNumber.text = #(tuplet-number::fraction-with-notes "4." "8")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
\once \override TupletNumber.text = #(tuplet-number::non-default-fraction-with-notes 12 "8" 4 "4")
- \times 2/3 { c4. c4. c4. c4. }
+ \tuplet 3/2 { c4. c4. c4. c4. }
}
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc="Non-standard tuplet texts: Appending a note value to the normal text and to the fraction text."
}
\context Voice \relative c'' {
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-denominator-text "4")
- \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
\once \override TupletNumber.text = #(tuplet-number::append-note-wrapper tuplet-number::calc-fraction-text "4")
- \times 2/3 { c8 c8 c8 c8 c8 c8 }
+ \tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
}
-\version "2.17.6"
+\version "2.17.11"
\header{
texidoc="
\context Voice \relative c'' {
- \times 2/3 { a8 b c }
- \times 2/3 { r8 b[ f] }
+ \tuplet 3/2 { a8 b c }
+ \tuplet 3/2 { r8 b[ f] }
\override TupletBracket.bracket-flare = #'(0.5 . 0.5)
- \times 2/3 { r8 b r8 }
+ \tuplet 3/2 { r8 b r8 }
c4 |
- \times 3/4 { c4 c4 c4 c4 } c4 |
+ \tuplet 4/3 { c4 c4 c4 c4 } c4 |
\time 6/8
- \times 6/9 { c8 c c c c c c c c }
+ \tuplet 9/6 { c8 c c c c c c c c }
}
if (!accidental_placement_)
accidental_placement_ = make_item ("AccidentalPlacement",
a->self_scm ());
- Accidental_placement::add_accidental (accidental_placement_, a);
+
+ Accidental_placement::add_accidental
+ (accidental_placement_, a,
+ get_property ("accidentalGrouping") == ly_symbol2scm ("voice"),
+ (long) trans);
note_head->set_object ("accidental-grob", a->self_scm ());
"internalBarNumber "
"extraNatural "
"harmonicAccidentals "
+ "accidentalGrouping "
"keySignature "
"localKeySignature ",
}
void
-Accidental_placement::add_accidental (Grob *me, Grob *a)
+Accidental_placement::add_accidental (Grob *me, Grob *a, bool stagger, long context_hash)
{
Pitch *p = accidental_pitch (a);
if (!p)
a->set_parent (me, X_AXIS);
a->set_property ("X-offset", Grob::x_parent_positioning_proc);
- int n = p->get_notename ();
+ long n = p->get_notename ();
SCM accs = me->get_object ("accidental-grobs");
- SCM key = scm_from_int (n);
- SCM entry = scm_assq (key, accs);
+ SCM key = scm_cons (scm_from_int (n), scm_from_long (stagger ? context_hash : 1));
+ // assoc because we're dealing with pairs
+ SCM entry = scm_assoc (key, accs);
if (entry == SCM_BOOL_F)
entry = SCM_EOL;
else
entry = scm_cons (a->self_scm (), entry);
- accs = scm_assq_set_x (accs, key, entry);
+ accs = scm_assoc_set_x (accs, key, entry);
me->set_object ("accidental-grobs", accs);
}
bool ape_less (Accidental_placement_entry *const &a,
Accidental_placement_entry *const &b)
{
+ vsize size_a = a->grobs_.size ();
+ vsize size_b = b->grobs_.size ();
+ if (size_a != size_b)
+ return size_b < size_a;
+
return ape_priority (a) < ape_priority (b);
}
vector<Accidental_placement_entry *> asc = *apes;
vector_sort (asc, &ape_less);
+ // we do the staggering below based on size
+ // this ensures that if a placement has 4 entries, it will
+ // always be closer to the NoteColumn than a placement with 1
+ // this allows accidentals to be on-average closer to notes
+ // while still preserving octave alignment
+ vector<vector<Accidental_placement_entry *> > ascs;
+
+ vsize sz = INT_MAX;
+ for (vsize i = 0; i < asc.size (); i++)
+ {
+ vsize my_sz = asc[i]->grobs_.size ();
+ if (sz != my_sz)
+ ascs.push_back (vector<Accidental_placement_entry *> ());
+ ascs.back ().push_back (asc[i]);
+ sz = my_sz;
+ }
apes->clear ();
- int parity = 1;
- for (vsize i = 0; i < asc.size ();)
+ for (vsize i = 0; i < ascs.size (); i++)
{
- Accidental_placement_entry *a = 0;
- if (parity)
+ int parity = 1;
+ for (vsize j = 0; j < ascs[i].size ();)
{
- a = asc.back ();
- asc.pop_back ();
- }
- else
- a = asc[i++];
+ Accidental_placement_entry *a = 0;
+ if (parity)
+ {
+ a = ascs[i].back ();
+ ascs[i].pop_back ();
+ }
+ else
+ a = ascs[i][j++];
- apes->push_back (a);
- parity = !parity;
+ apes->push_back (a);
+ parity = !parity;
+ }
}
reverse (*apes);
Separation_item::add_conditional_item (heads_[d],
accidental_placement);
Accidental_placement::add_accidental (accidental_placement,
- accidentals_[d]);
+ accidentals_[d], false, 0);
Pointer_group_interface::add_grob (ambitus_,
ly_symbol2scm ("note-heads"),
heads_[d]);
Audio_note::tie_to (Audio_note *t, Moment skip)
{
tied_ = t;
- Audio_note *first = t;
- while (first->tied_)
- first = first->tied_;
+ Audio_note *first = tie_head();
// Add the skip to the tied note and the length of the appended note
// to the full duration of the tie...
first->length_mom_ += skip + length_mom_;
length_mom_ = 0;
}
+Audio_note *
+Audio_note::tie_head ()
+{
+ Audio_note *first = this;
+ while (first->tied_)
+ first = first->tied_;
+ return first;
+}
+
+string
+Audio_note::to_string () const
+{
+ string s = "#<Audio_note pitch ";
+ s += pitch_.to_string();
+ s += " len ";
+ s += length_mom_.to_string();
+ if (tied_)
+ {
+ s += " tied to " + tied_->to_string();
+ }
+ if (tie_event_)
+ {
+ s += " tie_event";
+ }
+ s += ">";
+ return s;
+}
+
Audio_key::Audio_key (int acc, bool major)
{
accidentals_ = acc;
along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "axis-group-engraver.hh"
+#include "engraver.hh"
#include "axis-group-interface.hh"
+#include "hara-kiri-group-spanner.hh"
#include "pointer-group-interface.hh"
#include "context.hh"
#include "international.hh"
#include "translator.icc"
+/**
+ Put stuff in a Spanner with an Axis_group_interface.
+ Use as last element of a context.
+*/
+class Axis_group_engraver : public Engraver
+{
+protected:
+ Spanner *staffline_;
+ SCM interesting_;
+ vector<Grob *> elts_;
+ void process_music ();
+ virtual void finalize ();
+ DECLARE_ACKNOWLEDGER (grob);
+ void process_acknowledged ();
+ virtual Spanner *get_spanner ();
+ virtual void add_element (Grob *);
+ virtual bool must_be_last () const;
+ virtual void derived_mark () const;
+
+public:
+ TRANSLATOR_DECLARATIONS (Axis_group_engraver);
+};
+
+
Axis_group_engraver::Axis_group_engraver ()
{
staffline_ = 0;
+ interesting_ = SCM_EOL;
+}
+
+void
+Axis_group_engraver::derived_mark () const
+{
+ scm_gc_mark (interesting_);
}
+
bool
Axis_group_engraver::must_be_last () const
{
Grob *it = unsmob_grob (get_property ("currentCommandColumn"));
staffline_->set_bound (LEFT, it);
}
+ interesting_ = get_property ("keepAliveInterfaces");
}
Spanner *
return;
}
elts_.push_back (i.grob ());
+
+ if (staffline_ && to_boolean(staffline_->get_property("remove-empty")))
+ {
+ for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
+ {
+ if (i.grob ()->internal_has_interface (scm_car (s)))
+ Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
+ }
+ }
}
/*
"VerticalAxisGroup ",
/* read */
- "currentCommandColumn ",
+ "currentCommandColumn "
+ "keepAliveInterfaces ",
/* write */
""
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2011--2012 Mike Solomon <mike@mikesolomon.org>
- Jan Nieuwenhuizen <janneke@gnu.org>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "box-quarantine.hh"
-#include <functional>
-
-Box_quarantine::Box_quarantine (Real padding, Axis a)
- : padding_ (padding), a_ (a)
-{
-}
-
-void
-Box_quarantine::add_box_to_quarantine (Box infected)
-{
- Box nbox (infected);
- nbox[a_].widen (padding_ / 2);
- boxes_to_quarantine_.push_back (nbox);
-}
-
-vector<Box>
-Box_quarantine::quarantined_boxes ()
-{
- return boxes_to_quarantine_;
-}
-
-struct Intersection_info
-{
- vsize index_;
- Real amount_;
- int mid_;
- Intersection_info (vsize index, Real amount, int mid);
-};
-
-Intersection_info::Intersection_info (vsize index, Real amount, int mid)
- : index_ (index), amount_ (amount), mid_ (mid)
-{
-}
-
-/*
- boxes_to_quarantine_ contains a vector of boxes that may
- or may not overlap. it iterates through these boxes,
- pushing quarantined_boxes_ epsilon over or epsilon under a
- collision. when this type of change happens, the loop is marked
- as "dirty" and re-iterated.
-
- TODO: not sure if this loop causes infinite behavior...
-*/
-
-bool
-sort_towards_middle(Intersection_info ii0, Intersection_info ii1)
-{
- // ugh...with C++11, we'll just be able to do a factory instead of
- // bundling mid with the Intersection_info
- int mid = ii0.mid_;
- assert ((double)(ii0.index_ - mid) >= 0.0);
- assert ((double)(ii1.index_ - mid) >= 0.0);
- return fabs (ii0.index_ - mid) < fabs (ii1.index_ - mid);
-}
-
-void
-Box_quarantine::solve ()
-{
- int mid = boxes_to_quarantine_.size () / 2;
- Real epsilon = 1.0e-4;
- bool dirty = false;
- do
- {
- dirty = false;
- vector<Intersection_info> ii;
- for (vsize i = 0; i < boxes_to_quarantine_.size () - 1; i++)
- {
- Box scratch (boxes_to_quarantine_[i]);
- scratch.intersect (boxes_to_quarantine_[i + 1]);
- if (!scratch.is_empty ())
- ii.push_back (Intersection_info (i, scratch[a_].length (), mid));
- }
- vector_sort (ii, sort_towards_middle);
- if (ii.size () > 0)
- {
- Offset shift (-(epsilon + ii[0].amount_ / 2.0), 0.0);
- if (a_ == Y_AXIS)
- shift = shift.swapped ();
- boxes_to_quarantine_[ii[0].index_].translate (shift);
- shift[a_] = -shift[a_];
- boxes_to_quarantine_[ii[0].index_ + 1].translate (shift);
- dirty = true;
- }
- }
- while (dirty);
-}
Don't create multiple score contexts.
*/
Global_context *gthis = dynamic_cast<Global_context *> (this);
- if (gthis && gthis->get_score_context ())
- return gthis->get_score_context ()->find_create_context (n, id, operations);
+ if (gthis)
+ {
+ if (gthis->get_score_context ())
+ return gthis->get_score_context ()->find_create_context (n, id, operations);
+
+ // Special case: If we use \set Timing.xxx = whatever before
+ // Score is established, the alias of Score to Timing will not
+ // be taken into account. We check for this particular case
+ // here. Aliases apart from Score-level ones don't warrant
+ // context creation as they could create unwanted contexts, like
+ // RhythmicVoice instead of Voice. Creating a Score context,
+ // however, can't really do anything wrong.
+
+ SCM score_name = default_child_context_name ();
+ SCM score_def = find_context_def (get_output_def (), score_name);
+
+ if (Context_def *cd = unsmob_context_def (score_def))
+ {
+ if (cd->is_alias (n))
+ return create_context (cd, id, operations);
+ }
+ }
+
if (Context *existing = find_context_below (this, n, id))
return existing;
#include "grob.hh"
#include "fingering-column.hh"
-#include "box-quarantine.hh"
#include "pointer-group-interface.hh"
#include "staff-symbol-referencer.hh"
#include "item.hh"
#include "paper-column.hh"
-#include <map>
-
-// The sorting algorithm may not preserve the order of the
-// original fingerings. We use Fingering_position_info to retain
-// this order.
-
-struct Fingering_position_info {
- Box box_;
- vsize idx_;
- Fingering_position_info (Box, vsize);
-};
-
-Fingering_position_info::Fingering_position_info (Box box, vsize idx)
- : box_ (box), idx_ (idx)
-{
-}
-
-bool
-fingering_position_less (Fingering_position_info fpi0, Fingering_position_info fpi1)
-{
- return Interval::left_less (fpi0.box_[Y_AXIS], fpi1.box_[Y_AXIS]);
-}
-
MAKE_SCHEME_CALLBACK (Fingering_column, calc_positioning_done, 1);
SCM
Fingering_column::calc_positioning_done (SCM smob)
if (!me->is_live ())
return SCM_BOOL_T;
- map<Grob *, bool> shifted;
-
me->set_property ("positioning-done", SCM_BOOL_T);
extract_grob_set (me, "fingerings", const_fingerings);
common_refpoint_of_array (fingerings, me, Y_AXIS)};
Real padding = robust_scm2double (me->get_property ("padding"), 0.2);
- Box_quarantine bq (padding, Y_AXIS);
- vector<Fingering_position_info> origs;
- for (vsize i = 0; i < fingerings.size (); i++)
- {
- Interval x_ext = fingerings[i]->extent (common[X_AXIS], X_AXIS);
- // center on Y parent
- fingerings[i]->translate_axis (-fingerings[i]->extent (fingerings[i], Y_AXIS).length () / 2.0, Y_AXIS);
- Interval y_ext = fingerings[i]->extent (fingerings[i], Y_AXIS)
- + fingerings[i]->get_parent (Y_AXIS)
- ->relative_coordinate (common[Y_AXIS], Y_AXIS);
- origs.push_back(Fingering_position_info (Box (x_ext, y_ext), i));
- }
// order the fingerings from bottom to top
- vector_sort (origs, fingering_position_less);
-
- for (vsize i = 0; i < origs.size (); i++)
- bq.add_box_to_quarantine (Box (origs[i].box_));
+ vector_sort (fingerings, pure_position_less);
+
+ vector<Real> shift(fingerings.size());
+
+ // Try stacking the fingerings top-to-bottom, and then bottom-to-top.
+ // Use the average of the resulting stacked locations as the final positions
+ for (UP_and_DOWN (d))
+ {
+ Real stack_end = -d * infinity_f;
+ Interval prev_x_ext;
+ for (vsize i = (d == UP)? 0 : fingerings.size() - 1;
+ i < fingerings.size ();
+ i += d)
+ {
+ Interval x_ext = fingerings[i]->extent(common[X_AXIS], X_AXIS);
+ Interval y_ext = fingerings[i]->extent(fingerings[i], Y_AXIS);
+ Real parent_y = fingerings[i]->get_parent(Y_AXIS)
+ ->relative_coordinate(common[Y_AXIS], Y_AXIS);
+
+ // Checking only between sequential neighbors, seems good enough
+ if (!intersection(x_ext, prev_x_ext).is_empty())
+ stack_end += d * (y_ext.length() + padding);
+ // minmax() returns whichever is further along in direction d
+ stack_end = minmax(d, stack_end, parent_y);
+
+ shift[i] += 0.5 * (stack_end - y_ext[d] - parent_y);
+
+ prev_x_ext = x_ext;
+ }
+ }
- bq.solve ();
- vector<Box> news (bq.quarantined_boxes ());
-
- for (vsize i = 0; i < origs.size (); i++)
- fingerings[origs[i].idx_]->translate_axis (news[i][Y_AXIS][DOWN] - origs[i].box_[Y_AXIS][DOWN], Y_AXIS);
+ for (vsize i = 0; i < fingerings.size (); i++)
+ fingerings[i]->translate_axis(shift[i], Y_AXIS);
- return SCM_BOOL_T;
+ return SCM_BOOL_T;
}
void
fingering->set_property ("script-priority", scm_from_int (priority));
- if (!is_direction (fingering->get_property_data ("direction")))
- {
- if (d)
- fingering->set_property ("direction", scm_from_int (d));
- else
- fingering->set_property ("direction", scm_from_int (RIGHT));
- }
+ if (d)
+ fingering->set_property ("direction", scm_from_int (d));
+ else if (!is_direction (fingering->get_property_data ("direction")))
+ fingering->set_property ("direction", scm_from_int (UP));
fingerings_.push_back (fingering);
}
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "axis-group-engraver.hh"
-#include "hara-kiri-group-spanner.hh"
-#include "rhythmic-head.hh"
-#include "spanner.hh"
-
-#include "translator.icc"
-
-/*
- TODO: fold together with axis_group_engraver?
- */
-
-class Hara_kiri_engraver : public Axis_group_engraver
-{
-protected:
- virtual Spanner *get_spanner ();
- DECLARE_ACKNOWLEDGER (grob);
- virtual void add_element (Grob *e);
- void process_music ();
- virtual void derived_mark () const;
- SCM interesting_;
-public:
- TRANSLATOR_DECLARATIONS (Hara_kiri_engraver);
-};
-
-Hara_kiri_engraver::Hara_kiri_engraver ()
-{
- interesting_ = SCM_EOL;
-}
-
-void
-Hara_kiri_engraver::derived_mark () const
-{
- scm_gc_mark (interesting_);
-}
-
-void
-Hara_kiri_engraver::process_music ()
-{
- Axis_group_engraver::process_music ();
- interesting_ = get_property ("keepAliveInterfaces");
-}
-
-void
-Hara_kiri_engraver::add_element (Grob *e)
-{
- Axis_group_engraver::add_element (e);
-}
-
-Spanner *
-Hara_kiri_engraver::get_spanner ()
-{
- Spanner *sp = make_spanner ("VerticalAxisGroup", SCM_EOL);
- return sp;
-}
-
-void
-Hara_kiri_engraver::acknowledge_grob (Grob_info i)
-{
- Axis_group_engraver::acknowledge_grob (i);
- if (staffline_)
- {
- for (SCM s = interesting_; scm_is_pair (s); s = scm_cdr (s))
- {
- if (i.grob ()->internal_has_interface (scm_car (s)))
- Hara_kiri_group_spanner::add_interesting_item (staffline_, i.grob ());
- }
- }
-}
-
-ADD_ACKNOWLEDGER (Hara_kiri_engraver, grob);
-ADD_TRANSLATOR (Hara_kiri_engraver,
- /* doc */
- "Like @code{Axis_group_engraver}, but make a hara-kiri"
- " spanner, and add interesting items (i.e., note heads, lyric"
- " syllables, and normal rests).",
-
- /* create */
- "VerticalAxisGroup ",
-
- /* read */
- "keepAliveInterfaces ",
-
- /* write */
- ""
- );
-
{
public:
DECLARE_SCHEME_CALLBACK (alignment_callback, (SCM element));
- static void add_accidental (Grob *, Grob *);
+ static void add_accidental (Grob *, Grob *, bool, long);
static vector<Grob *> get_relevant_accidentals (vector<Grob *> const &elts, Grob *left);
static void split_accidentals (Grob *accs,
// with tieWaitForNote, there might be a skip between the tied notes!
void tie_to (Audio_note *, Moment skip = 0);
+ Audio_note *tie_head ();
+ virtual string to_string () const;
Pitch pitch_;
Moment length_mom_;
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef AXIS_GROUP_ENGRAVER_HH
-#define AXIS_GROUP_ENGRAVER_HH
-
-#include "engraver.hh"
-
-/**
- Put stuff in a Spanner with an Axis_group_interface.
- Use as last element of a context.
-*/
-class Axis_group_engraver : public Engraver
-{
-protected:
- Spanner *staffline_;
- vector<Grob *> elts_;
- void process_music ();
- virtual void finalize ();
- DECLARE_ACKNOWLEDGER (grob);
- void process_acknowledged ();
- virtual Spanner *get_spanner ();
- virtual void add_element (Grob *);
- virtual bool must_be_last () const;
-
-public:
- TRANSLATOR_DECLARATIONS (Axis_group_engraver);
-};
-#endif /* AXIS_GROUP_ENGRAVER_HH */
+++ /dev/null
-/*
- This file is part of LilyPond, the GNU music typesetter.
-
- Copyright (C) 2012 Mike Solomon <mike@mikesolomon.org>
-
- LilyPond is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- LilyPond is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef BOX_QUARANTINE_HH
-#define BOX_QUARANTINE_HH
-
-#include "lily-proto.hh"
-#include "std-vector.hh"
-#include "box.hh"
-
-class Box_quarantine
-{
-public:
- Box_quarantine (Real, Axis);
- void add_box_to_quarantine (Box);
- void solve ();
- vector<Box> quarantined_boxes ();
-
-private:
- vector<Box> boxes_to_quarantine_;
- Real padding_;
- Axis a_;
-};
-
-#endif // BOX_QUARANTINE_HH
SCM scopes_;
SCM start_module_;
int hidden_state_;
+ Input override_input_;
SCM eval_scm (SCM, char extra_token = 0);
public:
SCM eval_scm_token (SCM sval) { return eval_scm (sval, '#'); }
Input last_input_;
Lily_lexer (Sources *, Lily_parser *);
- Lily_lexer (Lily_lexer const &, Lily_parser *);
+ Lily_lexer (Lily_lexer const &, Lily_parser *, SCM);
int yylex ();
void add_lexed_char (int);
void prepare_for_next_token ();
int try_special_identifiers (SCM *, SCM);
Input here_input () const;
+ Input const &override_input (Input const &) const;
void add_scope (SCM);
SCM set_current_scope ();
bool ignore_version_b_;
Lily_parser (Sources *sources);
- Lily_parser (Lily_parser const &, SCM closures = SCM_EOL);
+ Lily_parser (Lily_parser const &, SCM closures = SCM_EOL,
+ SCM location = SCM_BOOL_F);
DECLARE_SCHEME_CALLBACK (layout_description, ());
class Grob;
class Grob_array;
class Grob_info;
-class Hara_kiri_engraver;
class Hara_kiri_line_group_engraver;
class Includable_lexer;
class Input;
Simple smobs are created by adding the
DECLARE_SIMPLE_SMOBS(Classname) to the declaration
+ A simple smob is only optionally under the reign of the GUILE
+ garbage collector: its usual life time is that of a normal C++
+ object. While a smobbed_copy () is fully under control of the
+ garbage collector and will have its mark_smob function called during
+ garbage collection, an automatic variable of this type will not have
+ mark_smob called, but rather have its memory image in the call stack
+ scanned for contained non-immediate SCM values. Anything requiring
+ more complex mark_smob behavior is not suitable for a simple smob.
+
+ When you create a smobbed_copy, the _copy_ is fully managed by the
+ GUILE memory system. As a corollary, multiple smobbed_copy calls
+ yield multiple GUILE objects generally not eq? to each other.
+
2. Complex smobs are objects that have an identity. These objects
carry this identity in the form of a self_scm () method, which is a
- SCM pointer to the object itself.
+ SCM pointer to the object itself. Complex smobs are always under
+ control of the GUILE memory system.
The constructor for a complex smob should have 3 steps:
yy_push_state (state);
}
else
- error (_ ("\\maininput not allowed outside init files"));
+ LexerError (_ ("\\maininput not allowed outside init files").c_str ());
}
<INITIAL,chords,lyrics,figures,notes>\\include {
}
<incl,version,sourcefilename>\"[^""]* { // backup rule
- error (_ ("end quote missing"));
- exit (1);
+ LexerError (_ ("end quote missing").c_str ());
+ yy_pop_state ();
}
/* Flex picks the longest matching pattern including trailing
chordmodifier_tab_ = scm_make_vector (scm_from_int (1), SCM_EOL);
}
-Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser)
+Lily_lexer::Lily_lexer (Lily_lexer const &src, Lily_parser *parser,
+ SCM override_input)
: Includable_lexer ()
{
parser_ = parser;
main_input_level_ = 0;
extra_tokens_ = SCM_EOL;
+ if (unsmob_input (override_input))
+ override_input_ = *unsmob_input (override_input);
smobify_self ();
return Input (*lexloc_);
}
+Input const &
+Lily_lexer::override_input (Input const &in) const
+{
+ return override_input_.get_source_file ()
+ ? override_input_ : in;
+}
+
void
Lily_lexer::prepare_for_next_token ()
{
}
LY_DEFINE (ly_parser_clone, "ly:parser-clone",
- 1, 1, 0, (SCM parser_smob, SCM closures),
+ 1, 2, 0, (SCM parser_smob, SCM closures, SCM location),
"Return a clone of @var{parser-smob}. An association list"
" of port positions to closures can be specified in @var{closures}"
" in order to have @code{$} and @code{#} interpreted in their original"
- " lexical environment.")
+ " lexical environment. If @var{location} is a valid location,"
+ " it becomes the source of all music expressions inside.")
{
LY_ASSERT_SMOB (Lily_parser, parser_smob, 1);
Lily_parser *parser = unsmob_lily_parser (parser_smob);
closures = SCM_EOL;
else
LY_ASSERT_TYPE (ly_is_list, closures, 2);
- Lily_parser *clone = new Lily_parser (*parser, closures);
+ Lily_parser *clone = new Lily_parser (*parser, closures, location);
return clone->unprotect ();
}
lexer_->unprotect ();
}
-Lily_parser::Lily_parser (Lily_parser const &src, SCM closures)
+Lily_parser::Lily_parser (Lily_parser const &src, SCM closures, SCM location)
{
lexer_ = 0;
sources_ = src.sources_;
smobify_self ();
if (src.lexer_)
{
- lexer_ = new Lily_lexer (*src.lexer_, this);
+ lexer_ = new Lily_lexer (*src.lexer_, this, location);
+ lexer_->unprotect ();
}
-
- lexer_->unprotect ();
}
Lily_parser::~Lily_parser ()
Midi_walker::process ()
{
Audio_item *audio = items_[index_];
- do_stop_notes (audio->audio_column_->ticks ());
+ Audio_column *col = audio->get_column ();
+ do_stop_notes (col->ticks ());
if (Midi_item *midi = get_midi (audio))
{
notes_.push_back (p);
/*
- shorten previous note.
+ Shorten previous note. If it was part of a tie, shorten
+ the first note in the tie.
*/
if (now_mom ().grace_part_)
{
if (last_start_.grace_part_ == Rational (0))
{
for (vsize i = 0; i < last_notes_.size (); i++)
- last_notes_[i]->length_mom_ += Moment (0,
- now_mom ().grace_part_);
+ {
+ Audio_note *tie_head = last_notes_[i]->tie_head ();
+ tie_head->length_mom_ += Moment (0, now_mom ().grace_part_);
+ }
}
}
}
%{
-#define MY_MAKE_MUSIC(x, spot) make_music_with_input (ly_symbol2scm (x), spot)
+#define MY_MAKE_MUSIC(x, spot) \
+ make_music_with_input (ly_symbol2scm (x), \
+ parser->lexer_->override_input (spot))
/* ES TODO:
- Don't use lily module, create a new module instead.
#define LOWLEVEL_MAKE_SYNTAX(proc, args) \
scm_apply_0 (proc, args)
/* Syntactic Sugar. */
-#define MAKE_SYNTAX(name, location, ...) \
- LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant (name), scm_list_n (parser->self_scm (), make_input (location) , ##__VA_ARGS__, SCM_UNDEFINED))
+#define MAKE_SYNTAX(name, location, ...) \
+ LOWLEVEL_MAKE_SYNTAX (ly_lily_module_constant (name), scm_list_n (parser->self_scm (), make_input (parser->lexer_->override_input (location)), ##__VA_ARGS__, SCM_UNDEFINED))
#define START_MAKE_SYNTAX(name, ...) \
scm_list_n (ly_lily_module_constant (name) , ##__VA_ARGS__, SCM_UNDEFINED)
#define FINISH_MAKE_SYNTAX(start, location, ...) \
- LOWLEVEL_MAKE_SYNTAX (scm_car (start), scm_cons2 (parser->self_scm (), make_input (location), scm_append_x (scm_list_2 (scm_cdr (start), scm_list_n (__VA_ARGS__, SCM_UNDEFINED)))))
+ LOWLEVEL_MAKE_SYNTAX (scm_car (start), scm_cons2 (parser->self_scm (), make_input (parser->lexer_->override_input (location)), scm_append_x (scm_list_2 (scm_cdr (start), scm_list_n (__VA_ARGS__, SCM_UNDEFINED)))))
SCM get_next_unique_context_id ();
SCM get_next_unique_lyrics_context_id ();
mus = mus->clone ();
*destination = mus->self_scm ();
unsmob_music (*destination)->
- set_property ("origin", make_input (last_input_));
+ set_property ("origin",
+ make_input (override_input (last_input_)));
bool is_event = mus->is_mus_type ("post-event");
mus->unprotect ();
#include "warn.hh"
#include "translator-group.hh"
#include "global-context.hh"
+#include "moment.hh"
void
Timing_translator::stop_translation_timestep ()
context ()->set_property ("currentBarNumber", barnumber);
context ()->set_property ("internalBarNumber", barnumber);
- context ()->set_property ("timeSignatureFraction",
- timing->get_property ("timeSignatureFraction"));
+ SCM timeSignatureFraction = timing->get_property ("timeSignatureFraction");
+
+ if (!scm_is_pair (timeSignatureFraction))
+ {
+ programming_error ("missing timeSignatureFraction");
+ timeSignatureFraction = scm_cons (scm_from_int (4), scm_from_int (4));
+ }
+ context ()->set_property ("timeSignatureFraction", timeSignatureFraction);
+
+ SCM measureLength = timing->get_property ("measureLength");
+
+ if (!unsmob_moment (measureLength))
+ {
+ measureLength =
+ Moment (ly_scm2rational
+ (scm_divide (scm_car (timeSignatureFraction),
+ scm_cdr (timeSignatureFraction)))).smobbed_copy ();
+ }
+ context ()->set_property ("measureLength", measureLength);
+
/*
Do not init measurePosition; this should be done from global
context.
*/
- context ()->set_property ("measureLength",
- timing->get_property ("measureLength"));
- context ()->set_property ("baseMoment",
- timing->get_property ("baseMoment"));
+
+ SCM timeSignatureSettings = timing->get_property ("timeSignatureSettings");
+ if (!scm_is_pair (timeSignatureSettings))
+ {
+ programming_error ("missing timeSignatureSettings");
+ // A memoized constant is not the prettiest thing as a fallback
+ // since it does not track changes of the variable. However,
+ // this is still better than nothing, and we already complained
+ // via a programming_error
+ timeSignatureSettings = ly_lily_module_constant ("default-time-signature-settings");
+ }
+ context ()->set_property ("timeSignatureSettings", timeSignatureSettings);
+
+ SCM beamExceptions = timing->get_property ("beamExceptions");
+ if (!scm_is_pair (beamExceptions))
+ {
+ beamExceptions =
+ scm_call_2 (ly_lily_module_constant ("beam-exceptions"),
+ timeSignatureFraction,
+ timeSignatureSettings);
+ }
+ context ()->set_property ("beamExceptions", beamExceptions);
+
+ SCM baseMoment = timing->get_property ("baseMoment");
+ if (!unsmob_moment (baseMoment))
+ {
+ baseMoment =
+ Moment (ly_scm2rational
+ (scm_call_2 (ly_lily_module_constant ("base-length"),
+ timeSignatureFraction,
+ timeSignatureSettings))).smobbed_copy ();
+ }
+ context ()->set_property ("baseMoment", baseMoment);
+
+ SCM beatStructure = timing->get_property ("beatStructure");
+ if (!scm_is_pair (beatStructure))
+ {
+ beatStructure =
+ scm_call_3 (ly_lily_module_constant ("beat-structure"),
+ ly_rational2scm (unsmob_moment (baseMoment)->main_part_),
+ timeSignatureFraction,
+ timeSignatureSettings);
+ }
+ context ()->set_property ("beatStructure", beatStructure);
+
+ context ()->set_property ("beamHalfMeasure",
+ timing->get_property ("beamHalfMeasure"));
+
+ context ()->set_property ("autoBeaming",
+ timing->get_property ("autoBeaming"));
}
Rational
void
Tuplet_iterator::construct_children ()
{
- spanner_duration_ = music_get_length ();
+ if (Duration *d = unsmob_duration (get_music ()->get_property ("duration")))
+ spanner_duration_ = d->get_length ();
+ else
+ {
+ spanner_duration_ = music_get_length ();
- Moment *mp
- = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration"));
- if (mp)
- spanner_duration_ = min (mp->main_part_, spanner_duration_);
+ Moment *mp
+ = unsmob_moment (get_outlet ()->get_property ("tupletSpannerDuration"));
+ if (mp)
+ spanner_duration_ = min (mp->main_part_, spanner_duration_);
+ }
Music_wrapper_iterator::construct_children ();
% * Add Mordents (reported by Patrick Karl)
%
-\version "2.16.0"
+\version "2.17.11"
#(use-modules (srfi srfi-1))
#(use-modules (srfi srfi-11))
% How much to slow down for a rall. or a poco rall.
% (or speed up for accel or poco accel)
-#(define ac:rallFactor (ly:make-moment 60 100)) % 40% slowdown
-#(define ac:pocoRallFactor (ly:make-moment 90 100)) % 10% slowdown
+#(define ac:rallFactor (ly:make-moment 60/100)) % 40% slowdown
+#(define ac:pocoRallFactor (ly:make-moment 90/100)) % 10% slowdown
% The absolute time for a twiddle in a trill, in minutes.
% Start with 1/4 seconds == 1/240 minutes
-#(define ac:maxTwiddleTime (ly:make-moment 1 240))
+#(define ac:maxTwiddleTime (ly:make-moment 1/240))
% How long ordinary grace notes should be relative to their notated
% duration. 9/40 is LilyPond's built-in behaviour for MIDI output
(cons 6 0))))
-#(define ac:currentTempo (ly:make-moment 15 1)) % 4 = 60, measured wholes per minute
+#(define ac:currentTempo (ly:make-moment 15/1)) % 4 = 60, measured wholes per minute
#(define ac:lastTempo ac:currentTempo) % for 'a tempo' or 'tempo I'
% The duration of the current note. Start at a crotchet
% for no good reason.
-#(define ac:currentDuration (ly:make-duration 2 0 1 1))
+#(define ac:currentDuration (ly:make-duration 2 0 1/1))
% Amount of musical time (in whole notes) that we need to steal from the
% next events seen.
pre-t
(let loop ((len (ly:music-length music)))
(if (ly:moment<? t len)
- (loop (ly:moment-mul len (ly:make-moment 1 2)))
+ (loop (ly:moment-mul len (ly:make-moment 1/2)))
len)))))
#(define (ac:trill music)
" Replace music with time-compressed repeats of the music,
maybe accelerating if the length is longer than a crotchet "
- (let* ((hemisemidur (ly:make-duration 5 0 1 1))
+ (let* ((hemisemidur (ly:make-duration 5 0 1/1))
(orig-len (ly:music-length music))
(t (ac:twiddletime music))
(uppernote '())
- (note_moment (ly:moment-mul t (ly:make-moment 1 2)))
+ (note_moment (ly:moment-mul t (ly:make-moment 1/2)))
(c1 (ly:moment-div orig-len note_moment))
(c2 (inexact->exact
(round (/ (ly:moment-main-numerator c1)
'metronome-count
tempo
'tempo-unit
- (ly:make-duration 0 0 1 1))
+ (ly:make-duration 0 0 1/1))
(context-spec-music
(make-property-set 'tempoWholesPerMinute tempo) 'Score))))
; We implement as a half-shake.
(let*
((totallength (ly:music-length music))
- (newlen (ly:moment-sub totallength (ly:make-moment 3 32)))
+ (newlen (ly:moment-sub totallength (ly:make-moment 3/32)))
(newdur (ly:make-duration
0 0
(ly:moment-main-numerator newlen)
(ly:moment-main-denominator newlen)))
- (gracedur (ly:make-duration 5 0 1 1))
+ (gracedur (ly:make-duration 5 0 1/1))
(gracenote (ly:music-deep-copy music))
(abovenote (ly:music-deep-copy music))
(mainnote (ly:music-deep-copy music))
((totaldur (ly:music-property
(car (ly:music-property music 'elements)) 'duration))
(dur (ly:duration-length totaldur))
- (newlen (ly:moment-sub dur (ly:make-moment 2 32)))
+ (newlen (ly:moment-sub dur (ly:make-moment 2/32)))
(newdur (ly:make-duration
0 0
(ly:moment-main-numerator newlen)
(music-map (lambda (n)
(if (eq? 'NoteEvent (ly:music-property n 'name))
(set! (ly:music-property n 'duration)
- (ly:make-duration 5 0 1 1)))
+ (ly:make-duration 5 0 1/1)))
n)
mordent)
(music-map (lambda (n)
(main-orig-len (ly:music-length main))
(numerator (ly:moment-main-numerator maindur))
(factor (if (eq? (remainder numerator 3) 0)
- (ly:make-moment 1 3) (ly:make-moment 1 2))))
+ (ly:make-moment 1/3) (ly:make-moment 1/2))))
(ly:music-compress grace
(ly:moment-mul factor (ly:moment-div main-orig-len grace-orig-len)))
- (ly:music-compress main (ly:moment-sub (ly:make-moment 1 1) factor))
+ (ly:music-compress main (ly:moment-sub (ly:make-moment 1/1) factor))
(set! (ly:music-property grace 'elements)
(append (ly:music-property grace 'elements)
\version "2.17.6"
RemoveEmptyStaves = \with {
- \remove "Axis_group_engraver"
- % If RemoveEmptyStaves is called twice, two
- % Hara_kiri_engravers would be added, which leads to a
- % warning.
- % This code makes sure that no previous Hara_kiri_engraver
- % is left before adding a new one.
- \remove "Hara_kiri_engraver"
- \consists "Hara_kiri_engraver"
\override VerticalAxisGroup.remove-empty = ##t
\description "Remove staves which are considered to be empty according
to the list of interfaces set by @code{keepAliveInterfaces}."
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.17.6"
+\version "2.17.11"
\context {
\name "Global"
\consists "Fretboard_engraver"
\consists "Output_property_engraver"
- \consists "Hara_kiri_engraver"
+ \consists "Axis_group_engraver"
\consists "Separating_line_group_engraver"
\consists "Font_size_engraver"
\consists "Instrument_name_engraver"
\consists "Figured_bass_position_engraver"
\consists "Script_row_engraver"
\consists "Cue_clef_engraver"
+ \consists "Fingering_column_engraver"
localKeySignature = #'()
createSpacing = ##t
\consists "Script_engraver"
\consists "Script_column_engraver"
- \consists "Fingering_column_engraver"
\consists "Rhythmic_column_engraver"
\consists "Note_spacing_engraver"
\consists "Spanner_break_forbid_engraver"
\consists "Stanza_number_engraver"
\consists "Instrument_name_engraver"
\consists "Font_size_engraver"
- \consists "Hara_kiri_engraver"
+ \consists "Axis_group_engraver"
\consists "Pure_from_neighbor_engraver"
searchForVoice = ##f
%% explicitly set instrument, so it is not inherited from the parent
\consists "Output_property_engraver"
\consists "Separating_line_group_engraver"
\consists "Chord_name_engraver"
- \consists "Hara_kiri_engraver"
+ \consists "Axis_group_engraver"
% \consists "Note_spacing_engraver"
+
\override VerticalAxisGroup.remove-first = ##t
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.staff-affinity = #DOWN
repeatCountVisibility = #all-repeat-counts-visible
+%% Other Timing variables are derived and set by the Timing_translator
+%% at initialization time by calling the functions in
+%% scm/time-signature-settings.scm
+
timeSignatureSettings = #default-time-signature-settings
timeSignatureFraction = 4/4
-%% These defaults should be the same as the rules established in
-%% scm/time-signature-settings.scm for 4/4 time
- measureLength = #(ly:make-moment 4 4)
- baseMoment = #(ly:make-moment 1 4)
- beatStructure = #'(1 1 1 1)
- beamExceptions = #'((end . (((1 . 8) . (4 4))
- ((1 . 12) . (3 3 3 3)))))
beamHalfMeasure = ##t
autoBeaming = ##t
\consists "Figured_bass_engraver"
\consists "Separating_line_group_engraver"
- \consists "Hara_kiri_engraver"
+ \consists "Axis_group_engraver"
\override VerticalAxisGroup.remove-empty = ##t
\override VerticalAxisGroup.remove-first = ##t
however they want (half duration, quarter duration? before beat,
after beat? etc.)."
(if
- (eq? 0 (ly:moment-grace-numerator moment))
+ (zero? (ly:moment-grace-numerator moment))
(ly:format "~a" (format-moment moment))
;; grace notes have a negative numerator, so no "-" necessary
(ly:format
$Id$
%}
-\version "2.17.6"
+\version "2.17.11"
%
% Declare memorable shortcuts for special unicode characters
%%% causes tons of "programming error: adding reverse spring,
%%% setting to unit" messages.
%%%
- %\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 4)
+ %\override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/4)
%\override SpacingSpanner.shortest-duration-space = #0
%\override SpacingSpanner.average-spacing-wishes = ##f
%\override SpacingSpanner.spacing-increment = #0.0
#(note-names-language parser default-language)
#(ly:set-option 'old-relative #f)
+#(define location #f)
#(define toplevel-scores (list))
#(define toplevel-bookparts (list))
#(define $defaultheader #f)
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.17.6"
+\version "2.17.11"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
(extract-typed-music music 'span-event)))
(stop-span-evs
(map (lambda (m)
- (let ((c (music-clone m)))
- (set! (ly:music-property c 'span-direction) STOP)
- c))
- start-span-evs))
+ (music-clone m 'span-direction STOP))
+ start-span-evs))
(end-ev-chord (make-music 'EventChord
'elements stop-span-evs))
(total (make-music 'SequentialMusic
argument))
+finger =
+#(define-event-function (parser location finger) (number-or-markup?)
+ (_i "Apply @var{finger} as a fingering indication.")
+
+ (make-music
+ 'FingeringEvent
+ (if (number? finger) 'digit 'text)
+ finger))
+
footnote =
#(define-music-function (parser location mark offset footnote item)
((markup?) number-pair? markup? symbol-list-or-music?)
C = { e e | f f | }
@end verbatim
")
- (let* ((voices (apply circular-list (make-list (length voice-ids) (list))))
- (current-voices voices)
- (current-sequence (list))
- (original music)
- (wrapper #f))
- ;;
- ;; utilities
- (define (push-music m)
- "Push the music expression into the current sequence"
- (set! current-sequence (cons m current-sequence)))
- (define (change-voice)
- "Stores the previously built sequence into the current voice and
+ (define (bar-check? m)
+ "Checks whether m is a bar check."
+ (eq? (ly:music-property m 'name) 'BarCheck))
+ (define (recurse-and-split music)
+ "This returns either a list of music split along barchecks, or
+@code{#f}."
+ (let ((elt (ly:music-property music 'element))
+ (elts (ly:music-property music 'elements)))
+ (cond ((ly:music? elt)
+ (let ((lst (recurse-and-split elt)))
+ (and lst
+ (map
+ (lambda (x)
+ (let ((res (music-clone music 'element x)))
+ (if (ly:input-location?
+ (ly:music-property x 'origin))
+ (set! (ly:music-property res 'origin)
+ (ly:music-property x 'origin)))
+ res))
+ lst))))
+ ((any bar-check? elts)
+ (let* ((voices (apply circular-list
+ (make-list (length voice-ids)
+ '())))
+ (current-voices voices)
+ (current-sequence '()))
+ ;;
+ ;; utilities
+ (define (push-music m)
+ "Push the music expression into the current sequence"
+ (set! current-sequence (cons m current-sequence)))
+ (define (change-voice)
+ "Stores the previously built sequence into the current voice and
change to the following voice."
- (list-set! current-voices 0 (cons (make-music 'SequentialMusic
- 'elements (reverse! current-sequence))
- (car current-voices)))
- (set! current-sequence (list))
- (set! current-voices (cdr current-voices)))
- (define (bar-check? m)
- "Checks whether m is a bar check."
- (eq? (ly:music-property m 'name) 'BarCheck))
- (define (music-origin music)
- "Recursively search an origin location stored in music."
- (cond ((null? music) #f)
- ((not (null? (ly:music-property music 'origin)))
- (ly:music-property music 'origin))
- (else (or (music-origin (ly:music-property music 'element))
- (let ((origins (remove not (map music-origin
- (ly:music-property music 'elements)))))
- (and (not (null? origins)) (car origins)))))))
- (while (music-is-of-type? music 'music-wrapper-music)
- (set! wrapper music)
- (set! music (ly:music-property wrapper 'element)))
- (if wrapper
- (set! (ly:music-property wrapper 'element)
- (make-music 'SequentialMusic
- 'origin location))
- (set! original
- (make-music 'SequentialMusic
- 'origin location)))
- ;;
- ;; first, split the music and fill in voices
- ;; We flatten direct layers of SequentialMusic since they are
- ;; pretty much impossible to avoid when writing music functions.
- (let rec ((music music))
- (for-each (lambda (m)
- (if (eq? (ly:music-property m 'name) 'SequentialMusic)
- (rec m)
- (begin
- (push-music m)
- (if (bar-check? m) (change-voice)))))
- (ly:music-property music 'elements)))
- (if (not (null? current-sequence)) (change-voice))
- ;; un-circularize `voices' and reorder the voices
- (set! voices (map-in-order (lambda (dummy seqs)
- (reverse! seqs))
- voice-ids voices))
- ;;
- ;; set origin location of each sequence in each voice
- ;; for better type error tracking
- (for-each (lambda (voice)
- (for-each (lambda (seq)
- (set! (ly:music-property seq 'origin)
- (or (music-origin seq) location)))
- voice))
- voices)
- ;;
- ;; check sequence length
- (apply for-each (lambda* (#:rest seqs)
- (let ((moment-reference (ly:music-length (car seqs))))
- (for-each (lambda (seq moment)
- (if (not (equal? moment moment-reference))
- (ly:music-warning seq
- "Bars in parallel music don't have the same length")))
- seqs (map-in-order ly:music-length seqs))))
- voices)
- ;;
- ;; bind voice identifiers to the voices
- (for-each (lambda (voice-id voice)
- (ly:parser-define! parser voice-id
- (let ((v (ly:music-deep-copy original)))
- (set! (ly:music-property
- (car (extract-named-music
- v 'SequentialMusic))
- 'elements) voice)
- v)))
- voice-ids voices)))
+ (set-car! current-voices
+ (cons (reverse! current-sequence)
+ (car current-voices)))
+ (set! current-sequence '())
+ (set! current-voices (cdr current-voices)))
+ (for-each (lambda (m)
+ (let ((split? (recurse-and-split m)))
+ (if split?
+ (for-each
+ (lambda (m)
+ (push-music m)
+ (change-voice))
+ split?)
+ (begin
+ (push-music m)
+ (if (bar-check? m) (change-voice))))))
+ elts)
+ (if (pair? current-sequence) (change-voice))
+ ;; un-circularize `voices' and reorder the voices
+
+ (set! voices (map reverse!
+ (list-head voices (length voice-ids))))
+
+ ;; check sequence length
+ (apply for-each (lambda seqs
+ (define (seq-len seq)
+ (reduce ly:moment-add
+ (ly:make-moment 0)
+ (map ly:music-length seq)))
+ (let ((moment-reference (seq-len (car seqs))))
+ (for-each (lambda (seq)
+ (if (not (equal? (seq-len seq)
+ moment-reference))
+ (ly:music-warning
+ (if (pair? seq)
+ (last seq)
+ (caar seqs))
+ (_ "Bars in parallel music don't have the same length"))))
+ seqs)))
+ voices)
+ (map
+ (lambda (lst)
+ (set! lst (concatenate! lst))
+ (let ((res (music-clone music 'elements lst)))
+ (if (and (pair? lst)
+ (ly:input-location? (ly:music-property
+ (car lst)
+ 'origin)))
+ (set! (ly:music-property res 'origin)
+ (ly:music-property (car lst) 'origin)))
+ res))
+ voices)))
+ (else #f))))
+ (let ((voices (recurse-and-split music)))
+ (if voices
+ ;;
+ ;; bind voice identifiers to the voices
+ (for-each (lambda (voice-id voice)
+ (ly:parser-define! parser voice-id voice))
+ voice-ids voices)
+ (ly:music-warning music
+ (_ "ignoring parallel music without barchecks")))))
parenthesize =
#(define-music-function (parser loc arg) (ly:music?)
(revert-time-signature-setting time-signature))
rightHandFinger =
-#(define-event-function (parser location finger) (number-or-string?)
+#(define-event-function (parser location finger) (number-or-markup?)
(_i "Apply @var{finger} as a fingering indication.")
(make-music
'StrokeFingerEvent
- 'origin location
- (if (string? finger) 'text 'digit)
+ (if (number? finger) 'digit 'text)
finger))
scaleDurations =
(ly:pitch-negate pitch))
'Staff))
+tuplet =
+#(define-music-function (parser location ratio tuplet-span music)
+ (fraction? (ly:duration? '()) ly:music?)
+ (_i "Scale the given @var{music} to tuplets. @var{ratio} is a
+fraction that specifies how many notes are played in place of the
+nominal value: it will be @samp{3/2} for triplets, namely three notes
+being played in place of two. If the optional duration
+@var{tuplet-span} is specified, it is used instead of
+@code{tupletSpannerDuration} for grouping the tuplets.
+For example,
+@example
+\\tuplet 3/2 4 @{ c8 c c c c c @}
+@end example
+will result in two groups of three tuplets, each group lasting for a
+quarter note.")
+ (make-music 'TimeScaledMusic
+ 'element (ly:music-compress
+ music
+ (ly:make-moment (cdr ratio) (car ratio)))
+ 'numerator (cdr ratio)
+ 'denominator (car ratio)
+ 'duration tuplet-span))
+
+tupletSpan =
+#(define-music-function (parser location tuplet-span)
+ ((ly:duration?))
+ (_i "Set @code{tupletSpannerDuration}, the length into which
+@code{\\tuplet} without an explicit @samp{tuplet-span} argument of its
+own will group its tuplets, to the duration @var{tuplet-span}. To
+revert to the default of not subdividing the contents of a @code{\\tuplet}
+command without explicit @samp{tuplet-span}, use
+@example
+\\tupletSpan \\default
+@end example
+")
+ (if tuplet-span
+ #{ \set tupletSpannerDuration = #(ly:duration-length tuplet-span) #}
+ #{ \unset tupletSpannerDuration #}))
+
tweak =
#(define-music-function (parser location prop value item)
(symbol-list-or-symbol? scheme? symbol-list-or-music?)
%%%% You should have received a copy of the GNU General Public License
%%%% along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
-\version "2.16.0"
+\version "2.17.11"
%%
%% setup for Request->Element conversion.
\name Score
melismaBusyProperties = #default-melisma-properties
- autoBeaming = ##t % needed for consistent melismata with engravers
instrumentName = #"bright acoustic"
midiChannelMapping = #'staff
%% quarter = 60
- tempoWholesPerMinute = #(ly:make-moment 15 1)
+ tempoWholesPerMinute = #(ly:make-moment 15/1)
\accepts Staff
\accepts DrumStaff
%% Timing variables in layout definitions before any
%% Timing_translator has been run.
+ timeSignatureSettings = #default-time-signature-settings
timeSignatureFraction = 4/4
+ autoBeaming = ##t % needed for consistent melismata with engravers
-%% These defaults should be the same as the rules established in
-%% scm/time-signature-settings.scm for 4/4 time
- measureLength = #(ly:make-moment 4 4)
- baseMoment = #(ly:make-moment 1 4)
+ %% Other beaming variables are not important as autobeams don't affect
+ %% the Midi. Melismata are only affected by beams when autobeaming
+ %% is switched off.
\consists "Timing_translator"
staccato = #(make-articulation "staccato")
stopped = #(make-articulation "stopped")
tenuto = #(make-articulation "tenuto")
-thumb = \tweak text \markup \scale #(cons (magstep 5) (magstep 5))
- \musicglyph #"scripts.thumb"
- #(make-music 'FingeringEvent)
+thumb = \finger \markup \scale #(cons (magstep 5) (magstep 5))
+ \musicglyph #"scripts.thumb"
trill = #(make-articulation "trill")
turn = #(make-articulation "turn")
upbow = #(make-articulation "upbow")
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or you can redistribute it under
+% the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1998--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or you can redistribute it under
+% the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% to automate generation of the lily tables.
% The output should be parsed by the mf-to-table script.
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
% Jan Nieuwenhuizen <janneke@gnu.org>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Jan Nieuwenhuizen <janneke@gnu.org>,
% Juergen Reuter <reuter@ipd.uka.de>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% & Han-Wen Nienhuys <hanwen@xs4all.nl>
% & Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Voor Cup
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Jan Nieuwenhuizen <janneke@gnu.org>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Jan Nieuwenhuizen <janneke@gnu.org>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2011--2012 Bertrand Bordage <bordage.bertrand@gmail.com>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 1998--2012 Mats Bengtsson <matsb@s3.kth.se>,
% Christian Mondrup <scancm@biobase.dk>
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1998--2012 Jan Nieuwenhuizen <janneke@gnu.org>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2000--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2006--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 2001--2012 Juergen Reuter <reuter@ipd.uka.de>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
%
% Copyright (C) 1997--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Neo-mensural heads originally by
% Christian Mondrup and Mats Bengtsson
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Christian Mondrup and Mats Bengtsson.
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
%
%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% Christian Mondrup <scancm@biobase.dk>
% Copyright (C) 2002--2012 Juergen Reuter <reuter@ipd.uka.de>
%
-%
-% LilyPond is free software: you can redistribute it and/or modify
+% The LilyPond font 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.
+% (at your option) any later version, or under the SIL Open Font License.
%
% LilyPond is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
#~ msgid "setbeatGrouping. Use baseMoment and beatStructure.\n"
#~ msgstr "setbeatGrouping. Použít baseMoment a beatStructure.\n"
-#~| msgid "Usage: %s"
#~ msgid "success: %s"
#~ msgstr "Úspěch: %s"
#~ msgid "second argument must be pitch list"
#~ msgstr "Druhý argument musí být seznam výšek tónů"
-#~| msgid "warning: "
#~ msgid "warning:"
#~ msgstr "Varování:"
#: book_latex.py:188
#, python-format
msgid "Running `%s' on file `%s' to detect default page settings.\n"
-msgstr "Aplikado de '%s' al la dosiero '%s' por detekti originalajn paĝ-agordojn.\n"
+msgstr "Aplikado de '%s' al la dosiero '%s' por detekti apriorajn paĝ-agordojn.\n"
#: book_latex.py:209 book_texinfo.py:228
msgid "Unable to auto-detect default settings:\n"
-msgstr "Ne eblas mem detekti originalajn agordojn:\n"
+msgstr "Ne eblas aŭtomate detekti apriorajn agordojn:\n"
#: book_latex.py:221 book_texinfo.py:240
#, python-format
"Unable to auto-detect default settings:\n"
"%s"
msgstr ""
-"Ne eblas mem detekti originalajn agordojn:\n"
+"Ne eblas aŭtomate detekti apriorajn agordojn:\n"
"%s"
#: book_snippets.py:406
#, python-format
msgid "deprecated ly-option used: %s=%s"
-msgstr "evitinda ly-elektilo estis uzata: %s=%s"
+msgstr "evitinda ly-modifilo estis uzata: %s=%s"
#: book_snippets.py:408
#, python-format
msgid "compatibility mode translation: %s=%s"
-msgstr "tradukado je kongrua reĝimo: %s=%s"
+msgstr "kongru-reĝima traduko: %s=%s"
#: book_snippets.py:411
#, python-format
msgid "deprecated ly-option used: %s"
-msgstr "evitinda ly-elektilo estis uzata: %s"
+msgstr "evitinda ly-modifilo estis uzata: %s"
#: book_snippets.py:413
#, python-format
#: book_snippets.py:530
#, python-format
msgid "ignoring unknown ly option: %s"
-msgstr "preterpaso de nekonata ly-elektilo: %s"
+msgstr "preterpaso de nekonata ly-modifilo: %s"
#: book_snippets.py:621
#, python-format
#: book_snippets.py:651
#, python-format
msgid "Could not overwrite file %s"
-msgstr "Ne eblis reskribi sur dosiero: %s"
+msgstr "Ne eblis anstataŭigi la dosieron %s"
#: book_snippets.py:738
#, python-format
#: book_texinfo.py:206
#, python-format
msgid "Running texi2pdf on file %s to detect default page settings.\n"
-msgstr "Aplikado de texi2pdf al la dosiero %s por detekti originalajn paĝ-agordojn.\n"
+msgstr "Aplikado de texi2pdf al la dosiero %s por detekti apriorajn paĝ-agordojn.\n"
#: convertrules.py:12
#, python-format
#: convertrules.py:13
msgid "Please refer to the manual for details, and update manually."
-msgstr "Bonvolu iri al la gvidlibro por pli da detaloj, kaj ĝisdatigu malaŭtomate."
+msgstr "Bonvole konsultu la gvidlibron por pli da detaloj, kaj ĝisdatigu malaŭtomate."
#: convertrules.py:14
#, python-format
msgid "%s has been replaced by %s"
-msgstr "%s estis anstataŭigata per %s"
+msgstr "%s estas anstataŭigita per %s"
#: convertrules.py:24 lilylib.py:136 warn.cc:223
#, c-format, python-format
#: convertrules.py:548
msgid "point-and-click argument changed to procedure."
-msgstr "argumento 'point-and-click' ŝanĝis al 'procedure'."
+msgstr "argumento 'point-and-click' ŝanĝis al proceduro."
#: convertrules.py:590
msgid "semicolons removed"
-msgstr "komo-punktoj estis forigataj"
+msgstr "komo-punktoj estas forigitaj"
#. 40 ?
#: convertrules.py:633
#: convertrules.py:1316
msgid "attempting automatic \\figures conversion. Check results!"
-msgstr "provado aŭtomate konverti \\figures. Kontrolu la rezultojn!"
+msgstr "ni provas aŭtomatan konverton de \\figures. Kontrolu la rezultojn!"
#: convertrules.py:1362
msgid "Use Scheme code to construct arbitrary note events."
#: convertrules.py:2100
#, python-format
msgid "Do something like: %s"
-msgstr "Faru ion simila al: %s"
+msgstr "Faru ion similan al: %s"
#: convertrules.py:2103
msgid "Or save as UTF-8 in your editor"
#: lilylib.py:194 lilylib.py:255
#, python-format
msgid "Invoking `%s'"
-msgstr "Alvokado de '%s'"
+msgstr "Alvoko de '%s'"
#: lilylib.py:196 lilylib.py:257
#, python-format
#: musicexp.py:224 musicexp.py:229
msgid "Language does not support microtones contained in the piece"
-msgstr "La lingvo de subtenas la mikrotonojn en la muziko"
+msgstr "La lingvo ne subtenas la mikrotonojn en la muziko"
#: musicexp.py:491
msgid "Tuplet brackets of curved shape are not correctly implemented"
#: abc2ly.py:1386 convert-ly.py:84 lilypond-book.py:122 midi2ly.py:1044
#, python-format
msgid "%s [OPTION]... FILE"
-msgstr "%s [ELEKTILO]... DOSIERO"
+msgstr "%s [MODIFILO]... DOSIERO"
#: abc2ly.py:1387
#, python-format
#: abc2ly.py:1410
msgid "suppress progress messages"
-msgstr "forigi mesaĝojn pri progreso"
+msgstr "formeti mesaĝojn pri progreso"
#. Translators, please translate this string as
#. "Report bugs in English via %s",
#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:249
#, c-format, python-format
msgid "Report bugs via %s"
-msgstr "Raportu misojn per %s (angle)"
+msgstr "Raportu program-misojn per %s (angle)"
#: convert-ly.py:46
msgid ""
#: convert-ly.py:101
msgid "start from VERSION [default: \\version found in file]"
-msgstr "komenci el VERSIO [apriore: \\version estis trovata en dosiero]"
+msgstr "komenci el VERSIO [aprioras \\version, trovita en la dosiero]"
#: convert-ly.py:104
msgid "edit in place"
#: convert-ly.py:108 lilypond-book.py:179 musicxml2ly.py:2627
msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS (default), DEBUG)"
-msgstr "Printi protokolajn mesaĝojn laŭ PROTOKOLNIVELO (NONE, ERROR, WARNING, PROGRESS (apriore), DEBUG)"
+msgstr "Montri protokolajn mesaĝojn laŭ PROTOKOLNIVELO (NONE, ERROR, WARNING, PROGRESS (apriore), DEBUG)"
#: convert-ly.py:110 lilypond-book.py:163 lilypond-book.py:181
#: musicxml2ly.py:2629 main.cc:131
#: convert-ly.py:128
msgid "only update \\version number if file is modified"
-msgstr "nur ĝisdatigi la numeron de \version se la dosiero estas modifita"
+msgstr "nur ĝisdatigi la numeron de \\version se la dosiero estas modifita"
#: convert-ly.py:134
#, python-format
#: etf2ly.py:1197
#, python-format
msgid "%s [OPTION]... ETF-FILE"
-msgstr "%s [ELEKTILO]... ETF-DOSIERO"
+msgstr "%s [MODIFILO]... ETF-DOSIERO"
#: etf2ly.py:1198
msgid ""
#: lilypond-book.py:130
msgid "pipe snippets through FILTER [default: `convert-ly -n -']"
-msgstr "dukti kodaĵojn tra FILTRO [apriore: convert-ly -n -]"
+msgstr "dukti kodaĵojn tra FILTRO [apriore: 'convert-ly -n -']"
#: lilypond-book.py:134
msgid "use output format FORMAT (texi [default], texi-html, latex, html, docbook)"
#: lilypond-book.py:142
msgid "add DIR to include path"
-msgstr "aldoni UJO al la inkluziva vojo"
+msgstr "aldoni UJOn al la inkluziva vojo"
#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:122
#: lilypond-book.py:148
msgid "format Texinfo output so that Info will look for images of music in DIR"
-msgstr "strukturigi eligon Texinfo tiel ke Info serĉos bildojn de muziko en UJO"
+msgstr "strukturigi eligon de Texinfo tiel ke Info serĉos bildojn de muziko en UJO"
#: lilypond-book.py:155
msgid "PAD"
-msgstr "SHOV"
+msgstr "ŜOVO"
#: lilypond-book.py:157
msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
#: lilypond-book.py:173
msgid "Load the additional python PACKAGE (containing e.g. a custom output format)"
-msgstr "Ŝargi je la kroma PAKO de python (enhavanta ekz. propran elig-formon)"
+msgstr "Ŝargi je la kroma PAKO de python (enhavanta ekz. personigitan elig-formon)"
#: lilypond-book.py:174
msgid "PACKAGE"
"case --pdf option is set instead of pdflatex"
msgstr ""
"lanĉi la programon PROG anstataŭ latex, aŭ okaze\n"
-"de elektilo --pdf estos uzata, anstataŭ pdflatex"
+"de modifilo --pdf estos uzata, anstataŭ pdflatex"
#: lilypond-book.py:241 lilypond-book.py:246
msgid "PROG"
#: midi2ly.py:94
msgid "Exiting... "
-msgstr "Elirado... "
+msgstr "Ni haltas... "
#: midi2ly.py:835
msgid "found more than 5 voices on a staff, expect bad output"
#: midi2ly.py:1052 midi2ly.py:1080
msgid "DUR"
-msgstr "DUR"
+msgstr "DAŬ"
#: midi2ly.py:1053
msgid "quantise note durations on DUR"
-msgstr "proksimigi noto-daŭroj per DUR"
+msgstr "proksimigi noto-daŭroj per DAŬ"
#: midi2ly.py:1056
msgid "debug printing"
#: midi2ly.py:1078
msgid "suppress progress messages and warnings about excess voices"
-msgstr "forigi mesaĝojn pri progreso kaj avertojn pri troaj voĉoj"
+msgstr "formeti mesaĝojn pri progreso kaj avertojn pri troaj voĉoj"
#: midi2ly.py:1079
msgid "quantise note starts on DUR"
-msgstr "proksimigi noto-komencojn je DUR"
+msgstr "proksimigi noto-komencojn je DAŬ"
#: midi2ly.py:1083
msgid "use s instead of r for rests"
#: midi2ly.py:1085
msgid "DUR*NUM/DEN"
-msgstr "DUR*NUM/DEN"
+msgstr "DAŬ*NUM/DEN"
#: midi2ly.py:1088
msgid "allow tuplet durations DUR*NUM/DEN"
-msgstr "ebligi opigajn daŭrojn DUR*NUM/DEN"
+msgstr "ebligi opigajn daŭrojn DAŬ*NUM/DEN"
#: midi2ly.py:1098
msgid "treat every text as a lyric"
#: musicxml2ly.py:2564
msgid "musicxml2ly [OPTION]... FILE.xml"
-msgstr "musicxml2ly [ELEKTILO]... DOSIERO.xml"
+msgstr "musicxml2ly [MODIFILO]... DOSIERO.xml"
#: musicxml2ly.py:2566
msgid ""
#: musicxml2ly.py:2622
msgid "LANG"
-msgstr "LINGVO"
+msgstr "LING"
#: musicxml2ly.py:2624
msgid "use LANG for pitch names, e.g. 'deutsch' for note names in German"
-msgstr "uzi LANG por tonalt-nomoj, ekz. 'deutsch' por not-nomoj en la germana"
+msgstr "uzi LING por tonalt-nomoj, ekz. 'deutsch' por not-nomoj en la germana"
#: musicxml2ly.py:2638
msgid "do not convert directions (^, _ or -) for articulations, dynamics, etc."
#: getopt-long.cc:153
#, c-format
msgid "option `%s' requires an argument"
-msgstr "la elektilo '%s' postulas argumenton"
+msgstr "la modifilo '%s' postulas argumenton"
#: getopt-long.cc:157
#, c-format
msgid "option `%s' does not allow an argument"
-msgstr "la elektilo '%s' ne permesas argumenton"
+msgstr "la modifilo '%s' ne permesas argumenton"
#: getopt-long.cc:161
#, c-format
msgid "unrecognized option: `%s'"
-msgstr "nerekonata elektilo: '%s'"
+msgstr "nerekonata modifilo: '%s'"
#: getopt-long.cc:167
#, c-format
msgid "invalid argument `%s' to option `%s'"
-msgstr "malvalida argumento '%s' por la elektilo '%s'"
+msgstr "malvalida argumento '%s' por la modifilo '%s'"
#: warn.cc:56
#, c-format
"set Scheme option SYM to VAL (default: #t).\n"
"Use -dhelp for help."
msgstr ""
-"difini elektilon Scheme SIM al VAL (apriore: *t).\n"
+"difini modifilon Scheme SIM al VAL (apriore: *t).\n"
"Uzu -dhelp por ricevi helpon."
#: main.cc:110
#: main.cc:113
msgid "dump FORMAT,... Also as separate options:"
-msgstr "ŝuti FORMOn,... Ankaŭ kiel apartaj elektebloj:"
+msgstr "ŝuti FORMOn,... Ankaŭ kiel apartaj modifiloj:"
#: main.cc:114
msgid "generate PDF (default)"
#: main.cc:233
#, c-format
msgid "Usage: %s [OPTION]... FILE..."
-msgstr "Uzado: %s [ELEKTILO]... DOSIERO..."
+msgstr "Uzado: %s [MODIFILO]... DOSIERO..."
#: main.cc:235
msgid "Typeset music and/or produce MIDI from FILE."
#: main.cc:241
msgid "Options:"
-msgstr "Elektebloj:"
+msgstr "Modifiloj:"
#: main.cc:295
#, c-format
#: paper-book.cc:214
#, c-format
msgid "program option -dprint-pages not supported by backend `%s'"
-msgstr "programa elektilo -dprint-pages ne estas subtenata de la intern-interfaco '%s'"
+msgstr "programa modifilo -dprint-pages ne estas subtenata de la intern-interfaco '%s'"
#: paper-book.cc:233
#, c-format
msgid "program option -dpreview not supported by backend `%s'"
-msgstr "programa elektilo -dpreview ne estas subtenata de la intern-interfaco '%s'"
+msgstr "programa modifilo -dpreview ne estas subtenata de la intern-interfaco '%s'"
#: paper-column-engraver.cc:261
msgid "forced break was overridden by some other event, should you be using bar checks?"
#: program-option-scheme.cc:235
#, c-format
msgid "no such internal option: %s"
-msgstr "neniu tia interna elektilo: %s"
+msgstr "neniu tia interna modifilo: %s"
#: property-iterator.cc:100
#, c-format
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.17.10\n"
+"Project-Id-Version: lilypond 2.17.12\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2013-01-12 14:13+0000\n"
+"POT-Creation-Date: 2013-02-08 17:02+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr ""
#: abc2ly.py:1395 convert-ly.py:91 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:138
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
msgid "show version number and exit"
msgstr ""
#: abc2ly.py:1398 convert-ly.py:95 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:117
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
msgid "show this help and exit"
msgstr ""
#. or if there is a LilyPond users list or forum in your language
#. "Report bugs in English via %s or in YOUR_LANG via URI"
#: abc2ly.py:1413 convert-ly.py:149 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:249
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
#, c-format, python-format
msgid "Report bugs via %s"
msgstr ""
msgstr ""
#: convert-ly.py:110 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:131
+#: musicxml2ly.py:2629 main.cc:174
msgid "LOGLEVEL"
msgstr ""
msgstr ""
#: convert-ly.py:144 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:140
+#: main.cc:183
msgid "show warranty and copyright"
msgstr ""
msgstr ""
#: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:123 main.cc:135
+#: main.cc:166 main.cc:178
msgid "FILE"
msgstr ""
msgstr ""
#: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:122
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
msgid "DIR"
msgstr ""
msgid "cannot change, already in translator: %s"
msgstr ""
-#: axis-group-engraver.cc:104
+#: axis-group-engraver.cc:147
msgid "Axis_group_engraver: vertical group already has a parent"
msgstr ""
-#: axis-group-engraver.cc:105
+#: axis-group-engraver.cc:148
msgid "are there two Axis_group_engravers?"
msgstr ""
-#: axis-group-engraver.cc:106
+#: axis-group-engraver.cc:149
msgid "removing this vertical group"
msgstr ""
msgid "cannot find or create new `%s'"
msgstr ""
-#: context.cc:207
+#: context.cc:228
#, c-format
msgid "cannot find or create `%s' called `%s'"
msgstr ""
-#: context.cc:406
+#: context.cc:427
#, c-format
msgid "cannot find or create: `%s'"
msgstr ""
msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
msgstr ""
-#: main.cc:70
+#: main.cc:104
#, c-format
msgid ""
"This program is free software. It is covered by the GNU General Public\n"
"information.\n"
msgstr ""
-#: main.cc:76
+#: main.cc:110
msgid ""
" This program is free software; you can redistribute it and/or\n"
"modify it under the terms of the GNU General Public License as \n"
"Boston, MA 02111-1307, USA.\n"
msgstr ""
-#: main.cc:105
+#: main.cc:148
msgid "SYM[=VAL]"
msgstr ""
-#: main.cc:106
+#: main.cc:149
msgid ""
"set Scheme option SYM to VAL (default: #t).\n"
"Use -dhelp for help."
msgstr ""
-#: main.cc:110
+#: main.cc:153
msgid "EXPR"
msgstr ""
-#: main.cc:110
+#: main.cc:153
msgid "evaluate scheme code"
msgstr ""
#. Bug in option parser: --output =foe is taken as an abbreviation
#. for --output-format.
-#: main.cc:113
+#: main.cc:156
msgid "FORMATs"
msgstr ""
-#: main.cc:113
+#: main.cc:156
msgid "dump FORMAT,... Also as separate options:"
msgstr ""
-#: main.cc:114
+#: main.cc:157
msgid "generate PDF (default)"
msgstr ""
-#: main.cc:115
+#: main.cc:158
msgid "generate PNG"
msgstr ""
-#: main.cc:116
+#: main.cc:159
msgid "generate PostScript"
msgstr ""
-#: main.cc:119
+#: main.cc:162
msgid "FIELD"
msgstr ""
-#: main.cc:119
+#: main.cc:162
msgid ""
"dump header field FIELD to file\n"
"named BASENAME.FIELD"
msgstr ""
-#: main.cc:122
+#: main.cc:165
msgid "add DIR to search path"
msgstr ""
-#: main.cc:123
+#: main.cc:166
msgid "use FILE as init file"
msgstr ""
-#: main.cc:126
+#: main.cc:169
msgid "USER, GROUP, JAIL, DIR"
msgstr ""
-#: main.cc:126
+#: main.cc:169
msgid ""
"chroot to JAIL, become USER:GROUP\n"
"and cd into DIR"
msgstr ""
-#: main.cc:131
+#: main.cc:174
msgid ""
"print log messages according to LOGLEVEL. Possible values are:\n"
"NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
msgstr ""
-#: main.cc:135
+#: main.cc:178
msgid "write output to FILE (suffix will be added)"
msgstr ""
-#: main.cc:136
+#: main.cc:179
msgid "relocate using directory of lilypond program"
msgstr ""
-#: main.cc:137
+#: main.cc:180
msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
msgstr ""
-#: main.cc:139
+#: main.cc:182
msgid "be verbose (equivalent to loglevel=DEBUG)"
msgstr ""
#. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:206
+#: main.cc:261
#, c-format
msgid ""
"Copyright (c) %s by\n"
msgstr ""
#. No version number or newline here. It confuses help2man.
-#: main.cc:233
+#: main.cc:299
#, c-format
msgid "Usage: %s [OPTION]... FILE..."
msgstr ""
-#: main.cc:235
+#: main.cc:301
msgid "Typeset music and/or produce MIDI from FILE."
msgstr ""
-#: main.cc:237
+#: main.cc:303
msgid "LilyPond produces beautiful music notation."
msgstr ""
-#: main.cc:239
+#: main.cc:305
#, c-format
msgid "For more information, see %s"
msgstr ""
-#: main.cc:241
+#: main.cc:307
msgid "Options:"
msgstr ""
-#: main.cc:295
+#: main.cc:374
#, c-format
msgid "expected %d arguments with jail, found: %u"
msgstr ""
-#: main.cc:309
+#: main.cc:388
#, c-format
msgid "no such user: %s"
msgstr ""
-#: main.cc:311
+#: main.cc:390
#, c-format
msgid "cannot get user id from user name: %s: %s"
msgstr ""
-#: main.cc:326
+#: main.cc:405
#, c-format
msgid "no such group: %s"
msgstr ""
-#: main.cc:328
+#: main.cc:407
#, c-format
msgid "cannot get group id from group name: %s: %s"
msgstr ""
-#: main.cc:336
+#: main.cc:415
#, c-format
msgid "cannot chroot to: %s: %s"
msgstr ""
-#: main.cc:343
+#: main.cc:422
#, c-format
msgid "cannot change group id to: %d: %s"
msgstr ""
-#: main.cc:349
+#: main.cc:428
#, c-format
msgid "cannot change user id to: %d: %s"
msgstr ""
-#: main.cc:355
+#: main.cc:434
#, c-format
msgid "cannot change working directory to: %s: %s"
msgstr ""
-#: main.cc:601
+#: main.cc:805
#, c-format
msgid "exception caught: %s"
msgstr ""
msgid "Skipping UTF-8 BOM"
msgstr ""
-#: lexer.ll:271
+#: lexer.ll:265
#, c-format
msgid "Renaming input to: `%s'"
msgstr ""
-#: lexer.ll:288
+#: lexer.ll:282
msgid "quoted string expected after \\version"
msgstr ""
-#: lexer.ll:292
+#: lexer.ll:286
msgid "quoted string expected after \\sourcefilename"
msgstr ""
-#: lexer.ll:296
+#: lexer.ll:290
msgid "integer expected after \\sourcefileline"
msgstr ""
-#: lexer.ll:323
+#: lexer.ll:317
msgid "\\maininput not allowed outside init files"
msgstr ""
-#: lexer.ll:347
+#: lexer.ll:341
#, c-format
msgid "wrong or undefined identifier: `%s'"
msgstr ""
-#: lexer.ll:373
+#: lexer.ll:367
msgid "string expected after \\include"
msgstr ""
-#: lexer.ll:383
+#: lexer.ll:377
msgid "end quote missing"
msgstr ""
-#: lexer.ll:695
+#: lexer.ll:689
msgid "EOF found inside a comment"
msgstr ""
-#: lexer.ll:700
+#: lexer.ll:694
msgid "EOF found inside string"
msgstr ""
-#: lexer.ll:715
+#: lexer.ll:709
msgid "Unfinished main input"
msgstr ""
-#: lexer.ll:815
+#: lexer.ll:809
#, c-format
msgid "invalid character: `%s'"
msgstr ""
-#: lexer.ll:937
+#: lexer.ll:931
#, c-format
msgid "unknown escaped string: `\\%s'"
msgstr ""
-#: lexer.ll:1220
+#: lexer.ll:1214
msgid "non-UTF-8 input"
msgstr ""
-#: lexer.ll:1264
+#: lexer.ll:1258
#, c-format
msgid "file too old: %s (oldest supported: %s)"
msgstr ""
-#: lexer.ll:1265
+#: lexer.ll:1259
msgid "consider updating the input with the convert-ly script"
msgstr ""
-#: lexer.ll:1271
+#: lexer.ll:1265
#, c-format
msgid "program too old: %s (file requires: %s)"
msgstr ""
msgid "Error in beam quanting. Expected ~S 0, found ~S."
msgstr ""
-#: lily-library.scm:304
+#: lily-library.scm:340
msgid "Music unsuitable for context-mod"
msgstr ""
-#: lily-library.scm:359
+#: lily-library.scm:395
#, scheme-format
msgid "Cannot find context-def \\~a"
msgstr ""
-#: lily-library.scm:375
+#: lily-library.scm:411
msgid "Music unsuitable for output-def"
msgstr ""
-#: lily-library.scm:891
+#: lily-library.scm:927
msgid ""
"Find the index between @var{start} and @var{end} (an integer)\n"
"which produces the closest match to @var{target-val} if\n"
"applied to function @var{getter}."
msgstr ""
-#: lily-library.scm:965
+#: lily-library.scm:1001
#, scheme-format
msgid "unknown unit: ~S"
msgstr ""
-#: lily-library.scm:990
+#: lily-library.scm:1026
#, scheme-format
msgid "no \\version statement found, please add~afor future compatibility"
msgstr ""
-#: lily-library.scm:996
+#: lily-library.scm:1032
msgid "old relative compatibility not used"
msgstr ""
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1118
+#: music-functions.scm:1138
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1256
+#: music-functions.scm:1276
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1316
+#: music-functions.scm:1336
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1317
+#: music-functions.scm:1337
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1662
+#: music-functions.scm:1682
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
msgid "assertion failed: ~S"
msgstr ""
-#: translation-functions.scm:375
+#: translation-functions.scm:374
#, scheme-format
msgid "Negative fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:378
+#: translation-functions.scm:377
#, scheme-format
msgid "Missing fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:421
+#: translation-functions.scm:420
#, scheme-format
msgid "No open string for pitch ~a"
msgstr ""
-#: translation-functions.scm:436 translation-functions.scm:448
+#: translation-functions.scm:435 translation-functions.scm:447
#, scheme-format
msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
msgstr ""
-#: translation-functions.scm:439
+#: translation-functions.scm:438
msgid "Ignoring string request and recalculating."
msgstr ""
-#: translation-functions.scm:451
+#: translation-functions.scm:450
msgid "Ignoring note in tablature."
msgstr ""
-#: translation-functions.scm:474
+#: translation-functions.scm:473
#, scheme-format
msgid "No string for pitch ~a (given frets ~a)"
msgstr ""
-#: translation-functions.scm:579
+#: translation-functions.scm:578
#, scheme-format
msgid ""
"No label for fret ~a (on string ~a);\n"
path_replace, str)
return str
+@rule ((2, 17, 11), r"""\times -> \tuplet, \set tupletSpannerDuration -> \tupletSpan
+(ly:make-moment 1 4) -> (ly:make-moment 1/4)
+(ly:make-duration 0 0 1 2) -> (ly:make-duration 0 0 1/2)""")
+def conv(str):
+ def sub_dur (m):
+ num = int (m.group (1))
+ den = int (m.group (2))
+
+# if den is no power of 2, don't even try to use an unscaled duration
+ if (den & (den - 1)) != 0 :
+ return (r"\tupletSpan 1*%d/%d" % (num, den))
+
+ if den >= 4 and num == 7 :
+ return (r"\tupletSpan %d.." % (den/4))
+
+ if den >= 2 and num == 3 :
+ return (r"\tupletSpan %d." % (den/2))
+
+ if num == 1 :
+ return (r"\tupletSpan %d" % den)
+
+ return (r"\tupletSpan 1*%d/%d" % (num, den))
+
+ str = re.sub (r"\\set\s+tupletSpannerDuration\s*=\s*" +
+ r"#\(ly:make-moment\s+([0-9]+)\s+([0-9]+)\s*\)",
+ sub_dur, str)
+ str = re.sub (r"\\unset tupletSpannerDuration",
+ r"\\tupletSpan \\default", str)
+ str = re.sub (r"\\times(\s*)([0-9]+)/([0-9]+)",
+ r"\\tuplet\1\3/\2", str)
+
+ str = re.sub (r"(\(ly:make-moment\s+-?[0-9]+)\s+([1-9][0-9]*\))",
+ r"\1/\2", str)
+ str = re.sub (r"(\(ly:make-moment\s+-?[0-9]+)\s+([0-9]+\s+-?[0-9]+)\s([0-9]+\))",
+ r"\1/\2/\3", str)
+ str = re.sub (r"(\(ly:make-duration\s+-?[0-9]+\s+[0-9]+\s+[0-9]+)\s+([0-9]+\))",
+ r"\1/\2", 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,
line-pos) <))
(gap-to-find (/ (+ dot-y-length line-thickness)
(/ staff-space 2)))
- (first (car folded-staff))
- (found #f))
+ (first (car folded-staff)))
;; find the first space big enough
;; to hold a dot and a staff line
;; (a space in the folded staff may be
;; narrower but can't be wider than the
;; corresponding original spaces)
- (reduce (lambda (x y) (if (and (> (- x y) gap-to-find)
- (not found))
- (begin
- (set! found #t)
- (set! dist (+ x y))))
- x)
- ""
- folded-staff)
-
- (if (not found)
- (set! dist (if (< gap-to-find first)
- ;; there's a central space big
- ;; enough to hold both dots
- first
-
- ;; dots should go outside
- (+ (* 2 (car
- (reverse folded-staff)))
- (/ (* 4 dot-y-length)
- staff-space))))))))))))
+ (set! dist
+ (or
+ (any (lambda (x y)
+ (and (> (- y x) gap-to-find)
+ (+ x y)))
+ folded-staff (cdr folded-staff))
+ (if (< gap-to-find first)
+ ;; there's a central space big
+ ;; enough to hold both dots
+ first
+
+ ;; dots should go outside
+ (+ (* 2 (last folded-staff))
+ (/ (* 4 dot-y-length)
+ staff-space))))))))))))
(set! staff-space 1.0))
(let* ((stencil empty-stencil)
(define-public (number-or-string? x)
(or (number? x) (string? x)))
+(define-public (number-or-markup? x)
+ (or (number? x) (markup? x)))
+
(define-public (string-or-pair? x)
(or (string? x) (pair? x)))
(= 7 (pitch-step main-name))
(is-natural-alteration? main-name)
(pair? (remove-uptil-step 7 alterations))
- (reduce (lambda (x y) (and x y)) #t
- (map is-natural-alteration? alterations)))
+ (every is-natural-alteration? alterations))
(begin
(set! main-name (last alterations))
(set! alterations '())))
;; TODO FIXME
+ (accidentalGrouping ,symbol? "If set to @code{'voice}, accidentals
+on the same note in different octaves may be horizontally staggered
+if in different voices.")
(aDueText ,markup? "Text to print at a unisono passage.")
(additionalPitchPrefix ,string? "Text with which to prefix
additional pitches within a chord name.")
(graceSettings ,list? "Overrides for grace notes. This property
should be manipulated through the @code{add-grace-property} function.")
-
(hasStaffSpacing ,boolean? "True if the current
@code{CommandColumn} contains items that will affect spacing.")
(list 'unquote `(ly:make-moment
,(ly:moment-main-numerator e)
,(ly:moment-main-denominator e)
- . ,(if (eq? 0 (ly:moment-grace-numerator e))
+ . ,(if (zero? (ly:moment-grace-numerator e))
'()
(list (ly:moment-grace-numerator e)
(ly:moment-grace-denominator e))))))
(outside-staff-padding . 0.5)
(outside-staff-priority . 750)
(self-alignment-X . ,CENTER)
+ (side-axis . ,Y)
(staff-padding . 0.5)
(stencil . ,measure-counter-stencil)
(meta . ((class . Spanner)
(interfaces . (font-interface
measure-counter-interface
self-alignment-interface
+ side-position-interface
text-interface))))))
(MeasureGrouping
(new-commands (map (lambda (x)
(cond
;; for rmoveto, rlineto
- ((and (relative? x) (eq? 3 (length x)))
+ ((and (relative? x) (= 3 (length x)))
(let ((cp (cons
(+ (car current-point)
(second x))
(list (car cp)
(cdr cp))))
;; for rcurveto
- ((and (relative? x) (eq? 7 (length x)))
+ ((and (relative? x) (= 7 (length x)))
(let* ((old-cp current-point)
(cp (cons
(+ (car old-cp)
(car cp)
(cdr cp))))
;; for moveto, lineto
- ((eq? 3 (length x))
+ ((= 3 (length x))
(set-point (cons (second x)
(third x)))
(drop x 1))
;; for curveto
- ((eq? 7 (length x))
+ ((= 7 (length x))
(set-point (cons (sixth x)
(seventh x)))
(drop x 1))
(number? number? number?)
#:category music
#:properties ((font-size 0)
- (style '()))
+ (flag-style '())
+ (style '()))
"
@cindex notes within text by log and dot-count
-Construct a note symbol, with stem. By using fractional values for
+Construct a note symbol, with stem and flag. By using fractional values for
@var{dir}, longer or shorter stems can be obtained.
+Supports all note-head-styles.
+Supported flag-styles are @code{default}, @code{old-straight-flag} and
+@code{modern-straight-flag}.
@lilypond[verbatim,quote]
\\markup {
@end lilypond"
(define (get-glyph-name-candidates dir log style)
(map (lambda (dir-name)
- (format #f "noteheads.~a~a" dir-name
- (if (and (symbol? style)
- (not (equal? 'default style)))
- (select-head-glyph style (min log 2))
- (min log 2))))
- (list (if (= dir UP) "u" "d")
- "s")))
+ (format #f "noteheads.~a~a" dir-name
+ (if (and (symbol? style)
+ (not (equal? 'default style)))
+ (select-head-glyph style (min log 2))
+ (min log 2))))
+ (list (if (= dir UP) "u" "d")
+ "s")))
(define (get-glyph-name font cands)
(if (null? cands)
- ""
- (if (ly:stencil-empty? (ly:font-get-glyph font (car cands)))
- (get-glyph-name font (cdr cands))
- (car cands))))
+ ""
+ (if (ly:stencil-empty? (ly:font-get-glyph font (car cands)))
+ (get-glyph-name font (cdr cands))
+ (car cands))))
+
+ (define (buildflags flag-stencil remain curr-stencil spacing)
+ ;; Function to recursively create a stencil with @code{remain} flags
+ ;; from the single-flag stencil @code{curr-stencil}, which is already
+ ;; translated to the position of the previous flag position.
+ ;;
+ ;; Copy and paste from /scm/flag-styles.scm
+ (if (> remain 0)
+ (let* ((translated-stencil
+ (ly:stencil-translate-axis curr-stencil spacing Y))
+ (new-stencil (ly:stencil-add flag-stencil translated-stencil)))
+ (buildflags new-stencil (- remain 1) translated-stencil spacing))
+ flag-stencil))
+
+ (define (straight-flag-mrkp flag-thickness flag-spacing
+ upflag-angle upflag-length
+ downflag-angle downflag-length
+ dir)
+ ;; Create a stencil for a straight flag. @var{flag-thickness} and
+ ;; @var{flag-spacing} are given in staff spaces, @var{upflag-angle} and
+ ;; @var{downflag-angle} are given in degrees, and @var{upflag-length} and
+ ;; @var{downflag-length} are given in staff spaces.
+ ;;
+ ;; All lengths are scaled according to the font size of the note.
+ ;;
+ ;; From /scm/flag-styles.scm, modified to fit here.
+
+ (let* ((stem-up (> dir 0))
+ ; scale with the note size
+ (factor (magstep font-size))
+ (stem-thickness (* factor 0.1))
+ (line-thickness (ly:output-def-lookup layout 'line-thickness))
+ (half-stem-thickness (/ (* stem-thickness line-thickness) 2))
+ (raw-length (if stem-up upflag-length downflag-length))
+ (angle (if stem-up upflag-angle downflag-angle))
+ (flag-length (+ (* raw-length factor) half-stem-thickness))
+ (flag-end (polar->rectangular flag-length angle))
+ (thickness (* flag-thickness factor))
+ (thickness-offset (cons 0 (* -1 thickness dir)))
+ (spacing (* -1 flag-spacing factor dir))
+ (start (cons (- half-stem-thickness) (* half-stem-thickness dir)))
+ ; The points of a round-filled-polygon need to be given in
+ ; clockwise order, otherwise the polygon will be enlarged by
+ ; blot-size*2!
+ (points (if stem-up (list start flag-end
+ (offset-add flag-end thickness-offset)
+ (offset-add start thickness-offset))
+ (list start
+ (offset-add start thickness-offset)
+ (offset-add flag-end thickness-offset)
+ flag-end)))
+ (stencil (ly:round-filled-polygon points half-stem-thickness))
+ ; Log for 1/8 is 3, so we need to subtract 3
+ (flag-stencil (buildflags stencil (- log 3) stencil spacing)))
+ flag-stencil))
(let* ((font (ly:paper-get-font layout (cons '((font-encoding . fetaMusic))
- props)))
- (size-factor (magstep font-size))
- (stem-length (* size-factor (max 3 (- log 1))))
+ props)))
+ (size-factor (magstep font-size))
+ (blot (ly:output-def-lookup layout 'blot-diameter))
(head-glyph-name
- (let ((result (get-glyph-name font (get-glyph-name-candidates
- (sign dir) log style))))
- (if (string-null? result)
- ;; If no glyph name can be found, select default heads. Though
- ;; this usually means an unsupported style has been chosen, it
- ;; also prevents unrelated 'style settings from other grobs
- ;; (e.g., TextSpanner and TimeSignature) leaking into markup.
- (get-glyph-name font (get-glyph-name-candidates
- (sign dir) log 'default))
- result)))
+ (let ((result (get-glyph-name font
+ (get-glyph-name-candidates
+ (sign dir) log style))))
+ (if (string-null? result)
+ ;; If no glyph name can be found, select default heads.
+ ;; Though this usually means an unsupported style has been
+ ;; chosen, it also prevents unrelated 'style settings from
+ ;; other grobs (e.g., TextSpanner and TimeSignature) leaking
+ ;; into markup.
+ (get-glyph-name font
+ (get-glyph-name-candidates
+ (sign dir) log 'default))
+ result)))
(head-glyph (ly:font-get-glyph font head-glyph-name))
- (attach-indices (ly:note-head::stem-attachment font head-glyph-name))
- (stem-thickness (* size-factor 0.13))
+ (ancient-flags? (or (eq? style 'mensural) (eq? style 'neomensural)))
+ (attach-indices (ly:note-head::stem-attachment font head-glyph-name))
+ (stem-length (* size-factor (max 3 (- log 1))))
+ ;; With ancient-flags we want a tighter stem
+ (stem-thickness (* size-factor (if ancient-flags? 0.1 0.13)))
(stemy (* dir stem-length))
(attach-off (cons (interval-index
- (ly:stencil-extent head-glyph X)
- (* (sign dir) (car attach-indices)))
- (* (sign dir) ; fixme, this is inconsistent between X & Y.
- (interval-index
- (ly:stencil-extent head-glyph Y)
- (cdr attach-indices)))))
+ (ly:stencil-extent head-glyph X)
+ (* (sign dir) (car attach-indices)))
+ ; fixme, this is inconsistent between X & Y.
+ (* (sign dir)
+ (interval-index
+ (ly:stencil-extent head-glyph Y)
+ (cdr attach-indices)))))
+ ;; For a tighter stem (with ancient-flags) the stem-width has to be
+ ;; adjusted.
+ (stem-X-corr (if ancient-flags? (* 0.5 dir stem-thickness) 0))
(stem-glyph (and (> log 0)
- (ly:round-filled-box
- (ordered-cons (car attach-off)
- (+ (car attach-off)
- (* (- (sign dir)) stem-thickness)))
- (cons (min stemy (cdr attach-off))
- (max stemy (cdr attach-off)))
- (/ stem-thickness 3))))
-
+ (ly:round-filled-box
+ (ordered-cons (+ stem-X-corr (car attach-off))
+ (+ stem-X-corr (car attach-off)
+ (* (- (sign dir)) stem-thickness)))
+ (cons (min stemy (cdr attach-off))
+ (max stemy (cdr attach-off)))
+ (/ stem-thickness 3))))
(dot (ly:font-get-glyph font "dots.dot"))
(dotwid (interval-length (ly:stencil-extent dot X)))
(dots (and (> dot-count 0)
(ly:stencil-translate-axis
dot (* 2 x dotwid) X))
(iota dot-count)))))
+ ;; Straight-flags. Values taken from /scm/flag-style.scm
+ (modern-straight-flag (straight-flag-mrkp 0.55 1 -18 1.1 22 1.2 dir))
+ (old-straight-flag (straight-flag-mrkp 0.55 1 -45 1.2 45 1.4 dir))
+ ;; Calculate a corrective to avoid a gap between
+ ;; straight-flags and the stem.
+ (flag-style-Y-corr (if (or (eq? flag-style 'modern-straight-flag)
+ (eq? flag-style 'old-straight-flag))
+ (/ blot 10 (* -1 dir))
+ 0))
(flaggl (and (> log 2)
(ly:stencil-translate
- (ly:font-get-glyph font
- (string-append "flags."
- (if (> dir 0) "u" "d")
- (number->string log)))
- (cons (+ (car attach-off) (if (< dir 0)
- stem-thickness 0))
- stemy)))))
+ (cond ((eq? flag-style 'modern-straight-flag)
+ modern-straight-flag)
+ ((eq? flag-style 'old-straight-flag)
+ old-straight-flag)
+ (else
+ (ly:font-get-glyph font
+ (format #f (if ancient-flags?
+ "flags.mensural~a2~a"
+ "flags.~a~a")
+ (if (> dir 0) "u" "d")
+ log))))
+ (cons (+ (car attach-off)
+ ;; For tighter stems (with ancient-flags) the
+ ;; flag has to be adjusted different.
+ (if (and (not ancient-flags?) (< dir 0))
+ stem-thickness
+ 0))
+ (+ stemy flag-style-Y-corr))))))
;; If there is a flag on an upstem and the stem is short, move the dots
;; to avoid the flag. 16th notes get a special case because their flags
;; hang lower than any other flags.
+ ;; Not with ancient flags or straight-flags.
(if (and dots (> dir 0) (> log 2)
- (or (< dir 1.15) (and (= log 4) (< dir 1.3))))
- (set! dots (ly:stencil-translate-axis dots 0.5 X)))
+ (or (eq? flag-style 'default) (null? flag-style))
+ (not ancient-flags?)
+ (or (< dir 1.15) (and (= log 4) (< dir 1.3))))
+ (set! dots (ly:stencil-translate-axis dots 0.5 X)))
(if flaggl
(set! stem-glyph (ly:stencil-add flaggl stem-glyph)))
(if (ly:stencil? stem-glyph)
(if (ly:stencil? dots)
(set! stem-glyph
(ly:stencil-add
- (ly:stencil-translate-axis
- dots
- (+ (cdr (ly:stencil-extent head-glyph X)) dotwid)
- X)
- stem-glyph)))
+ (ly:stencil-translate-axis
+ dots
+ (+ (cdr (ly:stencil-extent head-glyph X)) dotwid)
+ X)
+ stem-glyph)))
stem-glyph))
(define-public log2
"Parse the `duration-string', e.g. ''4..'' or ''breve.'',
and return a (log dots) list."
(let ((match (regexp-exec (make-regexp "(breve|longa|maxima|[0-9]+)(\\.*)")
- duration-string)))
+ duration-string)))
(if (and match (string=? duration-string (match:substring match 0)))
(let ((len (match:substring match 1))
(dots (match:substring match 2)))
(lambda (context)
(let* ((time-signature-settings
(ly:context-property context 'timeSignatureSettings))
- (my-base-fraction
- (base-fraction fraction time-signature-settings))
+ (my-base-length
+ (base-length fraction time-signature-settings))
(my-beat-structure
(if (null? structure)
- (beat-structure my-base-fraction
+ (beat-structure my-base-length
fraction
time-signature-settings)
structure))
(ly:context-set-property!
context 'timeSignatureFraction fraction)
(ly:context-set-property!
- context 'baseMoment (fraction->moment my-base-fraction))
+ context 'baseMoment (ly:make-moment my-base-length))
(ly:context-set-property!
context 'beatStructure my-beat-structure)
(ly:context-set-property!
(define-display-method TimeScaledMusic (times parser)
(let* ((num (ly:music-property times 'numerator))
(den (ly:music-property times 'denominator))
+ (span (ly:music-property times 'duration #f))
+ ;; need to format before changing time scale
+ (formatted-span
+ (and span (duration->lily-string span #:force-duration #t)))
(scale (/ num den))
(dur (*previous-duration*))
(time-scale (*time-scale*)))
(* (ly:duration-scale dur)
scale)))
(*time-scale* (* time-scale scale)))
- (format #f "\\times ~a/~a ~a"
- num
+ (format #f "\\tuplet ~a/~a ~@[~a ~]~a"
den
+ num
+ formatted-span
(music->lily-string (ly:music-property times 'element) parser)))))
(define-display-method RelativeOctaveMusic (m parser)
(ops ,scheme? "The operations to apply during the creation of a
context.")
(origin ,ly:input-location? "Where was this piece of music defined?")
- (original-chord ,ly:music? "Original chord of a repeated chord.
-Used by repeated chords in \\relative mode, to determine the first note octave")
(ottava-number ,integer? "The octavation for @code{\\ottava}.")
(page-break-permission ,symbol? "When the music is at top-level,
(types . (general-music layout-instruction-event
override-property-event))
(iterator-ctor . ,ly:push-property-iterator::constructor)
+ (untransposable . #t)
))
(PageBreakEvent
Syntax: @code{\\set @var{context}.@var{prop} = @var{scheme-val}}")
(types . (layout-instruction-event general-music))
(iterator-ctor . ,ly:property-iterator::constructor)
+ (untransposable . #t)
))
(PropertyUnset
"Returns true if x is the square of a value in input-list."
(pair? (memv (inexact->exact (sqrt x)) input-list)))
-(define (satisfies-function? function input-list)
- "Returns true if an element in @code{input-list} is true
- when @code{function} is applied to it.
- For example:
- @code{guile> (satisfies-function? null? '((1 2) ()))}
- @code{#t}
- @code{guile> (satisfies-function? null? '((1 2) (3)))}
- @code{#f}"
- (if (null? input-list)
- #f
- (or (function (car input-list))
- (satisfies-function? function (cdr input-list)))))
-
(define (true-entry? input-list)
"Is there a true entry in @code{input-list}?"
- (satisfies-function? identity input-list))
+ (any identity input-list))
(define (entry-greater-than-x? input-list x)
"Is there an entry greater than @code{x} in @code{input-list}?"
- (satisfies-function? (lambda (y) (> y x)) input-list))
+ (any (lambda (y) (> y x)) input-list))
(define (n-true-entries input-list)
"Returns number of true entries in @code{input-list}."
- (reduce + 0 (map (lambda (x) (if x 1 0)) input-list)))
+ (count identity input-list))
(define (bezier-head-for-stencil bezier cut-point)
"Prepares a split-bezier to be used in a connected path stencil."
(helper lst (make-vector n '()) (1- n)))
(define (list-element-index lst x)
- (list-index (lambda (m) (equal? m x))))
+ (list-index (lambda (m) (equal? m x)) lst))
(define-public (count-list lst)
"Given @var{lst} as @code{(E1 E2 .. )}, return
@code{((E1 . 1) (E2 . 2) ... )}."
-
- (define (helper l acc count)
- (if (pair? l)
- (helper (cdr l) (cons (cons (car l) count) acc) (1+ count))
- acc))
-
-
- (reverse (helper lst '() 1)))
+ (map cons lst (iota (length lst) 1)))
(define-public (list-join lst intermediate)
"Put @var{intermediate} between all elts of @var{lst}."
(,moment-pair? . "pair of moment objects")
(,number-list? . "number list")
(,number-or-grob? . "number or grob")
+ (,number-or-markup? . "number or markup")
(,number-or-pair? . "number or pair")
(,number-or-string? . "number or string")
(,number-pair? . "pair of numbers")
into a @code{MultiMeasureTextEvent}."
(if (memq 'script-event (ly:music-property music 'types))
- (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)
+ (apply make-music 'MultiMeasureTextEvent
+ (flatten-alist (ly:music-mutable-properties music)))
music))
(define-ly-syntax (multi-measure-rest parser location duration articulations)
(if (ly:music? e)
(set! (ly:music-property m 'element) (voicify-music e)))
(if (and (equal? (ly:music-property m 'name) 'SimultaneousMusic)
- (reduce (lambda (x y ) (or x y)) #f (map music-separator? es)))
+ (any music-separator? es))
(set! m (context-spec-music (voicify-chord m) 'Staff)))
m))
(define-public (music-has-type music type)
(memq type (ly:music-property music 'types)))
-(define-public (music-clone music)
- (define (alist->args alist acc)
- (if (null? alist)
- acc
- (alist->args (cdr alist)
- (cons (caar alist) (cons (cdar alist) acc)))))
-
- (apply
- make-music
- (ly:music-property music 'name)
- (alist->args (ly:music-mutable-properties music) '())))
+(define-public (music-clone music . music-properties)
+ "Clone @var{music} and set properties according to
+@var{music-properties}, a list of alternating property symbols and
+values:
+@example\n(music-clone start-span 'span-direction STOP)
+@end example
+Only properties that are not overriden by @var{music-properties} are
+actually fully cloned."
+ (let ((old-props (list-copy (ly:music-mutable-properties music)))
+ (new-props '())
+ (m (ly:make-music (ly:prob-immutable-properties music))))
+ (define (set-props mus-props)
+ (if (and (not (null? mus-props))
+ (not (null? (cdr mus-props))))
+ (begin
+ (set! old-props (assq-remove! old-props (car mus-props)))
+ (set! new-props
+ (assq-set! new-props
+ (car mus-props) (cadr mus-props)))
+ (set-props (cddr mus-props)))))
+ (set-props music-properties)
+ (for-each
+ (lambda (pair)
+ (set! (ly:music-property m (car pair))
+ (ly:music-deep-copy (cdr pair))))
+ old-props)
+ (for-each
+ (lambda (pair)
+ (set! (ly:music-property m (car pair)) (cdr pair)))
+ new-props)
+ m))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; warn for bare chords at start.
(map (lambda (x) (ly:music-property x 'pitch))
(event-chord-notes event-chord)))
+(defmacro-public make-relative (pitches last-pitch music)
+ "The list of pitch-carrying variables in @var{pitches} is used as a
+sequence for creating relativable music from @var{music}.
+The variables in @var{pitches} are, when considered inside of
+@code{\\relative}, all considered to be specifications to the preceding
+variable. The first variable is relative to the preceding musical
+context, and @var{last-pitch} specifies the pitch passed as relative
+base onto the following musical context."
+
+ ;; pitch and music generator might be stored instead in music
+ ;; properties, and it might make sense to create a music type of its
+ ;; own for this kind of construct rather than using
+ ;; RelativeOctaveMusic
+ (define ((make-relative::to-relative-callback pitches p->m p->p) music pitch)
+ (let* ((chord (make-event-chord
+ (map
+ (lambda (p)
+ (make-music 'NoteEvent
+ 'pitch p))
+ pitches)))
+ (pitchout (begin
+ (ly:make-music-relative! chord pitch)
+ (event-chord-pitches chord))))
+ (set! (ly:music-property music 'element)
+ (apply p->m pitchout))
+ (apply p->p pitchout)))
+ `(make-music 'RelativeOctaveMusic
+ 'to-relative-callback
+ (,make-relative::to-relative-callback
+ (list ,@pitches)
+ (lambda ,pitches ,music)
+ (lambda ,pitches ,last-pitch))
+ 'element ,music))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; The following functions are all associated with the crossStaff
; function
;; fingering
(define-public (fingering::calc-text grob)
- (let* ((event (event-cause grob))
- (digit (ly:event-property event 'digit)))
-
- (number->string digit 10)))
+ (let ((event (event-cause grob)))
+ (or (ly:event-property event 'text #f)
+ (number->string (ly:event-property event 'digit) 10))))
(define-public (string-number::calc-text grob)
- (let ((digit (ly:event-property (event-cause grob) 'string-number)))
-
- (number->string digit 10)))
+ (let ((event (event-cause grob)))
+ (or (ly:event-property event 'text #f)
+ (number->string (ly:event-property event 'string-number) 10))))
(define-public (stroke-finger::calc-text grob)
- (let* ((digit (ly:event-property (event-cause grob) 'digit))
- (text (ly:event-property (event-cause grob) 'text)))
-
- (if (string? text)
- text
+ (let ((event (event-cause grob)))
+ (or (ly:event-property event 'text #f)
(vector-ref (ly:grob-property grob 'digit-names)
- (1- (max (min 5 digit) 1))))))
+ (1- (max 1
+ (min 5 (ly:event-property event 'digit))))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (make-cue-clef-set clef-name)
"Generate the clef setting commands for a cue clef with name
@var{clef-name}."
- (define (make-prop-set props)
- (let ((m (make-music 'PropertySet)))
- (map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
- m))
- (let ((e '())
- (c0 0)
- (oct 0)
- (style 'default)
- (match (string-match "^(.*)([_^])([^0-9a-zA-Z]*)([1-9][0-9]*)([^0-9a-zA-Z]*)$" clef-name)))
- (if match
- (begin
- (set! clef-name (match:substring match 1))
- (set! oct
- (* (if (equal? (match:substring match 2) "^") -1 1)
- (- (string->number (match:substring match 4)) 1)))
- (set! style
- (cond ((equal? (match:substring match 3) "(") 'parenthesized)
- ((equal? (match:substring match 3) "[") 'bracketed)
- (else style)))))
- (set! e (assoc-get clef-name supported-clefs))
- (if e
- (let* ((prop-list `(((symbol . cueClefGlyph) (value . ,(car e)))
- ((symbol . middleCCuePosition)
- (value . ,(+ oct
- (cadr e)
- (assoc-get (car e) c0-pitch-alist))))
- ((symbol . cueClefPosition) (value . ,(cadr e)))
- ((symbol . cueClefOctavation) (value . ,(- oct)))))
- (prop-list (if (eq? style 'default)
- prop-list
- (append
- prop-list
- `(((symbol . cueClefOctavationStyle)
- (value . ,style))))))
- (musics (map make-prop-set prop-list))
- (recalc-mid-C (make-music 'ApplyContext))
- (seq (make-music 'SequentialMusic
- 'elements (append musics (list recalc-mid-C))))
- (csp (make-music 'ContextSpeccedMusic)))
- (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
- (context-spec-music seq 'Staff))
- (begin
- (ly:warning (_ "unknown clef type `~a'") clef-name)
- (ly:warning (_ "supported clefs: ~a")
- (string-join
- (sort (map car supported-clefs) string<?)))
- (make-music 'Music)))))
-
+ (define cue-clef-map
+ '((clefGlyph . cueClefGlyph)
+ (middleCClefPosition . middleCCuePosition)
+ (clefPosition . cueClefPosition)
+ (clefOctavation . cueClefOctavation)
+ (clefOctavationStyle . cueClefOctavationStyle)))
+ (let ((clef (make-clef-set clef-name)))
+ (for-each
+ (lambda (m)
+ (let ((mapped (assq-ref cue-clef-map
+ (ly:music-property m 'symbol))))
+ (if mapped
+ (set! (ly:music-property m 'symbol) mapped))))
+ (extract-named-music clef 'PropertySet))
+ clef))
(define-public (make-cue-clef-unset)
"Reset the clef settings for a cue clef."
- (define (make-prop-unset props)
- (let ((m (make-music 'PropertyUnset)))
- (set! (ly:music-property m (car props)) (cdr props))
- m))
- (let* ((musics (map make-prop-unset
- `((symbol . cueClefGlyph)
- (symbol . middleCCuePosition)
- (symbol . cueClefPosition)
- (symbol . cueClefOctavation)
- (symbol . cueClefOctavationStyle))))
- (recalc-mid-C (make-music 'ApplyContext))
- (seq (make-music 'SequentialMusic
- 'elements (append musics (list recalc-mid-C))))
- (csp (make-music 'ContextSpeccedMusic)))
- (set! (ly:music-property recalc-mid-C 'procedure) ly:set-middle-C!)
- (context-spec-music seq 'Staff)))
-
+ (map-some-music
+ (lambda (m)
+ (and (eq? (ly:music-property m 'name) 'PropertySet)
+ (make-music 'PropertyUnset
+ 'symbol (ly:music-property m 'symbol))))
+ (make-cue-clef-set "treble_(8)")))
;; a function to add new clefs at runtime
(define-public (add-new-clef clef-name clef-glyph clef-position octavation c0-position)
(set! closures
(cons `(cons ,p (lambda () ,expr))
closures)))))))))))
- (define (embedded-lilypond parser lily-string filename line closures)
- (let* ((clone (ly:parser-clone parser closures))
+ (define (embedded-lilypond parser lily-string filename line
+ closures location)
+ (let* ((clone (ly:parser-clone parser closures location))
(result (ly:parse-string-expression clone lily-string
filename line)))
(if (ly:parser-has-error? clone)
(ly:parser-error parser (_ "error in #{ ... #}")))
result))
- (list embedded-lilypond 'parser lily-string filename line (cons 'list (reverse! closures)))))
+ (list embedded-lilypond
+ 'parser lily-string filename line
+ (cons 'list (reverse! closures))
+ 'location)))
(read-hash-extend #\{ read-lily-expression)
(reduce min +inf.0 (map caadr x))
(reduce max -inf.0 (map cadadr x))))
(map (lambda (x)
- (if (eq? (length x) 8)
+ (if (= (length x) 8)
(apply bezier-min-max x)
(apply line-min-max x)))
(map (lambda (x y)
;; modify pointlist to scale the coordinates
(path (map (lambda (x)
(apply
- (if (eq? 6 (length x))
+ (if (= 6 (length x))
(lambda (x1 x2 x3 x4 x5 x6)
(list 'curveto
(* x1 x-scale)
beat-structure
beam-exceptions)
(list
- (cons 'baseMoment base-fraction)
+ (cons 'baseMoment (if (pair? base-fraction)
+ (/ (car base-fraction) (cdr base-fraction))
+ base-fraction))
(cons 'beatStructure beat-structure)
(cons 'beamExceptions beam-exceptions)))
-(define-public (base-fraction time-signature time-signature-settings)
- "Get @code{baseMoment} fraction value for @var{time-signature} from
+(define-public (base-length time-signature time-signature-settings)
+ "Get @code{baseMoment} rational value for @var{time-signature} from
@var{time-signature-settings}."
(let ((return-value (get-setting 'baseMoment
time-signature
time-signature-settings)))
(if (null? return-value)
- (cons 1 (cdr time-signature))
+ (/ (cdr time-signature))
return-value)))
-(define-public (beat-structure base-fraction time-signature time-signature-settings)
- "Get @code{beatStructure} value in @var{base-fraction} units
+(define-public (beat-structure base-length time-signature time-signature-settings)
+ "Get @code{beatStructure} value in @var{base-length} units
for @var{time-signature} from @var{time-signature-settings}."
- (define (fraction-divide numerator denominator)
- (/ (* (car numerator) (cdr denominator))
- (* (cdr numerator) (car denominator))))
(let ((return-value (get-setting 'beatStructure
time-signature
(zero? (remainder numerator 3)))
3
1))
- (beat-length (cons (* group-size (car base-fraction))
- (cdr base-fraction)))
- (beat-count (fraction-divide time-signature beat-length)))
+ (beat-count (/ (car time-signature)
+ (cdr time-signature)
+ base-length
+ group-size)))
(if (integer? beat-count)
(make-list beat-count group-size)
'()))
(define (close-enough fret)
"Decide if @var{fret} is acceptable, given the already used frets."
- (if (null? specified-frets)
- #t
- (reduce
- (lambda (x y)
- (and x y))
- #t
- (map (lambda (specced-fret)
- (or (eq? 0 specced-fret)
- (eq? 0 fret)
- (>= maximum-stretch (abs (- fret specced-fret)))))
- specified-frets))))
+ (every (lambda (specced-fret)
+ (or (zero? specced-fret)
+ (zero? fret)
+ (>= maximum-stretch (abs (- fret specced-fret)))))
+ specified-frets))
(define (string-qualifies string pitch)
"Can @var{pitch} be played on @var{string}, given already placed
notes?"
(let* ((fret (calc-fret pitch string tuning)))
(and (or (and (not restrain-open-strings)
- (eq? fret 0))
+ (zero? fret))
(>= fret minimum-fret))
(integer? fret)
(close-enough fret))))
"Is @var{pitch} and open-string note on @var{string}, given
the current tuning?"
(let* ((fret (calc-fret pitch string tuning)))
- (eq? fret 0)))
+ (zero? fret)))
(define (set-fret! pitch-entry string finger)
(let ((this-fret (calc-fret (car pitch-entry)
(for-each
(lambda (pitch-entry string-fret-finger)
(let* ((string (list-ref string-fret-finger 0))
- (finger (if (eq? (length string-fret-finger) 3)
+ (finger (if (= (length string-fret-finger) 3)
(list-ref string-fret-finger 2)
'()))
(pitch (car pitch-entry))
#f
finger)))
(if (or (not (null? string))
- (eq? digit 0))
- (if (eq? digit 0)
+ (eqv? digit 0))
+ (if (eqv? digit 0)
;; here we handle fingers of 0 -- open strings
(let ((fit-string
(find (lambda (string)
(let* ((string-fret-finger (list-ref string-fret-fingers
(cdr pitch-entry)))
(string (list-ref string-fret-finger 0))
- (finger (if (eq? (length string-fret-finger) 3)
+ (finger (if (= (length string-fret-finger) 3)
(list-ref string-fret-finger 2)
'()))
(pitch (car pitch-entry))
'''
translations = {
+ 'cs': {
+ 'Source': 'Source',
+ 'Learning': 'Učení',
+ 'Music glossary': 'Slovníček',
+ 'Essay': 'Článek',
+ 'Notation': 'Notový zápis',
+ 'Usage': 'Používání',
+ 'Snippets': 'Úryvky',
+ 'Web': 'Web',
+ 'Changes': 'Změny',
+
+ 'Extending': 'Rozšíření',
+ 'Internals': 'Vnitřnosti',
+ 'Contributor': 'Vývojářské',
+
+ ' (split HTML)': ' (rozdělené HTML)',
+ ' (big HTML)': ' (velké HTML)',
+
+ 'Regression tests for ': 'Zkoušky regresí ',
+ 'PDF of regtests for ': 'PDF zkoušky regresí ',
+ 'abc2ly Regression tests for ': 'abc2ly zkoušky regresí ',
+ 'PDF of abc2ly regtests for ': 'PDF abc2ly zkoušky regresí ',
+ 'lilypond-book Regression tests for ': 'lilypond-book zkoušky regresí ',
+ 'PDF of lilypond-book regtests for ': 'PDF lilypond-book zkoušky regresí ',
+ 'MusicXML Regression tests for ': 'MusicXML zkoušky regresí ',
+ 'PDF of MusicXML regtests for ': 'PDF MusicXML zkoušky regresí ',
+
+ 'Doc tarball for ': 'Doc tarball for ',
+ },
'de': {
'Source': 'Quellen',
'Learning': 'Einführung',
'PDF of MusicXML regtests for ': 'PDF der MusicXML Regressionstests für ',
'Doc tarball for ': 'Dokumentation tar-gepackt für ',
- ' (did not exist in 2.12)': ' (nicht existent in 2.12)',
},
'es': {
'Source': 'Código fuente',
'PDF of MusicXML regtests for ': 'Pruebas de MusicXML en PDF para ',
'Doc tarball for ': 'Tarball de la documentación para ',
- ' (did not exist in 2.12)': ' (no existía en la versión 2.12)',
},
'fr': {
'Source': 'Sources',
'PDF of MusicXML regtests for ': 'PDF des tests de régression de MusicXML pour ',
'Doc tarball for ': 'Archive de la documentation pour ',
- ' (did not exist in 2.12)': ' (non disponible pour la version 2.12)',
},
'hu': {
'Source': 'Forrás',
'PDF of MusicXML regtests for ': 'PDF formátumban - verzió: ',
'Doc tarball for ': 'Tömörített csomag - verzió: ',
- ' (did not exist in 2.12)': ' (nem létezett a 2.12-es verzióban)',
},
'it': {
'Source': 'Sorgenti',
'PDF of MusicXML regtests for ': 'PDF dei test di collaudo di MusicXML per ',
'Doc tarball for ': 'Archivio della documentazione per ',
- ' (did not exist in 2.12)': ' (non disponibile per la versione 2.12)',
},
'ja': {
'Source': 'ソース',
'PDF of MusicXML regtests for ': 'MusicXML 回帰テスト (PDF 版) バージョン ',
'Doc tarball for ': 'ドキュメント アーカイブ バージョン ',
- ' (did not exist in 2.12)': ' (バージョン 2.12 には存在しません)',
},
'nl': {
'PDF of MusicXML regtests for ': 'MusicXML regressietesten voor ',
'Doc tarball for ': 'Tarball met documentation voor ',
- ' (did not exist in 2.12)': ' (bestond nog niet in 2.12)',
},
'zh': {
'Source': '源码',
'PDF of MusicXML regtests for ': 'MusicXML 的 PDF 回归测试 ',
'Doc tarball for ': '为文档压缩包',
- ' (did not exist in 2.12)': ' (在 2.12 中不存在)',
},
}
ver_minor = ver_split[0] + '.' + ver_split[1]
url = depth + "doc/v" + ver_minor + "/Documentation/"
- if (ver_minor == '2.12'):
- if (manual=='learning'):
- return url+'user/lilypond-learning'
- elif (manual=='internals'):
- return url+'user/lilypond-internals'
- elif (manual=='notation'):
- return url+'user/lilypond'
- elif (manual=='usage'):
- return url+'user/lilypond-program'
- elif (manual=='snippets'):
- return url+'../input/lsr/lilypond-snippets'
- elif (manual=='changes'):
- return url+'topdocs/NEWS.html'
- elif (manual=='music-glossary'):
- return url+'user/music-glossary'
- elif (manual=='essay'):
- return url+'user/lilypond-learning/Background.html'
- elif (manual=='extending'):
- return url+'user/lilypond/Interfaces-for-programmers.html'
- else:
- return ''
- else:
- return url+manual
+ return url+manual
def addLang(url, lang):
if lang:
manual = 'Music glossary'
url = translateNameToUrl(m, version)
- if (url == ''):
- # can't have a comma here due to texinfo
- make_ver_link(macroLang("manual"+name+mshort+'Pdf',lang),
- "http://lilypond.org",
- mshort+getTrans(" (did not exist in 2.12)",lang))
- make_ver_link(macroLang("manual"+name+mshort+'Split',lang),
- "http://lilypond.org",
- mshort+getTrans(" (did not exist in 2.12)",lang))
- make_ver_link(macroLang("manual"+name+mshort+'Big',lang),
- "http://lilypond.org",
- mshort+getTrans(" (did not exist in 2.12)",lang))
- make_ver_link(macroLang("manual"+name+mshort+'SplitNoName',lang),
- "http://lilypond.org",
- mshort+getTrans(" (did not exist in 2.12)",lang))
- continue
- # 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),
addLang(url, lang),
url, getTrans("Doc tarball for ", lang)+version)
print "@c This file was autogenerated"
-print "@c from: VERSION"
+print "@c from: %s" % VERSION
print "@c by: %s" % sys.argv[0]
print ""
print "@c ************************ Download binaries ************"
srcdir=${srcdir:-.}
set -ux
-AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.in $srcdir/aclocal.m4 | md5sum | cut -b 1-32`
+AUTOGEN_INPUT_CHECKSUM=`cat $srcdir/configure.ac $srcdir/aclocal.m4 | md5sum | cut -b 1-32`
CHECKSUM_FILE=autogen.checksum
set -e
${srcdir}/autogen.sh "$@"
printf "%s" $AUTOGEN_INPUT_CHECKSUM > $CHECKSUM_FILE
-
$(outdir)/config.hh: $(config_h)
cp -p $< $@
-configure: configure.in aclocal.m4
+configure: configure.ac aclocal.m4
NOCONFIGURE=yes $(src-depth)/autogen.sh
chmod +x configure