- AUTHORS - who did what on GNU LilyPond?
-Contents
+AUTHORS - who did what on GNU LilyPond?
+***************************************
-This file lists authors of GNU LilyPond, and what they
-wrote. This list is alphabetically ordered.
+ This file lists authors of GNU LilyPond, and what they wrote. This
+list is alphabetically ordered.
-o Tom Cato Amundsen <tomcato@xoommail.com>, cembalo-par-
- tita in mudela, accordion symbols, some mudela-book.py
+ * Tom Cato Amundsen <tomcato@xoommail.com>, cembalo-partita in
+ mudela, accordion symbols, some mudela-book.py
-o Mats Bengtsson <matsb@s3.kth.se>,
- http://www.s3.kth.se/~matsb/ lots of testing, fixes,
- general comments and contributions.
+ * Mats Bengtsson <matsb@s3.kth.se>,
+ `http://www.s3.kth.se/~matsb/' lots of testing, fixes, general
+ comments and contributions.
-o Eric Bullinger <eric@aut.ee.ethz.ch>, accidental trans-
- position.
+ * Eric Bullinger <eric@aut.ee.ethz.ch>, accidental transposition.
-o Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,
- TeX titling and lytodvi.sh
+ * Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>, TeX
+ titling and lytodvi.sh
-o Anthony Fok <foka@debian.org>, debian package: debian/*
+ * Anthony Fok <foka@debian.org>, debian package: debian/*
-o Bjoern Jacke <bjoern.jacke@gmx.de> german glossary
- stuff.
+ * Bjoern Jacke <bjoern.jacke@gmx.de> german glossary stuff.
-o Neil Jerram <nj104@cus.cam.ac.uk>. parts of Documenta-
- tion/Vocab*
+ * Neil Jerram <nj104@cus.cam.ac.uk>. parts of
+ Documentation/Vocab*
-o Donald Ervin Knuth, http://www-cs-staff.stan-
- ford.edu/~knuth/ mf/ital-*.mf (these were taken from
- the CM fonts)
+ * Donald Ervin Knuth, `http://www-cs-staff.stanford.edu/~knuth/'
+ mf/ital-*.mf (these were taken from the CM fonts)
-o Michael Krause <m.krause@tu-harburg.de>, breathing
- signs
+ * Michael Krause <m.krause@tu-harburg.de>, breathing signs
-o Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
+ * Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
bugfixes, some Beam and Stem code.
-o David R. Linn <drl@vuse.vanderbilt.edu>, Mailing list
+ * David R. Linn <drl@vuse.vanderbilt.edu>, Mailing list
maintenance.
-o Adrian Mariano <> Reference manual, tutorial fixes,
- glossary.
+ * Adrian Mariano <> Reference manual, tutorial fixes, glossary.
-o Han-Wen Nienhuys <hanwen@cs.uu.nl>,
- http://www.cs.uu.nl/~hanwen/ Main author (initials:
- HWN).
+ * Han-Wen Nienhuys <hanwen@cs.uu.nl>,
+ `http://www.cs.uu.nl/~hanwen/' Main author (initials: HWN).
-o Jan Nieuwenhuizen <janneke@gnu.org>,
- http://www.xs4all.nl/~jantien/ Main author (initials:
- JCN).
+ * Jan Nieuwenhuizen <janneke@gnu.org>,
+ `http://www.xs4all.nl/~jantien/' Main author (initials: JCN).
-o Alexandre Oliva <oliva@dcc.unicamp.br>, http://sun-
- site.unicamp.br/~oliva/ testing
+ * Alexandre Oliva <oliva@dcc.unicamp.br>,
+ `http://sunsite.unicamp.br/~oliva/' testing
-o Franc,ois Pinard <pinard@iro.umontreal.ca>, parts of
- Documentation/Vocab*, started internationalization
+ * Franc <pinard@iro.umontreal.ca>ois Pinard, parts of
+ Documentation/Vocab*, started internationalization stuff
- stuff
+ * Glen Prideaux <glenprideaux@iname.com>, minor bug fix to
+ script used to generate doc++ documentation
-o Glen Prideaux <glenprideaux@iname.com>, minor bug fix
- to script used to generate doc++ documentation
+ * Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT support.
-o Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
- port.
+ * Shay Rojanski Some mudela source.
-o Shay Rojanski Some mudela source.
+ * Laura Conrad (lconrad@world.std.com) fixes to abc2ly
-o Laura Conrad (lconrad@world.std.com) fixes to abc2ly
+ Your name could be here! If you want to fix something, do it, and
+send us a patch!
-Your name could be here! If you want to fix something, do
-it, and send us a patch!
+pl 4.hwn1
+ - bf: repeats.
+ - bf: mmrests
+ - bf: simpler guile detection.
+ - use texinfo for reference manual.
+ - inline lily.ps from lilypond.
+ - texi for doco: converted directory Documentation/tex/
+
+
pl 3.hwn1
- mudela-book tweaks for surviving texinfo
- include feta command seqs. in .tex
- bf: Rhythmic_head::do_substitute_element_pointer ()
- Direct access to dim_cache_ replaced by methods in
Graphical_element.
-3.mk1
- - left endings of various spanners adjusted
**********
includefile(COPERTINA.in)
nl()
-pic(schermo)
-COMMENT(silly...DEFINEMACRO(pic)(1)(url(ARG1)(ARG1.png)))
-DEFINEMACRO(pic)(1)(verbinclude(ARG1.in))
-
nsect(LilyPond -- De Muziek Zetter van het GNU Project)
includefile(FLAPTEKST.in)
nl()
-pic(scherm)
datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html))
TEX_FILES = $(wildcard *.tex)
DOC_FILES = $(wildcard *.doc)
-TELY_FILES = $(wildcard *.tely)
-DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(YO_FILES:.yo=.dvi) $(TELY_FILES:.tely=.dvi))
+
+DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi))
OUT_BIB_FILES = $(addprefix $(outdir)/, $(BIB_FILES))
-# just include me
-YO_URG_FILES = $(wildcard *.yo-urg)
OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES))
OUTDOC_FILES = $(addprefix $(outdir)/, $(DOC_FILES))
EL_FILES = $(wildcard *.el)
BIB_FILES= $(wildcard *.bib)
-EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(YO_URG_FILES) $(TEX_FILES) $(TELY_FILES) $(wildcard *.sty)
-HTML_FILES = $(addprefix $(outdir)/, $(YO_FILES:.yo=.html) $(TELY_FILES:.tely=.html))
+EXTRA_DIST_FILES= $(BIB_FILES) $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(TEX_FILES) $(wildcard *.sty)
+HTML_FILES = $(addprefix $(outdir)/, $(TELY_FILES:.tely=.html))
PS_FILES = $(DVI_FILES:.dvi=.ps)
STEPMAKE_TEMPLATES=tex documentation
-local-WWW: $(HTML_FILES) $(OUTTEX_FILES:.doc=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) ps
+local-WWW-donotdoit: $(HTML_FILES) $(OUTTEX_FILES:.doc=.ps.gz) $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html)) $(datafiles) ps
$(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'LaTeX documents about design and implementation of LilyPond' \
- $(TELY_FILES) $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
+ $(TELY_FILES) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
| sed "s!$(outdir)/!!g" > $(outdir)/index.html
$(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $(outdir)/index.html
+++ /dev/null
-18:46:03 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Ontleden...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Vertolken van muziek...[8][16][24][25]
-duur: 1.34 seconden
-Voorbewerken van elementen... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Berekenen van kolomposities... [3][6][9][12][15][18][21][24][25]
-geschat: 231 regels (van gemiddeld 21.4 kolommen)
-exact berekend: 66 regels (van gemiddeld 25.5 kolommen)
-duur: 6.11 seconden
-Nabewerken van elementen...
-TeX uitvoer naar twinkle.tex...
-
-Vertolken van muziek...
-duur: 0.22 seconden
-MIDI uitvoer naar twinkle.midi...
+++ /dev/null
-18:37:15 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Analizzare...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Interpretare musica...[8][16][24][25]
-durata: 1.36 secondi
-Preprocessare elementi... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Calcolare posizioni di colonne... [3][6][9][12][15][18][21][24][25]
-approssimato: 231 linee (con una media di 21 colonne):
-calcolato esattamente: 66 linee (con una media di 25 colonne)
-durata: 6.14 secondi
-Postprocessare elementi...
-Prodotto di TeX verso twinkle.tex...
-
-Interpretare musica...
-durata: 0.21 secondi
-Prodotto di MIDI verso twinkle.midi...
datafiles = $(addprefix $(outdir)/,$(DATA_FILES:.data=.html))
TEX_FILES = $(wildcard *.tex)
DOC_FILES = $(wildcard *.doc)
-TELY_FILES = $(wildcard *.tely)
-DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(YO_FILES:.yo=.dvi) $(TELY_FILES:.tely=.dvi))
-# just include me
-YO_URG_FILES = $(wildcard *.yo-urg)
+DVI_FILES = $(addprefix $(outdir)/,$(DOC_FILES:.doc=.dvi) $(TELY_FILES:.tely=.dvi))
+
+
-OUTTEX_FILES = $(addprefix $(outdir)/, $(TEX_FILES))
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))
-EXTRA_DIST_FILES= $(DOC_FILES) $(DATA_FILES) $(EL_FILES) $(YO_URG_FILES) $(TEX_FILES) $(TELY_FILES) testje.fly
-HTML_FILES = $(addprefix $(outdir)/, $(YO_FILES:.yo=.html) $(TELY_FILES:.tely=.html))
PS_FILES = $(DVI_FILES:.dvi=.ps)
-STEPMAKE_TEMPLATES=tex documentation
+STEPMAKE_TEMPLATES=tex texinfo documentation
LOCALSTEPMAKE_TEMPLATES=lilypond mudela
include $(depth)/make/stepmake.make
#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='\r' --package=$(topdir) -o $@ $<
+ $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' -o $@ $<
$(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $@
-$(outdir)/%.tex: %.data $(depth)/VERSION
- $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' --package=$(topdir) -o $@ --latex $<
+$(outdir)/%.latex: %.data $(depth)/VERSION
+ $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep='\r' -o $@ --format=latex $<
+
-$(outdir)/glossary.dvi: $(outdir)/glossary-table.tex
-$(outdir)/glossary.html: $(outdir)/glossary-table.html
-local-WWW: $(HTML_FILES) $(OUTDOC_FILES:.doc=.ps.gz) $(OUTTEX_FILES:.tex=.ps.gz) $(OUTYO_FILES:.yo=.latex) $(OUTYO_FILES:.yo=.ps.gz) $(datafiles)
+local-WWW: $(HTML_FILES) $(OUTDOC_FILES:.doc=.ps.gz) $(OUTTEX_FILES:.tex=.ps.gz) $(datafiles)
$(PYTHON) $(step-bindir)/ls-latex.py --package=$(topdir) --title 'LaTeX documents about LilyPond' \
- $(YO_FILES) $(OUTYO_FILES:.yo=.latex) $(BIB_FILES) $(DOC_FILES) $(TEX_FILES)\
+ $(DOC_FILES) $(TEX_FILES)\
| sed "s!$(outdir)/!!g" > $(outdir)/index.html
$(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) $(outdir)/index.html
$(outdir)/%.bib: %.bib
ln -f $< $@
-# Yeah right:
-# make -k out/mudela.dvi => cp -f out/vocabulary.tex out/mudela.dvi
-
-#out/%: $(outdir)/%
-# cp -f $< $@
-
localclean:
rm -f fonts.aux fonts.log feta*.tfm feta*.*pk
+++ /dev/null
-
-COMMENT(-*-text-*-)
-
-DEFINEMACRO(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
- whenhtml(sc(ARG1)))
-
-
-
-COMMENT( This document contains Mudela fragments. You need at least
-Yodl-1.30.18 to convert this to tex or html.
-
-TODO
-
-in stead <-> instead
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
-\setlength{\topmargin}{-0.25in}
-\setlength{\textheight}{9in}
-\setlength{\textwidth}{5.875in}
-\setlength{\oddsidemargin}{0.25in}
-\setlength{\evensidemargin}{0.25in}
-)
-
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-article(Glossary of notation terms)
- (Han-Wen Nienhuys and Jan Nieuwenhuizen)
- ()
-
-COMMENT(
-
-* The [ ] look weird
-
-* paragraphs have too much space.
-
-)
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-COMMENT(
-latexcommand(\def\texttt#1{\tt #1})
-latexcommand(\def\textbf#1{\bf #1})
-)
-
-This glossary is far from complete. Additions are welcome.
-
-whenlatex(latexcommand(
- {\parindent -1pc
- \parskip 0pc\parsep 0pc
- % COMMENT( from the texbook)
- \def\length#1{\count0=0 \getlength#1\end}
- \def\getlength#1{\ifx#1\end \let\next=\relax
- \else\advance\count0 by1 \let\next=\getlength\fi \next}
- \def\inlanguage#1#2{{\length{#2}%
- \ifnum\count0=0
- \else
- \emph{#1}: #2.
- \fi}}
- \small
-
- % COMMENT(\def\tableentry#1#2#3#4#5#6#7{\par\textbf{#1}: #7)
- \def\tableentry#1#2#3#4#5#6#7{\par{\bf #1}: #7
- \inlanguage{Fran\c cais}{#2}
- \inlanguage{British}{#4} \inlanguage{Deutsch}{#3}
- \inlanguage{Nederlands}{#5}\inlanguage{Italiano}{#6}}
- \input glossary-table
- }
-
- \bibliography{engraving}
- \bibliographystyle{plain}
-))
-
-whenhtml(
- includeverbatim(DOEXPAND(outdir)/glossary-table.html)
-)
-
+++ /dev/null
-COMMENT(
-I cannot be named .yo, because i'm not a complete document, yodl2x will break.
-)
-
-whenhtml(
-
-nsubsect(Disclaimer)
-
-This document is written in url(Yodl)(ftp://ftp.lilypond.org/pub/yodl)
-and should foremost produce nice LaTeX() output. In other formats,
-such as html, some things will look a bit different, while other
-things will be simply left out. Therefore, the authoritive version of
-this document is the PostScript version, produced via LaTeX(). As you
-know, url(no gifs due to patent
-problems)(http://www.gnu.org/philosophy/gif.html), but the PNG images
-should be viewable with any current browser . )
+++ /dev/null
-% -*-LaTeX-*- vim:tw=72
-\documentclass{article}
-
-\title{LilyPond feature test}
-\author{Han-Wen Nienhuys}
-\begin{document}
-\maketitle
-
-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
-\verb+\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
-\texttt{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}
-
-\def\bla#1{%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{document}
\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
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename reference-manual.info
+@settitle LilyPond 1-2-0 Reference Manual
+
+@ifinfo
+
+This is the reference documentation to LilyPond. It is not a tutorial.
+It was written by Han-Wen Nienhuys, Adrian Mariano and Jan Nieuwenhuizen
+
+
+Copyright 1999 by its authors.
+@end ifinfo
+
+@titlepage
+@sp 10
+@comment The title is printed in a large font.
+@center @titlefont{LilyPond Reference manual}
+@vskip 20pt
+@center @titlefont{Han-Wen Nienhuys, Adrian Mariano, Jan Nieuwenhuizen}
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1999 by its authors
+@end titlepage
+
+
+@node Top, , Running LilyPond, (dir)
+@top
+@menu
+* LilyPond 1-2-0 Reference Manual::LilyPond 1-2-0 Reference Manual
+@end menu
+
+
+@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 @{} @code{@}}
+@end quotation
+
+ are zero or more output definitions. If no output
+definition is supplied, the default @code{\paper} block will be added.
+
+
+
+@cindex header
+
+@cindex header@@@code{\header}
+
+The syntax is
+
+@quotation
+
+ @code{\header} @code{@{} = ;
+ = ; ... @code{@}}
+@end quotation
+
+A header describes the file's contents. It can also appear in a
+@code{\score} block. Tools like @code{ly2dvi}
+@cindex ly2dvi@@@code{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}
+@cindex notenames@@@code{\notenames}
+
+ @code{@{} @code{@}}
+@end quotation
+
+ is a list of definitions of the form
+
+@quotation
+
+ =
+@end quotation
+
+Chord modifiers can be set analogously, with
+@code{\chordmodifiers}
+@cindex chordmodifiers@@@code{\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}
+@cindex scm@@@code{\scm}
+ @code{;}
+@end quotation
+
+Evaluates the specified Scheme code. The result is discarded.
+
+@quotation
+
+ @code{\scmfile}
+@cindex scmfile@@@code{\scmfile}
+ @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
+
+@cindex %@@@code{%}
+
+
+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{+}
+@cindex +@@@code{+}
+', `@code{-}
+@cindex -@@@code{-}
+', `@code{*}
+@cindex *@@@code{*}
+', and
+`@code{/}
+@cindex /@@@code{/}
+', with parentheses for grouping.
+
+A real constant can be followed by one of the dimension
+keywords:
+@cindex dimensions
+ @code{\mm}
+@cindex mm@@@code{\mm}
+,
+@code{\pt}
+@cindex pt@@@code{\pt}
+, @code{\in}
+@cindex in@@@code{\in}
+, or
+@code{\cm}
+@cindex cm@@@code{\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}
+@cindex maininput@@@code{\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}
+@cindex include@@@code{\include}
+
+@end quotation
+
+Include . The argument 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}
+@cindex version@@@code{\version}
+ @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}
+@cindex notenames@@@code{\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}
+@cindex notes@@@code{\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}
+@cindex chords@@@code{\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}
+@cindex lyrics@@@code{\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{$}
+@cindex $@@@code{$}
+'. 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}
+@cindex notenames@@@code{\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}
+@cindex paper@@@code{\paper}
+ blocks
+ and @code{\midi}
+@cindex midi@@@code{\midi}
+ blocks)
+ @item score definitions (@code{\score}
+@cindex score@@@code{\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}
+@cindex paper@@@code{\paper}
+ block) will yield a ``parse
+error''.
+
+Identifiers allow objects to be assigned to names. To assign an
+identifier, you use `=' and to refer to an
+identifier, you preceed its name with a backslash:
+`@code{\}'. 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}.
+
+ 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}
+@cindex score@@@code{\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}
+@cindex musicalpitch@@@code{\musicalpitch}
+
+ @code{@{} @code{@}}
+@end quotation
+
+ is specified by an integer, zero for the octave
+containing middle C. 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}
+@cindex duration@@@code{\duration}
+
+ @code{@{} @code{@}}
+@end quotation
+
+ 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
+.
+
+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
+
+ [][@code{!}][@code{?}][]
+@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{'}
+@cindex '@@@code{'}
+') characters or a series of comma
+(`@code{,}
+@cindex ,@@@code{,}
+') 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{?}
+@cindex ?@@@code{?}
+' 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{.}
+@cindex .@@@code{.}
+')
+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{*}' after it. This will not affect the
+appearance of note heads or rests.
+
+
+Rests are entered like notes, with note name `@code{r}
+@cindex r@@@code{r}
+',
+or `@code{R}
+@cindex R@@@code{R}
+'. There is also a note name `@code{s}
+@cindex s@@@code{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}
+@cindex property@@@code{\property}
+
+ @code{.} @code{=}
+@end quotation
+
+Sets the property of the context to
+the specified . 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}
+@cindex translator@@@code{\translator}
+
+ =
+@end quotation
+
+A music expression indicating that the context which is a direct
+child of the a context of type should be shifted to
+a context of type and the specified name.
+
+Usually this is used to switch staffs in Piano music, e.g.
+
+@quotation
+
+ @code{\translator Staff = top}
+@end quotation
+
+
+
+@cindex commands
+
+Commands are music expressions that have no duration.
+
+
+@quotation
+
+ @code{\key}
+@cindex key@@@code{\key}
+ @code{;}
+@end quotation
+
+Change the key signature. should be
+@code{\major}
+@cindex major@@@code{\major}
+ or @code{\minor}
+@cindex minor@@@code{\minor}
+ to get
+-major or -minor, respectively. The second
+argument is optional; the default is major keys. The
+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}
+@cindex key@@@code{\key}
+ commands to get the corresponding major key,
+e.g., @code{\minor}
+@cindex minor@@@code{\minor}
+ is defined as 3. The standard
+mode names @code{\ionian}
+@cindex ionian@@@code{\ionian}
+,
+@code{\locrian}
+@cindex locrian@@@code{\locrian}
+, @code{\aeolian}
+@cindex aeolian@@@code{\aeolian}
+,
+@code{\mixolydian}
+@cindex mixolydian@@@code{\mixolydian}
+, @code{\lydian}
+@cindex lydian@@@code{\lydian}
+,
+@code{\phrygian}
+@cindex phrygian@@@code{\phrygian}
+, and @code{\dorian}
+@cindex dorian@@@code{\dorian}
+
+are also defined.
+
+@quotation
+
+ @code{\keysignature}
+@cindex keysignature@@@code{\keysignature}
+ @code{;}
+@end quotation
+
+Specify an arbitrary key signature. The pitches from will
+be printed in the key signature in the order that they appear on the
+list.
+
+
+@quotation
+
+ @code{\mark}
+@cindex mark@@@code{\mark}
+ @code{;} @*
+ @code{\mark} @code{;}
+@end quotation
+
+Prints a mark over or under (depending on the
+@code{markDirection}
+@cindex markDirection@@@code{markDirection}
+ property) the staff. You must add
+@code{Mark_engraver}
+@cindex Mark_engraver@@@code{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}
+@cindex bar@@@code{\bar}
+ @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 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 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}
+@cindex cadenza@@@code{\cadenza}
+ @code{;}
+@end quotation
+
+Music expression that toggles the automatic generation of bar lines.
+If is 1, bar line generation is turned off. If
+ is 0, a bar line is immediately printed and
+automatic bar generation is turned on.
+
+@quotation
+
+ @code{\time}
+@cindex time@@@code{\time}
+ @code{/} @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}
+@cindex tempo@@@code{\tempo}
+ = @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}
+@cindex partial@@@code{\partial}
+ @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{|}
+@cindex |@@@code{|}
+
+@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}
+@cindex penalty@@@code{\penalty}
+ @code{;}
+@end quotation
+
+Discourage or encourage line breaks. See identifiers
+@code{\break}
+@cindex break@@@code{\break}
+ and @code{\nobreak}
+@cindex nobreak@@@code{\nobreak}
+ in
+section @xref{ident}.
+
+@quotation
+
+ @code{\clef}
+@cindex clef@@@code{\clef}
+ @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}
+@cindex skip@@@code{\skip}
+ @code{;}
+@end quotation
+
+Skips the amount of time specified by . 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{[}
+@cindex [@@@code{[}
+' and `@code{]}
+@cindex ]@@@code{]}
+'.
+
+@mudela[fragment,verbatim,center]
+ [a'8 a'] [a'16 a' a' a']
+@end mudela
+
+Some more elaborate constructions:
+
+@mudela[fragment,verbatim,center]
+ [a'16 <a' c''> c'' <a' 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{[:}' 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{:}' 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{-}
+
+@cindex __@@@code{__}
+
+@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{~}
+@cindex ~@@@code{~}
+'.
+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' <c' e' g'> ~ <c' e' g'>
+@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 `@code{-\}'. 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
+`@code{^\}' and `@code{_\}'
+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}
+@cindex ppp@@@code{\ppp}
+,
+@code{\pp}
+@cindex pp@@@code{\pp}
+, @code{\p}
+@cindex p@@@code{\p}
+, @code{\mp}
+@cindex mp@@@code{\mp}
+,
+@code{\mf}
+@cindex mf@@@code{\mf}
+, @code{\f}
+@cindex f@@@code{\f}
+, @code{\ff}
+@cindex ff@@@code{\ff}
+,
+@code{\fff}
+@cindex fff@@@code{\fff}
+, @code{\fff}
+@cindex ffff@@@code{\ffff}
+,
+@code{\fp}
+@cindex fp@@@code{\fp}
+, @code{\sf}
+@cindex sf@@@code{\sf}
+,
+@code{\sff}
+@cindex sff@@@code{\sff}
+, @code{\sp}
+@cindex sp@@@code{\sp}
+,
+@code{\spp}
+@cindex spp@@@code{\spp}
+, @code{\sfz}
+@cindex sfz@@@code{\sfz}
+, and
+@code{\rfz}
+@cindex rfz@@@code{\rfz}
+.
+
+
+@quotation
+
+ @code{\textscript}
+@cindex textscript@@@code{\textscript}
+
+@end quotation
+
+Defines a text to be printed over or under a note. 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}
+@cindex script@@@code{\script}
+
+@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}
+@cindex script@@@code{\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}
+@cindex cr@@@code{\cr}
+ and terminated
+with @code{\rc}
+@cindex rc@@@code{\rc}
+. A decrescendo mark is started with
+@code{\decr}
+@cindex decr@@@code{\decr}
+ and terminated with
+@code{\rced}
+@cindex rced@@@code{\rced}
+. There are also shorthands for these
+marks. A crescendo can be started with @code{\<}
+@cindex <@@@code{\<}
+ and a
+decrescendo can be started with @code{\>}
+@cindex >@@@code{\>}
+. Either one can
+be terminated with @code{\!}
+@cindex "!@@@code{\"!}
+. 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}
+@cindex spanrequest@@@code{\spanrequest}
+
+@end quotation
+
+Define a spanning request. The parameter is either -1
+(@code{\start}
+@cindex start@@@code{\start}
+) or 1 (@code{\stop}
+@cindex stop@@@code{\stop}
+) and
+ 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{:}[]' after the note. The length must be at
+least 8. A 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}
+@cindex abbrev@@@code{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 c'> <b d' > <c' e' >
+ <{a b c'}{c' d' e'}>
+ }
+@end mudela
+
+
+
+@cindex context selection
+
+@quotation
+
+ @code{\context}
+@cindex context@@@code{\context}
+
+ [@code{=} ]
+@end quotation
+
+Interpret within a context of type .
+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}
+
+@cindex notes@@@code{\notes}
+ , @code{\chords}
+@cindex chords@@@code{\chords}
+
+, and @code{\lyrics}
+@cindex lyrics@@@code{\lyrics}
+ .
+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}
+@cindex sequential@@@code{\sequential}
+
+ @code{@{} @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{@{} @code{@}}
+@end quotation
+
+
+
+@cindex simultaneous music
+
+@cindex <@@@code{<}
+
+@cindex >@@@code{>}
+
+@quotation
+
+ @code{\simultaneous}
+@cindex simultaneous@@@code{\simultaneous}
+
+ @code{@{} @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{<} @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 <c''4 e''>
+ \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 <c''4 e''>
+ \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}
+@cindex relative@@@code{\relative}
+
+@end quotation
+
+The octave of notes that appear in 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
+.
+
+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 <c e g>
+ <c' e g>
+ <c, e' g>
+ }
+@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}
+@cindex notes@@@code{\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
+
+ [][@code{-}][@code{^}][@code{/}].
+@end quotation
+
+ should be the tonic note of the chord, and
+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}
+@cindex aug@@@code{aug}
+' which
+raises the 5th, `@code{dim}
+@cindex dim@@@code{dim}
+' which lowers the 5th,
+`@code{maj}
+@cindex maj@@@code{maj}
+' which adds a raised 7th, and `@code{sus}
+@cindex sus@@@code{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{/}
+@cindex /@@@code{/}
+' 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}
+@cindex times@@@code{\times}
+
+@end quotation
+
+The duration of 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}
+@cindex grace@@@code{\grace}
+
+@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}
+@cindex graceAlignPosition@@@code{graceAlignPosition}
+.
+
+When grace music is interpreted, a score-within-a-score is set up:
+ 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}
+@cindex stemStyle@@@code{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}
+@cindex grace@@@code{\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}
+@cindex repeat@@@code{\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}
+@end quotation
+
+If you have alternative endings, you may add
+
+@quotation
+
+ @code{\alternative}
+@cindex alternative@@@code{\alternative}
+
+ @code{@{}
+
+ ... @code{@}}
+@end quotation
+
+where each 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}
+@cindex transpose@@@code{\transpose}
+. The syntax is
+
+@quotation
+
+ @code{\transpose}
+@end quotation
+
+This means that middle C in is transposed to
+.
+
+@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}.
+
+@cindex addlyrics@@@code{\addlyrics}
+ The syntax for this is
+
+@quotation
+
+ @code{\addlyrics}
+@end quotation
+
+This means that both and are
+interpreted, but that every non-command atomic music expression
+(``every syllable'') in is interpreted using timing
+of .
+
+If the property @code{automaticMelismata}
+@cindex automaticMelismata@@@code{automaticMelismata}
+ is set in the
+context of , 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 .
+
+
+
+
+@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}
+@cindex Voice.noAutoBeaming@@@code{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}
+@cindex Voice.beamAutoEnd@@@code{Voice.beamAutoEnd}
+ property. To end beams every
+quarter note, for example, you could set
+@code{Voice.beamAutoEnd}
+@cindex Voice.beamAutoEnd@@@code{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}
+@cindex Voice.beamAutoBegin@@@code{Voice.beamAutoBegin}
+.
+
+To allow different settings for different time signatures, these
+property names can start with `@code{time}@code{_}' to
+restrict the definition to `@code{/}' 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}
+@cindex ChordNames@@@code{ChordNames}
+
+and @code{ChordNameVoice}
+@cindex ChordNameVoice@@@code{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{<d f g> <e g b>}
+ }
+ \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 {
+ <e'1 g' c''>
+ }
+ \context Thread \notes {
+ <e'1 g' c''>
+ }
+ >
+@end mudela
+
+If you want inversions to be recognized, you must set the property
+@code{ChordNames.chordInversion}
+@cindex ChordNames.chordInversion@@@code{ChordNames.chordInversion}
+:
+
+@mudela[fragment,verbatim,center]
+ <
+ \property Score.chordInversion = 1
+ \context ChordNameVoice \notes {
+ <e'1 g' c''>
+ }
+ \context Thread \notes {
+ <e'1 g' c''>
+ }
+ >
+@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} ' expression is encountered
+during the interpretation phase, the argument will be
+interpreted with a context of type . 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 <d4 \context Staff = "another" e4> 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} ...
+@end quotation
+
+When the interpretation of this music expression starts, the context
+for , , 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'' {
+ <c4> <d4> <e4>
+ }
+ }
+
+@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}
+@cindex Grace@@@code{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}
+@cindex LyricVoice@@@code{LyricVoice}
+ @*
+ Corresponds to a voice with lyrics. Handles the printing of a
+ single line of lyrics.
+
+ @item @code{Thread}
+@cindex Thread@@@code{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}
+@cindex Voice@@@code{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}
+@cindex ChordNamesVoice@@@code{ChordNamesVoice}
+ @*
+ A voice with chord names. Handles printing of a line of chord
+ names.
+
+ @item @code{ChordNames}
+@cindex ChordNames@@@code{ChordNames}
+ @*
+ Typesets chord names. Can contain @code{ChordNamesVoice}
+ contexts.
+
+ @item @code{Lyrics}
+@cindex Lyrics@@@code{Lyrics}
+ @*
+ Typesets lyrics. It can contain @code{LyricVoice} contexts.
+
+ @item @code{Staff}
+@cindex Staff@@@code{Staff}
+ @*
+ Handles clefs, bar lines, keys, accidentals. It can contain
+ @code{Voice} contexts.
+
+ @item @code{RhythmicStaff}
+@cindex RhythmicStaff@@@code{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}
+@cindex GrandStaff@@@code{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}
+@cindex PianoStaff@@@code{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}
+@cindex StaffGroup@@@code{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}
+@cindex ChoirStaff@@@code{ChoirStaff}
+ @*
+ Identical to @code{StaffGroup} except that the contained staffs
+ are not connected vertically.
+
+ @item @code{Score}
+@cindex Score@@@code{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
+
+ @code{=}
+@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}
+@cindex textStyle@@@code{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}
+@cindex noteheadStyle@@@code{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}
+@cindex stemStyle@@@code{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}
+@cindex abbrev@@@code{abbrev}
+ @*
+ Set length for tremolo to be used if no length is explicitly
+ specified.
+
+ @item @code{articulationScriptPadding}
+@cindex articulationScriptPadding@@@code{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}
+
+@cindex articulationScriptVerticalDirection@@@code{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}
+@cindex beamAuto@@@code{beamAuto}
+ @*
+ If set to 1 then beams are not generated automatically.
+
+ @item @code{beamAutoEnd}
+@cindex beamAutoEnd@@@code{beamAutoEnd}
+ @*
+ Specifies when automatically generated beams can end. See
+ section @xref{autobeam}.
+
+ @item @code{beamAutoBegin}
+@cindex beamAutoBegin@@@code{beamAutoBegin}
+ @*
+ Specifies when automatically generated beams can start. See
+ section @xref{autobeam}.
+
+ @item @code{beamquantisation}
+@cindex beamquantisation@@@code{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}
+@cindex beamposfree@@@code{\beamposfree}
+,
+ @code{\beamposnormal}
+@cindex beamposnormal@@@code{\beamposnormal}
+, and
+ @code{\beampostraditional}
+@cindex beampostraditional@@@code{\beampostraditional}
+.
+
+ @item @code{beamslopedamping}
+@cindex beamslopedamping@@@code{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}
+@cindex beamslopeproportional@@@code{\beamslopeproportional}
+,
+ @code{\beamslopedamped}
+@cindex beamslopedamped@@@code{\beamslopedamped}
+, and
+ @code{\beamslopezero}
+@cindex beamslopezero@@@code{\beamslopezero}
+ each set the
+ corresponding value.
+
+ @item @code{dynamicDirection}
+@cindex dynamicDirection@@@code{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}
+@cindex dynamicStyle@@@code{dynamicStyle}
+ @*
+ Set the text style for dynamics.
+
+ @item @code{fontSize}
+@cindex fontSize@@@code{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}
+@cindex forceHorizontalShift@@@code{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.
+
+
+ @item @code{horizontalNoteShift}
+@cindex horizontalNoteShift@@@code{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}
+@cindex shift@@@code{\shift}
+ is defined to
+ enable this. Traditionally, the outer chords (the upmost and
+ downmost voices), should have no @code{horizontalNoteShift}.
+
+ @item @code{markScriptPadding}
+@cindex markScriptPadding@@@code{markScriptPadding}
+ @*
+ Determines the extra space added between the mark and the closest
+ staff line or note.
+
+ @item @code{markDirection}
+@cindex markDirection@@@code{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}
+@cindex midiInstrument@@@code{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}
+@cindex oldTieBehavior@@@code{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}
+@cindex restStyle@@@code{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}
+@cindex scriptHorizontal@@@code{scriptHorizontal}
+ @*
+ Put scripts left or right of note heads. Support for this is
+ limited. Accidentals will collide with scripts.
+
+ @item @code{slurVerticalDirection}
+@cindex slurVerticalDirection@@@code{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}
+@cindex slurup@@@code{\slurup}
+,
+ @code{\slurdown}
+@cindex slurdown@@@code{\slurdown}
+, and
+ @code{\slurboth}
+@cindex slurboth@@@code{\slurboth}
+ are available.
+
+ @item @code{slurDash}
+@cindex slurDash@@@code{slurDash}
+ @*
+ Set to 0 for normal slurs, 1 for dotted slurs, and a
+ larger value for dashed slurs. Identifiers
+ @code{\slurnormal}
+@cindex slurnormal@@@code{\slurnormal}
+ and
+ @code{\slurdotted}
+@cindex slurdotted@@@code{\slurdotted}
+ are predefined to set the
+ first two settings.
+
+@item @code{stemLength}
+@cindex stemLength@@@code{stemLength}
+ @*
+ Set length of stems. Unit is `@code{interline}/2', so
+ @code{stemLength} defaults to 7.
+
+ @item @code{stemLeftBeamCount}
+@cindex stemLeftBeamCount@@@code{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}
+@cindex stemRightBeamCount@@@code{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}
+@cindex tieVerticalDirection@@@code{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}
+@cindex transposing@@@code{transposing}
+ @*
+ Transpose the MIDI output. Set this property to the number of
+ half-steps to transpose by.
+
+
+ @item @code{textEmptyDimension}
+@cindex textEmptyDimension@@@code{textEmptyDimension}
+ @*
+ If set to 1 then text placed above or below the staff is
+ assumed to have zero width.
+
+ @item @code{textStyle}
+@cindex textStyle@@@code{textStyle}
+ @*
+ Set the text style for superscripts and subscripts. See above
+ for list of text styles.
+
+ @item @code{textScriptPadding}
+@cindex textScriptPadding@@@code{textScriptPadding}
+ @*
+ Determines the extra space added between superscripted resp.
+ subscripted text and the closest staff line or note.
+
+ @item @code{verticalDirection}
+@cindex verticalDirection@@@code{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}
+@cindex stemdown@@@code{\stemdown}
+, @code{\stemup}
+@cindex stemup@@@code{\stemup}
+,
+ and @code{\stemboth}
+@cindex stemboth@@@code{\stemboth}
+ identifiers set this
+ property.
+
+
+ @item @code{tupletDirection}
+@cindex tupletDirection@@@code{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}
+@cindex tupletVisibility@@@code{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}
+@cindex barNonAuto@@@code{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}
+@cindex barNumberDirection@@@code{barNumberDirection}
+ @*
+ Set to @code{\up} or @code{\down} to put bar numbers above or below
+ the staff.
+
+ @item @code{barNumberHangOnClef}
+@cindex barNumberHangOnClef@@@code{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}
+@cindex barNumberScriptPadding@@@code{barNumberScriptPadding}
+ @*
+ Sets extra space between the bar number and the bar it labels.
+
+ @item @code{barSize}
+@cindex barSize@@@code{barSize}
+ @*
+ Specify the height of the bar lines if it should be different
+ than the staff height.
+
+ @item @code{barAtLineStart}
+@cindex barAtLineStart@@@code{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}
+@cindex clefStyle@@@code{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}
+@cindex createKeyOnClefChange@@@code{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}
+@cindex createInitdefaultClef@@@code{createInitdefaultClef}
+ @*
+ Specify whether clefs are created on default? (Doesn't seem to
+ do anything.)
+
+ @item @code{defaultClef}
+@cindex defaultClef@@@code{defaultClef}
+ @*
+ Determines the default clef. See @code{\clef} keyword.
+
+ @item @code{markHangOnClef}
+@cindex markHangOnClef@@@code{markHangOnClef}
+ @*
+ Set to 1 to cause marks to appear by clefs instead of by bar
+ lines. Deprecated, use is not recommended.
+
+ @item @code{marginDirection}
+@cindex marginDirection@@@code{marginDirection}
+ @*
+ Set to @code{\left} or @code{\right} to specify location of
+ marginal scripts.
+
+ @item @code{marginScriptPadding}
+@cindex marginScriptPadding@@@code{marginScriptPadding}
+ @*
+ Specify extra space for marginal scripts.
+
+ @item @code{forgetAccidentals}
+@cindex forgetAccidentals@@@code{forgetAccidentals}
+ @*
+ Causes accidentals to be printed at every note instead of
+ remembered for the duration of a measure.
+
+ @item @code{noResetKey}
+@cindex noResetKey@@@code{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}
+@cindex staffLineLeading@@@code{staffLineLeading}
+ @*
+ Specifies the distance (in points) between lines of the staff.
+
+ @item @code{numberOfStaffLines}
+@cindex numberOfStaffLines@@@code{numberOfStaffLines}
+ @*
+ Specifies the number of staff lines. The default is 5.
+
+ @item @code{postBreakPadding}
+@cindex postBreakPadding@@@code{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}
+@cindex noVoltaBraces@@@code{noVoltaBraces}
+ @*
+ Set to true to suppress the printing of brackets over alternate
+ endings specified by the command @code{\alternative}.
+
+ @item @code{numberOfStaffLines}
+@cindex numberOfStaffLines@@@code{numberOfStaffLines}
+ @*
+ Sets the number of lines that the staff has.
+
+ @item @code{barAlways}
+@cindex barAlways@@@code{barAlways}
+ @*
+ If set to 1 a bar line is drawn after each note.
+
+ @item @code{defaultBarType}
+@cindex defaultBarType@@@code{defaultBarType}
+ @*
+ Sets the default type of bar line. See Section @xref{barlines}
+ for a list of available bar types.
+
+ @item @code{instrument}, @code{instr}
+
+@cindex instrument@@@code{instrument}
+
+@cindex instr@@@code{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}
+@cindex keyOctaviation@@@code{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}
+@cindex timeSignatureStyle@@@code{timeSignatureStyle}
+ @*
+ Changes the default two-digit layout for time signatures. The
+ following values are recognized:
+
+ @table @samp
+ @item @code{C}
+@cindex C@@@code{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}
+@cindex old@@@code{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}
+@cindex 1@@@code{1}
+ @*
+ All time signatures are typeset with a single
+ digit, e.g. 3/2 is written as 3.
+
+ @item
+@cindex CM/N@@@code{CM/N}
+@code{C}@code{/},
+
+@cindex oldM/N@@@code{oldM/N}
+@code{old}@code{/} or
+ @code{old6/8alt}
+@cindex old6/8alt@@@code{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}
+@cindex voltaSpannerDuration@@@code{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}
+@cindex alignmentReference@@@code{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}
+@cindex maxVerticalAlign@@@code{maxVerticalAlign}
+ @*
+ Set the maximum vertical distance between staffs.
+
+ @item @code{minVerticalAlign}
+@cindex minVerticalAlign@@@code{minVerticalAlign}
+ @*
+ Set the minimum vertical distance between staffs.
+@end table
+
+
+@cindex properties!Score
+
+@table @samp
+ @item @code{skipBars}
+@cindex skipBars@@@code{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}
+@cindex chordInversion@@@code{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 @{} [] @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} @code{,} @code{,}
+ @code{,} ... @code{;}
+ @end quotation
+
+
+@cindex shape@@@code{\shape}
+
+ Each pair of and 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
+
+ @code{=} @code{\font}
+@cindex font@@@code{\font}
+
+ @end quotation
+
+ is an integer describing the font to be used.
+ 0 is the default font. 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}
+@cindex papersize@@@code{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}
+@cindex indent@@@code{indent}
+ @*
+ The indentation of the first line of music.
+
+ @item @code{interline}
+@cindex interline@@@code{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}
+@cindex linewidth@@@code{linewidth}
+ @*
+ Sets the width of the lines. If set to -1.0, a single
+ unjustified line is produced.
+
+ @item @code{output}
+@cindex output@@@code{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}
+@cindex rulethickness@@@code{rulethickness}
+ @*
+ Determines the thickness of staff and bar lines.
+
+ @item @code{castingalgorithm}
+@cindex castingalgorithm@@@code{castingalgorithm}
+ @*
+ The algorithm to use for breaking lines. Choices are
+ @code{\Gourlay}
+@cindex Gourlay@@@code{\Gourlay}
+ for a TeX-like dynamic
+ programming algorithm, and @code{\Wordwrap}
+@cindex Wordwrap@@@code{\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{@{}
+
+ @code{@}}
+@end quotation
+
+ can be an identifier or of the form
+
+@quotation
+
+ @code{\type} @code{;}
+@end quotation
+
+ is one of
+
+@table @samp
+ @item @code{Engraver_group_engraver}
+@cindex Engraver_group_engraver@@@code{Engraver_group_engraver}
+ @*
+ The standard cooperation engraver.
+
+ @item @code{Score_engraver}
+@cindex Score_engraver@@@code{Score_engraver}
+ @*
+ This is cooperation module that should be in the top level context.
+
+ @item @code{Grace_engraver_group}
+@cindex Grace_engraver_group@@@code{Grace_engraver_group}
+ @*
+ This is a special cooperation module (resembling
+ @code{Score_engraver}) that is used to created an embedded
+ `miniscore'.
+@end table
+
+ is a list of items where each item is
+one of
+
+@itemize @bullet
+ @item @code{\consists} @code{;} @*
+ Add 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} @code{;} @*
+ Analogous to @code{\consists}, but makes sure that
+ 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} @code{;} @*
+ Add to the list of context this context can
+ contain. The first listed context the context to create by
+ default.
+
+ @item @code{\remove} @code{;} @*
+ Remove a previously added (with @code{\consists}) engraver.
+
+ @item @code{\name} @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 @code{=} @code{;} @*
+ A property assignment. It is allowed to use reals for
+ .
+@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}
+@cindex StaffContext@@@code{StaffContext}
+ @*
+ Default Staff context.
+
+ @item @code{RhythmicStaffContext}
+@cindex RhythmicStaffContext@@@code{RhythmicStaffContext}
+ @*
+ Default RhythmicStaff context.
+
+ @item @code{VoiceContext}
+@cindex VoiceContext@@@code{VoiceContext}
+ @*
+ Default Voice context.
+
+ @item @code{ScoreContext}
+@cindex ScoreContext@@@code{ScoreContext}
+ @*
+ Default Score context.
+
+ @item @code{ScoreWithNumbers}
+@cindex ScoreWithNumbers@@@code{ScoreWithNumbers}
+ @*
+ Score context with numbering at the Score level.
+
+ @item @code{BarNumberingStaffContext}
+@cindex BarNumberingStaffContext@@@code{BarNumberingStaffContext}
+ @*
+ Staff context with numbering at the Staff level.
+
+ @item @code{HaraKiriStaffContext}
+@cindex HaraKiriStaffContext@@@code{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}
+@cindex OrchestralPartStaffContext@@@code{OrchestralPartStaffContext}
+
+ @item @code{OrchestralScoreContext}
+@cindex OrchestralScoreContext@@@code{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}
+@cindex Bar_engraver@@@code{Bar_engraver}
+ @*
+ Engraves bar lines. Normally in @code{Staff} and
+ @code{RhythmicStaff}.
+
+ @item @code{Bar_number_engraver}
+@cindex Bar_number_engraver@@@code{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}
+@cindex Beam_engraver@@@code{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}
+
+@cindex Beam_req_swallow_translator@@@code{Beam_req_swallow_translator}
+ @*
+ Swallows beam requests. In @code{LyricVoice}.
+
+ @item @code{Chord_name_engraver}
+@cindex Chord_name_engraver@@@code{Chord_name_engraver}
+ @*
+ Engraves chord names. Normally in @code{ChordNameVoice} .
+
+ @item @code{Chord_tremolo_engraver}
+@cindex Chord_tremolo_engraver@@@code{Chord_tremolo_engraver}
+
+ @item @code{Clef_engraver}
+@cindex Clef_engraver@@@code{Clef_engraver}
+ @*
+ Engraves the clef symbol. Normally in @code{Staff}.
+
+ @item @code{Collision_engraver}
+@cindex Collision_engraver@@@code{Collision_engraver}
+
+ @item @code{Dot_column_engraver}
+@cindex Dot_column_engraver@@@code{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}
+@cindex Dynamic_engraver@@@code{Dynamic_engraver}
+ @*
+ Engraves dynamics symbols. Normally in @code{Voice}.
+
+ @item @code{Font_size_engraver}
+@cindex Font_size_engraver@@@code{Font_size_engraver}
+
+ @item @code{Key_engraver}
+@cindex Key_engraver@@@code{Key_engraver}
+ @*
+ Engraves the key signature. Normally in @code{Staff}.
+
+ @item @code{Local_key_engraver}
+@cindex Local_key_engraver@@@code{Local_key_engraver}
+
+ @item @code{Lyric_engraver}
+@cindex Lyric_engraver@@@code{Lyric_engraver}
+ @*
+ Engraves lyrics. Normally in @code{LyricVoice}.
+
+ @item @code{Multi_measure_rest_engraver}
+
+@cindex Multi_measure_rest_engraver@@@code{Multi_measure_rest_engraver}
+ @*
+ Engraves multi-measure rests that are produced with @code{R}.
+ Normally in @code{Voice}.
+
+ @item @code{Piano_bar_engraver}
+@cindex Piano_bar_engraver@@@code{Piano_bar_engraver}
+
+ @item @code{Pitch_squash_engraver}
+@cindex Pitch_squash_engraver@@@code{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}
+
+@cindex Priority_horizontal_align_engraver@@@code{Priority_horizontal_align_engraver}
+
+ @item @code{Repeat_engraver}
+@cindex Repeat_engraver@@@code{Repeat_engraver}
+ @*
+ Handles repeats? In @code{Staff} and @code{RhythmicStaff}.
+
+ @item @code{Rest_collision_engraver}
+@cindex Rest_collision_engraver@@@code{Rest_collision_engraver}
+ @*
+ Handles collisions of rests. In @code{Staff}.
+
+ @item @code{Rest_engraver}
+@cindex Rest_engraver@@@code{Rest_engraver}
+ @*
+ Engraves rests. Normally in @code{Voice}.
+
+ @item @code{Rhythmic_column_engraver}
+@cindex Rhythmic_column_engraver@@@code{Rhythmic_column_engraver}
+
+ @item @code{Score_priority_engraver}
+@cindex Score_priority_engraver@@@code{Score_priority_engraver}
+
+ @item @code{Script_engraver}
+@cindex Script_engraver@@@code{Script_engraver}
+ @*
+ Handles note ornaments generated by @code{\script}. Normally in
+ @code{Voice}.
+
+ @item @code{Separating_line_group_engraver}
+
+@cindex Separating_line_group_engraver@@@code{Separating_line_group_engraver}
+
+ @item @code{Skip_req_swallow_translator}
+
+@cindex Skip_req_swallow_translator@@@code{Skip_req_swallow_translator}
+
+ @item @code{Slur_engraver}
+@cindex Slur_engraver@@@code{Slur_engraver}
+ @*
+ Engraves slurs. Normally in @code{Voice}.
+
+ @item @code{Span_bar_engraver}
+@cindex Span_bar_engraver@@@code{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}
+@cindex Span_score_bar_engraver@@@code{Span_score_bar_engraver}
+
+ @item @code{Staff_group_bar_engraver}
+@cindex Staff_group_bar_engraver@@@code{Staff_group_bar_engraver}
+
+ @item @code{Staff_margin_engraver}
+@cindex Staff_margin_engraver@@@code{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}
+@cindex Staff_sym_engraver@@@code{Staff_sym_engraver}
+
+ @item @code{Stem_engraver}
+@cindex Stem_engraver@@@code{Stem_engraver}
+ @*
+ Engraves stems. Normally in @code{Voice}.
+
+ @item @code{Ties_engraver}
+@cindex Ties_engraver@@@code{Ties_engraver}
+ @*
+ Engraves ties. Normally in @code{Voice}.
+
+ @item @code{Time_signature_engraver}
+@cindex Time_signature_engraver@@@code{Time_signature_engraver}
+ @*
+ Engraves the time signature. Normally in @code{Staff} and
+ @code{RhythmicStaff}.
+
+ @item @code{Timing_engraver}
+@cindex Timing_engraver@@@code{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}
+@cindex Tuplet_engraver@@@code{Tuplet_engraver}
+ @*
+ Engraves tuplet brackets? In @code{Staff}.
+
+ @item @code{Vertical_align_engraver}
+@cindex Vertical_align_engraver@@@code{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}
+@cindex Staff.midiInstrument@@@code{Staff.midiInstrument}
+ property or, if that property is
+not set, the @code{Staff.instrument}
+@cindex Staff.instrument@@@code{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}
+@cindex Performer_group_performer@@@code{Performer_group_performer}
+
+ @item @code{Score_performer}
+@cindex Score_performer@@@code{Score_performer}
+
+ @item @code{Staff_performer}
+@cindex Staff_performer@@@code{Staff_performer}
+
+@end table
+
+The performers for MIDI translators are:
+
+@table @samp
+ @item @code{Key_performer}
+@cindex Key_performer@@@code{Key_performer}
+
+ @item @code{Time_signature_performer}
+@cindex Time_signature_performer@@@code{Time_signature_performer}
+
+ @item @code{Note_performer}
+@cindex Note_performer@@@code{Note_performer}
+
+ @item @code{Lyric_performer}
+@cindex Lyric_performer@@@code{Lyric_performer}
+
+ @item @code{Swallow_performer}
+@cindex Swallow_performer@@@code{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}
+@cindex break@@@code{\break}
+ @*
+ Force a line break in music by using a large argument for the
+ keyword @code{\penalty}.
+
+ @item @code{\center}
+@cindex center@@@code{\center}
+ @*
+ Used for setting direction properties. Equals 0.
+
+ @item @code{\down}
+@cindex down@@@code{\down}
+ @*
+ Used for setting direction setting properties. Is equal
+ to -1.
+
+ @item @code{\free}
+@cindex free@@@code{\free}
+ @*
+ Used for setting direction setting properties. Is equal
+ to 0.
+
+ @item @code{\left}
+@cindex left@@@code{\left}
+ @*
+ Used for setting text alignment property. Is equal to -1.
+
+ @item @code{\nobreak}
+@cindex nobreak@@@code{\nobreak}
+ @*
+ Prevent a line break in music by using a large negative argument
+ for the keyword @code{\penalty}.
+
+ @item @code{\none}
+@cindex none@@@code{\none}
+ @*
+ Used for setting @code{Score.beamslopedamping} and
+ @code{Score.beamquantisation} properties. Is equal to 0.
+
+ @item @code{\normal}
+@cindex normal@@@code{\normal}
+ @*
+ Used for setting @code{Score.beamslopedamping} and
+ @code{Score.beamquantisation} properties. Is equal to 1.
+
+ @item @code{\normalkey}
+@cindex normalkey@@@code{\normalkey}
+ @*
+ Select normal key signatures where each octave has the same key
+ signature. This sets the @code{Staff.keyoctaviation} property.
+
+ @item @code{\right}
+@cindex right@@@code{\right}
+ @*
+ Used for setting text alignment property. Is set to 1.
+
+ @item @code{\shiftoff}
+@cindex shiftoff@@@code{\shiftoff}
+ @*
+ Disable horizontal shifting of note heads that collide. Sets the
+ @code{Voice.horizontalNoteShift} property.
+
+ @item @code{\shifton}
+@cindex shifton@@@code{\shifton}
+ @*
+ Enable note heads that collide with other note heads to be
+ shifted horiztonally. Sets the @code{Voice.horizontalNoteShift}
+ property.
+
+ @item @code{\slurboth}
+@cindex slurboth@@@code{\slurboth}
+ @*
+ Allow slurs to be above or below notes. This sets the
+ @code{Voice.slurVerticalDirection} property.
+
+ @item @code{\slurdown}
+@cindex slurdown@@@code{\slurdown}
+ @*
+ Force slurs to be below notes. This sets the
+ @code{Voice.slurVerticalDirection} property.
+
+ @item @code{\slurup}
+@cindex slurup@@@code{\slurup}
+ @*
+ Force slurs to be above notes. This sets the
+ @code{Voice.slurVerticalDirection} property.
+
+ @item @code{\specialkey}
+@cindex specialkey@@@code{\specialkey}
+ @*
+ Allow key signatures do differ in different octaves. This sets
+ the @code{Staff.keyoctaviation} property.
+
+ @item @code{\stemboth}
+@cindex stemboth@@@code{\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}
+@cindex stemdown@@@code{\stemdown}
+ @*
+ Force stems, beams, and slurs to point down. This sets the
+ @code{Voice.verticalDirection} property.
+
+ @item @code{\stemup}
+@cindex stemup@@@code{\stemup}
+ @*
+ Force stems, beams and slurs to point up. This sets the
+ @code{Voice.verticalDirection} property.
+
+ @item @code{\traditional}
+@cindex traditional@@@code{\traditional}
+ @*
+ Used for setting the @code{Score.beamquantisation} property. Is
+ equal to 2.
+
+ @item @code{\up}
+@cindex up@@@code{\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.}' that doesn't
+have the `@file{.ly}' extension, then LilyPond will look for a file
+called `@file{init.}' and process this file. The file
+`@file{init.}' 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
+++ /dev/null
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(\
- whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
- whenhtml(sc(ARG1))\
-)
-
-def(indexcode)(1)(cindex(ARG1@code(ARG1)))
-def(indexandcode)(1)(code(ARG1)indexcode(ARG1))
-def(keyindex)(1)(cindex(ARG1@code(\ARG1)))
-
-redef(code)(1)(tt(ARG1))
-redef(cindex)(1)(\
- whenlatex(latexcommand(\index{)ARG1+latexcommand(}))\
- whentexinfo(XXnl()texinfocommand(@cindex )ARG1XXnl())\
-)
-
-
-COMMENT(
- BUGS:
-
- restStyle=mensural doesn't seem to work (lots of characters not found
- for rests.fly)
-
- TODO:
-
- accordeon symbols
- Music expression / music expression
- property lists should be alphabetic.
-
-)
-
-
-COMMENT(
- This document contains Mudela fragments. You need at least
- Yodl-1.30.18 to convert this to tex or html.
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
- \setlength{\topmargin}{-0.25in}
- \setlength{\textheight}{9in}
- \setlength{\textwidth}{5.875in}
- \setlength{\oddsidemargin}{0.25in}
- \setlength{\evensidemargin}{0.25in}
- \input mudela-book
- \usepackage{makeidx}
- \makeindex
-)
-
-whentexinfo(notableofcontents())
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-article(LilyPond 1.2.0 Reference Manual)
- (Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
- (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-COMMENT(
- latexcommand(\def\texttt#1{\tt #1})
- latexcommand(\def\textbf#1{\bf #1})
-)
-
-COMMENT(urg, texinfo include breaks)
-whenhtml(includefile(html-disclaimer.yo-urg))
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Overview)
-
-This nop(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 em(Music
-Definition Language) or em(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.)
-
-em(Mudela) is a language that allows you to
-
-itemize(
- it() create musical expressions by combining pitches, durations
- it() output those musical expressions to various formats
- it() give those musical expressions and output definitions names, so
- you can enter them in manageable chunks.
-)
-
-em(Mudela) aims to define a piece of music completely, both from
-typesetting and from a performance point of view.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Top level)
-cindex(top level)
-
-This section describes what you may enter at top level.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Score definitions)
-cindex(score definition)
-
-The output is generated combining a music expression with an output
-definition. A score block has the following syntax:
-
-quote(
- code(\score {) var(musicexpr) var(outputdefs) code(})
-)
-
-var(outputdefs) are zero or more output definitions. If no output
-definition is supplied, the default code(\paper) block will be added.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Information header)
-cindex(header)
-keyindex(header)
-
-The syntax is
-
-quote(
- code(\header) code({) var(key1) = var(val1);
- var(key2) = var(val2); ellipsis() code(})
-)
-
-A header describes the file's contents. It can also appear in a
-code(\score) block. Tools like indexandcode(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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Setting notenames and chordnames)
-label(notenames)
-
-Note name tables can be specified using
-
-quote(
- code(\notenames)keyindex(notenames)
- code({) var(assignmentlist) code(})
-)
-
-var(assignmentlist) is a list of definitions of the form
-
-quote(
- var(name) = var(pitch)
-)
-
-Chord modifiers can be set analogously, with
-code(\chordmodifiers)keyindex(chordmodifiers).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Output definitions)
-
-A code(\paper) block at top level sets the default paper block. A
-code(\midi) block at top level works similarly.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(GUILE and Scheme)
-
-LilyPond contains a Scheme interpreter (the GUILE library) for
-internal use. The following commands access the interpreter
-directly.
-
-quote(
- code(\scm)keyindex(scm) var(scheme) code(;)
-)
-
-Evaluates the specified Scheme code. The result is discarded.
-
-quote(
- code(\scmfile)keyindex(scmfile) var(filename) code(;)
-)
-
-Reads Scheme code from the specified file. The result is discarded.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Identifiers)
-
-Identifier assignments may appear at top level. Semicolons are
-forbidden after top level assignments.
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Lexical conventions)
-cindex(lexical conventions)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Comments)
-cindex(comment)
-indexcode(%)
-whenlatex(cindex(%A@latexcommand(\texttt{\%\textbraceleft})))
-whenlatex(cindex(%B@latexcommand(\texttt{\%\textbraceright})))
-
-A one line comment is introduced by a `code(%)' character.
-Block comments are started by `code(%{)' and ended by `code(%})'.
-They cannot be nested.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Keywords)
-cindex(keyword)
-
-Keywords start with a backslash, followed by a number of lower case
-alphabetic characters. These are all the keywords.
-
-latexcommand(\begin{raggedright})
-quote(
- 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)
-)
-latexcommand(\end{raggedright})
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Integers)
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Reals)
-cindex(real)
-
-Formed from an optional minus sign and a sequence of digits followed
-by a em(required) decimal point and an optional exponent such as
-code(-1.2e3). Reals can be built up using the usual operations:
-`indexandcode(+)', `indexandcode(-)', `indexandcode(*)', and
-`indexandcode(/)', 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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(String)
-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 bind(section)ref(modes) for details on unquoted strings; their
-interpretation varies depending on the situation. Strings can be
-concatenated with the `code(+)' operator.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tokenizer commands)
-
-The tokenizer accepts the following commands. They can appear
-anywhere.
-
-quote(
- code(\maininput)keyindex(maininput)
-)
-
-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.
-
-quote(
- code(\include)keyindex(include) var(file)
-)
-
-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,
-
-quote(
- code(\version)keyindex(version) var(string) code(;)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch Names in Other Languages)
-cindex(other languages)
-label(notelang)
-
-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:
-
-quote(
-verb( 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)
-)
-
-Pitch names can be redefined using the
-code(\notenames)keyindex(notenames) command, see
-bind(subsection)ref(notenames).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Lexical modes)
-cindex(lexical modes)
-cindex(modes)
-label(modes)
-
-To simplify entering notes, lyrics, and chords, em(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.
-
-description(
- dit(Normal mode.)cindex(mode!normal)
- At the start of parsing, em(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.
-
- dit(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.
-
- dit(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.
-
- dit(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().
-
-COMMENT(
-DOEXPAND(muckslash)^etre % a word
-)
-
- quote(
-verb(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)
- )
-
- Since combinations of numbers and dots are used for indicating
- durations, you can not enter real numbers in this mode.
-)
-
-It is possible to create words that break the rules by prefixing them
-with the dollar sign `indexandcode($)'. 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.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Types)
-cindex(types and identifiers)
-
-em(Mudela) has a limited set of types:
-
-itemize(
- it() integers
- it() reals
- it() strings
- it() music expressions
- it() durations of notes and rests (specified with
- code(\notenames)keyindex(notenames))
- it() note name tables
- it() context definitions, part of output definitions. See
- bind(section)ref(contextdefs) for more information
- it() output definitions (like code(\paper)keyindex(paper) blocks
- and code(\midi)keyindex(midi) blocks)
- it() score definitions (code(\score)keyindex(score) blocks)
-)
-
-Type is a syntactical property: em(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 em(Mudela) file. Semicolons are forbidden after assignments
-appearing at top level but they are obligatory after assignments
-appearing in the code(\paper) block, see bind(Section)ref(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.
-
-quote(
- code(foo = \foo * 2.0)
-)
-
-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.)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Music expressions)
-cindex(music expressions)
-
-Music in em(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:
-
-quote(
- verb(\sequential { c4 d4 })
-)
-
-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
-bind(subsection)ref(atomicmusic). Compound music expressions are
-discussed in bind(subsection)ref(compoundmusic).
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Atomic music expressions)
-label(atomicmusic)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Pitch and duration)
-cindex(pitch)
-cindex(duration)
-
-The syntax for pitch specification is
-
-quote(
- code(\musicalpitch)keyindex(musicalpitch)
- code({) var(octave) var(note) var(shift) code(})
-)
-
-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
-bind(section)ref(notelang) for pitch names in different languages.
-
-The syntax for duration specification is
-
-quote(
- code(\duration)keyindex(duration)
- code({) var(length) var(dotcount) code(})
-)
-
-var(length) is the negative logarithm (base 2) of the duration:
-bind(1)is a half note, bind(2)is a quarter note, bind(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 bind(Section)ref(notelang) for details.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Note specification)
-label(notedesc)
-cindex(note specification)
-cindex(pitches)
-cindex(entering notes)
-
-A note specification has the form
-
-quote(
- var(pitch)[var(octavespec)][code(!)][code(?)][var(duration)]
-)
-
-The pitch of the note is specified by the note's name.
-
-subsubsect(Pitches)
-
-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
-bind(section)ref(notelang) for details.
-
-subsubsect(Octaves)
-
-The optional octave specification takes the form of a series of
-single quote (`indexandcode(')') characters or a series of comma
-(`indexandcode(,)') 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'')
-
-mudela(fragment,verbatim,center)( cis' dis' eis' fis' gis' ais' bis')
-
-mudela(fragment,verbatim,center)( ces' des' es' fes' ges' as' bes')
-
-mudela(fragment,verbatim,center)( cisis' eisis' gisis' aisis' beses')
-
-mudela(fragment,verbatim,center)( ceses' eses' geses' ases' beses')
-
-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 `indexandcode(?)' after the pitch.
-
-mudela(fragment,verbatim,center)( cis' d' e' cis' c'? d' e' c'!)
-
-subsubsect(Duration)
-cindex(duration)
-
-Durations are entered as their reciprocal values. For notes longer
-than a whole note, use identifiers.
-
-quote(
-verb(c'\longa c'\breve
-c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64)
-)
-
-quote(
-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";
- }
- }
-})
-)
-
-quote(
-verb(r\longa r\breve
-r1 r2 r4 r8 r16 r32 r64 r64)
-)
-
-quote(
-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";
- }
- }
-})
-)
-
-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 (`indexandcode(.)')
-to obtain dotted note lengths.
-
-mudela(fragment,verbatim,center)( a'4. b'4.)
-
-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.
-
-subsubsect(Rests)
-
-Rests are entered like notes, with note name `indexandcode(r)',
-or `indexandcode(R)'. There is also a note name `indexandcode(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.
-
-subsubsect(Lyrics syllables)
-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
-bind(section)ref(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 bind(section)ref(lyricprint).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Properties)
-cindex(properties)
-
-quote(
- code(\property)keyindex(property)
- var(contextname)code(.)var(propname) code(=) var(value)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Translator switches)
-cindex(translator switches)
-
-quote(
- code(\translator)keyindex(translator)
- var(contexttype) = var(name)
-)
-
-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.
-
-quote(
- code(\translator Staff = top) var(Music)
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Commands)
-cindex(commands)
-
-Commands are music expressions that have no duration.
-
-subsubsect(Key signatures)
-
-quote(
- code(\key)keyindex(key) var(pitch) var(type) code(;)
-)
-
-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 bind(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.
-
-quote(
- code(\keysignature)keyindex(keysignature) var(pitchseq) code(;)
-)
-
-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.
-
-subsubsect(Rehearsal marks)
-
-quote(
- code(\mark)keyindex(mark) var(unsigned) code(;) nl()
- code(\mark) var(string) code(;)
-)
-
-Prints a mark over or under (depending on the
-indexandcode(markDirection) property) the staff. You must add
-indexandcode(Mark_engraver) to either the Score or Staff context for
-this to work.
-
-subsubsect(Bar lines)
-label(barlines)
-
-quote(
- code(\bar)keyindex(bar) var(bartype) code(;)
-)
-
-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 bind(section)ref(sec:repeats).
-
-subsubsect(Timing commands)
-
-quote(
- code(\cadenza)keyindex(cadenza) var(togglevalue) code(;)
-)
-
-Music expression that toggles the automatic generation of bar lines.
-If var(togglevalue) bind(is)1, bar line generation is turned off. If
-var(togglevalue) bind(is)0, a bar line is immediately printed and
-automatic bar generation is turned on.
-
-quote(
- code(\time)keyindex(time) var(numerator)code(/)var(denominator) code(;)
-)
-
-Change the time signature. The default time signature bind(is)4/4.
-The time signature is used to generate bar lines.
-
-quote(
- code(\tempo)keyindex(tempo) var(duration) = var(perminute) code(;)
-)
-
-Used to specify the tempo. For example, `code(\tempo 4 = 76;)'
-requests output with bind(76)quarter notes per minute.
-
-quote(
- code(\partial)keyindex(partial) var(duration) code(;)
-)
-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.
-
-quote(
- code(|)indexcode(|)cindex(bar check)
-)
-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.
-
-subsubsect(Other commands)
-
-quote(
- code(\penalty)keyindex(penalty) var(int) code(;)
-)
-
-Discourage or encourage line breaks. See identifiers
-code(\break)keyindex(break) and code(\nobreak)keyindex(nobreak) in
-bind(section)ref(ident).
-
-quote(
- code(\clef)keyindex(clef) var(clefname) code(;)
-)
-
-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 bind(middle)C shown in each
-clef:
-
-quote(
-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\\texttt{\\_}8"
- }
- \paper {
- linewidth = 4.5 \in;
- }
-})
-)
-
-quote(
-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;
- }
-})
-)
-
-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)'.
-
-quote(
- code(\skip)keyindex(skip) var(duration) code(;)
-)
-
-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)'.
-
-subsubsect(Beams)
-cindex(beams)
-label(manualbeam)
-
-A beam is specified by surrounding the beamed notes with brackets
-`indexandcode([)' and `indexandcode(])'.
-
-mudela(fragment,verbatim,center)( [a'8 a'] [a'16 a' a' a'])
-
-Some more elaborate constructions:
-
-mudela(fragment,verbatim,center)( [a'16 <a' c''> c'' <a' c''>]
- \times 2/3 { [e'8 f' g'] })
-
-Beaming can be generated automatically; see bind(section)ref(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 bind(section)ref(tremolo)).
-
-mudela(fragment,verbatim,center)( [:16 e'1 g'] [:8 e'4 f'])
-
-mudela(fragment,verbatim,center)( c'4:32 [:16 c'8 d'8])
-
-subsubsect(Lyric helpers)
-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(-)'.
-
-subsubsect(Ties)
-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 `indexandcode(~)'.
-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' <c' e' g'> ~ <c' e' g'>)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Atomic music expressions: add-ons)
-
-[TODO: explain Requests]
-
-subsubsect(Articulations)
-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;
- }
- }
-)
-
-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 bind(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;
- }
- }
-)
-
-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).
-
-subsubsect(General text scripts)
-
-quote(
- code(\textscript)keyindex(textscript) var(text) var(style)
-)
-
-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:
-
-quote(
-verb(c4-\textscript "6" "finger"
-c4-\textscript "foo" "normal")
-)
-
-This is equivalent to `code(c4-6 c4-"foo")'.
-
-subsubsect(General scripts)
-cindex(scripts)
-
-quote(
- code(\script)keyindex(script) var(alias)
-)
-
-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).
-
-subsubsect(Slurs)
-cindex(slur)
-
-Slurs connects chords and try to avoid crossing stems. A slur is
-started with `code(CHAR(40))' and stopped with `code(CHAR(41))'. The
-starting `code(CHAR(40))' appears to the right of the first note in
-the slur. The terminal `code(CHAR(41))' 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)
-
-subsubsect(Crescendo)
-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 } >)
-
-subsubsect(General spanners)
-
-quote(
- code(\spanrequest)keyindex(spanrequest) var(startstop) var(type)
-)
-
-Define a spanning request. The var(startstop) parameter is bind(either)-1
-(code(\start)keyindex(start)) bind(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")
-
-The slur syntax with parentheses is a shorthand for this.
-
-COMMENT(came till here with indexifying)
-
-subsubsect(Tremolo marks)
-cindex(tremolo marks)
-label(tremolo)
-
-Tremolo marks can be printed on a single note by adding
-`code(:)[var(length)]' after the note. The length must be at
-bind(least)8. A var(length) value bind(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 indexandcode(abbrev) property if there was
-no last value.
-
-mudela(verbatim,fragment,center)( c'2:8 c':32)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Compound music expressions)
-cindex(compound music expressions)
-label(compoundmusic)
-
-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 c'> <b d' > <c' e' >
- <{a b c'}{c' d' e'}>
- })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-cindex(context selection)
-
-quote(
- code(\context)keyindex(context)
- var(contexttype) [code(=) var(contextname)] var(musicexpr)
-)
-
-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
-bind(section)ref(contextselection) bind(and)ref(contextdefs) for more
-information on interpretation contexts.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Music entry modes)
-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 bind(section)ref(modes) for more
-information on modes.
-
-More information on context selection can be found in
-bind(section)ref(contextselection).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Sequential music)
-cindex(sequential music)
-COMMENT(It's not possible to index `{' and `}' directly, thus we
- must construct it.)
-whenlatex(cindex(?A@latexcommand(\texttt{\textbraceleft})))
-whenlatex(cindex(?B@latexcommand(\texttt{\textbraceright})))
-
-quote(
- code(\sequential)keyindex(sequential)
- code({) var(musicexprlist) code(})
-)
-
-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:
-
-quote(
- code({) var(musicexprlist) code(})
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Simultaneous music)
-cindex(simultaneous music)
-indexcode(<)
-indexcode(>)
-
-quote(
- code(\simultaneous)keyindex(simultaneous)
- code({) var(musicexprlist) code(})
-)
-
-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:
-
-quote(
- code(<) var(musicexprlist) code(>)
-)
-
-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 <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- })
-
-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 <c''4 e''>
- \paper {
- linewidth = -1.;
- }
- })
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Relative Pitch Specification)
-cindex(relative pitch specification)
-label(relative)
-
-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.
-
-quote(
- code(\relative)keyindex(relative) var(startpitch) var(musicexpr)
-)
-
-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,
- })
-
-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'' })
-
-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 <c e g>
- <c' e g>
- <c, e' g>
- })
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Chord names)
-
-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 bind(section)ref(modes)).
-
-quote(
- var(tonic)[var(duration)][code(-)var(modifiers)]\
- [code(^)var(subtractions)]\
- [code(/)var(inversion)].
-)
-
-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 em(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(.)').
-
-quote(
-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
- }
-}
-)
-)
-
-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, `indexandcode(aug)' which
-raises the 5th, `indexandcode(dim)' which lowers the 5th,
-`indexandcode(maj)' which adds a raised 7th, and `indexandcode(sus)'
-which replaces the 5th with a 4th.
-
-quote(
-mudela(fragment,verbatim)(\transpose c'' {
- \chords {
- c1-m c-min7 c-maj c-aug c-dim c-sus
- }
-}
-)
-)
-
-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
- }
- })
-
-Chord inversions can be specified by appending `indexandcode(/)' 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
- }
- }
-)
-
-Throughout these examples, chords have been shifted around the staff
-using code(\transpose).
-
-You should not combine code(\relative) with named chords.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Tuplets)
-cindex(tuplets)
-
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
-
-quote(
- code(\times)keyindex(times) var(fraction) var(musicexpr)
-)
-
-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 bind(3)notes have the length bind(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)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Grace notes)
-cindex(grace notes)
-
-quote(
- code(\grace)keyindex(grace) var(musicexpr)
-)
-
-A grace note expression has bind(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
-indexandcode(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
-indexandcode(stemStyle) property.
-
-quote(
-mudela(fragment,verbatim)(\relative c'' {
- \grace c8 c4 \grace { [c16 c16] } c4
- \grace { \property Grace.stemStyle = "" c16 } c4
-}
-)
-)
-
-At present, nesting code(\grace)keyindex(grace) notes, e.g.
-
-quote(
- code(\grace { \grace c32 c16 } c4)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Repeats)
-cindex(repeats)
-label(sec:repeats)
-
-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.
-
-description(
- dit(unfolded) nl()
- Repeated music is fully written (played) out. Useful for MIDI
- output.
-
- dit(volta) nl()
- This is the normal notation: Repeats are not written out, but
- alternative endings (voltas) are printed, left to right.
-
- dit(folded) nl()
- Alternative endings are written stacked, which is useful for
- lyrics.
-)
-
-The syntax for repeats is
-
-quote(
- code(\repeat) var(variant) var(repeatcount) var(repeatbody)
-)
-
-If you have alternative endings, you may add
-
-quote(
- code(\alternative)keyindex(alternative)
- code({) var(alternative1)
- var(alternative2)
- var(alternative3) ellipsis() code(})
-)
-
-where each var(alternative) is a Music expression.
-
-Normal notation repeats are used like this:
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat volta 2 { c'4 d' e' f' }
- \repeat volta 2 { f' e' d' c' }
-)
-)
-
-With alternative endings:
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat volta 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
-)
-)
-
-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.)
-
-quote(
-mudela(fragment,verbatim)( c'1
- \repeat fold 2 {c'4 d' e' f'}
- \alternative { {d'2 d'} {f' f} }
-)
-)
-
-quote(
-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 } }
- }
-}
-)
-)
-
-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.
-
-quote(
-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 } }
- }
-}
-)
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Transposition of Pitches)
-cindex(transposition of pitches)
-label(transpose)
-
-A music expression can be transposed with
-code(\transpose)keyindex(transpose). The syntax is
-
-quote(
- code(\transpose) var(pitch) var(musicexpr)
-)
-
-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.
-
-quote(
-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 }
-}
-)
-)
-
-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).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic lyric durations)
-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
-
-quote(
- code(\addlyrics) var(musicexpr1 musicexpr2)
-)
-
-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 indexandcode(automaticMelismata) is set in the
-context of var(musicexpr1), no lyrics will be put on slurred or tied
-notes.
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
- \property Voice.automaticMelismata = "1"
- c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics {
- do4 re mi fa }
-)
-)
-
-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:
-
-quote(
-mudela(verbatim,fragment)(\addlyrics
-\transpose c'' {
- c8 () cis d8. e16 f2
-}
-\context Lyrics \lyrics
-< { do4 re mi fa }
- { do8 re mi fa } >
-)
-)
-
-It is valid (but probably not very useful) to use notes instead of
-lyrics for var(musicexpr2).
-
-COMMENT(
- mudela(verbatim,fragment)(
- \context Voice \addlyrics
- { s4 s8 s16 s32 }
- { [c16 c c c] }
- )
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Ambiguities)
-cindex(ambiguities)
-
-The grammar contains a number of ambiguities.footnote(The authors
-hope to resolve them at a later time.)
-
-itemize(
- it() The assignment
-
- quote(
- verb(foo = bar)
- )
-
- can be interpreted as making a string identifier code(\foo)
- containing code("bar"), or a music identifier code(\foo)
- containing the syllable `bar'.
-
- it() The assignment
-
- quote(
- verb(foo = -6)
- )
-
- can be interpreted as making an integer identifier
- bind(containing)-6, or a Request identifier containing the
- bind(fingering)`6' (with neutral direction).
-
- it() If you do a nested repeat like
-
- quote(
-verb(\repeat ...
-\repeat ...
-\alternative)
- )
-
- 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.
-
- it() (an as yet unidentified ambiguity :-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation conversion specifics)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Automatic Beam Generation)
-cindex(automatic beam generation)
-label(autobeam)
-
-By default, LilyPond will generate beams automatically. This feature
-can be disabled by setting the indexandcode(Voice.noAutoBeaming)
-property bind(to)1. It can be overridden for specific cases by
-specifying explicit beams as described in
-bind(section)ref(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 indexandcode(Voice.beamAutoEnd) property. To end beams every
-quarter note, for example, you could set
-indexandcode(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
-indexandcode(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 bind(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
-bind(32nd)notes, you would use code(Voice.beamAutoEnd_32).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing chord names)
-cindex(chord names)
-cindex(chords)
-cindex(printing!chord names)
-
-For displaying printed chord names, use the indexandcode(ChordNames)
-and indexandcode(ChordNameVoice) contexts. The chords may be entered
-either using the notation described above, or directly using
-simultaneous music.
-
-quote(
-mudela(fragment,verbatim)(<
- \context ChordNames {
- \chords{a b c} \notes{<d f g> <e g b>}
- }
- \context Staff \notes {
- a b c' d' e'
- }
->
-)
-)
-
-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 {
- <e'1 g' c''>
- }
- \context Thread \notes {
- <e'1 g' c''>
- }
- >)
-
-If you want inversions to be recognized, you must set the property
-indexandcode(ChordNames.chordInversion):
-
-mudela(fragment,verbatim,center)( <
- \property Score.chordInversion = 1
- \context ChordNameVoice \notes {
- <e'1 g' c''>
- }
- \context Thread \notes {
- <e'1 g' c''>
- }
- >)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Printing lyrics)
-cindex(lyrics)
-cindex(printing!lyrics)
-label(lyricprint)
-
-Lyric syllables must be interpreted within a code(Lyrics) context
-cindex(context!Lyrics) for printing them.
-
-Here is a full example:
-
-quote(
-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
- }
- >
-}
-)
-)
-
-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(_)').
-
-quote(
-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 __
- }
- >
-}
-)
-)
-
-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:
-
-quote(
-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
- }
- >
-}
-)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(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(
- it() What notes are playing at this point?
- it() What symbols will be printed at this point?
- it() In what style will they printed?
- it() What is the current key signature, time signature, point within
- the measure, etc.?
-)
-
-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 em(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:
-
-quote(
- verb(\score { \notes < c4 > })
-)
-
-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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context selection)
-label(contextselection)
-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,
-
-quote(
-mudela(verbatim)(\score {
- \notes \relative c'' {
- c4 <d4 \context Staff = "another" e4> f
- }
-}
-)
-)
-
-In this example, the code(c) bind(and)code(d) are printed on the
-default staff. For bind(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 bind(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
-
-quote(
- code(\keyword) var(musicexpr1) var(musicexpr2) ellipsis()
-)
-
-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:
-
-quote(
-verb(\score {
- \notes \relative c'' {
- c4 d4 e4
- }
-})
-)
-
-doesn't result in this:
-
-mudela()(
- \score {
- \notes \relative c'' {
- <c4> <d4> <e4>
- }
- }
-)
-
-For bind(the)code(c4), a default code(Staff) (with a contained
-code(Voice)) context is created. After bind(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 bind(the)code(c4) ends, the context of the
-sequential music is also the default code(Voice) context.
-bind(The)code(d4) gets interpreted in the same context
-bind(as)code(c4).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Predefined contexts)
-
-These are the contexts supplied with the package. They are defined
-in the initialization file file(ly/engraver.ly).
-
-description(
- dit(code(Grace))indexcode(Grace) nl()
- 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.
-
- dit(code(LyricVoice))indexcode(LyricVoice) nl()
- Corresponds to a voice with lyrics. Handles the printing of a
- single line of lyrics.
-
- dit(code(Thread))indexcode(Thread) nl()
- 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.
-
- dit(code(Voice))indexcode(Voice) nl()
- 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.
-
- dit(code(ChordNamesVoice))indexcode(ChordNamesVoice) nl()
- A voice with chord names. Handles printing of a line of chord
- names.
-
- dit(code(ChordNames))indexcode(ChordNames) nl()
- Typesets chord names. Can contain code(ChordNamesVoice)
- contexts.
-
- dit(code(Lyrics))indexcode(Lyrics) nl()
- Typesets lyrics. It can contain code(LyricVoice) contexts.
-
- dit(code(Staff))indexcode(Staff) nl()
- Handles clefs, bar lines, keys, accidentals. It can contain
- code(Voice) contexts.
-
- dit(code(RhythmicStaff))indexcode(RhythmicStaff) nl()
- 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.
-
- dit(code(GrandStaff))indexcode(GrandStaff) nl()
- 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.
-
- dit(code(PianoStaff))indexcode(PianoStaff) nl()
- Just like code(GrandStaff) but with code(minVerticalAlign) set
- equal to code(maxVerticalAlign) so that interstaff beaming and
- slurring can be used.
-
- dit(code(StaffGroup))indexcode(StaffGroup) nl()
- 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.
-
- dit(code(ChoirStaff))indexcode(ChoirStaff) nl()
- Identical to code(StaffGroup) except that the contained staffs
- are not connected vertically.
-
- dit(code(Score))indexcode(Score) nl()
- 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.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context properties)
-
-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
-
-quote(
- var(propname) code(=) var(value)
-)
-
-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 em(translators). Translators for
-notation are called em(engravers), and translators for sound are
-called em(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.
-
-subsubsect(Lyrics properties)
-cindex(properties!Lyrics)
-
-description(
- dit(code(textStyle))indexcode(textStyle) nl()
- 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.
-)
-
-subsubsect(Thread properties)
-cindex(properties!Thread)
-
-description(
- dit(code(noteheadStyle))indexcode(noteheadStyle) nl()
- 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.;
- }
- }
- )
-)
-
-subsubsubsect(Grace properties)
-cindex(properties!Grace)
-
-description(
- dit(indexandcode(stemStyle)) nl()
- 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.
-)
-
-subsubsect(Voice properties)
-cindex(properties!Voice)
-
-description(
- dit(code(abbrev))indexcode(abbrev) nl()
- Set length for tremolo to be used if no length is explicitly
- specified.
-
- dit(code(articulationScriptPadding))indexcode(articulationScriptPadding)
- nl()
- 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.
-
- dit(code(articulationScriptVerticalDirection))
- indexcode(articulationScriptVerticalDirection) nl()
- 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.
-
- dit(code(noAutoBeaming))indexcode(beamAuto) nl()
- If set bind(to)1 then beams are not generated automatically.
-
- dit(code(beamAutoEnd))indexcode(beamAutoEnd) nl()
- Specifies when automatically generated beams can end. See
- bind(section)ref(autobeam).
-
- dit(code(beamAutoBegin))indexcode(beamAutoBegin) nl()
- Specifies when automatically generated beams can start. See
- bind(section)ref(autobeam).
-
- dit(code(beamquantisation))indexcode(beamquantisation) nl()
- 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).
-
- dit(code(beamslopedamping))indexcode(beamslopedamping) nl()
- 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.
-
- dit(code(dynamicDirection))indexcode(dynamicDirection) nl()
- 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.
-
- dit(code(dynamicStyle))indexcode(dynamicStyle) nl()
- Set the text style for dynamics.
-
- dit(code(fontSize))indexcode(fontSize) nl()
- Can be used to select smaller font sizes for music. The normal
- font size bind(is)0, and the two smaller sizes are -1
- bind(and)-2.
-
-
- dit(code(forceHorizontalShift))indexcode(forceHorizontalShift) nl()
- 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.
-
-
- dit(code(horizontalNoteShift))indexcode(horizontalNoteShift) nl()
- 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).
-
- dit(code(markScriptPadding))indexcode(markScriptPadding) nl()
- Determines the extra space added between the mark and the closest
- staff line or note.
-
- dit(code(markDirection))indexcode(markDirection) nl()
- 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.
-
- dit(code(midiInstrument))indexcode(midiInstrument) nl()
- 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 bind(section)ref(midilist). If you use a string which
- is not listed, LilyPond will silently substitute piano.
-
-
- dit(code(oldTieBehavior))indexcode(oldTieBehavior) nl()
- Set bind(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.
-
- dit(code(restStyle))indexcode(restStyle) nl()
- 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.
-
- dit(code(scriptHorizontal))indexcode(scriptHorizontal) nl()
- Put scripts left or right of note heads. Support for this is
- limited. Accidentals will collide with scripts.
-
- dit(code(slurVerticalDirection))indexcode(slurVerticalDirection) nl()
- 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.
-
-
- dit(code(slurDash))indexcode(slurDash) nl()
- Set bind(to)0 for normal slurs, bind(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.
-
-dit(code(stemLength))indexcode(stemLength) nl()
- Set length of stems. Unit is `code(interline)/2', so
- code(stemLength) defaults bind(to)7.
-
- dit(code(stemLeftBeamCount))indexcode(stemLeftBeamCount) nl()
- 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.
-
- dit(code(stemRightBeamCount))indexcode(stemRightBeamCount) nl()
- 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.
- dit(code(tieVerticalDirection))indexcode(tieVerticalDirection) nl()
- 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.
-
- dit(code(transposing))indexcode(transposing) nl()
- Transpose the MIDI output. Set this property to the number of
- half-steps to transpose by.
-
-
- dit(code(textEmptyDimension))indexcode(textEmptyDimension) nl()
- If set bind(to)1 then text placed above or below the staff is
- assumed to have zero width.
-
- dit(code(textStyle))indexcode(textStyle) nl()
- Set the text style for superscripts and subscripts. See above
- for list of text styles.
-
- dit(code(textScriptPadding))indexcode(textScriptPadding) nl()
- Determines the extra space added between superscripted resp.
- subscripted text and the closest staff line or note.
-
- dit(code(verticalDirection))indexcode(verticalDirection) nl()
- 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.
-
-
- dit(code(tupletDirection))indexcode(tupletDirection) nl()
- 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.
-
- dit(code(tupletVisibility))indexcode(tupletVisibility) nl()
- Determines whether tuplets of notes are labelled. Setting
- bind(to)0 shows nothing; setting bind(to)1 shows a number;
- setting bind(to)2 shows a number and a bracket if there is no
- beam; setting bind(to)3 shows a number, and if there is no beam
- it adds a bracket; setting bind(to)4 shows both a number and a
- bracket unconditionally.
-
-)
-
-subsubsubsect(Staff properties)
-cindex(properties!Staff)
-
-description(
-
- dit(code(barNonAuto))indexcode(barNonAuto) nl()
- If set bind(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.
-
- dit(code(barNumberDirection))indexcode(barNumberDirection) nl()
- Set to code(\up) or code(\down) to put bar numbers above or below
- the staff.
-
- dit(code(barNumberHangOnClef))indexcode(barNumberHangOnClef) nl()
- Set bind(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.
-
- dit(code(barNumberScriptPadding))indexcode(barNumberScriptPadding) nl()
- Sets extra space between the bar number and the bar it labels.
-
- dit(code(barSize))indexcode(barSize) nl()
- Specify the height of the bar lines if it should be different
- than the staff height.
-
- dit(code(barAtLineStart))indexcode(barAtLineStart) nl()
- Set bind(to)1 to produce a bar line after the clef at the start
- of each line (but not at the beginning of the music).
-
- dit(code(clefStyle))indexcode(clefStyle) nl()
- 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.
-
- dit(code(createKeyOnClefChange))indexcode(createKeyOnClefChange) nl()
- 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.
-
- dit(code(createInitdefaultClef))indexcode(createInitdefaultClef) nl()
- Specify whether clefs are created on default? (Doesn't seem to
- do anything.)
-
- dit(code(defaultClef))indexcode(defaultClef) nl()
- Determines the default clef. See code(\clef) keyword.
-
- dit(code(markHangOnClef))indexcode(markHangOnClef) nl()
- Set bind(to)1 to cause marks to appear by clefs instead of by bar
- lines. Deprecated, use is not recommended.
-
- dit(code(marginDirection))indexcode(marginDirection) nl()
- Set to code(\left) or code(\right) to specify location of
- marginal scripts.
-
- dit(code(marginScriptPadding))indexcode(marginScriptPadding) nl()
- Specify extra space for marginal scripts.
-
- dit(code(forgetAccidentals))indexcode(forgetAccidentals) nl()
- Causes accidentals to be printed at every note instead of
- remembered for the duration of a measure.
-
- dit(code(noResetKey))indexcode(noResetKey) nl()
- 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.
-
- dit(code(staffLineLeading))indexcode(staffLineLeading) nl()
- Specifies the distance (in points) between lines of the staff.
-
- dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
- Specifies the number of staff lines. The default bind(is)5.
-
- dit(code(postBreakPadding))indexcode(postBreakPadding) nl()
- Extra space in points to be added after the clef, time signature
- and key signature on the staff. Deprecated, do not use.
-
- dit(code(noVoltaBraces))indexcode(noVoltaBraces) nl()
- Set to true to suppress the printing of brackets over alternate
- endings specified by the command code(\alternative).
-
- dit(code(numberOfStaffLines))indexcode(numberOfStaffLines) nl()
- Sets the number of lines that the staff has.
-
- dit(code(barAlways))indexcode(barAlways) nl()
- If set bind(to)1 a bar line is drawn after each note.
-
- dit(code(defaultBarType))indexcode(defaultBarType) nl()
- Sets the default type of bar line. See bind(Section)ref(barlines)
- for a list of available bar types.
-
- dit(code(instrument), code(instr))
- indexcode(instrument)indexcode(instr) nl()
- 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.
-
- dit(code(keyOctaviation))indexcode(keyOctaviation) nl()
- If set bind(to)1, then keys are the same in all octaves. If set
- bind(to)0 then the key signature for different octaves can be
- different and is specified independently:
-
- quote(
- code(\keysignature bes fis')
- )
-
- The default value bind(is)1. Can be set to zero with
- code(\specialkey) or reset bind(to)1 with code(\normalkey).
-
- dit(code(timeSignatureStyle))indexcode(timeSignatureStyle) nl()
- Changes the default two-digit layout for time signatures. The
- following values are recognized:
-
- description(
- dit(code(C))indexcode(C) nl()
- 4/4 and 2/2 are typeset as C and struck C, respectively. All
- other time signatures are written with two digits.
-
- dit(code(old))indexcode(old) nl()
- 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.
-
- dit(code(1))indexcode(1) nl()
- All time signatures are typeset with a single
- digit, e.g. 3/2 is written bind(as)3.
-
- dit(indexcode(CM/N)code(C)var(M)code(/)var(N),
- indexcode(oldM/N)code(old)var(M)code(/)var(N) or
- indexandcode(old6/8alt)) nl()
- Tells LilyPond to use a specific symbol as time signature.
- )
-
- 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;
- }
- }
- )
-
- dit(code(voltaSpannerDuration))indexcode(voltaSpannerDuration) nl()
- 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).
-)
-
-subsubsect(GrandStaff properties)
-cindex(properties!GrandStaff)
-
-description(
- dit(code(alignmentReference))indexcode(alignmentReference) nl()
- 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.
-
- dit(code(maxVerticalAlign))indexcode(maxVerticalAlign) nl()
- Set the maximum vertical distance between staffs.
-
- dit(code(minVerticalAlign))indexcode(minVerticalAlign) nl()
- Set the minimum vertical distance between staffs.
-)
-
-subsubsect(Score properties)
-cindex(properties!Score)
-
-description(
- dit(code(skipBars))indexcode(skipBars) nl()
- Set bind(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.
-
- quote(
-mudela(fragment,verbatim,center)\
- (r1 r1*3 R1*3\property Score.skipBars=1 r1*3 R1*3
-)
- )
-)
-
-subsubsect(ChordNamesVoice properties)
-cindex(properties!ChordNamesVoice)
-
-description(
- dit(code(chordInversion))indexcode(chordInversion) nl()
- Determines whether LilyPond should look for chord inversions when
- translating from notes to chord names. Set bind(to)1 to find
- inversions. The default bind(is)0 which does not look for
- inversions.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Notation output definitions)
-cindex(output)
-cindex(notation output)
-cindex(output definition)
-label(output)
-label(paper)
-
-The most important output definition is the code(\paper) block, for
-music notation. The syntax is
-
-quote(
- code(\paper {) [var(paperidentifier)] var(items) code(})
-)
-
-where each of the items is one of
-
-itemize(
- it() An assignment. The assignment must be terminated by a
- semicolon. See bind(section)ref(papervars) for information on
- paper variables.
-
- it() A context definition. See bind(section)ref(contextdefs) for
- more information on context definitions.
-
- it() A margin shape declaration. The syntax is
-
- quote(
- code(\shape) var(indent1)code(,) var(width1)code(,)
- var(indent2)code(,) var(width2) ellipsis() code(;)
- )
- 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.
-
- it() A font declaration. Its syntax is
-
- quote(
- var(fontsize) code(=) code(\font)keyindex(font) var(fontname)
- )
-
- var(fontsize) is an integer describing the font to be used.
- bind(0)is the default font. var(fontname) is the basename of
- a font (usually a member of the Feta family).
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Changing Font Size and Paper Size)
-cindex(changing font size and paper size)
-
-The Feta font provides musical symbols at six different sizes. These
-fonts are bind(11)point, bind(13)point, bind(16)point, bind(20)point,
-bind(23)point, and bind(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 bind(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
-indexandcode(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 bind(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.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Paper variables)
-cindex(paper variables)
-label(papervars)
-
-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:
-
-description(
- dit(code(indent))indexcode(indent) nl()
- The indentation of the first line of music.
-
- dit(code(interline))indexcode(interline) nl()
- 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.
-
- dit(code(linewidth))indexcode(linewidth) nl()
- Sets the width of the lines. If set bind(to)-1.0, a single
- unjustified line is produced.
-
- dit(code(output))indexcode(output) nl()
- 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.
-
- dit(code(rulethickness))indexcode(rulethickness) nl()
- Determines the thickness of staff and bar lines.
-
- dit(code(castingalgorithm))indexcode(castingalgorithm) nl()
- 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.
-)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-label(contextdefs)
-cindex(context definition)
-
-A notation contexts is defined by the following information
-
-enumerate(
- it() A name.
-
- it() The LilyPond modules that do the actual conversion of music to
- notation. Each module is a so-called
- em(engraver)cindex(engraver).
-
- it() How these modules should cooperate, i.e. which ``cooperation
- module'' should be used. This cooperation module is a special
- type of engraver.
-
- it() What other contexts the context can contain,
-
- it() What properties are defined.
-)
-
-A context definition has this syntax:
-
-quote(
- code(\translator) code({)
- var(translatorinit) var(translatormodifierlist)
- code(})
-)
-
-var(translatorinit) can be an identifier or of the form
-
-quote(
- code(\type) var(typename) code(;)
-)
-
-var(typename) is one of
-
-description(
- dit(code(Engraver_group_engraver))indexcode(Engraver_group_engraver) nl()
- The standard cooperation engraver.
-
- dit(code(Score_engraver))indexcode(Score_engraver) nl()
- This is cooperation module that should be in the top level context.
-
- dit(code(Grace_engraver_group))indexcode(Grace_engraver_group) nl()
- This is a special cooperation module (resembling
- code(Score_engraver)) that is used to created an embedded
- `miniscore'.
-)
-
-var(translatormodifierlist) is a list of items where each item is
-one of
-
-itemize(
- it() code(\consists) var(engravername) code(;) nl()
- Add var(engravername) to the list of modules in this context.
- bind(Section)ref(engravers) contains an overview of the engravers
- available. The order of engravers added with code(\consists) is
- significant.
-
- it() code(\consistsend) var(engravername) code(;) nl()
- 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.
-
- it() code(\accepts) var(contextname) code(;) nl()
- Add var(contextname) to the list of context this context can
- contain. The first listed context the context to create by
- default.
-
- it() code(\remove) var(engravername) code(;) nl()
- Remove a previously added (with code(\consists)) engraver.
-
- it() code(\name) var(contextname) code(;) nl()
- This sets name of the context, e.g. code(Staff), code(Voice). If
- the name is not specified, the translator won't do anything.
-
- it() var(propname) code(=) var(value) code(;) nl()
- A property assignment. It is allowed to use reals for
- var(value).
-)
-
-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
-
-quote(
-verb(\paper {
- foo = \translator { ... }
-}
-\score {
- \notes {
- ...
- }
- \paper {
- \translator { \foo ... }
- }
-})
-)
-
-subsubsect(Paper Types, Engravers, and Pre-defined Translators)
-cindex(paper types, engravers, and pre-defined translators)
-
-Some pre-defined identifiers can simplify modification of
-translators. The pre-defined identifiers are:
-
-description(
- dit(code(StaffContext))indexcode(StaffContext) nl()
- Default Staff context.
-
- dit(code(RhythmicStaffContext))indexcode(RhythmicStaffContext) nl()
- Default RhythmicStaff context.
-
- dit(code(VoiceContext))indexcode(VoiceContext) nl()
- Default Voice context.
-
- dit(code(ScoreContext))indexcode(ScoreContext) nl()
- Default Score context.
-
- dit(code(ScoreWithNumbers))indexcode(ScoreWithNumbers) nl()
- Score context with numbering at the Score level.
-
- dit(code(BarNumberingStaffContext))indexcode(BarNumberingStaffContext) nl()
- Staff context with numbering at the Staff level.
-
- dit(code(HaraKiriStaffContext))indexcode(HaraKiriStaffContext) nl()
- 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.)
-
- dit(code(OrchestralPartStaffContext))indexcode(OrchestralPartStaffContext)
-
- dit(code(OrchestralScoreContext))indexcode(OrchestralScoreContext)
-)
-
-Using these pre-defined values, you can remove or add items to the
-translator:
-
-quote(
-verb(\paper {
- \translator {
- \StaffContext
- \remove Some_engraver;
- \consists Different_engraver;
- }
-})
-)
-
-subsubsect(Engravers)
-label(engravers)
-
-The engravers for paper output are:
-
-[incomplete, FIXME]
-
-description(
- dit(code(Bar_engraver))indexcode(Bar_engraver) nl()
- Engraves bar lines. Normally in code(Staff) and
- code(RhythmicStaff).
-
- dit(code(Bar_number_engraver))indexcode(Bar_number_engraver) nl()
- 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.
-
- dit(code(Beam_engraver))indexcode(Beam_engraver) nl()
- 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.
-
- dit(code(Beam_req_swallow_translator))
- indexcode(Beam_req_swallow_translator) nl()
- Swallows beam requests. In code(LyricVoice).
-
- dit(code(Chord_name_engraver))indexcode(Chord_name_engraver) nl()
- Engraves chord names. Normally in code(ChordNameVoice) .
-
- dit(code(Chord_tremolo_engraver))indexcode(Chord_tremolo_engraver)
-
- dit(code(Clef_engraver))indexcode(Clef_engraver) nl()
- Engraves the clef symbol. Normally in code(Staff).
-
- dit(code(Collision_engraver))indexcode(Collision_engraver)
-
- dit(code(Dot_column_engraver))indexcode(Dot_column_engraver) nl()
- 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.
-
- dit(code(Dynamic_engraver))indexcode(Dynamic_engraver) nl()
- Engraves dynamics symbols. Normally in code(Voice).
-
- dit(code(Font_size_engraver))indexcode(Font_size_engraver)
-
- dit(code(Key_engraver))indexcode(Key_engraver) nl()
- Engraves the key signature. Normally in code(Staff).
-
- dit(code(Local_key_engraver))indexcode(Local_key_engraver)
-
- dit(code(Lyric_engraver))indexcode(Lyric_engraver) nl()
- Engraves lyrics. Normally in code(LyricVoice).
-
- dit(code(Multi_measure_rest_engraver))
- indexcode(Multi_measure_rest_engraver) nl()
- Engraves multi-measure rests that are produced with code(R).
- Normally in code(Voice).
-
- dit(code(Piano_bar_engraver))indexcode(Piano_bar_engraver)
-
- dit(code(Pitch_squash_engraver))indexcode(Pitch_squash_engraver) nl()
- Treat all pitches as middle C. Used in code(RhythmicStaff).
- Note that the notes move, but the locations of accidentals stay
- the same.
-
- dit(code(Priority_horizontal_align_engraver))
- indexcode(Priority_horizontal_align_engraver)
-
- dit(code(Repeat_engraver))indexcode(Repeat_engraver) nl()
- Handles repeats? In code(Staff) and code(RhythmicStaff).
-
- dit(code(Rest_collision_engraver))indexcode(Rest_collision_engraver) nl()
- Handles collisions of rests. In code(Staff).
-
- dit(code(Rest_engraver))indexcode(Rest_engraver) nl()
- Engraves rests. Normally in code(Voice).
-
- dit(code(Rhythmic_column_engraver))indexcode(Rhythmic_column_engraver)
-
- dit(code(Score_priority_engraver))indexcode(Score_priority_engraver)
-
- dit(code(Script_engraver))indexcode(Script_engraver) nl()
- Handles note ornaments generated by code(\script). Normally in
- code(Voice).
-
- dit(code(Separating_line_group_engraver))
- indexcode(Separating_line_group_engraver)
-
- dit(code(Skip_req_swallow_translator))
- indexcode(Skip_req_swallow_translator)
-
- dit(code(Slur_engraver))indexcode(Slur_engraver) nl()
- Engraves slurs. Normally in code(Voice).
-
- dit(code(Span_bar_engraver))indexcode(Span_bar_engraver) nl()
- Engraves lines across multiple staffs. Normally in
- code(Staffgroup) and code(GrandStaff). Removing this from
- code(StaffGroup) gives the definition of code(ChoirStaff).
-
- dit(code(Span_score_bar_engraver))indexcode(Span_score_bar_engraver)
-
- dit(code(Staff_group_bar_engraver))indexcode(Staff_group_bar_engraver)
-
- dit(code(Staff_margin_engraver))indexcode(Staff_margin_engraver) nl()
- Prints the name of the instrument (specified by
- code(Staff.instrument) and code(Staff.instr)) at the left of the
- staff.
-
- dit(code(Staff_sym_engraver))indexcode(Staff_sym_engraver)
-
- dit(code(Stem_engraver))indexcode(Stem_engraver) nl()
- Engraves stems. Normally in code(Voice).
-
- dit(code(Ties_engraver))indexcode(Ties_engraver) nl()
- Engraves ties. Normally in code(Voice).
-
- dit(code(Time_signature_engraver))indexcode(Time_signature_engraver) nl()
- Engraves the time signature. Normally in code(Staff) and
- code(RhythmicStaff).
-
- dit(code(Timing_engraver))indexcode(Timing_engraver) nl()
- 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).
-
- dit(code(Tuplet_engraver))indexcode(Tuplet_engraver) nl()
- Engraves tuplet brackets? In code(Staff).
-
- dit(code(Vertical_align_engraver))indexcode(Vertical_align_engraver)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Sound output)
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(output definition)
-
-The MIDI block is analogous to the paper block, but it is simpler.
-The code(\midi) block can contain:cindex(MIDI block)
-
-itemize(
- it() a code(\tempo) definition
- it() context definitions
-)
-
-Assignments in the code(\midi) block are not allowed.
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(Context definitions)
-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).
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-subsect(MIDI Instrument Names)
-cindex(MIDI instrument names)
-label(midilist)
-
-The MIDI instrument name is set by the
-indexandcode(Staff.midiInstrument) property or, if that property is
-not set, the indexandcode(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.
-
-COMMENT( acordina = accordion, tango accordian = concertina
- distortion guitar = distorted guitar
- orchestral strings = harp
- pan flute = wood flute? )
-
-quote(
-verb("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)")
-)
-
-subsubsect(MIDI Types and Performers)
-cindex(MIDI types and performers)
-
-The types available for MIDI translators are:
-
-description(
- dit(code(Performer_group_performer))indexcode(Performer_group_performer)
- dit(code(Score_performer))indexcode(Score_performer)
- dit(code(Staff_performer))indexcode(Staff_performer)
-)
-
-The performers for MIDI translators are:
-
-description(
- dit(code(Key_performer))indexcode(Key_performer)
- dit(code(Time_signature_performer))indexcode(Time_signature_performer)
- dit(code(Note_performer))indexcode(Note_performer)
- dit(code(Lyric_performer))indexcode(Lyric_performer)
- dit(code(Swallow_performer))indexcode(Swallow_performer)
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(Pre-defined Identifiers)
-cindex(pre-defined identifiers)
-label(ident)
-
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings. Most of them are in
-file(ly/declarations.ly).
-
-description(
- dit(code(\break))keyindex(break) nl()
- Force a line break in music by using a large argument for the
- keyword code(\penalty).
-
- dit(code(\center))keyindex(center) nl()
- Used for setting direction properties. bind(Equals)0.
-
- dit(code(\down))keyindex(down) nl()
- Used for setting direction setting properties. Is equal
- bind(to)-1.
-
- dit(code(\free))keyindex(free) nl()
- Used for setting direction setting properties. Is equal
- bind(to)0.
-
- dit(code(\left))keyindex(left) nl()
- Used for setting text alignment property. Is equal bind(to)-1.
-
- dit(code(\nobreak))keyindex(nobreak) nl()
- Prevent a line break in music by using a large negative argument
- for the keyword code(\penalty).
-
- dit(code(\none))keyindex(none) nl()
- Used for setting code(Score.beamslopedamping) and
- code(Score.beamquantisation) properties. Is equal bind(to)0.
-
- dit(code(\normal))keyindex(normal) nl()
- Used for setting code(Score.beamslopedamping) and
- code(Score.beamquantisation) properties. Is equal bind(to)1.
-
- dit(code(\normalkey))keyindex(normalkey) nl()
- Select normal key signatures where each octave has the same key
- signature. This sets the code(Staff.keyoctaviation) property.
-
- dit(code(\right))keyindex(right) nl()
- Used for setting text alignment property. Is set bind(to)1.
-
- dit(code(\shiftoff))keyindex(shiftoff) nl()
- Disable horizontal shifting of note heads that collide. Sets the
- code(Voice.horizontalNoteShift) property.
-
- dit(code(\shifton))keyindex(shifton) nl()
- Enable note heads that collide with other note heads to be
- shifted horiztonally. Sets the code(Voice.horizontalNoteShift)
- property.
-
- dit(code(\slurboth))keyindex(slurboth) nl()
- Allow slurs to be above or below notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\slurdown))keyindex(slurdown) nl()
- Force slurs to be below notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\slurup))keyindex(slurup) nl()
- Force slurs to be above notes. This sets the
- code(Voice.slurVerticalDirection) property.
-
- dit(code(\specialkey))keyindex(specialkey) nl()
- Allow key signatures do differ in different octaves. This sets
- the code(Staff.keyoctaviation) property.
-
- dit(code(\stemboth))keyindex(stemboth) nl()
- Allow stems, beams, and slurs to point either upwards or
- downwards, decided automatically by LilyPond. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\stemdown))keyindex(stemdown) nl()
- Force stems, beams, and slurs to point down. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\stemup))keyindex(stemup) nl()
- Force stems, beams and slurs to point up. This sets the
- code(Voice.verticalDirection) property.
-
- dit(code(\traditional))keyindex(traditional) nl()
- Used for setting the code(Score.beamquantisation) property. Is
- equal bind(to)2.
-
- dit(code(\up))keyindex(up) nl()
- Used for setting various direction properties. Is equal
- bind(to)1.
-)
-
-
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-COMMENT(%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%)
-
-sect(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:
-
-quote(
-verb(\score {
- \notes\relative c {
- \input "yourfile.fly"
- }
- \paper{}
- \midi{}
-})
-)
-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.)
-
-whenlatex(latexcommand(\printindex))
-
-COMMENT(End of reference-manual.yo)
--- /dev/null
+\input texinfo @c -*-texinfo-*- vim:tw=72
+@setfilename regression-test.info
+@settitle LilyPond Regression test
+
+@node Top, , ,
+
+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
--- /dev/null
+\\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
+@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.@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{%@}}'@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 {
+ <c4-\f g' c>
+ \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 <e'8.-\p g> <f16 a>
+ \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
+ <
+ { \times 2/3 { a8 g c } \! c2 }
+ \context Voice = oboeTwo {
+ \stemdown
+ \grace {
+ \property Grace.verticalDirection = \down
+ [f,16 g] }
+ f8 e e2
+ } >
+ \stemboth
+ \grace <c,8( e> <)b8. d8.-\trill> <c16 e> |
+ [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r |
+ [<c16( e> < )e8. g>] <c8 e,>
+}
+
+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
+ <g d'> r4
+ < {\stemup r2 <e4 c'> <c8 g'> }
+ \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
+<c4-\f g' c>
+@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 <e'8.-\p g> <f16 a>
+@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 <e8( g> < )d4 f> <c2 e>
+@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
+@{ <d8 \< f> <e g> <f a> @}
+@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 <c,8( e> <)b8. d8.-\trill> <c16 e> |
+@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
+++ /dev/null
-mailto(gnu-music-discuss@gnu.org)
-COMMENT(-*-text-*-)
-
-redef(var)(1)(whenlatex(latexcommand({\normalfont\scshape )ARG1+latexcommand(}))\
- whenhtml(sc(ARG1)))
-
-COMMENT(urg)
-DEFINEMACRO(Large)(1)(\
- whenlatex(latexcommand(\Large{)ARG1+latexcommand(}))\
- whentexinfo(texinfocommand(@strong{)ARG1+texinfocommand(}))\
- whenhtml(htmlcommand(<font size=+2>)ARG1+htmlcommand(</font>))\
- whentxt(ARG1))
-
-COMMENT( This document contains Mudela fragments. You need at least
-Yodl-1.30.18 to convert this to tex or html.
-
-TODO
-
- * pipethrough(date) sucks.
- * paragraphs have too much space.
- * fix the amount of spaces (urg:tabs) at the start of verb() blocks
- or even better: do verb and description side-by side
- (TeX: use minipage construct):
-
- \foo This does the
- foo construct
-
- The explaining texts are right in between examples.
- Constructs like 'This shows' and 'The next line' are esp.
- confusing, here.
-)
-
-COMMENT(
- Mainly written by Han-Wen Nienhuys,
-
- with help of (among others)
-
- * Jan Nieuwenhuizen
-)
-
-htmlbodyopt(bgcolor)(white)
-htmlcommand(<font color=black>)
-
-latexlayoutcmds(
- \topmargin -0.25in
- \textheight 53\baselineskip
- \advance\textheight by \topskip
- \marginparwidth 1 in % Width of marginal notes.
- \oddsidemargin 0.25 in % Note that \oddsidemargin = \evensidemargin
- \evensidemargin 0.25 in
- \marginparwidth 0.75 in
- \textwidth 5.875 in % Width of text line.
- \input mudela-book
-)
-
-whenlatex(notableofcontents())
-whentexinfo(notableofcontents())
-
-article(Typesetting music with LilyPond)
- (Han-Wen Nienhuys and Jan Nieuwenhuizen)
- (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
-
-
-latexcommand(\def\interexample{})
-latexcommand(\def\preexample{\par})
-latexcommand(\def\postexample{\par\medskip})
-latexcommand(\def\file#1{{code(#1)}})
-
-whenhtml(
-includefile(html-disclaimer.yo-urg)
-)
-
-
-sect(Introduction)
-label(tutorial:introduction)
-latexcommand(\parindent2pc)
-
-LilyPond prints music from a specification that you, the user, supply.
-You have to give that specification using a em(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.
-
-sect(The first tune)
-label(sec:firsttune)
-
-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 bind(J.)bind(S.)Bach's em(Klavierbuechlein).
-
-COMMENT(urg: the fermata sign is placed below the note by default)
-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;
- }
-})
-
-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.COMMENT(
-
-)verb(
- % lines preceded by a percent are comments.
-)COMMENT(
-
-)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(%})'COMMENT(
-
-)verb(
- \input "paper16.ly"
-)COMMENT(
-
-)By default, LilyPond will use definitions for a 20
-nop(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.COMMENT(
-
-)verb(
- \score {
-) COMMENT(
-
-) 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.
-verb(
- \notes
-) COMMENT(
-
-)This makes LilyPond ready for accepting notes.
-verb(
- \relative c''
-)COMMENT(
-
-) 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.COMMENT(
-
-)verb(
- \sequential {
-)COMMENT(
-
-) What follows is sequential music, i.e.,
-notes that are to be played and printed after each other.COMMENT(
-
-)verb(
- \time 3/4;
-) COMMENT(
-
-) 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.COMMENT(
-
-)verb(
- \key g;
-)COMMENT(
-
-) 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. COMMENT(
-
-)verb(
- \repeat "volta" 2
-) COMMENT(
-
-) 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.
-COMMENT(
-
-)verb(
- {
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- d4
-)COMMENT(
-
-) 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). COMMENT(
-
-)verb(
- a b
-)COMMENT(
-
-)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)) COMMENT(
-
-)verb(
- d4 g, g |
-)COMMENT(
-
-) 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.
-COMMENT(
-
-)verb(
- c8 d e fis
-)COMMENT(
-
-)LilyPond guesses were beams can be added to eighth and shorter notes.
-In this case, a beam over 4 eighths is added.
-COMMENT(
-
-)verb(
- c4 d8( )c b a( )b4 c8 b a g |
-) COMMENT(
-
-) 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.COMMENT(
-)verb(
- a4 [b8 a] [g fis]
-)COMMENT(
-
-)Automatic beaming can be overridden by inserting beam marks
-(brackets). Brackets are put around notes you want beamed.COMMENT(
-
-)verb(
- g2. |
-)COMMENT(
-
-)A duration with augmentation dot is notated
-with the duration number followed by a period.COMMENT(
-)verb(
- }
-) COMMENT(
-
-) This ends the sequential music to be repeated. LilyPond will typeset
-a repeat bar. COMMENT(
-
-)verb(
- cis'4 b8 cis a4 |
-) COMMENT(
-
-)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. COMMENT(
-
-)verb(
- a8-. b-. cis-. d-. e-. fis-.
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- fis a, r8 cis8
-) COMMENT(
-
-)
-Rests are denoted by the special notename `code(r)'. You can also enter
-an invisible rest by using the special notename `code(s)'.
-verb(
- d2.-\fermata
-) COMMENT(
-
-)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 em(identifier). COMMENT(
-
-)verb(
- }
-) COMMENT(
-
-)
-Here the music ends.
-COMMENT(
-
-)verb(
- \paper {
- linewidth = 14.0\cm;
- }
-)COMMENT(
-
-)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).
-COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)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 em(music), and not
-notation. Therefore Second, the format tries to be em(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 em(generated) from a high-level musical
-description. In other words, LilyPond would be best
-described by `music compiler' or `music to notation compiler'.
-
-
-sect(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.).
-
-verb(\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; }
-})
-
-
-The result would look nop(this)footnote(The titling and font size shown
-may differ, since the titling in this document is not generated by
-file(ly2dvi).).
-
-center(bf(Large(The river is flowing))
-
-var(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; }
-})
-
-Again, we will dissect the file line by line.COMMENT(
-
-)verb(
- \header {
-)COMMENT(
-
-)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.
-verb(
- title = "The river is flowing";
- composer = "Traditional (?)";)COMMENT(
-
-)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.COMMENT(
-
-)verb(
- \include "paper16.ly"
-)COMMENT(
-
-)Smaller size for inclusion in a book.COMMENT(
-
-)verb(
- melody = \notes \relative c' {
-)COMMENT(
-
-)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.
-
-verb(
- \partial 8;
-)
-
-The piece starts with an anacrusis of one eighth. COMMENT(
-
-)verb(
- c4 c8 d [es () d] c4 | f4 f8 g [es() d] c g |
- c4 c8 d [es () d] c4 | d4 es8 d c4.
- \bar "|.";
-)COMMENT(
-
-)We use explicit beaming. Since this is a song, we will turn automatic
-beams off, and use explicit beaming where needed.COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)This ends the definition of code(melody). Note that there are no
-semicolons after assignments at top level.COMMENT(
-
-)verb(
- text = \lyrics {
-)COMMENT(
-
-)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 {). COMMENT(
-
-)verb(
- The4 ri -- ver is flo- __ wing, flo -- wing and gro -- wing, the
- ri- ver is flo- __ wing down to the sea.
- }
-)COMMENT(
-
-)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.)
-COMMENT(
-
-)verb(
- accompaniment =\chords {
-)COMMENT(
-
-)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.
-COMMENT(
-
-)verb(
- r8
-)COMMENT(
-
-)There is no accompaniment during the anacrusis.COMMENT(
-
-)verb(
- c2-3- f-3-.7
-)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.COMMENT(
-
-)verb(
- d-min es4 c8-min r8
-)COMMENT(
-
-)Some modifiers have predefined names, eg. code(min) is the same as
-code(3-), so code(d-min) is a minor code(d) chord.COMMENT(
-
-)verb(
- c2-min f-min7 g-7^3.5 c-min }
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- \score {
- \simultaneous {
-)COMMENT(
-
-)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).COMMENT(
-
-)verb(
- %\accompaniment
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- \context ChordNames \accompaniment
-)COMMENT(
-
-)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 em(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.COMMENT(
-
-)verb(
- \addlyrics
-)COMMENT(
-
-)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.)COMMENT(
-
-)verb(
- \context Staff = mel {
-)COMMENT(
-
-)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.COMMENT(
-
-)verb(
- \property Staff.noAutoBeaming = "1"
-)COMMENT(
-
-)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.COMMENT(
-
-)verb(
- \property Staff.automaticMelismata = "1"
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- \melody
- }
-)COMMENT(
-
-)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. COMMENT(
-
-)verb(
- \context Lyrics \text
-)COMMENT(
-
-)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.COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)This ends code(\simultaneous).COMMENT(
-
-)verb(
- \midi { }
-)COMMENT(
-
-)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 { }).COMMENT(
-
-)verb(
- \paper { linewidth = 10.0\cm; }
-)COMMENT(
-
-)We also want notation output. The linewidth is short so the piece
-will be set in two lines. COMMENT(
-
-)verb(
- }
-)COMMENT(
-
-)End the score block.
-
-sect(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. COMMENT(Sesam atlas vd
-Muziek. Deel II, blz 414)
-
-mudela(verbatim)(
-\include "paper16.ly";
-
-viola = \notes \relative c' \context Voice = viola {
- <c4-\f g' c>
- \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 <e'8.-\p g> <f16 a>
- \grace <e8( g> <d4 f> <c2 e> \times 2/3 { <d8 \< f> <e g> <f a> }
- <
- { \times 2/3 { a8 g c } \! c2 }
- \context Voice = oboeTwo {
- \stemdown
- \grace {
- \property Grace.verticalDirection = \down
- [f,16 g] }
- f8 e e2
- } >
- \stemboth
- \grace <c,8( e> <)b8. d8.-\trill> <c16 e> |
- [<d ( f> < )f8. a>] <)b,8 d> r [<d16( f> <f8. )a>] <b,8 d> r |
- [<c16( e> < )e8. g>] <c8 e,>
-}
-
-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
- <g d'> r4
- < {\stemup r2 <e4 c'> <c8 g'> }
- \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; }
-})
-
-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.COMMENT(
-
-)verb(viola = \notes \relative c' \context Voice = viola {)COMMENT(
-
-)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 nop(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.).COMMENT(
-
-)verb(<c4-\f g' c>)COMMENT(
-
-)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.COMMENT(
-
-)verb(\property Voice.verticalDirection = \down)COMMENT(
-
-)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.COMMENT(
-
-)verb( g'8. b,16)COMMENT(
-
-)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).
-
-verb(s1 s2. r4)COMMENT(
-
-)code(s) is a `spacer' rest. It does not print anything, but it does
-have the duration of a rest. COMMENT(
-
-)verb(oboes = \notes \relative c'' \context Voice = oboe {)COMMENT(
-
-)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).COMMENT(
-
-)verb(\stemup s4 g8. b,16 c8 r <e'8.-\p g> <f16 a>)COMMENT(
-
-)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.
-COMMENT(
-
-)verb(\grace <e8( g> < )d4 f> <c2 e>)COMMENT(
-
-)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 nop(note.)footnote(LilyPond will squirm
-about unended Slurs. In this case, you can ignore the warning).
-COMMENT(
-
-)verb(\times 2/3)COMMENT(
-
-)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. COMMENT(
-
-)verb({ <d8 \< f> <e g> <f a> })COMMENT(
-
-)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(\<).COMMENT(
-
-)verb(<)COMMENT(
-
-)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: COMMENT(
-
-)verb( { \times 2/3 { a8 g c } \! c2 })COMMENT(
-
-)The crescendo is ended at the half note by the escaped exclamation
-mark `code(\!)'. COMMENT(
-
-)verb(\context Voice = oboeTwo {
-\stemdown)COMMENT(
-
-)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. COMMENT(
-
-)verb(\grace { )COMMENT(
-
-)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.COMMENT(
-
-)verb(\property Grace.verticalDirection = \down
-[f,16 g] })COMMENT(
-
-)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).
-COMMENT(
-
-)verb(
- f8 e e2
-} >)COMMENT(
-
-)This ends the two-part section. COMMENT(
-
-)verb(\stemboth
-\grace <c,8( e> <)b8. d8.-\trill> <c16 e> | )COMMENT(
-
-)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:COMMENT(
-
-)verb(hoomPah = \notes \transpose c' {)COMMENT(
-
-)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
-nop(octave)footnote(code(hoomPah = \relative ...) would be more
-intuitive to use, but that would not let me plug code(\transpose)
-:-CHAR(41).).COMMENT(
-
-)verb(c8 \translator Staff = top \stemdown )COMMENT(
-
-)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. COMMENT(
-
-)verb(c'8 \translator Staff = bottom \stemup })COMMENT(
-
-)Then a note is put on the upper staff, and we switch again. We have
-to name the lower staff `code(bottom)'. COMMENT(
-
-)verb(hoomPahHoomPah = { [\hoomPah \hoomPah] })COMMENT(
-
-)Put two of these fragments in sequence, and beam them.COMMENT(
-
-)verb(bassvoices = \notes \relative c' {
-c4 g8. b,16
-\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah
-\hoomPahHoomPah)COMMENT(
-
-)Entering the bass part is easy: the hoomPahHoomPah variable is
-referenced four times.COMMENT(
-
-)verb(\context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } >)COMMENT(
-
-)After skipping some lines, we see code(~). This mark makes ties.COMMENT(
-
-)verb(\context PianoStaff)COMMENT(
-
-)For piano music, a special context is needed to get cross staff
-beaming right. It is called code(PianoStaff).COMMENT(
-
-)verb(\context Staff = bottom < \time 2/2; \clef bass;)COMMENT(
-
-)The bottom staff must have a different clef.COMMENT(
-
-)verb(indent = 0.0;)COMMENT(
-
-)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.]
-
-sect(The end)
-
-That's all folks. From here, you can either try fiddling with input
-files, or you can read the reference manual.
-
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename AUTHORS.info
+@settitle AUTHORS - who did what on GNU LilyPond-
+
+@node Top, , AUTHORS - who did what on GNU LilyPond-, (dir)
+@top
+@menu
+* AUTHORS - who did what on GNU LilyPond-::AUTHORS - who did what on GNU LilyPond-
+@end menu
+
+@node AUTHORS - who did what on GNU LilyPond-, Top, , Top
+@chapter AUTHORS - who did what on GNU LilyPond?
+
+
+This file lists authors of GNU LilyPond, and what they wrote. This
+list is alphabetically ordered.
+
+@itemize @bullet
+@item @email{tomcato@@xoommail.com, Tom Cato Amundsen},
+ cembalo-partita in mudela, accordion symbols, some mudela-book.py
+@item @email{matsb@@s3.kth.se, Mats Bengtsson},
+ @uref{http://www.s3.kth.se/~matsb/}
+ lots of testing, fixes, general comments and contributions.
+@item @email{eric@@aut.ee.ethz.ch, Eric Bullinger},
+ accidental transposition.
+@item Laura Conrad (lconrad@@world.std.com)
+ fixes to abc2ly
+@item @email{Jan.A.Fagertun@@energy.sintef.no, Jan Arne Fagertun},
+ TeX titling and lytodvi.sh
+@item @email{foka@@debian.org, Anthony Fok},
+ debian package: debian/*
+@item @email{bjoern.jacke@@gmx.de, Bjoern Jacke}
+ german glossary stuff.
+@item @email{nj104@@cus.cam.ac.uk, Neil Jerram}.
+ parts of Documentation/Vocab*
+@item Donald Ervin Knuth, @uref{http://www-cs-staff.stanford.edu/~knuth/}
+ mf/ital-*.mf (these were taken from the CM fonts)
+@item @email{m.krause@@tu-harburg.de, Michael Krause},
+ breathing signs
+@item @email{wl@@gnu.org, Werner Lemberg},
+ misc bugfixes, some Beam and Stem code.
+@item @email{drl@@vuse.vanderbilt.edu, David R. Linn},
+ Mailing list maintenance.
+@item @email{, Adrian Mariano}
+ Reference manual, tutorial fixes, glossary.
+@item @email{hanwen@@cs.uu.nl, Han-Wen Nienhuys},
+ @uref{http://www.cs.uu.nl/~hanwen/}
+ Main author (initials: HWN).
+@item @email{janneke@@gnu.org, Jan Nieuwenhuizen},
+ @uref{http://www.xs4all.nl/~jantien/}
+ Main author (initials: JCN).
+@item @email{oliva@@dcc.unicamp.br, Alexandre Oliva},
+ @uref{http://sunsite.unicamp.br/~oliva/}
+ testing
+@item @email{pinard@@iro.umontreal.ca, Franc,ois Pinard},
+ parts of Documentation/Vocab*, started internationalization stuff
+@item @email{glenprideaux@@iname.com, Glen Prideaux},
+ minor bug fix to script used to generate doc++ documentation
+@item @email{daboys@@austin.rr.com, Jeffrey B. Reed},
+ Windows-NT support.
+@item Shay Rojanski
+ Some mudela source.
+@end itemize
+
+Your name could be here! If you want to fix something, do it, and send
+us a patch!
+
+
+@bye
+++ /dev/null
-article(AUTHORS - who did what on GNU LilyPond?)()()
-
-This file lists authors of GNU LilyPond, and what they wrote. This
-list is alphabetically ordered.
-
-itemize(
-it()nemail(Tom Cato Amundsen)(tomcato@xoommail.com),
- cembalo-partita in mudela, accordion symbols, some mudela-book.py
-it()nemail(Mats Bengtsson)(matsb@s3.kth.se),
- lurl(http://www.s3.kth.se/~matsb/)
- lots of testing, fixes, general comments and contributions.
-it()nemail(Eric Bullinger)(eric@aut.ee.ethz.ch),
- accidental transposition.
-it()nemail(Jan Arne Fagertun)(Jan.A.Fagertun@energy.sintef.no),
- TeX titling and lytodvi.sh
-it()nemail(Anthony Fok)(foka@debian.org),
- debian package: debian/*
-it()nemail(Bjoern Jacke)(bjoern.jacke@gmx.de)
- german glossary stuff.
-it()nemail(Neil Jerram)(nj104@cus.cam.ac.uk).
- parts of Documentation/Vocab*
-it()Donald Ervin Knuth, lurl(http://www-cs-staff.stanford.edu/~knuth/)
- mf/ital-*.mf (these were taken from the CM fonts)
-it()nemail(Michael Krause)(m.krause@tu-harburg.de),
- breathing signs
-it()nemail(Werner Lemberg)(xlwy01@uxp1.hrz.uni-dortmund.de),
- misc bugfixes, some Beam and Stem code.
-it()nemail(David R. Linn)(drl@vuse.vanderbilt.edu),
- Mailing list maintenance.
-it()nemail(Adrian Mariano)()
- Reference manual, tutorial fixes, glossary.
-it()nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl),
- lurl(http://www.cs.uu.nl/~hanwen/)
- Main author (initials: HWN).
-it()nemail(Jan Nieuwenhuizen)(janneke@gnu.org),
- lurl(http://www.xs4all.nl/~jantien/)
- Main author (initials: JCN).
-it()nemail(Alexandre Oliva)(oliva@dcc.unicamp.br),
- lurl(http://sunsite.unicamp.br/~oliva/)
- testing
-it()nemail(Franc,ois Pinard)(pinard@iro.umontreal.ca),
- parts of Documentation/Vocab*, started internationalization stuff
-it()nemail(Glen Prideaux)(glenprideaux@iname.com),
- minor bug fix to script used to generate doc++ documentation
-it()nemail(Jeffrey B. Reed)(daboys@austin.rr.com),
- Windows-NT support.
-it()Shay Rojanski
- Some mudela source.
-it()Laura Conrad (lconrad@world.std.com)
- fixes to abc2ly
-)
-
-
-Your name could be here! If you want to fix something, do it, and send
-us a patch!
-
BLURBS=BLURB COPERTINA FLAPTEKST
-STEPMAKE_TEMPLATES=documentation yolily-topdoc
-LOCALSTEPMAKE_TEMPLATES=lilypond
+STEPMAKE_TEMPLATES=documentation tex texinfo yolily-topdoc
+LOCALSTEPMAKE_TEMPLATES=lilypond mudela
+HTML_FILES=$(addprefix $(outdir)/, $(TEXI_FILES:.texi=.html) $(TELY_FILES:.tely=.html))
+
include $(depth)/make/stepmake.make
+local-WWW: $(HTML_FILES)
+
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename INSTALL.info
+@settitle INSTALL - compiling and installing GNU LilyPond
+
+@node Top, , AUTHORS, (dir)
+@top
+@menu
+* INSTALL - compiling and installing GNU LilyPond::INSTALL - compiling and installing GNU LilyPond
+@end menu
+
+
+@node INSTALL - compiling and installing GNU LilyPond, abstract, , Top
+@menu
+* abstract:: abstract
+* obtaining:: obtaining
+* PREREQUISITES:: PREREQUISITES
+* running:: running
+* WEBSITE:: WEBSITE
+* CONFIGURING and COMPILING:: CONFIGURING and COMPILING
+* CONFIGURING FOR MULTIPLE PLATFORMS::CONFIGURING FOR MULTIPLE PLATFORMS
+* INSTALLING:: INSTALLING
+* REDHAT LINUX:: REDHAT LINUX
+* DEBIAN GNU/LINUX:: DEBIAN GNU/LINUX
+* WINDOWS NT/95:: WINDOWS NT/95
+* w32:: w32
+* BUGS:: BUGS
+* AUTHORS:: AUTHORS
+@end menu
+@chapter INSTALL - compiling and installing GNU LilyPond
+
+
+@node abstract, obtaining, INSTALL - compiling and installing GNU LilyPond, INSTALL - compiling and installing GNU LilyPond
+@section abstract
+
+TODO: document xdeltas
+
+This document explains what you need to install LilyPond, and what you
+should do. If you are going to compile and install LilyPond often,
+e.g. when doing development, you might want to check out the
+@file{buildscripts/set-lily.sh} script. It sets some environment
+variables and symlinks, which comes in handly when you have to compile
+LilyPond more often.
+
+@node obtaining, PREREQUISITES, abstract, INSTALL - compiling and installing GNU LilyPond
+@section obtaining
+
+You can get the latest version of LilyPond at
+@url{ ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/}. Refer to the links
+document for mirror sites.
+
+@emph{If you upgrade by patching do remember to rerun autoconf after
+applying the patch}.
+
+@node PREREQUISITES, running, obtaining, INSTALL - compiling and installing GNU LilyPond
+@section PREREQUISITES
+
+For compilation you need:
+
+@itemize @bullet
+@item A GNU system: GNU LilyPond is known to run on these GNU systems: Linux
+ (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
+Solaris.
+
+@item Lots of disk space: LilyPond takes between 30 and 100 mb to
+compile if you use debugging information. If you are short on
+disk-space run configure with @code{--disable-debugging}.
+
+Although we recommend to use Unix, LilyPond is known to run on Windows
+NT/95/98 as well. See Section @xref{w32}.
+
+@item EGCS 1.1 or newer. Check out @url{ ftp://ftp.gnu.org/pub/gcc/}
+
+@item Python 1.5,
+Check out
+@url{ftp://ftp.python.org} or @url{ftp://ftp.cwi.nl/pub/python}.
+
+@item GUILE 1.3, check out @url{http://www.gnu.org/software/guile/guile.html}.
+
+@item GNU make.
+Check out @url{ftp://ftp.gnu.org/make/}.
+
+@item Flex (version 2.5.4 or newer).
+Check out @url{ftp://ftp.gnu.org/flex/}.
+
+@item Bison (version 1.25 or newer).
+Check out @url{ftp://ftp.gnu.org/bison/}.
+
+@item Texinfo. Check out @url{ftp://ftp.gnu.org/pub/texinfo/}.
+Most documentation is in texinfo.
+
+@item Yodl. Needed for obsolete docs (1.31.17)
+@url{ftp://ftp.lilypond.org/pub/yodl}.
+
+@item The geometry package for LaTeX is needed to use ly2dvi.
+Available at
+@url{ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry}
+or at mirror site @url{ftp://ftp.dante.de}
+
+@item MetaPost, if you want to use direct PostScript output. Please
+note that tetex-0.4pl8 (included with Redhat 5.x) does not include
+@file{mfplain.mp}, which is needed for producing the scaleable font files.
+
+@end itemize
+
+@node running, WEBSITE, PREREQUISITES, INSTALL - compiling and installing GNU LilyPond
+@section running
+
+GNU LilyPond does use a lot of resources. For operation you need the
+following software
+
+@itemize @bullet
+@item TeX
+@item A PostScript printer and/or viewer (such as Ghostscript) is strongly
+ recommended. Xdvi will show all embedded PostScript too if you have
+ Ghostscript installed.
+@item GUILE 1.3, check out @url{http://www.gnu.org/programs/guile.html}
+@end itemize
+
+For running LilyPond successfully you have to help TeX and MetaFont
+find various files. The recommended way of doing so is adjusting the
+environment variables in the start-up scripts of your shell. An
+example is given here for the Bourne shell:
+@example
+export MFINPUTS="/usr/local/share/lilypond/mf:"
+export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
+
+@end example
+
+The empty path component
+represents TeX and MetaFont's default search paths. Scripts with
+the proper paths for the bourne and C-shell respectively are generated in
+@file{buildscripts/out/lilypond-profile} and
+@file{buildscripts/out/lilypond-login} during compilation.
+
+LilyPond is a hiddeously big, slow and bloated program. A fast CPU
+and plenty of RAM is recommended for comfortable use.
+
+@node WEBSITE, CONFIGURING and COMPILING, running, INSTALL - compiling and installing GNU LilyPond
+@section WEBSITE
+
+The website is the most convenient form to use for reading the
+documentation on-line documentation. It is made by entering @example
+
+ make website
+
+@end example
+This does require a fully functioning
+
+If you want to auto-generate Lily's website, you'll need some additional
+conversion tools.
+
+@itemize @bullet
+@item YODL 1.31.15 or later.
+
+@item xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
+ users: it is included within the package libgr-progs).
+ the original is at
+@url{ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz}
+
+@item pnmtopng, which is also in libgr-progs for RedHat. The original is
+at
+@url{ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz}.i
+
+The version of @file{pnmtopng} that is distributed with RedHat 5.1 and
+5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+version of libpng, which results in cropped images. Recompile it from
+source, and make sure that the pnmtopng binary is linked statically to
+the libpng that is included in libgr. RedHat 6.0 does not have this
+problem.
+
+@example
+ tar xzf libgr-2.0.13.tar.gz
+ make
+ cd png
+ rm libpng.so*
+ make pnmtopng
+
+@end example
+
+You can then install the new pnmtopng into @file{/usr/local/bin/}
+
+@item Bib2html @url{http://pertsserver.cs.uiuc.edu/~hull/bib2html.}
+ Which, in turn depends on man2html for proper installation.
+man2html can be had from @url{http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05}.
+
+The website will build without this utility, but you will not see our
+hypertextified bibliography.
+
+@item Doc++ (optional) to read the source code.
+
+@end itemize
+
+You also have to install @file{buildscripts/out/ps-to-gifs} in a
+directory that is in the path.
+
+@node CONFIGURING and COMPILING, CONFIGURING FOR MULTIPLE PLATFORMS, WEBSITE, INSTALL - compiling and installing GNU LilyPond
+@section CONFIGURING and COMPILING
+
+to install GNU LilyPond, simply type:
+@example
+
+ gunzip -c lilypond-x.y.z | tar xf -
+ cd lilypond-x.y.z
+ ./configure # fill in your standard prefix with --prefix
+ make
+ make install
+
+@end example
+
+This will install a number of files, something close to:
+@example
+
+ /usr/local/man/man1/mi2mu.1
+ /usr/local/man/man1/convert-mudela.1
+ /usr/local/man/man1/mudela-book.1
+ /usr/local/man/man1/lilypond.1
+ /usr/local/bin/lilypond
+ /usr/local/bin/mi2mu
+ /usr/local/share/lilypond/*
+ /usr/local/share/locale/@{it,nl@}/LC_MESSAGES/lilypond.mo
+
+@end example
+
+
+The above assumes that you are root and have the GNU development
+tools, and your make is GNU make. If this is not the case, you can
+adjust your environment variables to your taste:
+
+@example
+
+ export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
+ ./configure
+
+@end example
+
+@code{CPPFLAGS} are the preprocessor flags.
+
+The configure script is Cygnus configure, and it will accept
+@strong{--help}. If you are not root, you will probably have to make it
+with a different @strong{--prefix} option. Our favourite location is
+
+@example
+
+ ./configure --prefix=$HOME/usr
+
+@end example
+
+In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
+
+Since GNU LilyPond currently is beta, you are advised to also use
+
+@example
+
+ --enable-debugging
+ --enable-checking
+
+@end example
+
+Options to configure include:
+
+@table @samp
+@item @strong{--enable-printing}
+ Enable debugging print routines (lilypond @strong{-D} option)
+@item @strong{--enable-optimise}
+ Set maximum optimisation: compile with @strong{-O2}. This can be
+unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
+@item @strong{--enable-profiling}
+ Compile with support for profiling.
+@item @strong{--enable-config}
+ Output to a different configuration file. Needed for multi-platform
+ builds
+@end table
+
+All options are documented in the @file{configure} help
+The option @strong{--enable-optimise} is recommended for Real Life usage.
+
+If you do
+
+@example
+
+ make all
+
+@end example
+
+everything will be compiled, but nothing will be installed. The
+resulting binaries can be found in the subdirectories @file{out/} (which
+contain all files generated during compilation).
+
+@node CONFIGURING FOR MULTIPLE PLATFORMS, INSTALLING, CONFIGURING and COMPILING, INSTALL - compiling and installing GNU LilyPond
+@section CONFIGURING FOR MULTIPLE PLATFORMS
+
+If you want to compile LilyPond with different configuration settings,
+then, you can use the @strong{--enable-config} option. Example: suppose I
+want to build with and without profiling. Then I'd use the
+following for the normal build,
+
+@example
+
+ ./configure --prefix=~ --disable-optimise --enable-checking
+ make
+ make install
+
+@end example
+
+and for the profiling version, I specify a different configuration.
+
+@example
+
+ ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
+ make config=optprof
+ make config=optprof install
+
+@end example
+
+
+@node INSTALLING, REDHAT LINUX, CONFIGURING FOR MULTIPLE PLATFORMS, INSTALL - compiling and installing GNU LilyPond
+@section INSTALLING
+
+If you have done a successful @code{make}, then a simple
+
+@example
+
+ make install
+
+@end example
+
+should do the trick.
+
+If you are doing an upgrade, please remember to remove obsolete
+@file{.pk} and @file{.tfm} files of the fonts. A script has been
+provided to do the work for you, see @file{bin/clean-fonts.sh}.
+
+@unnumberedsec CAVEATS
+
+
+@itemize @bullet
+@item The -O2 option triggers bugs on various platforms (PowerPC, Alpha).
+ If you experience problems, you should first try turning off
+ this.
+@item On PPC you need at least EGCS-1.1.2f.
+@end itemize
+
+@node REDHAT LINUX, DEBIAN GNU/LINUX, INSTALLING, INSTALL - compiling and installing GNU LilyPond
+@section REDHAT LINUX
+
+RedHat Linux users can compile an RPM. A spec file is in
+@file{make/out/lilypond.spec}, it is distributed along with the
+sources.
+
+You can make the rpm by issuing
+@example
+
+ rpm -tb lilypond-x.y.z.tar.gz
+ rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
+
+@end example
+
+Precompiled i386 RedHat RPMS are available from
+@url{ftp://freshmeat.net/pub/rpms/lilypond/} and
+@url{http://linux.umbc.edu/software/lilypond/rpms/}.
+
+For compilation on a RedHat system you need these packages,
+in addition to the those needed for running:
+@itemize @bullet
+@item glibc-devel
+@item libstdc++-devel
+@item guile-devel
+@item flex
+@item bison
+@item texinfo
+@end itemize
+
+@node DEBIAN GNU/LINUX, WINDOWS NT/95, REDHAT LINUX, INSTALL - compiling and installing GNU LilyPond
+@section DEBIAN GNU/LINUX
+
+A Debian package is also available; contact Anthony Fok
+@email{foka@@debian.org}. The build scripts are in the subdirectory
+@file{debian/}.
+
+@node WINDOWS NT/95, w32, DEBIAN GNU/LINUX, INSTALL - compiling and installing GNU LilyPond
+@section WINDOWS NT/95
+@node w32, BUGS, WINDOWS NT/95, INSTALL - compiling and installing GNU LilyPond
+
+
+Separate instructions on building for W32 are available
+@url{../../outdir/README-W32.html}.
+
+@node BUGS, AUTHORS, w32, INSTALL - compiling and installing GNU LilyPond
+@section BUGS
+
+Send bug reports to bug-gnu-music@@gnu.org. For help and questions use
+help-gnu-music@@gnu.org and gnu-music-discuss@@gnu.org. Please consult
+the faq before mailing your problems.
+
+@node AUTHORS, Top, BUGS, INSTALL - compiling and installing GNU LilyPond
+@section AUTHORS
+
+@email{hanwen@@cs.uu.nl, Han-Wen Nienhuys}
+
+@email{janneke@@gnu.org, Jan Nieuwenhuizen}
+
+In case of problems, please use the mailing list for help.
+
+Have fun!
+
+@bye
+++ /dev/null
-article(NSTALL - compiling and installing GNU LilyPond)(HWN & JCN)()
-
-sect(ABSTRACT)
-
-This document explains what you need to install LilyPond, and what you
-should do. If you are going to compile and install LilyPond often,
-e.g. when doing development, you might want to check out the
-file(buildscripts/set-lily.sh) script. It sets some environment
-variables and symlinks, which comes in handly when you have to compile
-LilyPond more often.
-
-sect(OBTAINING)
-
-You can get the latest version of LilyPond at
-lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/). Refer to the links
-document for mirror sites.
-
-em(If you upgrade by patching do remember to rerun autoconf after
-applying the patch).
-
-sect(PREREQUISITES)
-
-For compilation you need:
-
-itemize(
-it()A GNU system: GNU LilyPond is known to run on these GNU systems: Linux
- (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
-Solaris.
-
-it()Lots of disk space: LilyPond takes between 30 and 100 mb to
-compile if you use debugging information. If you are short on
-disk-space run configure with code(--disable-debugging).
-
-Although we recommend to use Unix, LilyPond is known to run on Windows
-NT/95/98 as well. See Section ref(w32).
-
-it() EGCS 1.1 or newer.
-
-it() Python 1.5,
-Check out
-lurl(ftp://ftp.python.org) or lurl(ftp://ftp.cwi.nl/pub/python).
-
-it() GUILE 1.3, check out lurl(http://www.gnu.org/software/guile/guile.html).
-
-it()GNU make.
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Flex (version 2.5.4 or newer).
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Bison (version 1.25 or newer).
-Check out lurl(ftp://ftp.gnu.org).
-
-it()Yodl. All documentation will be in Yodl. (1.31.15)
-lurl(ftp://ftp.lilypond.org/pub/yodl). You need the latest version of YODL,
-because the tutorial will trigger a bug in earlier versions.
-
-it()The geometry package for LaTeX is needed to use ly2dvi.
-Available at
-lurl(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
-or at mirror site lurl(ftp://ftp.dante.de)
-
-it()MetaPost, if you want to use direct PostScript output. Please
-note that tetex-0.4pl8 (included with Redhat 5.x) does not include
-file(mfplain.mp), which is needed for producing the scaleable font files.
-)
-
-
-sect(RUNNING)
-
-GNU LilyPond does use a lot of resources. For operation you need the
-following software
-
-itemize(
-it()TeX
-it()A PostScript printer and/or viewer (such as Ghostscript) is strongly
- recommended. Xdvi will show all embedded PostScript too if you have
- Ghostscript installed.
-it() GUILE 1.3, check out lurl(http://www.gnu.org/programs/guile.html)
-)
-
-
-For running LilyPond successfully you have to help TeX and MetaFont
-find various files. The recommended way of doing so is adjusting the
-environment variables in the start-up scripts of your shell. An
-example is given here for the Bourne shell:
-verb(export MFINPUTS="/usr/local/share/lilypond/mf:"
-export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
-)
-The empty path component
-represents TeX() and MetaFont's default search paths. Scripts with
-the proper paths for the bourne and C-shell respectively are generated in
-file(buildscripts/out/lilypond-profile) and
-file(buildscripts/out/lilypond-login) during compilation.
-
-LilyPond is a hiddeously big, slow and bloated program. A fast CPU
-and plenty of RAM is recommended for comfortable use.
-
-sect(WEBSITE)
-
-The website is the most convenient form to use for reading the
-documentation on-line documentation. It is made by entering verb(
- make website
-)This does require a fully functioning
-
-If you want to auto-generate Lily's website, you'll need some additional
-conversion tools.
-
-itemize(
-it()YODL 1.31.15 or later.
-
-it()xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
- users: it is included within the package libgr-progs).
- the original is at
-lurl(ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz)
-
-it()pnmtopng, which is also in libgr-progs for RedHat. The original is
-at
-lurl(ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz).i
-
-The version of file(pnmtopng) that is distributed with RedHat 5.1 and
-5.2 contains a bug: pnmtopng is dynamically linked to the wrong
-version of libpng, which results in cropped images. Recompile it from
-source, and make sure that the pnmtopng binary is linked statically to
-the libpng that is included in libgr. RedHat 6.0 does not have this
-problem.
-
-verb( tar xzf libgr-2.0.13.tar.gz
- make
- cd png
- rm libpng.so*
- make pnmtopng
-)
-
-You can then install the new pnmtopng into file(/usr/local/bin/)
-
-it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.)
- Which, in turn depends on man2html for proper installation.
-man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
-
-The website will build without this utility, but you will not see our
-hypertextified bibliography.
-
-it()Doc++ (optional) to read the source code.
-
-)
-
-You also have to install file(buildscripts/out/ps-to-gifs) in a
-directory that is in the path.
-
-
-sect(CONFIGURING and COMPILING)
-
-to install GNU LilyPond, simply type:
-verb(
- gunzip -c lilypond-x.y.z | tar xf -
- cd lilypond-x.y.z
- ./configure # fill in your standard prefix with --prefix
- make
- make install
-)
-
-This will install a number of files, something close to:
-verb(
- /usr/local/man/man1/mi2mu.1
- /usr/local/man/man1/convert-mudela.1
- /usr/local/man/man1/mudela-book.1
- /usr/local/man/man1/lilypond.1
- /usr/local/bin/lilypond
- /usr/local/bin/mi2mu
- /usr/local/share/lilypond/*
- /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
-)
-
-
-The above assumes that you are root and have the GNU development
-tools, and your make is GNU make. If this is not the case, you can
-adjust your environment variables to your taste:
-
-verb(
- export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
- ./configure
-)
-
-code(CPPFLAGS) are the preprocessor flags.
-
-The configure script is Cygnus configure, and it will accept
-bf(--help). If you are not root, you will probably have to make it
-with a different bf(--prefix) option. Our favourite location is
-
-verb(
- ./configure --prefix=$HOME/usr
-)
-
-In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
-
-Since GNU LilyPond currently is beta, you are advised to also use
-
-verb(
- --enable-debugging
- --enable-checking
-)
-
-Options to configure include:
-
-description(
-dit(bf(--enable-printing))
- Enable debugging print routines (lilypond bf(-D) option)
-dit(bf(--enable-optimise))
- Set maximum optimisation: compile with bf(-O2). This can be
-unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
-dit(bf(--enable-profiling))
- Compile with support for profiling.
-dit(bf(--enable-config))
- Output to a different configuration file. Needed for multi-platform
- builds
-)
-
-All options are documented in the file(configure) help
-The option bf(--enable-optimise) is recommended for Real Life usage.
-
-If you do
-
-verb(
- make all
-)
-
-everything will be compiled, but nothing will be installed. The
-resulting binaries can be found in the subdirectories file(out/) (which
-contain all files generated during compilation).
-
-sect(CONFIGURING FOR MULTIPLE PLATFORMS)
-
-If you want to compile LilyPond with different configuration settings,
-then, you can use the bf(--enable-config) option. Example: suppose I
-want to build with and without profiling. Then I'd use the
-following for the normal build,
-
-verb(
- ./configure --prefix=~ --disable-optimise --enable-checking
- make
- make install
- )
-
-and for the profiling version, I specify a different configuration.
-
-verb(
- ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
- make config=optprof
- make config=optprof install
-)
-
-
-sect(INSTALLING)
-
-If you have done a successful code(make), then a simple
-
-verb(
- make install
-)
-
-should do the trick.
-
-If you are doing an upgrade, please remember to remove obsolete
-file(.pk) and file(.tfm) files of the fonts. A script has been
-provided to do the work for you, see file(bin/clean-fonts.sh).
-
-nsect(CAVEATS)
-
-itemize(
-it()The -O2 option triggers bugs on various platforms (PowerPC, Alpha).
- If you experience problems, you should first try turning off
- this.
-it() On PPC you need at least EGCS-1.1.2f.
-)
-
-sect(REDHAT LINUX)
-
-RedHat Linux users can compile an RPM. A spec file is in
-file(make/out/lilypond.spec), it is distributed along with the
-sources.
-
-You can make the rpm by issuing
-verb(
- rpm -tb lilypond-x.y.z.tar.gz
- rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
-)
-
-Precompiled i386 RedHat RPMS are available from
-lurl(ftp://freshmeat.net/pub/rpms/lilypond/) and
-lurl(http://linux.umbc.edu/software/lilypond/rpms/).
-
-
-For compilation on a RedHat system you need these packages,
-in addition to the thoes needed for running:
-itemize(
-it() glibc-devel
-it() libstdc++-devel
-it() guile-devel
-it() flex
-it() bison
-)
-
-
-sect(DEBIAN GNU/LINUX)
-
-A Debian package is also available; contact Anthony Fok
-email(foka@debian.org). The build scripts are in the subdirectory
-file(debian/).
-
-
-sect(WINDOWS NT/95)
-label(w32)
-
-
-Separate instructions on building for W32 are avaible
-url(in the file README-W32.yo)(../../DOEXPAND(outdir)/README-W32.html).
-
-sect(BUGS)
-
-Send bug reports to bug-gnu-music@gnu.org. For help and questions use
-help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please consult
-the faq before mailing your problems.
-
-sect(AUTHORS)
-
-nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl)
-
-nemail(Jan Nieuwenhuizen)(janneke@gnu.org)
-
-In case of problems, please use the mailing list for help.
-
-
-Have fun!
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename PATCHES.info
+@settitle Toplevel
+
+@node Top, , , (dir)
+@top
+
+@unnumberedsec name
+
+
+PATCHES - track and distribute your code changes
+
+@unnumberedsec description
+
+
+This page documents how to distribute your changes to GNU lilypond
+
+@unnumberedsec abstract
+
+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
+
+@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
+ yodl -> yodl-1.30.17
+ yodl-1.30.17
+
+@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
+++ /dev/null
-nsect(NAME)
-
-PATCHES - track and distribute your code changes
-
-nsect(DESCRIPTION)
-
-This page documents how to distribute your changes to GNU lilypond
-
-nsect(ABSTRACT)
-
-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(
-it()make your fix/add your code
-it()Add changes to NEWS, and add yourself to Documentation/topdocs/AUTHORS.yo
-it()generate a patch,
-it()e-mail your patch to one of the mailing lists
- gnu-music-discuss@gnu.org or bug-gnu-music@gnu.org
-)
-
-nsect(GENERATING A PATCH)
-
-In file(VERSION), set MY_PATCH_LEVEL:
-
-verb(
- VERSION:
- ...
- MY_PATCH_LEVEL=jcn1
-)
-
-In file(NEWS), enter a summary of changes:
-
-verb(
- NEWS:
- pl 0.1.73.jcn1
- - added PATCHES.yo
-)
-
-Then, from the top of Lily's source tree, type
-
-verb(
- make dist
- make diff
-)
-
-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:
-
-verb(
- make release
-
- tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
- patch: ../patches/lilypond-0.1.73.jcn1.gz
- updeet: ../test/updeet
-)
-
-nsect(PREREQUISITES)
-
-For creating a patch you need
-
-itemize(
-it()All items mentioned in file(INSTALL). You're not going to send a patch
- that you haven't even built, right?
-it()GNU diff
-it()Python (version 1.5 or newer).
- You can of course make a patch by hand, which would go something like:
-
-verb(
- make distclean
- cd ..
- diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1
-)
-
-but there are handy python scripts available. If you're doing development,
-you'll need Python for other LilyPond scripts anyway.
-
-it()The Lily directory structure, which looks like:
-
-includefile(../../stepmake/Documentation/layout.yo)
-)
-
-nsect(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:
-
-verb(
- gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E
-)
-
-and don't forget to make automatically generated files:
-
-verb(
- autoconf footnote(patches don't include automatically generated files,
- i.e. file(configure) and files generated by file(configure).)
-
- configure
-)
-
-nsect(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:
-
-verb(
- cd lilypond-0.1.74
- gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
- autoconf
- configure
-)
-
-Then, make a patch as shown above.
-
-nsect(SEE ALSO)
-
-file(stepmake/INSTALL.txt)
-
-nsect(MAINTAINER)
-
-nemail(Han-Wen Nienhuys)(hanwen@cs.uu.nl)
-
-Just keep on sending those patches!
-
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename README.info
+@settitle This is the toplevel README to LilyPond
+
+@node Top, , cdrom distributions, (dir)
+@top
+@menu
+* This is the toplevel README to LilyPond::This is the toplevel README to LilyPond
+@end menu
+
+
+
+
+@node This is the toplevel README to LilyPond, versioning, , Top
+@menu
+* versioning:: versioning
+* requirements:: requirements
+* installation:: installation
+* documentation:: documentation
+* comments:: comments
+* windows 32:: windows 32
+* caveats:: caveats
+* bugs:: bugs
+* cdrom distributions:: cdrom distributions
+@end menu
+@chapter This is the toplevel README to LilyPond
+
+
+LilyPond is a music typesetter. It produces beautiful sheet music
+using a high level description file as input. LilyPond is part of
+the GNU Project.
+
+@node versioning, requirements, This is the toplevel README to LilyPond, This is the toplevel README to LilyPond
+@section versioning
+
+LilyPond uses a versioning scheme similar to the Linux kernel. In a
+version "x.y.z", an even second number 'y' denotes a stable version.
+For development versions 'y' is odd. For using straightforward score
+production, please use the latest stable version. Development versions
+may not produce good or nice scores.
+
+@node requirements, installation, versioning, This is the toplevel README to LilyPond
+@section requirements
+
+For the compilation and running of LilyPond you need some additional
+packages. Please refer to the installation instructions.
+
+NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
+you don't have to compile LilyPond.
+
+@node installation, documentation, requirements, This is the toplevel README to LilyPond
+@section installation
+
+For your convenience, a formatted copy of the INSTALL instructions are
+in the toplevel directory, as INSTALL.txt
+
+@node documentation, comments, installation, This is the toplevel README to LilyPond
+@section documentation
+
+The real documentation is the directory Documentation/
+
+If you want to read the documentation online, these are options:
+@itemize @bullet
+@item use @file{.html}. Refer to INSTALL.txt for info on how to make the
+.html documentation.
+@item use @file{.html}. Point your browser to
+@uref{http://www.cs.uu.nl/~hanwen/lilypond/index.html}.
+@item use @file{.dvi}, for the tutorial and reference manual. Do
+
+@example
+ make -C Documentation/tex/ dvi
+@end example
+
+
+@item use ASCII. Do
+using @example
+ make -C Documentation/
+@end example
+
+@end itemize
+
+
+@node comments, windows 32, documentation, This is the toplevel README to LilyPond
+@section comments
+
+LilyPond is a long way from finished and polished. We do appreciate
+criticism, comments, bugreports, patches, etc.
+@example
+
+ Please send your e-mail to one of the MAILING LISTS
+
+@end example
+
+and @emph{not} to us personally. See @file{Documentation/links.yo} for more info.
+
+@node windows 32, caveats, comments, This is the toplevel README to LilyPond
+@section windows 32
+
+If you have received this file as part of a DOS/Window32 distribution
+(LilyPond-*.zip), then it is advisable to also download the source
+package, since it might contain more documentation
+@uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/}
+
+If you decide to build LilyPond from source, please read the INSTALL.txt
+document first, especially the Windows NT/95 section.
+
+@node caveats, bugs, windows 32, This is the toplevel README to LilyPond
+@section caveats
+
+* Please read the file BUGS for some ugly bugs.
+
+* If you have installed a previous version, be sure to remove old font
+files, eg
+@example
+rm `find /var/lib/texmf/fonts -name 'feta*'`
+@end example
+
+a script to do this for you is in @file{buildscripts/clean-fonts.sh}
+
+@node bugs, cdrom distributions, caveats, This is the toplevel README to LilyPond
+@section bugs
+
+Send bug reports to bug-gnu-music@@gnu.org. For help and questions use
+help-gnu-music@@gnu.org and gnu-music-discuss@@gnu.org. Please consult
+the faq before mailing your problems.
+
+@node cdrom distributions, Top, bugs, This is the toplevel README to LilyPond
+@section cdrom distributions
+
+if you have received LilyPond on a cdrom, chances are that development
+has moved a some patchlevels up. Please check the latest version of
+LilyPond before reporting bugs.
+
+
+@bye
+++ /dev/null
-COMMENT(-*-Text-*-)
-
-
-redef(XXsetchapternum)(0)()
-
-notableofcontents()
-article(This is the toplevel README to LilyPond)()()
-
-includefile(../BLURB.in)
-
-sect(VERSIONING)
-
-LilyPond uses a versioning scheme similar to the Linux kernel. In a
-version "x.y.z", an even second number 'y' denotes a stable version.
-For development versions 'y' is odd. For using straightforward score
-production, please use the latest stable version. Development versions
-may not produce good or nice scores.
-
-sect(REQUIREMENTS)
-
-For the compilation and running of LilyPond you need some additional
-packages. Please refer to the installation instructions.
-
-NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
-you don't have to compile LilyPond.
-
-
-sect(INSTALLATION)
-
-For your convenience, a formatted copy of the INSTALL instructions are
-in the toplevel directory, as INSTALL.txt
-
-The process is fairly straightforward, but chances are that you have
-to specify directories for TeX() to code(configure): this is done with
-the options code(--enable-tex-dir) and code(--enable-mf-dir)
-
-
-sect(DOCUMENTATION)
-
-The real documentation is the directory Documentation/
-
-If you want to read the documentation online, these are options:
-itemize(
-it() use file(.html). Refer to INSTALL.txt for info on how to make the
-.html documentation.
-it() use file(.html). Point your browser to
-lurl(http://www.cs.uu.nl/~hanwen/lilypond/index.html).
-it() use file(.dvi), for the tutorial and reference manual. Do verb(
- make -C Documentation/tex/ dvi)
-
-it() use ASCII. Do
-using verb(
- make -C Documentation/
-)
-The tutorial and the reference manual can not be made in ASCII, as
-they contain graphics.
-)
-
-
-
-sect(COMMENTS)
-
-LilyPond is a long way from finished and polished. We do appreciate
-criticism, comments, bugreports, patches, etc.
-verb(
- Please send your e-mail to one of the MAILING LISTS
-)
-and em(not) to us personally. See file(Documentation/links.yo) for more info.
-
-
-sect(WINDOWS 32)
-
-If you have received this file as part of a DOS/Window32 distribution
-(LilyPond-*.zip), then it is advisable to also download the source
-package, since it might contain more documentation
-lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/)
-
-If you decide to build LilyPond from source, please read the INSTALL.txt
-document first, especially the Windows NT/95 section.
-
-
-sect(CAVEATS)
-
-* Please read the file BUGS for some ugly bugs.
-
-* If you have installed a previous version, be sure to remove old font
-files, eg
-verb(rm `find /var/lib/texmf/fonts -name 'feta*'`)
-
-a script to do this for you is in file(buildscripts/clean-fonts.sh)
-
-
-sect(BUGS)
-
-Send bug reports to bug-gnu-music@gnu.org. For help and questions use
-help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please consult
-the faq before mailing your problems.
-
-
-sect(CDROM DISTRIBUTIONS)
-
-If you have received LilyPond on a cdrom, chances are that development
-has moved a some patchlevels up. Please check the latest version of
-LilyPond before reporting bugs.
-
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+@setfilename index.info
+@settitle index
+
+@node Top, , , (dir)
+@top
+
+
+
+@unnumbered LilyPond -- The @uref{http://www.fsf.org/gnu/gnu-history.html,GNU Project} Music Typesetter
+
+@quotation
+@mudela[fragment]
+ \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
+@end mudela
+@end quotation
+
+@c include BLURB?
+
+LilyPond is a music typesetter. It produces beautiful sheet music
+using a high level description file as input. LilyPond is part of
+the GNU Project.
+
+@c include screenshot
+
+
+
+@unnumberedsec View sheet music
+
+
+@itemize @bullet
+
+@item @uref{./input/out-www/index.html,Examples}:
+
+simple pieces, tests and bugs. MIDI, PNG, PostScript, and Source.
+
+@item @uref{./mutopia/out-www/index.html,Music in Mutopia}:
+
+LilyPond handling real music. MIDI, view PNG, PostScript, and Source.
+@end itemize
+
+@unnumberedsec Documentation
+
+
+@itemize @bullet
+@item @uref{Documentation/tex/out-www/tutorial.html,Tutorial}
+@item @uref{Documentation/out-www/faq.html,FAQ}
+@item @uref{Documentation/out-www/mail.html,Mailing Lists}
+@item @uref{Documentation/out-www/index.html,All of the LilyPond documentation}
+@item @uref{./docxx/index.html,The DOC++ documentation of the C++ sources.}
+@item @uref{Documentation/topdocs/out-www/INSTALL.html,The installation instructions}
+@end itemize
+
+@unnumberedsec Sites
+
+
+@itemize @bullet
+@item @uref{http://www.gnu.org/software/...} LilyPond is part of the GNU
+project. The webpages for the stable version reside at GNU.
+
+@item @uref{http://www.cs.uu.nl/people/hanwen/lilypond/} Han-Wen's site
+has the development pages.
+@item @uref{http://sca.uwaterloo.ca/lilypond/} Eric's mirror
+@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} Jeff's Windows NT Distribution site
+@end itemize
+
+@unnumberedsec NEWS
+
+
+This is what the latest version brings:
+@example
+
+top_of_NEWS
+
+@end example
+
+@unnumberedsec Download
+
+@itemize @bullet
+@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/}
+@item @uref{http://sca.uwaterloo.ca/lilypond/}
+ Eric Praetzel was kind enough to provide a mirror of both the website
+ and the ftp site.
+@item @uref{ftp://ftp.lilypond.org/pub/LilyPond/}
+ A mirror of the FTP site. Updated at 0:00 MET daily.
+@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/} RedHat binary
+@item @uref{ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex} Debian binary
+@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/} Windows NT binary
+@item @uref{http://linux.umbc.edu/software/lilypond/rpms/} i386 RPM.
+@item @uref{ftp://freshmeat.net/pub/rpms/lilypond/} i386 RPM.
+@end itemize
+
+@unnumberedsubsec Webmaster's Disclaimer
+
+These pages were entirely created from the LilyPond package-sources.
+Sorry for poor look they have: we want to be hacking at LilyPond, and
+not at the webpages. If you want to volunteer for making shazzy
+webpages, then please mail us!
+
+Note: These pages are created from the latest @strong{development snapshots}
+of LilyPond, specifically, this page was made from LilyPond
+(fixme-version).tar.gz
+
+Note: the pages may have been created from an unreleased development
+version. Please have patience, all changes will appear in the
+official version.
+
+@bye
+++ /dev/null
-DEFINEMACRO(depth)(0)(.)
-DEFINEMACRO(docdir)(0)(Documentation)
-DEFINEMACRO(pic)(1)(url(ARG1)(DOEXPAND(docdir)/pictures/DOEXPAND(outdir)/ARG1.png
-))
-
-DEFINEMACRO(beginbold)(0)(whenhtml(htmlcommand(<font size=4><strong>)))
-DEFINEMACRO(endbold)(0)(whenhtml(htmlcommand(</strong></font>)))
-redef(htmlnewfile)(0)()
-setchapterstring()
-
-nchapter(LilyPond -- The url(GNU Project)(http://www.fsf.org/gnu/gnu-history.html) Music Typesetter)
-
-includefile(../BLURB.in)(url(italiano)(DOEXPAND(docdir)/DOEXPAND(outdir)/COPERTINA.html))(url(nederlands)(DOEXPAND(docdir)/DOEXPAND(outdir)/FLAPTEKST.html))
-nl()
-pic(screenshot)
-
-center(mudela(fragment)(
- \relative c'' { \key es; r8 [c16 b] [c8 g] [as c16 b] [c8 d] | g,4 }
-))
-
-nsect(Free Software)
-
-Of course LilyPond, being part of the GNU project, is url(free
-software)(http://www.fsf.org/copyleft/copyleft.html). For more
-url(information)(http://www.fsf.org/philosophy/philosophy.html), see
-the url(Free Software Foundation)(http://www.fsf.org/).
-
-LilyPond comes in two variants, a stable one, and a development
-snapshots. The webpages matching the stable versions are at
-lurl(http://www.gnu.org/software/...), the development pages are at
-lurl(http://www.cs.uu.nl/~hanwen/lilypond/).
-
-
-nsect(Preview)
-
-itemize(
-beginbold()
-it()url(Examples)(DOEXPAND(depth)/input/DOEXPAND(outdir)/index.html):
-endbold()
- simple pieces, tests and bugs. MIDI, PNG (gif replacement), PostScript, and Source.
-beginbold()
-it()url(Music in Mutopia)(DOEXPAND(depth)/mutopia/DOEXPAND(outdir)/index.html):
-endbold()
- LilyPond handling real music. MIDI, view PNG (gif replacement), PostScript, and Source.
-)
-
-nsect(Documentation)
-
-itemize(
-it()url(Tutorial)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/tutorial.html)
-it()url(FAQ)(DOEXPAND(docdir)/DOEXPAND(outdir)/faq.html)
-it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
-it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
-it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
-it()url(The installation instructions)(Documentation/topdocs/DOEXPAND(outdir)/INSTALL.html)
-)
-
-nsect(Sites)
-
-itemize(
-it()lurl(http://www.cs.uu.nl/people/hanwen/lilypond/) Han-Wen's site
-it()lurl(http://sca.uwaterloo.ca/lilypond/) Eric's mirror
-it()lurl(http://home.austin.rr.com/jbr/jeff/lilypond/) Jeff's Windows NT Distribution site
-)
-
-nsect(NEWS)
-
-This is what the latest version brings:
-verb(
-top_of_NEWS
-)
-
-nsect(Download)
-
-beginbold()
-Go get it at
-itemize(
-it()lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/)
-endbold()
-it() lurl(http://sca.uwaterloo.ca/lilypond/)
- Eric Praetzel was kind enough to provide a mirror of both the website
- and the ftp site.
-it() lurl(ftp://ftp.lilypond.org/pub/LilyPond/)
- A mirror of the FTP site. Updated at 0:00 MET daily.
-it()lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/RedHat/RPMS/) RedHat binary
-it()lurl(ftp://ftp.debian.org/pub/debian/dists/unstable/main/binary-i386/tex) Debian binary
-it()lurl(http://home.austin.rr.com/jbr/jeff/lilypond/) Windows NT binary
-it()lurl(http://linux.umbc.edu/software/lilypond/rpms/) i386 RPM.
-it()lurl(ftp://freshmeat.net/pub/rpms/lilypond/) i386 RPM.
-)
-
-nsubsect(Webmaster's Disclaimer)
-
-These pages were entirely created from the LilyPond package-sources.
-Sorry for poor look they have: we want to be hacking at LilyPond, and
-not at the webpages. If you want to volunteer for making shazzy
-webpages, then please mail us!
-
-Note: These pages are created from the latest bf(development snapshots)
-of LilyPond, specifically, this page was made from LilyPond
-@TOPLEVEL_VERSION@.tar.gz
-
-Note: the pages may have been created from an unreleased development
-version. Please have patience, all changes will appear in the
-official version.
-
-@COUNTER_REF@
+++ /dev/null
-18:46:03 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Ontleden...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Vertolken van muziek...[8][16][24][25]
-duur: 1.34 seconden
-Voorbewerken van elementen... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Berekenen van kolomposities... [3][6][9][12][15][18][21][24][25]
-geschat: 231 regels (van gemiddeld 21.4 kolommen)
-exact berekend: 66 regels (van gemiddeld 25.5 kolommen)
-duur: 6.11 seconden
-Nabewerken van elementen...
-TeX uitvoer naar twinkle.tex...
-
-Vertolken van muziek...
-duur: 0.22 seconden
-MIDI uitvoer naar twinkle.midi...
+++ /dev/null
-18:37:15 mub ~/lelie$ lilypond twinkle
-GNU LilyPond 0.1.78/FlowerLib 1.1.44.
-Analizzare...[/home/fred/usr/src/lilypond/init/init.ly[/home/fred/usr/src/lilypond/init/declarations.ly[/home/fred/usr/src/lilypond/init/dynamic.ly][/home/fred/usr/src/lilypond/init/nederlands.ly][/home/fred/usr/src/lilypond/init/script.ly][/home/fred/usr/src/lilypond/init/paper20.ly[/home/fred/usr/src/lilypond/init/table20.ly][/home/fred/usr/src/lilypond/init/table13.ly][/home/fred/usr/src/lilypond/init/table16.ly][/home/fred/usr/src/lilypond/init/params.ly[/home/fred/usr/src/lilypond/init/a4.ly][/home/fred/usr/src/lilypond/init/paper.ly][/home/fred/usr/src/lilypond/init/engraver.ly]]][/home/fred/usr/src/lilypond/init/midi.ly[/home/fred/usr/src/lilypond/init/performer.ly]][/home/fred/usr/src/lilypond/init/property.ly]][/home/fred/usr/src/lilypond/input/twinkle.ly]]
-Interpretare musica...[8][16][24][25]
-durata: 1.36 secondi
-Preprocessare elementi... [/home/fred/usr/src/lilypond/mf/out/feta20.afm]
-Calcolare posizioni di colonne... [3][6][9][12][15][18][21][24][25]
-approssimato: 231 linee (con una media di 21 colonne):
-calcolato esattamente: 66 linee (con una media di 25 colonne)
-durata: 6.14 secondi
-Postprocessare elementi...
-Prodotto di TeX verso twinkle.tex...
-
-Interpretare musica...
-durata: 0.21 secondi
-Prodotto di MIDI verso twinkle.midi...
+++ /dev/null
-whenhtml(htmlcommand(<meta http-equiv=refresh content="0; url=Documentation/topdocs/out-www/index.html">))
- NSTALL - compiling and installing GNU LilyPond
- HWN & JCN
+INSTALL - compiling and installing GNU LilyPond
+***********************************************
-Contents
+ABSTRACT
+========
- 1: ABSTRACT
-2: OBTAINING
-3: PREREQUISITES
-4: RUNNING
-5: WEBSITE
-6: CONFIGURING and COMPILING
-7: CONFIGURING FOR MULTIPLE PLATFORMS
-8: INSTALLING
-9: REDHAT LINUX
-10: DEBIAN GNU/LINUX
-11: WINDOWS NT/95
-12: BUGS
-13: AUTHORS
+ This document explains what you need to install LilyPond, and what
+you should do. If you are going to compile and install LilyPond often,
+e.g. when doing development, you might want to check out the
+`buildscripts/set-lily.sh' script. It sets some environment variables
+and symlinks, which comes in handly when you have to compile LilyPond
+more often.
-1: ABSTRACT
+OBTAINING
+=========
-This document explains what you need to install LilyPond,
-and what you should do. If you are going to compile and
-install LilyPond often, e.g. when doing development, you
-might want to check out the buildscripts/set-lily.sh script.
-It sets some environment variables and symlinks, which comes
-in handly when you have to compile LilyPond more often.
+ You can get the latest version of LilyPond at <
+ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/>. Refer to the links document for
+mirror sites.
-2: OBTAINING
+ _If you upgrade by patching do remember to rerun autoconf after
+applying the patch_.
-You can get the latest version of LilyPond at
-ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/. Refer to the links
-document for mirror sites.
+PREREQUISITES
+=============
-If you upgrade by patching do remember to rerun autoconf
-after applying the patch.
+ For compilation you need:
-3: PREREQUISITES
+ * A GNU system: GNU LilyPond is known to run on these GNU systems:
+ Linux (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix
+ and Solaris.
-For compilation you need:
+ * Lots of disk space: LilyPond takes between 30 and 100 mb to
+ compile if you use debugging information. If you are short on
+ disk-space run configure with `--disable-debugging'.
-o A GNU system: GNU LilyPond is known to run on these GNU
- systems: Linux (PPC, intel), FreeBSD, AIX, NeXTStep,
- IRIX, Digital Unix and Solaris.
+ Although we recommend to use Unix, LilyPond is known to run on
+ Windows NT/95/98 as well. See Section *Note w32::.
-o Lots of disk space: LilyPond takes between 30 and 100
- mb to compile if you use debugging information. If you
- are short on disk-space run configure with --disable-
- debugging.
+ * EGCS 1.1 or newer. Check out < ftp://ftp.gnu.org/pub/gcc/>
- Although we recommend to use Unix, LilyPond is known to
- run on Windows NT/95/98 as well. See Section 11.
+ * Python 1.5, Check out <ftp://ftp.python.org> or
+ <ftp://ftp.cwi.nl/pub/python>.
-o EGCS 1.1 or newer.
+ * GUILE 1.3, check out
+ <http://www.gnu.org/software/guile/guile.html>.
-o Python 1.5, Check out ftp://ftp.python.org or
- ftp://ftp.cwi.nl/pub/python.
+ * GNU make. Check out <ftp://ftp.gnu.org/make/>.
-o GUILE 1.3, check out http://www.gnu.org/soft-
- ware/guile/guile.html.
+ * Flex (version 2.5.4 or newer). Check out
+ <ftp://ftp.gnu.org/flex/>.
-o GNU make. Check out ftp://ftp.gnu.org.
+ * Bison (version 1.25 or newer). Check out
+ <ftp://ftp.gnu.org/bison/>.
-o Flex (version 2.5.4 or newer). Check out
- ftp://ftp.gnu.org.
+ * Texinfo. Check out <ftp://ftp.gnu.org/pub/texinfo/>. Most
+ documentation is in texinfo.
-o Bison (version 1.25 or newer). Check out
- ftp://ftp.gnu.org.
+ * Yodl. Needed for obsolete docs (1.31.17)
+ <ftp://ftp.lilypond.org/pub/yodl>.
-o Yodl. All documentation will be in Yodl. (1.31.15)
- ftp://ftp.lilypond.org/pub/yodl. You need the latest
- version of YODL, because the tutorial will trigger a
- bug in earlier versions.
+ * The geometry package for LaTeX is needed to use ly2dvi. Available
+ at
+ <ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry>
+ or at mirror site <ftp://ftp.dante.de>
-o The geometry package for LaTeX is needed to use ly2dvi.
- Available at ftp://ftp.ctan.org/tex-
- archive/macros/latex/contrib/supported/geometry or at
- mirror site ftp://ftp.dante.de
+ * MetaPost, if you want to use direct PostScript output. Please note
+ that tetex-0.4pl8 (included with Redhat 5.x) does not include
+ `mfplain.mp', which is needed for producing the scaleable font
+ files.
-o MetaPost, if you want to use direct PostScript output.
- Please note that tetex-0.4pl8 (included with Redhat
- 5.x) does not include mfplain.mp, which is needed for
- producing the scaleable font files.
-4: RUNNING
+RUNNING
+=======
-GNU LilyPond does use a lot of resources. For operation you
-need the following software
+ GNU LilyPond does use a lot of resources. For operation you need the
+following software
-o TeX
+ * TeX
-o A PostScript printer and/or viewer (such as
- Ghostscript) is strongly recommended. Xdvi will show
- all embedded PostScript too if you have Ghostscript
- installed.
+ * A PostScript printer and/or viewer (such as Ghostscript) is
+ strongly recommended. Xdvi will show all embedded PostScript
+ too if you have Ghostscript installed.
-o GUILE 1.3, check out http://www.gnu.org/pro-
- grams/guile.html
-
-For running LilyPond successfully you have to help TeX and
-MetaFont find various files. The recommended way of doing
-so is adjusting the environment variables in the start-up
-scripts of your shell. An example is given here for the
-Bourne shell:
+ * GUILE 1.3, check out <http://www.gnu.org/programs/guile.html>
+ For running LilyPond successfully you have to help TeX and MetaFont
+find various files. The recommended way of doing so is adjusting the
+environment variables in the start-up scripts of your shell. An
+example is given here for the Bourne shell:
export MFINPUTS="/usr/local/share/lilypond/mf:"
export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
-The empty path component represents and MetaFont's default
-search paths. Scripts with the proper paths for the bourne
-and C-shell respectively are generated in build-
-scripts/out/lilypond-profile and buildscripts/out/lilypond-
-login during compilation.
+ The empty path component represents TeX and MetaFont's default
+search paths. Scripts with the proper paths for the bourne and C-shell
+respectively are generated in `buildscripts/out/lilypond-profile' and
+`buildscripts/out/lilypond-login' during compilation.
-LilyPond is a hiddeously big, slow and bloated program. A
-fast CPU and plenty of RAM is recommended for comfortable
-use.
+ LilyPond is a hiddeously big, slow and bloated program. A fast CPU
+and plenty of RAM is recommended for comfortable use.
-5: WEBSITE
+WEBSITE
+=======
-The website is the most convenient form to use for reading
-the documentation on-line documentation. It is made by
-entering
+ The website is the most convenient form to use for reading the
+documentation on-line documentation. It is made by entering
make website
+ This does require a fully functioning
-This does require a fully functioning
-
-If you want to auto-generate Lily's website, you'll need
-some additional conversion tools.
-
-o YODL 1.31.15 or later.
+ If you want to auto-generate Lily's website, you'll need some
+additional conversion tools.
-o xpmtoppm (from the Portable Bitmap Utilities) (For Red-
- Hat Linux users: it is included within the package
- libgr-progs). the original is at ftp://ftp.x.org/con-
- trib/utilities/netpbm-1mar1994.p1.tar.gz
+ * YODL 1.31.15 or later.
-o pnmtopng, which is also in libgr-progs for RedHat. The
- original is at
- ftp://swrinde.nde.swri.edu/pub/png/applications/pnm-
- topng-2.37.2.tar.gz.i
+ * xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
+ users: it is included within the package libgr-progs).
+ the original is at
+ <ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz>
- The version of pnmtopng that is distributed with RedHat
- 5.1 and 5.2 contains a bug: pnmtopng is dynamically
- linked to the wrong version of libpng, which results in
+ * pnmtopng, which is also in libgr-progs for RedHat. The original is
+ at
+ <ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz>.i
- cropped images. Recompile it from source, and make
- sure that the pnmtopng binary is linked statically to
- the libpng that is included in libgr. RedHat 6.0 does
- not have this problem.
+ The version of `pnmtopng' that is distributed with RedHat 5.1 and
+ 5.2 contains a bug: pnmtopng is dynamically linked to the wrong
+ version of libpng, which results in cropped images. Recompile it
+ from source, and make sure that the pnmtopng binary is linked
+ statically to the libpng that is included in libgr. RedHat 6.0
+ does not have this problem.
tar xzf libgr-2.0.13.tar.gz
make
rm libpng.so*
make pnmtopng
- You can then install the new pnmtopng into
- /usr/local/bin/
+ You can then install the new pnmtopng into `/usr/local/bin/'
-o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
- Which, in turn depends on man2html for proper installa-
- tion. man2html can be had from http://askdon-
- ald.ask.uni-karlsruhe.de/hppd/hpux/Network-
- ing/WWW/Man2html-1.05.
+ * Bib2html <http://pertsserver.cs.uiuc.edu/~hull/bib2html.>
+ Which, in turn depends on man2html for proper installation.
+ man2html can be had from
+ <http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05>.
- The website will build without this utility, but you
- will not see our hypertextified bibliography.
+ The website will build without this utility, but you will not see
+ our hypertextified bibliography.
-o Doc++ (optional) to read the source code.
+ * Doc++ (optional) to read the source code.
-You also have to install buildscripts/out/ps-to-gifs in a
+
+ You also have to install `buildscripts/out/ps-to-gifs' in a
directory that is in the path.
-6: CONFIGURING and COMPILING
+CONFIGURING and COMPILING
+=========================
+
+ to install GNU LilyPond, simply type:
+
+ gunzip -c lilypond-x.y.z | tar xf -
+ cd lilypond-x.y.z
+ ./configure # fill in your standard prefix with --prefix
+ make
+ make install
-to install GNU LilyPond, simply type:
+ This will install a number of files, something close to:
- gunzip -c lilypond-x.y.z | tar xf -
- cd lilypond-x.y.z
- ./configure # fill in your standard prefix with --prefix
- make
- make install
+ /usr/local/man/man1/mi2mu.1
+ /usr/local/man/man1/convert-mudela.1
+ /usr/local/man/man1/mudela-book.1
+ /usr/local/man/man1/lilypond.1
+ /usr/local/bin/lilypond
+ /usr/local/bin/mi2mu
+ /usr/local/share/lilypond/*
+ /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
-This will install a number of files, something close to:
+ The above assumes that you are root and have the GNU development
+tools, and your make is GNU make. If this is not the case, you can
+adjust your environment variables to your taste:
- /usr/local/man/man1/mi2mu.1
- /usr/local/man/man1/convert-mudela.1
- /usr/local/man/man1/mudela-book.1
- /usr/local/man/man1/lilypond.1
- /usr/local/bin/lilypond
- /usr/local/bin/mi2mu
- /usr/local/share/lilypond/*
- /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
-The above assumes that you are root and have the GNU devel-
-opment tools, and your make is GNU make. If this is not the
-case, you can adjust your environment variables to your
-taste:
+ export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
+ ./configure
- export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
- ./configure
+ `CPPFLAGS' are the preprocessor flags.
-CPPFLAGS are the preprocessor flags.
+ The configure script is Cygnus configure, and it will accept
+*-help*. If you are not root, you will probably have to make it with a
+different *-prefix* option. Our favourite location is
-The configure script is Cygnus configure, and it will accept
---help. If you are not root, you will probably have to make
-it with a different --prefix option. Our favourite location
-is
- ./configure --prefix=$HOME/usr
+ ./configure --prefix=$HOME/usr
-In this case, you will have to set up MFINPUTS, and TEXIN-
-PUTS accordingly.
+ In this case, you will have to set up MFINPUTS, and TEXINPUTS
+accordingly.
-Since GNU LilyPond currently is beta, you are advised to
-also use
+ Since GNU LilyPond currently is beta, you are advised to also use
- --enable-debugging
- --enable-checking
-Options to configure include:
+ --enable-debugging
+ --enable-checking
---enable-printing
- Enable debugging print routines (lilypond -D option)
+ Options to configure include:
---enable-optimise
- Set maximum optimisation: compile with -O2. This can
- be unreliable on some compiler/platform combinations
- (eg, DEC Alpha and PPC)
+`*--enable-printing*'
+ Enable debugging print routines (lilypond *-D* option)
---enable-profiling
+`*--enable-optimise*'
+ Set maximum optimisation: compile with *-O2*. This can be
+ unreliable on some compiler/platform combinations (eg, DEC Alpha
+ and PPC)
+
+`*--enable-profiling*'
Compile with support for profiling.
---enable-config
+`*--enable-config*'
Output to a different configuration file. Needed for
- multi-platform builds
+ multi-platform builds
+
+ All options are documented in the `configure' help The option
+*-enable-optimise* is recommended for Real Life usage.
+
+ If you do
-All options are documented in the configure help The option
---enable-optimise is recommended for Real Life usage.
-If you do
+ make all
- make all
+ everything will be compiled, but nothing will be installed. The
+resulting binaries can be found in the subdirectories `out/' (which
+contain all files generated during compilation).
-everything will be compiled, but nothing will be installed.
-The resulting binaries can be found in the subdirectories
-out/ (which contain all files generated during compilation).
+CONFIGURING FOR MULTIPLE PLATFORMS
+==================================
-7: CONFIGURING FOR MULTIPLE PLATFORMS
+ If you want to compile LilyPond with different configuration
+settings, then, you can use the *-enable-config* option. Example:
+suppose I want to build with and without profiling. Then I'd use the
+following for the normal build,
-If you want to compile LilyPond with different configuration
-settings, then, you can use the --enable-config option.
-Example: suppose I want to build with and without profil-
-ing. Then I'd use the following for the normal build,
./configure --prefix=~ --disable-optimise --enable-checking
make
make install
-and for the profiling version, I specify a different config-
-uration.
+ and for the profiling version, I specify a different configuration.
+
./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
make config=optprof
make config=optprof install
-8: INSTALLING
+INSTALLING
+==========
+
+ If you have done a successful `make', then a simple
-If you have done a successful make, then a simple
- make install
+ make install
-should do the trick.
+ should do the trick.
-If you are doing an upgrade, please remember to remove obso-
-lete .pk and .tfm files of the fonts. A script has been
-provided to do the work for you, see bin/clean-fonts.sh.
+ If you are doing an upgrade, please remember to remove obsolete
+`.pk' and `.tfm' files of the fonts. A script has been provided to do
+the work for you, see `bin/clean-fonts.sh'.
CAVEATS
+=======
-o The -O2 option triggers bugs on various platforms
- (PowerPC, Alpha). If you experience problems, you
- should first try turning off this.
+ * The -O2 option triggers bugs on various platforms (PowerPC,
+ Alpha). If you experience problems, you should first try
+ turning off this.
-o On PPC you need at least EGCS-1.1.2f.
+ * On PPC you need at least EGCS-1.1.2f.
-9: REDHAT LINUX
+REDHAT LINUX
+============
-RedHat Linux users can compile an RPM. A spec file is in
-make/out/lilypond.spec, it is distributed along with the
-sources.
+ RedHat Linux users can compile an RPM. A spec file is in
+`make/out/lilypond.spec', it is distributed along with the sources.
-You can make the rpm by issuing
+ You can make the rpm by issuing
- rpm -tb lilypond-x.y.z.tar.gz
- rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
+ rpm -tb lilypond-x.y.z.tar.gz
+ rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
-Precompiled i386 RedHat RPMS are available from ftp://fresh-
-meat.net/pub/rpms/lilypond/ and http://linux.umbc.edu/soft-
-ware/lilypond/rpms/.
+ Precompiled i386 RedHat RPMS are available from
+<ftp://freshmeat.net/pub/rpms/lilypond/> and
+<http://linux.umbc.edu/software/lilypond/rpms/>.
-For compilation on a RedHat system you need these packages,
-in addition to the thoes needed for running:
+ For compilation on a RedHat system you need these packages, in
+addition to the thoes needed for running:
+ * glibc-devel
-o glibc-devel
+ * libstdc++-devel
-o libstdc++-devel
+ * guile-devel
-o guile-devel
+ * flex
-o flex
+ * bison
-o bison
+DEBIAN GNU/LINUX
+================
-10: DEBIAN GNU/LINUX
+ A Debian package is also available; contact Anthony Fok
+<foka@debian.org>. The build scripts are in the subdirectory `debian/'.
-A Debian package is also available; contact Anthony Fok
-foka@debian.org. The build scripts are in the subdirectory
-debian/.
+WINDOWS NT/95
+=============
-11: WINDOWS NT/95
+ Separate instructions on building for W32 are available
+<../../outdir/README-W32.html>.
-Separate instructions on building for W32 are avaible in the
-file README-W32.yo.
+BUGS
+====
-12: BUGS
+ Send bug reports to bug-gnu-music@gnu.org. For help and questions
+use help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please
+consult the faq before mailing your problems.
-Send bug reports to bug-gnu-music@gnu.org. For help and
-questions use help-gnu-music@gnu.org and gnu-music-dis-
-cuss@gnu.org. Please consult the faq before mailing your
-problems.
+AUTHORS
+=======
-13: AUTHORS
+ Han-Wen Nienhuys <hanwen@cs.uu.nl>
-Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ Jan Nieuwenhuizen <janneke@gnu.org>
-Jan Nieuwenhuizen <janneke@gnu.org>
+ In case of problems, please use the mailing list for help.
-In case of problems, please use the mailing list for help.
+ Have fun!
-Have fun!
* More elegant spacing. Text is spaced exactly.
* Lots of bugfixes.
-
-pl 1.2.2.lec1 fix to abc2ly for fermata and space following >; to paddy.abc to include X: header line (lec1); to PATCHES.yo to point to real authors.yo
- This is the toplevel README to LilyPond
-LilyPond is a music typesetter. It produces beautiful sheet
-music using a high level description file as input. Lily-
-Pond is part of the GNU Project.
+ )
-1: VERSIONING
+This is the toplevel README to LilyPond
+***************************************
-LilyPond uses a versioning scheme similar to the Linux ker-
-nel. In a version "x.y.z", an even second number 'y'
-denotes a stable version. For development versions 'y' is
-odd. For using straightforward score production, please use
-the latest stable version. Development versions may not
-produce good or nice scores.
+ LilyPond is a music typesetter. It produces beautiful sheet music
+using a high level description file as input. LilyPond is part of the
+GNU Project.
-2: REQUIREMENTS
+versioning
+==========
-For the compilation and running of LilyPond you need some
-additional packages. Please refer to the installation
-instructions.
+ LilyPond uses a versioning scheme similar to the Linux kernel. In a
+version "x.y.z", an even second number 'y' denotes a stable version.
+For development versions 'y' is odd. For using straightforward score
+production, please use the latest stable version. Development versions
+may not produce good or nice scores.
-NOTE: If you downloaded a binary (.rpm or a W95/NT .zip
-file), then you don't have to compile LilyPond.
+requirements
+============
-3: INSTALLATION
+ For the compilation and running of LilyPond you need some additional
+packages. Please refer to the installation instructions.
-For your convenience, a formatted copy of the INSTALL
-instructions are in the toplevel directory, as INSTALL.txt
+ NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
+you don't have to compile LilyPond.
-The process is fairly straightforward, but chances are that
-you have to specify directories for to configure: this is
-done with the options --enable-tex-dir and --enable-mf-dir
+installation
+============
-4: DOCUMENTATION
+ For your convenience, a formatted copy of the INSTALL instructions
+are in the toplevel directory, as INSTALL.txt
-The real documentation is the directory Documentation/
+ The process is fairly straightforward, but chances are that you have
+to specify directories for TeX to `configure': this is done with the
+options `--enable-tex-dir' and `--enable-mf-dir'
-If you want to read the documentation online, these are
-options:
+documentation
+=============
-o use .html. Refer to INSTALL.txt for info on how to make
- the .html documentation.
+ The real documentation is the directory Documentation/
-o use .html. Point your browser to
- http://www.cs.uu.nl/~hanwen/lilypond/index.html.
+ If you want to read the documentation online, these are options:
+ * use `.html'. Refer to INSTALL.txt for info on how to make the
+ .html documentation.
-o use .dvi, for the tutorial and reference manual. Do
+ * use `.html'. Point your browser to
+ `http://www.cs.uu.nl/~hanwen/lilypond/index.html'.
- make -C Documentation/tex/ dvi
+ * use `.dvi', for the tutorial and reference manual. Do
-o use ASCII. Do using
+ make -C Documentation/tex/ dvi
- make -C Documentation/
+ * use ASCII. Do using
- The tutorial and the reference manual can not be made
- in ASCII, as they contain graphics.
+ make -C Documentation/
-5: COMMENTS
+ The tutorial and the reference manual can not be made in ASCII, as
+ they contain graphics.
-LilyPond is a long way from finished and polished. We do
-appreciate criticism, comments, bugreports, patches, etc.
+comments
+========
- Please send your e-mail to one of the MAILING LISTS
+ LilyPond is a long way from finished and polished. We do appreciate
+criticism, comments, bugreports, patches, etc.
-and not to us personally. See Documentation/links.yo for
-more info.
+ Please send your e-mail to one of the MAILING LISTS
-6: WINDOWS 32
+ and _not_ to us personally. See `Documentation/links.yo' for more
+info.
-If you have received this file as part of a DOS/Window32
-distribution (LilyPond-*.zip), then it is advisable to also
-download the source package, since it might contain more
-documentation ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/
+windows 32
+==========
-If you decide to build LilyPond from source, please read the
-INSTALL.txt document first, especially the Windows NT/95
-section.
+ If you have received this file as part of a DOS/Window32 distribution
+(LilyPond-*.zip), then it is advisable to also download the source
+package, since it might contain more documentation
+`ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/'
-7: CAVEATS
+ If you decide to build LilyPond from source, please read the
+INSTALL.txt document first, especially the Windows NT/95 section.
-* Please read the file BUGS for some ugly bugs.
+caveats
+=======
-* If you have installed a previous version, be sure to
-remove old font files, eg
+ * Please read the file BUGS for some ugly bugs.
+ * If you have installed a previous version, be sure to remove old
+font files, eg
rm `find /var/lib/texmf/fonts -name 'feta*'`
-a script to do this for you is in buildscripts/clean-
-fonts.sh
+ a script to do this for you is in `buildscripts/clean-fonts.sh'
+
+bugs
+====
-8: BUGS
+ Send bug reports to bug-gnu-music@gnu.org. For help and questions
+use help-gnu-music@gnu.org and gnu-music-discuss@gnu.org. Please
+consult the faq before mailing your problems.
-Send bug reports to bug-gnu-music@gnu.org. For help and
-questions use help-gnu-music@gnu.org and gnu-music-dis-
-cuss@gnu.org. Please consult the faq before mailing your
-problems.
+cdrom distributions
+===================
-9: CDROM DISTRIBUTIONS
+ if you have received LilyPond on a cdrom, chances are that
+development has moved a some patchlevels up. Please check the latest
+version of LilyPond before reporting bugs.
-If you have received LilyPond on a cdrom, chances are that
-development has moved a some patchlevels up. Please check
-the latest version of LilyPond before reporting bugs.
.* TODO
. * use Rhythmic_head::position_i () for all Staff_referenced
+. * bug: dots.
+. * mmrests
+. * web: download link.
+. * guile detection.
. * Break_req handling is silly (break_forbid () + \break fucks up.)
. * script engraver
bar line fully drawn across the staves and after that keep to the
ChoirStaff bar line types in the rest of the scores
-. * autoBeamMelisma: if I explicitly beam notes in a staff with auto beaming disabled I
+- autoBeamMelisma: if I explicitly beam notes in a staff with auto beaming disabled I
would like to have these beams also to be melismatic.
. * make all Feta (including dynamics) available to the user in
. * mudela-book
. * center option (??)
. * make mudela-book understand usepackage{geometry}
-. * check that linewidth set in \paper is not wider than actual linewidth?
-. * the following fails because mudelabook doesn't care that the
- last } after \end{mudela} finishes the marginpar:
- \marginpar{
- \begin{mudela}
- c d e f g
- \end{mudela}}
-. * force-verbatim is maybe not that useful since latex fails with footnotes,
- marginpars and others
-"""
. * Key_engraver, Local_key_item
. * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
. * String[String.length] doesn't trap.
- The stemLength property should affect also beamed stems.
-. * align left edge of broken (de)cresc/slur/tie/tuplet/volta
+. * align left edge of broken tuplet-spanner (have a test case?)
. * fix dynamics decently, ie. use kerning & ligatures.
. * key restorations & repeats
. * paperXX.ly \quartwidth, font setting not up to date. (Should read from AFM?)
. * rhythmic staff & accidentals.
. * use melismaBusy in Lyric context to typeset melismata correctly.
. * ly2dvi/lilypond logfile.
-. * def stem dir.
. * hang Item on Spanner
. * do --safe for PS output?
. * msgfmt -o check?
6. It would be nice to be able to put vertical brackets either side of a
repeated section with different words for each repeat.
-
. * Give # lines in linebreaking.
. * arrows on slurs.
. * rewrite context defs using Scheme
. * Align_element::padding ?
. * typo checks on property names?
. * use streambufs and iostream
- to provide IO handling for TeX stream, mudela stream, data-file.
+to provide IO handling for TeX stream, mudela stream, data-file.
. * seriously buffer TeX output (do profile of writing .5 mb TeX file.)
. * strip EXEs before installing
. * zip target for binary windows dist (JBR)
. * kpathsea?
. * fix vertical alignment and stafflines
. * declaring Performers
-. * *.yo: fix pod manpage layout legacy
. * text-items clash with stems/beams
. * --include, -I option for ly2dvi (pass on to lily)
. * fix placement of beam-less abbrev
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=2
-PATCH_LEVEL=4
+PATCH_LEVEL=5
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# ugh autoconf
# urg, egcs: how to check for egcs >= 1.1?
changequote(<<, >>)dnl
- if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+ if $CXX --version | egrep '2\.[89]' > /dev/null ||
$CXX --version | grep 'egcs' > /dev/null
changequote([, ])dnl
then
])
AC_DEFUN(AC_STEPMAKE_GUILE, [
- # on some systems, -lguile succeeds for guile-1.3
- # others need readline, dl (or even more)
- # urg, must check for different functions in libguile
- # to force new check iso reading from cache
-
- # gh_scm2doubles,gh_doubles2scm are new in 1.3
GUILE_FLAGS
- AC_CHECK_LIB(guile, gh_scm2doubles,
- [LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[[/-_a-zA-Z0-9]]\+ //g'` $LIBS"
- AC_DEFINE(HAVE_LIBGUILE)], , $GUILE_LDFLAGS dnl
- )
- if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
- AC_STEPMAKE_WARN(You should install guile 1.3 or newer)
+ if guile-config --version 2>&1 | grep -q 'version 1\.[012]'; then
+ AC_STEPMAKE_WARN(Guile version 1.3 or better needed)
fi
])
sys.path.append ('@abs-step-bindir@')
+def gulp_file (fn):
+ f = open (fn)
+ return f.read ()
+
header_regex = regex.compile('\\header[ \t\n]*{\([^}]*\)}')
header_entry_regex = regex.compile('[\n\t ]*\([^\n\t ]+\)[\n\t ]*=[\n \t]*\([^;]+\)[\n \t]*;')
package-depth = @package_depth@
USER_CFLAGS = @CFLAGS@
-USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@
-USER_LDFLAGS =
+USER_CXXFLAGS = @CXXFLAGS@ @CPPFLAGS@ @GUILE_CFLAGS@
+USER_LDFLAGS = @GUILE_LDFLAGS@
CC = @CC@
CXX = @CXX@
# ugh autoconf
# urg, egcs: how to check for egcs >= 1.1?
- if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+ if $CXX --version | egrep '2\.[89]' > /dev/null ||
$CXX --version | grep 'egcs' > /dev/null
then
true
fi
- # on some systems, -lguile succeeds for guile-1.3
- # others need readline, dl (or even more)
- # urg, must check for different functions in libguile
- # to force new check iso reading from cache
-
- # gh_scm2doubles,gh_doubles2scm are new in 1.3
## The GUILE_FLAGS macro.
## First, let's just see if we can find Guile at all.
echo $ac_n "checking for Guile""... $ac_c" 1>&6
-echo "configure:2938: checking for Guile" >&5
+echo "configure:2932: checking for Guile" >&5
guile-config link > /dev/null || {
echo "configure: cannot find guile-config; is Guile installed?" 1>&2
exit 1
echo "$ac_t""yes" 1>&6
- echo $ac_n "checking for gh_scm2doubles in -lguile""... $ac_c" 1>&6
-echo "configure:2950: checking for gh_scm2doubles in -lguile" >&5
-ac_lib_var=`echo guile'_'gh_scm2doubles | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- ac_save_LIBS="$LIBS"
-LIBS="-lguile $GUILE_LDFLAGS $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2958 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error. */
-#ifdef __cplusplus
-extern "C"
-#endif
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char gh_scm2doubles();
-
-int main() {
-gh_scm2doubles()
-; return 0; }
-EOF
-if { (eval echo configure:2972: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[/-_a-zA-Z0-9]\+ //g'` $LIBS"
- cat >> confdefs.h <<\EOF
-#define HAVE_LIBGUILE 1
-EOF
-
-else
- echo "$ac_t""no" 1>&6
-fi
-
- if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
-
- echo "configure: warning: You should install guile 1.3 or newer" 1>&2
+ if guile-config --version 2>&1 | grep -q 'version 1\.012'; then
+
+ echo "configure: warning: Guile version 1.3 or better needed" 1>&2
warn_b=yes
fi
echo $ac_n "checking for 8-bit clean memcmp""... $ac_c" 1>&6
-echo "configure:3006: checking for 8-bit clean memcmp" >&5
+echo "configure:2953: checking for 8-bit clean memcmp" >&5
if eval "test \"`echo '$''{'ac_cv_func_memcmp_clean'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_memcmp_clean=no
else
cat > conftest.$ac_ext <<EOF
-#line 3014 "configure"
+#line 2961 "configure"
#include "confdefs.h"
#ifdef __cplusplus
extern "C" void exit(int);
}
EOF
-if { (eval echo configure:3027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_memcmp_clean=yes
else
test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}"
echo $ac_n "checking for vprintf""... $ac_c" 1>&6
-echo "configure:3045: checking for vprintf" >&5
+echo "configure:2992: checking for vprintf" >&5
if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3050 "configure"
+#line 2997 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vprintf(); below. */
; return 0; }
EOF
-if { (eval echo configure:3076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3023: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_vprintf=yes"
else
if test "$ac_cv_func_vprintf" != yes; then
echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
-echo "configure:3100: checking for _doprnt" >&5
+echo "configure:3047: checking for _doprnt" >&5
if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3105 "configure"
+#line 3052 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char _doprnt(); below. */
; return 0; }
EOF
-if { (eval echo configure:3131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3078: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func__doprnt=yes"
else
for ac_func in memmem snprintf vsnprintf gettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3158: checking for $ac_func" >&5
+echo "configure:3105: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3163 "configure"
+#line 3110 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:3189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3228: checking for $ac_word" >&5
+echo "configure:3175: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
+++ /dev/null
-/*
- edge_out.cc -- implement Directed_graph_node
-
- source file FlowerLib
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "directed-graph.hh"
-
-#ifdef PARANOID // these checks eat huge amounts of time.
-#define PARANOID_OK() OK()
-#else
-#define PARANOID_OK()
-#endif
-
-
-Link_array<Directed_graph_node> const &
-Directed_graph_node::get_in_edge_arr() const
-{
- return edge_in_l_arr_;
-}
-
-Link_array<Directed_graph_node> const &
-Directed_graph_node::get_out_edge_arr() const
-{
- return edge_out_l_arr_;
-}
-
-/*
- Should not copy deps automatically
- */
-Directed_graph_node::Directed_graph_node (Directed_graph_node const&)
-{
-}
-
-void
-Directed_graph_node::copy_edges_out (Directed_graph_node const &s)
-{
- for (int i=0; i < s.edge_out_l_arr_.size(); i++)
- add_edge (s.edge_out_l_arr_[i]);
-}
-
-void
-Directed_graph_node::OK() const
-{
-#ifndef NDEBUG
- for (int i=0; i < edge_out_l_arr_.size(); i++)
- {
- assert (edge_out_l_arr_[i]->
- edge_in_l_arr_.find_l (this));
- }
- for (int i=0; i < edge_in_l_arr_.size(); i++)
- assert (edge_in_l_arr_[i]->contains_b (this));
-#endif
-}
-
-bool
-Directed_graph_node::contains_b (const Directed_graph_node *d) const
-{
- return edge_out_l_arr_.find_l ((Directed_graph_node*)d);
-}
-
-void
-Directed_graph_node::remove_edge_out_idx (int i)
-{
- PARANOID_OK();
- Directed_graph_node * d_l = edge_out_l_arr_.get (i);
-
- int j = d_l->edge_in_l_arr_.find_i (this);
- assert (j>=0);
- d_l->edge_in_l_arr_.unordered_del (j);
- PARANOID_OK();
-}
-
-void
-Directed_graph_node::remove_edge_in (Directed_graph_node *d_l)
-{
- PARANOID_OK();
- d_l->remove_edge_out (this);
- PARANOID_OK();
-}
-
-void
-Directed_graph_node::remove_edge_out (Directed_graph_node *d_l)
-{
- PARANOID_OK();
- for (int i=0; i < edge_out_l_arr_.size();)
- {
- if (edge_out_l_arr_[i]== d_l)
- remove_edge_out_idx (i);
- else
- i++;
- }
- PARANOID_OK();
-}
-bool
-Directed_graph_node::linked_b() const
-{
- return edge_out_l_arr_.size() || edge_in_l_arr_.size ();
-}
-
-void
-Directed_graph_node::junk_links()
-{
- edge_in_l_arr_.set_size (0);
- edge_out_l_arr_.set_size (0);
-}
-
-
-void
-Directed_graph_node::unlink()
-{
-#ifdef PARANOID
- PARANOID_OK();
-
- Link_array<Directed_graph_node> t = edge_out_l_arr_;
- t.concat (edge_in_l_arr_);
-#endif
-
- while (edge_out_l_arr_.size())
- remove_edge_out_idx (0);
-
- while (edge_in_l_arr_.size())
- remove_edge_in (edge_in_l_arr_[0]);
-
-#ifdef PARANOID
- for (int i =0; i < t.size(); i++)
- t[i]->OK();
-#endif
-}
-
-Directed_graph_node::~Directed_graph_node()
-{
- // assert (!linked_b()); // hampered by memfrobbing
-}
-
-
-void
-Directed_graph_node::add_edge (Directed_graph_node* dep_l)
-{
- PARANOID_OK();
- if (!dep_l)
- return ;
- dep_l->edge_in_l_arr_.push (this);
- edge_out_l_arr_.push (dep_l);
- PARANOID_OK();
-}
-
-
-Directed_graph_node::Directed_graph_node()
-{
-}
-
+++ /dev/null
-/*
- edge_out.hh -- declare Directed_graph_node
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef DEPENDENCY_HH
-#define DEPENDENCY_HH
-
-#include "parray.hh"
-
-/**
- Class to handle two-sided connections between nodes (the Dependencies)
- */
-class Directed_graph_node {
- Link_array<Directed_graph_node>edge_out_l_arr_;
- /// targets
- Link_array<Directed_graph_node> edge_in_l_arr_;
-
-public:
-
- /** remove i-th edge_out (and exactly one ref to me in the edge_out)
- */
- void remove_edge_out_idx (int i);
- void copy_edges_out (Directed_graph_node const&);
- bool linked_b() const;
- void unlink();
- void junk_links();
- void add_edge (Directed_graph_node*);
- void remove_edge_in (Directed_graph_node *);
- void remove_edge_out (Directed_graph_node*);
- bool contains_b (Directed_graph_node const*) const;
-
- Directed_graph_node (Directed_graph_node const &);
- void OK() const;
- Directed_graph_node();
-
- ~Directed_graph_node();
-
- /**
- ensure that no edge_out exists doubly.
- */
- void uniq();
- Link_array<Directed_graph_node> const& get_out_edge_arr() const;
- Link_array<Directed_graph_node> const& get_in_edge_arr() const;
-};
-
-#endif // DEPENDENCY_HH
--- /dev/null
+
+\context Voice \addlyrics
+ { s8 s16 s32 s64 }
+ { [c16 c c c] }
+++ /dev/null
-
-\context Voice \addlyrics
- { s8 s16 s32 s64 }
- { [c16 c c c] }
+++ /dev/null
-
-text = \lyrics \repeat "fold" 2 {}
-\alternative {
- foo bar
- afoo abar
-}
-
-
-\score {
-\text
-}
-<f, c' d e f>
+\context Voice { <f,4. c'' d e f>}
\score {
\notes \relative c'' {
\time 2/4;
- \property Voice.beamAuto=0
+ \property Voice.noAutoBeaming=1
a4 a8
a32 a a a
}
--- /dev/null
+\score {
+ \notes {
+ \repeat volta 5 {
+ c' c' c' c'
+ }
+ \alternative {
+ {d' d' d' d'}
+ {e' e' e' e'}
+ }
+ f'
+ }
+ }
+
+++ /dev/null
-\score{
- \context PianoStaff <
- \context Staff=one \notes{ s2 }
- \context Staff=two \notes\relative c{
- \time 4/8;
- \clef "bass";
- [c8( e \stemup \translator Staff=one \stemup
- g )c]
- }
- >
- \paper {
- linewidth=-1.0;
- }
-}
-)
--- /dev/null
+\header {\r
+filename = "utremi.ly";\r
+enteredby = "Christian Mondrup";\r
+%composer = "Thomas Ravenscroft";\r
+opus = "Thomas Ravenscroft";\r
+%opus = "Pammelia, 1609, no. 31";\r
+arranger = "Pammelia, 1609, no. 31";\r
+title = "Vt, re, me, fa, sol, la, sol, fa, re, vt";\r
+tagline = "Typeset with GNU LilyPond by Christian Mondrup. Non-commercial copying welcome.";\r
+}\r
+\r
+papersize = "letter"\r
+\r
+\include "paper16.ly"\r
+%\include "a4.ly"\r
+\r
+lyricsOne = \lyrics {\r
+ ""\breve ""8\r
+ "Vt,"\breve re, me, fa, sol, la, ""\r
+ sol, la, fa, me, re, vt. \r
+}\r
+\r
+lyricsTwo = \lyrics {\r
+ "" ""\r
+ Hey downe downe hey downe downe downe downe hey down\r
+ hey down "" down down a.\r
+ My heart of gold as true as steele\r
+ as I me leant "" vn -- to the bowres.\r
+ but if my La -- dy loue me well,\r
+ Lord so Ro -- bin bowres,\r
+}\r
+\r
+lyricsThree = \lyrics {\r
+ "" "" "" "" "" "" "" "" "" "" "" ""\r
+ heaue and hoe Rum -- be -- lo, hey tro -- lo tro -- ly lo,\r
+ hey tro -- ly trol -- ly hey tro -- ly trol -- ly \r
+ hey tro -- ly trol -- ly hey trol -- "" ly trol -- ly lo. \r
+ My La -- dies gone to Can -- ter -- bu -- ry\r
+ S. Tho -- mas be her boote.\r
+ Shee met with Kate of Malms -- "" bu -- ry, \r
+ why weepst thou ma -- ple \r
+}\r
+\r
+lyricsFour = \lyrics {\r
+ "" \r
+ roote:\r
+ O sleepst thou or wakst thon Ies -- se -- ry, Cooke,\r
+ the rost it burnes, turne round turne round "" a -- bout ""\r
+ turne round "" a -- bout, ""\r
+ turne round "" a -- bout, "" turne round. ""\r
+ O Fri -- er how fares thy ban -- de -- low ban -- de -- low\r
+ Fri -- er, how fares thy San -- de -- low, San -- de -- low.\r
+}\r
+\r
+global = \notes {\r
+ \key c;\r
+ %\time 4/2;\r
+ %\time 17/8;\r
+ \time 33/16;\r
+ \clef "tenor";\r
+}\r
+\r
+dummyBeat = \notes {\r
+ \property Staff.defaultBarType = "||"\r
+ \property Staff.barAlways = "1" \r
+ s16\r
+ \property Staff.barAlways = "0"\r
+ \property Staff.defaultBarType = "|"\r
+}\r
+\r
+incipOne = \notes\relative c' {\r
+ g\breve \r
+ \dummyBeat\r
+ \bar "";\r
+}\r
+\r
+incipTwo = \notes\relative c'' {\r
+ \property Voice.noteHeadStyle = "diamond"\r
+ g1. \r
+ \property Voice.noteHeadStyle = ""\r
+ f2 \r
+ \dummyBeat\r
+ \bar "";\r
+}\r
+\r
+incipThree = \notes\relative c' {\r
+ \property Voice.noteHeadStyle = "harmonic"\r
+ \property Voice.tupletVisibility = 0\r
+ \times 2/3 { d4. e8 d4 } \times 2/3 { b4. a8 g4 }\r
+ \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 }\r
+ \dummyBeat\r
+ \property Voice.tupletVisibility = 3\r
+ \bar "";\r
+}\r
+\r
+incipFour = \notes\relative c' {\r
+ \property Voice.noteHeadStyle = "diamond"\r
+ %\property Voice.restStyle = "mensural"\r
+ b1 r1\r
+ \dummyBeat\r
+ \bar "";\r
+}\r
+\r
+partOne = \notes\relative c' {\r
+ %\property Score.currentBarNumber = "1"\r
+ \property Voice.noteHeadStyle = ""\r
+ %\property Staff.barNumberScriptPadding = 1\r
+ g1 ~ | g | a ~ | a | bes ~ | bes | c ~ | c | d ~ | d | e ~ | e |\r
+ r | r | \r
+ e ~ | e | d ~ | d | c ~ | c | bes ~ | bes | a ~ | a | g ~ | g\r
+ \bar "|.";\r
+}\r
+\r
+partTwo = \notes\relative c'' {\r
+ \property Voice.noteHeadStyle = ""\r
+ g2. f4 | e2 d | c4. b8 a4 g | f2 e |\r
+ d g ~ | g4 a g2 | c,1 | r2 c |\r
+ g'2. a4 | b2 g | c c | c c |\r
+ b4 c d2 ~ | d4 d b g | c1 | r2 c |\r
+ g g | d2. e4 | f2 e | c1 |\r
+ g'2. g4 | g2 g | c,1 ~ | c | r | r \r
+ \bar "|.";\r
+}\r
+\r
+partThree = \notes\relative c' {\r
+ \property Voice.noteHeadStyle = ""\r
+ \times 2/3 { d4. e8 d4 } \times 2/3 {b4. a8 g4 } | \r
+ \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 }\r
+ c2 c4 c | c2 c |\r
+ d2 d4 d | d2 d | e2. f4 | e2 d4 c |\r
+ b2 g ~ | g4 f e d | c1 | r2 c |\r
+ g'2. g4 | g2 g | c,2. c4 | c c c'2 |\r
+ bes g | bes bes | a1 | r2 e' |\r
+ d d | g g | a2. g4 | fis e d2 |\r
+ g g | d2. c4 \r
+ \bar "|.";\r
+}\r
+\r
+partFour = \notes\relative c' {\r
+ \property Voice.noteHeadStyle = ""\r
+ b1^\fermata | r2 g' | e e4 e | a2. g4 | \r
+ fis2 e4 d | g1 | g2 g | g g |\r
+ g g | g g ~ | g4 f e d | c2 d ~ |\r
+ d4 c b a | g2 g' ~ | g4 f e d | c2 g' ~ |\r
+ g r | \times 2/3 { r1 d2 } \times 2/3 { a'2 a g } |\r
+ \times 2/3 { e1 f2 } \times 2/3 { g2. g4 g2 }\r
+ \times 2/3 { d2. d4 e2 } \times 2/3 { f2. f4 e2 }\r
+ \times 2/3 { d1 c2 } \times 2/3 { b2. a4 g2 }\r
+ \times 2/3 { d'2. d4 d2 }\r
+ \bar "|.";\r
+}\r
+\r
+partOneStaff = <\r
+ \context Staff = vocal1 <\r
+ \property Staff.clefStyle = "fullSizeChanges"\r
+ \property Staff.instrument = "\large{1.}"\r
+ %\property Staff.instr = ""\r
+ \notes { \r
+ \global\r
+ \property Staff.timeSignatureStyle = "old4/4"\r
+ \incipOne\r
+ \clef "G_8";\r
+ \property Staff.timeSignatureStyle = "C2/2"\r
+ \time 4/4;\r
+ \partOne \r
+ }\r
+ {\context Lyrics = lyrOne \lyricsOne }\r
+ >\r
+>\r
+\r
+partTwoStaff = <\r
+ \context Staff = vocal2 <\r
+ \property Staff.clefStyle = "fullSizeChanges"\r
+ \property Staff.instrument = "\large{2.}"\r
+ %\property Staff.instr = ""\r
+ %\property Voice.automaticMelismata = "1"\r
+ \addlyrics\r
+ \notes { \r
+ \global\r
+ \property Staff.timeSignatureStyle = "old4/4"\r
+ \incipTwo\r
+ \clef "G_8";\r
+ \property Staff.timeSignatureStyle = "C2/2"\r
+ \time 4/4;\r
+ \partTwo\r
+ }\r
+ {\context Lyrics = lyrTwo \lyricsTwo }\r
+ >\r
+>\r
+\r
+\r
+partThreeStaff = <\r
+ \context Staff = vocal3 <\r
+ \property Staff.clefStyle = "fullSizeChanges"\r
+ \property Staff.instrument = "\large{3.}"\r
+ %\property Staff.instr = ""\r
+ %\property Voice.automaticMelismata = "1"\r
+ \addlyrics\r
+ \notes { \r
+ \context Voice = vthree \r
+ \property Voice.tupletDirection = \up\r
+ \global\r
+ \property Staff.timeSignatureStyle = "old4/4"\r
+ \incipThree\r
+ \clef "G_8";\r
+ \property Staff.timeSignatureStyle = "C2/2"\r
+ \time 4/4;\r
+ \partThree\r
+ }\r
+ {\context Lyrics = lyrThree \lyricsThree }\r
+ >\r
+>\r
+\r
+partFourStaff = <\r
+ \context Staff = vocal4 <\r
+ \property Staff.clefStyle = "fullSizeChanges"\r
+ \property Staff.timeSignatureStyle = "C2/2"\r
+ \property Staff.barNumberDirection = \up\r
+ \property Staff.instrument = "\large{4.}"\r
+ \property Staff.instr = ""\r
+ %\property Voice.automaticMelismata = "1"\r
+ \addlyrics\r
+ \notes { \r
+ \context Voice = vfour \r
+ \property Voice.tupletDirection = \up\r
+ \global\r
+ %\property Staff.instrument = "\large{4.}"\r
+ %\property Staff.instr = ""\r
+ \property Staff.timeSignatureStyle = "old4/4"\r
+ \incipFour\r
+ \clef "G_8";\r
+ \property Staff.timeSignatureStyle = "C2/2"\r
+ \time 4/4;\r
+ \partFour \r
+ }\r
+ {\context Lyrics = lyrFour \lyricsFour} \r
+ >\r
+>\r
+\r
+\score {\r
+ \context StaffGroup <\r
+ \partFourStaff\r
+ \partThreeStaff\r
+ \partTwoStaff\r
+ \partOneStaff\r
+ >\r
+ %\paper {\translator {\BarNumberingStaffContext } } \r
+ \paper {\r
+ indent = 0.\mm;\r
+ linewidth = 17.0\cm;\r
+ textheight = 27.0\cm;\r
+ gourlay_maxmeasures=6.0;\r
+ \translator { \StaffContext\r
+ \consists "Staff_margin_engraver"; } \r
+ %\translator { \ScoreContext\r
+ % minVerticalAlign = 1.5*\staffheight; }\r
+ }\r
+ %\midi { \r
+ % output = "utremi.mid";\r
+ % \tempo 2 = 80;\r
+ %}\r
+}\r
% no alts.
\score { \notes
\relative c'' {
-\repeat semi 3 { c^"3$\\times$ 0alt" d }
+\repeat volta 3 { c^"3$\\times$ 0alt" d }
% less alts than body
-\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+\repeat volta 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
% more alts than body
-\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g }
+\repeat volta 2 { c^"2$\\times$ 3alt" d } \alternative { e f g }
}}
Molecule
Crescendo::get_symbol () const
{
- Real w_dim = extent (X_AXIS).length ();
+ Real w_dim = extent (X_AXIS).length () - get_broken_left_end_align ();
Real absdyn_dim = paper_l ()-> get_realvar (ly_symbol ("crescendo_shorten"));
if (dyn_b_drul_[LEFT])
{
{
Molecule* m_p =0;
Real absdyn_dim = paper_l ()-> get_realvar (ly_symbol ("crescendo_shorten"));
- Real x_off_dim=0.0;
+ Real x_off_dim = get_broken_left_end_align ();
+
if (dyn_b_drul_[LEFT])
x_off_dim += absdyn_dim;
#include "parray.hh"
#include "virtual-methods.hh"
-#include "directed-graph.hh"
#include "graphical-element.hh"
#include "lily-guile.hh"
this is virtual; for instance, Line_of_score overrides it.
*/
virtual void break_into_pieces ();
+ Real get_broken_left_end_align () const;
friend Axis_group_spanner; // UGH
{
Item * col = spanned_drul_[d]->column_l ();
- Interval coldim = col->extent (X_AXIS);
+ Interval coldim = col->extent (X_AXIS)
+ + col->relative_coordinate (0, X_AXIS);
sp_iv[d] = coldim[-d] ;
}
{
Dots * d = new Dots;
note_p->dots_l_ = d;
+ d->dots_i_ = note_req_l->duration_.dots_i_;
Scalar dir = get_property ("verticalDirection",0);
if (dir.isdir_b())
if (filename.length_i () && (filename != "-"))
os = new ofstream (filename.ch_C ());
else
-// os = new ostream (cout.ostreambuf ());
+ // os = new ostream (cout.ostreambuf ());
os = new ostream (cout._strbuf);
if (!*os)
error (_f ("can't open file: `%s\'", filename));
{
for (char const *cp = s.ch_C (); *cp; cp++)
{
- if (outputting_comment)
- {
- *os << *cp;
- if (*cp == '\n')
- {
- outputting_comment=false;
-
- }
- continue;
- }
- line_len_i_ ++;
- switch (*cp)
+ if (outputting_comment)
+ {
+ *os << *cp;
+ if (*cp == '\n')
{
- case '%':
- outputting_comment = true;
- *os << *cp;
- break;
- case '{':
- nest_level++;
- *os << *cp;
- break;
- case '}':
- nest_level--;
- *os << *cp;
-
- if (nest_level < 0)
- {
- delete os; // we want to see the remains.
- assert (nest_level>=0);
- }
-
- /* don't break line if not nested; very ugly for ps */
- if (nest_level == 0)
- break;
-
- /* FALLTHROUGH */
-
- case '\n':
- break_line ();
- break;
- case ' ':
- *os << ' ';
- if (line_len_i_ > MAXLINELEN)
- break_line ();
-
- break;
- default:
- *os << *cp;
- break;
- }
+ outputting_comment=false;
+
+ }
+ continue;
+ }
+ line_len_i_ ++;
+ switch (*cp)
+ {
+ case '%':
+ outputting_comment = true;
+ *os << *cp;
+ break;
+ case '{':
+ nest_level++;
+ *os << *cp;
+ break;
+ case '}':
+ nest_level--;
+ *os << *cp;
+
+ if (nest_level < 0)
+ {
+ delete os; // we want to see the remains.
+ assert (nest_level>=0);
+ }
+
+ /* don't break line if not nested; very ugly for ps */
+ if (nest_level == 0)
+ break;
+
+ *os << '%';
+ break_line ();
+ break;
+ case '\n':
+ break_line ();
+ break;
+ case ' ':
+ *os << ' ';
+ if (line_len_i_ > MAXLINELEN)
+ break_line ();
+
+ break;
+ default:
+ *os << *cp;
+ break;
+ }
}
//urg, for debugging only!!
*os << flush;
void
Paper_stream::break_line ()
{
- // aaargh
- *os << "%\n";
+ *os << '\n';
*os << to_str (' ', nest_level);
line_len_i_ = 0;
}
{
m = m + p->car_->length_mom ();
done ++;
- if (repeats_i_ - done < alternatives_p_->length_i ())
+ if (volta_fold_b_
+ || repeats_i_ - done < alternatives_p_->length_i ())
p = p->next_;
}
return m;
{
dot_p_ = new Dots;
rest_p_->dots_l_ =dot_p_;
+ dot_p_->dots_i_ = rest_req_l_->duration_.dots_i_;
announce_element (Score_element_info (dot_p_,0));
}
if (rest_p_->balltype_i_ >= 2)
#include "encompass-info.hh"
#include "main.hh"
-
Slur::Slur ()
{
}
*/
else
{
- /*
- need break-align too. what about other spanners?
- */
- if (d == LEFT)
- dx_f_drul_[d] = spanned_drul_[LEFT]->extent (X_AXIS).length ();
+ dx_f_drul_[d] = get_broken_left_end_align ();
/*
broken: should get y from other piece, so that slur
else
stretch_dist += right_dist;
+ if (s.distance_f_ <0)
+ programming_error("negative dist");
+
if (stretch_dist == 0.0)
{
/*
#include "paper-score.hh"
#include "molecule.hh"
#include "paper-outputter.hh"
+#include "score-column.hh"
+#include "line-of-score.hh"
void
Spanner::do_print() const
Item * left = spanned_drul_[LEFT];
Item * right = spanned_drul_[RIGHT];
-
+
if (left == right)
{
warning (_ ("left spanpoint is right spanpoint\n"));
span_p->set_bounds(LEFT,info.bounds_[LEFT]);
span_p->set_bounds(RIGHT,info.bounds_[RIGHT]);
pscore_l_->typeset_element (span_p);
-
+
info.broken_spanner_l_ = span_p;
span_p->handle_broken_dependencies();
programming_error ("Spanner y -refpoint lost.");
}
}
+
+// If this is a broken spanner, return the amount the left end is to
+// be shifted horizontally so that the spanner starts after the
+// initial clef and key on the staves. This is necessary for ties,
+// slurs, crescendo and decrescendo signs, for example.
+Real
+Spanner::get_broken_left_end_align () const
+{
+ int i;
+ Line_of_score *l;
+ Score_column *sc = dynamic_cast<Score_column*> (spanned_drul_[LEFT]->column_l());
+
+ // Relevant only if left span point is first column in line
+ if(sc != NULL && sc->line_l ()->cols_.find_i (sc) == 0)
+ {
+ // We could possibly return the right edge of the whole Score_column here,
+ // but we do a full search for the Break_align_item.
+ for(i = 0; i < sc->elem_l_arr_.size (); i++)
+ {
+ if(0 == strcmp (classname (sc->elem_l_arr_[i]), "Break_align_item"))
+ {
+ return sc->elem_l_arr_[i]->extent (X_AXIS) [RIGHT];
+ }
+ }
+ }
+
+ return 0.0;
+}
DOUT << "positioning " << to_position_l_->name();
DOUT << "axis == " << axis_name_str (axis_)
- << ", dir == " << to_str (dir_ );
+ << ", dir == " << to_str ((int)dir_ );
#endif
}
if (head_l_drul_[LEFT])
dx_f_drul_[LEFT] = head_l_drul_[LEFT]->extent (X_AXIS).length ();
else
- dx_f_drul_[LEFT] = spanned_drul_[LEFT]->extent (X_AXIS).length ();
+ dx_f_drul_[LEFT] = get_broken_left_end_align ();
dx_f_drul_[LEFT] += x_gap_f;
dx_f_drul_[RIGHT] -= x_gap_f;
Real t = paper_l ()->get_realvar (volta_thick_scm_sym);
Real dx = internote_f;
- Real w = extent (X_AXIS).length () - dx;
+ Real w = extent (X_AXIS).length () - dx - get_broken_left_end_align ();
Real h = paper_l()->get_var ("volta_spanner_height");
Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end));
{
if (bar_arr_.size())
translate_axis (bar_arr_[0]->extent (Y_AXIS)[UP], Y_AXIS);
+ translate_axis (get_broken_left_end_align (), X_AXIS);
}
void
$(outdir)/%.texi: %.tely
cd $(outdir); $(PYTHON) $(depth)/../scripts/mudela-book.py -I .. -I $(depth)/../input/test/ --dependencies --format=texi ../$<
-$(outdir)/%.info: $(outdir)/%.texi
- makeinfo --output=$@ $<
-
-$(outdir)/%.html: $(outdir)/%.texi
- makeinfo --output=$@ --html --no-headers $<
- $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index=$(depth)/../index.html $@ $(wildcard $(basename $@)[0-9][0-9].html)
-
-$(outdir)/%.dvi: $(outdir)/%.texi
- # --clean only in >= 3.12s
- # cd $(outdir); texi2dvi --clean ../$<
- cd $(outdir); texi2dvi ../$<
+# empty
+TELY_FILES := $(wildcard *.tely)
+EXTRA_DIST_FILES += $(TELY_FILES)
Begin3
Title: LilyPond
-Version: 1.2.4
-Entered-date: 30AUG99
+Version: 1.2.5
+Entered-date: 02SEP99
Description:
LilyPond is a music typesetter. It produces beautiful sheet music
using a high level description file as input. LilyPond is part of
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.2.4.tar.gz
+ 1000k lilypond-1.2.5.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.2.4.tar.gz
+ 1000k lilypond-1.2.5.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.2.4
+Version: 1.2.5
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.4.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.2.5.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
%!PS-Adobe-1.0: lily.ps
-
+%
% 2 setlanguagelevel % hmm. auto_resize_dicts doesn't help either.
% round cappings
1 setlinecap
(string-append
"\\font" (font-switch i) "=" s "\n"))
- ;; UGH
-
- (define (header-end) "\\input lilyponddefs \\turnOnPostScript")
+ (define (header-end)
+ (string-append
+ "\\special{! "
+ (regexp-substitute/global #f "\n" (ly-gulp-file "lily.ps") 'pre " %\n" 'post)
+ "}"
+ "\\input lilyponddefs \\turnOnPostScript"))
(define (header creator generate)
(string-append
}
>
\end{mudela}""",
- 'output-mudela':r"""\begin%s{mudela}
+ 'output-mudela':r"""\begin[%s]{mudela}
%s
\end{mudela}""",
'output-verbatim': r"""\begin{verbatim}%s\end{verbatim}""",
'mudela-file': '@mudelafile(\[[^\\]]+\])?{([^}]+)}',
'mudela' : '@mudela(\[.*?\])?{(.*?)}',
'mudela-block': r"""(?s)@mudela(\[.*?\])?(.*?)@end mudela""",
- 'interesting-cs': r"""[\\@](node|mudelagraphic)""",
+ 'interesting-cs': r"""[\\@](chapter|section)""",
'comma-sep' : ', *',
}
}
# urg: breaks on \include of full score
# Use nofly option if you want to \include full score.
- if not 'nofly' in opts and not re.search ('\\\\score', body):
- opts.append ('fly')
+ if 'nofly' not in opts and not re.search ('\\\\score', body):
+ opts.append ('fragment')
- if 'fragment' in opts or 'singleline' in opts:
+ if 'fragment' in opts and 'nosingleline' not in opts:
+ opts.append ('singleline')
+
+ if 'singleline' in opts:
l = -1.0;
else:
l = latex_linewidths[cols][paper][latex_size]
- if 'fly' in opts:
+ if 'relative' in opts:
+ body = '\\relative c { %s }' % body
+
+
+ if 'fragment' in opts:
body = r"""\score {
- \notes\relative c {
- %s
- }
+ \notes { %s }
\paper { }
}""" % body
opts = uniq (opts)
optstring = string.join (opts, ' ')
optstring = re.sub ('\n', ' ', optstring)
-
+
body = r"""
%% Generated by mudela-book.py; options are %s
\include "paper%d.ly"
str = f.read (-1)
opts = match.group (1)
if opts:
- opts = re.split (',[ \n\t]*', opts[1:-1])
+ opts = opts[1:-1]
+ opts = re.split (',[ \n\t]*', opts)
else:
opts = []
opts .append ('nofly')
str_opts = string.join (opts, ',')
- if str_opts: str_opts = '[' + str_opts + ']'
-
str = ("%% copied from file `%s'\n" % full_path) + str
return get_output ('output-mudela') % (str_opts, str)
def find_mudela_chunks (str):
"""Find mudela blocks, while watching for verbatim. Returns
- (STR,MUDS) with \mudelagraphic substituted for the blocks in STR,
+ (STR,MUDS) with substituted for the blocks in STR,
and the blocks themselves MUDS"""
chunks = []
pass
elif g == 'chapter':
(chapter, section, count) = (chapter + 1, 0, 0)
- elif g == 'section' or g == 'node':
+ elif g == 'section':
(section, count) = (section + 1, 0)
# ugh autoconf
# urg, egcs: how to check for egcs >= 1.1?
changequote(<<, >>)dnl
- if $CXX --version | egrep '2\.8|2\.9' > /dev/null ||
+ if $CXX --version | egrep '2\.[89]' > /dev/null ||
$CXX --version | grep 'egcs' > /dev/null
changequote([, ])dnl
then
])
AC_DEFUN(AC_STEPMAKE_GUILE, [
- # on some systems, -lguile succeeds for guile-1.3
- # others need readline, dl (or even more)
- # urg, must check for different functions in libguile
- # to force new check iso reading from cache
-
- # gh_scm2doubles,gh_doubles2scm are new in 1.3
GUILE_FLAGS
- AC_CHECK_LIB(guile, gh_scm2doubles,
- [LIBS="`echo $GUILE_LDFLAGS | sed -e 's/-L[[/-_a-zA-Z0-9]]\+ //g'` $LIBS"
- AC_DEFINE(HAVE_LIBGUILE)], , $GUILE_LDFLAGS dnl
- )
- if test "$ac_cv_lib_guile_gh_scm2doubles" != yes ; then
- AC_STEPMAKE_WARN(You should install guile 1.3 or newer)
+ if guile-config --version 2>&1 | grep -q 'version 1\.[012]'; then
+ AC_STEPMAKE_WARN(Guile version 1.3 or better needed)
fi
])
import sys
import os
import time
-from string import *
+import string
import getopt
import __main__
(options, files) = getopt.getopt(sys.argv[1:], 'hp:', ['help', 'news=', 'index=', 'package='])
+def gulp_file (fn):
+ f = open (fn)
+ return f.read ()
+
def help ():
- sys.stdout.write ("Usage: add-html-footer [OPTION]... HTML-FILE\n"
- "Add a nice footer, add the top of the NEWS file (up to the ********)\n\n"
- + "Options:\n"
- + " -h, --help print this help\n"
- + " -p, --package=DIR specify package\n"
- )
+ sys.stdout.write (r"""Usage: add-html-footer [OPTION]... HTML-FILE
+Add a nice footer, add the top of the NEWS file (up to the ********)
+Options:
+ -h, --help print this help
+ -p, --package package name (ugh. Junkme.)
+ """)
sys.exit (0)
for opt in options:
news = news[:i]
def check_tag (tag, sub, s, bottom):
- tag = lower (tag)
- TAG = upper (tag)
+ tag = string.lower (tag)
+ TAG = string.upper (tag)
s = regsub.sub (tag, TAG, s)
i = regex.search (TAG, s)
if i < 0:
s = '<HTML>\n' + s
s = check_tag ('</html>', '</HTML>', s, 1)
- #urg
- if regex.search ('@COUNTER_REF@', s) != -1:
- counter = ''
- try:
- counter = os.environ[package.NAME + '_COUNTERPATH']
- counter = '<hr><img src="' + counter + '">\n'
- except:
- pass
- s = regsub.gsub ('@COUNTER_REF@', counter, s)
-
dump_file (f, s)
import sys
import os
-from string import *
+import string
+
+def gulp_file (fn):
+ f = open (fn)
+ return f.read ()
import __main__
import glob
import sys
import os
-from string import *
+import string
import getopt
import pipes
+def gulp_file (fn):
+ f = open (fn)
+ return f.read ()
+
def program_id ():
return name + ' ' + version;
def main ():
os.environ['GZIP'] = '-q'
identify ()
- print 'argv: ' + join (sys.argv[2:])
+ print 'argv: ' + string.join (sys.argv[2:])
(options, files) = getopt.getopt (sys.argv[1:],
'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
import regex
import regsub
-from string import *
-# from flower import *
+import string
+
import sys
import os
import getopt
dict = read_makefile (dirname + '/VERSION')
version_list = []
for x in [ 'MAJOR_VERSION', 'MINOR_VERSION', 'PATCH_LEVEL']:
- version_list.append (atoi (dict[x]))
+ version_list.append (string.atoi (dict[x]))
version_list.append (dict['MY_PATCH_LEVEL'])
self.topdir = dirname
self.groupdir = self.topdir + '/..'
self.test_dir = self.groupdir + '/test/'
self.version = tuple(version_list)
self.Name = dict['PACKAGE_NAME']
- self.name = lower (self.Name)
+ self.name = string.lower (self.Name)
if self.name == 'lilypond':
self.nickname = 'lelie'
else:
self.nickname = self.name
- self.NAME = upper (self.Name)
+ self.NAME = string.upper (self.Name)
class Packager:
def split_my_patchlevel(str):
return (regsub.sub('[0-9]*$', '', str),
- atoi(regsub.sub('[^0-9]*', '', str)))
+ string.atoi(regsub.sub('[^0-9]*', '', str)))
def next_version(tup):
return ('%d.%d.%d' % tup[0:3]) + my
def version_str_to_tuple(str):
- t = split(str, '.')
+ t = string.split(str, '.')
try:
mypatch = t[3]
except IndexError:
mypatch = ''
- return (atoi(t[0]), atoi(t[1]), atoi(t[2]), mypatch)
+ return (string.atoi(t[0]), string.atoi(t[1]), string.atoi(t[2]), mypatch)
def version_compare (tupl, tupr):
tupl = full_version_tup (tupl)
if tupl[i] - tupr[i]: return tupl[i] - tupr[i]
if tupl[3] and tupr[3]:
lname = regsub.sub('[0-9]*$', '', tupl[3])
- lnum = atoi(regsub.sub('[^0-9]*', '', tupl[3]))
+ lnum = string.atoi(regsub.sub('[^0-9]*', '', tupl[3]))
rname = regsub.sub('[0-9]*$', '', tupr[3])
- rnum = atoi(regsub.sub('[^0-9]*', '', tupr[3]))
+ rnum = string.atoi(regsub.sub('[^0-9]*', '', tupr[3]))
if lname != rname:
raise 'ambiguous'
return sign (lnum - rnum)
i.write(s)
i.close ()
-def gulp_file(f):
- try:
- i = open(f)
- i.seek (0, 2)
- n = i.tell ()
- i.seek (0,0)
- except:
- sys.stderr.write( 'can\'t open file %s\n ' % f)
- return ''
- s = i.read (n)
- if len (s) <= 0:
- sys.stderr.write( 'gulped empty file: %s\n'% f)
- return s
-
-
import os
import sys
-
import getopt
-from string import *
-import regex
-import regsub
+import string
import time
+import re
+
+format = 'html'
def program_id ():
- return name + ' version ' + version;
+ return name + ' version ' + version;
def identify ():
- sys.stdout.write (program_id () + '\n')
+ sys.stdout.write (program_id () + '\n')
def help ():
- sys.stdout.write ("Usage: table-to-html [OPTION]... TABLE-FILE HTML-FILENAME\n"
- + "Generate pretty table from char separated table\n\n"
- + "Options:\n"
- + " -h, --help print this help\n"
- + " -p, --package=DIR specify package\n"
- + " -s, --separator=SEP specify separator [:]\n"
- + " -t, --latex do latex output instead\n"
- )
-
- sys.exit (0)
+ sys.stdout.write (
+r"""Usage: table-to-html [OPTION]... TABLE-FILE HTML-FILENAME
+Generate pretty table from char separated table
+Options:
+ -h, --help print this help
+ -p, --package=DIR specify package
+ -s, --separator=SEP specify separator [:]
+ -t, --latex do latex output instead
+""")
+ sys.exit (0)
def header (html):
- html.write ('<body bgcolor=white><table cellspacing=10>')
+ html.write ('<body bgcolor=white><table cellspacing=10>')
def footer (html):
- html.write ('</table></body>')
-
-def convert_html (inname, outname, cols, separator, linesep):
- table = open (inname)
- # ugh
- html = open (outname, 'w')
-
- header (html)
- i = 0
- for line in table.readlines ():
- i = i + 1
- if not len(line):
- continue
- columns = split (line, separator)
- html_line = '<tr><td>' + join (columns, '</td><td>') + '</td></tr>'
- html_line= regsub.gsub (linesep, ' ',html_line)
- html.write (html_line)
-
- if len (columns) <> cols:
- print i
- raise 'not enough cols'
-
- table.close ()
- footer (html)
- html.close ()
-
-
-def convert_tex (inname, outname, cols, separator, linesep):
- table = open (inname)
- html = open(outname, 'w')
-
- i = 0
- for line in table.readlines ():
- i = i + 1
- if not len(line):
- continue
- columns = split (line, separator)
- if len (columns) <> cols:
- print i
- raise 'not enough cols'
-
- tex_line = '\\tableentry{' + join (columns, '}{') + '}\n'
- tex_line = regsub.gsub (linesep, ' ', tex_line)
- html.write (tex_line)
-
- table.close ()
- html.close ()
-
-def main ():
- identify ()
- (options, files) = getopt.getopt (
- sys.argv[1:], 'tl:o:hp:c:s:', ['columns=', 'help', 'latex', 'output=', 'package=', 'separator=', 'linesep='])
- latex = 0
- separator = '@'
- output = ''
- linesep = '\r'
- for opt in options:
+ html.write ('</table></body>')
+
+def convert_html (lines, outname, cols, separator, linesep):
+ # ugh
+ html = open (outname, 'w')
+
+ header (html)
+ i = 0
+ for line in lines:
+ i = i + 1
+ if not len(line):
+ continue
+ columns = string.split (line, separator)
+ html_line = '<tr><td>' + string.join (columns, '</td><td>') + '</td></tr>'
+ html_line= re.sub (linesep, ' ', html_line)
+ html.write (html_line)
+
+ if len (columns) <> cols:
+ print i
+ raise 'not enough cols'
+
+ footer (html)
+ html.close ()
+
+
+def convert_tex (lines, outname, cols, separator, linesep):
+ html = open(outname, 'w')
+ header = r"""\documentclass{article}
+\begin{document}
+{\parindent -1pc
+ \parskip 0pc\parsep 0pc
+ % COMMENT( from the texbook)
+ \def\length#1{\count0=0 \getlength#1\end}
+ \def\getlength#1{\ifx#1\end \let\next=\relax
+ \else\advance\count0 by1 \let\next=\getlength\fi \next}
+ \def\inlanguage#1#2{{\length{#2}%
+ \ifnum\count0=0
+ \else
+ \emph{#1}: #2.
+ \fi}}
+ \small
+
+ \def\tableentry#1#2#3#4#5#6#7{\par{\bf #1}: #7
+ \inlanguage{Fran\c cais}{#2}
+ \inlanguage{British}{#4} \inlanguage{Deutsch}{#3}
+ \inlanguage{Nederlands}{#5}\inlanguage{Italiano}{#6}}
+"""
+
+ html.write (header)
+ i = 0
+ for line in lines:
+ i = i + 1
+ if not len(line):
+ continue
+ columns = string.split (line, separator)
+ if len (columns) <> cols:
+ print i
+ raise 'not enough cols'
+
+ tex_line = '\\tableentry{' + string.join (columns, '}{') + '}\n'
+ tex_line = re.sub (linesep, ' ', tex_line)
+ html.write (tex_line)
+
+ html.write(r"""}\end{document}""")
+ html.close ()
+
+def convert_texinfo (lines, outname, cols, separator, linesep):
+ pass
+
+
+
+identify ()
+(options, files) = getopt.getopt (
+ sys.argv[1:], 'f:tl:o:h:c:s:', ['columns=', 'help', 'format=', 'output=', 'separator=', 'linesep='])
+latex = 0
+separator = '@'
+output = ''
+linesep = '\r'
+for opt in options:
o = opt[0]
a = opt[1]
if o == '--separator' or o == '-s':
- separator = a
+ separator = a
elif o== '--help' or o == '-h':
- help ()
- elif o=='--latex' or o == '-t':
- latex = 1
+ help ()
+ elif o=='--format' or o == '-f':
+ format = a
elif o == '--output' or o == '-o':
- output = a
- elif o == '--package' or o == '-p':
- topdir=a
+ output = a
elif o == '--linesep' or o == '-l':
linesep = a
elif o == '--columns' or o == '-c':
- cols = atoi(a)
+ cols = string.atoi(a)
else:
- print o
- raise getopt.error
-
- sys.path.append (topdir + '/stepmake/bin')
- from packagepython import *
- package = Package (topdir)
- packager = Packager ()
-
- from flower import *
+ print o
+ raise getopt.error
- if latex:
- convert_tex (files[0], output, cols, separator, linesep)
- else:
- convert_html (files[0], output, cols, separator, linesep)
+lines = open (files[0]).readlines ()
-main ()
+if format == 'latex':
+ convert_tex (lines, output, cols, separator, linesep)
+elif format == 'html':
+ convert_html (lines, output, cols, separator, linesep)
+elif format == 'texi':
+ convert_texinfo (lines, output, cols, separator, linesep)
+++ /dev/null
-#!/bin/sh
-# texi2man.sh
-
-if [ $# -ne 2 ]; then
- echo "Usage: texi2man TEXINFO-FILE MAN-FILENAME"
- exit 2
-fi
-
-date=`date +%d/%b/%y`
-#urg
-package_name=LilyPond
-#urg urg
-version=0.1.71
-
-infile=$1
-outfile=$2
-name=`basename $1 .texinfo`
-name=`basename $name .texi`
-name=`echo $name | tr '[A-Z]' '[a-z]'`
-NAME=`echo $name | tr '[a-z]' '[A-Z]'`
-
-echo .TH\ $NAME\ 1\ \"$date\" "$package_name Documentation" >$outfile
-
-NEWLINE="
-"
-cat $infile |
-#urg, wish we could fix texi2roff :-(
-sed 's!.*\\input .*texinfo.*!!' |
-sed 's!^@chapter.*!@section NAME!' |
-# sed 's!^@node *[Ii]nvoking.*!@section SYNOPSIS!' |
-sed 's!^@node.*!!' |
-# perl -pe "{s/\@node ([^,]*).*/\@section /;\$i=\$1; \$i=~tr [a-z] [A-Z]; chop; \$_.=\$i . \"\n\";}" |
-perl -pe "{s/\@section (.*)/\@section /;\$i=\$1; \$i=~tr [a-z] [A-Z]; chop; \$_.=\$i . \"\n\";}" |
-sed 's!^@subsection .*!!' |
-sed 's!^@c *@texi2man@!@!' |
-perl -pe "s/\@url{([^}]*)}/\$1/" |
-perl -pe "s/\@email{([^},]*)}/<\$1>/" |
-perl -pe "s/\@email{([^},]*),([^}]*)}/\$2, <\$1>/" |
-sed "s!DESCRIPTION!& NEWLINE\
-This manual page was automatically generated from $infile by $0. For more details, please refer to the info pages: NEWLINE\
- info $name NEWLINE\
-!" |
-sed "s!NEWLINE!\\$NEWLINE!g" |
-# debugging:
-tee $infile.texi2roff |
-texi2roff -ms |
-sed 's!^\.ds __ !.SH !' |
-# /\&\n(H1.\n(H2 \*(__
-sed 's!.*(H1.*!!' |
-cat >> $outfile
-
# Texinfo_rules.make
-.SUFFIXES: .1 .html .texinfo
+.SUFFIXES: .html .texinfo
-texi2man = $(step-bindir)/out/texi2man $< $@
-texi2html =\
- rm -f $@.urg;\
- cat $< | sed "s!@include.*!!" > $@.urg;\
- $(TEXI2HTML) $@.urg;\
- rm -f $@.urg;\
- mv $(@F).urg.html $@;\
- rm -f $(@F:%.html=%.html.urg_toc.html);\
- add-URLs $@
+$(outdir)/%.info: $(outdir)/%.texi
+ makeinfo --output=$@ $<
-$(outdir)/%.1: %.texinfo
- $(texi2man)
+$(outdir)/%.html: $(outdir)/%.texi
+ -makeinfo --force --output=$@ --html --no-headers $<
+ $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index=$(depth)/../index.html $@ $(wildcard $(basename $@)[0-9][0-9].html)
-$(outdir)/%.info: $(outdir)/%.texinfo
- $(MAKEINFO) --force -o $@ $<
+$(outdir)/%.dvi: $(outdir)/%.texi
+# --clean only in >= 3.12s
+# cd $(outdir); texi2dvi --clean ../$<
+ cd $(outdir); texi2dvi ../$<
-# $(outdir)/%.html: %.texinfo
-# $(texi2html)
-# add-html-footer --index $(depth)/../index.html $@
+$(outdir)/%.txt: $(outdir)/%.texi
+ $(MAKEINFO) --no-split --no-headers --output $@ $<
-# texi2html is as broken as pod2html 5004 :-)
-# we'll have to use pod2html 5003 for now.
-# don't burn your .pod sources!
-#
-$(outdir)/%.html: $(outdir)/%.texinfo
- $(texi2html)
- $(PYTHON) $(step-bindir)/add-html-footer.py --package=$(topdir) --index $(depth)/../index.html $@
-
-$(outdir)/%.1: $(outdir)/%.texinfo
- -$(texi2man)
+$(outdir)/%.texi: %.texi
+ cp $< $@
--- /dev/null
+
+TEXI_FILES = $(wildcard *.texi)
+
+EXTRA_DIST_FILES += $(TEXI_FILES)
% the code faster, and more reliable (less flexible)
-%
-% TODO : use GUILE for this kind of muckery.
-%
-
-{%
- \def\par{ }% %Ugh. Don't try this at home, kids!
- % neat file-include trick by Piet van Oostrum <piet@cs.uu.nl>
- \newread\defin
- \newtoks\toksfiledefi\newtoks\toksfiledefii
- \def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}
- \def\filedef#1#2{%#1=command name, #2=file name
- \openin\defin=#2\relax\def#1{}
- \ifeof\defin
- \message{***************** CAN NOT OPEN #2 ********************}
- \end
- \fi
- \loop\ifnot{\ifeof\defin}\read\defin to\tempfiledef
- \toksfiledefi=\expandafter{#1}%
- \toksfiledefii=\expandafter{\tempfiledef}%
- % \expandafter\special\expandafter{!\the\toksfiledefi\the\toksfiledefii}\repeat%
- \global\edef#1{\the\toksfiledefi\the\toksfiledefii}\repeat%
- }
- %
- % This seems a little backwards, but we don't want to include the PS
- % stuff too early
- %
- \filedef\includelilyps{lily.ps}%
- \expandafter\special{! \includelilyps }
-}
-
-
\def\turnOnPostScript{%
% This sets CTM so that you get to the currentpoint
% by executing a 0 0 moveto
\special{ps: @beginspecial @setspecial ##1 @endspecial}
}
%
-
\special{!
/stafflinethickness \mudelapaperstaffline\space def
/interline \mudelapaperinterline\space def