From 1c65548a91dfb2c25647847fefc6e13ffeb6b1c2 Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 26 Mar 2002 22:48:20 +0000 Subject: [PATCH] lilypond-1.2.12 --- Documentation/hacking.texi | 816 ----- Documentation/tex/GNUmakefile | 63 - Documentation/tex/feta.tex | 70 - Documentation/tex/glossary-table.data | 255 -- Documentation/tex/mudela-book-doc.doc | 376 --- Documentation/tex/reference-manual.tely | 3617 ----------------------- Documentation/tex/regression-test.tely | 302 -- Documentation/tex/testje.fly | 2 - Documentation/tex/tutorial.tely | 945 ------ 9 files changed, 6446 deletions(-) delete mode 100644 Documentation/hacking.texi delete mode 100644 Documentation/tex/GNUmakefile delete mode 100644 Documentation/tex/feta.tex delete mode 100644 Documentation/tex/glossary-table.data delete mode 100644 Documentation/tex/mudela-book-doc.doc delete mode 100644 Documentation/tex/reference-manual.tely delete mode 100644 Documentation/tex/regression-test.tely delete mode 100644 Documentation/tex/testje.fly delete mode 100644 Documentation/tex/tutorial.tely diff --git a/Documentation/hacking.texi b/Documentation/hacking.texi deleted file mode 100644 index f5cdd9cb9c..0000000000 --- a/Documentation/hacking.texi +++ /dev/null @@ -1,816 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@setfilename internals.info -@settitle LilyPond internals - -@node Top, LilyPond internals, (dir), (dir) -@top - - -@menu -* LilyPond internals:: -* Overview:: -* mudela:: -* Request_engraver:: -* Items and spanners:: -* Dependencies:: -* Breaking:: -* Coding standards:: -* Making patches:: -@end menu - -@node LilyPond internals, , Top, Top -@menu -* Overview:: Overview -* mudela:: mudela -* Request_engraver:: Request_engraver -* Items and spanners:: Items and spanners -* Dependencies:: Dependencies -* Breaking:: Breaking -@end menu - -@chapter LilyPond internals - - -This documents some aspects of the internals of GNU LilyPond. Some of -this stuff comes from e-mail I wrote, some from e-mail others wrote, -some are large comments taken away from the headers. This page may be -a little incoherent. Unfortunately, it is also quite outdated. A -more thorough and understandable document is in the works. - -You should use @code{doc++} to take a peek at the sources. - -@node Overview, mudela, Top, Top -@section Overview - -GNU LilyPond is a "multi-pass" system. The different passes have been -created so that they do not depend on each other. In a later stage -some parts may be moved into libraries, or seperate programs, or they -might be integrated in larger systems. - -@table @samp - -@item Parsing: - -No difficult algorithms. The .ly file is read, and converted to a list -of @code{Scores}, which each contain @code{Music} and paper/midi-definitions. - -@item Interpreting music - -The music is walked through in time-order. The iterators which do the -walking report Music to Translators which use this information to -create elements, either MIDI or "visual" elements. The translators -form a hierarchy; the ones for paper output are Engravers, for MIDI -Performers. - -The translators swallow Music (mostly atomic gobs called Requests), -create elements, broadcast them to other translators on higher or same -level in the hierarchy: - -The stem of a voice A is broadcast to the staff which contains A, but -not to the stems, beams and noteheads of a different voice (say B) or -a different staff. The stem and noteheads of A are coupled, because -the the Note_heads_engraver broadcasts its heads, and the Stem_engraver catches -these. - -The engraver which agrees to handle a request decides whether to to -honor the request, ignore it, or merge it with other requests. Merging -of requests is preferably done with other requests done by members of -the same voicegroups (beams, brackets, stems). In this way you can put -the voices of 2 instruments in a conductor's score so they make chords -(the Beam requests of both instruments will be merged). - -@item Prebreaking - -Breakable stuff (eg. clefs and bars) are copied into pre and -postbreaks. - -@item Preprocessing - -Some dependencies are resolved, such as the direction of stems, beams, -and "horizontal" placement issues (the order of clefs, keys etc, -placement of chords in multi-voice music), - -@item Break calculation: - -The lines and horizontal positions of the columns are determined. - -@item Breaking - -Through some magical interactions with Line_of_score and Super_elem -(check out the source) the "lines" are produced. - -All other spanners can figure across which lines they are spread. If -applicable, they break themselves into pieces. After this, each piece -(or, if there are no pieces, the original spanner itself) throws out -any dependencies which are in the wrong line. - -@item Postprocesing: - -Some items and all spanners need computation after the Paper_column -positions are determined. Examples: slurs, vertical positions of -staffs. - -@item Output paper - -@end table - -@node mudela, Request_engraver, Overview, Top -@section mudela - -Most information is stored in the form of a request. In music -typesetting, the user might want to cram a lot more symbols on the -paper than actually fits. To reflect this idea (the user asks more -than we can do), the container for this data is called Request. - -In a lot of other formats this would be called an 'Event' - -@table @samp -@item @code{Barcheck_req} - Checks during music processing if start of this voice element - coincides with the start of a measure. Handy to check if you left out - some voice elts. -@item @code{Note_req} - LilyPond has to decide if the ball should be hanging left or - right. This influences the horizontal dimensions of a column, and this - is why request processing should be done before horizontal spacing. - Other voices' frivolities may cause the need for accidentals, so this - is also for the to decide. The engraver can decide on positioning based on - ottava commands and the appropriate clef. -@item @code{Rest_req} - Typeset a rest. -@item @code{Span_req} - This type of request typically results in the creation of a @code{Spanner} -@item @code{Beam_req} - Start/stop a beam. - Engraver has to combine this request with the stem_request, since the - number of flags that a stem wants to carry will determine the - number of beams. -@item @code{Dynamic} - Each dynamic is bound to one note (a crescendo spanning multiple - notes is thought to be made of two "dynamics": a start and a stop). - Dynamic changes can occur in a smaller time than the length of its - note, therefore fore each @code{Dynamic} request carries a time, measured - from the start of its note. -@end table - -@node Request_engraver, Items and spanners, mudela, Top -@section Request_engraver - -In the previous section the idea of Request has been explained, but -this only solves one half of the problem. The other half is deciding -which requests should be honored, which should merged with other -requests, and which should be ignored. Consider this input - -@example - - \type Staff < % chord - @{ \meter 2/4; [c8 c8] @} - @{\meter 2/4; [e8 e8] @} - > - -@end example - -Both the cs and es are part of a staff (they are in the same -Voice_group), so they should share meters, but the two [ ] pairs -should be merged. - -The judge in this "allocation" problem a set of brokers: the requests -are transmitted to so-called engravers which respond if they want to -accept a request eg, the @code{Notehead_engraver} will accept -@code{Note_req}s, and turn down @code{Slur_req}s. If the Music_iterator -cannot find a engraver that wants the request, it is junked (with a -warning message). - -After all requests have been either assigned, or junked, the Engraver -will process the requests (which usually means creating an @code{Item} -or @code{Spanner}). If a @code{Request_engraver} creates something, it -tells the enclosing context. If all items/spanners have been created, -then each Engraver is notified of any created Score_element, via a -broadcasting system. - -@unnumberedsubsec example: - -@example - - c4 - -@end example - -produces: - -@example - - Note_request (duration 1/4) - Stem_request (duration 1/4) - -@end example - -Note_request will be taken by a @code{Notehead_engraver}, stem_request -will be taken by a @code{Stem_beam_engraver}. @code{Notehead_engraver} -creates a @code{Notehead}, @code{Stem_beam_engraver} creates a -@code{Stem}. Both announce this to the Staff_engraver. Staff_engraver -will tell @code{Stem_beam_engraver} about the @code{Notehead}, which -will add the @code{Notehead} to the @code{Stem} it just created. - -To decide on merging, several engravers have been grouped. Please -check @file{init/engraver.ly}. - -@node Items and spanners, Dependencies, Request_engraver, Top -@section Items and spanners - -The symbols that are printed, are generated by items and spanners -(staff-elements). An item has one horizontal position, whereas a -spanner spans several columns. - -@node Dependencies, Breaking, Items and spanners, Top -@section Dependencies - -In music symbols depend on each other: the stems of a beam should -point in the same direction as the beam itself, so the stems of a beam -depend on the beam. In the same way do scripts depend on the direction -of the stem. To reflect this, LilyPond has the notion of dependency. -It works in the same fashion that @code{make} uses to build programs: -before a stem is calculated, its dependencies (the beam) should be -calculated. Before a slur is calculated, its dependencies (stems, -noteheads) should be calculated. - -@node Breaking, Making patches, Dependencies, Top -@section Breaking - -So what is this PREBREAK and POSTBREAK stuff? - -Let's take text as an example. In German some compound -words change their spelling if they are broken: "backen" becomes -"bak-ken". TeX has a mechanism to deal with this, you would define -the spelling of "backen" in TeX in this way - - \discretionary@{bak-@}@{ken@}@{backen@} - -These 3 arguments are called "prebreak", "postbreak" and "nobreak" -text. - -The same problem exists when typesetting music. If a line of music is -broken, the next line usually gets a clef. So in TeX terms, the clef -is a postbreak. The same thing happens with meter signs: Normally the -meter follows the bar. If a line is broken at that bar, the bar along -with the meter stays on the "last" line, but the next line also gets a -meter sign after the clef. Using the previous notation, - - \discretionary@{bar meter@}@{clef meter@}@{ bar meter @} - -In GNU Lilypond, we have the same concepts (and the same -terminology). Each (nonrhythmic) symbol is typeset in a nonrhythmic column -At a breakpoint, multiple symbols are printed; symbols to be printed -if the line is not broken, symbols to appear on the previous line, and -on the next line if it is broken. - -@node Coding standards, , Top, Top - -@chapter CodingStyle - standards while programming for GNU -LilyPond - -We use these standards while doing programming for GNU LilyPond. If -you do some hacking, we appreciate it if you would follow this rules, -but if you don't, we still like you. - -Functions and methods do not return errorcodes. - -@quotation - -A program should be light and agile, its subroutines -connected like a string of pearls. The spirit and intent of -the program should be retained throughout. There should be -neither too little nor too much, neither needless loops nor -useless variables, neither lack of structure nor overwhelming -rigidity. - -A program should follow the 'Law of Least -Astonishment'. What is this law? It is simply that the -program should always respond to the user in the way that -astonishes him least. - -A program, no matter how complex, should act as a -single unit. The program should be directed by the logic -within rather than by outward appearances. - -If the program fails in these requirements, it will be -in a state of disorder and confusion. The only way to correct -this is to rewrite the program. - --- Geoffrey James, "The Tao of Programming" -@end quotation - - -@unnumberedsubsec Languages - -C++ and Python are preferred. Perl is not. Python code should use an -indent of 8, using TAB characters. - -@unnumberedsubsec Filenames - -Definitions of classes that are only accessed via pointers -(*) or references (&) shall not be included as include files. - -filenames - -@example - - ".hh" Include files - ".cc" Implementation files - ".icc" Inline definition files - ".tcc" non inline Template defs - -@end example - -in emacs: - -@example - - (setq auto-mode-alist - (append '(("\\.make$" . makefile-mode) - ("\\.cc$" . c++-mode) - ("\\.icc$" . c++-mode) - ("\\.tcc$" . c++-mode) - ("\\.hh$" . c++-mode) - ("\\.pod$" . text-mode) - ) - auto-mode-alist)) - -@end example - - -The class Class_name_abbreviation is coded in @file{class-name-abbr.*} - -@unnumberedsubsec Indentation - -Standard GNU coding style is used. In emacs: - -@example - - (add-hook 'c++-mode-hook - '(lambda() (c-set-style "gnu") - ) - ) - -@end example - -If you like using font-lock, you can also add this to your @file{.emacs}: - -@example - - (setq font-lock-maximum-decoration t) - (setq c++-font-lock-keywords-3 - (append - c++-font-lock-keywords-3 - '(("\\b\\([a-zA-Z_]+_\\)\\b" 1 font-lock-variable-name-face) - ("\\b\\([A-Z]+[a-z_]+\\)\\b" 1 font-lock-type-face)) - )) - -@end example - -@unnumberedsubsec Classes and Types - -@example - - This_is_a_class - -@end example - -@unnumberedsubsec Members - -@example - - Class::member () - Type Class::member_type_ - Type Class::member_type () - -@end example - -the @code{type} is a Hungarian notation postfix for @code{Type}. See below - -@unnumberedsubsec Macros - -Macros should be written completely in uppercase - -The code should not be compilable if proper macro declarations are not -included. - -Don't laugh. It took us a whole evening/night to figure out one of -these bugs, because we had a macro that looked like -@code{DECLARE_VIRTUAL_FUNCTIONS ()}. - -@unnumberedsubsec Broken code - -Broken code (hardwired dependencies, hardwired constants, slow -algorithms and obvious limitations) should be marked as such: either -with a verbose TODO, or with a short "ugh" comment. - -@unnumberedsubsec Comments - -The source is commented in the DOC++ style. Check out doc++ at -@uref{http://www.zib.de/Visual/software/doc++/index.html} - -@example - - /* - C style comments for multiline comments. - They come before the thing to document. - [...] - */ - - /** - short description. - Long class documentation. - (Hungarian postfix) - - TODO Fix boring_member () - */ - class Class @{ - /** - short description. - long description - */ - - Data data_member_; - - /** - short memo. long doco of member () - @@param description of arguments - @@return Rettype - */ - Rettype member (Argtype); - - /// memo only - boring_member () @{ - data_member_ = 121; // ugh - @} - @}; - -@end example - - -Unfortunately most of the code isn't really documented that good. - -@unnumberedsubsec Members (2) - -Standard methods: - -@example - - ///check that *this satisfies its invariants, abort if not. - void OK () const - - /// print *this (and substructures) to debugging log - void print () const - - /** - protected member. Usually invoked by non-virtual XXXX () - */ - virtual do_XXXX () - - /**add some data to *this. - Presence of these methods usually imply that it is not feasible to this - via a constructor - */ - add (..) - - /// replace some data of *this - set (..) - -@end example - -@unnumberedsubsec Constructor - -Every class should have a default constructor. - -Don't use non-default constructors if this can be avoided: - -@example - - Foo f(1) - -@end example - -is less readable than - -@example - - Foo f; - f.x = 1 - -@end example - -or - -@example - - Foo f(Foo_convert::int_to_foo (1)) - -@end example - -@unnumberedsec Hungarian notation naming convention - -Proposed is a naming convention derived from the so-called -@emph{Hungarian Notation}. Macros, @code{enum}s and @code{const}s are all -uppercase, with the parts of the names separated by underscores. - -@unnumberedsubsec Types - -@table @samp -@item @code{byte} - unsigned char. (The postfix _by is ambiguous) -@item @code{b} - bool -@item @code{bi} - bit -@item @code{ch} - char -@item @code{f} - float -@item @code{i} - signed integer -@item @code{str} - string class -@item @code{sz} - Zero terminated c string -@item @code{u} - unsigned integer -@end table - -@unnumberedsubsec User defined types - -@example - - /** Slur blah. blah. - (slur) - */ - class Slur @{@}; - Slur* slur_p = new Slur; - -@end example - -@unnumberedsubsec Modifiers - -The following types modify the meaning of the prefix. -These are preceded by the prefixes: - -@table @samp -@item @code{a} - array -@item @code{array} - user built array. -@item @code{c} - const. Note that the proper order is @code{Type const} - i.s.o. @code{const Type} -@item @code{C} - A const pointer. This would be equivalent to @code{_c_l}, but since any - "const" pointer has to be a link (you can't delete a const pointer), - it is superfluous. -@item @code{l} - temporary pointer to object (link) -@item @code{p} - pointer to newed object -@item @code{r} - reference -@end table - -@unnumberedsubsec Adjective - -Adjectives such as global and static should be spelled out in full. -They come before the noun that they refer to, just as in normal english. - -@example - -foo_global_i: a global variable of type int commonly called "foo". - -@end example - -static class members do not need the static_ prefix in the name (the -Class::var notation usually makes it clear that it is static) - -@table @samp -@item @code{loop_i} - Variable loop: an integer -@item @code{u} - Temporary variable: an unsigned integer -@item @code{test_ch} - Variable test: a character -@item @code{first_name_str} - Variable first_name: a String class object -@item @code{last_name_ch_a} - Variable last_name: a @code{char} array -@item @code{foo_i_p} - Variable foo: an @code{Int*} that you must delete -@item @code{bar_i_l} - Variable bar: an @code{Int*} that you must not delete -@end table - -Generally default arguments are taboo, except for nil pointers. - -The naming convention can be quite conveniently memorised, by -expressing the type in english, and abbreviating it - -@example - - static Array foo - -@end example - -@code{foo} can be described as "the static int-pointer user-array", so you get - -@example - - foo_static_l_arr - -@end example - - -@unnumberedsec Miscellaneous - - -For some tasks, some scripts are supplied, notably creating patches, a -mirror of the website, generating the header to put over cc and hh -files, doing a release. - -Use them. - -@node Making patches, , Breaking, Top - - -@unnumberedsec name - - -PATCHES - track and distribute your code changes - -This page documents how to distribute your changes to GNU lilypond - -We would like to have unified context diffs with full pathnames. A -script automating supplied with Lily. - - Distributing a change normally goes like this: - -@itemize @bullet -@item make your fix/add your code -@item Add changes to NEWS, and add yourself to Documentation/topdocs/AUTHORS.yo -@item generate a patch, -@item e-mail your patch to one of the mailing lists - gnu-music-discuss@@gnu.org or bug-gnu-music@@gnu.org -@end itemize - -Please do not send entire files, even if the patch is bigger than the -original. A patch makes it clear what is changed, and it won't -overwrite previous not yet released changes. - -@unnumberedsec Generating a patch - - -In @file{VERSION}, set MY_PATCH_LEVEL: - -@example - - VERSION: - ... - MY_PATCH_LEVEL=jcn1 - -@end example - -In @file{CHANGES}, enter a summary of changes: - -@example - pl 0.1.73.jcn1 - - added PATCHES.texi -@end example - -Then, from the top of Lily's source tree, type - -@example - - make dist - make diff - -@end example - -which rolls the tarball @file{../releases/lilypond-0.1.73.tar.gz} -and leaves your patch as @file{./lilypond-0.1.73.jcn1.diff}. -@footnote{'Make diff' generates a patch between two tarballs. For -more info type 'make diff help=='.} We assume that there is a tarball -@file{lilypond-0.1.73.tar.gz} in the directory @file{../releases}. - -If you didn't configure Lily using --srcdir, you can do: - -@example - - make release - - tar-ball: ../patches/lilypond-0.1.73.jcn1.gz - patch: ../patches/lilypond-0.1.73.jcn1.gz -@end example - -@unnumberedsec Prerequisites - - -For creating a patch you need - -@itemize @bullet -@item All items mentioned in @file{INSTALL}. You're not going to send a patch - that you haven't even built, right? -@item GNU diff -@example - make distclean - cd .. - diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1 -@end example - -but there are handy python scripts available. If you're doing development, -you'll need Python for other LilyPond scripts anyway. - -@item The Lily directory structure, which looks like: - - @example - - doos/ # gnu/windows32 build and binary releases - harmonia -> harmonia-x.y.z - harmonia-x.y.z/ - lilypond -> lilypond-x.y.z # symlink to development directory - lilypond-x.y.z/ # current development - patches/ # patches between different releases - RedHat/BUILD # RedHat build and binary releases - RedHat/RPMS - RedHat/SPECS - releases/ # .tar.gz releases - test/ # tarballs and diffs from current version - - -@end example - -with prefix @file{$HOME/usr/src} -and (for building rpms only) in @file{$HOME/.rpmrc}: -@example - - topdir: /home/fred/usr/src/RedHat - -@end example - -@end itemize - -@unnumberedsec Applying patches - - -If you're following LilyPond development regularly, you probably want to -download just the patch for each subsequent release. -After downloading the patch (into the patches directory, of course), simply -apply it: - -@example - - gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E - -@end example - -and don't forget to make automatically generated files: - -@example - - autoconf footnote(patches don't include automatically generated files, - i.e. file(configure) and files generated by file(configure).) - - configure - -@end example - -@unnumberedsec Synchronise - - -If you're not very quick with sending your patch, there's a good -chance that an new release of LilyPond comes available. In such a -case, the maintainer will probably ask you to make a new patch against -the latest release. Your best bet is to download the latest release, -and apply your patch against this new source tree: - -@example - - cd lilypond-0.1.74 - gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E - autoconf - configure - -@end example - -Then, make a patch as shown above. - -@unnumberedsec See also - - -@file{stepmake/INSTALL.txt} - -@unnumberedsec maintainer - - -@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys} - -Just keep on sending those patches! - - -@bye - - diff --git a/Documentation/tex/GNUmakefile b/Documentation/tex/GNUmakefile deleted file mode 100644 index f0f86b38a4..0000000000 --- a/Documentation/tex/GNUmakefile +++ /dev/null @@ -1,63 +0,0 @@ -# Documentation/tex/Makefile - -depth=../.. - -DATA_FILES = $(wildcard *.data) -datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html)) -TEX_FILES = $(wildcard *.tex) -DOC_FILES = $(wildcard *.doc) - -DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi)) - -#OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES)) -#OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES)) - -EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(TEX_FILES) testje.fly -HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html)) - -PS_FILES = $(DVI_FILES:.dvi=.ps) $(OUTDOC_FILES:.doc=.ps) $(OUTTEX_FILES:.tex=.ps) -PS_GZ_FILES= $(addsuffix .gz, $(PS_FILES)) - -STEPMAKE_TEMPLATES=tex texinfo documentation -LOCALSTEPMAKE_TEMPLATES=lilypond mudela - -include $(depth)/make/stepmake.make - - - - - - -dvi: $(DVI_FILES) - -ps: $(PS_FILES) - -# urg -default: - -GENHTMLS = engraving colorado glossary computer-notation -OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) - -#urg should generalise and move Lilypond -> StepMake -# URG. Lilypond specific. Move out. -$(outdir)/%.html: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -o $@ $< - -$(outdir)/%.latex: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -o $@ --format=latex $< - - - - - -local-WWW: $(HTML_FILES) $(datafiles) $(PS_GZ_FILES) - $(PYTHON) $(step-bindir)/ls-latex.py --title 'User documentation about LilyPond' \ - $(DOC_FILES) $(TEX_FILES) $(TELY_FILES) \ - | sed "s!$(outdir)/!!g" > $(outdir)/index.html - $(footify) $(outdir)/index.html - -$(outdir)/%.bib: %.bib - ln -f $< $@ - -localclean: - rm -f fonts.aux fonts.log feta*.tfm feta*.*pk diff --git a/Documentation/tex/feta.tex b/Documentation/tex/feta.tex deleted file mode 100644 index a8815e7f64..0000000000 --- a/Documentation/tex/feta.tex +++ /dev/null @@ -1,70 +0,0 @@ -% display all feta chars in a pretty picture -% GNU LilyPond -% (c) 1998 Jan Nieuwenhuizen -% -% urg: fool ls-latex -\def\urg{ -\title{The Feta font} -\author{JCN} -\begin{document} -} - - -\parindent0pt -\nopagenumbers -\newcount\n -\newcount\i - -\font\fetatwenty = feta20 -\font\fetanumber = feta-nummer12 -\font\fetafinger = feta-nummer5 -\font\fetadyn = feta-din10 scaled \magstep 2 -\font\titlefont = cmbx12 scaled \magstep 4 -\font\subtitle = cmr9 - -\def\lilyfooter{Lily was here} -\def\setchar#1#2{\hbox to\charwidth{\hss{#1\char#2}\hss}} - -\def\charsperline{6} -\def\charheight{55pt} -\def\charwidth{60pt} - -\def\listfont#1#2#3{ - \n=#2 - \advance\n by-1 - \advance\n by-\charsperline - \loop\ifnum\n<#3 - \advance\n by\charsperline - \i=0 - {\vbox to\charheight{\vss\centerline{ - {\loop\ifnum\i<\charsperline - \advance\i by1 - \advance\n by1 - {\setchar{#1}{\number\n}} - \repeat}}}}\repeat} - -\def\title#1{\centerline{\titlefont #1}} -\def\author#1{\centerline{#1}} - -\title{FETA} - -\centerline{\subtitle (definitely not an abbreviation for Font-En-Tja)} - -\author{Han-Wen Nienhuys and Jan Nieuwenhuizen} - - -\vskip5mm - -\listfont{\fetatwenty}{0}{105} -% urg -\vskip-\charheight -\listfont{\fetanumber}{48}{58} -\vskip-\charheight -\listfont{\fetafinger}{48}{58} -\vskip-\charheight -\listfont{\fetadyn}{0}{6} -\vskip-\charheight - -\lilyfooter - -\bye diff --git a/Documentation/tex/glossary-table.data b/Documentation/tex/glossary-table.data deleted file mode 100644 index 2fdb482110..0000000000 --- a/Documentation/tex/glossary-table.data +++ /dev/null @@ -1,255 +0,0 @@ -@comma enharmonique@@@@@ -@doigté de pédale@@@@@ -@doigté@Fingersatz@@@@ -@indication de pédale@@@@@ -@pointillés@@@@@ -A@la@a@@@@ -accent@accent@Akzent@@accent@accento@ -accidental@altération accidentelle@Vorzeichen, Versetzungszeichen, Akzidenz@@toevallig teken@accidento@ -adjacent keys@tons voisins@@@@@ -alto@alto@Alt@@alt@@ -ancient form??? (diatonic minor scale)@forme du mode mineur ancien@@@@@ -appoggiatura@appogiature, ports de voix, notes d'agrèment@langer Vorschlag@@lange voorslag@appogiature@ -arbitrary number of bars' rest)@bâton de pause@@@meermaats rust@@ -arpeggio@arpège, arpègement@Arpeggio, Brechungen@@gebroken akoord@arpeggio@ -artificial measure@mesure artificielle@@@@@ -artificial rest@respiration@@@@@ -ascending interval@intervalle ascendant@@@stijgend interval@@ -augmented (interval)@augmenté (intervalle)@übermäßig (Intervall)@@overmatig interval@@ -B@si@h@@@@ -backfall, forefall@accent, chute, port de voix@Vorschlag@@korte voorslag@appogiature@ -bar line@barre (de mesure)@Taktstrich@@maatstreep@stanghetta@ -bar; measure@mesure@Takt@@maat, maatstreep@@ -baritone@bariton@Bariton@@bariton@@ -@@F-Schlüssel@@F sleutel@@A clef shaped as a curl with two dots. The position between the dots is the line of the F below central C. -bass clef@clé de fa@Bass-Schlüssel@@bas sleutel@chiave di basso@A clef setting with central C on the first top ledger line. -bass@basse@Bass@@bas@@ -beam@barre@Balken@@waardestreep/balk@barra@ -beat@temps@Takt(-schlag)@@tel@@ -brace@accolade@Klammer@@accolade, haak@accolada@Symbol at the start of a system that connects staffs. -brass@@Blechbläser@@koper (blazers)@@ -alto clef@clé d'ut@Altschlüssel@@alt sleutel@chiave di tenore@Clef setting that has central C on the middle staff line. -C clef@@@@C sleutel. @@A clef symbol that looks like a horizontally mirrored 3. It indicates the position of the central C. Used in different positions. -C@do@c@@C@@ -C@ut@c@@@@ -cadence@cadence@Kadenz@@cadens@@ -cadenza@fioriture@Kadenz@@cadens@cadenza@ -cent@@Cent@@cent@@1/1200 of an octave (1/100 of an equally tempered semitone) -chain of trills@chaîne de trilles@@@triller@@ -character@caractère@@@@@ -chevron@chevron@@@@@ -chord@accord@Akkord@@akkoord@@ -chromatic scale@gamme chromatique@Chromatische Tonleiter@@chromatische toonladder@@ -chromatic semitone@demi-ton chromatique@@@chromatische halve toon@@ -chromatic transposition@transposition chromatique@@@@@ -chromatic type@genre chromatique@@@@@ -church mode, ecclesiastical mode@mode ecclésiastique@Kirchentonart@@kerk toonladder@@ -clef@clé@Notenschlüssel@@sleutel@la chiave (pl. le chiavi)@ -comma@comma@Komma@@komma@@Difference in pitch of a note when the note is derived from a different tuning system. -compound interval@intervalle composé@Komplementärintervall@@@@ -compound measure@mesure composée@@@samengestelde maat@@ -conjunct movement@mouvement conjoint@@@@@ -consonant interval; consonance@consonance@Konsonanz@@consonant@@ -contralto@contralto@Alt(-stimme), alt-@@@@ -contro-time@contre-temps@@@@@ -crescendo@crescendo@Crescendo@@@crescendo@written with an extended opening angular bracket, indicates increasing volume -cue-notes@@Stichnoten@@stichnoten@@In an orchestral part, notes for a different instrument that hint when to start playing. Usually printed in smaller type. -D@ré@d@@@@ -dash over/below@@@@@pizzicato@With plucked strings -decrescendo@@Decrescendo@@@decrescendo@written with an extended closing angular bracket, indicates decreasing volume -degree [of the scale]@degré [de la gamme]@Stufe [der Tonleiter]@@trap [van de toonladder]@@ -descending interval@intervalle descendant@@@dalend interval@@ -diatonic major scale@gamme diatonique majeure@Diatonische Durtonleiter@@diatonische majeur toonladder@@ -diatonic minor scale@gamme diatonique mineure@Diatonische Molltonleiter@@@@ -diatonic semitone@demi-ton diatonique@@@diatonische halve toon@@ -diatonic type@genre diatonique@diatonisch@@@@ -diatonic@diatonique@@@diatonisch@@A diatonic scale is a scale consisting of whole and half tones. -diminished (interval)@diminué (intervalle)@vermindert (Intervall)@@verminderd (interval)@@ -disjunct movement@mouvement disjoint@@@@@ -dissonant interval; dissonance@dissonance@Dissonanz@@dissonant interval; dissonant@@ -dominant ninth chord@accord de neuvième dominante@@@dominant noon akkoord@@ -dominant seventh chord@accord de septième dominante@Dominantseptakkord@@dominant septiem akkoord@@ -dominant@dominante@Dominante@@dominant@@A tone that creates tension;the fifth degree of the scale. -dorian mode@@Dorische Tonart@@dorische toonladder@@Mode obtained by raising the sixth in minor mode. A Dorian scale can be played from D to D with no sharps or flats. -dot (augmentation dot) @point@Punkt (Verlängerungspunkt)@@punt@punto@An augmentation dot after note adds multiplies the duration by one and a half. -dot and curved line combined@point et liaison combinés@@@@@ -dot over/below@@Staccato@@staccato@staccato@Play each note short. -dot@point@Punkt@@punt@@ -dotted note@note pointée@punktierte Note@@@@ -double appoggiatura@appogiature double@@@@@ -double bar line@double barre@Doppel(takt)strich@@dubbele streep@doppia barra@Indicates the end of a section within a movement. -double dotted note@note doublement pointée@doppel-punktierte Note@@@@ -double flat@double bémol@Doppel-Be@@dubbelmol@doppio bemolle@ -double sharp@double dièse@Doppelkreuz@@dubbelkruis@doppio diesis@Raise pitch by two semitones -double trill@trille double@Doppeltriller@@@@A trill on a chord -double triplet@double triolet@Doppeltriole@@dubbele triool@@ -double whole note@@Brevis@breve@brevis@breve@Note during twice as long as a whole note. Mainly used in pre-1650 music. -duple meter@temps binaire@@@tweedelige maatsoort@@ -duplet@duolet@Duole@@duool@@ -duration@durée@Dauer, Länge@@duur, lengte@@ -E@mi@e@@@@ -eighth note@croche@Achtelnote@quaver@achtste noot@@ -eighth rest@demi-soupir@Achtelpause@quaver rest@achtste rust@@ -engraving@@Notenstechen@@steken@@The traditional process of music printing: cutting in a plate of metal. Now also the term for the art of music typography. -enharmonic@enharmonique@enharmonisch@@enharmonisch@@Two notes, intervals, or scales are enharmonic if they have different names but sound the same. Examples: C sharp and D flat, diminished fourth and major third -equal temperament@tempérament égal@@@getempereerde stemming@@Tuning system in which each semitone is precisely 100 cents. -essential alteration@altération essentielle@@@@@ -expression mark@signe d'expressoin@Vortragszeichen@@voordrachtsteken@segno d'espressione@ -extension of interval@extension d'intervalle@@@@@ -F@fa@f@@@@ -fermata@pauses@Fermate@@fermate@fermata@Prolonged sound or silence of indefinite duration -fifth@quinte@Quinte@@kwint@@ -flag, hook, tail, pennant@crochet@Fähnchen@@vlaggetje@coda uncinata@Ornament at the end of the stem of a note. The number of flags determines the lengths of notes shorter than a quarter note. -flat@bémol@Be@@mol@bemolle@Lower pitch by a semitone -four-bar rest@bâton de pause@@@@@ -fourth@quarte@Quarte@@kwart@@ -G@sol@g@@@@ -glissando@glissement@Glissando@@glissando@glissando@Letting the pitch slide fluently from one note to the other -graces@petites notes@Verzierungen, Manieren@@versieringen@appogiature@ -grand staff@@@@piano systeem@@A combination of two staffs with a brace. Usually used for piano music. -half note@blanche@Halbe Note@minim@halve noot@@ -half rest@demi-pause@Halbe Pause@minim rest@halve rust@@ -harmonic cadence@cadence harmonique@@@harmonische cadens@@Sequence of chords that terminate a musical phrase or section. -harmonic form (diatonic minor scale)@forme harmonique@@@@@ -harmonic interval@intervalle harmonique@Harmonisches Intervall@@@@ -incomplete measure@mesure incomplète@@@@@ -interval@intervalle@Intervall@@interval@@Difference in pitch between two notes -inversion of interval@renversement d'intervalle@@@interval inversie@@ -irregular contro-time@contre-temps irrégulier@@@@@ -irregular group@groupe irrégulier@@@@@ -irregular measure@mesure irrégulière@@@@@ -irregular syncopation@syncope irrégulière@@@onregelmatige syncope@@ -just intonation@@@@@@Tuning system in which the notes are obtained by adding and subtracting natural fifths and thirds. -key signature@armure, armature [de la clé], signes des accidentals@Vorzeichen@@toonsoort (voortekens)@segni di chiave@ -kind of note@figure de note@@@@@ -kind of rest@figure de silence@@@@@ -leading note@sensible@@@@@ -ledger line, leger line@ligne supplémentaire@Hilfslinien, Kopfstriche (?)@@hulplijntje@lineette@A ledger line is an extension of the staff. -legato curve@liaison rythmique@@@legato boog@@ -lilypond@étang de lis@Lilienteich@lily pond@lelievijver@stagno del giglio@A pond with lilies floating in it, also the name of a music typesetter. -line@ligne@Linie@@lijn@@ -long appoggiatura@appogiature longue@@@@@ -lower number@chiffre inférieur@@@@@ -major (interval)@majeur (intervalle)@groß (Intervall)@@groot (interval)@@ -major mode@mode majeur@Dur@@@@ -meantone temperament@tempérament mésotonique@@@@@Tuning based on a fifth that is 16 cents smaller than the natural fifth. -mediant@médiante@@@mediant@@The third degree of a scale -melodic cadence@cadence mélodique@@@cadens@@A free-form section at the end of a solo-concerto, where the soloist can demonstrate his/her virtuosity. -melodic form (diatonic minor scale)@forme mélodique@@@@@ -meter, time@mètre@Takt, Metrum@@maatsoort@@A recurring pattern of stress -metronome@métronome@Metronom@@metronoom@@Device which sounds a steady beat -metronomic indication@indication métronomique@Metronomangabe@@@@Exact tempo indication (in beats per minute). Also denoted by M.M. (Mälzel's Metronom) -mezzo-soprano@mezzo-soprano@Mezzosopran@@@@ -middle C@do central@eingestrichenes c@@centrale C@@First C below the 440 Hz A. -minor (interval)@mineur (intervalle)@klein (Intervall)@@@@ -minor mode@mode mineur@Moll@@@@ -modal note@note modale@@@@@ -mode@mode@Geschlecht@@@@ -modulation@modulation@Modulation@@modulatie@@ -mordent@mordant, pincè@Pralltriller, Mordent@@mordent@mordente@ -motive@incise@Motiv@@motief@@ -musical ladder@échelle musicale@@@@@ -mixolydian mode@@Mixolydische Tonart@@Mixolydische toonladder@@Mode obtained by lowering the seventh in major. A mixolydian scale can be obtained by playing G to G with no sharps or flats. -natural sign@bécarre@Auflösungszeichen@@herstellingsteken@bequadro@Do not play the following note flat or sharp. -ninth@@None@@noon@@ -note head@@Notenkopf@@noot balletje@@ -note@note@Note@@noot@nota@ -octave line@échelle d'octave@@@@@ -octave line@clé d'octave@@@@@ -octave sign@octave@Oktave@@@ottava@ -octave@octave@Oktave@@octaaf@@ -ornament, embellishment; accessory@agrèment, ornement@Verzierungen@@@fiorette, fioriture, abbellimenti@ -part@@@@partij@@ -pause@pause@Luftpause@@@@ -pause@point d'orgue@@@@@ -perfect (interval)@juste (intervalle)@rein (Intervall)@@rein (interval)@@ -perfect major chord@accord parfait majeur@@@@@ -perfect minor chord@accord parfait mineur@@@@@ -phrase member@membre de phrase@@@@@ -phrase@phrase@Phrase@@frase, zin@@ -phrasing@phrasé@@@@@ -pitch pipe; tuning fork@diapason@Stimmgabel@@stemfluitje; stemvork@@ -pitch@hauteur@Tonhöhe@@toonhoogte@@ -Pythagorean comma@comma pythagoricien@Pythagoräisches Komma@@komma van Pythagoras@@A sequence of fifths starting on C eventually circles back to C (B sharp), but this B sharp is 24 cents higher than C. This gap is the Pythagorean comma. -quadruplet@quartolet@@@kwartool@@ -quarter note@noire@Viertelnote@crotchet@kwartnoot@@ -quarter rest@soupir@Viertelpause@crotchet rest@kwart rust@@ -register@registre@Register@@register@@ -regular contro-time@contre-temps régulier@@@@@ -regular syncopation@syncope régulière@@@@@ -relative scales@gammes relatives, tons relatifs@@@@@ -repeat@barre de reprise@Wiederholung@@herhaling@@ -rest@silence@@@@@ -rest@soupir@Pause@@rust@pausa@ -return sign@renvoi@@@herstellingsteken@@ -rhythm@rythme@Rhythmus@@ritme@@ -rhythmic curve@courbe rythmique@@@@@ -scale@gamme@Tonleiter@@toonladder@@ -score@partition@Partitur@@partituur@@ -second@seconde@Sekunde@@@secunde@ -semitone@demi-ton@Halbton@@halve toon@@ -seventh@septième@Septime@@septiem@septime@ -sextuplet@sextolet@Sextole@@sextool@@ -sextuplet@sixain@@@sextool@@ -shading signs@signes indicateurs de nuance@@@@@ -shading@nuance@Nuance@@@@ -sharp@dièse@Kreuz (um Halbton erhöht)@@kruis@@ -short appoggiatura@appogiature brève@@@@@ -simple appoggiatura@appogiature simple@@@@@ -simple interval@intervalle simple@@@@@ -simple measure@mesure simple@@@@@ -sixteenth note@double croche@Sechzehntelnote@semiquaver@zestiende noot@@ -sixteenth rest@quart de soupir@Sechzehntelpause@semiquaver rest@zestiende rust@@ -sixth@sixte@Sexte@@sext@@ -sixty-fourth note@quadruple croche@Vierundsechzigstelnote@hemidemisemiquaver@vierenzestigste noot@@ -sixty-fourth rest@seizième de soupir@Vierundsechzigstelpause@hemidemisemiquaver rest@@@ -slur@liaison, coulé@Bindungszeichen, Bindebogen@@binding, bindingsboog@legatura@ -soprano@soprano@Sopran@@sopraan@@ -space@espace@@@@@ -staff@portée@Noten(linien)system@@(noten)balk; partij@@pl staves or staffs -stem@queue@Stiel, Hals@@stok@asta, gamba@ -strings@@Streicher@@strijkers@@ -strong beat@temps fort@@@thesis@@ -subdominant@sous-dominante@Subdominante@@@@The fourth degree of the scale -submediant@@@@@@The sixth scale degree -subtonic@sous-tonique@Subtonika@@@@The seventh degree of the scale -superdominant@sus-dominante@@@@@The sixth scale degree -supertonic@sus-tonique@@@@@The second scale degree -syncopation; upbeat@syncope@Synkope@@syncope@@ -syntonic comma@comma syntonique@@@komma van Didymos, syntonische komma@@Difference between the natural third and the third obtained by Pythagorean tuning, euqal to 22 cents. -system@système@System@@systeem@sitema@ -tempo indication@signes de temps@Zeitmaß, Tempobezeichnung@@tempo aanduiding@segno di tempo@ -tempo; movement@mouvement@Tempo@@@@ -tenor@ténor@Tenor@@@@ -tenth@@Dezime@@deciem@decime@ -tetrachord@tétracorde@Vierklang@@@@ -third@tierce@Terz@@terts@@ -thirty-second note@triple croche@Zweiunddreißigstelnote@demisemiquaver@32e noot@@ -thirty-second rest@huitième de soupir@Zweiunddreißigstelpause@demisemiquaver rest@32e rust@@ -tie@liaison@Haltebogen@@overbinding@legatura@A curve that shows the prolongation (as opposed to the repetition fo a note) -time signature@chiffrage (chiffres indicateurs), signe de valeur@Taktvorzeichnung, Taktvorzeichen@@maatsoort@segni di tempo@ -tonal note@note tonale@@@@@ -tonality@tonalité@Tonalität@@tonaliteit@@ -tone@ton@Ton@@toon@@ -tonic@tonique@Tonika@@tonica@@ -transposition@transposition@Transposition@@transpositie@@Shifting a melody up or down in pitch, while keeping the same relative pitches. -G clef@@@@G sleutel@@A clef symbol with a loop at the top and a spiral in the center. The center of the spiral indicates the G above central C. -treble clef@clé de sol@Violinschlüssel@@viool sleutel@chiave di violino@Clef setting where the second lowest line is the G above central C. -tremolo@trèmolo@Tremolo@@tremolo@tremolo@ -trill; shake@trille, tremblement, battement (cadence)@Triller@@triller@trillo@ -triple meter@temps ternaire@@@driedelige maatsoort@@ -triplet@triolet@Triole@@@@ -tritone@triton@Tritonus@@@@ -turn; gruppetto@brisè, groupe, doublè, grupetto@Doppelschlag@@dubbelslag@grupetto@ -two-bar rest@bâton de pause@@@@@ -underline over/below@portamento@Portato@@@@ -unison@unisson@Unisono@@@unisono@Different instruments playing exactly the same melody. -unit of beat@unité de temps@@@@@ -unit of measure@unité de mesure@@@@@ -upbeat, arsis@@Auftakt@@@@ -upper number@chiffre supérieur@@@@@ -voice@voix@Stimme@@stem@@ -weak beat@temps faible@@@arsis@@ -whole note@ronde@Ganze Note@semibreve@hele noot@@ -whole rest@pause@Ganze Pause@semibreve rest@@@ -woodwind@@Holzbläser@@houtblazers@@ diff --git a/Documentation/tex/mudela-book-doc.doc b/Documentation/tex/mudela-book-doc.doc deleted file mode 100644 index e4afd2e915..0000000000 --- a/Documentation/tex/mudela-book-doc.doc +++ /dev/null @@ -1,376 +0,0 @@ -% -*-LaTeX-*- -\documentclass[a4paper, 12pt]{article} - -\usepackage{t1enc,isolatin1} -\usepackage{graphics} -%\usepackage[dvips]{graphicx} -\usepackage[rflt]{floatflt} -%\usepackage{showframe} -%\sloppy -\def\postMudelaExample{\setlength{\parindent}{3.25ex}} -\title{Mudela-book tutorial} -\author{TCA} -\begin{document} -\maketitle -%\printparam - -\section{Introduction} - -[TODO: THIS MANUAL IS OUTDATED. FIXME.] - -Mudela-book is a script that process your \LaTeX~file and with great -help from GNU LilyPond it translates blocks of mudela code it finds -inside \verb|mudela| environments to tex or eps graphics. It then -creates a new file that can be sendt through \LaTeX~to create a .dvi -file with lines of music integrated with text. - -Mudela-book will do its best to try to align the music to the left and -right margins. Currently the most used papersizes and one- and -twocolumn mode is supported, but if you use the geometry-package from -\LaTeX~or change the margins things will break. - -This document assumes you have basic knowledge of GNU LilyPond and -\LaTeX. If the authors not-so-good english irritates you, please -send a patch. - -So what does this look like? Well, here is an example: -\begin[veryverbatim, intertext="produces this music:"]{mudela} -\score{ - \notes\relative c'{ - \time 5/8; - [e16( g b c a g][e a b d] | )e2 d,8 | - [e16( g b c a g][e a b d] | )b2 [a16( f] | - [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | - [f( a b d b a][f a b d] | )e2 - } -} -\end{mudela} -If you are lucky, the above example show a nice feature of LilyPond -and \LaTeX. Since LilyPond can output the music as \TeX~graphics, -\LaTeX~can insert pagebreaks between the lines of music. - -Notice that there is no \verb|\paper| statement in the example -above. Mudela-book will insert some code for you that defines the -linewidth and the font to use. If you don't want to change the default, -there is no need to put an empty \verb|\paper{}| inside the \verb|\score|. -In the example above, something like -this might be inserted before your code: -\begin{verbatim} -\include "paper16.ly" -\paper{ \paper_sixteen - linewidth = 390.\pt; - castingalgorithm = \Gourlay; -} -\end{verbatim} -The actual values for linewidth will differ depending on papersize and -number of columns. Also, if you use a different fontsize for the -music, another file than \verb|paper16.ly| will be included. - -If you want to make the music not so wide, you can insert a -\verb|\paper| statement that set the linewidth: - -\begin[veryverbatim, intertext="produces this music:"]{mudela} -\score{ - \notes\relative c'{ - \time 5/8; - [e16( g b c a g][e a b d] | )e2 d,8 | - [e16( g b c a g][e a b d] | )b2 [a16( f] | - [e a b d] )e4 c8 | [es16( bes a as g es][d c b! )g] | - [f( a b d b a][f a b d] | )e2 - } - \paper{linewidth = 10.\cm;} -} -\end{mudela} - -Very often, if you mix music and text, the music is often only a -few notes or at most a few bars. This music should be as short as -possible and not stretched to be aligned to the right margin. - -If you only write voice-contents in the mudela block, mudela-book -will set the \verb|linewidth| variable to -1, so Lilypond -will make the music as short as possible but without breaking the -line. Here is a well know harmonic progression: -\begin[veryverbatim, intertext="produce a well known harmonic progression:"]{mudela} - -\end{mudela} - -If you want to place music examples in the text, -\begin[eps]{mudela} - -\end{mudela} -, you can use the \verb|eps| option. This will create the music as -eps graphics and include it into the document with the -\verb|\includegraphics| command. - -The code used look like this: -\begin{verbatim} -\begin[eps]{mudela} - -\end{mudela} -\end{verbatim} - -You can also use the \verb|eps| option if the block is a complete -mudela source. This 5 cm long empty line, -\begin[eps]{mudela} -\score{ - \notes{s} - \paper{ linewidth = 5.\cm;} -} -\end{mudela} -was created with this code: -\begin{verbatim} -\begin[eps]{mudela} -\score{ - \notes{s} - \paper{ linewidth = 5.\cm;} -} -\end{mudela} -\end{verbatim} - -To avoid that \LaTeX~places the music on a line of its one, there should -be no empty lines between the normal text and the mudela -environment. - -You can also use \verb|mudelafile| (on a separate line, FIXME), to -include another file. Files with name ending with \verb|.sly| - -\mudelafile{testje.fly} - -\section{Fontsize options} -You can use all lilypond fontsizes in mudela-book. -% LONG line just to test multiple \mudela on one line -The default 16pt fontsize, \mudela{}, is probably to big to be included in the middle of the text. 11pt, \mudela[11pt]{} or 13pt, \mudela[13pt]{} is probably better. -The code can look like this: -\begin{verbatim} -\begin[13pt, eps]{mudela} - -\end{mudela} -\end{verbatim} - -The following options set the fontsize: -\begin{itemize} -\item \verb|11pt| -\begin[11pt, eps]{mudela} - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -\end{mudela} -\item \verb|13pt| -\begin[13pt, eps]{mudela} - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -\end{mudela} -\item \verb|16pt| -\begin[16pt, eps]{mudela} - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -\end{mudela} -\item \verb|20pt| -\begin[20pt, eps]{mudela} - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -\end{mudela} -\item \verb|26pt| -\begin[26pt, eps]{mudela} - \relative c'{ - r16 [c d e][f d e c] [g'8 c][b-\prall c] | - [d16 g, a b][c a b g][d'8 g f-\prall g] - } -\end{mudela} -\end{itemize} - -\section{User defined commands} -There is an even shorter way to write small musical fragments. This -triad, \mudela{}, was created with this code: -\verb|\mudela{}| - -\def\obsolete{ -Mudela-book defines the \verb|\mudela| command, and let you define -your own commands in a file specified by -the command line option \verb|--initfile=filename|. The format for the -file is a definition of a python dictionary: - -\begin{verbatim} -{ 'mudela': r""" -\begin[eps \fontoptions]{mudela} - \maininput -\end{mudela} -""", - 'mudelaRhythm': r""" -\begin[eps \fontoptions]{mudela} -\score{ - \context RhythmicStaff{ - \notes{\stemup \maininput} - } - \paper{linewidth = -1.\cm;} -} -\end{mudela} -""" -} -\end{verbatim} -The above code show how \verb|\mudela| could have been defined, and -also defines a new command \verb|mudelaRhythm|. Notice that you can -send fontsize options to the defined commands. -\verb|\mudelaRhythm[11pt]{c4 c8 [c16 c] c4 c}| produce this music: -\begin[eps, 11pt]{mudela} -\score{ - \context RhythmicStaff{ - \notes{ \stemup c4 r8 [c16 c] c4 c } - } - \paper{linewidth = -1.\cm;} -} -\end{mudela} -} - -\section{More options} -\begin{itemize} -\item The \verb|singleline| option set \verb|linewidth| to -1.0. -\item The \verb|multiline| option set \verb|linewidth| to a value letting -the music be aligned to the right margin. The music can span several -lines. -\end{itemize} - -\section{Just in case...} -The options \verb|fragment| and \verb|nonfragment| will override -mudela-book when it scans the mudela code to see if it is voice -contents or complete code. This might be useful if mudela-book choose -wrong. - -Since there is no finder's fee which doubles every year, there is no -need to wait for the price money to grow. So send a bug report today -if you need this one of these options. - -\section{Examples} -This was all options to \verb|\begin|. The rest of the{mudela} -document will show some ways you can use mudela in -\LaTeX~documents. It will also act as a simple test-suite for -mudela-book. You -\marginpar{ -marginpar! -\begin[eps, 11pt]{mudela} - \relative c'' {\key c \minor; r4 [g8 g g] es2} -\end{mudela} -}can place \verb|eps| mudela in footnotes\footnote{ -footnote! -\begin[eps, 11pt]{mudela} - \relative c'' {\key c \minor;r4 [g8 g g] es2} -\end{mudela} -} -and marginspars just as any other included eps graphics. - -\begin{floatingfigure}[r]{7cm} -\begin{mudela} -\score{ - \notes\relative c'{ - \time 12/8; - r4-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] - [f16-.( )f-. dis8-- gis16-.( )gis-.] cis4.-\fermata | - - r4.-\fermata [cis,16 cis g'8 f16 f b8][g16 g f8 b16 b] dis4.-\fermata - } - \paper{linewidth = 7.\cm;} -} -\end{mudela} -\end{floatingfigure} - -To the right you can see some bars from the trumpet fanfara from the -beginning of the fantastic street opera ``Houdini the Great'', by the -danish composer Andy Pape. The music is put inside a -\verb|floatingfigure| environment, and the music will be aligned by -the right marging if you set floatingfigure width and mudela linewidth -to the same value. The code looks like this: - -\verb|\begin{floatingfigure}{7cm}| -\begin[verbatim]{mudela} -\score{ - \notes\relative c'{ - \time 12/8; - r4.-\fermata [b16-.( )b-.] [f'8-- dis16-.( )dis-. gis8--] - [f16-.( )f-. dis8-- gis16-.( )gis-.] cis8.-\fermata | - - r4.-\fermata [cis,16 cis g'8 f16 f b8] - [g16 g f8 b16 b] dis4.-\fermata - } - \paper{linewidth = 7.\cm;} -} -\end{mudela} -\verb|\end{floatingfigure}| - -\twocolumn[\large The following is written in two columns just to show -what mudela-book can do..\normalsize] - -Tabulars is also nice. Here you have a chance to learn the norwegian -names of some triads: -\vspace{1em} - -\begin{tabular}{|l|l|} -\hline - -dur & -\begin[eps, fragment]{mudela} - -\end{mudela} -\\ -\hline moll & -\begin[eps]{mudela} - -\end{mudela} -\\ -\hline forminsket & -\begin[eps]{mudela} - -\end{mudela} -\\ -\hline forstørret & -\begin[eps]{mudela} - -\end{mudela} -\\ -\hline -\end{tabular} - -\vspace{1em} -If you have a lot of small music examples -like this in the middle of your text, you might get a nicer look by -using ``double'' line spacing. Put the \verb|\linespread{1.6}| command -into the preamble of your document. Then the line spacing will not be -increased between the lines where you have music printed with the -smallest font size. - -Since the version number is quite low, you should be careful not to -mix braces that belongs to mudela-book and \LaTeX~on the same -line. The following code will probably break: - -\begin{verbatim} -\footnote{\begin{mudela} -\relative c''{ \key es; r8 [g g g] es2} -\end}{mudela} -\end{verbatim} -Mudela-book does know about \verb|\onecolumn| and \verb|\twocolumn|. -So the music will be adjusted to the new linewith: -\begin[veryverbatim, intertext="produces"]{mudela} -\score{ - \notes\relative c'{c d e f | g2 g | a4 a a a | g1 | - f4 f f f | e2 e | d4 d d d | c1} -} -\end{mudela} - -Verbatim environments will also ignore the page margins. That is -a feature of \LaTeX. (But you usually put things inside a verbatim -environment when you don't want \LaTeX~to do any linebreaking) - - -\end{document} - - - - - - diff --git a/Documentation/tex/reference-manual.tely b/Documentation/tex/reference-manual.tely deleted file mode 100644 index 426b878046..0000000000 --- a/Documentation/tex/reference-manual.tely +++ /dev/null @@ -1,3617 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@setfilename reference-manual.info -@settitle LilyPond 1-2-0 Reference Manual - -@node Top, , Running LilyPond, (dir) -@top -@menu -* LilyPond 1-2-0 Reference Manual::LilyPond 1-2-0 Reference Manual -@end menu - -@macro keyindex {word} -@cindex \word\ - -@end macro - -@macro indexcode {word} -@cindex \word\ - -@end macro - - - -@node LilyPond 1-2-0 Reference Manual, Overview, , Top -@menu -* Overview:: Overview -* Top level:: Top level -* notenames:: notenames -* Lexical conventions:: Lexical conventions -* notelang:: notelang -* modes:: modes -* Types:: Types -* Music expressions:: Music expressions -* Atomic music expressions:: Atomic music expressions -* atomicmusic:: atomicmusic -* notedesc:: notedesc -* barlines:: barlines -* manualbeam:: manualbeam -* tremolo:: tremolo -* Compound music expressions:: Compound music expressions -* compoundmusic:: compoundmusic -* relative:: relative -* sec-repeats:: sec-repeats -* transpose:: transpose -* Ambiguities:: Ambiguities -* Notation conversion specifics:: Notation conversion specifics -* autobeam:: autobeam -* lyricprint:: lyricprint -* Notation Contexts:: Notation Contexts -* contextselection:: contextselection -* Notation output definitions:: Notation output definitions -* output:: output -* paper:: paper -* papervars:: papervars -* contextdefs:: contextdefs -* engravers:: engravers -* Sound output:: Sound output -* midilist:: midilist -* Pre-defined Identifiers:: Pre-defined Identifiers -* ident:: ident -* Running LilyPond:: Running LilyPond -@end menu -@chapter LilyPond 1.2.0 Reference Manual - - - -@node Overview, Top level, LilyPond 1-2-0 Reference Manual, LilyPond 1-2-0 Reference Manual -@section Overview - -This document@footnote{This document has been revised for -LilyPond 1.2.} describes the the GNU LilyPond input format, which is -a language for defining music. We call this language @emph{Music -Definition Language} or @emph{Mudela}, for short.@footnote{If anybody -comes up with a better name, we'd gladly take this. Gourlay already -uses a ``Musical Description Language,'' ISO standard 10743 defines a -``Standard Music Description Language.'' We're not being original -here.} - -@emph{Mudela} is a language that allows you to - -@itemize @bullet - @item create musical expressions by combining pitches, durations - @item output those musical expressions to various formats - @item give those musical expressions and output definitions names, so - you can enter them in manageable chunks. -@end itemize - -@emph{Mudela} aims to define a piece of music completely, both from -typesetting and from a performance point of view. - - - -@node Top level, notenames, Overview, LilyPond 1-2-0 Reference Manual -@section Top level - -@cindex top level - -This section describes what you may enter at top level. - - - -@cindex score definition - -The output is generated combining a music expression with an output -definition. A score block has the following syntax: - -@quotation - - @code{\score @{} @var{musicexpr} @var{outputdefs} @code{@}} -@end quotation - -@var{outputdefs} are zero or more output definitions. If no output -definition is supplied, the default @code{\paper} block will be added. - - - -@cindex header - -@keyindex{header} - -The syntax is - -@quotation - - @code{\header} @code{@{} @var{key1} = @var{val1}; - @var{key2} = @var{val2}; ... @code{@}} -@end quotation - -A header describes the file's contents. It can also appear in a -@code{\score} block. Tools like @code{ly2dvi}@indexcode{ly2dvi} can use this -information for generating titles. Key values that are used by -@code{ly2dvi} are: title, subtitle, composer, opus, poet, instrument, -metre, arranger, piece and tagline. - -It is customary to put the @code{\header} at the top of the file. - - -@node notenames, Lexical conventions, Top level, LilyPond 1-2-0 Reference Manual - -Note name tables can be specified using - -@quotation - - @code{\notenames}@keyindex{notenames} - @code{@{} @var{assignmentlist} @code{@}} -@end quotation - -@var{assignmentlist} is a list of definitions of the form - -@quotation - - @var{name} = @var{pitch} -@end quotation - -Chord modifiers can be set analogously, with -@code{\chordmodifiers}@keyindex{chordmodifiers}. - - - -A @code{\paper} block at top level sets the default paper block. A -@code{\midi} block at top level works similarly. - - - -LilyPond contains a Scheme interpreter (the GUILE library) for -internal use. The following commands access the interpreter -directly. - -@quotation - - @code{\scm}@keyindex{scm} @var{scheme} @code{;} -@end quotation - -Evaluates the specified Scheme code. The result is discarded. - -@quotation - - @code{\scmfile}@keyindex{scmfile} @var{filename} @code{;} -@end quotation - -Reads Scheme code from the specified file. The result is discarded. - - - -Identifier assignments may appear at top level. Semicolons are -forbidden after top level assignments. - - - -@node Lexical conventions, notelang, notenames, LilyPond 1-2-0 Reference Manual -@section Lexical conventions - -@cindex lexical conventions - - - -@cindex comment - -@indexcode{%} - - -A one line comment is introduced by a `@code{%}' character. -Block comments are started by `@code{%@{}' and ended by `@code{%@}}'. -They cannot be nested. - - - -@cindex keyword - -Keywords start with a backslash, followed by a number of lower case -alphabetic characters. These are all the keywords. - -@quotation - - @code{\accepts} - @code{\addlyrics} - @code{\alternative} - @code{\bar} - @code{\breathe} - @code{\cadenza} - @code{\chordmodifiers} - @code{\chords} - @code{\clef} - @code{\cm} - @code{\consists} - @code{\consistsend} - @code{\context} - @code{\duration} - @code{\font} - @code{\grace} - @code{\header} - @code{\in} - @code{\key} - @code{\keysignature} - @code{\lyrics} - @code{\mark} - @code{\midi} - @code{\mm} - @code{\musicalpitch} - @code{\name} - @code{\notenames} - @code{\notes} - @code{\paper} - @code{\partial} - @code{\penalty} - @code{\property} - @code{\pt} - @code{\relative} - @code{\remove} - @code{\repeat} - @code{\repetitions} - @code{\scm} - @code{\scmfile} - @code{\score} - @code{\script} - @code{\sequential} - @code{\shape} - @code{\simultaneous} - @code{\skip} - @code{\spanrequest} - @code{\tempo} - @code{\textscript} - @code{\time} - @code{\times} - @code{\translator} - @code{\transpose} - @code{\type} -@end quotation - - - - -@cindex integer - -Formed from an optional minus sign followed by digits. Arithmetic -operations cannot be done with integers, and integers cannot be mixed -with reals. - - - -@cindex real - - -Formed from an optional minus sign and a sequence of digits followed -by a @emph{required} decimal point and an optional exponent such as -@code{-1.2e3}. Reals can be built up using the usual operations: -`@code{+}@indexcode{+}', `@code{-}@indexcode{-}', `@code{*}@indexcode{*}', and -`@code{/}@indexcode{/}', with parentheses for grouping. - -A real constant can be followed by one of the dimension -keywords: -@cindex dimensions - @code{\mm}@keyindex{mm}, -@code{\pt}@keyindex{pt}, @code{\in}@keyindex{in}, or -@code{\cm}@keyindex{cm}, for millimeters, points, inches and -centimeters, respectively. This converts the number to a real that -is the internal representation of dimensions. - - - -@cindex string - - -Begins and ends with the `@code{"}' character. To include a `@code{"}' -character in a string write `@code{\"}'. Various other backslash -sequences have special interpretations as in the C language. A -string that contains no spaces can be written without the quotes. -See section @xref{modes} for details on unquoted strings; their -interpretation varies depending on the situation. Strings can be -concatenated with the `@code{+}' operator. - - - -The tokenizer accepts the following commands. They can appear -anywhere. - -@quotation - - @code{\maininput}@keyindex{maininput} -@end quotation - -This command is used in init files to signal that the user file must -be read. This command cannot be used in a user file. - -@quotation - - @code{\include}@keyindex{include} @var{file} -@end quotation - -Include @var{file}. The argument @var{file} may be a quoted string (an -unquoted string will not work here!) or a string identifier. The full -filename including the @file{.ly} extension must be given, - -@quotation - - @code{\version}@keyindex{version} @var{string} @code{;} -@end quotation - -Specify the version of LilyPond that a file was written for. The -argument is a version string in quotes, for example @code{"1.2.0"}. -This is used to detect invalid input, and to aid -@code{convert-mudela}, a tool that automatically upgrades input files. - - - -@cindex other languages - -@node notelang, modes, Lexical conventions, LilyPond 1-2-0 Reference Manual - -Note name definitions have been provided in various languages. -Simply include the language specific init file. For example: -`@code{\include "english.ly"}'. The available language files and the -names they define are: - -@quotation - -@example - Note Names sharp flat - -nederlands.ly c d e f g a bes b -is -es -english.ly c d e f g a bf b -s/-sharp -f/-flat -deutsch.ly c d e f g a b h -is -es -norsk.ly c d e f g a b h -iss/-is -ess/-es -svenska.ly c d e f g a b h -iss -ess -italiano.ly do re mi fa sol la sid si -d -b -catalan.ly do re mi fa sol la sid si -d/-s -b -@end example - -@end quotation - -Pitch names can be redefined using the -@code{\notenames}@keyindex{notenames} command, see -subsection @xref{notenames}. - - - -@cindex lexical modes - -@cindex modes - -@node modes, Types, notelang, LilyPond 1-2-0 Reference Manual - -To simplify entering notes, lyrics, and chords, @emph{Mudela} has three -special input modes on top of the default mode. In each mode, words -are identified on the input. If @code{"word"} is encountered, it is -treated as a string. If @code{\word} is encountered, it is treated as -a keyword or as an identifier. The behavior of the modes differs in -two ways: Different modes treat unquoted words differently, and -different modes have different rules for deciding what is a word. - -@table @samp - @item Normal mode. -@cindex mode!normal - - At the start of parsing, @emph{Mudela} is in Normal mode. In Normal - mode, a word is an alphabetic character followed by alphanumeric - characters. If @code{word} is encountered on the input it is - treated as a string. - - @item Note mode. -@cindex mode!note - - Note mode is introduced by the keyword - @code{\notes}@keyindex{notes}. In Note mode, words can only - contain alphabetic characters. If @code{word} is encountered, - LilyPond first checks for a notename of @code{word}. If no - notename is found, then @code{word} is treated as a string. - - Since combinations of numbers and dots are used for indicating - durations, it is not possible to enter real numbers in this mode. - - @item Chord mode. -@cindex mode!chord - - Chord mode is introduced by the keyword - @code{\chords}@keyindex{chords}. It is similar to Note mode, but - words are also looked up in a chord modifier table (containing - @code{maj}, @code{dim}, etc). - - Since combinations of numbers and dots are used for indicating - durations, you can not enter real numbers in this mode. Dashes - and carets are used to indicate chord additions and subtractions, - so scripts can not be entered in Chord mode. - - @item Lyrics mode. -@cindex mode!lyric - - Lyrics mode is introduced by the keyword - @code{\lyrics}@keyindex{lyrics}. This mode has rules that make it - easy to include punctuation and diacritical marks in words. A - word in Lyrics mode begins with: an alphabetic character, - `@code{_}', `@code{?}', `@code{!}', `@code{:}', `@code{'}', the - control characters @code{^A} through @code{^F}, @code{^Q} through - @code{^W}, @code{^Y}, @code{^^}, any 8-bit character with ASCII code - over 127, or a two-character combination of a backslash followed - by one of `@code{`}', `@code{'}', `@code{"}', or - `@code{^}'.@footnote{The purpose of Lyrics mode is that you can - enter lyrics in TeX format or a standard encoding without - needing quotes. The precise definition of this mode indeed is - ludicrous. This will remain so until the authors of LilyPond - acquire a deeper understanding of character encoding, or someone - else steps up to fix this.} - - Subsequent characters of a word can be any character that is not - a digit and not white space. One important consequence of this - is that a word can end with `@code{@}}', which may be confusing if - you thought the closing brace was going to terminate Lyrics - mode.@footnote{LilyPond will issue a warning, though.} Any - `@code{_}' characters which appear in an unquoted word are - converted to spaces. This provides a mechanism for introducing - spaces into words without using quotes. Quoted words can also be - used in Lyrics mode to specify words that cannot be written with - the above rules. Here are some examples. Not all of these words - are printable by TeX. - - - @quotation - -@example -Ah! % a word -2B_||_!2B % not a word because it starts with a digit -``Hello'' % not a word because it starts with ` -_ _ _ _ % 4 words, each one a space -@end example - - @end quotation - - Since combinations of numbers and dots are used for indicating - durations, you can not enter real numbers in this mode. -@end table - -It is possible to create words that break the rules by prefixing them -with the dollar sign `@code{$}@indexcode{$}'. Regardless of the context, a -word beginning with `@code{$}' extends until the next white space -character. Such words can contain numbers (even in Note mode), or -other forbidden characters. The dollar sign can be used to create -and access identifiers that could not otherwise be used.@footnote{Use -of `@code{$}' hampers readability and portability to future LilyPond -versions, thus the use of the dollar sign is discouraged.} - - - -@node Types, Music expressions, modes, LilyPond 1-2-0 Reference Manual -@section Types - -@cindex types and identifiers - -@emph{Mudela} has a limited set of types: - -@itemize @bullet - @item integers - @item reals - @item strings - @item music expressions - @item durations of notes and rests (specified with - @code{\notenames}@keyindex{notenames}) - @item note name tables - @item context definitions, part of output definitions. See - section @xref{contextdefs} for more information - @item output definitions (like @code{\paper}@keyindex{paper} blocks - and @code{\midi}@keyindex{midi} blocks) - @item score definitions (@code{\score}@keyindex{score} blocks) -@end itemize - -Type is a syntactical property: @emph{Mudela} has no real type system, -so there is no support for generic expressions, functions, or user -defined types. For the same reason, it is not possible to mix reals -and integers in arithmetic expressions, and ``type -errors'' -@cindex type error - (e.g., using a string identifier to -initialize a @code{\paper}@keyindex{paper} block) will yield a ``parse -error''. - -Identifiers allow objects to be assigned to names. To assign an -identifier, you use `@var{name}=@var{value}' and to refer to an -identifier, you preceed its name with a backslash: -`@code{\}@var{name}'. Identifier assignments must appear at top level -in the @emph{Mudela} file. Semicolons are forbidden after assignments -appearing at top level but they are obligatory after assignments -appearing in the @code{\paper} block, see Section @xref{paper}. - -@var{value} is any of the types listed above. - -An identifier can be created with any string for its name, but you -will only be able to refer to identifiers whose names begin with a -letter, being entirely alphanumeric. It is impossible to refer to an -identifier whose name is the same as the name of a keyword. - -The right hand side of an identifier assignment is parsed completely -before the assignment is done, so it is allowed to redefine an -identifier in terms of its old value, e.g. - -@quotation - - @code{foo = \foo * 2.0} -@end quotation - -When an identifier is referenced, the information it points to is -copied. Therefore it only makes sense to put identifiers for -translators, output definitions, and @code{\score}@keyindex{score} -blocks as the first item in a block. For this reason, if you -reference a @code{\foo} variable in a @code{\foo} block, it must be the -first item in the list following @code{\foo}.@footnote{@code{\paper@{\one -\two@}} does not make sense, because the information of @code{\two} -would overwrite the information of @code{\one}, thereby making the -reference to the first identifier useless.} - - - -@node Music expressions, Atomic music expressions, Types, LilyPond 1-2-0 Reference Manual -@section Music expressions - -@cindex music expressions - -Music in @emph{Mudela} is entered as a music expression. Notes, rests, -lyric syllables are music expressions (the atomic -expressions) -@cindex atomic music expressions -, and you can combine -music expressions to form new ones. This example forms a compound -expressions out of the quarter @code{c} note and a @code{d} -note: - -@quotation - - @example -\sequential @{ c4 d4 @} -@end example - -@end quotation - -The meaning of this compound expression is to play the `@code{c}' -first, and then the `@code{d}' (as opposed to playing them -simultaneously, for instance). - -Atomic music expression are discussed in -subsection @xref{atomicmusic}. Compound music expressions are -discussed in subsection @xref{compoundmusic}. - - - -@node Atomic music expressions, atomicmusic, Music expressions, LilyPond 1-2-0 Reference Manual -@section Atomic music expressions -@node atomicmusic, notedesc, Atomic music expressions, LilyPond 1-2-0 Reference Manual - - - -@cindex pitch - -@cindex duration - - -The syntax for pitch specification is - -@quotation - - @code{\musicalpitch}@keyindex{musicalpitch} - @code{@{} @var{octave} @var{note} @var{shift} @code{@}} -@end quotation - -@var{octave} is specified by an integer, zero for the octave -containing middle C. @var{note} is a number from 0 to 7, with 0 -corresponding to C and 7 corresponding to B. The shift is zero for a -natural, negative to add flats, or positive to add sharps. - -In Note and Chord mode, pitches may be designated by names. See -section @xref{notelang} for pitch names in different languages. - -The syntax for duration specification is - -@quotation - - @code{\duration}@keyindex{duration} - @code{@{} @var{length} @var{dotcount} @code{@}} -@end quotation - -@var{length} is the negative logarithm (base 2) of the duration: -1 is a half note, 2 is a quarter note, 3 is an eighth -note, etc. The number of dots after the note is given by -@var{dotcount}. - -In Note, Chord, and Lyrics mode, durations may be designated by -numbers and dots. See Section @xref{notelang} for details. - - -@node notedesc, barlines, atomicmusic, LilyPond 1-2-0 Reference Manual - -@cindex note specification - -@cindex pitches - -@cindex entering notes - -A note specification has the form - -@quotation - - @var{pitch}[@var{octavespec}][@code{!}][@code{?}][@var{duration}] -@end quotation - -The pitch of the note is specified by the note's name. - - -The default names are the Dutch note names. The notes are specified -by the letters `@code{c}' through `@code{b}', where `@code{c}' is an -octave below middle C and the letters span the octave above that C. -In Dutchcindex(notenames!Dutch), a sharp is formed by adding -`@code{-is}' to the end of a pitch name. A flat is formed by adding -`@code{-es}'. Double sharps and double flats are obtained by adding -`@code{-isis}' or `@code{-eses}'. `@code{aes}' and `@code{ees}' are -contracted to `@code{as}' and `@code{es}' in Dutch, but both forms will -be accepted. - -LilyPond has predefined sets of notenames for various languages. See -section @xref{notelang} for details. - - -The optional octave specification takes the form of a series of -single quote (`@code{'}@indexcode{'}') characters or a series of comma -(`@code{,}@indexcode{,}') characters. Each @code{'} raises the pitch by one -octave; each @code{,} lowers the pitch by an octave. - -@mudela[fragment,verbatim,center] - c' d' e' f' g' a' b' c'' -@end mudela - -@mudela[fragment,verbatim,center] - cis' dis' eis' fis' gis' ais' bis' -@end mudela - -@mudela[fragment,verbatim,center] - ces' des' es' fes' ges' as' bes' -@end mudela - -@mudela[fragment,verbatim,center] - cisis' eisis' gisis' aisis' beses' -@end mudela - -@mudela[fragment,verbatim,center] - ceses' eses' geses' ases' beses' -@end mudela - -Whenever a C-sharp is desired, you must specify a C-sharp. LilyPond -will determine what accidentals to typeset depending on the key and -context. A reminder accidental -@cindex reminder accidental - can be -forced by adding an exclamation mark `@code{!}' after the pitch. A -cautionary accidental, -@cindex cautionary accidental - i.e., an -accidental within parentheses can be obtained by adding the question -mark `@code{?}@indexcode{?}' after the pitch. - -@mudela[fragment,verbatim,center] - cis' d' e' cis' c'? d' e' c'! -@end mudela - - -@cindex duration - -Durations are entered as their reciprocal values. For notes longer -than a whole note, use identifiers. - -@quotation - -@example -c'\longa c'\breve -c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 -@end example - -@end quotation - -@quotation - -@mudela[] -\score { - \notes \relative c'' { - a\longa a\breve - a1 a2 a4 a8 a16 a32 a64 a64 - } - \paper { - loose_column_distance = 2.5 * \interline; - linewidth = -1.0; - \translator { - \type "Score_engraver"; - \name "Score"; - \consists "Note_heads_engraver"; - \consists "Stem_engraver"; - \consists "Rhythmic_column_engraver"; - } - } -} -@end mudela -@end quotation - -@quotation - -@example -r\longa r\breve -r1 r2 r4 r8 r16 r32 r64 r64 -@end example - -@end quotation - -@quotation - -@mudela[] -\score { - \notes \relative c'' { - r\longa r\breve - r1 r2 r4 r8 r16 r32 r64 r64 - } - \paper { - loose_column_distance = 2.5 * \interline; - linewidth = -1.0; - \translator { - \type "Score_engraver"; - \name "Score"; - \consists "Rest_engraver"; - \consists "Stem_engraver"; - \consists "Rhythmic_column_engraver"; - } - } -} -@end mudela -@end quotation - -If the duration is omitted then it is set equal to the previous -duration. If there is no previous duration, a quarter note is -assumed. The duration can be followed by a dot (`@code{.}@indexcode{.}') -to obtain dotted note lengths. - -@mudela[fragment,verbatim,center] - a'4. b'4. -@end mudela - -You can alter the length of duration by writing -`@code{*}@var{fraction}' after it. This will not affect the -appearance of note heads or rests. - - -Rests are entered like notes, with note name `@code{r}@indexcode{r}', -or `@code{R}@indexcode{R}'. There is also a note name `@code{s}@indexcode{s}', -which produces a space of the specified duration. -`@code{R}' is specifically meant for entering parts: the @code{R} rest -can expand to fill a score with rests, or it can be printed as a -single multimeasure rest. - - -@cindex lyrics expressions - -Syllables are entered like notes, with pitches replaced by text. For -example, `@code{Twin-4 kle4 twin-4 kle4}' enters four syllables, each -with quarter note duration. Note that the hyphen has no special -meaning for lyrics, and does not introduce special symbols. See -section @xref{modes} for a description of what is interpreted as -lyrics. - -Spaces can be introduced into a lyric either by using quotes -(`@code{"}') or by using an underscore without quotes: `@code{He_could4 -not4}'. All unquoted underscores are converted to spaces. Printing -lyrics is discussed in section @xref{lyricprint}. - - - -@cindex properties - -@quotation - - @code{\property}@keyindex{property} - @var{contextname}@code{.}@var{propname} @code{=} @var{value} -@end quotation - -Sets the @var{propname} property of the context @var{contextname} to -the specified @var{value}. All three arguments are strings. -Depending on the context, it may be necessary to quote the strings or -to leave space on both sides of the dot. - - - -@cindex translator switches - -@quotation - - @code{\translator}@keyindex{translator} - @var{contexttype} = @var{name} -@end quotation - -A music expression indicating that the context which is a direct -child of the a context of type @var{contexttype} should be shifted to -a context of type @var{contexttype} and the specified name. - -Usually this is used to switch staffs in Piano music, e.g. - -@quotation - - @code{\translator Staff = top} @var{Music} -@end quotation - - - -@cindex commands - -Commands are music expressions that have no duration. - - -@quotation - - @code{\key}@keyindex{key} @var{pitch} @var{type} @code{;} -@end quotation - -Change the key signature. @var{type} should be -@code{\major}@keyindex{major} or @code{\minor}@keyindex{minor} to get -@var{pitch}-major or @var{pitch}-minor, respectively. The second -argument is optional; the default is major keys. The @var{\context} -argument can also be given as an integer, which tells the number of -semitones that should be added to the pitch given in the subsequent -@code{\key}@keyindex{key} commands to get the corresponding major key, -e.g., @code{\minor}@keyindex{minor} is defined as 3. The standard -mode names @code{\ionian}@keyindex{ionian}, -@code{\locrian}@keyindex{locrian}, @code{\aeolian}@keyindex{aeolian}, -@code{\mixolydian}@keyindex{mixolydian}, @code{\lydian}@keyindex{lydian}, -@code{\phrygian}@keyindex{phrygian}, and @code{\dorian}@keyindex{dorian} -are also defined. - -@quotation - - @code{\keysignature}@keyindex{keysignature} @var{pitchseq} @code{;} -@end quotation - -Specify an arbitrary key signature. The pitches from @var{pitch} will -be printed in the key signature in the order that they appear on the -list. - - -@quotation - - @code{\mark}@keyindex{mark} @var{unsigned} @code{;} @* - @code{\mark} @var{string} @code{;} -@end quotation - -Prints a mark over or under (depending on the -@code{markDirection}@indexcode{markDirection} property) the staff. You must add -@code{Mark_engraver}@indexcode{Mark_engraver} to either the Score or Staff context for -this to work. - -@node barlines, manualbeam, notedesc, LilyPond 1-2-0 Reference Manual - -@quotation - - @code{\bar}@keyindex{bar} @var{bartype} @code{;} -@end quotation - -This is a request to print a special bar symbol. It replaces the -regular bar symbol with a special -symbol. The argument @var{bartype} is a string which specifies the -kind of bar to print. Options are @code{":|"} -@cindex "|A@@@code{:|} -, -@code{"|:"} -@cindex "|B@@@code{|:} -, @code{":|:"} -@cindex "|C@@@code{:|:} -, -@code{"||"} -@cindex "|D@@@code{||} -, @code{"|."} -@cindex "|E@@@code{|.} -, -@code{".|"} -@cindex "|F@@@code{.|} -, and @code{".|."} -@cindex "|G@@@code{.|.} -. -These produce, respectively, a right repeat, a left repeat, a double -repeat, a double bar, a start bar, an end bar, and a thick double -bar. If @var{bartype} is set to @code{"empty"} then nothing is -printed, but a line break is allowed at that spot. - -You are encouraged to use @code{\repeat} for repetitions. -See section @xref{sec-repeats}. - - - -@quotation - - @code{\cadenza}@keyindex{cadenza} @var{togglevalue} @code{;} -@end quotation - -Music expression that toggles the automatic generation of bar lines. -If @var{togglevalue} is 1, bar line generation is turned off. If -@var{togglevalue} is 0, a bar line is immediately printed and -automatic bar generation is turned on. - -@quotation - - @code{\time}@keyindex{time} @var{numerator}@code{/}@var{denominator} @code{;} -@end quotation - -Change the time signature. The default time signature is 4/4. -The time signature is used to generate bar lines. - -@quotation - - @code{\tempo}@keyindex{tempo} @var{duration} = @var{perminute} @code{;} -@end quotation - -Used to specify the tempo. For example, `@code{\tempo 4 = 76;}' -requests output with 76 quarter notes per minute. - -@quotation - - @code{\partial}@keyindex{partial} @var{duration} @code{;} -@end quotation - -@cindex anacrusis - -@cindex upstep - -This creates an incomplete measure (anacrusis, upbeat) at the start of -the music, e.g., `@code{\partial 8*2;}' creates a starting measure -lasting two eighth notes. - -@quotation - - @code{|}@indexcode{|} -@cindex bar check - -@end quotation - -@cindex shorten measures - -@cindex upstep - -`@code{|}' is a barcheck. Whenever a barcheck is encountered during -interpretation, a warning message is issued if it doesn't fall at a -measure boundary. This can help you finding errors in the input. -The beginning of the measure will be relocated, so this can also -be used to shorten measures. - - -@quotation - - @code{\penalty}@keyindex{penalty} @var{int} @code{;} -@end quotation - -Discourage or encourage line breaks. See identifiers -@code{\break}@keyindex{break} and @code{\nobreak}@keyindex{nobreak} in -section @xref{ident}. - -@quotation - - @code{\clef}@keyindex{clef} @var{clefname} @code{;} -@end quotation - -Music expression that sets the current clef. The argument is a -string which specifies the name of the clef. Several clef names are -supported. If `@code{_8}' or `@code{^8}' is added to the end of a clef -name, then the clef lowered or raised an octave will be generated. -Here are the supported clef names with middle C shown in each -clef: - -@quotation - -@mudela[] -\score { - \notes { - \cadenza 1; - %\property Voice.textStyle = typewriter - \clef subbass; c'4-"\kern -5mm subbass" - \clef bass; c'4^"\kern -2mm bass" - \clef baritone; c'4_"\kern -5mm baritone" - \clef varbaritone; c'4^"\kern -6mm varbaritone" - \clef tenor; c'4_"\kern -3mm tenor" - \clef "G_8"; c'4^"\kern -2mm G\\_8" - } - \paper { - linewidth = 4.5 \in; - } -} -@end mudela -@end quotation - -@quotation - -@mudela[] -\score { - \notes { - \cadenza 1; - \clef alto; c'4_"\kern -2mm alto" - \clef mezzosoprano; c'4^"\kern -9mm mezzosoprano" - \clef soprano; c'4_"\kern -6mm soprano" - \clef treble; c'4^"\kern -4mm treble" - \clef french; c'4_"\kern -4mm french" - } - \paper { - linewidth = 4.5 \in; - } -} -@end mudela -@end quotation - -The three clef symbols can also be obtained using the names `@code{G}', -`@code{C}' or `@code{F}', optionally followed by an integer which -indicates at which note line the clef is located. An as example, the -@code{mezzosoprano} clef can also be given as `@code{C2}'. - -@quotation - - @code{\skip}@keyindex{skip} @var{duration} @code{;} -@end quotation - -Skips the amount of time specified by @var{duration}. If no other -music is played, a gap will be left for the skipped time with no -notes printed. It works in Note Mode or Lyrics Mode. In Note mode, -this has the same effect as the space rest `@code{s}'. - - -@cindex beams - -@node manualbeam, tremolo, barlines, LilyPond 1-2-0 Reference Manual - -A beam is specified by surrounding the beamed notes with brackets -`@code{[}@indexcode{[}' and `@code{]}@indexcode{]}'. - -@mudela[fragment,verbatim,center] - [a'8 a'] [a'16 a' a' a'] -@end mudela - -Some more elaborate constructions: - -@mudela[fragment,verbatim,center] - [a'16 c'' ] - \times 2/3 { [e'8 f' g'] } -@end mudela - -Beaming can be generated automatically; see section @xref{autobeam}. - -To place tremolo marks -@cindex tremolo beams - between two notes, begin -with `@code{[:}@var{length}' and end with `@code{]}'. Tremolo marks -will appear instead of beams. Putting more than two notes in such a -construction will produce odd effects. To create tremolo beams on a -single note, simply attach `@code{:}@var{length}' to the note itself -(see also section @xref{tremolo}). - -@mudela[fragment,verbatim,center] - [:16 e'1 g'] [:8 e'4 f'] -@end mudela - -@mudela[fragment,verbatim,center] - c'4:32 [:16 c'8 d'8] -@end mudela - - -@cindex --@@@code{-}@code{-} - -@indexcode{__} - -@cindex extender - -@cindex hyphen - -The syntax for an extender mark is `@code{__}'. This syntax can only -be used within lyrics mode. The syntax for a spanning hyphen (i.e., -a hyphen that will be printed between two lyric syllables) is -`@code{-}@code{-}'. - - -@cindex ties - -A tie connects two adjacent note heads of the same pitch. When used -with chords, it connects all of the note heads whose pitches match. -Ties are indicated using the tilde symbol `@code{~}@indexcode{~}'. -If you try to tie together chords which have no common pitches, a -warning message will appear and no ties will be created. - -@mudela[fragment,verbatim,center] - e' ~ e' ~ -@end mudela - - - -[TODO: explain Requests] - - -@cindex articulations - -@cindex scripts - -@cindex ornaments - -A variety of symbols can appear above and below notes to indicate -different characteristics of the performance. These symbols can be -added to a note with `@var{note}@code{-\}@var{name}'. Numerous symbols -are defined in @file{script.ly} and @file{script.scm}. Symbols can be -forced to appear above or below the note by writing -`@var{note}@code{^\}@var{name}' and `@var{note}@code{_\}@var{name}' -respectively. Here is a chart showing symbols above notes, with the -name of the corresponding symbol appearing underneath. - -@mudela[] - - \score { - < \notes { - c''-\accent c''-\marcato c''-\staccatissimo c''-\fermata - c''-\stopped c''-\staccato c''-\tenuto c''-\upbow - c''-\downbow c''^\lheel c''-\rheel c''^\ltoe - c''-\rtoe c''-\turn c''-\open c''-\flageolet - c''-\reverseturn c''-\trill c''-\prall c''-\mordent - c''-\prallprall c''-\prallmordent c''-\upprall c''-\downprall - c''-\thumb c''-\segno c''-\coda - } - \context Lyrics \lyrics { - accent__ marcato__ staccatissimo__ fermata - stopped__ staccato__ tenuto__ upbow - downbow__ lheel__ rheel__ ltoe - rtoe__ turn__ open__ flageolet - reverseturn__ trill__ prall__ mordent - prallprall__ prallmordent__ uprall__ downprall - thumb__ segno__ coda - } - > - \paper { - linewidth = 5.875\in; - indent = 0.0; - } - } - -@end mudela - -In addition, it is possible to place arbitrary strings of text or -TeX above or below notes by using a string instead of an -identifier: `@code{c^"text"}'. Fingerings -@cindex fingering - can be -placed by simply using digits. All of these note ornaments appear in -the printed output but have no effect on the MIDI rendering of the -music. - -To save typing, fingering instructions (digits 0 to 9 are -supported) and single characters shorthands exist for a few -common symbols - -@mudela[] - - \score { - \notes { - \property Voice.textStyle = typewriter - c''4-._"c-." s4 - c''4--_"c-{}-" s4 - c''4-+_"c-+" s4 - c''4-|_"c-|" s4 - c''4->_"c->" s4 - c''4-^_"c-\\^{ }" s4 - c''4-1_"c-1" s4 - c''4-2_"c-2" s4 - c''4-3_"c-3" s4 - c''4-4_"c-4" s4 - } - \paper { - linewidth = 5.875 \in; - indent = 0.0; - } - } - -@end mudela - -Dynamic marks are specified by using an identifier after a note: -`@code{c4-\ff}' (the dash is optional for dynamics: `@code{c4 \ff})'. -The available dynamic marks are: -@code{\ppp}@keyindex{ppp}, -@code{\pp}@keyindex{pp}, @code{\p}@keyindex{p}, @code{\mp}@keyindex{mp}, -@code{\mf}@keyindex{mf}, @code{\f}@keyindex{f}, @code{\ff}@keyindex{ff}, -@code{\fff}@keyindex{fff}, @code{\fff}@keyindex{ffff}, -@code{\fp}@keyindex{fp}, @code{\sf}@keyindex{sf}, -@code{\sff}@keyindex{sff}, @code{\sp}@keyindex{sp}, -@code{\spp}@keyindex{spp}, @code{\sfz}@keyindex{sfz}, and -@code{\rfz}@keyindex{rfz}. - - -@quotation - - @code{\textscript}@keyindex{textscript} @var{text} @var{style} -@end quotation - -Defines a text to be printed over or under a note. @var{style} is a -string that may be one of @code{roman}, @code{italic}, @code{typewriter}, -@code{bold}, @code{Large}, @code{large}, @code{dynamic} or @code{finger}. - -You can attach a general textscript request using this syntax: - -@quotation - -@example -c4-\textscript "6" "finger" -c4-\textscript "foo" "normal" -@end example - -@end quotation - -This is equivalent to `@code{c4-6 c4-"foo"}'. - - -@cindex scripts - -@quotation - - @code{\script}@keyindex{script} @var{alias} -@end quotation - -Prints a symbol above or below a note. The argument is a string -which points into the script-alias table defined in @file{script.scm}. -The scheme definitions specify whether the symbol follows notes into -the staff, dependence of symbol placement on staff direction, and a -priority for placing several symbols over one note. Usually the -@code{\script}@keyindex{script} keyword is not used directly. Various -helpful identifier definitions appear in @file{script.ly}. - - -@cindex slur - -Slurs connects chords and try to avoid crossing stems. A slur is -started with `@code{(}' and stopped with `@code{)}'. The -starting `@code{(}' appears to the right of the first note in -the slur. The terminal `@code{)}' appears to the left of the -first note in the slur. This makes it possible to put a note in -slurs from both sides: - -@mudela[fragment,verbatim,center] - f'()g'()a' [a'8 b'(] a'4 g'2 )f'4 -@end mudela - - -@cindex crescendo - -A crescendo mark is started with @code{\cr}@keyindex{cr} and terminated -with @code{\rc}@keyindex{rc}. A decrescendo mark is started with -@code{\decr}@keyindex{decr} and terminated with -@code{\rced}@keyindex{rced}. There are also shorthands for these -marks. A crescendo can be started with @code{\<}@keyindex{<} and a -decrescendo can be started with @code{\>}@keyindex{>}. Either one can -be terminated with @code{\!}@keyindex{"!}. Note that @code{\!} -must go before the last note of the dynamic mark whereas @code{\rc} -and @code{\rced} go after the last note. Because these marks are -bound to notes, if you want to get several marks during one note, you -must use spacer notes. - -@mudela[fragment,verbatim,center] - c'' \< \! c'' d'' \decr e'' \rced - < f''1 { s4 \< \! s2 \> \! s4 } > -@end mudela - - -@quotation - - @code{\spanrequest}@keyindex{spanrequest} @var{startstop} @var{type} -@end quotation - -Define a spanning request. The @var{startstop} parameter is either -1 -(@code{\start}@keyindex{start}) or 1 (@code{\stop}@keyindex{stop}) and -@var{type} is a string that describes what should be started. -Supported types are @code{crescendo}, @code{decrescendo}, -@code{beam}, @code{slur}. This is an internal command. Users should -use the shorthands which are defined in the initialization file -@file{spanners.ly}. - -You can attach a (general) span request to a note using - -@mudela[fragment,verbatim,center] - c'4-\spanrequest \start "slur" - c'4-\spanrequest \stop "slur" -@end mudela - -The slur syntax with parentheses is a shorthand for this. - - - -@cindex tremolo marks - -@node tremolo, Compound music expressions, manualbeam, LilyPond 1-2-0 Reference Manual - -Tremolo marks can be printed on a single note by adding -`@code{:}[@var{length}]' after the note. The length must be at -least 8. A @var{length} value of 8 gives one line across -the note stem. If the length is omitted, then the last value is -used, or the value of the @code{abbrev}@indexcode{abbrev} property if there was -no last value. - -@mudela[verbatim,fragment,center] - c'2:8 c':32 -@end mudela - - - -@node Compound music expressions, compoundmusic, tremolo, LilyPond 1-2-0 Reference Manual -@section Compound music expressions - -@cindex compound music expressions - -@node compoundmusic, relative, Compound music expressions, LilyPond 1-2-0 Reference Manual - -Music expressions are compound data structures. You can nest music -expressions any way you like. This simple example shows how three -chords can be expressed in two different ways: - -@mudela[fragment,verbatim,center] - \notes \context Staff { - \cadenza 1; - - <{a b c'}{c' d' e'}> - } -@end mudela - - - -@cindex context selection - -@quotation - - @code{\context}@keyindex{context} - @var{contexttype} [@code{=} @var{contextname}] @var{musicexpr} -@end quotation - -Interpret @var{musicexpr} within a context of type @var{contexttype}. -If the context does not exist, it will be created. The new context -can optionally be given a name. See -section @xref{contextselection} and @xref{contextdefs} for more -information on interpretation contexts. - - - -@cindex input modes - -@cindex mode switch - -Mode switching keywords form compound music expressions: @code{\notes} -@keyindex{notes} @var{musicexpr}, @code{\chords} @keyindex{chords} -@var{musicexpr}, and @code{\lyrics} @keyindex{lyrics} @var{musicexpr}. -These expressions do not add anything to the meaning of their -arguments. They are just a way to indicate that the arguments should -be parsed in indicated mode. See section @xref{modes} for more -information on modes. - -More information on context selection can be found in -section @xref{contextselection}. - - - -@cindex sequential music - - - -@quotation - - @code{\sequential}@keyindex{sequential} - @code{@{} @var{musicexprlist} @code{@}} -@end quotation - -This means that list should be played or written in sequence, i.e., -the second after the first, the third after the second. The duration -of sequential music is the the sum of the durations of the elements. -There is a shorthand, which leaves out the keyword: - -@quotation - - @code{@{} @var{musicexprlist} @code{@}} -@end quotation - - - -@cindex simultaneous music - -@indexcode{<} -@indexcode{>} - -@quotation - - @code{\simultaneous}@keyindex{simultaneous} - @code{@{} @var{musicexprlist} @code{@}} -@end quotation - -It constructs a music expression where all of its arguments start at -the same moment. The duration is the maximum of the durations of the -elements. The following shorthand is a common idiom: - -@quotation - - @code{<} @var{musicexprlist} @code{>} -@end quotation - -If you try to use a chord as the first thing in your score, you might -get multiple staffs instead of a chord. - -@mudela[verbatim,center] - \score { - \notes - \paper { - linewidth = -1.; - } - } -@end mudela - -This happens because the chord is interpreted by a score context. -Each time a note is encountered a default Voice context (along with a -Staff context) is created. The solution is to explicitly instantiate -a Voice context: - -@mudela[verbatim,center] - \score { - \notes\context Voice - \paper { - linewidth = -1.; - } - } -@end mudela - - - -@cindex relative pitch specification - -@node relative, sec-repeats, compoundmusic, LilyPond 1-2-0 Reference Manual - -It is easy to get confused by octave changing marks and accidentally -putting a pitch in the wrong octave. A much better way of entering a -note's octave is `the relative octave' mode. - -@quotation - - @code{\relative}@keyindex{relative} @var{startpitch} @var{musicexpr} -@end quotation - -The octave of notes that appear in @var{musicexpr} are calculated as -follows: If no octave changing marks are used, the basic interval -between this and the last note is always taken to be a fourth or -less.@footnote{The interval is determined without regarding -accidentals. A @code{fisis} following a @code{ceses} will be put above -the @code{ceses}.} The octave changing marks `@code{'}' and `@code{,}' -can then be added to raise or lower the pitch by an extra octave. -Upon entering relative mode, an absolute starting pitch must be -specified that will act as the predecessor of the first note of -@var{musicexpr}. - -Entering scales is straightforward in relative mode. - -@mudela[fragment,verbatim,center] - \relative c' { - c d e f g a b c c, - } -@end mudela - -And octave changing marks are used for intervals greater than a fourth. - -@mudela[fragment,verbatim,center] - \relative c'' { - c g c f, c' a, e'' } -@end mudela - -If the preceding item is a chord, the first note of the chord is used -to determine the first note of the next chord. But other notes -within the second chord are determined by looking at the immediately -preceding note. - -@mudela[fragment,verbatim,center] - \relative c' { - c - - - } -@end mudela - -The pitch after the @code{\relative} contains a notename. To parse -the pitch as a notename, you have to be in note mode, so there must -be a surrounding @code{\notes}@keyindex{notes} keyword (which is not -shown here). - -The relative conversion will not affect @code{\transpose} or -@code{\relative} sections in its argument. If you want to use -relative within transposed music, you must place an additional -@code{\relative} inside the @code{\transpose}. - -It is strongly recommended to use relative pitch mode: less work, -less error-prone, and more readable. - - - -Chord names are a way to generate simultaneous music expressions that -correspond with traditional chord names. It can only be used in -Chord mode (see section @xref{modes}). - -@quotation - - @var{tonic}[@var{duration}][@code{-}@var{modifiers}][@code{^}@var{subtractions}][@code{/}@var{inversion}]. -@end quotation - -@var{tonic} should be the tonic note of the chord, and @var{duration} -is the chord duration in the usual notation. There are two kinds of -modifiers. One type is @emph{chord additions}, which are obtained by -listing intervals separated by dots. An interval is written by its -number with an optional `@code{+}' or `@code{-}' to indicate raising or -lowering by half a step. Chord additions has two effects: It adds -the specified interval and all lower odd numbered intervals to the -chord, and it may lower or raise the specified interval. Intervals -must be separated by a dot (`@code{.}'). - -@quotation - -@mudela[fragment,verbatim] -\transpose c'' { - \chords { - c1 c-3- c-7 c-8 - c-9 c-9-.5+.7+ c-3-.5- c-4.6.8 - } -} - -@end mudela -@end quotation - -The second type of modifier that may appear after the `@code{-}' is a -named modifier. Named modifiers are listed in the file -@file{chord-modifiers.ly}. The available modifiers are `@code{m}' and -`@code{min}' which lower the 3rd half a step, `@code{aug}@indexcode{aug}' which -raises the 5th, `@code{dim}@indexcode{dim}' which lowers the 5th, -`@code{maj}@indexcode{maj}' which adds a raised 7th, and `@code{sus}@indexcode{sus}' -which replaces the 5th with a 4th. - -@quotation - -@mudela[fragment,verbatim] -\transpose c'' { - \chords { - c1-m c-min7 c-maj c-aug c-dim c-sus - } -} - -@end mudela -@end quotation - - -Chord subtractions are used to eliminate notes from a chord. The -notes to be subtracted are listed after a `@code{^}' character, -separated by dots. - -@mudela[fragment,verbatim,center] - \transpose c'' { - \chords { - c1^3 c-7^5.3 c-8^7 - } - } -@end mudela - -Chord inversions can be specified by appending `@code{/}@indexcode{/}' and -the name of a single note to a chord. This has the effect of -lowering the specified note by an octave so it becomes the lowest -note in the chord. If the specified note is not in the chord, a -warning will be printed. - -@mudela[fragment,verbatim,center] - \transpose c''' { - \chords { - c1 c/e c/g c-7/e - } - } - -@end mudela - -Throughout these examples, chords have been shifted around the staff -using @code{\transpose}. - -You should not combine @code{\relative} with named chords. - - - -@cindex tuplets - -Tuplets are made out of a music expression by multiplying their -duration with a fraction. - -@quotation - - @code{\times}@keyindex{times} @var{fraction} @var{musicexpr} -@end quotation - -The duration of @var{musicexpr} will be multiplied by the fraction. -In print, the fraction's denominator will be printed over the notes, -optionally with a bracket. The most common tuplet is the triplet in -which 3 notes have the length of 2, so the notes are 2/3 of -their written length: - -@mudela[fragment,verbatim,center] - g'4 \times 2/3 {c'4 c' c'} d'4 d'4 -@end mudela - - - -@cindex grace notes - -@quotation - - @code{\grace}@keyindex{grace} @var{musicexpr} -@end quotation - -A grace note expression has duration 0; the next real note is -assumed to be the main note. - -You cannot have the grace note after the main note, in terms of -duration, and main notes, but you can typeset the grace notes to the -right of the main note using the property -@code{graceAlignPosition}@indexcode{graceAlignPosition}. - -When grace music is interpreted, a score-within-a-score is set up: -@var{musicexpr} has its own time bookkeeping, and you could (for -example) have a separate time signature within grace notes. While in -this score-within-a-score, you can create notes, beams, slurs, etc. -Unbeamed eighth notes and shorter by default have a slash through the -stem. This behavior can be controlled with the -@code{stemStyle}@indexcode{stemStyle} property. - -@quotation - -@mudela[fragment,verbatim] -\relative c'' { - \grace c8 c4 \grace { [c16 c16] } c4 - \grace { \property Grace.stemStyle = "" c16 } c4 -} - -@end mudela -@end quotation - -At present, nesting @code{\grace}@keyindex{grace} notes, e.g. - -@quotation - - @code{\grace @{ \grace c32 c16 @} c4} -@end quotation - -may result in run-time errors of LilyPond. Since the meaning of such -a construct is unclear, we don't consider this a loss. Similarly, -juxtaposing two @code{\grace} sections is syntactically valid, but -makes no sense and may cause runtime errors. - -Ending a staff or score with grace notes may also generate a run-time -error, since there will be no main note to attach the grace notes to. - - - -@cindex repeats - -@node sec-repeats, transpose, relative, LilyPond 1-2-0 Reference Manual - -In order to specify repeats, use the @code{\repeat}@keyindex{repeat} -keyword. Since repeats look and sound differently when played or -printed, there are a few different variants of repeats. - -@table @samp - @item unfolded @* - Repeated music is fully written (played) out. Useful for MIDI - output. - - @item volta @* - This is the normal notation: Repeats are not written out, but - alternative endings (voltas) are printed, left to right. - - @item folded @* - Alternative endings are written stacked, which is useful for - lyrics. -@end table - -The syntax for repeats is - -@quotation - - @code{\repeat} @var{variant} @var{repeatcount} @var{repeatbody} -@end quotation - -If you have alternative endings, you may add - -@quotation - - @code{\alternative}@keyindex{alternative} - @code{@{} @var{alternative1} - @var{alternative2} - @var{alternative3} ... @code{@}} -@end quotation - -where each @var{alternative} is a Music expression. - -Normal notation repeats are used like this: - -@quotation - -@mudela[fragment,verbatim] - c'1 - \repeat volta 2 { c'4 d' e' f' } - \repeat volta 2 { f' e' d' c' } - -@end mudela -@end quotation - -With alternative endings: - -@quotation - -@mudela[fragment,verbatim] - c'1 - \repeat volta 2 {c'4 d' e' f'} - \alternative { {d'2 d'} {f' f} } - -@end mudela -@end quotation - -Folded repeats look like this:@footnote{Folded repeats offer little -more over simultaneous music. However, it is to be expected that -more functionality -- especially for the MIDI backend -- will be -implemented.} - -@quotation - -@mudela[fragment,verbatim] - c'1 - \repeat fold 2 {c'4 d' e' f'} - \alternative { {d'2 d'} {f' f} } - -@end mudela -@end quotation - -@quotation - -@mudela[fragment,verbatim] -\context Staff { - \relative c' { - \partial 4; - \repeat volta 2 { e | c2 d2 | e2 f2 | } - \alternative { { g4 g g } { a | a a a a | b1 } } - } -} - -@end mudela -@end quotation - -If you don't give enough alternatives for all of the repeats, then -the first alternative is assumed to be repeated often enough to equal -the specified number of repeats. - -@quotation - -@mudela[fragment,verbatim] -\context Staff { - \relative c' { - \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | } - \alternative { { g4 g g } - {\partial 1; e4 e e } - {\partial 1; a a a a | b1 } } - } -} - -@end mudela -@end quotation - -It is possible to nest @code{\repeat}. This is not entirely -supported: the notes will come be in the right places, but the repeat -bars will not. - - - -@cindex transposition of pitches - -@node transpose, Ambiguities, sec-repeats, LilyPond 1-2-0 Reference Manual - -A music expression can be transposed with -@code{\transpose}@keyindex{transpose}. The syntax is - -@quotation - - @code{\transpose} @var{pitch} @var{musicexpr} -@end quotation - -This means that middle C in @var{musicexpr} is transposed to -@var{pitch}. - -@code{\transpose} distinguishes between enharmonic pitches: both -@code{\transpose cis'} or @code{\transpose des'} will transpose up half -a tone. The first version will print sharps and the second version -will print flats. - -@quotation - -@mudela[fragment,verbatim] -\context Staff { - \clef "F"; - { \key e; c d e f } - \clef "G"; - \transpose des'' { \key e; c d e f } - \transpose cis'' { \key e; c d e f } -} - -@end mudela -@end quotation - -If you want to use both @code{\transpose} and @code{\relative}, then -you must use @code{\transpose} first. @code{\relative} will have no -effect music that appears inside a @code{\transpose}. - - - -@cindex automatic lyric durations - -If you have lyrics that are set to a melody, you can import the -rhythm of that melody into the lyrics using @code{\addlyrics}. -@keyindex{addlyrics} The syntax for this is - -@quotation - - @code{\addlyrics} @var{musicexpr1 musicexpr2} -@end quotation - -This means that both @var{musicexpr1} and @var{musicexpr2} are -interpreted, but that every non-command atomic music expression -(``every syllable'') in @var{musicexpr2} is interpreted using timing -of @var{musicexpr1}. - -If the property @code{automaticMelismata}@indexcode{automaticMelismata} is set in the -context of @var{musicexpr1}, no lyrics will be put on slurred or tied -notes. - -@quotation - -@mudela[verbatim,fragment] -\addlyrics -\transpose c'' { - \property Voice.automaticMelismata = "1" - c8 () cis d8. e16 f2 -} -\context Lyrics \lyrics { - do4 re mi fa } - -@end mudela -@end quotation - -You should use a single rhythm melody, and single rhythm lyrics (a -constant duration is the obvious choice). If you do not, you will get -undesired effects when using multiple stanzas: - -@quotation - -@mudela[verbatim,fragment] -\addlyrics -\transpose c'' { - c8 () cis d8. e16 f2 -} -\context Lyrics \lyrics -< { do4 re mi fa } - { do8 re mi fa } > - -@end mudela -@end quotation - -It is valid (but probably not very useful) to use notes instead of -lyrics for @var{musicexpr2}. - - - - -@node Ambiguities, Notation conversion specifics, transpose, LilyPond 1-2-0 Reference Manual -@section Ambiguities - -@cindex ambiguities - -The grammar contains a number of ambiguities.@footnote{The authors -hope to resolve them at a later time.} - -@itemize @bullet - @item The assignment - - @quotation - - @example -foo = bar -@end example - - @end quotation - - can be interpreted as making a string identifier @code{\foo} - containing @code{"bar"}, or a music identifier @code{\foo} - containing the syllable `bar'. - - @item The assignment - - @quotation - - @example -foo = -6 -@end example - - @end quotation - - can be interpreted as making an integer identifier - containing -6, or a Request identifier containing the - fingering `6' (with neutral direction). - - @item If you do a nested repeat like - - @quotation - -@example -\repeat ... -\repeat ... -\alternative -@end example - - @end quotation - - then it is ambiguous to which @code{\repeat} the - @code{\alternative} belongs. This is the classic if-then-else - dilemma. It may be solved by using braces. - - @item (an as yet unidentified ambiguity :-) -@end itemize - - - -@node Notation conversion specifics, autobeam, Ambiguities, LilyPond 1-2-0 Reference Manual -@section Notation conversion specifics - - - -@cindex automatic beam generation - -@node autobeam, lyricprint, Notation conversion specifics, LilyPond 1-2-0 Reference Manual - -By default, LilyPond will generate beams automatically. This feature -can be disabled by setting the @code{Voice.noAutoBeaming}@indexcode{Voice.noAutoBeaming} -property to 1. It can be overridden for specific cases by -specifying explicit beams as described in -section @xref{manualbeam}. - -A large number of Voice properties are used to decide how to generate -beams. Their default values appear in @file{auto-beam-settings.ly}. -In general, beams can begin anywhere, but their ending location is -significant. Beams can end on a beat, or at durations specified by -the @code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} property. To end beams every -quarter note, for example, you could set -@code{Voice.beamAutoEnd}@indexcode{Voice.beamAutoEnd} equal to `@code{"1/4"}'. To end beams -at every three eighth notes you would set it to `@code{"3/8"}'. The -same syntax can be used to specify beam starting points using -@code{Voice.beamAutoBegin}@indexcode{Voice.beamAutoBegin}. - -To allow different settings for different time signatures, these -property names can start with `@code{time}@var{N}@code{_}@var{M}' to -restrict the definition to `@var{N}@code{/}@var{M}' time. For example, -to specify beams ending only for 6/8 time you would use the -property @code{Voice.time6_8beamAutoEnd}. To allow different endings -for notes of different durations, the duration can be tacked onto the -end of the property. To specify beam endings for beams that contain -32nd notes, you would use @code{Voice.beamAutoEnd_32}. - - - -@cindex chord names - -@cindex chords - -@cindex printing!chord names - -For displaying printed chord names, use the @code{ChordNames}@indexcode{ChordNames} -and @code{ChordNameVoice}@indexcode{ChordNameVoice} contexts. The chords may be entered -either using the notation described above, or directly using -simultaneous music. - -@quotation - -@mudela[fragment,verbatim] -< - \context ChordNames { - \chords{a b c} \notes{ } - } - \context Staff \notes { - a b c' d' e' - } -> - -@end mudela -@end quotation - -LilyPond examines chords specified as lists of notes to determine a -name to give the chord. By default, LilyPond will not try to -identify chord inversions: - -@mudela[fragment,verbatim,center] - < - \context ChordNameVoice \notes { - - } - \context Thread \notes { - - } - > -@end mudela - -If you want inversions to be recognized, you must set the property -@code{ChordNames.chordInversion}@indexcode{ChordNames.chordInversion}: - -@mudela[fragment,verbatim,center] - < - \property Score.chordInversion = 1 - \context ChordNameVoice \notes { - - } - \context Thread \notes { - - } - > -@end mudela - - - -@cindex lyrics - -@cindex printing!lyrics - -@node lyricprint, Notation Contexts, autobeam, LilyPond 1-2-0 Reference Manual - -Lyric syllables must be interpreted within a @code{Lyrics} context - -@cindex context!Lyrics - for printing them. - -Here is a full example: - -@quotation - -@mudela[verbatim] -\score { - < - \notes \transpose c'' { - c d e c | c d e c | - e f g2 | e4 f g2 \bar "|."; - } - \context Lyrics \lyrics { - Va-4 der Ja- cob Va- der Ja- cob - Slaapt gij nog?2 Slaapt4 gij nog?2 - } - > -} - -@end mudela -@end quotation - -You may want a continuous line after the syllables to show melismata. -To achieve this effect, add a `@code{__}' lyric as a separate word -after the lyric to be extended. This will create an extender, a line -that extends over the entire duration of the lyric. This line will -run all the way to the start of the next lyric, so you may want to -shorten it by using a blank lyric (using `@code{_}'). - -@quotation - -@mudela[verbatim] -\score { - < - \notes \relative c'' { - a4 () b () c () d | c () d () b () a | c () d () b () a - } - \context Lyrics \lyrics { - foo1 __ | bar2. __ _4 | baz1 __ - } - > -} - -@end mudela -@end quotation - - -If you want to have hyphens centered between syllables (rather than -attached to the end of the first syllable) you can use the special -`@code{-}@code{-}' lyric as a separate word between syllables. This -will result in a hyphen which length varies depending on the space -between syllables, and which will be centered between the syllables. -For example: - -@quotation - -@mudela[verbatim] -\score { - < - \notes \transpose c'' { - c d e c | c d e c | - e f g2 | e4 f g2 \bar "|."; - } - \context Lyrics \lyrics { - Va4 -- der Ja -- cob | Va -- der Ja -- cob | - Slaapt gij nog?2 | Slaapt4 gij nog?2 - } - > -} - -@end mudela -@end quotation - - - -@node Notation Contexts, contextselection, lyricprint, LilyPond 1-2-0 Reference Manual -@section Notation Contexts - -@cindex notation contexts - -Notation contexts are objects that only exist during a run of -LilyPond. During the interpretation phase of LilyPond, the Music -expression contained in a @code{\score} block is interpreted in time -order. This is the order in which humans read, play, and write -music. - -A context is an object that holds the reading state of the -expression; it contains information like - -@itemize @bullet - @item What notes are playing at this point? - @item What symbols will be printed at this point? - @item In what style will they printed? - @item What is the current key signature, time signature, point within - the measure, etc.? -@end itemize - -Contexts are grouped hierarchically: A @code{Voice} context is -contained in a @code{Staff} context (because a staff can contain -multiple voices at any point), a @code{Staff} context is contained in -a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because -these can all contain multiple staffs). - -Contexts associated with sheet music output are called @emph{notation -contexts}, those for sound output are called playing contexts. - -Contexts are created either manually or automatically. Initially, -the top level music expression is interpreted by the top level -context (the @code{Score} context). When a atomic music expression -(i.e. a note, a rest, @code{\bar}, or @code{\time} commands), a nested -set of contexts is created that can process these atomic expressions, -as in this example: - -@quotation - - @example -\score @{ \notes < c4 > @} -@end example - -@end quotation - -The sequential music, `@code{@{ c4 @}}' is interpreted by @code{Score} -context. When the note `@code{c4}' itself is interpreted, a set of -contexts is needed that will accept notes. The default for this is a -@code{Voice} context, contained in a @code{Staff} context. Creation of -these contexts results in the staff being printed. - - -@node contextselection, Notation output definitions, Notation Contexts, LilyPond 1-2-0 Reference Manual - -@cindex context - -You can also create contexts manually, and you probably have to do so -if you want to typeset complicated multiple part material. If a -`@code{\context} @var{name} @var{musicexpr}' expression is encountered -during the interpretation phase, the @var{musicexpr} argument will be -interpreted with a context of type @var{name}. If you specify a name, -the specific context with that name is searched. - -If a context of the specified type and name can not be found, a new -one is created. For example, - -@quotation - -@mudela[verbatim] -\score { - \notes \relative c'' { - c4 f - } -} - -@end mudela -@end quotation - -In this example, the @code{c} and @code{d} are printed on the -default staff. For the @code{e}, a context Staff called -`@code{another}' is specified; since that does not exist, a new -context is created. Within @code{another}, a (default) Voice context -is created for the @code{e4}. When all music referring to a -context is finished, the context is ended as well. So after the -third quarter, @code{another} is removed. - -Almost all music expressions inherit their interpretation context -from their parent. In other words, suppose that the syntax for a -music expression is - -@quotation - - @code{\keyword} @var{musicexpr1} @var{musicexpr2} ... -@end quotation - -When the interpretation of this music expression starts, the context -for @var{musicexpr1}, @var{musicexpr2}, etc. is that of the total -expression. - -Lastly, you may wonder, why this: - -@quotation - -@example -\score @{ - \notes \relative c'' @{ - c4 d4 e4 - @} -@} -@end example - -@end quotation - -doesn't result in this: - -@mudela[] - - \score { - \notes \relative c'' { - - } - } - -@end mudela - -For the @code{c4}, a default @code{Staff} (with a contained -@code{Voice}) context is created. After the @code{c4} ends, no -music refers to this default staff, so it would be ended, with the -result shown. To prevent this inconvenient behavior, the context to -which the sequential music refers is adjusted during the -interpretation. So after the @code{c4} ends, the context of the -sequential music is also the default @code{Voice} context. -The @code{d4} gets interpreted in the same context -as @code{c4}. - - - -These are the contexts supplied with the package. They are defined -in the initialization file @file{ly/engraver.ly}. - -@table @samp - @item @code{Grace}@indexcode{Grace} @* - The context for handling grace notes. It is instantiated - automatically when you use @code{\grace}. Basically, it is an - `embedded' miniature of the Score context. Since this context - needs special interaction with the rest of LilyPond, you should - not explicitly instantiate it. - - @item @code{LyricVoice}@indexcode{LyricVoice} @* - Corresponds to a voice with lyrics. Handles the printing of a - single line of lyrics. - - @item @code{Thread}@indexcode{Thread} @* - Handles note heads, and is contained in the Voice context. You - have to instantiate this explicitly if you want to adjust the - style of individual note heads. - - @item @code{Voice}@indexcode{Voice} @* - Corresponds to a voice on a staff. This context handles the - conversion of dynamic signs, stems, beams, super- and subscripts, - slurs, ties, and rests. - - You have to instantiate this explicitly if you want to have - multiple voices on the same staff. - - @item @code{ChordNamesVoice}@indexcode{ChordNamesVoice} @* - A voice with chord names. Handles printing of a line of chord - names. - - @item @code{ChordNames}@indexcode{ChordNames} @* - Typesets chord names. Can contain @code{ChordNamesVoice} - contexts. - - @item @code{Lyrics}@indexcode{Lyrics} @* - Typesets lyrics. It can contain @code{LyricVoice} contexts. - - @item @code{Staff}@indexcode{Staff} @* - Handles clefs, bar lines, keys, accidentals. It can contain - @code{Voice} contexts. - - @item @code{RhythmicStaff}@indexcode{RhythmicStaff} @* - A context like @code{Staff} but for printing rhythms. Pitches are - ignored; the notes are printed on one line. It can contain - @code{Voice} contexts. - - @item @code{GrandStaff}@indexcode{GrandStaff} @* - Contains @code{Staff} or @code{RhythmicStaff} contexts. It adds a - brace on the left side, grouping the staffs together. The bar - lines of the contained staffs are connected vertically. It can - contain @code{Staff} contexts. - - @item @code{PianoStaff}@indexcode{PianoStaff} @* - Just like @code{GrandStaff} but with @code{minVerticalAlign} set - equal to @code{maxVerticalAlign} so that interstaff beaming and - slurring can be used. - - @item @code{StaffGroup}@indexcode{StaffGroup} @* - Contains @code{Staff} or @code{RhythmicStaff} contexts. Adds a - bracket on the left side, grouping the staffs together. The bar - lines of the contained staffs are connected vertically. It can - contain @code{Staff}, @code{RhythmicStaff}, @code{GrandStaff}, or - @code{Lyrics} contexts. - - @item @code{ChoirStaff}@indexcode{ChoirStaff} @* - Identical to @code{StaffGroup} except that the contained staffs - are not connected vertically. - - @item @code{Score}@indexcode{Score} @* - This is the top level notation context. No other context can - contain a @code{Score} context. This context handles the - administration of time signatures. It also makes sure that items - such as clefs, time signatures, and key-signatures are aligned - across staffs. It can contain @code{Lyrics}, @code{Staff}, - @code{RhythmicStaff}, @code{GrandStaff}, @code{StaffGroup}, and - @code{ChoirStaff} contexts. - - You cannot explicitly instantiate a Score context (since it is - not contained in any other context). It is instantiated - automatically when an output definition (a @code{\score} or - @code{\paper} block) is processed. -@end table - - - -Properties that are set in one context are inherited by all of the -contained contexts. This means that a property valid for the -@code{Voice} context can be set in the @code{Score} context (for -example) and thus take effect in all @code{Voice} contexts. - -Properties can be preset within the @code{\translator} block -corresponding to the appropriate context. In this case, the syntax -is - -@quotation - - @var{propname} @code{=} @var{value} -@end quotation - -This assignment happens before interpretation starts, so a -@code{\property} expression will override any predefined settings. - -The @code{\property} expression will create any property you specify. -There is no guarantee that a property will be used. So if you spell -a property name wrong, there will be no error message. - -The property settings are used during the interpretation phase. They -are read by the LilyPond modules where interpretation contexts are -built of. These modules are called @emph{translators}. Translators for -notation are called @emph{engravers}, and translators for sound are -called @emph{performers}. - -The precise result of a property is determined by the implementation -of the translator that reads them. Therefore, the result of a -property can vary, since it is implementation and configuration -dependent. - -In order to fully find out what properties are used, you must -currently search the source code for calls to @code{get_property}. -The rest of the section is devoted to an (incomplete) overview of -available properties. - - -@cindex properties!Lyrics - -@table @samp - @item @code{textStyle}@indexcode{textStyle} @* - Set the font for lyrics. The available font choices are - @code{roman}, @code{italic}, @code{bold}, @code{large}, @code{Large}, - @code{typewriter}, and @code{finger}. The @code{finger} font can - only display numbers. Note also that you must be careful when - using @code{\property} in Lyrics mode, because of the way strings - are parsed. Either put quotes around the arguments to - @code{\property} or be sure to leave a space on both sides of the - dot. -@end table - - -@cindex properties!Thread - -@table @samp - @item @code{noteheadStyle}@indexcode{noteheadStyle} @* - Selects type of note head. Choices are @code{cross}, - @code{diamond}, @code{harmonic}, @code{transparent}, and @code{""}. - They are shown in that order below. - - @mudela[center] - - \score { - \notes { - \property Staff.barNonAuto = 1 - \property Voice.noteHeadStyle = cross - a' - \property Voice.noteHeadStyle = diamond - a' - \property Voice.noteHeadStyle = harmonic - a' - \property Voice.noteHeadStyle = transparent - a' - \property Voice.noteHeadStyle = "" - a' - } - \paper { - linewidth = -1.; - } - } - -@end mudela -@end table - -@subsubheading Grace properties - -@cindex properties!Grace - - -@table @samp - @item @code{stemStyle}@indexcode{stemStyle} @* - By default set to @code{"grace"} meaning that all unbeamed - notes with flags are typeset with a slash through the flag. - Setting to @code{""} gives standard flags. -@end table - - -@cindex properties!Voice - -@table @samp - @item @code{abbrev}@indexcode{abbrev} @* - Set length for tremolo to be used if no length is explicitly - specified. - - @item @code{articulationScriptPadding}@indexcode{articulationScriptPadding} - @* - Determines the extra space added between articulation marks, such - as staccato, tenuto, trill, up/down bow or fermata, and the - closest staff line or note. - - @item @code{articulationScriptVerticalDirection} - @indexcode{articulationScriptVerticalDirection} @* - Determines the location of articulation marks. Set to @code{\up} - to print marks above the staff; set to @code{\down} to print marks - below the staff. This property does not override explicit - directions marked with `@code{^}' or `@code{_}' in the mudela file. - - @item @code{noAutoBeaming}@indexcode{beamAuto} @* - If set to 1 then beams are not generated automatically. - - @item @code{beamAutoEnd}@indexcode{beamAutoEnd} @* - Specifies when automatically generated beams can end. See - section @xref{autobeam}. - - @item @code{beamAutoBegin}@indexcode{beamAutoBegin} @* - Specifies when automatically generated beams can start. See - section @xref{autobeam}. - - @item @code{beamquantisation}@indexcode{beamquantisation} @* - Set to @code{\none} for no quantization. Set to @code{\normal} to - quantize position and slope. Set to @code{\traditional} to avoid - wedges. These three settings are available via - @code{\beamposfree}@keyindex{beamposfree}, - @code{\beamposnormal}@keyindex{beamposnormal}, and - @code{\beampostraditional}@keyindex{beampostraditional}. - - @item @code{beamslopedamping}@indexcode{beamslopedamping} @* - Set to @code{\none} for undamped beams. Set to @code{\normal} for - damped beams. Set to @code{\infinity} for beams with zero slope. - The identifiers - @code{\beamslopeproportional}@keyindex{beamslopeproportional}, - @code{\beamslopedamped}@keyindex{beamslopedamped}, and - @code{\beamslopezero}@keyindex{beamslopezero} each set the - corresponding value. - - @item @code{dynamicDirection}@indexcode{dynamicDirection} @* - Determines location of dynamic marks. Set to @code{\up} to print - marks above the staff; set to @code{\down} to print marks below - the staff. - - @item @code{dynamicStyle}@indexcode{dynamicStyle} @* - Set the text style for dynamics. - - @item @code{fontSize}@indexcode{fontSize} @* - Can be used to select smaller font sizes for music. The normal - font size is 0, and the two smaller sizes are -1 - and -2. - - @item @code{forceHorizontalShift}@indexcode{forceHorizontalShift} @* - Force horizontal shift for collision resolution. It overrides - automatic collision resolution. The value is the shift amount - expressed in @code{note_width}, as set in the paper section. - -@ignore - -TODO: explain this in refman. - -horizontalNoteShift does not set shifting itself. - -Notes that are likely to collide, are grouped into a Collision -object. Colliding notes within the collision are then grouped based -on their stem direction and horizontalNoteShift setting, like this: - - | - | | - 0u | | - 1u | - 2u - - - 2d - | 1d - | | 0d - | | - | - -(0,1,2, .. = horizontalNoteShift value. u,d = stem up / stem down) - -Only then the seperate groups are shifted horizontally. When -collision is done with this shifting, any forceHorizontalShift -settings will override the default shifts. - - -This scheme makes sense, because you only have to set -horizontalNoteShift once in each voice. (Otherwise you'd have to set -and unset it for each collision in a score.) -@end ignore - - - @item @code{horizontalNoteShift}@indexcode{horizontalNoteShift} @* - Enable LilyPond to shift notes horizontally if they collide with - other notes. This is useful when typesetting many voices on one - staff. The identifier @code{\shift}@keyindex{shift} is defined to - enable this. Traditionally, the outer chords (the upmost and - downmost voices), should have no @code{horizontalNoteShift}. - - @item @code{markScriptPadding}@indexcode{markScriptPadding} @* - Determines the extra space added between the mark and the closest - staff line or note. - - @item @code{markDirection}@indexcode{markDirection} @* - Determines if marks should be printed above or below the staff. - Set to @code{\up} to print marks above the staff; set to - @code{\down} to print marks below the staff. - - @item @code{midiInstrument}@indexcode{midiInstrument} @* - Sets the instrument for MIDI output. If this property is not set - then LilyPond will use the @code{instrument} property. This must - be set to one of the strings on the list of MIDI instruments that - appears in section @xref{midilist}. If you use a string which - is not listed, LilyPond will silently substitute piano. - - @item @code{oldTieBehavior}@indexcode{oldTieBehavior} @* - Set to 1 in order to get old tie behavior where ties would - connect unequal pitches. This property is deprecated, and its - use is not recommended. - - @item @code{restStyle}@indexcode{restStyle} @* - Change the layout of rests shorter than quarter notes. - Currently, the standard layout @code{""} and mensural notation - @code{"mensural"} are available. Mensural rests of duration - 32 or shorter are not available. - - @item @code{scriptHorizontal}@indexcode{scriptHorizontal} @* - Put scripts left or right of note heads. Support for this is - limited. Accidentals will collide with scripts. - - @item @code{slurVerticalDirection}@indexcode{slurVerticalDirection} @* - Set to @code{\free} for free choice of slur direction, set to - @code{\up} to force slurs up, set to @code{\down} to force slurs - down. The shorthands @code{\slurup}@keyindex{slurup}, - @code{\slurdown}@keyindex{slurdown}, and - @code{\slurboth}@keyindex{slurboth} are available. - - @item @code{slurDash}@indexcode{slurDash} @* - Set to 0 for normal slurs, 1 for dotted slurs, and a - larger value for dashed slurs. Identifiers - @code{\slurnormal}@keyindex{slurnormal} and - @code{\slurdotted}@keyindex{slurdotted} are predefined to set the - first two settings. - -@item @code{stemLength}@indexcode{stemLength} @* - Set length of stems. Unit is `@code{interline}/2', so - @code{stemLength} defaults to 7. - - @item @code{stemLeftBeamCount}@indexcode{stemLeftBeamCount} @* - Specify the number of beams to draw on the left side of the next - note. Overrides automatic beaming. The value is only used once, - and then it is erased. - - @item @code{stemRightBeamCount}@indexcode{stemRightBeamCount} @* - Specify the number of beams to draw on the right side of the next - note. Overrides automatic beaming. The value is only used once, - and then it is erased. - @item @code{tieVerticalDirection}@indexcode{tieVerticalDirection} @* - Set to @code{\free} for free choice of tie direction, set to - @code{\up} to force ties up, set to @code{\down} to force ties - down. - - @item @code{transposing}@indexcode{transposing} @* - Transpose the MIDI output. Set this property to the number of - half-steps to transpose by. - - - @item @code{textEmptyDimension}@indexcode{textEmptyDimension} @* - If set to 1 then text placed above or below the staff is - assumed to have zero width. - - @item @code{textStyle}@indexcode{textStyle} @* - Set the text style for superscripts and subscripts. See above - for list of text styles. - - @item @code{textScriptPadding}@indexcode{textScriptPadding} @* - Determines the extra space added between superscripted resp. - subscripted text and the closest staff line or note. - - @item @code{verticalDirection}@indexcode{verticalDirection} @* - Determines the direction of stems, subscripts, beams, slurs, and - ties. Set to @code{\down} to force them down, @code{\up} to force - them up, or @code{\free} to let LilyPond decide. This can be used - to distinguish between voices on the same staff. The - @code{\stemdown}@keyindex{stemdown}, @code{\stemup}@keyindex{stemup}, - and @code{\stemboth}@keyindex{stemboth} identifiers set this - property. - - - @item @code{tupletDirection}@indexcode{tupletDirection} @* - Determines the direction of triplets and other tuplets. Set to - @code{\down} to force them below the staff, @code{\up} to force - them above, or @code{\free} to let LilyPond decide. - - @item @code{tupletVisibility}@indexcode{tupletVisibility} @* - Determines whether tuplets of notes are labelled. Setting - to 0 shows nothing; setting to 1 shows a number; - setting to 2 shows a number and a bracket if there is no - beam; setting to 3 shows a number, and if there is no beam - it adds a bracket; setting to 4 shows both a number and a - bracket unconditionally. - -@end table - -@subsubheading Staff properties - -@cindex properties!Staff - -@table @samp - - @item @code{barNonAuto}@indexcode{barNonAuto} @* - If set to 1 then bar lines will not be printed - automatically; they must be explicitly created with @code{\bar} - keywords. Unlike with the @code{\cadenza} keyword, measures are - still counted. Bar generation will resume according to that - count if this property is set to zero. - - @item @code{barNumberDirection}@indexcode{barNumberDirection} @* - Set to @code{\up} or @code{\down} to put bar numbers above or below - the staff. - - @item @code{barNumberHangOnClef}@indexcode{barNumberHangOnClef} @* - Set to 1 to cause bar numbers to appear above or below the - clef instead of on the bar line. This property is deprecated. - Do not use. - - @item @code{barNumberScriptPadding}@indexcode{barNumberScriptPadding} @* - Sets extra space between the bar number and the bar it labels. - - @item @code{barSize}@indexcode{barSize} @* - Specify the height of the bar lines if it should be different - than the staff height. - - @item @code{barAtLineStart}@indexcode{barAtLineStart} @* - Set to 1 to produce a bar line after the clef at the start - of each line (but not at the beginning of the music). - - @item @code{clefStyle}@indexcode{clefStyle} @* - Determines how clefs are typeset. If set to @code{transparent}, - the clefs are not printed at all, if set to - @code{fullSizeChanges}, clef changes in the middle of a line are - typeset with a full size clef. By default, clef changes are - typeset in smaller size. - - @item @code{createKeyOnClefChange}@indexcode{createKeyOnClefChange} @* - Set to a nonempty string if you want key signatures to be printed - when the clef changes. Set to the empty string if you do not - want key signatures printed. - - @item @code{createInitdefaultClef}@indexcode{createInitdefaultClef} @* - Specify whether clefs are created on default? (Doesn't seem to - do anything.) - - @item @code{defaultClef}@indexcode{defaultClef} @* - Determines the default clef. See @code{\clef} keyword. - - @item @code{markHangOnClef}@indexcode{markHangOnClef} @* - Set to 1 to cause marks to appear by clefs instead of by bar - lines. Deprecated, use is not recommended. - - @item @code{marginDirection}@indexcode{marginDirection} @* - Set to @code{\left} or @code{\right} to specify location of - marginal scripts. - - @item @code{marginScriptPadding}@indexcode{marginScriptPadding} @* - Specify extra space for marginal scripts. - - @item @code{forgetAccidentals}@indexcode{forgetAccidentals} @* - Causes accidentals to be printed at every note instead of - remembered for the duration of a measure. - - @item @code{noResetKey}@indexcode{noResetKey} @* - Do not reset the key at the start of a measure. Accidentals will - be printed only once and are in effect until overridden, possibly - many measures later. - - @item @code{staffLineLeading}@indexcode{staffLineLeading} @* - Specifies the distance (in points) between lines of the staff. - - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} @* - Specifies the number of staff lines. The default is 5. - - @item @code{postBreakPadding}@indexcode{postBreakPadding} @* - Extra space in points to be added after the clef, time signature - and key signature on the staff. Deprecated, do not use. - - @item @code{noVoltaBraces}@indexcode{noVoltaBraces} @* - Set to true to suppress the printing of brackets over alternate - endings specified by the command @code{\alternative}. - - @item @code{numberOfStaffLines}@indexcode{numberOfStaffLines} @* - Sets the number of lines that the staff has. - - @item @code{barAlways}@indexcode{barAlways} @* - If set to 1 a bar line is drawn after each note. - - @item @code{defaultBarType}@indexcode{defaultBarType} @* - Sets the default type of bar line. See Section @xref{barlines} - for a list of available bar types. - - @item @code{instrument}, @code{instr} - @indexcode{instrument}@indexcode{instr} @* - If @code{Staff_margin_engraver} -@cindex Staff_margin_engraver - is - added to the Staff translator, then the @code{instrument} property - is used to label the first line of the staff and the @code{instr} - property is used to label subsequent lines. If the - @code{midiInstrument} property is not set, then @code{instrument} - is used to determine the instrument for MIDI output. - - @item @code{keyOctaviation}@indexcode{keyOctaviation} @* - If set to 1, then keys are the same in all octaves. If set - to 0 then the key signature for different octaves can be - different and is specified independently: - - @quotation - - @code{\keysignature bes fis'} - @end quotation - - The default value is 1. Can be set to zero with - @code{\specialkey} or reset to 1 with @code{\normalkey}. - - @item @code{timeSignatureStyle}@indexcode{timeSignatureStyle} @* - Changes the default two-digit layout for time signatures. The - following values are recognized: - - @table @samp - @item @code{C}@indexcode{C} @* - 4/4 and 2/2 are typeset as C and struck C, respectively. All - other time signatures are written with two digits. - - @item @code{old}@indexcode{old} @* - 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and 9/8 are - typeset with old-style mensuration marks. All other time - signatures are written with two digits. - - @item @code{1}@indexcode{1} @* - All time signatures are typeset with a single - digit, e.g. 3/2 is written as 3. - - @item @indexcode{CM/N}@code{C}@var{M}@code{/}@var{N}, - @indexcode{oldM/N}@code{old}@var{M}@code{/}@var{N} or - @code{old6/8alt}@indexcode{old6/8alt} @* - Tells LilyPond to use a specific symbol as time signature. - @end table - - The different time signature characters are shown below with its - names: - - @mudela[center] - - \score { - \notes\relative c'' { - \property Voice.textStyle = typewriter - \property Staff.timeSignatureStyle = "C2/2" - \time 2/2; a2^"C2/2" a2 - \property Staff.timeSignatureStyle = "C4/4" - \time 2/2; a2^"C4/4" a2 - \property Staff.timeSignatureStyle = "old2/2" - \time 2/2; a2^"old2/2" a2 - \property Staff.timeSignatureStyle = "old3/2" - \time 2/2; a2^"old3/2" a2 - \property Staff.timeSignatureStyle = "old2/4" - \time 2/2; a2^"old2/4" a2 - \property Staff.timeSignatureStyle = "old4/4" - \time 2/2; a2^"old4/4" a2 - \property Staff.timeSignatureStyle = "old6/4" - \time 2/2; a2^"old6/4" a2 - \property Staff.timeSignatureStyle = "old9/4" - \time 2/2; a2^"old9/4" a2 - \property Staff.timeSignatureStyle = "old4/8" - \time 2/2; a2^"old4/8" a2 - \property Staff.timeSignatureStyle = "old6/8" - \time 2/2; a2^"old6/8" a2 - \property Staff.timeSignatureStyle = "old6/8alt" - \time 2/2; a2^"old6/8alt" a2 - \property Staff.timeSignatureStyle = "old9/8" - \time 2/2; a2^"old9/8" a2 - } - \paper { - linewidth = 4.5 \in; - } - } - -@end mudela - - @item @code{voltaSpannerDuration}@indexcode{voltaSpannerDuration} @* - Set to an integer to control the size of the brackets printed by - @code{\alternative}. The integer specifies the number of whole - notes duration to use for the brackets. It is rounded to the - nearest measure. This can be used to shrink the length of - brackets in the situation where one alternative is very large. - It may have odd effects if the specified duration is longer than - the music given in an @code{\alternative}. -@end table - - -@cindex properties!GrandStaff - -@table @samp - @item @code{alignmentReference}@indexcode{alignmentReference} @* - Set to @code{\center} for vertical alignment reference point to be - in the center of the vertical group. Set to @code{\up} to put the - reference point at the top of the group. - - @item @code{maxVerticalAlign}@indexcode{maxVerticalAlign} @* - Set the maximum vertical distance between staffs. - - @item @code{minVerticalAlign}@indexcode{minVerticalAlign} @* - Set the minimum vertical distance between staffs. -@end table - - -@cindex properties!Score - -@table @samp - @item @code{skipBars}@indexcode{skipBars} @* - Set to 1 to skip the empty bars that are produced by - multimeasure notes and rests. These bars will not appear on the - printed output. Set to zero (the default) to expand multimeasure - notes and rests into their full length, printing the appropriate - number of empty bars so that synchronization with other voices is - preserved. - - @quotation - -@mudela[fragment,verbatim,center] -r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3 - -@end mudela - @end quotation - -@end table - - -@cindex properties!ChordNamesVoice - -@table @samp - @item @code{chordInversion}@indexcode{chordInversion} @* - Determines whether LilyPond should look for chord inversions when - translating from notes to chord names. Set to 1 to find - inversions. The default is 0 which does not look for - inversions. -@end table - - - -@node Notation output definitions, output, contextselection, LilyPond 1-2-0 Reference Manual -@section Notation output definitions - -@cindex output - -@cindex notation output - -@cindex output definition - -@node output, paper, Notation output definitions, LilyPond 1-2-0 Reference Manual - -@node paper, papervars, output, LilyPond 1-2-0 Reference Manual - -The most important output definition is the @code{\paper} block, for -music notation. The syntax is - -@quotation - - @code{\paper @{} [@var{paperidentifier}] @var{items} @code{@}} -@end quotation - -where each of the items is one of - -@itemize @bullet - @item An assignment. The assignment must be terminated by a - semicolon. See section @xref{papervars} for information on - paper variables. - - @item A context definition. See section @xref{contextdefs} for - more information on context definitions. - - @item A margin shape declaration. The syntax is - - @quotation - - @code{\shape} @var{indent1}@code{,} @var{width1}@code{,} - @var{indent2}@code{,} @var{width2} ... @code{;} - @end quotation - - @keyindex{shape} - - Each pair of @var{indent} and @var{width} values is a dimension - specifying how far to indent and how wide to make the line. - The indentation and width of successive lines are specified by - the successive pairs of dimensions. The last pair of - dimensions will define the characeristics of all lines beyond - those explicitly specified. - - @item A font declaration. Its syntax is - - @quotation - - @var{fontsize} @code{=} @code{\font}@keyindex{font} @var{fontname} - @end quotation - - @var{fontsize} is an integer describing the font to be used. - 0 is the default font. @var{fontname} is the basename of - a font (usually a member of the Feta family). -@end itemize - - - -@cindex changing font size and paper size - -The Feta font provides musical symbols at six different sizes. These -fonts are 11 point, 13 point, 16 point, 20 point, -23 point, and 26 point. The point size of a font is the -height of the five lines in a staff when displayed in the font. - -Definitions for these sizes are the files @file{paperSZ.ly}, where -@code{SZ} is one of 11, 13, 16, 20, 23 and 26. If you include -any of these files, the identifiers @code{paper_eleven}, -@code{paper_thirteen}, @code{paper_sixteen}, @code{paper_twenty}, -@code{paper_twentythree}, and @code{paper_twentysix} are defined -respectively. The default @code{\paper} block is also set. - -To change the paper size, you must first set the -@code{papersize}@indexcode{papersize} variable at top level. Set it to the strings -@code{a4}, @code{letter}, or @code{legal}. After this specification, -you must set the font as described above. If you want the default -font, then use the 20 point font. The new paper size will not -take effect if the font is not loaded and selected afterwards. Paper -size selection works by loading a file named after the paper size you -select. - - - -@cindex paper variables - -@node papervars, contextdefs, paper, LilyPond 1-2-0 Reference Manual - -There is a large number of paper variables that are used to control -details of the layout. These variables control the defaults for the -entire score. Usually, they do not have to be changed; they are by -default set to values that depend on the font size in use. The -values are used by the graphic objects while formatting the score; -they are therefore implementation dependent. Most variables are -accompanied by documentation in the initalization file -@file{params.ly} or @file{paperSZ.ly}, where @code{SZ} is the staff -height in points. - -Nevertheless, here are some variables you may want to use or change: - -@table @samp - @item @code{indent}@indexcode{indent} @* - The indentation of the first line of music. - - @item @code{interline}@indexcode{interline} @* - The distance between two staff lines, calculated from the center - of the lines. You should use either this or @code{rulethickness} - as a unit for distances you modify. - - @item @code{linewidth}@indexcode{linewidth} @* - Sets the width of the lines. If set to -1.0, a single - unjustified line is produced. - - @item @code{output}@indexcode{output} @* - Specifies an alternate name for the the output @file{s}. - A @file{.tex}, @file{.midi} or @file{.ps} extension will be - added to the string you specify. - - @item @code{rulethickness}@indexcode{rulethickness} @* - Determines the thickness of staff and bar lines. - - @item @code{castingalgorithm}@indexcode{castingalgorithm} @* - The algorithm to use for breaking lines. Choices are - @code{\Gourlay}@keyindex{Gourlay} for a TeX-like dynamic - programming algorithm, and @code{\Wordwrap}@keyindex{Wordwrap} for - a simple algorithm. Gourlay breaking looks much better, but - takes a lot more resources. Wordwrap leaves loosely spaced lines - at the end. -@end table - - -@node contextdefs, engravers, papervars, LilyPond 1-2-0 Reference Manual - -@cindex context definition - -A notation contexts is defined by the following information - -@enumerate i - @item A name. - - @item The LilyPond modules that do the actual conversion of music to - notation. Each module is a so-called - @emph{engraver} -@cindex engraver -. - - @item How these modules should cooperate, i.e. which ``cooperation - module'' should be used. This cooperation module is a special - type of engraver. - - @item What other contexts the context can contain, - - @item What properties are defined. -@end enumerate - -A context definition has this syntax: - -@quotation - - @code{\translator} @code{@{} - @var{translatorinit} @var{translatormodifierlist} - @code{@}} -@end quotation - -@var{translatorinit} can be an identifier or of the form - -@quotation - - @code{\type} @var{typename} @code{;} -@end quotation - -@var{typename} is one of - -@table @samp - @item @code{Engraver_group_engraver}@indexcode{Engraver_group_engraver} @* - The standard cooperation engraver. - - @item @code{Score_engraver}@indexcode{Score_engraver} @* - This is cooperation module that should be in the top level context. - - @item @code{Grace_engraver_group}@indexcode{Grace_engraver_group} @* - This is a special cooperation module (resembling - @code{Score_engraver}) that is used to created an embedded - `miniscore'. -@end table - -@var{translatormodifierlist} is a list of items where each item is -one of - -@itemize @bullet - @item @code{\consists} @var{engravername} @code{;} @* - Add @var{engravername} to the list of modules in this context. - Section @xref{engravers} contains an overview of the engravers - available. The order of engravers added with @code{\consists} is - significant. - - @item @code{\consistsend} @var{engravername} @code{;} @* - Analogous to @code{\consists}, but makes sure that - @var{engravername} is always added to the end of the list of - engravers. - - Some engraver types need to be at the end of the list; this - insures they are put there, and stay there, if a user adds or - removes engravers. This command is usually not needed for - end-users. - - @item @code{\accepts} @var{contextname} @code{;} @* - Add @var{contextname} to the list of context this context can - contain. The first listed context the context to create by - default. - - @item @code{\remove} @var{engravername} @code{;} @* - Remove a previously added (with @code{\consists}) engraver. - - @item @code{\name} @var{contextname} @code{;} @* - This sets name of the context, e.g. @code{Staff}, @code{Voice}. If - the name is not specified, the translator won't do anything. - - @item @var{propname} @code{=} @var{value} @code{;} @* - A property assignment. It is allowed to use reals for - @var{value}. -@end itemize - -In the @code{\paper} block, it is also possible to define translator -identifiers. Like other block identifiers, the identifier can only -be used as the very first item of a translator. In order to define -such an identifier outside of @code{\score}, you must do - -@quotation - -@example -\paper @{ - foo = \translator @{ ... @} -@} -\score @{ - \notes @{ - ... - @} - \paper @{ - \translator @{ \foo ... @} - @} -@} -@end example - -@end quotation - - -@cindex paper types, engravers, and pre-defined translators - -Some pre-defined identifiers can simplify modification of -translators. The pre-defined identifiers are: - -@table @samp - @item @code{StaffContext}@indexcode{StaffContext} @* - Default Staff context. - - @item @code{RhythmicStaffContext}@indexcode{RhythmicStaffContext} @* - Default RhythmicStaff context. - - @item @code{VoiceContext}@indexcode{VoiceContext} @* - Default Voice context. - - @item @code{ScoreContext}@indexcode{ScoreContext} @* - Default Score context. - - @item @code{ScoreWithNumbers}@indexcode{ScoreWithNumbers} @* - Score context with numbering at the Score level. - - @item @code{BarNumberingStaffContext}@indexcode{BarNumberingStaffContext} @* - Staff context with numbering at the Staff level. - - @item @code{HaraKiriStaffContext}@indexcode{HaraKiriStaffContext} @* - Staff context that does not print if it only contains rests. - Useful for orchestral scores.@footnote{Harakiri, also called - Seppuku, is the ritual suicide of the Samourai.} - - @item @code{OrchestralPartStaffContext}@indexcode{OrchestralPartStaffContext} - - @item @code{OrchestralScoreContext}@indexcode{OrchestralScoreContext} -@end table - -Using these pre-defined values, you can remove or add items to the -translator: - -@quotation - -@example -\paper @{ - \translator @{ - \StaffContext - \remove Some_engraver; - \consists Different_engraver; - @} -@} -@end example - -@end quotation - - - -@node engravers, Sound output, contextdefs, LilyPond 1-2-0 Reference Manual - -The engravers for paper output are: - -[incomplete, FIXME] - -@table @samp - @item @code{Bar_engraver}@indexcode{Bar_engraver} @* - Engraves bar lines. Normally in @code{Staff} and - @code{RhythmicStaff}. - - @item @code{Bar_number_engraver}@indexcode{Bar_number_engraver} @* - Engrave bar numbers. These numbers appear at the start of each - line. Not normally in any translator. Can be added to - @code{Score} for score-wide numbering or to @code{Staff} for - numbering on each staff. - - @item @code{Beam_engraver}@indexcode{Beam_engraver} @* - Handles beam requests by engraving beams. Normally appears in - the @code{Voice} translator. If omitted, then notes will be - printed with flags instead of beams. - - @item @code{Beam_req_swallow_translator} - @indexcode{Beam_req_swallow_translator} @* - Swallows beam requests. In @code{LyricVoice}. - - @item @code{Chord_name_engraver}@indexcode{Chord_name_engraver} @* - Engraves chord names. Normally in @code{ChordNameVoice} . - - @item @code{Chord_tremolo_engraver}@indexcode{Chord_tremolo_engraver} - - @item @code{Clef_engraver}@indexcode{Clef_engraver} @* - Engraves the clef symbol. Normally in @code{Staff}. - - @item @code{Collision_engraver}@indexcode{Collision_engraver} - - @item @code{Dot_column_engraver}@indexcode{Dot_column_engraver} @* - Engraves dots on dotted notes shifted to the right of the note. - Normally in @code{Voice}. If omitted, then dots appear on top of - the notes. - - @item @code{Dynamic_engraver}@indexcode{Dynamic_engraver} @* - Engraves dynamics symbols. Normally in @code{Voice}. - - @item @code{Font_size_engraver}@indexcode{Font_size_engraver} - - @item @code{Key_engraver}@indexcode{Key_engraver} @* - Engraves the key signature. Normally in @code{Staff}. - - @item @code{Local_key_engraver}@indexcode{Local_key_engraver} - - @item @code{Lyric_engraver}@indexcode{Lyric_engraver} @* - Engraves lyrics. Normally in @code{LyricVoice}. - - @item @code{Multi_measure_rest_engraver} - @indexcode{Multi_measure_rest_engraver} @* - Engraves multi-measure rests that are produced with @code{R}. - Normally in @code{Voice}. - - @item @code{Piano_bar_engraver}@indexcode{Piano_bar_engraver} - - @item @code{Pitch_squash_engraver}@indexcode{Pitch_squash_engraver} @* - Treat all pitches as middle C. Used in @code{RhythmicStaff}. - Note that the notes move, but the locations of accidentals stay - the same. - - @item @code{Priority_horizontal_align_engraver} - @indexcode{Priority_horizontal_align_engraver} - - @item @code{Repeat_engraver}@indexcode{Repeat_engraver} @* - Handles repeats? In @code{Staff} and @code{RhythmicStaff}. - - @item @code{Rest_collision_engraver}@indexcode{Rest_collision_engraver} @* - Handles collisions of rests. In @code{Staff}. - - @item @code{Rest_engraver}@indexcode{Rest_engraver} @* - Engraves rests. Normally in @code{Voice}. - - @item @code{Rhythmic_column_engraver}@indexcode{Rhythmic_column_engraver} - - @item @code{Score_priority_engraver}@indexcode{Score_priority_engraver} - - @item @code{Script_engraver}@indexcode{Script_engraver} @* - Handles note ornaments generated by @code{\script}. Normally in - @code{Voice}. - - @item @code{Separating_line_group_engraver} - @indexcode{Separating_line_group_engraver} - - @item @code{Skip_req_swallow_translator} - @indexcode{Skip_req_swallow_translator} - - @item @code{Slur_engraver}@indexcode{Slur_engraver} @* - Engraves slurs. Normally in @code{Voice}. - - @item @code{Span_bar_engraver}@indexcode{Span_bar_engraver} @* - Engraves lines across multiple staffs. Normally in - @code{Staffgroup} and @code{GrandStaff}. Removing this from - @code{StaffGroup} gives the definition of @code{ChoirStaff}. - - @item @code{Span_score_bar_engraver}@indexcode{Span_score_bar_engraver} - - @item @code{Staff_group_bar_engraver}@indexcode{Staff_group_bar_engraver} - - @item @code{Staff_margin_engraver}@indexcode{Staff_margin_engraver} @* - Prints the name of the instrument (specified by - @code{Staff.instrument} and @code{Staff.instr}) at the left of the - staff. - - @item @code{Staff_sym_engraver}@indexcode{Staff_sym_engraver} - - @item @code{Stem_engraver}@indexcode{Stem_engraver} @* - Engraves stems. Normally in @code{Voice}. - - @item @code{Ties_engraver}@indexcode{Ties_engraver} @* - Engraves ties. Normally in @code{Voice}. - - @item @code{Time_signature_engraver}@indexcode{Time_signature_engraver} @* - Engraves the time signature. Normally in @code{Staff} and - @code{RhythmicStaff}. - - @item @code{Timing_engraver}@indexcode{Timing_engraver} @* - Responsible for synchronizing timing information from staffs. - Normally in @code{Score}. In order to create polyrhythmic music, - this engraver should be removed from @code{Score} and placed in - @code{Staff}. - - @item @code{Tuplet_engraver}@indexcode{Tuplet_engraver} @* - Engraves tuplet brackets? In @code{Staff}. - - @item @code{Vertical_align_engraver}@indexcode{Vertical_align_engraver} -@end table - - - -@node Sound output, midilist, engravers, LilyPond 1-2-0 Reference Manual -@section Sound output - - - -The MIDI block is analogous to the paper block, but it is simpler. -The @code{\midi} block can contain: -@cindex MIDI block - -@itemize @bullet - @item a @code{\tempo} definition - @item context definitions -@end itemize - -Assignments in the @code{\midi} block are not allowed. - - - -@cindex context definition - -Context definitions follow precisely the same syntax as within the -\paper block. Translation modules for sound are called performers. -The contexts for MIDI output are defined in @file{ly/performer.ly}. - - - -@cindex MIDI instrument names - -@node midilist, Pre-defined Identifiers, Sound output, LilyPond 1-2-0 Reference Manual - -The MIDI instrument name is set by the -@code{Staff.midiInstrument}@indexcode{Staff.midiInstrument} property or, if that property is -not set, the @code{Staff.instrument}@indexcode{Staff.instrument} property. The instrument -name should be chosen from the following list. If the selected -string does not exactly match, then LilyPond uses the default piano. - - -@quotation - -@example -"acoustic grand" "contrabass" "lead 7 (fifths)" -"bright acoustic" "tremolo strings" "lead 8 (bass+lead)" -"electric grand" "pizzicato strings" "pad 1 (new age)" -"honky-tonk" "orchestral strings" "pad 2 (warm)" -"electric piano 1" "timpani" "pad 3 (polysynth)" -"electric piano 2" "string ensemble 1" "pad 4 (choir)" -"harpsichord" "string ensemble 2" "pad 5 (bowed)" -"clav" "synthstrings 1" "pad 6 (metallic)" -"celesta" "synthstrings 2" "pad 7 (halo)" -"glockenspiel" "choir aahs" "pad 8 (sweep)" -"music box" "voice oohs" "fx 1 (rain)" -"vibraphone" "synth voice" "fx 2 (soundtrack)" -"marimba" "orchestra hit" "fx 3 (crystal)" -"xylophone" "trumpet" "fx 4 (atmosphere)" -"tubular bells" "trombone" "fx 5 (brightness)" -"dulcimer" "tuba" "fx 6 (goblins)" -"drawbar organ" "muted trumpet" "fx 7 (echoes)" -"percussive organ" "french horn" "fx 8 (sci-fi)" -"rock organ" "brass section" "sitar" -"church organ" "synthbrass 1" "banjo" -"reed organ" "synthbrass 2" "shamisen" -"accordion" "soprano sax" "koto" -"harmonica" "alto sax" "kalimba" -"concertina" "tenor sax" "bagpipe" -"acoustic guitar (nylon)" "baritone sax" "fiddle" -"acoustic guitar (steel)" "oboe" "shanai" -"electric guitar (jazz)" "english horn" "tinkle bell" -"electric guitar (clean)" "bassoon" "agogo" -"electric guitar (muted)" "clarinet" "steel drums" -"overdriven guitar" "piccolo" "woodblock" -"distorted guitar" "flute" "taiko drum" -"guitar harmonics" "recorder" "melodic tom" -"acoustic bass" "pan flute" "synth drum" -"electric bass (finger)" "blown bottle" "reverse cymbal" -"electric bass (pick)" "skakuhachi" "guitar fret noise" -"fretless bass" "whistle" "breath noise" -"slap bass 1" "ocarina" "seashore" -"slap bass 2" "lead 1 (square)" "bird tweet" -"synth bass 1" "lead 2 (sawtooth)" "telephone ring" -"synth bass 2" "lead 3 (calliope)" "helicopter" -"violin" "lead 4 (chiff)" "applause" -"viola" "lead 5 (charang)" "gunshot" -"cello" "lead 6 (voice)" -@end example - -@end quotation - - -@cindex MIDI types and performers - -The types available for MIDI translators are: - -@table @samp - @item @code{Performer_group_performer}@indexcode{Performer_group_performer} - @item @code{Score_performer}@indexcode{Score_performer} - @item @code{Staff_performer}@indexcode{Staff_performer} -@end table - -The performers for MIDI translators are: - -@table @samp - @item @code{Key_performer}@indexcode{Key_performer} - @item @code{Time_signature_performer}@indexcode{Time_signature_performer} - @item @code{Note_performer}@indexcode{Note_performer} - @item @code{Lyric_performer}@indexcode{Lyric_performer} - @item @code{Swallow_performer}@indexcode{Swallow_performer} -@end table - - - -@node Pre-defined Identifiers, ident, midilist, LilyPond 1-2-0 Reference Manual -@section Pre-defined Identifiers - -@cindex pre-defined identifiers - -@node ident, Running LilyPond, Pre-defined Identifiers, LilyPond 1-2-0 Reference Manual - -Various identifiers are defined in the initialization files to -provide shorthands for some settings. Most of them are in -@file{ly/declarations.ly}. - -@table @samp - @item @code{\break}@keyindex{break} @* - Force a line break in music by using a large argument for the - keyword @code{\penalty}. - - @item @code{\center}@keyindex{center} @* - Used for setting direction properties. Equals 0. - - @item @code{\down}@keyindex{down} @* - Used for setting direction setting properties. Is equal - to -1. - - @item @code{\free}@keyindex{free} @* - Used for setting direction setting properties. Is equal - to 0. - - @item @code{\left}@keyindex{left} @* - Used for setting text alignment property. Is equal to -1. - - @item @code{\nobreak}@keyindex{nobreak} @* - Prevent a line break in music by using a large negative argument - for the keyword @code{\penalty}. - - @item @code{\none}@keyindex{none} @* - Used for setting @code{Score.beamslopedamping} and - @code{Score.beamquantisation} properties. Is equal to 0. - - @item @code{\normal}@keyindex{normal} @* - Used for setting @code{Score.beamslopedamping} and - @code{Score.beamquantisation} properties. Is equal to 1. - - @item @code{\normalkey}@keyindex{normalkey} @* - Select normal key signatures where each octave has the same key - signature. This sets the @code{Staff.keyoctaviation} property. - - @item @code{\right}@keyindex{right} @* - Used for setting text alignment property. Is set to 1. - - @item @code{\shiftoff}@keyindex{shiftoff} @* - Disable horizontal shifting of note heads that collide. Sets the - @code{Voice.horizontalNoteShift} property. - - @item @code{\shifton}@keyindex{shifton} @* - Enable note heads that collide with other note heads to be - shifted horiztonally. Sets the @code{Voice.horizontalNoteShift} - property. - - @item @code{\slurboth}@keyindex{slurboth} @* - Allow slurs to be above or below notes. This sets the - @code{Voice.slurVerticalDirection} property. - - @item @code{\slurdown}@keyindex{slurdown} @* - Force slurs to be below notes. This sets the - @code{Voice.slurVerticalDirection} property. - - @item @code{\slurup}@keyindex{slurup} @* - Force slurs to be above notes. This sets the - @code{Voice.slurVerticalDirection} property. - - @item @code{\specialkey}@keyindex{specialkey} @* - Allow key signatures do differ in different octaves. This sets - the @code{Staff.keyoctaviation} property. - - @item @code{\stemboth}@keyindex{stemboth} @* - Allow stems, beams, and slurs to point either upwards or - downwards, decided automatically by LilyPond. This sets the - @code{Voice.verticalDirection} property. - - @item @code{\stemdown}@keyindex{stemdown} @* - Force stems, beams, and slurs to point down. This sets the - @code{Voice.verticalDirection} property. - - @item @code{\stemup}@keyindex{stemup} @* - Force stems, beams and slurs to point up. This sets the - @code{Voice.verticalDirection} property. - - @item @code{\traditional}@keyindex{traditional} @* - Used for setting the @code{Score.beamquantisation} property. Is - equal to 2. - - @item @code{\up}@keyindex{up} @* - Used for setting various direction properties. Is equal - to 1. -@end table - - - -@node Running LilyPond, Top, ident, LilyPond 1-2-0 Reference Manual -@section Running LilyPond - -@cindex running LilyPond - - -When invoked with a filename that has no extension, LilyPond will try -adding `@file{.ly}' as an extension first, then `@file{.fly}' and -finally `@file{.sly}' extension. If the filename ends with -`@file{.fly}', LilyPond processes the file as music using -`@file{init.fly}'. In this case, LilyPond does something like: - -@quotation - -@example -\score @{ - \notes\relative c @{ - \input "yourfile.fly" - @} - \paper@{@} - \midi@{@} -@} -@end example - -@end quotation - -The result of `@file{.sly}' is similar except that a single unjustified -line is produced. - -If you invoke LilyPond with a file `@file{foo.}@var{ext}' that doesn't -have the `@file{.ly}' extension, then LilyPond will look for a file -called `@file{init.}@var{ext}' and process this file. The file -`@file{init.}@var{ext}' must contain the @code{\maininput} keyword or -LilyPond will not read the user specified file. - -When LilyPond processes @file{filename.ly} it will produce -@file{filename.tex} as output. If @file{filename.ly} contains a second -@code{\paper} keyword, then LilyPond will produce @file{filename-1.tex} -as well. Subsequent @code{\paper} keywords will produce sequentially -numbered file names. Several files can be specified; they will each -be processed independently.@footnote{Not entirely true: The status of -GUILE is kept.} - - - -@bye diff --git a/Documentation/tex/regression-test.tely b/Documentation/tex/regression-test.tely deleted file mode 100644 index 6a0443e728..0000000000 --- a/Documentation/tex/regression-test.tely +++ /dev/null @@ -1,302 +0,0 @@ -\input texinfo @c -*-texinfo-*- vim:tw=72 -@setfilename regression-test.info -@settitle LilyPond Regression test - -@c fool ls-latex -@ignore -@author Han-Wen Nienhuys and Jan Nieuwenhuizen -@title LilyPond Regression test -@end ignore - -@node Top, , , - -@section Introduction - -This document tries give an brief overview of LilyPond features. When -the text correspond with the shown notation, we consider LilyPond -Officially BugFree (tm). This document is intended for finding bugs, -and documenting bugfixes. - -@section Notes and rests - -Rests. Note that the dot of 8th, 16th and 32nd rests rest should be -next to the top of the rest. All rests except the whole rest are -centered on the middle staff line. - -@mudelafile{rest.fly} - -Note head shapes are settable. The stem endings should be adjusted -per note head. If you want different note head styles on one stem, -you must create a special context called Thread. - -@mudelafile{noteheadstyle.ly} - -Noteheads can have dots, and ---although this is bad style in duple -meters--- rests can too. Augmentation dots should never be printed on -a staff line, but rather be shifted vertically. They should go up, but -in case of multiple parts, the down stems have down shifted dots. -(Wanske p. 186) In case of chords, all dots should be in a column. -The dots go along as rests are shifted to avoid collisions. - -@mudelafile{dots.fly} - -Multiple measure rests do not collide with barlines and clefs. They -are not expanded when you set \verb+Score.SkipBars+. Although the -multi-measure-rest is a Spanner, minimum distances are set to keep it -colliding from barlines. - -@mudelafile{multi-measure-rest.ly} - -@section Stems - -Stem tremolos (official naming?) or rolls are tremolo signs that look -like beam segments crossing stems. If the stem is in a beam, the -tremolo must be parallel to the beam. If the stem is invisible -(eg. on a whole note), the tremolo must be centered on the note. - -@mudelafile{stem-tremolo.ly} - -Chord tremolos look like beams, but are a kind of repeat symbol. -To avoid confusion, chord tremolo beams do not reach the stems, but -leave a gap. Chord tremolo beams on half notes are not ambiguous, -as half notes cannot appear in a regular beam, and should reach the -stems. - -@mudelafile{chord-tremolo.sly} - -Beams, stems and noteheads often have communication troubles, since -the two systems for y dimensions (1 unit = staffspace, 1 unit = 1 -point) are mixed. - -Stems, beams, ties and slurs should behave similarly, when placed -on the middle staff line. Of course stem-direction is down for high -notes, and up for low notes. - -@mudelafile{stem-direction.sly} - -Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+. - -@mudelafile{stem-direction-down.ly} - -@section Scripts - -The staccato dot (and all scripts with follow-into-staff set), must -not be on staff lines. - -@mudelafile{staccato-pos.sly} - -@section Grace notes - -Grace notes are typeset as an encapsulated piece of music. You can -have beams, notes, chords, stems etc. within a \verb|\grace| section. -Slurs that start within a grace section, but aren't ended are attached -to the next normal note. Grace notes have zero duration. If there -are tuplets, the grace notes won't be under the brace. Grace notes -can have accidentals, but they are (currently) spaced at a fixed -distance. Grace notes (of course) come before the accidentals of the -main note. Grace notes can also be positioned after the main note. - -@mudelafile{grace.ly} - - -@section Beams, slurs and other spanners - -Beaming is generated automatically. Beams may cross bar lines. In that -case, line breaks are forbidden. Yet clef and key signatures are -hidden just as with breakable bar lines. - -@mudelafile{beaming.ly} - -Beams should behave reasonably well, even under extreme circumstances. -Stems may be short, but noteheads should never touch the beam. - -@mudelafile{beam-extreme.ly} - -Beams should always reach the middle staff line, the second beam -counting from the note head side, should never be lower than the -second staff line. This does not hold for grace note beams. - -@mudelafile{beam-position.sly} - -Slurs should look nice and symmetric. The curvature may increase -only to avoid noteheads, and as little as possible. - -@mudelafile{slur-symmetry.ly} -@mudelafile{slur-symmetry-1.ly} - -Ties are strictly horizontal. They are placed in between note heads. -The horizontal middle should not overlap with a staffline. - -@mudelafile{tie.ly} - -Beams can be typeset over fixed distance aligned staffs, beam -beautification doesn't really work, but knees do. Beams should be -behave well, wherever the switching point is. - -@mudelafile{beam-interstaff.ly} - -The same goes for slurs. They behave decently when broken across -linebreak. - -@mudelafile{slur-interstaff.ly} - -Tuplets are indicated by a bracket with a number. There should be no -bracket if there is one beam that matches the length of the tuplet. -The bracket does not interfere with the stafflines, and the number is -centered in the gap in the bracket. - -@mudelafile{tup.ly} - -@section Repeats - -LilyPond has three modes for repeats: folded, unfolded and -semi-unfolded. Unfolded repeats are fully written out. Semi unfolded -repeats have the body written and all alternatives sequentially. -Folded repeats have the body written and all alternatives -simultaneously. If the number of alternatives is larger than the -repeat count, the excess alternatives are ignored. If the number of -alternatives is smaller, the first alternative is multiplied to get to -the number of repeats. - -Unfolded behavior: - -@mudelafile{repeat-unfold.ly} - -Semi (un)folded behavior. Voltas can start on non-barline moments. -If they don't barlines should still be shown. - -@mudelafile{repeat-semifold.ly} - -Folded. This doesn't make sense without alternatives, but it works. - -@mudelafile{repeat-fold.ly} - -@section Lyrics - -Lyrics can be set to a melody automatically. Excess lyrics will be -dumped. Lyrics will not be set over rests. You can have melismata -either by setting a property melismaBusy, or by setting -automaticMelismas (which will set melismas during slurs and ties). If -you want a different order than first Music, then Lyrics, you must -precook a chord of staffs/lyrics and label those. Of course -@code{\rhythm} ignores any other rhythms in the piece. Hyphens and -extenders do not assume anything about lyric lengths, so they continue -to work. - -@mudelafile{lyric-combine.ly} - -@section Multiple notes - -Rests should not collide with beams, stems and noteheads. Rests may -be under beams. Rests should be move by integral number of spaces -inside the staff, and by half spaces outside. Notice that the half -and whole rests just outside the staff get ledger lines in different -cases. - -@mudelafile{rest-collision.ly} - -Normal collisions. We have support for polyphony, where the -middle voices are horizontally shifted. - -@mudelafile{collisions.ly} - -The number of stafflines of a staff can be set with the property -numberOfStaffLines. Ledger lines both on note heads and rests are -adjusted. Barlines also are adjusted. - - -@mudelafile{number-staff-lines.fly} - -@section Spacing - -In a limited number of cases, LilyPond corrects for optical spacing -effects. In this example, space for opposite pointed stems is adjusted - -@mudelafile{stem-spacing.sly} - -If there are accidentals in the music, we add space, but the space -between note and accidentals is less than between the notes with the -same value. Clef changes also get extra space, but not as much as -barlines. - - -Even if a line is very tightly spaced, there will still be room -between prefatory matter and the following notes. The space after the -prefatory is very rigid. In contrast, the space before the barline -must stretch like the space within the measure. - -Tight: - -@mudelafile{spacing-tight.ly} - -Natural: - -@mudelafile{spacing-natural.ly} - -Loose: - -@mudelafile{spacing-loose.ly} - - -@section Global stuff - -Markings that are attached to (invisible) barlines are -delicate: the are attached to the rest of the score without the score -knowing it. Consequently, they fall over often. - -@mudelafile{bar-scripts.ly} - -Staff margins are also markings attached to barlines. They should be -left of the staff, and be centered vertically wrt the staff. They may -be on normal staffs, but also on compound staffs, like the PianoStaff - -@mudelafile{staff-margin.ly} - -Breathing signs, also used for phrasing, do normally not influence -global spacing -- only if space gets tight, notes are shifted to make -room for the breathing sign. Breathing signs break beams running -through their voice. In the following example, the notes in the first -two measures all have the same distance from each other: - -@mudelafile{breathing-sign.ly} - -Fonts are available in a default set of sizes: 11, 13, 16, 20, 23 and -26pt staffheight. Sizes of the text fonts and symbol fonts are made -to match the staff dimensions. - -@mudelafile[nofly]{size11.ly} - -@mudelafile[nofly]{size13.ly} - -@mudelafile[nofly]{size16.ly} - -@mudelafile[nofly]{size20.ly} - -@mudelafile[nofly]{size23.ly} - -@mudelafile[nofly]{size26.ly} - - -@section Clefs and Time Signatures - -The transparent clef should not occupy any space and with style -@code{fullSizeChanges}, the changing clef should be typeset in full -size. For octaviated clefs, the ``8'' should appear closely above or -below the clef respectively. The ``8'' is processed in a convoluted -way, so this is fragile as well. - -@mudelafile{clefs.ly} - -@ignore -@c the input file is too long and does not test for specific bugs -By default, time signatures are written with two numbers. With style -``C'', 4/4 and 2/2 are written with their corresponding symbols and -with style ``old'', 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and -9/8 are typeset with symbols, all other signatures retain the default -layout. The style ``1'', gives single number signatures for all -signatures. -% -\mu delafile{time.fly} -@end ignore - -@bye diff --git a/Documentation/tex/testje.fly b/Documentation/tex/testje.fly deleted file mode 100644 index 4c354406d3..0000000000 --- a/Documentation/tex/testje.fly +++ /dev/null @@ -1,2 +0,0 @@ -% We're testing \mudelafile here. -c''4^"This! Is! A! Test!" d e diff --git a/Documentation/tex/tutorial.tely b/Documentation/tex/tutorial.tely deleted file mode 100644 index 208bed282b..0000000000 --- a/Documentation/tex/tutorial.tely +++ /dev/null @@ -1,945 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@setfilename tutorial.info -@settitle Typesetting music with LilyPond - -@ifinfo - -This is a short tutorial to show you how LilyPond works. It is not a -tutorial. It was written by Han-Wen Nienhuys. - -Copyright 1999 by its authors. -@end ifinfo - - -@titlepage - -@c fool ls-latex: why not use these, for texinfo?? -@ignore -@author Han-Wen Nienhuys -@title Typesetting music with LilyPond -@end ignore - -@sp 10 -@comment The title is printed in a large font. -@center @titlefont{LilyPond tutorial} -@vskip 20pt -@center @titlefont{Han-Wen Nienhuys} - -@vskip 0pt plus 1filll -Copyright @copyright{} 1999 by its author(s) -@end titlepage - - -@node Top, , The end, (dir) -@top -@menu -* Typesetting music with LilyPond::Typesetting music with LilyPond -@end menu - - - - - -@node Typesetting music with LilyPond, Introduction, , Top -@menu -* Introduction:: Introduction -* tutorial-introduction:: tutorial-introduction -* The first tune:: The first tune -* sec-firsttune:: sec-firsttune -* Lyrics and chords:: Lyrics and chords -* Piano music:: Piano music -* The end:: The end -@end menu -@chapter Typesetting music with LilyPond - -@node Introduction, tutorial-introduction, Typesetting music with LilyPond, Typesetting music with LilyPond -@section Introduction -@node tutorial-introduction, The first tune, Introduction, Typesetting music with LilyPond - - -LilyPond prints music from a specification that you, the user, supply. -You have to give that specification using a @emph{language}. This -document is a gentle introduction to that language, which is called -Mudela, an acronym of Music Definition Language. - -This tutorial will demonstrate how to use Mudela by presenting -examples of input along with resulting output. We will use English -terms for notation. In case you are not familiar with those, you may -consult the glossary that is distributed with LilyPond. - -The examples discussed are included in the distribution, in the -subdirectory @file{input/tutorial/}. It is recommended that you -experiment with writing Mudela input yourself, to get a feel for -how LilyPond behaves. - -@node The first tune, sec-firsttune, tutorial-introduction, Typesetting music with LilyPond -@section The first tune -@node sec-firsttune, Lyrics and chords, The first tune, Typesetting music with LilyPond - -To demonstrate what LilyPond input looks like, we start off with a -full fledged, yet simple example. It is a convoluted version -of the famous menuet in J. S. Bach's @emph{Klavierbuechlein}. - -@mudela[verbatim] -% lines preceded by a percent are comments. -\include "paper16.ly" -\score { - \notes - \relative c'' \sequential{ - \time 3/4; - \key g; - - \repeat "volta" 2 { - d4 g,8 a b c d4 g, g | - e'4 c8 d e fis g4 g, g | - c4 d8()c b a( )b4 c8 b a g | - a4 [b8 a] [g fis] g2. | - } - - b'4 g8 a b g - a4 d,8 e fis d | - g4 e8 fis g d cis4 b8 cis a4 | - a8-. b-. cis-. d-. e-. fis-. - g4 fis e | - fis a, r8 cis8 - d2.-\fermata - \bar "|."; - } - \paper { - % standard settings are too wide for a book - linewidth = 14.0 \cm; - } -} -@end mudela - -Enter it (or copy it, the filename is @file{menuet.ly}), compile it -with LilyPond and view the output. Details of this procedure may vary -from system to system. To create the output, one would issue the -command `@code{ly2dvi menuet}'. @file{ly2dvi} is a program that does -the job of running LilyPond and TeX, handling of titles and -adjusting of page margins. - -If all goes well, the file @file{menuet.dvi} will be created. -To view this output, issue the command `@code{xdvi menuet}'. - -Now that we are familiar with the procedure of producing output, we -will analyse the input, line by line. -@ignore -Let's try to redo this -@example - - % lines preceded by a percent are comments. - -@end example -The percent sign, `@code{%}', introduces a line comment. If you want to -make larger comments, you can use block comments. These are delimited -by `@code{%@{}' and `@code{%@}}' -@end ignore -@multitable @columnfractions .60 .39 -@item -@noindent -@c @example urg: no tt font -@c @exdent % lines preceded by a percent are comments. -@exdent @code{% lines preceded by a percent are comments.} -@c @end example -@tab -The percent sign, `@code{%}', introduces a line comment. If you -want to make larger comments, you can use block comments. These -are delimited by `@code{%@{}' and `@code{%@}}' -@end multitable -@example - - \input "paper16.ly" - -@end example -By default, LilyPond will use definitions for a 20 -point@footnote{A point is the standard measure of length for -printing. One point is 1/72.27 inch.} high staff. We want smaller -output (16 point staff height), so we must import the settings for -that size, which is done.@example - - \score @{ - -@end example - A mudela file combines music with directions for outputting that -music. The music is combined with the output directions by putting -them into a @code{\score} block. -@example - - \notes - -@end example - This makes LilyPond ready for accepting notes. -@example - - \relative c'' - -@end example - As we will see, pitches are combinations of octave, note name and -chromatic alteration. In this scheme, the octave is indicated by -using raised quotes (`@code{'}') and ``lowered'' quotes (commas: -`@code{,}'). The central C is denoted by @code{c'}. The C one octave -higher is @code{c''}. One and two octaves below the central C is -denoted by @code{c} and @code{c,} respectively. - -For pitches in a long piece you might have to type many quotes. To -remedy this, LilyPond has a ``relative'' octave entry mode. In this -mode, octaves of notes without quotes are chosen such that a note is -as close as possible (graphically, on the staff) to the the preceding -note. If you add a high-quote an extra octave is added. The lowered -quote (a comma) will subtract an extra octave. Because the first note -has no predecessor, you have to give the (absolute) pitch of the note -to start with.@example - - \sequential @{ - -@end example - What follows is sequential music, i.e., -notes that are to be played and printed after each other.@example - - \time 3/4; - -@end example - This command changes the time signature of the current piece: a 3/4 -sign is printed. This command is also used to generate bar lines in -the right spots.@example - - \key g; - -@end example - This command changes the current key to G-major. Although this -command comes after the @code{\time} command, in the output, the key -signature comes before the time signature: LilyPond knows about music -typesetting conventions. @example - - \repeat "volta" 2 - -@end example - This command tells LilyPond that the following piece of music must -be played twice; @code{"volta"} volta brackets should be used for -alternatives---if there were any. -@example - - @{ - -@end example -The subject of the repeat is again sequential music. Since -@code{\sequential} is such a common construct, a shorthand is provided: -just leave off @code{\sequential}, and the result is the same. @example - - d4 - -@end example - This is a note with pitch @code{d} (determined up to octaves). The -relative music was started with a @code{c''}, so the real pitch of this -note is @code{d''}. The @code{4} designates the duration of the note -(it is a quarter note). @example - - a b - -@end example -These are notes with pitch @code{a} and @code{b}. Because their -duration is the same as the @code{g}, there is no need to enter the -duration (You may enter it anyway, eg. @code{a4 b4}) @example - - d4 g, g | - -@end example - Three more notes. The `@code{|}' character is a `barcheck'. When -processing the music, LilyPond will verify that barchecks are found at -the start of a measure. This can help you track down errors. - - So far, no notes were chromatically altered. Here is the first one -that is: @code{fis}. Mudela by default uses Dutch note names, and -``Fis'' is the Dutch note name for ``F sharp''. However, there is no -sharp sign in the output. The program keeps track of key signatures, -and will only print accidentals if they are needed. -@example - - c8 d e fis - -@end example -LilyPond guesses were beams can be added to eighth and shorter notes. -In this case, a beam over 4 eighths is added. -@example - - c4 d8( )c b a( )b4 c8 b a g | - -@end example - The next line shows how to make a slur: -the beginning and ending note of the slur is marked with an opening and -closing parenthesis respectively. In the line shown above this is -done for two slurs. Slur markers (parentheses) are between -the notes.@example - - a4 [b8 a] [g fis] - -@end example -Automatic beaming can be overridden by inserting beam marks -(brackets). Brackets are put around notes you want beamed.@example - - g2. | - -@end example -A duration with augmentation dot is notated -with the duration number followed by a period.@example - - @} - -@end example - This ends the sequential music to be repeated. LilyPond will typeset -a repeat bar. @example - - cis'4 b8 cis a4 | - -@end example - This line shows that Lily will print an accidental if that is -needed: the first C sharp will be printed with an accidental, the -second one without. @example - - a8-. b-. cis-. d-. e-. fis-. - -@end example -You can enter articulation signs either in a verbose form using a -shorthand. Here we demonstrate the shorthand: it is formed by a dash -and the the character for the articulation to use, e.g. `@code{-.}' for -staccato as shown above. @example - - fis a, r8 cis8 - -@end example - -Rests are denoted by the special notename `@code{r}'. You can also enter -an invisible rest by using the special notename `@code{s}'. -@example - - d2.-\fermata - -@end example - All articulations have a verbose form, like @code{\fermata}. The -command `@code{\fermata}' is not part of the core of the language (most -of the other discussed elements are), but it is a shorthand for a more -complicated description of a fermata. @code{\fermata} names that -description and is therefore called an @emph{identifier}. @example - - @} - -@end example - -Here the music ends. -@example - - \paper @{ - linewidth = 14.0\cm; - @} - -@end example -This specifies a conversion from music to notation output. Most of -the details of this conversions (font sizes, dimensions, etc.) have -been taken care of, but to fit the output in this document, it has -to be smaller. We do this by setting the line width to 14 centimeters -(approximately 6 inches). -@example - - @} - -@end example -The last brace ends the @code{\score} block. - -There are two things to note here. The format contains musical -concepts like pitches and durations, instead of symbols and positions: -the input format tries to capture the meaning of @emph{music}, and not -notation. Therefore Second, the format tries to be @emph{context-free}: -a note will sound the same regardless of the current time signature, -the key, etc. - -The purpose of LilyPond is explained informally by the term `music -typesetter'. This is not a fully correct name: not only does the -program print musical symbols, it also makes esthetic decisions. All -symbols and their placement is @emph{generated} from a high-level musical -description. In other words, LilyPond would be best -described by `music compiler' or `music to notation compiler'. - -@node Lyrics and chords, Piano music, sec-firsttune, Typesetting music with LilyPond -@section Lyrics and chords - -In this section we show how to typeset a song of unknown -origin.@footnote{The author would welcome information about the origin -of this song.}. - -@example -\header @{ - title = "The river is flowing"; - composer = "Traditional (?)"; -@} -\include "paper16.ly" -melody = \notes \relative c' @{ - \partial 8; - g8 | - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; -@} - -text = \lyrics @{ - The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri -- ver is flo -- wing down to the sea. -@} - -accompaniment =\chords @{ - r8 - c2-3- f-3-.7 d-min es4 c8-min r8 - c2-min f-min7 g-7^3.5 c-min @} - -\score @{ - \simultaneous @{ -% \accompaniment - \context ChordNames \accompaniment - - \addlyrics - \context Staff = mel @{ - \property Staff.noAutoBeaming = "1" - \property Staff.automaticMelismata = "1" - \melody - @} - \context Lyrics \text - @} - \midi @{ @} - \paper @{ linewidth = 10.0\cm; @} -@} -@end example - - -The result would look this@footnote{The titling and font size shown -may differ, since the titling in this document is not generated by -@file{ly2dvi}.}. - -@center @strong{The river is flowing} -@center Traditional - -@mudela[center] -\header { - title = "The river is flowing"; - composer = "Traditional (?)"; -} -\include "paper16.ly" -melody = \notes \relative c' { - \partial 8; - g8 | - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; -} - -text = \lyrics { - The ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri -- ver is flo -- wing down to the sea. -} - -accompaniment =\chords { - r8 - c2-3- f-3-.7 d-min es4 c8-min r8 - c2-min f-min7 g-7^3.5 c-min } - -\score { - \simultaneous { -% \accompaniment - \context ChordNames \accompaniment - - \addlyrics - \context Staff = mel { - \property Staff.noAutoBeaming = "1" - \property Staff.automaticMelismata = "1" - \melody - } - \context Lyrics \text - } - \midi { } - \paper { linewidth = 10.0\cm; } -} -@end mudela - -Again, we will dissect the file line by line.@example - - \header @{ - -@end example -Information about the music you are about to typeset goes into a -@code{\header} block. The information in this block is not used by -LilyPond, but it is included in the output. @file{ly2dvi} uses this -information to print titles above the music. -@example - - title = "The river is flowing"; - composer = "Traditional (?)"; -@end example -the @code{\header} block contains assignments. An assignment starts -with a string. (which is unquoted, in this case). Then comes the -equal sign `@code{=}'. After the equal sign comes the expression you -want to store. In this case, you want to put in strings. The -information has to be quoted here, because it contains spaces. The -assignment is finished with a semicolon.@example - - \include "paper16.ly" - -@end example -Smaller size for inclusion in a book.@example - - melody = \notes \relative c' @{ - -@end example -The structure of the file will be the same as the previous one, a -@code{\score} block with music in it. To keep things readable, we will -give names to the different parts of music, and use the names to -construct the music within the score block. - -@example - - \partial 8; - -@end example - -The piece starts with an anacrusis of one eighth. @example - - c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g | - c4 c8 d [es () d] c4 | d4 es8 d c4. - \bar "|."; - -@end example -We use explicit beaming. Since this is a song, we will turn automatic -beams off, and use explicit beaming where needed.@example - - @} - -@end example -This ends the definition of @code{melody}. Note that there are no -semicolons after assignments at top level.@example - - text = \lyrics @{ - -@end example -Another identifier assignment. This one is for the lyrics. -Lyrics are formed by syllables that have duration, and not by -notes. To make LilyPond parse words as syllables, switch it into -lyrics mode with @code{\lyrics}. Again, the brace after @code{\lyrics} -is a shorthand for @code{\sequential @{}. @example - - The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the - ri- ver is flo- __ wing down to the sea. - @} - -@end example -The syllables themselves are separated by spaces. You can get syllable -extenders by entering `@code{__}', and centered hyphens with -`@code{-}@code{-}'. We enter the syllables as if they are all quarter notes -in length (hence the @code{4}), and use a feature to align the -syllables to the music (which obviously isn't all quarter notes.) -@example - - accompaniment =\chords @{ - -@end example -We'll put chords over the music. There is a special mode (analogous -to @code{\lyrics} and @code{\notes} mode) where you can give the names -of the chords you want, instead of the notes comprising the chord. -@example - - r8 - -@end example -There is no accompaniment during the anacrusis.@example - - c2-3- f-3-.7 - -@end example -A chord is started by the tonic of the chord. The -first one lasts a half note. An unadorned note creates a major -triad, while a minor triad is wanted. @code{3-} modifies the third to -be small. @code{7} modifies (adds) a seventh, which is small by default -to create the @code{f a c es} chord. Multiple modifiers must be -separated by a dot.@example - - d-min es4 c8-min r8 - -@end example -Some modifiers have predefined names, eg. @code{min} is the same as -@code{3-}, so @code{d-min} is a minor @code{d} chord.@example - - c2-min f-min7 g-7^3.5 c-min @} - -@end example -A named modifier @code{min} and a normal modifier @code{7} do not have -to be separated by a dot. Tones from a chord are removed with chord -subtractions. Subtractions are started with a caret, and they are -also separated by dots. In this example, @code{g-7^3.5} produces a -minor seventh. The brace ends the sequential music. @example - - \score @{ - \simultaneous @{ - -@end example -We assemble the music in the @code{\score} block. Melody, lyrics and -accompaniment have to sound at the same time, so they should be -@code{\simultaneous}.@example - - %\accompaniment - -@end example -Chord mode generates notes grouped in @code{\simultaneous} music. If -you remove the comment sign, you can see the chords in normal -notation: they will be printed as note heads on a separate -staff. @example - - \context ChordNames \accompaniment - -@end example -Normally, the notes that you enter are transformed into note heads. -The note heads alone make no sense, they need surrounding information: -a key signature, a clef, staff lines, etc. They need @emph{context}. In -LilyPond, these symbols are created by objects called `interpretation -context'. Interpretation contexts only exist during a run of -LilyPond. Interpretation contexts that are for printing music (as -opposed to playing music) are called `notation context'. - -By default, LilyPond will create a Staff contexts for you. If you -would remove the @code{%} sign in the previous line, you can see that -mechanism in action. - -We don't want default contexts here, because we want names, not note -heads. An interpretation context can also created upon explicit -request. The keyword for such a request is @code{\context}. It takes -two arguments. The first is the name of a interpretation context. -The name is a string, it can be quoted with double quotes). The -second argument is the music that should be interpreted in this -context. For the previous line, we could have written @code{\context -Staff \accompaniment}, and get the same effect.@example - - \addlyrics - -@end example -The lyrics need to be aligned with the melody. This is done by -combining both with @code{\addlyrics}. @code{\addlyrics} takes two -pieces of music (usually a melody and lyrics, in that order) and -aligns the syllables of the second piece under the notes of the -first piece. If you would reverse the order, the notes would be -aligned on the lyrics, which is not very useful. (Besides, it looks -silly.)@example - - \context Staff = mel @{ - -@end example -This is the argument of @code{\addlyrics}. We instantiate a -@code{Staff} context explicitly: should you chose to remove comment -before the ``note heads'' version of the accompaniment, the -accompaniment will be on a nameless staff. The melody has to be on a -different staff as the accompaniment. This is accomplished by giving -the melody staff a different name.@example - - \property Staff.noAutoBeaming = "1" - -@end example -An interpretation context has variables that tune its behaviour. One -of the variables is @code{noAutoBeaming}. If set and non-zero (i.e., -true) LilyPond will not try to put automatic beaming on the current -staff.@example - - \property Staff.automaticMelismata = "1" - -@end example -Similarly, we don't want to print a syllable when there is -a slur. This sets up the Staff context to signal slurs while -@code{\addlyrics} is processed. @example - - \melody - @} - -@end example -Finally, we put the melody on the current staff. Note that the -@code{\property} directives and @code{\melody} are grouped in sequential -music, so the property settings are done before the melody is -processed. @example - - \context Lyrics \text - -@end example -The second argument of @code{\addlyrics} is the text. The text also -should not land on a Staff, but on a interpretation context for -syllables, extenders, hyphens etc. This context is called -Lyrics.@example - - @} - -@end example -This ends @code{\simultaneous}.@example - - \midi @{ @} - -@end example -This makes the music go to a MIDI file. MIDI is great for -checking music you enter. You listen to the MIDI file: if you hear -something unexpected, it's probably a typing error. @code{\midi} is an -`output definition', a declaration that specifies how to output music -analogous to @code{\paper @{ @}}.@example - - \paper @{ linewidth = 10.0\cm; @} - -@end example -We also want notation output. The linewidth is short so the piece -will be set in two lines. @example - - @} - -@end example -End the score block. - -@node Piano music, The end, Lyrics and chords, Typesetting music with LilyPond -@section Piano music - -Our third subject is a piece piano music. The fragment in the input -file is a piano reduction of the G major Sinfonia by Giovanni Battista -Sammartini. It was composed around 1740. - -@mudela[verbatim] - -\include "paper16.ly"; - -viola = \notes \relative c' \context Voice = viola { - - \property Voice.verticalDirection = \down g'8. b,16 - s1 s2. r4 - g -} - -oboes = \notes \relative c'' \context Voice = oboe { - \stemup s4 g8. b,16 c8 r - \grace \times 2/3 { } - < - { \times 2/3 { a8 g c } \! c2 } - \context Voice = oboeTwo { - \stemdown - \grace { - \property Grace.verticalDirection = \down - [f,16 g] } - f8 e e2 - } > - \stemboth - \grace <)b8. d8.-\trill> | - [ < )f8. a>] <)b,8 d> r [ ] r | - [ < )e8. g>] -} - -hoomPah = \notes \transpose c' { - c8 \translator Staff = top \stemdown - c'8 \translator Staff = bottom \stemup } - -hoomPahHoomPah = { [\hoomPah \hoomPah] } - -bassvoices = \notes \relative c' { - c4 g8. b,16 - \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah - \stemdown [c8 c'8] r4 - r4 - < {\stemup r2 } - \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } > -} - -\score { - \context PianoStaff \notes < - \context Staff = top < \time 2/2; - \context Voice = viola \viola - \oboes - > - \context Staff = bottom < \time 2/2; \clef bass; - \bassvoices - > - > - \midi { } - \paper { - indent = 0.0; - linewidth = 15.0 \cm; } -} -@end mudela - -If it looks like incomprehensible gibberish to you... Then you are -right. The author has doctored this example to have as many quirks in -one system as possible.@example -viola = \notes \relative c' \context Voice = viola @{ -@end example -In this example, you can see multiple parts on a staff. Each part is -associated with one notation context. This notation context handles -stems and dynamics (among others). The name of this context is -@code{Voice}. For each part we have to make sure that there is -precisely one Voice context@footnote{If @code{\context} would not -have been specified explicitly, three @code{Voice} contexts would be -created: one for each note in the first chord.}.@example - -@end example -@code{<} and @code{>} are short hands for @code{\simultaneous @{} and -@code{@}}. So the expression enclosed in @code{<} and @code{>} is a -chord. @code{\f} places a forte symbol under the chord.@example -\property Voice.verticalDirection = \down -@end example -@code{verticalDirection} is a property of the voice context. It -controls the directions of stems, articulations marks and other -symbols. - If @code{verticalDirection} is set to @code{\down} -(identifier for the integer -1) the stems go down, -@code{\up} (identifier for the integer 1) makes the stems go up.@example - g'8. b,16 -@end example -Relative octaves work a little differently with chords. The starting -point for the note following a chord is the first note of the chord. So -the @code{g} gets an octave up quote: it is a fifth above the starting -note of the previous chord (the central C). - -@example -s1 s2. r4 -@end example -@code{s} is a `spacer' rest. It does not print anything, but it does -have the duration of a rest. @example -oboes = \notes \relative c'' \context Voice = oboe @{ -@end example -Now comes a part for two oboes. They play homophonically, so we -print the notes as one voice that makes chords. Again, we insure that -these notes are indeed processed by precisely one context with -@code{\context}.@example -\stemup s4 g8. b,16 c8 r -@end example -@code{\stemup} is an identifier reference. It is shorthand for -@code{\property Voice.verticalDirection = \up}. If possible, you -should use predefined identifiers like these for setting properties. -Your input will be less dependent upon the implementation of LilyPond. -@example -\grace < )d4 f> -@end example -@code{\grace} introduces grace notes. It takes one argument, in this -case a chord. The slur started on the @code{e} of the chord -will be attached to the next note.@footnote{LilyPond will squirm -about unended Slurs. In this case, you can ignore the warning}. -@example -\times 2/3 -@end example -Tuplets are made with the @code{\times} keyword. It takes two -arguments: a fraction and a piece of music. The duration of the -second argument is multiplied by the first argument. Triplets make -notes occupy 2/3 of their notated duration, so in this case the -fraction is 2/3. @example -@{ @} -@end example -The piece of music to be `tripletted' is sequential music containing -three notes. On the first chord (the @code{d}), a crescendo is started -with @code{\<}.@example -< -@end example -At this point, the homophonic music splits into two rhythmically -different parts. We can't use a sequence of chords to enter this, so -we make a `chord' of sequences to do it. We start with the upper -voice, which continues with upward stems: @example - @{ \times 2/3 @{ a8 g c @} \! c2 @} -@end example -The crescendo is ended at the half note by the escaped exclamation -mark `@code{\!}'. @example -\context Voice = oboeTwo @{ -\stemdown -@end example -We can't share stems with the other voice, so we have to create a new -@code{Voice} context. We give it the name @code{oboeTwo} to distinguish -it from the other context. Stems go down in this voice. @example -\grace @{ -@end example -When a grace section is processed, a @code{Grace} context is -created. This context acts like a miniature score of its own. It has -its own time bookkeeping, and you can make notes, beams, slurs -etc. Here fiddle with a property and make a beam. The argument of -@code{\grace} is sequential music.@example -\property Grace.verticalDirection = \down -[f,16 g] @} -@end example -Normally, grace notes are always stem up, but in this case, the upper -voice interferes. We set the stems down here. - -As far as relative mode is concerned, the previous note is the -@code{c'''2} of the upper voice, so we have to go an octave down for -the @code{f}. -@example - - f8 e e2 -@} > -@end example -This ends the two-part section. @example -\stemboth -\grace <)b8. d8.-\trill> | -@end example -@code{\stemboth} ends the forced stem directions. From here, stems are -positioned as if it were single part music. - -The bass has a little hoom-pah melody to demonstrate parts switching -between staffs. Since it is repetitive, we use identifiers:@example -hoomPah = \notes \transpose c' @{ -@end example -Transposing can be done with @code{\transpose}. It takes two -arguments; the first specifies what central C should be transposed to. -The second is the to-be-transposed music. As you can see, in this -case, the transposition is a no-op. Central C is transposed to -central C. - -The purpose of this no-op is circumventing relative mode. Relative -mode can not be used in conjunction with transposition, so relative -mode will leave the contents of @code{\hoomPah} alone. We can use it -without having to worry about getting the motive in a wrong -octave@footnote{@code{hoomPah = \relative ...} would be more -intuitive to use, but that would not let me plug @code{\transpose} -:-).}.@example -c8 \translator Staff = top \stemdown -@end example -We assume that the first note will be put in the lower staff. After -that note we switch to the upper staff with @code{\translator}. To be -precise, this @code{\translator} entry switches the current voice to a -@code{Staff} named @code{top}. So we have to name the upper staff -`@code{top}'. Stem directions are set to avoid interfering with the -oboe voices. @example -c'8 \translator Staff = bottom \stemup @} -@end example -Then a note is put on the upper staff, and we switch again. We have -to name the lower staff `@code{bottom}'. @example -hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} -@end example -Put two of these fragments in sequence, and beam them.@example -bassvoices = \notes \relative c' @{ -c4 g8. b,16 -\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah -\hoomPahHoomPah -@end example -Entering the bass part is easy: the hoomPahHoomPah variable is -referenced four times.@example -\context Voice = reallyLow @{\stemdown g2 ~ | g4 c8 @} > -@end example -After skipping some lines, we see @code{~}. This mark makes ties.@example -\context PianoStaff -@end example -For piano music, a special context is needed to get cross staff -beaming right. It is called @code{PianoStaff}.@example -\context Staff = bottom < \time 2/2; \clef bass; -@end example -The bottom staff must have a different clef.@example -indent = 0.0; -@end example -To make some more room on the line, the first (in this case the only) -line is not indented. The line still looks is very cramped, but that is due -to the format of this tutorial. - -This example shows a lot of features, but the organisation isn't -perfect. For example, it would be less confusing to use a chord -containing sequential music than a sequence of chords for the oboe -parts. - -[TODO: demonstrate Hara-Kiri with scores and part extraction.] - -@node The end, Top, Piano music, Typesetting music with LilyPond -@section The end - -That's all folks. From here, you can either try fiddling with input -files, or you can read the reference manual. - - -@bye -- 2.39.5