% % 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{16} \def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum \def\mxversuffix{}% \edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} \def\mxdate{2015-02-27} \immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% \everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% % T116: % 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: abbreviations with \multnoteskip\smallvalue % and \multnoteskip\tinyvalue 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 % T115: % 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 "T115" 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@ % [T115] 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@ %=\count255 def'd in plain \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 % [T115] 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 % [T115] moved out to the new register allocation code -- until here -- % \let\maxgroups\thr@@ % maximum three groups of instruments or choirs [T115] moved to later, using \setmaxgroups \newcount\group@no %%% [T115] 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 % % 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. % %%% [T115] 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 %% % Seven point fonts: roman, bold, and italic. %% \ifx\undefined\sevenrm \font\sevenrm=cmr7 \font\sevenbf=cmbx7 \font\sevenit=cmti7 \fi %% % Eight point fonts: roman, bold, and italic; tt and sl needed for musixsty %% \ifx\undefined\eightrm \font\eightrm=cmr8 \font\eightbf=cmbx8 \font\eightit=cmti8 \font\eighttt=cmtt8 \font\eightsl=cmsl8 \fi %% % Nine point fonts %% \ifx\undefined\ninerm \font\ninerm=cmr9 \font\ninebf=cmbx9 \font\nineit=cmti9 \font\ninett=cmtt9 \font\ninesl=cmsl9 \fi %% % Ten point fonts %% \ifx\undefined\tenrm \font\tenrm=cmr10 \font\tenbf=cmbx10 \font\tenit=cmti10 \font\tentt=cmtt10 \font\tensl=cmsl10 \fi %% % Eleven point fonts %% \ifx\undefined\elevenrm \font\elevenrm=cmr9 scaled \magstephalf \font\elevenbf=cmbx9 scaled \magstephalf \font\elevenit=cmti9 scaled \magstephalf \font\eleventt=cmtt9 scaled \magstephalf \font\elevensl=cmsl9 scaled \magstephalf \fi %% % Twelve point fonts %% \ifx\undefined\twelverm \font\twelverm=cmr12 \font\twelvebf=cmbx12 \font\twelveit=cmti12 \font\twelvett=cmtt12 \font\twelvesl=cmsl12 \fi % 14pt: roman, bold, italic and small caps; tt and sl needed for musixsty \ifx\undefined\frtrm \font\frtrm=cmr12 scaled \magstep1 \font\frtbf=cmbx12 scaled \magstep1 \font\frtit=cmti12 scaled \magstep1 \font\frtsc=cmcsc10 scaled \magstep2 \font\frttt=cmtt12 scaled \magstep1 \font\frtsl=cmsl12 scaled \magstep1 \fi % % 17pt \ifx\undefined\svtrm \font\svtrm=cmr12 scaled \magstep2 \font\svtbf=cmbx12 scaled \magstep2 \font\svtit=cmti12 scaled \magstep2 \font\svtsc=cmcsc10 scaled \magstep3 \font\svttt=cmtt12 scaled \magstep2 \fi % % 20pt \ifx\undefined\twtyrm \font\twtyrm=cmr12 scaled \magstep3 \font\twtybf=cmbx12 scaled \magstep3 \font\twtyit=cmti12 scaled \magstep3 \font\twtysc=cmcsc10 scaled \magstep4 \font\twtytt=cmtt12 scaled \magstep3 \font\twtysl=cmsl12 scaled \magstep3 \fi % % 25pt \ifx\undefined\twfvrm \font\twfvrm=cmr12 scaled \magstep4 \font\twfvbf=cmbx12 scaled \magstep4 \font\twfvit=cmti12 scaled \magstep4 \font\twfvsc=cmcsc10 scaled \magstep5 \font\twfvtt=cmtt12 scaled \magstep4 \font\twfvsl=cmsl12 scaled \magstep4 \fi % % Large fonts for titles % (If you prefer Roman, use ..rm instead of ..bf) % (If you prefer small-caps, use ..sc instead of ..bf) \let\bigfont=\frtbf \let\Bigfont=\svtbf \let\BIgfont=\twtybf \let\BIGfont=\twfvbf % %% %% % Define six font families. %% \def\smalltype{% \let\rm\eightrm \let\bf\eightbf \let\it\eightit \rm} \def\Smalltype{% \let\rm\ninerm \let\bf\ninebf \let\it\nineit \rm} \def\normtype{% \let\rm\tenrm \let\bf\tenbf \let\it\tenit \rm} \def\medtype{% \let\rm\twelverm \let\bf\twelvebf \let\it\twelveit \rm} \def\bigtype{% \let\rm\bigfont \let\bf\bigfont \let\it\bigfont \bf} \def\Bigtype{% \let\rm\Bigfont \let\bf\Bigfont \let\it\Bigfont \bf} \def\BIgtype{% \let\rm\BIgfont \let\bf\BIgfont \let\it\BIgfont \bf} \def\BIGtype{% \let\rm\BIGfont \let\bf\BIGfont \let\it\BIGfont \bf} % %% % Bold italic fonts for dynamic markings. %% \font\ppffsixteen=cmbxti10 \font\ppfftwenty=cmbxti10 scaled \magstep1 \font\ppfftwentyfour=cmbxti10 scaled \magstep2 \font\ppfftwentynine=cmbxti10 scaled \magstep3 \font\smallppff=cmbxti10 \font\normppff=cmbxti10 scaled \magstep1 \font\medppff=cmbxti10 scaled \magstep2 \def\smalldyn{\let\ppff\smallppff\let\p@@f\ppff} \def\normdyn{\let\ppff\normppff\let\p@@f\ppff} \def\meddyn{\let\ppff\medppff\let\p@@f\twelveit} \font\musiceleven=musix11 \font\musicthirteen=musix13 \font\musicsixteen=musix16 \font\musictwenty=musix20 \font\musictwentyfour=musix24 \font\musictwentynine=musix29 % 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 % [T115] 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} % % [T115] 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@)}% [T115] \n@i\z@% [T115] \fi \advance\n@i\@ne}% % \def\s@l@ctslur#1\relax{% \n@i#1\relax\test@slurnum% [T115] 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 \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\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} \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 % T116 RDT \let\meterbigfont\twelvebf \let\meterlargefont\frtbf \let\meterLargefont\svtbf \let\ppff\ppffsixteen \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 % T116 RDT \let\meterbigfont\svtbf \let\meterlargefont\twtybf \let\meterlargefont\twfvbf \let\ppff\ppfftwentyfour \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 % T116 RDT \let\meterbigfont\twtybf \let\meterlargefont\twfvbf \let\meterLargefont\twfvbf \let\ppff\ppfftwentynine \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 % T116 RDT \let\meterbigfont\frtbf \let\meterlargefont\svtbf \let\meterLargefont\twtybf \let\ppff\ppfftwenty \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}} % [T115] 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 % [T115] -- from here -- \errmessage{Wrong instrument reference number \the\noinstrum@nt, maxinstruments=\the\maxinstruments} \fi % [T115] -- 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}% \interportee\interfacteur\internote \interportee\tw@\interportee} \def\C@Inter{\stem@skip\interportee \advance\stem@skip-\@ight\internote \ifnum\nblines=\f@ur \advance\stem@skip\tw@\internote \fi \ifnum\nblines>\fiv@ \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} % [T115] 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@)}% [T115] \group@no\z@% [T115] \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) % [T115] moved out to the above of the new register allocation code % \newdimen\interinstrument % [T115] 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}} %%% 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 \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\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 \addspace\afterruleskip } % 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} %%% 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 % 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 [T115] (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 \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 \piece@beginc\Writ@meters\addspace\afterruleskip} % 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{\lastbarpos\lin@pos \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 \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\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} \def\leftrepeat@II{\T@bil \setleftrepeat\@bar\else\@LeftRp \fi} \let\leftrepeat\leftrepeat@II \def\leftrightrepeat@II{\T@bil \setleftrightrepeat %\setbox\toks@box\l@eftrightrepeat \global\cut@v=\wd\toks@box \@bar \else\setrightrepeat\@LeftRp \fi} \let\leftrightrepeat\leftrightrepeat@II \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\addspace\afterruleskip \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\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\w@coli{\p@loop \raise\altportee\hbox{\raise4\internote\hbox{\keychar55}}\count@portee\repeat} %%% 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{\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}} %%% 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} \def\trebleoct{\trebleclef\raise 9\internote\hbox\@to\z@{\smalltype\it\kern -1.8\Interligne 8\hss}} \def\bassoct{\bassclef\raise 2\internote\hbox\@to\z@{\smalltype\it\kern -2.3\Interligne 8\hss}} \def\treblelowoct{\trebleclef\raise -7\internote\hbox\@to\z@{\smalltype\it\kern -2.3\Interligne 8\hss}} \def\basslowoct{\bassclef\raise -6\internote\hbox\@to\z@{\smalltype\it\kern -2.5\Interligne 8\hss}} % [T115] reqest from Hermann Hinsch \def\smalltrebleoct{\smalltrebleclef\raise 7.2\internote\hbox\@to\z@{\smalltype\it\kern -1.8\Interligne 8\hss}} \def\smalltreblelowoct{\smalltrebleclef\raise-6.8\internote\hbox\@to\z@{\smalltype\it\kern -2.1\Interligne 8\hss}} \def\smallbassoct{\smallbassclef\raise 2\internote\hbox\@to\z@{\smalltype\it\kern -2.0\Interligne 8\hss}} \def\smallbasslowoct{\smallbassclef\raise-6.2\internote\hbox\@to\z@{\smalltype\it\kern -2.2\Interligne 8\hss}} % [T115] reqest from Hermann Hinsch: end \newskip\clef@skip \def\changeclefs{\t@rmskip\writ@newclefs} \def\zchangeclefs{\t@rmskip\zwrit@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}}% [T115] 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\ds\ds@oup \let\mp\mp@ \locx@skip\x@skip} \def\@ndstaff{\egroup \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 \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 \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 % T116 \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 % T116 \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\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\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\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} % T116 RDT \def\tqb{\q@symbol\@tqb} \def\tql{\q@symbol\@tqb} % T116 RDT \def\ztqh{\advancefalse\q@symbol\@tqh} \def\ztqu{\advancefalse\q@symbol\@tqh} % T116 RDT \def\ztqb{\advancefalse\q@symbol\@tqb} \def\ztql{\advancefalse\q@symbol\@tqb} % T116 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{% [T115] 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 % [T115] 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@} \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\centerPAUSe{\centerbar\PAUSe} \def\centerPAuse{\centerbar\PAuse} %\def\centerpause{\let\adv@box\hbox \centerbar\pause} %\def\centerhpause{\let\adv@box\hbox \centerbar\hpause} \def\centerpause{\centerbar\pause} \def\centerhpause{\centerbar\hpause} \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{%\check@staff \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{%\check@staff \wholeshift{\pt5}\hpause} \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}} \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 T116 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}} \let\hpp\hpausep %%% 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} % T116 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 % [T115] (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}}} %%% special metersigns \def\allabreve{\raise4\internote\hbox{\keychar82}} %-> 2/2 \def\reverseallabreve{\raise4\internote\hbox{\keychar123}} \def\meterC{\raise4\internote\hbox{\musickeyfont\@lxxxiii}} %-> 4/4 \def\reverseC{\raise4\internote\hbox{\keychar84}} %-> 4/2 \def\meterplus{{\keychar57}} %%% 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} %%% 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} \def\Ped{\musixchar35} \def\PED{\zchar\raiseped\Ped} \def\Dep{\musixchar33} \def\DEP{\zchar\raiseped\Dep} \def\sDep{\musixchar104} \def\sDEP{\zchar\raiseped\sDep} %%% 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{\it tr }\C@trille} \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. [T115] \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{\it tr }\C@tri} \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 % [T115] 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@)}% [T115] \n@i\z@ % [T115] \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={{\it tr }}% \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}}% %%% octave lines \def\octnumberup{\octnumberdefault\vrule width 0pt height2ex} \def\octnumberdefault{\ppffsixteen8} \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 % [T115] 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@)}% [T115] \n@i\z@% [T115] \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}} \def\metronequiv#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1}} \def\txtfont{\eightit} % T116 RDT \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{\xtuplet3} % % Following definitions based on tuplet.tex - conventional tuplet brackets for MusiXTeX. % Col. G. L. Sicherman. Last revised 2003-05-17. % % Added to musixtex.tex T116 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 % . % % 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{\BIGfont'}\fi} \def\cbreath{\check@staff\adv@box{\raise\si@\internote \hbox\@to\noteskip{\hss\BIGfont'\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{{\it s\ppff \p@kern f}} \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}} % T116 \def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} % T116 %%% 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}} %% % 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}} % T116 RDT \def\hqsk{\off{\h@lf\@l@mskip}} \def\qsk{\off\@l@mskip} \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{\notes\multnoteskip\smallvalue} % T116 RDT \def\nnnotes{\notes\multnoteskip\tinyvalue} % T116 RDT \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} % T116 \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}} % [T115] 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} %%% standard settings % [115] make them compatible to >12 instruments \def\resetlayout{\let\interfacteur\nin@ \stafftopmarg\thr@@\Interligne \staffbotmarg\thr@@\Interligne \count@\z@ \loop \advance\count@ by\@ne \expandafter \let\csname n@l\roman@c@\endcsname \fiv@ \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 } % [T115] 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 % % [T115] 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 %%% % % 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" \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{ % % % % ... % % % % } % % % % % % % % This version corrected 07/23/2007 by Rainer Dunker to make it % % insensitive to changes in \interstaff by PMX % % % % Added to musixtex.tex T116 by RDT % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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 % % s.a. % \let\leftrepeat\leftrepeat@I % % -> \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