From: fred Date: Tue, 26 Mar 2002 22:41:12 +0000 (+0000) Subject: lilypond-1.2.5 X-Git-Tag: release/1.5.59~2062 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=397f485ef8d75f1a47d58e44f997cbdda9dac4f4;p=lilypond.git lilypond-1.2.5 --- 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/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/lilypond-regtest.doc b/Documentation/tex/lilypond-regtest.doc deleted file mode 100644 index 79ad4b8331..0000000000 --- a/Documentation/tex/lilypond-regtest.doc +++ /dev/null @@ -1,294 +0,0 @@ -% -*-LaTeX-*- vim:tw=72 -\documentclass{article} - -\title{LilyPond feature test} -\author{Han-Wen Nienhuys} -\begin{document} -\maketitle - -This document tries give an brief overview of LilyPond features. When -the text correspond with the shown notation, we consider LilyPond -Officially BugFree (tm). This document is intended for finding bugs, -and documenting bugfixes. - -\section{Notes and rests} - -Rests. Note that the dot of 8th, 16th and 32nd rests rest should be -next to the top of the rest. All rests except the whole rest are -centered on the middle staff line. - -\mudelafile{rest.fly} - -Note head shapes are settable. The stem endings should be adjusted -per note head. If you want different note head styles on one stem, -you must create a special context called Thread. - -\mudelafile{noteheadstyle.ly} - -Noteheads can have dots, and ---although this is bad style in duple -meters--- rests can too. Augmentation dots should never be printed on -a staff line, but rather be shifted vertically. They should go up, but -in case of multiple parts, the down stems have down shifted dots. -(Wanske p. 186) In case of chords, all dots should be in a column. -The dots go along as rests are shifted to avoid collisions. - -\mudelafile{dots.fly} - -Multiple measure rests do not collide with barlines and clefs. They -are not expanded when you set \verb+Score.SkipBars+. Although the -multi-measure-rest is a Spanner, minimum distances are set to keep it -colliding from barlines. - -\mudelafile{multi-measure-rest.ly} - -\section{Stems} - -Stem tremolos (official naming?) or rolls are tremolo signs that look -like beam segments crossing stems. If the stem is in a beam, the -tremolo must be parallel to the beam. If the stem is invisible -(eg. on a whole note), the tremolo must be centered on the note. - -\mudelafile{stem-tremolo.ly} - -Chord tremolos look like beams, but are a kind of repeat symbol. -To avoid confusion, chord tremolo beams do not reach the stems, but -leave a gap. Chord tremolo beams on half notes are not ambiguous, -as half notes cannot appear in a regular beam, and should reach the -stems. - -\mudelafile{chord-tremolo.sly} - -Beams, stems and noteheads often have communication troubles, since -the two systems for y dimensions (1 unit = staffspace, 1 unit = 1 -point) are mixed. - -Stems, beams, ties and slurs should behave similarly, when placed -on the middle staff line. Of course stem-direction is down for high -notes, and up for low notes. - -\mudelafile{stem-direction.sly} - -Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+. - -\mudelafile{stem-direction-down.ly} - -\section{Scripts} - -The staccato dot (and all scripts with follow-into-staff set), must -not be on staff lines. - -\mudelafile{staccato-pos.sly} - -\section{Grace notes} - -Grace notes are typeset as an encapsulated piece of music. You can -have beams, notes, chords, stems etc. within a \verb|\grace| section. -Slurs that start within a grace section, but aren't ended are attached -to the next normal note. Grace notes have zero duration. If there -are tuplets, the grace notes won't be under the brace. Grace notes -can have accidentals, but they are (currently) spaced at a fixed -distance. Grace notes (of course) come before the accidentals of the -main note. Grace notes can also be positioned after the main note. - -\mudelafile{grace.ly} - - -\section{Beams, slurs and other spanners} - -Beaming is generated automatically. Beams may cross bar lines. In that -case, line breaks are forbidden. Yet clef and key signatures are -hidden just as with breakable bar lines. - -\mudelafile{beaming.ly} - -Beams should behave reasonably well, even under extreme circumstances. -Stems may be short, but noteheads should never touch the beam. - -\mudelafile{beam-extreme.ly} - -Beams should always reach the middle staff line, the second beam -counting from the note head side, should never be lower than the -second staff line. This does not hold for grace note beams. - -\mudelafile{beam-position.sly} - -Slurs should look nice and symmetric. The curvature may increase -only to avoid noteheads, and as little as possible. - -\mudelafile{slur-symmetry.ly} -\mudelafile{slur-symmetry-1.ly} - -Ties are strictly horizontal. They are placed in between note heads. -The horizontal middle should not overlap with a staffline. - -\mudelafile{tie.ly} - -Beams can be typeset over fixed distance aligned staffs, beam -beautification doesn't really work, but knees do. Beams should be -behave well, wherever the switching point is. - -\mudelafile{beam-interstaff.ly} - -The same goes for slurs. They behave decently when broken across -linebreak. - -\mudelafile{slur-interstaff.ly} - -Tuplets are indicated by a bracket with a number. There should be no -bracket if there is one beam that matches the length of the tuplet. -The bracket does not interfere with the stafflines, and the number is -centered in the gap in the bracket. - -\mudelafile{tup.ly} - -\section{Repeats} - -LilyPond has three modes for repeats: folded, unfolded and -semi-unfolded. Unfolded repeats are fully written out. Semi unfolded -repeats have the body written and all alternatives sequentially. -Folded repeats have the body written and all alternatives -simultaneously. If the number of alternatives is larger than the -repeat count, the excess alternatives are ignored. If the number of -alternatives is smaller, the first alternative is multiplied to get to -the number of repeats. - -Unfolded behavior: - -\mudelafile{repeat-unfold.ly} - -Semi (un)folded behavior. Voltas can start on non-barline moments. -If they don't barlines should still be shown. - -\mudelafile{repeat-semifold.ly} - -Folded. This doesn't make sense without alternatives, but it works. - -\mudelafile{repeat-fold.ly} - -\section{Lyrics} - -Lyrics can be set to a melody automatically. Excess lyrics will be -dumped. Lyrics will not be set over rests. You can have melismata -either by setting a property melismaBusy, or by setting -automaticMelismas (which will set melismas during slurs and ties). If -you want a different order than first Music, then Lyrics, you must -precook a chord of staffs/lyrics and label those. Of course -\verb+\rhythm+ ignores any other rhythms in the piece. Hyphens and -extenders do not assume anything about lyric lengths, so they continue -to work. - -\mudelafile{lyric-combine.ly} - -\section{Multiple notes} - -Rests should not collide with beams, stems and noteheads. Rests may -be under beams. Rests should be move by integral number of spaces -inside the staff, and by half spaces outside. Notice that the half -and whole rests just outside the staff get ledger lines in different -cases. - -\mudelafile{rest-collision.ly} - -Normal collisions. We have support for polyphony, where the -middle voices are horizontally shifted. - -\mudelafile{collisions.ly} - -The number of stafflines of a staff can be set with the property -numberOfStaffLines. Ledger lines both on note heads and rests are -adjusted. Barlines also are adjusted. - - -\mudelafile{number-staff-lines.fly} - -\section{Spacing} - -In a limited number of cases, LilyPond corrects for optical spacing -effects. In this example, space for opposite pointed stems is adjusted - -\mudelafile{stem-spacing.sly} - -If there are accidentals in the music, we add space, but the space -between note and accidentals is less than between the notes with the -same value. Clef changes also get extra space, but not as much as -barlines. - - -Even if a line is very tightly spaced, there will still be room -between prefatory matter and the following notes. The space after the -prefatory is very rigid. In contrast, the space before the barline -must stretch like the space within the measure. - -Tight: - -\mudelafile{spacing-tight.ly} - -Natural: - -\mudelafile{spacing-natural.ly} - -Loose: - -\mudelafile{spacing-loose.ly} - - -\section{Global stuff} - -Markings that are attached to (invisible) barlines are -delicate: the are attached to the rest of the score without the score -knowing it. Consequently, they fall over often. - -\mudelafile{bar-scripts.ly} - -Staff margins are also markings attached to barlines. They should be -left of the staff, and be centered vertically wrt the staff. They may -be on normal staffs, but also on compound staffs, like the PianoStaff - -\mudelafile{staff-margin.ly} - -Breathing signs, also used for phrasing, do normally not influence -global spacing -- only if space gets tight, notes are shifted to make -room for the breathing sign. Breathing signs break beams running -through their voice. In the following example, the notes in the first -two measures all have the same distance from each other: - -\mudelafile{breathing-sign.ly} - -Fonts are available in a default set of sizes: 11, 13, 16, 20, 23 and -26pt staffheight. Sizes of the text fonts and symbol fonts are made -to match the staff dimensions. - -\mudelafile[nofly]{size11.ly} - -\mudelafile[nofly]{size13.ly} - -\mudelafile[nofly]{size16.ly} - -\mudelafile[nofly]{size20.ly} - -\mudelafile[nofly]{size23.ly} - -\mudelafile[nofly]{size26.ly} - - -\section{Clefs and Time Signatures} - -The transparent clef should not occupy any space and with style -\texttt{fullSizeChanges}, the changing clef should be typeset in full -size. For octaviated clefs, the ``8'' should appear closely above or -below the clef respectively. The ``8'' is processed in a convoluted -way, so this is fragile as well. - -\mudelafile{clefs.ly} - -\def\bla#1{%the input file is too long and does not test for specific bugs -By default, time signatures are written with two numbers. With style -``C'', 4/4 and 2/2 are written with their corresponding symbols and -with style ``old'', 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and -9/8 are typeset with symbols, all other signatures retain the default -layout. The style ``1'', gives single number signatures for all -signatures. -% -\mu delafile{time.fly} -} -\end{document} 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/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.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/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.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.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.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/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.ly deleted file mode 100644 index 32b095b864..0000000000 --- a/input/bugs/addlyrmus.ly +++ /dev/null @@ -1,4 +0,0 @@ - -\context Voice \addlyrics - { s8 s16 s32 s64 } - { [c16 c c c] } 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/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/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 -