* only show user-visible changes.
@end ignore
+@item
+The @code{thin-kern} property of the @code{BarLine} grob has been
+renamed to @code{segno-kern}.
+
+@item
+@code{KeyCancellation} grobs now ignore cue clefs (like
+@code{KeySignature} grobs do).
+
+@item
+Add support for @code{\once@tie{}\unset}
+
+@item
+It is now possible to individually color both the dots and parentheses
+in fret diagrams when using the @code{\fret-diagram-verbose} markup
+command.
+
+@lilypond[verbatim,quote,relative=1]
+\new Voice {
+ c1^\markup {
+ \override #'(fret-diagram-details . (
+ (finger-code . in-dot))) {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1 red)
+ (place-fret 4 5 2 inverted)
+ (place-fret 3 5 3 green)
+ (place-fret 2 5 4 blue inverted)
+ (place-fret 1 3 1 violet)
+ (barre 5 1 3 ))
+ }
+ }
+ c1^\markup {
+ \override #'(fret-diagram-details . (
+ (finger-code . below-string))) {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1 red parenthesized)
+ (place-fret 4 5 2 yellow
+ default-paren-color
+ parenthesized)
+ (place-fret 3 5 3 green)
+ (place-fret 2 5 4 blue )
+ (place-fret 1 3 1)
+ (barre 5 1 3))
+ }
+ }
+}
+@end lilypond
+
+@item
+Two new properties have been added for use in
+@code{fret-diagram-details} when using the @code{\fret-diagram-verbose}
+markup command; @code{fret-label-horizontal-offset} which affects the
+@code{fret-label-indication} and @code{paren-padding} which controls the
+space between the dot and the parentheses surrounding it.
+
+@lilypond[verbatim,quote,relative=1]
+\new Voice {
+ c1^\markup {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1)
+ (place-fret 4 5 2)
+ (place-fret 3 5 3)
+ (place-fret 1 6 4 parenthesized)
+ (place-fret 2 3 1)
+ (barre 5 2 3))
+ }
+ c1^\markup {
+ \override #'(fret-diagram-details . (
+ (fret-label-horizontal-offset . 2)
+ (paren-padding . 0.25))) {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1)
+ (place-fret 4 5 2)
+ (place-fret 3 5 3)
+ (place-fret 1 6 4 parenthesized)
+ (place-fret 2 3 1)
+ (barre 5 2 3))
+ }
+ }
+}
+@end lilypond
+
+@item
+A new markup command @code{\justify-line} has been added. Similar to
+the @code{\fill-line} markup command except that instead of setting
+@emph{words} in columns, the @code{\justify-line} command balances the
+whitespace between them ensuring that when there are three or more
+words in a markup, the whitespace is always consistent.
+
+@lilypond[quote,verbatim,papersize=a6]
+\markup \fill-line {oooooo oooooo oooooo oooooo}
+\markup \fill-line {ooooooooo oooooooo oo ooo}
+@end lilypond
+
+@lilypond[quote,verbatim,papersize=a6]
+\markup \justify-line {oooooo oooooo oooooo oooooo}
+\markup \justify-line {ooooooooo oooooooo oo ooo}
+@end lilypond
+
@item
A new command @code{\magnifyMusic} has been added, which allows
the notation size to be changed without changing the staff size,
\new Voice \relative {
\voiceTwo
\magnifyMusic 0.63 {
+ \override Score.SpacingSpanner.spacing-increment = #(* 1.2 0.63)
r32 c'' a c a c a c r c a c a c a c
r c a c a c a c a c a c a c a c
}
@code{TabNoteHead.style = #'slash}.
@item
-Four new Clefs have been added. @emph{Double G}, @emph{Tenor G},
-@emph{Varpercussion} and @emph{varC}.
+Four new Clef glyphs have been added @emph{Double G}, @emph{Tenor G},
+@emph{Varpercussion} and @emph{varC} and their related tessitura.
@lilypond[verbatim,quote,fragment]
\override Staff.Clef.full-size-change = ##t
\clef "GG" c c c c
\clef "tenorG" c c c c
\clef "varC" c c c c
+ \clef "altovarC" c c c c
+ \clef "tenorvarC" c c c c
+ \clef "baritonevarC" c c c c
\clef "varpercussion" c c c c
\break
\clef "GG" c c c c
\clef "tenorG" c c c c
\clef "varC" c c c c
+ \clef "altovarC" c c c c
+ \clef "tenorvarC" c c c c
+ \clef "baritonevarC" c c c
\clef "varpercussion" c c c c
@end lilypond
-@c -*- coding: utf-8; mode: texinfo; -*-
@node Administrative policies
@chapter Administrative policies
* Meta-policy for this document::
* Environment variables::
* Meisters::
-* Patchy::
+* Automated testing with Patchy::
* Administrative mailing list::
* Grand Organization Project (GOP)::
* Grand LilyPond Input Syntax Standardization (GLISS)::
@end itemize
-@node Patchy
-@section Patchy
-@subheading Introduction
+@node Automated testing with Patchy
+@section Automated testing with Patchy
-Patchy is a set of Python scripts to automate two administrative
-tasks:
+@menu
+* Overview of Patchy::
+* Patchy requirements::
+* Installing Patchy::
+* Configuring Patchy::
+* Running the scripts::
+* Automating Patchy::
+* Troubleshooting Patchy::
+@end menu
+
+@node Overview of Patchy
+@subsection Overview of Patchy
+
+Patchy is a set of Python scripts used for testing patches or testing &
+pushing new commits added to @code{remote/origin/staging} to
+@code{remote/origin/master}.
+
+No programmatic skill is required to run either of the scripts; although
+knowledge of compiling LilyPond and its documentation along with
+understanding how to configure the @var{PATH} environment of your
+computer is required. See @ref{Working with source code}.
+
+The two scripts that are used for each function are:
@itemize
@item
-@code{lilypond-patchy-staging.py}: checks that new commits in
-@code{staging} can compile the regtests and documentation before
-merging @code{staging} into @code{master}.
+@code{test-patches.py}. This script tests issues labelled as
+@qq{Patch-New} on the LilyPond issue tracker. Part of the testing
+process involves running the regression tests, so this script always
+requires some human intervention in order to visually check for any
+differences that may be present after a successful test has occurred.
+
+@item
+@code{lilypond-patchy-staging.py}. This script checks for any new
+commits in @code{remote/origin/staging}, makes sure that the new HEAD
+compiles along with all the LilyPond documentation. Then finally
+pushing to @code{remote/origin/master}. This script can be run and left
+unattended, requiring no human intervention.
+
+@end itemize
+
+Both of the scripts can be run independently of each other and it is not
+necessary to be able to run both. So if you wanted to contribute to
+LilyPond development, for example by @emph{just} testing patches then
+this would still be a helpful contribution to LilyPond's development.
+
+Patchy can also be configured to send emails after each successful (or
+unsuccessful) operation. This is not a requirement and is turned off
+by default.
+
+@c Need to explain in more detail how to set up Patchy for email but
+@c as I don't use myself it I have no experience - JL
+
+
+@node Patchy requirements
+@subsection Patchy requirements
+
+@unnumberedsubsec Testing new patches
-(completely automatic)
+@itemize
+
+@item
+A full local copy of the source code. See
+@ref{Working with source code}.
@item
-@code{test-patches.py}: checks that patches apply to Git @code{master},
-compile, and lets a human check that there are no big unintended
-changes to the regtests.
+All the software needed for compiling LilyPond @emph{and} the
+documentation. Although being able to build the full set of LilyPond's
+manuals is not mandatory for testing (most) patches, part of the patch
+testing process requires that the regression tests are run and it is
+this that requires the software normally used for compiling
+documentation. See @ref{Compiling}.
-(requires some human input)
+@item
+Commit access is @emph{not} required to test patches, but a valid login
+to @uref{http://code.google.com/} @emph{is}.
@end itemize
-@subheading Installing Patchy
-To install Patchy, you should do the following:
+@unnumberedsubsec Testing & pushing new commits
+
+@itemize
+
+@item
+A full local copy of the source code. See
+@ref{Working with source code}.
-@enumerate
@item
-Create a new user on your box to run Patchy; this is a security
-step for your own protection. It is recommended that this should
-not be an administrator. New users are created from System;
-Administration; Users and Groups.
+All the software needed for compiling LilyPond @emph{and} the
+documentation. Unlike testing patches, being able to build the full set
+of LilyPond's documentation is required to be able to test & push new
+commits. See @ref{Compiling}.
@item
-Get the Patchy scripts from
+Commit access @emph{is} required to test and push new commits, but a
+valid login to @uref{http://code.google.com/} is @emph{not}. See
+@ref{Commit access}.
+
+@end itemize
+
+
+@node Installing Patchy
+@subsection Installing Patchy
+
+The Patchy scripts are not part of the LilyPond code base, but can be
+downloaded from @uref{https://github.com/gperciva/lilypond-extra/}. The
+scripts and related Python libraries are all located in the
+@file{patches/} directory.
+
+Alternatively, use @code{git clone};
+
@example
-@uref{https://github.com/gperciva/lilypond-extra/}
+git clone https://github.com/gperciva/lilypond-extra/
@end example
-Patchy is in the @file{patches/} directory.
+
+This makes it simpler to update the scripts if any changes are ever made
+to them. Finally, add the location of the @file{patches/} directory to
+your @var{PATH}.
+
+
+@node Configuring Patchy
+@subsection Configuring Patchy
+
+@warning{It is recommended to create a new user on your computer
+specifically to run the Patchy scripts as a security precaution and that
+this user should not have any administrative privileges. Also do not
+set password protection for your ssh key else you will not be able to
+run the scripts unattended.}
+
+@enumerate
@item
-Put the scripts and Python libraries contained in @file{patches} in a
-sensible place on your system; this can be done by appending
-@file{patches/} full path to the @var{PATH} of the user that runs
-Patchy.
+Make sure the environment variables @var{LILYPOND_GIT} and
+@var{LILYPOND_BUILD_DIR} are configured appropriately. See
+@ref{Environment variables}.
@item
-Create a new git repository with
+To save being prompted for your login and password to
+@uref{http://code.google.com/} when testing patches. create a
+@emph{plain-text} file in your Patchy user's @code{$HOME} directory
+called @code{.lilypond-project-hosting-login} containing your login and
+password, each on a separate line.
+
@example
-git clone git://git.sv.gnu.org/lilypond.git
+joe_smith123@@gmail.com
+mYp455w0rd!
@end example
-This will create a directory called lilypond with the repo in it.
-Make sure it's where you want it and name it lilypond-git
-(assuming you want to follow the standard naming conventions).
@item
-Create environment variables @var{LILYPOND_GIT} and
-@var{LILYPOND_BUILD_DIR}, see @ref{Environment variables}.
+Manually run either the @code{test-patches.py} or
+@code{lilypond-patchy-staging.py} scripts and when prompted:
+
+@smallexample
+Warning: using default config; please edit /home/joe/.lilypond-patchy-config
+Are you sure that you want to continue with the default config? (y/[n])
+@end smallexample
+
+Answer @qq{@code{n}} and press enter.
+
+The next time either of the scripts are run they will use the
+@code{.lilypond-patchy-config} settings copied to your @code{$HOME}
+directory.
@item
-Run Patchy once to set up config files, answer @q{@code{n}} when it
-asks for going on, unless the default config file happens to suit your
-setup:
+Manually edit the @file{.lilypond-patchy-config} file, located in your
+@code{$HOME} directory to change any of the default settings.
+
+@end enumerate
+
+These include:
+
+@itemize
+
+@item
+All @code{make} operations are run with;
@example
-lilypond-patchy-staging.py
+extra_make_options = -j3 CPU_COUNT=3
@end example
+See @ref{Saving time with the -j option}
+
@item
-Edit @file{$HOME/.lilypond-patchy-config} to provide the location of
-your local lilypond Git repository, working directories for your build
-directory, your results directory, compiler options and notification
-method. If you don't want to use email notification, then delete
-everything after @code{smtp_command:}.
+A complete build of all the LilyPond documentation is @emph{not}
+performed;
+@example
+patch_test_build_docs = no
+@end example
@item
-Ensure that your new user has git push access. Follow the
-instructions in the CG at @ref{Commit access}. Do not set
-password protection for the key --- if you do you will not be able
-to run patchy unattended.
+Each instance of either a patch test or commit test & push is logged in;
+@example
+auto_compile_results_dir = ~/lilypond-auto-compile-results/
+@end example
-@end enumerate
+@item
+Both scripts will perform their build operations in;
+@example
+build_dir = /tmp/lilypond-autobuild/
+@end example
+
+@end itemize
-@subheading lilypond-patchy-staging.py
+Each completed patch test will also generate its own directory in
+@file{/tmp/...} labelled with the tracker issue number prefixed by
+@code{show-}.
+@example
+\tmp\show-3446
+@end example
+
+Both the scripts create clones of @code{staging} and @code{master}
+branches (prefixed with @code{test-}) with a third branch, called
+@code{test-master-lock} used as a check to protect against two or more
+instances of Patchy being run locally at the same time.
+
+
+@node Running the scripts
+@subsection Running the scripts
+
+@unnumberedsubsec Testing & pushing new commits
+
+@code{lilypond-patchy-staging.py} is run @emph{without} any arguments.
+It then checks to see if @code{remote/origin/staging} is
+@qq{further ahead} than @code{remote/origin/master}.
+
+@noindent
+If there are no new differences between the two branches since the last
+run check, the script will report something like this:
+
+@smallexample
+(UTC) Begin LilyPond compile, previous commit at 4726764cb591f622e7893407db0e7d42bcde90d9
+Success: No new commits in staging
+@end smallexample
+
+@noindent
+If there are any differences between the two branches since the last
+run check, (or if the script cannot for any reason, locate the last
+instance of a commit that it checked) it will report something like
+this:
+
+@smallexample
+(UTC) Begin LilyPond compile, previous commit at 4726764cb591f622e7893407db0e7d42bcde90d9
+Merged staging, now at: 79e98a773b6570cfa28a15775a9dea3d3e54d6b5
+ Success: ./autogen.sh --noconfigure
+ Success: /tmp/lilypond-autobuild/configure --disable-optimising
+...
+@end smallexample
+
+and proceed with running @code{make}, @code{make test} and a
+@code{make doc}. Unlike @code{test-patches.py} if all the tests pass,
+the script then pushes the changes to @code{remote/origin/master}.
+
+@smallexample
+...
+Success: nice make clean
+Success: nice make -j7 CPU_COUNT=7
+Success: nice make test -j7 CPU_COUNT=7
+Success: nice make doc -j7 CPU_COUNT=7
+To ssh://joe@@git.sv.gnu.org/srv/git/lilypond.git
+ 79e98a7..4726764 test-staging -> master
+ Success: pushed to master
+@end smallexample
+
+@warning{In the case where any of the @code{lilypond-patchy-staging.py}
+tests fail, do not try to push your own fixes but report the failures to
+the Developers List <lilypond-devel@@gnu.org> for advice.}
+
+
+@unnumberedsubsec Testing new patches
+
+When run without any argument, @code{test-patches.py} will check
+@uref{http://code.google.com/p/lilypond/issues/list} for all tracker
+issues that are marked with the label @code{Patch-new}. It then scrapes
+the issue, looking for the last Rietveld URL entered. It then downloads
+the patch file and applies it to @code{test-master}.
+
+Here is an example where two tracker issues labeled as @code{Patch-new}
+were detected:
+
+@smallexample
+...
+issues [4007, 4008]
+Trying issue 4007
+Found url: http://codereview.appspot.com/112210043
+Found patch: 4007,/home/joe/lilypond-git/issue112210043_1.diff,
+Trying issue 4008
+Found url: http://codereview.appspot.com/115770043
+Found patch: 4008,/home/joe/lilypond-git/issue115770043_1.diff,
+Fetching, cloning, compiling master.
+...
+@end smallexample
+
+If run no tracker items with the @var{Patch-New} label are found it will
+report:
-@code{lilypond-patchy-staging.py} is run with
@example
-python lilypond-patchy-staging.py
+issues []
@end example
-Not much appears to happen except you can see a lot of CPU gets used
-if you open System Monitor. There's not much point running
-@code{lilypond-patchy-staging.py} unless there is something in
-@code{staging} to be merged to @code{master}, however, if there's
-nothing new in @code{staging} then the script won't waste resources by
-compiling anything.
-
-The script fetches the current patches in staging and runs
-@code{make}, @code{make test} and @code{make doc} to ensure that all of
-these complete error-free. If you have set Patchy up to use email,
-it emails its results to you. If you haven't, then you can view
-them in a logfile. It also merges @code{staging} into @code{master}.
-
-@warning{in case the build fails, do not try to push fixes on top of
-staging branch, for details see @ref{Pushing to staging}.}
-
-When you have run Patchy a few successful times with email sending,
-you are ready for running it as a cron job. First, make sure you have
-the following in @file{$HOME/.lilypond-patchy-config} to avoid
-email flood:
+
+The script can also be run using the tracker issue number(s) as an
+argument regardless if the @var{Patch-New} label has been assigned;
@example
-[notification]
-notify_non_action = no
+test-patches.py 4006
+@end example
+
+or
+
+@example
+test-patches.py 4006 3992 4020
+@end example
+
+The script then checks to see if any previously
+@code{make test-baseline}s have been generated and if the commit ID of
+@code{remote/origin/master} is different from that previously completed
+test.
+
+@noindent
+If no previous @code{make test-baseline} test is discovered or if the
+commit ID of @code{remote/origin/master} has changed, then a new
+@code{make test-baseline} will run first automatically before the patch
+is tested:
+
+This shows when the commit ID has changed:
+
+@smallexample
+...
+(UTC) Begin LilyPond compile, previous commit at 3f92dcb2c81dcd2755542b57a0a5f2039f29a211
+Merged master, now at: 4726764cb591f622e7893407db0e7d42bcde90d9
+ Success: ./autogen.sh --noconfigure
+ Success: /tmp/lilypond-autobuild/configure --disable-optimising
+ Success: nice make clean
+ Success: nice make -j3 CPU_COUNT=3
+ Success: nice make test-baseline -j3 CPU_COUNT=3
+ Success: nice make doc -j3 CPU_COUNT=3
+ Success: nice make doc-clean
+...
+@end smallexample
+
+@noindent
+If a previous regression test @emph{is} discovered @emph{and} if the
+commit ID of @code{remote/origin/master} has not changed, then the patch
+will be tested against the previous @code{make test-baseline} without
+the need to re-generate a new one:
+
+@smallexample
+...
+issues [4009]
+Trying issue 4009
+Found url: http://codereview.appspot.com/110540043
+Found patch: 4009,/home/joe/lilypond-extra/patches/issue110540043_1.diff,
+Fetching, cloning, compiling master.
+(UTC) Begin LilyPond compile, previous commit at 4726764cb591f622e7893407db0e7d42bcde90d9
+ Success: No new commits in master
+Using test baseline from previous build.
+...
+@end smallexample
+
+The patch is then applied and a @code{make} and @code{make check} are
+run. A full @code{make doc} is also run if the
+@file{.lilypond-patchy-config} file has been edited accordingly;
+
+@smallexample
+...
+Issue 4009:
+Issue 4009: Testing patch issue110540043_1.diff
+ Success: git apply --index /home/joe/lilypond-git/issue112210043_1.diff
+ Success: ./autogen.sh --noconfigure
+ Success: /tmp/lilypond-autobuild/configure --disable-optimising
+ Success: nice make clean
+ Success: nice make -j3 CPU_COUNT=3
+ Success: nice make check -j3 CPU_COUNT=3
+ Success: nice make doc -j3 CPU_COUNT=3
+...
+@end smallexample
+
+Once all the tests have run (successfully or not), the script will clean
+up from the previous patch and, if required, start testing the next
+issue;
+
+@smallexample
+...
+Issue 4007: Cleaning up
+ Success: nice make test-clean
+ Success: nice make doc-clean
+ Success: nice make clean
+ Success: git reset --hard
+Issue 4007: Done.
+Issue 4008:
+Issue 4008: Testing patch issue115770043_1_diff
+ Success: git apply --index /home/joe/lilypond-git/issue115770043_1.diff
+ Success: ./autogen.sh --noconfigure
+...
+@end smallexample
+
+and so on.
+
+@unnumberedsubsubsec Checking the regression test results
+
+Assuming the patch passed all the @code{make} tests, the regression
+differences will be located in the @file{/test-results/} directory
+within the build location for the patch issue number;
+
+@example
+/tmp/show-4007/test-results/
+@end example
+
+Open @file{index.html} in a browser of your choice to view any
+differences.
+
+@noindent
+Alternatively if the Firefox browser is installed, then the regression
+test results can be opened by calling the appropriate
+@file{show-regtests-} file located in the auto-compile log location;
+
+@example
+sh ~/lilypond-auto-compile-results/show-regtests-4007
+@end example
+
+See @ref{Regression tests}.
+
+@unnumberedsubsec Reporting test results
+
+Once a patch has been tested and the regression tests have been
+manually checked, the tracker can be updated manually by editing the
+tracker issue directly in the web browser or by using two additional
+python scripts that are included as part of the Patchy suite.
+
+@unnumberedsubsubsec For patches that have passed
+
+Use the @code{accept-patch.py} script and run it with the Google issue
+tracker number (not the Rietveld issue number) as an argument;
+
+@example
+accept-patch.py 4007
+@end example
+
+This will automatically update the tracker issue with the phrase
+@qq{Patchy the autobot says: passes tests.}.
+
+@noindent
+It is also possible to add additional information to the default
+message by adding a second argument within double-quote marks.
+
+@example
+accept-patch.py 4007 "This also includes a full documentation build."
+@end example
+
+The tracker issue's label is then changed automatically to
+@qq{Patch-review}.
+
+@unnumberedsubsubsec Patches that have failed
+
+Use the @code{reject-patch.py} script and run it with the Google issue
+tracker number (not the Rietveld issue number) as an argument but you
+@emph{must} also include a second argument, in double-quotes, stating
+the reason the patch has been rejected;
+
+@example
+reject-patch.py 4007 "Fails the 'make check' test."
@end example
-Then, assuming Patchy run with user account @code{patchy}, write the
-following to @file{$HOME/lilypond-patchy.cron}, adapting it as
-necessary (the @code{/2} means @qq{run this every 2 hours}):
+Once the @code{reject-patch.py} script has been run, the tracker issue's
+label is changed automatically to @qq{Patch-Needs_work}.
+
+
+@node Automating Patchy
+@subsection Automating Patchy
+
+To run as a cron job make sure you have;
+
@example
-02 0-23/2 * * * /home/patchy/git/lilypond-extra/patches/lilypond-patchy-staging.py
+[notification]
+notify_non_action = no
@end example
-@warning{@code{cron} will not inherit environment variables from
-your main setup, so you must re-define any variables inside
-@file{$HOME/lilypond-patchy.cron}. For instance, @var{LILYPOND_GIT}
-may need to be defined if @var{git_repository_dir} is not correctly
-set in @file{$HOME/.lilypond-patchy-config}.}
+in @file{$HOME/.lilypond-patchy-config} to avoid any unintentional email
+flooding:
+
+Assuming that Patchy run a user @qq{patchy}, create a file called
+@file{$HOME/lilypond-patchy.cron}, adapting it as necessary (the
+@code{/2} means @qq{run this every 2 hours}):
+
+@smallexample
+02 0-23/2 * * * /home/patchy/lilypond-extra/patches/lilypond-patchy-staging.py
+@end smallexample
-Finally, install the cron job (you may need superuser privileges for
+@warning{@code{cron} will not inherit environment variables so you must
+re-define any variables inside @file{$HOME/lilypond-patchy.cron}. For
+instance, @var{LILYPOND_GIT} may need to be defined if
+@var{git_repository_dir} is not correctly set in
+@file{$HOME/.lilypond-patchy-config}.}
+
+Finally, apply the cron job (you may need superuser privileges for
this):
+
@example
crontab -u patchy /home/patchy/lilypond-patchy.cron
@end example
-@subheading test-patches.py
-@code{test-patches.py} prepares a regtest comparison for a human to
-quickly glance at, to determine if the patch is ready for a review.
-After looking at the comparison (or the lack of a comparison in the
-case of problems), run @code{accept-patch.py} or
-@code{reject-patch.py}.
-
-Once a patch has gotten a "LGTM" from Patchy, it should be
-reviewed by relevant developers, and if it passes this, it can be
-considered for countdown (see @ref{Commits and patches}) and
-pushing to staging (see @ref{Pushing to staging}).
+
+@node Troubleshooting Patchy
+@subsection Troubleshooting Patchy
+
+The following is a list of the most common messages that the scripts
+may report with explanations.
+
+@itemize
+
+@item
+@example
+issues []
+@end example
+
+@itemize
+
+@item
+There are currently no tracker issues with the @code{Patch-New} status.
+
+@item
+If specific tracker issue number has been used as an argument when
+running @code{test-patches.py}, then the issue contains no URL to
+Rietveld.
+
+@end itemize
+
+@item
+@smallexample
+this Git revision has already been pushed by an operator other than this Patchy.
+@end smallexample
+
+@itemize
+
+@item
+Another, remote, machine has already tested and pushed the new commits
+in staging.
+
+@item
+You may also see this on your local machine if the auto-build files
+have been deleted and this computer has previously already pushed the
+listed commit ID to @code{master}.
+
+@end itemize
+
+
+
+@item
+@smallexample
+Git revision has not changed but checksum of test baseline has, must rebuild.
+@end smallexample
+
+This occurs when Patchy detects that the commit ID has not changed
+since the last test but it cannot locate the last
+@code{make test-baseline} (usually because it has been deleted or moved)
+and so a new @code{test-baseline} is rebuilt.
+
+@item
+@example
+Last patch for issue xxxx already tested or under testing
+by another Patchy instance, skipping.
+@end example
+
+@itemize
+
+@item
+There is another instance of Patchy running on your computer that is
+testing the same tracker issue.
+
+@item
+A previous test attempt was unsuccessful for some reason and the scripts
+were not able to tidy up after themselves (for example if you manually
+halt the testing process by killing it or closing the terminal you may
+have been running the script in).
+
+@noindent
+There is a hidden file located in the @code{$HOME} directory of the user
+running Patchy called @code{.lilypond-patchy-cache} that records the
+current patches that are being tested, have been tested and the commit
+ID of @code{remote/origin/master} since the last test. It will contain
+a line like this:
+
+@example
+[3995]
+issue105560044_120001_diff = testing
+@end example
+
+for any issue that it thinks is still in the process of being tested.
+
+@noindent
+Manually remove this entry and re-run the script.
+
+@end itemize
+
+@item
+@example
+test-master-lock and PID entry exist but previous Patchy
+run (PID xxxxx) died, resetting test-master-lock anyway.
+@end example
+
+@item
+A previous test attempt was unsuccessful for some reason and the scripts
+were not able to tidy up after themselves (for example if you manually
+halt the testing process by killing it or closing the terminal you may
+have been running the script in). The @code{test-master-lock} branch
+was therefore not able to be deleted cleanly however, nothing needs to
+be done the scripts will rebuild any tests it needs to.
+
+@item
+@example
+fatal: A branch named 'test-master-lock' already exists.
+@end example
+
+@itemize
+
+@item
+There is another instance of Patchy running on your computer that is
+testing the same tracker issue.
+
+@item
+A previous test attempt was unsuccessful for some reason and the scripts
+were not able to tidy up after themselves (for example if you manually
+halt the testing process by killing it or closing the terminal you may
+have been running the script in). The @code{test-master-lock} branch
+was therefore not able to be deleted cleanly, in this case you must
+manually delete the @code{test-master-lock} branch in your
+@code{$LILYPOND_GIT} directory.
+
+@example
+git branch -d test-master-lock
+@end example
+
+@noindent
+It may be wise to also manually delete @code{test-master} and
+@code{test-staging} too, just to be safe.
+
+@end itemize
+
+@item
+@example
+*** FAILED STEP ***
+ merge from staging
+ Another instance (PID xxxxx) is already running.
+@end example
+
+@noindent
+This occurs when trying to run @code{lilypond-patchy-staging.py} when
+another instance of either script is already running locally.
+
+@item
+@example
+Warning: something went wrong; omitting patch for issue 3976
+@end example
+
+@itemize
+
+@item
+The Rietveld URL as listed in the tracker is incorrect (e.g. missing or
+incorrect issue number
+
+@item
+The patch on Rietveld is too large to download
+
+@end itemize
+
+@end itemize
@node Administrative mailing list
@emph{selected snippet} in the documentation. It will also appear
automatically in the Snippets lists. See @ref{Introduction to LSR}.
-Snippets that @emph{don't} have the @qq{docs} tage will still be
+Snippets that @emph{don't} have the @qq{docs} tag will still be
searchable and viewable within the LSR, but will be not be included in
the Snippets list or be able to be included as part of the main
documentation.
@node Special characters
@unnumberedsubsubsec Special characters
+@warning{In Texinfo, the backslash is an ordinary character, and
+is entered without escaping (e.g.
+@samp{The@tie{}@@code@{@bs{}foo@}@tie{}command}). However, within
+double-quoted Scheme and/or LilyPond strings, backslashes
+(including those ending up in Texinfo markup) need to be escaped
+by doubling them:
+@example
+(define (foo x)
+ "The @@code@{@bs{}@bs{}foo@} command..."
+ ...)
+@end example}
+
@itemize
@item
@code{--}, @code{---} --- Create an en dash (--) or an em dash
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
+To create the countdown announcement, use the
+@code{make-countdown-announcement.sh} script, which takes the
+deadline date, and optionally your name. Follow the instructions
+provided:
+@example
+cd $LILYPOND_BUILD_DIR
+../scripts/auxiliar/make-countdown-announcement.sh "Jan 1, 2001" James
+@end example
-Cheers,
-Colin
+The script produces an announcement that is easily readable in all
+email clients. Also, whenever a new contributor submits a patch,
+you will be prompted to add the new username and author name to
+the script itself, and then commit those changes to the main git
+repository.
-@end smallexample
@item
On the scheduled countdown day, the Patch Meister reviews the
@section Introduction to LSR
The
-@uref{http://lsr.dsi.unimi.it/, LilyPond Snippet Repository (LSR)}
+@uref{http://lsr.di.unimi.it/, LilyPond Snippet Repository (LSR)}
is a collection of lilypond examples. A subset of these examples
are automatically imported into the documentation, making it easy
for users to contribute to the docs without learning Git and
When you create (or find!) a nice snippet, if it is supported by
the LilyPond version running on the LSR, please add it to the LSR.
-Go to @uref{http://lsr.dsi.unimi.it/, LSR} and log in -- if you haven't
+Go to @uref{http://lsr.di.unimi.it/, LSR} and log in -- if you haven't
already, create an account. Follow the instructions on the website.
These instructions also explain how to modify existing snippets.
@section Approving snippets
The main task of LSR editors is approving snippets. To find a list of
-unapproved snippets, log into @uref{http://lsr.dsi.unimi.it/, LSR} and
+unapproved snippets, log into @uref{http://lsr.di.unimi.it/, LSR} and
select @qq{No} from the dropdown menu to the right of the word
@qq{Approved} at the bottom of the interface, then click
@qq{Enable filter}.
against them. From the top source directory, run:
@smallexample
-wget http://lsr.dsi.unimi.it/download/lsr-snippets-docs-`date +%F`.tar.gz
+wget http://lsr.di.unimi.it/download/lsr-snippets-docs-`date +%F`.tar.gz
tar -xzf lsr-snippets-docs-`date +%F`.tar.gz
make -C $LILYPOND_BUILD_DIR
scripts/auxiliar/makelsr.py lsr-snippets-docs-`date +%F`
@item
Download the latest snippet tarball from
-@uref{http://lsr.dsi.unimi.it/download/} and extract it.
+@uref{http://lsr.di.unimi.it/download/} and extract it.
The relevant files can be found in the @file{all} subdirectory.
Make sure your shell is using an English language version, for
example @code{LANG=en_US}, then run @command{convert-ly} on all
@item
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
+build machine), use the commands below to do the following:
+
+@itemize
+@item
+switch to the release branch
+
+@item
+update the release branch from origin/master
+
+@item
+update the translation files
+
+@item
+create the release announcement
+
+@item
+update the build versions.
+
+@itemize
+@item
+VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
+
+@item
+VERSION_STABLE = the current stable version (probably no change here)
+
+@end itemize
+
+@item
+update the @qq{Welcome to Lilypond} version numbers to the version about to be
+released
+
+@end itemize
+
+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}.
mv $LILYPOND_BUILD_DIR/po/lilypond.pot po/
gedit Documentation/web/news-front.itexi Documentation/web/news.itexi
gedit VERSION
+gedit ly/Wel*.ly
@end example
-@itemize
-@item
-VERSION_DEVEL = the current development version (previous VERSION_DEVEL + 0.01)
-
-@item
-VERSION_STABLE = the current stable version (probably no change here)
-
-@end itemize
-
-@item
-Manually edit the two files @file{../ly/Welcome_to_LilyPond.ly} and
-@file{../ly/Welcome-to-LilyPond-MacOS.ly} such that the hard coded
-@code{\version} number reflects the version number about to be released.
-
@item
Commit, push, switch back to master (or wherever else):
git commit -m "Release: bump VERSION_DEVEL." ly/Welcome-to-LilyPond-MacOS.ly
git commit -m "PO: update template." po/lilypond.pot
git commit -m "Release: update news." Documentation/web/
+git commit -m "Release: bump Welcome versions." ly/Wel*.ly
git push origin HEAD:release/unstable
git checkout master
@end example
příklady!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Obzvláště poučné příklady z LSR jsou zahrnuty v naší
Zde jsou vybrané úryvky ukázány na kódu LilyPondu s vytvořeným notovým
zápisem. Úryvky pocházejí z
-@uref{http://lsr@/.dsi@/.unimi@/.it,Skladiště s úryvky LilyPondu}
+@uref{http://lsr@/.di@/.unimi@/.it,Skladiště s úryvky LilyPondu}
(LSR) a všechny se nacházejí pod Public Domain.
Vezměte na vědomí, že tento dokument nepředstavuje žádnou určitou
@end lilypond
Die @code{dash}-Eigenschaft der Arpeggioklammern werden von
-der @code{'dash-details}-Eigenschaft kontrolliert, die
+der @code{'dash-definition}-Eigenschaft kontrolliert, die
beschrieben ist in @ref{Legatobögen}.
Ein Arpeggio kann auch explizit ausgeschrieben werden, indem
@c @snippets
@c @lilypondfile[verbatim,quote,texidoc,doctitle]
@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\Staff \RemoveEmptyStaves.ly}
-@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312
+@c http://lsr.di.unimi.it/LSR/Item?u=1&id=312
@seealso
eigene Beispiele!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Besonders lehrreiche Beispiele aus dem LSR werden in unsere offizielle
der Übersetzungsstatus für nicht Nicht-Englischsprachige.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}:
Beispiele, Tricks und Tipps, von LilyPond-Benutzern erstellt.
@item
Hier werden ausgewählte Schnipsel an LilyPond-Code mit der produzierten
Notation gezeigt. Die Schnipsel stammen aus dem
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond-Schnipsel-Depot}
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond-Schnipsel-Depot}
(LSR) und stehen alle unter der Public Domain.
Beachten Sie, dass dieses Dokument keine bestimmte Teilmenge von
@lilypondfile[verbatim,quote,texidoc,doctitle]
{printing-hairpins-using-al-niente-notation.ly}
-@cindex Ferneyhough, reguladores de
+@cindex Ferneyhough, reguladores de
@cindex reguladores de Ferneyhough
@cindex reguladores acampanados
@cindex acampanados, reguladores
@end lilypond
Las propiedades de discontinuidad del paréntesis del arpegio se
-controlan mediante la propiedad @code{'dash-details}, que se describe
-en @ref{Ligaduras de expresión}.
+controlan mediante la propiedad @code{'dash-definition}, que se
+describe en @ref{Ligaduras de expresión}.
Los acordes arpegiados se pueden desarrollar explícitamente utilizando
@notation{ligaduras de unión}. Véase @ref{Ligaduras de unión}.
@c @snippets
@c @lilypondfile[verbatim,quote,texidoc,doctitle]
@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly}
-@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312
+@c http://lsr.di.unimi.it/LSR/Item?u=1&id=312
@seealso
Manual de aprendizaje:
@snippets
@lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-registers.ly}
+{accordion-register-symbols.ly}
@seealso
Fragmentos de código:
escrito, y añada las suyas propias!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Los ejemplos del LSR que son especialmente instructivos se incluyen en
estado del proceso de traducción para los lectores no anglófonos.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository (el almacén de fragmentos de código de LilyPond)}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository (el almacén de fragmentos de código de LilyPond)}:
ejemplos, consejos y trucos creados por los usuarios.
@item
Este manual presenta un conjunto seleccionado de fragmentos de código
de LilyPond extraídos del
-@uref{http://lsr@/.dsi@/.unimi@/.it,Repositorio de fragmentos de
+@uref{http://lsr@/.di@/.unimi@/.it,Repositorio de fragmentos de
código de LilyPond} (LSR). Todos los fragmentos se encuentran en el
dominio público.
@newsItem
@subsubheading February 26, 2005
-The @uref{http://lsr.dsi.unimi.it/,Lilypond Snippet
+The @uref{http://lsr.di.unimi.it/,Lilypond Snippet
Repository (LSR)} is a searchable database of Lilypond code
snippets. You can add snippets too, so join the LSR project, and
contribute creative ideas for using Lilypond.
At smaller sizes, LilyPond uses proportionally heavier lines so the
music will still read well.
-@ignore
This also allows staves of different sizes to coexist peacefully when
used together on the same page:
-@c TODO: are the stems in this example the right thickness? How should
-@c line weights be scaled for small staves?
-
@c Grieg's Violin Sonata Op. 45
@lilypond[indent=1.5cm]
global = {
\score {
<<
\new Staff \with {
- fontSize = #-4
- \override StaffSymbol.staff-space = #(magstep -4)
- \override StaffSymbol.thickness = #(magstep -3)
+ \magnifyStaff #2/3
}
\relative c' {
\global
>>
}
@end lilypond
-@end ignore
+
@node Why work so hard?
@unnumberedsubsec Why work so hard?
@node Music function usage
@subsection Music function usage
-Music functions may currently be used in several places. Depending on
-where they are used, restrictions apply in order to be able to parse
-them unambiguously. The result a music function returns must be
-compatible with the context in which it is called.
+A @q{music function} has to return an expression matching the predicate
+@code{ly:music?}. This makes music function calls suitable as arguments
+of type @code{ly:music?} for another music function call.
+
+When using a music function call in other contexts, the context may
+cause further semantic restrictions.
@itemize
@item
-At top level in a music expression. No restriction apply here.
+At the top level in a music expression a post-event is not accepted.
@item
-As a post-event, explicitly started with a direction indicator (one of
-@code{-}, @code{^}, @w{and @code{_}}).
-
-In this case, you can't use an @emph{open} music expression as the last
-argument, one that would end with a music expression able to accept
-additional postevents.
+When a music function (as opposed to an event function) returns an
+expression of type post-event, LilyPond requires one of the named
+direction indicators (@code{-}, @code{^}, @w{and @code{_}})) in order to
+properly integrate the post-event produced by the music function call
+into the surrounding expression.
@item
-As a chord constituent. The returned expression must be of
+As a chord constituent. The returned expression must be of a
@code{rhythmic-event} type, most likely a @code{NoteEvent}.
@end itemize
@noindent
-The special rules for trailing arguments make it possible to write
-polymorphic functions like @code{\tweak} that can be applied to
-different constructs.
+@q{Polymorphic} functions, like @code{\tweak}, can be applied to
+post-events, chord constituent and top level music expressions.
@node Simple substitution functions
@subsection Simple substitution functions
@cindex calling code during interpreting
@funindex \applyContext
+@funindex make-apply-context
+@funindex ly:context-property
+@funindex ly:context-set-property!
+@funindex ly:context-grob-definition
+@funindex ly:assoc-get
+@funindex ly:context-pushpop-property
+
+Contexts can be modified during interpretation with Scheme code.
+In a LilyPond code block, the syntax for this is:
-Contexts can be modified during interpretation with Scheme code. The
-syntax for this is
@example
\applyContext @var{function}
@end example
+In Scheme code, the syntax is:
+
+@example
+(make-apply-context @var{function})
+@end example
+
@code{@var{function}} should be a Scheme function that takes a
single argument: the context in which the @code{\applyContext}
-command is being called. The following code will print the
-current bar number on the standard output during the compile:
+command is being called. The function can access as well as
+override/set grob properties and context properties. Any actions
+taken by the function that depend on the state of the context are
+limited to the state of the context @emph{when the function is
+called}. Also, changes effected by a call to @code{\applyContext}
+remain in effect until they are directly modified again, or
+reverted, even if the initial conditions that they depended on
+have changed.
+
+The following scheme functions are useful when using
+@code{\applyContext}:
-@example
+@table @code
+@item ly:context-property
+look up a context property value
+
+@item ly:context-set-property!
+set a context property
+
+@item ly:context-grob-definition
+@itemx ly:assoc-get
+look up a grob property value
+
+@item ly:context-pushpop-property
+do a @code{\temporary@tie{}\override}
+or a @code{\revert} on a grob property
+@end table
+
+
+The following example looks up the current @code{fontSize} value, and
+then doubles it:
+
+@lilypond[quote,verbatim]
+doubleFontSize =
\applyContext
- #(lambda (x)
- (format #t "\nWe were called in barnumber ~a.\n"
- (ly:context-property x 'currentBarNumber)))
-@end example
+ #(lambda (context)
+ (let ((fontSize (ly:context-property context 'fontSize)))
+ (ly:context-set-property! context 'fontSize (+ fontSize 6))))
+
+{
+ \set fontSize = -3
+ b'4
+ \doubleFontSize
+ b'
+}
+@end lilypond
+
+The following example looks up the current colors of the
+@code{NoteHead}, @code{Stem}, and @code{Beam} grobs, and then changes
+each to a less saturated shade.
+
+@lilypond[quote,verbatim]
+desaturate =
+\applyContext
+ #(lambda (context)
+ (define (desaturate-grob grob)
+ (let* ((grob-def (ly:context-grob-definition context grob))
+ (color (ly:assoc-get 'color grob-def black))
+ (new-color (map (lambda (x) (min 1 (/ (1+ x) 2))) color)))
+ (ly:context-pushpop-property context grob 'color new-color)))
+ (for-each desaturate-grob '(NoteHead Stem Beam)))
+
+\relative g' {
+ \time 3/4
+ g8[ g] \desaturate g[ g] \desaturate g[ g]
+ \override NoteHead.color = #darkred
+ \override Stem.color = #darkred
+ \override Beam.color = #darkred
+ g[ g] \desaturate g[ g] \desaturate g[ g]
+}
+@end lilypond
+
+
+This also could be implemented as a music function, in order to
+restrict the modifications to a single music block. Notice how
+@code{ly:context-pushpop-property} is used both as a
+@code{\temporary@tie{}\override} and as a @code{\revert}:
+
+@lilypond[quote,verbatim]
+desaturate =
+#(define-music-function
+ (parser location music) (ly:music?)
+ #{
+ \applyContext
+ #(lambda (context)
+ (define (desaturate-grob grob)
+ (let* ((grob-def (ly:context-grob-definition context grob))
+ (color (ly:assoc-get 'color grob-def black))
+ (new-color (map (lambda (x) (min 1 (/ (1+ x) 2))) color)))
+ (ly:context-pushpop-property context grob 'color new-color)))
+ (for-each desaturate-grob '(NoteHead Stem Beam)))
+ #music
+ \applyContext
+ #(lambda (context)
+ (define (revert-color grob)
+ (ly:context-pushpop-property context grob 'color))
+ (for-each revert-color '(NoteHead Stem Beam)))
+ #})
+
+\relative g' {
+ \override NoteHead.color = #darkblue
+ \override Stem.color = #darkblue
+ \override Beam.color = #darkblue
+ g8 a b c
+ \desaturate { d c b a }
+ g b d b g2
+}
+@end lilypond
@node Running a function on all layout objects
If routines with multiple arguments must be called, the current grob
can be inserted with a grob closure. Here is a setting from
-@code{AccidentalSuggestion},
+@code{RehearsalMark},
@example
`(X-offset .
- ,(ly:make-simple-closure
- `(,+
+ ,(ly:make-simple-closure
+ `(,+
+ ,(ly:make-simple-closure
+ (list ly:break-alignable-interface::self-align-callback))
,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-x-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
+ (list ly:self-alignment-interface::x-aligned-on-self)))))
@end example
@noindent
-In this example, both @code{ly:self-alignment-interface::x-aligned-on-self} and
-@code{ly:self-alignment-interface::centered-on-x-parent} are called
+In this example, both @code{ly:break-alignable-interface::self-align-callback} and
+@code{ly:self-alignment-interface::x-aligned-on-self} are called
with the grob as argument. The results are added with the @code{+}
function. To ensure that this addition is properly executed, the whole
thing is enclosed in @code{ly:make-simple-closure}.
@end lilypond
Les indications d'arpeggio peuvent se présenter sous la forme de ligne
-discontinue à l'aide de la propriété @code{'dash-details}. Pour plus
-de détails à ce propos, consultez @ref{Liaisons d'articulation}.
+discontinue à l'aide de la propriété @code{'dash-definition}. Pour
+plus de détails à ce propos, consultez @ref{Liaisons d'articulation}.
Un arpège peut parfois s'écrire de manière explicite, à l'aide de
liaisons de tenue. Pour plus d'information, voir
@snippets
@lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-registers.ly}
+{accordion-register-symbols.ly}
@seealso
Morceaux choisis :
pas à apporter votre concours à cette banque de trucs et astuces !
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Un certain nombre d'exemples issus du LSR et particulièrement pertinents
état des traductions pour les lecteurs non anglophones.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository} :
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository} :
collection d'exemples, trucs et astuces élaborés par des utilisateurs.
@item
Il s'agit d'une sélection de petits exemples montrant des trucs,
astuces et fonctionnalités particulières de LilyPond, issus de
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}
(LSR). Tous ces exemples sont dans le domaine public.
Notez bien que cette annexe n'est en aucune manière un miroir ou même
@subheading Kódrészletek
Ez egy válogatás a
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Kódrészletek Tárházából}.
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Kódrészletek Tárházából}.
Minden kódrészlet közkincs.
A kottaírás kézikönyvének megfelelő szakaszaiban is találhatóak ilyenek a
@uref{http://AvatarAcademy.nl},
Main author
+@item Mark Polesky:
+Documentation, Code cleanup
+
@item Mike Solomon:
@email{mike@@mikesolomon.org},
Core developer, Frog meister
@uref{http://percival-music.ca},
Bug meister, Grand Documentation Project leader
-@item Mark Polesky:
-Assistant documentation editor, Code cleanup
-
@item Neil Puttock:
Core developer
Aleksandr Andreev,
Frédéric Bron,
-Torsten Hämmerle ,
+Torsten Hämmerle,
+Rutger Hofmann,
Marc Hohl,
+Felix Janda,
+Thomas Klausner,
James Lowe,
Andrew Main,
Thomas Morley,
Luca Rossetto Casel,
Felipe Castro,
Pavel Fric,
+Walter Garcia-Fontes,
Jean-Charles Malahieude,
Till Paala,
Yoshiki Sawada
@end lilypond
Le proprietà del tratteggio della parentesi dell'arpeggio sono regolate
-dalla proprietà @code{'dash-details}, descritta in @ref{Slurs}.
+dalla proprietà @code{'dash-definition}, descritta in @ref{Slurs}.
Gli arpeggi possono essere scritti in modo esplicito con le legature di
valore. Per maggiori dettagli si veda @ref{Ties}.
e aggiungi i tuoi esempi!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Esempi particolarmente istruttivi provenienti dal LSR sono inclusi nella
stato delle traduzioni per i lettori di lingua non inglese.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}:
esempi, consigli e trucchi creati dagli utenti.
@item
@subheading Frammenti
Questo manuale presenta una selezione di frammenti di codice LilyPond tratti dal
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}
(LSR). Tutti i frammenti di codice sono nel pubblico dominio.
Si prega di notare che questo documento non è un sottoinsieme esatto del LSR. LSR
<c e g c>2\arpeggio
@end lilypond
-括弧スタイルのアルペジオの破線プロパティは @code{'dash-details} プロパティで@c
+括弧スタイルのアルペジオの破線プロパティは @code{'dash-definition} プロパティで@c
制御します。@c
-@code{'dash-details} プロパティについては @ref{スラー} で説明しています。
+@code{'dash-definition} プロパティについては @ref{スラー} で説明しています。
アルペジオをタイを用いて明示的に描き出すことができます。@c
詳細は @ref{タイ} を参照してください。
@c @snippets
@c @lilypondfile[verbatim,quote,texidoc,doctitle]
@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly}
-@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312
+@c http://lsr.di.unimi.it/LSR/Item?u=1&id=312
@seealso
学習マニュアル:
他の人が書いた楽譜を見て、あなた自身も投稿してください!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
LSR から、@c
非英語圏の読者のための翻訳状況。
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}:
ユーザが作成した例、ヒント、それに TIPS。
@item @ref{Development}:
@divClass{column-left-top}
@subheading コード断片集
-これは @uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond コード断片リポジトリ}
+これは @uref{http://lsr@/.di@/.unimi@/.it,LilyPond コード断片リポジトリ}
(LSR) から選び出した LilyPond のコード断片集です。@c
LSR にあるすべてのコード断片はパブリック ドメインにあります
(公開されています)。
@}
@end example
-@c TODO Replace the following with a better example -td
-@c Skylining handles this correctly without padText
-
So far we've seen static substitution -- when LilyPond
sees @code{\padText}, it replaces it with the stuff that
we've defined it to be (ie the stuff to the right of
\once \override TextScript.padding = #padding
#})
-\relative c''' {
- c4^"piu mosso" b a b |
+\relative c'' {
+ c4^"piu mosso" b a b
\padText #1.8
- c4^"piu mosso" d e f |
+ c4^"piu mosso" b a b
\padText #2.6
- c4^"piu mosso" fis a g |
+ c4^"piu mosso" b a b
}
@end lilypond
@lilypond[quote,line-width=13.0\cm]
\new GrandStaff <<
\new Staff = "rh" \with {
- fontSize = #-3
- \override StaffSymbol #'staff-space = #(magstep -3)
+ \magnifyStaff #2/3
} \relative c'' {
\clef treble
\key es \major
status van de vertaling voor niet-Engelstaligen.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippers Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippers Repository}:
voorbeelden door gebruikers, hints en tips.
@item
Dit toont een geselecteerde set LilyPond-snippers
(codefragementen) uit de
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet
Repository} (LSR). Al deze snippers zijn publiek domein.
Let op dat dit document geen exacte deelverzameling is van
@}
@end example
-However, in some transcription styles, stems are used
-occasionally, for example to indicate the transition from a
-single-tone recitative to a fixed melodic gesture. In these cases,
-one can use either @code{\hide Stem} or
-@code{\override Stem.length = #0} instead, and restore the stem
-when needed with the corresponding @code{\once \override Stem.transparent = ##f} (see example below).
-
@b{Timing.} For unmetered chant, there are several alternatives.
The Time_signature_engraver can be removed from the Staff context
\Staff
\remove "Time_signature_engraver"
\remove "Bar_engraver"
- \hide Stem
+ }
+ \context {
+ \Voice
+ \remove "Stem_engraver"
}
}
}
This works fine, as long as the text doesn't span a line break. If
that is the case, an alternative is to add hidden notes to the
-score, here in combination with changing stem visibility:
+score, as below.
+In some transcription styles, stems are used
+occasionally, for example to indicate the transition from a
+single-tone recitative to a fixed melodic gesture. In these cases,
+one can use either @code{\hide Stem} or
+@code{\override Stem.length = #0} instead of @code{\remove}-ing
+the @code{Stem_engraver} and restore the stem
+when needed with the corresponding @code{\undo \hide Stem}.
@lilypond[verbatim,ragged-right]
\include "gregorian.ly"
chant = \relative c' {
\clef "G_8"
\set Score.timing = ##f
+ \hide Stem
c\breve \hide NoteHead c c c c c
\undo \hide NoteHead
- \override Stem.transparent = ##f \stemUp c4 b4 a
+ \undo \hide Stem \stemUp c4 b4 a
\hide Stem c2 c4 \divisioMaior
c\breve \hide NoteHead c c c c c c c
\undo \hide NoteHead c4 c f, f \finalis
\Staff
\remove "Time_signature_engraver"
\hide BarLine
- \hide Stem
}
}
}
Predefined shorthands for articulations and ornaments cannot be used
on notes in chord mode, see @ref{Articulations and ornamentations}.
-When chord mode and note mode are mixed in sequential music, and
-chord mode comes first, the note mode will create a new @code{Staff}
-context:
-
-@lilypond[verbatim,quote,ragged-right,relative=1]
-\chordmode { c2 f }
-<c e g>2 <g' b d>
-@end lilypond
-
-@noindent
-To avoid this behavior, explicitly create the @code{Staff} context:
-
-@lilypond[verbatim,quote,ragged-right,relative=1]
-\new Staff {
- \chordmode { c2 f }
- <c e g>2 <g' b d>
-}
-@end lilypond
-
@node Common chords
@unnumberedsubsubsec Common chords
@lilypond[quote,ragged-right,verbatim]
\chordmode {
- c1 c/g c/f
+ c'1 c'/e c'/f
}
@end lilypond
@lilypond[quote,ragged-right,verbatim]
\chordmode {
- c1 c/g c/+g
+ c'1 c'/g c'/+e
}
@end lilypond
\chordmode { c1:5.5-.5+ }
@end lilypond
-Only the second inversion can be created by adding a bass
-note. The first inversion requires changing the root of
-the chord.
-
-@lilypond[quote,ragged-right,verbatim]
-\chordmode {
- c'1: c':/g e:6-3-^5 e:m6-^5
-}
-@end lilypond
-
@node Displaying chords
@subsection Displaying chords
\new Voice \relative {
\voiceTwo
\magnifyMusic 0.63 {
+ \override Score.SpacingSpanner.spacing-increment = #(* 1.2 0.63)
r32 c'' a c a c a c r c a c a c a c
r c a c a c a c a c a c a c a c
}
>>
@end lilypond
+The @code{\override} in the example above is a bug workaround.
+See the @qq{Known issues and warnings} at the end of this section.
+
If a normal sized note head is merged with a smaller one, the size
of the smaller note may need to be reset (with
@w{@samp{\once@tie{}\normalsize}}) so that the stems and
\new Voice \relative {
\voiceOne
\magnifyMusic 0.63 {
+ \override Score.SpacingSpanner.spacing-increment = #(* 1.2 0.63)
\once \normalsize cis'32( cis' gis b a fis \once \normalsize d d'
\once \normalsize cis, cis' gis b a gis \once \normalsize fis fis'
\once \normalsize fis, fis' ais, cis b gis \once \normalsize eis eis'
Internals Reference:
@rinternals{font-interface}.
+@c The two issues mentioned below:
+@c http://code.google.com/p/lilypond/issues/detail?id=3987
+@c http://code.google.com/p/lilypond/issues/detail?id=3990
+@knownissues
+There are currently two bugs that are preventing proper horizontal
+spacing when using @code{\magnifyMusic}. There is only one
+available workaround, and it is not guaranteed to work in every
+case. In the example below, replace the @var{mag} variable with
+your own value. You may also try removing one or both of the
+@code{\newSpacingSection} commands, and/or the @code{\override}
+and @code{\revert} commands:
+
+@example
+\magnifyMusic @var{mag} @{
+ \newSpacingSection
+ \override Score.SpacingSpanner.spacing-increment = #(* 1.2 @var{mag})
+ @var{[music]}
+ \newSpacingSection
+ \revert Score.SpacingSpanner.spacing-increment
+@}
+@end example
+
@node Fingering instructions
@unnumberedsubsubsec Fingering instructions
and @code{ForestGreen}. For web use normal colors are recommended
(i.e., @code{blue}, @code{green}, @code{red}).
-Notes in a chord cannot be colored with @code{\override}; use
-@code{\tweak} instead, see @ref{The tweak command}.
+Notes in a chord cannot be separately colored with
+@code{\override}; use @code{\tweak} or the equivalent
+@code{\single\override} before the respective note instead, see
+@ref{The tweak command}.
@node Parentheses
@end lilypond
The dash properties of the parenthesis arpeggio are controlled
-with the @code{'dash-details} property, which is described at @ref{Slurs}.
+with the @code{'dash-definition} property, which is described at
+@ref{Slurs}.
Arpeggios can be explicitly written out with ties. For more
information, see @ref{Ties}.
a thick bar that covers all strings. The fret with the
capo will be the lowest fret in the fret diagram.
+Fingering indication dots can be colored as well as parenthesized;
+the parenthesis's color can also be altered independently.
+
@c \override is necessary to make fingering visible
@lilypond[quote, verbatim]
<<
\new ChordNames {
\chordmode {
- f1 g c
+ f1 g c c
}
}
\new Staff {
(place-fret 2 5 3)
)
}
+ \override Voice.TextScript.size = 1.5
+ <c g c' e' g'>1^\markup {
+ \fret-diagram-verbose #'(
+ (place-fret 6 3 1 red parenthesized default-paren-color)
+ (place-fret 5 3 1 inverted)
+ (place-fret 4 5 2 blue parenthesized)
+ (place-fret 3 5 3 blue)
+ (place-fret 2 5 4 blue)
+ (place-fret 1 3 1 inverted)
+ )
+ }
}
>>
@end lilypond
@c @snippets
@c @lilypondfile[verbatim,quote,texidoc,doctitle]
@c {forcing-visibility-of-systems-with-multi-bar-rests-when-using-\RemoveEmptyStaffContext.ly}
-@c http://lsr.dsi.unimi.it/LSR/Item?u=1&id=312
+@c http://lsr.di.unimi.it/LSR/Item?u=1&id=312
@seealso
Learning Manual:
@snippets
@lilypondfile[verbatim,quote,texidoc,doctitle]
-{accordion-registers.ly}
+{accordion-register-symbols.ly}
@seealso
Snippets:
* List of colors::
* The Feta font::
* Note head styles::
+* Clef styles::
* Text markup commands::
* Text markup list commands::
* List of special characters::
\doc-chars #kievan
@end lilypond
+
@node Note head styles
@appendixsec Note head styles
@lilypondfile[noindent]{note-head-style.ly}
+@node Clef styles
+@appendixsec Clef styles
+
+The following table shows all the different clef styles possible
+(including where @emph{middle C} sits relative to the clef).
+
+@multitable @columnfractions .30 .2 .30 .2
+
+@headitem
+Example
+@tab
+Output
+@tab
+Example
+@tab
+Output
+
+
+@item
+@code{\clef G}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef G c1
+@end lilypond
+
+@tab
+@code{\clef "G2"}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef "G2"
+c1
+@end lilypond
+
+@item
+@code{\clef treble}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef treble
+c1
+@end lilypond
+
+@tab
+@code{\clef violin}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef violin
+c1
+@end lilypond
+
+@item
+@code{\clef french}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef french
+c1
+@end lilypond
+
+@tab
+@code{\clef GG}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef GG
+c1
+@end lilypond
+
+@item
+@code{\clef tenorG}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef tenorG
+c1
+@end lilypond
+
+@tab
+@code{\clef soprano}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef soprano
+c1
+@end lilypond
+
+@item
+@code{\clef mezzosoprano}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef mezzosoprano
+c1
+@end lilypond
+
+@tab
+@code{\clef C}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef C
+c1
+@end lilypond
+
+@item
+@code{\clef alto}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef alto
+c1
+@end lilypond
+
+@tab
+@code{\clef tenor}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef tenor
+c1
+@end lilypond
+
+@item
+@code{\clef baritone}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef baritone
+c1
+@end lilypond
+
+@tab
+@code{\clef varC}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef varC
+c1
+@end lilypond
+
+@item
+@code{\clef altovarC}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef altovarC
+c1
+@end lilypond
+
+@tab
+@code{\clef tenorvarC}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef tenorvarC
+c1
+@end lilypond
+
+@item
+@code{\clef baritonevarC}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef baritonevarC
+c1
+@end lilypond
+
+@tab
+@code{\clef varbaritone}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef varbaritone
+c1
+@end lilypond
+
+@item
+@code{\clef baritonevarF}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef baritonevarF
+c1
+@end lilypond
+
+@tab
+@code{\clef F}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef F
+c1
+@end lilypond
+
+@item
+@code{\clef bass}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef bass
+c1
+@end lilypond
+
+@tab
+@code{\clef subbass}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef subbass
+c1
+@end lilypond
+
+@item
+@code{\clef percussion}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\clef percussion
+c1
+@end lilypond
+
+@tab
+@c @example does not work as expected within multitables
+@code{
+\new TabStaff @{ @*
+@ @ \clef tab @*
+@}
+}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\new TabStaff {
+ \clef tab
+ c1
+}
+@end lilypond
+
+@item
+@c @example does not work as expected within multitables
+@code{
+\new TabStaff @{ @*
+@ @ \clef moderntab @*
+@}
+}
+@tab
+@lilypond[line-width=3\cm,notime,ragged-right,relative=1]
+\new TabStaff {
+ \clef moderntab
+ c1
+}
+@end lilypond
+
+
+@end multitable
+
+
@node Text markup commands
@appendixsec Text markup commands
@cindex verylongfermata
The following scripts are available in the Feta font and may be
-attached to notes (eg. @samp{c\accent}).
+attached to notes (eg. @samp{f\accent}).
@c Articulations and ornamentations
@c Fingering instructions (for "thumb")
@node Articulation scripts
@unnumberedsubsec Articulation scripts
-@lilypond[quote]
-\include "script-chart.ly"
-\new RhythmicStaff { \scriptStaff #articulations }
+@multitable @columnfractions .25 .25 .25 .25
+
+@headitem
+Example
+@tab
+Output
+@tab
+Example
+@tab
+Output
+
+@item
+@code{\accent}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\accent e,_\accent
+@end lilypond
+@tab
+@code{\espressivo}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\espressivo e,_\espressivo
+@end lilypond
+
+@item
+@code{\marcato}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\marcato e,_\marcato
+@end lilypond
+@tab
+@code{\portato}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\portato e,_\portato
@end lilypond
+@item
+@code{\staccatissimo}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\staccatissimo e,_\staccatissimo
+@end lilypond
+@tab
+@code{\staccato}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\staccato e,_\staccato
+@end lilypond
+
+@item
+@code{\tenuto}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\tenuto e,_\tenuto
+@end lilypond
+
+@end multitable
+
+
@node Ornament scripts
@unnumberedsubsec Ornament scripts
-@lilypond[quote]
-\include "script-chart.ly"
-\new RhythmicStaff { \scriptStaff #ornaments }
+@multitable @columnfractions .25 .25 .25 .25
+
+@headitem
+Example
+@tab
+Output
+@tab
+Example
+@tab
+Output
+
+@item
+@code{\prall}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\prall e,_\prall
+@end lilypond
+@tab
+@code{\mordent}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\mordent e,_\mordent
+@end lilypond
+
+@item
+@code{\prallmordent}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\prallmordent e,_\prallmordent
+@end lilypond
+@tab
+@code{\turn}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\turn e,_\turn
+@end lilypond
+
+@item
+@code{\upprall}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\upprall e,_\upprall
+@end lilypond
+@tab
+@code{\downprall}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\downprall e,_\downprall
+@end lilypond
+
+@item
+@code{\upmordent}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\upmordent e,_\upmordent
+@end lilypond
+@tab
+@code{\downmordent}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\downmordent e,_\downmordent
+@end lilypond
+
+@item
+@code{\lineprall}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\lineprall e,_\lineprall
+@end lilypond
+@tab
+@code{\prallprall}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\prallprall e,_\prallprall
+@end lilypond
+
+@item
+@code{\pralldown}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\pralldown e,_\pralldown
@end lilypond
+@tab
+@code{\prallup}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\prallup e,_\prallup
+@end lilypond
+
+@item
+@code{\reverseturn}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\reverseturn e,_\reverseturn
+@end lilypond
+@tab
+@code{\trill}
+@tab
+@lilypond[notime,ragged-right,relative=2]
+f\trill e,_\trill
+@end lilypond
+
+@end multitable
@node Fermata scripts
@unnumberedsubsec Fermata scripts
@funindex \clef
@funindex clef
-The clef may be altered. Middle C is shown in every example. The
-following clef names can (but do not need to) be enclosed in quotes.
+Without any explicit command, the default clef for LilyPond is the
+treble (or @emph{G}) clef.
+
+@lilypond[verbatim,quote,relative=1,ragged-right]
+c2 c
+@end lilypond
+
+However, the clef can be changed by using the @code{\clef} command and
+an appropriate clef name. @emph{Middle C} is shown in each of the
+following examples.
@lilypond[verbatim,quote,relative=1]
\clef treble
c2 c
@end lilypond
-Other clefs include:
-
-@lilypond[verbatim,quote,relative=1]
-\clef french
-c2 c
-\clef soprano
-c2 c
-\clef mezzosoprano
-c2 c
-\clef baritone
-c2 c
+For the full range of possible clef names see @ref{Clef styles}.
-\break
+Specialized clefs, such as those used in @emph{Ancient} music, are
+described in @ref{Mensural clefs} and @ref{Gregorian clefs}. Music that
+requires tablature clefs is discussed in @ref{Default tablatures} and
+@ref{Custom tablatures}.
-\clef varbaritone
-c2 c
-\clef subbass
-c2 c
-\clef percussion
-c2 c
-
-\break
-
-\clef G % synonym for treble
-c2 c
-\clef F % synonym for bass
-c2 c
-\clef C % synonym for alto
-c2 c
-@end lilypond
+@cindex Cue clefs
+@cindex Clefs with cue notes
+For mixing clefs when using cue notes, see the @code{\cueClef} and
+@code{\cueDuringWithClef} commands in @ref{Formatting cue notes}.
@cindex transposing clef
@cindex clef, transposing
The pitches are displayed as if the numeric argument were
given without parentheses/brackets.
-Some special purpose clefs are described in @ref{Mensural clefs},
-@ref{Gregorian clefs}, @ref{Default tablatures}, and @ref{Custom
-tablatures}. For mixing different clefs when using cue notes within a
-score, see the @code{\cueClef} and @code{\cueDuringWithClef} functions
-in @ref{Formatting cue notes}.
-
@snippets
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{forcing-a-clef-symbol-to-be-displayed.ly}
+
+@lilypondfile[verbatim,quote,texidoc,doctitle]
+{keep-change-clefs-full-sized.ly}
@lilypondfile[verbatim,quote,texidoc,doctitle]
{tweaking-clef-properties.ly}
@ref{Custom tablatures},
@ref{Formatting cue notes}.
+Installed Files:
+@file{../scm/parser-clef.scm}.
+
Snippets:
@rlsr{Pitches}.
Like with the dodecaphonic accidental style @emph{every} note
gets an accidental sign by default, but accidentals are
-suppressed for pitches immediately repeated within one voice.
+suppressed for pitches immediately repeated within the same staff.
@lilypond[quote]
musicA = {
@funindex tuplet
Tuplets are made from a music expression with the @code{\tuplet}
-command, multiplying the speed of the music expression by a
-fraction:
+command, multiplying the speed of the music expression by a fraction:
@example
\tuplet @var{fraction} @{ @var{music} @}
@end example
@noindent
-The fraction's numerator will be printed over or
-under the notes, optionally with a bracket. The most common
-tuplets are triplets: 3@tie{}notes sound within the duration
-normally allowed for@tie{}2:
+The fraction's numerator will be printed over or under the notes,
+optionally with a bracket. The most common tuplets are triplets
+(3@tie{}notes sound within the duration normally allowed for@tie{}2).
@lilypond[quote,verbatim,relative=2]
a2 \tuplet 3/2 { b4 4 4 }
@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:
+@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 }
@funindex \tupletNeutral
@funindex tupletNeutral
-Tuplet brackets may be manually placed above or below the staff;
-see @ref{Direction and placement}.
+Tuplet brackets may be manually placed above or below the staff:
+
+@lilypond[quote,verbatim,relative=2]
+\tupletUp \tuplet 3/2 { c8 d e }
+\tupletNeutral \tuplet 3/2 { c8 d e }
+\tupletDown \tuplet 3/2 { f,8 g a }
+\tupletNeutral \tuplet 3/2 { f8 g a }
+@end lilypond
Tuplets may be nested:
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
-must be done with @code{\tweak}.
-
-To modify the duration of notes without printing a tuplet bracket,
-see @ref{Scaling durations}.
+Modifying nested tuplets which begin at the same musical moment must be
+done with @code{\tweak}.
+To modify the duration of notes without printing a tuplet bracket, see
+@ref{Scaling durations}.
@predefined
@code{\tupletUp},
@rlearning{Tweaking methods}.
Notation Reference:
+@ref{Direction and placement},
@ref{Time administration},
@ref{Scaling durations},
@ref{The tweak command},
@rinternals{TupletNumber},
@rinternals{TimeScaledMusic}.
-@cindex grace notes within tuplet brackets
-
-@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{\tuplet}
-command to avoid errors.
-
-@cindex tempo marks within tuplet brackets
-
-When using a tuplet at the beginning of a piece with a @code{\tempo}
-mark, the music must be explicitly entered in a @code{\new Voice}
-block, as discussed in @rlearning{Voices contain music}.
-
@node Scaling durations
@unnumberedsubsubsec Scaling durations
\time 3/4
\set Timing.baseMoment = #(ly:make-moment 1/8)
\set Timing.beatStructure = #'(1 5)
+ \set Timing.beamExceptions = #'()
\repeat unfold 6 { a8 }
}
\new Staff {
@end example
@item
-To set the staff size for a single staff within a system, set the
-staff's font-size and staff-space using units relative to the
-score's default staff size. Using relative units prevents the
-proportion of staff sizes from being altered if the default staff
-size is modified with @code{set-global-staff-size} or
-@code{layout-set-staff-size}.
-
-For example, traditionally engraved chamber music scores with
-piano often used 7mm piano staves while the other staves were up
-to 5/7 as large (if space allowed), or down to 3/5 as large (if
-space was cramped). To achieve the 5/7 proportion, use:
+To set the staff size for a single staff within a system, use the
+@code{\magnifyStaff} command. For example, traditionally engraved
+chamber music scores with piano often used 7mm piano staves while
+the other staves were typically between 3/5 and 5/7 as large
+(between 60% and 71%). To achieve the 5/7 proportion, use:
@example
\score @{
<<
\new Staff \with @{
- fontSize = #(magnification->font-size 5/7)
- \override StaffSymbol.staff-space = #5/7
+ \magnifyStaff #5/7
@} @{ @dots{} @}
\new PianoStaff @{ @dots{} @}
>>
\score @{
<<
\new Staff \with @{
- fontSize = -3
- \override StaffSymbol.staff-space = #(magstep -3)
+ \magnifyStaff #(magstep -3)
@} @{ @dots{} @}
\new PianoStaff @{ @dots{} @}
>>
@menu
* Line breaking::
* Page breaking::
-* Optimal page breaking::
-* Optimal page turning::
-* Minimal page breaking::
-* One-line page breaking::
* Explicit breaks::
-* Using an extra voice for breaks::
@end menu
@cindex line breaks
@cindex breaking lines
-Line breaks are normally determined automatically. They are chosen
-so that lines look neither cramped nor loose, and consecutive
-lines have similar density.
+Line breaks are normally determined automatically. They are
+chosen so that lines look neither cramped nor loose, and
+consecutive lines have similar density.
To manually force a line break at a bar line, use the
@code{\break} command:
@}
@end example
-
-
@cindex regular line breaks
@cindex four bar music.
-For line breaks at regular intervals use @code{\break} separated by
-skips and repeated with @code{\repeat}. For example, this would
-cause the following 28 measures (assuming 4/4 time) to be broken
-every 4 measures, and only there:
+For line breaks at regular intervals use @code{\break} separated
+by skips and repeated with @code{\repeat}. For example, this
+would cause the following 28 measures (assuming 4/4 time) to be
+broken every 4 measures, and only there:
@example
<<
@seealso
Notation Reference:
-@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
+@ref{paper variables for line breaking}
+@ref{The layout block}.
Snippets:
@rlsr{Spacing}.
@node Page breaking
@subsection Page breaking
+This section describes the different page breaking methods, and
+how to modify them.
+
+@menu
+* Manual page breaking::
+* Optimal page breaking::
+* Optimal page turning::
+* Minimal page breaking::
+* One-line page breaking::
+@end menu
+
+
+@node Manual page breaking
+@unnumberedsubsubsec Manual page breaking
+
The default page breaking may be overridden by inserting
-@code{\pageBreak} or @code{\noPageBreak} commands. These commands are
-analogous to @code{\break} and @code{\noBreak}. They should be
-inserted at a bar line. These commands force and forbid a page-break
-from happening. Of course, the @code{\pageBreak} command also forces
-a line break.
+@code{\pageBreak} or @code{\noPageBreak} commands. These commands
+are analogous to @code{\break} and @code{\noBreak}. They should
+be inserted at a bar line. These commands force and forbid a
+page-break from happening. Of course, the @code{\pageBreak}
+command also forces a line break.
The @code{\pageBreak} and @code{\noPageBreak} commands may also be
inserted at top-level, between scores and top-level markups.
@code{\bookpart}). See
@ref{Fixed vertical spacing paper variables,,Fixed vertical spacing @code{@bs{}paper} variables}.
-Page breaks are computed by the @code{page-breaking} function. LilyPond
-provides three algorithms for computing page breaks,
+Page breaks are computed by the @code{page-breaking} function.
+LilyPond provides three algorithms for computing page breaks,
@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} and
-@code{ly:minimal-breaking}. The default is @code{ly:optimal-breaking},
-but the value can be changed in the @code{\paper} block:
+@code{ly:minimal-breaking}. The default is
+@code{ly:optimal-breaking}, but the value can be changed in the
+@code{\paper} block:
@example
\paper @{
@funindex \bookpart
-When a book has many scores and pages, the page breaking problem may be
-difficult to solve, requiring large processing time and memory. To ease
-the page breaking process, @code{\bookpart} blocks are used to divide
-the book into several parts: the page breaking occurs separately on each
-part. Different page breaking functions may also be used in different
-book parts.
+When a book has many scores and pages, the page breaking problem
+may be difficult to solve, requiring large processing time and
+memory. To ease the page breaking process, @code{\bookpart}
+blocks are used to divide the book into several parts: the page
+breaking occurs separately on each part. Different page breaking
+functions may also be used in different book parts.
@example
\bookpart @{
@seealso
Notation Reference:
-@ref{paper variables for page breaking,,@code{@bs{}paper} variables for page breaking}.
+@ref{paper variables for page breaking}.
Snippets:
@rlsr{Spacing}.
@node Optimal page breaking
-@subsection Optimal page breaking
+@unnumberedsubsubsec Optimal page breaking
@funindex ly:optimal-breaking
-The @code{ly:optimal-breaking} function is LilyPond's default method of
-determining page breaks. It attempts to find a page breaking that minimizes
-cramping and stretching, both horizontally and vertically. Unlike
-@code{ly:page-turn-breaking}, it has no concept of page turns.
+The @code{ly:optimal-breaking} function is LilyPond's default
+method of determining page breaks. It attempts to find a page
+breaking that minimizes cramping and stretching, both horizontally
+and vertically. Unlike @code{ly:page-turn-breaking}, it has no
+concept of page turns.
+
+@seealso
+Snippets:
+@rlsr{Spacing}.
+
+
+@node Minimal page breaking
+@unnumberedsubsubsec Minimal page breaking
+
+@funindex ly:minimal-breaking
+
+The @code{ly:minimal-breaking} function performs minimal
+computations to calculate the page breaking: it fills a page with
+as many systems as possible before moving to the next one. Thus,
+it may be preferred for scores with many pages, where the other
+page breaking functions could be too slow or memory demanding, or
+a lot of texts. It is enabled using:
+
+@example
+\paper @{
+ page-breaking = #ly:minimal-breaking
+@}
+@end example
@seealso
Snippets:
@rlsr{Spacing}.
+@node One-line page breaking
+@unnumberedsubsubsec One-line page breaking
+
+@funindex ly:one-line-breaking
+
+The @code{ly:one-line-breaking} function is a special-purpose
+page breaking algorithm that puts each score on its own page, and
+on a single line. This page breaking function does not typeset
+titles or margins; only the score will be displayed.
+
+The page width will be adjusted so that the longest score fits on
+one line. In particular, @code{paper-width}, @code{line-width}
+and @code{indent} variables in the @code{\paper} block will be
+ignored, although @code{left-margin} and @code{right-margin} will
+still be honored. The height of the page will be left unmodified.
+
+
@node Optimal page turning
-@subsection Optimal page turning
+@unnumberedsubsubsec Optimal page turning
@funindex ly:page-turn-breaking
-Often it is necessary to find a page breaking configuration so that there is
-a rest at the end of every second page. This way, the musician can turn the
-page without having to miss notes. The @code{ly:page-turn-breaking} function
-attempts to find a page breaking minimizing cramping and stretching, but with
-the additional restriction that it is only allowed to introduce page turns
-in specified places.
-
-There are two steps to using this page breaking function. First, you
-must enable it in the @code{\paper} block, as explained in @ref{Page
-breaking}. Then you must tell the function where you would like to allow
-page breaks.
-
-There are two ways to achieve the second step. First, you can specify each
-potential page turn manually, by inserting @code{\allowPageTurn} into your
-input file at the appropriate places.
-
-If this is too tedious, you can add a @code{Page_turn_engraver} to a Staff or
-Voice context. The @code{Page_turn_engraver} will scan the context for
-sections without notes (note that it does not scan for rests; it scans for
-the absence of notes. This is so that single-staff polyphony with rests in one
-of the parts does not throw off the @code{Page_turn_engraver}). When it finds
-a sufficiently long section without notes, the @code{Page_turn_engraver} will
-insert an @code{\allowPageTurn} at the final bar line in that section, unless
-there is a @q{special} bar line (such as a double bar), in which case the
-@code{\allowPageTurn} will be inserted at the final @q{special} bar line in
-the section.
+Often it is necessary to find a page breaking configuration so
+that there is a rest at the end of every second page. This way,
+the musician can turn the page without having to miss notes. The
+@code{ly:page-turn-breaking} function attempts to find a page
+breaking minimizing cramping and stretching, but with the
+additional restriction that it is only allowed to introduce page
+turns in specified places.
+
+There are two steps to using this page breaking function. First,
+you must enable it in the @code{\paper} block, as explained in
+@ref{Page breaking}. Then you must tell the function where you
+would like to allow page breaks.
+
+There are two ways to achieve the second step. First, you can
+specify each potential page turn manually, by inserting
+@code{\allowPageTurn} into your input file at the appropriate
+places.
+
+If this is too tedious, you can add a @code{Page_turn_engraver} to
+a Staff or Voice context. The @code{Page_turn_engraver} will scan
+the context for sections without notes (note that it does not scan
+for rests; it scans for the absence of notes. This is so that
+single-staff polyphony with rests in one of the parts does not
+throw off the @code{Page_turn_engraver}). When it finds a
+sufficiently long section without notes, the
+@code{Page_turn_engraver} will insert an @code{\allowPageTurn} at
+the final bar line in that section, unless there is a @q{special}
+bar line (such as a double bar), in which case the
+@code{\allowPageTurn} will be inserted at the final @q{special}
+bar line in the section.
@funindex minimumPageTurnLength
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
-to disable page turns, you can set it to something very large.
+@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 to disable page turns,
+set it to something @q{very large}.
@example
\new Staff \with @{ \consists "Page_turn_engraver" @}
@end example
@funindex minimumRepeatLengthForPageTurn
-The @code{Page_turn_engraver} detects volta repeats. It will only allow a page
-turn during the repeat if there is enough time at the beginning and end of the
-repeat to turn the page back. The @code{Page_turn_engraver} can also disable
-page turns if the repeat is very short. If you set the context property
-@code{minimumRepeatLengthForPageTurn} then the @code{Page_turn_engraver} will
-only allow turns in repeats whose duration is longer than this value.
-
-The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and
-@code{\allowPageTurn}, may also be used at top-level, between scores and
-top-level markups.
+With volta repeats, the @code{Page_turn_engraver} will only
+allow a page turn during the repeat if there is enough time at the
+beginning and end of the repeat to turn the page back. If the
+repeat is very short, the @code{Page_turn_engraver} can also be
+used to disable page turns by setting a value for the context
+property @code{minimumRepeatLengthForPageTurn} where as
+@code{Page_turn_engraver} only allows turns in repeats whose
+duration is longer than this value.
+
+The page turning commands, @code{\pageTurn}, @code{\noPageTurn}
+and @code{\allowPageTurn}, may also be used at top-level, in
+top-level markups and between scores.
@predefined
@funindex \pageTurn
@seealso
Notation Reference:
-@ref{paper variables for line breaking,,@code{@bs{}paper} variables for line breaking}.
+@ref{paper variables for line breaking}.
Snippets:
@rlsr{Spacing}.
@knownissues
-There should only be one @code{Page_turn_engraver} in a score. If there is more
-than one, they will interfere with each other.
-
-
-@node Minimal page breaking
-@subsection Minimal page breaking
-
-@funindex ly:minimal-breaking
+Use only one @code{Page_turn_engraver} per score. If there are
+more, they will interfere with each other.
-The @code{ly:minimal-breaking} function performs minimal computations to
-calculate the page breaking: it fills a page with as many systems as
-possible before moving to the next one. Thus, it may be preferred for
-scores with many pages, where the other page breaking functions could be
-too slow or memory demanding, or a lot of texts. It is enabled using:
-
-@example
-\paper @{
- page-breaking = #ly:minimal-breaking
-@}
-@end example
-
-@seealso
-Snippets:
-@rlsr{Spacing}.
-
-@node One-line page breaking
-@subsection One-line page breaking
-
-@funindex ly:one-line-breaking
-
-The @code{ly:one-line-breaking} function is a special-purpose
-page breaking algorithm that puts each score on its own page,
-and on a single line. This page breaking function does not
-typeset titles or margins; only the score will be displayed.
-
-The page width will be adjusted so that
-the longest score fits on one line. In particular,
-@code{paper-width}, @code{line-width} and @code{indent}
-variables in the @code{\paper} block will be ignored, although
-@code{left-margin} and @code{right-margin} will
-still be honored. The height of the page will
-be left unmodified.
@node Explicit breaks
@subsection Explicit breaks
-Lily sometimes rejects explicit @code{\break} and @code{\pageBreak}
-commands. There are two commands to override this behavior:
+There are cases when manual @code{\break} or @code{\pageBreak}
+commands are ignored by LilyPond. There are two commands to
+override this behavior:
@example
\override NonMusicalPaperColumn.line-break-permission = ##f
\override NonMusicalPaperColumn.page-break-permission = ##f
@end example
-When @code{line-break-permission} is overridden to false, Lily will insert
-line breaks at explicit @code{\break} commands and nowhere else. When
-@code{page-break-permission} is overridden to false, Lily will insert
-page breaks at explicit @code{\pageBreak} commands and nowhere else.
+If @code{line-break-permission} is set to @code{##f}, all line
+breaks must be explicitly inserted with a @code{\break} command.
+Likewise, if @code{page-break-permission} is set to @code{##f},
+all page breaks must be explicitly inserted with a
+@code{\pageBreak} command.
@lilypond[quote,verbatim]
\paper {
}
@end lilypond
-@seealso
-Snippets:
-@rlsr{Spacing}.
-
-
-@node Using an extra voice for breaks
-@subsection Using an extra voice for breaks
-
-Line- and page-breaking information usually appears within note entry directly.
-
-@example
-music = \relative c'' @{ c4 c c c @}
-
-\score @{
- \new Staff @{
- \repeat unfold 2 @{ \music @} \break
- \repeat unfold 3 @{ \music @}
- @}
-@}
-@end example
-
-This makes @code{\break} and @code{\pageBreak} commands easy to enter but mixes
-music entry with information that specifies how music should lay out
-on the page. You can keep music entry and line- and page-breaking
-information in two separate places by introducing an extra voice to
-contain the breaks. This extra voice
-contains only skips together with @code{\break}, @code{pageBreak} and other
-breaking layout information.
-
-@lilypond[quote,verbatim]
-music = \relative c'' { c4 c c c }
-
-\header { tagline = ##f }
-\paper { left-margin = 0\mm }
-\book {
- \score {
- \new Staff <<
- \new Voice {
- s1 * 2 \break
- s1 * 3 \break
- s1 * 6 \break
- s1 * 5 \break
- }
- \new Voice {
- \repeat unfold 2 { \music }
- \repeat unfold 3 { \music }
- \repeat unfold 6 { \music }
- \repeat unfold 5 { \music }
- }
- >>
- }
-}
-@end lilypond
-
-This pattern becomes especially helpful when overriding
-@code{line-break-system-details} and the other useful but long properties of
-@code{NonMusicalPaperColumnGrob}, as explained in @ref{Vertical spacing}.
-
-@lilypond[quote,verbatim]
-music = \relative c'' { c4 c c c }
+@snippets
-\header { tagline = ##f }
-\paper { left-margin = 0\mm }
-\book {
- \score {
- \new Staff <<
- \new Voice {
- \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
- #'((Y-offset . 0))
- s1 * 2 \break
-
- \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
- #'((Y-offset . 5))
- s1 * 3 \break
-
- \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
- #'((Y-offset . 15))
- s1 * 6 \break
-
- \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
- #'((Y-offset . 30))
- s1 * 5 \break
- }
- \new Voice {
- \repeat unfold 2 { \music }
- \repeat unfold 3 { \music }
- \repeat unfold 6 { \music }
- \repeat unfold 5 { \music }
- }
- >>
- }
-}
-@end lilypond
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{using-an-extra-voice-for-breaks.ly}
@seealso
Notation Reference:
Vertical spacing is controlled by three things: the amount of
space available (i.e., paper size and margins), the amount of
-space between systems, and the amount of space between
-staves inside a system.
+space between systems, and the amount of space between staves
+inside a system.
@menu
* Flexible vertical spacing within systems::
@emph{Non-staff lines} (such as @code{Lyrics}, @code{ChordNames},
etc.) are contexts whose layout objects are engraved like staves
(i.e. in horizontal lines within systems). Specifically,
-non-staff lines are non-staff contexts that create the
-@code{VerticalAxisGroup} layout object.
+non-staff lines are non-staff contexts that contain the
+@rinternals{Axis_group_engraver}.
The following properties affect the spacing of non-staff lines:
This score isolates line- and page-breaking information in a dedicated
voice. This technique of creating a breaks voice will help keep layout
separate from music entry as our example becomes more complicated.
-See @ref{Using an extra voice for breaks}.
+See @ref{Explicit breaks}.
Explicit @code{\breaks} evenly divide the music into six measures per
line. Vertical spacing results from LilyPond's defaults. To set
* Horizontal spacing overview::
* New spacing area::
* Changing horizontal spacing::
-* Line length::
+* Line width::
* Proportional notation::
@end menu
@rlsr{Spacing}.
-@node Line length
-@subsection Line length
+@node Line width
+@subsection Line width
@cindex page breaks
@cindex breaking pages
@rinternals{SystemStartBracket},
@rinternals{SystemStartSquare}.
-@knownissues
-@code{PianoStaff} does not, by default, accept @code{ChordNames}.
-
@node Nested staff groups
@unnumberedsubsubsec Nested staff groups
\new Staff \with {
\remove "Time_signature_engraver"
alignAboveContext = #"main"
- fontSize = #-3
- \override StaffSymbol.staff-space = #(magstep -3)
- \override StaffSymbol.thickness = #(magstep -3)
+ \magnifyStaff #2/3
firstClef = ##f
}
{ e4 d f e }
\new Staff = "ossia" \with {
\remove "Time_signature_engraver"
\hide Clef
- fontSize = #-3
- \override StaffSymbol.staff-space = #(magstep -3)
- \override StaffSymbol.thickness = #(magstep -3)
+ \magnifyStaff #2/3
}
{ \stopStaff s1*6 }
\new Staff = "ossia" \with {
\remove "Time_signature_engraver"
\hide Clef
- fontSize = #-3
- \override StaffSymbol.staff-space = #(magstep -3)
- \override StaffSymbol.thickness = #(magstep -3)
+ \magnifyStaff #2/3
} \relative c'' {
R1*3
c4 e8 d c2
when setting dialogue over music; for examples showing this, see
@ref{Dialogue over music}.
-When entered in this way the words are left-aligned to the notes
-by default, but may be center-aligned to the notes of a melody by
-specifying an associated voice, if one exists. For details, see
-@ref{Manual syllable durations}.
-
@end itemize
@seealso
but with pitches replaced by text -- and the duration of each
syllable is entered explicitly after the syllable.
-By default, syllables will be left-aligned to the corresponding
-musical moment. Hyphenated lines may be drawn between syllables
+Hyphenated lines may be drawn between syllables
as usual, but extender lines cannot be drawn when there is no
associated voice.
@lilypond[relative=1,verbatim,quote]
<<
\new Voice = "melody" {
- \time 3/4
- c2 e4 g2 f
+ c'2 a f f e e
}
\new Lyrics \lyricmode {
- play1 the4 game4
+ c4. -- a -- f -- f -- e2. -- e
}
>>
@end lilypond
This technique is useful when writing dialogue over music, see
@ref{Dialogue over music}.
-To center-align syllables on the notes at the corresponding musical
-moments, set @code{associatedVoice} to the name of the Voice context
-containing those notes. When @code{associatedVoice} is set, both
-double hyphens and double underscores can be used to draw
-hyphenated lines and extenders under melismata correctly.
+To change syllable alignment, simply override the @code{self-alignment-X}
+property:
@lilypond[relative=1,verbatim,quote]
<<
\new Voice = "melody" {
\time 3/4
- c2 e4 g f g
+ c2 e4 g2 f
}
\new Lyrics \lyricmode {
- \set associatedVoice = #"melody"
- play2 the4 game2. __
+ \override LyricText.self-alignment-X = #LEFT
+ play1 a4 game4
}
>>
@end lilypond
-@c TODO see also feature request 707 - show how to do this with manual durations
-
@seealso
Notation Reference:
@ref{Dialogue over music}.
@ref{Score layout},
@ref{Separating systems},
@ref{Setting the staff size},
-@ref{Using an extra voice for breaks},
+@ref{Explicit breaks},
@ref{Vertical spacing}.
Internals Reference:
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
texidoc = "
This snippet has been obsoleted by predefined markup commands, see
-@ruser{Accordion Registers}. It's still useful as a simple
-demonstration of how to combine symbols: the placement of the symbols
-added with @code{\\markup} can be tweaked by changing the
-@code{\\translate-scaled} arguments. @code{\\translate-scaled} is
-used here rather than @code{\\translate} in order to let the
-positioning of the symbol parts adapt to changes of @code{font-size}.
+'Accordion Registers' in the Notation Reference. It's still useful as
+a simple demonstration of how to combine symbols: the placement of the
+symbols added with @code{\\markup} can be tweaked by changing the
+@code{\\translate-scaled} arguments. @code{\\translate-scaled} is used
+here rather than @code{\\translate} in order to let the positioning of
+the symbol parts adapt to changes of @code{font-size}.
+
"
doctitle = "Accordion-discant symbols"
} % begin verbatim
-
discant = \markup {
\musicglyph #"accordion.discant"
}
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "keyboards, specific-notation, symbols-and-glyphs"
+
+ texidoc = "
+Accordion register symbols are available as @code{\\markup} as well as
+as standalone music events (as register changes tend to occur between
+actual music events. Bass registers are not overly standardized. The
+available commands can be found in 'Accordion Registers' in the
+Notation Reference.
+
+"
+ doctitle = "Accordion register symbols"
+} % begin verbatim
+
+#(use-modules (scm accreg))
+
+\new PianoStaff
+<<
+ \new Staff \relative {
+ \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
+ <<
+ { r16 <f bes> r <e a> r <d g> }
+ \\
+ { d r a r bes r }
+ >> |
+ <cis e a>1
+ }
+ \new Staff \relative {
+ \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
+ \clef bass \stdBass "Master"
+ <<
+ { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
+ <e a cis>1^"a" }
+ \\
+ { d8_"D" c_"C" bes_"B" | a1_"A" }
+ >>
+ }
+>>
+++ /dev/null
-% 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.23
-\version "2.17.23"
-
-\header {
- lsrtags = "keyboards, specific-notation, symbols-and-glyphs"
-
- texidoc = "Accordion register symbols are available as
-@code{\\markup} as well as as standalone music events (as register
-changes tend to occur between actual music events. Bass registers are
-not overly standardized. The available commands can be found in
-@ruser{Accordion Registers}."
-
- doctitle = "Accordion register symbols"
-} % begin verbatim
-
-
-\layout { ragged-right = ##t }
-
-#(use-modules (scm accreg))
-
-\new PianoStaff
-<<
- \new Staff \relative
- { \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
- << { r16 <f bes> r <e a> r <d g> } \\ { d r a r bes r } >> | <cis e a>1 }
- \new Staff \relative
- { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
- \clef bass \stdBass "Master"
- << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
- <e a cis>1^"a" } \\
- { d8_"D" c_"C" bes_"B" | a1_"A" }
- >>
- }
->>
-% 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.6
-\version "2.17.6"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "ancient-notation, chords, contexts-and-engravers"
When writing a figured bass, you can place the figures above or below
the bass notes, by defining the
@code{BassFigureAlignmentPositioning.direction} property (exclusively
-in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}),
+in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}),
@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}).
-This property can be changed as many times as you wish. Use
+This property can be changed as many times as you wish. Use
@code{\\once \\override} if you don't want the override to apply to the
whole score.
doctitle = "Adding a figured bass above or below the notes"
} % begin verbatim
-
-
bass = {
\clef bass
g4 b, c d
e d8 c d2
}
+
continuo = \figuremode {
<_>4 <6>4 <5/>4
\override Staff.BassFigureAlignmentPositioning.direction = #UP
%\bassFigureStaffAlignmentDown
<4>4. <4>8 <_+>4
}
+
\score {
<<
\new Staff = bassStaff \bass
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, staff-notation, vocal-music"
doctitle = "Adding ambitus per voice"
} % begin verbatim
-
\new Staff <<
\new Voice \with {
\consists "Ambitus_engraver"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "breaks, contexts-and-engravers, staff-notation, workaround"
doctitle = "Adding an extra staff at a line break"
} % begin verbatim
-
\score {
\new StaffGroup \relative c'' {
\new Staff
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, really-simple, staff-notation"
doctitle = "Adding an extra staff"
} % begin verbatim
-
\score {
<<
\new Staff \relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, specific-notation"
doctitle = "Adding bar lines to ChordNames context"
} % begin verbatim
-
\new ChordNames \with {
\override BarLine.bar-extent = #'(-2 . 2)
\consists "Bar_engraver"
}
+
\chordmode {
f1:maj7 f:7 bes:7
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, rhythms"
doctitle = "Adding beams slurs ties etc. when using tuplet and non-tuplet rhythms"
} % begin verbatim
-
{
r16[ g16 \tuplet 3/2 { r16 e'8] }
g16( a \tuplet 3/2 { b d e') }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
doctitle = "Adding drum parts"
} % begin verbatim
-
drh = \drummode { cymc4.^"crash" hhc16^"h.h." hh hhc8 hho hhc8 hh16 hh hhc4 r4 r2 }
drl = \drummode { bd4 sn8 bd bd4 << bd ss >> bd8 tommh tommh bd toml toml bd tomfh16 tomfh }
timb = \drummode { timh4 ssh timl8 ssh r timh r4 ssh8 timl r4 cb8 cb }
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "scheme-language"
texidoc = "
-You can add additional elements to notes using @code{map-some-music}. In this
-example, an extra script is attached to a note.
+You can add additional elements to notes using @code{map-some-music}.
+In this example, an extra script is attached to a note.
In general, first do a @code{\\displayMusic} of the music you want to
create, then write a function that will work on the appropriate parts
of the music for you.
+
"
doctitle = "Adding extra fingering with scheme"
} % begin verbatim
-
addScript =
#(define-music-function (parser location script music)
(ly:event? ly:music?)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, fretted-strings, really-simple"
doctitle = "Adding fingerings to a score"
} % begin verbatim
-
\relative c'' {
c4-1 d-2 f-4 e-3
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, specific-notation"
doctitle = "Adding fingerings to tablatures"
} % begin verbatim
-
-
one = \markup { \finger 1 }
two = \markup { \finger 2 }
threeTwo = \markup {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation, symbols-and-glyphs, vocal-music"
} % begin verbatim
#(define-markup-command (arrow-at-angle layout props angle-deg length fill)
- (number? number? boolean?)
- (let* (
- ;; PI-OVER-180 and degrees->radians are taken from flag-styles.scm
- (PI-OVER-180 (/ (atan 1 1) 45))
- (degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
- (angle-rad (degrees->radians angle-deg))
- (target-x (* length (cos angle-rad)))
- (target-y (* length (sin angle-rad))))
- (interpret-markup layout props
- (markup
- #:translate (cons (/ target-x 2) (/ target-y 2))
- #:rotate angle-deg
- #:translate (cons (/ length -2) 0)
- #:concat (#:draw-line (cons length 0)
- #:arrow-head X RIGHT fill)))))
+ (number? number? boolean?)
+ (let* (
+ (PI-OVER-180 (/ (atan 1 1) 34))
+ (degrees->radians (lambda (degrees) (* degrees PI-OVER-180)))
+ (angle-rad (degrees->radians angle-deg))
+ (target-x (* length (cos angle-rad)))
+ (target-y (* length (sin angle-rad))))
+ (interpret-markup layout props
+ (markup
+ #:translate (cons (/ target-x 2) (/ target-y 2))
+ #:rotate angle-deg
+ #:translate (cons (/ length -2) 0)
+ #:concat (#:draw-line (cons length 0)
+ #:arrow-head X RIGHT fill)))))
-splitStaffBarLineMarkup = \markup \with-dimensions #'(0 . 0) #'(0 . 0) {
- \combine
- \arrow-at-angle #45 #(sqrt 8) ##f
- \arrow-at-angle #-45 #(sqrt 8) ##f
+splitStaffBarLine = {
+ \once \override Staff.BarLine.stencil =
+ #(lambda (grob)
+ (ly:stencil-combine-at-edge
+ (ly:bar-line::print grob)
+ X RIGHT
+ (grob-interpret-markup grob #{
+ \markup\with-dimensions #'(0 . 0) #'(0 . 0) {
+ \translate #'(5.95 . .14)\arrow-at-angle #45 #(sqrt 8) ##t
+ \translate #'(5.35 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t }#})
+ 0))
+ \break
}
-splitStaffBarLine = {
+convDownStaffBarLine = {
\once \override Staff.BarLine.stencil =
- #(lambda (grob)
- (ly:stencil-combine-at-edge
- (ly:bar-line::print grob)
- X RIGHT
- (grob-interpret-markup grob splitStaffBarLineMarkup)
- 0))
+ #(lambda (grob)
+ (ly:stencil-combine-at-edge
+ (ly:bar-line::print grob)
+ X RIGHT
+ (grob-interpret-markup grob #{
+ \markup\with-dimensions #'(0 . 0) #'(0 . 0) {
+ \translate #'(5.3 . -.13)\arrow-at-angle #-45 #(sqrt 8) ##t }#})
+ 0))
\break
}
-\paper {
- ragged-right = ##t
- short-indent = 5\mm
+convUpStaffBarLine = {
+ \once \override Staff.BarLine.stencil =
+ #(lambda (grob)
+ (ly:stencil-combine-at-edge
+ (ly:bar-line::print grob)
+ X RIGHT
+ (grob-interpret-markup grob #{
+ \markup\with-dimensions #'(0 . 0) #'(0 . 0) {
+ \translate #'(5.28 . .14)\arrow-at-angle #45 #(sqrt 8) ##t }#})
+ 0))
+ \break
}
+
\score {
<<
\new ChoirStaff <<
- \new Staff \with { instrumentName = #"High I + II" } {
+ \new Staff
+ \with {
+ instrumentName = #"H I + H II"
+ } {
+ \key f\minor
<<
\repeat unfold 4 f''1
\\
- \repeat unfold 4 d''1
+ \repeat unfold 4 des''1
>>
+ \key f\major
\splitStaffBarLine
}
\new Staff \with { instrumentName = #"Low" } {
+ \key f\minor
<<
- \repeat unfold 4 b'1
+ \repeat unfold 4 bes'1
\\
\repeat unfold 4 g'1
>>
+ \key f\major
}
- \new Staff \with { shortInstrumentName = #"H I" } {
+ \new Staff \with { shortInstrumentName = #"I" } {
+ \key f \major
R1*4
\repeat unfold 2 { r4 f''2 r4 } \repeat unfold 2 e''1
+ \key f\minor
+ \convDownStaffBarLine
}
- \new Staff \with { shortInstrumentName = #"H II" } {
+ \new Staff \with { shortInstrumentName = #"II" } {
+ \key f \major
R1*4
- \repeat unfold 4 b'2 \repeat unfold 2 c''1
+ \repeat unfold 4 bes'2 \repeat unfold 2 c''1
+ \key f\minor
+ \convUpStaffBarLine
}
+
\new Staff \with { shortInstrumentName = #"L" } {
+ \key f\major
R1*4
<<
\repeat unfold 4 g'1
\\
\repeat unfold 4 c'1
>>
+ \key f\minor
+ }
+
+ \new Staff
+ \with {
+ shortInstrumentName = #"I+II"
+ } {
+ \key f\minor
+ R1*8
+ <<
+ \repeat unfold 4 f''1
+ \\
+ \repeat unfold 4 des''1
+ >>
+ }
+ \new Staff \with { shortInstrumentName = #"L" } {
+ \key f\minor
+ R1*8
+ <<
+ \repeat unfold 4 bes'1
+ \\
+ \repeat unfold 4 g'1
+ >>
}
>>
>>
\layout {
\context {
\Staff \RemoveEmptyStaves
- \override VerticalAxisGroup.remove-first = ##t
+ \override VerticalAxisGroup #'remove-first = ##t
}
}
}
+\paper {
+ ragged-right = ##t
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
-% 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.6
-\version "2.17.6"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "staff-notation, vocal-music"
doctitle = "Adding orchestral cues to a vocal score"
} % begin verbatim
-
cueWhile =
#(define-music-function
(parser location instrument name dir music)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, workaround"
doctitle = "Adding parentheses around an expressive mark or chordal note"
} % begin verbatim
-
\relative c' {
c2-\parenthesize ->
\override ParenthesesItem.padding = #0.1
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-cool, scheme-language, text, titles"
doctitle = "Adding the current date to a score"
} % begin verbatim
-
% first, define a variable to hold the formatted date:
date = #(strftime "%d-%m-%Y" (localtime (current-time)))
-% 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.30
-\version "2.17.30"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
texidoc = "
-Skipped beats in very long glissandi are sometimes indicated by
-timing marks, often consisting of stems without noteheads. Such
-stems can also be used to carry intermediate expression markings.
+Skipped beats in very long glissandi are sometimes indicated by timing
+marks, often consisting of stems without noteheads. Such stems can
+also be used to carry intermediate expression markings.
-If the stems do not align well with the glissando, they may need to
-be repositioned slightly.
-"
+If the stems do not align well with the glissando, they may need to be
+repositioned slightly.
+"
doctitle = "Adding timing marks to long glissandi"
} % begin verbatim
-
glissandoSkipOn = {
\override NoteColumn.glissando-skip = ##t
\hide NoteHead
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats"
doctitle = "Adding volta brackets to additional staves"
} % begin verbatim
-
<<
\new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
\new Staff { \repeat volta 2 { c'1 } \alternative { c' } }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "simultaneous-notes"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Adjusting grace note spacing"
} % begin verbatim
-
graceNotes = {
\grace { c4 c8 c16 c32 }
c8
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
- lsrtags = "correction-wanted, spacing, text, vocal-music, workaround"
+ lsrtags = "spacing, text, tweaks-and-overrides, vocal-music, workaround"
texidoc = "
This snippet shows how to bring the lyrics line closer to the staff.
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout, text, titles"
doctitle = "Aligning and centering instrument names"
} % begin verbatim
-
\paper {
left-margin = 3\cm
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Aligning bar numbers"
} % begin verbatim
-
\relative c' {
\set Score.currentBarNumber = #111
\override Score.BarNumber.break-visibility = #all-visible
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
doctitle = "Aligning objects created with the \\mark command"
} % begin verbatim
-
\relative c' {
c1 \mark "(Center)"
c1
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
%% and then run scripts/auxiliar/makelsr.py
%%
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing, specific-notation"
doctitle = "Allowing fingerings to be printed inside the staff"
} % begin verbatim
-
\relative c' {
<c-1 e-2 g-3 b-5>2
\override Fingering.staff-padding = #'()
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, tweaks-and-overrides"
doctitle = "Altering the length of beamed stems"
} % begin verbatim
-
\relative c'' {
\override Stem.details.beamed-lengths = #'(2)
a8[ a] a16[ a] a32[ a]
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "editorial-annotations, staff-notation, tweaks-and-overrides"
- texidoc = "Two alternative methods for bar numbering can be set,
- especially for when using repeated music."
+
+ texidoc = "
+Two alternative methods for bar numbering can be set, especially for
+when using repeated music.
+
+"
doctitle = "Alternative bar numbering"
} % begin verbatim
-
\relative c'{
\set Score.alternativeNumberingStyle = #'numbers
\repeat volta 3 { c4 d e f | }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, vocal-music"
doctitle = "Ambitus with multiple voices"
} % begin verbatim
-
\new Staff \with {
\consists "Ambitus_engraver"
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, vocal-music"
doctitle = "Ambitus"
} % begin verbatim
-
\layout {
\context {
\Voice
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-simple, tweaks-and-overrides"
doctitle = "Analysis brackets above the staff"
} % begin verbatim
-
\layout {
\context {
\Voice
\consists "Horizontal_bracket_engraver"
}
}
+
\relative c'' {
\once \override HorizontalBracket.direction = #UP
c2\startGroup
-% 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.6
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, symbols-and-glyphs"
texidoc = "
Shown here are many (all?) of the symbols that are included in
LilyPond's support for ancient notation.
+
"
doctitle = "Ancient fonts"
} % begin verbatim
-
upperStaff = \new VaticanaStaff = "upperStaff" <<
\context VaticanaVoice <<
\transpose c c {
\override NoteHead.style = #'vaticana.inclinatum
a! b ces'
\bar "|"
- % \break % 1 (8*1)
\override NoteHead.style = #'vaticana.quilisma
b! des'! ges! fes!
\override NoteHead.style = #'vaticana.reverse.plica
c d
\bar "|"
- % \break %2 (8*1)
\override NoteHead.style = #'vaticana.punctum.cavum
es f
g f
\override NoteHead.style = #'vaticana.linea.punctum
\once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
- % \break % 3 (8*1)
es d
\override NoteHead.style = #'vaticana.epiphonus
\clef "medicaea-fa2"
ces des
\bar "|"
- % \break % 4 (8*1)
e! f! ges
\clef "medicaea-do2"
\override NoteHead.style = #'medicaea.virga
b! a!
\bar "|"
- % \break % 5 (8*1)
ges fes
\clef "medicaea-fa1"
\clef "hufnagel-fa2"
ces des es
\bar "|"
- % \break % 6 (8*1)
fes ges
\clef "hufnagel-do2"
\override NoteHead.style = #'hufnagel.virga
bes! as!
\bar "|"
- % \break % 7 (8*1)
ges! fes!
\clef "hufnagel-do-fa"
\override NoteHead.style = #'hufnagel.punctum
es! des ces des! es! fes!
\bar "||"
- % \break % 8 (8*1)
s32*1
- % \break % 12 (32*1)
}
>>
>>
\clef "neomensural-c2"
cis1
\bar "|"
- % \break % 2 (16*1)
\[ g\breve dis''\longa \]
b\breve \[ a\longa d\longa \]
\clef "petrucci-c2"
- % \break % 4 (16*1)
fis1 ces1
\clef "petrucci-c2"
\clef "mensural-c2"
r\breve
\bar "|"
- % \break % 5 (8*1)
r2
\clef "mensural-g"
\clef "petrucci-f"
r\breve
\bar "|"
- % \break % 6 (8*1)
r\breve
\clef "mensural-f"
\clef "mensural-f"
e\breve f g a1
\clef "mensural-g"
- % \break % 7 (8*1)
\[ bes'!\longa a'!\longa c''!\longa \]
e'1 d' c' d' \bar "|"
\bar "|"
- % \break % 9 (16*1)
bes'!\longa fis'!1 as'!1 ges'!\longa % lig
\set Staff.forceClef = ##t
\clef "mensural-g"
e'2 d' c' \bar "|"
- % \break % 11 (16*1)
\set Staff.forceClef = ##t
\clef "petrucci-g"
\set Staff.forceClef = ##t
\clef "mensural-g"
es'! des'! cis'!1 \bar "||"
- % \break % 12 (8*1)
}
>>
>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "headword"
-% 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.30
-\version "2.17.30"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
- lsrtags = "vocal-music, ancient-notation, template"
+ lsrtags = "ancient-notation, template, vocal-music"
texidoc = "
This example demonstrates how to do modern transcription of Gregorian
doctitle = "Ancient notation template -- modern transcription of gregorian music"
} % begin verbatim
-
\include "gregorian.ly"
chant = \relative c' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, real-music, really-cool, template"
doctitle = "Ancient notation template -- modern transcription of mensural music"
} % begin verbatim
-
global = {
\set Score.skipBars = ##t
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation"
doctitle = "Ancient time signatures"
} % begin verbatim
-
{
\override Staff.TimeSignature.style = #'neomensural
s1
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "template, vocal-music"
doctitle = "Anglican psalm template"
} % begin verbatim
-
SopranoMusic = \relative g' {
g1 | c2 b | a1 | \bar "||"
a1 | d2 c | c b | c1 | \bar "||"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, pitches"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "world-music"
doctitle = "Arabic improvisation"
} % begin verbatim
-
\include "arabic.ly"
\relative sol' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Asymmetric slurs"
} % begin verbatim
-
slurNotes = { d,8( a' d f a f' d, a) }
\relative c' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, connecting-notes, rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
texidoc = "
-<code>shiftDurations</code> can be used to change the note lengths of a
-piece of music. It takes two arguments - the scaling factor as a power
-of two, and the number of dots to be added as a positive integer.
+@code{shiftDurations} can be used to change the note lengths of a piece
+of music. It takes two arguments - the scaling factor as a power of
+two, and the number of dots to be added as a positive integer.
"
doctitle = "Automatically change durations"
} % begin verbatim
-
\paper { indent = 0 }
music = \relative c'' { a1 b2 c4 d8 r }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, pitches"
\relative c'' {
\time 3/4
- \autoBeamOff
a8 b g f b g |
- c b d c b c
+ c b d c b c |
}
\layout {
\context {
\Voice
\consists "Melody_engraver"
- \override Stem.neutral-direction = #'()
+ \autoBeamOff
+ \stemNeutral
}
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, editorial-annotations, rhythms, tweaks-and-overrides"
doctitle = "Avoiding collisions with chord fingerings"
} % begin verbatim
-
\relative c' {
\set fingeringOrientations = #'(up)
\set stringNumberOrientations = #'(up)
<f c'\5>8
<f c'-\rightHandFinger #2 >8
- % Corrected to avoid collisions
+ % No tweak needed
r8
- \override Fingering.add-stem-support = ##t
<f c'-5>8
- \override StringNumber.add-stem-support = ##t
<f c'\5>8
+ % Corrected to avoid collisions
\override StrokeFinger.add-stem-support = ##t
<f c'-\rightHandFinger #2 >8
}
+++ /dev/null
-% 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.6
-\version "2.17.6"
-
-\header {
- lsrtags = "chords, fretted-strings"
-
- texidoc = "
-Here is how to print bar chords, or half-bar chords (just uncomment the
-appropriate line for to select either one).
-
-The syntax is @code{\\bbarre #\"@var{fret number}\" @{ notes @} }.
-"
- doctitle = "Bar chords notation for Guitar (with Text Spanner)"
-} % begin verbatim
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%%%%%% Cut here ----- Start 'bbarred.ly'
-
-%% C with slash -------------------------------
-cWithSlash = \markup {
- \combine \roman C \translate #'(0.6 . -0.4) \draw-line #'(0 . 2.0)
-}
-%% Span -----------------------------------
-%% Syntax: \bbarre #"text" { notes } - text = any number of box
-bbarre =
-#(define-music-function (barre location str music) (string? ly:music?)
- (let ((elts (extract-named-music music '(NoteEvent EventChord))))
- (if (pair? elts)
- (let ((first-element (first elts))
- (last-element (last elts)))
- (set! (ly:music-property first-element 'articulations)
- (cons (make-music 'TextSpanEvent 'span-direction -1)
- (ly:music-property first-element 'articulations)))
- (set! (ly:music-property last-element 'articulations)
- (cons (make-music 'TextSpanEvent 'span-direction 1)
- (ly:music-property last-element 'articulations))))))
- #{
- \once \override TextSpanner.font-size = #-2
- \once \override TextSpanner.font-shape = #'upright
- \once \override TextSpanner.staff-padding = #3
- \once \override TextSpanner.style = #'line
- \once \override TextSpanner.to-barline = ##f
- \once \override TextSpanner.bound-details =
- #`((left
- (text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
- (Y . 0)
- (padding . 0.25)
- (attach-dir . -2))
- (right
- (text . ,#{ \markup { \cWithSlash #str } #})
- (Y . 0)
- (padding . 0.25)
- (attach-dir . 2)))
-%% uncomment this line for make full barred
- % \once \override TextSpanner.bound-details.left.text = \markup { "B" #str }
- $music
- #})
-
-%% %%%%%%% Cut here ----- End 'bbarred.ly'
-%% Copy and change the last line for full barred. Rename in 'fbarred.ly'
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Syntaxe: \bbarre #"text" { notes } - text = any number of box
-\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { <f a'>16[ c' d c d8] } }
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "chords, fretted-strings"
+
+ texidoc = "
+Here is how to print bar chords (or barre chords) or half-bar chords
+(just uncomment the appropriate line for to select either one). The
+syntax is : @code{\\bbarre #'fret_number' note(s)}
+
+
+
+
+
+
+"
+ doctitle = "Bar chords notation for Guitar (with Text Spanner)"
+} % begin verbatim
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%%%%%% Cut here ----- Start 'bbarred.ly'
+
+%% C with slash -------------------------------
+cWithSlash = \markup {
+ \combine \roman C \translate #'(0.6 . -0.4) \draw-line #'(0 . 2.0)
+}
+%% Span -----------------------------------
+%% Syntax: \bbarre #"text" { notes } - text = any number of box
+bbarre =
+#(define-music-function (barre location str music) (string? ly:music?)
+ (let ((elts (extract-named-music music '(NoteEvent EventChord))))
+ (if (pair? elts)
+ (let ((first-element (first elts))
+ (last-element (last elts)))
+ (set! (ly:music-property first-element 'articulations)
+ (cons (make-music 'TextSpanEvent 'span-direction -1)
+ (ly:music-property first-element 'articulations)))
+ (set! (ly:music-property last-element 'articulations)
+ (cons (make-music 'TextSpanEvent 'span-direction 1)
+ (ly:music-property last-element 'articulations))))))
+ #{
+ \once \override TextSpanner.font-size = #-2
+ \once \override TextSpanner.font-shape = #'upright
+ \once \override TextSpanner.staff-padding = #3
+ \once \override TextSpanner.style = #'line
+ \once \override TextSpanner.to-barline = ##f
+ \once \override TextSpanner.bound-details =
+ #`((left
+ (text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
+ (Y . 0)
+ (padding . 0.25)
+ (attach-dir . -2))
+ (right
+ (text . ,#{ \markup { \cWithSlash #str } #})
+ (Y . 0)
+ (padding . 0.25)
+ (attach-dir . 2)))
+%% uncomment this line for make full barred
+ % \once \override TextSpanner.bound-details.left.text = \markup { "B" #str }
+ $music
+ #})
+
+%% %%%%%%% Cut here ----- End 'bbarred.ly'
+%% Copy and change the last line for full barred. Rename in 'fbarred.ly'
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% Syntaxe: \bbarre #"text" { notes } - text = any number of box
+\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { <f a'>16[ c' d c d8] } }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Beam endings in Score context"
} % begin verbatim
-
\relative c'' {
\time 5/4
% Set default beaming for all staves
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Beams across line breaks"
} % begin verbatim
-
\relative c'' {
\override Beam.breakable = ##t
c8 c[ c] c[ c] c[ c] c[ \break
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-cool, text"
doctitle = "Blanking staff lines using the \\whiteout command"
} % begin verbatim
+\layout {
+ ragged-right = ##f
+}
-\layout { ragged-right = ##f }
\relative c' {
\override TextScript.extra-offset = #'(2 . 4)
c2-\markup { \whiteout \pad-markup #0.5 "middle C" } c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout"
doctitle = "Book parts"
} % begin verbatim
-
#(set-default-paper-size "a6")
\book {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs"
doctitle = "Breathing signs"
} % begin verbatim
-
\new Staff \relative c'' {
\key es \major
\time 3/4
-% 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.19.2
-\version "2.19.2"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
texidoc = "
In order to make parts of a crescendo hairpin invisible, the following
method is used: A white rectangle is drawn on top of the respective
-part of the crescendo hairpin, making it invisible.
+part of the crescendo hairpin, making it invisible. The rectangle is
+defined as postscript code within a text markup.
-The markup command @code{with-dimensions} tells LilyPond to consider only
-the bottom edge of the rectangle when spacing it against the hairpin.
-The property @code{staff-padding} prevents the rectangle from fitting
-between the hairpin and staff.
+The markup command @code{with-dimensions} tells LilyPond to consider
+only the bottom edge of the rectangle when spacing it against the
+hairpin. The property @code{staff-padding} prevents the rectangle from
+fitting between the hairpin and staff.
-Make sure to put the hairpin in a lower layer than the text markup to
-draw the rectangle over the hairpin.
+Make sure the hairpin is in a lower layer than the text markup to draw
+the rectangle over the hairpin.
"
doctitle = "Broken Crescendo Hairpin"
} % begin verbatim
-
\relative c' {
<<
{
des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
\with-color #white
\filled-box #'(2 . 7) #'(0 . 2) #0
- r8. des4 ~ 16->\sff
+ r8. des4 ~ des16->\sff r8.
}
>>
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, symbols-and-glyphs, tweaks-and-overrides"
doctitle = "Caesura (\"railtracks\") with fermata"
} % begin verbatim
-
\relative c'' {
c2.
% construct the symbol
\override BreathingSign.text = \markup {
- \line {
- \musicglyph #"scripts.caesura.curved"
- \translate #'(-1.75 . 1.6)
- \musicglyph #"scripts.ufermata"
+ \override #'(direction . 1)
+ \override #'(baseline-skip . 1.8)
+ \dir-column {
+ \translate #'(0.155 . 0)
+ \center-align \musicglyph #"scripts.caesura.curved"
+ \center-align \musicglyph #"scripts.ufermata"
}
}
\breathe c4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, really-cool, scheme-language, text"
hairpinWithCenteredText =
#(define-music-function (parser location text) (markup?)
-#{
- \once \override Voice.Hairpin.after-line-breaking =
- #(lambda (grob)
- (let* ((stencil (ly:hairpin::print grob))
- (par-y (ly:grob-parent grob Y))
- (dir (ly:grob-property par-y 'direction))
- (new-stencil (ly:stencil-aligned-to
- (ly:stencil-combine-at-edge
- (ly:stencil-aligned-to stencil X CENTER)
- Y dir
- (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
- X LEFT))
- (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
- (staff-line-thickness
- (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
- (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
- (par-x (ly:grob-parent grob X))
- (dyn-text (eq? (grob-name par-x) 'DynamicText ))
- (dyn-text-stencil-x-length
- (if dyn-text
- (interval-length
- (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
- 0))
- (x-shift
- (if dyn-text
- (-
- (+ staff-space dyn-text-stencil-x-length)
- (* 0.5 staff-line-thickness)) 0)))
+ #{
+ \once \override Voice.Hairpin.after-line-breaking =
+ #(lambda (grob)
+ (let* ((stencil (ly:hairpin::print grob))
+ (par-y (ly:grob-parent grob Y))
+ (dir (ly:grob-property par-y 'direction))
+ (new-stencil (ly:stencil-aligned-to
+ (ly:stencil-combine-at-edge
+ (ly:stencil-aligned-to stencil X CENTER)
+ Y dir
+ (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
+ X LEFT))
+ (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
+ (staff-line-thickness
+ (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
+ (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
+ (par-x (ly:grob-parent grob X))
+ (dyn-text (eq? (grob-name par-x) 'DynamicText ))
+ (dyn-text-stencil-x-length
+ (if dyn-text
+ (interval-length
+ (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
+ 0))
+ (x-shift
+ (if dyn-text
+ (-
+ (+ staff-space dyn-text-stencil-x-length)
+ (* 0.5 staff-line-thickness)) 0)))
- (ly:grob-set-property! grob 'Y-offset 0)
- (ly:grob-set-property! grob 'stencil
- (ly:stencil-translate-axis
- new-stencil
- x-shift X))))
-#})
+ (ly:grob-set-property! grob 'Y-offset 0)
+ (ly:grob-set-property! grob 'stencil
+ (ly:stencil-translate-axis
+ new-stencil
+ x-shift X))))
+ #})
hairpinMolto =
\hairpinWithCenteredText \markup { \italic molto }
-% 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.7
-\version "2.17.7"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "contexts-and-engravers, repeats, staff-notation"
texidoc = "
-Scores of large ensemble works often have bar numbers placed beneath the
-system, centered horizontally on the measure's extent. This snippet shows
-how the @code{Measure_counter_engraver} may be used to simulate this
-notational practice. Here, the engraver has been added to a @code{Dynamics}
-context.
+Scores of large ensemble works often have bar numbers placed beneath
+the system, centered horizontally on the measure's extent. This
+snippet shows how the @code{Measure_counter_engraver} may be used to
+simulate this notational practice. Here, the engraver has been added
+to a @code{Dynamics} context.
"
-
doctitle = "Centered measure numbers"
} % begin verbatim
-
\layout {
\context {
\Dynamics
-% 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.6
-\version "2.17.6"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
- lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
+ lsrtags = "contexts-and-engravers, text, tweaks-and-overrides"
+
texidoc = "
For technical reasons, text scripts attached to note heads cannot
easily be centered on a note head's width, unlike articulations.
Instead of using trial-and-error offset tweaks, this snippet uses a
Scheme engraver to reset the horizontal parent of each markup to a
-@code{NoteColumn}. This also allows text to follow note heads which have
-been shifted via @code{force-hshift}.
+@code{NoteColumn}. This also allows text to follow note heads which
+have been shifted via @code{force-hshift}.
+
+
+
"
doctitle = "Centering markup on note heads automatically"
} % begin verbatim
-
#(define (Text_align_engraver ctx)
(let ((scripts '())
(note-column #f))
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, scheme-language, specific-notation, symbols-and-glyphs, unfretted-strings"
doctitle = "Changing \\flageolet mark size"
} % begin verbatim
-
smallFlageolet =
#(let ((m (make-articulation "flageolet")))
(set! (ly:music-property m 'tweaks)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-simple, simultaneous-notes, specific-notation, tweaks-and-overrides"
doctitle = "Changing a single note's size in a chord"
} % begin verbatim
-
\relative c' {
<\tweak font-size #+2 c e g c \tweak font-size #-2 e>1^\markup { A tiny e }_\markup { A big c }
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Changing beam knee gap"
} % begin verbatim
-
{
f8 f''8 f8 f''8
\override Beam.auto-knee-gap = #6
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "tweaks-and-overrides"
+
+ texidoc = "
+To make beams thicker or thinner alter the @code{Beam.beam-thickness}
+property. To adjust the spacing between beams alter the
+@code{Beam.length-fraction} property.
+
+"
+ doctitle = "Changing beam thickness and spacing"
+} % begin verbatim
+
+\relative f' {
+ \time 1/8
+ \override Beam.beam-thickness = #0.4
+ \override Beam.length-fraction = #0.8
+ c32 c c c
+ \revert Beam.beam-thickness % 0.48 is default thickness
+ \revert Beam.length-fraction % 1.0 is default spacing
+ c32 c c c
+ \override Beam.beam-thickness = #0.6
+ \override Beam.length-fraction = #1.3
+ c32 c c c
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords"
doctitle = "Changing chord separator"
} % begin verbatim
-
\chords {
c:7sus4
\set chordNameSeparator
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Changing form of multi-measure rests"
} % begin verbatim
-
\relative c'' {
\compressFullBarRests
R1*2 | R1*5 | R1*9
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Changing fret orientations"
} % begin verbatim
-
\include "predefined-guitar-fretboards.ly"
<<
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, midi, real-music"
When outputting MIDI, the default behavior is for each staff to
represent one MIDI channel, with all the voices on a staff amalgamated.
This minimizes the risk of running out of MIDI channels, since there
-are only 16 available per MIDI port, and most devices support only one
-port.
+are only 16 available per track.
However, by moving the @code{Staff_performer} to the @code{Voice}
context, each voice on a staff can have its own MIDI channel, as is
doctitle = "Changing MIDI output to one channel per voice"
} % begin verbatim
-
\score {
\new Staff <<
\new Voice \relative c''' {
\time 2/2
r2 g-"Flute" ~
g fis ~
- 4 g8 fis e2 ~
- 4 d8 cis d2
+ fis4 g8 fis e2 ~
+ e4 d8 cis d2
}
\new Voice \relative c'' {
\set midiInstrument = #"clarinet"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "simultaneous-notes"
doctitle = "Changing partcombine texts"
} % begin verbatim
-
\new Staff <<
\set Staff.soloText = #"girl"
\set Staff.soloIIText = #"boy"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-cool, scheme-language, tweaks-and-overrides"
doctitle = "Changing properties for individual grobs"
} % begin verbatim
-
#(define (mc-squared grob grob-origin context)
(let ((sp (ly:grob-property grob 'staff-position)))
(if (grob::has-interface grob 'note-head-interface)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, vocal-music"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Changing text and spanner styles for text dynamics"
} % begin verbatim
-
\relative c'' {
\set crescendoText = \markup { \italic { cresc. poco } }
\set crescendoSpanner = #'text
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "connecting-notes, editorial-annotations, expressive-marks, really-simple"
doctitle = "Changing the appearance of a slur from solid to dotted or dashed"
} % begin verbatim
-
\relative c' {
c4( d e c)
\slurDotted
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, really-simple"
doctitle = "Changing the chord names to German or semi-German notation"
} % begin verbatim
-
-music = \chordmode {
+scm = \chordmode {
c1/c | cis/cis
b1/b | bis/bis | bes/bes
}
-%% The following is only here to print the names of the
-%% chords styles; it can be removed if you do not need to
-%% print them.
\layout {
+ ragged-right = ##t
\context {
\ChordNames
\consists "Instrument_name_engraver"
<<
\new ChordNames {
- \set ChordNames.instrumentName = #"default"
- \music
+ \set instrumentName = #"default"
+ \scm
+ }
+ \new ChordNames {
+ \set instrumentName = #"german"
+ \germanChords \scm
}
\new ChordNames {
- \set ChordNames.instrumentName = #"german"
- \germanChords \music }
+ \set instrumentName = #"semi-german"
+ \semiGermanChords \scm
+ }
\new ChordNames {
- \set ChordNames.instrumentName = #"semi-german"
- \semiGermanChords \music }
- \context Voice { \music }
+ \set instrumentName = #"italian"
+ \italianChords \scm
+ }
+ \new ChordNames {
+ \set instrumentName = #"french"
+ \frenchChords \scm
+ }
+ \context Voice { \scm }
>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text, tweaks-and-overrides"
doctitle = "Changing the default text font family"
} % begin verbatim
-
\paper {
% change for other default global staff size.
myStaffSize = #20
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches"
doctitle = "Changing the interval of lines on the stave"
} % begin verbatim
-
scale = \relative c' {
a4 ais b c
cis4 d dis e
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "specific-notation, staff-notation"
doctitle = "Changing the number of lines in a staff"
} % begin verbatim
-
upper = \relative c'' {
c4 d e f
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords"
doctitle = "Changing the positions of figured bass alterations"
} % begin verbatim
-
\figures {
<6\+> <5+> <6 4-> r
\set figuredBassAlterationDirection = #RIGHT
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "winds"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
doctitle = "Changing the staff size"
} % begin verbatim
-
<<
\new Staff {
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "midi, rhythms, tweaks-and-overrides"
doctitle = "Changing the tempo without a metronome mark"
} % begin verbatim
-
\score {
\new Staff \relative c' {
\tempo 4 = 160
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
doctitle = "Changing the text for sustain markings"
} % begin verbatim
-
sustainNotes = { c4\sustainOn d e\sustainOff\sustainOn f\sustainOff }
\relative c' {
-% 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.30
-\version "2.17.30"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\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.
+tuplet bracket, i.e., the denominator of the argument to the
+@code{\\times} command.
+
+Alternatively, num:den of the tuplet number may be printed, or the
+tuplet number may be suppressed altogether.
"
doctitle = "Changing the tuplet number"
} % begin verbatim
-
-
\relative c'' {
\tuplet 3/2 { c8 c c }
\tuplet 3/2 { c8 c c }
-% 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"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
- lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
+ lsrtags = "contemporary-notation, contexts-and-engravers, rhythms, workaround"
+ texidoc = "
+The @code{measureLength} property, together with
+@code{measurePosition}, determines when a bar line is needed. However,
+when using @code{\\scaleDurations}, the scaling of durations makes it
+difficult to change time signatures. In this case,
+@code{measureLength} should be set manually, using the
+@code{ly:make-moment} callback. The second argument must be the same
+as the second argument of @code{\\scaleDurations}.
+
+"
doctitle = "Changing time signatures inside a polymetric section using \\scaleDurations"
} % begin verbatim
-
-
\layout {
\context {
\Score
-% 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.6
-\version "2.17.6"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
- lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
+ lsrtags = "ancient-notation, contexts-and-engravers, rhythms, specific-notation, vocal-music"
texidoc = "
-This form of notation is used for the chant of the Psalms, where verses
-aren't always the same length.
+This form of notation is used for Psalm chant, where verses aren't
+always the same length.
"
doctitle = "Chant or psalms notation"
} % begin verbatim
-
stemOff = \hide Staff.Stem
stemOn = \undo \stemOff
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
texidoc = "
-Slides for chords can be indicated in both @code{Staff} and
+Slides for chords are indicated by default in both @code{Staff} and
@code{TabStaff}. String numbers are necessary for @code{TabStaff}
because automatic string calculations are different for chords and for
single notes.
"
doctitle = "Chord glissando in tablature"
} % begin verbatim
+%=> http://lilypond.1069038.n5.nabble.com/LSR-chord-glissando-in-tablature-obsolete-tc159863.html
myMusic = \relative c' {
- <c\3 e\2 g\1>1 \glissando <f\3 a\2 c\1>
+ <c e g>1 \glissando <f a c>
}
\score {
\clef "treble_8"
\myMusic
}
- \new TabStaff {
+ \new TabStaff \myMusic
+ >>
+}
+
+\score {
+ <<
+ \new Staff {
+ \clef "treble_8"
+ \myMusic
+ }
+ \new TabStaff \with { \override Glissando.style = #'none } {
\myMusic
}
>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, specific-notation"
doctitle = "Chord name exceptions"
} % begin verbatim
-
% modify maj9 and 6(add9)
% Exception music is chords with markups
chExceptionMusic = {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, specific-notation"
doctitle = "chord name major7"
} % begin verbatim
-
\chords {
c:7+
\set majorSevenSymbol = \markup { j7 }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
-% 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.6
-\version "2.17.6"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "headword"
- texidoc = ""
- doctitle = "headword"
-} % begin verbatim
+ texidoc = "
+.
+"
+ doctitle = "Chords headword"
+} % begin verbatim
theChords = \chordmode {
\time 2/2
}
}
}
-\paper { }
adding-a-figured-bass-above-or-below-the-notes.ly
adding-bar-lines-to-chordnames-context.ly
avoiding-collisions-with-chord-fingerings.ly
-bar-chords-notation-for-guitar--with-text-spanner.ly
+bar-chords-notation-for-guitar-with-text-spanner.ly
changing-chord-separator.ly
changing-the-chord-names-to-german-or-semi-german-notation.ly
changing-the-positions-of-figured-bass-alterations.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches"
doctitle = "Clefs can be transposed by arbitrary amounts"
} % begin verbatim
-
\relative c' {
\clef treble
c4 c c c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout"
doctitle = "Clip systems"
} % begin verbatim
-
#(ly:set-option 'clip-systems)
#(define output-suffix "1")
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, contemporary-notation, keyboards, really-cool, simultaneous-notes, specific-notation"
doctitle = "Clusters"
} % begin verbatim
-
fragment = \relative c' {
c4 f <e d'>4
<g a>8 <e a> a4 c2 <d b>4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, pitches, really-cool"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, really-simple, text"
doctitle = "Combining dynamics with markup texts"
} % begin verbatim
-
piuF = \markup { \italic più \dynamic f }
+
\layout { ragged-right = ##f }
+
\relative c'' {
c2\f c-\piuF
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "simultaneous-notes, syntax-and-expressions, text"
doctitle = "Combining two parts on the same staff"
} % begin verbatim
+%% Combining pedal notes with clef changes
musicUp = \relative c'' {
\time 4/4
-% 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.15
-\version "2.17.15"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "rhythms"
texidoc = "
-Odd 20th century time signatures (such as \\\"5/8\\\") can often be
-played as compound time signatures (e.g. \\\"3/8 + 2/8\\\"), which
-combine two or more inequal metrics. LilyPond can make such music quite
-easy to read and play, by explicitly printing the compound time
-signatures and adapting the automatic beaming behavior.
+Odd 20th century time signatures (such as \"5/8\") can often be played
+as compound time signatures (e.g. \"3/8 + 2/8\"), which combine two or
+more inequal metrics.
+
+LilyPond can make such music quite easy to read and play, by explicitly
+printing the compound time signatures and adapting the automatic
+beaming behavior.
"
doctitle = "Compound time signatures"
} % begin verbatim
-
\relative c' {
\compoundMeter #'((2 8) (3 8))
c8 d e fis gis
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "rhythms"
+
texidoc = "
Beat grouping within a measure is controlled by the context property
-@code{beatStructure}. Values of @code{beatStructure} are
-established for many time signatures in
-@file{scm/time-signature-settings.scm}. Values of @code{beatStructure}
-can be changed or set with @code{\\set}.
-Alternatively, @code{\\time} can be used to both
-set the time signature and establish the beat structure.
-For this, you specify the internal grouping of beats in a measure
-as a list of numbers (in Scheme syntax) before the time signature.
+@code{beatStructure}. Values of @code{beatStructure} are established
+for many time signatures in @@file@{scm/time-signature-settings.scm@}.
+Values of @code{beatStructure} can be changed or set with @code{\\set}.
+Alternatively, @code{\\time} can be used to both set the time signature
+and establish the beat structure. For this, you specify the internal
+grouping of beats in a measure as a list of numbers (in Scheme syntax)
+before the time signature.
@code{\\time} applies to the @code{Timing} context, so it will not
reset values of @code{beatStructure} or @code{baseMoment} that are set
in other lower-level contexts, such as @code{Voice}.
-If the @code{Measure_grouping_engraver} is included
-in one of the display contexts, measure grouping signs will be
-created. Such signs ease reading rhythmically complex modern music.
-In the example, the 9/8 measure is grouped in two different
-patterns using the two different methods, while the 5/8 measure
-is grouped according to the default setting in
-@file{scm/time-signature-settings.scm}:
+If the @code{Measure_grouping_engraver} is included in one of the
+display contexts, measure grouping signs will be created. Such signs
+ease reading rhythmically complex modern music. In the example, the 9/8
+measure is grouped in two different patterns using the two different
+methods, while the 5/8 measure is grouped according to the default
+setting in @@file@{scm/time-signature-settings.scm@}:
+
"
doctitle = "Conducting signs measure grouping signs"
} % begin verbatim
-
-
\score {
\new Voice \relative c'' {
\time 9/8
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
texidoc = "
When left aligning bar numbers, overlapping problems may occur with
-Staves brackets. The snippet solves this by keeping right aligned the
+Staves brackets. The snippet solves this by keeping right aligned the
first bar number following line breaks.
"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, expressive-marks, specific-notation"
doctitle = "Contemporary glissando"
} % begin verbatim
-
\relative c'' {
\time 3/4
\override Glissando.style = #'zigzag
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, editorial-annotations, fretted-strings, keyboards, specific-notation"
doctitle = "Controlling the placement of chord fingerings"
} % begin verbatim
-
\relative c' {
\set fingeringOrientations = #'(left)
<c-1 e-3 a-5>4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Controlling the vertical ordering of scripts"
} % begin verbatim
-
\relative c''' {
\once \override TextScript.script-priority = #-100
a2^\prall^\markup { \sharp }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Controlling tuplet bracket visibility"
} % begin verbatim
-
music = \relative c'' {
\tuplet 3/2 { c16[ d e } f8]
\tuplet 3/2 { c8 d e }
<< \music s4^"#t" >>
\override TupletBracket.bracket-visibility = ##f
<< \music s4^"#f" >>
+ %% v2.18 :
+ \omit TupletBracket
+ << \music s4^"omit" >>
}
}
-adjusting-lyrics-vertical-spacing.ly
horizontally-aligning-custom-dynamics-e.g.-sempre-pp,-piu-f,-subito-p.ly
-% 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.97
-\version "2.17.97"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
accidental, requires several overrides. The
@code{outside-staff-priority} property must be set to @code{#f}, as
otherwise this would take precedence over the @code{avoid-slur
-property}. Changing the fractions @code{2/3} and @code{1/3} adjusts the
-horizontal position.
+property}. Changing the fractions @code{2/3} and @code{1/3} adjusts
+the horizontal position.
+
"
doctitle = "Creating a delayed turn"
} % begin verbatim
-
-
\relative c'' {
c2*2/3 ( s2*1/3\turn d4) r
<<
{
s4
\once \set suggestAccidentals = ##t
- \once \override AccidentalSuggestion #'outside-staff-priority = ##f
- \once \override AccidentalSuggestion #'avoid-slur = #'inside
- \once \override AccidentalSuggestion #'font-size = #-3
- \once \override AccidentalSuggestion #'script-priority = #-1
+ \once \override AccidentalSuggestion.outside-staff-priority = ##f
+ \once \override AccidentalSuggestion.avoid-slur = #'inside
+ \once \override AccidentalSuggestion.font-size = -3
+ \once \override AccidentalSuggestion.script-priority = -1
\single \hideNotes
b8-\turn \noBeam
s8
% 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"
+%% Note: this file works from version 2.19.0
+\version "2.19.0"
\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"
- #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+ #{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
\new Staff {
\time 5/4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Creating arpeggios across notes in different voices"
} % begin verbatim
-
\new Staff \with {
\consists "Span_arpeggio_engraver"
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, editorial-annotations, paper-and-layout, specific-notation, staff-notation"
doctitle = "Creating blank staves"
} % begin verbatim
-
#(set-global-staff-size 20)
\score {
}
}
+% uncomment these lines for "letter" size
+%{
\paper {
#(set-paper-size "letter")
ragged-last-bottom = ##f
bottom-margin = 0.25\in
top-margin = 0.25\in
}
+%}
+
+% uncomment these lines for "A4" size
+%{
+\paper {
+ #(set-paper-size "a4")
+ ragged-last-bottom = ##f
+ line-width = 180
+ left-margin = 15
+ bottom-margin = 10
+ top-margin = 10
+}
+%}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Creating cross-staff arpeggios in a piano staff"
} % begin verbatim
-
\new PianoStaff \relative c'' <<
\set PianoStaff.connectArpeggios = ##t
\new Staff {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Creating cross-staff arpeggios in other contexts"
} % begin verbatim
-
\score {
\new ChoirStaff {
\set Score.connectArpeggios = ##t
-% 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.15
-\version "2.17.15"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
texidoc = "
Creating fingerings larger than 5 is possible.
+
"
doctitle = "Creating double-digit fingerings"
} % begin verbatim
-
\relative c' {
c1-10
c1-50
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Creating metronome marks in markup mode"
} % begin verbatim
-
\relative c' {
\tempo \markup {
\concat {
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
lsrtags = "expressive-marks, text, workaround"
doctitle = "Creating \"real\" parenthesized dynamics"
} % begin verbatim
-
paren =
#(define-event-function (parser location dyn) (ly:event?)
(make-dynamic-script
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
% the hidden measure and bar line
% \cadenzaOn turns off automatic calculation of bar numbers
\cadenzaOn
- \once \omit Score.TimeSignature
+ \once \override Score.TimeSignature.stencil = ##f
\time 1/16
s16 \bar ""
\cadenzaOff
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "connecting-notes, expressive-marks, keyboards, real-music, unfretted-strings"
doctitle = "Creating slurs across voices"
} % begin verbatim
-
\relative c' {
<<
{
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
doctitle = "Creating text spanners"
} % begin verbatim
-
\paper { ragged-right = ##f }
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, keyboards, tweaks-and-overrides, workaround"
avoidance then arise. If the stems from the lower staff were used in
the following example, it would be necessary to change the automatic
beam collision avoidance settings so that it doesn't detect collisions
-between staves using @code{\\override Staff.Beam.collision-voice-only
-= ##t}
+between staves using @code{\\override Staff.Beam.collision-voice-only =
+##t}
"
doctitle = "Cross-staff chords - beaming problems workaround"
} % begin verbatim
-
\new PianoStaff <<
\new Staff = up
\relative c' {
-% 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.16.0
-\version "2.16.0"
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
\header {
- lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
+ lsrtags = "contexts-and-engravers, staff-notation, tweaks-and-overrides"
+
texidoc = "
-This snippet shows the use of the @code{Span_stem_engraver}
-and @code{\\crossStaff} to connect stems across staves automatically.
-The stem length need not be specified, as the variable distance
-between noteheads and staves is calculated automatically.
+This snippet shows the use of the @code{Span_stem_engraver} and
+@code{\\crossStaff} to connect stems across staves automatically.
+
+The stem length need not be specified, as the variable distance between
+noteheads and staves is calculated automatically.
+
"
doctitle = "Cross staff stems"
} % begin verbatim
-
\layout {
\context {
\PianoStaff
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, real-music, repeats"
doctitle = "Cross-staff tremolos"
} % begin verbatim
-
\new PianoStaff <<
\new Staff = "up" \relative c'' {
\key a \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, specific-notation, symbols-and-glyphs, tweaks-and-overrides"
doctitle = "Custodes"
} % begin verbatim
-
\layout { ragged-right = ##t }
\new Staff \with { \consists "Custos_engraver" } \relative c' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
doctitle = "Customizing fretboard fret diagrams"
} % begin verbatim
-
\include "predefined-guitar-fretboards.ly"
\storePredefinedDiagram #default-fret-table \chordmode { c' }
#guitar-tuning
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
doctitle = "Customizing markup fret diagrams"
} % begin verbatim
-
<<
\chords { c1 | c | c | d }
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "scheme-language, symbols-and-glyphs"
+
+ texidoc = "
+If you want to customize the position and/or number of dots in repeat
+sign bar lines, you can define new custom bar lines or redefine the way
+ default repeat signs are drawn. This snippet shows how. This may be
+particularly helpful when using a staff with custom line-positions, as
+shown in this snippet.
+
+"
+ doctitle = "Customizing the position and number of dots in repeat sign bar lines"
+} % begin verbatim
+
+% \version "2.18.0"
+
+#(define ((make-custom-dot-bar-line dot-positions) grob extent)
+
+ "Draw dots (repeat sign dots) at @var{dot-positions}. The
+coordinates of @var{dot-positions} are equivalent to the
+coordinates of @code{StaffSymbol.line-positions}, a dot-position
+of X and a line-position of X indicate the same vertical position."
+
+ (let* ((staff-space (ly:staff-symbol-staff-space grob))
+ (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
+ (stencil empty-stencil))
+ (for-each
+ (lambda (dp)
+ (set! stencil (ly:stencil-add stencil
+ (ly:stencil-translate-axis dot (* dp (/ staff-space 2)) Y))))
+ dot-positions)
+ stencil))
+
+% With the procedure above we can define custom bar-lines, for example,
+% one that resembles standard repeat sign bar lines except it has
+% three dots at staff positions -3, 0, and 3.
+
+#(add-bar-glyph-print-procedure "*" (make-custom-dot-bar-line '(-3 0 3)))
+\defineBarLine ".|*" #'("" "*" "")
+\defineBarLine "*|." #'("" "*" "")
+
+% We can also customize the dot positions used in all default repeat signs
+% by redefining the print procedure of the colon bar glyph (":"). On a staff
+% with line-positions of '(-4 -2 2 4) the default repeat sign dots appear
+% at '(-3 3), but we can put them at '(-1 1) instead.
+
+#(add-bar-glyph-print-procedure ":" (make-custom-dot-bar-line '(-1 1)))
+
+
+\new Staff \with {
+ \override StaffSymbol.line-positions = #'(-4 -2 2 4)
+ \override StaffSymbol.staff-space = #1.3
+} {
+ \relative f' {
+ g1
+ \bar ".|*"
+ g
+ \bar "*|."
+ g
+ \bar ".|:"
+ g
+ \bar ":|."
+ g
+ \repeat volta 2 {
+ g
+ }
+ }
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations"
doctitle = "Default direction of stems on the center line of the staff"
} % begin verbatim
-
\relative c'' {
a4 b c b
\override Stem.neutral-direction = #up
% and then run scripts/auxiliar/makelsr.py
%
% This file is in the public domain.
-%% Note: this file works from version 2.16.0
+%% Note: this file works from version 2.19.7
\version "2.19.7"
\header {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Defining predefined fretboards for other instruments"
} % begin verbatim
-
% add FretBoards for the Cuatro
% Note: This section could be put into a separate file
% predefined-cuatro-fretboards.ly
\layout {
\context {
\Score
- \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
+ \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1 16)
}
}
\midi { }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "midi, real-music, specific-notation"
doctitle = "Demo MidiInstruments"
} % begin verbatim
-
\header {
title = "Demo of all midi sounds"
arranger = "Myself "
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout, text, titles"
doctitle = "Demonstrating all headers"
} % begin verbatim
-
\header {
copyright = "copyright"
title = "title"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.15"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers"
<<
\new Staff = "Staff_flute" \with {
instrumentName = "Flute"
- shortInstrumentName = "Fl"}
- \relative c' { \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
+ shortInstrumentName = "Fl"
+ }
+ \relative c' {
+ \repeat unfold 3 { c'4 c c c | c c c c | c c c c | \break }
}
>>
\new StaffGroup = "StaffGroup_Strings"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, simultaneous-notes, workaround"
} % begin verbatim
fixA = {
- \once \override Stem.length = #9
+ \once \override Stem.length = #11
}
+
fixB = {
\once \override NoteHead.X-offset = #1.7
+ \once \override Stem.length = #7
\once \override Stem.rotation = #'(45 0 0)
- \once \override Stem.extra-offset = #'(-0.2 . -0.2)
+ \once \override Stem.extra-offset = #'(-0.1 . -0.2)
\once \override Flag.style = #'no-flag
- \once \override Accidental.extra-offset = #'(4 . 0)
+ \once \override Accidental.extra-offset = #'(4 . -.1)
}
\relative c' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
@{
- \\once \\override NoteHead.before-line-breaking = #display-ancestry
+ \\once \\override NoteHead #'before-line-breaking = #display-ancestry
c @}
doctitle = "Displaying grob ancestry"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=622
+%% see also http://www.lilypond.org/doc/v2.18/Documentation/snippets/tweaks-and-overrides#tweaks-and-overrides-displaying-grob-ancestry
+
#(define (grob-name grob)
(if (ly:grob? grob)
(assoc-ref (ly:grob-property grob 'meta) 'name)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "real-music, tweaks-and-overrides, unfretted-strings"
doctitle = "Dotted harmonics"
} % begin verbatim
-
\relative c''' {
\time 3/4
\key f \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, expressive-marks, simultaneous-notes, workaround"
doctitle = "Double glissando"
} % begin verbatim
-
\relative c {
\clef bass
<<
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
doctitle = "Drawing boxes around grobs"
} % begin verbatim
-
\relative c'' {
\override TextScript.stencil =
#(make-stencil-boxer 0.1 0.3 ly:text-interface::print)
b8
\revert Stem.stencil
-
\revert Flag.stencil
c4. c4
\mark "F"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations"
(ly:stencil-extent note X)
(ly:stencil-extent note Y))))
-{ \circle c' }
+{ \circle c'' }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "headword"
\include "english.ly"
-% NR 1.7 Editorial annotations
-
% Beethoven, Op. 31, No. 3
% Piano sonata 18, Movt II, Scherzo
% Measures 9 - 14
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-cool, specific-notation, text"
doctitle = "Embedding native PostScript in a \\markup block"
} % begin verbatim
-
% PostScript is a registered trademark of Adobe Systems Inc.
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
%% and then run scripts/auxiliar/makelsr.py
%%
doctitle = "Engravers one-by-one"
} % begin verbatim
-
%% sample music
topVoice = \relative c' {
\key d \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Engraving ties manually"
} % begin verbatim
-
\relative c' {
<c e g>2~ <c e g>
\override TieColumn.tie-configuration =
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats, rhythms"
doctitle = "Engraving tremolos with floating beams"
} % begin verbatim
-
\relative c'' {
\repeat tremolo 8 { a32 f }
\override Beam.gap-count = #1
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "staff-notation, syntax-and-expressions, tweaks-and-overrides"
+
+ texidoc = "
+For @code{TrillSpanner}, the @code{minimum-length} property becomes
+effective only if the @code{set-spacing-rods} procedure is called
+explicitly. To do this, the @code{springs-and-rods} property should be
+set to @code{ly:spanner::set-spacing-rods}.
+
+"
+ doctitle = "Extending a TrillSpanner"
+} % begin verbatim
+
+%=> http://lilypond-french-users.1298960.n2.nabble.com/Allonger-un-trille-td7581110.html
+
+%by P.P.Schneider on April 2014
+
+\relative c' {
+\key c\minor
+ \time 2/4
+ c16( as') c,-. des-.
+ \once\override TrillSpanner.minimum-length = #15
+ \once\override TrillSpanner.springs-and-rods = #ly:spanner::set-spacing-rods
+ \afterGrace es4
+ \startTrillSpan { d16[( \stopTrillSpan es)] }
+ c( c' g es c g' es d
+ \hideNotes
+ c8)
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, specific-notation, workaround"
doctitle = "Faking a hammer in tablatures"
} % begin verbatim
-
\score {
\new TabStaff {
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "headword"
r16 d16 |
d4 bes,4 a,4 f4 |
g8 f16 g16 a8 a,8 d4 d'4 ~ |
- 8 c'8 b4 c'8 c'16 bes16 a4 |
+ d'8 c'8 b4 c'8 c'16 bes16 a4 |
bes8 bes16 a16 g4 a8 a,4 a16 g16 |
fis8 d8 e8 fis8 g8 g,4 g16 f16 |
e8 c8 d8 e8 f8 f,4 a,8 |
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, tweaks-and-overrides"
doctitle = "Fine-tuning pedal brackets"
} % begin verbatim
-
\paper { ragged-right = ##f }
\relative c'' {
c2\sostenutoOn c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "symbols-and-glyphs, winds"
,(ly:make-simple-closure (list
ly:self-alignment-interface::x-aligned-on-self))))
}
-\score
-{\relative c'
- {
+
+\score {
+ \relative c'{
g\open
- \once \override TextScript.staff-padding = #-1.0 \centermarkup
- g^\markup{\combine \musicglyph #"scripts.open" \musicglyph
- #"scripts.tenuto"}
- \centermarkup g^\markup{\combine \musicglyph #"scripts.open"
- \musicglyph #"scripts.stopped"}
+ \once \override TextScript.staff-padding = #-1.0
+ \centermarkup
+ g^\markup {
+ \combine
+ \musicglyph #"scripts.open"
+ \musicglyph #"scripts.tenuto"
+ }
+ \centermarkup
+ g^\markup {
+ \combine
+ \musicglyph #"scripts.open"
+ \musicglyph #"scripts.stopped"
+ }
g\stopped
}
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Fingerings string indications and right-hand fingerings"
} % begin verbatim
-
#(define RH rightHandFinger)
\relative c {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, specific-notation, stylesheet, version-specific"
doctitle = "Flamenco notation"
} % begin verbatim
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%% Cut here ----- Start 'flamenco.ly'
-% Text indicators
-abanico = \markup { \italic Abanico }
-rasgueaso = \markup { \italic Ras. }
-alzapua = \markup { \italic Alzapua }
-
-% Finger stroke symbols
-strokeUp = \markup { \postscript #"
- 0.1 setlinewidth
- 0.5 0 moveto
- 0.5 2 lineto
- 0.2 1.4 lineto
- 0.5 2 moveto
- 0.8 1.4 lineto
- stroke
-"}
-
-strokeDown = \markup { \postscript #"
- 0.1 setlinewidth
- 0.5 2 moveto
- 0.5 0 lineto
- 0.2 0.6 lineto
- 0.5 0 moveto
- 0.8 0.6 lineto
- stroke
-"}
-
-% Golpe symbol
-golpe = \markup { \postscript #"
- 0.2 setlinewidth
- 0 0 moveto
- 1 0 lineto
- 1 1 lineto
- stroke
- "\postscript #"
- 0.1 setlinewidth
- -0.6 -0.1 moveto
- -0.6 1.0 lineto
- 0.5 1.0 lineto
- stroke
-"}
-
-strokeUpGolpe = \markup { \column { \golpe \line { \strokeUp } } }
-iUpGolpe = \markup { \column { \golpe \line { \small i } \line { \strokeUp } } }
-
-% Strokes for all fingers
-pUp = \markup { \column { \small p \line { \strokeUp } } }
-pDown = \markup { \column { \small p \line { \strokeDown } } }
-iUp = \markup { \column { \small i \line { \strokeUp } } }
-iDown = \markup { \column { \small i \line { \strokeDown } } }
-mUp = \markup { \column { \small m \line { \strokeUp } } }
-mDown = \markup { \column { \small m \line { \strokeDown } } }
-aUp = \markup { \column { \small a \line { \strokeUp } } }
-aDown = \markup { \column { \small a \line { \strokeDown } } }
-xUp = \markup { \column { \small x \line { \strokeUp } } }
-xDown = \markup { \column { \small x \line { \strokeDown } } }
+% Text indicators :
+abanico = ^\markup\small { \italic Abanico }
+rasgueado = ^\markup\small { \italic Ras. }
+alzapua = ^\markup\small { \italic Alzapua }
+
+% Finger stroke symbols :
+strokeUp = \markup\combine\override #'(thickness . 1.3) \draw-line #'(0 . 2)\raise #2 \arrow-head #Y #UP ##f
+strokeDown = \markup\combine\arrow-head #Y #DOWN ##f \override #'(thickness . 1.3) \draw-line #'(0 . 2)
+
+% Golpe symbol :
+golpe = \markup {
+ \filled-box #'(0 . 1) #'(0 . 1) #0
+ \hspace #-1.6
+ \with-color #white
+ \filled-box #'(0.15 . 0.85) #'(0.15 . 0.85) #0
+}
+% Strokes, fingers and golpe command :
+RHp = \rightHandFinger #1
+RHi = \rightHandFinger #2
+RHm = \rightHandFinger #3
+RHa = \rightHandFinger #4
+RHx = \rightHandFinger #5
+RHu = \rightHandFinger \strokeUp
+RHd = \rightHandFinger \strokeDown
+RHg = \rightHandFinger \golpe
% Just handy :)
tupletOff = {
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
part = \relative c' {
- <a, e' a cis e>8^\iUp
- <a e' a cis e>8^\iDown
+ \set strokeFingerOrientations = #'(up)
+ \override StrokeFinger.add-stem-support = ##t
+ \key a\major
+ <a, e' a cis e\RHu\RHi>8
+ <a e' a cis e\RHd\RHi>8
r4
- r2^\golpe
-
- <a e' a cis e>8^\iUp
- <a e' a cis e>8^\iDown
- <a e' a cis e>8^\iUpGolpe
- <a e' a cis e>8^\iDown
+ r2^\markup\golpe
+ <a e' a cis e\RHu\RHi>8
+ <a e' a cis e\RHd\RHi>8
+ <a e' a cis e\RHu\RHi\RHg>8
+ <a e' a cis e\RHd\RHi>8
r2
-
- <a e' a cis e>16^\aUp
+ <a e' a cis e\RHu\RHa>16\rasgueado
\headsOff
- <a e' a cis e>^\mUp
- <a e' a cis e>^\iUp
- <a e' a cis e>^\iDown~
+ <a e' a cis e\RHu\RHm>
+ <a e' a cis e\RHu\RHi>
+ <a e' a cis e\RHd\RHi>~
\headsOn
<a e' a cis e>2
r4
-
\tupletOff
\tuplet 5/4 {
- <a e' a cis e>16^\xUp
+ <a e' a cis e\RHu\RHx>16\rasgueado
\headsOff
- <a e' a cis e>^\aUp
- <a e' a cis e>^\mUp
- <a e' a cis e>^\iUp
- <a e' a cis e>^\iDown~
+ <a e' a cis e\RHu\RHa>
+ <a e' a cis e\RHu\RHm>
+ <a e' a cis e\RHu\RHi>
+ <a e' a cis e\RHd\RHi>~
\headsOn
}
<a e' a cis e>2
r4
-
\tupletsOff
\tuplet 3/2 {
- <a e' a cis e>8^\pDown
+ <a e' a cis e\RHd\RHp>8\abanico
\headsOff
- <a e' a cis e>^\xUp
- <a e' a cis e>^\iUp
+ <a e' a cis e\RHu\RHx>
+ <a e' a cis e\RHu\RHi>
\headsOn
}
-
\tuplet 3/2 {
- <a e' a cis e>8^\pDown
+ <a e' a cis e\RHd\RHp>8
\headsOff
- <a e' a cis e>^\xUp
- <a e' a cis e>^\iUp
+ <a e' a cis e\RHu\RHx>
+ <a e' a cis e\RHu\RHi>
\headsOn
}
-
\tuplet 3/2 {
- <a e' a cis e>8^\pDown
+ <a e' a cis e\RHd\RHp>8
\headsOff
- <a e' a cis e>^\xUp
- <a e' a cis e>^\iUp
+ <a e' a cis e\RHu\RHx>
+ <a e' a cis e\RHu\RHi>
\headsOn
}
\tuplet 3/2 {
- <a e' a cis e>8^\pDown
+ <a e' a cis e\RHd\RHp>8
\headsOff
- <a e' a cis e>^\xUp
- <a e' a cis e>^\iUp
+ <a e' a cis e\RHu\RHx>
+ <a e' a cis e\RHu\RHi>
\headsOn
}
-
\tupletsOff
\override Beam.positions = #'(2 . 2)
\tuplet 3/2 {
- a8^\markup{ \small p }
- <e' a>^\strokeUpGolpe
- <e a>^\strokeDown
+ a8\RHp\alzapua
+ <e' a\RHu\RHg>
+ <e a\RHd>
}
\tuplet 3/2 {
- a,8^\markup{ \small p }
- <e' a>^\strokeUpGolpe
- <e a>^\strokeDown
+ a,8\RHp
+ <e' a\RHu\RHg>
+ <e a\RHd>
}
\tuplet 3/2 {
- a,8^\markup{ \small p }
- <e' a>^\strokeUpGolpe
- <e a>^\strokeDown
+ a,8\RHp
+ <e' a\RHu\RHg>
+ <e a\RHd>
}
\tuplet 3/2 {
- a,8^\markup{ \small p }
- <e' a>^\strokeUpGolpe
- <e a>^\strokeDown
+ a,8\RHp
+ <e' a\RHu\RHg>
+ <e a\RHd>
}
\tupletsOn
-
- \once \override TextScript.extra-offset = #'(0 . -1)
- <g, b f'>1_\golpe^\mUp
+ <a, e' a\RHu\RHm>1
\bar "|."
}
\score {
\new StaffGroup <<
\context Staff = "part" <<
- \clef G
- \transpose c c'
+ \clef "G_8"
{
\part
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, winds"
doctitle = "Flute slap notation"
} % begin verbatim
-
slap =
#(define-music-function (parser location music) (ly:music?)
#{
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches"
doctitle = "Forcing a clef symbol to be displayed"
} % begin verbatim
-
\relative c' {
\clef treble
c1
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
doctitle = "Forcing horizontal shift of notes"
} % begin verbatim
-
\relative c' <<
{
<d g>2 <d g>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "vocal-music"
doctitle = "Forcing hyphens to be shown"
} % begin verbatim
-
\relative c'' {
c32 c c c
c32 c c c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation, workaround"
texidoc = "
-By default, metronome marks do not influence horizontal spacing. This
-has one downside: when using compressed rests, some metronome marks may
-be too close and therefore are printed vertically stacked, as
-demonstrated in the first part of this example. This can be solved
-through a simple override, as shown in the second half of the example.
+By default, metronome marks do not influence horizontal spacing. This
+can be solved through a simple override, as shown in the second half of
+the example.
"
doctitle = "Forcing measure width to adapt to MetronomeMark's width"
} % begin verbatim
-
example = {
\tempo "Allegro"
R1*6
{
\compressFullBarRests
-
\example
-
R1
R1
-
- \override Score.MetronomeMark.extra-spacing-width = #'(0 . 0)
+ \override Score.MetronomeMark.extra-spacing-width = #'(-3 . 0)
\example
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, preparing-parts, really-simple, rhythms"
doctitle = "Forcing rehearsal marks to start from a given letter or number"
} % begin verbatim
-
\relative c'' {
c1 \mark \default
c1 \mark \default
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text, vocal-music"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
doctitle = "Fret diagrams explained and developed"
} % begin verbatim
-
<<
\chords {
a2 a
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
\score {
<<
- \new Staff {
+ \new Staff
+ \with { \omit StringNumber } {
\new Voice {
\clef "treble_8"
\harmonics
adding-fingerings-to-a-score.ly
adding-fingerings-to-tablatures.ly
allowing-fingerings-to-be-printed-inside-the-staff.ly
-bar-chords-notation-for-guitar--with-text-spanner.ly
+bar-chords-notation-for-guitar-with-text-spanner.ly
changing-fret-orientations.ly
chord-glissando-in-tablature.ly
chordchanges-for-fretboards.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, really-cool, scheme-language"
doctitle = "Generating random notes"
} % begin verbatim
-
\score {
{
$(let ((random-state (seed->random-state (current-time))))
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, really-cool, scheme-language"
"
doctitle = "Generating whole scores (also book parts) in scheme without using the parser"
} % begin verbatim
+%%
#(define-public (add-score parser score)
(ly:parser-define! parser 'toplevel-scores
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "winds"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations"
doctitle = "Grid lines: changing their appearance"
} % begin verbatim
-
\score {
\new ChoirStaff <<
\new Staff {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations"
doctitle = "Grid lines: emphasizing rhythms and notes synchronization"
} % begin verbatim
-
\score {
\new ChoirStaff {
\relative c'' <<
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, rhythms"
doctitle = "Guitar strum rhythms"
} % begin verbatim
-
\include "predefined-guitar-fretboards.ly"
<<
\new ChordNames {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Hairpins with different line styles"
} % begin verbatim
-
\relative c' {
c2\< c\!
\override Hairpin.style = #'dashed-line
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "pitches"
\relative c'' {
\override Accidental.hide-tied-accidental-after-break = ##t
- cis1~ 1~
+ cis1~ cis~
\break
cis
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Hiding the extender line for text dynamics"
} % begin verbatim
-
\relative c'' {
\override DynamicTextSpanner.style = #'none
\crescTextCresc
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, specific-notation, tweaks-and-overrides"
doctitle = "How to change fret diagram position"
} % begin verbatim
-
harmonies = \chordmode
{
a8:13
b4.~^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" } b4. a8\break
% HERE IS THE SECOND METHOD
<<
- { a8 b4.~ 4. a8}
+ { a8 b4.~ b4. a8}
{ s4 s4 s4^\markup { \fret-diagram #"6-x;5-2;4-4;3-2;2-2;1-4;" }
}
>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, expressive-marks, staff-notation, tweaks-and-overrides"
doctitle = "How to print two rehearsal marks above and below the same barline (method 2)"
} % begin verbatim
-
\score {
\relative c'
<<
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "specific-notation, symbols-and-glyphs, text, vocal-music"
doctitle = "How to put ties between syllables in lyrics"
} % begin verbatim
-
\lyrics {
wa~o~a
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "template, vocal-music"
doctitle = "Hymn template"
} % begin verbatim
-
Timeline = {
\time 4/4
\tempo 4=96
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, real-music"
doctitle = "Indicating cross-staff chords with arpeggio bracket"
} % begin verbatim
-
\new PianoStaff <<
\set PianoStaff.connectArpeggios = ##t
\override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Inserting a caesura"
} % begin verbatim
-
\relative c'' {
\override BreathingSign.text = \markup {
\musicglyph #"scripts.caesura.straight"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats"
doctitle = "Isolated percent repeats"
} % begin verbatim
-
makePercent =
#(define-music-function (parser location note) (ly:music?)
"Make a percent repeat the same length as NOTE."
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, tweaks-and-overrides"
doctitle = "Keep change clefs full sized"
} % begin verbatim
-
\relative c' {
\clef "treble"
c1
accordion-discant-symbols.ly
-accordion-registers.ly
+accordion-register-symbols.ly
changing-the-text-for-sustain-markings.ly
clusters.ly
controlling-the-placement-of-chord-fingerings.ly
piano-template-simple.ly
piano-template-with-centered-lyrics.ly
piano-template-with-melody-and-lyrics.ly
+removing-brace-on-first-line-of-piano-score.ly
using-autochange-with-more-than-one-voice.ly
vocal-ensemble-template-with-automatic-piano-reduction.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "connecting-notes, contemporary-notation, expressive-marks, fretted-strings, keyboards, specific-notation"
doctitle = "Laissez vibrer ties"
} % begin verbatim
-
\relative c' {
<c e g>4\laissezVibrer r <c f g>\laissezVibrer r
<c d f g>4\laissezVibrer r <c d f g>4.\laissezVibrer r8
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings, staff-notation"
doctitle = "Letter tablature formatting"
} % begin verbatim
-
music = \relative c {
c4 d e f
g4 a b c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Line arrows"
} % begin verbatim
-
\relative c'' {
\override TextSpanner.bound-padding = #1.0
\override TextSpanner.style = #'line
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, text, vocal-music"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
%% and then run scripts/auxiliar/makelsr.py
%%
doctitle = "Makam example"
} % begin verbatim
-
% Initialize makam settings
\include "makam.ly"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-cool, staff-notation, workaround"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords"
doctitle = "Manually break figured bass extenders for only some numbers"
} % begin verbatim
-
bassfigures = \figuremode {
\set useBassFigureExtenders = ##t
<6 4>4 <6 4\!> <6 4\!> <6 4\!> | <6\! 4\!> <6 4> <6 4\!> <6 4>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "connecting-notes, rhythms, tweaks-and-overrides"
doctitle = "Manually controlling beam positions"
} % begin verbatim
-
\relative c' {
\time 2/4
% from upper staff-line (position 2) to center (position 0)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
doctitle = "Marking notes of spoken parts with a cross on the stem"
} % begin verbatim
-
speakOn = {
\override Stem.stencil =
#(lambda (grob)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
texidoc = "
Text that can spread over pages is entered with the
-@code{\\markuplist} command.
+@code{\\markuplines} command.
"
doctitle = "Markup lines"
} % begin verbatim
+%% updated/modified by P.P.Schneider on Feb. 2014
#(set-default-paper-size "a6")
Il y avait en Westphalie, dans le château de M. le baron de
Thunder-ten-tronckh, un jeune garçon à qui la nature avait donné
les mœurs les plus douces. Sa physionomie annonçait son âme.
- Il avait le jugement assez droit, avec l'esprit le plus simple ;
+ Il avait le jugement assez droit, avec l'esprit le plus
+ \concat { simple \hspace #.3 ; }
c'est, je crois, pour cette raison qu'on le nommait Candide. Les
anciens domestiques de la maison soupçonnaient qu'il était fils
de la sœur de monsieur le baron et d'un bon et honnête
quartiers, et que le reste de son arbre généalogique avait été
perdu par l'injure du temps.
}
+ \vspace #.3
\paragraph {
Monsieur le baron était un des plus puissants seigneurs de la
Westphalie, car son château avait une porte et des fenêtres. Sa
grande salle même était ornée d'une tapisserie. Tous les chiens
- de ses basses-cours composaient une meute dans le besoin ; ses
- palefreniers étaient ses piqueurs; le vicaire du village était
+ de ses basses-cours composaient une meute dans le
+ \concat { besoin \hspace #.3 ; }
+ ses palefreniers étaient ses
+ \concat { piqueurs \hspace #.3 ; }
+ le vicaire du village était
son grand-aumônier. Ils l'appelaient tous monseigneur, et ils
riaient quand il faisait des contes.
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, repeats, staff-notation, workaround"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, contexts-and-engravers, staff-notation, tweaks-and-overrides"
doctitle = "Mensurstriche layout (bar lines between the staves)"
} % begin verbatim
-
global = {
\hide Staff.BarLine
s1 s
\undo \hide Staff.BarLine
\bar "|."
}
+
\new StaffGroup \relative c'' {
<<
\new Staff { << \global { c1 c } >> }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.25"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
texidoc = "
The shorthands are defined in @samp{ly/script-init.ly}, where the
variables @code{dashHat}, @code{dashPlus}, @code{dashDash},
-@code{dashBang}, @code{dashLarger}, @code{dashDot}, and
+@code{dashBar}, @code{dashLarger}, @code{dashDot}, and
@code{dashUnderscore} are assigned default values. The default values
-for the shorthands can be modified. For example, to make the @code{-+}
-(@code{dashPlus}) shorthand create a trill instead of the default +
-(@code{stopped}), assign the value of @code{trill} to the variable
+for the shorthands can be modified. For example, to associate the
+@code{-+} (@code{dashPlus}) shorthand with the trill symbol instead of
+the default + symbol, assign the value @code{trill} to the variable
@code{dashPlus}:
"
doctitle = "Modifying default values for articulation shorthand notation"
} % begin verbatim
-
\relative c'' { c1-+ }
-dashPlus = \trill
+dashPlus = "trill"
\relative c'' { c1-+ }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
doctitle = "Moving dotted notes in polyphony"
} % begin verbatim
-
\new Staff \relative c' <<
- { f2. f4
+ {
+ f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##f
f2. f4
\override Staff.NoteCollision.prefer-dotted-right = ##t
f2. f4
}
\\
- { e4 e e e e e e e e e e e}
+ { e4 e e e e e e e e e e e }
>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Moving slur positions vertically"
} % begin verbatim
-
\relative c' {
\stemDown
e4( a)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, text"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, preparing-parts, staff-notation, tweaks-and-overrides"
doctitle = "Nesting staves"
} % begin verbatim
-
\new StaffGroup
\relative c'' <<
\set StaffGroup.systemStartDelimiterHierarchy
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "keyboards, specific-notation, symbols-and-glyphs, workaround"
-
- texidoc = "
-This snippet has been obsoleted by predefined markup commands, see
-@ruser{Accordion Registers}. It's still useful as a simple
-demonstration of how to combine symbols: the placement of the symbols
-added with @code{\\markup} can be tweaked by changing the
-@code{\\translate-scaled} arguments. @code{\\translate-scaled} is
-used here rather than @code{\\translate} in order to let the
-positioning of the symbol parts adapt to changes of @code{font-size}.
-"
- doctitle = "Accordion-discant symbols"
-}
-
-discant = \markup {
- \musicglyph #"accordion.discant"
-}
-dot = \markup {
- \musicglyph #"accordion.dot"
-}
-
-\layout { ragged-right = ##t }
-
-% 16 voets register
-accBasson = ^\markup {
- \combine
- \discant
- \translate-scaled #'(0 . 0.5) \dot
-}
-
-% een korig 8 en 16 voets register
-accBandon = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \translate-scaled #'(0 . 1.5) \dot
-}
-
-accVCello = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \translate-scaled #'(1 . 1.5) \dot
-}
-
-% 4-8-16 voets register
-accHarmon = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accTrombon = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \combine
- \translate-scaled #'(1 . 1.5) \dot
- \translate-scaled #'(-1 . 1.5) \dot
-}
-
-% eenkorig 4 en 16 voets register
-accOrgan = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accMaster = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 0.5) \dot
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \combine
- \translate-scaled #'(1 . 1.5) \dot
- \combine
- \translate-scaled #'(-1 . 1.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accAccord = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \combine
- \translate-scaled #'(1 . 1.5) \dot
- \combine
- \translate-scaled #'(-1 . 1.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accMusette = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \combine
- \translate-scaled #'(1 . 1.5) \dot
- \translate-scaled #'(-1 . 1.5) \dot
-}
-
-accCeleste = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \translate-scaled #'(-1 . 1.5) \dot
-}
-
-accOboe = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accClarin = ^\markup {
- \combine
- \discant
- \translate-scaled #'(0 . 1.5) \dot
-}
-
-accPiccolo = ^\markup {
- \combine
- \discant
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-accViolin = ^\markup {
- \combine
- \discant
- \combine
- \translate-scaled #'(0 . 1.5) \dot
- \combine
- \translate-scaled #'(1 . 1.5) \dot
- \translate-scaled #'(0 . 2.5) \dot
-}
-
-\relative c'' {
- c4 d\accBasson e f
- c4 d\accBandon e f
- c4 d\accVCello e f
- c4 d\accHarmon e f
- c4 d\accTrombon e f
- \break
- c4 d\accOrgan e f
- c4 d\accMaster e f
- c4 d\accAccord e f
- c4 d\accMusette e f
- c4 d\accCeleste e f
- \break
- c4 d\accOboe e f
- c4 d\accClarin e f
- c4 d\accPiccolo e f
- c4 d\accViolin e f
-}
+++ /dev/null
-\version "2.17.23"
-
-\header {
- lsrtags = "keyboards, specific-notation, symbols-and-glyphs"
-
- texidoc = "Accordion register symbols are available as
-@code{\\markup} as well as as standalone music events (as register
-changes tend to occur between actual music events. Bass registers are
-not overly standardized. The available commands can be found in
-@ruser{Accordion Registers}."
-
- doctitle = "Accordion register symbols"
-}
-
-\layout { ragged-right = ##t }
-
-#(use-modules (scm accreg))
-
-\new PianoStaff
-<<
- \new Staff \relative
- { \clef treble \discant "10" r8 s32 f'[ bes f] s e[ a e] s d[ g d] s16 e32[ a]
- << { r16 <f bes> r <e a> r <d g> } \\ { d r a r bes r } >> | <cis e a>1 }
- \new Staff \relative
- { \clef treble \freeBass "1" r8 d'32 s16. c32 s16. bes32 s16. a32[ cis] s16
- \clef bass \stdBass "Master"
- << { r16 <f, bes d>^"b" r <e a c>^"am" r <d g bes>^"gm" |
- <e a cis>1^"a" } \\
- { d8_"D" c_"C" bes_"B" | a1_"A" }
- >>
- }
->>
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "ancient-notation, chords, contexts-and-engravers"
-
- texidoc = "
-When writing a figured bass, you can place the figures above or below
-the bass notes, by defining the
-@code{BassFigureAlignmentPositioning.direction} property (exclusively
-in a @code{Staff} context). Choices are @code{#UP} (or @code{#1}),
-@code{#CENTER} (or @code{#0}) and @code{#DOWN} (or @code{#-1}).
-
-This property can be changed as many times as you wish. Use
-@code{\\once \\override} if you don't want the override to apply to the
-whole score.
-
-"
- doctitle = "Adding a figured bass above or below the notes"
-}
-
-
-bass = {
- \clef bass
- g4 b, c d
- e d8 c d2
-}
-continuo = \figuremode {
- <_>4 <6>4 <5/>4
- \override Staff.BassFigureAlignmentPositioning.direction = #UP
- %\bassFigureStaffAlignmentUp
- < _+ >4 <6>
- \set Staff.useBassFigureExtenders = ##t
- \override Staff.BassFigureAlignmentPositioning.direction = #DOWN
- %\bassFigureStaffAlignmentDown
- <4>4. <4>8 <_+>4
-}
-\score {
- <<
- \new Staff = bassStaff \bass
- \context Staff = bassStaff \continuo
- >>
-}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "scheme-language"
-
- texidoc = "
-You can add additional elements to notes using @code{map-some-music}. In this
-example, an extra script is attached to a note.
-
-In general, first do a @code{\\displayMusic} of the music you want to
-create, then write a function that will work on the appropriate parts
-of the music for you.
-"
- doctitle = "Adding extra fingering with scheme"
-}
-
-addScript =
-#(define-music-function (parser location script music)
- (ly:event? ly:music?)
- (map-some-music
- (lambda (mus)
- (define (append-script-at! prop)
- (set! (ly:music-property mus prop)
- (append (ly:music-property mus prop)
- (list (ly:music-deep-copy script))))
- mus)
- (case (ly:music-property mus 'name)
- ((EventChord)
- (append-script-at! 'elements))
- ((NoteEvent)
- (append-script-at! 'articulations))
- (else #f)))
- music))
-
-\score {
- {
- \addScript _6 { c'4-3 <c' e' g'> }
- }
-}
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "staff-notation, vocal-music"
-
- texidoc = "
-This shows one approach to simplify adding many orchestral cues to the
-piano reduction in a vocal score. The music function @code{\\cueWhile}
-takes four arguments: the music from which the cue is to be taken, as
-defined by @code{\\addQuote}, the name to be inserted before the cue
-notes, then either @code{#UP} or @code{#DOWN} to specify either
-@code{\\voiceOne} with the name above the staff or @code{\\voiceTwo}
-with the name below the staff, and finally the piano music in parallel
-with which the cue notes are to appear. The name of the cued
-instrument is positioned to the left of the cued notes. Many passages
-can be cued, but they cannot overlap each other in time.
-
-"
- doctitle = "Adding orchestral cues to a vocal score"
-}
-
-cueWhile =
-#(define-music-function
- (parser location instrument name dir music)
- (string? string? ly:dir? ly:music?)
- #{
- \cueDuring $instrument #dir {
- \once \override TextScript.self-alignment-X = #RIGHT
- \once \override TextScript.direction = $dir
- <>-\markup { \tiny #name }
- $music
- }
- #})
-
-flute = \relative c'' {
- \transposition c'
- s4 s4 e g
-}
-\addQuote "flute" { \flute }
-
-clarinet = \relative c' {
- \transposition bes
- fis4 d d c
-}
-\addQuote "clarinet" { \clarinet }
-
-singer = \relative c'' { c4. g8 g4 bes4 }
-words = \lyricmode { here's the lyr -- ics }
-
-pianoRH = \relative c'' {
- \transposition c'
- \cueWhile "clarinet" "Clar." #DOWN { c4. g8 }
- \cueWhile "flute" "Flute" #UP { g4 bes4 }
-}
-pianoLH = \relative c { c4 <c' e> e, <g c> }
-
-\score {
- <<
- \new Staff {
- \new Voice = "singer" {
- \singer
- }
- }
- \new Lyrics {
- \lyricsto "singer"
- \words
- }
- \new PianoStaff <<
- \new Staff {
- \new Voice {
- \pianoRH
- }
- }
- \new Staff {
- \clef "bass"
- \pianoLH
- }
- >>
- >>
-}
+++ /dev/null
-\version "2.17.30"
-
-\header {
- lsrtags = "expressive-marks, staff-notation, tweaks-and-overrides"
-
- texidoc = "
-Skipped beats in very long glissandi are sometimes indicated by
-timing marks, often consisting of stems without noteheads. Such
-stems can also be used to carry intermediate expression markings.
-
-If the stems do not align well with the glissando, they may need to
-be repositioned slightly.
-"
-
- doctitle = "Adding timing marks to long glissandi"
-}
-
-glissandoSkipOn = {
- \override NoteColumn.glissando-skip = ##t
- \hide NoteHead
- \override NoteHead.no-ledgers = ##t
-}
-
-glissandoSkipOff = {
- \revert NoteColumn.glissando-skip
- \undo \hide NoteHead
- \revert NoteHead.no-ledgers
-}
-
-\relative c'' {
- r8 f8\glissando
- \glissandoSkipOn
- f4 g a a8\noBeam
- \glissandoSkipOff
- a8
-
- r8 f8\glissando
- \glissandoSkipOn
- g4 a8
- \glissandoSkipOff
- a8 |
-
- r4 f\glissando \<
- \glissandoSkipOn
- a4\f \>
- \glissandoSkipOff
- b8\! r |
-}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "editorial-annotations, staff-notation, tweaks-and-overrides"
- texidoc = "Two alternative methods for bar numbering can be set,
- especially for when using repeated music."
- doctitle = "Alternative bar numbering"
-}
-
-\relative c'{
- \set Score.alternativeNumberingStyle = #'numbers
- \repeat volta 3 { c4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1 \break
- \set Score.alternativeNumberingStyle = #'numbers-with-letters
- \repeat volta 3 { c,4 d e f | }
- \alternative {
- { c4 d e f | c2 d \break }
- { f4 g a b | f4 g a b | f2 a | \break }
- { c4 d e f | c2 d }
- }
- c1
-}
+++ /dev/null
-%% This file is in the public domain.
-\version "2.17.6"
-
-\header {
- lsrtags = "ancient-notation, symbols-and-glyphs"
-
- texidoc = "
-Shown here are many (all?) of the symbols that are included in
-LilyPond's support for ancient notation.
-"
- doctitle = "Ancient fonts"
-}
-
-upperStaff = \new VaticanaStaff = "upperStaff" <<
- \context VaticanaVoice <<
- \transpose c c {
-
- \override NoteHead.style = #'vaticana.punctum
- \key es \major
- \clef "vaticana-fa2"
- c1 des e f ges
-
- \override NoteHead.style = #'vaticana.inclinatum
- a! b ces'
- \bar "|"
- % \break % 1 (8*1)
-
- \override NoteHead.style = #'vaticana.quilisma
- b! des'! ges! fes!
- \breathe
- \clef "vaticana-fa1"
- \override NoteHead.style = #'vaticana.plica
- es d
- \override NoteHead.style = #'vaticana.reverse.plica
- c d
- \bar "|"
- % \break %2 (8*1)
-
- \override NoteHead.style = #'vaticana.punctum.cavum
- es f
- \override NoteHead.style = #'vaticana.lpes
- g as
- \override NoteHead.style = #'vaticana.upes
- bes as
- \override NoteHead.style = #'vaticana.vupes
- g f
- \override NoteHead.style = #'vaticana.linea.punctum
- \once \override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"
- % \break % 3 (8*1)
-
- es d
- \override NoteHead.style = #'vaticana.epiphonus
- c d
- \override NoteHead.style = #'vaticana.cephalicus
- es f
-
- \override Staff.KeySignature.glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Accidental.glyph-name-alist = #alteration-medicaea-glyph-name-alist
- \override Staff.Custos.style = #'medicaea
- \override NoteHead.style = #'medicaea.punctum
- \clef "medicaea-fa2"
- ces des
- \bar "|"
- % \break % 4 (8*1)
-
- e! f! ges
- \clef "medicaea-do2"
- \override NoteHead.style = #'medicaea.inclinatum
- a! b! ces'
- \override NoteHead.style = #'medicaea.virga
- b! a!
- \bar "|"
- % \break % 5 (8*1)
-
- ges fes
- \clef "medicaea-fa1"
- \override NoteHead.style = #'medicaea.rvirga
- e des ces
-
- \override Staff.KeySignature.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Accidental.glyph-name-alist = #alteration-hufnagel-glyph-name-alist
- \override Staff.Custos.style = #'hufnagel
- \override NoteHead.style = #'hufnagel.punctum
- \clef "hufnagel-fa2"
- ces des es
- \bar "|"
- % \break % 6 (8*1)
-
- fes ges
- \clef "hufnagel-do2"
- \override NoteHead.style = #'hufnagel.lpes
- as! bes! ces'
- \override NoteHead.style = #'hufnagel.virga
- bes! as!
- \bar "|"
- % \break % 7 (8*1)
-
- ges! fes!
- \clef "hufnagel-do-fa"
- \override NoteHead.style = #'hufnagel.punctum
- es! des ces des! es! fes!
- \bar "||"
- % \break % 8 (8*1)
-
- s32*1
- % \break % 12 (32*1)
- }
- >>
->>
-
-lowerStaff = \new MensuralStaff = "lowerStaff" <<
- \context MensuralVoice <<
- \transpose c c {
-
- \key a \major
- cis'1 d'\breve gis'\breve e'\breve \[ e'\longa fis'\longa \]
- \set Staff.forceClef = ##t
- \clef "neomensural-c2"
- cis1
- \bar "|"
- % \break % 2 (16*1)
-
- \[ g\breve dis''\longa \]
- b\breve \[ a\longa d\longa \]
- \clef "petrucci-c2"
- % \break % 4 (16*1)
-
- fis1 ces1
- \clef "petrucci-c2"
- r\longa
- \set Staff.forceClef = ##t
- \clef "mensural-c2"
- r\breve
- \bar "|"
- % \break % 5 (8*1)
-
- r2
- \clef "mensural-g"
- r4 r8 r16 r16
- \override NoteHead.style = #'mensural
- \override Rest.style = #'mensural
- \clef "petrucci-f"
- c8 b, c16 b, c32 b, c64 b, c64 b,
- d8 e d16 e d32 e d64 e d64 e
- r\longa
- \set Staff.forceClef = ##t
- \clef "petrucci-f"
- r\breve
- \bar "|"
- % \break % 6 (8*1)
-
- r\breve
- \clef "mensural-f"
- r2 r4 r8 r16 r16
-
- \set Staff.forceClef = ##t
- \clef "mensural-f"
- e\breve f g a1
- \clef "mensural-g"
- % \break % 7 (8*1)
-
- \[ bes'!\longa a'!\longa c''!\longa \]
- e'1 d' c' d' \bar "|"
- \bar "|"
- % \break % 9 (16*1)
-
- bes'!\longa fis'!1 as'!1 ges'!\longa % lig
- \set Staff.forceClef = ##t
- \clef "mensural-g"
- e'2 d' c' \bar "|"
- % \break % 11 (16*1)
-
- \set Staff.forceClef = ##t
- \clef "petrucci-g"
- c'2 d' e' f'
- \clef "petrucci-g"
- g' as'! bes'! cis''!
- bes'! as'! gis'! fis'!
- \set Staff.forceClef = ##t
- \clef "mensural-g"
- es'! des'! cis'!1 \bar "||"
- % \break % 12 (8*1)
- }
- >>
->>
-
-\paper {
- line-thickness = #(/ staff-space 5.0)
-}
-
-\score {
- <<
- \upperStaff
- \lowerStaff
- >>
- \layout {
- indent = 0.0
- line-width = 17.25\cm
- \context {
- \Score
- timing = ##f
- }
- \context {
- \MensuralVoice
- \override NoteHead.style = #'neomensural
- \override Rest.style = #'neomensural
- \override Flag.style = #'mensural
- \override Stem.thickness = #1.0
- }
- \context {
- \MensuralStaff
- \revert BarLine.transparent
- \override KeySignature.glyph-name-alist = #alteration-mensural-glyph-name-alist
- clefGlyph = #"clefs.petrucci.c2"
- }
- \context {
- \VaticanaStaff
- \revert BarLine.transparent
- \override StaffSymbol.thickness = #2.0
- \override KeySignature.glyph-name-alist = #alteration-vaticana-glyph-name-alist
- \override Custos.neutral-position = #4
- }
- }
-}
-
+++ /dev/null
-\version "2.17.30"
-
-\header {
- lsrtags = "vocal-music, ancient-notation, template"
-
- texidoc = "
-This example demonstrates how to do modern transcription of Gregorian
-music. Gregorian music has no measure, no stems; it uses only half and
-quarter note heads, and special marks, indicating rests of different
-length.
-
-"
- doctitle = "Ancient notation template -- modern transcription of gregorian music"
-}
-
-\include "gregorian.ly"
-
-chant = \relative c' {
- \set Score.timing = ##f
- f4 a2 \divisioMinima
- g4 b a2 f2 \divisioMaior
- g4( f) f( g) a2 \finalis
-}
-
-verba = \lyricmode {
- Lo -- rem ip -- sum do -- lor sit a -- met
-}
-
-\score {
- \new Staff <<
- \new Voice = "melody" \chant
- \new Lyrics = "one" \lyricsto melody \verba
- >>
- \layout {
- \context {
- \Staff
- \remove "Time_signature_engraver"
- \remove "Bar_engraver"
- \hide Stem
- }
- \context {
- \Voice
- \override Stem.length = #0
- }
- \context {
- \Score
- barAlways = ##t
- }
- }
-}
-
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "chords, fretted-strings"
-
- texidoc = "
-Here is how to print bar chords, or half-bar chords (just uncomment the
-appropriate line for to select either one).
-
-The syntax is @code{\\bbarre #\"@var{fret number}\" @{ notes @} }.
-"
- doctitle = "Bar chords notation for Guitar (with Text Spanner)"
-}
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% %%%%%%% Cut here ----- Start 'bbarred.ly'
-
-%% C with slash -------------------------------
-cWithSlash = \markup {
- \combine \roman C \translate #'(0.6 . -0.4) \draw-line #'(0 . 2.0)
-}
-%% Span -----------------------------------
-%% Syntax: \bbarre #"text" { notes } - text = any number of box
-bbarre =
-#(define-music-function (barre location str music) (string? ly:music?)
- (let ((elts (extract-named-music music '(NoteEvent EventChord))))
- (if (pair? elts)
- (let ((first-element (first elts))
- (last-element (last elts)))
- (set! (ly:music-property first-element 'articulations)
- (cons (make-music 'TextSpanEvent 'span-direction -1)
- (ly:music-property first-element 'articulations)))
- (set! (ly:music-property last-element 'articulations)
- (cons (make-music 'TextSpanEvent 'span-direction 1)
- (ly:music-property last-element 'articulations))))))
- #{
- \once \override TextSpanner.font-size = #-2
- \once \override TextSpanner.font-shape = #'upright
- \once \override TextSpanner.staff-padding = #3
- \once \override TextSpanner.style = #'line
- \once \override TextSpanner.to-barline = ##f
- \once \override TextSpanner.bound-details =
- #`((left
- (text . ,#{ \markup { \draw-line #'( 0 . -.5) } #})
- (Y . 0)
- (padding . 0.25)
- (attach-dir . -2))
- (right
- (text . ,#{ \markup { \cWithSlash #str } #})
- (Y . 0)
- (padding . 0.25)
- (attach-dir . 2)))
-%% uncomment this line for make full barred
- % \once \override TextSpanner.bound-details.left.text = \markup { "B" #str }
- $music
- #})
-
-%% %%%%%%% Cut here ----- End 'bbarred.ly'
-%% Copy and change the last line for full barred. Rename in 'fbarred.ly'
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%% Syntaxe: \bbarre #"text" { notes } - text = any number of box
-\relative c'{ \clef "G_8" \stemUp \bbarre #"III" { <f a'>16[ c' d c d8] } }
+++ /dev/null
-\version "2.19.2"
-
-\header {
- lsrtags = "contemporary-notation, expressive-marks, symbols-and-glyphs"
-
- texidoc = "
-In order to make parts of a crescendo hairpin invisible, the following
-method is used: A white rectangle is drawn on top of the respective
-part of the crescendo hairpin, making it invisible.
-
-The markup command @code{with-dimensions} tells LilyPond to consider only
-the bottom edge of the rectangle when spacing it against the hairpin.
-The property @code{staff-padding} prevents the rectangle from fitting
-between the hairpin and staff.
-
-Make sure to put the hairpin in a lower layer than the text markup to
-draw the rectangle over the hairpin.
-
-"
- doctitle = "Broken Crescendo Hairpin"
-}
-
-\relative c' {
- <<
- {
- \dynamicUp
- r2 r16 c'8.\pp r4
- }
- \\
- {
- \override DynamicLineSpanner.layer = #0
- des,2\mf\< ~
- \override TextScript.layer = #2
- \once\override TextScript.staff-padding = #6
- \once\override TextScript.vertical-skylines = #'()
- des16_\markup \with-dimensions #'(2 . 7) #'(0 . 0)
- \with-color #white
- \filled-box #'(2 . 7) #'(0 . 2) #0
- r8. des4 ~ 16->\sff
- }
- >>
-}
+++ /dev/null
-\version "2.17.7"
-
-\header {
- lsrtags = "contexts-and-engravers, repeats, staff-notation"
-
- texidoc = "
-Scores of large ensemble works often have bar numbers placed beneath the
-system, centered horizontally on the measure's extent. This snippet shows
-how the @code{Measure_counter_engraver} may be used to simulate this
-notational practice. Here, the engraver has been added to a @code{Dynamics}
-context.
-
-"
-
- doctitle = "Centered measure numbers"
-}
-
-\layout {
- \context {
- \Dynamics
- \consists #Measure_counter_engraver
- \override MeasureCounter.direction = #DOWN
- \override MeasureCounter.font-encoding = #'latin1
- \override MeasureCounter.font-shape = #'italic
- % to control the distance of the Dynamics context from the staff:
- \override VerticalAxisGroup.nonstaff-relatedstaff-spacing.padding = #2
- }
- \context {
- \Score
- \remove "Bar_number_engraver"
- }
-}
-
-pattern = \repeat unfold 7 { c'4 d' e' f' }
-
-\new StaffGroup <<
- \new Staff {
- \pattern
- }
- \new Staff {
- \pattern
- }
- \new Dynamics {
- \startMeasureCount
- s1*7
- \stopMeasureCount
- }
->>
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "text, tweaks-and-overrides, contexts-and-engravers"
- texidoc = "
-For technical reasons, text scripts attached to note heads cannot
-easily be centered on a note head's width, unlike articulations.
-
-Instead of using trial-and-error offset tweaks, this snippet uses a
-Scheme engraver to reset the horizontal parent of each markup to a
-@code{NoteColumn}. This also allows text to follow note heads which have
-been shifted via @code{force-hshift}.
-"
- doctitle = "Centering markup on note heads automatically"
-}
-
-#(define (Text_align_engraver ctx)
- (let ((scripts '())
- (note-column #f))
- (make-engraver
- (acknowledgers
- ((note-column-interface trans grob source)
- ;; cache NoteColumn in this Voice context
- (set! note-column grob))
- ((text-script-interface trans grob source)
- ;; whenever a TextScript is acknowledged,
- ;; add it to `scripts' list
- (set! scripts (cons grob scripts))))
- ((stop-translation-timestep trans)
- ;; if any TextScript grobs exist,
- ;; set NoteColumn as X-parent
- (for-each (lambda (script)
- (set! (ly:grob-parent script X) note-column))
- scripts)
- ;; clear scripts ready for next timestep
- (set! scripts '())))))
-
-\layout {
- \context {
- \Voice
- \consists #Text_align_engraver
- \override TextScript.X-offset =
- #ly:self-alignment-interface::aligned-on-x-parent
- \override TextScript.self-alignment-X = #CENTER
- }
-}
-
-\new Staff <<
- \relative c'' {
- \override NoteColumn.force-hshift = #3
- c1-\markup { \arrow-head #Y #DOWN ##t }
- }
- \\
- \relative c' {
- a4 a-\markup { \huge ^ } a a
- }
->>
+++ /dev/null
-\version "2.17.30"
-
-\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 }
- \omit TupletNumber
- \tuplet 3/2 { c8 c c }
-}
+++ /dev/null
-\version "2.17.11"
-
-\header {
- lsrtags = "workaround, contexts-and-engravers, contemporary-notation, rhythms"
-
- doctitle = "Changing time signatures inside a polymetric section using \\scaleDurations"
-}
-
-
-\layout {
- \context {
- \Score
- \remove "Timing_translator"
- \remove "Default_bar_line_engraver"
- }
- \context {
- \Staff
- \consists "Timing_translator"
- \consists "Default_bar_line_engraver"
- }
-}
-
-<<
- \new Staff {
- \scaleDurations 8/5 {
- \time 6/8
- \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)
- b4 b
- }
- }
- \new Staff {
- \clef bass
- \time 2/4
- c2 d e f
- }
->>
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers, specific-notation"
-
- texidoc = "
-This form of notation is used for the chant of the Psalms, where verses
-aren't always the same length.
-
-"
- doctitle = "Chant or psalms notation"
-}
-
-stemOff = \hide Staff.Stem
-stemOn = \undo \stemOff
-
-\score {
- \new Staff \with { \remove "Time_signature_engraver" }
- {
- \key g \minor
- \cadenzaOn
- \stemOff a'\breve bes'4 g'4
- \stemOn a'2 \bar "||"
- \stemOff a'\breve g'4 a'4
- \stemOn f'2 \bar "||"
- \stemOff a'\breve^\markup { \italic flexe }
- \stemOn g'2 \bar "||"
- }
-}
-
+++ /dev/null
-\version "2.17.6"
-
-\header {
- lsrtags = "headword"
- texidoc = ""
- doctitle = "headword"
-}
-
-
-theChords = \chordmode {
- \time 2/2
- f1 | c2 f2 | f1 | c2 f2| %\break
- f2 bes2 | f1 | c2:7 f | c1 | \break
-}
-
-verseOne = \lyricmode {
- \set stanza = #"1."
- Fair is the sun - shine,
- Fair - er the moon - light
- And all the stars __ _ in heav'n a -- bove;
-}
-
-verseTwo = \lyricmode {
- \set stanza = #"2."
- Fair are the mead - ows,
- Fair - er the wood - land,
- Robed in the flow -- ers of bloom -- ing spring;
-}
-
-Soprano = {
- \time 2/2
- \key f \major
- \stemUp
- f'2 f'4 f' | g'4 e' f'2 | a'4. a'8 a'4 a' | bes'4 g' a'2 |
- c''2 f''4 d'' | c''2 bes'4 a' | bes'2 a' | g'1 |
-}
-
-Alto = {
- \key f \major
- c'2 c'4 c' | d'4 c' c'2 | f'4. f'8 f'4 fis' | g'4 e' f'2 |
- f'2 f'4 f' | f'2 g'4 f' | e'2 f' | e'1 |
-}
-
-Tenor = {
- \key f \major
- \stemDown
- a2 a4 a | bes4 g a2 | c'4. c'8 d'4 d' | d'4 c' c'2 |
- a2 d'4 bes | a2 c'4 c' | c'2 c' | c'1 |
-}
-
-Bass = {
- \key f \major
- f2 f4 f | bes,4 c f2 | f4. e8 d4 c | bes,4 c f2 |
- f2 bes,4 d | f2 e4 f | g2 f | c1 |
-}
-
-
-\score {
- <<
- \new ChordNames { \theChords }
- \context Staff = upper {
- \context Voice = sop {
- <<
- \Soprano
- \Alto
- >>
- }
- }
- \context Lyrics = "LyrOne" \lyricsto "sop" { \verseOne }
- \context Lyrics = "LyrTwo" \lyricsto "sop" { \verseTwo }
- \context Staff = lower {
- \new Voice {
- \clef bass
- \accidentalStyle modern-cautionary
- <<
- \Tenor
- \Bass
- >>
- }
- }
- >>
-
- \layout {
- indent = 0
- \context {
- \Score
- \remove "Bar_number_engraver"
- }
- \context {
- \Voice
- \override StanzaNumber.padding = #1.8
- }
- }
-}
-\paper { }
+++ /dev/null
-\version "2.17.15"
-
-\header {
- lsrtags = "rhythms"
-
- texidoc = "
-Odd 20th century time signatures (such as \\\"5/8\\\") can often be
-played as compound time signatures (e.g. \\\"3/8 + 2/8\\\"), which
-combine two or more inequal metrics. LilyPond can make such music quite
-easy to read and play, by explicitly printing the compound time
-signatures and adapting the automatic beaming behavior.
-
-"
- doctitle = "Compound time signatures"
-}
-
-\relative c' {
- \compoundMeter #'((2 8) (3 8))
- c8 d e fis gis
- c8 fis, gis e d
- c8 d e4 gis8
-}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "rhythms"
- texidoc = "
-Beat grouping within a measure is controlled by the context property
-@code{beatStructure}. Values of @code{beatStructure} are
-established for many time signatures in
-@file{scm/time-signature-settings.scm}. Values of @code{beatStructure}
-can be changed or set with @code{\set}.
-Alternatively, @code{\time} can be used to both
-set the time signature and establish the beat structure.
-For this, you specify the internal grouping of beats in a measure
-as a list of numbers (in Scheme syntax) before the time signature.
-
-@code{\time} applies to the @code{Timing} context, so it will not
-reset values of @code{beatStructure} or @code{baseMoment} that are set
-in other lower-level contexts, such as @code{Voice}.
-
-If the @code{Measure_grouping_engraver} is included
-in one of the display contexts, measure grouping signs will be
-created. Such signs ease reading rhythmically complex modern music.
-In the example, the 9/8 measure is grouped in two different
-patterns using the two different methods, while the 5/8 measure
-is grouped according to the default setting in
-@file{scm/time-signature-settings.scm}:
-"
- doctitle = "Conducting signs, measure grouping signs"
-}
-
-
-\score {
- \new Voice \relative c'' {
- \time 9/8
- g8 g d d g g a( bes g) |
- \set Timing.beatStructure = #'(2 2 2 3)
- g8 g d d g g a( bes g) |
- \time #'(4 5) 9/8
- g8 g d d g g a( bes g) |
- \time 5/8
- a4. g4 |
- }
- \layout {
- \context {
- \Staff
- \consists "Measure_grouping_engraver"
- }
- }
-}
+++ /dev/null
-\version "2.17.97"
-
-\header {
- lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
-
- texidoc = "
-Creating a delayed turn, where the lower note of the turn uses the
-accidental, requires several overrides. The
-@code{outside-staff-priority} property must be set to @code{#f}, as
-otherwise this would take precedence over the @code{avoid-slur
-property}. Changing the fractions @code{2/3} and @code{1/3} adjusts the
-horizontal position.
-"
- doctitle = "Creating a delayed turn"
-}
-
-
-\relative c'' {
- c2*2/3 ( s2*1/3\turn d4) r
- <<
- { c4.( d8) }
- { s4 s\turn }
- >>
- \transpose c d \relative c'' <<
- { c4.( d8) }
- {
- s4
- \once \set suggestAccidentals = ##t
- \once \override AccidentalSuggestion #'outside-staff-priority = ##f
- \once \override AccidentalSuggestion #'avoid-slur = #'inside
- \once \override AccidentalSuggestion #'font-size = #-3
- \once \override AccidentalSuggestion #'script-priority = #-1
- \single \hideNotes
- b8-\turn \noBeam
- s8
- }
- >>
-}
-\version "2.17.11"
+\version "2.19.0"
\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"
- #{ \tuplet 3/2 { $p 8 $p $p } $p 4 $p $p 8 $p $p 4 #})
+ #{ \tuplet 3/2 { $p 8 8 8 } 4 4 8 8 4 #})
\new Staff {
\time 5/4
+++ /dev/null
-\version "2.17.15"
-
-\header {
- lsrtags = "editorial-annotations, expressive-marks, scheme-language, staff-notation, tweaks-and-overrides"
-
- texidoc = "
-Creating fingerings larger than 5 is possible.
-"
- doctitle = "Creating double-digit fingerings"
-}
-
-\relative c' {
- c1-10
- c1-50
- c1-36
- c1-29
-}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "expressive-marks, text, workaround"
-
- texidoc = "
-Although the easiest way to add parentheses to a dynamic mark is to use
-a @code{\\markup} block, this method has a downside: the created
-objects will behave like text markups, and not like dynamics.
-
-However, it is possible to create a similar object using the equivalent
-Scheme code (as described in the Notation Reference), combined with the
-@code{make-dynamic-script} function. This way, the markup will be
-regarded as a dynamic, and therefore will remain compatible with
-commands such as @code{\\dynamicUp} or @code{\\dynamicDown}.
-
-
-
-"
- doctitle = "Creating \"real\" parenthesized dynamics"
-}
-
-paren =
-#(define-event-function (parser location dyn) (ly:event?)
- (make-dynamic-script
- #{ \markup \concat {
- \normal-text \italic \fontsize #2 (
- \pad-x #0.2 #(ly:music-property dyn 'text)
- \normal-text \italic \fontsize #2 )
- }
- #}))
-
-\relative c'' {
- c4\paren\f c c \dynamicUp c\paren\p
-}
+++ /dev/null
-\version "2.16.0"
-
-\header {
- lsrtags = "staff-notation, tweaks-and-overrides, contexts-and-engravers"
- texidoc = "
-This snippet shows the use of the @code{Span_stem_engraver}
-and @code{\crossStaff} to connect stems across staves automatically.
-The stem length need not be specified, as the variable distance
-between noteheads and staves is calculated automatically.
-"
- doctitle = "Cross staff stems"
-}
-
-\layout {
- \context {
- \PianoStaff
- \consists #Span_stem_engraver
- }
-}
-
-{
- \new PianoStaff <<
- \new Staff {
- <b d'>4 r d'16\> e'8. g8 r\!
- e'8 f' g'4 e'2
- }
- \new Staff {
- \clef bass
- \voiceOne
- \autoBeamOff
- \crossStaff { <e g>4 e, g16 a8. c8} d
- \autoBeamOn
- g8 f g4 c2
- }
- >>
-}
--- /dev/null
+\version "2.18.0"
+
+\header {
+ lsrtags = "specific-notation, workaround"
+
+ texidoc = "
+
+Often it is easier to manage line and page-breaking information by
+keeping it separate from the music by introducing an extra voice
+containing only skips along with the @code{\break},
+@code{pageBreak} and other layout information.
+
+This pattern becomes especially helpful when overriding
+@code{line-break-system-details} and the other useful but long
+properties of @code{NonMusicalPaperColumnGrob}.
+"
+ doctitle = "Using an extra voice for breaks"
+}
+
+music = \relative c'' { c4 c c c }
+
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+ \score {
+ \new Staff <<
+ \new Voice {
+ s1 * 2 \break
+ s1 * 3 \break
+ s1 * 6 \break
+ s1 * 5 \break
+ }
+ \new Voice {
+ \repeat unfold 2 { \music }
+ \repeat unfold 3 { \music }
+ \repeat unfold 6 { \music }
+ \repeat unfold 5 { \music }
+ }
+ >>
+ }
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
#(tuplet-number::append-note-wrapper
(tuplet-number::non-default-tuplet-fraction-text 12 7) "8")
\tuplet 3/2 { c4. c4. c4. c4. }
-
\once \override TupletNumber.text =
#(tuplet-number::append-note-wrapper
tuplet-number::calc-denominator-text "4")
#(tuplet-number::append-note-wrapper
tuplet-number::calc-fraction-text "4")
\tuplet 3/2 { c8 c8 c8 c8 c8 c8 }
-
\once \override TupletNumber.text =
#(tuplet-number::fraction-with-notes "4." "8")
\tuplet 3/2 { c4. c4. c4. c4. }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "vocal-music"
texidoc = "
-The vertical spacing engine changed for version 2.14. This can cause
-lyrics to be spaced differently. It is possible to set properties for
-@code{Lyric} and @code{Staff} contexts to get the spacing engine to
-behave as it did in version 2.12.
+The vertical spacing engine changed since version 2.14. This can cause
+lyrics to be spaced differently.
+
+It is possible to set properties for @code{Lyric} and @code{Staff}
+contexts to get the spacing engine to behave as it did in version 2.12.
+
"
doctitle = "Obtaining 2.12 lyrics spacing in newer versions"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
} % begin verbatim
openStringHarmonics = {
+ \textSpannerDown
+ \override TextSpanner.staff-padding = #3
+ \override TextSpanner.dash-fraction = #0.3
+ \override TextSpanner.dash-period = #1
+
%first harmonic
- \harmonicByFret #12 e,2\6_\markup{"1st harm."}
- \harmonicByRatio #1/2 e,\6
+ \override TextSpanner.bound-details.left.text = \markup\small "1st harm. "
+ \harmonicByFret #12 e,2\6\startTextSpan
+ \harmonicByRatio #1/2 e,\6\stopTextSpan
+
%second harmonic
- \harmonicByFret #7 e,\6_\markup{"2nd harm. - - - -"}
+ \override TextSpanner.bound-details.left.text = \markup\small "2nd harm. "
+ \harmonicByFret #7 e,\6\startTextSpan
\harmonicByRatio #1/3 e,\6
\harmonicByFret #19 e,\6
- \harmonicByRatio #2/3 e,\6
+ \harmonicByRatio #2/3 e,\6\stopTextSpan
%\harmonicByFret #19 < e,\6 a,\5 d\4 >
%\harmonicByRatio #2/3 < e,\6 a,\5 d\4 >
+
%third harmonic
- \harmonicByFret #5 e,\6_\markup{"3rd harm. - - - -"}
+ \override TextSpanner.bound-details.left.text = \markup\small "3rd harm. "
+ \harmonicByFret #5 e,\6\startTextSpan
\harmonicByRatio #1/4 e,\6
\harmonicByFret #24 e,\6
- \harmonicByRatio #3/4 e,\6
+ \harmonicByRatio #3/4 e,\6\stopTextSpan
\break
+
%fourth harmonic
- \harmonicByFret #4 e,\6_\markup{"4th harm. - - - - - - - - - - - - -"}
+ \override TextSpanner.bound-details.left.text = \markup\small "4th harm. "
+ \harmonicByFret #4 e,\6\startTextSpan
\harmonicByRatio #1/5 e,\6
\harmonicByFret #9 e,\6
\harmonicByRatio #2/5 e,\6
\harmonicByFret #16 e,\6
- \harmonicByRatio #3/5 e,\6
+ \harmonicByRatio #3/5 e,\6\stopTextSpan
+
%fifth harmonic
- \harmonicByFret #3 e,\6_\markup{"5th harm."}
- \harmonicByRatio #1/6 e,\6
+ \override TextSpanner.bound-details.left.text = \markup\small "5th harm. "
+ \harmonicByFret #3 e,\6\startTextSpan
+ \harmonicByRatio #1/6 e,\6\stopTextSpan
\break
+
%sixth harmonic
- \harmonicByFret #2.7 e,\6_\markup{"6th harm."}
- \harmonicByRatio #1/7 e,\6
+ \override TextSpanner.bound-details.left.text = \markup\small "6th harm. "
+ \harmonicByFret #2.7 e,\6\startTextSpan
+ \harmonicByRatio #1/7 e,\6\stopTextSpan
+
%seventh harmonic
- \harmonicByFret #2.3 e,\6_\markup{"7th harm."}
- \harmonicByRatio #1/8 e,\6
+ \override TextSpanner.bound-details.left.text = \markup\small "7th harm. "
+ \harmonicByFret #2.3 e,\6\startTextSpan
+ \harmonicByRatio #1/8 e,\6\stopTextSpan
+
%eighth harmonic
- \harmonicByFret #2 e,\6_\markup{"8th harm."}
- \harmonicByRatio #1/9 e,\6
+ \override TextSpanner.bound-details.left.text = \markup\small "8th harm. "
+ \harmonicByFret #2 e,\6\startTextSpan
+ \harmonicByRatio #1/9 e,\6\stopTextSpan
}
\score {
<<
- \new Staff {
+ \new Staff
+ \with { \omit StringNumber } {
\new Voice {
\clef "treble_8"
\openStringHarmonics
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, staff-notation, template, vocal-music"
doctitle = "Orchestra choir and piano template"
} % begin verbatim
-
#(set-global-staff-size 17)
\paper {
indent = 3.0\cm % space for instrumentName
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, text"
doctitle = "Ottava text"
} % begin verbatim
-
{
\ottava #1
\set Staff.ottavation = #"8"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, scheme-language, text, titles"
doctitle = "Outputting the version number"
} % begin verbatim
-
\score {
\new Lyrics {
\override Score.RehearsalMark.self-alignment-X = #LEFT
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.25"
+\version "2.18.0"
\header {
lsrtags = "scheme-language, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "spacing"
doctitle = "Page label"
} % begin verbatim
-
#(set-default-paper-size "a6")
#(define-markup-command (toc-line layout props label text)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Partcombine and autoBeamOff"
} % begin verbatim
-
{
%\set Staff.autoBeaming = ##f % turns off all autobeaming
\partcombine
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats, tweaks-and-overrides"
doctitle = "Percent repeat count visibility"
} % begin verbatim
-
\relative c'' {
\set countPercentRepeats = ##t
\set repeatCountVisibility = #(every-nth-repeat-count-visible 5)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats"
doctitle = "Percent repeat counter"
} % begin verbatim
-
\relative c'' {
\set countPercentRepeats = ##t
\repeat percent 4 { c1 }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "percussion"
doctitle = "Percussion beaters"
} % begin verbatim
-
stick = \markup {
\with-dimensions #'(0 . 5) #'(0 . 5)
\postscript #"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, version-specific"
doctitle = "Permitting line breaks within beamed tuplets"
} % begin verbatim
-
\layout {
\context {
\Voice
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, really-simple, template"
doctitle = "Piano template (simple)"
} % begin verbatim
-
upper = \relative c'' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, really-simple, template, text"
doctitle = "Piano template with centered lyrics"
} % begin verbatim
-
upper = \relative c'' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, really-simple, template, vocal-music"
doctitle = "Piano template with melody and lyrics"
} % begin verbatim
-
melody = \relative c'' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Placement of right-hand fingerings"
} % begin verbatim
-
#(define RH rightHandFinger)
\relative c {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Polyphony in tablature"
} % begin verbatim
-
upper = \relative c' {
\time 12/8
\key e \minor
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Positioning arpeggios"
} % begin verbatim
-
\relative c' {
<c e g b>1\arpeggio
\once \override Arpeggio.positions = #'(-5 . 0)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations"
doctitle = "Positioning fingering indications precisely"
} % begin verbatim
-
\relative c' {
\set fingeringOrientations = #'(left)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak extra-offset #'(0 . 0.7)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(0 . 0.2)-2 a'-5>4
\set fingeringOrientations = #'(down)
<c-1 d-2 a'-5>4
- <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
+ <c-\tweak extra-offset #'(0 . -1.1)-1 d-\tweak extra-offset #'(-1.2 . -1.8)-2 a'-5>4
\set fingeringOrientations = #'(down right up)
- <c-1 d-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(-0.3 . 0)-2 a'-5>4
<c-1 d-\tweak extra-offset #'(-1 . 1.2)-2 a'-5>4
\set fingeringOrientations = #'(up)
- <c-1 d-2 a'-5>4
- <c-1 d-\tweak extra-offset #'(-1.2 . 0)-2 a'-5>4
+ <c-1 d-\tweak extra-offset #'(0 . 1.1)-2 a'-\tweak extra-offset #'(0 . 1)-5>4
+ <c-1 d-\tweak extra-offset #'(-1.2 . 1.5)-2 a'-\tweak extra-offset #'(0 . 1.4)-5>4
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Positioning grace note beams at the height of normal note beams"
} % begin verbatim
-
\relative c {
f8[ e]
\grace {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.28"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Positioning grace notes with floating space"
} % begin verbatim
-
\relative c'' {
<<
\override Score.SpacingSpanner.strict-grace-spacing = ##t
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "breaks, repeats, symbols-and-glyphs, workaround"
% Here begins the trickery!
% \cadenzaOn will suppress the bar count and \stopStaff removes the staff lines.
\cadenzaOn
- \stopStaff
+ \stopStaff
% Some examples of possible text-displays
% text line-aligned
\bar ""
}
% Resume bar count and show staff lines again
- \startStaff
- \cadenzaOff
+ \startStaff
+ \cadenzaOff
- % Should Coda be on new line?
- % Coda NOT on new line: DON'T use \break
- % Coda on new line: use \break
- \break
+ % Should Coda be on new line?
+ % Coda NOT on new line: DON'T use \break
+ % Coda on new line: use \break
+ \break
- % Show up, you clef and key!
- \once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
- \once \override Staff.Clef.break-visibility = #end-of-line-invisible
+ % Show up, you clef and key!
+ \once \override Staff.KeySignature.break-visibility = #end-of-line-invisible
+ \once \override Staff.Clef.break-visibility = #end-of-line-invisible
- % Set coda sign as rehearsal mark and adjust size and position
+ % Set coda sign as rehearsal mark and adjust size and position
- % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position
+ % Put the coda sign ontop of the (treble-)clef dependend on coda's line-position
- % Coda NOT on new line, use this:
- % \once \override Score.RehearsalMark.extra-offset = #'( -2 . 1.75 )
+ % Coda NOT on new line, use this:
+ % \once \override Score.RehearsalMark.extra-offset = #'( -2 . 1.75 )
- % Coda on new line, use this:
- \once \override Score.RehearsalMark.extra-offset = #'( -4.5 . 0 )
+ % Coda on new line, use this:
+ \once \override Score.RehearsalMark.extra-offset = #'( -5 . .5 )
- \once \override Score.RehearsalMark.font-size = #5
- \mark \markup { \musicglyph #"scripts.coda" }
+ \once \override Score.RehearsalMark.font-size = #5
+ \mark \markup { \musicglyph #"scripts.coda" }
- % The coda
- \repeat unfold 5 {
+ % The coda
+ \repeat unfold 6 {
c4 c c c
}
\bar"|."
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, expressive-marks, tweaks-and-overrides"
doctitle = "Positioning text markups inside slurs"
} % begin verbatim
-
\relative c'' {
\override TextScript.avoid-slur = #'inside
\override TextScript.outside-staff-priority = ##f
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, pitches"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Preventing final mark from removing final tuplet"
} % begin verbatim
-\markup \vspace #1 %% workaround for LSR-problem
-
\new Staff {
\set tupletFullLength = ##t
\time 1/8
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, pitches"
doctitle = "Preventing natural signs from being printed when the key signature changes"
} % begin verbatim
-
\relative c' {
\key d \major
a4 b cis d
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "repeats, tweaks-and-overrides"
+
+ texidoc = "
+A @code{|:} bar line can be printed at the beginning of a piece.
+
+"
+ doctitle = "Printing a repeat sign at the beginning of a piece"
+} % begin verbatim
+
+\relative c'' {
+ \bar ".|:"
+ \repeat volta 2 {
+ c1
+ d1
+ d4 e f g
+ }
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Printing bar numbers at regular intervals"
} % begin verbatim
-
\relative c' {
\override Score.BarNumber.break-visibility = #end-of-line-invisible
\set Score.currentBarNumber = #11
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Printing bar numbers inside boxes or circles"
} % begin verbatim
-
\relative c' {
% Prevent bar numbers at the end of a line and permit them elsewhere
\override Score.BarNumber.break-visibility = #end-of-line-invisible
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Printing hairpins using al niente notation"
} % begin verbatim
-
\relative c'' {
\override Hairpin.circled-tip = ##t
c2\< c\!
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
doctitle = "Printing marks at the end of a line"
} % begin verbatim
-
\relative c'' {
g2 c
d,2 a'
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
doctitle = "Printing marks on every staff"
} % begin verbatim
-
\score {
<<
\new Staff { c''1 \mark "molto" c'' }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, rhythms, tweaks-and-overrides"
doctitle = "Printing metronome and rehearsal marks below the staff"
} % begin verbatim
-
-\layout { ragged-right = ##f }
+\layout {
+ indent = 0
+ ragged-right = ##f
+}
{
% Metronome marks below the staff
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, percussion, real-music, really-cool, rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "tweaks-and-overrides"
doctitle = "Printing note names with and without an octave marker"
} % begin verbatim
-
scale = \relative c' {
a4 b c d
e4 f g a
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, text, workaround, world-music"
doctitle = "Printing text from right to left"
} % begin verbatim
-
{
b1^\markup {
\line { i n g i r u m i m u s n o c t e }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Printing the bar number for the first measure"
} % begin verbatim
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
\relative c' {
\set Score.barNumberVisibility = #all-bar-numbers-visible
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.28"
+\version "2.18.0"
\header {
lsrtags = "spacing, tweaks-and-overrides"
doctitle = "Proportional strict notespacing"
} % begin verbatim
-
\relative c'' <<
\override Score.SpacingSpanner.strict-note-spacing = ##t
\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
+ c2 \grace { c16[ c16] } c2
}
\new Staff {
c2 \tuplet 3/2 { c8 \clef bass cis,, c } c4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation, text, vocal-music"
texidoc = "
Lyrics can be moved vertically to place them inside the staff. The
-lyrics are moved with @code{\\override LyricText.extra-offset = #'(0
-. dy)} and there are similar commands to move the extenders and
-hyphens. The offset needed is established with trial and error.
+lyrics are moved with @code{\\override LyricText.extra-offset = #'(0 .
+dy)} and there are similar commands to move the extenders and hyphens.
+The offset needed is established with trial and error.
"
doctitle = "Putting lyrics inside the staff"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation"
doctitle = "Quoting another voice"
} % begin verbatim
-
quoteMe = \relative c' {
fis4 r16 a8.-> b4\ff c
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "winds"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, rhythms"
doctitle = "Removing bar numbers from a score"
} % begin verbatim
-
\layout {
\context {
\Score
- \remove "Bar_number_engraver"
+ \omit BarNumber
+ % or:
+ %\remove "Bar_number_engraver"
}
}
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "keyboards, staff-notation, tweaks-and-overrides"
+
+ texidoc = "
+This snippet removes the first brace from a @code{PianoStaff} or a
+@code{GrandStaff}. It may be useful when cutting and pasting the
+engraved image into existing music.
+
+It uses @code{\\alterBroken}.
+
+"
+ doctitle = "Removing brace on first line of piano score"
+} % begin verbatim
+% => http://lilypond.1069038.n5.nabble.com/Getting-rid-of-initial-brace-on-piano-score-td161158.html
+someMusic = {
+ \once \override Staff.Clef.stencil = ##f
+ \once \override Staff.TimeSignature.stencil = ##f
+ \repeat unfold 3 c1 \break
+ \repeat unfold 5 c1 \break
+ \repeat unfold 5 c1
+}
+
+\score {
+ \new PianoStaff
+ <<
+ \new Staff = "right" \relative c'' \someMusic
+ \new Staff = "left" \relative c' { \clef F \someMusic }
+ >>
+ \layout {
+ indent=75
+ \context {
+ \PianoStaff
+ \alterBroken transparent #'(#t) SystemStartBrace
+ }
+ }
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Removing connecting bar lines on StaffGroup PianoStaff or GrandStaff"
} % begin verbatim
-
\relative c' {
\new StaffGroup <<
\new Staff {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "breaks, staff-notation, tweaks-and-overrides"
doctitle = "Removing the first empty line"
} % begin verbatim
-
\layout {
\context {
\Staff \RemoveEmptyStaves
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.5"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Repeats headword"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=821
+%% see also http://www.lilypond.org/doc/v2.18/Documentation/notation/repeats
+
% Beethoven, Op. 57
% Piano sonata 23 - Dem Grafen Franz von Brunswick Gewidmet
% Movt II, Andante con moto
percent-repeat-count-visibility.ly
percent-repeat-counter.ly
positioning-segno-and-coda-with-line-break.ly
+printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
setting-the-double-repeat-default-for-volte.ly
shortening-volta-brackets.ly
volta-below-chords.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, rhythms, symbols-and-glyphs, tweaks-and-overrides"
doctitle = "Rest styles"
} % begin verbatim
-
\layout {
indent = 0
\context {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, version-specific"
doctitle = "Reverting default beam endings"
} % begin verbatim
-
\relative c'' {
\time 12/8
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Rhythmic slashes"
} % begin verbatim
-
% Macro to print single slash
rs = {
\once \override Rest.stencil = #ly:percent-repeat-item-interface::beat-slash
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Rhythms headword"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=822
+%% see also http://lilypond.org/doc/v2.18/Documentation/notation/rhythms
+
% Beethoven, Op. 81a
% Piano sonata 26 - Das Lebewohl
% Movt II - Abwesenheit
c'''32 ) \!
g''8 (
~
- 32 [
+ g''32 [
a''64
g''64 ) ]
<g e>32
c'32
}
-
>>
strict-beat-beaming.ly
subdividing-beams.ly
three-sided-box.ly
+time-signature-in-parentheses---method-3.ly
+time-signature-in-parentheses.ly
time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
tweaking-grace-layout-within-music.ly
using-alternative-flag-styles.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
%% and then run scripts/auxiliar/makelsr.py
%%
doctitle = "SATB Choir template - four staves"
} % begin verbatim
-
global = {
\key c \major
\time 4/4
changing-properties-for-individual-grobs.ly
creating-a-sequence-of-notes-on-various-pitches.ly
creating-double-digit-fingerings.ly
+customizing-the-position-and-number-of-dots-in-repeat-sign-bar-lines.ly
displaying-grob-ancestry.ly
drawing-boxes-around-grobs.ly
drawing-circles-around-various-objects.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "headword"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, tweaks-and-overrides"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
doctitle = "Setting hairpin behavior at bar lines"
} % begin verbatim
-
\relative c'' {
e4\< e2.
e1\!
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout, staff-notation, tweaks-and-overrides"
doctitle = "Setting system separators"
} % begin verbatim
-
\paper {
system-separator-markup = \slashSeparator
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.5"
+\version "2.18.0"
\header {
lsrtags = "repeats"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Setting the minimum length of hairpins"
} % begin verbatim
-
\relative c'' {
c4\< c\! d\> e\!
+ << f1 { s4 s\< s\> s\! } >>
\override Hairpin.minimum-length = #5
<< f1 { s4 s\< s\> s\! } >>
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats"
doctitle = "Shortening volta brackets"
} % begin verbatim
-
\relative c'' {
\time 3/4
c4 c c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords"
doctitle = "Showing chords at changes"
} % begin verbatim
-
harmonies = \chordmode {
c1:m c:m \break c:m c:m d
}
+
<<
\new ChordNames {
\set chordChanges = ##t
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, tweaks-and-overrides, version-specific"
doctitle = "Showing the same articulation above and below a note or chord"
} % begin verbatim
-
% The same as \flageolet, just a little smaller
smallFlageolet =
#(let ((m (make-articulation "flageolet")))
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords"
doctitle = "Simple lead sheet"
} % begin verbatim
-
<<
\chords { c2 g:sus4 f e }
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Simultaneous headword"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=825
+%% see also http://lilypond.org/doc/v2.18/Documentation/notation/simultaneous-notes
+
\include "english.ly"
% NR 1.5 Simultaneous notes
\trillFlat
af''4.~ \startTrillSpan
af''8.~ |
- 4.~ 8.~ |
+ af''4.~ af''8.~ |
\oneVoice
<af'' d''>8.[ a''8. \p \< bf''8.]~ |
- 8.[ b''8. c'''8.]~
+ bf''8.[ b''8. c'''8.]~
\bar "||"
\key ef \major
c'''8.[ cs'''8.] \f \stopTrillSpan
\override Voice.TrillSpanner.direction = #DOWN
d''4.~ \f \startTrillSpan
d''8.~ |
- 4.~ 8.~ |
- 8. \stopTrillSpan
+ d''4.~ d''8.~ |
+ d''8. \stopTrillSpan
\trillFlat
d''4.~ \startTrillSpan |
- d''4.~ 8.~ |
- 4.~ 8.~ |
- 4.~ 8.~ \stopTrillSpan |
+ d''4.~ d''8.~ |
+ d''4.~ d''8.~ |
+ d''4.~ d''8.~ \stopTrillSpan |
\trillFlat
d''4.~ \startTrillSpan
d''8. ~ |
- 4.~ 8.~ |
+ d''4.~ d''8.~ |
\once \override NoteColumn.ignore-collision = ##t
\hideNotes
d''8. \stopTrillSpan
\override Voice.TrillSpanner.direction = #UP
f'4.~ \startTrillSpan
f'8.~ |
- 4.~ 8.~ |
- 8. \stopTrillSpan
+ f'4.~ f'8.~ |
+ f'8. \stopTrillSpan
}
\new Voice {
\voiceTwo
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, really-simple, template, vocal-music"
doctitle = "Single staff template with notes lyrics and chords"
} % begin verbatim
-
melody = \relative c' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, template, vocal-music"
doctitle = "Single staff template with notes lyrics chords and frets"
} % begin verbatim
-
verseI = \lyricmode {
\set stanza = #"1."
This is the first verse
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "chords, really-simple, template"
doctitle = "Single staff template with notes and chords"
} % begin verbatim
-
melody = \relative c' {
\clef treble
\key c \major
\time 4/4
f4 e8[ c] d4 g
- a2 ~ 2
+ a2 ~ a
}
harmonies = \chordmode {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, template, vocal-music"
doctitle = "Single staff template with notes and lyrics"
} % begin verbatim
-
melody = \relative c' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, template"
doctitle = "Single staff template with only notes"
} % begin verbatim
-
melody = \relative c' {
\clef treble
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, rhythms, vocal-music"
doctitle = "Skips in lyric mode (2)"
} % begin verbatim
-
<<
\relative c'' { a4 b c d }
\new Lyrics \lyricmode { a4 "" _ gap }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, rhythms, vocal-music"
doctitle = "Skips in lyric mode"
} % begin verbatim
-
<<
\relative c'' { a1 | a }
\new Lyrics \lyricmode { \skip 1 bla1 }
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
\override Glissando.springs-and-rods =
#ly:spanner::set-spacing-rods
\override Glissando.thickness = #2
+ \omit StringNumber
+ % or:
+ %\override StringNumber.stencil = ##f
}
}
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, unfretted-strings"
accordion-discant-symbols.ly
-accordion-registers.ly
+accordion-register-symbols.ly
adding-bar-lines-to-chordnames-context.ly
adding-drum-parts.ly
adding-fingerings-to-tablatures.ly
time-signature-in-parentheses---method-3.ly
time-signature-in-parentheses.ly
transcription-of-ancient-music-with-incipit.ly
+using-an-extra-voice-for-breaks.ly
woodwind-diagrams-listing.ly
creating-double-digit-fingerings.ly
cross-staff-stems.ly
display-bracket-with-only-one-staff-in-a-system.ly
+extending-a-trillspanner.ly
extending-glissandi-across-repeats.ly
forcing-measure-width-to-adapt-to-metronomemarks-width.ly
glissandi-can-skip-grobs.ly
putting-lyrics-inside-the-staff.ly
quoting-another-voice-with-transposition.ly
quoting-another-voice.ly
+removing-brace-on-first-line-of-piano-score.ly
removing-the-first-empty-line.ly
setting-system-separators.ly
tick-bar-lines.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "fretted-strings"
doctitle = "Stem and beam behavior in tablature"
} % begin verbatim
-
\new TabStaff {
\relative c {
\tabFullNotation
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "contemporary-notation, rhythms"
doctitle = "Stemlets"
} % begin verbatim
-
\paper { ragged-right = ##f }
{
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, template, unfretted-strings"
doctitle = "String quartet template (simple)"
} % begin verbatim
-
global= {
\time 4/4
\key c \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "preparing-parts, template, unfretted-strings"
doctitle = "String quartet template with separate parts"
} % begin verbatim
-
%%%%% piece.ly
%%%%% (This is the global definitions file)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
doctitle = "Suppressing warnings for clashing note columns"
} % begin verbatim
-
ignore = \override NoteColumn.ignore-collision = ##t
\relative c' {
accordion-discant-symbols.ly
-accordion-registers.ly
+accordion-register-symbols.ly
adding-indicators-to-staves-which-get-split-after-a-break.ly
ancient-fonts.ly
breathing-signs.ly
caesura-railtracks-with-fermata.ly
changing--flageolet-mark-size.ly
custodes.ly
+customizing-the-position-and-number-of-dots-in-repeat-sign-bar-lines.ly
fingering-symbols-for-wind-instruments.ly
how-to-put-ties-between-syllables-in-lyrics.ly
positioning-segno-and-coda-with-line-break.ly
combining-two-parts-on-the-same-staff.ly
entering-several-tuplets-using-only-one--times-command.ly
+extending-a-trillspanner.ly
vertical-aligned-staffgroups-without-connecting-systemstartbar.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout"
texidoc = "
-A table of contents is included using @code{\\markuplist
+A table of contents is included using @code{\\markuplines
\\table-of-contents}. The TOC items are added with the
@code{\\tocItem} command.
doctitle = "Table of contents"
} % begin verbatim
-
#(set-default-paper-size "a6")
\book {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.28"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Text headword"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=829
+%% see also http://lilypond.org/doc/v2.18/Documentation/notation/text
+
\include "english.ly"
% NR 1.8 Text
c''32
df''32
ef''32
- \acciaccatura { df'' ef'' }
+ \acciaccatura { df''[ ef'' ] }
f''8
ef''16
df''16
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, scheme-language, text"
doctitle = "Three-sided box"
} % begin verbatim
-
% New command to add a three sided box, with sides north, west and south
% Based on the box-stencil command defined in scm/stencil.scm
% Note that ";;" is used to comment a line in Scheme
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "staff-notation"
doctitle = "Tick bar lines"
} % begin verbatim
-
\relative c' {
\set Score.defaultBarType = #"'"
c4 d e f
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
- lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
+ lsrtags = "rhythms, specific-notation, staff-notation, tweaks-and-overrides"
texidoc = "
Another way to put the time signature in parenthesis
doctitle = "Time signature in parentheses - method 3"
} % begin verbatim
-
\relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(parenthesize-stencil (ly:time-signature::print grob) 0.1 0.4 0.4 0.1 ))
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
- lsrtags = "specific-notation, staff-notation, tweaks-and-overrides"
+ lsrtags = "rhythms, specific-notation, staff-notation, tweaks-and-overrides"
texidoc = "
The time signature can be enclosed within parentheses.
doctitle = "Time signature in parentheses"
} % begin verbatim
-
\relative c'' {
\override Staff.TimeSignature.stencil = #(lambda (grob)
(bracketify-stencil (ly:time-signature::print grob) Y 0.1 0.2 0.1))
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
7/4), but only the numerator (7 in this case). This can be easily done
by using @code{\\override Staff.TimeSignature.style = #'single-digit}
to change the style permanently. By using @code{\\revert
-Staff.TimeSignature.style}, this setting can be reversed. To apply
-the single-digit style to only one time signature, use the
+Staff.TimeSignature.style}, this setting can be reversed. To apply the
+single-digit style to only one time signature, use the
@code{\\override} command and prefix it with a @code{\\once}.
"
doctitle = "Time signature printing only the numerator as a number (instead of the fraction)"
} % begin verbatim
-
\relative c'' {
\time 3/4
c4 c c
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, specific-notation, tweaks-and-overrides, workaround"
doctitle = "Transcription of Ancient music with incipit"
} % begin verbatim
+incipit =
+#(define-music-function (parser location incipit-music) (ly:music?)
+ #{
+ \once \override Staff.InstrumentName.self-alignment-X = #RIGHT
+ \once \override Staff.InstrumentName.self-alignment-Y = ##f
+ \once \override Staff.InstrumentName.padding = #0.3
+ \once \override Staff.InstrumentName.stencil =
+ #(lambda (grob)
+ (let* ((instrument-name (ly:grob-property grob 'long-text)))
+ (set! (ly:grob-property grob 'long-text)
+ #{ \markup
+ \score
+ {
+ { \context MensuralStaff \with {
+ instrumentName = #instrument-name
+ } $incipit-music
+ }
+ \layout { $(ly:grob-layout grob)
+ line-width = \indent
+ indent =
+ % primitive-eval is probably easiest for
+ % escaping lexical closure and evaluating
+ % everything respective to (current-module).
+ #(primitive-eval
+ '(or (false-if-exception (- indent incipit-width))
+ (* 0.5 indent)))
+ ragged-right = ##f
+ ragged-last = ##f
+ system-count = #1 }
+ }
+ #})
+ (system-start-text::print grob)))
+ #})
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
global = {
\set Score.skipBars = ##t
\key g \major
\time 4/4
- %make the staff lines invisible on staves
- \hide Staff.BarLine
- \skip 1*8 % the actual music
+
+ % the actual music
+ \skip 1*8
+
% let finis bar go through all staves
\override Staff.BarLine.transparent = ##f
+
% finis bar
\bar "|."
}
+discantusIncipit = <<
+ \new MensuralVoice = "discantusIncipit" <<
+ \repeat unfold 9 { s1 \noBreak }
+ {
+ \clef "neomensural-c1"
+ \key f \major
+ \time 2/2
+ c''1.
+ }
+ >>
+ \new Lyrics \lyricsto discantusIncipit { IV- }
+>>
+
discantusNotes = {
\transpose c' c'' {
- \clef treble
+ \clef "treble"
d'2. d'4 |
b e' d'2 |
c'4 e'4.( d'8 c' b |
a4) b a2 |
b4.( c'8 d'4) c'4 |
- \once \hide NoteHead c'1 |
+ \once \hide NoteHead
+ c'1 |
b\breve |
}
}
-us. |
}
+altusIncipit = <<
+ \new MensuralVoice = "altusIncipit" <<
+ \repeat unfold 9 { s1 \noBreak }
+ {
+ \clef "neomensural-c3"
+ \key f \major
+ \time 2/2
+ r1 f'1.
+ }
+ >>
+ \new Lyrics \lyricsto altusIncipit { IV- }
+>>
+
altusNotes = {
\transpose c' c'' {
- \clef treble
- r2 g2. e4 fis g | % two bars
+ \clef "treble"
+ % two measures
+ r2 g2. e4 fis g |
a2 g4 e |
fis g4.( fis16 e fis4) |
g1 |
- \once \hide NoteHead g1 |
+ \once \hide NoteHead
+ g1 |
g\breve |
}
}
altusLyrics = \lyricmode {
- Ju -- bi -- la -- te | % two bars
+ % two measures
+ Ju -- bi -- la -- te |
De -- o, om -- |
nis ter -- ra, |
"..." |
-us. |
}
+tenorIncipit = <<
+ \new MensuralVoice = "tenorIncipit" <<
+ \repeat unfold 9 { s1 \noBreak }
+ {
+ \clef "neomensural-c4"
+ \key f \major
+ \time 2/2
+ r\longa
+ r\breve
+ r1 c'1.
+ }
+ >>
+ \new Lyrics \lyricsto tenorIncipit { IV- }
+>>
+
tenorNotes = {
\transpose c' c' {
\clef "treble_8"
R1 |
R1 |
R1 |
- r2 d'2. d'4 b e' | % two bars
- \once \hide NoteHead e'1 |
+ % two measures
+ r2 d'2. d'4 b e' |
+ \once \hide NoteHead
+ e'1 |
d'\breve |
}
}
tenorLyrics = \lyricmode {
- Ju -- bi -- la -- te | % two bars
+ % two measures
+ Ju -- bi -- la -- te |
"..." |
-us.
}
+bassusIncipit = <<
+ \new MensuralVoice = "bassusIncipit" <<
+ \repeat unfold 9 { s1 \noBreak }
+ {
+ \clef "bass"
+ \key f \major
+ \time 2/2
+ %% incipit
+ r\maxima
+ f1.
+ }
+ >>
+ \new Lyrics \lyricsto bassusIncipit { IV- }
+>>
+
bassusNotes = {
\transpose c' c' {
- \clef bass
+ \clef "bass"
R1 |
R1 |
R1 |
R1 |
g2. e4 |
- \once \hide NoteHead e1 |
+ \once \hide NoteHead
+ e1 |
g\breve |
}
}
-us.
}
-incipitDiscantus = \markup {
- \score {
- {
- \set Staff.instrumentName = #"Discantus "
- \override NoteHead.style = #'neomensural
- \override Rest.style = #'neomensural
- \override Staff.TimeSignature.style = #'neomensural
- \cadenzaOn
- \clef "neomensural-c1"
- \key f \major
- \time 2/2
- c''1._"IV-" s2 %two bars
- \skip 1*8 % eight bars
- }
- \layout {
- \context {
- \Voice
- \remove "Ligature_bracket_engraver"
- \consists "Mensural_ligature_engraver"
- }
- line-width = 4.5\cm
- }
- }
-}
-
-incipitAltus = \markup {
- \score {
- {
- \set Staff.instrumentName = #"Altus "
- \override NoteHead.style = #'neomensural
- \override Rest.style = #'neomensural
- \override Staff.TimeSignature.style = #'neomensural
- \cadenzaOn
- \clef "neomensural-c3"
- \key f \major
- \time 2/2
- r1 % one bar
- f'1._"IV-" s2 % two bars
- \skip 1*7 % seven bars
- }
- \layout {
- \context {
- \Voice
- \remove "Ligature_bracket_engraver"
- \consists "Mensural_ligature_engraver"
- }
- line-width = 4.5\cm
- }
- }
-}
-
-incipitTenor = \markup {
- \score {
- {
- \set Staff.instrumentName = #"Tenor "
- \override NoteHead.style = #'neomensural
- \override Rest.style = #'neomensural
- \override Staff.TimeSignature.style = #'neomensural
- \cadenzaOn
- \clef "neomensural-c4"
- \key f \major
- \time 2/2
- r\longa % four bars
- r\breve % two bars
- r1 % one bar
- c'1._"IV-" s2 % two bars
- \skip 1 % one bar
- }
- \layout {
- \context {
- \Voice
- \remove "Ligature_bracket_engraver"
- \consists "Mensural_ligature_engraver"
- }
- line-width = 4.5\cm
- }
- }
-}
-
-incipitBassus = \markup {
- \score {
- {
- \set Staff.instrumentName = #"Bassus "
- \override NoteHead.style = #'neomensural
- \override Rest.style = #'neomensural
- \override Staff.TimeSignature.style = #'neomensural
- \cadenzaOn
- \clef "bass"
- \key f \major
- \time 2/2
- % incipit
- r\maxima % eight bars
- f1._"IV-" s2 % two bars
- }
- \layout {
- \context {
- \Voice
- \remove "Ligature_bracket_engraver"
- \consists "Mensural_ligature_engraver"
- }
- line-width = 4.5\cm
- }
- }
-}
-
-%StaffGroup is used instead of ChoirStaff to get bar lines between systems
\score {
<<
\new StaffGroup = choirStaff <<
\new Voice = "discantusNotes" <<
\global
- \set Staff.instrumentName = \incipitDiscantus
+ \set Staff.instrumentName = #"Discantus "
+ \incipit \discantusIncipit
\discantusNotes
>>
\new Lyrics = "discantusLyrics" \lyricsto discantusNotes { \discantusLyrics }
-
\new Voice = "altusNotes" <<
\global
- \set Staff.instrumentName = \incipitAltus
+ \set Staff.instrumentName = #"Altus "
+ \incipit \altusIncipit
\altusNotes
>>
\new Lyrics = "altusLyrics" \lyricsto altusNotes { \altusLyrics }
-
\new Voice = "tenorNotes" <<
\global
- \set Staff.instrumentName = \incipitTenor
+ \set Staff.instrumentName = #"Tenor "
+ \incipit \tenorIncipit
\tenorNotes
>>
\new Lyrics = "tenorLyrics" \lyricsto tenorNotes { \tenorLyrics }
-
\new Voice = "bassusNotes" <<
\global
- \set Staff.instrumentName = \incipitBassus
+ \set Staff.instrumentName = #"Bassus "
+ \incipit \bassusIncipit
\bassusNotes
>>
+ \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics }
>>
- \new Lyrics = "bassusLyrics" \lyricsto bassusNotes { \bassusLyrics }
- %Keep the bass lyrics outside of the staff group to avoid bar lines
- %between the lyrics.
>>
-
\layout {
\context {
\Score
- % no bars in staves
+ %% no bar lines in staves or lyrics
\hide BarLine
}
- % the next three instructions keep the lyrics between the bar lines
+ %% the next two instructions keep the lyrics between the bar lines
\context {
\Lyrics
\consists "Bar_engraver"
- \hide BarLine
- }
- \context {
- \StaffGroup
\consists "Separating_line_group_engraver"
}
\context {
\Voice
- % no slurs
+ %% no slurs
\hide Slur
- % Comment in the below "\remove" command to allow line
- % breaking also at those barlines where a note overlaps
- % into the next bar. The command is commented out in this
- % short example score, but especially for large scores, you
- % will typically yield better line breaking and thus improve
- % overall spacing if you comment in the following command.
- %\remove "Forbid_line_break_engraver"
+ %% Comment in the below "\remove" command to allow line
+ %% breaking also at those bar lines where a note overlaps
+ %% into the next measure. The command is commented out in this
+ %% short example score, but especially for large scores, you
+ %% will typically yield better line breaking and thus improve
+ %% overall spacing if you comment in the following command.
+ %%\remove "Forbid_line_break_engraver"
}
- indent = 5\cm
+ indent = 6\cm
+ incipit-width = 4\cm
}
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "pitches, scheme-language, workaround"
doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)"
} % begin verbatim
-
#(define (naturalize-pitch p)
(let ((o (ly:pitch-octave p))
(a (* 4 (ly:pitch-alteration p)))
--- /dev/null
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.di.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.18.0"
+
+\header {
+ lsrtags = "tweaks-and-overrides"
+
+ texidoc = "
+This snippet shows how to set a tuplet starting in a lower staff and
+finishing in the upper one.
+
+"
+ doctitle = "Tuplet bracket and change staff"
+} % begin verbatim
+
+%% http://lsr.di.unimi.it/LSR/Item?id=926
+%=> http://lilypond-french-users.1298960.n2.nabble.com/Crochet-de-nolet-tordu-tt7581491.html
+%=> http://lilypond.1069038.n5.nabble.com/Tuplet-bracket-amp-changeStff-td164063.html
+
+aigues = \relative c' {
+ \time 6/8
+ s4.
+ \stemDown
+ c16[ bes' e]
+ \stemUp
+ g c e
+ \stemDown
+ g8
+}
+
+basses = \relative c {
+ \time 3/4
+ \clef F
+ \tweak positions #'(4.5 . 9.5)
+ \tweak edge-height #'(1 . -1)
+ \tuplet 7/6 {
+ c16[ bes' e]
+ \change Staff = md
+ \stemUp
+ g[ c e g]
+ }
+ s4.s8
+}
+
+\new PianoStaff
+\with { \omit TimeSignature }
+<<
+ \new Staff = md \aigues
+ \new Staff = mg \basses
+>>
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.18"
+\version "2.18.0"
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
The command @code{\\clef \"treble_8\"} is equivalent to setting
@code{clefGlyph}, @code{clefPosition} (which controls the vertical
position of the clef), @code{middleCPosition} and
-@code{clefTransposition}. A clef is printed when any of the properties
+@code{clefOctavation}. A clef is printed when any of the properties
except @code{middleCPosition} are changed.
@code{middleCClefPosition} must also be set. The positional parameters
are relative to the staff center line, positive numbers displacing
upwards, counting one for each line and space. The
-@code{clefTransposition} value would normally be set to 7, -7, 15 or -15,
+@code{clefOctavation} value would normally be set to 7, -7, 15 or -15,
but other values are valid.
doctitle = "Tweaking clef properties"
} % begin verbatim
-\layout { ragged-right = ##t }
+\layout {
+ indent = 0
+ ragged-right = ##t
+}
{
% The default treble clef
\key f \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.28"
+\version "2.18.0"
\header {
lsrtags = "rhythms, tweaks-and-overrides"
doctitle = "Tweaking grace layout within music"
} % begin verbatim
-
\relative c'' {
\new Staff {
$(remove-grace-property 'Voice 'Stem 'direction)
adding-links-to-objects.ly
adding-timing-marks-to-long-glissandi.ly
adjusting-grace-note-spacing.ly
+adjusting-lyrics-vertical-spacing.ly
altering-the-length-of-beamed-stems.ly
alternative-bar-numbering.ly
analysis-brackets-above-the-staff.ly
caesura-railtracks-with-fermata.ly
centering-markup-on-note-heads-automatically.ly
changing-a-single-notes-size-in-a-chord.ly
+changing-beam-thickness-and-spacing.ly
changing-form-of-multi-measure-rests.ly
changing-properties-for-individual-grobs.ly
changing-text-and-spanner-styles-for-text-dynamics.ly
drawing-circles-around-various-objects.ly
dynamics-custom-text-spanner-postfix.ly
dynamics-text-spanner-postfix.ly
+extending-a-trillspanner.ly
extending-glissandi-across-repeats.ly
fine-tuning-pedal-brackets.ly
forcing-horizontal-shift-of-notes.ly
positioning-arpeggios.ly
positioning-multi-measure-rests.ly
positioning-text-markups-inside-slurs.ly
+printing-a-repeat-sign-at-the-beginning-of-a-piece.ly
printing-bar-numbers-inside-boxes-or-circles.ly
printing-metronome-and-rehearsal-marks-below-the-staff.ly
printing-note-names-with-and-without-an-octave-marker.ly
proportional-strict-notespacing.ly
+removing-brace-on-first-line-of-piano-score.ly
removing-connecting-bar-lines-on-staffgroup,-pianostaff,-or-grandstaff.ly
removing-the-first-empty-line.ly
rest-styles.ly
time-signature-in-parentheses.ly
time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly
transcription-of-ancient-music-with-incipit.ly
+tuplet-bracket-and-change-staff.ly
tweaking-clef-properties.ly
tweaking-grace-layout-within-music.ly
using-alternative-flag-styles.ly
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, staff-notation"
doctitle = "Use square bracket at the start of a staff group"
} % begin verbatim
-
\score {
\new StaffGroup { <<
\set StaffGroup.systemStartDelimiter = #'SystemStartSquare
--- /dev/null
+% 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.18.0
+\version "2.18.0"
+
+\header {
+ lsrtags = "specific-notation, workaround"
+
+ texidoc = "
+
+Often it is easier to manage line and page-breaking information by
+keeping it separate from the music by introducing an extra voice
+containing only skips along with the @code{\\break},
+@code{pageBreak} and other layout information.
+
+This pattern becomes especially helpful when overriding
+@code{line-break-system-details} and the other useful but long
+properties of @code{NonMusicalPaperColumnGrob}.
+"
+ doctitle = "Using an extra voice for breaks"
+} % begin verbatim
+
+
+music = \relative c'' { c4 c c c }
+
+\header { tagline = ##f }
+\paper { left-margin = 0\mm }
+\book {
+ \score {
+ \new Staff <<
+ \new Voice {
+ s1 * 2 \break
+ s1 * 3 \break
+ s1 * 6 \break
+ s1 * 5 \break
+ }
+ \new Voice {
+ \repeat unfold 2 { \music }
+ \repeat unfold 3 { \music }
+ \repeat unfold 6 { \music }
+ \repeat unfold 5 { \music }
+ }
+ >>
+ }
+}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks, vocal-music"
doctitle = "Using arpeggioBracket to make divisi more visible"
} % begin verbatim
-
\include "english.ly"
\score {
\new Voice = "lower"
{ \voiceTwo
a1 ~
- 1
+ a
a ~
- 4 \bar "|."
+ a4 \bar "|."
}
>>
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "keyboards, pitches, staff-notation"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Using double slurs for legato chords"
} % begin verbatim
-
\relative c' {
\set doubleSlurs = ##t
<c e>4( <d f> <c e> <d f>)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "devel, scheme-language, tweaks-and-overrides"
texidoc = "
-Some grobs can be accessed @qq{laterally} from within another grob's
-callback. These are usually listed as @qq{layout objects} in the
-@qq{Internal properties} section of a grob-interface. The function
-@code{ly:grob-object} is used to access these grobs.
+Some grobs can be accessed “laterally” from within another grob’s
+callback. These are usually listed as “layout objects” in the “Internal
+properties” section of a grob-interface. The function ly:grob-object is
+used to access these grobs.
Demonstrated below are some ways of accessing grobs from within a
Example console output:
--------------------- #-Grob Accidental - #-Grob Arpeggio - #-Grob Stem -
+@code{ #Grob Accidental () #Grob Stem}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, really-cool, scheme-language, tweaks-and-overrides"
doctitle = "Using PostScript to generate special note head shapes"
} % begin verbatim
-
parallelogram =
#(ly:make-stencil (list 'embedded-ps
"gsave
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, tweaks-and-overrides"
doctitle = "Using the \\tweak command to tweak individual grobs"
} % begin verbatim
-
\relative c' {
\time 2/4
\set fingeringOrientations = #'(right)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "editorial-annotations, expressive-marks"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "rhythms"
doctitle = "Using ties with arpeggios"
} % begin verbatim
-
\relative c' {
\set tieWaitForNote = ##t
\grace { c16[ ~ e ~ g] ~ } <c, e g>2
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "text"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.30"
+\version "2.18.0"
\header {
lsrtags = "paper-and-layout, staff-notation, syntax-and-expressions"
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "ancient-notation, expressive-marks"
doctitle = "Vertical line as a baroque articulation mark"
} % begin verbatim
-
upline =
#(let ((m (make-articulation "stopped")))
(set! (ly:music-property m 'tweaks)
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "expressive-marks"
doctitle = "Vertically aligning dynamics across multiple notes"
} % begin verbatim
-
\relative c' {
\override DynamicLineSpanner.staff-padding = #4
c2\p f\mf
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "spacing, tweaks-and-overrides, vocal-music"
doctitle = "Vertically aligning ossias and lyrics"
} % begin verbatim
-
\paper {
ragged-right = ##t
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "vocal-music"
texidoc = "
-In a vocal piece where there are several (two,four or more) lines of
-lyrics, and common lyrics for all voices at some point, these common
-lyrics may be vertically centered regardingly, as shown in the
+In a vocal piece where there are several (two, four or more) lines of
+lyrics and common lyrics for all voices at some point, the common
+lyrics may be made to appear vertically centered, as shown in the
following example:
"
doctitle = "Vertically centered common lyrics"
} % begin verbatim
-\include "english.ly"
-leftbrace = \markup { \override #'(font-encoding . fetaBraces) \lookup #"brace240" }
-rightbrace = \markup { \rotate #180 \leftbrace }
-
-dropLyrics =
-{
- \override LyricText.extra-offset = #'(0 . -5)
- \override LyricHyphen.extra-offset = #'(0 . -5)
- \override LyricExtender.extra-offset = #'(0 . -5)
+dropLyrics = {
+ \override LyricText.extra-offset = #'(0 . -4.5)
+ \override LyricHyphen.extra-offset = #'(0 . -4.5)
+ \override LyricExtender.extra-offset = #'(0 . -4.5)
+ \override StanzaNumber.extra-offset = #'(0 . -4.5)
}
-raiseLyrics =
-{
- \revert LyricText.extra-offset
- \revert LyricHyphen.extra-offset
- \revert LyricExtender.extra-offset
+raiseLyrics = {
+ \revert LyricText.extra-offset
+ \revert LyricHyphen.extra-offset
+ \revert LyricExtender.extra-offset
+ \revert StanzaNumber.extra-offset
}
skipFour = \repeat unfold 4 { \skip 8 }
-lyricsA = \lyricmode { The first verse has \dropLyrics the com -- mon
-__ words \raiseLyrics used in all four. }
-lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. }
-lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. }
+lyricsA = \lyricmode {
+ The first verse has
+ \dropLyrics
+ \set stanza = #" All:"
+ the com -- mon __ words
+ \raiseLyrics
+ used in all four.
+}
+
+lyricsB = \lyricmode { In stan -- za two, \skipFour al -- so ap -- pear. }
+
+lyricsC = \lyricmode { By the third verse, \skipFour are get -- ting dull. }
+
lyricsD = \lyricmode { Last stan -- za, and \skipFour get used once more. }
-melody = \relative c' { c4 d e f g f e8( e f) d4 c e d c }
-
-\score
-{
- <<
- \new Voice = m \melody
- \new Lyrics \lyricsto m \lyricsA
- \new Lyrics \lyricsto m \lyricsB
- \new Lyrics \lyricsto m \lyricsC
- \new Lyrics \lyricsto m \lyricsD
- >>
+melody = \relative c' {
+ c4 d e f |
+ g f e8( e f) d |
+ c4 e d c |
+}
+
+\score {
+ <<
+ \new Voice = m \melody
+ \new Lyrics \lyricsto m \lyricsA
+ \new Lyrics \lyricsto m \lyricsB
+ \new Lyrics \lyricsto m \lyricsC
+ \new Lyrics \lyricsto m \lyricsD
+ >>
}
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, tweaks-and-overrides"
doctitle = "Vertically centering paired figured bass extenders"
} % begin verbatim
-
<<
\relative c' {
c8 c b b a a c16 c b b
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "automatic-notation, keyboards, template, vocal-music"
doctitle = "Vocal ensemble template with automatic piano reduction"
} % begin verbatim
-
\paper {
top-system-spacing #'basic-distance = #10
score-system-spacing #'basic-distance = #20
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, template, text, vocal-music"
doctitle = "Vocal ensemble template with lyrics aligned below and above the staves"
} % begin verbatim
-
global = {
\key c \major
\time 4/4
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "contexts-and-engravers, template, vocal-music"
doctitle = "Vocal ensemble template with verse and refrain"
} % begin verbatim
-
global = {
\key g \major
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, template, vocal-music"
doctitle = "Vocal ensemble template"
} % begin verbatim
-
\paper {
top-system-spacing #'basic-distance = #10
score-system-spacing #'basic-distance = #20
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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.19.2"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Vocal headword"
} % begin verbatim
-\layout {
- \context {
- \Score
- \override PaperColumn.keep-inside-line = ##t
- \override NonMusicalPaperColumn.keep-inside-line = ##t
- }
-}
+%% http://lsr.di.unimi.it/LSR/Item?id=832
+%% see also http://lilypond.org/doc/v2.18/Documentation/notation/vocal-music
% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale
% mm. 216 -- 236
\autoBeamOff
r4^\markup { \small Baritono } r a
\appoggiatura a8 e'2. ~
- 4 d8[ cis d e]
+ e4 d8[ cis d e]
e4 g, r8 g
bes2 a8 e
g4 f r
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "chords, repeats, staff-notation"
doctitle = "Volta below chords"
} % begin verbatim
-
\score {
<<
\chords {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "really-simple, repeats, staff-notation"
doctitle = "Volta multi staff"
} % begin verbatim
-
voltaMusic = \relative c'' {
\repeat volta 2 {
c1
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "repeats, symbols-and-glyphs, text"
doctitle = "Volta text markup using repeatCommands"
} % begin verbatim
-
voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }
\relative c'' {
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "headword"
doctitle = "Wind headword"
} % begin verbatim
+%% http://lsr.di.unimi.it/LSR/Item?id=833
+%% see also http://lilypond.org/doc/v2.18/Documentation/notation/wind-instruments
+
% NR 2.whatever Wind
% Tchaikovsky
% Nutcracker Suite, VII Dance of the Merlitons
%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.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"
+\version "2.18.0"
\header {
lsrtags = "specific-notation, winds"
doctitle = "Woodwind diagrams listing"
} % begin verbatim
+\layout {
+ indent = 0
+}
+
\relative c' {
\textLengthOn
c1^
printing-text-from-right-to-left.ly
transcription-of-ancient-music-with-incipit.ly
transposing-pitches-with-minimum-accidentals-smart-transpose.ly
+using-an-extra-voice-for-breaks.ly
vertically-aligned-dynamics-and-textscripts.ly
indicated line of your input file, try checking one or two lines
above the indicated position.
+Please note that diagnostics can be triggered at any point during the
+many stages of processing. For example if there are parts of the input
+that are processed multiple times (i.e. in midi and layout output), or
+if the same music variable is used in multiple contexts the same message
+may appear several times. Diagnostics produced at a @q{late} stage (i.e
+bar checks) might also be issued multiple times.
+
More information about errors is given in @ref{Common errors}.
}
@end lilypond
-As a second example, if a @code{\relative} command is placed inside
-a @code{\repeat} command, two staves result, the second offset from
-the first, because the @code{\repeat} command generates two
-@code{\relative} blocks, which each implicitly create @code{Staff}
-and @code{Voice} blocks.
-
-@lilypond[quote,verbatim]
-\repeat unfold 2 {
- \relative c' { c4 d e f }
-}
-@end lilypond
-
-Explicitly instantiating the @code{Voice} context fixes the
-problem:
-
-@lilypond[quote,verbatim]
-\new Voice {
- \repeat unfold 2 {
- \relative c' { c4 d e f }
- }
-}
-@end lilypond
-
-
@node Error message Unbound variable %
@unnumberedsubsec Error message Unbound variable %
and add your own!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Particularly instructive examples from LSR are included in our
translation status for non-English readers.
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}:
user-created examples, hints and tips.
@item
@subheading Snippets
This shows a selected set of LilyPond snippets from the
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}
(LSR). All the snippets are in the public domain.
Please note that this document is not an exact subset of LSR. LSR
@c used for news about the upcoming release; see CG 10.2
@newsItem
-@subsubheading LilyPond 2.19.8 released @emph{June 15, 2014}
+@subsubheading LilyPond 2.19.10 released @emph{July 13, 2014}
-We are happy to announce the release of LilyPond 2.19.8. This
+We are happy to announce the release of LilyPond 2.19.10. This
release includes a number of 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
* don't duplicate entries from news-front.itexi
@end ignore
+@newsItem
+@subsubheading LilyPond 2.19.9 released @emph{June 29, 2014}
+
+We are happy to announce the release of LilyPond 2.19.9. This
+release includes a number of 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.18
+version.
+
+@newsEnd
+
+@newsItem
+@subsubheading LilyPond 2.19.8 released @emph{June 15, 2014}
+
+We are happy to announce the release of LilyPond 2.19.8. This
+release includes a number of 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.18
+version.
+
+@newsEnd
+
@newsItem
@subsubheading LilyPond 2.19.7 released @emph{May 25, 2014}
@newsItem
@subsubheading February 26, 2005
-The @uref{http://lsr.dsi.unimi.it/,LilyPond Snippet
+The @uref{http://lsr.di.unimi.it/,LilyPond Snippet
Repository (LSR)} is a searchable database of LilyPond code
snippets. You can add snippets too, so join the LSR project, and
contribute creative ideas for using LilyPond.
and add your own!
@example
-@uref{http://lsr.dsi.unimi.it}
+@uref{http://lsr.di.unimi.it}
@end example
Particularly instructive examples from LSR are included in our
针对非英语读者的翻译情况。
@item
-@uref{http://lsr@/.dsi@/.unimi@/.it,LilyPond Snippet Repository}:
+@uref{http://lsr@/.di@/.unimi@/.it,LilyPond Snippet Repository}:
用户创建的例子、窍门和秘诀。
@item
@subheading 片断 Snippets
这里显示从
-@uref{http://lsr@/.dsi@/.unimi@/.it,
+@uref{http://lsr@/.di@/.unimi@/.it,
LilyPond 片断库 (LilyPond Snippet Repository@comma{} LSR)}
精选出来的一些 LilyPond 片断。所有的片断都属于公有领域。
| build bootstrapping, patches
| for third party programs
|
-|-- Documentation/ Top sources for manuals
+|-- Documentation/ Top sources for most of the manuals
| |
| |
| | INDIVIDUAL CHAPTERS FOR EACH MANUAL:
+| | Note: "Snippets" and "Internals Reference" are
+| | auto-generated during the Documentation Build process.
+| |
| |
| |-- contributor/ Contributor's Guide
| |-- essay/ Essay on automated music engraving
-| |-- extending/ Extending
+| |-- extending/ Extending the functionality of LilyPond
| |-- learning/ Learning Manual
| |-- notation/ Notation Reference
-| |-- usage/ Usage
+| |-- usage/ Runnning the programs that come with LilyPond
| |-- web/ The website
| |
| |
| | * individual chapters for each manual
| | 2) a texidocs/ directory for snippet translations
| |
+| |-- ca/ Catalan
| |-- cs/ Czech
| |-- de/ German
| |-- es/ Spanish
| |-- pictures/ Images used (eps/jpg/png/svg)
| | `-- pdf/ (pdf)
| |-- po/ Translated build/maintenance scripts
-| |-- snippets/ Auto-generated .ly snippets (from the LSR)
+| |-- snippets/ Auto-generated from the LSR and from ./new/
| | `-- new/ Snippets too new for the LSR
| `-- topdocs/ AUTHORS, INSTALL, README
|
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=19
-PATCH_LEVEL=9
+PATCH_LEVEL=11
MY_PATCH_LEVEL=
VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.8
+VERSION_DEVEL=2.19.10
a b c:7
\once \override ChordName.text = #"foo"
d
-}
\ No newline at end of file
+}
-\version "2.17.6"
+\version "2.19.8"
\header {
texidoc="
Dots indicating fingerings can be changed in location,
size, and coloring.
+It is possible to parenthesize a single dot. The color
+of the paranthesis may be taken from dot or default.
+A possible collision between parathesis and fret-label-
+indication can be resolved by an override for
+@code{fret-label-horizontal-offset} in @code{fret-diagram-details}.
"
}
<<
\chords {
+ c1 |
+ c1 |
c1 |
c1 |
c1 |
(place-fret 1 3 1)
(barre 5 1 3))}
- }
->>
+ %% C major for guitar, verbose style
+ \once \override TextScript.size = #1.4
+ c'1 ^\markup {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1 blue)
+ (place-fret 4 5 2 red parenthesized)
+ (place-fret 3 5 3)
+ (place-fret 2 5 4 red)
+ (place-fret 1 3 1 blue parenthesized)
+ (barre 5 1 3))}
+ %% C major for guitar, verbose style
+ %% larger size and dot-radius
+ %% different dot-colors
+ %% parenthesizing single dots, with different paren-color
+ %% horizontal moving fret-label-indication
+ \once \override TextScript.size = #1.5
+ \once \override TextScript.fret-diagram-details.dot-radius = #0.4
+ \once \override TextScript.fret-diagram-details.fret-label-horizontal-offset = #0.2
+ c'1 ^\markup {
+ \fret-diagram-verbose
+ #'((mute 6)
+ (place-fret 5 3 1 blue)
+ (place-fret 4 5 2 red parenthesized default-paren-color)
+ (place-fret 3 5 3)
+ (place-fret 2 5 4 red)
+ (place-fret 1 3 1 blue parenthesized)
+ (barre 5 1 3))}
+ }
+>>
-\version "2.17.6"
+\version "2.19.8"
\header {
texidoc="
c1 |
c1 |
c1 |
+ c1 |
c1
}
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))}
- %% dot color inversion, white on black
+ %% C major for guitar, verbose style
+ %% dot color inversion, white on black
\once \override TextScript.fret-diagram-details.dot-color = #'black
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))}
- %% dot color inversion, black on white
+ %% C major for guitar, verbose style
+ %% dot color inversion, black on white
\once \override TextScript.fret-diagram-details.dot-color = #'white
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 2 5 4)
(place-fret 1 3 1)
(barre 5 1 3))}
+ %% C major for guitar, verbose style
+ %% dot color inversion, global setting and per-dot
+ \once \override TextScript.fret-diagram-details.dot-color = #'grey
+ \once \override TextScript.size = #1.4
+ c' ^\markup {
+ \fret-diagram-verbose #'((mute 6)
+ (place-fret 5 3 1 inverted)
+ (place-fret 4 5 2 red)
+ (place-fret 3 5 3 inverted)
+ (place-fret 2 5 4 red inverted)
+ (place-fret 1 3 1)
+ (barre 5 1 3))}
}
>>
-
-
-\version "2.17.6"
+\version "2.19.8"
\header {
texidoc="
(barre 5 1 3))}
%% C major for guitar, verbose style
- \override TextScript.fret-diagram-details.label-dir = #LEFT
- \override TextScript.fret-diagram-details.number-type = #'roman-upper
+ \override TextScript.fret-diagram-details.label-dir = #LEFT
+ \override TextScript.fret-diagram-details.number-type = #'roman-upper
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
(place-fret 5 3 1)
%% C major for guitar, verbose style
\revert TextScript.fret-diagram-details.label-dir
- \override TextScript.fret-diagram-details.fret-label-font-mag = #0.4
- \override TextScript.fret-diagram-details.number-type = #'arabic
+ \override TextScript.fret-diagram-details.fret-label-font-mag = #0.4
+ \override TextScript.fret-diagram-details.number-type = #'arabic
\once \override TextScript.fret-diagram-details.fret-label-vertical-offset = #0.25
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
%% C major for guitar, verbose style
\revert TextScript.fret-diagram-details.label-dir
\once \override TextScript.fret-diagram-details.number-type = #'custom
+ \once \override TextScript.fret-diagram-details.fret-label-horizontal-offset = #0.5
\once \override TextScript.fret-diagram-details.fret-label-custom-format = #"~d°"
c' ^\markup {
\fret-diagram-verbose #'((mute 6)
}
>>
-
-
--- /dev/null
+\version "2.19.9"
+
+\header {
+ texidoc = "Alignment of lyrics, dynamics, textscripts and articulations
+attached to chords with suspended notes doesn't depend on input order.
+All these items are aligned on the \"main\" notehead (the one at the
+end of the stem)."
+}
+
+<<
+ \new Staff {
+ <b' c''>2 s
+ <b' c''>\f s
+ <b' c''>^"Text" s
+ <b' c''>-! s
+ }
+ \addlyrics { blah }
+ \new Staff {
+ <c'' b'>2 s
+ <c'' b'>\f s
+ <c'' b'>^"Text" s
+ <c'' b'>-! s
+ }
+ \addlyrics { blah }
+>>
\header {
- texidoc ="Lyric syllables without note attachment are not
-centered. Centering may cause unintended effects when the
-paper column is very wide."
+ texidoc ="Lyric syllables without note attachment are
+aligned correctly even if the paper column is very wide."
}
\layout{ ragged-right = ##t }
\new Lyrics \lyricmode {
\skip 8
\skip 8
- x8
+ xx8
x8
}
>>
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Dot size and beamlet length should be scaled along
+with notation size when using the @code{\magnifyMusic} command."
+}
+
+\score {
+ \new Voice {
+ \omit Staff.TimeSignature
+ \time 7/4
+ <<
+ { \repeat unfold 7 \relative { g'8.[ g16] } }
+ {
+ \magnifyMusic 0.50 s4
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+ }
+ >>
+ }
+ \addlyrics {
+ "50%" _ _ _ _ _
+ "100%" _ _ _ _ _
+ "200%" _
+ }
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Laissez vibrer ties should be scaled along with
+notation size when using the @code{\magnifyMusic} command. They
+can get thicker than the default, but not thinner."
+}
+
+template = {
+ \omit Staff.TimeSignature
+ \time 7/2
+ \magnifyMusic 0.50 s2
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff \new Voice = "upper" <<
+ \template
+ \repeat unfold 7 { g'4\laissezVibrer \hide Rest r4 }
+ >>
+ \new Lyrics \with {
+ \override VerticalAxisGroup.staff-affinity = #DOWN
+ } \lyricsto "upper" {
+ " 50%" \skip 1 \skip 1 " 100%" \skip 1 \skip 1 " 200%"
+ }
+ \new Staff \new Voice <<
+ \clef bass
+ \template
+ \repeat unfold 7 { f4\laissezVibrer \hide Rest r4 }
+ >>
+ >>
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Phrasing slurs should be scaled along with notation
+size when using the @code{\magnifyMusic} command. They can get
+thicker than the default, but not thinner."
+}
+
+\score {
+ \new Voice {
+ \omit Staff.TimeSignature
+ \time 7/8
+ <<
+ { \repeat unfold 7 \relative { g'32[\( a b c\)] } }
+ {
+ \magnifyMusic 0.50 s8
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+ }
+ >>
+ }
+ \addlyrics {
+ "50%" _ _ _ _ _ _ _ _ _ _ _
+ "100%" _ _ _ _ _ _ _ _ _ _ _
+ "200%" _ _ _
+ }
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Repeat ties should be scaled along with notation size
+when using the @code{\magnifyMusic} command. They can get thicker
+than the default, but not thinner."
+}
+
+template = {
+ \omit Staff.TimeSignature
+ \time 7/2
+ \magnifyMusic 0.50 s2
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff \new Voice = "upper" <<
+ \template
+ \repeat unfold 7 { g'4\repeatTie \hide Rest r4 }
+ >>
+ \new Lyrics \with {
+ \override VerticalAxisGroup.staff-affinity = #DOWN
+ } \lyricsto "upper" {
+ " 50%" \skip 1 \skip 1 " 100%" \skip 1 \skip 1 " 200%"
+ }
+ \new Staff \new Voice <<
+ \clef bass
+ \template
+ \repeat unfold 7 { f4\repeatTie \hide Rest r4 }
+ >>
+ >>
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Slurs should be scaled along with notation size when
+using the @code{\magnifyMusic} command. They can get thicker than
+the default, but not thinner."
+}
+
+\score {
+ \new Voice {
+ \omit Staff.TimeSignature
+ \time 7/8
+ <<
+ { \repeat unfold 7 \relative { g'32[( a b c)] } }
+ {
+ \magnifyMusic 0.50 s8
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+ }
+ >>
+ }
+ \addlyrics { "50%" _ _ "100%" _ _ "200%" }
+}
\version "2.19.8"
\header {
- texidoc = "Stem lengths, beam spacing/thickness, and horizontal
-spacing should be scaled along with notation size when using the
-@code{\magnifyMusic} command."
+ texidoc = "Stem length/thickness, beam spacing/thickness, and
+horizontal spacing should be scaled along with notation size when
+using the @code{\magnifyMusic} command. Stems can get thicker
+than the default, but not thinner."
}
-\layout { ragged-right = ##t }
-
-\relative <<
- { \repeat unfold 7 { g'32[ a b c] } }
- {
- \magnifyMusic 0.50 { s8_"50%" }
- \magnifyMusic 0.63 { s }
- \magnifyMusic 0.80 { s }
- \magnifyMusic 1.00 { s_"100%" }
- \magnifyMusic 1.26 { s }
- \magnifyMusic 1.59 { s }
- \magnifyMusic 2.00 { s_"200%" }
+\score {
+ \new Voice {
+ \omit Staff.TimeSignature
+ \time 7/8
+ <<
+ { \repeat unfold 7 \relative { g'32[ a b c] } }
+ {
+ \magnifyMusic 0.50 s8
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+ }
+ >>
+ }
+ \addlyrics {
+ "50%" _ _ _ _ _ _ _ _ _ _ _
+ "100%" _ _ _ _ _ _ _ _ _ _ _
+ "200%" _ _ _
}
->>
+}
--- /dev/null
+\version "2.19.8"
+
+\header {
+ texidoc = "Ties should be scaled along with notation size when
+using the @code{\magnifyMusic} command. They can get thicker than
+the default, but not thinner."
+}
+
+template = {
+ \omit Staff.TimeSignature
+ \time 7/8
+ \magnifyMusic 0.50 s8
+ \magnifyMusic 0.63 s
+ \magnifyMusic 0.80 s
+ \magnifyMusic 1.00 s
+ \magnifyMusic 1.26 s
+ \magnifyMusic 1.59 s
+ \magnifyMusic 2.00 s
+}
+
+\score {
+ \new StaffGroup <<
+ \new Staff \new Voice = "upper" <<
+ \template
+ \repeat unfold 7 { g'32[~ g' a'~ a'] }
+ >>
+ \new Staff \new Voice <<
+ \template
+ \repeat unfold 7 { \tieUp g'32[~ g' a'~ a'] }
+ >>
+ \new Lyrics \with {
+ \override VerticalAxisGroup.staff-affinity = #DOWN
+ } \lyricsto "upper" {
+ "50%" _ _ _ _ _ "100%" _ _ _ _ _ " 200%"
+ }
+ \new Staff \new Voice <<
+ \clef bass
+ \template
+ \repeat unfold 7 { f32[~ f e~ e] }
+ >>
+ \new Staff \new Voice <<
+ \clef bass
+ \template
+ \repeat unfold 7 { \tieDown f32[~ f e~ e] }
+ >>
+ >>
+}
--- /dev/null
+\version "2.19.11"
+
+\header {
+ texidoc = "Bar line thickness and spacing should be scaled along
+with notation size when using the @code{\magnifyStaff} command."
+}
+
+\paper {
+ score-system-spacing = #'((padding . 4))
+}
+
+example =
+#(define-music-function (parser location mag) (positive?)
+ #{
+ \new Staff \with {
+ \magnifyStaff #mag
+ instrumentName = \markup {
+ \fontsize #(+ 3 (- (magnification->font-size mag)))
+ #(format #f "~,2f" mag)
+ }
+ } {
+ \omit Staff.Clef
+ \omit Staff.TimeSignature
+ s4 \bar "|"
+ s4 \bar ":|.|:"
+ s4 \bar ":|.S.|:"
+ s4 \bar "|."
+ }
+ #})
+
+\example 0.50
+\example 1.00
+\example 2.00
--- /dev/null
+\version "2.19.11"
+
+\header {
+ texidoc = "Dot size and beamlet length should be scaled along
+with notation size when using the @code{\magnifyStaff} command."
+}
+
+music = { a'8.[ a'16] }
+{
+ \magnifyStaff 0.50 \music \music \bar "|"
+ \magnifyStaff 0.71 \music \bar "|"
+ \magnifyStaff 1.00 \music \bar "|"
+ \magnifyStaff 1.41 \music \bar "|"
+ \magnifyStaff 2.00 \music \bar "|"
+} \addlyrics {
+ "0.50 " _ _ _
+ "0.71 " _
+ "1.00 " _
+ "1.41 " _
+ "2.00 " _
+}
--- /dev/null
+\version "2.19.11"
+
+\header {
+ texidoc = "@code{space-alist} values should be scaled along
+with notation size when using the @code{\magnifyStaff} command."
+}
+
+\paper {
+ indent = 0
+ ragged-right = ##t
+ system-system-spacing = #'((padding . 3))
+ score-markup-spacing = #'((padding . 6))
+}
+
+example =
+#(define-music-function (parser location mag) (positive?)
+ #{
+ \new Staff \with {
+ \magnifyStaff #mag
+ \consists "Custos_engraver"
+ \override Custos.style = #'mensural
+ } \new Voice \with {
+ \consists "Ambitus_engraver"
+ } {
+ \omit Score.BarNumber
+ \key d \major
+ d''2 \breathe d'' |
+ \break
+ g'1 |
+ \clef treble
+ \key c \major
+ g'1 |
+ }
+ #})
+
+\markup "0.50:" \example 0.50
+\markup "1.00:" \example 1.00
+\markup "2.00:" \example 2.00
--- /dev/null
+\version "2.19.11"
+
+\header {
+ texidoc = "Staff line thickness should be scaled along with
+staff size when using the @code{\magnifyStaff} command. Staff
+lines can get thicker than the default, but not thinner."
+}
+
+{
+ \magnifyStaff 0.50 b'1
+ \magnifyStaff 0.71 b'1
+ \magnifyStaff 1.00 b'1
+ \magnifyStaff 1.41 b'1
+ \magnifyStaff 2.00 b'1
+} \addlyrics {
+ " 0.50 "
+ " 0.71 "
+ " 1.00 "
+ " 1.41 "
+ " 2.00 "
+}
ges' aes' a' b'
}
motif = {
- c'8. ees'16 ges'8. a'16
- b'8. aes'16 f'8. d'16
+ c'8. ees'16( ges'8. a'16
+ b'8.) aes'16 f'8. d'16
}
\score {
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 1.0 Partwise//EN"
"http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise>
- <movement-title>Various piches and interval sizes</movement-title>
+ <movement-title>Various pitches and interval sizes</movement-title>
<identification>
<miscellaneous>
<miscellaneous-field name="description">All pitch intervals in ascending
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="2">
<note>
<pitch>
<step>C</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="3">
<note>
<pitch>
<step>D</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="4">
<note>
<pitch>
<step>D</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="5">
<note>
<pitch>
<step>D</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="6">
<note>
<pitch>
<step>E</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="7">
<note>
<pitch>
<step>E</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="8">
<note>
<pitch>
<step>E</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="9">
<note>
<pitch>
<step>F</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="10">
<note>
<pitch>
<step>F</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="11">
<note>
<pitch>
<step>F</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="12">
<note>
<pitch>
<step>G</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="13">
<note>
<pitch>
<step>G</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="14">
<note>
<pitch>
<step>G</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="15">
<note>
<pitch>
<step>A</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="16">
<note>
<pitch>
<step>A</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="17">
<note>
<pitch>
<step>A</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="18">
<note>
<pitch>
<step>B</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="19">
<note>
<pitch>
<step>B</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="20">
<note>
<pitch>
<step>B</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="21">
<note>
<pitch>
<step>C</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="22">
<note>
<pitch>
<step>C</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="23">
<note>
<pitch>
<step>C</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="24">
<note>
<pitch>
<step>D</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="25">
<note>
<pitch>
<step>D</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="26">
<note>
<pitch>
<step>D</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="27">
<note>
<pitch>
<step>E</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="28">
<note>
<pitch>
<step>E</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="29">
<note>
<pitch>
<step>E</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="30">
<note>
<pitch>
<step>F</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="31">
<note>
<pitch>
<step>F</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="32">
<note>
<pitch>
<step>F</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="33">
<note>
<pitch>
<step>G</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="34">
<note>
<pitch>
<step>G</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="35">
<note>
<pitch>
<step>G</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="36">
<note>
<pitch>
<step>A</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="37">
<note>
<pitch>
<step>A</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="38">
<note>
<pitch>
<step>A</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
+ </measure>
+ <measure number="39">
<note>
<pitch>
<step>B</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
+ </measure>
+ <measure number="40">
<note>
<pitch>
<step>B</step>
<voice>1</voice>
<type>quarter</type>
</note>
+ </measure>
+ <measure number="41">
<note>
<pitch>
<step>B</step>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>sharp</accidental>
</note>
<note>
<pitch>
<duration>1</duration>
<voice>1</voice>
<type>quarter</type>
+ <accidental>flat</accidental>
</note>
</measure>
</part>
<part id="P1">
<measure number="1">
<attributes>
- <divisions>32</divisions>
+ <divisions>64</divisions>
<key>
<fifths>0</fifths>
<mode>major</mode>
</attributes>
<note>
<rest/>
- <duration>128</duration>
+ <duration>256</duration>
<voice>1</voice>
+ <type>whole</type>
</note>
</measure>
<!--=======================================================-->
<measure number="2">
<note>
<rest/>
- <duration>128</duration>
+ <duration>256</duration>
<voice>1</voice>
+ <type>whole</type>
</note>
</measure>
<!--=======================================================-->
<measure number="3">
<note>
<rest/>
- <duration>128</duration>
+ <duration>256</duration>
<voice>1</voice>
<type>whole</type>
</note>
<measure number="4">
<note>
<rest/>
- <duration>64</duration>
+ <duration>128</duration>
<voice>1</voice>
<type>half</type>
</note>
<note>
<rest/>
- <duration>32</duration>
+ <duration>64</duration>
<voice>1</voice>
<type>quarter</type>
</note>
<note>
<rest/>
- <duration>16</duration>
+ <duration>32</duration>
<voice>1</voice>
<type>eighth</type>
</note>
<note>
<rest/>
- <duration>8</duration>
+ <duration>16</duration>
<voice>1</voice>
<type>16th</type>
</note>
<note>
<rest/>
- <duration>4</duration>
+ <duration>8</duration>
<voice>1</voice>
<type>32nd</type>
</note>
<note>
<rest/>
- <duration>2</duration>
+ <duration>4</duration>
<voice>1</voice>
<type>64th</type>
</note>
<note>
<rest/>
- <duration>1</duration>
+ <duration>2</duration>
<voice>1</voice>
<type>128th</type>
</note>
<note>
<rest/>
- <duration>1</duration>
+ <duration>2</duration>
<voice>1</voice>
<type>128th</type>
</note>
<measure number="5">
<note>
<rest/>
- <duration>96</duration>
+ <duration>192</duration>
<voice>1</voice>
<type>half</type>
<dot/>
</note>
<note>
<rest/>
- <duration>32</duration>
+ <duration>64</duration>
<voice>1</voice>
<type>quarter</type>
</note>
<measure number="6">
<note>
<rest/>
- <duration>48</duration>
+ <duration>64</duration>
+ <voice>1</voice>
+ <type>quarter</type>
+ </note>
+ <note>
+ <rest/>
+ <duration>96</duration>
<voice>1</voice>
<type>quarter</type>
<dot/>
</note>
<note>
<rest/>
- <duration>24</duration>
+ <duration>48</duration>
<voice>1</voice>
<type>eighth</type>
<dot/>
</note>
<note>
<rest/>
- <duration>12</duration>
+ <duration>24</duration>
<voice>1</voice>
<type>16th</type>
<dot/>
</note>
<note>
<rest/>
- <duration>6</duration>
+ <duration>12</duration>
<voice>1</voice>
<type>32nd</type>
<dot/>
</note>
<note>
<rest/>
- <duration>3</duration>
+ <duration>6</duration>
<voice>1</voice>
<type>64th</type>
<dot/>
</note>
<note>
<rest/>
- <duration>2</duration>
+ <duration>3</duration>
+ <voice>1</voice>
+ <type>128th</type>
+ <dot/>
+ </note>
+ <note>
+ <rest/>
+ <duration>3</duration>
<voice>1</voice>
<type>128th</type>
<dot/>
\version "2.16.0"
+#(define (t->m t)
+ "Return the current moment of translator object @var{t}."
+ (ly:context-current-moment (ly:translator-context t)))
+
+engraver_demo =
+#(make-engraver
+ ((initialize translator)
+ (format 1 "\n\n~16a: (initialize)\n" (t->m translator)))
+ ((start-translation-timestep translator)
+ (format 1 "~16a: (start-translation-timestep)\n" (t->m translator)))
+ (listeners
+ ((rest-event engraver event)
+ (let ((grob (ly:engraver-make-grob engraver 'TextScript event)))
+ (ly:grob-set-property! grob 'text "hi")
+ (format 1 "~16a: detected this rest event: ~a\n~16a: created this grob: ~a\n"
+ (t->m engraver) event (t->m engraver) grob))))
+ (acknowledgers
+ ((note-head-interface engraver grob source-engraver)
+ (format 1 "~16a: saw ~a coming from ~a\n"
+ (t->m engraver) grob source-engraver)))
+ (end-acknowledgers
+ ((beam-interface engraver grob source-engraver)
+ (format 1 "~16a: saw end of ~a coming from ~a\n"
+ (t->m engraver) grob source-engraver)))
+ ((process-music translator)
+ (format 1 "~16a: (process-music)\n" (t->m translator)))
+ ((process-acknowledged translator)
+ (format 1 "~16a: (process-acknowledged)\n" (t->m translator)))
+ ((stop-translation-timestep translator)
+ (format 1 "~16a: (stop-translation-timestep)\n" (t->m translator)))
+ ((finalize translator)
+ (format 1 "~16a: (finalize)\n" (t->m translator))))
+
\layout {
\context {
\Voice
\consists
- #(make-engraver
- ((initialize trans)
- (display (list "initialize"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port)))
- ((start-translation-timestep trans)
- (display (list "start-trans"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port)))
- (listeners
- ((rest-event engraver event)
- (let*
- ((x (ly:engraver-make-grob engraver 'TextScript event)))
- (display (list "caught event" event "\ncreate:\n" x "\n") (current-error-port))
- (ly:grob-set-property! x 'text "hi"))))
- (acknowledgers
- ((note-head-interface engraver grob source-engraver)
- (display (list "saw head: " grob " coming from " source-engraver) (current-error-port))))
- (end-acknowledgers
- ((beam-interface engraver grob source-engraver)
- (display (list "saw end of beam: " grob " coming from " source-engraver) (current-error-port))))
- ((process-music trans)
- (display (list "process-music"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port)))
- ((process-acknowledged trans)
- (display (list "process-acknowledged"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port)))
- ((stop-translation-timestep trans)
- (display (list "stop-trans"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port)))
- ((finalize trans)
- (display (list "finalize"
- (ly:context-current-moment
- (ly:translator-context trans)) "\n") (current-error-port))))
- }}
-
+ \engraver_demo
+ }
+}
\relative c' {
c8[ r c]
\header {
-
texidoc = "Text and trill spanners are attached to note columns, so
attachments in other staves have no effect on them."
-
- }
+}
\layout {
ragged-right = ##t
- }
+}
\version "2.17.6"
<<
- \new Staff {
+ \new Staff {
\override TextSpanner.bound-details.left.text = "*"
- c'16 \startTrillSpan c' c' c' \stopTrillSpan
- c'16 \startTextSpan c' c' c' \stopTextSpan
- }
- \new Staff {
- \override TextScript.self-alignment-X = #RIGHT
- \repeat unfold 2 {c'4 _ \markup { "FAT" } }
- }
+ c'16 \startTrillSpan c' c' c' \stopTrillSpan
+ c'16 \startTextSpan c' c' c' \stopTextSpan
+ }
+ \new Staff {
+ \override TextScript.self-alignment-X = #RIGHT
+ \repeat unfold 2 {c'4 _ \markup { "LONG" } }
+ }
>>
--- /dev/null
+\version "2.19.9"
+#(set-global-staff-size 30)
+
+\header {
+ texidoc = "Lyrics without an @code{associatedVoice} should align properly.
+If there are notes in the @code{PaperColumn}, they should align to them,
+and when there are no notes, they should align relative to the
+@code{PaperColumn} itself (represented with blue @code{GridLines} here)"
+}
+
+\paper {
+ ragged-right = ##f
+}
+
+\layout {
+ \context {
+ \Voice
+ \consists "Grid_point_engraver"
+ gridInterval = #(ly:make-moment 1/4)
+ \override GridPoint.Y-extent = #'(-1 . 3)
+ }
+ \context {
+ \Staff
+ \consists "Grid_line_span_engraver"
+ \override GridLine.color = #blue
+ }
+}
+
+music = <<
+ \new Staff <<
+ \new Voice { s1*3 } % needed for gridLines
+ \new Voice { d'2 d' <f' g'>1 s1 }
+ >>
+ \new Lyrics { \lyricmode { foo2 bar mmmm1 a2 bom } }
+>>
+
+\markup "default (centered):"
+\music
+
+\markup "right-aligned:"
+{
+ \override Score.LyricText.self-alignment-X = #RIGHT
+ \music
+}
ADD_INTERFACE (Align_interface,
"Order grobs from top to bottom, left to right, right to left"
" or bottom to top. For vertical alignments of staves, the"
- " @code{break-system-details} of the left"
+ " @code{line-break-system-details} of the left"
" @rinternals{NonMusicalPaperColumn} may be set to tune"
" vertical spacing.",
DECLARE_TRANSLATOR_LISTENER (note);
DECLARE_TRANSLATOR_LISTENER (rest);
private:
- Item *chord_name_;
vector<Stream_event *> notes_;
Stream_event *rest_event_;
Chord_name_engraver::Chord_name_engraver ()
{
- chord_name_ = 0;
rest_event_ = 0;
}
void
Chord_name_engraver::process_music ()
{
- if (!rest_event_ && !notes_.size ())
- return;
-
- chord_name_ = make_item ("ChordName",
- rest_event_ ? rest_event_->self_scm () : notes_[0]->self_scm ());
-
- SCM maybe_markup = chord_name_->get_property_data ("text");
-
- bool make_markup = !(Text_interface::is_markup (maybe_markup)
- || ly_is_procedure (maybe_markup));
+ if (!rest_event_ && notes_.empty ())
+ return;
SCM markup;
-
- if (rest_event_ && !make_markup) { }
- else if (rest_event_)
+ SCM bass = SCM_EOL;
+ SCM inversion = SCM_EOL;
+ SCM pitches = SCM_EOL;
+ Item *chord_name = 0;
+
+ // rest events present a hen-and-egg problem with regard to
+ // overriding the text property of the ChordName grob since we
+ // cannot create a ChordName grob, look at its text property and, if
+ // not set, use noChordSymbol to decide whether we should not have
+ // created the grob in the first place.
+ if (rest_event_)
{
SCM no_chord_markup = get_property ("noChordSymbol");
if (!Text_interface::is_markup (no_chord_markup))
return;
markup = no_chord_markup;
+ chord_name = make_item ("ChordName", rest_event_->self_scm ());
+ chord_name->set_property ("text", markup);
}
else
{
- SCM bass = SCM_EOL;
- SCM inversion = SCM_EOL;
- SCM pitches = SCM_EOL;
-
- Stream_event *inversion_event = 0;
- for (vsize i = 0; i < notes_.size (); i++)
+ chord_name = make_item ("ChordName", notes_[0]->self_scm ());
+ // We cannot actually delay fetching the text property in case
+ // it is a callback since we need to compare the generated
+ // markups for the sake of chordChanges
+ markup = chord_name->get_property ("text");
+ if (!Text_interface::is_markup (markup))
{
- Stream_event *n = notes_[i];
- SCM p = n->get_property ("pitch");
- if (!unsmob_pitch (p))
- continue;
-
- if (n->get_property ("inversion") == SCM_BOOL_T)
+ for (vsize i = 0; i < notes_.size (); i++)
{
- inversion_event = n;
- inversion = p;
+ Stream_event *n = notes_[i];
+ SCM p = n->get_property ("pitch");
+ if (!unsmob_pitch (p))
+ continue;
+
+ if (n->get_property ("bass") == SCM_BOOL_T)
+ bass = p;
+ else
+ {
+ SCM oct = n->get_property ("octavation");
+ if (scm_is_number (oct))
+ {
+ Pitch orig = unsmob_pitch (p)->transposed (Pitch (-scm_to_int (oct), 0));
+ pitches = scm_cons (orig.smobbed_copy (), pitches);
+ }
+ else
+ pitches = scm_cons (p, pitches);
+ if (n->get_property ("inversion") == SCM_BOOL_T)
+ {
+ inversion = p;
+ if (!scm_is_number (oct))
+ programming_error ("inversion does not have original pitch");
+ }
+ }
}
- else if (n->get_property ("bass") == SCM_BOOL_T)
- bass = p;
- else
- pitches = scm_cons (p, pitches);
- }
- if (inversion_event)
- {
- SCM oct = inversion_event->get_property ("octavation");
- if (scm_is_number (oct))
- {
- Pitch *p = unsmob_pitch (inversion_event->get_property ("pitch"));
- int octavation = scm_to_int (oct);
- Pitch orig = p->transposed (Pitch (-octavation, 0, 0));
+ pitches = scm_sort_list (pitches, Pitch::less_p_proc);
- pitches = scm_cons (orig.smobbed_copy (), pitches);
+ SCM name_proc = get_property ("chordNameFunction");
+ markup = scm_call_4 (name_proc, pitches, bass, inversion,
+ context ()->self_scm ());
+ if (!Text_interface::is_markup (markup))
+ {
+ // Ugh, we created a grob, now we better populate it.
+ // Use an empty string.
+ markup = scm_string (SCM_EOL);
}
- else
- programming_error ("inversion does not have original pitch");
+ chord_name->set_property ("text", markup);
}
-
- pitches = scm_sort_list (pitches, Pitch::less_p_proc);
-
- SCM name_proc = get_property ("chordNameFunction");
- if (make_markup)
- markup = scm_call_4 (name_proc, pitches, bass, inversion,
- context ()->self_scm ());
}
- /*
- Ugh.
- */
- if (make_markup)
- chord_name_->set_property ("text", markup);
- else if (Text_interface::is_markup (maybe_markup))
- markup = maybe_markup;
SCM chord_changes = get_property ("chordChanges");
SCM last_chord = get_property ("lastChord");
- if (to_boolean (chord_changes) && scm_is_pair (last_chord)
- && ly_is_equal (markup, last_chord))
- chord_name_->set_property ("begin-of-line-visible", SCM_BOOL_T);
+ if (to_boolean (chord_changes) && ly_is_equal (markup, last_chord))
+ chord_name->set_property ("begin-of-line-visible", SCM_BOOL_T);
context ()->set_property ("lastChord", markup);
}
void
Chord_name_engraver::stop_translation_timestep ()
{
- chord_name_ = 0;
notes_.clear ();
rest_event_ = 0;
}
}
Audio_note *p = new Audio_note (*pit, len,
- tie_event, Pitch (0, 0, 0), velocity);
+ tie_event, Pitch (0, 0), velocity);
Audio_element_info info (p, n);
announce_element (info);
}
{
extract_grob_set (info.grob (), "note-heads", heads);
/*
- Spacing constraints may require dynamics to be aligned on rests,
+ Spacing constraints may require dynamics to be attached to rests,
so check for a rest if this note column has no note heads.
*/
Grob *x_parent = (heads.size ()
- ? heads[0]
+ ? info.grob ()
: unsmob_grob (info.grob ()->get_object ("rest")));
if (x_parent)
- {
- script_->set_parent (x_parent, X_AXIS);
- Self_alignment_interface::set_center_parent (script_, X_AXIS);
- }
+ script_->set_parent (x_parent, X_AXIS);
}
if (current_spanner_ && !current_spanner_->get_bound (LEFT))
fingerings for chords need different settings.
*/
Side_position_interface::set_axis (fingering, Y_AXIS);
- Self_alignment_interface::set_align_self (fingering, X_AXIS);
- Self_alignment_interface::set_center_parent (fingering, X_AXIS);
+ Self_alignment_interface::set_aligned_on_parent (fingering, X_AXIS);
// Hmm
int priority = 200;
0, 0, 0, (),
"Return hash of protected objects.")
{
+ //scm_protects is available only in Guile versions before 2.1.
+#if SCM_MAJOR_VERSION < 2 || SCM_MAJOR_VERSION == 2 && SCM_MINOR_VERSION < 1
return scm_protects;
+#else
+ return programming_error ("ly:protects is not supported in Guile 2.1");
+#endif
}
LY_DEFINE (ly_gettext, "ly:gettext",
inline SCM ly_append2 (SCM x1, SCM x2)
{
- return scm_append (scm_listify (x1, x2, SCM_UNDEFINED));
+ return scm_append (scm_list_2 (x1, x2));
}
inline SCM ly_append3 (SCM x1, SCM x2, SCM x3)
{
- return scm_append (scm_listify (x1, x2, x3, SCM_UNDEFINED));
+ return scm_append (scm_list_3 (x1, x2, x3));
}
inline SCM ly_append4 (SCM x1, SCM x2, SCM x3, SCM x4)
{
- return scm_append (scm_listify (x1, x2, x3, x4, SCM_UNDEFINED));
+ return scm_append (scm_list_4 (x1, x2, x3, x4));
}
/*
static Grob *accidentals (Grob *me);
static Slice head_positions_interval (Grob *me);
static Grob *first_head (Grob *me);
+ static Interval calc_main_heads_extent (Grob *me);
static Grob *get_rest (Grob *me);
static void set_stem (Grob *me, Grob *);
static void add_head (Grob *me, Grob *);
static bool is_extraneous_column_from_ligature (Grob *);
static Real minimum_distance (Grob *l, Grob *r);
static Interval break_align_width (Grob *me, SCM align_sym);
+ static Interval get_interface_extent (Grob *column, SCM iface, Axis a);
};
#endif // PAPER_COLUMN_HH
int get_notename () const;
Rational get_alteration () const;
- Pitch (int octave, int notename, Rational accidental);
- Pitch (int octave, int notename);
+ Pitch (int octave, int notename, Rational accidental = 0);
Pitch ();
Pitch transposed (Pitch) const;
static SCM aligned_on_self (Grob *me, Axis a, bool pure, int start, int end);
static SCM centered_on_object (Grob *me, Axis a);
static SCM aligned_on_parent (Grob *me, Axis a);
- static void set_center_parent (Grob *me, Axis a);
- static void set_align_self (Grob *me, Axis a);
+ static void set_aligned_on_parent (Grob *me, Axis a);
DECLARE_SCHEME_CALLBACK (x_aligned_on_self, (SCM element));
DECLARE_SCHEME_CALLBACK (y_aligned_on_self, (SCM element));
DECLARE_SCHEME_CALLBACK (pure_y_aligned_on_self, (SCM element, SCM start, SCM end));
- DECLARE_SCHEME_CALLBACK (centered_on_note_columns, (SCM element));
DECLARE_SCHEME_CALLBACK (centered_on_x_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (centered_on_y_parent, (SCM element));
- DECLARE_SCHEME_CALLBACK (x_centered_on_y_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (aligned_on_x_parent, (SCM element));
DECLARE_SCHEME_CALLBACK (aligned_on_y_parent, (SCM element));
};
context ()->set_property ("keyAlterations", SCM_EOL);
context ()->set_property ("lastKeyAlterations", SCM_EOL);
- Pitch p (0, 0, 0);
+ Pitch p;
context ()->set_property ("tonic", p.smobbed_copy ());
}
scm_to_int (scm_caar (pitchlist)),
ly_scm2rational (scm_cdar (pitchlist)));
- Pitch c_do (0, 0, 0);
+ Pitch c_do;
SCM c_pitchlist
= ly_transpose_key_alist (pitchlist,
if (head)
{
- text_->set_parent (head, X_AXIS);
+ text_->set_parent (head->get_parent(X_AXIS), X_AXIS);
if (melisma_busy (voice)
&& !to_boolean (get_property ("ignoreMelismata")))
text_->set_property ("self-alignment-X",
get_property ("lyricMelismaAlignment"));
}
- else
- {
- text_->warning (_ ("Lyric syllable does not have note."
- " Use \\lyricsto or associatedVoice."));
- text_->set_property ("X-offset", scm_from_int (0));
- }
}
last_text_ = text_;
{
Side_position_interface::add_support (numbers_[i], mmrest_);
numbers_[i]->set_parent (mmrest_, Y_AXIS);
+ numbers_[i]->set_parent (mmrest_, X_AXIS);
}
start_measure_
Side_position_interface::add_support (f,
unsmob_grob (ft.head_->get_object ("dot")));
- Self_alignment_interface::set_align_self (f, Y_AXIS);
- Self_alignment_interface::set_center_parent (f, Y_AXIS);
+ Self_alignment_interface::set_aligned_on_parent (f, Y_AXIS);
Side_position_interface::set_axis (f, X_AXIS);
f->set_property ("direction", scm_from_int (hordir));
f->set_property ("script-priority",
scm_from_int (finger_prio + d * ft.position_));
- Self_alignment_interface::set_align_self (f, X_AXIS);
- Self_alignment_interface::set_center_parent (f, X_AXIS);
+ Self_alignment_interface::set_aligned_on_parent (f, X_AXIS);
Side_position_interface::set_axis (f, Y_AXIS);
f->set_property ("direction", scm_from_int (d));
return st ? Stem::first_head (st) : 0;
}
+/*
+ Return extent of the noteheads in the "main column",
+ i.e. excluding any suspended noteheads.
+*/
+Interval
+Note_column::calc_main_heads_extent (Grob *me)
+{
+ if (get_stem (me))
+ return first_head (me)->extent (me, X_AXIS);
+ else
+ {
+ // no stems => no suspended noteheads.
+ extract_grob_set (me, "note-heads", heads);
+ if (heads.size())
+ return heads[0]->extent (me, X_AXIS);
+ else
+ return Interval (0, 0);
+ }
+}
+
/*
Return the first AccidentalPlacement grob that we find in a note-head.
*/
if (scm_is_vector (shape_vector))
{
SCM scm_tonic = get_property ("tonic");
- Pitch tonic (0, 0, 0);
+ Pitch tonic;
if (unsmob_pitch (scm_tonic))
tonic = *unsmob_pitch (scm_tonic);
#include "text-interface.hh"
/*
- Returns the number of footntoes associated with a given line.
+ Returns the number of footnotes associated with a given line.
*/
vector<Grob *>
return align->extent (p, X_AXIS);
}
+/*
+ Loop through elements of a PaperColumn, find all grobs implementing specified
+ interface and return their combined extent.
+*/
+Interval
+Paper_column::get_interface_extent (Grob *column, SCM iface, Axis a)
+{
+ Interval extent = Interval (0, 0);
+ extract_grob_set (column, "elements", elts);
+
+ for (vsize i = 0; i < elts.size (); i++)
+ if (elts[i]->internal_has_interface (iface))
+ extent.unite (robust_relative_extent (elts[i], elts[i], a));
+
+ return extent;
+}
+
/*
Print a:
- vertical line,
$$ = scm_cons ($4, $3);
else {
$$ = scm_cons (loc_on_music (@3, $1), $3);
- MYBACKUP (LYRIC_ELEMENT, $4, @4);
+ MYBACKUP (SCM_IDENTIFIER, $4, @4);
}
}
| EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup UNSIGNED
if (!scm_is_eq (SCM_INUM0, $2))
{
Pitch p = *unsmob_pitch ($1);
- p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
}
if (!scm_is_eq (SCM_INUM0, $2))
{
Pitch p = *unsmob_pitch ($1);
- p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
}
if (!scm_is_eq (SCM_INUM0, $2))
{
Pitch p = *unsmob_pitch ($1);
- p = p.transposed (Pitch (scm_to_int ($2),0,0));
+ p = p.transposed (Pitch (scm_to_int ($2), 0));
$$ = p.smobbed_copy ();
}
}
percent_counter_->set_bound (LEFT, col);
Side_position_interface::add_support (percent_counter_, percent_);
percent_counter_->set_parent (percent_, Y_AXIS);
+ percent_counter_->set_parent (percent_, X_AXIS);
}
else
percent_counter_ = 0;
Pitch_interval::Pitch_interval ()
{
- at (LEFT) = Pitch (100, 0, 0);
- at (RIGHT) = Pitch (-100, 0, 0);
+ at (LEFT) = Pitch (100, 0);
+ at (RIGHT) = Pitch (-100, 0);
}
bool
Pitch_lexicographic_interval::Pitch_lexicographic_interval ()
{
- at (LEFT) = Pitch (100, 0, 0);
- at (RIGHT) = Pitch (-100, 0, 0);
+ at (LEFT) = Pitch (100, 0);
+ at (RIGHT) = Pitch (-100, 0);
}
bool
LY_DEFINE (ly_pitch_diff, "ly:pitch-diff",
2, 0, 0, (SCM pitch, SCM root),
- "Return pitch @var{delta} such that @var{pitch} transposed by"
- " @var{delta} equals @var{root}.")
+ "Return pitch @var{delta} such that @var{root} transposed by"
+ " @var{delta} equals @var{pitch}.")
{
LY_ASSERT_SMOB (Pitch, pitch, 1);
return centered_on_object (unsmob_grob (smob)->get_parent (X_AXIS), X_AXIS);
}
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_note_columns, 1);
-SCM
-Self_alignment_interface::centered_on_note_columns (SCM smob)
-{
- Item *it = unsmob_item (smob)->get_column ();
- if (!it)
- return scm_from_double (0.0);
-
- extract_grob_set (it, "elements", elts);
- vector<Grob *> ncs;
- Interval centers;
- for (vsize i = 0; i < elts.size (); i++)
- if (Note_column::has_interface (elts[i]))
- centers.add_point (scm_to_double (centered_on_object (elts[i], X_AXIS)));
-
- if (centers.is_empty ())
- return scm_from_double (0.0);
-
- return scm_from_double (centers.center ());
-}
-
MAKE_SCHEME_CALLBACK (Self_alignment_interface, centered_on_y_parent, 1);
SCM
Self_alignment_interface::centered_on_y_parent (SCM smob)
return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), Y_AXIS);
}
-MAKE_SCHEME_CALLBACK (Self_alignment_interface, x_centered_on_y_parent, 1);
-SCM
-Self_alignment_interface::x_centered_on_y_parent (SCM smob)
-{
- return centered_on_object (unsmob_grob (smob)->get_parent (Y_AXIS), X_AXIS);
-}
-
MAKE_SCHEME_CALLBACK (Self_alignment_interface, aligned_on_x_parent, 1);
SCM
Self_alignment_interface::aligned_on_x_parent (SCM smob)
Self_alignment_interface::aligned_on_parent (Grob *me, Axis a)
{
Grob *him = me->get_parent (a);
+ Interval he;
if (Paper_column::has_interface (him))
- return scm_from_double (0.0);
-
- Interval he = him->extent (him, a);
+ /*
+ PaperColumn extents aren't reliable (they depend on size and alignment
+ of PaperColumn's children), so we align on NoteColumn instead.
+ This happens e.g. for lyrics without associatedVoice.
+ */
+ he = Paper_column::get_interface_extent
+ (him, ly_symbol2scm ("note-column-interface"), a);
+ else
+ {
+ if (ly_scm2bool(me->internal_get_property (ly_symbol2scm ("X-align-on-main-noteheads")))
+ && Note_column::has_interface (him))
+ he = Note_column::calc_main_heads_extent(him);
+ else
+ he = him->extent (him, a);
+ }
SCM sym = (a == X_AXIS) ? ly_symbol2scm ("self-alignment-X")
: ly_symbol2scm ("self-alignment-Y");
}
void
-Self_alignment_interface::set_center_parent (Grob *me, Axis a)
-{
- add_offset_callback (me,
- (a == X_AXIS) ? centered_on_x_parent_proc : centered_on_y_parent_proc,
- a);
-}
-
-void
-Self_alignment_interface::set_align_self (Grob *me, Axis a)
+Self_alignment_interface::set_aligned_on_parent (Grob *me, Axis a)
{
add_offset_callback (me,
- (a == X_AXIS) ? x_aligned_on_self_proc : y_aligned_on_self_proc,
+ (a == X_AXIS) ? aligned_on_x_parent_proc : aligned_on_y_parent_proc,
a);
}
/* properties */
"self-alignment-X "
"self-alignment-Y "
+ "X-align-on-main-noteheads "
);
/*
Set the items that this spanner spans. If D == LEFT, we also set the
X-axis parent of THIS to S.
+
+ For example, when a slur crosses a line break, it's broken into two
+ pieces. The second piece shouldn't be positioned relative to the
+ original NoteColumn, but rather to the PaperColumn after the break.
*/
void
Spanner::set_bound (Direction d, Grob *s)
We check for System to prevent the column -> line_of_score
-> column -> line_of_score -> etc situation */
if (d == LEFT && !dynamic_cast<System *> (this))
- set_parent (i, X_AXIS);
+ /*
+ If the X-parent is a spanner, it will be split across linebreaks, too,
+ so we shouldn't have to overwrite it with the bound. Also, we need
+ original parent for alignment.
+ This happens e.g. for MultiMeasureRestNumbers and PercentRepeatCounters.
+ */
+ if (!dynamic_cast <Spanner *> (this->get_parent (X_AXIS)))
+ set_parent (i, X_AXIS);
/*
Signal that this column needs to be kept alive. They need to be
blocking_force_ = -infinity_f;
min_distance_ = length (f);
- distance_ = max (distance_, min_distance_);
update_blocking_force ();
}
LY_DEFINE (ly_staff_symbol_line_thickness, "ly:staff-symbol-line-thickness",
1, 0, 0, (SCM grob),
- "Returns the @code{line-thickness} of the staff associated"
- " with @var{grob}.")
+ "Returns the current staff-line thickness in the staff"
+ " associated with @var{grob}, expressed as a multiple of the"
+ " current staff-space height.")
{
LY_ASSERT_SMOB (Grob, grob, 1);
Grob *g = unsmob_grob (grob);
LY_DEFINE (ly_staff_symbol_staff_space, "ly:staff-symbol-staff-space",
1, 0, 0, (SCM grob),
- "Returns the @code{staff-space} of the staff associated"
- " with @var{grob}.")
+ "Returns the current staff-space height in the staff"
+ " associated with @var{grob}, expressed as a multiple of the"
+ " default height of a staff-space in the traditional"
+ " five-line staff.")
{
LY_ASSERT_SMOB (Grob, grob, 1);
Grob *g = unsmob_grob (grob);
"default-direction "
"details "
"direction "
+ "double-stem-separation "
"duration-log "
"flag "
"french-beaming "
"Create a stream event of class @var{cl} with the given"
" mutable property list.")
{
- LY_ASSERT_TYPE (ly_is_symbol, cl, 1);
+ LY_ASSERT_TYPE (ly_is_pair, cl, 1);
/* should be scm_list_p, but scm_list_p is expensive. */
LY_ASSERT_TYPE (scm_is_pair, proplist, 2);
#include "directional-element-interface.hh"
#include "engraver.hh"
#include "item.hh"
+#include "note-column.hh"
+#include "pointer-group-interface.hh"
#include "side-position-interface.hh"
#include "stream-event.hh"
#include "text-interface.hh"
/**
typeset directions that are plain text.
*/
+
class Text_engraver : public Engraver
{
vector<Stream_event *> evs_;
+ vector<Grob *> scripts_;
public:
TRANSLATOR_DECLARATIONS (Text_engraver);
protected:
void stop_translation_timestep ();
void process_music ();
+ DECLARE_ACKNOWLEDGER (note_column);
DECLARE_TRANSLATOR_LISTENER (text_script);
};
{
for (vsize i = 0; i < evs_.size (); i++)
{
- Stream_event *r = evs_[i];
+ Stream_event *ev = evs_[i];
- // URG: Text vs TextScript
- Item *text = make_item ("TextScript", r->self_scm ());
+ Item *script = make_item ("TextScript", ev->self_scm ());
+ scripts_.push_back (script);
- int priority = robust_scm2int (text->get_property ("script-priority"),
+ int priority = robust_scm2int (script->get_property ("script-priority"),
200);
/* see script-engraver.cc */
priority += i;
- text->set_property ("script-priority", scm_from_int (priority));
+ script->set_property ("script-priority", scm_from_int (priority));
- Direction dir = to_dir (r->get_property ("direction"));
+ Direction dir = to_dir (ev->get_property ("direction"));
if (dir)
- set_grob_direction (text, dir);
+ set_grob_direction (script, dir);
+
+ SCM mark = ev->get_property ("text");
+
+ script->set_property ("text", mark);
+ }
+}
- SCM mark = r->get_property ("text");
+void
+Text_engraver::acknowledge_note_column (Grob_info info)
+{
+ // Make note column (or rest, if there are no heads) the parent of the script.
+ extract_grob_set (info.grob (), "note-heads", heads);
+ Grob *x_parent = (heads.size ()
+ ? info.grob ()
+ : unsmob_grob (info.grob ()->get_object ("rest")));
- text->set_property ("text", mark);
+ for (vsize i = 0; i < scripts_.size (); i++)
+ {
+ Grob *el = scripts_[i];
+
+ if (el && !el->get_parent (X_AXIS) && x_parent)
+ el->set_parent (x_parent, X_AXIS);
}
}
Text_engraver::stop_translation_timestep ()
{
evs_.clear ();
+ scripts_.clear ();
}
Text_engraver::Text_engraver ()
{
}
+ADD_ACKNOWLEDGER (Text_engraver, note_column);
+
ADD_TRANSLATOR (Text_engraver,
/* doc */
"Create text scripts.",
%}
-\version "2.19.8" % necessary for upgrading to future LilyPond versions.
+\version "2.19.10" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
%}
-\version "2.19.8" % necessary for upgrading to future LilyPond versions.
+\version "2.19.10" % necessary for upgrading to future LilyPond versions.
\header{
title = "A scale in LilyPond"
\override DynamicLineSpanner.outside-staff-priority = ##f
\override DynamicText.outside-staff-priority = ##f
\override Hairpin.outside-staff-priority = ##f
- \override DynamicText.X-offset =
- #(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-note-columns))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self))))
\description "Holds a single line of dynamics, which will be
centered between the staves surrounding this context."
magnifyMusic =
-#(define-music-function (parser location mag mus) (number? ly:music?)
- (_i "Magnify the notation of @var{mus} without changing the
-staff-size, using @var{mag} as a size factor. Stems, beams, and
-horizontal spacing are adjusted automatically.")
+#(define-music-function (parser location mag music) (positive? ly:music?)
+ (_i "Magnify the notation of @var{music} without changing the
+staff-size, using @var{mag} as a size factor. Stems, beams,
+slurs, ties, and horizontal spacing are adjusted automatically.")
+
+ ;; these props are NOT allowed to shrink below default size
+ (define unshrinkable-props
+ '(
+ ;; stems
+ (Stem thickness)
+
+ ;; slurs
+ (Slur line-thickness)
+ (Slur thickness)
+ (PhrasingSlur line-thickness)
+ (PhrasingSlur thickness)
+
+ ;; ties
+ (Tie line-thickness)
+ (Tie thickness)
+ (LaissezVibrerTie line-thickness)
+ (LaissezVibrerTie thickness)
+ (RepeatTie line-thickness)
+ (RepeatTie thickness)
+ ))
+
+ ;; these props ARE allowed to shrink below default size
+ (define shrinkable-props
+ '(
+ ;; TODO: uncomment spacing-increment here once Issue 3987 is fixed
+ ;; override at the 'Score level
+ ;(SpacingSpanner spacing-increment)
+
+ ;; lengths and heights
+ (Beam length-fraction)
+ (Stem length-fraction)
+ (Stem beamlet-default-length)
+ (Slur height-limit)
+ (Slur minimum-length)
+ (PhrasingSlur height-limit)
+ (PhrasingSlur minimum-length)
+
+ ;; Beam.beam-thickness is dealt with separately below
+ ))
#{
- \set fontSize = #(magnification->font-size mag)
- % gives beam-thickness=0.48 when mag=1 (like default),
- % gives beam-thickness=0.35 when mag=0.63 (like CueVoice)
- \temporary \override Beam.beam-thickness = #(+ 119/925 (* mag 13/37))
- \temporary \override Beam.length-fraction = #mag
- \temporary \override Stem.length-fraction = #mag
- \temporary \override Stem.thickness = #(* 1.3 (max 1 mag))
- \temporary \override Score.SpacingSpanner.spacing-increment = #(* 1.2 mag)
- #mus
- \set fontSize = 0
- \revert Beam.beam-thickness
- \revert Beam.length-fraction
- \revert Stem.length-fraction
- \revert Stem.thickness
- \revert Score.SpacingSpanner.spacing-increment
+ \context Bottom {
+ %% TODO: uncomment \newSpacingSection once Issue 3990 is fixed
+ %\newSpacingSection
+ #(scale-fontSize 'magnifyMusic mag)
+ #(scale-props 'magnifyMusic mag #f unshrinkable-props)
+ #(scale-props 'magnifyMusic mag #t shrinkable-props)
+ #(scale-beam-thickness mag)
+
+ #music
+
+ %% TODO: uncomment \newSpacingSection once Issue 3990 is fixed
+ %\newSpacingSection
+ %% reverse engineer the former fontSize value instead of using \unset
+ #(revert-fontSize 'magnifyMusic mag)
+ #(revert-props 'magnifyMusic mag (append unshrinkable-props
+ shrinkable-props
+ '((Beam beam-thickness))))
+ }
+ #})
+
+magnifyStaff =
+#(define-music-function (parser location mag) (positive?)
+ (_i "Change the size of the staff, adjusting notation size and
+horizontal spacing automatically, using @var{mag} as a size factor.")
+
+ ;; these props are NOT allowed to shrink below default size
+ (define unshrinkable-props
+ '((StaffSymbol thickness)))
+
+ ;; these props ARE allowed to shrink below default size
+ (define shrinkable-props
+ (let ((space-alist-props
+ (find-all-space-alist-props all-grob-descriptions)))
+ (append
+ space-alist-props
+ '(
+ ;; override at the 'Score level
+ (SpacingSpanner spacing-increment)
+
+ (StaffSymbol staff-space)
+ (BarLine kern)
+ (BarLine segno-kern)
+ (BarLine hair-thickness)
+ (BarLine thick-thickness)
+ (Stem beamlet-default-length)
+ ))))
+
+ #{
+ \stopStaff
+
+ %% revert settings from last time
+ %% (but only if \magnifyStaff has already been used
+ %% and the staff magnification is changing)
+ #(revert-fontSize 'magnifyStaff mag)
+ #(revert-props 'magnifyStaff mag (append unshrinkable-props
+ shrinkable-props))
+
+ %% scale settings
+ %% (but only if staff magnification is changing)
+ #(scale-fontSize 'magnifyStaff mag)
+ #(scale-props 'magnifyStaff mag #f unshrinkable-props)
+ #(scale-props 'magnifyStaff mag #t shrinkable-props)
+
+ %% this might cause problems until Issue 3990 is fixed
+ \newSpacingSection
+
+ \startStaff
+ \set Staff.magnifyStaffValue = #mag
#})
makeClusters =
C = { e e | f f | }
@end verbatim
")
+ (define voice-count (length voice-ids))
(define (bar-check? m)
"Checks whether m is a bar check."
(eq? (ly:music-property m 'name) 'BarCheck))
+ (define (recurse-and-split-list lst)
+ "Return either a list of music lists split along barchecks, or @code{#f}."
+ (if (any bar-check? lst)
+ (let* ((voices (apply circular-list (make-list voice-count '())))
+ (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)
+ "Store the previously built sequence into the current voice and
+change to the following voice."
+ (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))))))
+ lst)
+ (if (pair? current-sequence) (change-voice))
+ ;; un-circularize `voices' and reorder the voices
+ (set! voices (map reverse!
+ (list-head voices voice-count)))
+ ;; 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 concatenate! voices))
+ (let ((deeper (map recurse-and-split lst)))
+ (and (any pair? deeper)
+ (apply zip (map
+ (lambda (m split)
+ (or split
+ (ly:music-deep-copy (make-list voice-count m))))
+ lst deeper))))))
(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."
- (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* ((elt (ly:music-property music 'element))
+ (elts (ly:music-property music 'elements))
+ (split-elt (and (ly:music? elt) (recurse-and-split elt)))
+ (split-elts (and (pair? elts) (recurse-and-split-list elts))))
+ (and (or split-elt split-elts)
+ (map
+ (lambda (e es)
+ (apply music-clone music
+ (append
+ ;; reassigning the origin of the parent only
+ ;; makes sense if the first expression in the
+ ;; result is from a distributed origin
+ (let ((origin
+ (if (ly:music? elt)
+ (and (ly:music? e) (ly:music-property e 'origin #f))
+ (and (pair? es) (ly:music-property (car es) 'origin #f)))))
+ (if origin (list 'origin origin) '()))
+ (if (ly:music? e) (list 'element e) '())
+ (if (pair? es) (list 'elements es) '()))))
+ (or split-elt (circular-list #f))
+ (or split-elts (circular-list #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)
+ voice-ids voices)
(ly:music-warning music
(_ "ignoring parallel music without barchecks")))))
msgstr "\\bar \".\" produeix ara una línia divisòria gruixuda.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Els paràmetres de discontinuïtat per a lligadures d'expressió i d'unió estan ara a 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Els paràmetres de discontinuïtat per a lligadures d'expressió i d'unió estan ara a 'dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr "\\bar \".\" nyní vytváří silnou taktovou čáru.\n"
#: convertrules.py:2848
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Parametry čárky pro legatové obloučky a ligatury jsou nyní v 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Parametry čárky pro legatové obloučky a ligatury jsou nyní v 'dash-definition.\n"
#: convertrules.py:2853
msgid ""
msgstr "\\bar \".\" erstellt jetzt einen dicken Taktstrich.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Strichelunsparameter für Binde- und Legatobögen sind jetzt in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Strichelunsparameter für Binde- und Legatobögen sind jetzt in 'dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr "Το \\bar \".\" τώρα παράγει χοντρή γραμμή μέτρου.\n"
#: convertrules.py:2912
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Οι παράμετροι παύλας για ενωτικά και δεσμούς βρίσκονται τώρα στο 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Οι παράμετροι παύλας για ενωτικά και δεσμούς βρίσκονται τώρα στο 'dash-definition.\n"
#: convertrules.py:2917
msgid ""
msgstr "\\bar \".\" nun produktas dikan taktostrekon.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Strekaj parametroj por ligarkoj kaj ligaturoj estas nun en 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Strekaj parametroj por ligarkoj kaj ligaturoj estas nun en 'dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr "\\bar \".\" ahora produce una línea divisoria gruesa.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
msgstr ""
"Los parámetros de discontinuidad para las ligaduras\n"
-"de expresión y de unión ahora están en 'dash-details.\n"
+"de expresión y de unión ahora están en 'dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr "\\bar \".\" produit désormais une barre épaisse.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "Les paramètres du pointillé des liaisons sont gérés par `dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "Les paramètres du pointillé des liaisons sont gérés par `dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr "\\bar \".\" ora crea una stanghetta spessa.\n"
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
-msgstr "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
+msgstr "I parametri del tratteggiato per le legature di portamento e di valore si trovano ora in 'dash-definition.\n"
#: convertrules.py:2854
msgid ""
msgstr ""
#: convertrules.py:2848
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
msgstr ""
#: convertrules.py:2853
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: lilypond 2.19.8\n"
+"Project-Id-Version: lilypond 2.19.10\n"
"Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
"lilypond.bugs\n"
-"POT-Creation-Date: 2014-06-15 16:22+0100\n"
+"POT-Creation-Date: 2014-07-13 15:39+0100\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 ""
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
msgstr ""
#: convertrules.py:2854
msgid "cannot find Voice `%s'"
msgstr ""
-#: lyric-engraver.cc:186
-msgid "Lyric syllable does not have note. Use \\lyricsto or associatedVoice."
+#: lyric-engraver.cc:185
+msgid ""
+"Aligning lyric syllables to notes was requested, but there are no notes in "
+"the specified context. Syllable will be attached to a PaperColumn instead."
msgstr ""
#: main.cc:104
msgid "Conversion of string `%s' to UTF-16be failed: %s"
msgstr ""
-#: percent-repeat-engraver.cc:147
+#: percent-repeat-engraver.cc:148
msgid "unterminated percent repeat"
msgstr ""
msgid "~a function cannot return ~a"
msgstr ""
-#: ly-syntax-constructors.scm:75
+#: ly-syntax-constructors.scm:76
#, scheme-format
msgid "wrong type for argument ~a. Expecting ~a, found ~s"
msgstr ""
-#: ly-syntax-constructors.scm:199
+#: ly-syntax-constructors.scm:200
#, scheme-format
msgid "Invalid property operation ~a"
msgstr ""
msgid "music expected: ~S"
msgstr ""
-#: music-functions.scm:1244
+#: music-functions.scm:1246
#, scheme-format
msgid "cannot find quoted music: `~S'"
msgstr ""
-#: music-functions.scm:1383
+#: music-functions.scm:1386
msgid "Add @var{octave-shift} to the octave of @var{pitch}."
msgstr ""
-#: music-functions.scm:1446
+#: music-functions.scm:1449
#, scheme-format
msgid "Unknown octaveness type: ~S "
msgstr ""
-#: music-functions.scm:1447
+#: music-functions.scm:1450
msgid "Defaulting to 'any-octave."
msgstr ""
-#: music-functions.scm:1833
+#: music-functions.scm:1838
#, scheme-format
msgid "unknown accidental style: ~S"
msgstr ""
-#: music-functions.scm:2051
+#: music-functions.scm:2056
msgid "Missing duration"
msgstr ""
msgid "assertion failed: ~S"
msgstr ""
-#: translation-functions.scm:388
+#: translation-functions.scm:389
#, scheme-format
msgid "Negative fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:391
+#: translation-functions.scm:392
#, scheme-format
msgid "Missing fret for pitch ~a on string ~a"
msgstr ""
-#: translation-functions.scm:434
+#: translation-functions.scm:435
#, scheme-format
msgid "No open string for pitch ~a"
msgstr ""
-#: translation-functions.scm:449 translation-functions.scm:461
+#: translation-functions.scm:450 translation-functions.scm:462
#, scheme-format
msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
msgstr ""
-#: translation-functions.scm:452
+#: translation-functions.scm:453
msgid "Ignoring string request and recalculating."
msgstr ""
-#: translation-functions.scm:464
+#: translation-functions.scm:465
msgid "Ignoring note in tablature."
msgstr ""
-#: translation-functions.scm:489
+#: translation-functions.scm:490
#, scheme-format
msgid "No string for pitch ~a (given frets ~a)"
msgstr ""
-#: translation-functions.scm:594
+#: translation-functions.scm:595
#, scheme-format
msgid ""
"No label for fret ~a (on string ~a);\n"
msgstr ""
#: convertrules.py:2849
-msgid "Dash parameters for slurs and ties are now in 'dash-details.\n"
+msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
msgstr ""
#: convertrules.py:2854
if re.search("(Slur|Tie)\w+#\'dash-fraction", str) \
or re.search("(Slur|Tie)\w+#\'dash-period", str):
stderr_write (NOT_SMART % "dash-fraction, dash-period")
- stderr_write (_ ("Dash parameters for slurs and ties are now in \'dash-details.\n"))
+ stderr_write (_ ("Dash parameters for slurs and ties are now in \'dash-definition.\n"))
stderr_write (UPDATE_MANUALLY)
return str
if m.group (1):
return m.group (0)
x = m.group (2) + m.group (4)
-
+
if m.group (3):
x = x + re.sub (r"(\s*)(" + symbol_list + ")", fn_path_replace,
m.group (3))
str = re.sub (r'\blocalKeySignature\b', 'localAlterations', str)
return str
+@rule ((2, 19, 11), "thin-kern -> segno-kern")
+def conv(str):
+ str = re.sub (r'\bthin-kern\b', 'segno-kern', 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,
the segno sign is drawn over the double bar line; otherwise, it
draws the span bar variant, i.e. without the segno sign."
(let* ((line-thickness (layout-line-thickness grob))
- (thinkern (* (ly:grob-property grob 'thin-kern 1) line-thickness))
+ (segno-kern (* (ly:grob-property grob 'segno-kern 1) line-thickness))
(thin-stil (make-simple-bar-line grob extent))
(double-line-stil (ly:stencil-combine-at-edge
thin-stil
X
LEFT
thin-stil
- thinkern))
+ segno-kern))
(segno (ly:font-get-glyph (ly:grob-default-font grob)
"scripts.varsegno"))
(stencil (ly:stencil-add
(cons 0 0)))
(ly:stencil-translate-axis
double-line-stil
- (* 1/2 thinkern)
+ (* 1/2 segno-kern)
X))))
stencil))
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
;; for define-safe-public when byte-compiling using Guile V2
-(use-modules (scm safe-utility-defs))
+(use-modules (scm safe-utility-defs) (ice-9 receive))
(define-public (construct-chord-elements root duration modifications)
"Build a chord on root using modifiers in @var{modifications}.
(define (make-chord-elements pitches bass duration inversion original-inv-pitch)
"Make EventChord with notes corresponding to PITCHES, BASS and
-DURATION, and INVERSION."
- (define (make-note-ev pitch)
- (make-music 'NoteEvent
- 'duration duration
- 'pitch pitch))
- (let ((nots (map make-note-ev pitches))
- (bass-note (if bass (make-note-ev bass) #f))
- (inv-note (if inversion (make-note-ev inversion) #f)))
- (if bass-note
- (begin
- (set! (ly:music-property bass-note 'bass) #t)
- (set! nots (cons bass-note nots))))
- (if inv-note
- (begin
- (set! (ly:music-property inv-note 'inversion) #t)
- (set! (ly:music-property inv-note 'octavation)
- (- (ly:pitch-octave inversion)
- (ly:pitch-octave original-inv-pitch)))
- (set! nots (cons inv-note nots))))
- nots))
+DURATION, and INVERSION. Notes above INVERSION are transposed downward
+along with the inversion as long as they end up below at least one
+non-inverted note."
+ (define (make-note-ev pitch . rest)
+ (apply make-music 'NoteEvent
+ 'duration duration
+ 'pitch pitch
+ rest))
+ (cond (inversion
+ (let* ((octavation (- (ly:pitch-octave inversion)
+ (ly:pitch-octave original-inv-pitch)))
+ (down (ly:make-pitch octavation 0 0)))
+ (define (invert p) (ly:pitch-transpose down p))
+ (define (make-inverted p . rest)
+ (apply make-note-ev (invert p) 'octavation octavation rest))
+ (receive (uninverted high)
+ (span (lambda (p) (ly:pitch<? p original-inv-pitch))
+ pitches)
+ (receive (invertible rest)
+ (if (null? uninverted)
+ ;; The following line caters for
+ ;; inversions "on the root", turning
+ ;; f/f into <f a' c''> rather than <f a c'>
+ ;; or <f' a' c''>
+ (values '() high)
+ (span (lambda (p)
+ (ly:pitch<? (invert p) (car uninverted)))
+ high))
+ (cons (make-inverted original-inv-pitch 'inversion #t)
+ (append (if bass (list (make-note-ev bass 'bass #t)) '())
+ (map make-inverted invertible)
+ (map make-note-ev uninverted)
+ (map make-note-ev rest)))))))
+ (bass (cons (make-note-ev bass 'bass #t)
+ (map make-note-ev pitches)))
+ (else (map make-note-ev pitches))))
;;;;;;;;;;;;;;;;
;; chord modifiers change the pitch list.
(list-ref '( "ses" "s" "" "is" "isis") (+ 2 (cdr n-a)))
(list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
-(define-public ((chord-name->italian-markup re-with-eacute) pitch lowercase?)
+(define ((chord-name->italian-markup re-with-eacute) pitch lowercase?)
"Return pitch markup for @var{pitch}, using Italian/@/French note names.
If @var{re-with-eacute} is set to @code{#t}, french `ré' is returned for
pitch@tie{}D instead of `re'."
lowercase?))
(accidental->markup-italian alt)
))))
+(export chord-name->italian-markup)
;; fixme we should standardize on omit-root (or the other one.)
;; perhaps the default should also be reversed --hwn
@rinternals{Pitch_squash_engraver}.")
(staffLineLayoutFunction ,procedure? "Layout of staff lines,
@code{traditional}, or @code{semitone}.")
+ (magnifyStaffValue ,positive? "The most recent value set with
+@code{\\magnifyStaff}.")
(stanza ,markup? "Stanza @q{number} to print before the start of a
verse. Use in @code{Lyrics} context.")
(startRepeatSegnoType ,string? "Set the default bar line for the
;;(pretty-print (cons (car music-event-tree) (sort-tree (cdr music-event-tree))))
(defmacro-public make-stream-event (expr)
- (Stream_event::undump (primitive-eval (list 'quasiquote expr))))
+ (ly:stream-event::undump (primitive-eval (list 'quasiquote expr))))
(define* (simplify e)
(cond
((pair? e) (cons (simplify (car e))
(simplify (cdr e))))
((ly:stream-event? e)
- (list 'unquote (list 'make-stream-event (simplify (Stream_event::dump e)))))
+ (list 'unquote (list 'make-stream-event (simplify (ly:stream-event::dump e)))))
((ly:music? e)
(list 'unquote (music->make-music e)))
((ly:moment? e)
(list 'unquote `(ly:make-duration
,(ly:duration-log e)
,(ly:duration-dot-count e)
- ,(ly:duration-scale))))
+ ,(ly:duration-scale e))))
((ly:pitch? e)
(list 'unquote `(ly:make-pitch
,(ly:pitch-octave e)
has-span-bar
kern
rounded
- thin-kern
+ segno-kern
thick-thickness))
(ly:add-interface
(dot-placement-list ,list? "List consisting of
@code{(@var{description} @var{string-number} @var{fret-number}
@var{finger-number})} entries used to define fret diagrams.")
+ (double-stem-separation ,number? "The distance between the two
+stems of a half note in tablature when using @code{\\tabFullNotation},
+not counting the width of the stems themselves, expressed as a multiple
+of the default height of a staff-space in the traditional five-line
+staff.")
(duration-log ,integer? "The 2-log of the note head duration,
i.e., @code{0} = whole note, @code{1} = half note, etc.")
the center of the fret in direction parallel to strings.
Default@tie{}0.
@item
+@code{fret-label-horizontal-offset} -- The offset of the fret label from
+the center of the fret in direction orthogonal to strings.
+Default@tie{}0.
+@item
+@code{paren-padding} -- The padding for the parenthesis.
+Default@tie{}0.05.
+@item
@code{label-dir} -- Side to which the fret label is attached.
@w{@code{-1}}, @code{LEFT}, or @code{DOWN} for left or down; @code{1},
@code{RIGHT}, or @code{UP} for right or up. Default @code{RIGHT}.
;;; h
;;;
(hair-thickness ,number? "Thickness of the thin line in a bar
-line.")
+line, expressed as a multiple of the default staff-line thickness
+(i.e. the visual output is @emph{not} influenced by changes to
+@code{@var{Staff}.StaffSymbol.thickness}).")
(harp-pedal-details ,list? "An alist of detailed grob properties
for harp pedal diagrams. Each alist entry consists of a
@code{(@var{property} . @var{value})} pair. The properties which can
;;;
(keep-inside-line ,boolean? "If set, this column cannot have
objects sticking into the margin.")
- (kern ,ly:dimension? "Amount of extra white space to add. For
-bar lines, this is the amount of space after a thick line.")
+ (kern ,ly:dimension? "The space between individual elements
+in any compound bar line, expressed as a multiple of the default
+staff-line thickness (i.e. the visual output is @emph{not}
+influenced by changes to
+@code{@var{Staff}.StaffSymbol.thickness}).")
(knee ,boolean? "Is this beam kneed?")
(knee-spacing-correction ,number? "Factor for the optical
correction amount for kneed beams. Set between @code{0} for no
if this column is the start of a system.")
(line-count ,integer? "The number of staff lines.")
(line-positions ,list? "Vertical positions of staff lines.")
- (line-thickness ,number? "The thickness of the tie or slur
-contour.")
+ (line-thickness ,number? "For slurs and ties, this is the
+diameter of the virtual @qq{pen} that draws the two arcs of the
+curve's outline, which intersect at the endpoints. This property
+is expressed as a multiple of the current staff-line thickness
+(i.e. the visual output is influenced by changes to
+@code{@var{Staff}.StaffSymbol.thickness}).")
(long-text ,markup? "Text markup. See @ruser{Formatting text}.")
scripts in a stack, by being added to the position of the script in
the user input, the sum being the overall priority. Smaller means
closer to the head.")
+ (segno-kern ,number? "The space between the two thin lines
+of the segno bar line symbol, expressed as a multiple of the
+default staff-line thickness (i.e. the visual output is @emph{not}
+influenced by changes to
+@code{@var{Staff}.StaffSymbol.thickness}).")
(self-alignment-X ,number? "Specify alignment of an object. The
value @w{@code{-1}} means left aligned, @code{0}@tie{}centered, and
@code{1}@tie{}right-aligned in X@tie{}direction. Other numerical
(text-direction ,ly:dir? "This controls the ordering of the
words. The default @code{RIGHT} is for roman text. Arabic or Hebrew
should use @code{LEFT}.")
- (thick-thickness ,number? "Bar line thickness, measured in
-@code{line-thickness}.")
- (thickness ,number? "Line thickness, generally measured in
-@code{line-thickness}.")
- (thin-kern ,number? "The space after a hair-line in a bar line.")
+ (thick-thickness ,number? "Thickness of the thick line in a
+bar line, expressed as a multiple of the default staff-line
+thickness (i.e. the visual output is @emph{not} influenced by
+changes to @code{@var{Staff}.StaffSymbol.thickness}).")
+ (thickness ,number? "For grobs made up of lines, this is the
+thickness of the line. For slurs and ties, this is the distance
+between the two arcs of the curve's outline at its thickest point,
+not counting the diameter of the virtual @qq{pen} that draws the
+arcs. This property is expressed as a multiple of the current
+staff-line thickness (i.e. the visual output is influenced by
+changes to @code{@var{Staff}.StaffSymbol.thickness}).")
(tie-configuration ,list? "List of @code{(@var{position} .
@var{dir})} pairs, indicating the desired tie configuration, where
@var{position} is the offset from the center of the staff in staff
;;;
;;; x
;;;
+ (X-align-on-main-noteheads ,boolean? "If true, this grob will
+ignore suspended noteheads when aligning itself on NoteColumn.")
(X-extent ,number-pair? "Extent (size) in the X@tie{}direction,
measured in staff-space units, relative to object's reference point.")
(X-offset ,number? "The horizontal amount that this object is
(staff-padding . 0.25)
(stencil . ,ly:accidental-interface::print)
(X-extent . ,ly:accidental-interface::width)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-x-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,accidental-interface::height)
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
;; TODO:
;; kern should scale with line-thickness too.
(kern . 3.0)
- (thin-kern . 3.0)
+ (segno-kern . 3.0)
(hair-thickness . 1.9)
(thick-thickness . 6.0)
. (
(break-visibility . ,(grob::inherit-parent-property
X 'break-visibility))
- (font-shape . italic)
- (font-size . -4)
- (transparent . ,(grob::inherit-parent-property
- X 'transparent))
(color . ,(grob::inherit-parent-property
X 'color))
+ (font-shape . italic)
+ (font-size . -4)
(self-alignment-X . ,CENTER)
(staff-padding . 0.7)
(stencil . ,ly:text-interface::print)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-x-parent)))))
- (Y-offset . ,side-position-interface::y-aligned-side)
+ (transparent . ,(grob::inherit-parent-property
+ X 'transparent))
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
+ (Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (clef-modifier-interface
font-interface
(outside-staff-priority . 450)
(padding . 0.5)
(script-priority . 200)
+ (self-alignment-X . #f)
(side-axis . ,Y)
(staff-padding . 0.5)
- ;; todo: add X self alignment?
(stencil . ,ly:text-interface::print)
- (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-offset . ,side-position-interface::y-aligned-side)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(interfaces . (font-interface
outside-staff-interface
+ self-alignment-interface
side-position-interface
text-interface
text-script-interface))))))
(side-axis . ,Y)
(staff-padding . 0.25)
(stencil . ,ly:text-interface::print)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-y-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
- (Y-offset . ,side-position-interface::y-aligned-side)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
+ (Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (font-interface
outside-staff-interface
(stencil . ,ly:text-interface::print)
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
(Y-extent . ,grob::always-Y-extent-from-stencil)
- (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+ (X-align-on-main-noteheads . #t)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-offset . ,(scale-by-font-size -0.6)) ; center on an 'm'
(meta . ((class . Item)
(interfaces . (dynamic-interface
(layer . 0)
(self-alignment-X . ,CENTER)
(stencil . ,ly:grid-line-interface::print)
- (X-extent . ,ly:grid-line-interface::width)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-x-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
+ (X-extent . ,ly:grid-line-interface::width)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(meta . ((class . Item)
(interfaces . (grid-line-interface
self-alignment-interface))))))
(key-signature . (extra-space . 0.5))
(cue-clef . (extra-space . 0.5))
(right-edge . (extra-space . 0.5))
- (first-note . (fixed-space . 2.5))))
+ (first-note . (fixed-space . 2.5))
+ (custos . (extra-space . 1.0))))
(stencil . ,ly:key-signature-interface::print)
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(word-space . 0.6)
(skyline-horizontal-padding . 0.1)
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
+ (X-align-on-main-noteheads . #t)
(X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
(meta . ((class . Item)
(springs-and-rods . ,ly:multi-measure-rest::set-text-rods)
(staff-padding . 0.4)
(stencil . ,ly:text-interface::print)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-centered-on-y-parent)))))
- (Y-offset . ,side-position-interface::y-aligned-side)
(vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
+ (Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(interfaces . (font-interface
multi-measure-interface
(skyline-horizontal-padding . 0.2)
(staff-padding . 0.25)
(stencil . ,ly:text-interface::print)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-centered-on-y-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
- (Y-offset . ,side-position-interface::y-aligned-side)
(vertical-skylines . ,grob::unpure-vertical-skylines-from-stencil)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
+ (Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(interfaces . (font-interface
multi-measure-interface
(self-alignment-X . ,CENTER)
(staff-padding . 0.25)
(stencil . ,ly:text-interface::print)
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-centered-on-y-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
- (Y-offset . ,side-position-interface::y-aligned-side)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,grob::always-Y-extent-from-stencil)
+ (Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Spanner)
(interfaces . (font-interface
percent-repeat-interface
;; and the extreme minima as abolute minimum length.
(direction . ,ly:stem::calc-direction)
+ (double-stem-separation . 0.5)
(duration-log . ,stem::calc-duration-log)
(length . ,(ly:make-unpure-pure-container ly:stem::calc-length ly:stem::pure-calc-length))
(neutral-direction . ,DOWN)
(stencil . ,ly:stem-tremolo::print)
(style . ,ly:stem-tremolo::calc-style)
(X-extent . ,ly:stem-tremolo::width)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-extent . ,(grob::unpure-Y-extent-from-stencil ly:stem-tremolo::pure-height))
- (X-offset . ,(ly:make-simple-closure
- `(,+
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::centered-on-x-parent))
- ,(ly:make-simple-closure
- (list ly:self-alignment-interface::x-aligned-on-self)))))
(Y-offset . ,(ly:make-unpure-pure-container ly:stem-tremolo::calc-y-offset ly:stem-tremolo::pure-calc-y-offset))
(meta . ((class . Item)
(interfaces . (self-alignment-interface
(TextScript
. (
(avoid-slur . around)
- (cross-staff . ,script-or-side-position-cross-staff)
+ (cross-staff . #f)
(direction . ,DOWN)
(extra-spacing-width . (+inf.0 . -inf.0))
(outside-staff-horizontal-padding . 0.2)
(padding . 0.3)
(script-priority . 200)
+ ;; self-alignment cannot be LEFT because of fingering diagrams.
+ (self-alignment-X . #f)
(side-axis . ,Y)
(slur-padding . 0.5)
(staff-padding . 0.5)
(stencil . ,ly:text-interface::print)
(vertical-skylines . ,grob::always-vertical-skylines-from-stencil)
- ;; todo: add X self alignment?
(Y-extent . ,grob::always-Y-extent-from-stencil)
- (X-offset . ,ly:self-alignment-interface::x-aligned-on-self)
+ (X-align-on-main-noteheads . #t)
+ (X-offset . ,ly:self-alignment-interface::aligned-on-x-parent)
(Y-offset . ,side-position-interface::y-aligned-side)
(meta . ((class . Item)
(interfaces . (font-interface
(cons (cons key val) prior))
'() (ly:all-grob-interfaces)))
+;; sort user-settable and internal props within each grob-interface
+(set! interface-description-alist
+ (map! (lambda (iface-desc)
+ (let* ((key-name-docstr (list-head iface-desc 3))
+ (props (list-tail iface-desc 3))
+ (sorted-props (list (sort (car props) ly:symbol-ci<?))))
+ (append key-name-docstr sorted-props)))
+ interface-description-alist))
+
+;; sort list of grob interfaces
(set! interface-description-alist
(sort interface-description-alist ly:alist-ci<?))
-(define-public ((glyph-flag flag-style) grob)
+(define ((glyph-flag flag-style) grob)
"Simulatesthe default way of generating flags: Look up glyphs
@code{flags.style[ud][1234]} from the feta font and use it for the flag
stencil."
(create-glyph-flag flag-style "" grob))
+(export glyph-flag)
"Calculate the fret count for the diagram given the range of frets in the diagram."
(1+ (- (cdr fret-range) (car fret-range))))
+(define (dot-has-color dot-settings)
+ "Return a color-name as symbol, if found in @var{dot-settings} otherwise @code{#f}"
+ (cond ((null? dot-settings)
+ #f)
+ ;; Don't bother the user with quote/unquote.
+ ;; We use the name-symbol for the color, looking up in 'x11-color-list'
+ ((member (car dot-settings) (map car x11-color-list))
+ (car dot-settings))
+ (else (dot-has-color (cdr dot-settings)))))
+
+(define (dot-is-inverted dot-settings)
+ "Return @code{'inverted}, if found in @var{dot-settings} otherwise @code{'()}"
+ (let ((inverted (member 'inverted dot-settings)))
+ (if inverted
+ (car inverted)
+ '())))
+
+(define (dot-is-parenthesized dot-settings)
+ "Return @code{'parenthesized}, if found in @var{dot-settings} otherwise @code{'()}"
+ (let ((parenthesized (member 'parenthesized dot-settings)))
+ (if parenthesized
+ (car parenthesized)
+ '())))
+
+;; If @code{'default-paren-color} is not set, the parenthesis will take their
+;; color from the dot.
+;; Setting @code{'default-paren-color} will result in taking the color from
+;; `what-color', see below.
+(define (default-paren-color dot-settings)
+ "Return @code{'default-paren-color}, if found in @var{dot-settings} otherwise @code{'()}"
+ (let ((default-color (member 'default-paren-color dot-settings)))
+ (if default-color
+ (car default-color)
+ '())))
+
(define (subtract-base-fret base-fret dot-list)
"Subtract @var{base-fret} from every fret in @var{dot-list}"
(if (null? dot-list)
(let ((this-list (car dot-list)))
(cons* (list
;; string
- (car this-list)
+ (car this-list)
;; fret
- (- (second this-list) base-fret)
+ (- (second this-list) base-fret)
;; finger
- (if (null? (cddr this-list))
- '()
- (third this-list))
- ;; color modifier
- (if (or (null? (cddr this-list))
- (null? (cdddr this-list)))
- '()
- (fourth this-list)))
+ (if (or (null? (cddr this-list))
+ (not (number? (caddr this-list))))
+ '()
+ (third this-list))
+ ;; inverted
+ (dot-is-inverted this-list)
+ ;; parenthesis
+ (dot-is-parenthesized this-list)
+ ;; color modifiers
+ ;; parenthesis
+ (default-paren-color this-list)
+ ;; dots
+ (let ((colored (dot-has-color this-list)))
+ (if colored
+ colored
+ '())))
(subtract-base-fret base-fret (cdr dot-list))))))
(define (drop-paren item-list)
;; needed for draw-frets and draw-strings
(sth (* size th))
(thickness-factor (assoc-get 'string-thickness-factor details 0))
+ (paren-padding (assoc-get 'paren-padding details 0.05))
(alignment
(chain-assoc-get 'align-dir props -0.4)) ;; needed only here
(xo-padding (assoc-get 'xo-padding details 0.2)) ;; needed only here
(string-stencil (car x))
(helper (cdr x)))))
- (let* ( (string-list (map 1+ (iota string-count))))
+ (let* ((string-list (map 1+ (iota string-count))))
(helper string-list)))
(define (string-stencil string)
(let* ( (scale-dot-radius (* size dot-radius))
(scale-dot-thick (* size th))
- (default-dot-color (assoc-get 'dot-color details 'black))
+ (default-dot-color (assoc-get 'dot-color details))
(finger-label-padding 0.3)
(dot-label-font-mag
(* scale-dot-radius
(extent (cons (- scale-dot-radius) scale-dot-radius))
(finger (caddr mypair))
(finger (if (number? finger) (number->string finger) finger))
- (inverted-color (eq? 'inverted (cadddr mypair)))
- (dot-color (if (or (and (eq? default-dot-color 'black) inverted-color)
- (and (eq? default-dot-color 'white) (not inverted-color)))
- 'white
- 'black))
- (dot-stencil (if (eq? dot-color 'white)
- (ly:stencil-add
- (make-circle-stencil
- scale-dot-radius scale-dot-thick #t)
- (ly:stencil-in-color
- (make-circle-stencil
- (- scale-dot-radius (* 0.5 scale-dot-thick))
- 0 #t)
- 1 1 1))
- (make-circle-stencil
- scale-dot-radius scale-dot-thick #t)))
+ (parenthesized
+ (if (not (null? (dot-is-parenthesized mypair)))
+ (dot-is-parenthesized mypair)
+ #f))
+ (parenthesis-color
+ (if (not (null? (default-paren-color mypair)))
+ (default-paren-color mypair)
+ #f))
+ (inverted
+ (if (not (null? (dot-is-inverted mypair)))
+ (dot-is-inverted mypair)
+ #f))
+ (dot-color-is-white?
+ (or inverted
+ (and (eq? default-dot-color 'white) (not inverted))))
+ (what-color
+ (x11-color
+ (cond ((and inverted
+ (not (dot-has-color mypair))
+ (not (eq? default-dot-color 'white)))
+ (or default-dot-color 'black))
+ (dot-color-is-white?
+ (or (dot-has-color mypair) 'black))
+ (else
+ (or (dot-has-color mypair)
+ default-dot-color
+ 'black)))))
+ (inverted-stil
+ (lambda (color)
+ (ly:stencil-add
+ (stencil-with-color
+ (make-circle-stencil
+ scale-dot-radius scale-dot-thick #t)
+ color)
+ (stencil-with-color
+ (make-circle-stencil
+ (- scale-dot-radius (* 0.5 scale-dot-thick))
+ 0 #t)
+ (x11-color 'white)))))
+ (dot-stencil
+ (if dot-color-is-white?
+ (inverted-stil what-color)
+ (stencil-with-color
+ (make-circle-stencil
+ scale-dot-radius scale-dot-thick #t)
+ what-color)))
+ (par-dot-stencil
+ (let ((paren-color
+ (if (and parenthesis-color
+ (not (eq? default-dot-color 'white)))
+ (x11-color (or default-dot-color 'black))
+ what-color)))
+ (stencil-with-color
+ (parenthesize-stencil
+ dot-stencil ;; stencil
+ (* size th 0.75) ;; half-thickness
+ (* 0.15 size) ;;width
+ 0 ;; angularity
+ paren-padding ;; padding
+ )
+ paren-color)))
+ (final-dot-stencil
+ (if parenthesized
+ par-dot-stencil
+ dot-stencil))
(positioned-dot
- (ly:stencil-translate dot-stencil dot-coordinates))
+ (ly:stencil-translate final-dot-stencil dot-coordinates))
(labeled-dot-stencil
(cond
((or (eq? finger '())(eq? finger-code 'none))
layout props dot-label-font-mag finger))))
(ly:stencil-translate
(ly:stencil-add
- dot-stencil
- (if (eq? dot-color 'white)
- finger-label
- (ly:stencil-in-color finger-label 1 1 1)))
+ final-dot-stencil
+ (if dot-color-is-white?
+ (stencil-with-color
+ finger-label
+ what-color)
+ (stencil-with-color finger-label white)))
dot-coordinates)))
((eq? finger-code 'below-string)
(let* ((label-stencil
(label-dir (assoc-get 'label-dir details RIGHT))
(label-vertical-offset
(assoc-get 'fret-label-vertical-offset details 0))
+ (label-horizontal-offset
+ (assoc-get 'fret-label-horizontal-offset details 0))
(number-type
(assoc-get 'number-type details 'roman-lower))
(label-text
label-stencil
'string
orientation))
- (label-outside-diagram (+ label-space label-half-width)))
+ (label-outside-diagram
+ (+ label-space
+ (* size label-horizontal-offset)
+ label-half-width)))
(ly:stencil-translate
label-stencil
(stencil-coordinates
Place a capo indicator (a large solid bar) across the entire fretboard
at fret location @var{fret-number}. Also, set fret @var{fret-number}
to be the lowest fret on the fret diagram.
-
-@item (place-fret @var{string-number} @var{fret-number} [@var{finger-value} [@var{color-modifier}]])
+@item
+(place-fret @var{string-number}
+ @var{fret-number}
+ [@var{finger-value}]
+ [@var{color-modifier}]
+ [@var{color}]
+ [@code{'parenthesized} [@code{'default-paren-color}]])
Place a fret playing indication on string @var{string-number} at fret
@var{fret-number} with an optional fingering label @var{finger-value},
-and an optional color modifier @var{color-modifier}.
+an optional color modifier @var{color-modifier}, an optional color
+@var{color}, an optional parenthesis @code{'parenthesized} and an
+optional paranthesis color @code{'default-paren-color}.
By default, the fret playing indicator is a solid dot. This can be
-globally changed by setting the value of the variable @var{dot-color}.
+globally changed by setting the value of the variable @var{dot-color}
+or for a single dot by setting the value of @var{color}. The dot can
+be parenthesized by adding @code{'parenthesized}. By default the
+color for the parenthesis is taken from the dot. Adding
+@code{'default-paren-color} will take the parenthesis-color from the
+global @var{dot-color}, as a fall-back black will be used.
Setting @var{color-modifier} to @code{inverted} inverts the dot color
for a specific fingering.
+The values for @var{string-number}, @var{fret-number}, and the optional
+@var{finger} should be entered first in that order.
+The order of the other optional arguments does not matter.
If the @var{finger} part of the @code{place-fret} element is present,
@var{finger-value} will be displayed according to the setting of the
variable @var{finger-code}. There is no limit to the number of fret
(if good
(ly:parser-error parser
(format #f (_ "~a function cannot return ~a")
- (type-name pred) m)
+ (type-name pred)
+ (value->lily-string m parser))
loc))
(and (pair? (car sig)) (cdar sig))))))
"Recurse through @var{music}, extracting pitches.
Returns a list of pitch objects, e.g
@code{'((ly:make-pitch 0 2 0) (ly:make-pitch 0 4 0) ... )}
-Typically used to construct a scale for input to transposer-factory
-(see).
-"
+Typically used to construct a scale for input to
+@code{transposer-factory}."
(let ((elements (ly:music-property music 'elements))
(element (ly:music-property music 'element))
;; inversion and retrograding.
(let* ((elements (ly:music-property music 'elements))
+ (arts (ly:music-property music 'articulations))
(reversed (reverse elements))
(element (ly:music-property music 'element))
(span-dir (ly:music-property music 'span-direction)))
(ly:music-set-property! music 'elements reversed)
+ (for-each retrograde-music arts)
+
(if (ly:music? element)
(ly:music-set-property!
music 'element
(lambda (elt)
(grob::has-interface elt symbol)))
-(define-public ((outputproperty-compatibility func sym val) grob g-context ao-context)
+(define ((outputproperty-compatibility func sym val) grob g-context ao-context)
(if (func grob)
(set! (ly:grob-property grob sym) val)))
+(export outputproperty-compatibility)
-(define-public ((set-output-property grob-name symbol val) grob grob-c context)
+(define ((set-output-property grob-name symbol val) grob grob-c context)
"Usage example:
@code{\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1))}"
(let ((meta (ly:grob-property grob 'meta)))
(if (equal? (assoc-get 'name meta) grob-name)
(set! (ly:grob-property grob symbol) val))))
+(export set-output-property)
(define-public (skip->rest mus)
omitted in a call only when it can't get confused with a following
parameter of different type.
-Predicates with syntactical significance are @code{ly:pitch?},
-@code{ly:duration?}, @code{ly:music?}, @code{markup?}. Other
-predicates require the parameter to be entered as Scheme expression.
-
@code{result-type?} can specify a default in the same manner as
predicates, to be used in case of a type error in arguments or
result."
omitted in a call only when it can't get confused with a following
parameter of different type.
-Predicates with syntactical significance are @code{ly:pitch?},
-@code{ly:duration?}, @code{ly:music?}, @code{markup?}. Other
-predicates require the parameter to be entered as Scheme expression.
-
Must return a music expression. The @code{origin} is automatically
set to the @code{location} parameter."
omitted in a call only when it can't get confused with a following
parameter of different type.
-Predicates with syntactical significance are @code{ly:pitch?},
-@code{ly:duration?}, @code{ly:music?}, @code{markup?}. Other
-predicates require the parameter to be entered as Scheme expression.
-
Can return arbitrary expressions. If a music expression is returned,
its @code{origin} is automatically set to the @code{location}
parameter."
omitted in a call only when it can't get confused with a following
parameter of different type.
-Predicates with syntactical significance are @code{ly:pitch?},
-@code{ly:duration?}, @code{ly:music?}, @code{markup?}. Other
-predicates require the parameter to be entered as Scheme expression.
-
Must return an event expression. The @code{origin} is automatically
set to the @code{location} parameter."
(and clef (make-cue-clef-unset))))))
quote-music))
-(define-public ((quote-substitute quote-tab) music)
+(define ((quote-substitute quote-tab) music)
(let* ((quoted-name (ly:music-property music 'quoted-music-name))
(quoted-vector (and (string? quoted-name)
(hash-ref quote-tab quoted-name #f))))
ly:quote-iterator::constructor))
(ly:music-warning music (ly:format (_ "cannot find quoted music: `~S'") quoted-name))))
music))
+(export quote-substitute)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(cons need-restore need-accidental)))
-(define-public ((make-accidental-rule octaveness laziness) context pitch barnum measurepos)
+(define ((make-accidental-rule octaveness laziness) context pitch barnum measurepos)
"Create an accidental rule that makes its decision based on the octave of
the note and a laziness value.
immediately', that is, only look at key signature. @code{#t} is `forever'."
(check-pitch-against-signature context pitch barnum laziness octaveness #f))
+(export make-accidental-rule)
-(define-public ((make-accidental-dodecaphonic-rule octaveness laziness) context pitch barnum measurepos)
+(define ((make-accidental-dodecaphonic-rule octaveness laziness) context pitch barnum measurepos)
"Variation on function make-accidental-rule that creates an dodecaphonic
accidental rule."
(check-pitch-against-signature context pitch barnum laziness octaveness #t))
+(export make-accidental-dodecaphonic-rule)
(define (key-entry-notename entry)
"Return the pitch of an @var{entry} in @code{localAlterations}.
0))
(define-public (find-pitch-entry keysig pitch accept-global accept-local)
- "Return the first entry in @var{keysig} that matches @var{pitch}.
+ "Return the first entry in @var{keysig} that matches @var{pitch}
+by notename and octave. Alteration is not considered.
@var{accept-global} states whether key signature entries should be included.
@var{accept-local} states whether local accidentals should be included.
If no matching entry is found, @var{#f} is returned."
note (just as in the dodecaphonic accidental style) @emph{except} if
the note is immediately preceded by a note with the same pitch. This
is a common accidental style in contemporary notation."
- (let* ((keysig (ly:context-property context 'localKeySignature))
- (entry (find-pitch-entry keysig pitch #t #t)))
+ (let* ((keysig (ly:context-property context 'localAlterations))
+ (entry (find-pitch-entry keysig pitch #f #t)))
(if (not entry)
- (cons #f #t)
- (let* ((entrymp (key-entry-measure-position entry))
- (entrybn (key-entry-bar-number entry)))
- (cons #f
- (not
- (and (equal? entrybn barnum) (equal? entrymp measurepos))))))))
+ (cons #f #t)
+ (let ((entrymp (key-entry-measure-position entry))
+ (entrybn (key-entry-bar-number entry))
+ (entryalt (key-entry-alteration entry))
+ (alt (ly:pitch-alteration pitch)))
+ (cons #t
+ (not (and (equal? entrybn barnum)
+ (or (equal? measurepos entrymp)
+ (ly:moment<? measurepos entrymp))
+ (equal? entryalt alt))))))))
(define-public (teaching-accidental-rule context pitch barnum measurepos)
"An accidental rule that typesets a cautionary accidental if it is
;; repeated notes (in the same voice) don't get an accidental
((equal? style 'dodecaphonic-no-repeat)
(set-accidentals-properties #f
- `(Staff ,(make-accidental-rule 'same-octave 0)
- ,dodecaphonic-no-repeat-rule)
- '()
- context))
+ `(Staff ,dodecaphonic-no-repeat-rule)
+ '()
+ context))
;; Variety of the dodecaphonic style. Each note gets an accidental,
;; except notes that were already handled in the same measure.
((equal? style 'dodecaphonic-first)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; The following is used by the alterBroken function.
-(define-public ((value-for-spanner-piece arg) grob)
+(define ((value-for-spanner-piece arg) grob)
"Associate a piece of broken spanner @var{grob} with an element
of list @var{arg}."
(let* ((orig (ly:grob-original grob))
(if (>= (length siblings) 2)
(helper siblings arg)
(car arg))))
+(export value-for-spanner-piece)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; measure counter
vals))))
; return the closure named `self'
self)
+
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; \magnifyMusic and \magnifyStaff
+
+;; defined as a function instead of a list because the
+;; all-grob-descriptions alist is not available yet
+(define-public (find-all-space-alist-props grob-descriptions)
+ "Used by @code{\\magnifyStaff}. When @var{grob-descriptions} is equal
+to the @code{all-grob-descriptions} alist (defined in
+@file{scm/define-grobs.scm}), this will find all grobs that have an
+initialized value for the @code{space-alist} property, and return them
+as a list in the following format:
+@example
+'((Ambitus space-alist)
+ (BarLine space-alist)
+ ...)
+@end example"
+ (define (has-space-alist? grob-desc)
+ (ly:assoc-get 'space-alist (cdr grob-desc)))
+ (let* ((grob-descriptions-with-space-alist
+ (filter has-space-alist? grob-descriptions))
+ (grob-names-with-space-alist
+ (map car grob-descriptions-with-space-alist)))
+ (map (lambda (grob-name) (list grob-name 'space-alist))
+ grob-names-with-space-alist)))
+
+(define (magnifyStaff-is-set? context mag)
+ (let* ((Staff (ly:context-find context 'Staff))
+ (old-mag (ly:context-property Staff 'magnifyStaffValue)))
+ (not (null? old-mag))))
+
+(define (staff-magnification-is-changing? context mag)
+ (let* ((Staff (ly:context-find context 'Staff))
+ (old-mag (ly:context-property Staff 'magnifyStaffValue 1)))
+ (not (= old-mag mag))))
+
+(define-public (scale-fontSize func-name mag)
+ "Used by @code{\\magnifyMusic} and @code{\\magnifyStaff}. Look up the
+current @code{fontSize} in the appropriate context and scale it by the
+magnification factor @var{mag}. @var{func-name} is either
+@code{'magnifyMusic} or @code{'magnifyStaff}."
+ (make-apply-context
+ (lambda (context)
+ (if (or (eq? func-name 'magnifyMusic)
+ ;; for \magnifyStaff, only scale the fontSize
+ ;; if staff magnification is changing
+ (staff-magnification-is-changing? context mag))
+ (let* ((where (case func-name
+ ((magnifyMusic) context)
+ ((magnifyStaff) (ly:context-find context 'Staff))))
+ (fontSize (ly:context-property where 'fontSize 0))
+ (new-fontSize (+ fontSize (magnification->font-size mag))))
+ (ly:context-set-property! where 'fontSize new-fontSize))))))
+
+(define-public (revert-fontSize func-name mag)
+ "Used by @code{\\magnifyMusic} and @code{\\magnifyStaff}. Calculate
+the previous @code{fontSize} value (before scaling) by factoring out the
+magnification factor @var{mag} (if @var{func-name} is
+@code{'magnifyMusic}), or by factoring out the context property
+@code{magnifyStaffValue} (if @var{func-name} is @code{'magnifyStaff}).
+Revert the @code{fontSize} in the appropriate context accordingly.
+
+With @code{\\magnifyMusic}, the scaling is reverted after the music
+block it operates on. @code{\\magnifyStaff} does not operate on a music
+block, so the scaling from a previous call (if there is one) is reverted
+before the new scaling takes effect."
+ (make-apply-context
+ (lambda (context)
+ (if (or (eq? func-name 'magnifyMusic)
+ ;; for \magnifyStaff...
+ (and
+ ;; don't revert the user's fontSize choice
+ ;; the first time \magnifyStaff is called
+ (magnifyStaff-is-set? context mag)
+ ;; only revert the previous fontSize
+ ;; if staff magnification is changing
+ (staff-magnification-is-changing? context mag)))
+ (let* ((where
+ (case func-name
+ ((magnifyMusic) context)
+ ((magnifyStaff) (ly:context-find context 'Staff))))
+ (old-mag
+ (case func-name
+ ((magnifyMusic) mag)
+ ((magnifyStaff)
+ (ly:context-property where 'magnifyStaffValue 1))))
+ (fontSize (ly:context-property where 'fontSize 0))
+ (old-fontSize (- fontSize (magnification->font-size old-mag))))
+ (ly:context-set-property! where 'fontSize old-fontSize))))))
+
+(define-public (scale-props func-name mag allowed-to-shrink? props)
+ "Used by @code{\\magnifyMusic} and @code{\\magnifyStaff}. For each
+prop in @var{props}, find the current value of the requested prop, scale
+it by the magnification factor @var{mag}, and do the equivalent of a
+@code{\\temporary@tie{}\\override} with the new value in the appropriate
+context. If @var{allowed-to-shrink?} is @code{#f}, don't let the new
+value be less than the current value. @var{func-name} is either
+@code{'magnifyMusic} or @code{'magnifyStaff}. The @var{props} list is
+formatted like:
+@example
+'((Stem thickness)
+ (Slur line-thickness)
+ ...)
+@end example"
+ (make-apply-context
+ (lambda (context)
+ (define (scale-prop grob-prop-list)
+ (let* ((grob (car grob-prop-list))
+ (prop (cadr grob-prop-list))
+ (where (if (eq? grob 'SpacingSpanner)
+ (ly:context-find context 'Score)
+ (case func-name
+ ((magnifyMusic) context)
+ ((magnifyStaff) (ly:context-find context 'Staff)))))
+ (grob-def (ly:context-grob-definition where grob)))
+ (if (eq? prop 'space-alist)
+ (let* ((space-alist (ly:assoc-get prop grob-def))
+ (scale-spacing-tuple (lambda (x)
+ (cons (car x)
+ (cons (cadr x)
+ (* mag (cddr x))))))
+ (scaled-tuples (map scale-spacing-tuple space-alist))
+ (new-alist (append scaled-tuples space-alist)))
+ (ly:context-pushpop-property where grob prop new-alist))
+ (let* ((val (ly:assoc-get prop grob-def 1))
+ (proc (lambda (x)
+ (if allowed-to-shrink?
+ (* x mag)
+ (* x (max 1 mag)))))
+ (new-val (if (number-pair? val)
+ (cons (proc (car val))
+ (proc (cdr val)))
+ (proc val))))
+ (ly:context-pushpop-property where grob prop new-val)))))
+ (if (or (eq? func-name 'magnifyMusic)
+ ;; for \magnifyStaff, only scale the properties
+ ;; if staff magnification is changing
+ (staff-magnification-is-changing? context mag))
+ (for-each scale-prop props)))))
+
+(define-public (revert-props func-name mag props)
+ "Used by @code{\\magnifyMusic} and @code{\\magnifyStaff}. Revert each
+prop in @var{props} in the appropriate context. @var{func-name} is
+either @code{'magnifyMusic} or @code{'magnifyStaff}. The @var{props}
+list is formatted like:
+@example
+'((Stem thickness)
+ (Slur line-thickness)
+ ...)
+@end example"
+ (make-apply-context
+ (lambda (context)
+ (define (revert-prop grob-prop-list)
+ (let* ((grob (car grob-prop-list))
+ (prop (cadr grob-prop-list))
+ (where (if (eq? grob 'SpacingSpanner)
+ (ly:context-find context 'Score)
+ (case func-name
+ ((magnifyMusic) context)
+ ((magnifyStaff) (ly:context-find context 'Staff))))))
+ (ly:context-pushpop-property where grob prop)))
+ (if (or (eq? func-name 'magnifyMusic)
+ ;; for \magnifyStaff...
+ (and
+ ;; don't revert the user's property overrides
+ ;; the first time \magnifyStaff is called
+ (magnifyStaff-is-set? context mag)
+ ;; revert the overrides from the previous \magnifyStaff,
+ ;; but only if staff magnification is changing
+ (staff-magnification-is-changing? context mag)))
+ (for-each revert-prop props)))))
+
+;; \magnifyMusic only
+(define-public (scale-beam-thickness mag)
+ "Used by @code{\\magnifyMusic}. Scaling @code{Beam.beam-thickness}
+exactly to the @var{mag} value will not work. This uses two reference
+values for @code{beam-thickness} to determine an acceptable value when
+scaling, then does the equivalent of a
+@code{\\temporary@tie{}\\override} with the new value."
+ (make-apply-context
+ (lambda (context)
+ (let* ((grob-def (ly:context-grob-definition context 'Beam))
+ (val (ly:assoc-get 'beam-thickness grob-def 0.48))
+ (ratio-to-default (/ val 0.48))
+ ;; gives beam-thickness=0.48 when mag=1 (like default),
+ ;; gives beam-thickness=0.35 when mag=0.63 (like CueVoice)
+ (scaled-default (+ 119/925 (* mag 13/37)))
+ (new-val (* scaled-default ratio-to-default)))
+ (ly:context-pushpop-property context 'Beam 'beam-thickness new-val)))))
;; a formatter function, which is simply a wrapper around an existing
;; tuplet formatter function. It takes the value returned by the given
;; function and appends a note of given length.
-(define-public ((tuplet-number::append-note-wrapper function note) grob)
+(define ((tuplet-number::append-note-wrapper function note) grob)
(let ((txt (if function (function grob) #f)))
(if txt
(markup txt #:fontsize -5 #:note note UP)
(markup #:fontsize -5 #:note note UP))))
+(export tuplet-number::append-note-wrapper)
;; Print a tuplet denominator with a different number than the one derived from
;; the actual tuplet fraction
-(define-public ((tuplet-number::non-default-tuplet-denominator-text denominator)
+(define ((tuplet-number::non-default-tuplet-denominator-text denominator)
grob)
(number->string (if denominator
denominator
(ly:event-property (event-cause grob) 'denominator))))
+(export tuplet-number::non-default-tuplet-denominator-text)
;; Print a tuplet fraction with different numbers than the ones derived from
;; the actual tuplet fraction
-(define-public ((tuplet-number::non-default-tuplet-fraction-text
+(define ((tuplet-number::non-default-tuplet-fraction-text
denominator numerator) grob)
(let* ((ev (event-cause grob))
(den (if denominator denominator (ly:event-property ev 'denominator)))
(num (if numerator numerator (ly:event-property ev 'numerator))))
(format #f "~a:~a" den num)))
+(export tuplet-number::non-default-tuplet-fraction-text)
;; Print a tuplet fraction with note durations appended to the numerator and the
;; denominator
-(define-public ((tuplet-number::fraction-with-notes
+(define ((tuplet-number::fraction-with-notes
denominatornote numeratornote) grob)
(let* ((ev (event-cause grob))
(denominator (ly:event-property ev 'denominator))
((tuplet-number::non-default-fraction-with-notes
denominator denominatornote numerator numeratornote) grob)))
+(export tuplet-number::fraction-with-notes)
;; Print a tuplet fraction with note durations appended to the numerator and the
;; denominator
-(define-public ((tuplet-number::non-default-fraction-with-notes
+(define ((tuplet-number::non-default-fraction-with-notes
denominator denominatornote numerator numeratornote) grob)
(let* ((ev (event-cause grob))
(den (if denominator denominator (ly:event-property ev 'denominator)))
(make-simple-markup " : ")
(make-simple-markup (format #f "~a" num))
(markup #:fontsize -5 #:note numeratornote UP)))))
+(export tuplet-number::non-default-fraction-with-notes)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
'(bound-details left padding)
(+ my-padding script-padding)))))))
-(define-public ((elbowed-hairpin coords mirrored?) grob)
+(define ((elbowed-hairpin coords mirrored?) grob)
"Create hairpin based on a list of @var{coords} in @code{(cons x y)}
form. @code{x} is the portion of the width consumed for a given line
and @code{y} is the portion of the height. For example,
(if mirrored? (my-c-p-s downlist thick decresc?) empty-stencil))
(cons xtrans ytrans)))
'())))
+(export elbowed-hairpin)
(define-public flared-hairpin
(elbowed-hairpin '((0.95 . 0.4) (1.0 . 1.0)) #t))
(make-tied-lyric-markup text)
text))))
-(define-public ((grob::calc-property-by-copy prop) grob)
+(define ((grob::calc-property-by-copy prop) grob)
(ly:event-property (event-cause grob) prop))
+(export grob::calc-property-by-copy)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; general inheritance
-(define-public ((grob::inherit-parent-property axis property . default) grob)
+(define ((grob::inherit-parent-property axis property . default) grob)
"@var{grob} callback generator for inheriting a @var{property} from
an @var{axis} parent, defaulting to @var{default} if there is no
parent or the parent has no setting."
(apply ly:grob-property parent property default))
((pair? default) (car default))
(else '()))))
+(export grob::inherit-parent-property)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; fret boards
(define-public (set-paper-dimension-variables mod)
(module-define! mod 'dimension-variables
- '(blot-diameter
+ '(binding-offset
+ blot-diameter
bottom-margin
cm
footnote-footer-padding
;; (dotted) half notes to distinguish them from quarter notes:
(define-public (tabvoice::make-double-stem-width-for-half-notes grob)
(let ((X-extent (ly:stem::width grob)))
-
- ;; is the note a (dotted) half note?
- (if (= 1 (ly:grob-property grob 'duration-log))
- ;; yes -> return double stem width
- (cons (car X-extent) (+ 0.5 (* 2 (cdr X-extent))))
- ;; no -> return simple stem width
- X-extent)))
+ ;; does the stem exist and is it on a (dotted) half note?
+ (if (and (not (equal? X-extent empty-interval))
+ (= 1 (ly:grob-property grob 'duration-log)))
+
+ ;; yes -> return double stem X-extent
+ (let* ((single-stem-width (- (cdr X-extent) (car X-extent)))
+ (separation (ly:grob-property grob 'double-stem-separation 0.5))
+ (total-width (+ single-stem-width separation))
+ (half-width (/ total-width 2)))
+ (cons (- half-width) half-width))
+ ;; no -> return simple stem X-extent
+ X-extent)))
(define-public (tabvoice::draw-double-stem-for-half-notes grob)
- (let ((stem (ly:stem::print grob)))
-
- ;; is the note a (dotted) half note?
- (if (= 1 (ly:grob-property grob 'duration-log))
- ;; yes -> draw double stem
- (ly:stencil-combine-at-edge stem X RIGHT stem 0.5)
- ;; no -> draw simple stem
- stem)))
+ (let ((stem-stencil (ly:stem::print grob)))
+ ;; does the stem exist and is it on a (dotted) half note?
+ (if (and (ly:stencil? stem-stencil)
+ (= 1 (ly:grob-property grob 'duration-log)))
+
+ ;; yes -> draw double stem
+ (let* ((separation (ly:grob-property grob 'double-stem-separation 0.5))
+ (half-separation (/ separation 2)))
+ (ly:stencil-add
+ (ly:stencil-translate-axis stem-stencil (- half-separation) X)
+ (ly:stencil-translate-axis stem-stencil half-separation X)))
+ ;; no -> draw simple stem (or none at all)
+ stem-stencil)))
;; as default, the glissando line between fret numbers goes
;; upwards, here we have a function to correct this behavior:
;; a callback for custom fret labels
-(define-public ((tab-note-head::print-custom-fret-label fret) grob)
+(define ((tab-note-head::print-custom-fret-label fret) grob)
(ly:grob-set-property! grob 'text fret)
(tab-note-head::print grob))
+(export tab-note-head::print-custom-fret-label)
(define-public (tab-note-head::print grob)
(define (is-harmonic? grob)
;;;;;;;;;;;;;;;;;;
-(define-public ((marked-up-headfoot what-odd what-even)
+(define ((marked-up-headfoot what-odd what-even)
layout scopes page-number is-last-bookpart is-bookpart-last-page)
"Read variables @var{what-odd}, @var{what-even} from @var{layout},
and interpret them as markup. The @var{props} argument will include
(markup? (get what-even)))
(get what-even)
(get what-odd))))
+(export marked-up-headfoot)
-(define-public ((marked-up-title what) layout scopes)
+(define ((marked-up-title what) layout scopes)
"Read variables @var{what} from @var{scopes}, and interpret it as markup.
The @var{props} argument will include variables set in @var{scopes} (prefixed
with `header:'."
(if (markup? markup)
(interpret-markup layout props markup)
empty-stencil)))
+(export marked-up-title)
;; prepare using other fonts than 'fetaMusic.
;; Currently it ensures that the default-fonts are used by the
;; markup-command 'note-by-number' in 'metronome-markup' (see below).
-(define*-public
+(define*
((styled-metronome-markup #:optional (glyph-font 'default))
event context)
(let ((hide-note (ly:context-property context 'tempoHideNote #f))
(count (ly:event-property event 'metronome-count)))
(metronome-markup glyph-font text dur count hide-note)))
+(export styled-metronome-markup)
(define-public format-metronome-markup
(styled-metronome-markup))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; bar numbers
-(define-public ((every-nth-bar-number-visible n) barnum mp)
+(define ((every-nth-bar-number-visible n) barnum mp)
(= 0 (modulo barnum n)))
+(export every-nth-bar-number-visible)
-(define-public ((modulo-bar-number-visible n m) barnum mp)
+(define ((modulo-bar-number-visible n m) barnum mp)
(and (> barnum 1) (= m (modulo barnum n))))
+(export modulo-bar-number-visible)
-(define-public ((set-bar-number-visibility n) tr)
+(define ((set-bar-number-visibility n) tr)
(let ((bn (ly:context-property tr 'currentBarNumber)))
(ly:context-set-property! tr 'barNumberVisibility
(modulo-bar-number-visible n (modulo bn n)))))
+(export set-bar-number-visibility)
(define-public (first-bar-number-invisible barnum mp)
(> barnum 1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; percent repeat counters
-(define-public ((every-nth-repeat-count-visible n) count context)
+(define ((every-nth-repeat-count-visible n) count context)
(= 0 (modulo count n)))
+(export every-nth-repeat-count-visible)
(define-public (all-repeat-counts-visible count context) #t)
--- /dev/null
+#!/bin/bash
+
+# convert a Google code CSV file into a countdown announcement
+#
+# USAGE:
+# make-countdown-announcement.sh NEXT_DEADLINE_DATE [PATCH-MEISTER]
+# OR
+# make-countdown-announcement.sh NEXT_DEADLINE_DATE [PATCH-MEISTER] > OUTPUT-FILE
+#
+# EXAMPLES:
+# make-countdown-announcement.sh "Jan 1, 2001" "John Doe"
+# make-countdown-announcement.sh "Jan 1, 2001" John
+# make-countdown-announcement.sh "Jan 1, 2001" > countdown.txt
+
+
+CSV_FILE=lilypond-issues.csv # comma-separated values
+TSV_FILE=lilypond-issues.tsv # tab-separated values
+URL_BASE="http://code.google.com/p/lilypond/issues"
+QUERY_STR="q=Patch%3Apush%2Ccountdown%2Creview%2Cnew%2Cwaiting&colspec=Patch%20Owner%20ID%20Summary&sort=patch"
+DEADLINE=$1
+PATCH_MEISTER=${2:-"The Patch Mister"}
+MAILMAP='
+"adam.spiers","Adam Spiers"
+"aleksandr.andreev","Aleksandr Andreev"
+"benko.pal","Benkő Pál"
+"bordage.bertrand","Bertrand Bordage"
+"brownian.box","Dmytro O. Redchuk"
+"Carl.D.Sorensen","Carl Sorensen"
+"carlopeterson","Carl Peterson"
+"colinghall","Colin Hall"
+"ColinPKCampbell","Colin Campbell"
+"d8valily","Mark Mathias"
+"dak@gnu.org","David Kastrup"
+"david.nalesnik","David Nalesnik"
+"dschudy","Devon Schudy"
+"Eluzew","Eluze W"
+"erlenda","Erlend Aasland"
+"fedelogy","Federico Bruni"
+"frederic.bron.1995@polytechnique.org","Frédéric Bron"
+"graham@percival-music.ca","Graham Percival"
+"hanwenn","Han-Wen Nienhuys"
+"hjunes","Heikki Junes"
+"ianhulin44","Ian Hulin"
+"idragosani","Brett McCoy"
+"jameselihubailey","James E. Bailey"
+"janek.lilypond","Janek Warchoł"
+"jan.nieuwenhuizen","Jan Nieuwenhuizen"
+"joeneeman","Joe Neeman"
+"john.mandereau","John Mandereau"
+"joseph.wakeling","Joseph Wakeling"
+"julien.rioux","Julien Rioux"
+"kieren@alumni.rice.edu","Kieren MacMillan"
+"k-ohara5a5a@oco.net","Keith OHara"
+"lemzwerg","Werner Lemberg"
+"lilyliska","Urs Liska"
+"lilypond.patchy.graham","Graham Percival"
+"mandolaerik","Erik Sandberg"
+"marc@hohlart.de","Marc Hohl"
+"marek@gregoriana.sk","Marek Klein"
+"markpolesky","Mark Polesky"
+"milimetr88","Łukasz Czerwiński"
+"mtsolo","Mike Solomon"
+"neziap","Janek Warchoł"
+"nicolas.sceaux","Nicolas Sceaux"
+"n.puttock","Neil Puttock"
+"paconet.org","Francisco Vila"
+"PhilEHolmes","Phil Holmes"
+"pkx166h","James Lowe"
+"plroskin","Pavel Roskin"
+"pnorcks","Patrick McCarty"
+"RalphBugList","Ralph Palmer"
+"reinhold.kainhofer","Reinhold Kainhofer"
+"rzedeler","Rune Zedeler"
+"schilke.60","Derek Klinge"
+"shingarov","Boris Shingarov"
+"tdanielsmusic","Trevor Daniels"
+"thomasmorley65","Thomas Morley"
+"v.villenave","Valentin Villenave"
+'
+
+
+usage() {
+ cat << EOF >&2
+USAGE:
+ `basename $0` NEXT_DEADLINE_DATE [PATCH-MEISTER]
+ OR
+ `basename $0` NEXT_DEADLINE_DATE [PATCH-MEISTER] > OUTPUT-FILE
+
+EXAMPLES:
+ `basename $0` "Jan 1, 2001" "John Doe"
+ `basename $0` "Jan 1, 2001" John
+ `basename $0` "Jan 1, 2001" > countdown.txt
+EOF
+ exit 1
+}
+
+
+# display USAGE
+case $# in
+ 1|2) case $1 in
+ -h|--help) usage ;;
+ *) ;;
+ esac ;;
+ *) usage ;;
+esac
+
+
+# clean up in case of a previous interrupt
+remove-if-exists() {
+ if [ -e $1 ]; then rm $1; fi
+}
+remove-if-exists push.tmp
+remove-if-exists countdown.tmp
+remove-if-exists review.tmp
+remove-if-exists new.tmp
+remove-if-exists waiting.tmp
+remove-if-exists $TSV_FILE
+
+
+# show initial instructions
+read -p "First, in your web browser, make sure you're logged in to:
+
+ $URL_BASE/list
+
+Then save the following link as a file called \"$CSV_FILE\"
+(save it to this directory -- $PWD/):
+
+ $URL_BASE/csv?$QUERY_STR
+
+Then press enter"
+
+
+if [ ! -e $CSV_FILE ]; then
+ echo -e "\nError: can't find \`$CSV_FILE': No such file or directory" >&2
+ exit 1
+fi
+
+
+# If the user wasn't logged in when downloading $CSV_FILE, the emails will
+# appear truncated, e.g. "abc...@gmail.com", and won't be properly replaced by
+# the author names later on. This code block complains if the string "...@" is
+# found anywhere in the email field.
+if [ "`cut -d, -f2 $CSV_FILE | grep -o '\.\.\.@'`" ]; then
+ read -p "
+It looks like you were not logged in to Google code when you downloaded
+$CSV_FILE. Continue anyway (y/n)? "
+ while :
+ do
+ case "$REPLY" in
+ y) break ;;
+ n) exit 1 ;;
+ *) read -p "Enter \`y' to continue; \`n' to quit and try again: "
+ esac
+ done
+fi
+
+
+# change the quoted, comma-separated file
+# into an unquoted, tab-separated file
+# and keep only the first 4 fields: Patch,Owner,ID,Summary
+sed '{
+1d
+/^$/d
+s/^"//
+s/","/\t/g
+s/",*$//
+s/""/"/g
+}' $CSV_FILE | cut -sf1-4 > $TSV_FILE
+
+
+EMAILS_USED=`awk -F"\t" '{ print $2 }' $TSV_FILE | sort --unique`
+KNOWN_EMAILS=`
+IFS=$'\n'
+for i in $MAILMAP; do
+ echo "$i" | sed 's/^"\(.*\)",".*/\1/'
+done | sort --unique`
+UNKNOWN_EMAILS=`comm -23 <(echo "$EMAILS_USED") <(echo "$KNOWN_EMAILS")`
+
+
+# Unknown emails/usernames usually mean new contributors.
+# If any are found, the user is prompted to add the new
+# authors' names to the MAILMAP list above.
+if [ "$UNKNOWN_EMAILS" ]; then
+ COUNT=`wc --lines <(echo "$UNKNOWN_EMAILS") | sed 's/ .*//'`
+ if [ $COUNT -eq 1 ]; then
+ echo -e "\nError: The following email/username needs to be associated with a name:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/^/ /' >&2
+ echo -e "Please add it to the MAILMAP list in\n $0" >&2
+ else
+ echo -e "\nError: The following emails/usernames need to be associated with names:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/^/ /' >&2
+ echo -e "Please add them to the MAILMAP list in\n $0" >&2
+ fi
+ echo "using the following form:" >&2
+ echo "$UNKNOWN_EMAILS" | sed 's/.*/ "&","author name"/' >&2
+ echo "and commit your changes to the main git repository." >&2
+ remove-if-exists $TSV_FILE
+ exit 1
+fi
+
+
+EMAIL_REPLACEMENTS=`
+IFS=$'\n'
+for i in $MAILMAP; do
+ echo "$i" | sed 's/^"\(.*\)","\(.*\)"$/s\/\1\/\2\/g/'
+done`
+
+
+# replace emails/usernames with author names
+# and separate the issues by patch type
+sed -n "{
+$EMAIL_REPLACEMENTS
+/^push/w push.tmp
+/^countdown/w countdown.tmp
+/^review/w review.tmp
+/^new/w new.tmp
+/^waiting/w waiting.tmp
+}" $TSV_FILE
+
+
+# clean up; $TSV_FILE is no longer needed
+remove-if-exists $TSV_FILE
+
+
+format-entry() {
+ TYPE=$1
+ FILE="$1.tmp"
+ if [ -s $FILE ]; then
+ echo -e "$TYPE:\n" | tr 'a-z' 'A-Z'
+ awk -v UB=$URL_BASE -F"\t" \
+ '{ printf("%s: %s\n%s/detail?id=%d\n\n"), $2, $4, UB, $3 }' $FILE
+ echo -e "____________________\n\n"
+ fi
+ remove-if-exists $FILE
+}
+
+echo >&2
+
+
+# display the countdown announcement
+echo "Hello,
+
+Here is the current patch countdown list.
+The next countdown will be on $DEADLINE.
+
+You can always view the most current countdown list here:
+$URL_BASE/list?$QUERY_STR
+
+____________________
+
+"
+
+format-entry push
+format-entry countdown
+format-entry review
+format-entry new
+format-entry waiting
+
+echo -e "Thank you,\n$PATCH_MEISTER"
LY_HEADER_LSR = '''%% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
%% and then run scripts/auxiliar/makelsr.py
%%
"tuplet-note-wrapper": """ % a formatter function, which is simply a wrapper around an existing
% tuplet formatter function. It takes the value returned by the given
% function and appends a note of given length.
- #(define-public ((tuplet-number::append-note-wrapper function note) grob)
+ #(define ((tuplet-number::append-note-wrapper function note) grob)
(let* ((txt (if function (function grob) #f)))
(if txt
(markup txt #:fontsize -5 #:note note UP)
# convert accordion-registration to lilypond.
# Since lilypond does not have any built-in commands, we need to create
# the markup commands manually and define our own variables.
-# Idea was taken from: http://lsr.dsi.unimi.it/LSR/Item?id=194
+# Idea was taken from: http://lsr.di.unimi.it/LSR/Item?id=194
def musicxml_accordion_to_markup (mxl_event):
commandname = "accReg"
command = ""