musiktheorietheorie/musixtex/tex/musixtex.tex
Josia Pietsch 200080fe9d Tag 6
2022-03-27 12:09:14 +02:00

5916 lines
192 KiB
TeX

%
% This file is part of MusiXTeX
%
% MusiXTeX is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2, or (at your option)
% any later version.
%
% MusiXTeX is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with MusiXTeX; see the file COPYING. If not, write to
% the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
% Boston, MA 02111-1307, USA.
%
%
\ifx\undefined\startpiece \else \endinput \fi
\edef\catcodeat{\the\catcode`\@}\catcode`\@=11
\ifx\makeatletter\undefined\def\makeatletter{\catcode`\@=11\relax}\fi
\ifx\makeatother\undefined\def\makeatother{\catcode`\@=12\relax}\fi
\def\mufl@x{0.83}%
\def\mxmajorvernumber{1}
\def\mxminorvernumber{34}
\def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum
\def\mxversuffix{}%
\edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix}
\def\mxdate{2021-07-24}
\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}%
\everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}%
% version 1.34
%
% redefine \tabfnt... commands to allow re-definition in musixftab.tex
% decrement the number of slashes if tabstylespace is true
%
% version 1.33a
%
% improved implementations of the tablature commands:
% + 4-7 slashes are replaced by numbers 4-7
% + notehead-less stems are replaced by tiny notes (without ledger lines)
% version 1.33
%
% \tabfnt etc. now uses (Helvetica) bold
% replace ledger lines by slashes (/) for tablature notes below the staff
% new commands \tzqu, \tzcup, etc. for stems without noteheads, for use in tablature
% version 1.32
% commented out spurious \let\doublebar\doublebar@II
% forbid line-breaking at \zdoublebar
% version 1.31
%
% defined \zzdoublebar, \zzbar, \zendpiece
% version 1.30
%
% defined \zdoublebar for use within a bar
% defined \hbp and \hbpp
% version 1.29
%
% defined \tabfnt, \tabcleffnt, \tabstringfnt, \tab etc. to support tablature
% version 1.28
%
% defined
% \z[left|right|leftright]repeat, for use *within* a bar
% \zz...repeat, to force to the end of a system
% corrected definition of \C@Inter for \nblines < 4
% version 1.27
%
% introduced \meterN
% eliminated \ds@oup
% introduced \nqqb \nqqh \nqqqb \nqqqh abbreviations and
% synonyms \nqql \nqqu \nqqql \nqqqu
% introduced \hap, \happ analogous to \qap, \qapp
% introduced \hbsk analogous to \hsk
% introduced \bqsk, \bhsk, \btsk analogous to \qsk, \hqsk, \tqsk
% introduced \xxtuplet
% version 1.26
%
% deleted spurious definition in \resetlayout and
% spurious space in definition of \interfacteur...
% version 1.25
%
% included a "dummy" tuplet.tex in the distribution
% added \ignorespaces in musixltx.tex
% defined \qap, \qapp, \tqsk
% version 1.24
%
% preserve changes to \transpose in an hboxed tremolo command
% test that musixtex.tex has already been loaded in some extensions:
% musixps, musixec, musixhv, musixplt, musixtmr, musixppff
% changed from \it to \ppff in several places
% support new command \setinterstaff{n}{m}
% define \largenotesize, \Largenotesize
% correct typos \twtybf[g] \svtbf[g]
% version 1.23
%
% added \xtr and \ptr ornaments
% adjusted spacing of \tr
% corrected definition of \C@Inter for \nblines > 6
% version 1.22
%
% bi and sc font definitions added; sl and tt definitions for musixsty moved
% explicit font choices for \txtfont replaced by generic commands \smalltype\it etc.
% \pdlud \halfwidthbigwedge and \raise-height font-dependent
% \cbreath and \zbreath use \BIGtype rather than \BIGfont
% version 1.21
%
% RDT adjusted the offsets and/or vertical positions for some tremolos
% RDT moved \lastbarpos\lin@pos after calls to \Writ@meters
% to correct \centerbar positioning
% RDT copied the definition of \Hpause from musixlit.tex
% RDT introduced \Changeclefs, \cHpause and \centerHpause
% RDT replaced \smalltype\it by \txtfont in octave clef commands
% RDT moved definitions of \txtfont into \comput@fonts
% RDT added support for piano-pedal bracket notation
% version 1.20
%
% RDT re-defined tremolo commands to allow for numerical pitches;
% use of \raise and \hbox suggested by Jean-Pierre Colon
% version 1.19:
%
% RDT corrected typos in the definition of \comput@fonts
% affecting ppff fonts for \Largemusicsize
% RDT introduced definitions for tremolo commands \trml, \trmu, etc.
% RDT turned off lyrics for \metron and \metronequiv notes
% version 1.18:
%
% RDT added definitions of \raggedstoppiece and \slide from musixext.tex
% RDT increased the length of beam stems (adapted from J.-P. Coulon)
% version 1.17:
%
% RDT re-defined \txtfont for non-normal staff sizes
% RDT defined \tinyppff and \ppfftwelve, and re-defined \ppff to be staffsize dependent
% RDT introduced \tqqb \tqqh \tqqqb \tqqqh abbreviations
% and synonyms \tqql \tqqu \tqqql \tqqqu
% RDT introduced ornaments \tr, \trt
% RDT re-defined \triolet to be consistent with musixdoc (prints \txt, not nec. 3)
% RDT introduced \cpause etc. and corrected definitions of \centerpause etc.
% RDT introduced double-dotted rests \qppp, \dspp, \qspp, etc.
% version 1.16:
%
% RDT corrected the definitions of \nnotes and \nnnotes
% HM corrected the definitions for cautionary small accidentals
% RDT added \check@staff ... \fi to \@qa h, \@mca, \hs, \qqs
% so that \qa, \ca, \ha, etc. can be "hidden" using \setstaffs{n}{0}
% RDT incorporated tuplet.tex (approved by George Sicherman)
% and introduced \txtfont to allow changing size or style
% RDT introduced
% \qqsk, a one-quarter notehead skip
% \tqu and \tql, synonyms for \tqh and \tqb
% \ztqu and \ztql, synonyms for \ztqh and \ztqb
% \hpp, \qpp, \dsp, \qsp, \hsp, \qqsp for pointed rests
% \nnotes, \nnnotes: 1.6 and 1.28 \elemskip spacing
% \zcn, \ccn, \lcn, synomyms for \zcharnote etc.
% RDT incorporated curly.tex (approved by Mthimkhulu Molekwa)
% RDT modernized the treatment of text fonts
% meterfonts must be bf, even if titling fonts are rm or sc
% added dynamic-mark macros \sfz \sfzp
% version 1.15:
%
% moved out:
% - 1/128th beams -> musixbm
% - triple pointed notes -> musixtri
% and shrinked the memory consumption
%++ickd 19Sep1997: with help of William P. Houser introduced dotted slurs.
% Changes marked with +ickd for added single lines, -ickd for replaced
%++ickd single lines, ++ickd...++ickd for added blocks
%++simick 04Dec2000: Don Simons and Werner Icking made some improvements
% to volta-processing and centerbar processing the changes are
% marked with +simick for added single lines, -simick for
%++simick replaced lines and ++simick...++simick for added blocks
% Hiroaki, May2010, T.115: change register allocation codes into new ones
% which enables >12 elements. Search the string "version 1.15" for details.
%
% TeXperts may want to change the next
% PARAMETER DIFFERENT THAN PLAIN
\showboxdepth=0
\showboxbreadth=0
\ifx\undefined\documentstyle % -> []plain.tex
\parindent0pt
\hoffset-15.4mm
\voffset-10mm
\hsize190mm
\vsize260mm
\fi
%%% from LaTeX
% The following definitions save token space. E.g., using \@height
% instead of height saves 5 tokens at the cost in time of one macro
% expansion.
\def\@height{height}
\def\@depth{depth}
\def\@width{width}
%%% also removed 'by', '='
\def\@to{to}
\def\p@ne{.1}
\def\qu@rt{.25}
\def\h@lf{.5}
\def\p@seven{.7}
%%%from plain
% To make the macros more efficient in time and space,
% several constant values are declared here as control sequences
% If they were changed, anything could happen; so they are private symbols
%\chardef\active=13
%\chardef\&=`\& -> 38
%\chardef\#=`\# -> 35
%\chardef\$=`\$ -> 36
% Nomenclature: '@' means most times 'e' or seperator, sometimes 'o','a'
\chardef\f@ur=4
\chardef\fiv@=5
\chardef\si@=6
\chardef\s@v@n=7
\chardef\@ight=8
\chardef\nin@=9
\chardef\t@n=10
\chardef\@l@v@n=11
\chardef\tw@lv@=12
\chardef\fourt@@n=14
\chardef\fiv@t@@n=15
\chardef\tw@nty=20
\chardef\@xxiii=23
\chardef\@xxv=25
\chardef\@xxiv=24
\chardef\@xxvi=26
\chardef\@xxvii=27
\chardef\@xxix=29
\chardef\@xxxii=32
\chardef\@xl=40
\chardef\@xli=41
\chardef\@xlv=45
\chardef\@l=50
\chardef\@lii=52
\chardef\@liv=54
\chardef\@lxxxiii=83
\chardef\@c=100
\chardef\@cxv=115
\chardef\@cxxviii=128
\newif\ifcatcodesmusic
\def\catcodesmusic{\ifcatcodesmusic\relax
\else
\edef\catcode@gt{\the\catcode`\>}\catcode`\>\tw@lv@
\edef\catcode@lt{\the\catcode`\<}\catcode`\<\tw@lv@
\edef\catcode@vert{\the\catcode`\|}\catcode`\|\active
\edef\catcode@and{\the\catcode`\&}\catcode`\&\active
\edef\catcode@excl{\the\catcode`\!}\catcode`\!\tw@lv@
\edef\catcode@star{\the\catcode`\*}\catcode`\*\tw@lv@
\edef\catcode@pt{\the\catcode`\.}\catcode`\.\tw@lv@
\edef\catcode@sc{\the\catcode`\:}\catcode`\:\tw@lv@
\let\@@bar\bar
\def\bar{\barre}%
\fi\catcodesmusictrue}
\catcodesmusic
% MusicTeX + MuFlex -> MusiXTeX
\def\musixtex{MusiX\TeX}
\def\kernm{\kern-}
%...\let\@wloG=\wlog
%...\def\wlog#1{}
%%% account registers
% \let\maxinstruments\si@ % [version 1.15] here disabled to avoid conflict
% temporary registers
\newcount\n@i
\newcount\n@ii
\newcount\n@iii
\newcount\n@iv
\newcount\n@v
\newcount\n@vi
\newcount\n@vii
\newcount\n@viii
\newcount\count@
\newbox\toks@box
\newbox\w@rkbox
\newbox\n@otebox
\newdimen\y@
\newdimen\y@i
\newdimen\y@ii
\newdimen\y@iii
\newdimen\y@iv
\newdimen\y@v
% [version 1.15] moved out to the new register allocation code -- start from here --
% altitude
% \newskip\k@ii
% InterNote
% \newdimen\i@ni
\def\i@n{\z@} % safety in case of....
% positions x et z de debut des poutres
% \newdimen\b@xi \newdimen\b@zi
% \newdimen\c@xi \newskip\c@zi
% \newdimen\d@xi \newskip\d@zi
% \newdimen\e@xi \newskip\e@zi
% \newdimen\f@xi \newskip\f@zi
% pentes des poutres ( entier de -9 a +9 )
% multiplicite des poutres ( de -5 a +5 . 0= inactive )
% \newcount\b@pi \newcount\b@ni
% Number of Portees
% \newcount\n@pi \n@pi\@ne
% Actual Signs Old Signs
% \newcount\a@si \newcount\o@si
% ActualCleftoks
% \newtoks\a@ci \a@ci={{\z@}{\z@}{\z@}{\z@}}
% OldCleftoks
% \newtoks\o@ci
% MeterToks
% \newtoks\m@ti
% Altitude of choir groups
% \newskip\g@bi
% Height of choir groups
% \newskip\g@hi
% [version 1.15] moved out to the new register allocation code -- until here --
% \let\maxgroups\thr@@ % maximum three groups of instruments or choirs [version 1.15] moved to later, using \setmaxgroups
\newcount\group@no
%%% [version 1.15] new register allocation code -- start from here --
%
% register allocation for use inside \loop...\if...\repeat
% (only for plain, but no harm even in case of LaTeX)
\edef\noexpand@newcount{\noexpand\newcount}%
\edef\noexpand@newdimen{\noexpand\newdimen}%
\edef\noexpand@newskip{\noexpand\newskip}%
%\edef\noexpand@newmuskip{\noexpand\newmuskip}% not used
%\edef\noexpand@newbox{\noexpand\newbox}% not used
\edef\noexpand@newtoks{\noexpand\newtoks}%
%\edef\noexpand@newmarks{\noexpand\newmarks}% not used
%
% a shortcut for register allocation routines
\def\roman@c@{\romannumeral\count@}%
%
% some registers (i@n, b@x, b@z, c@x, d@x, e@x, s@x, s@Y)
% should be allocated by \newdimen (for id 0...5) and \newskip (for id 6...11)
% because T.114 and earlier did so and for the compatibility to Stanislav
% Kneifl's musixps.tex 0.92a.
% And again \newdimen (for id>11), because both \dimen and \skip are
% applicable but \dimen uses less memory in case of >255 on e-TeX.
\def\noexpand@newdimsk{%
\ifnum\count@<7 \let\@@newdimsk=\noexpand@newdimen
\else\ifnum\count@<13 \let\@@newdimsk=\noexpand@newskip
\else\let\@@newdimsk=\noexpand@newdimen
\fi\fi \@@newdimsk}%
%
% and some other registers (c@z, d@z, e@z, f@z, g@z)
% should be allocated by \newskip (for id 0...11) and \newdimen (for id>11)
% for the same reason of above.
\def\noexpand@newskdim{%
\ifnum\count@<13 \let\@@newskdim=\noexpand@newskip
\else \let\@@newskdim=\noexpand@newdimen
\fi \@@newskdim}%
%
% registers for instrument
\newdimen\interinstrument % moved from "distance between instruments" to here
\def\setmaxinstruments#1{%
\ifnum#1>\@oldmaxinstruments
\chardef\maxinstruments=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxinstruments=\@c
\fi
\count@\@oldmaxinstruments\loop
\advance\count@ by\@ne
%
\expandafter \let \csname interinstrument\roman@c@\endcsname \interinstrument
\expandafter\def\csname interfacteur\roman@c@\endcsname{\interfacteur}% RDT 1.26
%
% altitude
\expandafter \noexpand@newskip \csname k@i\roman@c@\endcsname
%
% InterNote
\expandafter \noexpand@newdimsk \csname i@n\roman@c@\endcsname
%
% beam horizontal positions: x=start, z=end, 8th-64th beams
\expandafter \noexpand@newdimsk \csname b@x\roman@c@\endcsname
\expandafter \noexpand@newdimsk \csname b@z\roman@c@\endcsname
\expandafter \noexpand@newdimsk \csname c@x\roman@c@\endcsname
\expandafter \noexpand@newskdim \csname c@z\roman@c@\endcsname
\expandafter \noexpand@newdimsk \csname d@x\roman@c@\endcsname
\expandafter \noexpand@newskdim \csname d@z\roman@c@\endcsname
\expandafter \noexpand@newdimsk \csname e@x\roman@c@\endcsname
\expandafter \noexpand@newskdim \csname e@z\roman@c@\endcsname
%
% pentes des poutres ( entier de -9 a +9 ) (slopes of the beams)
% multiplicite des poutres ( de -5 a +5 . 0= inactive ) (multiplicity of the beams)
\expandafter \noexpand@newcount \csname b@p\roman@c@\endcsname
\expandafter \noexpand@newcount \csname b@n\roman@c@\endcsname
%
% Number of Portees
\expandafter \noexpand@newcount \csname n@p\roman@c@\endcsname
\csname n@p\roman@c@\endcsname\@ne
%
% Actual Signs
\expandafter \noexpand@newcount \csname a@s\roman@c@\endcsname
%
% Old Signs
\expandafter \noexpand@newcount \csname o@s\roman@c@\endcsname
%
% ActualCleftoks
\expandafter \noexpand@newtoks \csname a@c\roman@c@\endcsname
\csname a@c\roman@c@\endcsname={{\z@}{\z@}{\z@}{\z@}}%
%
% OldCleftoks
\expandafter \noexpand@newtoks \csname o@c\roman@c@\endcsname
%
% MeterToks
\expandafter \noexpand@newtoks \csname m@t\roman@c@\endcsname
%
% staffsize
\expandafter \let \csname staffspacing\roman@c@\endcsname \@ne
%
% text, lyrics, free positioning of chars
\expandafter \let \csname T@R\roman@c@\endcsname \z@
%
% preset clef symbols
\expandafter \let \csname treblec@s\roman@c@\endcsname \z@
\expandafter \let \csname altoc@s\roman@c@\endcsname \z@
\expandafter \let \csname bassc@s\roman@c@\endcsname \z@
%
% preset default staff lines as 5
\expandafter \let \csname n@l\roman@c@\endcsname \fiv@
%
\ifnum\count@<\maxinstruments\repeat
\expandafter\message\expandafter{maxinstruments=\the\maxinstruments}%
\chardef\@oldmaxinstruments=\maxinstruments\relax%
\normalnotesize\resetlayout
\fi
}%
%
% registers for 128th beam
\def\setmaxcxxviiibeams#1{%
\ifnum#1>\maxinstruments
\errmessage{The number of 128th beam must not exceed maxinstruments}%
\else
\ifnum#1>\@oldmaxcxxviiibeams
\chardef\maxcxxviiibeams=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxcxxviiibeams=\@c
\fi
\count@\@oldmaxcxxviiibeams \loop
\advance\count@ by\@ne
\expandafter \noexpand@newdimen \csname f@x\roman@c@\endcsname
\expandafter \noexpand@newskdim \csname f@z\roman@c@\endcsname
\ifnum\count@<\maxcxxviiibeams\repeat
\expandafter\message\expandafter{max128beams=\the\maxcxxviiibeams}%
\chardef\@oldmaxcxxviiibeams=\maxcxxviiibeams\relax%
\fi
\fi
}%
%
% registers for 256th beam
\def\setmaxcclvibeams#1{%
\ifnum#1>\maxcxxviiibeams
\errmessage{The number of 256th beam must not exceed the number of 128th beam}%
\else
\ifnum#1>\@oldmaxcclvibeams
\chardef\maxcclvibeams=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxcclvibeams=\@c
\fi
\count@\@oldmaxcclvibeams \loop
\advance\count@ by\@ne
\expandafter \noexpand@newdimen \csname g@x\roman@c@\endcsname
\expandafter \noexpand@newskdim \csname g@z\roman@c@\endcsname
\ifnum\count@<\maxcclvibeams\repeat
\expandafter\message\expandafter{max256beams=\the\maxcclvibeams}%
\chardef\@oldmaxcclvibeams=\maxcclvibeams\relax%
\fi
\fi
}%
%
% registers for choir group
\def\setmaxgroups#1{%
\ifnum#1>\@oldmaxgroups
\chardef\maxgroups=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxgroups=\@c
\fi
\count@\@oldmaxgroups \loop
\advance\count@ by\@ne
% Altitude
\expandafter \noexpand@newskip \csname g@b\roman@c@\endcsname
% Height
\expandafter \noexpand@newskip \csname g@h\roman@c@\endcsname
%
\expandafter \let \csname lowersonginstrum\roman@c@\endcsname \maxdimen
\expandafter \let \csname uppersonginstrum\roman@c@\endcsname \z@
\ifnum\count@<\maxgroups\repeat
\expandafter\message\expandafter{maxgroups=\the\maxgroups}%
\chardef\@oldmaxgroups=\maxgroups\relax%
\fi
}%
%
% registers for slur
\def\setmaxslurs#1{%
\ifnum#1>\@oldmaxslurs
\chardef\maxslurs=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxslurs=\@c
\fi
\count@\@oldmaxslurs \loop
\advance\count@ by\@ne
%
% horizontal start position of slur
\expandafter \noexpand@newdimsk \csname s@x\roman@c@\endcsname
%
% sense u,d and x (flag) for pending slurs
\expandafter \noexpand@newtoks \csname s@s\roman@c@\endcsname
\csname s@s\roman@c@\endcsname={x}%
%
% vertical offset of slur
\expandafter \noexpand@newdimsk \csname s@Y\roman@c@\endcsname
%
% altportee of slur
\expandafter \noexpand@newskip \csname s@a\roman@c@\endcsname
%
% vertical start position of slur [steps of internote]
\expandafter \noexpand@newcount \csname s@y\roman@c@\endcsname
%
% instrument number of that slur (to retrieve internote)
\expandafter \noexpand@newcount \csname s@N\roman@c@\endcsname
%
% vertical end position of slur [steps of internote], used from
% \breakslur. the value \maxdimen is used to decide, if
% \breakslur is used or not (flag)
\expandafter \noexpand@newcount \csname s@z\roman@c@\endcsname
\csname s@z\roman@c@\endcsname\maxdimen
%
%++ickd: dotted indicator for pending slurs
\expandafter \noexpand@newtoks \csname s@d\roman@c@\endcsname
%
\ifnum\count@<\maxslurs\repeat
\expandafter\message\expandafter{maxslurs=\the\maxslurs}%
\chardef\@oldmaxslurs=\maxslurs\relax%
\fi
}%
%
% registers for trill (MusiXTeX-type trill only. Legacy \trillC and
% \TrillC are out of the scope.)
\def\setmaxtrills#1{%
\ifnum#1>\@oldmaxtrills
\chardef\maxtrills=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxtrills=\@c
\fi
\count@\@oldmaxtrills \loop
\advance\count@ by\@ne
% starting horizontal pos
\expandafter \noexpand@newskip \csname tr@x\roman@c@\endcsname
\csname tr@x\roman@c@\endcsname\maxdimen\relax
% heading of trill
\expandafter \noexpand@newtoks \csname tr@sw\roman@c@\endcsname
% height of trill
\expandafter \noexpand@newskip \csname tr@y\roman@c@\endcsname
\ifnum\count@<\maxtrills\repeat
\expandafter\message\expandafter{maxtrills=\the\maxtrills}%
\chardef\@oldmaxtrills=\maxtrills\relax%
\fi
}%
%
% registers for octave line
\def\setmaxoctlines#1{%
\ifnum#1>\@oldmaxoctlines
\chardef\maxoctlines=#1\relax
\ifnum#1>\@c
\errmessage{The maximum reference number of elements is limited to \the\@c}
\chardef\maxoctlines=\@c
\fi
\count@\@oldmaxoctlines \loop
\advance\count@ by\@ne
% starting horizontal pos
\expandafter \noexpand@newskip \csname o@x\roman@c@\endcsname
\csname o@x\roman@c@\endcsname\maxdimen\relax
% height of octline
\expandafter \noexpand@newskip \csname o@y\roman@c@\endcsname
% sense of octline
\expandafter \noexpand@newtoks \csname o@sw\roman@c@\endcsname
\ifnum\count@<\maxoctlines\repeat
\expandafter\message\expandafter{maxoctlines=\the\maxoctlines}%
\chardef\@oldmaxoctlines=\maxoctlines\relax%
\fi
}%
%
\chardef\@oldmaxinstruments=\z@
\chardef\@oldmaxcxxviiibeams=\z@
\chardef\@oldmaxcclvibeams=\z@
\chardef\@oldmaxgroups=\z@
\chardef\@oldmaxslurs=\z@
\chardef\@oldmaxtrills=\z@
\chardef\@oldmaxoctlines=\z@
%
% actual setup (=register allocation) of the maximum element numbers
% should be done after fonts definition.
%
%%% [version 1.15] new register allocation code -- until here --
%%% fonts
\newif\iflongDCfontnames
\newif\iflongECfontnames
\longDCfontnamesfalse % obsolete
\longECfontnamesfalse % to use EC fonts, \input musixec
\def\fontid{cm} % deprecated but used in pmx.tex
%%
% Small bold sans serif fonts % version 1.33 RDT
%%
\font\threedc=phvb8t at 3pt
\font\fourdc=phvb8t at 4pt
\font\fivedc=phvb8t at 5pt
\font\sixdc=phvb8t at 6pt
%%
% Seven point fonts
%%
\font\sevenrm=cmr7
\font\sevenbf=cmbx7
\font\sevenit=cmti7
\font\sevenbi=cmbxti10 at 7pt % version 1.22 RDT
\font\sevensc=cmcsc10 at 7pt
\font\sevenss=phvr8t at 7pt % version 1.29 RDT
\font\sevendc=phvb8t at 7pt
%%
% Eight point fonts
%%
\font\eightrm=cmr8
\font\eightbf=cmbx8
\font\eightit=cmti8
\font\eightbi=cmbxti10 at 8pt % version 1.22 RDT
\font\eightsc=cmcsc10 at 8pt
\font\eightss=phvr8t at 8pt % version 1.29 RDT
\font\eightdc=phvb8t at 8pt
%%
% Nine point fonts
%%
\font\ninerm=cmr9
\font\ninebf=cmbx9
\font\nineit=cmti9
\font\ninebi=cmbxti10 at 9pt % version 1.22 RDT
\font\ninesc=cmcsc10 at 9pt
\font\niness=phvr8t at 9pt % version 1.29 RDT
\font\ninedc=phvb8t at 9pt
%%
% Ten point fonts
%%
\font\tenrm=cmr10
\font\tenbf=cmbx10
\font\tenit=cmti10
\font\tenbi=cmbxti10 % version 1.22 RDT
\font\tensc=cmcsc10
\font\tenss=phvr8t % version 1.29 RDT
\font\tendc=phvb8t
%%
% Eleven point fonts
%%
\font\elevenrm=cmr9 scaled \magstephalf
\font\elevenbf=cmbx9 scaled \magstephalf
\font\elevenit=cmti9 scaled \magstephalf
\font\elevenbi=cmbxti10 at 11pt % version 1.22 RDT
\font\elevensc=cmcsc10 at 11pt
\font\elevenss=phvr8t at 11pt % version 1.29 RDT
\font\elevendc=phvb8t at 11pt
%%
% Twelve point fonts
%%
\font\twelverm=cmr12
\font\twelvebf=cmbx12
\font\twelveit=cmti12
\font\twelvebi=cmbxti10 scaled \magstep1 % version 1.22 RDT
\font\twelvesc=cmcsc10 scaled \magstep1
\font\twelvess=phvr8t scaled \magstep1 % version 1.29 RDT
\font\twelvedc=phvb8t scaled \magstep1
% 14pt fonts
\font\frtrm=cmr12 scaled \magstep1
\font\frtbf=cmbx12 scaled \magstep1
\font\frtit=cmti12 scaled \magstep1
\font\frtsc=cmcsc10 scaled \magstep2
\font\frtbi=cmbxti10 scaled \magstep2 % version 1.22 RDT
\font\frtss=phvr8t scaled \magstep2 % version 1.29 RDT
\font\frtdc=phvb8t scaled \magstep2
%
% 17pt
\font\svtrm=cmr12 scaled \magstep2
\font\svtbf=cmbx12 scaled \magstep2
\font\svtit=cmti12 scaled \magstep2
\font\svtsc=cmcsc10 scaled \magstep3
\font\svtbi=cmbxti10 scaled \magstep3
\font\svtdc=phvb8t scaled \magstep3
%
% 20pt
\font\twtyrm=cmr12 scaled \magstep3
\font\twtybf=cmbx12 scaled \magstep3
\font\twtyit=cmti12 scaled \magstep3
\font\twtysc=cmcsc10 scaled \magstep4
\font\twtybi=cmbxti10 scaled \magstep4 % version 1.22 RDT
\font\twtydc=phvb8t scaled \magstep4
%
% 25pt
\font\twfvrm=cmr12 scaled \magstep4
\font\twfvbf=cmbx12 scaled \magstep4
\font\twfvit=cmti12 scaled \magstep4
\font\twfvsc=cmcsc10 scaled \magstep5
\font\twfvbi=cmbxti10 scaled \magstep5 % version 1.22 RDT
%
%%
%%
% Define five font families
%%
\def\tinytype{%
\let\rm\sevenrm
\let\bf\sevenbf
\let\it\sevenit
\let\bi\sevenbi
\let\sc\sevensc
\rm}
\def\smalltype{%
\let\rm\eightrm
\let\bf\eightbf
\let\it\eightit
\let\bi\eightbi
\let\sc\eightsc
\rm}
\def\Smalltype{%
\let\rm\ninerm
\let\bf\ninebf
\let\it\nineit
\let\bi\ninebi
\let\sc\ninesc
\rm}
\def\normtype{%
\let\rm\tenrm
\let\bf\tenbf
\let\it\tenit
\let\bi\tenbi
\let\sc\tensc
\rm}
\def\medtype{%
\let\rm\twelverm
\let\bf\twelvebf
\let\it\twelveit
\let\bi\twelvebi
\let\sc\twelvesc
\rm}
%
% four font families at big/Big/BIg/BIG sizes
% default is \bf here and in musixec, but \sc in musixplt, \rm in musixtmr
%
\def\bigfont{%
\let\rm\frtrm
\let\bf\frtbf
\let\it\frtit
\let\sc\frtsc
\let\bi\frtbi
\bf}
\def\Bigfont{%
\let\rm\svtrm
\let\bf\svtbf
\let\it\svtit
\let\sc\svtsc
\let\bi\svtbi
\bf}
\def\BIgfont{%
\let\rm\twtyrm
\let\bf\twtybf
\let\it\twtyit
\let\sc\twtysc
\let\bi\twtybi
\bf}
\def\BIGfont{%
\let\rm\twfvrm
\let\bf\twfvbf
\let\it\twfvit
\let\sc\twfvsc
\let\bi\twfvbi
\bf}
%%
% large fonts for titles
% (If you prefer Roman, use \rm)
% (If you prefer small-caps, use \sc)
%
\def\bigtype{\bigfont\bf} % default for "big" fonts is \bf
\def\Bigtype{\Bigfont\bf}
\def\BIgtype{\BIgfont\bf}
\def\BIGtype{\BIGfont\bf}
%
%
% Bold italic fonts for dynamic markings.
%%
\font\ppfftwelve=cmbxti10 at 8pt % version 1.17 RDT
\font\ppffsixteen=cmbxti10
\font\ppfftwenty=cmbxti10 scaled \magstep1
\font\ppfftwentyfour=cmbxti10 scaled \magstep2
\font\ppfftwentynine=cmbxti10 scaled \magstep3
\def\ppff{\ifdim\internote<\p@seven6\Internote\tinyppff% version 1.17 RDT
\else\ifdim\internote<.95\Internote\smallppff%
\else\ifdim\internote<1.19\Internote\normppff%
\else\medppff\fi\fi\fi}%
\def\tinydyn{\let\ppff\ppfftwelve} % version 1.18 RDT
\def\smalldyn{\let\ppff\ppffsixteen}
\def\normdyn{\let\ppff\ppfftwenty}
\def\meddyn{\let\ppff\ppfftwentyfour}
\font\tabfntthirteen=phvb8t at 4pt % version 1.34 RDT
\font\tabfntsixteen=phvb8t at 5pt
\font\tabfnttwenty=phvb8t at 6pt
\font\tabfnttwentyfour=phvb8t at 8pt
\font\tabfnttwentynine=phvb8t at 10pt
\font\musiceleven=musix11
\font\musicthirteen=musix13
\font\musicsixteen=musix16
\font\musictwenty=musix20
\font\musictwentyfour=musix24
\font\musictwentynine=musix29
%
% tt fonts needed by musixsty % version 1.22 RDT
%
\font\eighttt=cmtt8
\font\ninett=cmtt9
\font\tentt=cmtt10
\font\twelvett=cmtt12
\font\frttt=cmtt12 scaled \magstep1
\font\svttt=cmtt12 scaled \magstep2
\font\twtytt=cmtt12 scaled \magstep3
\font\twfvtt=cmtt12 scaled \magstep4
%
%
% sl fonts needed by musixsty % version 1.22 RDT
%
\font\eightsl=cmsl8
\font\ninesl=cmsl9
\font\tensl=cmsl10
\font\twelvesl=cmsl12
\font\frtsl=cmsl12 scaled \magstep1
\font\svtsl=cmsl12 scaled \magstep2
\font\twtysl=cmsl12 scaled \magstep3
\font\twfvsl=cmsl12 scaled \magstep4
% piano brackets, slides, guitar chords, lines, (de)crescendi, circles
\font\mxsps=musixspx
%%%
%
% Slur macro package for MusicTeX
%
% Ross Mitchell, February 20 1993
%
%%%
%%
% Load the font set
%
% Nomenclature: slur[p][size]
% [p] : sign of slur gradient; u=positive, d=negative, z=zero
%%
\font\slurz=xslz20
\font\slurzd=xslz20d %+ickd
\font\slurueleven=xslu11 % slur up eleven points
\font\sluruthirteen=xslu13
\font\slurusixteen=xslu16
\font\slurutwenty=xslu20
\font\slurutwentyfour=xslu24
\font\slurutwentynine=xslu29
\font\slurdeleven=xsld11 % slur down eleven points
\font\slurdthirteen=xsld13
\font\slurdsixteen=xsld16
\font\slurdtwenty=xsld20
\font\slurdtwentyfour=xsld24
\font\slurdtwentynine=xsld29
%++ickd same for dotted slurs
\font\sluruelevend=xslu11d % slur up eleven points
\font\sluruthirteend=xslu13d
\font\slurusixteend=xslu16d
\font\slurutwentyd=xslu20d
\font\slurutwentyfourd=xslu24d
\font\slurutwentynined=xslu29d
\font\slurdelevend=xsld11d % slur down eleven points
\font\slurdthirteend=xsld13d
\font\slurdsixteend=xsld16d
\font\slurdtwentyd=xsld20d
\font\slurdtwentyfourd=xsld24d
\font\slurdtwentynined=xsld29d
%++ickd
%!these fonts can't be used with highres printers (>~800dpi)
% for these printers comes a interface to PS using DVIPS (PS-Tricks)
% and \special{}-commands next time (patience is a virtue ...)
\font\xtie=xslhz20
\font\xtied=xslhz20d %+ickd
\font\hslurdeleven=xslhd11 % slur half down eleven points
\font\hslurdthirteen=xslhd13
\font\hslurdsixteen=xslhd16 % slur half down sixteen points
\font\hslurdtwenty=xslhd20
\font\hslurdtwentyfour=xslhd24
\font\hslurdtwentynine=xslhd29
\font\hslurueleven=xslhu11
\font\hsluruthirteen=xslhu13
\font\hslurusixteen=xslhu16
\font\hslurutwenty=xslhu20
\font\hslurutwentyfour=xslhu24
\font\hslurutwentynine=xslhu29
%++ickd same for dotted slurs
\font\hslurdelevend=xslhd11d % slur half down eleven points
\font\hslurdthirteend=xslhd13d
\font\hslurdsixteend=xslhd16d % slur half down sixteen points
\font\hslurdtwentyd=xslhd20d
\font\hslurdtwentyfourd=xslhd24d
\font\hslurdtwentynined=xslhd29d
\font\hsluruelevend=xslhu11d
\font\hsluruthirteend=xslhu13d
\font\hslurusixteend=xslhu16d
\font\hslurutwentyd=xslhu20d
\font\hslurutwentyfourd=xslhu24d
\font\hslurutwentynined=xslhu29d
%++ickd
% number of pending slurs
\newcount\N@s
% [version 1.15] moved out to the new register allocation code (except for \s@Y)
% horizontal start position of slur
% \newdimen\s@xi
% sense u,d and x (flag) for pending slurs
% \newtoks\s@si \s@si={x}
% vertical offset of slur
\newdimen\s@Y % this register is for common use
% \newdimen\s@Yi
% altportee of slur
% \newskip\s@ai
% vertical start position of slur [steps of internote]
% \newcount\s@yi
% instrument number of that slur (to retrieve internote)
% \newcount\s@Ni
% vertical end position of slur [steps of internote], used from \breakslur
% the value \maxdimen is used to decide, if \breakslur is used or not (flag)
% \newcount\s@zi \s@zi\maxdimen
%++ickd: dotted indicator for pending slurs
% \newtoks\s@di % moved out to the new register allocation code
%++ickd
\def\roman@n@i{\romannumeral\n@i\endcsname}
%
% [version 1.15] make slurs independent from \maxinstruments
\def\test@slurnum{%
\ifnum\n@i<\z@ \n@i\@c \fi
\ifnum\n@i<\maxslurs \else
\count@\maxslurs \advance\count@\m@ne
\errmessage{Wrong slur reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15]
\n@i\z@% [version 1.15]
\fi
\advance\n@i\@ne}%
%
\def\s@l@ctslur#1\relax{%
\n@i#1\relax\test@slurnum% [version 1.15] make it independent from beams
\edef\s@a{\csname s@a\roman@n@i}% dimen (altportee)
\edef\s@x{\csname s@x\roman@n@i}% dimen (hor start pos)
\edef\s@y{\csname s@y\roman@n@i}% count (startnote [internote])
\edef\s@N{\csname s@N\roman@n@i}% count (instrument number)
\edef\s@z{\csname s@z\roman@n@i}% count (endnote [internote])
\edef\s@Y{\csname s@Y\roman@n@i}% dimen (voffset)
\edef\s@d{\csname s@d\roman@n@i}% token (dotted) +ickd
\edef\s@s{\csname s@s\roman@n@i}}% token (sense)
% get current position (returns the dimen in \y@v)
% (\lin@pos starts behind signatures!)
\newdimen\lin@pos
\def\getcurpos{\y@v\lin@pos \advance\y@v\locx@skip}
% \n@i vertical offset of first note (number); temporary
% \n@ii vertical offset of second note (number); temporary
% \n@iii meet note
% \n@iv first note
% \n@v temp. character
% \n@vi last note
% \n@vii right halfslur length
% \n@viii don't touch
% \y@ complete length of slur - allowed overlap (4pt), temp. length
% \y@i abs. height of slur
% \y@ii complete length of slur
% \y@iii old maxslurwidth
% \y@iv don't touch
% \y@v don't touch
% \@sense{u,d}
%
% if \curve (\midslur) is used
% \@meet{}
% \l@length{}
% \r@length{}
% #1 start pitch #2 end pitch #3 length #4 right hoffset
\newcount \meet@minus@n@iv
\def\writ@slur#1#2#3#4{\check@staff % modified: sld... into slurd... 12.04.95 ick
\let\slz\slurz% inserted
\let\slzd\slurzd% inserted for dotted slurs +ickd
\ifx\s@N\undefined \relax % \let\internote\Internote
\else
\edef\internote{\csname i@n\romannumeral\s@N\endcsname}%
\fi
% \immediate\write16{\noexpand\writ@slur internote:\the\internote}%
\n@iv#1%
\n@vi#2%
%%
% Get note vertical offsets
% \n@iv= vertical offset of first note(n@i temp);
% \n@vi= vertical offset of second note(n@ii temp);
% \y@i = reference height of first note (pt);
%
% Define adequate fonts for this slur, according to the value of \internote
%
\ifdim\internote>3.5pt
\let\sld\slurdtwentynine \let\slu\slurutwentynine
\let\hslurd\hslurdtwentynine \let\hsluru\hslurutwentynine
\let\sldd\slurdtwentynined \let\slud\slurutwentynined % +ickd
\let\hslurdd\hslurdtwentynined \let\hslurud\hslurutwentynined %+ickd
\def\@stepwidth{3.6pt}%
\else \ifdim\internote>2.9pt
\let\sld\slurdtwentyfour \let\slu\slurutwentyfour
\let\hslurd\hslurdtwentyfour \let\hsluru\hslurutwentyfour
\let\sldd\slurdtwentyfourd \let\slud\slurutwentyfourd % +ickd
\let\hslurdd\hslurdtwentyfourd \let\hslurud\hslurutwentyfourd %+ickd
\def\@stepwidth{3.0pt}%
\else \ifdim\internote>2.3pt
\let\sld\slurdtwenty \let\slu\slurutwenty
\let\hslurd\hslurdtwenty \let\hsluru\hslurutwenty
\let\sldd\slurdtwentyd \let\slud\slurutwentyd % +ickd
\let\hslurdd\hslurdtwentyd \let\hslurud\hslurutwentyd %+ickd
\def\@stepwidth{2.5pt}%
\else \ifdim\internote>1.8pt
\let\sld\slurdsixteen \let\slu\slurusixteen
\let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen
\let\sldd\slurdsixteend \let\slud\slurusixteend % +ickd
\let\hslurdd\hslurdsixteend \let\hslurud\hslurusixteend %+ickd
\def\@stepwidth{2pt}%
\else \ifdim\internote>1.4pt
\let\sld\slurdthirteen \let\slu\sluruthirteen
\let\hslurd\hslurdthirteen \let\hsluru\hsluruthirteen
\let\sldd\slurdthirteend \let\slud\sluruthirteend % +ickd
\let\hslurdd\hslurdthirteend \let\hslurud\hsluruthirteend %+ickd
\def\@stepwidth{1.6pt}%
\else
\let\sld\slurdeleven \let\slu\slurueleven
\let\hslurd\hslurdeleven \let\hsluru\hslurueleven
\let\sldd\slurdelevend \let\slud\sluruelevend % +ickd
\let\hslurdd\hslurdelevend \let\hslurud\hsluruelevend %+ickd
\def\@stepwidth{1.28pt}%
\fi\fi\fi\fi\fi
%
% End choice of font
%
\n@i\n@iv \pl@base % \y@i = initial height
\n@ii\n@vi
%
% Select appropriate font
% Set \n@i to the vertical difference index
% setup \n@iii(meetnote)
%
\ifnum\n@ii=\n@i % Slope is zero
\n@iii\n@i
\if u\@sense \advance\n@iii\thr@@ \else \advance\n@iii-\thr@@ \fi
\def\@slope{z}\n@i\z@
\else
\ifnum\n@ii<\n@i % Slope is negative
\C@csl\n@i\n@ii\def\@slope{d}% % compute @meet height for slurs
\else % Slope is positive
\C@csl\n@ii\n@i\def\@slope{u}\n@i\n@ii % compute @meet height for slurs
\fi
\fi
%%
% Select the required font and load the width parameters
%
% Font specific parameters
% \y@iii is the horizontal width of the longest slur in the fonts
% This parameter is loaded from the tfm \fontdimen parameter 5
% respectively
%%
\y@iii\fontdimen\fiv@\csname sl\@slope\endcsname
\y@ii#3%
%
% \n@i contains slope (difference between start and end note)
%
% force longslurs if (!!! no check, be careful !!!)
% long slurs are at least 20[16] pt long) !!! Perhaps will change again !!!
% - difference between first note and last note > 8
% - if \curve or \midslur is def'd
% - if \invertslur is used
%
\ifnum\n@i>\@ight \y@iii\z@ \fi % RMslurs limit 8 steps
\ifx\@meet\empty \else\y@iii\z@ \fi
\ifx\@invert\@ne \y@iii\z@ \fi
\ifdim\y@ii>\y@iii % start of longslurs
%
% setup meet height of slur
%
\ifx\empty\@meet
% \immediate\write16{\noexpand\@meet was empty.}%
\else
\n@iii\n@iv
\advance\n@iii\@meet
\fi
\edef\@meet{\the\n@iii}%
% \immediate\write16{\noexpand\@meet = \@meet.}%
%
% allow a little bit overlap (2*2pt) for nicer outlook (as longer as nicer)
% clip to extremities
% compute the max length in fontunits (\count@)
%
\y@\y@ii \advance\y@\f@ur\p@ \n@v\y@
\sp@pt\t@n % 10pt steps
\advance\n@v-\f@ur % first brace is 20pt wide (perhaps 10pt is better ??)
\min@n@v\z@
\max@n@v\fourt@@n % largest braces are 2*((90pt-20pt)/10pt)
\count@\n@v % max length
%
% compute the length of the starting and ending halfslurs
% in case, that curve is not def'd
%
\ifx\empty\l@length
\divide\n@v\tw@ % 2 halfslurs
\n@vii\n@v
\n@ii\n@v
\def@lr
%
% first try to reach nicer long slurs without using \curve
%
\if z\@slope % leave ties untouched
\else
\ifnum\count@>\z@ % only for long slurs
\multiply\n@v\tw@
\if\@slope\@sense % uu,dd advance l@length ud,du advance r@length
\s@adjust\n@vii\n@ii
\else
\s@adjust\n@ii\n@vii
\fi
\def@lr
\fi
\fi
%
% adjust \curve parameters, if neccesary
%
\else
\n@vii\l@length
\n@ii\r@length
\loop
\count@\n@vii
\advance\count@\n@ii
\ifnum\count@>\n@v
\advance\n@vii\m@ne \ifnum\n@vii<\z@ \n@vii\z@ \fi
\advance\n@ii\m@ne \ifnum\n@ii<\z@ \n@ii\z@ \fi
\repeat
\def@lr
\fi
%
% clip to extremity heights (max slur height= 16\internote)
%
\C@csm\n@iv
\C@csm\n@vi
%
% change sense and offset behind linebreak and reset flag
%
\ifx\@invert\@ne \ifdim\s@x=\z@
\@invsl \let\@invert\empty \s@Y-\s@Y
\fi \fi
%
% compute final height and put the box
%
% \immediate\write16{ before @meet:\noexpand\y@i=\the\y@i}%
% \message{ was \noexpand\n@iv\the\n@iv}%
% \message{ was \noexpand\n@vi\the\n@vi}%
%
\meet@minus@n@iv=\@meet
\advance\meet@minus@n@iv-\n@iv
% \immediate\write16{\noexpand\meet@minus@n@iv=\the\meet@minus@n@iv}%
% \y@i\@meet\internote % \y@i final height
% change from DT for staffspacing not standard
\y@i \@stepwidth % part proportional to slur font size
\multiply \y@i \meet@minus@n@iv
\advance\y@i \n@iv\internote % was done by \pl@base...
%
\C@sof % add the voffsets
\llap{\raise\y@i\hbox\@to\y@ii{%
%
% compute the beginning and ending halfslur chars
% n@i firstslur
% n@ii lastslur
% n@v character
%
\C@cc\n@iv\n@i\n@ii
\C@cc\n@vi
%
\n@v\l@length
\multiply\n@v\sixt@@n % 16 different heigths
\advance\n@v\n@i % offset to length
\advance\n@v\@cxxviii % offset to starthalfslur
\@boX \box\ch@box\hss% put starthalfslur
\n@v\r@length
\multiply\n@v\sixt@@n
\advance\n@v\n@ii
%
% put ending halfslur in box
%
\ifx\@invert\@ne \@invsl \fi
\@boX
%
% put the middle extension (could be replaced by []rule)
%
\ifdim\y@ii>\p@ne\p@
\n@v\y@ii
\sp@pt\f@ur % 4pt steps
\ifx\@invert\@ne
\divide\n@v\tw@
\if u\@sense \advance\n@v\@cxxviii \fi
\mid@box\hss\hss% don't ask me why
\if u\@sense \advance\n@v-\@cxxviii \else \advance\n@v\@cxxviii \fi
\mid@box%
\else
\if d\@sense \advance\n@v\@cxxviii \fi
\mid@box \fi \fi
%
% place the end of slur and kern right horizontal offset
%
\hss\box\ch@box}\kern#4}%
%
% reset slurcurve
%
\global\let\@meet\empty
\let\l@length\empty
\let\@invert\empty
%
%>>>>>> start of RM slurs
% Set \n@v to the width index in the slur font table
%
\else
\ifdim\y@ii<\@ight\p@ \y@ii\@ight\p@ \fi % Clip to extremities
\y@\y@ii
\advance\y@-\si@\p@
\n@v\y@
\sp@pt\f@ur
%
% Find decimal character count into font table
% (a) Zero height slurs: charnum= width index
% (b) Others: charnum= 16*(height index - 1) + width index
% Place the character count in \n@v
%
\if z\@slope
\if d\@sense \advance\n@v\@liv \fi % \@liv(=54) offset to slurchars
\else
\advance\n@i\m@ne % height index - 1
\multiply\n@i\sixt@@n % 16*(height index - 1)
\advance\n@v\n@i % 16*(height index - 1) + width index
\if d\@sense \advance\n@v\@cxxviii \fi
\fi
%
% Place the slur character
%
\C@sof
\ifnum\n@v>255 % to avoid diags in case of...
\n@v=255\relax
\fi
\ifnum\n@v<0 % to avoid diags in case of...
\n@v=0\relax
\fi
%
\llap{\raise\y@i\hbox\@to\y@ii{%
%-ickd \hss\csname sl\@slope\endcsname\char\n@v\hss}\kern#4}%
\hss\csname sl\@slope\@dotted\endcsname\char\n@v\hss}\kern#4}%
\fi
\fi} % end writ@slur
\def\sp@pt#1{\divide\n@v65536\divide\n@v#1}
\def\max@n@v#1{\ifnum\n@v>#1\n@v#1\fi}
\def\min@n@v#1{\ifnum\n@v<#1\n@v#1\fi}
%-ickd \def\mid@box{\hbox{\xtie\char\n@v}}
\def\mid@box{%
\ifnum\n@v>255 % to avoid diags in case of...
\n@v=255\relax
\fi
\ifnum\n@v<0 % to avoid diags in case of...
\n@v=0\relax
\fi
%
\hbox{\csname xtie\@dotted\endcsname\char\n@v}}
%-ickd \def\@boX{\setbox\ch@box\hbox{\csname hslur\@sense\endcsname\char\n@v}%
\def\@boX{%
\ifnum\n@v>255 % to avoid diags in case of...
\n@v=255\relax
\fi
\ifnum\n@v<0 % to avoid diags in case of...
\n@v=0\relax
\fi
%
\setbox\ch@box\hbox{\csname hslur\@sense\@dotted\endcsname\char\n@v}%
\advance\y@ii-\wd\ch@box}
\def\def@lr{\edef\l@length{\the\n@vii}\edef\r@length{\the\n@ii}}
\def\s@adjust#1#2{%
\ifnum\n@v<\count@ \advance#1\@ne \fi
\ifnum\n@v>\z@ \advance#1\@ne \advance#2\m@ne
\ifnum#1>\s@v@n #1\s@v@n \fi \fi}
\def\C@csl#1#2{% compute meet height for slurs
\if u\@sense \n@iii#1\advance\n@iii\tw@
\else \n@iii#2\advance\n@iii-\tw@ \fi
\ifx\@invert\@ne
\n@iii#1\advance\n@iii-#2\divide\n@iii\tw@ \advance\n@iii#2\fi
\advance#1-#2}
\def\C@cc#1{% slur = abs(meet-note) - 1
\n@ii\@meet
\advance\n@ii-#1%
\ifnum\n@ii<\z@ \n@ii-\n@ii \fi
\advance\n@ii\m@ne
}
% \ifnum\n@ii<\z@\immediate\write16{Warning: \noexpand\C@cc->\noexpand\n@ii=\the\n@ii}\fi
% \n@ii\z@} % modeif DT 20-12-97
\def\C@csm#1{% clip to extremity heights (max slur height= 16\internote)
\n@i\n@iii
\advance\n@i-#1%
\ifnum\n@i>\sixt@@n
\ifnum\n@iii>#1%
#1\n@iii \advance#1-\sixt@@n
\else
#1\n@iii \advance#1\sixt@@n
\fi
\fi}
\def\C@sof{\advance\y@i\s@Y % abs. voffset
\ifx\@Ti\@ne \advance\y@i\s@a \let\@Ti\empty \fi}% call from cutslur
% manual influation on the curve for long slurs
% must be coded in front of \tslur
% #1 final height [number, steps of internote, relativ to beginning! note]
% #2 (length)slope left #3 (length)slope right
\def\curve#1#2#3{\getcurpos % ignore \curve behind a linebreak
\ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\edef\l@length{#2}\edef\r@length{#3}\relax
\else
% \message{\noexpand\curve #1#2#3 not expanded}%
\fi}
% raise (or lower) only the mid of slur
% #1 final height [number, steps of internote, relativ to beginning! note]
%! #1 can still be changed to work relativ from default height ???
\def\midslur#1{\getcurpos
\ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\relax
\else
% \message{\noexpand\midslur #1 not expanded}%
\fi}
\let\@meet\empty
\let\l@length\empty
\let\r@length\empty
% Liftslur #1 refnumber #2 lift[steps of internote]
\def\Liftslur#1#2{\n@i#1\advance\n@i\@ne \advance\csname s@y\roman@n@i#2}
% breakslur #1 refnumber #2 endheight during linebreak[steps of internote]
\def\breakslur#1#2{\inhgetn@i#2\relax\n@ii\n@i
\n@i#1\advance\n@i\@ne \global\csname s@z\roman@n@i\n@ii}
% invertslur #1 refnumber
\def\@invsl{\if u\the\s@s \s@s{d}\else \s@s{u}\fi}
\def\invertslur#1{\s@l@ctslur#1\relax
\if u\the\s@s \global\s@s{D}% change sense and set flag for invertslur
\else \global\s@s{U}\fi}
% initiate slur #1 reference number #2 start note
\def\isluru{\i@slur\h@lf{1\p@seven\internote}u}% 'normal'
\def\issluru{\i@slur{1\p@ne}{\p@seven\internote}u}% shorter for accords
% for beam(ib[l]u) or stem, doesn't work with \stemcut (yet?)
\def\ibsluru{\y@i\stemfactor\interbeam
\advance\y@i\h@lf\internote \i@slur1\y@i u}
\def\islurd{\i@slur\h@lf{-1\p@seven\internote}d}
\def\isslurd{\i@slur{1\p@ne}{-\p@seven\internote}d}
\def\ibslurd{\y@i\stemfactor\interbeam
\advance\y@i\h@lf\internote \y@i-\y@i \i@slur0\y@i d}
% initiate slur at half note width but NO vertical offset (for linkings)
\def\ihsluru{\i@slur\h@lf\z@ u}%
\def\ihslurd{\i@slur\h@lf\z@ d}%
\let\itieu\issluru
\let\itied\isslurd
\def\istieu{\i@slur{1\p@ne}{\qu@rt\internote}u}% shorter for accords
\def\istied{\i@slur{1\p@ne}{-\qu@rt\internote}d}%
\let\itenu\istieu
\let\itenl\istied
\let\Itenu\istieu
\let\Itenl\istied
\def\dotted{\let\dott@d\@ne}\let\dott@d\empty %+ickd
\def\@mis{missing }
% #1 hoffset #2 voffset #3 sense (u,d) #4 reference number #5 start note
\def\i@slur#1#2#3#4#5{%
\check@staff
\global\advance\N@s\@ne % update slurcounter
\s@l@ctslur#4\relax
% test for already invoked \islur
\if x\the\s@s \else\errmessage{\@mis\noexpand\tslur#4}\fi
\global\s@Y#2% store voffset (abs. dim. to rel. height)
\global\s@s{#3}% store sense (u,d)
\ifx\dott@d\empty \global\s@d{}\else\global\s@d{d}\fi %+ickd
\let\dott@d\empty % set dotted indicator +ickd
\global\s@N\noinstrum@nt % store instrument number
\inhgetn@i#5\relax
\global\s@y\n@i % start vpos (steps of internote)
\global\s@a\altportee % store altportee of current slur
\getcurpos
\advance\y@v#1\qn@width
\global\s@x\y@v
\fi}% start hpos (current pos including hoffset)
% terminate slur #1 reference number #2 end note
% the various types only influence the horizontal offset, if you want to
% terminate a \ibslur with a \tslur it becomes a little bit tricky
%%
%% RDT: the "trick", whatever it is, doesn't seem to be working !!!!!
%% e.g. \Notes\ibsluru1g\qa g\ha l\sk\zq g\zq i\tslur1k\qu k\en
\def\tslur{\t@slur\h@lf}
\def\tsslur{\t@slur{-\p@ne}}
\def\tubslur{\t@slur1}
\def\tdbslur{\t@slur0}
\def\tbsluru{\t@slur1}
\def\tbslurd{\t@slur0}
% \def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}#1\@ne}
% \def\tleg#1{\let\T@i\@c \tslur #1\@ne}
% #1 should be braced... by David Alsop on January 11, 2009
\def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}{#1}\@ne}
\def\tleg#1{\let\T@i\@c \tslur{#1}\@ne}
\let\tten\ttie
\let\Tten\ttie
\let\Tleg\tleg
% y@i linewidth
% y@iv right hoffset
% y@v endpos, complete length
% #1 hoffset #2 reference number #3 end note
\def\t@slur#1#2#3{%
\check@staff
\s@l@ctslur#2\relax
\y@iv#1\qn@width
\def\@sense{\the\s@s}%
\edef\@dotted{\the\s@d}%+ickd
% test for missing \islur
\if x\@sense \errmessage{\@mis\noexpand\islur#2}\fi
% test for \invertslur
\if D\@sense \s@s{u}%
\let\@invert\@ne
\fi
\if U\@sense \s@s{d}%
\let\@invert\@ne
\fi
% compute length
\getcurpos
\advance\y@v\y@iv
% eoline
\y@eol\advance\y@-\beforeruleskip
% clip slur at eoline
\ifdim\y@v>\y@ \y@v\y@ \advance\y@v\beforeruleskip \y@iv\beforeruleskip \fi
\advance\y@v-\s@x
\ifx\T@i\@c \n@i\s@y \else \inhgetn@i#3\relax \fi
\writ@slur\s@y\n@i\y@v{-\y@iv}%
% reset sense of slur
\global\s@s{x}\let\T@i\empty
\global\advance\N@s\m@ne
\fi}% update slur counter
% this command is made to terminate the slur #1 exactly on the note pitch #2
\def\Tslurbreak#1#2{\s@l@ctslur#1\relax
\def\@sense{\the\s@s}%
{\if d\@sense \advance\transpose 2\raise0.2\Interligne\hbox{\tslur{#1}{#2}}\relax
\else \advance\transpose -2\raise-0.2\Interligne\hbox{\tslur{#1}{#2}}\relax
\fi
}%
\global\let\@meet\empty
\let\l@length\empty
\let\r@length\empty
\let\@invert\empty
}
\def\Islurubreak#1#2{{\advance\transpose -1\isluru{#1}{#2}}}
\def\Islurdbreak#1#2{{\advance\transpose 1\islurd{#1}{#2}}}
\def\TslurbreakNextBar#1#2{\off{\beforeruleskip}\hloff{\Tslurbreak{#1}{#2}}\off{-\beforeruleskip}}
\def\IslurubreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurubreak{#1}{#2}}\off{\afterruleskip}}
\def\IslurdbreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurdbreak{#1}{#2}}\off{\afterruleskip}}
\def\y@eol{\y@\line@width \advance\y@-\sign@skip
\advance\y@-\clef@skip \advance\y@-\s@indent}
% hold up the RM-slur calling, because faster coding,
% if the slurs are inside a bar (and you use one kind of \notes)
% and ... there is no limitation in the number of slurs
% if you want to call a short slur, extending to the left use \slur[][][]0
% #1 start pitch #2 final pitch #3 sense(u,d) #4 length[noteskip]
\def\C@slur#1#2#3#4{\check@staff
\inhgetn@i#1\relax \n@ii\n@i
\inhgetn@i#2\relax \relax
\ifx\dott@d\empty \gdef\@dotted{}\else\gdef\@dotted{d}\fi %+ickd
\let\dott@d\empty % set dotted indicator +ickd
\def\@sense{#3}%
\if d\@sense \s@Y-\s@Y \fi
\y@v#4\noteskip
\y@iv\y@v
\advance\y@iv\y@ii
\advance\y@v\y@iii
\kern\y@iv
\writ@slur\n@ii\n@i\y@v\z@
\kernm\y@iv
\fi}
\def\sslur{%
\let\s@N\undefined % do not store instrument number
\s@Y\p@seven\internote
\y@iii-1.2\qn@width % offset to length 1.1behind+.1before
\y@ii-\p@ne\qn@width
\C@slur}
\def\slur{%
\let\s@N\undefined % do not store instrument number
\s@Y1\p@seven\internote
\y@iii\z@
\y@ii\h@lf\qn@width
\C@slur}
\def\stie#1{\sslur{#1}{#1}}
\def\tie#1{\slur{#1}{#1}}
%%% setup fontsizes
\newdimen\interbeam % distance entre poutres
\newdimen\b@amthick % half beamthickness
\newdimen\Interligne% de la base d'une ligne a l'autre
\newdimen\Internote % la moitie de \Interligne
\let\internote\Internote
\def\musixchar{\musixfont\char}
\def\keychar{\musickeyfont\char}
\let\musicnorfont\musictwenty
\def\set@Largenotesize{\let\musixfont\musicLargefont
\let\xgregfont\xgregLargefont
\b@amthick.3456\Interligne \interbeam1.08\Interligne }
\def\set@largenotesize{\let\musixfont\musiclargefont
\let\xgregfont\xgreglargefont
\b@amthick.288\Interligne \interbeam.9\Interligne }
\def\set@normalnotesize{\let\musixfont\musicnorfont
\let\xgregfont\xgregnorfont
\b@amthick.24\Interligne \interbeam\p@seven5\Interligne }
\def\set@smallnotesize{\let\musixfont\musicsmallfont
\let\xgregfont\xgregsmallfont
\b@amthick\p@ne92\Interligne \interbeam.6\Interligne }
\def\set@tinynotesize{\let\musixfont\musictinyfont
\let\xgregfont\xgregtinyfont
\b@amthick\p@ne536\Interligne \interbeam.48\Interligne }
\def\normalnotesize{\set@normalnotesize\comput@specifics
\let\curr@ntsiz@\normalnotesize}
\def\smallnotesize{\set@smallnotesize\comput@specifics
\let\curr@ntsiz@\smallnotesize}
\def\tinynotesize{\set@tinynotesize\comput@specifics
\let\curr@ntsiz@\tinynotesize}
\def\largenotesize{\set@largenotesize\comput@specifics % v.124 RDT
\let\curr@ntsiz@\largenotesize}
\def\Largenotesize{\set@Largenotesize\comput@specifics % v.124 RDT
\let\curr@ntsiz@\Largenotesize}
\def\musickeyfont{%
\ifdim\internote<\p@seven6\Internote \musictinyfont
\else
\ifdim\internote<.95\Internote \musicsmallfont
\else
\ifdim\internote<1.19\Internote \musicnorfont
\else
\ifdim\internote<1.43\Internote \musiclargefont
\else
\musicLargefont
\fi
\fi
\fi
\fi}
\def\meterfont{%
\ifdim\internote<\p@seven6\Internote \metersmallfont
\else
\ifdim\internote<.95\Internote \meternorfont
\else
\ifdim\internote<1.19\Internote \meterbigfont
\else
\ifdim\internote<1.43\Internote \meterlargefont
\else \meterLargefont
\fi
\fi
\fi
\fi}
\def\tabcleffnt{% 1.29 RDT
\ifdim\internote<.95\Internote \tabsmallcleffnt
\else
\ifdim\internote<1.19\Internote \tabnorcleffnt
\else
\ifdim\internote<1.43\Internote \tablargecleffnt
\else \tabLargecleffnt
\fi
\fi
\fi}
\def\tabfnt{% 1.29 RDT
\ifdim\internote<.95\Internote \tabsmallfnt
\else
\ifdim\internote<1.19\Internote \tabnorfnt
\else
\ifdim\internote<1.43\Internote \tablargefnt
\else \tabLargefnt
\fi
\fi
\fi}
\newbox\ch@box
\newcount\musicsize
\newdimen\qd@skip
\newdimen\qn@width
\newdimen\wn@width
\newskip\txt@ff
\newskip\s@indent % store parindent
\newskip\big@spc
\newdimen\lthick \lthick=.4pt
\def\hlthick{\h@lf\lthick}
%%%
\def\normalmusicsize{\musicsize\tw@nty \comput@specifics
\afterruleskip\@ight\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@}
\def\smallmusicsize{\musicsize\sixt@@n \comput@specifics
\afterruleskip\si@\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@}
\def\largemusicsize{\musicsize\@xxiv \comput@specifics
\afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@}
\def\Largemusicsize{\musicsize\@xxix \comput@specifics
\afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@}
\def\comput@fonts{%
\ifnum\musicsize=\sixt@@n
\let\musicLargefont\musictwentyfour
\let\musiclargefont\musictwenty
\let\musicnorfont\musicsixteen
\let\musicsmallfont\musicthirteen
\let\musictinyfont\musiceleven
\let\xgregLargefont\xgregtwentyfour
\let\xgreglargefont\xgregtwenty
\let\xgregnorfont\xgregsixteen
\let\xgregsmallfont\xgregthirteen
\let\xgregtinyfont\xgregeleven
\let\slurd\slurdsixteen \let\sluru\slurusixteen
\let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen
\let\meternorfont\tenbf \let\metersmallfont\eightbf % version 1.16 RDT
\let\meterbigfont\twelvebf \let\meterlargefont\frtbf
\let\meterLargefont\svtbf
\let\tinyppff\ppfftwelve % version 1.17 RDT
\let\smallppff\ppfftwelve
\let\normppff\ppffsixteen
\let\medppff\ppfftwenty
\def\txtfont{\ifdim\internote<.95\Internote \tinytype\it % version 1.22 RDT
\else\ifdim\internote<1.19\Internote \smalltype\it
\else\ifdim\internote<1.43\Internote \Smalltype\it
\else\normtype\it\fi\fi\fi}%
\let\tabnorfnt\tabfntsixteen \let\tablargefnt\tabfnttwenty % 1.34 RDT
\let\tabLargefnt\tabfnttwentyfour \let\tabsmallfnt\tabfntthirteen
\let\tabnorcleffnt\eightdc \let\tablargecleffnt\tendc
\let\tabLargecleffnt\twelvedc \let\tabsmallcleffnt\sixdc
\def\tabstringfnt{\ifdim\internote<.95\Internote \fourss % 1.29 RDT
\else\ifdim\internote<1.19\Internote \fivess
\else\ifdim\internote<1.43\Internote \sevenss
\else\eightss\fi\fi\fi}%
\else\ifnum\musicsize=\@xxiv
\let\musicLargefont\musictwentynine
\let\musiclargefont\musictwentynine
\let\musicnorfont\musictwentyfour
\let\musicsmallfont\musictwenty
\let\musictinyfont\musicsixteen
\let\xgregLargefont\xgregtwentynine
\let\xgreglargefont\xgregtwentynine
\let\xgregnorfont\xgregtwentyfour
\let\xgregsmallfont\xgregtwenty
\let\xgregtinyfont\xgregsixteen
\let\sluru\slurutwenty \let\slurd\slurdtwenty
\let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
\let\meternorfont\frtbf \let\metersmallfont\twelvebf % version 1.18 RDT
\let\meterbigfont\svtbf \let\meterlargefont\twtybf
\let\meterlargefont\twfvbf
\let\tinyppff\ppffsixteen
\let\smallppff\ppfftwenty
\let\normppff\ppfftwentyfour
\let\medppff\ppfftwentynine
\def\txtfont{\ifdim\internote<.95\Internote \smalltype\it % version 1.22 RDT
\else\ifdim\internote<1.19\Internote \Smalltype\it
\else\ifdim\internote<1.43\Internote \normtype\it
\else\medtype\it\fi\fi\fi}%
\let\tabnorfnt\tabfnttwentyfour \let\tablargefnt\tabfnttwentynine % 1.34 RDT
\let\tabLargefnt\tabfnttwentynine \let\tabsmallfnt\tabfnttwenty
\let\tabnorcleffnt\twelvedc \let\tablargecleffnt\frtdc
\let\tabLargecleffnt\svtdc \let\tabsmallcleffnt\tendc
\def\tabstringfnt{\ifdim\internote<.95\Internote \sixss % 1.29 RDT
\else\ifdim\internote<1.19\Internote \eightss
\else\ifdim\internote<1.43\Internote \niness
\else\twelvess\fi\fi\fi}%
\else\ifnum\musicsize=\@xxix
\let\musicLargefont\musictwentynine
\let\musiclargefont\musictwentynine
\let\musicnorfont\musictwentynine
\let\musicsmallfont\musictwentyfour
\let\musictinyfont\musictwenty
\let\xgregLargefont\xgregtwentynine
\let\xgreglargefont\xgregtwentynine
\let\xgregnorfont\xgregtwentynine
\let\xgregsmallfont\xgregtwentyfour
\let\xgregtinyfont\xgregtwenty
\let\sluru\slurutwenty \let\slurd\slurdtwenty
\let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
\let\slurud\slurutwentyd \let\slurdd\slurdtwentyd % +ickd
\let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd
\let\meternorfont\svtbf \let\metersmallfont\frtbf % version 1.18 RDT
\let\meterbigfont\twtybf \let\meterlargefont\twfvbf % version 1.24 typos corrected
\let\meterLargefont\twfvbf
\let\tinyppff\ppfftwenty
\let\smallppff\ppfftwentyfour
\let\normppff\ppfftwentynine
\let\medppff\ppfftwentynine
\def\txtfont{\ifdim\internote<.95\Internote \normtype\it % version 1.22 RDT
\else\ifdim\internote<1.19\Internote \medtype\it
\else\ifdim\internote<1.43\Internote \bigfont\it
\else\Bigfont\it\fi\fi\fi}%
\let\tabnorfnt\tabfnttwentynine \let\tablargefnt\tabfnttwentynine % 1.34 RDT
\let\tabLargefnt\tabfnttwentynine \let\tabsmallfnt\tabfnttwentyfour
\let\tabnorcleffnt\frtdc \let\tablargecleffnt\svtdc
\let\tabLargecleffnt\twtydc \let\tabsmallcleffnt\twelvedc
\def\tabstringfnt{\ifdim\internote<.95\Internote \eightss % 1.29 RDT
\else\ifdim\internote<1.19\Internote \niness
\else\ifdim\internote<1.43\Internote \twelvess
\else\frtss\fi\fi\fi}%
\else
\ifnum\musicsize=\tw@nty
\else\ifnum\musicsize=\z@
\else\errmessage{\noexpand\musicsize=\the\musicsize\space not supported,
set to default of 20}%
\fi
\fi\musicsize\tw@nty
\let\musicLargefont\musictwentynine
\let\musiclargefont\musictwentyfour
\let\musicnorfont\musictwenty
\let\musicsmallfont\musicsixteen
\let\musictinyfont\musicthirteen
\let\xgreglargefont\xgregtwentyfour
\let\xgregLargefont\xgregtwentynine
\let\xgregnorfont\xgregtwenty
\let\xgregsmallfont\xgregsixteen
\let\xgregtinyfont\xgregthirteen
\let\sluru\slurutwenty \let\slurd\slurdtwenty
\let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty
\let\meternorfont\twelvebf \let\metersmallfont\tenbf % version 1.18 RDT
\let\meterbigfont\frtbf \let\meterlargefont\svtbf
\let\meterLargefont\twtybf
\let\tinyppff\ppfftwelve
\let\smallppff\ppffsixteen
\let\normppff\ppfftwenty
\let\medppff\ppfftwentyfour
\def\txtfont{\ifdim\internote<.95\Internote \smalltype\it
\else\ifdim\internote<1.19\Internote \Smalltype\it
\else\ifdim\internote<1.43\Internote \normtype\it
\else\medtype\it\fi\fi\fi}%
\let\tabnorfnt\tabfnttwenty \let\tablargefnt\tabfnttwentyfour % 1.34 RDT
\let\tabLargefnt\tabfntwentynine \let\tabsmallfnt\tabfntsixteen
\let\tabnorcleffnt\tendc \let\tablargecleffnt\twelvedc
\let\tabLargecleffnt\frtdc \let\tabsmallcleffnt\eightdc
\def\tabstringfnt{\ifdim\internote<.95\Internote \fivess % 1.29 RDT
\else\ifdim\internote<1.19\Internote \sixss
\else\ifdim\internote<1.43\Internote \eightss
\else\niness\fi\fi\fi}%
\fi\fi\fi}%
\def\comput@specifics{\comput@fonts\comput@sizes}
\def\comput@sizes{%
\Interligne\fontdimen\fiv@\musicnorfont
\Internote\h@lf\Interligne \big@spc.6\Interligne
\qn@width\fontdimen\si@\musixfont
\wn@width1\qu@rt\qn@width
\txt@ff\h@lf\qn@width
\qd@skip\qn@width\advance\qd@skip-\hlthick}
%\newdimen\afterruleskip
\newskip\afterruleskip
\newdimen\staffbotmarg % marge au-dessous des portees
\newdimen\stafftopmarg % au-dessus des portees
\newdimen\line@width
\def\normalvalue{1}
\def\largevalue{1.2}
\def\Largevalue{1.44}
\def\smallvalue{.8}
\def\tinyvalue{.64}
\def\instrumentnumber#1{\n@v#1\relax
\min@n@v\@ne
\max@n@v\maxinstruments
\edef\nbinstruments{\the\n@v}}
% staffsize
\def\setsize#1#2{\n@v#1\relax % select instrument
\expandafter\edef\csname staffspacing\romannumeral\n@v\endcsname{#2}}
% [version 1.15] moved out to the new register allocation code
% \let\staffspacingi\@ne
% number of staffs
\def\setstaffs#1#2{\n@v#1\relax \csname n@p\romannumeral\n@v\endcsname#2}
% staff lines
\def\setlines#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname n@l\romannumeral\n@v\endcsname{#2}}
\newdimen\interportee % distance between staffs of the same instrument (incl)
\newcount\noport@@
\newcount\noinstrum@nt
\newdimen\altportee
\def\interstaff#1{\def\interfacteur{#1}}
\def\s@l@ctinstr{%
\ifnum\noinstrum@nt>\maxinstruments % [version 1.15] -- from here --
\errmessage{Wrong instrument reference number \the\noinstrum@nt, maxinstruments=\the\maxinstruments}
\fi % [version 1.15] -- until here --
\edef\altitude{\csname k@i\romannumeral\noinstrum@nt\endcsname}%
\edef\st@ffs{\csname n@p\romannumeral\noinstrum@nt\endcsname}%
\edef\nblines{\csname n@l\romannumeral\noinstrum@nt\endcsname}%
\edef\internote{\csname i@n\romannumeral\noinstrum@nt\endcsname}%
\edef\int@rf{\csname interfacteur\romannumeral\noinstrum@nt\endcsname}% RDT 1.24
\interportee\int@rf\internote \interportee\tw@\interportee}% RDT 1.26
\def\C@Inter{% RDT: corrected to work if \nblines > 6 (version 1.23)
% RDT: corrected for \nblines < 4 (version 1.28)
\stem@skip\interportee
\ifnum\nblines<\f@ur
\advance\stem@skip-\@ight\internote
\else
\advance\stem@skip-\nblines\internote
\advance\stem@skip-\nblines\internote
\advance\stem@skip\tw@\internote
\fi}
%%% loop over instruments and staffs
\def\count@portee{\advance\noport@@\@ne}
\def\n@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\nbinstruments
\advance\noinstrum@nt\@ne \s@l@ctinstr}
\def\m@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\maxinstruments
\advance\noinstrum@nt\@ne}
\def\p@loop{\noport@@\z@ \loop\ifnum\noport@@<\st@ffs
\altportee\altitude \advance\altportee\noport@@\interportee}
\def\Comp@High{\y@v\st@ffs\interportee \C@Inter\advance\y@v-\stem@skip}
% to be used to make heavy bars at staff left
% modified according to Werner Icking
\def\groupbottom#1#2{\group@no#1\relax
\advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1...
\expandafter\def\csname lowersonginstrum\romannumeral\group@no\endcsname{#2}}
\def\grouptop#1#2{\group@no#1\relax
\advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1...
\expandafter\def\csname uppersonginstrum\romannumeral\group@no\endcsname{#2}}
\def\songbottom{\groupbottom1}
\def\songtop{\grouptop1}
% [version 1.15] moved out to the new register allocation code
% \let\lowersonginstrumi\maxdimen
% \let\uppersonginstrumi\z@
\def\g@loop{\group@no\z@ \loop\ifnum\group@no<\maxgroups
\s@l@ctgroup}
\def\s@l@ctgroup{%
\relax\test@grnum
\edef\g@b{\csname g@b\romannumeral\group@no\endcsname}% dimen (group bottom)
\edef\g@h{\csname g@h\romannumeral\group@no\endcsname}% dimen (group top)
\edef\lowersonginstrum{\csname lowersonginstrum\romannumeral\group@no\endcsname}% dimen (group top)
\edef\uppersonginstrum{\csname uppersonginstrum\romannumeral\group@no\endcsname}% dimen (group top)
}%
\def\test@grnum{%
\ifnum\group@no<\z@ \group@no\@c \fi
\ifnum\group@no<\maxgroups \else
\count@\maxgroups \advance\count@\m@ne
\errmessage{Wrong group reference number \the\group@no! (valid: 0 to \the\count@)}% [version 1.15]
\group@no\z@% [version 1.15]
\fi
\advance\group@no\@ne}
% \nobarmessages prevents bar messages
\def\nobarmessages{\let\no@b\@ne}
\let\no@b\empty
% \nolinemessages prevents line messages in phase three
\def\nolinemessages{\let\no@l\@ne}
\let\no@l\empty
% \nobarnumbers prevents bar numbering (Ian Collier)
% \barnumbers restores bar numbering
\def\nobarnumbers{\let\lin@bar\empty \let\freqbarno\maxdimen}
\def\barnumbers{\let\freqbarno\normalvalue}
\barnumbers
% show barnumbers only at the beginning system
\def\raisebarno{\f@ur\internote}
\let\shiftbarno\z@
\def\writebarno{\boxit{\eightbf\the\barno\barnoadd}}
\def\systemnumbers{\nobarnumbers\let\lin@bar\@ne}
% add 'a' behind the systembarnumber, if the previous line ended without
% a bar rule
\let\z@sw\empty
\def\writezbarno{a}
\def\barnoadd{\ifx\z@sw\@ne \writezbarno \fi}
% suppress the beginning vertical rule for single-staff scores
\def\startrule{\let\b@rule\empty}
\def\nostartrule{\let\b@rule\z@}
\startrule
%%% distance between instruments (added to \interportee)
% [version 1.15] moved out to the above of the new register allocation code
% \newdimen\interinstrument
% [version 1.15] moved out to the new register allocation code
% \let\interinstrumenti\interinstrument
\def\setinterinstrument#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname interinstrument\romannumeral\n@v\endcsname{#2}}%
\def\setinterstaff#1#2{\n@v#1\relax % select instrument RDT 1.24
\expandafter\def\csname interfacteur\romannumeral\n@v\endcsname{#2}}%
%%% portees
\newdimen\systemheight
\newdimen\altplancher
% New version by Werner Icking
\def\writ@staffs{%
\y@\staffbotmarg \global\altplancher\staffbotmarg
\rlap{\n@loop\w@st\repeat
% beginning vertical rule
\systemheight\y@
\advance\systemheight-\altplancher
\C@Inter \global\advance\systemheight-\stem@skip
\ifx\empty\b@rule \raise\altplancher\rlap{%
\vrule\@depth\hlthick\@height\systemheight\@width\lthick}\fi
% 'Akkoladenklammer' don't know the english word
\g@loop
\ifnum\uppersonginstrum<\lowersonginstrum
\else
\noinstrum@nt\uppersonginstrum\s@l@ctinstr\C@Inter
\global\advance\g@h-\stem@skip \global\advance\g@h-\g@b
\global\advance\g@h\Interligne \global\advance\g@b-\Internote
\raise\g@b\llap{\uplap{\offinterlineskip
\set@normalnotesize\hbox{\musixfont\fourt@@n}\hbox{\vrule\@height\g@h
\@width\internote}\hbox{\musixfont\fiv@t@@n}}\kern\internote}%
\fi
\repeat
% systembarnumbers
\ifx\lin@bar\@ne \y@\altplancher \advance\y@\systemheight
\advance\y@\raisebarno \raise\y@\rlap{\kern\shiftbarno\writebarno}\fi
% strut
\advance\stafftopmarg\staffbotmarg
\raise\stafftopmarg\hbox{\vrule\@height\systemheight\@width\z@}}}
\def\uplap#1{\vbox\@to\z@{\vss#1}}
% new version of \w@st by Werner Icking
\newskip\instrum@in@group
\def\w@st{%
\global\noport@@\z@ \global\altitude\y@
\global\instrum@in@group=\z@
{\g@loop
\ifnum\noinstrum@nt=\lowersonginstrum
\global\g@b\altitude
\fi
\ifnum\uppersonginstrum>\lowersonginstrum\relax
\ifnum\noinstrum@nt<\lowersonginstrum\relax
\else
\ifnum\noinstrum@nt>\uppersonginstrum\relax
\else
% \message{\the\noinstrum@nt\space in-group!}%
\global\instrum@in@group=2\internote
\fi
\fi
\fi
\repeat}%
% nullportee
\ifnum\st@ffs=\z@
\advance\y@\f@ur\Interligne
\else
% multportee
\ifnum\st@ffs>\@ne \Comp@High\n@v\y@v \sp@pt\tw@
\advance\n@v\@cxxviii \divide\y@v\tw@
%==== the parenthesis should be shifted to the left if within
%==== songbottom -- songtop
\advance\y@v\y@
\raise\y@v\hbox{\kern -\instrum@in@group\mxsps\char\n@v\kern\instrum@in@group}%
\fi
% normal staff
{\loop \staff@lines\ifnum\noport@@<\st@ffs \repeat}%
\fi % fin du \else pour 0 portees=chant
{\g@loop
\ifnum\noinstrum@nt=\uppersonginstrum \global\g@h\y@ \fi
\repeat}%
\ifnum\noinstrum@nt<\nbinstruments
\advance\y@\csname interinstrument\romannumeral\noinstrum@nt\endcsname \fi}
\def\staff@lines{\raise\y@\rlap{\uplap{%
\ifcase\nblines
\or \Lin@\zLin@\zLin@
\or \Lin@\zLin@\Lin@\zLin@
\or \Lin@\zLin@\Lin@\zLin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@
\or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@
\fi\kernm\hlthick}}%
\global\advance\y@\interportee \count@portee}
\def\zLin@{\kern\tw@\internote}
\def\Lin@{\zLin@\kernm\lthick\hrule\@width\line@width}
\newskip\boxitsep \boxitsep\thr@@\p@\relax
\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern\boxitsep\vbox{%
\kern\boxitsep\hbox{#1}\kern\boxitsep}\kern\boxitsep\vrule}\hrule}}
\def\circleit#1{\setbox\ch@box\hbox{#1}\y@v\ht\ch@box
\y@v1.41\ht\ch@box % => sqrt(2)
\n@v\y@v \sp@pt\tw@ \advance\n@v69\rlap{#1}%
\raise\h@lf\ht\ch@box\rlap{\kern\h@lf\wd\ch@box\mxsps\char\n@v}}
\def\thinrul@{\writ@rule\lthick}
\def\thickrul@{\writ@rule\big@spc}
%%% start normal score
%%
% Define a counter to keep track of total number of bars in piece
% which are terminated by a barline. This is not necessarily
% the same as \barno, in view of (eg) a bar containing
% multiple bars rest.
%%
% !!! \barsinpi@c@ now used for \zbar and \xbar too, if you use them
% the value of \barsinpi@c@ says nothing !!!
%
\newcount\barsinpi@c@
\newcount\barno
\newcount\startbarno \startbarno\@ne
\newdimen\sign@skip
\newdimen\maxsign@skip
\def\piece@begina{\catcodesmusic \barno\startbarno \@l@mskip\elemskip
\barsinlin@\z@ \let\z@sw\empty \frenchspacing
% \let\barrul@\thinrul@ \comp@internote} %-simick
\b@rrul@\comp@internote} %+simick
\def\comp@internote{\comput@specifics
\n@loop
\internote\csname staffspacing\romannumeral\noinstrum@nt\endcsname\Internote
\repeat
\line@width\hsize}
\def\piece@beginb{\advance\line@width-\parindent \s@indent\parindent
\writ@staffs \writ@names \advance\line@width\parindent}
\def\piece@beginc{%
% write clefs
\n@loop{\writ@clefi}\repeat \kern\clef@skip
% everystaff stuff
\everyst@ff
% write signatures
\sign@skip\z@ \n@loop{\s@l@ctsigns \let\@Ti\writ@sign \C@wsi}\repeat
\kern\sign@skip \m@loop \s@l@ctsigns \o@s\a@s \s@l@ctclefs \o@c\a@c \repeat
\let\Writ@newsigns\empty \hskip\z@ plus\p@ minus\p@ \lastbarpos\z@}
\let\fil@begin\empty
\let\Writ@meters\empty
\def\startpiece{\ifstartmuflex@done\relax
\else\startmuflex
\immediate\write16{\noexpand\startmuflex launched by
\noexpand\startpiece }%
\fi
\barsinpi@c@\z@ \piece@begina \leavevmode \piece@beginb
\piece@beginc \fil@begin \Writ@meters\lastbarpos\lin@pos %%% 1.21: added \lastbarpos setting
\let\volta@set\empty % tells the kind of volta setting at next bar
\let\volta@cut\empty % flag to tell that a volta has been cut at line end
\let\volta@type\empty % the current volta setting (same defs as \volta@set)
\let\endvolta@set\empty % tells the kind of volta closing at next bar
\let\pdl@cut\empty % flag to signal a pedal rule has been cut at the end of a line % 1.21 RDT
}
\let\everystaff\empty
\def\everyst@ff{\everystaff}% --> MuFlex Pass II
%%% continue score
\let\atnextline\empty
\def\piece@conta{\catcodesmusic \atnextline \let\atnextline\empty
\comp@internote \leavevmode \barsinlin@\z@ }
\def\contpiece{\noindent \piece@conta \writ@staffs \piece@beginc
\Writ@meters\wbarno@x\lastbarpos\lin@pos\addspace\afterruleskip %%% 1.21: added \lastbarpos setting
}
% like contpiece but with indentation (parindent) and instrument names
% it's for changing the number of instrument in one piece
\let\fil@indent\empty
\def\Contpiece{\piece@conta \piece@beginb \fil@indent \piece@beginc
\Writ@meters\lastbarpos\lin@pos} %%% 1.21: added \lastbarpos setting
%%% end score
\let\ragg@d\empty
\let\z@suspend@autoflag\empty % used in musixcpt only
\def\z@suspend{%
\z@suspend@autoflag % used in musixcpt only
% cut pedal rule 1.21 RDT
\ifdim\pdl@pos=\z@\else%
\noport@@\z@
\znotes\selectinstrument{\pdl@instr}\selectstaff{\pdl@staff}\pdlc@\en%
\global\def\pdl@cut{\@one}%
\fi
% cutvolta
\write@volta@hrule
\ifx\volta@type\tw@\let\volta@set\tw@ \let\volta@type\empty
\let\volta@cut\tw@\fi % restart volta at next line if continuous
\ifx\volta@type\thr@@\let\volta@set\thr@@ \let\volta@type\empty
\let\volta@cut\thr@@ \fi % restart volta at next line if continuous
% cutoctline
\o@loop
\ifdim\o@x<\maxdimen \let\T@ii\n@ii \C@TO \o@x\z@ \fi
\repeat
% cut trill
\tr@loop
\ifdim\tr@x<\maxdimen \let\T@ii\n@ii \C@TR \tr@x\z@ \fi
\repeat
% cutslur
\ifnum\N@s>\z@% % any pending slurs ?
\n@viii\maxslurs % test all possible slur numbers [version 1.15] (Hiroaki)
\advance\n@viii\m@ne
\loop\ifnum\n@viii>\m@ne
\s@l@ctslur\n@viii\relax
\edef\@sense{\the\s@s}%
\if x\@sense% % sense flag
\else% % found slur
\edef\@dotted{\the\s@d}% +ickd
\y@v\lin@pos % get current position
\advance\y@v-\s@x % slurlength = currentpos - startpos
\let\@Ti\@ne % set flag for \writ@slur (\staffbotmarg)
\ifnum\s@z=\maxdimen \s@z\s@y \fi % flag (\breakslur not used -> tie)
\writ@slur\s@y\s@z\y@v\p@% avoid touching the bar rule
\s@x\z@% reset startpos for next line
\s@z\maxdimen% reset breakslur
\fi
\advance\n@viii\m@ne \repeat
\fi\s@indent\z@
%
\ragg@d\par\lin@pos\z@ \endcatcodesmusic}
\def\stoppiec@{\check@nopen\n@wbar\z@suspend}
%\def\stoppiece{\stoppiec@\@nds@ction} %-simick
\def\stoppiece{\T@bil\fi\stoppiec@\@nds@ction} %+simick
\let\endpiece\stoppiece
\def\zstoppiec@{\check@nopen\zn@wbar\z@suspend}
%\def\zstoppiece{\zstoppiec@\@nds@ction} %-simick
\def\zstoppiece{\T@bil\fi\zstoppiec@\@nds@ction}%+simick
% if you need a line which appears ragged
\def\raggedstoppiece{\ifx\ragg@d\empty \fil@{r}\fi % version 1.18 RDT (from musixext)
\check@nopen\n@wbar\hfill\z@suspend\@nds@ction}
\def\zendpiece{\setemptybar\raggedstoppiece} % RDT version 1.31
\def\Stoppiece{\setdoubleBAR\stoppiece}
\let\Endpiece\Stoppiece
%%% short excerpts
\def\startextract{\lastbarno\z@ \barno\startbarno
\piece@begina\setbox\w@rkbox\hbox{\writ@staffs}% to compute heights
\setbox\w@rkbox\hbox\bgroup% !! all changes are local !!
\line@width\maxdimen
\maxbarsinlin@\maxdimen %+simick
\let\T@bil\iftrue \let\everyst@ff\everystaff \let\fil@spc\empty
\let\fil@termskip\empty \let\fil@signs\empty \let\fil@barno\empty
\let\leftrepeat\leftrepeat@II \let\leftrightrepeat\leftrightrepeat@II
% \let\doublebar\doublebar@II % commented out by RDT version 1.32
\piece@beginc\Writ@meters\lastbarpos\lin@pos\let\pdl@cut\empty\addspace\afterruleskip}
%%% 1.21: added \lastbarpos and \pdl@cut settings
% enable left and right extracts (e.g. for footnotes)
\let\extractline\centerline
\def\endextract{\let\z@suspend\write@volta@hrule
\stoppiec@\egroup\line@width\wd\w@rkbox
\extractline{\writ@names\writ@staffs\unhbox\w@rkbox}%
\endcatcodesmusic}
\def\zendextract{\let\stoppiec@\zstoppiec@ \endextract}
%%
% Redefine \t@rmskip to include a macro for writing a record to a file,
% and define the macro
%%
\newdimen\x@skip
\newdimen\n@skip
\let\fil@termskip\empty
\def\t@rmskip{\kern\n@skip\advance\x@skip\n@skip
\advance\lin@pos\x@skip
% case of \hardnotes
\ifnum\V@sw>0\relax
\y@v\n@skip \fil@spc
\fi
% end case \hardnotes
\fil@termskip\global\n@skip\z@ \global\x@skip\z@ \let\V@sw\z@}
%%
% Define the amount of space before each barline,
%%
%\newdimen\beforeruleskip
\newskip\beforeruleskip
%%
% We must distinguish between scalable ('soft'=1) material in the bar
% (eg noteboxes) and absolute ('hard'=0) widths such as those from
% barlines and clef symbols
% Hence introduce a switch defining this attribute
%%
\newcount\widthtyp@ \widthtyp@\@ne
%%% bar numbers
\newcount\lastbarno
\def\writethebarno{\fontbarno\the\barno\kernm\qn@width}
\def\fontbarno{\it}
\def\wbarno@x{%%%% version 1.21: RDT moved \lastbarpos\lin@pos after calls to \Writ@meters
\ifx\volta@set\empty
\n@iii\barno \divide\n@iii\freqbarno\relax
\ifnum\n@iii=\lastbarno
\else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote
\raise\y@\llap{\writethebarno}\fi
\else
\ifx\volta@cut\empty
\else % volta was cut, there is nothing colliding with bar number.
\n@iii\barno \divide\n@iii\freqbarno\relax
\ifnum\n@iii=\lastbarno
\else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote
\raise\y@\llap{\writethebarno}\fi
\fi
\write@volta
\fi
\ifx\pdl@cut\empty % 1.21 RDT
\else% pedal rule was cut at the end of the previous line
\global\pdl@pos\lin@pos\let\pdl@cut\empty % reset \ped@pos
\fi
\b@rrul@ %+simick
\n@iii\barno \divide\n@iii\freqbarno\relax \lastbarno\n@iii }
%%% pass selective scoring
\newskip\cut@v % contains width of bar rule
\newskip\init@volta@pos % start position of volta
\newskip\volta@startcor %+simick volta start correction in case of leftrepeats
\newskip\volta@endcor %+simick volta end correction in case of rightrepeats
\def\raisevolta{\f@ur\internote}
\newbox\writ@volta@box
\def\voltadot{.}%
\def\write@volta{% writes the requested |n. and moves the things for further use
\ifx\volta@type\empty\else\errmessage{/setvolta collision!}\fi
\y@\altplancher \advance\y@\systemheight
\advance\y@\raisevolta
% \setbox\writ@volta@box\rlap{\vrule % \musixfont\sixt@@n %-simick
% \rm\ \vphantom{\^{\volta@text}\strut gq}\volta@text\voltadot}% %-simick
\setbox\writ@volta@box\rlap{\vrule\rm\strut\ \volta@text\voltadot}% %+simick
\xdef\thevolta@boxheight{\the\ht\writ@volta@box}%
\xdef\thevolta@boxdepth{\the\dp\writ@volta@box}%
\ifx\volta@cut\empty \else\setbox\writ@volta@box\null
\fi % if continuation, make writ@volta@box null
% \raise\y@\llap{\box\writ@volta@box}% %-simick
\kernm\volta@startcor\raise\y@\llap{\box\writ@volta@box}\kern\volta@startcor %+simick
\let\volta@type\volta@set
\let\volta@set\empty
\let\volta@cut\empty
% \init@volta@pos\lin@pos\relax %-simick
\init@volta@pos\lin@pos \advance\init@volta@pos-\volta@startcor %+simick
}%
\def\write@volta@hrule{% write the hrule of volta bar at its end
\ifx\volta@type\empty
\else
\y@v\lin@pos \advance\y@v-\init@volta@pos
% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick
% \global\advance\cut@v\lthick %-simick
\ifnum\barsinlin@=\maxbarsinlin@ %+simick
\y@i\z@ %+simick
\else %+simick
\y@i\cut@v \advance\y@i-\volta@endcor %+simick
\fi %+simick
\advance\y@v-\y@i %+simick
\y@\altplancher \advance\y@\systemheight
\advance\y@\raisevolta
\raise\y@\llap{%
\raise\thevolta@boxheight
% \hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}}% %-simick
\hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}\kern\y@i}% %+simick
% check whether termination has been required
\ifx\endvolta@set\thr@@ \let\volta@type\thr@@\fi % \endvoltabox forces type \thr@@
\ifx\endvolta@set\empty \else \write@volta@endbox\fi
% now set volta@type \@ne to \empty
\ifx\volta@type\@ne \let\volta@type\empty\fi
\fi
}%
\def\write@volta@endbox{% write the hrule of volta bar at its end
\ifx\volta@type\empty
\else
% \y@v\lin@pos \advance\y@v-\init@volta@pos %-simick
% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick
% \global\advance\cut@v\lthick %-simick
\y@\altplancher \advance\y@\systemheight
\advance\y@\raisevolta
\ifx\volta@type\thr@@
% \raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}}% %-simick
\raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}\kern\y@i}%+simick
\fi
% now force volta@type to \empty
\let\volta@type\empty
\let\endvolta@set\empty
\let\volta@cut\empty
\fi
}%
%\check
\let\writ@volta\empty % provisional for testing %
\let\volta@set\empty % tells the kind of volta setting at next bar
% \@ne = single \setvolta, \tw@ = \Setvolta
% \thr@@ = setvoltabox
\let\volta@type\empty % the current volta setting (same defs as \volta@set)
\let\volta@cut\empty
\let\endvolta@set\empty % tells the kind of volta closingg at next bar
% \@ne = not used, \tw@ = terminate \Setvolta[box]
% \thr@@ = terminate \Setvolta[box] with an ending hook
\def\setvolta{\let\volta@set\@ne \gen@setvolta}
\def\Setvolta{\let\volta@set\tw@ \gen@setvolta}
\def\setvoltabox{\let\volta@set\thr@@ \gen@setvolta}
\def\gen@setvolta#1{\def\volta@text{#1}}
\def\setendvolta{%
\ifx\volta@type\empty\volta@err
\else\let\endvolta@set\tw@
\fi}
\def\setendvoltabox{%
\ifx\volta@type\empty\volta@err
\else\let\endvolta@set\thr@@
\fi}
\let\endvolta\setendvolta
\let\endvoltabox\setendvoltabox
\def\true@endvoltabox{\raise-\thevolta@boxheight
\llap{\vrule\@height\thevolta@boxheight \@depth\thevolta@boxdepth}}
\def\volta@err{\immediate\write16{%
type=\ifx\volta@type\empty 0\else \number\volta@type\fi,
set=\ifx\volta@set\empty 0\else \number\volta@set\fi}%
\errmessage{\noexpand\endvolta, %\noexpand\contvolta,
\noexpand\endvoltabox\space does not match opening \noexpand\S[s]volta...}}
%%% line breaking stuff
\let\@nds@ction\empty
\newcount\barsinlin@
\newcount\maxbarsinlin@
%\def\@LeftRp{\stoppiec@\contpiece\addspace{\h@lf\afterruleskip}% %-simick
% \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip} %-simick
\def\@LeftRp{\stoppiec@\l@@ftrepeat\advance\volta@startcor-\afterruleskip %+simick
\contpiece\addspace{\h@lf\afterruleskip}% %+simick
\kernm\afterruleskip\l@eftrepeat\kern\afterruleskip %+simick
\advance\lastbarpos\afterruleskip \b@rrul@} %+simick
\def\@LeftRpCont{\stoppiec@\l@@ftrepeat\advance\volta@startcor-\afterruleskip % RDT 1.28
\let\z@sw\@ne % turn on continuation bar number
\contpiece\addspace{\h@lf\afterruleskip}%
\kernm\afterruleskip\l@eftrepeat\kern\afterruleskip%
\advance\lastbarpos\afterruleskip \b@rrul@}
\def\T@bil{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinlin@}
\def\barre{\T@bil \@bar\else\stoppiec@\contpiece \fi}
\def\xbar{\@bar\advance\barsinpi@c@\m@ne}
\def\zbar{\T@bil \zn@wbar\else\zstoppiec@\contpiece \fi}
\def\alaligne{\stoppiece\contpiece}
\def\zalaligne{\zstoppiece\contpiece}
% ...@II means used in the *second* tex pass
\def\leftrepeat@II{%
\T@bil
\setleftrepeat\@bar
\else
\@LeftRp %
\fi}
\def\zleftrepeat@II{% % RDT 1.28
\advance\barno\m@ne%
\T@bil
\setleftrepeat\@bar%
\else
\@LeftRpCont% % RDT 1.28
\fi}
\let\leftrepeat\leftrepeat@II
\let\zleftrepeat\zleftrepeat@II % RDT 1.28
\def\zzleftrepeat{% % RDT 1.28
\advance\barno\m@ne%
\stoppiece%
\let\z@sw\@ne%
\contpiece%
\advance\barno\m@ne%
\leftrepeat%
}
\def\leftrightrepeat@II{%
\T@bil
\setleftrightrepeat\@bar
\else
\setrightrepeat\@LeftRp
\fi}
\def\zzrightrepeat{% % RDT 1.28
\advance\barno\m@ne%
\setrightrepeat\stoppiece
\let\z@sw\@ne
\contpiece
}
\def\zrightrepeat{% % RDT 1.28
\advance\barno\m@ne
\setrightrepeat
\T@bil
\@bar
\else
\stoppiec@
\let\z@sw\@ne
\contpiece
\fi}
\def\zzleftrightrepeat{% % RDT 1.28
\advance\barno\m@ne%
\setrightrepeat%
\stoppiece%
\let\z@sw\@ne%
\contpiece%
\advance\barno\m@ne%
\leftrepeat% % RDT revised 1.30
}
\def\zleftrightrepeat@II{% % RDT 1.28
\advance\barno\m@ne
\T@bil
\setleftrightrepeat\@bar
\else
\stoppiec@
\let\z@sw\@ne
\contpiece
\fi}
\let\leftrightrepeat\leftrightrepeat@II
\let\zleftrightrepeat\zleftrightrepeat@II % RDT 1.28
\def\zdoublebar{\advance\barno\m@ne\setdoublebar\xbar} % RDT revised 1.32
\def\zzdoublebar{% % RDT 1.31
\advance\barno\m@ne%
\setdoublebar%
\stoppiece%
\let\z@sw\@ne%
\contpiece%
}
\def\zzbar{% % RDT 1.31
\advance\barno\m@ne%
\stoppiece%
\let\z@sw\@ne%
\contpiece%
}
\def\alapage{\stoppiece\eject\contpiece}
\def\zalapage{\zstoppiece\eject\contpiece}
% minuscule: une seule barre
% majuscule: double barre
\let\Writ@newsigns\empty
\def\updat@context{\writ@newclefs
\T@bil \wbarno@x\Writ@newsigns\Writ@meters\lastbarpos\lin@pos\addspace\afterruleskip
%%% 1.21: added \lastbarno setting
\else\Writ@newsigns\z@suspend\contpiece \fi}
\def\changecontext{\showallbarrules\n@wbar\updat@context}
\def\Changecontext{\showallbarrules\setdoublebar\changecontext}
\def\zchangecontext{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip
\zn@wbar\updat@context}
\def\pchangecontext{\showallbarrules\n@wbar
\writ@newclefs\Writ@newsigns\z@suspend\eject\contpiece}
\def\pChangecontext{\setdoublebar\pchangecontext}
%%% bars, repeatbars, ...
%%
% Change ... to add skip \beforeruleskip to the preceeding notebox,
% and to set the 'soft' switch for the output record
%%
%%
% Redefine \n@wbar to write the bar line thickness to file,
% then reset \n@skip and \x@skip
%%
\newskip\lastbarpos
\let\fil@barno\empty
\let\atnextbar\empty
\def\n@wbar{%
\t@rmskip % essai DT
\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip
% \ifdim\cut@v>\z@ \else\ifx\barrul@\thinrul@ \else\global\cut@v.9\Interligne \fi\fi %-simick
% \barrul@\widthtyp@\z@ \fil@termskip\let\barrul@\thinrul@ %-simick
\barrul@\widthtyp@\z@ \fil@termskip %+simick
\advance\barsinpi@c@\@ne \fil@barno
\ifx\no@b\empty \message{bar \the\barno}\fi
\advance\barno\@ne \advance\lin@pos\x@skip \atnextbar \let\atnextbar\empty
\write@volta@hrule %+simick
% \global\cut@v\z@ % <===================================== inserted %-simick
\global\n@skip\z@ \global\x@skip\z@ \let\z@sw\empty
% \write@volta@hrule %-simick
}%
\def\@bar{\n@wbar\wbarno@x\lastbarpos\lin@pos\addspace\afterruleskip}
\def\zn@wbar{\t@rmskip\advance\barsinpi@c@\@ne \let\z@sw\@ne}
\def\small@spc{\addspace{\h@lf\big@spc}}
\def\b@rrul@{\let\barrul@\thinrul@ %+simick
\global\cut@v\lthick \global\volta@endcor-\thr@@\lthick \global\volta@startcor\z@} %+simick
\def\r@ightrepeat{%
\hbox{\writ@colons\addspace\big@spc\thinrul@\small@spc\thickrul@}}
\def\r@@ghtrepeat{% %+simick
\global\cut@v\big@spc \global\advance\cut@v\lthick \global\advance\cut@v\h@lf\big@spc %+simick
\global\volta@endcor\cut@v \global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick
\def\l@eftrepeat{%
\hbox{\thickrul@\small@spc\thinrul@\addspace\big@spc\writ@colons}}
\def\l@@ftrepeat{% %+simick
\global\cut@v\big@spc \global\advance\cut@v\h@lf\big@spc \global\advance\cut@v\lthick %+simick
\global\advance\cut@v\big@spc \global\volta@endcor\z@ \global\volta@startcor\big@spc %+simick
\global\advance\volta@startcor\lthick \global\advance\volta@startcor\h@lf\big@spc} %+simick
\def\l@eftrightrepeat{\hbox{\writ@colons\addspace\big@spc\thickrul@
\small@spc\thickrul@\addspace\big@spc\writ@colons}}
\def\l@@ftrightrepeat{% %+simick
\global\cut@v\big@spc \global\advance\cut@v\big@spc \global\volta@endcor\cut@v %+simick
\global\advance\cut@v\h@lf\big@spc %+simick
\global\volta@startcor\big@spc \global\advance\volta@startcor\big@spc %+simick
\global\advance\cut@v\volta@endcor \global\advance\volta@startcor-\lthick} %+simick
\def\doublebar{\showallbarrules\setdoublebar\barre}% double barre de mesure
%\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}} %-simick
\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}% %+simick
\global\cut@v\lthick \global\advance\cut@v\h@lf\big@spc \global\volta@endcor\cut@v %+simick
\global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick
%\def\setemptybar{\def\barrul@{\relax}} %-simick
\def\setemptybar{\def\barrul@{\relax}% %+simick
\global\cut@v\z@ \global\volta@endcor-\f@ur\lthick \global\volta@startcor\z@} %+simick
\def\setdoublebar{\showallbarrules\global\cut@v.4\Interligne
\global\advance\cut@v\tw@\lthick \global\volta@endcor\z@ \global\volta@startcor\z@ %+simick
\def\barrul@{\thinrul@\addspace{.4\Interligne}\thinrul@}}
\def\rightrepeat{\setrightrepeat\barre}
%\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat} %-simick
\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat \r@@ghtrepeat} %+simick
%\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat} %-simick
\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat \l@@ftrepeat} %+simick
%\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat} %-simick
\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat \l@@ftrightrepeat}%+simick
% write colons on all staffs (a part of [left][right]repeat symbols
%\def\writ@colons{\n@loop{\w@coli}\repeat}
\def\writ@colons{\n@loop{\w@coli}\repeat}
\def\w@coli{\p@loop
{\ifnum\nblines=6\tabc@lsix%
\else\ifnum\nblines=4\tabc@lfour%
\else\raise\altportee\hbox{\raise4\internote\hbox{\keychar55}}\fi\fi}\count@portee\repeat}
%%%% 1.29 RDT
\def\tabc@lsix{\raise\altportee\hbox{%
%\raise7\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% uncomment if wanted
\raise5\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}%
\raise3\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% comment out if unwanted
\raise1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}%
%\raise-1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% uncomment if wanted
}}
%%%% 1.29 RDT
\def\tabc@lfour{\raise\altportee\hbox{%
\raise3\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}%
\raise1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% comment out if unwanted
\raise-1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}%
}}
%%% seperated and full barlines
%\def\rul@full#1{\raise\altplancher\rlap{\vrule\@depth\hlthick
% \@height\systemheight\@width#1}\addspace#1}
\def\rul@full#1{\hbox{\raise\altplancher\rlap{\vrule\@depth\hlthick
\@height\systemheight\@width#1}}\addspace#1}
\def\rul@sep#1{\noport@@\z@\n@loop
\edef\rul@hidden{\csname h@bl\romannumeral\noinstrum@nt\endcsname}%
\Comp@High\hbox{\raise\altitude\rlap{%
% \message{(tw@=\meaning\tw@\space thr@@=\meaning\thr@@\space \number\noinstrum@nt->}\expandafter\show\rul@hidden
\expandafter
\ifx\rul@hidden\relax % if \relax = never hidden
\vrule\@depth\hlthick\@width#1\@height\y@v
\else
\expandafter
\ifx\rul@hidden\thr@@ % if \thr@@ = not hidden one time,
\vrule\@depth\hlthick\@width#1\@height\y@v
\global\expandafter\let\rul@hidden\tw@ % reset to perm. hidden
\else
\expandafter
\ifx\rul@hidden\tw@ % if \tw@ = always hidden
\relax
\else
\expandafter
\ifx\rul@hidden\@ne % if \@ne = hidden only one time
\global\expandafter\let\rul@hidden\relax
\fi
\fi
\fi
\fi}}\repeat\addspace#1}
%== hides (only) next bar line for specified instrument
\def\Hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\@ne}
%== hides all next bar lines for specified instrument
\def\hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\tw@}
%== force showing all bar lines for specified instrument
\def\showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\relax}
%== force showing all bar lines for all instruments
\def\showallbarrules{%
%\ifx\writ@rule\rul@sep\relax
\n@loop
\global\expandafter\let\csname h@bl\romannumeral\noinstrum@nt\endcsname\relax
\repeat
%\fi
}
%== force showing (only) next bar line for specified instrument
\def\Showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\thr@@}
% standard vrules over all instruments
\def\stdbarrules{\let\writ@rule\rul@full }
% separated vrules par instrum
\def\sepbarrules{\let\writ@rule\rul@sep }
\stdbarrules
%%% signs
\def\s@l@ctsigns{\edef\a@s{\csname a@s\romannumeral\noinstrum@nt\endcsname}%
\edef\o@s{\csname o@s\romannumeral\noinstrum@nt\endcsname}}%
\def\setsign#1#2{\noinstrum@nt#1\relax
\let\Writ@newsigns\writ@newsigns % only write them, when they are touched
\s@l@ctsigns % select instrument
\a@s#2\relax %
}
\def\generalsignature#1{\let\Writ@newsigns\writ@newsigns
\m@loop \s@l@ctsigns \a@s#1\repeat}
% Inhibits writing erasing naturals at next change of context
\def\ignorenats{\m@loop \s@l@ctsigns \o@s\z@ \repeat}
\def\changesignature{\t@rmskip\Writ@newsigns}
\def\writ@sign{\ifnum\a@s=\z@ \else
\n@v\@lii
\ifnum\a@s>\z@ \C@sig\t@n
\C@sh\@ne\s@v@n
\C@sh\tw@\@l@v@n
\C@sh\thr@@\@ight
\C@sh\f@ur\fiv@
\C@sh\fiv@\nin@
\C@sh\si@\si@\fi
\n@v\@l
\ifnum\a@s<\z@ \C@sig\si@
\C@fl\@ne\nin@
\C@fl\tw@\fiv@
\C@fl\thr@@\@ight
\C@fl\f@ur\f@ur
\C@fl\fiv@\s@v@n
\C@fl\si@\thr@@\fi
\fi}
\def\C@sh#1#2{\ifnum\a@s>#1\C@sig#2\fi}
\def\C@fl#1#2{\ifnum\a@s<-#1\C@sig#2\fi}
%%
% Augment \writ@newsigns so that
% (1) the space taken by the mid-line sign change is written to the file;
% (2) the new value of \sign@skip is written to the file
% Note that this is not necessarily the same value
% as the mid-line value, which includes cancellation naturals when
% the key signature changes from N flats to M sharps (or vice-versa)
%%
\let\fil@signs\empty
\def\writ@newsigns{\sign@skip\z@
\n@loop{\s@l@ctsigns \let\@Ti\writ@newsign \C@wsi}\repeat
\n@skip\sign@skip \widthtyp@\z@ \t@rmskip
\m@loop \s@l@ctsigns \o@s\a@s \repeat
\let\Writ@newsigns\empty \fil@signs }
\def\upd@width#1{\ifdim#1<\wd\toks@box \global#1\wd\toks@box \fi}
\def\writ@box{\leavevmode\raise\altportee\rlap{\box\toks@box}}
\newcount\ut@ref
\def\get@refs#1#2#3#4{% #1-#4: cle correspondante 0=sol, 5-6=fa, 1-4=ut
\ifcase\noport@@ \ut@ref\z@ \or \ut@ref#1\or \ut@ref#2\or
\ut@ref#3\or \ut@ref#4\fi
\relax \ifnum \ut@ref=9\relax \ut@ref-1\relax\fi
\global\ut@ref\ut@ref }
%\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi
% \ifnum\o@s<\z@ \w@flats\w@sharps\else\w@sharps\w@flats \fi}
\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi
\ifnum\o@s<\z@ \w@cancelflats\w@flats\w@sharps
\else\w@cancelsharps\w@sharps\w@flats \fi}
\def\w@flats{\W@Fl\z@\si@ \W@Fl\@ne\nin@ \W@Fl\tw@\fiv@ \W@Fl\thr@@\@ight
\W@Fl\f@ur\f@ur \W@Fl\fiv@\s@v@n \W@Fl\si@\thr@@}
\def\w@cancelflats{\W@canFl\z@\si@ \W@canFl\@ne\nin@ \W@canFl\tw@\fiv@
\W@canFl\thr@@\@ight \W@canFl\f@ur\f@ur \W@canFl\fiv@\s@v@n \W@canFl\si@\thr@@}
%\def\W@Fl#1#2{%
% \ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi}
\def\W@Fl#1#2{%
\ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\relax\fi \fi}
\def\W@canFl#1#2{%
\ifnum\a@s<-#1\relax\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi}
\def\w@sharps{\W@Sh\z@\t@n \W@Sh\@ne\s@v@n \W@Sh\tw@\@l@v@n
\W@Sh\thr@@\@ight \W@Sh\f@ur\fiv@ \W@Sh\fiv@\nin@ \W@Sh\si@\si@}
\def\w@cancelsharps{\W@canSh\z@\t@n \W@canSh\@ne\s@v@n \W@canSh\tw@\@l@v@n
\W@canSh\thr@@\@ight \W@canSh\f@ur\fiv@ \W@canSh\fiv@\nin@ \W@canSh\si@\si@}
%\def\W@Sh#1#2{%
% \ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi}
\def\W@Sh#1#2{%
\ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\relax\fi \fi}
\def\W@canSh#1#2{%
\ifnum\a@s>#1\relax\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi}
\def\C@wsi{\s@l@ctclefs \p@loop \count@portee \expandafter\get@refs\the\a@c
\setbox\toks@box\hbox{\kern.4\Internote \@Ti \kern.4\Internote}%
\upd@width\sign@skip \writ@box \repeat}
%\def\C@sig#1{\n@iii#1%
% \ifnum\ut@ref>\z@
% \advance\n@iii\ut@ref \advance\n@iii\ut@ref
% \ifnum\ut@ref=\si@ \advance\n@iii-\s@v@n \fi
% \ifnum\ut@ref>\thr@@ \advance\n@iii-\s@v@n \fi
% \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi
%\fi
%\advance\n@iii-\tw@ \raise\n@iii\internote
%\hbox\@to\tw@\internote{\hss\keychar\n@v\hss}}
\def\C@sig#1{\n@iii#1% Correction by W. Icking
\advance\n@iii\ut@ref \advance\n@iii\ut@ref
\ifnum\ut@ref=\si@ \advance\n@iii-\fourt@@n%
\else \ifnum\ut@ref>\z@ \advance\n@iii-\s@v@n \fi\fi
\ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi
\ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi
\ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi
\ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi
\advance\n@iii-\tw@ \raise\n@iii\internote
\hbox\@to\tw@\internote{\hss\keychar\n@v\hss}}
%%% meterindicators
\def\s@l@ctm@t{\edef\m@t{\csname m@t\romannumeral\noinstrum@nt\endcsname}}
\def\setmeter#1#2{\noinstrum@nt#1\relax % select instrument
\let\Writ@meters\writ@meters % only write them, when they are touched
\s@l@ctm@t \m@t{#2\empty\empty\empty}}
\def\generalmeter#1{\let\Writ@meters\writ@meters
\m@loop \s@l@ctm@t \m@t{{#1}{#1}{#1}{#1}}\repeat}
%%
% Redefine \writ@meters to set the 'hard' switch for
% \t@rmskip, indicating that this length is unscaleable
%%
% \meterskip influence the space before !first! writemeters
\newskip\meterskip
\def\writ@meters{\addspace\meterskip \meterskip\z@ \global\n@skip\z@
\n@loop{\writ@meteri}\repeat
\ifdim\n@skip>\z@ \advance\n@skip\big@spc
\widthtyp@\z@ \t@rmskip \fi \let\Writ@meters\empty}
\def\writ@meteri{\s@l@ctm@t \p@loop \setbox\toks@box
\hbox{\expandafter\writ@meterp\the\m@t{}{}{}{}}\upd@width\n@skip
\writ@box \count@portee\repeat}
\def\writ@meterp#1#2#3#4{%
\ifcase\noport@@\hbox{#1}\or \hbox{#2}\or \hbox{#3}\or \hbox{#4}\fi}
\def\meterfrac#1#2{%
\ifnum\nblines=6%
\setbox\toks@box\vbox{\hbox{~\meterfont#1}%
\hbox{~\meterfont #2}}\raise\internote%
\vbox\@to\@ight\internote{\offinterlineskip%
\vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vskip1.5\internote%
\vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss}%
\else\ifnum\nblines=4%
\setbox\toks@box\vbox{\hbox{\ \meterfont#1}%
\hbox{\ \meterfont #2}}\raise-1\internote\vbox\@to\@ight\internote{\offinterlineskip
\vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vss
\vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss}
\else
\setbox\toks@box\vbox{\hbox{\ \meterfont#1}%
\hbox{\ \meterfont #2}}\vbox\@to\@ight\internote{\offinterlineskip
\vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vss
\vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss}
\fi\fi
}
\def\allabreve{% -> 2/2
\ifnum\nblines=6\raise5\internote\hbox{\keychar82}%
\else\ifnum\nblines=4\raise3\internote\hbox{\keychar82}%
\else\raise4\internote\hbox{\keychar82}\fi\fi}
\def\reverseallabreve{%
\ifnum\nblines=6\raise5\internote\hbox{\keychar123}%
\else\ifnum\nblines=4\raise3\internote\hbox{\keychar123}
\else\raise4\internote\hbox{\keychar123}\fi\fi}
\def\meterC{% -> 4/4
\ifnum\nblines=6\raise5\internote\hbox{\musickeyfont\@lxxxiii}%
\else\ifnum\nblines=4\raise3\internote\hbox{\musickeyfont\@lxxxiii}%
\else\raise4\internote\hbox{\musickeyfont\@lxxxiii}\fi\fi}
\def\reverseC{% -> 4/2
\ifnum\nblines=6\raise5\internote\hbox{\keychar84}%
\else\ifnum\nblines=4\raise3\internote\hbox{\keychar84}%
\else\raise4\internote\hbox{\keychar84}\fi\fi}
\def\meterN#1{%
\ifnum\nblines=6\raise3\internote\hbox{\meterfont#1}%
\else\ifnum\nblines=4\raise1\internote\hbox{\meterfont#1}%
\else\raise2\internote\hbox{\meterfont#1}\fi\fi}
\def\meterplus{{\keychar57}}
%%% clefs
\def\s@l@ctclefs{\edef\a@c{\csname a@c\romannumeral\noinstrum@nt\endcsname}%
\edef\o@c{\csname o@c\romannumeral\noinstrum@nt\endcsname}}
% why simple, when it can be done complicated ?
\newtoks\t@c
\def\@fourtoks#1#2#3#4#5+{#1#2#3#4}
\def\setclef#1#2{\noinstrum@nt#1\relax
\ifnum#1<1\errmessage{Instrument number not positive}\fi
\s@l@ctclefs \t@c{#2000}%
\a@c\expandafter\expandafter\expandafter{\expandafter\@fourtoks\the\t@c+}}
\let\setclefs\setclef
\let\bass\si@
\let\alto\thr@@
\let\treble\z@
\def\setclefsymbol#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}%
\expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}%
\expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}%
}%
\def\setbassclefsymbol#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}%
}%
\def\setaltoclefsymbol#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}%
}%
\def\settrebleclefsymbol#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}%
}%
\def\trebleclef{\keychar71}
\def\bassclef{\keychar73}
\def\altoclef{\keychar75}
\def\smalltrebleclef{\keychar72}
\def\smallbassclef{\keychar74}
\def\smallaltoclef{\keychar76}
%% version 1.21: replaced \smalltype\it by \txtfont (size-dependent)
%% and adjusted the kerns RDT
%%
\def\trebleoct{\trebleclef\raise 9\internote\hbox\@to\z@{\txtfont{\kern -3.6\internote 8}\hss}}
\def\bassoct{\bassclef\raise 2\internote\hbox\@to\z@{\txtfont{\kern -4.6\internote 8}\hss}}
\def\treblelowoct{\trebleclef\raise -7.5\internote\hbox\@to\z@{\txtfont{\kern -4.6\internote 8}\hss}}
\def\basslowoct{\bassclef\raise -6\internote\hbox\@to\z@{\txtfont{\kern -5.0\internote 8}\hss}}
% [version 1.15] reqest from Hermann Hinsch
\def\smalltrebleoct{\smalltrebleclef\raise 7.2\internote\hbox\@to\z@{\txtfont{\kern -3.6\internote 8}\hss}}
\def\smalltreblelowoct{\smalltrebleclef\raise-6.8\internote\hbox\@to\z@{\txtfont{\kern -4.2\internote 8}\hss}}
\def\smallbassoct{\smallbassclef\raise 2\internote\hbox\@to\z@{\txtfont{\kern -4.0\internote 8}\hss}}
\def\smallbasslowoct{\smallbassclef\raise-6.5\internote\hbox\@to\z@{\txtfont{\kern -4.4\internote 8}\hss}}
% [version 1.15] reqest from Hermann Hinsch: end
\newskip\clef@skip
\def\changeclefs{\t@rmskip\writ@newclefs}
\def\zchangeclefs{\t@rmskip\zwrit@newclefs}
%%% version 1.21: new command to call and reset \atnextbar before outputting new clefs RDT
\def\Changeclefs{\t@rmskip\atnextbar\let\atnextbar\empty\writ@newclefs}
% since the characters are shifted by default(Metafont) they looked
% a little bit strange when you mix several staffstaffsizes (flushleft)
% I've introduced a hack(kern kernm), that they are (nearly) centered
% (aehmm, really not the best way, because now they look strange
% if you use music footnotes)
\def\writ@clefi{\s@l@ctclefs
\p@loop
\setbox\toks@box\hbox{\expandafter\writ@clefp\the\a@c}%
\upd@width\clef@skip\raise\altportee\rlap{%
\ifdim\internote<\Internote \kern\thr@@\Internote\kernm\thr@@\internote \fi
\box\toks@box}\count@portee\repeat}
\def\writ@clefp#1#2#3#4{%
\ifcase\noport@@\singl@clef#1%
\or \singl@clef#2\or \singl@clef#3\or \singl@clef#4\fi}
\def\singl@clef#1{\n@iii#1\relax
\ifcase\n@iii
\C@Clef\@ne\trebleclef@var\or
\C@Clef\z@\altoclef@var\or
\C@Clef\@ne\altoclef@var\or
\C@Clef\tw@\altoclef@var\or
\C@Clef\thr@@\altoclef@var\or
\C@Clef\tw@\bassclef@var\or
\C@Clef\thr@@\bassclef@var\or
\C@Clef\f@ur\bassclef@var\or % 7 = subbass
\or
\C@Clef\z@\trebleclef@var % 9 = french violin-clef
\fi
}
\def\C@Clef#1#2{\n@iii#1\relax\multiply\n@iii\tw@
\raise\n@iii\internote\hbox{#2}}
\def\bassclef@var{\expandafter
\ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@
\bassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi}
\def\trebleclef@var{\expandafter
\ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@
\trebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi}
\def\altoclef@var{\expandafter
\ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@
\altoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi}
\def\smallbassclef@var{\expandafter
\ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@
\smallbassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi}
\def\smalltrebleclef@var{\expandafter
\ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@
\smalltrebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi}
\def\smallaltoclef@var{\expandafter
\ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@
\smallaltoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi}
%%
% Redefine \writ@newclefs similarly
%
% Note that \clef@skip does not change for the different clef
% symbols (always 3.2\Interligne for normal sized clefs)
% Hence there is no need to communicate clef changes to the
% formatting program
%%
\def\writ@newclefs{\clef@skip\z@ \n@loop{\writ@newclefi}\repeat
\n@skip\clef@skip \widthtyp@\z@ \t@rmskip
\m@loop \s@l@ctclefs \o@c\a@c \repeat}
% the same as \writ@newclefs, but no spacing
\def\zwrit@newclefs{\clef@skip\z@
\setbox\writ@volta@box \hbox{\n@loop{\writ@newclefi}\repeat}%
\kern -\clef@skip \box\writ@volta@box
\kern \clef@skip
\clef@skip\z@ % test
\n@skip\clef@skip
\widthtyp@\z@
\t@rmskip
\m@loop \s@l@ctclefs \o@c\a@c \repeat}
% Thanks to Helmut Kopka for helping me out
\def\writ@newclefi{\s@l@ctclefs\p@loop
\setbox\toks@box\hbox{\expandafter\expandafter\expandafter\writ@newclefp
\the\expandafter\a@c\the\o@c}%
\upd@width\clef@skip \writ@box \count@portee\repeat}
\def\writ@newclefp#1#2#3#4#5#6#7#8{%
\ifcase\noport@@\newsingl@clef#1#5\or \newsingl@clef#2#6\or
\newsingl@clef#3#7\or \newsingl@clef#4#8\fi}
\def\newsingl@clef#1#2{\n@iii#1\relax \n@ii#2\relax
\ifnum\n@ii=\n@iii
\else
\ifcase\n@iii
\C@Clef\@ne\smalltrebleclef@var\or
\C@Clef\z@\smallaltoclef@var\or
\C@Clef\@ne\smallaltoclef@var\or
\C@Clef\tw@\smallaltoclef@var\or
\C@Clef\thr@@\smallaltoclef@var\or
\C@Clef\tw@\smallbassclef@var \or
\C@Clef\thr@@\smallbassclef@var\or
\C@Clef\f@ur\smallbassclef@var\or % 7 = subbass
\or
\C@Clef\z@\smalltrebleclef@var % 9 = french violin-clef
\fi
\fi}
%%% instrumentnames
%\let\Writ@names\empty
\def\setname#1#2{\n@v#1\relax % select instrument
% \let\Writ@names\writ@names
\expandafter\def\csname instrument\romannumeral\n@v\endcsname{#2}}% [version 1.15] changed from \edef to \def (Hiroaki)
\def\writ@names{\n@loop
\setbox\toks@box\null\relax
\ifnum\st@ffs>0\relax
\setbox\toks@box\llap{\vbox{\hbox\@to\parindent{%
\hss\csname instrument\romannumeral\noinstrum@nt\endcsname\hss}}\ \ }%
\fi
\altportee\altitude \Comp@High \advance\y@v-\ht\toks@box
\advance\altportee\h@lf\y@v
\writ@box
\repeat}
%%%
% les notes proprement dites
\newdimen\noteskip
\newcount\transpose
\newcount\normaltranspose
\newdimen\locx@skip
\newdimen\elemskip
\newdimen\@l@mskip
\def\check@staff{%
\ifnum\noport@@>\st@ffs\relax
\ifx\Post@Elims\undefined\else
\immediate\write16{check@staff\space inst=\the\noinstrum@nt\space
staff=\the\noport@@\space st@ffs=\the\st@ffs\space Elim.}\relax
\fi
\ifnum\st@ffs>0\relax
\errmessage{Staff number (\the\noport@@) out of specified range (\the\st@ffs)!}\fi
\else\relax}
%\def\check@staff{\iftrue\relax}
\let\ifactiveinstrument\check@staff
\def\nextstaff{\@ndstaff\beginstaff}
\def\nextinstrument{\@ndstaff\begininstrument}
\def\prevstaff{\@ndstaff\advance\noport@@-2\relax\beginstaff}
\def\selectstaff#1{\@ndstaff\noport@@#1\relax
\advance\noport@@ -1\relax\beginstaff}
\def\selectinstrument#1{\@ndstaff\noinstrum@nt#1\relax
\advance\noinstrum@nt -1\relax\begininstrument}
\def\begininstrument{\advance\noinstrum@nt\@ne \s@l@ctinstr
\ifdim\internote<\p@seven6\Internote \set@tinynotesize \comput@sizes
\else
\ifdim\internote<.95\Internote \set@smallnotesize \comput@sizes
\else
\ifdim\internote<1.19\Internote \set@normalnotesize \comput@sizes
\else
\ifdim\internote<1.43\Internote \set@largenotesize \comput@sizes
\else
\set@Largenotesize \comput@sizes
\fi
\fi
\fi
\fi
\noport@@\z@ \beginstaff}
\def\beginstaff{\leavevmode
\altportee\altitude \advance\altportee\noport@@\interportee
\count@portee \s@l@ctclefs \expandafter\get@refs\the\a@c
\setbox\n@otebox\hbox\bgroup
\let\rq\rq@ \let\lq\lq@ \let\mp\mp@ % \let\ds\ds@oup RDT 1.27
\locx@skip\x@skip}
\def\@ndstaff{\egroup % this where \transpose gets reset
\ifdim\n@skip<\wd\n@otebox \n@skip\wd\n@otebox \fi
\raise\altportee\rlap{\unhbox\n@otebox}}
%%% shifting
\def\offs@t#1{\off{-\s@o@}#1\off\s@o@}
\def\loffset#1{\edef\s@o@{#1\qn@width}\offs@t}
\def\roffset#1{\edef\s@o@{-#1\qn@width}\offs@t}
\def\roff{\roffset\@ne}
\def\loff{\loffset\@ne}
\def\hroff{\roffset\h@lf}
\def\hloff{\loffset\h@lf}
%%% decode collective coding
% les symboles de notes ou assimiles
\newcount\inh@alt
\def\getn@i{\inh@alt\z@ \xgetn@i}
\def\inhgetn@i{\inh@alt\@ne \xgetn@i}
\def\f@tok#1#2\af@tok{#1}
\def\s@tok#1#2\af@tok{#2}
% \n@viii used as flag: \n@viii=\maxdimen -> argument is no number
\def\C@Get{\n@viii\maxdimen \edef\alt@suite{\noexpand\getn@i\s@uite\relax}}
\def\C@GET{\n@viii\maxdimen \edef\alt@suite{%
\ifnum\inh@alt=\z@ \noexpand\@TI{\s@uite}\fi \noexpand\getn@i\s@uite\relax}}
\def\xgetn@i#1\relax{\n@viii\z@ \n@i\maxdimen % par defaut
%% \edef\t@ruc{\f@tok #1\relax\af@tok}%
\edef\t@ruc{\expandafter\f@tok #1\relax\af@tok}%
\edef\s@uite{\s@tok #1\empty\af@tok}%
%% pas lettre
\ifcat a\t@ruc \n@i\expandafter`\t@ruc\relax
%% ramener au E (position zero en clef de sol, ut@ref=0)
\ifnum\n@i>96\advance\n@i-101%
\else\advance\n@i-\@lxxxiii % ramener au S= E + 14
\fi
\advance\n@i\ut@ref \advance\n@i\ut@ref \advance\n@i\transpose
\edef\ss@uite{\noexpand\n@fon{\s@uite}}%
%% cas active character dont chiffre
\else
\let\ss@uite\empty
\let\alt@suite\empty
\ifcat 1\t@ruc
\if =\t@ruc \let\@TI\na \C@GET \fi
\if *\t@ruc \sk \C@Get \fi
\if .\t@ruc \let\@TI\pt \C@GET \fi
\if >\t@ruc \let\@TI\dsh \C@GET \fi
\if <\t@ruc \let\@TI\dfl \C@GET \fi
\if !\t@ruc \transpose\normaltranspose \C@Get \fi
\if '\t@ruc \advance\transpose\s@v@n \C@Get \fi
\if `\t@ruc \advance\transpose-\s@v@n \C@Get \fi
\ifnum\n@viii<\maxdimen \n@i#1\fi
\else
\if ^\t@ruc \let\@TI\sh \C@GET \fi
\if _\t@ruc \let\@TI\fl \C@GET \fi
\fi\alt@suite
\fi}
%%% setting stems and flags
\newdimen\st@bot % note stem bottom
\newdimen\st@top % note stem top
\newdimen\stem@skip
\def\stdstemfalse{\let\stdst@m\@ne}
\def\setst@m{%
\advance\y@i\altportee
\ifdim\st@bot>\y@i \global\st@bot\y@i \fi
\ifdim\st@top<\y@i \global\st@top\y@i \fi
\advance\y@i-\altportee}
\def\resetst@m{%
\global\st@bot\maxdimen \global\st@top-\maxdimen \let\stdst@m\empty}
\resetst@m
\def\minst@bot{\ifdim\st@bot>\f@ur\internote
\ifx\stdst@m\empty \st@bot\f@ur\internote \fi \fi}
\def\maxst@top{\ifdim\st@top<\f@ur\internote
\ifx\stdst@m\empty \st@top\f@ur\internote \fi \fi}
\def\stem@rule{%
\vrule\@height\st@top\@depth-\st@bot\@width\lthick\kernm\lthick}
\def\comp@stem{\advance\st@bot-\altportee \advance\st@top-\altportee}
\def\C@stem{\ifdim\st@top>\st@bot
\comp@stem\kern\stem@skip\stem@rule
\kernm\stem@skip
\fi\resetst@m}
\def\stemlength#1{\def\stemfactor{#1}}
\def\DefaultStemlength{4.66}
\stemlength{\DefaultStemlength}
% cut stems in extrem positions for multiple voices in one staff
\def\stemcut{\let\st@mcut\empty}
\def\nostemcut{\let\st@mcut\@ne}
\stemcut
\def\Box@Flag{\setbox\ch@box\hbox{\musixfont\char\n@vii}\y@v\ht\ch@box }
\def\down@flag{\Box@Flag\advance\st@bot-\y@v
\advance\st@bot-\stemfactor\interbeam
\advance\st@bot\DefaultStemlength\interbeam
\ifdim\st@top>\st@bot \comp@stem\minst@bot
\stem@rule\raise\st@bot\box\ch@box \fi\resetst@m}
\def\up@flag{\Box@Flag\advance\st@top\y@v
\advance\st@top\stemfactor\interbeam
\advance\st@top-\DefaultStemlength\interbeam
\ifdim\st@top>\st@bot \comp@stem\maxst@top
\kern\qd@skip\stem@rule\advance\st@top-\y@v \raise\st@top\box\ch@box%
\kernm\qd@skip \fi\resetst@m}
\def\cutst@l#1{%
\ifdim\st@bot<-#1\internote \advance\st@bot\qu@rt\interbeam \fi}
\def\downst@m{\stem@skip\z@
\advance\st@bot-\stemfactor\interbeam
\advance\st@bot-\altportee
\ifx\st@mcut\empty
\ifdim\st@bot<-\thr@@\internote
\cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@
\cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi
\minst@bot\advance\st@bot\altportee
\C@stem}
\def\cutst@u#1{%
\ifdim\st@top>#1\internote \advance\st@top-\qu@rt\interbeam \fi}
\def\upst@m{\stem@skip\qd@skip
\advance\st@top\stemfactor\interbeam
\advance\st@top-\altportee
\ifx\st@mcut\empty
\ifdim\st@top>\@l@v@n\internote
\cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active
\cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi
\maxst@top\advance\st@top\altportee
\C@stem}
\newdimen\s@lope
\def\comp@slope#1{\s@lope\b@p#1\divide\s@lope\tw@nty}
\def\beamst@m{% queue de note vers une poutre
\getcurpos \advance\y@v-\b@x
\y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z
\ifdim\y@ii>\st@top % la poutre est au-dessus
\stem@skip\qd@skip \comp@slope\stem@skip \advance\y@ii\s@lope
\advance\y@ii .285\interbeam% version 1.18 RDT
\ifnum\b@n>\z@ \advance\y@ii\b@n\interbeam \advance\y@ii-\interbeam \fi
\st@top\y@ii % a mettre a jour avec la pente ulterieurement
\else
\advance\y@ii-.285\interbeam% version 1.18 RDT
\stem@skip\z@
\ifdim\y@ii<\st@bot
\ifnum\b@n<\z@ \advance\y@ii\b@n\interbeam \advance\y@ii\interbeam \fi
\st@bot\y@ii \fi \fi
\C@stem}
%%% writing notes inclusive lines (subsidiary lines ?) (german: Hilfslinien)
\newif\ifadvance\advancetrue
% Modification by Werner Icking
% ledger lines exceed the note by: y@vi := 0.35 (noteskip - notewidth)
% and: 0.5 qn@width > y@vi > 0.2 qn@width
\newdimen\y@vi
\def\h@linei{%
\y@ii\n@v\internote
\y@iii\y@ii
\advance\y@ii\hlthick
\advance\y@iii-\hlthick
\y@vi\noteskip % noteskip
%-\ifnum\y@vi=\z@ \y@vi\maxdimen\fi % (or maxdimen if noteskip = 0)
\advance\y@vi-\y@v % - notewidth
\y@vi0.7\y@vi % this may be eaten =: additional length
\y@iv\h@lf\qn@width\ifnum\y@vi>\y@iv \y@vi\y@iv\fi % not more than 0.5 qn@width
\y@iv0.2\qn@width \ifnum\y@vi<\y@iv \y@vi\y@iv\fi % not less than 0.2 qn@width
\y@iv\y@v % notewidth
\advance\y@iv\y@vi % + additional length =: total length
\kernm\h@lf\y@vi % center the ledger line
%-\message{noteskip = \the\noteskip, length = \the\y@iv, notewidth = \the\y@v}%
\vrule\@height\y@ii\@depth-\y@iii\@width\y@iv
\kernm\y@iv\kern\h@lf\y@vi}
% end Werner Icking's modification of ledger lines.
% old behaviour can be restored with musixfll.tex (or musixfll.sty)
\def\writ@note{%
\ifnum\n@i<\@c
% help lines \n@i (position)
\ifnum\nblines>\thr@@ % no help lines for percussion instruments
\n@v\z@
\ifnum\n@i<\m@ne % waste memory, but saves time
\loop \advance\n@v\m@ne \ifnum\n@i<\n@v
\advance\n@v\m@ne \h@linei
\repeat
\else
\n@v\nblines \advance\n@v\m@ne \multiply\n@v\tw@
\ifnum\n@i>\n@v
\loop \advance\n@v\@ne \ifnum\n@i>\n@v
\advance\n@v\@ne \h@linei
\repeat
\fi
\fi
\fi
%
\pl@base\setst@m\st@m
\ifadvance \raise\y@i\adv@box\n@sym \else \raise\y@i\hbox{\n@sym}\fi
\ss@uite \advancetrue
\fi}
\def\adv@box#1{\hbox\@to\noteskip{#1\hss}\advance\locx@skip\noteskip}
%%% breve, longa, maxima, arbitrary notes, non spacing
\def\zmaxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \advancefalse \g@w}
\def\zlonga{\def\w@h{\musixchar39}\y@v\wn@width \advancefalse \g@w}
\def\zbreve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \advancefalse \g@w}
\def\zwq{\def\w@h{\musixchar56}\y@v\wn@width \advancefalse \g@w}
\def\zwqq{\def\w@h{\musixchar127}\y@v\wn@width \advancefalse \g@w}
\def\g@w#1{\let\st@m\resetst@m
\check@staff
\getn@i#1\relax\let\n@fon\g@w \let\n@sym\w@h \writ@note
\fi}
\def\maxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \g@w}
\def\longa{\def\w@h{\musixchar39}\y@v\wn@width \g@w}
\def\breve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \g@w}
\def\wq{\def\w@h{\musixchar56}\y@v\wn@width \g@w}
\def\wqq{\def\w@h{\musixchar127}\y@v\wn@width \g@w}
%%% alternate longa (with up stem) by Ingo Struck
%%% struck@student.uni-siegen.de
\def\lngdnst@m{\stem@skip1.25\qd@skip
\advance\st@bot-\stemfactor\interbeam
\advance\st@bot-\altportee
\ifx\st@mcut\empty
\ifdim\st@bot<-\thr@@\internote
\cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@
\cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi
\minst@bot\advance\st@bot\altportee
\C@stem}
\def\lngupst@m{\stem@skip1.25\qd@skip
\advance\st@top\stemfactor\interbeam
\advance\st@top-\altportee
\ifx\st@mcut\empty
\ifdim\st@top>\@l@v@n\internote
\cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active
\cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi
\maxst@top\advance\st@top\altportee
\C@stem}
\def\@longa#1{\getn@i#1\relax
\ifnum\n@i>\thr@@
\let\st@m\lngdnst@m
\else
\let\st@m\lngupst@m
\fi
\let\n@fon\@longa \let\n@sym\q@u \y@v\qn@width \writ@note}
\def\l@ngasymbol{\def\q@u{\musixfont\@xxxii}}
\def\longaa{\l@ngasymbol\@longa}
%%% whole notes
\def\C@Point#1#2{\ifodd\n@i \else#2\internote \fi\hbox{\musixchar#1}}
\def\wh{\def\w@h{\musixfont\nin@}\y@v\wn@width \g@w}
\def\whp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\z@\raise}}%
\y@v\wn@width \g@w}
\def\whpp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\@ne\raise}}%
\y@v\wn@width \g@w}
%%% whole noteheads, no advance
\def\zw{\advancefalse\wh}
\def\zwp{\advancefalse\whp}
\def\zwpp{\advancefalse\whpp}
\let\zwh\zw
\def\lw#1{\kernm\wn@width\zw{#1}\kern\wn@width}
\def\rw#1{\kern\wn@width\zw{#1}\kernm\wn@width}
\def\lwp#1{\kernm\wn@width\zwp{#1}\kern\wn@width}
\def\rwp#1{\kern\wn@width\zwp{#1}\kernm\wn@width}
\def\lwpp#1{\kernm\wn@width\zwpp{#1}\kern\wn@width}
\def\rwpp#1{\kern\wn@width\zwpp{#1}\kernm\wn@width}
%%% common routines for noteheads with the same width as a quarter note
\def\@qa#1{\getn@i#1\relax
\ifnum\n@i>\thr@@
\let\st@m\downst@m
\else
\let\st@m\upst@m
\fi
\check@staff % version 1.16
\let\n@fon\@qa \let\n@sym\q@u \y@v\qn@width \writ@note
\fi}
\def\@qu{\let\st@m\upst@m \g@q}
\def\@ql{\let\st@m\downst@m \g@q}
\def\@zq{\let\st@m\setst@m \advancefalse\g@q}
\def\@nq{\let\st@m\resetst@m \g@q}
\def\g@q#1{\check@staff
\getn@i#1\relax\let\n@fon\g@q \let\n@sym\q@u
\y@v\qn@width \writ@note\fi}
\def\@qup{\let\st@m\upst@m \g@qp}
\def\@qlp{\let\st@m\downst@m \g@qp}
\def\@zqp{\let\st@m\setst@m \advancefalse\g@qp}
\def\@nqp{\let\st@m\resetst@m \g@qp}
\def\q@up{\q@u\C@Point\z@\raise}
\def\g@qp#1{\check@staff
\getn@i#1\relax\let\n@fon\g@qp \let\n@sym\q@up
\y@v\qn@width \writ@note\fi}
\def\@qupp{\let\st@m\upst@m \g@qpp}
\def\@qlpp{\let\st@m\downst@m \g@qpp}
\def\@zqpp{\let\st@m\setst@m \advancefalse\g@qpp}
\def\@nqpp{\let\st@m\resetst@m \g@qpp}
\def\q@upp{\q@u\C@Point\@ne\raise}
\def\g@qpp#1{\check@staff
\getn@i#1\relax\let\n@fon\g@qpp \let\n@sym\q@upp
\y@v\qn@width \writ@note\fi}
\def\@lqu#1{\kernm\qn@width\advancefalse\@qu{#1}\kern\qn@width}
\def\@rqu#1{\kern\qn@width\advancefalse\@qu{#1}\kernm\qn@width}
\def\@lql#1{\kernm\qn@width\advancefalse\@ql{#1}\kern\qn@width}
\def\@rql#1{\kern\qn@width\advancefalse\@ql{#1}\kernm\qn@width}
\def\@lq#1{\kernm\qn@width\@zq{#1}\kern\qn@width}
\def\@rq#1{\kern\qn@width\@zq{#1}\kernm\qn@width}
\def\@qb#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@q}
\def\@tqb#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick \let\st@m\beamst@m \g@q}
\def\@tqh#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width \let\st@m\beamst@m \g@q}
\def\@qbp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qp}
\def\@qbpp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qpp}
\def\@ca{\n@iv\@xlv \@mca}
\def\@cca{\n@iv46 \@mca}
\def\@ccca{\n@iv47 \@mca}
\def\@cccca{\n@iv48 \@mca}
\def\@ccccca{\n@iv49 \@mca}
\def\@mca#1{\getn@i#1\relax \n@vii\n@iv
\ifnum\n@i>\thr@@
\let\st@m\down@flag
\else
\let\st@m\up@flag \advance\n@vii -\fiv@\relax
\fi
\check@staff % version 1.16
\let\n@fon\@mca \let\n@sym\q@u \y@v\qn@width \writ@note
\fi}
\def\@cu{\n@vii\@xl \let\st@m\up@flag \g@q}
\def\@ccu{\n@vii\@xli \let\st@m\up@flag \g@q}
\def\@cccu{\n@vii42\let\st@m\up@flag \g@q}
\def\@ccccu{\n@vii43\let\st@m\up@flag \g@q}
\def\@cccccu{\n@vii44\let\st@m\up@flag \g@q}
\def\@cl{\n@vii\@xlv \let\st@m\down@flag \g@q}
\def\@ccl{\n@vii46\let\st@m\down@flag \g@q}
\def\@cccl{\n@vii47\let\st@m\down@flag \g@q}
\def\@ccccl{\n@vii48\let\st@m\down@flag \g@q}
\def\@cccccl{\n@vii49\let\st@m\down@flag \g@q}
\def\@cup{\n@vii\@xl \let\st@m\up@flag \g@qp}
\def\@ccup{\n@vii\@xli \let\st@m\up@flag \g@qp}
\def\@clp{\n@vii\@xlv \let\st@m\down@flag \g@qp}
\def\@cclp{\n@vii46\let\st@m\down@flag \g@qp}
\def\@cupp{\n@vii\@xl \let\st@m\up@flag \g@qpp}
\def\@clpp{\n@vii\@xlv \let\st@m\down@flag \g@qpp}
%%% half notes
\def\h@symbol{\def\q@u{\musixfont\@ight}}
\def\ha{\h@symbol\@qa}
\def\hap#1{\pt{#1}\ha{#1}} % 1.27 RDT
\def\happ#1{\ppt{#1}\ha{#1}} % 1.27 RDT
\def\hu{\h@symbol\@qu}
\def\hup{\h@symbol\@qup}
\def\hupp{\h@symbol\@qupp}
\def\hl{\h@symbol\@ql}
\def\hlp{\h@symbol\@qlp}
\def\hlpp{\h@symbol\@qlpp}
\def\hb{\h@symbol\@qb}
\def\hbp{\h@symbol\@qbp}
\def\hbpp{\h@symbol\@qbpp}
\def\zh{\h@symbol\@zq}
\def\zhp{\h@symbol\@zqp}
\def\zhpp{\h@symbol\@zqpp}
\def\lh{\h@symbol\@lq}
\def\rh{\h@symbol\@rq}
\def\zhu{\advancefalse\hu}
\def\zhup{\advancefalse\hup}
\def\zhupp{\advancefalse\hupp}
\def\lhu{\h@symbol\@lqu}
\def\rhu{\h@symbol\@rqu}
\def\zhl{\advancefalse\hl}
\def\zhlp{\advancefalse\hlp}
\def\zhlpp{\advancefalse\hlpp}
\def\lhl{\h@symbol\@lql}
\def\rhl{\h@symbol\@rql}
\def\lhp#1{\loff{\zhp{#1}}}
\def\rhp#1{\roff{\zhp{#1}}}
\def\lhpp#1{\loff{\zhpp{#1}}}
\def\rhpp#1{\roff{\zhpp{#1}}}
%%% quarter notes, stem up
\def\q@symbol{\def\q@u{\musixfont\s@v@n}}
\def\qa{\q@symbol\@qa}
\def\qap#1{\pt{#1}\qa{#1}} % 1.25 RDT
\def\qapp#1{\ppt{#1}\qa{#1}} % 1.25 RDT
\def\qu{\q@symbol\@qu}
\def\qup{\q@symbol\@qup}
\def\qupp{\q@symbol\@qupp}
%%% quarter notes, stem down
\def\ql{\q@symbol\@ql}
\def\qlp{\q@symbol\@qlp}
\def\qlpp{\q@symbol\@qlpp}
%%% quarter notes, stem up, no advance
\def\zqu{\advancefalse\qu}
\def\zqup{\advancefalse\qup}
\def\zqupp{\advancefalse\qupp}
\def\lqu{\q@symbol\@lqu}
\def\rqu{\q@symbol\@rqu}
%%% quarter notes, stem down, no advance
\def\zql{\advancefalse\ql}
\def\zqlp{\advancefalse\qlp}
\def\zqlpp{\advancefalse\qlpp}
\def\lql{\q@symbol\@lql}
\def\rql{\q@symbol\@rql}
%%% quarter noteheads, no advance
\def\zq{\q@symbol\@zq}
\def\zqp{\q@symbol\@zqp}
\def\zqpp{\q@symbol\@zqpp}
\def\lqp#1{\loff{\zqp{#1}}}%
\def\lqpp#1{\loff{\zqpp{#1}}}%
\def\rqp#1{\roff{\zqp{#1}}}%
\def\rqpp#1{\roff{\zqpp{#1}}}%
\def\lq@{\q@symbol\@lq}
\def\rq@{\q@symbol\@rq}
%
% note heads without stems
\def\nh{\h@symbol\@nq}
\def\nq{\q@symbol\@nq}
\def\znh{\advancefalse\nh}
\def\znq{\advancefalse\nq}
%%% 8th, 16th, 32th, 64th, (128th) notes
\def\ca{\q@symbol\@ca}
\def\cca{\q@symbol\@cca}
\def\ccca{\q@symbol\@ccca}
\def\cccca{\q@symbol\@cccca}
\def\ccccca{\q@symbol\@ccccca}
\def\cu{\q@symbol\@cu}
\def\ccu{\q@symbol\@ccu}
\def\cccu{\q@symbol\@cccu}
\def\ccccu{\q@symbol\@ccccu}
\def\cccccu{\q@symbol\@cccccu}
\def\cup{\q@symbol\@cup}
\def\ccup{\q@symbol\@ccup}
\def\cupp{\q@symbol\@cupp}
\def\zcu{\advancefalse\cu}
\def\zccu{\advancefalse\ccu}
\def\zcccu{\advancefalse\cccu}
\def\zccccu{\advancefalse\ccccu}
\def\zcccccu{\advancefalse\cccccu}
\def\lcu#1{\kernm\qn@width\zcu{#1}\kern\qn@width}
\def\rcu#1{\kern\qn@width\zcu{#1}\kernm\qn@width}
\def\zcup{\advancefalse\cup}
\def\zccup{\advancefalse\ccup}
\def\zcupp{\advancefalse\cupp}
\def\cl{\q@symbol\@cl}
\def\ccl{\q@symbol\@ccl}
\def\cccl{\q@symbol\@cccl}
\def\ccccl{\q@symbol\@ccccl}
\def\cccccl{\q@symbol\@cccccl}
\def\clp{\q@symbol\@clp}
\def\cclp{\q@symbol\@cclp}
\def\clpp{\q@symbol\@clpp}
\def\zcl{\advancefalse\cl}
\def\zccl{\advancefalse\ccl}
\def\zcccl{\advancefalse\cccl}
\def\zccccl{\advancefalse\ccccl}
\def\zcccccl{\advancefalse\cccccl}
\def\zclp{\advancefalse\clp}
\def\zcclp{\advancefalse\cclp}
\def\zclpp{\advancefalse\clpp}
\def\lcl#1{\kernm\qn@width\zcl{#1}\kern\qn@width}
\def\rcl#1{\kern\qn@width\zcl{#1}\kernm\qn@width}
%%% beam notes
\def\qb{\q@symbol\@qb}
\def\qbp{\q@symbol\@qbp}
\def\qbpp{\q@symbol\@qbpp}
\def\zqb{\advancefalse\qb}
\def\zqbp{\advancefalse\qbp}
\def\zqbpp{\advancefalse\qbpp}
\def\tqh{\q@symbol\@tqh}
\def\tqu{\q@symbol\@tqh} % version 1.16 RDT
\def\tqb{\q@symbol\@tqb}
\def\tql{\q@symbol\@tqb} % version 1.16 RDT
\def\tqqh#1#2{\tbbu{#1}\tqh{#1}{#2}} % version 1.17 RDT
\def\tqqu{\tqqh} % version 1.17 RDT
\def\tqqb#1#2{\tbbl{#1}\tqb{#1}{#2}} % version 1.17 RDT
\def\tqql{\tqqb} % version 1.17 RDT
\def\tqqqh#1#2{\tbbbu{#1}\tqqh{#1}{#2}} % version 1.17 RDT
\def\tqqqu{\tqqqh} % version 1.17 RDT
\def\tqqqb#1#2{\tbbbl{#1}\tqqb{#1}{#2}} % version 1.17 RDT
\def\tqqql{\tqqqb} % version 1.17 RDT
\def\nqqh#1#2{\tbbu{#1}\qb{#1}{#2}} % version 1.27 RDT
\def\nqqb#1#2{\tbbl{#1}\qb{#1}{#2}} % version 1.27 RDT
\def\nqqqh#1#2{\tbbbu{#1}\qb{#1}{#2}} % version 1.27 RDT
\def\nqqqb#1#2{\tbbbl{#1}\qb{#1}{#2}} % version 1.27 RDT
\def\nqqu{\nqqh} % version 1.27 RDT
\def\nqql{\nqqb} % version 1.27 RDT
\def\nqqqu{\nqqqh} % version 1.27 RDT
\def\nqqql{\nqqqb} % version 1.27 RDT
\def\ztqh{\advancefalse\q@symbol\@tqh}
\def\ztqu{\advancefalse\q@symbol\@tqh} % version 1.16 RDT
\def\ztqb{\advancefalse\q@symbol\@tqb}
\def\ztql{\advancefalse\q@symbol\@tqb} % version 1.16 RDT
%%% grace notes
\def\grcu{\q@symbol\@grcu}
\def\grcl{\q@symbol\@grcl}
\def\@grcu{\n@vii\tw@lv@ \let\st@m\up@flag \g@q}
\def\@grcl{\n@vii\active \let\st@m\down@flag \g@q}
%%% starting beams
% \ibu{0<=numero<10}{altitude~note}{pente de -9 a +9}
% \ibl{0<=numero<10}{altitude~note}{pente de -9 a +9}
% \b@p slope (-9) - (9)
% \b@n number of pending beamlines (-4) - (4)
\def\test@beamnum{% [version 1.15] new macro to make it independent from slur
\ifnum\n@i<\z@ \n@i\@c \fi
\ifnum\n@i<\maxinstruments \else
\count@\maxinstruments \advance\count@\m@ne
\errmessage{Wrong beam reference number \the\n@i! (valid: 0 to \the\count@)}
\n@i\z@
\fi
\advance\n@i\@ne}%
\def\s@l@ctbeam#1\relax{%
\n@i#1\relax\test@beamnum % [version 1.15] make it independent from slur
\edef\b@x{\csname b@x\romannumeral\n@i\endcsname}%
\edef\b@z{\csname b@z\romannumeral\n@i\endcsname}%
\edef\b@n{\csname b@n\romannumeral\n@i\endcsname}%
\edef\b@p{\csname b@p\romannumeral\n@i\endcsname}}
\def\s@l@ctc{\edef\c@x{\csname c@x\romannumeral\n@i\endcsname}%
\edef\c@z{\csname c@z\romannumeral\n@i\endcsname}}
\def\s@l@ctd{\edef\d@x{\csname d@x\romannumeral\n@i\endcsname}%
\edef\d@z{\csname d@z\romannumeral\n@i\endcsname}\s@l@ctc}
\def\s@l@cte{\edef\e@x{\csname e@x\romannumeral\n@i\endcsname}%
\edef\e@z{\csname e@z\romannumeral\n@i\endcsname}\s@l@ctd}
\def\s@l@ctf{\edef\f@x{\csname f@x\romannumeral\n@i\endcsname}%
\edef\f@z{\csname f@z\romannumeral\n@i\endcsname}\s@l@cte}
\def\s@l@ctg{\edef\g@x{\csname g@x\romannumeral\n@i\endcsname}%
\edef\g@z{\csname g@z\romannumeral\n@i\endcsname}\s@l@ctf}
\def\ibu#1{\s@l@ctbeam#1\relax \i@bu}
\def\ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbu}
\def\ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbu}
\def\ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbu}
\def\ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbu}
\def\ibl#1{\s@l@ctbeam#1\relax \i@bl}
\def\ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbl}
\def\ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbl}
\def\ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbl}
\def\ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbl}
\def\i@bu#1#2{%\check@staff
\ifnum\b@n=\z@ \else \C@tb\t@bbu\qn@width \fi \global\b@n\m@ne
\inhgetn@i#1\relax \n@v#2 \C@ib+\global\advance\b@x\qd@skip}
\def\i@bl#1#2{%\check@staff
\ifnum\b@n=\z@ \else \C@tb\t@bbl\lthick \fi \global\b@n\@ne
\inhgetn@i#1\relax \n@v#2 \C@ib-}
\def\C@ib#1{\max@n@v\nin@\min@n@v{-\nin@}\global\b@p\n@v % clip slope number
\getcurpos \global\b@x\y@v \b@z#14.333\interbeam \advance\b@z\altportee
\pl@base \global\advance\b@z\y@i}
\def\C@ba#1#2{\global\advance#1#2\interbeam}
\def\i@bbu#1#2{\ifnum\b@n=\z@ \i@bu{#1}{#2}\C@ba\b@z\@ne \fi\n@bbu}
\def\i@bbl#1#2{\ifnum\b@n=\z@ \i@bl{#1}{#2}\C@ba\b@z\m@ne \fi\n@bbl}
\def\i@bbbu#1#2{\ifnum\b@n=\z@
\i@bbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \fi\n@bbbu}
\def\i@bbbl#1#2{\ifnum\b@n=\z@
\i@bbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \fi\n@bbbl}
\def\i@bbbbu#1#2{\ifnum\b@n=\z@
\i@bbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \fi\n@bbbbu}
\def\i@bbbbl#1#2{\ifnum\b@n=\z@
\i@bbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \fi\n@bbbbl}
\def\i@bbbbbu#1#2{\ifnum\b@n=\z@
\i@bbbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \C@ba\e@z\@ne \fi\n@bbbbbu}
\def\i@bbbbbl#1#2{\ifnum\b@n=\z@
\i@bbbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \C@ba\e@z\m@ne \fi\n@bbbbbl}
%%% changing beams
\def\Dec@b#1#2{\ifnum\b@n=#1#2\fi\ifnum\b@n=-#1#2\fi}
%!\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbu \fi \fi }
%!\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbl \fi \fi }
\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbu}
\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbl}
\def\nbbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu}
\def\nbbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl}
\def\nbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte
\Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu}
\def\nbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte
\Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl}
\def\nbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf
\Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu \Dec@b\f@ur\n@bbbbbu}
\def\nbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf
\Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl \Dec@b\f@ur\n@bbbbbl}
\def\n@bbu{\C@nb\c@z\c@x\@ne\qd@skip}
\def\n@bbl{\C@nb\c@z\c@x\@ne\z@}
\def\n@bbbu{\C@nb\d@z\d@x\tw@\qd@skip}
\def\n@bbbl{\C@nb\d@z\d@x\tw@\z@}
\def\n@bbbbu{\C@nb\e@z\e@x\thr@@\qd@skip}
\def\n@bbbbl{\C@nb\e@z\e@x\thr@@\z@}
\def\n@bbbbbu{\C@nb\f@z\f@x\f@ur\qd@skip}
\def\n@bbbbbl{\C@nb\f@z\f@x\f@ur\z@}
\def\C@nb#1#2#3#4{%
\global#1\b@z
\ifnum\b@n<\z@ \global\advance\b@n\m@ne \global\advance#1-#3\interbeam \fi
\ifnum\b@n>\z@ \global\advance\b@n\@ne \C@ba#1#3\fi
{\advance\locx@skip#4\getcurpos \global#2\y@v
\advance\y@v-\b@x \comp@slope\y@v \global\advance#1\s@lope}}
%%% beam termination
\def\b@adjust{\ifdim\y@ii>\tw@\y@ \advance\y@\y@ \advance\n@vi\@ne \fi}
\def\@beam{% \y@ii : longueur, \b@p : pente, \y@i : altitude
\ifnum\b@p=\z@
% slope zero
\y@iii\y@i\y@iv\y@i
\advance\y@iii-\b@amthick \advance\y@iv\b@amthick
\vrule\@height\y@iv\@depth-\y@iii\@width\y@ii
\else\n@vi\z@
% slope offset
\ifnum\b@p>\z@ \n@vi\b@p \multiply\n@vi\si@ \advance\n@vi-\si@ \fi
\ifnum\b@p<\z@ \n@vi-\b@p \multiply\n@vi\si@ \advance\n@vi58\fi
% find longest possible character to avoid patchwork
\y@\tw@\p@
\b@adjust \b@adjust \b@adjust \b@adjust \b@adjust
\advance\n@vi\@cxxviii
\chardef\b@alk\n@vi\musixfont
%
% \curwidth=0pt \curheight=\y@i \curxpos=\completewidth
% \loop\ifdim\curwidth<\completewidth
% \advance\curxpos by -\beamwidth
% \ifdim\curxpos<0pt
% \comp@slope\curxpos
% \advance\curheight by \s@lope \kern\curxpos \fi
% \raise\curheight\hbox{\b@alk}%
% \advance\curwidth by \beamwidth
% \comp@slope\beamwidth
% \advance\curheight by \s@lope
% \repeat \fi
%
\y@iv\z@ \y@iii\y@i \y@v\y@ii
\loop\ifdim\y@iv<\y@ii
\advance\y@v-\y@
\ifdim\y@v<\z@ \comp@slope\y@v \advance\y@iii\s@lope \kern\y@v \fi
\raise\y@iii\hbox{\b@alk}%
\advance\y@iv\y@ \comp@slope\y@ \advance\y@iii\s@lope
\repeat \fi}
\def\s@l@ctcde{\s@l@ctc \s@l@ctd \s@l@cte \s@l@ctf }
\def\tbu#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width }
\def\tbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbu}
\def\tbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbu}
\def\tbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbu}
\def\tbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbu}
\def\tbl#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick }
\def\tbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbl}
\def\tbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbl}
\def\tbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbl}
\def\tbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbl}
\def\beam@pos#1{\getcurpos\y@ii\y@v\advance\y@ii-#1}
\def\C@tb#1#2{%
\n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi
\ifcase\n@ii \or \or \s@l@ctc \or \s@l@ctd \or \s@l@cte \or \s@l@ctf \or \s@l@ctg\fi
\ifnum\b@n<\m@ne #1\fi
\ifnum\b@n>\@ne #1\fi
\y@i\b@z \advance\y@i-\altportee \beam@pos\b@x
\advance\y@ii#2\relax
\check@staff
\llap{\@beam\kernm#2}\relax
\fi\global\b@n\z@}
\def\t@bbu{\n@v\tw@ \C@b\t@bbbu\n@bbu\y@i\c@z \beam@pos\c@x \t@xbu}
\def\t@bbl{\n@v\tw@ \C@b\t@bbbl\n@bbl\y@i\c@z \beam@pos\c@x \t@xbl}
\def\t@bbbu{\n@v\thr@@ \C@b\t@bbbbu\n@bbbu\y@i\d@z \beam@pos\d@x \t@xbu}
\def\t@bbbl{\n@v\thr@@ \C@b\t@bbbbl\n@bbbl\y@i\d@z \beam@pos\d@x \t@xbl}
\def\t@bbbbu{\n@v\f@ur \C@b\t@bbbbbu\n@bbbbu\y@i\e@z \beam@pos\e@x \t@xbu}
\def\t@bbbbl{\n@v\f@ur \C@b\t@bbbbbl\n@bbbbl\y@i\e@z \beam@pos\e@x \t@xbl}
\def\t@bbbbbu{\n@v\fiv@ \C@b\empty\n@bbbbbu\y@i\f@z \beam@pos\f@x \t@xbu}
\def\t@bbbbbl{\n@v\fiv@ \C@b\empty\n@bbbbbl\y@i\f@z \beam@pos\f@x \t@xbl}
\def\C@b#1#2{%
\n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi
\ifnum\n@ii>\n@v #1\fi
\loop
\advance\n@v\m@ne
\ifnum\n@ii=\n@v {\advance\locx@skip-\qn@width#2}\fi
\ifnum\n@v>\@ne \repeat}
\def\t@xbu{\C@txb\qn@width\interbeam\b@amthick\qd@skip>}
\def\t@xbl{\C@txb\lthick\b@amthick\interbeam\hlthick<}
\def\C@txb#1#2#3#4#5{\advance\y@i-\altportee
\advance\y@ii#1\relax
\check@staff
\llap{\@beam\kernm#1}%
\ifnum\b@n#5\z@ \comp@slope\y@ii \advance\y@i\s@lope
\raise\y@i\rlap{\kern#4\vrule\@height#3\@depth#2\@width\lthick}\relax
\fi
\fi
\ifnum\b@n<\z@ \global\advance\b@n\@ne \fi
\ifnum\b@n>\z@ \global\advance\b@n\m@ne \fi}
%%% semiautomatic beams
% adjustable beam slopes
% #1: beam number
% #2: starting pitch
% #3: ending pitch,
% #4: extension (number of \noteskip's)
\def\Ibu#1{\s@l@ctbeam#1\relax\I@bu\i@bu}
\def\Ibl#1{\s@l@ctbeam#1\relax\I@bl\i@bl}
\def\Ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bu\i@bbu}
\def\Ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bl\i@bbl}
\def\Ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bu\i@bbbu}
\def\Ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bl\i@bbbl}
\def\Ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbu}
\def\Ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbl}
\def\Ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbbu}
\def\Ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbbl}
% compute altitude difference of tried beam in \y@iv
% and compare with notes altitude difference
\def\@@chk{\y@iv.05\y@v \multiply\y@iv\n@viii}
\def\I@buuchk{\@@chk
\ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@buuchk \fi
\ifnum\n@viii>\nin@ \advance\n@i\@ne \advance\n@ii\m@ne \I@buuchk \fi}
\def\I@bldchk{\@@chk
\ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@bldchk \fi
\ifnum\n@viii<-\nin@ \advance\n@i\m@ne \advance\n@ii\@ne \I@bldchk \fi}
\def\I@budchk{\@@chk
\ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@budchk \fi}
\def\I@bluchk{\@@chk
\ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@bluchk \fi}
\def\I@bu{\let\@Ti\I@buuchk \let\@Tii\I@budchk \C@Ib}
\def\I@bl{\let\@Ti\I@bluchk \let\@Tii\I@bldchk \C@Ib}
\def\C@Ib#1#2#3#4{{\n@v#4\relax \min@n@v\@ne
\inhgetn@i#3\relax\n@ii\n@i
\inhgetn@i#2\relax\advance\n@ii-\n@i
\y@v\noteskip \multiply\y@v\n@v
\ifnum\n@ii=\z@ #1{#2}0%
\else
\ifnum\n@ii>\z@ \n@viii\t@n \@Ti\else\n@viii-\t@n \@Tii \fi
\edef\I@boper{\noexpand#1{\the\n@i}{\the\n@viii}\relax}\I@boper
\fi}}
% sets of double notes with computed slopes
\def\B@h{\let\B@ii\tqh}
\def\B@b{\let\B@ii\tqb}
\def\Dqbu{\let\B@i\Ibu \B@h\C@Dq}
\def\Dqbl{\let\B@i\Ibl \B@b\C@Dq}
\def\Dqbbu{\let\B@i\Ibbu \B@h\C@Dq}
\def\Dqbbl{\let\B@i\Ibbl \B@b\C@Dq}
\def\C@Dq#1#2{\B@i0{#1}{#2}1\qb0{#1}\B@ii0{#2}}
% sets of triple notes with computed slopes
\def\Tqbu{\let\B@i\Ibu \B@h\C@Tq}
\def\Tqbl{\let\B@i\Ibl \B@b\C@Tq}
\def\Tqbbu{\let\B@i\Ibbu \B@h\C@Tq}
\def\Tqbbl{\let\B@i\Ibbl \B@b\C@Tq}
\def\C@Tq#1#2#3{\B@i0{#1}{#3}2\qb0{#1#2}\B@ii0{#3}}
% sets of quadruple notes with computed slopes
\def\Qqbu{\let\B@i\Ibu \B@h\C@Qq}
\def\Qqbl{\let\B@i\Ibl \B@b\C@Qq}
\def\Qqbbu{\let\B@i\Ibbu \B@h\C@Qq}
\def\Qqbbl{\let\B@i\Ibbl \B@b\C@Qq}
\def\C@Qq#1#2#3#4{\B@i0{#1}{#4}3\qb0{#1#2#3}\B@ii0{#4}}
%%% duration points
\def\pt{\g@pt\@ne\z@}
\def\ppt{\g@pt\@ne\@ne}
\def\pppt{\g@pt\@ne\tw@}
\def\lpt{\g@pt\m@ne\z@}
\def\lppt{\g@pt\m@ne\@ne}
\def\lpppt{\g@pt\m@ne\tw@}
% Shifted, pointed chord notes
%
\def\lhp#1{\loff{\zhp{#1}}}
\def\rhp#1{\roff{\zhp{#1}}}
\def\lqp#1{\loff{\zqp{#1}}}
\def\rqp#1{\roff{\zqp{#1}}}
\def\rhpp#1{\roff{\zhpp{#1}}}
\def\lhpp#1{\loff{\zhpp{#1}}}
\def\rqpp#1{\roff{\zqpp{#1}}}
\def\lqpp#1{\loff{\zqpp{#1}}}
\def\g@pt#1#2#3{\check@staff
\inhgetn@i#3\relax \relax % two \relax since the first one
\ifnum\n@i<\@c % in swallowed by \inhgetn@i
\ifodd\n@i \else\advance\n@i#1\fi
\pl@base \raise\y@i\hbox{\musixchar#2}\fi\fi}
%%% rests
\def\wholeshift#1{\roffset{\p@ne25}{#1}}
\def\centerbar#1{\y@ii\lin@pos \advance\y@ii-\lastbarpos \advance\y@ii\cut@v
\kern-\h@lf\y@ii\lrlap{#1}\kern\h@lf\y@ii}%
\def\cpause{\hbox{\ccn{6}{\musixchar61}}}
\def\chpause{\hbox{\ccn{4}{\musixchar60}}}
\def\cPAuse{\hbox{\ccn{0}{\musixchar58}}}
\def\cPAUSe{\hbox{\ccn{0}{\musixchar59}}}
\def\cHpause#1{% 1.21 RDT
\y@ii\lin@pos \advance\y@ii-\lastbarpos%
\def\v@rtpart{\hbox{\vrule width.6pt height1.5\internote depth1.5\internote}}%
\def\h@rizpart{\hbox{\vrule width0.35\y@ii height.5\internote depth.5\internote}}%
\raise4\internote\hbox{\v@rtpart\h@rizpart\ccn5{\meterfont{#1}}\h@rizpart\v@rtpart}}%
\def\centerpause{\centerbar{\cpause}}
\def\centerhpause{\centerbar{\chpause}}
\def\centerPAuse{\centerbar{\cPAuse}}
\def\centerPAUSe{\centerbar{\cPAUSe}}
\def\centerHpause#1{\centerbar{\cHpause{#1}}}
\def\C@ps#1#2#3{\n@viii#3\multiply\n@viii\tw@
\advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1}}
\def\C@pspt#1#2#3{\n@viii#3\multiply\n@viii\tw@
\advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1\relax
\ifnum #1=\t@n\relax \raise 0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}%
\else \raise -0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}%
\fi}%
}
\def\PAUSe{\adv@box{\musixchar59}}
\def\PAuse{\adv@box{\musixchar58}}
\def\pause{\check@staff
\adv@box{\raise\si@\internote\hbox{\musixchar61}}\fi}
\def\pausep{\wholeshift{\pt5}\pause}
\def\liftpause{\C@ps\@l@v@n\si@}
\def\liftpausep{\C@pspt\@l@v@n\si@}
\def\hpause{\check@staff
\adv@box{\raise\f@ur\internote\hbox{\musixchar60}}\fi}
\let\hp\hpause
\def\hpausep{\wholeshift{\pt5}\hpause}
\let\hpp\hpausep
\def\lifthpause{\C@ps\t@n\f@ur}
\def\lifthpausep{\C@pspt\t@n\f@ur}
\newdimen\lift@rest
\def\adv@restbox#1{\hbox{\lift@rest 5\internote
\advance\lift@rest -2.5\fontdimen\fiv@\musixfont
\raise\lift@rest\hbox\@to\noteskip{#1\hss}}\advance\locx@skip\noteskip}
\def\qp{\adv@restbox{\check@staff\musixchar62\fi}}
\let\soupir\qp
%\def\ds@oup{\adv@restbox{\check@staff\musixchar63\fi}} % why? RDT 1.27
\def\ds{\adv@restbox{\check@staff\musixchar63\fi}}
\def\qs{\adv@restbox{\check@staff\musixchar64\fi}}
\def\hs{\adv@restbox{\check@staff\musixchar65\fi}}
\def\qqs{\adv@restbox{\check@staff\musixchar66\fi}}
% pointed rests version 1.16 RDT
\def\qpp{\adv@restbox{\check@staff\pt5\musixchar62\fi}}
\def\dsp{\adv@restbox{\check@staff\pt5\musixchar63\fi}}
\def\qsp{\adv@restbox{\check@staff\pt5\musixchar64\fi}}
\def\hsp{\adv@restbox{\check@staff\pt5\musixchar65\fi}}
\def\qqsp{\adv@restbox{\check@staff\pt5\musixchar66\fi}}
% double-dotted rests version 1.17 RDT
\def\pausepp{\wholeshift{\ppt5}\pause}
\def\hpausepp{\wholeshift{\ppt5}\hpause}
\let\hppp\hpausepp
\def\qppp{\adv@restbox{\check@staff\ppt5\musixchar62\fi}}
\def\dspp{\adv@restbox{\check@staff\ppt5\musixchar63\fi}}
\def\qspp{\adv@restbox{\check@staff\ppt5\musixchar64\fi}}
\def\hspp{\adv@restbox{\check@staff\ppt5\musixchar65\fi}}
\def\qqspp{\adv@restbox{\check@staff\ppt5\musixchar66\fi}}
% copied from musixlit.tex: version 1.21 RDT
\def\Hpause#1#2{\zcharnote{#1}{\def\s@r{%
\vrule\@width.6\p@\@height1\h@lf\internote\@depth1\h@lf\internote}\s@r%
\vrule\@width#2\noteskip\@height\h@lf\internote\@depth\h@lf\internote\s@r}}
%%% accidentals
\newskip\accshift
\def\bigaccid{\let\small@test\iftrue}
\def\smallaccid{\let\small@test\iffalse}
\def\varaccid{\def\small@test{\ifdim\noteskip>1\p@seven\qn@width}}
\varaccid % accidents de taille variable
\def\na#1{\small@test\bigna{#1}\else\smallna{#1}\fi}
\def\fl#1{\small@test\bigfl{#1}\else\smallfl{#1}\fi}
\def\sh#1{\small@test\bigsh{#1}\else\smallsh{#1}\fi}
\def\dfl#1{\small@test\bigdfl{#1}\else\smalldfl{#1}\fi}
\def\dsh#1{\small@test\bigdsh{#1}\else\smalldsh{#1}\fi}
% n@vi char pos of cautionpar (normal=5, doubleflat=6)
% n@v offset to char pos (flat=0, dflat=1, sharp=2, dsharp=3, natural=4)
% n@vi offset to char pos (big=0, small=60)
% n@vii =maxdimen -> cautionacctrue
\def\writ@ba{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}}
\def\set@ba{\let\@Ti\writ@ba \n@vi\z@}
\def\bigna{\set@ba \let\@Tii\@Na \n@v\f@ur \C@acc}
\def\bigfl{\set@ba \let\@Tii\@Fl \n@v\z@ \C@acc}
\def\bigsh{\set@ba \let\@Tii\@Sh \n@v\tw@ \C@acc}
\def\bigdfl{\set@ba \let\@Tii\@dFl \n@v\@ne \C@acc}
\def\bigdsh{\set@ba \let\@Tii\@dSh \n@v\thr@@ \C@acc}
\def\@sa{\ifnum\n@vii=\maxdimen \C@ChaR \musixchar\n@v \kern.3\qn@width
\else \musixchar\n@v \fi \n@vii\z@}
\def\smallna{\set@sa \let\@Tii\@Na \n@v\f@ur \C@acc}
\def\smallfl{\set@sa \let\@Tii\@Fl \n@v\z@ \C@acc}
\def\smallsh{\set@sa \let\@Tii\@Sh \n@v\tw@ \C@acc}
\def\smalldfl{\set@sa \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc}
\def\smalldsh{\set@sa \let\@Tii\@dSh \n@v\thr@@ \C@acc}
\def\cna{\set@ca \let\@Tii\@Na \n@v\f@ur \C@acc} % version 1.16 HM
\def\cfl{\set@ca \let\@Tii\@Fl \n@v\z@ \C@acc}
\def\csh{\set@ca \let\@Tii\@Sh \n@v\tw@ \C@acc}
\def\cdfl{\set@ca \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc}
\def\cdsh{\set@ca \let\@Tii\@dSh \n@v\thr@@ \C@acc}
%
\def\writ@sa{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}}
\def\set@sa{\let\@Ti\writ@sa \n@iv\fiv@ \n@vi\@xl }
\def\writ@ca{\pl@base\raise\y@i\llap{\C@ChaR \musixchar\n@v\kern.3\qn@width\kern\accshift}}
\def\set@ca{\let\@Ti\writ@ca \n@iv\fiv@ \n@vi\@xl }
\def\writ@ua{\advance\n@i\thr@@ \zchar\n@i{\kern\qu@rt\qn@width\@sa}}
\def\set@upper{\let\@Ti\writ@ua \n@iv\fiv@ \n@vi\@xl }
\def\upperna{\set@upper \let\@Tii\@Na \n@v\f@ur \C@acc}
\def\upperfl{\set@upper \let\@Tii\@Fl \n@v\z@ \C@acc}
\def\uppersh{\set@upper \let\@Tii\@Sh \n@v\tw@ \C@acc}
\def\@Na{\ifcase\n@ii \n@v\tw@ \or \n@v\f@ur \or \n@v\z@ \fi}
\def\@Fl{\ifcase\n@ii \n@v\f@ur \or \n@v\z@ \or \n@v\@ne \fi}
\def\@Sh{\ifcase\n@ii \n@v\thr@@ \or \n@v\tw@ \or \n@v\f@ur \fi}
\def\@dFl{\ifcase\n@ii \n@v\z@ \or \n@v\@ne \or
\message{\@nod flatten \noexpand\dfl \t@ruc}\let\@Ti\empty \fi}
\def\@dSh{\ifcase\n@ii
\message{\@nod sharpen \noexpand\dsh \t@ruc}\let\@Ti\empty
\or \n@v\thr@@ \or \n@v\tw@ \fi}
\def\C@acc#1{%
\check@staff
\inhgetn@i#1\relax
\ifx\rel@sw\@ne
\s@l@ctsigns \n@iii\n@i
\advance\n@iii-\ut@ref \advance\n@iii-\ut@ref
\loop\ifnum\n@iii>\si@ \advance\n@iii-\s@v@n \repeat
\loop\ifnum\n@iii<\z@ \advance\n@iii\s@v@n \repeat
\ifcase\n@iii
\n@ii\si@ % mi
\or\n@ii\@ne % fa
\or\n@ii\thr@@ % sol
\or\n@ii\fiv@ % la
\or\n@ii\s@v@n % si
\or\n@ii\tw@ % do
\or\n@ii\f@ur % re
\fi
% \n@ii positive signature limit, \n@ii-8 negative signature limit
\advance\n@ii-\a@s \advance\n@ii\si@ \divide\n@ii\s@v@n
\@Tii
\fi \advance\n@v\@l \advance\n@v\n@vi \expandafter\@Ti % [version 1.15] (Hiroaki)
\fi}
\def\@nod{Can't double }
\def\relativeaccid{\let\rel@sw\@ne }
\def\absoluteaccid{\let\rel@sw\empty }
\absoluteaccid
\def\lna#1{\loffset\smallvalue{\na{#1}}}
\def\lfl#1{\loffset\smallvalue{\fl{#1}}}
\def\lsh#1{\loffset\smallvalue{\sh{#1}}}
\def\ldfl#1{\loffset\smallvalue{\dfl{#1}}}
\def\ldsh#1{\loffset\smallvalue{\dsh{#1}}}
%%% arpeggio
\def\arpeggio#1#2{\zcharnote{#1}{%
\uplap{\leaders\hbox{\musixchar70}\vskip#2\Interligne}}}
\def\larpeggio#1#2{\loffset\smallvalue{\arpeggio{#1}{#2}}}
%%% ornaments, special signs
\def\@Char#1{\zcharnote{#1}\C@ChaR}
\def\backturn{\n@iv67\@Char}
\def\turn{\n@iv68\@Char}
\def\duevolte{{\keychar78}}
\def\caesura{\llap{\musixchar79\kern\h@lf\noteskip}}
\def\coda{\n@iv85\C@coda}
\def\Coda{\n@iv105\C@coda}
\def\C@coda#1{\llap{\@Char{#1}\kern\afterruleskip}}
\def\segno{\n@iv86\@Char}
\def\Segno{{\keychar110}}
\def\shake{\n@iv87\@Char}
\def\Shake{\n@iv88\@Char}
\def\Shakel{\n@iv106\@Char}
\def\Shakenw{\n@iv107\@Char}
\def\Shakesw{\n@iv108\@Char}
\def\Shakene{\n@iv109\@Char}
\def\mordent{\n@iv89\@Char}
\def\Mordent{\n@iv119\@Char}
\def\doublethumb{\n@iv121\@Char}
\def\trt#1{\loffset{0.65}{\shake{#1}}\roffset{0.65}{\mordent{#1}}}
\def\tr#1{\loffset{0.15}{\zcn{#1}{\ppff tr}}} % \loffset added version 1.23 RDT
\def\xtr#1{\raise1.25\internote\hbox{\n@iv111\zcn{#1}\C@ChaR}} % added version 1.23 RDT
\def\ptr#1{\raise1.25\internote\hbox{\n@iv117\zcn{#1}\C@ChaR}} % added version 1.23 RDT
%\def\Xtr#1{\wholeshift{\xtr{#1}}} % unnecessary?
%%% accents
\def\upbow{{\musixfont\@xxiii}}
\def\downbow{{\musixchar22}}
\def\flageolett{\n@iv120\uacc@Char}
\def\usfz{\n@iv\tw@nty \uacc@Char}
\def\lsfz{\n@iv21\lacc@Char}
\def\dsfz{\lsfz}
\def\upz{\n@iv\@xxiv \uacc@Char}
\def\lpz{\n@iv\@xxv \lacc@Char}
\def\dpz{\lpz}
\def\ust{\n@iv\@xxvi \uacc@Char}
\def\lst{\n@iv\@xxvii \lacc@Char}
\def\dst{\lst}
\def\uppz{\n@iv28\uacc@Char}
\def\lppz{\n@iv\@xxix \lacc@Char}
\def\dppz{\lppz}
\def\usf{\n@iv30\uacc@Char}
\def\lsf{\n@iv31\lacc@Char}
\def\dsf{\lsf}
\def\upzst{\n@iv18\uacc@Char}
\def\lpzst{\n@iv19\lacc@Char}
\def\dpzst{\lpzst}
\def\uacc@Char#1{\check@staff
\inhgetn@i#1\relax \relax
\ifnum\n@i<\@ight \ifodd\n@i \else\advance\n@i\@ne \fi \fi
\zchar\n@i\C@ChaR
\fi}
\def\lacc@Char#1{\check@staff
\inhgetn@i#1\relax \relax
\ifnum\n@i>\@ne \ifodd\n@i \else\advance\n@i\m@ne \fi \fi
\zchar\n@i\C@ChaR
\fi}
\def\C@ChaR{\musixfont\char\n@iv}
%%% accents on beams (correction proposed by Klaus Bechert)
\def\acc@ubalk{\acc@balk>\@ne}
\def\acc@lbalk{\acc@balk<\m@ne}
\def\acc@balk#1#2#3{\s@l@ctbeam#3\relax \getcurpos \advance\y@v\txt@ff
\advance\y@v-\b@x \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z
\ifnum\b@n#1#2\relax \advance\y@ii\b@n\interbeam
\advance\y@ii-#2\interbeam \fi
\advance\y@ii-\altportee \raise\y@ii\rlap\balk@accent}
\let\balk@accent\C@ChaR
%\def\bflageolett{\n@iv120\acc@ubalk}
\def\busfz{\n@iv\tw@nty \acc@ubalk}
\def\blsfz{\n@iv21\acc@lbalk}
%\def\bdownbow{\n@iv22\acc@ubalk}
%\def\bupbow{\n@iv\@xxiii \acc@lbalk}
\def\bupz{\n@iv\@xxiv \acc@ubalk}
\def\blpz{\n@iv\@xxv \acc@lbalk}
\def\bust{\n@iv\@xxvi \acc@ubalk}
\def\blst{\n@iv\@xxvii \acc@lbalk}
\def\buppz{\n@iv28\acc@ubalk}
\def\blppz{\n@iv\@xxix \acc@lbalk}
\def\busf{\n@iv30\acc@ubalk}
\def\blsf{\n@iv31\acc@lbalk}
%\def\bupzst{\n@iv18\acc@ubalk}
%\def\blpzst{\n@iv19\acc@lbalk}
% The next macros puts triplets (and others def'd with \txt) on beams
\def\butext#1{\txt@ff\qn@width
\def\balk@accent{\uplap{\lrlap{\kern\tw@\txt@ff\txtfont\txt}\kern\internote}}%
\acc@ubalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR}
\def\bltext#1{\txt@ff\z@
\def\balk@accent{\vbox\@to\z@{\kern\internote\txtfont\lrlap\txt\vss}}%
\acc@lbalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR}
%%% end of accents on beams (correction proposed by Klaus Bechert)
%%% crescendo, decrescendo
% These macros puts variable size (de)crescendo marks.
% \(de)crescendo{#1} #1=length (any TeX dimension, max 192pt(\simeq 68mm))
\def\C@cresc#1{\y@iv#1\n@v\y@iv
\sp@pt\@ne \advance\n@v\thr@@ % sp->pt round up
\divide\n@v\si@ % the next is 6pt(notehead) wider
\max@n@v\@xxxii
\min@n@v\@ne % clip to extremities
\advance\n@v\n@ii % first character position (-1)
\mxsps\char\n@v}
\def\crescendo{\n@ii\@lxxxiii \C@cresc}
\def\decrescendo{\n@ii\@cxv \C@cresc}
\newskip\@icresc
\def\icresc{\getcurpos\global\@icresc\y@v }
\def\tcresc{\n@ii\@lxxxiii \C@cre}
\def\tdecresc{\n@ii\@cxv \C@cre}
\def\C@cre{\getcurpos\advance\y@v-\@icresc \kernm\y@v\C@cresc\y@v\kern\y@v}
%%% pedal signs
\def\raiseped{-5}
\def\sPed{\musixchar34}
\def\sPED{%
\zchar\raiseped\sPed%
\getcurpos\advance\y@v1.6ex\global\pdl@pos\y@v%
\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}% save current instrument and staff
}
\def\Ped{\musixchar35}
\def\PED{%
\zchar\raiseped\Ped%
\getcurpos\advance\y@v2.8ex\global\pdl@pos\y@v%
\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}% save current instrument and staff
}
\def\Dep{\musixchar33}
\def\DEP{%
\zchar\raiseped\Dep%
\global\pdl@pos\z@%
}
\def\sDep{\musixchar104}
\def\sDEP{%
\zchar\raiseped\sDep%
\global\pdl@pos\z@%
}
%%% pedal brackets version 1.21 RDT
%%
%% \pdld pedal down
%% \pdlu pedal up
%% \pdlud pedal up and immediately down
\newdimen\pdl@pos % cursor position for pedal down
\global\pdl@pos\z@
\def\pdld{\hbox{\hroff{%
\raise\raiseped\internote\hbox{\vrule height2ex depth0.5pt width0.5pt}%
\getcurpos\global\pdl@pos\y@v%
% save current instrument and staff
\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}%
}}}%
\def\pdlu{\hbox{\hroff{\getcurpos\advance\y@v-\pdl@pos%% compute length of horizontal rule
\kern-\y@v%
\raise\raiseped\internote\hbox{%
\vrule height-0.5pt depth1pt width\y@v%
\vrule height2ex depth0.5pt width0.5pt %% pedal up
}}}%
\global\pdl@pos\z@}%
\newbox\bigwedgebox % 1.22 RDT
\def\pdlud{\hbox{\hroff{\getcurpos\advance\y@v-\pdl@pos%% compute length of horizontal rule
\kern-\y@v%
\thinmuskip=2mu%
\setbox\bigwedgebox=\hbox{$\!\bigwedge\!$}%
\def\halfwidthbigwedge{0.5\wd\bigwedgebox}%
\advance\y@v-\halfwidthbigwedge%
\raise\raiseped\internote%
\hbox{%
\vrule height-0.5pt depth1pt width\y@v% draw horizontal rule
\kern\halfwidthbigwedge%
\raise0.33ex\lrlap{$\bigwedge$}% pedal up and down
}%
\getcurpos\advance\y@v\halfwidthbigwedge\global\pdl@pos\y@v%
}}}%
%% cut pedal rule at line end
%%
% compute length of horizontal rule
\def\pdlc@{\getcurpos\advance\y@v-\pdl@pos%
\kern-\y@v\raise\raiseped\internote\hbox{%
\vrule height-0.5pt depth1pt width\y@v %% draw horizontal rule
}}%
%%% fermata
\def\fermataup{\n@iv80\@Char}
\def\fermatadown{\n@iv81\@Char}
% center on whole note
\def\Fermataup#1{\wholeshift{\fermataup{#1}}}
\def\Fermatadown#1{\wholeshift{\fermatadown{#1}}}
%%% trills
\def\trilleX{\let\T@i\empty \C@trille}
\let\trille\trilleX
\def\TrilleX{\def\T@i{\ppff tr }\C@trille} % 1.24 changed from \it RDT
\let\Trille\TrilleX
\def\C@trille#1#2{\zcharnote{#1}{\y@v#2\noteskip \trill@}}
\let\maxtrilles\si@
% \maxtrilles and \@itrille[i] are only for obsolete Legacy \trillC
% and \TrillC; not related with new register allocation code. Leave
% it as-is. [version 1.15]
\newskip\@itrillei
\newskip\@itrilleii
\newskip\@itrilleiii
\newskip\@itrilleiv
\newskip\@itrillev
\newskip\@itrillevi
%\def\s@l@cttrille#1\relax{%
% \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi
% \ifnum\n@i<\maxtrilles \else
% \n@i\z@ \errmessage{Wrong trill number!}\fi
% \advance\n@i\@ne
% \edef\@itrille{\csname @itrille\roman@n@i}% dimen (altportee)
% }% select trill
\def\itrille{\itrill@old{0}}
\def\ttrille{\ttrill@old{0}}
\def\tTrille{\tTrill@old{0}}
\def\itrill@old#1{\s@l@cttrill#1\relax
\ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi
\getcurpos\global\tr@y\y@v}
\def\ttrill@old#1{\s@l@cttrill#1\relax
\message{\noexpand\tr@x=\the\tr@x, No. #1}%
\ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi
\let\T@i\empty \C@tri}
\def\tTrill@old#1{\s@l@cttrill#1\relax
\message{\noexpand\tr@x=\the\tr@x, No. #1}%
\ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi
\def\T@i{\ppff tr }\C@tri} % 1.24 changed from \it RDT
\def\C@tri#1{\getcurpos\advance\y@v-\tr@y \kernm\y@v
\zcharnote{#1}\trill@\kern\y@v\let\T@i\empty\let\@itrille\undefined}
\def\trill@{\hbox\@to\y@v{\T@i\leaders\hbox{\musixchar69}\hfill}}
%%%%%%
% \let\maxtrills\si@ % here disabled to avoid conflict with new register allocation code
% [version 1.15] moved out to the new register allocation code
% \newskip\tr@xi \tr@xi\maxdimen\relax % starting horizontal pos
% \newtoks\tr@swi % heading of trill
% \newskip\tr@yi % height of trill
\newcount\tr@number
\def\tr@loop{\tr@number\z@ \loop\ifnum\tr@number<\maxtrills
\s@l@cttrill\tr@number\relax
\advance\tr@number\@ne }
\def\s@l@cttrill#1\relax{%
\n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi
\ifnum\n@i<\maxtrills \else
\count@\maxtrills \advance\count@\m@ne
\errmessage{Wrong trill reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15]
\n@i\z@ % [version 1.15]
\fi
\advance\n@i\@ne
\xdef\tr@x{\csname tr@x\roman@n@i}%
\xdef\tr@y{\csname tr@y\roman@n@i}%
\xdef\tr@sw{\csname tr@sw\roman@n@i}%
}% select octiaviation line
%\newskip\tr@x \tr@x\maxdimen\relax % starting horizontal pos
%\newskip\tr@y % height of trill
\def\Itrille#1{\s@l@cttrill#1\relax
\ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi
\global\tr@sw={\relax}%
\C@T}
\def\ITrille#1{\s@l@cttrill#1\relax
\ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi
\global\tr@sw={{\ppff tr }}% 1.24 changed from \it RDT
\C@T}
\def\C@T#1{%
\getcurpos\global\tr@x\y@v % store horizontal pos
\inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height
\global\tr@y\y@i }
\def\Ttrille#1{\s@l@cttrill#1\relax
\ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi
\advance\tr@y-\altportee \let\T@ii\char \C@TR \global\tr@x\maxdimen }
\let\TTrille\Ttrille
\def\C@TR{%
\ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi
\advance\y@v-\tr@x \kernm\y@v \raise\tr@y\hbox\@to\y@v{%
% \the\tr@sw\xleaders\hbox{\musixchar69}\hfill\T@ii\n@ii}}%
% Correction by Julian Gilbey
\the\tr@sw\xleaders\hbox{\musixchar69}\hfill}}%
%%% tremolos version 1.19 RDT
%%% based on code by Werner Icking and Andre van Ryckeghem
%%% version 1.20 RDT re-defined using \raise, suggested by JPC
%%% version 1.21
%%% RDT changed beam numbers to 5, suggested by JPC
%%% RDT adjusted the vertical positions for 16th and 32nd tremolos
%%% version 1.24
%%% RDT use new counter \tr@nspose to preserve changes to \transpose in an \hbox
\newcount\tr@nspose % used to restore value of \transpose after closing an \hbox
\def\trml#1{\raise2\internote\hbox{\loffset{0.5}{\ibl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\trmu#1{\raise-3\internote\hbox{\loffset{0.5}{\ibu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\trrml#1{\raise3\internote\hbox{\loffset{0.5}{\ibbl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\trrmu#1{\raise-4\internote\hbox{\loffset{0.5}{\ibbu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\trrrml#1{\raise3\internote\hbox{\loffset{0.5}{\ibbbl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\trrrmu#1{\raise-4\internote\hbox{\loffset{0.5}{\ibbbu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
% whole notes are wider than quarter/half notes:
% version 1.21 RDT adjusted the offsets and vertical positions
\def\Trml#1{\raise3\internote\hbox{\ibl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\Trmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\Trrml#1{\raise3\internote\hbox{\ibbl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\Trrmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibbu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\Trrrml#1{\raise3\internote\hbox{\ibbbl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
\def\Trrrmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibbbu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}%
%%% octave lines
\def\octnumberup{\octnumberdefault\vrule width 0pt height2ex}
\def\octnumberdefault{\smallppff8} % version 1.17 RDT
\def\octnumberdown{\octnumberdefault$^a$\txtfont\kern 0.3em bassa\vrule width 0pt depth \Internote}
\def\octfinup{\check@staff
\n@v\@xxiii\n@ii\@xxiv\global\o@swz={\@ne}\fi
\C@of}
\def\octfindown{\check@staff
\n@v\@xxv \n@ii\@xxvi\global\o@swz={\z@}\fi
\C@of}
\def\C@of#1#2{\check@staff
\y@v#2\noteskip\zcharnote{#1}{\hbox\@to\y@v{%
\xdef\o@sw{\csname o@swz\endcsname}\relax
\octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\char\n@ii}}%
\fi}
%%%%%%
% selecting \octnumber??? according to \o@sw
\def\octnumber{% \show\o@sw
\setbox\w@rkbox\hbox{%
\ifnum \@ne=\the\o@sw\relax \octnumberup
\else \octnumberdown
\fi}%
\ifdim \wd\w@rkbox>\y@v\setbox\w@rkbox\hbox{\octnumberdefault}\fi
\box\w@rkbox
}
%%%%%%
% \let\maxoctlines\si@ % here disabled to avoid conflict with new register allocation code, except for \o@swz
% [version 1.15] moved out to the new register allocation code
% \newskip\o@xi \o@xi\maxdimen\relax % starting horizontal pos
% \newskip\o@yi % height of octline
\newtoks\o@swz % sense of octline for \octfin[up][down] without number
% \newtoks\o@swz % sense of octline for \octfin[up][down] without number
\newcount\o@number
\def\o@loop{\o@number\z@ \loop\ifnum\o@number<\maxoctlines
\s@l@ctoctline\o@number\relax
\advance\o@number\@ne }
\def\s@l@ctoctline#1\relax{%
\n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi
\ifnum\n@i<\maxoctlines \else
\count@\maxoctlines \advance\count@\m@ne
\errmessage{Wrong octaviation line reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15]
\n@i\z@% [version 1.15]
\fi
\advance\n@i\@ne
\xdef\o@x{\csname o@x\roman@n@i}%
\xdef\o@y{\csname o@y\roman@n@i}%
\xdef\o@sw{\csname o@sw\roman@n@i}%
}% select octiaviation line
%\newskip\o@x \o@x\maxdimen\relax % starting horizontal pos
%\newskip\o@y % height of octline
\def\ioctfinup{\Ioctfinup0}
\def\ioctfindown{\Ioctfindown0}
\def\Ioctfinup#1{\check@staff
\s@l@ctoctline#1\relax
\ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi
\global\o@sw={\@ne}\fi
\C@O}
\def\Ioctfindown#1{\check@staff
\s@l@ctoctline#1\relax
\ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi
\global\o@sw={\z@}\fi
\C@O}
\def\C@O#1{\check@staff
\getcurpos\global\o@x\y@v % store horizontal pos
\inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height
\global\o@y\y@i
\fi} % clise check@staff in Ioctfinup/down
\def\toctfin{\Toctfin0}
\def\Toctfin#1{\check@staff
\s@l@ctoctline#1\relax
\advance\o@y-\altportee \let\T@ii\char \C@TO \global\o@x\maxdimen
\fi}
\def\C@TO{\check@staff
\ifnum \@ne=\the\o@sw
\n@v\@xxiii \n@ii\@xxiv \else \n@v\@xxv \n@ii\@xxvi \fi
\ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi
\advance\y@v-\o@x \kernm\y@v \raise\o@y\hbox\@to\y@v{%
\octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\T@ii\n@ii}\relax
\fi}%
% Liftoctline #1 refnumber #2 lift[steps of internote]
\def\Liftoctline#1#2{\n@i#1\advance\n@i\@ne
\advance\csname o@y\roman@n@i#2\internote}
%%% some specials
% \def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}}
% version 1.19 RDT:
\let\lyricson\relax
\let\lyricsoff\relax
\def\metron#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2\lyricson}}
\def\metronequiv#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1\lyricson}}
\def\txt{3}
\def\xtuplet#1#2{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip
\sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}%
\zcharnote{#2}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont#1\/\/}}}
\def\triolet{\xtuplet\txt} % version 1.17 RDT
\def\xxtuplet#1:#2#3{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip
\sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}%
\zcharnote{#3}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont{#1:#2\/\/}}}}
%
% Following definitions based on tuplet.tex - conventional tuplet brackets for MusiXTeX.
% Col. G. L. Sicherman. Last revised 2003-05-17.
%
% Added to musixtex.tex version 1.16 by RDT.
%
% Standard MusiXTeX uses \uptrio and \downtrio to print tuplet brackets.
% We define \uptuplet and \downtuplet, with the same arguments:
%
% #1 : starting pitch
% #2 : width of bracket, in (\noteskip)s
% #3 : slope of bracket, in multiples of 1-1/8 degrees
%
% The user defines the text to appear in the opening as \tuplettxt.
% This is to avoid conflicting with the \txt in standard MusiXTeX.
%
% Examples:
%
% Draw a triplet bracket over the notes, starting at pitch "p",
% 1.25\noteskip wide, with a slope up of 3-3/8 degrees:
%
% \uptuplet p{1.25}3
%
% Draw a sextuplet bracket under the notes, starting at pitch "a",
% 2.5\noteskip wide, with a slope down of 4-1/2 degrees:
%
% \def\tuplettxt{6\/\/}
% \downtuplet{a}{2.5}{-4}
%
% Send comments, complaints, and bouquets to the Colonel at
% <colonel@monmouth.com>.
%
% Standard MusiXTeX prints a small "3" (or other number) within
% the bracket. Here we print the "3" in an opening in the bracket,
% so we need not use a small font.
%
% The double italic correction compensates for centering the number
% on the bracket line.
\def\tuplettxt{3\/\/}
%%% The rest is adapted from standard MusixTeX.
\newdimen\y@vii % x of right end of left part of bracket.
\newdimen\y@viii % x of left end of right part of bracket.
\newdimen\y@ix
\newbox\tuptxtb@x
% v@rline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree)
% (comments and ideas from Ian Collier) (from -20 upto 20 )
% This macro is used by some of the others which follow,
% using it directly it must be set in zero box
\def\v@rline#1#2#3{\n@v#3\y@i#2%
\setbox\tuptxtb@x\hbox{\hskip1pt\txtfont\tuplettxt\hskip1pt}%
\y@vii=\h@lf\y@i\advance\y@vii-\h@lf\wd\tuptxtb@x%
\n@ii-\tw@nty \min@n@v\n@ii
\max@n@v\tw@nty \n@iii\n@v
\ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars
\advance\n@v\@xxix
\setbox\ch@box\hbox{\mxsps\char\n@v}%
\ifdim\y@vii<\wd\ch@box \y@vii\wd\ch@box\fi% At least one whole segment!
\y@viii=\y@i\advance\y@viii-\y@vii%
\y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@
\raise#1\internote\hbox{\mxsps\char\n@iv
%
% Build bracket with slanted line segments of width 10pt.
% Left part of bracket:
%
\loop\ifdim\y@iv<\y@vii\raise\y@iii\copy\ch@box
\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat
%
% last element
%
% \finalheight=2.5\completewidth
% \finalheight=\n@iii\finalheight
% \divide\finalheight by 100
% \advance\overlapwidth by -\completewidth
% \stepheight=-2.5\overlapwidth
% \stepheight=\n@iii\stepheight
% \divide\stepheight by 100
% \advance\curheight by \stepheight
% \kern -\overlapwidth \raise\curheight \box\ch@box
%
\y@ix=\y@vii\advance\y@ix-\y@iv\hbox to\y@ix{\hss}%
\y@ix\y@vii\advance\y@ix-\wd\ch@box%
\y@iii\n@iii\y@ix\y@iii2\h@lf\y@iii\divide\y@iii\@c\raise\y@iii\copy\ch@box%
%
% Text:
%
\y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c%
\y@ix=-\y@vii \advance\y@ix\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x%
\hbox to\y@ix{\hss}%
\y@iii\h@lf\y@v \raise\y@iii\vbox to\z@{%
\vss{\copy\tuptxtb@x}\vss}
\y@ix=\y@viii \advance\y@ix-\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x
\hbox to\y@ix{\hss}% To start of right part. No-op unless bracket is short.
%
% Right part of bracket:
%
\y@iii2\h@lf\y@viii \y@iii\n@iii\y@iii \divide\y@iii\@c%
\y@iv=\y@viii \advance\y@iv\wd\ch@box%
\loop\ifdim\y@iv<\y@i\raise\y@iii\copy\ch@box%
\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat
%
% Finish off the right part:
%
\y@iii\y@i\advance\y@iii-\wd\ch@box\y@iii2\h@lf\y@iii\y@iii\n@iii\y@iii%
\y@ix=\y@i\advance\y@ix-\y@iv\hbox to\y@ix{\hss}%
\divide\y@iii\@c%
\raise\y@iii\copy\ch@box%
%
\raise\y@v\hbox{\mxsps\char\n@iv}}}
%
% y@i =complete length
% y@ii =height of linechar
% y@iii =current height
% y@iv =current width
% y@v =height of ending line
% y@vii =width of left segment of bracket
% y@viii=y@vii + width of opening
% y@ix =adjustment register
%
% n@iii=slope
% n@iv =(number of char for hooks)
% n@v =slope (number of linechar)
\def\X@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width
\inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\v@rline\n@i\y@v{#3}}}
\def\uptuplet{\n@iv22\X@bkt}
\def\downtuplet{\n@iv21\X@bkt}
%\check
\def\zbreath{\check@staff\raise\si@\internote\rlap{\BIGtype'}\fi}
\def\cbreath{\check@staff\adv@box{\raise\si@\internote
\hbox\@to\noteskip{\hss\BIGtype'\hss}}\fi}
% The following macros can be used to surround a note by parentheses
% \l[r]par p produces a left[right] parenthesis at pitch p (Ian Collier)
\def\lpar{\n@iv\thr@@ \@Char}
\def\rpar{\n@iv\f@ur \@Char}
% \bracket pn draws a square bracket [ to bracket an interval
% of an n-th whose lowest note is p (Ian Collier)
\def\bracket#1#2{\y@iv#2\internote \advance\y@iv\tw@\internote
\inhgetn@i#1\relax\pl@base \advance\y@i-1\h@lf\internote
\raise\y@i\llap{\uplap{\offinterlineskip\hbox{\mxsps\@xxvii}%
\hbox{\vrule\@height\y@iv}\hbox{\mxsps\@xxvii}}}}
%%% dynamics
\def\f@kern{\kernm\p@ne ex}
\def\p@kern{\kernm\p@ne5ex}
\def\f{{\ppff f}}
\def\ff{{\ppff f\f@kern f}}
\def\fp{{\ppff f\f@kern p}}
\def\sF{{\ppff s\ppff \p@kern f}} % changed \it to \ppff 1.24 RDT
\def\fff{{\ppff f\f@kern f\f@kern f}}
\def\ffff{{\ppff f\f@kern f\f@kern f\f@kern f}}
\def\mf{{\ppff m\p@kern\f@kern f}}
\def\mp@{{\ppff m\p@kern p}}
\let\mezzopiano\mp@
\def\p{{\ppff p}}
\def\pp{{\ppff p\p@kern p}}
\def\ppp{{\ppff p\p@kern p\p@kern p}}
\def\pppp{{\ppff p\p@kern p\p@kern p\p@kern p}}
\def\sfz{{\ppff s\p@kern f\f@kern z}} % version 1.16
\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} % version 1.16
%%% spacings
% if you want to reduce the space behind e.g. \changecontext, use
% \addspace{dim} ! Only scaleable values are allowed !
\def\addspace#1{\kern#1\global\advance\x@skip#1}
% \hardspace inserts (reduces) outside of \notes..\en unscaleable space
\let\fil@spc\empty
\def\hardspace#1{\check@nopen\t@rmskip\y@v#1\addspace\y@v\fil@spc}
\def\off#1{\advance\locx@skip#1\kern#1}
\def\sk{\off\noteskip}
\def\hsk{\off{\h@lf\noteskip}}
\def\bsk{\off{-\noteskip}}
\def\hbsk{\off{-\h@lf\noteskip}} % version 1.27 RDT
%%
% Redefine \qsk to be scaleable softwidth rather than a fixed kern
% Otherwise, over/underfull boxes will occur on rescaled (pass 2) material
%%
\def\qqsk{\off{\qu@rt\@l@mskip}} % version 1.16 RDT
\def\hqsk{\off{\h@lf\@l@mskip}}
\def\tqsk{\off{\p@seven\@l@mskip}} % version 1.25 RDT
\def\qsk{\off\@l@mskip}
\def\bhsk{\off{-\h@lf\@l@mskip}} % version 1.27 RDT
\def\btsk{\off{-\p@seven\@l@mskip}} % version 1.27 RDT
\def\bqsk{\off-\@l@mskip} % version 1.27 RDT
\def\nspace{\hardspace{\h@lf\qn@width}}
\def\qspace{\hardspace\qn@width}
%%% notes spacing
\def\arithmeticskipscale{%
\def\znotes{\vnotes0\elemskip}
\def\notes{\vnotes2\elemskip}% 16th
\def\notesp{\vnotes2\h@lf\elemskip}% 16th point=8 trio
\def\Notes{\vnotes3\elemskip}% 8th
\def\Notesp{\vnotes3\h@lf\elemskip}% 8th point=4 trio
\def\NOtes{\vnotes4\elemskip}% 4th
\def\NOtesp{\vnotes4\h@lf\elemskip}% 4th point
\def\NOTes{\vnotes5\elemskip}% 2th
\def\NOTesp{\vnotes5\h@lf\elemskip}% 2th point
\def\NOTEs{\vnotes6\elemskip}% 1th
\def\NOTEsp{\undefined}%
\def\NOTES{\undefined}%
}%
\def\geometricskipscale{%
\def\znotes{\vnotes0\elemskip}
\def\notes{\vnotes2\elemskip}% 16th
\def\notesp{\vnotes2.38\elemskip}% 16th point=8 trio
\def\Notes{\vnotes2.83\elemskip}% 8th
\def\Notesp{\vnotes3.36\elemskip}% 8th point=4 trio
\def\NOtes{\vnotes4\elemskip}% 4th
\def\NOtesp{\vnotes4.76\elemskip}% 4th point
\def\NOTes{\vnotes5.66\elemskip}% 2th
\def\NOTesp{\vnotes6.72\elemskip}% 2th point
\def\NOTEs{\vnotes8\elemskip}% 1th
\def\NOTEsp{\vnotes9.52\elemskip}% 1th
\def\NOTES{\vnotes11.32\elemskip}% 1th
}%
\def\nnotes{\vnotes1.6\elemskip} % version 1.16 RDT (corrected 2015-03-31)
\def\nnnotes{\vnotes1.28\elemskip} % version 1.16 RDT (corrected 2015-03-31)
\arithmeticskipscale
\def\scale#1{\def\scalenoteskip{#1}}
\let\scalenoteskip\normalvalue
\def\multnoteskip#1{\noteskip#1\noteskip}
\def\vnotes#1\elemskip{\noteskip#1\@l@mskip \@vnotes}
\let\V@sw\z@
%\def\varnotes#1{\t@rmskip \let\V@sw\@ne
% \setbox\ch@box\hbox{#1}\noteskip\wd\ch@box \@vnotes}
\def\hardnotes#1\notes{\t@rmskip \let\V@sw\@ne
\noteskip#1\relax \@vnotes}
\let\thelyrics\empty
%\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne \def\thelyrics{\hbox{#1}}%
% \setbox\ch@box\thelyrics \noteskip\wd\ch@box \@vnotes}
\def\softlyrics#1{\def\thelyrics{\hbox{#1}}}%
\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne
\let\save@noteskip\noteskip
\def\noteskip{\z@\relax\errmessage{You cannot use \noexpand\noteskip
in \noexpand\hardlyrics's 1st argument!}}%
\def\thelyrics{\hbox{#1}}%
\setbox\ch@box\thelyrics \let\noteskip\save@noteskip
\noteskip\wd\ch@box \@vnotes}
\def\@vnotes{\multnoteskip\scalenoteskip
\def|{\nextstaff}\def&{\nextinstrument}\normaltranspose\transpose
\check@nopen\notes@open\@ne
\kern\n@skip\advance\x@skip\n@skip \locx@skip\x@skip
\n@skip\noteskip \noinstrum@nt\z@ \begininstrument}
\def\en{\@ndstaff\notes@open\z@
\ifnum\V@sw>0\t@rmskip
\fi
\let\thelyrics\empty}
\let\enotes\en
\newcount\notes@open
\def\check@nopen{%
\ifnum\notes@open>\z@ \en\errmessage{\@mis\noexpand\enotes ->}\fi}
%%% text, lyrics, free positioning of chars
\def\pl@base{\y@i\n@i\internote}
\def\lrlap#1{\rlap{\hss#1}}
\def\hard@box#1{\rlap{\hbox\@to\noteskip{#1\hfil}}}
\def\dhard@box#1{\rlap{\hbox\@to\tw@\noteskip{#1\hfil}}}
\def\thard@box#1{\rlap{\hbox\@to\thr@@\noteskip{#1\hfil}}}
\def\zcharnote{\let\@Ti\rlap \C@ch}
\def\lcharnote{\let\@Ti\llap \C@ch}
\def\ccharnote{\let\@Ti\lrlap \C@ch}
\def\hcharnote{\let\@Ti\hard@box \C@ch}
\def\charnote#1#2{\zcharnote{#1}{#2}\sk}
\def\zcn{\zcharnote} % version 1.16
\def\ccn{\ccharnote}
\def\lcn{\lcharnote}
\def\C@ch#1#2{\check@staff\inhgetn@i#1\relax\pl@base\raise\y@i\@Ti{#2}\fi}
\def\zmidstaff{\let\@Ti\rlap \C@mid}
\def\lmidstaff{\let\@Ti\llap \C@mid}
\def\cmidstaff{\let\@Ti\lrlap \C@mid}
\def\C@mid#1{\check@staff\y@v\interportee \advance\y@v\f@ur\Interligne \divide\y@v\tw@
\raise\y@v\uplap{\@Ti{\strut#1}\vss}\fi}
\def\zchar#1#2{\check@staff\raise#1\internote\rlap{#2}\fi}
\def\lchar#1#2{\check@staff\raise#1\internote\llap{#2}\fi}
\def\cchar#1#2{\check@staff\raise#1\internote\lrlap{#2}\fi}
\def\hchar#1#2{\check@staff\raise#1\internote\hard@box{#2}\fi}
\def\uptext#1{\check@staff\zchar\t@n{#1}\fi}
\def\Uptext#1{\check@staff\zchar\fourt@@n{#1}\fi}
\def\setsongraise#1#2{\n@v#1\relax % select instrument
\expandafter\def\csname T@R\romannumeral\n@v\endcsname{#2}}
% [version 1.15] moved out to the new register allocation code
% \let\T@Ri\z@
\def\qlrlap#1{\rlap{\hbox to \qn@width{\hss#1\hss}}}
\def\zsong{\let\@Ti\rlap \C@t}
\def\lsong{\let\@Ti\llap \C@t}
\def\csong{\let\@Ti\qlrlap \C@t}
\def\hsong{\let\@Ti\hard@box \C@t}
\def\dhsong{\let\@Ti\dhard@box \C@t}
\def\thsong{\let\@Ti\thard@box \C@t}
\def\C@t#1{\C@tx{\@Ti{\strut#1}\vss}}
\def\C@tx{%
\ifnum\noinstrum@nt=\@ne \y@iv\staffbotmarg \else
\advance\noinstrum@nt\m@ne
\y@iv\csname interinstrument\romannumeral\noinstrum@nt\endcsname
\C@Inter \advance\y@iv\stem@skip \divide\y@iv\tw@
\advance\noinstrum@nt\@ne \fi
\advance\y@iv-\csname T@R\romannumeral\noinstrum@nt\endcsname
%% \advance\noinstrum@nt\@ne \fi
\lower\y@iv\uplap}
%%% slope lines and brackets
% varline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree)
% (comments and ideas from Ian Collier) (from -20 upto 20 )
% This macro is used by some of the others which follow,
% using it directly it must be set in zero box
\def\varline#1#2#3{\n@v#3\y@i#2%
\n@ii-\tw@nty \min@n@v\n@ii
\max@n@v\tw@nty \n@iii\n@v
\ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars
\advance\n@v\@xxix
\setbox\ch@box\hbox{\mxsps\char\n@v}%
\y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@
\raise#1\internote\hbox{\ifx\@hook\@ne \mxsps\char\n@iv \fi
% main loop
\loop\ifdim\y@iv<\y@i
\raise\y@iii\copy\ch@box\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat
% last element
%
% \finalheight=2.5\completewidth
% \finalheight=\n@iii\finalheight
% \divide\finalheight by 100
% \advance\overlapwidth by -\completewidth
% \stepheight=-2.5\overlapwidth
% \stepheight=\n@iii\stepheight
% \divide\stepheight by 100
% \advance\curheight by \stepheight
% \kern -\overlapwidth \raise\curheight \box\ch@box
%
\y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c \advance\y@iv-\y@i
\y@ii-2\h@lf\y@iv \y@ii\n@iii\y@ii \divide\y@ii\@c \advance\y@iii\y@ii
\kernm\y@iv\raise\y@iii\box\ch@box%
\ifx\@hook\@ne \raise\y@v\hbox{\mxsps\char\n@iv}\fi
% text in the middle
\ifx\@text\@ne \ifnum\n@vi=\@ne \y@iii\p@ \else\y@iii-\p@ \fi
\advance\y@iii\h@lf\y@v \kernm\h@lf\y@i\raise\y@iii\vbox\@to\z@{%
\ifnum\n@vi=\@ne \vss \fi\lrlap{\txtfont\txt}\ifnum\n@vi=\@ne \else\vss \fi}\fi}%
\let\@hook\empty \let\@text\empty}
%
% y@i =complete length
% y@ii =height of linechar
% y@iii=current height
% y@iv =current width
% y@v =height of ending line
%
% n@iii=slope
% n@iv =(number of char for hooks)
% n@v =slope (number of linechar)
% n@vi =1 -> text above
% @hook=\@ne -> draws hookrules at begin and end of line
% @text=\@ne -> puts text at the middle of the line (def'd with \txt)
% \ov[un]bkt{p}{n}{s} draws a bracket over the music starting at the
% current position at pitch p, width n\noteskip and slope s, causing no space
% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree])
\def\ovbkt{\n@iv22\C@bkt}
\def\unbkt{\n@iv21\C@bkt}
\def\C@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width \let\@hook\@ne
\inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\varline\n@i\y@v{#3}}}
% \up[down]trio{p}{n}{s} same as above,
% draws \txt (default \eightit 3) above[below] in the middle
% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree])
\def\uptrio{\n@vi\z@ \let\@text\@ne \ovbkt}
\def\downtrio{\n@vi\@ne \let\@text\@ne \unbkt}
%
% slide #1=height #2=number of elements #3=slope(-8 to 8 [step 10degree])
%
\def\slide#1#2#3{\n@ii#3\relax\inhgetn@i#1\relax%
\ifnum\n@ii>\m@ne \advance\n@ii\m@ne\let\@Ti\raise
\else \n@ii-\n@ii \advance\n@ii\s@v@n\let\@Ti\lower \fi
\setbox\toks@box\hbox{\mxsps\char\n@ii}\n@iii\z@
\raise\n@i\internote\rlap{\hbox{\loop\ifnum\n@iii<#2%
\@Ti\n@iii\ht\toks@box\copy\toks@box\advance\n@iii\@ne\repeat}}}
%%% standard settings
% [115] make them compatible to >12 instruments
\def\resetlayout{\def\interfacteur{9}%
\stafftopmarg\thr@@\Interligne \staffbotmarg\thr@@\Interligne
\count@\z@ \loop
\advance\count@ by\@ne
\expandafter \let\csname n@l\roman@c@\endcsname \fiv@
% \expandafter\def\csname interfacteur\roman@c@\endcsname{\interfacteur} % RDT deleted 1.26
\ifnum\count@<\maxinstruments\repeat
\resetclefsymbols}
\def\resetclefsymbols{%
\count@\z@ \loop
\advance\count@ by\@ne
\expandafter \let\csname treblec@s\roman@c@\endcsname \z@
\expandafter \let\csname altoc@s\roman@c@\endcsname \z@
\expandafter \let\csname bassc@s\roman@c@\endcsname \z@
\ifnum\count@<\maxinstruments\repeat
}
% [version 1.15] setup the default maximum element numbers to the same values of T.114
\setmaxinstruments\si@
\setmaxcxxviiibeams\si@ % 128th beam
\setmaxcclvibeams\z@ % 256th beam
\setmaxgroups\thr@@ % groups of inst's or choirs
\setmaxslurs\maxinstruments
\setmaxtrills\maxinstruments
\setmaxoctlines\maxinstruments
%
% [version 1.15] new register allocation code requires some changes
%\resetlayout % no need
%\let\nbinstruments\maxinstruments % no need
%\normalnotesize % already executed in \setmaxinstruments
\normalmusicsize
\normalnotesize % important: execute it again after the first execute of \normalmusicsize --- to initialize \metron stem length. but why?
%\resetlayout % no need
\def\nbinstruments{1}
\noinstrum@nt1\s@l@ctinstr\internote\Internote
\def\tabstringfnt{\ifdim\internote<.95\Internote \fivess % 1.29 RDT
\else\ifdim\internote<1.19\Internote \sixss
\else\ifdim\internote<1.43\Internote \eightss
\else\niness\fi\fi\fi}%
%%%
%
% This is muflex.tex version 1.00 , January 1993
%
% Macro library for MusicTeX `flexiline' operations: MuFlex.
% The idea is to set up a two pass system.
% On the first pass, information about each bar is written to the file
% jobname.mx1.
% After the first pass, an external (non TeX) routine is run to
% determine optimal values of the elemental spacing (\elemskip)
% for each line, so as to properly fill each line, and to lead to
% the piece filling an integral number of lines.
% The relevant parameters are written onto the file
% jobname.mx2.
% On the second pass, the .mx2 file is read in, and the information
% used as described above.
%
% Ross Mitchell, January 1993.
%
%%%
\newwrite\outmux
\def\fil@{\immediate\write\outmux}
%%
% \mulooseness is the MuFlex analog of TeX's \looseness parameter:
% the increment to the natural number of lines in the section just
% ended.
%%
\newcount\mulooseness
% Alternative \linegoal
\newcount\linegoal
%%
% Invoke \startmuflex before \startpiece to find out the pass number
% and generally get things going.
%%
% !!! If you want (have) to override the .mx1, delete the .mx2 before !!!
% !! You have to change the mx1, if you change the spacing inbetween !!
\newif\ifstartmuflex@done
\def\startmuflex{%
\ifstartmuflex@done
\immediate\write16{Warning: \noexpand\startmuflex\space
already done, ignored.}%
\else
\startmuflex@donetrue
% \global\let\ifstartmuflex@done\iftrue
\openin\inmux\jobname.mx2\relax
\ifeof\inmux
\immediate\openout\outmux\jobname.mx1\relax
\fil@{\mufl@x}%
\pass@I
\else
\message{(\jobname.mx2)}\pass@II
\fi
\fi}
\let\endmuflex\empty
\newbox\l@eftrightbox
\def\leftrightrepeat@I{%
% \setbox\toks@box\l@eftrightrepeat\y@v\wd\toks@box
% \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box
% \advance\y@v\y@iv \global\advance\x@skip-\y@v
%
\setleftrightrepeat\@bar
\edef\thex@skip{\the\x@skip}%
\setbox\l@eftrightbox\l@eftrightrepeat
\edef\they@v{\the\wd\l@eftrightbox}%
\setbox\l@eftrightbox\l@eftrepeat
\edef\they@iv{\the\wd\l@eftrightbox}%
\global\x@skip\thex@skip
\fil@{l \they@v\space\they@iv}}
\def\leftrepeat@I{%
% \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box
% \global\advance\x@skip-\y@iv
\setleftrepeat\@bar
\edef\thex@skip{\the\x@skip}%
\setbox\l@eftrightbox\l@eftrepeat
\edef\they@iv{\the\wd\l@eftrightbox}%
\global\x@skip\thex@skip
\fil@{L \they@iv}}
% \akkoladen from: "Rainer Dunker" <rainer.dunker@ebe-online.de>
\def\akkoladen#1{%
\def\akk@count{0}% avoid occupying yet another count register
\ifx\empty#1\else\@akkoladen#1\@nd\fi
% deactivate all remaining \grouptop...bottom items
\loop
\ifnum\akk@count<\maxgroups
\incr@akk@count
\expandafter\groupbottom\expandafter{\akk@count}\maxdimen
\expandafter\grouptop\expandafter{\akk@count}\z@
\repeat}
\def\@akkoladen#1#2#3\@nd{%
\incr@akk@count
\expandafter\groupbottom\expandafter{\akk@count}{#1}%
\expandafter\grouptop\expandafter{\akk@count}{#2}%
\ifx\empty#3\else\@akkoladen#3\@nd\fi}
\def\incr@akk@count{%
\count@\akk@count\relax \advance\count@\@ne \edef\akk@count{\the\count@}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This is MusiXTex code for multiple left curly brackets %
% %
% submitted by Mthimkhulu Molekwa %
% to the mutex list on 19 May 1999 %
% %
% %
% usage: %
% \curlybrackets{<instrument1lower><instrument1upper> %
% <instrument2lower><instrument2upper> %
% ... %
% <instrument_n_lower><instrument_n_upper> %
% } %
% %
% %
% %
% This version corrected 07/23/2007 by Rainer Dunker to make it %
% insensitive to changes in \interstaff by PMX %
% %
% Added to musixtex.tex version 1.16 by RDT %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros for tablature. They put numbers on or above the staff lines. %
% Based on tabdefs.tex by R.J. Gelten %
% %
% 1.33 RDT %
% replace ledger lines by slashes (/) for string numbers > number of staff lines %
% %
% 1.33a RDT %
% replace 4-7 slashes by numbers 4-7 %
% decrement number of slashes if tabstylespace is true %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcount\stringraise
\newif\iftabstylespace\tabstylespacefalse
% \tabbox ensures a white background for the tab number in the ps-file
% so the stafflines don't overwrite the number. Symbols are centered.
\def\tabbox#1#2{%
\setbox0=\hbox{\tabfnt #2}%
\stringraise\nblines
\advance\stringraise by -#1
\multiply\stringraise by 2
\advancefalse\def\q@u{}\loffset{0.45}{\@nq{\the\stringraise}}%
\iftabstylespace\else\advance\stringraise-1\fi
\special{ps: 1 setgray}%
\ccharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}%
\special{ps: 0 setgray}%
\ccharnote{\the\stringraise}{\box0}%
}
% \ltabbox does the same as \tabbox, except that it produces
% left-outlined symbols
\def\ltabbox#1#2{\setbox0=\hbox{\tabfnt #2}%
\stringraise\nblines
\advance\stringraise by -#1
\multiply\stringraise by 2
\advancefalse\def\q@u{}\loffset{0.2}{\@nq{\the\stringraise}}%
\iftabstylespace\else\advance\stringraise-1\fi
\special{ps: 1 setgray}%
\zcharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}%
\special{ps: 0 setgray}%
\zcharnote{\the\stringraise}{\box0}%
}
% \rtabbox does the same as \tabbox, except that it produces
% right-outlined symbols
\def\rtabbox#1#2{\setbox0=\hbox{\tabfnt #2}%
\stringraise\nblines
\advance\stringraise by -#1
\multiply\stringraise by 2
\advancefalse\def\q@u{}\loffset{0.75}{\@nq{\the\stringraise}}%
\iftabstylespace\else\advance\stringraise-1\fi
\special{ps: 1 setgray}%
\lcharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}%
\special{ps: 0 setgray}%
\lcharnote{\the\stringraise}{\box0}%
}
\newcount\stringnum
\newcount\nslashes
% \tab takes two arguments.
% #1 is the string number
% #2 is the symbol to be put on the string
% the symbols are horizontally centered and a \sk is put behind it,
% to jump to the position of the next symbol.
% if the string number > \nblines, ledger lines are replaced by slashes (/)
\def\tab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\tabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\tabbox{#1}{#2}\fi\sk}
% left spilling \tab
\def\ltab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\ltabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\ltabbox{#1}{#2}\fi\sk}
% right spilling \tab
\def\rtab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\rtabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\rtabbox{#1}{#2}\fi\sk}
% \chord-tab symbol. Same as \tab, but no \sk is given, so multiple
% symbols can be placed above one another
\def\ztab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\tabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\tabbox{#1}{#2}\fi}
% left spilling \ztab
\def\zltab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\ltabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\ltabbox{#1}{#2}\fi}
% right spilling \ztab
\def\zrtab#1#2{%
\stringnum=#1
\ifnum\stringnum>\nblines
\nslashes=\stringnum
\advance\nslashes by -\nblines
\iftabstylespace\advance\nslashes by -1\fi
\def\numslashes{\the\nslashes}
\ifcase\numslashes\rtabbox{#1}{#2}\or\zcn{-3}{\tabfnt/#2}\or\zcn{-3}{\tabfnt//#2}\or\zcn{-3}{\tabfnt///#2}\or\zcn{-3}{\tabfnt 4}\or\zcn{-3}{\tabfnt 5}\or\zcn{-3}{\tabfnt 6}\or\zcn{-3}{\tabfnt 7}\fi%
\else\rtabbox{#1}{#2}\fi}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% define a new clefsymbol \tabclef for tablature %
% 1.29 RDT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\tabclef{%
\setbox0=\hbox{\tabcleffnt T}
\setbox1=\vbox{\baselineskip=0.5\baselineskip
\hbox to 2\wd0{{\tabcleffnt T}\hfil}
\hbox to 2\wd0{{\tabcleffnt A}\hfil}
\hbox to 2\wd0{{\tabcleffnt B}\hfil}
}
\ifnum\nblines=6\lower1.5\internote\box1
\else\ifnum\nblines=4\lower3.5\internote\box1\else\lower2.5\internote\box1\fi\fi}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% tiny duration notes placed above tablature staff %
% 1.33a RDT %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcount\tiny@hgt % = 2 * \nblines + 1
% need to suppress ledger lines and prevent raising dots in dotted notes
\def\settiny@hgt{\tiny@hgt=\nblines\multiply\tiny@hgt by 2\advance\tiny@hgt by1}
\def\tzwh{%
\settiny@hgt
\tinynotesize\advancefalse\def\w@h{\musixfont\nin@}\y@v\wn@width
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@w \let\n@sym\w@h
\pl@base\setst@m\resetst@m\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzwhp{%
\settiny@hgt
\tinynotesize\advancefalse\def\w@h{\musixfont\nin@}\y@v\wn@width
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@w \let\n@sym\w@h
\pl@base\setst@m\resetst@m\raise\y@i\hbox{\n@sym\musixchar\z@}\advancetrue\fi}
\def\tzhu{%
\settiny@hgt
\tinynotesize\advancefalse
\check@staff\getn@i{\the\tiny@hgt}\relax\y@v\qn@width
\pl@base\setst@m\upst@m\raise\y@i\hbox{\musixfont\@ight}\advancetrue\fi}
\def\tzhup{%
\settiny@hgt
\tinynotesize\advancefalse
\check@staff\getn@i{\the\tiny@hgt}\relax\y@v\qn@width
\pl@base\setst@m\upst@m\raise\y@i\hbox{\musixfont{\@ight}\musixchar\z@}\advancetrue\fi}
\def\tzqu{%
\settiny@hgt
\tinynotesize\advancefalse
\check@staff\getn@i{\the\tiny@hgt}\relax\y@v\qn@width
\pl@base\setst@m\upst@m\raise\y@i\hbox{\musixfont\s@v@n}\advancetrue\fi}
\def\tzqup{%
\settiny@hgt
\tinynotesize\advancefalse
\check@staff\getn@i{\the\tiny@hgt}\relax\y@v\qn@width
\pl@base\setst@m\upst@m\raise\y@i\hbox{\musixfont{\s@v@n}\musixchar\z@}\advancetrue\fi}
\def\tzcu{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii\@xl
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@q \let\n@sym\q@u\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzcup{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii\@xl
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@qp \let\n@sym\q@up\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzccu{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii\@xli
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@q \let\n@sym\q@u\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzccup{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii\@xli
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@qp \let\n@sym\q@up\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzcccu{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii42
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@q \let\n@sym\q@u\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
\def\tzcccup{%
\settiny@hgt
\tinynotesize\advancefalse\q@symbol\n@vii42
\check@staff\getn@i{\the\tiny@hgt}\relax\let\n@fon\g@qp \let\n@sym\q@up\y@v\qn@width
\pl@base\setst@m\up@flag\raise\y@i\hbox{\n@sym}\advancetrue\fi}
%%%%%%%% end of tablature support %%%%%%%%%%%%
\let\origin@lwrit@staffs\writ@staffs
\def\writ@staffs{%
\origin@lwrit@staffs
\ifx\br@cks\empty\else\expandafter\@bracks\br@cks\ende\fi}
\let\br@cks\empty
\def\curlybrackets#1{\def\br@cks{#1}}
\def\@bracks#1#2#3\ende{%
\ifnum #1<#2 %=========================== inserted by D.S.(?)
\noinstrum@nt=#1\s@l@ctinstr\b@zi\altitude
\noinstrum@nt=#2\s@l@ctinstr\b@zii\altitude
\advance\b@zii-\b@zi
\C@Inter
\advance\b@zii\nblines\internote
\advance\b@zii\nblines\internote
\advance\b@zii-2\internote
\n@v\b@zii \sp@pt\tw@ \advance\n@v\@cxxviii
\divide\b@zii\tw@
\advance\b@zi\b@zii
\raise\b@zi\rlap{\mxsps\char\n@v\kern\instrum@in@group}%
\fi %==================================== inserted by D.S.(?)
\ifx\empty#3\else\@bracks#3\ende\fi}
%%
% Define \pass@I to perform the following functions:
%
% (a) set line and page breaking for the first pass by setting
% rigid values for \elemskip (#1),
% \maxbarsinlin@ (#2)
%
% (b) Redefine \t@rmskip so that it writes to the .mx1 file;
%
% (c) Redefine part of \debutmorceau to open the output (.mx1) file
% and write the following parameters to the .mx1 file:
% \line@width
% \parindent
% \beforeruleskip
% \afterruleskip
% \elemskip
% \clef@skip
% \sign@skip;
%
% (d) redefine various other macros so that length measures will be
% written to the .mx1 file
%%
\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness\space\the\linegoal}%
\mulooseness\z@\relax \linegoal\z@}%
%\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness}\mulooseness\z@}%
%%
% Redefine \t@rmskip to include a macro for writing a record to a file,
% and define the macro
%%
\def\fil@termskip{%
\fil@{\the\barsinpi@c@\space\the\widthtyp@\space\the\x@skip}%
\widthtyp@\@ne}%
%%
% Redefine part of debutmorceau to write header information to file
%%
\def\fil@begin{%
\fil@{S}% Startindicator
\fil@{\the\line@width}%
\fil@{\the\parindent}%
\fil@{\the\beforeruleskip}%
\fil@{\the\afterruleskip}%
\fil@{\the\@l@mskip}%
\fil@{\the\clef@skip}%
\fil@{\the\sign@skip}}%
%
% -> \writ@newsigns
%
\def\fil@signs{%
\maxsign@skip\z@
\n@loop \s@l@ctsigns
\sign@skip\tw@\Internote
\sign@skip\a@s\sign@skip
\ifdim\sign@skip<\z@ \sign@skip-\sign@skip \fi
\global\advance\sign@skip\smallvalue\Internote
\ifdim\maxsign@skip<\sign@skip \global\maxsign@skip\sign@skip
\fi
\repeat
\global\sign@skip\maxsign@skip
\fil@{s\space\the\sign@skip}}%
%
% -> \Contpiece
%
\def\fil@indent{\fil@{\the\barsinpi@c@\space0 \the\parindent}}%
%
% when a line is stopped with a zbar, to the next bar is added the amount
% of afterruleskip
% -> no line break during Pass 1 and indicate musixflx a zbar
%
\def\zbar{\zn@wbar\fil@{z \the\barno}}%
%
% \leftrightrepeat behaves different in mid of line and end of line
% -> no line break during Pass 1, get the widths and
% indicate musixflx a leftrightrepeat
%
\let\leftrightrepeat\leftrightrepeat@I
\let\zleftrightrepeat\leftrightrepeat@I % RDT 1.28
%
% s.a.
%
\let\leftrepeat\leftrepeat@I
\let\zleftrepeat\leftrepeat@I % RDT 1.28
%
% -> \hardspace
%
\def\fil@spc{\fil@{h \the\y@v}}%
%
% makes the .mx2 more transparent
%
\def\fil@barno{\fil@{b \the\barno}}%
%
% break line if value of \lin@pos (exclusive parindent, signs and clefs)
% is larger than 0.5\hsize
%
\def\T@bil{\getcurpos \ifdim\y@v<\h@lf\line@width}%
%
% close the file
%
\def\endmuflex{\immediate\closeout\outmux}}%
%%
% Macros to set up the second pass
%%
\newread\inmux
%%
% Main macro: \pass@II
% Function: %%%(a) Open the .mx2 file
% %%%(b) Set the number of lines per page to #1
% (c) Set the \everystaff macro to read and decode line
% parameter settings
% %%%(d) Define end of bar, end of line and repeat macros
% %%% according to \autolines
%%
\def\pass@II{\def\ragg@d{\hfilneg\ }%
% \def\everyst@ff{\everystaff\read\inmux\@to\inline \inline}} % ancient
\def\everyst@ff{\read\inmux\@to\inline \inline\relax \everystaff}}
%%
% \inline expands to \lineset#1#2#3#4#5, so define the latter
%%
\def\lineset#1#2#3#4#5{\ifx\no@l\empty \message{<#1>}\fi
\maxbarsinlin@#2%
\@l@mskip#3%
\elemskip\@l@mskip
\afterruleskip#4%
\beforeruleskip#5}
\def\musicparskip{\parskip\z@ plus\fiv@\Interligne minus\Interligne}
\def\endcatcodesmusic{%
\catcode`\&\catcode@and
\catcode`\|\catcode@vert
\catcode`\>\catcode@gt
\catcode`\<\catcode@lt
\catcode`\!\catcode@excl
\catcode`\*\catcode@star
\catcode`\:\catcode@sc
\catcode`\.\catcode@pt
\let\bar\@@bar
\catcodesmusicfalse}
\endcatcodesmusic
%...\let\wlog=\@wloG
\catcode`\@=\catcodeat
\endinput