From e4a2733b4c0ab484305dc19fc598d70a9631539b Mon Sep 17 00:00:00 2001 From: Han-Wen Nienhuys Date: Thu, 2 Sep 1999 02:17:49 +0200 Subject: [PATCH] release: 1.2.5 --- AUTHORS.txt | 83 +- CHANGES | 11 +- Documentation/COPERTINA.yo | 1 - Documentation/FLAPTEKST.yo | 4 - Documentation/metadoc/GNUmakefile | 14 +- Documentation/scherm.in | 16 - Documentation/schermo.in | 16 - Documentation/tex/GNUmakefile | 35 +- Documentation/tex/glossary.yo | 85 - Documentation/tex/html-disclaimer.yo-urg | 16 - Documentation/tex/mudela-book-doc.doc | 2 + Documentation/tex/reference-manual.tely | 4221 +++++++++++++++++ Documentation/tex/reference-manual.yo | 3355 ------------- ...ypond-regtest.doc => regression-test.tely} | 124 +- Documentation/tex/tutorial.tely | 933 ++++ Documentation/tex/tutorial.yo | 999 ---- Documentation/topdocs/AUTHORS.texi | 69 + Documentation/topdocs/AUTHORS.yo | 56 - Documentation/topdocs/GNUmakefile | 8 +- Documentation/topdocs/INSTALL.texi | 406 ++ Documentation/topdocs/INSTALL.yo | 334 -- Documentation/topdocs/PATCHES.texi | 185 + Documentation/topdocs/PATCHES.yo | 138 - Documentation/topdocs/README.texi | 135 + Documentation/topdocs/README.yo | 105 - Documentation/topdocs/index.tely | 108 + Documentation/topdocs/index.yo | 107 - Documentation/topdocs/scherm.in | 16 - Documentation/topdocs/schermo.in | 16 - Documentation/topdocs/topweb.yo | 1 - INSTALL.txt | 437 +- NEWS | 2 - README.txt | 138 +- TODO | 23 +- VERSION | 2 +- aclocal.m4 | 16 +- buildscripts/mutopia-index.py | 4 + config.make.in | 4 +- configure | 89 +- flower/directed-graph.cc | 154 - flower/include/directed-graph.hh | 51 - input/bugs/{addlyrmus.ly => addlyrmus.fly} | 0 input/bugs/core.ly | 11 - input/bugs/dots.fly | 2 +- input/bugs/hinterfleisch-gone.ly | 2 +- input/bugs/l.ly | 13 + input/bugs/swits.ly | 15 - input/bugs/utremi_old.ly | 262 + input/test/repeat-semifold.ly | 6 +- lily/crescendo.cc | 5 +- lily/include/score-element.hh | 1 - lily/include/spanner.hh | 1 + lily/multi-measure-rest.cc | 3 +- lily/note-heads-engraver.cc | 1 + lily/paper-stream.cc | 104 +- lily/repeated-music.cc | 3 +- lily/rest-engraver.cc | 1 + lily/slur.cc | 7 +- lily/spacing-spanner.cc | 3 + lily/spanner.cc | 34 +- lily/staff-side.cc | 2 +- lily/tie.cc | 2 +- lily/volta-spanner.cc | 3 +- make/mudela-rules.make | 11 - make/mudela-targets.make | 1 + make/mudela-vars.make | 3 + make/out/lilypond.lsm | 8 +- make/out/lilypond.spec | 4 +- ps/lily.ps | 2 +- scm/lily.scm | 9 +- scripts/mudela-book.py | 34 +- stepmake/aclocal.m4 | 16 +- stepmake/bin/add-html-footer.py | 32 +- stepmake/bin/ls-latex.py | 6 +- stepmake/bin/package-diff.py | 8 +- stepmake/bin/packagepython.py | 35 +- stepmake/bin/table-to-html.py | 207 +- stepmake/bin/texi2man.sh | 51 - stepmake/stepmake/texinfo-rules.make | 41 +- stepmake/stepmake/texinfo-targets.make | 1 + stepmake/stepmake/texinfo-vars.make | 4 + tex/lily-ps-defs.tex | 32 - 82 files changed, 7097 insertions(+), 6408 deletions(-) delete mode 100644 Documentation/scherm.in delete mode 100644 Documentation/schermo.in delete mode 100644 Documentation/tex/glossary.yo delete mode 100644 Documentation/tex/html-disclaimer.yo-urg create mode 100644 Documentation/tex/reference-manual.tely delete mode 100644 Documentation/tex/reference-manual.yo rename Documentation/tex/{lilypond-regtest.doc => regression-test.tely} (81%) create mode 100644 Documentation/tex/tutorial.tely delete mode 100644 Documentation/tex/tutorial.yo create mode 100644 Documentation/topdocs/AUTHORS.texi delete mode 100644 Documentation/topdocs/AUTHORS.yo create mode 100644 Documentation/topdocs/INSTALL.texi delete mode 100644 Documentation/topdocs/INSTALL.yo create mode 100644 Documentation/topdocs/PATCHES.texi delete mode 100644 Documentation/topdocs/PATCHES.yo create mode 100644 Documentation/topdocs/README.texi delete mode 100644 Documentation/topdocs/README.yo create mode 100644 Documentation/topdocs/index.tely delete mode 100644 Documentation/topdocs/index.yo delete mode 100644 Documentation/topdocs/scherm.in delete mode 100644 Documentation/topdocs/schermo.in delete mode 100644 Documentation/topdocs/topweb.yo delete mode 100644 flower/directed-graph.cc delete mode 100644 flower/include/directed-graph.hh rename input/bugs/{addlyrmus.ly => addlyrmus.fly} (100%) delete mode 100644 input/bugs/core.ly create mode 100644 input/bugs/l.ly delete mode 100644 input/bugs/swits.ly create mode 100644 input/bugs/utremi_old.ly delete mode 100644 stepmake/bin/texi2man.sh create mode 100644 stepmake/stepmake/texinfo-targets.make create mode 100644 stepmake/stepmake/texinfo-vars.make diff --git a/AUTHORS.txt b/AUTHORS.txt index 824ab30814..ed7b21bbf7 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -1,73 +1,64 @@ - 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 , cembalo-par- - tita in mudela, accordion symbols, some mudela-book.py + * Tom Cato Amundsen , cembalo-partita in + mudela, accordion symbols, some mudela-book.py -o Mats Bengtsson , - http://www.s3.kth.se/~matsb/ lots of testing, fixes, - general comments and contributions. + * Mats Bengtsson , + `http://www.s3.kth.se/~matsb/' lots of testing, fixes, general + comments and contributions. -o Eric Bullinger , accidental trans- - position. + * Eric Bullinger , accidental transposition. -o Jan Arne Fagertun , - TeX titling and lytodvi.sh + * Jan Arne Fagertun , TeX + titling and lytodvi.sh -o Anthony Fok , debian package: debian/* + * Anthony Fok , debian package: debian/* -o Bjoern Jacke german glossary - stuff. + * Bjoern Jacke german glossary stuff. -o Neil Jerram . parts of Documenta- - tion/Vocab* + * Neil Jerram . 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 , breathing - signs + * Michael Krause , breathing signs -o Werner Lemberg , misc + * Werner Lemberg , misc bugfixes, some Beam and Stem code. -o David R. Linn , Mailing list + * David R. Linn , Mailing list maintenance. -o Adrian Mariano <> Reference manual, tutorial fixes, - glossary. + * Adrian Mariano <> Reference manual, tutorial fixes, glossary. -o Han-Wen Nienhuys , - http://www.cs.uu.nl/~hanwen/ Main author (initials: - HWN). + * Han-Wen Nienhuys , + `http://www.cs.uu.nl/~hanwen/' Main author (initials: HWN). -o Jan Nieuwenhuizen , - http://www.xs4all.nl/~jantien/ Main author (initials: - JCN). + * Jan Nieuwenhuizen , + `http://www.xs4all.nl/~jantien/' Main author (initials: JCN). -o Alexandre Oliva , http://sun- - site.unicamp.br/~oliva/ testing + * Alexandre Oliva , + `http://sunsite.unicamp.br/~oliva/' testing -o Franc,ois Pinard , parts of - Documentation/Vocab*, started internationalization + * Franc ois Pinard, parts of + Documentation/Vocab*, started internationalization stuff - stuff + * Glen Prideaux , minor bug fix to + script used to generate doc++ documentation -o Glen Prideaux , minor bug fix - to script used to generate doc++ documentation + * Jeffrey B. Reed , Windows-NT support. -o Jeffrey B. Reed , 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! diff --git a/CHANGES b/CHANGES index 8fa3170237..2f0e5efd8d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +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 @@ -12,8 +21,6 @@ extent () is given relative to this. - 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 ********** diff --git a/Documentation/COPERTINA.yo b/Documentation/COPERTINA.yo index dd4c568b46..af415d654b 100644 --- a/Documentation/COPERTINA.yo +++ b/Documentation/COPERTINA.yo @@ -5,5 +5,4 @@ nsect(LilyPond includefile(COPERTINA.in) nl() -pic(schermo) diff --git a/Documentation/FLAPTEKST.yo b/Documentation/FLAPTEKST.yo index b144222ceb..ced2a0271e 100644 --- a/Documentation/FLAPTEKST.yo +++ b/Documentation/FLAPTEKST.yo @@ -1,9 +1,5 @@ -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) diff --git a/Documentation/metadoc/GNUmakefile b/Documentation/metadoc/GNUmakefile index ebce9188b1..2df6d42828 100644 --- a/Documentation/metadoc/GNUmakefile +++ b/Documentation/metadoc/GNUmakefile @@ -6,19 +6,17 @@ DATA_FILES = $(wildcard *.data) 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 @@ -53,9 +51,9 @@ $(outdir)/%.tex: %.data $(depth)/VERSION -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 diff --git a/Documentation/scherm.in b/Documentation/scherm.in deleted file mode 100644 index 005b6451c3..0000000000 --- a/Documentation/scherm.in +++ /dev/null @@ -1,16 +0,0 @@ -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... diff --git a/Documentation/schermo.in b/Documentation/schermo.in deleted file mode 100644 index b4fb407537..0000000000 --- a/Documentation/schermo.in +++ /dev/null @@ -1,16 +0,0 @@ -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... diff --git a/Documentation/tex/GNUmakefile b/Documentation/tex/GNUmakefile index 6fd3cf7762..fd0723e714 100644 --- a/Documentation/tex/GNUmakefile +++ b/Documentation/tex/GNUmakefile @@ -6,20 +6,20 @@ DATA_FILES = $(wildcard *.data) 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 @@ -42,31 +42,24 @@ OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html)) #urg should generalise and move Lilypond -> StepMake # URG. Lilypond specific. Move out. $(outdir)/%.html: %.data $(depth)/VERSION - $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' --package=$(topdir) -o $@ $< + $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -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=' ' --package=$(topdir) -o $@ --latex $< +$(outdir)/%.latex: %.data $(depth)/VERSION + $(PYTHON) $(step-bindir)/table-to-html.py --columns=7 --linesep=' ' -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 diff --git a/Documentation/tex/glossary.yo b/Documentation/tex/glossary.yo deleted file mode 100644 index eb929dd2e3..0000000000 --- a/Documentation/tex/glossary.yo +++ /dev/null @@ -1,85 +0,0 @@ - -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() - -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) -) - diff --git a/Documentation/tex/html-disclaimer.yo-urg b/Documentation/tex/html-disclaimer.yo-urg deleted file mode 100644 index 061f9d441e..0000000000 --- a/Documentation/tex/html-disclaimer.yo-urg +++ /dev/null @@ -1,16 +0,0 @@ -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 . ) diff --git a/Documentation/tex/mudela-book-doc.doc b/Documentation/tex/mudela-book-doc.doc index 46c2423c9b..e4afd2e915 100644 --- a/Documentation/tex/mudela-book-doc.doc +++ b/Documentation/tex/mudela-book-doc.doc @@ -16,6 +16,8 @@ \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 diff --git a/Documentation/tex/reference-manual.tely b/Documentation/tex/reference-manual.tely new file mode 100644 index 0000000000..f8a4f3b28f --- /dev/null +++ b/Documentation/tex/reference-manual.tely @@ -0,0 +1,4221 @@ +\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 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' ~ +@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 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 + \paper { + linewidth = -1.; + } + } +@end mudela + +This happens because the chord is interpreted by a score context. +Each time a note is encountered a default Voice context (along with a +Staff context) is created. The solution is to explicitly instantiate +a Voice context: + +@mudela[verbatim,center] + \score { + \notes\context Voice + \paper { + linewidth = -1.; + } + } +@end mudela + + + +@cindex relative pitch specification + +@node relative, sec-repeats, compoundmusic, LilyPond 1-2-0 Reference Manual + +It is easy to get confused by octave changing marks and accidentally +putting a pitch in the wrong octave. A much better way of entering a +note's octave is `the relative octave' mode. + +@quotation + + @code{\relative} +@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 + + + } +@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{ } + } + \context Staff \notes { + a b c' d' e' + } +> + +@end mudela +@end quotation + +LilyPond examines chords specified as lists of notes to determine a +name to give the chord. By default, LilyPond will not try to +identify chord inversions: + +@mudela[fragment,verbatim,center] + < + \context ChordNameVoice \notes { + + } + \context Thread \notes { + + } + > +@end mudela + +If you want inversions to be recognized, you must set the property +@code{ChordNames.chordInversion} +@cindex ChordNames.chordInversion@@@code{ChordNames.chordInversion} +: + +@mudela[fragment,verbatim,center] + < + \property Score.chordInversion = 1 + \context ChordNameVoice \notes { + + } + \context Thread \notes { + + } + > +@end mudela + + + +@cindex lyrics + +@cindex printing!lyrics + +@node lyricprint, Notation Contexts, autobeam, LilyPond 1-2-0 Reference Manual + +Lyric syllables must be interpreted within a @code{Lyrics} context + +@cindex context!Lyrics + for printing them. + +Here is a full example: + +@quotation + +@mudela[verbatim] +\score { + < + \notes \transpose c'' { + c d e c | c d e c | + e f g2 | e4 f g2 \bar "|."; + } + \context Lyrics \lyrics { + Va-4 der Ja- cob Va- der Ja- cob + Slaapt gij nog?2 Slaapt4 gij nog?2 + } + > +} + +@end mudela +@end quotation + +You may want a continuous line after the syllables to show melismata. +To achieve this effect, add a `@code{__}' lyric as a separate word +after the lyric to be extended. This will create an extender, a line +that extends over the entire duration of the lyric. This line will +run all the way to the start of the next lyric, so you may want to +shorten it by using a blank lyric (using `@code{_}'). + +@quotation + +@mudela[verbatim] +\score { + < + \notes \relative c'' { + a4 () b () c () d | c () d () b () a | c () d () b () a + } + \context Lyrics \lyrics { + foo1 __ | bar2. __ _4 | baz1 __ + } + > +} + +@end mudela +@end quotation + + +If you want to have hyphens centered between syllables (rather than +attached to the end of the first syllable) you can use the special +`@code{-}@code{-}' lyric as a separate word between syllables. This +will result in a hyphen which length varies depending on the space +between syllables, and which will be centered between the syllables. +For example: + +@quotation + +@mudela[verbatim] +\score { + < + \notes \transpose c'' { + c d e c | c d e c | + e f g2 | e4 f g2 \bar "|."; + } + \context Lyrics \lyrics { + Va4 -- der Ja -- cob | Va -- der Ja -- cob | + Slaapt gij nog?2 | Slaapt4 gij nog?2 + } + > +} + +@end mudela +@end quotation + + + +@node Notation Contexts, contextselection, lyricprint, LilyPond 1-2-0 Reference Manual +@section Notation Contexts + +@cindex notation contexts + +Notation contexts are objects that only exist during a run of +LilyPond. During the interpretation phase of LilyPond, the Music +expression contained in a @code{\score} block is interpreted in time +order. This is the order in which humans read, play, and write +music. + +A context is an object that holds the reading state of the +expression; it contains information like + +@itemize @bullet + @item What notes are playing at this point? + @item What symbols will be printed at this point? + @item In what style will they printed? + @item What is the current key signature, time signature, point within + the measure, etc.? +@end itemize + +Contexts are grouped hierarchically: A @code{Voice} context is +contained in a @code{Staff} context (because a staff can contain +multiple voices at any point), a @code{Staff} context is contained in +a @code{Score}, @code{StaffGroup}, or @code{ChoirStaff} context (because +these can all contain multiple staffs). + +Contexts associated with sheet music output are called @emph{notation +contexts}, those for sound output are called playing contexts. + +Contexts are created either manually or automatically. Initially, +the top level music expression is interpreted by the top level +context (the @code{Score} context). When a atomic music expression +(i.e. a note, a rest, @code{\bar}, or @code{\time} commands), a nested +set of contexts is created that can process these atomic expressions, +as in this example: + +@quotation + + @example +\score @{ \notes < c4 > @} +@end example + +@end quotation + +The sequential music, `@code{@{ c4 @}}' is interpreted by @code{Score} +context. When the note `@code{c4}' itself is interpreted, a set of +contexts is needed that will accept notes. The default for this is a +@code{Voice} context, contained in a @code{Staff} context. Creation of +these contexts results in the staff being printed. + + +@node contextselection, Notation output definitions, Notation Contexts, LilyPond 1-2-0 Reference Manual + +@cindex context + +You can also create contexts manually, and you probably have to do so +if you want to typeset complicated multiple part material. If a +`@code{\context} ' 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 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'' { + + } + } + +@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 diff --git a/Documentation/tex/reference-manual.yo b/Documentation/tex/reference-manual.yo deleted file mode 100644 index 0d17437b98..0000000000 --- a/Documentation/tex/reference-manual.yo +++ /dev/null @@ -1,3355 +0,0 @@ -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() - -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 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' ~ ) - -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 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 - \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 - \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 - - - }) - -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{ } - } - \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 { - - } - \context Thread \notes { - - } - >) - -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 { - - } - \context Thread \notes { - - } - >) - -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 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'' { - - } - } -) - -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) diff --git a/Documentation/tex/lilypond-regtest.doc b/Documentation/tex/regression-test.tely similarity index 81% rename from Documentation/tex/lilypond-regtest.doc rename to Documentation/tex/regression-test.tely index 79ad4b8331..9f9d06bcbf 100644 --- a/Documentation/tex/lilypond-regtest.doc +++ b/Documentation/tex/regression-test.tely @@ -1,29 +1,27 @@ -% -*-LaTeX-*- vim:tw=72 -\documentclass{article} +\input texinfo @c -*-texinfo-*- vim:tw=72 +@setfilename regression-test.info +@settitle LilyPond Regression test -\title{LilyPond feature test} -\author{Han-Wen Nienhuys} -\begin{document} -\maketitle +@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} +@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} +@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} +@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 @@ -32,23 +30,23 @@ 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} +@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} +@mudelafile{multi-measure-rest.ly} -\section{Stems} +@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} +@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 @@ -56,7 +54,7 @@ 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} +@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 @@ -66,20 +64,20 @@ 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} +@mudelafile{stem-direction.sly} Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+. -\mudelafile{stem-direction-down.ly} +@mudelafile{stem-direction-down.ly} -\section{Scripts} +@section Scripts The staccato dot (and all scripts with follow-into-staff set), must not be on staff lines. -\mudelafile{staccato-pos.sly} +@mudelafile{staccato-pos.sly} -\section{Grace notes} +@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. @@ -90,58 +88,58 @@ 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} +@mudelafile{grace.ly} -\section{Beams, slurs and other spanners} +@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} +@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} +@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} +@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} +@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} +@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} +@mudelafile{beam-interstaff.ly} The same goes for slurs. They behave decently when broken across linebreak. -\mudelafile{slur-interstaff.ly} +@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} +@mudelafile{tup.ly} -\section{Repeats} +@section Repeats LilyPond has three modes for repeats: folded, unfolded and semi-unfolded. Unfolded repeats are fully written out. Semi unfolded @@ -154,18 +152,18 @@ the number of repeats. Unfolded behavior: -\mudelafile{repeat-unfold.ly} +@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} +@mudelafile{repeat-semifold.ly} Folded. This doesn't make sense without alternatives, but it works. -\mudelafile{repeat-fold.ly} +@mudelafile{repeat-fold.ly} -\section{Lyrics} +@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 @@ -173,13 +171,13 @@ 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 +@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} +@mudelafile{lyric-combine.ly} -\section{Multiple notes} +@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 @@ -187,26 +185,26 @@ 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} +@mudelafile{rest-collision.ly} Normal collisions. We have support for polyphony, where the middle voices are horizontally shifted. -\mudelafile{collisions.ly} +@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} +@mudelafile{number-staff-lines.fly} -\section{Spacing} +@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} +@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 @@ -221,30 +219,30 @@ must stretch like the space within the measure. Tight: -\mudelafile{spacing-tight.ly} +@mudelafile{spacing-tight.ly} Natural: -\mudelafile{spacing-natural.ly} +@mudelafile{spacing-natural.ly} Loose: -\mudelafile{spacing-loose.ly} +@mudelafile{spacing-loose.ly} -\section{Global stuff} +@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} +@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} +@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 @@ -252,36 +250,37 @@ 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} +@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]{size11.ly} -\mudelafile[nofly]{size13.ly} +@mudelafile[nofly]{size13.ly} -\mudelafile[nofly]{size16.ly} +@mudelafile[nofly]{size16.ly} -\mudelafile[nofly]{size20.ly} +@mudelafile[nofly]{size20.ly} -\mudelafile[nofly]{size23.ly} +@mudelafile[nofly]{size23.ly} -\mudelafile[nofly]{size26.ly} +@mudelafile[nofly]{size26.ly} -\section{Clefs and Time Signatures} +@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 +@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} +@mudelafile{clefs.ly} -\def\bla#1{%the input file is too long and does not test for specific bugs +@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 @@ -290,5 +289,6 @@ layout. The style ``1'', gives single number signatures for all signatures. % \mu delafile{time.fly} -} -\end{document} +@end ignore + +@bye diff --git a/Documentation/tex/tutorial.tely b/Documentation/tex/tutorial.tely new file mode 100644 index 0000000000..23ad4c3dfc --- /dev/null +++ b/Documentation/tex/tutorial.tely @@ -0,0 +1,933 @@ +\\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 { + + \property Voice.verticalDirection = \down g'8. b,16 + s1 s2. r4 + g +} + +oboes = \notes \relative c'' \context Voice = oboe { + \stemup s4 g8. b,16 c8 r + \grace \times 2/3 { } + < + { \times 2/3 { a8 g c } \! c2 } + \context Voice = oboeTwo { + \stemdown + \grace { + \property Grace.verticalDirection = \down + [f,16 g] } + f8 e e2 + } > + \stemboth + \grace <)b8. d8.-\trill> | + [ < )f8. a>] <)b,8 d> r [ ] r | + [ < )e8. g>] +} + +hoomPah = \notes \transpose c' { + c8 \translator Staff = top \stemdown + c'8 \translator Staff = bottom \stemup } + +hoomPahHoomPah = { [\hoomPah \hoomPah] } + +bassvoices = \notes \relative c' { + c4 g8. b,16 + \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah + \stemdown [c8 c'8] r4 + r4 + < {\stemup r2 } + \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } > +} + +\score { + \context PianoStaff \notes < + \context Staff = top < \time 2/2; + \context Voice = viola \viola + \oboes + > + \context Staff = bottom < \time 2/2; \clef bass; + \bassvoices + > + > + \midi { } + \paper { + indent = 0.0; + linewidth = 15.0 \cm; } +} +@end mudela + +If it looks like incomprehensible gibberish to you... Then you are +right. The author has doctored this example to have as many quirks in +one system as possible.@example +viola = \notes \relative c' \context Voice = viola @{ +@end example +In this example, you can see multiple parts on a staff. Each part is +associated with one notation context. This notation context handles +stems and dynamics (among others). The name of this context is +@code{Voice}. For each part we have to make sure that there is +precisely one Voice context@footnote{If @code{\context} would not +have been specified explicitly, three @code{Voice} contexts would be +created: one for each note in the first chord.}.@example + +@end example +@code{<} and @code{>} are short hands for @code{\simultaneous @{} and +@code{@}}. So the expression enclosed in @code{<} and @code{>} is a +chord. @code{\f} places a forte symbol under the chord.@example +\property Voice.verticalDirection = \down +@end example +@code{verticalDirection} is a property of the voice context. It +controls the directions of stems, articulations marks and other +symbols. + If @code{verticalDirection} is set to @code{\down} +(identifier for the integer -1) the stems go down, +@code{\up} (identifier for the integer 1) makes the stems go up.@example + g'8. b,16 +@end example +Relative octaves work a little differently with chords. The starting +point for the note following a chord is the first note of the chord. So +the @code{g} gets an octave up quote: it is a fifth above the starting +note of the previous chord (the central C). + +@example +s1 s2. r4 +@end example +@code{s} is a `spacer' rest. It does not print anything, but it does +have the duration of a rest. @example +oboes = \notes \relative c'' \context Voice = oboe @{ +@end example +Now comes a part for two oboes. They play homophonically, so we +print the notes as one voice that makes chords. Again, we insure that +these notes are indeed processed by precisely one context with +@code{\context}.@example +\stemup s4 g8. b,16 c8 r +@end example +@code{\stemup} is an identifier reference. It is shorthand for +@code{\property Voice.verticalDirection = \up}. If possible, you +should use predefined identifiers like these for setting properties. +Your input will be less dependent upon the implementation of LilyPond. +@example +\grace < )d4 f> +@end example +@code{\grace} introduces grace notes. It takes one argument, in this +case a chord. The slur started on the @code{e} of the chord +will be attached to the next note.@footnote{LilyPond will squirm +about unended Slurs. In this case, you can ignore the warning}. +@example +\times 2/3 +@end example +Tuplets are made with the @code{\times} keyword. It takes two +arguments: a fraction and a piece of music. The duration of the +second argument is multiplied by the first argument. Triplets make +notes occupy 2/3 of their notated duration, so in this case the +fraction is 2/3. @example +@{ @} +@end example +The piece of music to be `tripletted' is sequential music containing +three notes. On the first chord (the @code{d}), a crescendo is started +with @code{\<}.@example +< +@end example +At this point, the homophonic music splits into two rhythmically +different parts. We can't use a sequence of chords to enter this, so +we make a `chord' of sequences to do it. We start with the upper +voice, which continues with upward stems: @example + @{ \times 2/3 @{ a8 g c @} \! c2 @} +@end example +The crescendo is ended at the half note by the escaped exclamation +mark `@code{\!}'. @example +\context Voice = oboeTwo @{ +\stemdown +@end example +We can't share stems with the other voice, so we have to create a new +@code{Voice} context. We give it the name @code{oboeTwo} to distinguish +it from the other context. Stems go down in this voice. @example +\grace @{ +@end example +When a grace section is processed, a @code{Grace} context is +created. This context acts like a miniature score of its own. It has +its own time bookkeeping, and you can make notes, beams, slurs +etc. Here fiddle with a property and make a beam. The argument of +@code{\grace} is sequential music.@example +\property Grace.verticalDirection = \down +[f,16 g] @} +@end example +Normally, grace notes are always stem up, but in this case, the upper +voice interferes. We set the stems down here. + +As far as relative mode is concerned, the previous note is the +@code{c'''2} of the upper voice, so we have to go an octave down for +the @code{f}. +@example + + f8 e e2 +@} > +@end example +This ends the two-part section. @example +\stemboth +\grace <)b8. d8.-\trill> | +@end example +@code{\stemboth} ends the forced stem directions. From here, stems are +positioned as if it were single part music. + +The bass has a little hoom-pah melody to demonstrate parts switching +between staffs. Since it is repetitive, we use identifiers:@example +hoomPah = \notes \transpose c' @{ +@end example +Transposing can be done with @code{\transpose}. It takes two +arguments; the first specifies what central C should be transposed to. +The second is the to-be-transposed music. As you can see, in this +case, the transposition is a no-op. Central C is transposed to +central C. + +The purpose of this no-op is circumventing relative mode. Relative +mode can not be used in conjunction with transposition, so relative +mode will leave the contents of @code{\hoomPah} alone. We can use it +without having to worry about getting the motive in a wrong +octave@footnote{@code{hoomPah = \relative ...} would be more +intuitive to use, but that would not let me plug @code{\transpose} +:-).}.@example +c8 \translator Staff = top \stemdown +@end example +We assume that the first note will be put in the lower staff. After +that note we switch to the upper staff with @code{\translator}. To be +precise, this @code{\translator} entry switches the current voice to a +@code{Staff} named @code{top}. So we have to name the upper staff +`@code{top}'. Stem directions are set to avoid interfering with the +oboe voices. @example +c'8 \translator Staff = bottom \stemup @} +@end example +Then a note is put on the upper staff, and we switch again. We have +to name the lower staff `@code{bottom}'. @example +hoomPahHoomPah = @{ [\hoomPah \hoomPah] @} +@end example +Put two of these fragments in sequence, and beam them.@example +bassvoices = \notes \relative c' @{ +c4 g8. b,16 +\hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah +\hoomPahHoomPah +@end example +Entering the bass part is easy: the hoomPahHoomPah variable is +referenced four times.@example +\context Voice = reallyLow @{\stemdown g2 ~ | g4 c8 @} > +@end example +After skipping some lines, we see @code{~}. This mark makes ties.@example +\context PianoStaff +@end example +For piano music, a special context is needed to get cross staff +beaming right. It is called @code{PianoStaff}.@example +\context Staff = bottom < \time 2/2; \clef bass; +@end example +The bottom staff must have a different clef.@example +indent = 0.0; +@end example +To make some more room on the line, the first (in this case the only) +line is not indented. The line still looks is very cramped, but that is due +to the format of this tutorial. + +This example shows a lot of features, but the organisation isn't +perfect. For example, it would be less confusing to use a chord +containing sequential music than a sequence of chords for the oboe +parts. + +[TODO: demonstrate Hara-Kiri with scores and part extraction.] + +@node The end, Top, Piano music, Typesetting music with LilyPond +@section The end + +That's all folks. From here, you can either try fiddling with input +files, or you can read the reference manual. + + +@bye diff --git a/Documentation/tex/tutorial.yo b/Documentation/tex/tutorial.yo deleted file mode 100644 index 5d5c11bac0..0000000000 --- a/Documentation/tex/tutorial.yo +++ /dev/null @@ -1,999 +0,0 @@ -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()ARG1+htmlcommand())\ - 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() - -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 { - - \property Voice.verticalDirection = \down g'8. b,16 - s1 s2. r4 - g -} - -oboes = \notes \relative c'' \context Voice = oboe { - \stemup s4 g8. b,16 c8 r - \grace \times 2/3 { } - < - { \times 2/3 { a8 g c } \! c2 } - \context Voice = oboeTwo { - \stemdown - \grace { - \property Grace.verticalDirection = \down - [f,16 g] } - f8 e e2 - } > - \stemboth - \grace <)b8. d8.-\trill> | - [ < )f8. a>] <)b,8 d> r [ ] r | - [ < )e8. g>] -} - -hoomPah = \notes \transpose c' { - c8 \translator Staff = top \stemdown - c'8 \translator Staff = bottom \stemup } - -hoomPahHoomPah = { [\hoomPah \hoomPah] } - -bassvoices = \notes \relative c' { - c4 g8. b,16 - \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah \hoomPahHoomPah - \stemdown [c8 c'8] r4 - r4 - < {\stemup r2 } - \context Voice = reallyLow {\stemdown g2 ~ | g4 c8 } > -} - -\score { - \context PianoStaff \notes < - \context Staff = top < \time 2/2; - \context Voice = viola \viola - \oboes - > - \context Staff = bottom < \time 2/2; \clef bass; - \bassvoices - > - > - \midi { } - \paper { - indent = 0.0; - linewidth = 15.0 \cm; } -}) - -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()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 )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 < )d4 f> )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({ })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 <)b8. d8.-\trill> | )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. - diff --git a/Documentation/topdocs/AUTHORS.texi b/Documentation/topdocs/AUTHORS.texi new file mode 100644 index 0000000000..c0eaec3cb0 --- /dev/null +++ b/Documentation/topdocs/AUTHORS.texi @@ -0,0 +1,69 @@ +\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 diff --git a/Documentation/topdocs/AUTHORS.yo b/Documentation/topdocs/AUTHORS.yo deleted file mode 100644 index 3d41246cb2..0000000000 --- a/Documentation/topdocs/AUTHORS.yo +++ /dev/null @@ -1,56 +0,0 @@ -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! - diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile index db918cafb4..d59c175603 100644 --- a/Documentation/topdocs/GNUmakefile +++ b/Documentation/topdocs/GNUmakefile @@ -2,8 +2,12 @@ depth = ../.. 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) + diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi new file mode 100644 index 0000000000..c246ff1574 --- /dev/null +++ b/Documentation/topdocs/INSTALL.texi @@ -0,0 +1,406 @@ +\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 diff --git a/Documentation/topdocs/INSTALL.yo b/Documentation/topdocs/INSTALL.yo deleted file mode 100644 index 9724f77a3a..0000000000 --- a/Documentation/topdocs/INSTALL.yo +++ /dev/null @@ -1,334 +0,0 @@ -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! diff --git a/Documentation/topdocs/PATCHES.texi b/Documentation/topdocs/PATCHES.texi new file mode 100644 index 0000000000..d71dff6870 --- /dev/null +++ b/Documentation/topdocs/PATCHES.texi @@ -0,0 +1,185 @@ +\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 diff --git a/Documentation/topdocs/PATCHES.yo b/Documentation/topdocs/PATCHES.yo deleted file mode 100644 index eee04b313b..0000000000 --- a/Documentation/topdocs/PATCHES.yo +++ /dev/null @@ -1,138 +0,0 @@ -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! - diff --git a/Documentation/topdocs/README.texi b/Documentation/topdocs/README.texi new file mode 100644 index 0000000000..d7eb7764b8 --- /dev/null +++ b/Documentation/topdocs/README.texi @@ -0,0 +1,135 @@ +\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 diff --git a/Documentation/topdocs/README.yo b/Documentation/topdocs/README.yo deleted file mode 100644 index c5633cae31..0000000000 --- a/Documentation/topdocs/README.yo +++ /dev/null @@ -1,105 +0,0 @@ -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. - diff --git a/Documentation/topdocs/index.tely b/Documentation/topdocs/index.tely new file mode 100644 index 0000000000..253c68c3d0 --- /dev/null +++ b/Documentation/topdocs/index.tely @@ -0,0 +1,108 @@ +\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 diff --git a/Documentation/topdocs/index.yo b/Documentation/topdocs/index.yo deleted file mode 100644 index bf794f498e..0000000000 --- a/Documentation/topdocs/index.yo +++ /dev/null @@ -1,107 +0,0 @@ -DEFINEMACRO(depth)(0)(.) -DEFINEMACRO(docdir)(0)(Documentation) -DEFINEMACRO(pic)(1)(url(ARG1)(DOEXPAND(docdir)/pictures/DOEXPAND(outdir)/ARG1.png -)) - -DEFINEMACRO(beginbold)(0)(whenhtml(htmlcommand())) -DEFINEMACRO(endbold)(0)(whenhtml(htmlcommand())) -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@ diff --git a/Documentation/topdocs/scherm.in b/Documentation/topdocs/scherm.in deleted file mode 100644 index 005b6451c3..0000000000 --- a/Documentation/topdocs/scherm.in +++ /dev/null @@ -1,16 +0,0 @@ -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... diff --git a/Documentation/topdocs/schermo.in b/Documentation/topdocs/schermo.in deleted file mode 100644 index b4fb407537..0000000000 --- a/Documentation/topdocs/schermo.in +++ /dev/null @@ -1,16 +0,0 @@ -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... diff --git a/Documentation/topdocs/topweb.yo b/Documentation/topdocs/topweb.yo deleted file mode 100644 index 64bd836383..0000000000 --- a/Documentation/topdocs/topweb.yo +++ /dev/null @@ -1 +0,0 @@ -whenhtml(htmlcommand()) diff --git a/INSTALL.txt b/INSTALL.txt index 7968bdb523..b64465f9c3 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -1,156 +1,135 @@ - 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 or + . -o EGCS 1.1 or newer. + * GUILE 1.3, check out + . -o Python 1.5, Check out ftp://ftp.python.org or - ftp://ftp.cwi.nl/pub/python. + * GNU make. Check out . -o GUILE 1.3, check out http://www.gnu.org/soft- - ware/guile/guile.html. + * Flex (version 2.5.4 or newer). Check out + . -o GNU make. Check out ftp://ftp.gnu.org. + * Bison (version 1.25 or newer). Check out + . -o Flex (version 2.5.4 or newer). Check out - ftp://ftp.gnu.org. + * Texinfo. Check out . 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) + . -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 + + or at mirror site -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 + 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 + - 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 + .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 @@ -158,188 +137,196 @@ o pnmtopng, which is also in libgr-progs for RedHat. The 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 + Which, in turn depends on man2html for proper installation. + man2html can be had from + . - 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 + and +. -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 +. 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 -Han-Wen Nienhuys + Jan Nieuwenhuizen -Jan Nieuwenhuizen + 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! diff --git a/NEWS b/NEWS index 46cf0a67b5..1d595bfa44 100644 --- a/NEWS +++ b/NEWS @@ -23,5 +23,3 @@ WHAT'S NEW? * 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 diff --git a/README.txt b/README.txt index d5dd11f037..34ebbcad13 100644 --- a/README.txt +++ b/README.txt @@ -1,103 +1,109 @@ - 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. diff --git a/TODO b/TODO index ae058662c9..cb02f6a3d4 100644 --- a/TODO +++ b/TODO @@ -10,6 +10,10 @@ Grep -i for TODO, FIXME and ugh/ugr/urg. .* 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 @@ -41,7 +45,7 @@ the mensural music notation. 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 @@ -59,16 +63,6 @@ abc2ly, midi2ly? . * 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. @@ -126,7 +120,7 @@ vertically between the two staves): - 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?) @@ -150,7 +144,6 @@ one of the spacing bugs mentioned in the TODO. . * 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? @@ -219,7 +212,6 @@ able to vertically align the chorus midway between the staves. 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 @@ -231,7 +223,7 @@ repeated section with different words for each repeat. . * 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) @@ -251,7 +243,6 @@ repeated section with different words for each repeat. . * 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 diff --git a/VERSION b/VERSION index 9747bff5a3..e752f734ff 100644 --- a/VERSION +++ b/VERSION @@ -1,7 +1,7 @@ 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 diff --git a/aclocal.m4 b/aclocal.m4 index 7417b337a5..a7127718d8 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -152,7 +152,7 @@ AC_DEFUN(AC_STEPMAKE_GXX, [ # 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 @@ -163,19 +163,9 @@ AC_DEFUN(AC_STEPMAKE_GXX, [ ]) 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 ]) diff --git a/buildscripts/mutopia-index.py b/buildscripts/mutopia-index.py index 11a1221059..5ea6bad2f2 100644 --- a/buildscripts/mutopia-index.py +++ b/buildscripts/mutopia-index.py @@ -10,6 +10,10 @@ import stat 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]*;') diff --git a/config.make.in b/config.make.in index be2cb00274..0c1b920b10 100644 --- a/config.make.in +++ b/config.make.in @@ -5,8 +5,8 @@ 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@ diff --git a/configure b/configure index 3ebe0d3ded..25bdbb0df3 100755 --- a/configure +++ b/configure @@ -1748,7 +1748,7 @@ fi # 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 @@ -2924,17 +2924,11 @@ test -n "$YODL2TXT" || YODL2TXT="-echo no yodl" 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 @@ -2945,56 +2939,9 @@ echo "configure:2938: checking for Guile" >&5 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 <&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 @@ -3002,7 +2949,7 @@ 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 @@ -3010,7 +2957,7 @@ else ac_cv_func_memcmp_clean=no else cat > conftest.$ac_ext <&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 @@ -3041,12 +2988,12 @@ echo "$ac_t""$ac_cv_func_memcmp_clean" 1>&6 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 <&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 @@ -3096,12 +3043,12 @@ fi 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 <&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 @@ -3154,12 +3101,12 @@ fi 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 <&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 @@ -3224,7 +3171,7 @@ do # 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 diff --git a/flower/directed-graph.cc b/flower/directed-graph.cc deleted file mode 100644 index 0c9a7cc085..0000000000 --- a/flower/directed-graph.cc +++ /dev/null @@ -1,154 +0,0 @@ -/* - edge_out.cc -- implement Directed_graph_node - - source file FlowerLib - - (c) 1997--1999 Han-Wen Nienhuys -*/ - -#include "directed-graph.hh" - -#ifdef PARANOID // these checks eat huge amounts of time. -#define PARANOID_OK() OK() -#else -#define PARANOID_OK() -#endif - - -Link_array const & -Directed_graph_node::get_in_edge_arr() const -{ - return edge_in_l_arr_; -} - -Link_array 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 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() -{ -} - diff --git a/flower/include/directed-graph.hh b/flower/include/directed-graph.hh deleted file mode 100644 index 9f6c9b3dfe..0000000000 --- a/flower/include/directed-graph.hh +++ /dev/null @@ -1,51 +0,0 @@ -/* - edge_out.hh -- declare Directed_graph_node - - source file of the GNU LilyPond music typesetter - - (c) 1997--1999 Han-Wen Nienhuys -*/ - - -#ifndef DEPENDENCY_HH -#define DEPENDENCY_HH - -#include "parray.hh" - -/** - Class to handle two-sided connections between nodes (the Dependencies) - */ -class Directed_graph_node { - Link_arrayedge_out_l_arr_; - /// targets - Link_array 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 const& get_out_edge_arr() const; - Link_array const& get_in_edge_arr() const; -}; - -#endif // DEPENDENCY_HH diff --git a/input/bugs/addlyrmus.ly b/input/bugs/addlyrmus.fly similarity index 100% rename from input/bugs/addlyrmus.ly rename to input/bugs/addlyrmus.fly diff --git a/input/bugs/core.ly b/input/bugs/core.ly deleted file mode 100644 index ef4cb12e69..0000000000 --- a/input/bugs/core.ly +++ /dev/null @@ -1,11 +0,0 @@ - -text = \lyrics \repeat "fold" 2 {} -\alternative { - foo bar - afoo abar -} - - -\score { -\text -} diff --git a/input/bugs/dots.fly b/input/bugs/dots.fly index 66f99d1de7..4372115e20 100644 --- a/input/bugs/dots.fly +++ b/input/bugs/dots.fly @@ -1,2 +1,2 @@ - +\context Voice { } diff --git a/input/bugs/hinterfleisch-gone.ly b/input/bugs/hinterfleisch-gone.ly index 2a51746a62..59fd4de8d1 100644 --- a/input/bugs/hinterfleisch-gone.ly +++ b/input/bugs/hinterfleisch-gone.ly @@ -3,7 +3,7 @@ \score { \notes \relative c'' { \time 2/4; - \property Voice.beamAuto=0 + \property Voice.noAutoBeaming=1 a4 a8 a32 a a a } diff --git a/input/bugs/l.ly b/input/bugs/l.ly new file mode 100644 index 0000000000..f042e73068 --- /dev/null +++ b/input/bugs/l.ly @@ -0,0 +1,13 @@ +\score { + \notes { + \repeat volta 5 { + c' c' c' c' + } + \alternative { + {d' d' d' d'} + {e' e' e' e'} + } + f' + } + } + diff --git a/input/bugs/swits.ly b/input/bugs/swits.ly deleted file mode 100644 index 44ee313124..0000000000 --- a/input/bugs/swits.ly +++ /dev/null @@ -1,15 +0,0 @@ -\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; - } -} -) diff --git a/input/bugs/utremi_old.ly b/input/bugs/utremi_old.ly new file mode 100644 index 0000000000..60a62403fa --- /dev/null +++ b/input/bugs/utremi_old.ly @@ -0,0 +1,262 @@ +\header { +filename = "utremi.ly"; +enteredby = "Christian Mondrup"; +%composer = "Thomas Ravenscroft"; +opus = "Thomas Ravenscroft"; +%opus = "Pammelia, 1609, no. 31"; +arranger = "Pammelia, 1609, no. 31"; +title = "Vt, re, me, fa, sol, la, sol, fa, re, vt"; +tagline = "Typeset with GNU LilyPond by Christian Mondrup. Non-commercial copying welcome."; +} + +papersize = "letter" + +\include "paper16.ly" +%\include "a4.ly" + +lyricsOne = \lyrics { + ""\breve ""8 + "Vt,"\breve re, me, fa, sol, la, "" + sol, la, fa, me, re, vt. +} + +lyricsTwo = \lyrics { + "" "" + Hey downe downe hey downe downe downe downe hey down + hey down "" down down a. + My heart of gold as true as steele + as I me leant "" vn -- to the bowres. + but if my La -- dy loue me well, + Lord so Ro -- bin bowres, +} + +lyricsThree = \lyrics { + "" "" "" "" "" "" "" "" "" "" "" "" + heaue and hoe Rum -- be -- lo, hey tro -- lo tro -- ly lo, + hey tro -- ly trol -- ly hey tro -- ly trol -- ly + hey tro -- ly trol -- ly hey trol -- "" ly trol -- ly lo. + My La -- dies gone to Can -- ter -- bu -- ry + S. Tho -- mas be her boote. + Shee met with Kate of Malms -- "" bu -- ry, + why weepst thou ma -- ple +} + +lyricsFour = \lyrics { + "" + roote: + O sleepst thou or wakst thon Ies -- se -- ry, Cooke, + the rost it burnes, turne round turne round "" a -- bout "" + turne round "" a -- bout, "" + turne round "" a -- bout, "" turne round. "" + O Fri -- er how fares thy ban -- de -- low ban -- de -- low + Fri -- er, how fares thy San -- de -- low, San -- de -- low. +} + +global = \notes { + \key c; + %\time 4/2; + %\time 17/8; + \time 33/16; + \clef "tenor"; +} + +dummyBeat = \notes { + \property Staff.defaultBarType = "||" + \property Staff.barAlways = "1" + s16 + \property Staff.barAlways = "0" + \property Staff.defaultBarType = "|" +} + +incipOne = \notes\relative c' { + g\breve + \dummyBeat + \bar ""; +} + +incipTwo = \notes\relative c'' { + \property Voice.noteHeadStyle = "diamond" + g1. + \property Voice.noteHeadStyle = "" + f2 + \dummyBeat + \bar ""; +} + +incipThree = \notes\relative c' { + \property Voice.noteHeadStyle = "harmonic" + \property Voice.tupletVisibility = 0 + \times 2/3 { d4. e8 d4 } \times 2/3 { b4. a8 g4 } + \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 } + \dummyBeat + \property Voice.tupletVisibility = 3 + \bar ""; +} + +incipFour = \notes\relative c' { + \property Voice.noteHeadStyle = "diamond" + %\property Voice.restStyle = "mensural" + b1 r1 + \dummyBeat + \bar ""; +} + +partOne = \notes\relative c' { + %\property Score.currentBarNumber = "1" + \property Voice.noteHeadStyle = "" + %\property Staff.barNumberScriptPadding = 1 + g1 ~ | g | a ~ | a | bes ~ | bes | c ~ | c | d ~ | d | e ~ | e | + r | r | + e ~ | e | d ~ | d | c ~ | c | bes ~ | bes | a ~ | a | g ~ | g + \bar "|."; +} + +partTwo = \notes\relative c'' { + \property Voice.noteHeadStyle = "" + g2. f4 | e2 d | c4. b8 a4 g | f2 e | + d g ~ | g4 a g2 | c,1 | r2 c | + g'2. a4 | b2 g | c c | c c | + b4 c d2 ~ | d4 d b g | c1 | r2 c | + g g | d2. e4 | f2 e | c1 | + g'2. g4 | g2 g | c,1 ~ | c | r | r + \bar "|."; +} + +partThree = \notes\relative c' { + \property Voice.noteHeadStyle = "" + \times 2/3 { d4. e8 d4 } \times 2/3 {b4. a8 g4 } | + \times 2/3 { b4. c8 b4 } \times 2/3 { b4. a8 g4 } + c2 c4 c | c2 c | + d2 d4 d | d2 d | e2. f4 | e2 d4 c | + b2 g ~ | g4 f e d | c1 | r2 c | + g'2. g4 | g2 g | c,2. c4 | c c c'2 | + bes g | bes bes | a1 | r2 e' | + d d | g g | a2. g4 | fis e d2 | + g g | d2. c4 + \bar "|."; +} + +partFour = \notes\relative c' { + \property Voice.noteHeadStyle = "" + b1^\fermata | r2 g' | e e4 e | a2. g4 | + fis2 e4 d | g1 | g2 g | g g | + g g | g g ~ | g4 f e d | c2 d ~ | + d4 c b a | g2 g' ~ | g4 f e d | c2 g' ~ | + g r | \times 2/3 { r1 d2 } \times 2/3 { a'2 a g } | + \times 2/3 { e1 f2 } \times 2/3 { g2. g4 g2 } + \times 2/3 { d2. d4 e2 } \times 2/3 { f2. f4 e2 } + \times 2/3 { d1 c2 } \times 2/3 { b2. a4 g2 } + \times 2/3 { d'2. d4 d2 } + \bar "|."; +} + +partOneStaff = < + \context Staff = vocal1 < + \property Staff.clefStyle = "fullSizeChanges" + \property Staff.instrument = "\large{1.}" + %\property Staff.instr = "" + \notes { + \global + \property Staff.timeSignatureStyle = "old4/4" + \incipOne + \clef "G_8"; + \property Staff.timeSignatureStyle = "C2/2" + \time 4/4; + \partOne + } + {\context Lyrics = lyrOne \lyricsOne } + > +> + +partTwoStaff = < + \context Staff = vocal2 < + \property Staff.clefStyle = "fullSizeChanges" + \property Staff.instrument = "\large{2.}" + %\property Staff.instr = "" + %\property Voice.automaticMelismata = "1" + \addlyrics + \notes { + \global + \property Staff.timeSignatureStyle = "old4/4" + \incipTwo + \clef "G_8"; + \property Staff.timeSignatureStyle = "C2/2" + \time 4/4; + \partTwo + } + {\context Lyrics = lyrTwo \lyricsTwo } + > +> + + +partThreeStaff = < + \context Staff = vocal3 < + \property Staff.clefStyle = "fullSizeChanges" + \property Staff.instrument = "\large{3.}" + %\property Staff.instr = "" + %\property Voice.automaticMelismata = "1" + \addlyrics + \notes { + \context Voice = vthree + \property Voice.tupletDirection = \up + \global + \property Staff.timeSignatureStyle = "old4/4" + \incipThree + \clef "G_8"; + \property Staff.timeSignatureStyle = "C2/2" + \time 4/4; + \partThree + } + {\context Lyrics = lyrThree \lyricsThree } + > +> + +partFourStaff = < + \context Staff = vocal4 < + \property Staff.clefStyle = "fullSizeChanges" + \property Staff.timeSignatureStyle = "C2/2" + \property Staff.barNumberDirection = \up + \property Staff.instrument = "\large{4.}" + \property Staff.instr = "" + %\property Voice.automaticMelismata = "1" + \addlyrics + \notes { + \context Voice = vfour + \property Voice.tupletDirection = \up + \global + %\property Staff.instrument = "\large{4.}" + %\property Staff.instr = "" + \property Staff.timeSignatureStyle = "old4/4" + \incipFour + \clef "G_8"; + \property Staff.timeSignatureStyle = "C2/2" + \time 4/4; + \partFour + } + {\context Lyrics = lyrFour \lyricsFour} + > +> + +\score { + \context StaffGroup < + \partFourStaff + \partThreeStaff + \partTwoStaff + \partOneStaff + > + %\paper {\translator {\BarNumberingStaffContext } } + \paper { + indent = 0.\mm; + linewidth = 17.0\cm; + textheight = 27.0\cm; + gourlay_maxmeasures=6.0; + \translator { \StaffContext + \consists "Staff_margin_engraver"; } + %\translator { \ScoreContext + % minVerticalAlign = 1.5*\staffheight; } + } + %\midi { + % output = "utremi.mid"; + % \tempo 2 = 80; + %} +} diff --git a/input/test/repeat-semifold.ly b/input/test/repeat-semifold.ly index 346c5c8a56..d05959555b 100644 --- a/input/test/repeat-semifold.ly +++ b/input/test/repeat-semifold.ly @@ -2,11 +2,11 @@ % 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 } }} diff --git a/lily/crescendo.cc b/lily/crescendo.cc index 2401502c9c..8257150872 100644 --- a/lily/crescendo.cc +++ b/lily/crescendo.cc @@ -26,7 +26,7 @@ Crescendo::Crescendo () 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]) { @@ -63,7 +63,8 @@ Crescendo::do_brew_molecule_p () const { 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; diff --git a/lily/include/score-element.hh b/lily/include/score-element.hh index 723cf5a283..3494e6b11d 100644 --- a/lily/include/score-element.hh +++ b/lily/include/score-element.hh @@ -9,7 +9,6 @@ #include "parray.hh" #include "virtual-methods.hh" -#include "directed-graph.hh" #include "graphical-element.hh" #include "lily-guile.hh" diff --git a/lily/include/spanner.hh b/lily/include/spanner.hh index 828391d70b..9cca78c8c4 100644 --- a/lily/include/spanner.hh +++ b/lily/include/spanner.hh @@ -68,6 +68,7 @@ protected: 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 diff --git a/lily/multi-measure-rest.cc b/lily/multi-measure-rest.cc index 214aab5098..dc6d8d547a 100644 --- a/lily/multi-measure-rest.cc +++ b/lily/multi-measure-rest.cc @@ -50,7 +50,8 @@ Multi_measure_rest::do_brew_molecule_p () const { 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] ; } diff --git a/lily/note-heads-engraver.cc b/lily/note-heads-engraver.cc index c725690a4a..5243ff56cd 100644 --- a/lily/note-heads-engraver.cc +++ b/lily/note-heads-engraver.cc @@ -54,6 +54,7 @@ Note_heads_engraver::do_process_requests() { 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()) diff --git a/lily/paper-stream.cc b/lily/paper-stream.cc index 0102377824..401b120842 100644 --- a/lily/paper-stream.cc +++ b/lily/paper-stream.cc @@ -19,7 +19,7 @@ Paper_stream::Paper_stream (String filename) 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)); @@ -46,56 +46,57 @@ Paper_stream::operator << (Scalar s) { 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; @@ -105,8 +106,7 @@ Paper_stream::operator << (Scalar s) void Paper_stream::break_line () { - // aaargh - *os << "%\n"; + *os << '\n'; *os << to_str (' ', nest_level); line_len_i_ = 0; } diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index 57b1b2bf88..3b6da8cf4e 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -104,7 +104,8 @@ Repeated_music::alternatives_length_mom () const { 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; diff --git a/lily/rest-engraver.cc b/lily/rest-engraver.cc index aef1e884bb..d3436d462b 100644 --- a/lily/rest-engraver.cc +++ b/lily/rest-engraver.cc @@ -53,6 +53,7 @@ Rest_engraver::do_process_requests () { 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) diff --git a/lily/slur.cc b/lily/slur.cc index 2838bcce96..8585589bd9 100644 --- a/lily/slur.cc +++ b/lily/slur.cc @@ -27,7 +27,6 @@ #include "encompass-info.hh" #include "main.hh" - Slur::Slur () { } @@ -186,11 +185,7 @@ Slur::do_post_processing () */ 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 diff --git a/lily/spacing-spanner.cc b/lily/spacing-spanner.cc index df73a595a4..64ebe46a6b 100644 --- a/lily/spacing-spanner.cc +++ b/lily/spacing-spanner.cc @@ -165,6 +165,9 @@ Spacing_spanner::do_measure (int col1, int col2) const else stretch_dist += right_dist; + if (s.distance_f_ <0) + programming_error("negative dist"); + if (stretch_dist == 0.0) { /* diff --git a/lily/spanner.cc b/lily/spanner.cc index 843a020b36..ca2f5d5618 100644 --- a/lily/spanner.cc +++ b/lily/spanner.cc @@ -12,6 +12,8 @@ #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 @@ -33,7 +35,7 @@ Spanner::break_into_pieces () Item * left = spanned_drul_[LEFT]; Item * right = spanned_drul_[RIGHT]; - + if (left == right) { warning (_ ("left spanpoint is right spanpoint\n")); @@ -70,7 +72,7 @@ Spanner::break_into_pieces () 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(); @@ -223,3 +225,31 @@ Spanner::handle_broken_dependents () 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 (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; +} diff --git a/lily/staff-side.cc b/lily/staff-side.cc index a74e1c8bf3..b0cefd1e1b 100644 --- a/lily/staff-side.cc +++ b/lily/staff-side.cc @@ -158,7 +158,7 @@ Staff_side_element::do_print () const DOUT << "positioning " << to_position_l_->name(); DOUT << "axis == " << axis_name_str (axis_) - << ", dir == " << to_str (dir_ ); + << ", dir == " << to_str ((int)dir_ ); #endif } diff --git a/lily/tie.cc b/lily/tie.cc index 7b682914c3..eeaf89fa98 100644 --- a/lily/tie.cc +++ b/lily/tie.cc @@ -130,7 +130,7 @@ Tie::do_post_processing() 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; diff --git a/lily/volta-spanner.cc b/lily/volta-spanner.cc index bcc2424106..a227d07d7c 100644 --- a/lily/volta-spanner.cc +++ b/lily/volta-spanner.cc @@ -48,7 +48,7 @@ Volta_spanner::do_brew_molecule_p () const 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)); @@ -98,6 +98,7 @@ Volta_spanner::do_post_processing () { 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 diff --git a/make/mudela-rules.make b/make/mudela-rules.make index c2e1b202e5..b6c04a5e48 100644 --- a/make/mudela-rules.make +++ b/make/mudela-rules.make @@ -11,14 +11,3 @@ $(outdir)/%.latex: %.doc $(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 ../$< diff --git a/make/mudela-targets.make b/make/mudela-targets.make index 8b13789179..e032d7ee59 100644 --- a/make/mudela-targets.make +++ b/make/mudela-targets.make @@ -1 +1,2 @@ +# empty diff --git a/make/mudela-vars.make b/make/mudela-vars.make index 8b13789179..024d2ab564 100644 --- a/make/mudela-vars.make +++ b/make/mudela-vars.make @@ -1 +1,4 @@ +# empty +TELY_FILES := $(wildcard *.tely) +EXTRA_DIST_FILES += $(TELY_FILES) diff --git a/make/out/lilypond.lsm b/make/out/lilypond.lsm index 41b3a82f16..3e7c78c8ec 100644 --- a/make/out/lilypond.lsm +++ b/make/out/lilypond.lsm @@ -1,7 +1,7 @@ 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 @@ -12,8 +12,8 @@ Author: hanwen@cs.uu.nl (Han-Wen Nienhuys) 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 diff --git a/make/out/lilypond.spec b/make/out/lilypond.spec index cd3d275e54..88f90ecdae 100644 --- a/make/out/lilypond.spec +++ b/make/out/lilypond.spec @@ -1,9 +1,9 @@ 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 diff --git a/ps/lily.ps b/ps/lily.ps index f2d5c1a058..b25deb22b2 100644 --- a/ps/lily.ps +++ b/ps/lily.ps @@ -1,5 +1,5 @@ %!PS-Adobe-1.0: lily.ps - +% % 2 setlanguagelevel % hmm. auto_resize_dicts doesn't help either. % round cappings 1 setlinecap diff --git a/scm/lily.scm b/scm/lily.scm index ecfda6b42d..cba847f06b 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -233,9 +233,12 @@ (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 diff --git a/scripts/mudela-book.py b/scripts/mudela-book.py index 8021e51818..e679cae1d8 100644 --- a/scripts/mudela-book.py +++ b/scripts/mudela-book.py @@ -69,7 +69,7 @@ output_dict= { } > \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}""", @@ -135,7 +135,7 @@ re_dict = { 'mudela-file': '@mudelafile(\[[^\\]]+\])?{([^}]+)}', 'mudela' : '@mudela(\[.*?\])?{(.*?)}', 'mudela-block': r"""(?s)@mudela(\[.*?\])?(.*?)@end mudela""", - 'interesting-cs': r"""[\\@](node|mudelagraphic)""", + 'interesting-cs': r"""[\\@](chapter|section)""", 'comma-sep' : ', *', } } @@ -223,27 +223,32 @@ def compose_full_body (body, opts): # 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" @@ -420,7 +425,8 @@ def find_mudela_shorthands (b): 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 = [] @@ -432,8 +438,6 @@ def find_mudela_shorthands (b): 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) @@ -444,7 +448,7 @@ def find_mudela_shorthands (b): 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 = [] @@ -499,7 +503,7 @@ def advance_counters (counter, opts, str): 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) diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4 index 66401aa09a..c71271fe54 100644 --- a/stepmake/aclocal.m4 +++ b/stepmake/aclocal.m4 @@ -150,7 +150,7 @@ AC_DEFUN(AC_STEPMAKE_GXX, [ # 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 @@ -161,19 +161,9 @@ AC_DEFUN(AC_STEPMAKE_GXX, [ ]) 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 ]) diff --git a/stepmake/bin/add-html-footer.py b/stepmake/bin/add-html-footer.py index 9c4126e0a1..9ffa512c33 100644 --- a/stepmake/bin/add-html-footer.py +++ b/stepmake/bin/add-html-footer.py @@ -10,7 +10,7 @@ version = '0.1' import sys import os import time -from string import * +import string import getopt import __main__ @@ -29,13 +29,17 @@ This page was built from %s-%s by\ (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: @@ -93,8 +97,8 @@ if news_file: 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: @@ -130,16 +134,6 @@ for f in files: s = '\n' + s s = check_tag ('', '', s, 1) - #urg - if regex.search ('@COUNTER_REF@', s) != -1: - counter = '' - try: - counter = os.environ[package.NAME + '_COUNTERPATH'] - counter = '
\n' - except: - pass - s = regsub.gsub ('@COUNTER_REF@', counter, s) - dump_file (f, s) diff --git a/stepmake/bin/ls-latex.py b/stepmake/bin/ls-latex.py index 92c0d1644a..98eb250d51 100644 --- a/stepmake/bin/ls-latex.py +++ b/stepmake/bin/ls-latex.py @@ -7,7 +7,11 @@ version = '0.1' import sys import os -from string import * +import string + +def gulp_file (fn): + f = open (fn) + return f.read () import __main__ import glob diff --git a/stepmake/bin/package-diff.py b/stepmake/bin/package-diff.py index 2645a6fd53..4919c80f03 100644 --- a/stepmake/bin/package-diff.py +++ b/stepmake/bin/package-diff.py @@ -5,10 +5,14 @@ version = '0.62' 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; @@ -159,7 +163,7 @@ def makediff (fromdir, todir, patch_name): 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=']) diff --git a/stepmake/bin/packagepython.py b/stepmake/bin/packagepython.py index a1b8bab546..1950f56935 100755 --- a/stepmake/bin/packagepython.py +++ b/stepmake/bin/packagepython.py @@ -9,8 +9,8 @@ import regex import regsub -from string import * -# from flower import * +import string + import sys import os import getopt @@ -37,7 +37,7 @@ class Package: 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 + '/..' @@ -46,12 +46,12 @@ class Package: 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: @@ -79,7 +79,7 @@ def full_version_tup(tup): 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): @@ -120,12 +120,12 @@ def version_tuple_to_str(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) @@ -134,9 +134,9 @@ def version_compare (tupl, tupr): 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) @@ -161,18 +161,3 @@ def dump_file(f, s): 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 - - diff --git a/stepmake/bin/table-to-html.py b/stepmake/bin/table-to-html.py index 437116fbcc..6cfc2f1c2d 100644 --- a/stepmake/bin/table-to-html.py +++ b/stepmake/bin/table-to-html.py @@ -11,124 +11,139 @@ name = 'table-to-html' 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 ('') + html.write ('
') def footer (html): - html.write ('
') - -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 = '' + join (columns, '') + '' - 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 ('') + +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 = '' + string.join (columns, '') + '' + 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) diff --git a/stepmake/bin/texi2man.sh b/stepmake/bin/texi2man.sh deleted file mode 100644 index 58144a0c6a..0000000000 --- a/stepmake/bin/texi2man.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/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 - diff --git a/stepmake/stepmake/texinfo-rules.make b/stepmake/stepmake/texinfo-rules.make index 3177c3bd83..ce726fe8c1 100644 --- a/stepmake/stepmake/texinfo-rules.make +++ b/stepmake/stepmake/texinfo-rules.make @@ -1,35 +1,22 @@ # 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 $< $@ diff --git a/stepmake/stepmake/texinfo-targets.make b/stepmake/stepmake/texinfo-targets.make new file mode 100644 index 0000000000..1bb8bf6d7f --- /dev/null +++ b/stepmake/stepmake/texinfo-targets.make @@ -0,0 +1 @@ +# empty diff --git a/stepmake/stepmake/texinfo-vars.make b/stepmake/stepmake/texinfo-vars.make new file mode 100644 index 0000000000..3a7e7ae04c --- /dev/null +++ b/stepmake/stepmake/texinfo-vars.make @@ -0,0 +1,4 @@ + +TEXI_FILES = $(wildcard *.texi) + +EXTRA_DIST_FILES += $(TEXI_FILES) diff --git a/tex/lily-ps-defs.tex b/tex/lily-ps-defs.tex index cb353c583b..da9907c536 100644 --- a/tex/lily-ps-defs.tex +++ b/tex/lily-ps-defs.tex @@ -15,37 +15,6 @@ % 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 - \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 @@ -53,7 +22,6 @@ \special{ps: @beginspecial @setspecial ##1 @endspecial} } % - \special{! /stafflinethickness \mudelapaperstaffline\space def /interline \mudelapaperinterline\space def -- 2.39.5