diff options
Diffstat (limited to 'Master/texmf-dist')
17 files changed, 5433 insertions, 167 deletions
diff --git a/Master/texmf-dist/doc/generic/musixtex/ChangeLog-119.txt b/Master/texmf-dist/doc/generic/musixtex/ChangeLog-119.txt new file mode 100644 index 00000000000..11871f18474 --- /dev/null +++ b/Master/texmf-dist/doc/generic/musixtex/ChangeLog-119.txt @@ -0,0 +1,7 @@ +Changes from MusiXTeX 118 to 119: + +2015-11-29 + + definitions for tremolo commands \trml, \trmu, etc. + corrected typos in the definition of \comput@fonts affecting ppff fonts for + \Largemusicsize diff --git a/Master/texmf-dist/doc/generic/musixtex/README b/Master/texmf-dist/doc/generic/musixtex/README index b2451f6ca30..d42c4b62ddb 100644 --- a/Master/texmf-dist/doc/generic/musixtex/README +++ b/Master/texmf-dist/doc/generic/musixtex/README @@ -1,4 +1,4 @@ -This is MusiXTeX, version 1.18-2015-07-25. +This is MusiXTeX, version 1.19-2015-11-29. MusiXTeX is a TeX-based system for typesetting music. The main author was Daniel Taupin, who died in a climbing diff --git a/Master/texmf-dist/doc/generic/musixtex/musixcrd/README.musixcrd b/Master/texmf-dist/doc/generic/musixtex/musixcrd/README.musixcrd deleted file mode 100644 index d1baf7ea576..00000000000 --- a/Master/texmf-dist/doc/generic/musixtex/musixcrd/README.musixcrd +++ /dev/null @@ -1,54 +0,0 @@ -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#%% musixcrd - typsetting chord symbols with %% -#%% musixtex %% -#%% readme %% -#%% $Id$ %% -#%% copyright 2004 , Robert Hennig %% -#%% this code is licensed in terms of the %% -#%% GNU Public License %% -#%% %% -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Chord setting for musixtex or pmx. - -There exist two distributions, the sources and the compiled on. -The sources are only necessary for development. Normal usage -requires only the compiled version. - - -compiled distribution ---------------------- - The archive musixcrd.tgz contains the following files: - - o readme this file - o musixcrd.tex tex macros - o doc.pdf documentation - - Put the musixcrd.tex file or an link to it into your - musixtex/pmx working directory. For pmx use the lines - - --- - \input musixtex % These commands are necessary - \input pmx % because pmx.tex MUST be \input - \input musixcrd - --- - - as preamble in your pmx source file to include musixcrd.tex. - Look at doc.ps for further instructions of how to use musixcrd. - - -source distribution -------------------- - The archive musixcrdsrc.tgz contains the following files: - - o readme this file - o musixcrd.dtx tex macros and documentation - o makefile makefile - o musixcrd.sty latex stylefile is a link to musixcrd.dtx - o doc.tex latex macros for documentation generation - using musixcrd.dtx - o strip.tex tex file for strip documentation from musixcrd.dtx - - Extract the file into an directory. Use make with the arguments - doc, strip, srcdist and dist to generate the targets. - diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf b/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf Binary files differindex 8dc14c0f73f..3e390f7b319 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/beams.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/beams.tex index 060ed86a5ae..2777cafc822 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/beams.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/beams.tex @@ -316,82 +316,93 @@ one could define a set of four sixteenths by the macro: arguments are the pitches of the four successive sixteenths. %\check - \section{Shorthand beam notations for repeated notes}\index{repeated patterns} -Sometimes you may want to indicate repeated short notes with open note heads joined -by a beam. Here's an example of how to do that + \section{Shorthand beam notations for repeated or alternated notes}\index{repeated patterns} +Sometimes you may want to indicate repeated or alternated short notes with open note heads joined +by a beam. Here are examples of how to do that using the \keyindex{hb} macro: \begin{music}\nostartrule \startextract \Notes\ibbl0j0\hb0j\tbl0\hb0j\en -\Notes\ibbu0g0\hb0g\tbu0\hb0g\en +\Notes\ibbl0h4\hb0h\tbl0\hb0j\en \zendextract \end{music} \noindent which has been coded as: \begin{quote}\begin{verbatim} \Notes\ibbl0j0\hb0j\tbl0\hb0j\en -\Notes\ibbu0g0\hb0g\tbu0\hb0g\en -\end{verbatim}\end{quote} - -It is also possible to dispense with the stems: +\Notes\ibbl0h4\hb0h\tbl0\hb0j\en +\end{verbatim}\end{quote}\noindent +A different look could be obtained as follows: \begin{music}\nostartrule \startextract -\Notes\ibbl0j3\wh j\tbl0\wh l\en -\Notes\ibbu0g3\wh g\tbu0\wh i\en +\notes\ha j\loffset{0.5}{\ibbl1n3}\qsk\tbl1\qsk\ha l\sk\en \zendextract \end{music} -\noindent which was coded as +\noindent which has been coded as: \begin{quote}\begin{verbatim} -\Notes\ibbl0j3\wh j\tbl0\wh l\en -\Notes\ibbu0g3\wh g\tbu0\wh i\en +\notes\ha j\loffset{0.5}{\ibbl1n4}\qsk\tbl1\qsk\ha l\sk\en \end{verbatim}\end{quote} -\noindent A different look could be obtained as follows: +It is possible to combine this notation +with a conventional beam, as in \begin{music}\nostartrule \startextract -\Notes\loff{\zw j}\ibbl0j3\sk\tbl0\wh l\en -\Notes\ibbu0g3\wh g\tbu0\roff{\wh i}\en\qspace +\notes\ibl0h3\qb0j\loffset1{\ibbbl1m3}\qsk\tbl1\qsk\tql0l\en \zendextract \end{music} -\noindent which was coded as: +\noindent which has been coded as: \begin{quote}\begin{verbatim} -\Notes\loff{\zw j}\ibbl0j3\sk\tbl0\wh l\en -\Notes\ibbu0g3\wh g\tbu0\roff{\wh i}\en\qspace -\end{verbatim}\end{quote} - -Yet another way to indicate repeated notes is given in the -following example: +\notes\ibl0h3\qb0j\loffset1{\ibbbl1m3}\qsk\tbl1\qsk\tql0l\en +\end{verbatim}\end{quote}\noindent +or, for whole notes, to dispense with stems: - \begin{music}\nostartrule +\begin{music}\nostartrule \startextract -\Notes\ibl0h0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibu0j0\qb0{jjj}\tbu0\qb0j\en -\NOTes\loffset{0.5}{\ibl0j9}\roffset{0.5}{\tbl0}\zhl h% - \loffset{0.5}{\ibu0g9}\roffset{0.5}{\tbu0}\hu j\en\bar -\notes\ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibbu0i0\qb0{jjj}\tbu0\qb0j% - \ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibbu0i0\qb0{jjj}\tbu0\qb0j\en -\NOTes\loffset{0.5}{\ibbl0k9}\roffset{0.5}{\tbl0}\zhl h% - \loffset{0.5}{\ibbu0f9}\roffset{0.5}{\tbu0}\hu j\en +\Notes\loff{\zw j}\ibbl0l4\sk\tbl0\wh l\en +\Notes\ibbu0e4\wh g\tbu0\roff{\wh i}\en \zendextract - \end{music} - \noindent whose coding (due to Werner {\sc Icking}) is - +\end{music} +\noindent which has been coded as: \begin{quote}\begin{verbatim} -\Notes\ibl0h0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibu0j0\qb0{jjj}\tbu0\qb0j\en -\NOTes\loffset{0.5}{\ibl0j9}\roffset{0.5}{\tbl0}\zhl h% - \loffset{0.5}{\ibu0g9}\roffset{0.5}{\tbu0}\hu j\en\bar -\notes\ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibbu0i0\qb0{jjj}\tbu0\qb0j% - \ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk - \ibbu0i0\qb0{jjj}\tbu0\qb0j\en -\NOTes\loffset{0.5}{\ibbl0k9}\roffset{0.5}{\tbl0}\zhl h% - \loffset{0.5}{\ibbu0f9}\roffset{0.5}{\tbu0}\hu j\en +\Notes\loff{\zw j}\ibbl0l4\sk\tbl0\wh l\en +\Notes\ibbu0e4\wh g\tbu0\roff{\wh i}\en \end{verbatim}\end{quote} +Short ``beams'' centered on note stems (or directly over +or under whole notes) +indicate \emph{tremolos}. Commands that generate tremolo indications are described in Section~\ref{tremolos}. + + +% \begin{music}\nostartrule +%\startextract +%\Notes\ibl0h0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibu0j0\qb0{jjj}\tbu0\qb0j\en +%\NOTes\loffset{0.5}{\ibl0j9}\roffset{0.5}{\tbl0}\zhl h% +% \loffset{0.5}{\ibu0g9}\roffset{0.5}{\tbu0}\hu j\en\bar +%\notes\ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibbu0i0\qb0{jjj}\tbu0\qb0j% +% \ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibbu0i0\qb0{jjj}\tbu0\qb0j\en +%\NOTes\loffset{0.5}{\ibbl0k9}\roffset{0.5}{\tbl0}\zhl h% +% \loffset{0.5}{\ibbu0f9}\roffset{0.5}{\tbu0}\hu j\en +%\zendextract +% \end{music} +% \noindent whose coding (due to Werner {\sc Icking}) is +% +%\begin{quote}\begin{verbatim} +%\Notes\ibl0h0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibu0j0\qb0{jjj}\tbu0\qb0j\en +%\NOTes\loffset{0.5}{\ibl0j9}\roffset{0.5}{\tbl0}\zhl h% +% \loffset{0.5}{\ibu0g9}\roffset{0.5}{\tbu0}\hu j\en\bar +%\notes\ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibbu0i0\qb0{jjj}\tbu0\qb0j% +% \ibbl0i0\qb0{hhh}\tbl0\qb0h\bsk\bsk\bsk\bsk +% \ibbu0i0\qb0{jjj}\tbu0\qb0j\en +%\NOTes\loffset{0.5}{\ibbl0k9}\roffset{0.5}{\tbl0}\zhl h% +% \loffset{0.5}{\ibbu0f9}\roffset{0.5}{\tbu0}\hu j\en +%\end{verbatim}\end{quote} + \section{Beams that cross line breaks} Although careful typesetting can usually avoid it, occasionally diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex index e3f7a9a80a5..92bc0ab32f1 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex @@ -1,6 +1,6 @@ \title{\Huge\bfseries\musixtex\\[\bigskipamount] \LARGE\bfseries Using \TeX{} to write polyphonic\\or -instrumental music\\\Large\itshape Version 1.18} +instrumental music\\\Large\itshape Version 1.19} %\author{\Large\rm Daniel \sc Taupin\\\large\sl @@ -65,13 +65,11 @@ event. You may read tributes to Daniel Taupin that are archived at the Since then, the only significant update to \musixtex\ has been in version 1.15 (April 2011) which takes advantage of the greater capacity of the e\TeX\ version of \TeX. -In the current version~1.18 (June~2015), the definitions -in the extension library \verb|musixext.tex| (\verb|\raggedstoppiece| and \verb|\slide|) -have been moved into -\verb|musixtex.tex|, and \verb|musixppff.tex| has been corrected so that \verb|\xppff| -is musicsize-dependent. -This manual is the definitive reference to all features of -\musixtex\ version~1.18. +In the current version~1.19 (November~2015), +new commands for tremolos HAVE BEEN added and discussion +of non-spacing rests has been added to this manual, which +is the definitive reference to all features of +\musixtex\ version~1.19. Novice users need not start here. Most diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex index 0a75f7a6e75..77471a5bc30 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex @@ -22,13 +22,13 @@ By way of example, the notations \begin{quote} \def\nbinstruments{0} -\metron{\hup}{60} +\metron{\qu}{60} \quad and\quad \def\nbinstruments{0}\metronequiv{\qup}{\qu} \end{quote} are respectively coded as -\keyindex{metron}\verb|{\hup}{60}| and \keyindex{metronequiv}\verb|{\qup}{\qu}|, +\keyindex{metron}\verb|{\qu}{60}| and \keyindex{metronequiv}\verb|{\qup}{\qu}|, which are normally placed using \keyindex{Uptext}. Also, you can set a smaller metronomic indication like \begin{quote} @@ -45,7 +45,6 @@ or \verb|\metron{\tinynotesize\lqu}{ca.~72}| \end{quote} - \section{Accents} You may use\footnote{Note from the editor: the reason the names of some of @@ -385,6 +384,86 @@ whose coding is \endextract \end{verbatim}\end{quote} + + \subsection{Tremolos}\label{tremolos} + +The command \keyindex{trml}\verb|{|$p$\verb|}|~is used to indicate that the immediately +following +quarter or half note (normally at pitch $p$ and with a lower stem) is to be repeated in eighth notes. +For example, +\verb|\trml j\ha j| +generates + +\begin{music}\nostartrule +\startextract +\NOTes\trml j\ha j\en +\zendextract +\end{music}\noindent +and is an abbreviation for + +\begin{music}\nostartrule +\startextract +\notes\ibl0j0\qb0{jjj}\tql0j\en +\zendextract +\end{music}\noindent +Similarly, \keyindex{trmu}\verb|{|$p$\verb|}|~generates an eighth-note tremolo +on a quarter or half note with an \emph{upper} stem: + +\begin{music}\nostartrule +\startextract +\NOTes\trmu h\ha h\en +\zendextract +\end{music}\noindent +16th-note and 32-note tremolos are similarly generated by +commands \keyindex{trrml}, \keyindex{trrmu}, \keyindex{trrrml} +and \keyindex{trrrmu}, as in + +\begin{music} +\nostartrule +\startextract +\NOtesp\trrml h\zqlp h\trrmu j\qup j\en +\Notes\stemlength{6.4}\trrml j\zcl j\trrmu l\cu l\en +\NOtes\stemlength{6.4}\trrrml h\zql h\trrrmu j\qu j\en +\endextract +\end{music}\noindent +which is coded as +\begin{quote}\begin{verbatim} +\NOtesp\trrml h\zqlp h\trrmu j\qup j\en +\Notes\stemlength{6.4}\trrml j\zcl j\trrmu l\cu l\en +\NOtes\stemlength{6.4}\trrrml h\zql h\trrrmu j\qu j\en +\end{verbatim}\end{quote} +The \keyindex{stemlength} command is used to adjust +stem lengths; +the new length remains effective to the end of the current notes group. +If necessary, the usual stem length can be restored by using +\verb|\stemlength{\DefaultStemlength}|. + + +For \emph{whole} notes, tremolo indications +should be wider and centered directly over or under the note. These +are generated by commands \keyindex{Trml}, \keyindex{Trmu}, \keyindex{Trrml}, +\keyindex{Trrmu}, \keyindex{Trrrml} and \keyindex{Trrrmu}; for example, + +\begin{music} +\nostartrule +\startextract +\NOTEs\Trml h\zw h\Trmu j\wh j\en +\bar% +\NOTEs\Trrml h\zw h\Trrmu j\wh j\en +\bar% +\NOTEs\Trrrml h\zw h\Trrrmu j\wh j\en +\endextract +\end{music}\noindent +which is coded as +\begin{quote}\begin{verbatim} +\NOTEs\Trml h\zw h\Trmu j\wh j\en\bar +\NOTEs\Trrml h\zw h\Trrmu j\wh j\en\bar +\NOTEs\Trrrml h\zw h\Trrrmu j\wh j\en +\end{verbatim}\end{quote} + +For all of the commands described in this section, the pitch parameter may be used +if it is necessary to raise or lower the tremolo indication. + \subsection{Piano pedal commands} The macro \keyindex{PED} inserts a piano pedal command below the staff; \keyindex{DEP}, a pedal release. Alternate symbols, the first of which @@ -559,8 +638,6 @@ For example, \end{music} \end{verbatim}\end{quote} - - \section{Forcing activity at the beginning of systems} A macro named \keyindex{everystaff} is executed each time a new system begins. It is normally void, but it can be defined (simply by \verb|\def|% @@ -586,21 +663,18 @@ staves at the beginning of every system using \keyindex{everystaff} and \keyindex{zcharnote} as follows: \begin{music} -\instrumentnumber{4} -\setclef1\bass -\def\everystaff{% - \znotes&\zchar{-6}{\eightrm\kern-2\Interligne8}% +\instrumentnumber{4}\setclef1\bass +\def\everystaff{\znotes&\zchar{-6}{\eightrm\kern-2\Interligne8}% &\zchar{-6}{\eightrm\kern-2\Interligne8}\en}% \startextract \NOTes\ha{HIJK}&\ha{efgh}&\ha{hijk}&\ha{hmlk}\en \zendextract \end{music} -\noindent The coding is +\noindent +The coding is \begin{quote}\begin{verbatim} -\instrumentnumber{4} -\setclef1\bass -\def\everystaff{% - \znotes&\zchar{-6}{\eightrm \kern -2\Interligne 8}% +\instrumentnumber{4}\setclef1\bass +\def\everystaff{\znotes&\zchar{-6}{\eightrm \kern -2\Interligne 8}% &\zchar{-6}{\eightrm \kern -2\Interligne 8}\en}% \startextract \NOTes\ha{HIJK}&\ha{efgh}&\ha{hijk}&\ha{hmlk}\en diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixdoc.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixdoc.tex index 2c003646e91..ff989080738 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixdoc.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixdoc.tex @@ -31,7 +31,7 @@ %preparing, %writingnotes, %beams, -%rests, +%restsdoc, %spacing, %accidentals, %transposition, @@ -73,7 +73,7 @@ \include{preparing} \include{writingnotes} \include{beams} -\include{rests} +\include{restsdoc} \include{spacing} \include{accidentals} \include{transposition} diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex new file mode 100644 index 00000000000..0016785fb64 --- /dev/null +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex @@ -0,0 +1,5125 @@ +% +% 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{19} +\def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum +\def\mxversuffix{}% +\edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} +\def\mxdate{2015-11-29} + +\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% +\everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% + +% version 1.19: + +% RDT corrected typos in the definition of \comput@fonts affecting ppff fonts for \Largemusicsize +% RDT introduced definitions for tremolo commands \trml, \trmu, etc. + +% version 1.18: + +% RDT added definitions of \raggedstoppiece and \slide from musixext.tex +% RDT increased the length of beam stems (adapted from J.-P. Coulon) + +% version 1.17: + +% RDT re-defined \txtfont for non-normal staff sizes +% RDT defined \tinyppff and \ppfftwelve, and re-defined \ppff to be staffsize dependent +% RDT introduced \tqqb \tqqh \tqqqb \tqqqh abbreviations +% and synonyms \tqql \tqqu \tqqql \tqqqu +% RDT introduced ornaments \tr, \trt +% RDT re-defined \triolet to be consistent with musixdoc (prints \txt, not nec. 3) +% RDT introduced \cpause etc. and corrected definitions of \centerpause etc. +% RDT introduced double-dotted rests \qppp, \dspp, \qspp, etc. + +% version 1.16: + +% RDT corrected the definitions of \nnotes and \nnnotes + +% HM corrected the definitions for cautionary small accidentals + +% RDT added \check@staff ... \fi to \@qa h, \@mca, \hs, \qqs +% so that \qa, \ca, \ha, etc. can be "hidden" using \setstaffs{n}{0} + +% RDT incorporated tuplet.tex (approved by George Sicherman) +% and introduced \txtfont to allow changing size or style + +% RDT introduced +% \qqsk, a one-quarter notehead skip +% \tqu and \tql, synonyms for \tqh and \tqb +% \ztqu and \ztql, synonyms for \ztqh and \ztqb +% \hpp, \qpp, \dsp, \qsp, \hsp, \qqsp for pointed rests +% \nnotes, \nnnotes: 1.6 and 1.28 \elemskip spacing +% \zcn, \ccn, \lcn, synomyms for \zcharnote etc. + +% RDT incorporated curly.tex (approved by Mthimkhulu Molekwa) + +% RDT modernized the treatment of text fonts +% meterfonts must be bf, even if titling fonts are rm or sc +% added dynamic-mark macros \sfz \sfzp + +% version 1.15: + +% moved out: +% - 1/128th beams -> musixbm +% - triple pointed notes -> musixtri + +% and shrinked the memory consumption + +%++ickd 19Sep1997: with help of William P. Houser introduced dotted slurs. +% Changes marked with +ickd for added single lines, -ickd for replaced +%++ickd single lines, ++ickd...++ickd for added blocks + +%++simick 04Dec2000: Don Simons and Werner Icking made some improvements +% to volta-processing and centerbar processing the changes are +% marked with +simick for added single lines, -simick for +%++simick replaced lines and ++simick...++simick for added blocks + +% Hiroaki, May2010, T.115: change register allocation codes into new ones +% which enables >12 elements. Search the string "version 1.15" for details. +% + +% TeXperts may want to change the next + +% PARAMETER DIFFERENT THAN PLAIN + +\showboxdepth=0 +\showboxbreadth=0 + +\ifx\undefined\documentstyle % -> []plain.tex + \parindent0pt + \hoffset-15.4mm + \voffset-10mm + \hsize190mm + \vsize260mm +\fi + +%%% from LaTeX +% The following definitions save token space. E.g., using \@height +% instead of height saves 5 tokens at the cost in time of one macro +% expansion. + +\def\@height{height} +\def\@depth{depth} +\def\@width{width} + +%%% also removed 'by', '=' + +\def\@to{to} +\def\p@ne{.1} +\def\qu@rt{.25} +\def\h@lf{.5} +\def\p@seven{.7} + +%%%from plain +% To make the macros more efficient in time and space, +% several constant values are declared here as control sequences +% If they were changed, anything could happen; so they are private symbols + +%\chardef\active=13 +%\chardef\&=`\& -> 38 +%\chardef\#=`\# -> 35 +%\chardef\$=`\$ -> 36 +% Nomenclature: '@' means most times 'e' or seperator, sometimes 'o','a' + +\chardef\f@ur=4 +\chardef\fiv@=5 +\chardef\si@=6 +\chardef\s@v@n=7 +\chardef\@ight=8 +\chardef\nin@=9 +\chardef\t@n=10 +\chardef\@l@v@n=11 +\chardef\tw@lv@=12 +\chardef\fourt@@n=14 +\chardef\fiv@t@@n=15 +\chardef\tw@nty=20 +\chardef\@xxiii=23 +\chardef\@xxv=25 +\chardef\@xxiv=24 +\chardef\@xxvi=26 +\chardef\@xxvii=27 +\chardef\@xxix=29 +\chardef\@xxxii=32 +\chardef\@xl=40 +\chardef\@xli=41 +\chardef\@xlv=45 +\chardef\@l=50 +\chardef\@lii=52 +\chardef\@liv=54 +\chardef\@lxxxiii=83 +\chardef\@c=100 +\chardef\@cxv=115 +\chardef\@cxxviii=128 + +\newif\ifcatcodesmusic + +\def\catcodesmusic{\ifcatcodesmusic\relax + \else + \edef\catcode@gt{\the\catcode`\>}\catcode`\>\tw@lv@ + \edef\catcode@lt{\the\catcode`\<}\catcode`\<\tw@lv@ + \edef\catcode@vert{\the\catcode`\|}\catcode`\|\active + \edef\catcode@and{\the\catcode`\&}\catcode`\&\active + \edef\catcode@excl{\the\catcode`\!}\catcode`\!\tw@lv@ + \edef\catcode@star{\the\catcode`\*}\catcode`\*\tw@lv@ + \edef\catcode@pt{\the\catcode`\.}\catcode`\.\tw@lv@ + \edef\catcode@sc{\the\catcode`\:}\catcode`\:\tw@lv@ + \let\@@bar\bar + \def\bar{\barre}% + \fi\catcodesmusictrue} + +\catcodesmusic + +% MusicTeX + MuFlex -> MusiXTeX +\def\musixtex{MusiX\TeX} + +\def\kernm{\kern-} + +%...\let\@wloG=\wlog +%...\def\wlog#1{} + +%%% account registers + +% \let\maxinstruments\si@ % [version 1.15] here disabled to avoid conflict + +% temporary registers + +\newcount\n@i +\newcount\n@ii +\newcount\n@iii +\newcount\n@iv +\newcount\n@v +\newcount\n@vi +\newcount\n@vii +\newcount\n@viii +%\newcount\count@ %=\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 + +% [version 1.15] moved out to the new register allocation code -- start from here -- +% altitude +% \newskip\k@ii +% InterNote +% \newdimen\i@ni +\def\i@n{\z@} % safety in case of.... +% positions x et z de debut des poutres +% \newdimen\b@xi \newdimen\b@zi +% \newdimen\c@xi \newskip\c@zi +% \newdimen\d@xi \newskip\d@zi +% \newdimen\e@xi \newskip\e@zi +% \newdimen\f@xi \newskip\f@zi +% pentes des poutres ( entier de -9 a +9 ) +% multiplicite des poutres ( de -5 a +5 . 0= inactive ) +% \newcount\b@pi \newcount\b@ni +% Number of Portees +% \newcount\n@pi \n@pi\@ne +% Actual Signs Old Signs +% \newcount\a@si \newcount\o@si +% ActualCleftoks +% \newtoks\a@ci \a@ci={{\z@}{\z@}{\z@}{\z@}} +% OldCleftoks +% \newtoks\o@ci +% MeterToks +% \newtoks\m@ti +% Altitude of choir groups +% \newskip\g@bi +% Height of choir groups +% \newskip\g@hi + +% [version 1.15] moved out to the new register allocation code -- until here -- +% \let\maxgroups\thr@@ % maximum three groups of instruments or choirs [version 1.15] moved to later, using \setmaxgroups +\newcount\group@no + +%%% [version 1.15] new register allocation code -- start from here -- +% +% register allocation for use inside \loop...\if...\repeat +% (only for plain, but no harm even in case of LaTeX) +\edef\noexpand@newcount{\noexpand\newcount}% +\edef\noexpand@newdimen{\noexpand\newdimen}% +\edef\noexpand@newskip{\noexpand\newskip}% +%\edef\noexpand@newmuskip{\noexpand\newmuskip}% not used +%\edef\noexpand@newbox{\noexpand\newbox}% not used +\edef\noexpand@newtoks{\noexpand\newtoks}% +%\edef\noexpand@newmarks{\noexpand\newmarks}% not used +% +% a shortcut for register allocation routines +\def\roman@c@{\romannumeral\count@}% +% +% some registers (i@n, b@x, b@z, c@x, d@x, e@x, s@x, s@Y) +% should be allocated by \newdimen (for id 0...5) and \newskip (for id 6...11) +% because T.114 and earlier did so and for the compatibility to Stanislav +% Kneifl's musixps.tex 0.92a. +% And again \newdimen (for id>11), because both \dimen and \skip are +% applicable but \dimen uses less memory in case of >255 on e-TeX. +\def\noexpand@newdimsk{% + \ifnum\count@<7 \let\@@newdimsk=\noexpand@newdimen + \else\ifnum\count@<13 \let\@@newdimsk=\noexpand@newskip + \else\let\@@newdimsk=\noexpand@newdimen + \fi\fi \@@newdimsk}% +% +% and some other registers (c@z, d@z, e@z, f@z, g@z) +% should be allocated by \newskip (for id 0...11) and \newdimen (for id>11) +% for the same reason of above. +\def\noexpand@newskdim{% + \ifnum\count@<13 \let\@@newskdim=\noexpand@newskip + \else \let\@@newskdim=\noexpand@newdimen + \fi \@@newskdim}% +% +% registers for instrument +\newdimen\interinstrument % moved from "distance between instruments" to here +\def\setmaxinstruments#1{% + \ifnum#1>\@oldmaxinstruments + \chardef\maxinstruments=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxinstruments=\@c + \fi + \count@\@oldmaxinstruments\loop + \advance\count@ by\@ne + % + \expandafter \let \csname interinstrument\roman@c@\endcsname \interinstrument + % + % altitude + \expandafter \noexpand@newskip \csname k@i\roman@c@\endcsname + % + % InterNote + \expandafter \noexpand@newdimsk \csname i@n\roman@c@\endcsname + % + % beam horizontal positions: x=start, z=end, 8th-64th beams + \expandafter \noexpand@newdimsk \csname b@x\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname b@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname c@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname c@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname d@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname d@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname e@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname e@z\roman@c@\endcsname + % + % pentes des poutres ( entier de -9 a +9 ) (slopes of the beams) + % multiplicite des poutres ( de -5 a +5 . 0= inactive ) (multiplicity of the beams) + \expandafter \noexpand@newcount \csname b@p\roman@c@\endcsname + \expandafter \noexpand@newcount \csname b@n\roman@c@\endcsname + % + % Number of Portees + \expandafter \noexpand@newcount \csname n@p\roman@c@\endcsname + \csname n@p\roman@c@\endcsname\@ne + % + % Actual Signs + \expandafter \noexpand@newcount \csname a@s\roman@c@\endcsname + % + % Old Signs + \expandafter \noexpand@newcount \csname o@s\roman@c@\endcsname + % + % ActualCleftoks + \expandafter \noexpand@newtoks \csname a@c\roman@c@\endcsname + \csname a@c\roman@c@\endcsname={{\z@}{\z@}{\z@}{\z@}}% + % + % OldCleftoks + \expandafter \noexpand@newtoks \csname o@c\roman@c@\endcsname + % + % MeterToks + \expandafter \noexpand@newtoks \csname m@t\roman@c@\endcsname + % + % staffsize + \expandafter \let \csname staffspacing\roman@c@\endcsname \@ne + % + % text, lyrics, free positioning of chars + \expandafter \let \csname T@R\roman@c@\endcsname \z@ + % + % preset clef symbols + \expandafter \let \csname treblec@s\roman@c@\endcsname \z@ + \expandafter \let \csname altoc@s\roman@c@\endcsname \z@ + \expandafter \let \csname bassc@s\roman@c@\endcsname \z@ + % + % preset default staff lines as 5 + \expandafter \let \csname n@l\roman@c@\endcsname \fiv@ + % + \ifnum\count@<\maxinstruments\repeat + \expandafter\message\expandafter{maxinstruments=\the\maxinstruments}% + \chardef\@oldmaxinstruments=\maxinstruments\relax% + \normalnotesize\resetlayout + \fi +}% +% +% registers for 128th beam +\def\setmaxcxxviiibeams#1{% + \ifnum#1>\maxinstruments + \errmessage{The number of 128th beam must not exceed maxinstruments}% + \else + \ifnum#1>\@oldmaxcxxviiibeams + \chardef\maxcxxviiibeams=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxcxxviiibeams=\@c + \fi + \count@\@oldmaxcxxviiibeams \loop + \advance\count@ by\@ne + \expandafter \noexpand@newdimen \csname f@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname f@z\roman@c@\endcsname + \ifnum\count@<\maxcxxviiibeams\repeat + \expandafter\message\expandafter{max128beams=\the\maxcxxviiibeams}% + \chardef\@oldmaxcxxviiibeams=\maxcxxviiibeams\relax% + \fi + \fi +}% +% +% registers for 256th beam +\def\setmaxcclvibeams#1{% + \ifnum#1>\maxcxxviiibeams + \errmessage{The number of 256th beam must not exceed the number of 128th beam}% + \else + \ifnum#1>\@oldmaxcclvibeams + \chardef\maxcclvibeams=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxcclvibeams=\@c + \fi + \count@\@oldmaxcclvibeams \loop + \advance\count@ by\@ne + \expandafter \noexpand@newdimen \csname g@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname g@z\roman@c@\endcsname + \ifnum\count@<\maxcclvibeams\repeat + \expandafter\message\expandafter{max256beams=\the\maxcclvibeams}% + \chardef\@oldmaxcclvibeams=\maxcclvibeams\relax% + \fi + \fi +}% +% +% registers for choir group +\def\setmaxgroups#1{% + \ifnum#1>\@oldmaxgroups + \chardef\maxgroups=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxgroups=\@c + \fi + \count@\@oldmaxgroups \loop + \advance\count@ by\@ne + % Altitude + \expandafter \noexpand@newskip \csname g@b\roman@c@\endcsname + % Height + \expandafter \noexpand@newskip \csname g@h\roman@c@\endcsname + % + \expandafter \let \csname lowersonginstrum\roman@c@\endcsname \maxdimen + \expandafter \let \csname uppersonginstrum\roman@c@\endcsname \z@ + \ifnum\count@<\maxgroups\repeat + \expandafter\message\expandafter{maxgroups=\the\maxgroups}% + \chardef\@oldmaxgroups=\maxgroups\relax% + \fi +}% +% +% registers for slur +\def\setmaxslurs#1{% + \ifnum#1>\@oldmaxslurs + \chardef\maxslurs=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxslurs=\@c + \fi + \count@\@oldmaxslurs \loop + \advance\count@ by\@ne + % + % horizontal start position of slur + \expandafter \noexpand@newdimsk \csname s@x\roman@c@\endcsname + % + % sense u,d and x (flag) for pending slurs + \expandafter \noexpand@newtoks \csname s@s\roman@c@\endcsname + \csname s@s\roman@c@\endcsname={x}% + % + % vertical offset of slur + \expandafter \noexpand@newdimsk \csname s@Y\roman@c@\endcsname + % + % altportee of slur + \expandafter \noexpand@newskip \csname s@a\roman@c@\endcsname + % + % vertical start position of slur [steps of internote] + \expandafter \noexpand@newcount \csname s@y\roman@c@\endcsname + % + % instrument number of that slur (to retrieve internote) + \expandafter \noexpand@newcount \csname s@N\roman@c@\endcsname + % + % vertical end position of slur [steps of internote], used from + % \breakslur. the value \maxdimen is used to decide, if + % \breakslur is used or not (flag) + \expandafter \noexpand@newcount \csname s@z\roman@c@\endcsname + \csname s@z\roman@c@\endcsname\maxdimen + % + %++ickd: dotted indicator for pending slurs + \expandafter \noexpand@newtoks \csname s@d\roman@c@\endcsname + % + \ifnum\count@<\maxslurs\repeat + \expandafter\message\expandafter{maxslurs=\the\maxslurs}% + \chardef\@oldmaxslurs=\maxslurs\relax% + \fi +}% +% +% registers for trill (MusiXTeX-type trill only. Legacy \trillC and +% \TrillC are out of the scope.) +\def\setmaxtrills#1{% + \ifnum#1>\@oldmaxtrills + \chardef\maxtrills=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxtrills=\@c + \fi + \count@\@oldmaxtrills \loop + \advance\count@ by\@ne + % starting horizontal pos + \expandafter \noexpand@newskip \csname tr@x\roman@c@\endcsname + \csname tr@x\roman@c@\endcsname\maxdimen\relax + % heading of trill + \expandafter \noexpand@newtoks \csname tr@sw\roman@c@\endcsname + % height of trill + \expandafter \noexpand@newskip \csname tr@y\roman@c@\endcsname + \ifnum\count@<\maxtrills\repeat + \expandafter\message\expandafter{maxtrills=\the\maxtrills}% + \chardef\@oldmaxtrills=\maxtrills\relax% + \fi +}% +% +% registers for octave line +\def\setmaxoctlines#1{% + \ifnum#1>\@oldmaxoctlines + \chardef\maxoctlines=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxoctlines=\@c + \fi + \count@\@oldmaxoctlines \loop + \advance\count@ by\@ne + % starting horizontal pos + \expandafter \noexpand@newskip \csname o@x\roman@c@\endcsname + \csname o@x\roman@c@\endcsname\maxdimen\relax + % height of octline + \expandafter \noexpand@newskip \csname o@y\roman@c@\endcsname + % sense of octline + \expandafter \noexpand@newtoks \csname o@sw\roman@c@\endcsname + \ifnum\count@<\maxoctlines\repeat + \expandafter\message\expandafter{maxoctlines=\the\maxoctlines}% + \chardef\@oldmaxoctlines=\maxoctlines\relax% + \fi +}% +% +\chardef\@oldmaxinstruments=\z@ +\chardef\@oldmaxcxxviiibeams=\z@ +\chardef\@oldmaxcclvibeams=\z@ +\chardef\@oldmaxgroups=\z@ +\chardef\@oldmaxslurs=\z@ +\chardef\@oldmaxtrills=\z@ +\chardef\@oldmaxoctlines=\z@ +% +% actual setup (=register allocation) of the maximum element numbers +% should be done after fonts definition. +% +%%% [version 1.15] new register allocation code -- until here -- + + +%%% fonts + +\newif\iflongDCfontnames +\newif\iflongECfontnames +\longDCfontnamesfalse % obsolete +\longECfontnamesfalse % to use EC fonts, \input musixec +\def\fontid{cm} % deprecated but used in pmx.tex + +%% +% Seven point fonts: roman, bold, and italic. +%% + +%\ifx\undefined\sevenrm % version 1.17 RDT unconditional font definitions + \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\ppfftwelve=cmbxti10 at 8pt % version 1.17 RDT +\font\ppffsixteen=cmbxti10 +\font\ppfftwenty=cmbxti10 scaled \magstep1 +\font\ppfftwentyfour=cmbxti10 scaled \magstep2 +\font\ppfftwentynine=cmbxti10 scaled \magstep3 + +\def\ppff{\ifdim\internote<\p@seven6\Internote\tinyppff% version 1.17 RDT +\else\ifdim\internote<.95\Internote\smallppff% +\else\ifdim\internote<1.19\Internote\normppff% +\else\medppff\fi\fi\fi}% + +\def\tinydyn{\let\ppff\tinyppff} % version 1.17 RDT +\def\smalldyn{\let\ppff\smallppff} +\def\normdyn{\let\ppff\normppff} +\def\meddyn{\let\ppff\medppff} + + +\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 + +% [version 1.15] moved out to the new register allocation code (except for \s@Y) +% horizontal start position of slur +% \newdimen\s@xi +% sense u,d and x (flag) for pending slurs +% \newtoks\s@si \s@si={x} +% vertical offset of slur +\newdimen\s@Y % this register is for common use +% \newdimen\s@Yi +% altportee of slur +% \newskip\s@ai +% vertical start position of slur [steps of internote] +% \newcount\s@yi +% instrument number of that slur (to retrieve internote) +% \newcount\s@Ni +% vertical end position of slur [steps of internote], used from \breakslur +% the value \maxdimen is used to decide, if \breakslur is used or not (flag) +% \newcount\s@zi \s@zi\maxdimen +%++ickd: dotted indicator for pending slurs +% \newtoks\s@di % moved out to the new register allocation code +%++ickd + +\def\roman@n@i{\romannumeral\n@i\endcsname} + +% +% [version 1.15] make slurs independent from \maxinstruments +\def\test@slurnum{% + \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxslurs \else + \count@\maxslurs \advance\count@\m@ne + \errmessage{Wrong slur reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@% [version 1.15] + \fi + \advance\n@i\@ne}% +% +\def\s@l@ctslur#1\relax{% + \n@i#1\relax\test@slurnum% [version 1.15] make it independent from beams + \edef\s@a{\csname s@a\roman@n@i}% dimen (altportee) + \edef\s@x{\csname s@x\roman@n@i}% dimen (hor start pos) + \edef\s@y{\csname s@y\roman@n@i}% count (startnote [internote]) + \edef\s@N{\csname s@N\roman@n@i}% count (instrument number) + \edef\s@z{\csname s@z\roman@n@i}% count (endnote [internote]) + \edef\s@Y{\csname s@Y\roman@n@i}% dimen (voffset) + \edef\s@d{\csname s@d\roman@n@i}% token (dotted) +ickd + \edef\s@s{\csname s@s\roman@n@i}}% token (sense) + +% get current position (returns the dimen in \y@v) +% (\lin@pos starts behind signatures!) + +\newdimen\lin@pos +\def\getcurpos{\y@v\lin@pos \advance\y@v\locx@skip} + +% \n@i vertical offset of first note (number); temporary +% \n@ii vertical offset of second note (number); temporary +% \n@iii meet note +% \n@iv first note +% \n@v temp. character +% \n@vi last note +% \n@vii right halfslur length +% \n@viii don't touch +% \y@ complete length of slur - allowed overlap (4pt), temp. length +% \y@i abs. height of slur +% \y@ii complete length of slur +% \y@iii old maxslurwidth +% \y@iv don't touch +% \y@v don't touch + +% \@sense{u,d} +% +% if \curve (\midslur) is used +% \@meet{} +% \l@length{} +% \r@length{} + +% #1 start pitch #2 end pitch #3 length #4 right hoffset + +\newcount \meet@minus@n@iv +\def\writ@slur#1#2#3#4{\check@staff % modified: sld... into slurd... 12.04.95 ick + \let\slz\slurz% inserted + \let\slzd\slurzd% inserted for dotted slurs +ickd + \ifx\s@N\undefined \relax % \let\internote\Internote + \else + \edef\internote{\csname i@n\romannumeral\s@N\endcsname}% + \fi +% \immediate\write16{\noexpand\writ@slur internote:\the\internote}% + \n@iv#1% + \n@vi#2% +%% +% Get note vertical offsets +% \n@iv= vertical offset of first note(n@i temp); +% \n@vi= vertical offset of second note(n@ii temp); +% \y@i = reference height of first note (pt); +% +% Define adequate fonts for this slur, according to the value of \internote +% + \ifdim\internote>3.5pt + \let\sld\slurdtwentynine \let\slu\slurutwentynine + \let\hslurd\hslurdtwentynine \let\hsluru\hslurutwentynine + \let\sldd\slurdtwentynined \let\slud\slurutwentynined % +ickd + \let\hslurdd\hslurdtwentynined \let\hslurud\hslurutwentynined %+ickd + \def\@stepwidth{3.6pt}% + \else \ifdim\internote>2.9pt + \let\sld\slurdtwentyfour \let\slu\slurutwentyfour + \let\hslurd\hslurdtwentyfour \let\hsluru\hslurutwentyfour + \let\sldd\slurdtwentyfourd \let\slud\slurutwentyfourd % +ickd + \let\hslurdd\hslurdtwentyfourd \let\hslurud\hslurutwentyfourd %+ickd + \def\@stepwidth{3.0pt}% + \else \ifdim\internote>2.3pt + \let\sld\slurdtwenty \let\slu\slurutwenty + \let\hslurd\hslurdtwenty \let\hsluru\hslurutwenty + \let\sldd\slurdtwentyd \let\slud\slurutwentyd % +ickd + \let\hslurdd\hslurdtwentyd \let\hslurud\hslurutwentyd %+ickd + \def\@stepwidth{2.5pt}% + \else \ifdim\internote>1.8pt + \let\sld\slurdsixteen \let\slu\slurusixteen + \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen + \let\sldd\slurdsixteend \let\slud\slurusixteend % +ickd + \let\hslurdd\hslurdsixteend \let\hslurud\hslurusixteend %+ickd + \def\@stepwidth{2pt}% + \else \ifdim\internote>1.4pt + \let\sld\slurdthirteen \let\slu\sluruthirteen + \let\hslurd\hslurdthirteen \let\hsluru\hsluruthirteen + \let\sldd\slurdthirteend \let\slud\sluruthirteend % +ickd + \let\hslurdd\hslurdthirteend \let\hslurud\hsluruthirteend %+ickd + \def\@stepwidth{1.6pt}% + \else + \let\sld\slurdeleven \let\slu\slurueleven + \let\hslurd\hslurdeleven \let\hsluru\hslurueleven + \let\sldd\slurdelevend \let\slud\sluruelevend % +ickd + \let\hslurdd\hslurdelevend \let\hslurud\hsluruelevend %+ickd + \def\@stepwidth{1.28pt}% + \fi\fi\fi\fi\fi +% +% End choice of font +% + \n@i\n@iv \pl@base % \y@i = initial height + \n@ii\n@vi +% +% Select appropriate font +% Set \n@i to the vertical difference index +% setup \n@iii(meetnote) +% + \ifnum\n@ii=\n@i % Slope is zero + \n@iii\n@i + \if u\@sense \advance\n@iii\thr@@ \else \advance\n@iii-\thr@@ \fi + \def\@slope{z}\n@i\z@ + \else + \ifnum\n@ii<\n@i % Slope is negative + \C@csl\n@i\n@ii\def\@slope{d}% % compute @meet height for slurs + \else % Slope is positive + \C@csl\n@ii\n@i\def\@slope{u}\n@i\n@ii % compute @meet height for slurs + \fi + \fi +%% +% Select the required font and load the width parameters +% +% Font specific parameters +% \y@iii is the horizontal width of the longest slur in the fonts +% This parameter is loaded from the tfm \fontdimen parameter 5 +% respectively +%% + \y@iii\fontdimen\fiv@\csname sl\@slope\endcsname + \y@ii#3% +% +% \n@i contains slope (difference between start and end note) +% +% force longslurs if (!!! no check, be careful !!!) +% long slurs are at least 20[16] pt long) !!! Perhaps will change again !!! +% - difference between first note and last note > 8 +% - if \curve or \midslur is def'd +% - if \invertslur is used +% + \ifnum\n@i>\@ight \y@iii\z@ \fi % RMslurs limit 8 steps + \ifx\@meet\empty \else\y@iii\z@ \fi + \ifx\@invert\@ne \y@iii\z@ \fi + \ifdim\y@ii>\y@iii % start of longslurs +% +% setup meet height of slur +% + \ifx\empty\@meet +% \immediate\write16{\noexpand\@meet was empty.}% + \else + \n@iii\n@iv + \advance\n@iii\@meet + \fi + \edef\@meet{\the\n@iii}% +% \immediate\write16{\noexpand\@meet = \@meet.}% +% +% allow a little bit overlap (2*2pt) for nicer outlook (as longer as nicer) +% clip to extremities +% compute the max length in fontunits (\count@) +% + \y@\y@ii \advance\y@\f@ur\p@ \n@v\y@ + \sp@pt\t@n % 10pt steps + \advance\n@v-\f@ur % first brace is 20pt wide (perhaps 10pt is better ??) + \min@n@v\z@ + \max@n@v\fourt@@n % largest braces are 2*((90pt-20pt)/10pt) + \count@\n@v % max length +% +% compute the length of the starting and ending halfslurs +% in case, that curve is not def'd +% + \ifx\empty\l@length + \divide\n@v\tw@ % 2 halfslurs + \n@vii\n@v + \n@ii\n@v + \def@lr +% +% first try to reach nicer long slurs without using \curve +% + \if z\@slope % leave ties untouched + \else + \ifnum\count@>\z@ % only for long slurs + \multiply\n@v\tw@ + \if\@slope\@sense % uu,dd advance l@length ud,du advance r@length + \s@adjust\n@vii\n@ii + \else + \s@adjust\n@ii\n@vii + \fi + \def@lr + \fi + \fi +% +% adjust \curve parameters, if neccesary +% + \else + \n@vii\l@length + \n@ii\r@length + \loop + \count@\n@vii + \advance\count@\n@ii + \ifnum\count@>\n@v + \advance\n@vii\m@ne \ifnum\n@vii<\z@ \n@vii\z@ \fi + \advance\n@ii\m@ne \ifnum\n@ii<\z@ \n@ii\z@ \fi + \repeat + \def@lr + \fi +% +% clip to extremity heights (max slur height= 16\internote) +% + \C@csm\n@iv + \C@csm\n@vi +% +% change sense and offset behind linebreak and reset flag +% + \ifx\@invert\@ne \ifdim\s@x=\z@ + \@invsl \let\@invert\empty \s@Y-\s@Y + \fi \fi +% +% compute final height and put the box +% +% \immediate\write16{ before @meet:\noexpand\y@i=\the\y@i}% +% \message{ was \noexpand\n@iv\the\n@iv}% +% \message{ was \noexpand\n@vi\the\n@vi}% +% + \meet@minus@n@iv=\@meet + \advance\meet@minus@n@iv-\n@iv +% \immediate\write16{\noexpand\meet@minus@n@iv=\the\meet@minus@n@iv}% +% \y@i\@meet\internote % \y@i final height +% change from DT for staffspacing not standard + \y@i \@stepwidth % part proportional to slur font size + \multiply \y@i \meet@minus@n@iv + \advance\y@i \n@iv\internote % was done by \pl@base... +% + \C@sof % add the voffsets + \llap{\raise\y@i\hbox\@to\y@ii{% +% +% compute the beginning and ending halfslur chars +% n@i firstslur +% n@ii lastslur +% n@v character +% + \C@cc\n@iv\n@i\n@ii + \C@cc\n@vi +% + \n@v\l@length + \multiply\n@v\sixt@@n % 16 different heigths + \advance\n@v\n@i % offset to length + \advance\n@v\@cxxviii % offset to starthalfslur + \@boX \box\ch@box\hss% put starthalfslur + \n@v\r@length + \multiply\n@v\sixt@@n + \advance\n@v\n@ii +% +% put ending halfslur in box +% + \ifx\@invert\@ne \@invsl \fi + \@boX +% +% put the middle extension (could be replaced by []rule) +% + \ifdim\y@ii>\p@ne\p@ + \n@v\y@ii + \sp@pt\f@ur % 4pt steps + \ifx\@invert\@ne + \divide\n@v\tw@ + \if u\@sense \advance\n@v\@cxxviii \fi + \mid@box\hss\hss% don't ask me why + \if u\@sense \advance\n@v-\@cxxviii \else \advance\n@v\@cxxviii \fi + \mid@box% + \else + \if d\@sense \advance\n@v\@cxxviii \fi + \mid@box \fi \fi +% +% place the end of slur and kern right horizontal offset +% + \hss\box\ch@box}\kern#4}% +% +% reset slurcurve +% + \global\let\@meet\empty + \let\l@length\empty + \let\@invert\empty +% +%>>>>>> start of RM slurs +% Set \n@v to the width index in the slur font table +% + \else + \ifdim\y@ii<\@ight\p@ \y@ii\@ight\p@ \fi % Clip to extremities + \y@\y@ii + \advance\y@-\si@\p@ + \n@v\y@ + \sp@pt\f@ur +% +% Find decimal character count into font table +% (a) Zero height slurs: charnum= width index +% (b) Others: charnum= 16*(height index - 1) + width index +% Place the character count in \n@v +% + \if z\@slope + \if d\@sense \advance\n@v\@liv \fi % \@liv(=54) offset to slurchars + \else + \advance\n@i\m@ne % height index - 1 + \multiply\n@i\sixt@@n % 16*(height index - 1) + \advance\n@v\n@i % 16*(height index - 1) + width index + \if d\@sense \advance\n@v\@cxxviii \fi + \fi +% +% Place the slur character +% + \C@sof + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \llap{\raise\y@i\hbox\@to\y@ii{% +%-ickd \hss\csname sl\@slope\endcsname\char\n@v\hss}\kern#4}% + \hss\csname sl\@slope\@dotted\endcsname\char\n@v\hss}\kern#4}% + \fi +\fi} % end writ@slur + + +\def\sp@pt#1{\divide\n@v65536\divide\n@v#1} +\def\max@n@v#1{\ifnum\n@v>#1\n@v#1\fi} +\def\min@n@v#1{\ifnum\n@v<#1\n@v#1\fi} + +%-ickd \def\mid@box{\hbox{\xtie\char\n@v}} +\def\mid@box{% + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \hbox{\csname xtie\@dotted\endcsname\char\n@v}} +%-ickd \def\@boX{\setbox\ch@box\hbox{\csname hslur\@sense\endcsname\char\n@v}% +\def\@boX{% + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \setbox\ch@box\hbox{\csname hslur\@sense\@dotted\endcsname\char\n@v}% + \advance\y@ii-\wd\ch@box} + +\def\def@lr{\edef\l@length{\the\n@vii}\edef\r@length{\the\n@ii}} + +\def\s@adjust#1#2{% + \ifnum\n@v<\count@ \advance#1\@ne \fi + \ifnum\n@v>\z@ \advance#1\@ne \advance#2\m@ne + \ifnum#1>\s@v@n #1\s@v@n \fi \fi} + +\def\C@csl#1#2{% compute meet height for slurs + \if u\@sense \n@iii#1\advance\n@iii\tw@ + \else \n@iii#2\advance\n@iii-\tw@ \fi + \ifx\@invert\@ne + \n@iii#1\advance\n@iii-#2\divide\n@iii\tw@ \advance\n@iii#2\fi + \advance#1-#2} + +\def\C@cc#1{% slur = abs(meet-note) - 1 + \n@ii\@meet + \advance\n@ii-#1% + \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \advance\n@ii\m@ne + } +% \ifnum\n@ii<\z@\immediate\write16{Warning: \noexpand\C@cc->\noexpand\n@ii=\the\n@ii}\fi +% \n@ii\z@} % modeif DT 20-12-97 + +\def\C@csm#1{% clip to extremity heights (max slur height= 16\internote) + \n@i\n@iii + \advance\n@i-#1% + \ifnum\n@i>\sixt@@n + \ifnum\n@iii>#1% + #1\n@iii \advance#1-\sixt@@n + \else + #1\n@iii \advance#1\sixt@@n + \fi + \fi} + +\def\C@sof{\advance\y@i\s@Y % abs. voffset + \ifx\@Ti\@ne \advance\y@i\s@a \let\@Ti\empty \fi}% call from cutslur + +% manual influation on the curve for long slurs +% must be coded in front of \tslur +% #1 final height [number, steps of internote, relativ to beginning! note] +% #2 (length)slope left #3 (length)slope right + +\def\curve#1#2#3{\getcurpos % ignore \curve behind a linebreak + \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\edef\l@length{#2}\edef\r@length{#3}\relax + \else +% \message{\noexpand\curve #1#2#3 not expanded}% + \fi} + +% raise (or lower) only the mid of slur +% #1 final height [number, steps of internote, relativ to beginning! note] +%! #1 can still be changed to work relativ from default height ??? + +\def\midslur#1{\getcurpos + \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\relax + \else +% \message{\noexpand\midslur #1 not expanded}% + \fi} + +\let\@meet\empty +\let\l@length\empty +\let\r@length\empty + +% Liftslur #1 refnumber #2 lift[steps of internote] + +\def\Liftslur#1#2{\n@i#1\advance\n@i\@ne \advance\csname s@y\roman@n@i#2} + +% breakslur #1 refnumber #2 endheight during linebreak[steps of internote] + +\def\breakslur#1#2{\inhgetn@i#2\relax\n@ii\n@i + \n@i#1\advance\n@i\@ne \global\csname s@z\roman@n@i\n@ii} + +% invertslur #1 refnumber + +\def\@invsl{\if u\the\s@s \s@s{d}\else \s@s{u}\fi} + +\def\invertslur#1{\s@l@ctslur#1\relax + \if u\the\s@s \global\s@s{D}% change sense and set flag for invertslur + \else \global\s@s{U}\fi} + +% initiate slur #1 reference number #2 start note + +\def\isluru{\i@slur\h@lf{1\p@seven\internote}u}% 'normal' +\def\issluru{\i@slur{1\p@ne}{\p@seven\internote}u}% shorter for accords +% for beam(ib[l]u) or stem, doesn't work with \stemcut (yet?) +\def\ibsluru{\y@i\stemfactor\interbeam + \advance\y@i\h@lf\internote \i@slur1\y@i u} +\def\islurd{\i@slur\h@lf{-1\p@seven\internote}d} +\def\isslurd{\i@slur{1\p@ne}{-\p@seven\internote}d} +\def\ibslurd{\y@i\stemfactor\interbeam + \advance\y@i\h@lf\internote \y@i-\y@i \i@slur0\y@i d} + +% initiate slur at half note width but NO vertical offset (for linkings) + +\def\ihsluru{\i@slur\h@lf\z@ u}% +\def\ihslurd{\i@slur\h@lf\z@ d}% + +\let\itieu\issluru +\let\itied\isslurd +\def\istieu{\i@slur{1\p@ne}{\qu@rt\internote}u}% shorter for accords +\def\istied{\i@slur{1\p@ne}{-\qu@rt\internote}d}% +\let\itenu\istieu +\let\itenl\istied +\let\Itenu\istieu +\let\Itenl\istied + +\def\dotted{\let\dott@d\@ne}\let\dott@d\empty %+ickd + +\def\@mis{missing } + +% #1 hoffset #2 voffset #3 sense (u,d) #4 reference number #5 start note + +\def\i@slur#1#2#3#4#5{% + \check@staff + \global\advance\N@s\@ne % update slurcounter + \s@l@ctslur#4\relax +% test for already invoked \islur + \if x\the\s@s \else\errmessage{\@mis\noexpand\tslur#4}\fi + \global\s@Y#2% store voffset (abs. dim. to rel. height) + \global\s@s{#3}% store sense (u,d) + \ifx\dott@d\empty \global\s@d{}\else\global\s@d{d}\fi %+ickd + \let\dott@d\empty % set dotted indicator +ickd + \global\s@N\noinstrum@nt % store instrument number + \inhgetn@i#5\relax + \global\s@y\n@i % start vpos (steps of internote) + \global\s@a\altportee % store altportee of current slur + \getcurpos + \advance\y@v#1\qn@width + \global\s@x\y@v + \fi}% start hpos (current pos including hoffset) + +% terminate slur #1 reference number #2 end note +% the various types only influence the horizontal offset, if you want to +% terminate a \ibslur with a \tslur it becomes a little bit tricky + +\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 % version 1.16 RDT + \let\meterbigfont\twelvebf \let\meterlargefont\frtbf + \let\meterLargefont\svtbf + \let\tinyppff\ppfftwelve % version 1.17 RDT + \let\smallppff\ppfftwelve + \let\normppff\ppffsixteen + \let\medppff\ppfftwenty + \else\ifnum\musicsize=\@xxiv + \let\musicLargefont\musictwentynine + \let\musiclargefont\musictwentynine + \let\musicnorfont\musictwentyfour + \let\musicsmallfont\musictwenty + \let\musictinyfont\musicsixteen + \let\xgregLargefont\xgregtwentynine + \let\xgreglargefont\xgregtwentynine + \let\xgregnorfont\xgregtwentyfour + \let\xgregsmallfont\xgregtwenty + \let\xgregtinyfont\xgregsixteen + \let\sluru\slurutwenty \let\slurd\slurdtwenty + \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty + \let\meternorfont\frtbf \let\metersmallfont\twelvebf % version 1.18 RDT + \let\meterbigfont\svtbf \let\meterlargefont\twtybf + \let\meterlargefont\twfvbf + \let\tinyppff\ppffsixteen + \let\smallppff\ppfftwenty + \let\normppff\ppfftwentyfour + \let\medppff\ppfftwentynine + \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\svtbfg \let\metersmallfont\frtbf % version 1.18 RDT + \let\meterbigfont\twtybfg \let\meterlargefont\twfvbf + \let\meterLargefont\twfvbf + \let\tinyppff\ppfftwenty + \let\smallppff\ppfftwentyfour + \let\normppff\ppfftwentynine + \let\medppff\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 % version 1.18 RDT + \let\meterbigfont\frtbf \let\meterlargefont\svtbf + \let\meterLargefont\twtybf + \let\tinyppff\ppfftwelve + \let\smallppff\ppffsixteen + \let\normppff\ppfftwenty + \let\medppff\ppfftwentyfour +\fi\fi\fi}% + +\def\comput@specifics{\comput@fonts\comput@sizes} + +\def\comput@sizes{% + \Interligne\fontdimen\fiv@\musicnorfont + \Internote\h@lf\Interligne \big@spc.6\Interligne + \qn@width\fontdimen\si@\musixfont + \wn@width1\qu@rt\qn@width + \txt@ff\h@lf\qn@width + \qd@skip\qn@width\advance\qd@skip-\hlthick} + +%\newdimen\afterruleskip +\newskip\afterruleskip +\newdimen\staffbotmarg % marge au-dessous des portees +\newdimen\stafftopmarg % au-dessus des portees +\newdimen\line@width + +\def\normalvalue{1} +\def\largevalue{1.2} +\def\Largevalue{1.44} +\def\smallvalue{.8} +\def\tinyvalue{.64} + +\def\instrumentnumber#1{\n@v#1\relax + \min@n@v\@ne + \max@n@v\maxinstruments + \edef\nbinstruments{\the\n@v}} + +% staffsize + +\def\setsize#1#2{\n@v#1\relax % select instrument + \expandafter\edef\csname staffspacing\romannumeral\n@v\endcsname{#2}} + +% [version 1.15] moved out to the new register allocation code +% \let\staffspacingi\@ne + +% number of staffs + +\def\setstaffs#1#2{\n@v#1\relax \csname n@p\romannumeral\n@v\endcsname#2} + +% staff lines + +\def\setlines#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname n@l\romannumeral\n@v\endcsname{#2}} + +\newdimen\interportee % distance between staffs of the same instrument (incl) +\newcount\noport@@ +\newcount\noinstrum@nt +\newdimen\altportee + +\def\interstaff#1{\def\interfacteur{#1}} + +\def\s@l@ctinstr{% + \ifnum\noinstrum@nt>\maxinstruments % [version 1.15] -- from here -- + \errmessage{Wrong instrument reference number \the\noinstrum@nt, maxinstruments=\the\maxinstruments} + \fi % [version 1.15] -- until here -- + \edef\altitude{\csname k@i\romannumeral\noinstrum@nt\endcsname}% + \edef\st@ffs{\csname n@p\romannumeral\noinstrum@nt\endcsname}% + \edef\nblines{\csname n@l\romannumeral\noinstrum@nt\endcsname}% + \edef\internote{\csname i@n\romannumeral\noinstrum@nt\endcsname}% + \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} + +% [version 1.15] moved out to the new register allocation code +% \let\lowersonginstrumi\maxdimen +% \let\uppersonginstrumi\z@ + +\def\g@loop{\group@no\z@ \loop\ifnum\group@no<\maxgroups + \s@l@ctgroup} +\def\s@l@ctgroup{% + \relax\test@grnum + \edef\g@b{\csname g@b\romannumeral\group@no\endcsname}% dimen (group bottom) + \edef\g@h{\csname g@h\romannumeral\group@no\endcsname}% dimen (group top) + \edef\lowersonginstrum{\csname lowersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) + \edef\uppersonginstrum{\csname uppersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) + }% +\def\test@grnum{% + \ifnum\group@no<\z@ \group@no\@c \fi + \ifnum\group@no<\maxgroups \else + \count@\maxgroups \advance\count@\m@ne + \errmessage{Wrong group reference number \the\group@no! (valid: 0 to \the\count@)}% [version 1.15] + \group@no\z@% [version 1.15] + \fi + \advance\group@no\@ne} + +% \nobarmessages prevents bar messages + +\def\nobarmessages{\let\no@b\@ne} +\let\no@b\empty + +% \nolinemessages prevents line messages in phase three +\def\nolinemessages{\let\no@l\@ne} +\let\no@l\empty + +% \nobarnumbers prevents bar numbering (Ian Collier) +% \barnumbers restores bar numbering + +\def\nobarnumbers{\let\lin@bar\empty \let\freqbarno\maxdimen} +\def\barnumbers{\let\freqbarno\normalvalue} +\barnumbers + +% show barnumbers only at the beginning system + +\def\raisebarno{\f@ur\internote} +\let\shiftbarno\z@ + +\def\writebarno{\boxit{\eightbf\the\barno\barnoadd}} +\def\systemnumbers{\nobarnumbers\let\lin@bar\@ne} + +% add 'a' behind the systembarnumber, if the previous line ended without +% a bar rule + +\let\z@sw\empty +\def\writezbarno{a} +\def\barnoadd{\ifx\z@sw\@ne \writezbarno \fi} + +% suppress the beginning vertical rule for single-staff scores + +\def\startrule{\let\b@rule\empty} +\def\nostartrule{\let\b@rule\z@} +\startrule + +%%% distance between instruments (added to \interportee) + +% [version 1.15] moved out to the above of the new register allocation code +% \newdimen\interinstrument +% [version 1.15] moved out to the new register allocation code +% \let\interinstrumenti\interinstrument + +\def\setinterinstrument#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname interinstrument\romannumeral\n@v\endcsname{#2}} + +%%% 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 [version 1.15] (Hiroaki) + \advance\n@viii\m@ne + \loop\ifnum\n@viii>\m@ne + \s@l@ctslur\n@viii\relax + \edef\@sense{\the\s@s}% + \if x\@sense% % sense flag + \else% % found slur + \edef\@dotted{\the\s@d}% +ickd + \y@v\lin@pos % get current position + \advance\y@v-\s@x % slurlength = currentpos - startpos + \let\@Ti\@ne % set flag for \writ@slur (\staffbotmarg) + \ifnum\s@z=\maxdimen \s@z\s@y \fi % flag (\breakslur not used -> tie) + \writ@slur\s@y\s@z\y@v\p@% avoid touching the bar rule + \s@x\z@% reset startpos for next line + \s@z\maxdimen% reset breakslur + \fi + \advance\n@viii\m@ne \repeat + \fi\s@indent\z@ +% + \ragg@d\par\lin@pos\z@ \endcatcodesmusic} + +\def\stoppiec@{\check@nopen\n@wbar\z@suspend} +%\def\stoppiece{\stoppiec@\@nds@ction} %-simick +\def\stoppiece{\T@bil\fi\stoppiec@\@nds@ction} %+simick +\let\endpiece\stoppiece + +\def\zstoppiec@{\check@nopen\zn@wbar\z@suspend} +%\def\zstoppiece{\zstoppiec@\@nds@ction} %-simick +\def\zstoppiece{\T@bil\fi\zstoppiec@\@nds@ction}%+simick +% if you need a line which appears ragged +\def\raggedstoppiece{\ifx\ragg@d\empty \fil@{r}\fi % version 1.18 RDT (from musixext) + \check@nopen\n@wbar\hfill\z@suspend\@nds@ction} + +\def\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}} + +% [version 1.15] 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}} +% [version 1.15] 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}}% [version 1.15] changed from \edef to \def (Hiroaki) + +\def\writ@names{\n@loop + \setbox\toks@box\null\relax + \ifnum\st@ffs>0\relax + \setbox\toks@box\llap{\vbox{\hbox\@to\parindent{% + \hss\csname instrument\romannumeral\noinstrum@nt\endcsname\hss}}\ \ }% + \fi + \altportee\altitude \Comp@High \advance\y@v-\ht\toks@box + \advance\altportee\h@lf\y@v + \writ@box + \repeat} + +%%% + +% les notes proprement dites + +\newdimen\noteskip +\newcount\transpose +\newcount\normaltranspose +\newdimen\locx@skip +\newdimen\elemskip +\newdimen\@l@mskip + +\def\check@staff{% + \ifnum\noport@@>\st@ffs\relax + \ifx\Post@Elims\undefined\else + \immediate\write16{check@staff\space inst=\the\noinstrum@nt\space + staff=\the\noport@@\space st@ffs=\the\st@ffs\space Elim.}\relax + \fi + \ifnum\st@ffs>0\relax + \errmessage{Staff number (\the\noport@@) out of specified range (\the\st@ffs)!}\fi + \else\relax} +%\def\check@staff{\iftrue\relax} + +\let\ifactiveinstrument\check@staff + +\def\nextstaff{\@ndstaff\beginstaff} +\def\nextinstrument{\@ndstaff\begininstrument} +\def\prevstaff{\@ndstaff\advance\noport@@-2\relax\beginstaff} +\def\selectstaff#1{\@ndstaff\noport@@#1\relax + \advance\noport@@ -1\relax\beginstaff} +\def\selectinstrument#1{\@ndstaff\noinstrum@nt#1\relax + \advance\noinstrum@nt -1\relax\begininstrument} + +\def\begininstrument{\advance\noinstrum@nt\@ne \s@l@ctinstr + \ifdim\internote<\p@seven6\Internote \set@tinynotesize \comput@sizes + \else + \ifdim\internote<.95\Internote \set@smallnotesize \comput@sizes + \else + \ifdim\internote<1.19\Internote \set@normalnotesize \comput@sizes + \else + \ifdim\internote<1.43\Internote \set@largenotesize \comput@sizes + \else + \set@Largenotesize \comput@sizes + \fi + \fi + \fi + \fi + \noport@@\z@ \beginstaff} + +\def\beginstaff{\leavevmode + \altportee\altitude \advance\altportee\noport@@\interportee + \count@portee \s@l@ctclefs \expandafter\get@refs\the\a@c + \setbox\n@otebox\hbox\bgroup + \let\rq\rq@ \let\lq\lq@ \let\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 + \advance\y@ii .285\interbeam% version 1.18 RDT + \ifnum\b@n>\z@ \advance\y@ii\b@n\interbeam \advance\y@ii-\interbeam \fi + \st@top\y@ii % a mettre a jour avec la pente ulterieurement + \else + \advance\y@ii-.285\interbeam% version 1.18 RDT + \stem@skip\z@ + \ifdim\y@ii<\st@bot + \ifnum\b@n<\z@ \advance\y@ii\b@n\interbeam \advance\y@ii\interbeam \fi + \st@bot\y@ii \fi \fi + \C@stem} + +%%% writing notes inclusive lines (subsidiary lines ?) (german: Hilfslinien) + +\newif\ifadvance\advancetrue + +% Modification by Werner Icking +% ledger lines exceed the note by: y@vi := 0.35 (noteskip - notewidth) +% and: 0.5 qn@width > y@vi > 0.2 qn@width +\newdimen\y@vi +\def\h@linei{% + \y@ii\n@v\internote + \y@iii\y@ii + \advance\y@ii\hlthick + \advance\y@iii-\hlthick + \y@vi\noteskip % noteskip +%-\ifnum\y@vi=\z@ \y@vi\maxdimen\fi % (or maxdimen if noteskip = 0) + \advance\y@vi-\y@v % - notewidth + \y@vi0.7\y@vi % this may be eaten =: additional length + \y@iv\h@lf\qn@width\ifnum\y@vi>\y@iv \y@vi\y@iv\fi % not more than 0.5 qn@width + \y@iv0.2\qn@width \ifnum\y@vi<\y@iv \y@vi\y@iv\fi % not less than 0.2 qn@width + \y@iv\y@v % notewidth + \advance\y@iv\y@vi % + additional length =: total length + \kernm\h@lf\y@vi % center the ledger line +%-\message{noteskip = \the\noteskip, length = \the\y@iv, notewidth = \the\y@v}% + \vrule\@height\y@ii\@depth-\y@iii\@width\y@iv + \kernm\y@iv\kern\h@lf\y@vi} + +% end Werner Icking's modification of ledger lines. +% old behaviour can be restored with musixfll.tex (or musixfll.sty) + +\def\writ@note{% + \ifnum\n@i<\@c +% help lines \n@i (position) + \ifnum\nblines>\thr@@ % no help lines for percussion instruments + \n@v\z@ + \ifnum\n@i<\m@ne % waste memory, but saves time + \loop \advance\n@v\m@ne \ifnum\n@i<\n@v + \advance\n@v\m@ne \h@linei + \repeat + \else + \n@v\nblines \advance\n@v\m@ne \multiply\n@v\tw@ + \ifnum\n@i>\n@v + \loop \advance\n@v\@ne \ifnum\n@i>\n@v + \advance\n@v\@ne \h@linei + \repeat + \fi + \fi + \fi +% + \pl@base\setst@m\st@m + \ifadvance \raise\y@i\adv@box\n@sym \else \raise\y@i\hbox{\n@sym}\fi + \ss@uite \advancetrue + \fi} + +\def\adv@box#1{\hbox\@to\noteskip{#1\hss}\advance\locx@skip\noteskip} + +%%% breve, longa, maxima, arbitrary notes, non spacing + +\def\zmaxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \advancefalse \g@w} +\def\zlonga{\def\w@h{\musixchar39}\y@v\wn@width \advancefalse \g@w} +\def\zbreve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \advancefalse \g@w} +\def\zwq{\def\w@h{\musixchar56}\y@v\wn@width \advancefalse \g@w} +\def\zwqq{\def\w@h{\musixchar127}\y@v\wn@width \advancefalse \g@w} + +\def\g@w#1{\let\st@m\resetst@m + \check@staff + \getn@i#1\relax\let\n@fon\g@w \let\n@sym\w@h \writ@note + \fi} + +\def\maxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \g@w} +\def\longa{\def\w@h{\musixchar39}\y@v\wn@width \g@w} +\def\breve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \g@w} +\def\wq{\def\w@h{\musixchar56}\y@v\wn@width \g@w} +\def\wqq{\def\w@h{\musixchar127}\y@v\wn@width \g@w} + +%%% alternate longa (with up stem) by Ingo Struck +%%% struck@student.uni-siegen.de + +\def\lngdnst@m{\stem@skip1.25\qd@skip + \advance\st@bot-\stemfactor\interbeam + \advance\st@bot-\altportee + \ifx\st@mcut\empty + \ifdim\st@bot<-\thr@@\internote + \cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@ + \cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi + \minst@bot\advance\st@bot\altportee + \C@stem} + +\def\lngupst@m{\stem@skip1.25\qd@skip + \advance\st@top\stemfactor\interbeam + \advance\st@top-\altportee + \ifx\st@mcut\empty + \ifdim\st@top>\@l@v@n\internote + \cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active + \cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi + \maxst@top\advance\st@top\altportee + \C@stem} + +\def\@longa#1{\getn@i#1\relax + \ifnum\n@i>\thr@@ + \let\st@m\lngdnst@m + \else + \let\st@m\lngupst@m + \fi + \let\n@fon\@longa \let\n@sym\q@u \y@v\qn@width \writ@note} + +\def\l@ngasymbol{\def\q@u{\musixfont\@xxxii}} + +\def\longaa{\l@ngasymbol\@longa} + +%%% whole notes + +\def\C@Point#1#2{\ifodd\n@i \else#2\internote \fi\hbox{\musixchar#1}} + +\def\wh{\def\w@h{\musixfont\nin@}\y@v\wn@width \g@w} +\def\whp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\z@\raise}}% + \y@v\wn@width \g@w} +\def\whpp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\@ne\raise}}% + \y@v\wn@width \g@w} + +%%% whole noteheads, no advance + +\def\zw{\advancefalse\wh} +\def\zwp{\advancefalse\whp} +\def\zwpp{\advancefalse\whpp} +\let\zwh\zw + +\def\lw#1{\kernm\wn@width\zw{#1}\kern\wn@width} +\def\rw#1{\kern\wn@width\zw{#1}\kernm\wn@width} +\def\lwp#1{\kernm\wn@width\zwp{#1}\kern\wn@width} +\def\rwp#1{\kern\wn@width\zwp{#1}\kernm\wn@width} +\def\lwpp#1{\kernm\wn@width\zwpp{#1}\kern\wn@width} +\def\rwpp#1{\kern\wn@width\zwpp{#1}\kernm\wn@width} + +%%% common routines for noteheads with the same width as a quarter note + +\def\@qa#1{\getn@i#1\relax + \ifnum\n@i>\thr@@ + \let\st@m\downst@m + \else + \let\st@m\upst@m + \fi + \check@staff % version 1.16 + \let\n@fon\@qa \let\n@sym\q@u \y@v\qn@width \writ@note + \fi} + +\def\@qu{\let\st@m\upst@m \g@q} +\def\@ql{\let\st@m\downst@m \g@q} +\def\@zq{\let\st@m\setst@m \advancefalse\g@q} +\def\@nq{\let\st@m\resetst@m \g@q} + +\def\g@q#1{\check@staff + \getn@i#1\relax\let\n@fon\g@q \let\n@sym\q@u + \y@v\qn@width \writ@note\fi} + +\def\@qup{\let\st@m\upst@m \g@qp} +\def\@qlp{\let\st@m\downst@m \g@qp} +\def\@zqp{\let\st@m\setst@m \advancefalse\g@qp} +\def\@nqp{\let\st@m\resetst@m \g@qp} + +\def\q@up{\q@u\C@Point\z@\raise} +\def\g@qp#1{\check@staff + \getn@i#1\relax\let\n@fon\g@qp \let\n@sym\q@up + \y@v\qn@width \writ@note\fi} + +\def\@qupp{\let\st@m\upst@m \g@qpp} +\def\@qlpp{\let\st@m\downst@m \g@qpp} +\def\@zqpp{\let\st@m\setst@m \advancefalse\g@qpp} +\def\@nqpp{\let\st@m\resetst@m \g@qpp} + +\def\q@upp{\q@u\C@Point\@ne\raise} +\def\g@qpp#1{\check@staff + \getn@i#1\relax\let\n@fon\g@qpp \let\n@sym\q@upp + \y@v\qn@width \writ@note\fi} + +\def\@lqu#1{\kernm\qn@width\advancefalse\@qu{#1}\kern\qn@width} +\def\@rqu#1{\kern\qn@width\advancefalse\@qu{#1}\kernm\qn@width} + +\def\@lql#1{\kernm\qn@width\advancefalse\@ql{#1}\kern\qn@width} +\def\@rql#1{\kern\qn@width\advancefalse\@ql{#1}\kernm\qn@width} + +\def\@lq#1{\kernm\qn@width\@zq{#1}\kern\qn@width} +\def\@rq#1{\kern\qn@width\@zq{#1}\kernm\qn@width} + +\def\@qb#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@q} +\def\@tqb#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick \let\st@m\beamst@m \g@q} +\def\@tqh#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width \let\st@m\beamst@m \g@q} +\def\@qbp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qp} +\def\@qbpp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qpp} + +\def\@ca{\n@iv\@xlv \@mca} +\def\@cca{\n@iv46 \@mca} +\def\@ccca{\n@iv47 \@mca} +\def\@cccca{\n@iv48 \@mca} +\def\@ccccca{\n@iv49 \@mca} + +\def\@mca#1{\getn@i#1\relax \n@vii\n@iv + \ifnum\n@i>\thr@@ + \let\st@m\down@flag + \else + \let\st@m\up@flag \advance\n@vii -\fiv@\relax + \fi + \check@staff % version 1.16 + \let\n@fon\@mca \let\n@sym\q@u \y@v\qn@width \writ@note + \fi} + +\def\@cu{\n@vii\@xl \let\st@m\up@flag \g@q} +\def\@ccu{\n@vii\@xli \let\st@m\up@flag \g@q} +\def\@cccu{\n@vii42\let\st@m\up@flag \g@q} +\def\@ccccu{\n@vii43\let\st@m\up@flag \g@q} +\def\@cccccu{\n@vii44\let\st@m\up@flag \g@q} + +\def\@cl{\n@vii\@xlv \let\st@m\down@flag \g@q} +\def\@ccl{\n@vii46\let\st@m\down@flag \g@q} +\def\@cccl{\n@vii47\let\st@m\down@flag \g@q} +\def\@ccccl{\n@vii48\let\st@m\down@flag \g@q} +\def\@cccccl{\n@vii49\let\st@m\down@flag \g@q} + +\def\@cup{\n@vii\@xl \let\st@m\up@flag \g@qp} +\def\@ccup{\n@vii\@xli \let\st@m\up@flag \g@qp} +\def\@clp{\n@vii\@xlv \let\st@m\down@flag \g@qp} +\def\@cclp{\n@vii46\let\st@m\down@flag \g@qp} + + +\def\@cupp{\n@vii\@xl \let\st@m\up@flag \g@qpp} +\def\@clpp{\n@vii\@xlv \let\st@m\down@flag \g@qpp} + +%%% half notes + +\def\h@symbol{\def\q@u{\musixfont\@ight}} + +\def\ha{\h@symbol\@qa} +\def\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} % version 1.16 RDT +\def\tqb{\q@symbol\@tqb} +\def\tql{\q@symbol\@tqb} % version 1.16 RDT +\def\tqqh#1#2{\tbbu{#1}\tqh{#1}{#2}} % version 1.17 RDT +\def\tqqu#1#2{\tbbu{#1}\tqu{#1}{#2}} % version 1.17 RDT +\def\tqqb#1#2{\tbbl{#1}\tqb{#1}{#2}} % version 1.17 RDT +\def\tqql#1#2{\tbbl{#1}\tql{#1}{#2}} % version 1.17 RDT +\def\tqqqh#1#2{\tbbbu{#1}\tqqh{#1}{#2}} % version 1.17 RDT +\def\tqqqu#1#2{\tbbbu{#1}\tqqu{#1}{#2}} % version 1.17 RDT +\def\tqqqb#1#2{\tbbbl{#1}\tqqb{#1}{#2}} % version 1.17 RDT +\def\tqqql#1#2{\tbbbl{#1}\tqql{#1}{#2}} % version 1.17 RDT + +\def\ztqh{\advancefalse\q@symbol\@tqh} +\def\ztqu{\advancefalse\q@symbol\@tqh} % version 1.16 RDT +\def\ztqb{\advancefalse\q@symbol\@tqb} +\def\ztql{\advancefalse\q@symbol\@tqb} % version 1.16 RDT + +%%% grace notes + +\def\grcu{\q@symbol\@grcu} +\def\grcl{\q@symbol\@grcl} + +\def\@grcu{\n@vii\tw@lv@ \let\st@m\up@flag \g@q} +\def\@grcl{\n@vii\active \let\st@m\down@flag \g@q} + +%%% starting beams + +% \ibu{0<=numero<10}{altitude~note}{pente de -9 a +9} +% \ibl{0<=numero<10}{altitude~note}{pente de -9 a +9} + +% \b@p slope (-9) - (9) +% \b@n number of pending beamlines (-4) - (4) + +\def\test@beamnum{% [version 1.15] new macro to make it independent from slur + \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxinstruments \else + \count@\maxinstruments \advance\count@\m@ne + \errmessage{Wrong beam reference number \the\n@i! (valid: 0 to \the\count@)} + \n@i\z@ + \fi + \advance\n@i\@ne}% + +\def\s@l@ctbeam#1\relax{% + \n@i#1\relax\test@beamnum % [version 1.15] make it independent from slur + \edef\b@x{\csname b@x\romannumeral\n@i\endcsname}% + \edef\b@z{\csname b@z\romannumeral\n@i\endcsname}% + \edef\b@n{\csname b@n\romannumeral\n@i\endcsname}% + \edef\b@p{\csname b@p\romannumeral\n@i\endcsname}} + +\def\s@l@ctc{\edef\c@x{\csname c@x\romannumeral\n@i\endcsname}% + \edef\c@z{\csname c@z\romannumeral\n@i\endcsname}} + +\def\s@l@ctd{\edef\d@x{\csname d@x\romannumeral\n@i\endcsname}% + \edef\d@z{\csname d@z\romannumeral\n@i\endcsname}\s@l@ctc} + +\def\s@l@cte{\edef\e@x{\csname e@x\romannumeral\n@i\endcsname}% + \edef\e@z{\csname e@z\romannumeral\n@i\endcsname}\s@l@ctd} + +\def\s@l@ctf{\edef\f@x{\csname f@x\romannumeral\n@i\endcsname}% + \edef\f@z{\csname f@z\romannumeral\n@i\endcsname}\s@l@cte} + +\def\s@l@ctg{\edef\g@x{\csname g@x\romannumeral\n@i\endcsname}% + \edef\g@z{\csname g@z\romannumeral\n@i\endcsname}\s@l@ctf} + +\def\ibu#1{\s@l@ctbeam#1\relax \i@bu} +\def\ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbu} +\def\ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbu} +\def\ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbu} +\def\ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbu} + +\def\ibl#1{\s@l@ctbeam#1\relax \i@bl} +\def\ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbl} +\def\ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbl} +\def\ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbl} +\def\ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbl} + +\def\i@bu#1#2{%\check@staff + \ifnum\b@n=\z@ \else \C@tb\t@bbu\qn@width \fi \global\b@n\m@ne + \inhgetn@i#1\relax \n@v#2 \C@ib+\global\advance\b@x\qd@skip} + +\def\i@bl#1#2{%\check@staff + \ifnum\b@n=\z@ \else \C@tb\t@bbl\lthick \fi \global\b@n\@ne + \inhgetn@i#1\relax \n@v#2 \C@ib-} + +\def\C@ib#1{\max@n@v\nin@\min@n@v{-\nin@}\global\b@p\n@v % clip slope number + \getcurpos \global\b@x\y@v \b@z#14.333\interbeam \advance\b@z\altportee + \pl@base \global\advance\b@z\y@i} + +\def\C@ba#1#2{\global\advance#1#2\interbeam} + +\def\i@bbu#1#2{\ifnum\b@n=\z@ \i@bu{#1}{#2}\C@ba\b@z\@ne \fi\n@bbu} +\def\i@bbl#1#2{\ifnum\b@n=\z@ \i@bl{#1}{#2}\C@ba\b@z\m@ne \fi\n@bbl} + +\def\i@bbbu#1#2{\ifnum\b@n=\z@ + \i@bbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \fi\n@bbbu} +\def\i@bbbl#1#2{\ifnum\b@n=\z@ + \i@bbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \fi\n@bbbl} + +\def\i@bbbbu#1#2{\ifnum\b@n=\z@ + \i@bbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \fi\n@bbbbu} +\def\i@bbbbl#1#2{\ifnum\b@n=\z@ + \i@bbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \fi\n@bbbbl} + +\def\i@bbbbbu#1#2{\ifnum\b@n=\z@ + \i@bbbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \C@ba\e@z\@ne \fi\n@bbbbbu} +\def\i@bbbbbl#1#2{\ifnum\b@n=\z@ + \i@bbbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \C@ba\e@z\m@ne \fi\n@bbbbbl} + +%%% changing beams + +\def\Dec@b#1#2{\ifnum\b@n=#1#2\fi\ifnum\b@n=-#1#2\fi} + +%!\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbu \fi \fi } +%!\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbl \fi \fi } + +\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbu} +\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbl} + +\def\nbbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu} +\def\nbbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl} + +\def\nbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte + \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu} +\def\nbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte + \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl} + +\def\nbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf + \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu \Dec@b\f@ur\n@bbbbbu} +\def\nbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf + \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl \Dec@b\f@ur\n@bbbbbl} + +\def\n@bbu{\C@nb\c@z\c@x\@ne\qd@skip} +\def\n@bbl{\C@nb\c@z\c@x\@ne\z@} +\def\n@bbbu{\C@nb\d@z\d@x\tw@\qd@skip} +\def\n@bbbl{\C@nb\d@z\d@x\tw@\z@} +\def\n@bbbbu{\C@nb\e@z\e@x\thr@@\qd@skip} +\def\n@bbbbl{\C@nb\e@z\e@x\thr@@\z@} +\def\n@bbbbbu{\C@nb\f@z\f@x\f@ur\qd@skip} +\def\n@bbbbbl{\C@nb\f@z\f@x\f@ur\z@} + +\def\C@nb#1#2#3#4{% + \global#1\b@z + \ifnum\b@n<\z@ \global\advance\b@n\m@ne \global\advance#1-#3\interbeam \fi + \ifnum\b@n>\z@ \global\advance\b@n\@ne \C@ba#1#3\fi + {\advance\locx@skip#4\getcurpos \global#2\y@v + \advance\y@v-\b@x \comp@slope\y@v \global\advance#1\s@lope}} + +%%% beam termination + +\def\b@adjust{\ifdim\y@ii>\tw@\y@ \advance\y@\y@ \advance\n@vi\@ne \fi} + +\def\@beam{% \y@ii : longueur, \b@p : pente, \y@i : altitude + \ifnum\b@p=\z@ +% slope zero + \y@iii\y@i\y@iv\y@i + \advance\y@iii-\b@amthick \advance\y@iv\b@amthick + \vrule\@height\y@iv\@depth-\y@iii\@width\y@ii + \else\n@vi\z@ +% slope offset + \ifnum\b@p>\z@ \n@vi\b@p \multiply\n@vi\si@ \advance\n@vi-\si@ \fi + \ifnum\b@p<\z@ \n@vi-\b@p \multiply\n@vi\si@ \advance\n@vi58\fi +% find longest possible character to avoid patchwork + \y@\tw@\p@ + \b@adjust \b@adjust \b@adjust \b@adjust \b@adjust + \advance\n@vi\@cxxviii + \chardef\b@alk\n@vi\musixfont +% +% \curwidth=0pt \curheight=\y@i \curxpos=\completewidth +% \loop\ifdim\curwidth<\completewidth +% \advance\curxpos by -\beamwidth +% \ifdim\curxpos<0pt +% \comp@slope\curxpos +% \advance\curheight by \s@lope \kern\curxpos \fi +% \raise\curheight\hbox{\b@alk}% +% \advance\curwidth by \beamwidth +% \comp@slope\beamwidth +% \advance\curheight by \s@lope +% \repeat \fi +% + \y@iv\z@ \y@iii\y@i \y@v\y@ii + \loop\ifdim\y@iv<\y@ii + \advance\y@v-\y@ + \ifdim\y@v<\z@ \comp@slope\y@v \advance\y@iii\s@lope \kern\y@v \fi + \raise\y@iii\hbox{\b@alk}% + \advance\y@iv\y@ \comp@slope\y@ \advance\y@iii\s@lope + \repeat \fi} + +\def\s@l@ctcde{\s@l@ctc \s@l@ctd \s@l@cte \s@l@ctf } + +\def\tbu#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width } +\def\tbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbu} +\def\tbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbu} +\def\tbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbu} +\def\tbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbu} + +\def\tbl#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick } +\def\tbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbl} +\def\tbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbl} +\def\tbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbl} +\def\tbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbl} + +\def\beam@pos#1{\getcurpos\y@ii\y@v\advance\y@ii-#1} + +\def\C@tb#1#2{% + \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \ifcase\n@ii \or \or \s@l@ctc \or \s@l@ctd \or \s@l@cte \or \s@l@ctf \or \s@l@ctg\fi + \ifnum\b@n<\m@ne #1\fi + \ifnum\b@n>\@ne #1\fi + \y@i\b@z \advance\y@i-\altportee \beam@pos\b@x + \advance\y@ii#2\relax + \check@staff + \llap{\@beam\kernm#2}\relax + \fi\global\b@n\z@} + +\def\t@bbu{\n@v\tw@ \C@b\t@bbbu\n@bbu\y@i\c@z \beam@pos\c@x \t@xbu} +\def\t@bbl{\n@v\tw@ \C@b\t@bbbl\n@bbl\y@i\c@z \beam@pos\c@x \t@xbl} + +\def\t@bbbu{\n@v\thr@@ \C@b\t@bbbbu\n@bbbu\y@i\d@z \beam@pos\d@x \t@xbu} +\def\t@bbbl{\n@v\thr@@ \C@b\t@bbbbl\n@bbbl\y@i\d@z \beam@pos\d@x \t@xbl} + +\def\t@bbbbu{\n@v\f@ur \C@b\t@bbbbbu\n@bbbbu\y@i\e@z \beam@pos\e@x \t@xbu} +\def\t@bbbbl{\n@v\f@ur \C@b\t@bbbbbl\n@bbbbl\y@i\e@z \beam@pos\e@x \t@xbl} + +\def\t@bbbbbu{\n@v\fiv@ \C@b\empty\n@bbbbbu\y@i\f@z \beam@pos\f@x \t@xbu} +\def\t@bbbbbl{\n@v\fiv@ \C@b\empty\n@bbbbbl\y@i\f@z \beam@pos\f@x \t@xbl} + +\def\C@b#1#2{% + \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \ifnum\n@ii>\n@v #1\fi + \loop + \advance\n@v\m@ne + \ifnum\n@ii=\n@v {\advance\locx@skip-\qn@width#2}\fi + \ifnum\n@v>\@ne \repeat} + +\def\t@xbu{\C@txb\qn@width\interbeam\b@amthick\qd@skip>} +\def\t@xbl{\C@txb\lthick\b@amthick\interbeam\hlthick<} + +\def\C@txb#1#2#3#4#5{\advance\y@i-\altportee + \advance\y@ii#1\relax + \check@staff + \llap{\@beam\kernm#1}% + \ifnum\b@n#5\z@ \comp@slope\y@ii \advance\y@i\s@lope + \raise\y@i\rlap{\kern#4\vrule\@height#3\@depth#2\@width\lthick}\relax + \fi + \fi + \ifnum\b@n<\z@ \global\advance\b@n\@ne \fi + \ifnum\b@n>\z@ \global\advance\b@n\m@ne \fi} + +%%% semiautomatic beams + +% adjustable beam slopes +% #1: beam number +% #2: starting pitch +% #3: ending pitch, +% #4: extension (number of \noteskip's) + +\def\Ibu#1{\s@l@ctbeam#1\relax\I@bu\i@bu} +\def\Ibl#1{\s@l@ctbeam#1\relax\I@bl\i@bl} +\def\Ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bu\i@bbu} +\def\Ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bl\i@bbl} +\def\Ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bu\i@bbbu} +\def\Ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bl\i@bbbl} +\def\Ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbu} +\def\Ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbl} +\def\Ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbbu} +\def\Ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbbl} + +% compute altitude difference of tried beam in \y@iv +% and compare with notes altitude difference + +\def\@@chk{\y@iv.05\y@v \multiply\y@iv\n@viii} + +\def\I@buuchk{\@@chk + \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@buuchk \fi + \ifnum\n@viii>\nin@ \advance\n@i\@ne \advance\n@ii\m@ne \I@buuchk \fi} + +\def\I@bldchk{\@@chk + \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@bldchk \fi + \ifnum\n@viii<-\nin@ \advance\n@i\m@ne \advance\n@ii\@ne \I@bldchk \fi} + +\def\I@budchk{\@@chk + \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@budchk \fi} + +\def\I@bluchk{\@@chk + \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@bluchk \fi} + +\def\I@bu{\let\@Ti\I@buuchk \let\@Tii\I@budchk \C@Ib} +\def\I@bl{\let\@Ti\I@bluchk \let\@Tii\I@bldchk \C@Ib} + +\def\C@Ib#1#2#3#4{{\n@v#4\relax \min@n@v\@ne + \inhgetn@i#3\relax\n@ii\n@i + \inhgetn@i#2\relax\advance\n@ii-\n@i + \y@v\noteskip \multiply\y@v\n@v + \ifnum\n@ii=\z@ #1{#2}0% + \else + \ifnum\n@ii>\z@ \n@viii\t@n \@Ti\else\n@viii-\t@n \@Tii \fi + \edef\I@boper{\noexpand#1{\the\n@i}{\the\n@viii}\relax}\I@boper + \fi}} + +% sets of double notes with computed slopes + +\def\B@h{\let\B@ii\tqh} +\def\B@b{\let\B@ii\tqb} + +\def\Dqbu{\let\B@i\Ibu \B@h\C@Dq} +\def\Dqbl{\let\B@i\Ibl \B@b\C@Dq} +\def\Dqbbu{\let\B@i\Ibbu \B@h\C@Dq} +\def\Dqbbl{\let\B@i\Ibbl \B@b\C@Dq} + +\def\C@Dq#1#2{\B@i0{#1}{#2}1\qb0{#1}\B@ii0{#2}} + +% sets of triple notes with computed slopes + +\def\Tqbu{\let\B@i\Ibu \B@h\C@Tq} +\def\Tqbl{\let\B@i\Ibl \B@b\C@Tq} +\def\Tqbbu{\let\B@i\Ibbu \B@h\C@Tq} +\def\Tqbbl{\let\B@i\Ibbl \B@b\C@Tq} + +\def\C@Tq#1#2#3{\B@i0{#1}{#3}2\qb0{#1#2}\B@ii0{#3}} + +% sets of quadruple notes with computed slopes + +\def\Qqbu{\let\B@i\Ibu \B@h\C@Qq} +\def\Qqbl{\let\B@i\Ibl \B@b\C@Qq} +\def\Qqbbu{\let\B@i\Ibbu \B@h\C@Qq} +\def\Qqbbl{\let\B@i\Ibbl \B@b\C@Qq} + +\def\C@Qq#1#2#3#4{\B@i0{#1}{#4}3\qb0{#1#2#3}\B@ii0{#4}} + +%%% duration points + +\def\pt{\g@pt\@ne\z@} +\def\ppt{\g@pt\@ne\@ne} +\def\pppt{\g@pt\@ne\tw@} + +\def\lpt{\g@pt\m@ne\z@} +\def\lppt{\g@pt\m@ne\@ne} +\def\lpppt{\g@pt\m@ne\tw@} + +\def\g@pt#1#2#3{\check@staff + \inhgetn@i#3\relax \relax % two \relax since the first one + \ifnum\n@i<\@c % in swallowed by \inhgetn@i + \ifodd\n@i \else\advance\n@i#1\fi + \pl@base \raise\y@i\hbox{\musixchar#2}\fi\fi} + +%%% rests + +\def\wholeshift#1{\roffset{\p@ne25}{#1}} + +\def\centerbar#1{\y@ii\lin@pos \advance\y@ii-\lastbarpos \advance\y@ii\cut@v + \kern-\h@lf\y@ii\lrlap{#1}\kern\h@lf\y@ii}% + + +\def\cpause{\hbox{\ccn{6}{\musixchar61}}} +\def\chpause{\hbox{\ccn{4}{\musixchar60}}} +\def\cPAuse{\hbox{\ccn{0}{\musixchar58}}} +\def\cPAUSe{\hbox{\ccn{0}{\musixchar59}}} + +\def\centerpause{\centerbar{\cpause}} +\def\centerhpause{\centerbar{\chpause}} +\def\centerPAuse{\centerbar{\cPAuse}} +\def\centerPAUSe{\centerbar{\cPAUSe}} + +\def\C@ps#1#2#3{\n@viii#3\multiply\n@viii\tw@ + \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1}} +\def\C@pspt#1#2#3{\n@viii#3\multiply\n@viii\tw@ + \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1\relax + \ifnum #1=\t@n\relax \raise 0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% + \else \raise -0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% + \fi}% + } + +\def\PAUSe{\adv@box{\musixchar59}} +\def\PAuse{\adv@box{\musixchar58}} + +\def\pause{\check@staff + \adv@box{\raise\si@\internote\hbox{\musixchar61}}\fi} +\def\pausep{\wholeshift{\pt5}\pause} +\def\liftpause{\C@ps\@l@v@n\si@} +\def\liftpausep{\C@pspt\@l@v@n\si@} + +\def\hpause{\check@staff + \adv@box{\raise\f@ur\internote\hbox{\musixchar60}}\fi} +\let\hp\hpause +\def\hpausep{\wholeshift{\pt5}\hpause} +\let\hpp\hpausep +\def\lifthpause{\C@ps\t@n\f@ur} +\def\lifthpausep{\C@pspt\t@n\f@ur} + +\newdimen\lift@rest +\def\adv@restbox#1{\hbox{\lift@rest 5\internote + \advance\lift@rest -2.5\fontdimen\fiv@\musixfont + \raise\lift@rest\hbox\@to\noteskip{#1\hss}}\advance\locx@skip\noteskip} + +\def\qp{\adv@restbox{\check@staff\musixchar62\fi}} +\let\soupir\qp + +\def\ds@oup{\adv@restbox{\check@staff\musixchar63\fi}} +\def\qs{\adv@restbox{\check@staff\musixchar64\fi}} +\def\hs{\adv@restbox{\check@staff\musixchar65\fi}} +\def\qqs{\adv@restbox{\check@staff\musixchar66\fi}} + +% pointed rests version 1.16 RDT +\def\qpp{\adv@restbox{\check@staff\pt5\musixchar62\fi}} +\def\dsp{\adv@restbox{\check@staff\pt5\musixchar63\fi}} +\def\qsp{\adv@restbox{\check@staff\pt5\musixchar64\fi}} +\def\hsp{\adv@restbox{\check@staff\pt5\musixchar65\fi}} +\def\qqsp{\adv@restbox{\check@staff\pt5\musixchar66\fi}} + +% double-dotted rests version 1.17 RDT + +\def\pausepp{\wholeshift{\ppt5}\pause} +\def\hpausepp{\wholeshift{\ppt5}\hpause} +\let\hppp\hpausepp +\def\qppp{\adv@restbox{\check@staff\ppt5\musixchar62\fi}} +\def\dspp{\adv@restbox{\check@staff\ppt5\musixchar63\fi}} +\def\qspp{\adv@restbox{\check@staff\ppt5\musixchar64\fi}} +\def\hspp{\adv@restbox{\check@staff\ppt5\musixchar65\fi}} +\def\qqspp{\adv@restbox{\check@staff\ppt5\musixchar66\fi}} + + +%%% accidentals + +\newskip\accshift + +\def\bigaccid{\let\small@test\iftrue} +\def\smallaccid{\let\small@test\iffalse} +\def\varaccid{\def\small@test{\ifdim\noteskip>1\p@seven\qn@width}} + +\varaccid % accidents de taille variable + +\def\na#1{\small@test\bigna{#1}\else\smallna{#1}\fi} +\def\fl#1{\small@test\bigfl{#1}\else\smallfl{#1}\fi} +\def\sh#1{\small@test\bigsh{#1}\else\smallsh{#1}\fi} +\def\dfl#1{\small@test\bigdfl{#1}\else\smalldfl{#1}\fi} +\def\dsh#1{\small@test\bigdsh{#1}\else\smalldsh{#1}\fi} + +% n@vi char pos of cautionpar (normal=5, doubleflat=6) +% n@v offset to char pos (flat=0, dflat=1, sharp=2, dsharp=3, natural=4) +% n@vi offset to char pos (big=0, small=60) +% n@vii =maxdimen -> cautionacctrue + +\def\writ@ba{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} +\def\set@ba{\let\@Ti\writ@ba \n@vi\z@} + +\def\bigna{\set@ba \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\bigfl{\set@ba \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\bigsh{\set@ba \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\bigdfl{\set@ba \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\bigdsh{\set@ba \let\@Tii\@dSh \n@v\thr@@ \C@acc} + +\def\@sa{\ifnum\n@vii=\maxdimen \C@ChaR \musixchar\n@v \kern.3\qn@width + \else \musixchar\n@v \fi \n@vii\z@} + +\def\smallna{\set@sa \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\smallfl{\set@sa \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\smallsh{\set@sa \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\smalldfl{\set@sa \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\smalldsh{\set@sa \let\@Tii\@dSh \n@v\thr@@ \C@acc} + +\def\cna{\set@ca \let\@Tii\@Na \n@v\f@ur \C@acc} % version 1.16 HM +\def\cfl{\set@ca \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\csh{\set@ca \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\cdfl{\set@ca \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\cdsh{\set@ca \let\@Tii\@dSh \n@v\thr@@ \C@acc} +% +\def\writ@sa{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} +\def\set@sa{\let\@Ti\writ@sa \n@iv\fiv@ \n@vi\@xl } +\def\writ@ca{\pl@base\raise\y@i\llap{\C@ChaR \musixchar\n@v\kern.3\qn@width\kern\accshift}} +\def\set@ca{\let\@Ti\writ@ca \n@iv\fiv@ \n@vi\@xl } + +\def\writ@ua{\advance\n@i\thr@@ \zchar\n@i{\kern\qu@rt\qn@width\@sa}} +\def\set@upper{\let\@Ti\writ@ua \n@iv\fiv@ \n@vi\@xl } + +\def\upperna{\set@upper \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\upperfl{\set@upper \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\uppersh{\set@upper \let\@Tii\@Sh \n@v\tw@ \C@acc} + +\def\@Na{\ifcase\n@ii \n@v\tw@ \or \n@v\f@ur \or \n@v\z@ \fi} +\def\@Fl{\ifcase\n@ii \n@v\f@ur \or \n@v\z@ \or \n@v\@ne \fi} +\def\@Sh{\ifcase\n@ii \n@v\thr@@ \or \n@v\tw@ \or \n@v\f@ur \fi} +\def\@dFl{\ifcase\n@ii \n@v\z@ \or \n@v\@ne \or + \message{\@nod flatten \noexpand\dfl \t@ruc}\let\@Ti\empty \fi} +\def\@dSh{\ifcase\n@ii + \message{\@nod sharpen \noexpand\dsh \t@ruc}\let\@Ti\empty + \or \n@v\thr@@ \or \n@v\tw@ \fi} + +\def\C@acc#1{% + \check@staff + \inhgetn@i#1\relax + \ifx\rel@sw\@ne + \s@l@ctsigns \n@iii\n@i + \advance\n@iii-\ut@ref \advance\n@iii-\ut@ref + \loop\ifnum\n@iii>\si@ \advance\n@iii-\s@v@n \repeat + \loop\ifnum\n@iii<\z@ \advance\n@iii\s@v@n \repeat + \ifcase\n@iii + \n@ii\si@ % mi + \or\n@ii\@ne % fa + \or\n@ii\thr@@ % sol + \or\n@ii\fiv@ % la + \or\n@ii\s@v@n % si + \or\n@ii\tw@ % do + \or\n@ii\f@ur % re + \fi +% \n@ii positive signature limit, \n@ii-8 negative signature limit + \advance\n@ii-\a@s \advance\n@ii\si@ \divide\n@ii\s@v@n + \@Tii + \fi \advance\n@v\@l \advance\n@v\n@vi \expandafter\@Ti % [version 1.15] (Hiroaki) + \fi} + +\def\@nod{Can't double } + +\def\relativeaccid{\let\rel@sw\@ne } +\def\absoluteaccid{\let\rel@sw\empty } +\absoluteaccid + +\def\lna#1{\loffset\smallvalue{\na{#1}}} +\def\lfl#1{\loffset\smallvalue{\fl{#1}}} +\def\lsh#1{\loffset\smallvalue{\sh{#1}}} +\def\ldfl#1{\loffset\smallvalue{\dfl{#1}}} +\def\ldsh#1{\loffset\smallvalue{\dsh{#1}}} + +%%% 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} +\def\tr#1{\zcn{#1}{\ppff tr}} +\def\trt#1{\loffset{0.65}{\shake{#1}}\roffset{0.65}{\mordent{#1}}} + +%%% 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. [version 1.15] + +\newskip\@itrillei +\newskip\@itrilleii +\newskip\@itrilleiii +\newskip\@itrilleiv +\newskip\@itrillev +\newskip\@itrillevi + + %\def\s@l@cttrille#1\relax{% + % \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + % \ifnum\n@i<\maxtrilles \else + % \n@i\z@ \errmessage{Wrong trill number!}\fi + % \advance\n@i\@ne + % \edef\@itrille{\csname @itrille\roman@n@i}% dimen (altportee) + % }% select trill + + +\def\itrille{\itrill@old{0}} +\def\ttrille{\ttrill@old{0}} +\def\tTrille{\tTrill@old{0}} + +\def\itrill@old#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \getcurpos\global\tr@y\y@v} +\def\ttrill@old#1{\s@l@cttrill#1\relax + \message{\noexpand\tr@x=\the\tr@x, No. #1}% + \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi + \let\T@i\empty \C@tri} +\def\tTrill@old#1{\s@l@cttrill#1\relax + \message{\noexpand\tr@x=\the\tr@x, No. #1}% + \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi + \def\T@i{\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 +% [version 1.15] moved out to the new register allocation code +% \newskip\tr@xi \tr@xi\maxdimen\relax % starting horizontal pos +% \newtoks\tr@swi % heading of trill +% \newskip\tr@yi % height of trill + +\newcount\tr@number + +\def\tr@loop{\tr@number\z@ \loop\ifnum\tr@number<\maxtrills + \s@l@cttrill\tr@number\relax + \advance\tr@number\@ne } + +\def\s@l@cttrill#1\relax{% + \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxtrills \else + \count@\maxtrills \advance\count@\m@ne + \errmessage{Wrong trill reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@ % [version 1.15] + \fi + \advance\n@i\@ne + \xdef\tr@x{\csname tr@x\roman@n@i}% + \xdef\tr@y{\csname tr@y\roman@n@i}% + \xdef\tr@sw{\csname tr@sw\roman@n@i}% + }% select octiaviation line + +%\newskip\tr@x \tr@x\maxdimen\relax % starting horizontal pos +%\newskip\tr@y % height of trill + +\def\Itrille#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \global\tr@sw={\relax}% + \C@T} +\def\ITrille#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \global\tr@sw={{\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}}% + +%%% tremolos version 1.19 RDT +%%% based on code by Werner Icking and Andre van Ryckeghem + +\def\trml#1{\advance\transpose2\loffset{0.5}{\ibl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trmu#1{\advance\transpose-3\loffset{0.5}{\ibu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% +\def\trrml#1{\advance\transpose2\loffset{0.5}{\ibbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trrmu#1{\advance\transpose-3\loffset{0.5}{\ibbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% +\def\trrrml#1{\advance\transpose2\loffset{0.5}{\ibbbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trrrmu#1{\advance\transpose-3\loffset{0.5}{\ibbbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% + +% whole notes are wider than quarter/half notes: +\def\Trml#1{\advance\transpose2\loffset0{\ibl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trmu#1{\advance\transpose-3\loffset{1.125}{\ibu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% +\def\Trrml#1{\advance\transpose2\loffset0{\ibbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trrmu#1{\advance\transpose-3\loffset{1.125}{\ibbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% +\def\Trrrml#1{\advance\transpose2\loffset0{\ibbbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trrrmu#1{\advance\transpose-3\loffset{1.125}{\ibbbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% + +%%% octave lines + +\def\octnumberup{\octnumberdefault\vrule width 0pt height2ex} +\def\octnumberdefault{\smallppff8} % version 1.17 RDT +\def\octnumberdown{\octnumberdefault$^a$\txtfont\kern 0.3em bassa\vrule width 0pt depth \Internote} + +\def\octfinup{\check@staff + \n@v\@xxiii\n@ii\@xxiv\global\o@swz={\@ne}\fi + \C@of} +\def\octfindown{\check@staff + \n@v\@xxv \n@ii\@xxvi\global\o@swz={\z@}\fi + \C@of} +\def\C@of#1#2{\check@staff + \y@v#2\noteskip\zcharnote{#1}{\hbox\@to\y@v{% + \xdef\o@sw{\csname o@swz\endcsname}\relax + \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\char\n@ii}}% + \fi} + +%%%%%% +% selecting \octnumber??? according to \o@sw +\def\octnumber{% \show\o@sw + \setbox\w@rkbox\hbox{% + \ifnum \@ne=\the\o@sw\relax \octnumberup + \else \octnumberdown + \fi}% + \ifdim \wd\w@rkbox>\y@v\setbox\w@rkbox\hbox{\octnumberdefault}\fi + \box\w@rkbox +} + + +%%%%%% + +% \let\maxoctlines\si@ % here disabled to avoid conflict with new register allocation code, except for \o@swz +% [version 1.15] moved out to the new register allocation code +% \newskip\o@xi \o@xi\maxdimen\relax % starting horizontal pos +% \newskip\o@yi % height of octline +\newtoks\o@swz % sense of octline for \octfin[up][down] without number +% \newtoks\o@swz % sense of octline for \octfin[up][down] without number + +\newcount\o@number + +\def\o@loop{\o@number\z@ \loop\ifnum\o@number<\maxoctlines + \s@l@ctoctline\o@number\relax + \advance\o@number\@ne } + +\def\s@l@ctoctline#1\relax{% + \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxoctlines \else + \count@\maxoctlines \advance\count@\m@ne + \errmessage{Wrong octaviation line reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@% [version 1.15] + \fi + \advance\n@i\@ne + \xdef\o@x{\csname o@x\roman@n@i}% + \xdef\o@y{\csname o@y\roman@n@i}% + \xdef\o@sw{\csname o@sw\roman@n@i}% + }% select octiaviation line + +%\newskip\o@x \o@x\maxdimen\relax % starting horizontal pos +%\newskip\o@y % height of octline + +\def\ioctfinup{\Ioctfinup0} +\def\ioctfindown{\Ioctfindown0} +\def\Ioctfinup#1{\check@staff + \s@l@ctoctline#1\relax + \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi + \global\o@sw={\@ne}\fi + \C@O} +\def\Ioctfindown#1{\check@staff + \s@l@ctoctline#1\relax + \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi + \global\o@sw={\z@}\fi + \C@O} + +\def\C@O#1{\check@staff + \getcurpos\global\o@x\y@v % store horizontal pos + \inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height + \global\o@y\y@i + \fi} % clise check@staff in Ioctfinup/down + +\def\toctfin{\Toctfin0} +\def\Toctfin#1{\check@staff + \s@l@ctoctline#1\relax + \advance\o@y-\altportee \let\T@ii\char \C@TO \global\o@x\maxdimen + \fi} + +\def\C@TO{\check@staff + \ifnum \@ne=\the\o@sw + \n@v\@xxiii \n@ii\@xxiv \else \n@v\@xxv \n@ii\@xxvi \fi + \ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi + \advance\y@v-\o@x \kernm\y@v \raise\o@y\hbox\@to\y@v{% + \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\T@ii\n@ii}\relax + \fi}% + +% Liftoctline #1 refnumber #2 lift[steps of internote] + +\def\Liftoctline#1#2{\n@i#1\advance\n@i\@ne + \advance\csname o@y\roman@n@i#2\internote} + +%%% some specials + +% \def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}} +% version 1.19 RDT: +\let\lyricson\relax +\let\lyricsoff\relax +\def\metron#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2\lyricson}} +\def\metronequiv#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1}} + + +\def\txtfont{% % version 1.17 RDT +\ifdim\internote<.95\Internote \sevenit +\else\ifdim\internote<1.19\Internote \eightit +\else\ifdim\internote<1.43\Internote \tenit +\else\twelveit\fi\fi\fi} + +\def\txt{3} +\def\xtuplet#1#2{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip + \sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}% + \zcharnote{#2}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont#1\/\/}}} +\def\triolet{\xtuplet\txt} % version 1.17 RDT + +% +% Following definitions based on tuplet.tex - conventional tuplet brackets for MusiXTeX. +% Col. G. L. Sicherman. Last revised 2003-05-17. +% +% Added to musixtex.tex version 1.16 by RDT. +% +% Standard MusiXTeX uses \uptrio and \downtrio to print tuplet brackets. +% We define \uptuplet and \downtuplet, with the same arguments: +% +% #1 : starting pitch +% #2 : width of bracket, in (\noteskip)s +% #3 : slope of bracket, in multiples of 1-1/8 degrees +% +% The user defines the text to appear in the opening as \tuplettxt. +% This is to avoid conflicting with the \txt in standard MusiXTeX. +% +% Examples: +% +% Draw a triplet bracket over the notes, starting at pitch "p", +% 1.25\noteskip wide, with a slope up of 3-3/8 degrees: +% +% \uptuplet p{1.25}3 +% +% Draw a sextuplet bracket under the notes, starting at pitch "a", +% 2.5\noteskip wide, with a slope down of 4-1/2 degrees: +% +% \def\tuplettxt{6\/\/} +% \downtuplet{a}{2.5}{-4} +% +% Send comments, complaints, and bouquets to the Colonel at +% <colonel@monmouth.com>. +% + +% Standard MusiXTeX prints a small "3" (or other number) within +% the bracket. Here we print the "3" in an opening in the bracket, +% so we need not use a small font. +% +% The double italic correction compensates for centering the number +% on the bracket line. + +\def\tuplettxt{3\/\/} + +%%% The rest is adapted from standard MusixTeX. + +\newdimen\y@vii % x of right end of left part of bracket. +\newdimen\y@viii % x of left end of right part of bracket. +\newdimen\y@ix +\newbox\tuptxtb@x + +% v@rline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) +% (comments and ideas from Ian Collier) (from -20 upto 20 ) +% This macro is used by some of the others which follow, +% using it directly it must be set in zero box + +\def\v@rline#1#2#3{\n@v#3\y@i#2% + \setbox\tuptxtb@x\hbox{\hskip1pt\txtfont\tuplettxt\hskip1pt}% + \y@vii=\h@lf\y@i\advance\y@vii-\h@lf\wd\tuptxtb@x% + \n@ii-\tw@nty \min@n@v\n@ii + \max@n@v\tw@nty \n@iii\n@v + \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars + \advance\n@v\@xxix + \setbox\ch@box\hbox{\mxsps\char\n@v}% + \ifdim\y@vii<\wd\ch@box \y@vii\wd\ch@box\fi% At least one whole segment! + \y@viii=\y@i\advance\y@viii-\y@vii% + \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ + \raise#1\internote\hbox{\mxsps\char\n@iv +% +% Build bracket with slanted line segments of width 10pt. +% Left part of bracket: +% + \loop\ifdim\y@iv<\y@vii\raise\y@iii\copy\ch@box + \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% +% last element +% +% \finalheight=2.5\completewidth +% \finalheight=\n@iii\finalheight +% \divide\finalheight by 100 +% \advance\overlapwidth by -\completewidth +% \stepheight=-2.5\overlapwidth +% \stepheight=\n@iii\stepheight +% \divide\stepheight by 100 +% \advance\curheight by \stepheight +% \kern -\overlapwidth \raise\curheight \box\ch@box +% + \y@ix=\y@vii\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% + \y@ix\y@vii\advance\y@ix-\wd\ch@box% + \y@iii\n@iii\y@ix\y@iii2\h@lf\y@iii\divide\y@iii\@c\raise\y@iii\copy\ch@box% +% +% Text: +% + \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c% + \y@ix=-\y@vii \advance\y@ix\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x% + \hbox to\y@ix{\hss}% + \y@iii\h@lf\y@v \raise\y@iii\vbox to\z@{% + \vss{\copy\tuptxtb@x}\vss} + \y@ix=\y@viii \advance\y@ix-\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x + \hbox to\y@ix{\hss}% To start of right part. No-op unless bracket is short. +% +% Right part of bracket: +% + \y@iii2\h@lf\y@viii \y@iii\n@iii\y@iii \divide\y@iii\@c% + \y@iv=\y@viii \advance\y@iv\wd\ch@box% + \loop\ifdim\y@iv<\y@i\raise\y@iii\copy\ch@box% + \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% +% Finish off the right part: +% + \y@iii\y@i\advance\y@iii-\wd\ch@box\y@iii2\h@lf\y@iii\y@iii\n@iii\y@iii% + \y@ix=\y@i\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% + \divide\y@iii\@c% + \raise\y@iii\copy\ch@box% +% + \raise\y@v\hbox{\mxsps\char\n@iv}}} +% +% y@i =complete length +% y@ii =height of linechar +% y@iii =current height +% y@iv =current width +% y@v =height of ending line +% y@vii =width of left segment of bracket +% y@viii=y@vii + width of opening +% y@ix =adjustment register +% +% n@iii=slope +% n@iv =(number of char for hooks) +% n@v =slope (number of linechar) + +\def\X@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width + \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\v@rline\n@i\y@v{#3}}} + +\def\uptuplet{\n@iv22\X@bkt} +\def\downtuplet{\n@iv21\X@bkt} + +%\check + +\def\zbreath{\check@staff\raise\si@\internote\rlap{\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}} % version 1.16 +\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} % version 1.16 + +%%% spacings + +% if you want to reduce the space behind e.g. \changecontext, use +% \addspace{dim} ! Only scaleable values are allowed ! + +\def\addspace#1{\kern#1\global\advance\x@skip#1} + +% \hardspace inserts (reduces) outside of \notes..\en unscaleable space + +\let\fil@spc\empty +\def\hardspace#1{\check@nopen\t@rmskip\y@v#1\addspace\y@v\fil@spc} + +\def\off#1{\advance\locx@skip#1\kern#1} +\def\sk{\off\noteskip} +\def\hsk{\off{\h@lf\noteskip}} +\def\bsk{\off{-\noteskip}} + +%% +% Redefine \qsk to be scaleable softwidth rather than a fixed kern +% Otherwise, over/underfull boxes will occur on rescaled (pass 2) material +%% + +\def\qqsk{\off{\qu@rt\@l@mskip}} % version 1.16 RDT +\def\hqsk{\off{\h@lf\@l@mskip}} +\def\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{\vnotes1.6\elemskip} % version 1.16 RDT (corrected 2015-03-31) +\def\nnnotes{\vnotes1.28\elemskip} % version 1.16 RDT (corrected 2015-03-31) + +\arithmeticskipscale + +\def\scale#1{\def\scalenoteskip{#1}} +\let\scalenoteskip\normalvalue + +\def\multnoteskip#1{\noteskip#1\noteskip} + +\def\vnotes#1\elemskip{\noteskip#1\@l@mskip \@vnotes} + +\let\V@sw\z@ +%\def\varnotes#1{\t@rmskip \let\V@sw\@ne +% \setbox\ch@box\hbox{#1}\noteskip\wd\ch@box \@vnotes} + +\def\hardnotes#1\notes{\t@rmskip \let\V@sw\@ne + \noteskip#1\relax \@vnotes} + +\let\thelyrics\empty +%\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne \def\thelyrics{\hbox{#1}}% +% \setbox\ch@box\thelyrics \noteskip\wd\ch@box \@vnotes} +\def\softlyrics#1{\def\thelyrics{\hbox{#1}}}% +\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne + \let\save@noteskip\noteskip + \def\noteskip{\z@\relax\errmessage{You cannot use \noexpand\noteskip + in \noexpand\hardlyrics's 1st argument!}}% + \def\thelyrics{\hbox{#1}}% + \setbox\ch@box\thelyrics \let\noteskip\save@noteskip + \noteskip\wd\ch@box \@vnotes} + + +\def\@vnotes{\multnoteskip\scalenoteskip + \def|{\nextstaff}\def&{\nextinstrument}\normaltranspose\transpose + \check@nopen\notes@open\@ne + \kern\n@skip\advance\x@skip\n@skip \locx@skip\x@skip + \n@skip\noteskip \noinstrum@nt\z@ \begininstrument} + +\def\en{\@ndstaff\notes@open\z@ + \ifnum\V@sw>0\t@rmskip + \fi + \let\thelyrics\empty} +\let\enotes\en + +\newcount\notes@open + +\def\check@nopen{% + \ifnum\notes@open>\z@ \en\errmessage{\@mis\noexpand\enotes ->}\fi} + +%%% text, lyrics, free positioning of chars + +\def\pl@base{\y@i\n@i\internote} +\def\lrlap#1{\rlap{\hss#1}} +\def\hard@box#1{\rlap{\hbox\@to\noteskip{#1\hfil}}} +\def\dhard@box#1{\rlap{\hbox\@to\tw@\noteskip{#1\hfil}}} +\def\thard@box#1{\rlap{\hbox\@to\thr@@\noteskip{#1\hfil}}} + +\def\zcharnote{\let\@Ti\rlap \C@ch} +\def\lcharnote{\let\@Ti\llap \C@ch} +\def\ccharnote{\let\@Ti\lrlap \C@ch} +\def\hcharnote{\let\@Ti\hard@box \C@ch} +\def\charnote#1#2{\zcharnote{#1}{#2}\sk} + +\def\zcn{\zcharnote} % version 1.16 +\def\ccn{\ccharnote} +\def\lcn{\lcharnote} + +\def\C@ch#1#2{\check@staff\inhgetn@i#1\relax\pl@base\raise\y@i\@Ti{#2}\fi} + +\def\zmidstaff{\let\@Ti\rlap \C@mid} +\def\lmidstaff{\let\@Ti\llap \C@mid} +\def\cmidstaff{\let\@Ti\lrlap \C@mid} + +\def\C@mid#1{\check@staff\y@v\interportee \advance\y@v\f@ur\Interligne \divide\y@v\tw@ + \raise\y@v\uplap{\@Ti{\strut#1}\vss}\fi} + +\def\zchar#1#2{\check@staff\raise#1\internote\rlap{#2}\fi} +\def\lchar#1#2{\check@staff\raise#1\internote\llap{#2}\fi} +\def\cchar#1#2{\check@staff\raise#1\internote\lrlap{#2}\fi} +\def\hchar#1#2{\check@staff\raise#1\internote\hard@box{#2}\fi} + +\def\uptext#1{\check@staff\zchar\t@n{#1}\fi} +\def\Uptext#1{\check@staff\zchar\fourt@@n{#1}\fi} + +\def\setsongraise#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname T@R\romannumeral\n@v\endcsname{#2}} + +% [version 1.15] moved out to the new register allocation code +% \let\T@Ri\z@ + +\def\qlrlap#1{\rlap{\hbox to \qn@width{\hss#1\hss}}} +\def\zsong{\let\@Ti\rlap \C@t} +\def\lsong{\let\@Ti\llap \C@t} +\def\csong{\let\@Ti\qlrlap \C@t} +\def\hsong{\let\@Ti\hard@box \C@t} +\def\dhsong{\let\@Ti\dhard@box \C@t} +\def\thsong{\let\@Ti\thard@box \C@t} + +\def\C@t#1{\C@tx{\@Ti{\strut#1}\vss}} + +\def\C@tx{% + \ifnum\noinstrum@nt=\@ne \y@iv\staffbotmarg \else + \advance\noinstrum@nt\m@ne + \y@iv\csname interinstrument\romannumeral\noinstrum@nt\endcsname + \C@Inter \advance\y@iv\stem@skip \divide\y@iv\tw@ + \advance\noinstrum@nt\@ne \fi + \advance\y@iv-\csname T@R\romannumeral\noinstrum@nt\endcsname +%% \advance\noinstrum@nt\@ne \fi + \lower\y@iv\uplap} + +%%% slope lines and brackets + +% varline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) +% (comments and ideas from Ian Collier) (from -20 upto 20 ) +% This macro is used by some of the others which follow, +% using it directly it must be set in zero box + +\def\varline#1#2#3{\n@v#3\y@i#2% + \n@ii-\tw@nty \min@n@v\n@ii + \max@n@v\tw@nty \n@iii\n@v + \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars + \advance\n@v\@xxix + \setbox\ch@box\hbox{\mxsps\char\n@v}% + \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ + \raise#1\internote\hbox{\ifx\@hook\@ne \mxsps\char\n@iv \fi +% main loop + \loop\ifdim\y@iv<\y@i + \raise\y@iii\copy\ch@box\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% last element +% +% \finalheight=2.5\completewidth +% \finalheight=\n@iii\finalheight +% \divide\finalheight by 100 +% \advance\overlapwidth by -\completewidth +% \stepheight=-2.5\overlapwidth +% \stepheight=\n@iii\stepheight +% \divide\stepheight by 100 +% \advance\curheight by \stepheight +% \kern -\overlapwidth \raise\curheight \box\ch@box +% + \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c \advance\y@iv-\y@i + \y@ii-2\h@lf\y@iv \y@ii\n@iii\y@ii \divide\y@ii\@c \advance\y@iii\y@ii + \kernm\y@iv\raise\y@iii\box\ch@box% + \ifx\@hook\@ne \raise\y@v\hbox{\mxsps\char\n@iv}\fi +% text in the middle + \ifx\@text\@ne \ifnum\n@vi=\@ne \y@iii\p@ \else\y@iii-\p@ \fi + \advance\y@iii\h@lf\y@v \kernm\h@lf\y@i\raise\y@iii\vbox\@to\z@{% + \ifnum\n@vi=\@ne \vss \fi\lrlap{\txtfont\txt}\ifnum\n@vi=\@ne \else\vss \fi}\fi}% + \let\@hook\empty \let\@text\empty} +% +% y@i =complete length +% y@ii =height of linechar +% y@iii=current height +% y@iv =current width +% y@v =height of ending line +% +% n@iii=slope +% n@iv =(number of char for hooks) +% n@v =slope (number of linechar) +% n@vi =1 -> text above +% @hook=\@ne -> draws hookrules at begin and end of line +% @text=\@ne -> puts text at the middle of the line (def'd with \txt) + +% \ov[un]bkt{p}{n}{s} draws a bracket over the music starting at the +% current position at pitch p, width n\noteskip and slope s, causing no space +% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) + +\def\ovbkt{\n@iv22\C@bkt} +\def\unbkt{\n@iv21\C@bkt} + +\def\C@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width \let\@hook\@ne + \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\varline\n@i\y@v{#3}}} + +% \up[down]trio{p}{n}{s} same as above, +% draws \txt (default \eightit 3) above[below] in the middle +% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) + +\def\uptrio{\n@vi\z@ \let\@text\@ne \ovbkt} +\def\downtrio{\n@vi\@ne \let\@text\@ne \unbkt} + +% +% slide #1=height #2=number of elements #3=slope(-8 to 8 [step 10degree]) +% +\def\slide#1#2#3{\n@ii#3\relax\inhgetn@i#1\relax% + \ifnum\n@ii>\m@ne \advance\n@ii\m@ne\let\@Ti\raise + \else \n@ii-\n@ii \advance\n@ii\s@v@n\let\@Ti\lower \fi + \setbox\toks@box\hbox{\mxsps\char\n@ii}\n@iii\z@ + \raise\n@i\internote\rlap{\hbox{\loop\ifnum\n@iii<#2% + \@Ti\n@iii\ht\toks@box\copy\toks@box\advance\n@iii\@ne\repeat}}} + +%%% standard settings +% [115] make them compatible to >12 instruments +\def\resetlayout{\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 +} + +% [version 1.15] setup the default maximum element numbers to the same values of T.114 +\setmaxinstruments\si@ +\setmaxcxxviiibeams\si@ % 128th beam +\setmaxcclvibeams\z@ % 256th beam +\setmaxgroups\thr@@ % groups of inst's or choirs +\setmaxslurs\maxinstruments +\setmaxtrills\maxinstruments +\setmaxoctlines\maxinstruments +% + +% [version 1.15] new register allocation code requires some changes +%\resetlayout % no need +%\let\nbinstruments\maxinstruments % no need +%\normalnotesize % already executed in \setmaxinstruments +\normalmusicsize +\normalnotesize % important: execute it again after the first execute of \normalmusicsize --- to initialize \metron stem length. but why? +%\resetlayout % no need +\def\nbinstruments{1} +\noinstrum@nt1\s@l@ctinstr\internote\Internote + +%%% +% +% This is muflex.tex version 1.00 , January 1993 +% +% Macro library for MusicTeX `flexiline' operations: MuFlex. +% The idea is to set up a two pass system. +% On the first pass, information about each bar is written to the file +% jobname.mx1. +% After the first pass, an external (non TeX) routine is run to +% determine optimal values of the elemental spacing (\elemskip) +% for each line, so as to properly fill each line, and to lead to +% the piece filling an integral number of lines. +% The relevant parameters are written onto the file +% jobname.mx2. +% On the second pass, the .mx2 file is read in, and the information +% used as described above. +% +% Ross Mitchell, January 1993. +% +%%% + +\newwrite\outmux +\def\fil@{\immediate\write\outmux} + +%% +% \mulooseness is the MuFlex analog of TeX's \looseness parameter: +% the increment to the natural number of lines in the section just +% ended. +%% + +\newcount\mulooseness +% Alternative \linegoal +\newcount\linegoal + +%% +% Invoke \startmuflex before \startpiece to find out the pass number +% and generally get things going. +%% +% !!! If you want (have) to override the .mx1, delete the .mx2 before !!! +% !! You have to change the mx1, if you change the spacing inbetween !! + +\newif\ifstartmuflex@done +\def\startmuflex{% + \ifstartmuflex@done + \immediate\write16{Warning: \noexpand\startmuflex\space + already done, ignored.}% + \else + \startmuflex@donetrue +% \global\let\ifstartmuflex@done\iftrue + \openin\inmux\jobname.mx2\relax + \ifeof\inmux + \immediate\openout\outmux\jobname.mx1\relax + \fil@{\mufl@x}% + \pass@I + \else + \message{(\jobname.mx2)}\pass@II + \fi + \fi} + +\let\endmuflex\empty + +\newbox\l@eftrightbox + +\def\leftrightrepeat@I{% + % \setbox\toks@box\l@eftrightrepeat\y@v\wd\toks@box + % \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box + % \advance\y@v\y@iv \global\advance\x@skip-\y@v + % + \setleftrightrepeat\@bar + \edef\thex@skip{\the\x@skip}% + \setbox\l@eftrightbox\l@eftrightrepeat + \edef\they@v{\the\wd\l@eftrightbox}% + \setbox\l@eftrightbox\l@eftrepeat + \edef\they@iv{\the\wd\l@eftrightbox}% + \global\x@skip\thex@skip + \fil@{l \they@v\space\they@iv}} + +\def\leftrepeat@I{% +% \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box +% \global\advance\x@skip-\y@iv + \setleftrepeat\@bar + \edef\thex@skip{\the\x@skip}% + \setbox\l@eftrightbox\l@eftrepeat + \edef\they@iv{\the\wd\l@eftrightbox}% + \global\x@skip\thex@skip + \fil@{L \they@iv}} + +% \akkoladen from: "Rainer Dunker" <rainer.dunker@ebe-online.de> + + +\def\akkoladen#1{% + \def\akk@count{0}% avoid occupying yet another count register + \ifx\empty#1\else\@akkoladen#1\@nd\fi + % deactivate all remaining \grouptop...bottom items + \loop + \ifnum\akk@count<\maxgroups + \incr@akk@count + \expandafter\groupbottom\expandafter{\akk@count}\maxdimen + \expandafter\grouptop\expandafter{\akk@count}\z@ + \repeat} +\def\@akkoladen#1#2#3\@nd{% + \incr@akk@count + \expandafter\groupbottom\expandafter{\akk@count}{#1}% + \expandafter\grouptop\expandafter{\akk@count}{#2}% + \ifx\empty#3\else\@akkoladen#3\@nd\fi} +\def\incr@akk@count{% + \count@\akk@count\relax \advance\count@\@ne \edef\akk@count{\the\count@}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is MusiXTex code for multiple left curly brackets % +% % +% submitted by Mthimkhulu Molekwa % +% to the mutex list on 19 May 1999 % +% % +% % +% usage: % +% \curlybrackets{<instrument1lower><instrument1upper> % +% <instrument2lower><instrument2upper> % +% ... % +% <instrument_n_lower><instrument_n_upper> % +% } % +% % +% % +% % +% This version corrected 07/23/2007 by Rainer Dunker to make it % +% insensitive to changes in \interstaff by PMX % +% % +% Added to musixtex.tex version 1.16 by RDT % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\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 + diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/rests.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/restsdoc.tex index 63109dace2d..8f99ebd9cf5 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/rests.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/restsdoc.tex @@ -35,7 +35,7 @@ and \keyindex{PAUSe}, which yield: %\check - \section{Raising rests}\index{raising rests} + \section{Raising rests and non-spacing rests}\index{raising rests} All the previous rests except \keyindex{pausep} and \keyindex{hpausep} are \ital{hboxes}, which means that @@ -51,6 +51,19 @@ standard \TeX\ command \keyindex{raise}. For example: \noindent where \keyindex{Interligne} is the distance from one staff line to the next. +Similarly, non-spacing rests may be coded using the \TeX\ command \keyindex{rlap}, as in + +\begin{music}\nostartrule +\startextract +\notes\ibbu0h{-1}\zccl e\qb0h\raise-4\Interligne\rlap\qs\qb0e\en +\notes\raise-4\Interligne\rlap\ds\qb0f\tqu0g\en +\endextract +\end{music}\noindent +for which the coding is +\begin{verbatim} +\notes\ibbu0h{-1}\zccl e\qb0h\raise-4\Interligne\rlap\qs\qb0e\en +\notes\raise-4\Interligne\rlap\ds\qb0f\tqu0g\en +\end{verbatim} In addition, two macros are available to put a whole or half rest above or below the staff. The ordinary \verb|\pause| or diff --git a/Master/texmf-dist/doc/generic/musixtex/scripts/musixflx.pdf b/Master/texmf-dist/doc/generic/musixtex/scripts/musixflx.pdf Binary files differindex e93d61b18f1..934b9097b9d 100644 --- a/Master/texmf-dist/doc/generic/musixtex/scripts/musixflx.pdf +++ b/Master/texmf-dist/doc/generic/musixtex/scripts/musixflx.pdf diff --git a/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf b/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf Binary files differindex 385e2b62508..4df687bb31e 100644 --- a/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf +++ b/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf diff --git a/Master/texmf-dist/doc/man/man1/musixtex.1 b/Master/texmf-dist/doc/man/man1/musixtex.1 index b06935311e6..d1d15a13706 100644 --- a/Master/texmf-dist/doc/man/man1/musixtex.1 +++ b/Master/texmf-dist/doc/man/man1/musixtex.1 @@ -1,5 +1,5 @@ .\" This manpage is licensed under the GNU Public License -.TH MUSIXTEX 1 2014-07-16 "musixtex version 0.11" "" +.TH MUSIXTEX 1 2015-11-28 "musixtex version 0.12" "" .SH NAME musixtex \- processes MusiXTeX files, deleting intermediate files @@ -15,6 +15,9 @@ musixtex \- processes MusiXTeX files, deleting intermediate files | .IR jobname [ .aspc ] +| +.IR jobname +[ .ltx ] } ... .TP If a jobname argument has a .tex extension, the default effect is to process the file using @@ -40,12 +43,19 @@ If a jobname argument has a .aspc extension, the file is first preprocessed usin .BR autosp (1) and the resulting .tex file is processed as above. .P -If a jobname argument has neither .tex nor .aspc extension, file +If a jobname argument has a .ltx extension, the file is processed using +.BR latex (1) +or +.BR pdflatex (1). +.P +If a jobname argument has neither .tex nor .aspc nor .ltx extension, file .IR jobname .aspc +or +.IR jobname .ltx will be processed as above if it exists; otherwise file .IR jobname .tex will -be processed. +be processed, if it exists. .SH OPTIONS .TP 8 @@ -59,7 +69,8 @@ output usage summary and quit changes the TeX processor to .BR latex (1) or -.BR pdflatex (1) +.BR pdflatex (1); +implied if the file has .ltx extension .TP .B -p changes the TeX processor to @@ -98,7 +109,7 @@ to update index database .B -a force .BR autosp (1) -preprocessing +preprocessing; implied if the file has .aspc extension. .TP .B -f default processing diff --git a/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf b/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf Binary files differindex aafd17cafd3..fc91b3e65a6 100644 --- a/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf +++ b/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf diff --git a/Master/texmf-dist/scripts/musixtex/musixtex.lua b/Master/texmf-dist/scripts/musixtex/musixtex.lua index 3977fb38cf4..c85f38a8a15 100755 --- a/Master/texmf-dist/scripts/musixtex/musixtex.lua +++ b/Master/texmf-dist/scripts/musixtex/musixtex.lua @@ -1,6 +1,6 @@ #!/usr/bin/env texlua -VERSION = "0.11" +VERSION = "0.12" --[[ musixtex.lua: processes MusiXTeX files (and deletes intermediate files) @@ -26,6 +26,9 @@ VERSION = "0.11" --[[ ChangeLog: + version 0.12 2015-11-28 RDT + Process .ltx files with -l implied + version 0.11 2015-07-16 RDT Automatic autosp preprocessing. @@ -64,10 +67,10 @@ VERSION = "0.11" --]] function usage() - print("Usage: [texlua] musixtex.lua { option | basename[.tex] | basename[.aspc] } ... ") + print("Usage: [texlua] musixtex.lua { option | basename[.tex] | basename[.aspc] basename[.ltx] } ... ") print("options: -v version") print(" -h help") - print(" -l latex (or pdflatex)") + print(" -l latex (or pdflatex) (implied with .ltx extension)") print(" -p pdfetex (or pdflatex)") print(" -d dvipdfm") print(" -s stop at dvi") @@ -76,7 +79,7 @@ function usage() print(" -1 one-pass [pdf][la]tex processing") print(" -F fmt use fmt as the TeX processor") print(" -x run makeindex") - print(" -a preprocess using autosp") + print(" -a preprocess using autosp (impled with .aspc extension)") print(" -f restore default processing") end @@ -144,31 +147,57 @@ repeat tex = arg[narg] else repeat -- pseudo loop to get effect of "continue" using "break" - filename = this_arg - if filename ~= "" and string.sub(filename, -5, -1) == ".aspc" then - if io.open(filename, "r") then - print("Processing ".. filename ) + texfilename = this_arg + if texfilename ~= "" and string.sub(texfilename, -5, -1) == ".aspc" then + if io.open(texfilename, "r") then + print("Processing ".. texfilename ) else - print("No file: " .. filename ) + print("No file: " .. texfilename ) break -- out of pseudo loop end preprocess = 1 - filename = string.sub(filename, 1, -6) - elseif filename ~= "" and string.sub(filename, -4, -1) == ".tex" then - if io.open(filename, "r") then - print("Processing ".. filename ) + filename = string.sub(texfilename, 1, -6) + texfilename = filename .. ".tex" + elseif texfilename ~= "" and string.sub(texfilename, -4, -1) == ".ltx" then + if io.open(texfilename, "r") then + print("Processing ".. texfilename ) + else + print("No file: " .. texfilename ) + break -- out of pseudo loop + end + if tex == "pdfetex" then + tex = "pdflatex" else - print("No file: " .. filename ) + tex = "latex" + end + filename = string.sub(texfilename, 1, -5) + elseif texfilename ~= "" and string.sub(texfilename, -4, -1) == ".tex" then + if io.open(texfilename, "r") then + print("Processing ".. texfilename ) + else + print("No file: " .. texfilename ) break -- out of pseudo loop end - filename = string.sub(filename, 1, -5) - elseif io.open(filename .. ".aspc", "r") then + filename = string.sub(texfilename, 1, -5) + elseif io.open(texfilename .. ".aspc", "r") then preprocess = 1 - print("Processing ".. filename .. ".aspc") - elseif io.open(filename .. ".tex", "r") then - print("Processing ".. filename .. ".tex") + print("Processing ".. texfilename .. ".aspc") + filename = texfilename + elseif io.open(texfilename .. ".ltx", "r") then + if tex == "pdfetex" then + tex = "pdflatex" + else + tex = "latex" + end + ltx = 1 + filename = texfilename + texfilename = filename .. ".ltx" + elseif io.open(texfilename .. ".tex", "r") then + print("Processing ".. texfilename .. ".tex") + filename = texfilename + texfilename = filename .. ".tex" else - print("No file: " .. filename ) + print("No file: " .. texfilename ) break -- out of pseudo loop end if preprocess == 1 and os.execute("autosp " .. filename) ~= 0 then @@ -176,18 +205,18 @@ repeat break -- out of pseudo loop end os.remove( filename .. ".mx2" ) - if (passes == 1 or os.execute(tex .. " " .. filename) == 0) and + if (passes == 1 or os.execute(tex .. " " .. texfilename) == 0) and (passes == 1 or os.execute(musixflx .. " " .. filename) == 0) and - (os.execute(tex .. " " .. filename) == 0) and + (os.execute(tex .. " " .. texfilename) == 0) and ((tex ~= "latex" and tex ~="pdflatex") or (index == 0) or (os.execute("makeindex -q " .. filename) == 0)) and ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. filename) == 0)) and + or (os.execute(tex .. " " .. texfilename) == 0)) and ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. filename) == 0)) and + or (os.execute(tex .. " " .. texfilename) == 0)) and ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. filename) == 0)) and + or (os.execute(tex .. " " .. texfilename) == 0)) and (dvi == "" or (os.execute(dvi .. " " .. filename) == 0)) and (ps2pdf == "" or (os.execute(ps2pdf .. " " .. filename .. ".ps") == 0) ) then @@ -205,7 +234,7 @@ repeat end end else - print("Musixtex processing of " .. filename .. ".tex fails.\n") + print("Musixtex processing of " .. texfilename " fails.\n") exit_code = 2 --[[ uncomment for debugging print("tex = ", tex) diff --git a/Master/texmf-dist/tex/generic/musixtex/musixec.tex b/Master/texmf-dist/tex/generic/musixtex/musixec.tex index ced44c02d20..72252737185 100644 --- a/Master/texmf-dist/tex/generic/musixtex/musixec.tex +++ b/Master/texmf-dist/tex/generic/musixtex/musixec.tex @@ -23,7 +23,7 @@ % % Copyright 2015 Bob Tennent rdt@cs.queensu.ca % -\immediate\write16{MusiXec\space<2015/02/11>} +\immediate\write16{MusiXec\space<2015/07/28>} % \newif\iflongDCfontnames @@ -212,5 +212,30 @@ \zcharnote{#2}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont#1}}} \catcode`\@=\catcodeat +% +% Redefine accented characters for etex, suggested by David Carlisle: +% +\ifx\documentclass\undefined +\def\ProvidesFile#1[#2]{} +\def\DeclareFontEncoding#1#2#3{} +\def\DeclareTextAccent#1#2#3{% +\def#1##1{% +\expandafter\ifx\csname T1\string#1-\string##1\endcsname\relax +{\accent#1 ##1}% +\else +\csname T1\string#1-\string##1\expandafter\endcsname +\fi}} +\def\DeclareTextCommand#1#2{\xdtcmd}%not today +\def\xdtcmd#1#{\xxdtcmd}%not today +\def\xxdtcmd#1{}%not today +\def\DeclareTextCompositeCommand#1#2#3#4{}%not today +\def\DeclareTextSymbol#1#2#3{% +\def#1{\char#3\relax}} +\def\DeclareTextComposite#1#2#3#4{% +\expandafter\def\csname T1\string#1-\string#3\endcsname{\char#4\relax}} + +\input t1enc.def +\fi + \normtype \endinput diff --git a/Master/texmf-dist/tex/generic/musixtex/musixtex.tex b/Master/texmf-dist/tex/generic/musixtex/musixtex.tex index 3de1de22292..0016785fb64 100644 --- a/Master/texmf-dist/tex/generic/musixtex/musixtex.tex +++ b/Master/texmf-dist/tex/generic/musixtex/musixtex.tex @@ -25,15 +25,20 @@ \def\mufl@x{0.83}% \def\mxmajorvernumber{1} -\def\mxminorvernumber{18} +\def\mxminorvernumber{19} \def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum \def\mxversuffix{}% \edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} -\def\mxdate{2015-07-25} +\def\mxdate{2015-11-29} \immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% \everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% +% version 1.19: + +% RDT corrected typos in the definition of \comput@fonts affecting ppff fonts for \Largemusicsize +% RDT introduced definitions for tremolo commands \trml, \trmu, etc. + % version 1.18: % RDT added definitions of \raggedstoppiece and \slide from musixext.tex @@ -1609,11 +1614,11 @@ \let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd \let\meternorfont\svtbfg \let\metersmallfont\frtbf % version 1.18 RDT \let\meterbigfont\twtybfg \let\meterlargefont\twfvbf - \let\meterLargefont\twfvbfg - \let\tinyppff\ppfftwentyg - \let\smallppff\ppfftwentyfourg - \let\normppff\ppfftwentynineg - \let\medppff\ppfftwentynineg + \let\meterLargefont\twfvbf + \let\tinyppff\ppfftwenty + \let\smallppff\ppfftwentyfour + \let\normppff\ppfftwentynine + \let\medppff\ppfftwentynine \else \ifnum\musicsize=\tw@nty \else\ifnum\musicsize=\z@ @@ -4206,6 +4211,24 @@ % Correction by Julian Gilbey \the\tr@sw\xleaders\hbox{\musixchar69}\hfill}}% +%%% tremolos version 1.19 RDT +%%% based on code by Werner Icking and Andre van Ryckeghem + +\def\trml#1{\advance\transpose2\loffset{0.5}{\ibl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trmu#1{\advance\transpose-3\loffset{0.5}{\ibu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% +\def\trrml#1{\advance\transpose2\loffset{0.5}{\ibbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trrmu#1{\advance\transpose-3\loffset{0.5}{\ibbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% +\def\trrrml#1{\advance\transpose2\loffset{0.5}{\ibbbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% +\def\trrrmu#1{\advance\transpose-3\loffset{0.5}{\ibbbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% + +% whole notes are wider than quarter/half notes: +\def\Trml#1{\advance\transpose2\loffset0{\ibl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trmu#1{\advance\transpose-3\loffset{1.125}{\ibu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% +\def\Trrml#1{\advance\transpose2\loffset0{\ibbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trrmu#1{\advance\transpose-3\loffset{1.125}{\ibbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% +\def\Trrrml#1{\advance\transpose2\loffset0{\ibbbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% +\def\Trrrmu#1{\advance\transpose-3\loffset{1.125}{\ibbbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% + %%% octave lines \def\octnumberup{\octnumberdefault\vrule width 0pt height2ex} @@ -4307,7 +4330,11 @@ %%% some specials -\def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}} +% \def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}} +% version 1.19 RDT: +\let\lyricson\relax +\let\lyricsoff\relax +\def\metron#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2\lyricson}} \def\metronequiv#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1}} |