From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/musixtex/tex/musixadd.tex | 30 + macros/musixtex/tex/musixadf.tex | 138 + macros/musixtex/tex/musixbar.tex | 148 + macros/musixtex/tex/musixbbm.tex | 69 + macros/musixtex/tex/musixblx.tex | 44 + macros/musixtex/tex/musixbm.tex | 25 + macros/musixtex/tex/musixcho.tex | 68 + macros/musixtex/tex/musixcpt.tex | 826 ++++++ macros/musixtex/tex/musixcrd.tex | 272 ++ macros/musixtex/tex/musixdat.tex | 59 + macros/musixtex/tex/musixdbr.tex | 250 ++ macros/musixtex/tex/musixdia.tex | 110 + macros/musixtex/tex/musixec.tex | 169 ++ macros/musixtex/tex/musixeng.tex | 42 + macros/musixtex/tex/musixesf.tex | 79 + macros/musixtex/tex/musixevo.tex | 19 + macros/musixtex/tex/musixext.tex | 26 + macros/musixtex/tex/musixfll.tex | 44 + macros/musixtex/tex/musixgre.tex | 351 +++ macros/musixtex/tex/musixgui.tex | 41 + macros/musixtex/tex/musixhor.tex | 41 + macros/musixtex/tex/musixhou.tex | 58 + macros/musixtex/tex/musixhv.tex | 180 ++ macros/musixtex/tex/musixinv.tex | 2 + macros/musixtex/tex/musixlit.tex | 87 + macros/musixtex/tex/musixlyr.tex | 1162 ++++++++ macros/musixtex/tex/musixmad.tex | 30 + macros/musixtex/tex/musixper.tex | 195 ++ macros/musixtex/tex/musixplt.tex | 184 ++ macros/musixtex/tex/musixpoi.tex | 67 + macros/musixtex/tex/musixppff.tex | 169 ++ macros/musixtex/tex/musixps.tex | 963 +++++++ macros/musixtex/tex/musixref.tex | 305 ++ macros/musixtex/tex/musixslu.tex | 4 + macros/musixtex/tex/musixsqr.tex | 3 + macros/musixtex/tex/musixste.tex | 35 + macros/musixtex/tex/musixstf.tex | 28 + macros/musixtex/tex/musixstr.tex | 47 + macros/musixtex/tex/musixsty.tex | 388 +++ macros/musixtex/tex/musixtex.tex | 5707 +++++++++++++++++++++++++++++++++++++ macros/musixtex/tex/musixtmr.tex | 201 ++ macros/musixtex/tex/musixtri.tex | 64 + macros/musixtex/tex/tuplet.tex | 27 + 43 files changed, 12757 insertions(+) create mode 100644 macros/musixtex/tex/musixadd.tex create mode 100644 macros/musixtex/tex/musixadf.tex create mode 100644 macros/musixtex/tex/musixbar.tex create mode 100644 macros/musixtex/tex/musixbbm.tex create mode 100644 macros/musixtex/tex/musixblx.tex create mode 100644 macros/musixtex/tex/musixbm.tex create mode 100644 macros/musixtex/tex/musixcho.tex create mode 100644 macros/musixtex/tex/musixcpt.tex create mode 100644 macros/musixtex/tex/musixcrd.tex create mode 100644 macros/musixtex/tex/musixdat.tex create mode 100644 macros/musixtex/tex/musixdbr.tex create mode 100644 macros/musixtex/tex/musixdia.tex create mode 100644 macros/musixtex/tex/musixec.tex create mode 100644 macros/musixtex/tex/musixeng.tex create mode 100644 macros/musixtex/tex/musixesf.tex create mode 100644 macros/musixtex/tex/musixevo.tex create mode 100644 macros/musixtex/tex/musixext.tex create mode 100644 macros/musixtex/tex/musixfll.tex create mode 100644 macros/musixtex/tex/musixgre.tex create mode 100644 macros/musixtex/tex/musixgui.tex create mode 100644 macros/musixtex/tex/musixhor.tex create mode 100644 macros/musixtex/tex/musixhou.tex create mode 100644 macros/musixtex/tex/musixhv.tex create mode 100644 macros/musixtex/tex/musixinv.tex create mode 100644 macros/musixtex/tex/musixlit.tex create mode 100644 macros/musixtex/tex/musixlyr.tex create mode 100644 macros/musixtex/tex/musixmad.tex create mode 100644 macros/musixtex/tex/musixper.tex create mode 100644 macros/musixtex/tex/musixplt.tex create mode 100644 macros/musixtex/tex/musixpoi.tex create mode 100644 macros/musixtex/tex/musixppff.tex create mode 100644 macros/musixtex/tex/musixps.tex create mode 100644 macros/musixtex/tex/musixref.tex create mode 100644 macros/musixtex/tex/musixslu.tex create mode 100644 macros/musixtex/tex/musixsqr.tex create mode 100644 macros/musixtex/tex/musixste.tex create mode 100644 macros/musixtex/tex/musixstf.tex create mode 100644 macros/musixtex/tex/musixstr.tex create mode 100644 macros/musixtex/tex/musixsty.tex create mode 100644 macros/musixtex/tex/musixtex.tex create mode 100644 macros/musixtex/tex/musixtmr.tex create mode 100644 macros/musixtex/tex/musixtri.tex create mode 100644 macros/musixtex/tex/tuplet.tex (limited to 'macros/musixtex/tex') diff --git a/macros/musixtex/tex/musixadd.tex b/macros/musixtex/tex/musixadd.tex new file mode 100644 index 0000000000..9e3b716071 --- /dev/null +++ b/macros/musixtex/tex/musixadd.tex @@ -0,0 +1,30 @@ +% +% 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. +% +% +% musixadd.tex : allocate registers for additional instruments +% +\immediate\write16{MusiXADDitional instruments T.115 <19 Nov 2010>}% +% +% +% setup the maximum element numbers +\setmaxinstruments{9}% +\setmaxgroups{4}% +\setmaxslurs\maxinstruments +% +\endinput diff --git a/macros/musixtex/tex/musixadf.tex b/macros/musixtex/tex/musixadf.tex new file mode 100644 index 0000000000..33c93ddca8 --- /dev/null +++ b/macros/musixtex/tex/musixadf.tex @@ -0,0 +1,138 @@ +% +% musixadf.tex - some additional accents for MusiXTeX +% +%% Author: +%% Hiroaki MORIMOTO +%% Tokyo, Japan +%% URL: http://homepage1.nifty.com/kuuku/pub/musixtex/index-e.html +% +\immediate\write16{MusiXTeX Additional Accents <2015-02-15> )}% +% +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +% +\font\musixadfeleven=xadf11 +\font\musixadfthirteen=xadf13 +\font\musixadfsixteen=xadf16 +\font\musixadftwenty=xadf20 +\font\musixadftwentyfour=xadf24 +\font\musixadftwentynine=xadf29 +% +\let\comput@fonts@org=\comput@fonts\relax +\def\comput@fonts{% + \comput@fonts@org + \ifnum\musicsize=\sixt@@n + \let\musixadfLargefont\musixadftwentyfour + \let\musixadflargefont\musixadftwenty + \let\musixadfnorfont\musixadfsixteen + \let\musixadfsmallfont\musixadfthirteen + \let\musixadftinyfont\musixadfeleven + \else\ifnum\musicsize=\@xxiv + \let\musixadfLargefont\musixadftwentynine + \let\musixadflargefont\musixadftwentynine + \let\musixadfnorfont\musixadftwentyfour + \let\musixadfsmallfont\musixadftwenty + \let\musixadftinyfont\musixadfsixteen + \else\ifnum\musicsize=\@xxix + \let\musixadfLargefont\musixadftwentynine + \let\musixadflargefont\musixadftwentynine + \let\musixadfnorfont\musixadftwentynine + \let\musixadfsmallfont\musixadftwentyfour + \let\musixadftinyfont\musixadftwenty + \else + \musicsize\tw@nty + \let\musixadfLargefont\musixadftwentynine + \let\musixadflargefont\musixadftwentyfour + \let\musixadfnorfont\musixadftwenty + \let\musixadfsmallfont\musixadfsixteen + \let\musixadftinyfont\musixadfthirteen + \fi\fi\fi +}% +% +\let\set@Largenotesize@org=\set@Largenotesize\relax +\let\set@largenotesize@org=\set@largenotesize\relax +\let\set@normalnotesize@org=\set@normalnotesize\relax +\let\set@smallnotesize@org=\set@smallnotesize\relax +\let\set@tinynotesize@org=\set@tinynotesize\relax +% +\def\set@Largenotesize{% + \set@Largenotesize@org\let\musixadfont\musixadfLargefont}% +\def\set@largenotesize{% + \set@largenotesize@org\let\musixadfont\musixadflargefont}% +\def\set@normalnotesize{% + \set@normalnotesize@org\let\musixadfont\musixadfnorfont}% +\def\set@smallnotesize{% + \set@smallnotesize@org\let\musixadfont\musixadfsmallfont}% +\def\set@tinynotesize{% + \set@tinynotesize@org\let\musixadfont\musixadftinyfont}% +% +\def\musixadfchar{\musixadfont\char}% +% +\def\uacc@Char@adf#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@adf + \fi}% +% +\def\lacc@Char@adf#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@adf + \fi}% +\def\C@ChaR@adf{\musixadfont\char\n@iv}% +% +\def\@Char@adf#1{\zcharnote{#1}\C@ChaR@adf}% +% +% coda sign with serif +% +% ___ +% | +% /~|~\ +% |-+--+--+-| +% \_|_/ +% | +% ~~~ +% +%\def\scoda{\musixadfchar85\relax}% +\def\adfC@coda#1{\llap{\@Char@adf{#1}\kern\afterruleskip}}% +\def\scoda{\n@iv85\adfC@coda}% +\def\replacecoda{\let\coda=\scoda}% +% +% +% +% upright segno +% +%\def\upsegno{\musixadfchar86\relax}% +\def\upsegno{\n@iv86\@Char@adf}% +\def\replacesegno{\let\segno=\upsegno}% +% +% +% little swell ...something like <> +% +% lower +\def\llsw{\n@iv31\lacc@Char@adf} +% upper +\def\ulsw{\n@iv30\uacc@Char@adf}% +% +% +% a little larger sforzato +% +\def\uSfz{\n@iv\tw@nty \uacc@Char@adf} +\def\lSfz{\n@iv21\lacc@Char@adf} +\def\dSfz{\lSfz} +\def\replacesforzato{% + \let\usfz=\uSfz\relax + \let\lsfz=\lSfz\relax +}% +% +% +% v-breath +% +\def\zuBreath{\check@staff\raise\@ight\internote\rlap{\n@iv33\C@ChaR@adf}\fi}% +\def\cuBreath{\check@staff\adv@box{\raise\@ight\internote + \hbox\@to\noteskip{\hss\n@iv33\C@ChaR@adf\hss}}\fi}% +\def\zlBreath{\check@staff\raise0\internote\rlap{\n@iv34\C@ChaR@adf}\fi}% +\def\clBreath{\check@staff\adv@box{\raise0\internote + \hbox\@to\noteskip{\hss\n@iv34\C@ChaR@adf\hss}}\fi}% +% +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixbar.tex b/macros/musixtex/tex/musixbar.tex new file mode 100644 index 0000000000..5e748aae6d --- /dev/null +++ b/macros/musixtex/tex/musixbar.tex @@ -0,0 +1,148 @@ +%%%%%%%%%% Hiding/printing bar lines individually %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Here comes a bunch of rather general macros which enable printing or +% hiding barlines for each staff and inter-staff space individually: +% +% Mthimkhulu Molekwa + +\ifx\indivbarrules\undefined\else\endinput\fi + +\immediate\write16{MusiXBAR printing or hiding seperate bar lines 1.01\space<23 Februar 2000>}% + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +%\makeatletter + +\newdimen\barline@depth + +\def\rul@indiv#1{% + \n@loop + \Comp@High + \expandafter\ifx\csname s@b\romannumeral\noinstrum@nt\endcsname\relax + \multiply\barline@depth -1\relax + \advance\barline@depth\altitude + \else + \barline@depth=0pt\relax + \fi + {\expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 1% + \y@v=0pt\relax + \fi + \raise\altitude\rlap{\vrule\@depth\barline@depth\@width#1\@height\y@v}}% + \barline@depth\altitude + \advance\barline@depth\y@v + \repeat + \addspace#1} + +\def\rul@indiv@#1{\n@loop{\prul@indiv@#1}\repeat\addspace#1} + +\def\prul@indiv@#1{% + \y@v\interportee \C@Inter\advance\y@v-\stem@skip + \expandafter\ifx\csname s@b\romannumeral\noinstrum@nt\endcsname\relax + \multiply\barline@depth -1\relax + \advance\barline@depth\altitude + \else + \barline@depth=0pt\relax + \fi + {\expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 1% + \y@v=0pt\relax + \fi + \p@loop + \raise\altportee\rlap{% + \vrule\@depth\barline@depth\@width#1\@height\y@v}% + \count@portee + \repeat}% + \barline@depth\altitude + \advance\barline@depth\y@v} + +%== Required to use the following macros +\def\indivbarrules{% + \let\writ@rule\rul@indiv + \sepbarrule 1} + +\def\Indivbarrules{% + \let\writ@rule\rul@indiv@ + \sepbarrule 1} + +%== separates bar line of specified instrument from one of previous instrument +\def\sepbarrule#1{\expandafter\let\csname s@b\romannumeral#1\endcsname 1} + +%== connects bar line of specified instrument to one of previous instrument +\def\conbarrule#1{% + \if 1#1\else\expandafter\let\csname s@b\romannumeral#1\endcsname\relax\fi} + +%== hides bar line for specified instrument +\def\hidebarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname 1} + +%== shows bar line for specified instrument +\def\showbarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname\relax} + +%== separates barlines in multistaff instruments +\def\rul@sep@#1{\n@loop{\prul@sep#1}\repeat\addspace#1} + +\def\prul@sep#1{% + \y@v\interportee \C@Inter\advance\y@v-\stem@skip + \p@loop + \hbox{\raise\altportee\rlap{% + \vrule\@depth\hlthick\@width#1\@height\y@v}}% + \count@portee\repeat} + +\def\Sepbarrules{\let\writ@rule\rul@sep@ } + +%-\makeatother + +\catcode`\@=\catcodeat +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Here comes an example of how to use these macros + +%%%%% Pre-amble +\input musixtex +\input musixbar + +\instrumentnumber3 +\setmeter3{{\meterfrac{3}{4}}} +\setmeter2{{\meterfrac{2}{4}}} +\setmeter1{{\meterfrac{3}{8}}} +\nobarnumbers +\indivbarrules +\sepbarrule2 +\sepbarrule3 + +%%%%% Spacing +\beforeruleskip=0.5\afterruleskip +\interinstrument=4\Interligne + +%%%%% Macros +\let\ni\nextinstrument + +%%%%% Music +\linegoal2 +\startpiece\addspace\afterruleskip +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\hidebarrule3\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\bar +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\showbarrule3\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\hidebarrule3\bar +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\showbarrule3\bar +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\hidebarrule3\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\bar +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\showbarrule3\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\hidebarrule3\bar +\NOtes\pt f\qa f\ni\qa f\ni\qa f\en +\hidebarrule2\bar +\NOtes\multnoteskip{.333}\Tqbu fff\ni\qa f\ni\qa f\en +\showbarrule2\showbarrule3\stoppiece +\bye + diff --git a/macros/musixtex/tex/musixbbm.tex b/macros/musixtex/tex/musixbbm.tex new file mode 100644 index 0000000000..c3c2333002 --- /dev/null +++ b/macros/musixtex/tex/musixbbm.tex @@ -0,0 +1,69 @@ +% +% 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. +% +% +% musixbbm.tex : allocate registers and define macros for 256th beam +% +\immediate\write16{MusiXBBeaM T.115 <19 Nov 2010>}% +% +\ifx\undefined\ibbbbbbu \else \endinput \fi +% +% setup the maximum element numbers +\setmaxcclvibeams{6}% +% +% +% definitions for 256th beams +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +% +\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\ibbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctg \i@bbbbbbu} +\def\ibbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctg \i@bbbbbbl} + +\def\i@bbbbbbu#1#2{% + \ifnum\b@n=\z@ \i@bbbbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne + \C@ba\d@z\@ne \C@ba\e@z\@ne \C@ba\f@z\@ne \fi \n@bbbbbbu} +\def\i@bbbbbbl#1#2{% + \ifnum\b@n=\z@ \i@bbbbbl{#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 \C@ba\f@z\m@ne \fi \n@bbbbbbl} + +\def\nbbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctg \Dec@b\@ne\n@bbu + \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu \Dec@b\f@ur\n@bbbbbu + \Dec@b\fiv@\n@bbbbbbu} +\def\nbbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctg \Dec@b\@ne\n@bbl + \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl \Dec@b\f@ur\n@bbbbbl + \Dec@b\fiv@\n@bbbbbbl} + +\def\n@bbbbbbu{\C@nb\g@z\g@x\fiv@\qd@skip} +\def\n@bbbbbbl{\C@nb\g@z\g@x\fiv@\z@} + +\def\tbbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctg \t@bbbbbbu} +\def\tbbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctg \t@bbbbbbl} + +\def\t@bbbbbu{\n@v\fiv@ \C@b\t@bbbbbbu\n@bbbbbu\y@i\f@z \beam@pos\f@x \t@xbu} +\def\t@bbbbbl{\n@v\fiv@ \C@b\t@bbbbbbl\n@bbbbbl\y@i\f@z \beam@pos\f@x \t@xbl} + +\def\t@bbbbbbu{\n@v\si@ \C@b\empty\n@bbbbbu\y@i\g@z \beam@pos\g@x \t@xbu} +\def\t@bbbbbbl{\n@v\si@ \C@b\empty\n@bbbbbl\y@i\g@z \beam@pos\g@x \t@xbl} + +\def\Ibbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctg \I@bu\i@bbbbbbu} +\def\Ibbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctg \I@bl\i@bbbbbbl} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixblx.tex b/macros/musixtex/tex/musixblx.tex new file mode 100644 index 0000000000..d40de4cb68 --- /dev/null +++ b/macros/musixtex/tex/musixblx.tex @@ -0,0 +1,44 @@ +% +% 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. +% +% (Nicolas Brouard) + +\immediate\write16{MusiXBigLateX 0.36\space<1 March 1995>}% + +\ifx\undefined\largevaugment \else \endinput \fi + +\newenvironment{music}{\catcodesmusic\parskip0pt\resetlayout}{}% + +\newdimen\largevaugment \newdimen\largehaugment + +\newenvironment{largemusic}{\vfill\eject\catcodesmusic\parskip0pt + \resetlayout + \edef\theoldtextwidth{\the\textwidth}% + \edef\theoldtextheight{\the\textheight}% + \def\Fullwidth{185mm}\def\Fullheight{260mm}% + \largevaugment\Fullheight \advance\largevaugment-\theoldtextheight + \largehaugment\Fullwidth \advance\largehaugment-\theoldtextwidth + \divide\largevaugment2 \divide\largehaugment2 + \advance\voffset\largevaugment \advance\hoffset-\largehaugment + \xdef\thelargehoffset{\the\hoffset}% + \hsize\Fullwidth \textwidth\Fullwidth + + \bgroup\textwidth\Fullwidth\hsize\Fullwidth\vsize\Fullheight}% + {\egroup\advance\voffset.5\largevaugment + \clearpage\advance\voffset-.5\largevaugment} +\endinput diff --git a/macros/musixtex/tex/musixbm.tex b/macros/musixtex/tex/musixbm.tex new file mode 100644 index 0000000000..29147d8707 --- /dev/null +++ b/macros/musixtex/tex/musixbm.tex @@ -0,0 +1,25 @@ +% +% 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. +% +% +\immediate\write16{MusiXEXTra \space<7 June 2015>}% +% +% +% (nothing to do. - T.118 or later provide \slide and \raggedstoppiece by default.) +% +\endinput diff --git a/macros/musixtex/tex/musixcho.tex b/macros/musixtex/tex/musixcho.tex new file mode 100644 index 0000000000..55b5e482eb --- /dev/null +++ b/macros/musixtex/tex/musixcho.tex @@ -0,0 +1,68 @@ +% +% 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. +% +\immediate\write16{MusiXCHOir T.89\space<24 March 1998>}% + +\ifx\undefined\braceheight \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +\catcodesmusic + +% big parentheses for e.g. multiline text + +\newskip\braceheight \braceheight=4\Interligne\relax +\def\ChoirStrut{\vphantom{\^Wgjpqy}} + +\def\biglbrace{\let\@Ti\llap \let\@Tii\{\relax \C@br} +\def\bigrbrace{\let\@Ti\rlap \let\@Tii\}\relax \C@br} +\def\C@br{\C@tx{\@Ti{$\left\@Tii\vbox\@to\braceheight{}\right.\n@space$}\vss}} + +% multiline text + +\def\@kti{\kern\thr@@\Internote\strut} +\def\@kmi{\kernm\Internote\strut} + +\def\Dtx#1|#2*{\C@tx{\lrlap{\@kti#1\ChoirStrut}\lrlap{\@kti#2\ChoirStrut}\vss}} +\def\Drtx#1|#2*{\C@tx{\rlap{\@kmi#1\ChoirStrut}\rlap{\@kmi#2\ChoirStrut}\vss}} + +\def\Ttx#1|#2|#3*{\C@tx{\lrlap{\@kti#1\ChoirStrut}\lrlap{\@kti#2\ChoirStrut}\lrlap{\@kti#3\ChoirStrut}\vss}} +\def\Trtx#1|#2|#3*{\C@tx{\rlap{\@kmi#1\ChoirStrut}\rlap{\@kmi#2\ChoirStrut}\rlap{\@kmi#3\ChoirStrut}\vss}} + +\def\Qtx#1|#2|#3|#4*{\C@tx{\lrlap{\@kti#1\ChoirStrut}\lrlap{\@kti#2\ChoirStrut}% + \lrlap{\@kti#3\ChoirStrut}\lrlap{\@kti#4\ChoirStrut}\vss}} +\def\Qrtx#1|#2|#3|#4*{\C@tx{\rlap{\@kmi#1\ChoirStrut}\rlap{\@kmi#2\ChoirStrut}\rlap{\@kmi#3\ChoirStrut}% + \rlap{\@kmi#4\ChoirStrut}\vss}} + +\def\tx#1*{\C@tx{\lrlap{\@kti#1\ChoirStrut}\vss}} +\def\rtx#1*{\C@tx{\rlap{\@kmi#1\ChoirStrut}\vss}} + +% longation rule + +\newskip\@ihf +\def\thf{\getcurpos\advance\y@v-\@ihf \advance\y@v-\tw@\Interligne + \llap{\vrule\@width\y@v\@height\lthick\kern\Interligne}}% + +\def\ixhf#1{\setbox\ch@box\hbox{#1}\getcurpos \advance\y@v\h@lf\wd\ch@box + \advance\y@v\Interligne \global\@ihf\y@v \box\ch@box} + +\def\ihf#1{\setbox\ch@box\hbox{#1}\getcurpos \advance\y@v\wd\ch@box + \global\@ihf\y@v \box\ch@box} + +\endcatcodesmusic +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixcpt.tex b/macros/musixtex/tex/musixcpt.tex new file mode 100644 index 0000000000..90d9066465 --- /dev/null +++ b/macros/musixtex/tex/musixcpt.tex @@ -0,0 +1,826 @@ +% +% 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. +% +%%% for those who want compatibility, input it !after! musixtex and all +%%% other \input files, means: at very last + +\ifx\undefined\DIMin \else \endinput \fi + +\immediate\write16{MusiXComPaTible T.109\space<8 May 2018>}% + +\ifx\undefined\mxversion \errmessage{MusiXcpt input before MusiXTeX !}\fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +\catcodesmusic + +\voffset=-15.4mm +\parindent=10mm + +\def\z@suspend@autoflag{\ifx\auto@flag\empty + \fil@autolines\fi \let\auto@flag\empty} + + +\let\fil@autolines\empty +\let\auto@flag\empty + +\def\updatecontext{% + \T@bil \writ@newclefs\wbarno@x\Writ@newsigns + \Writ@meters\addspace\afterruleskip + \else\fil@autolines\let\auto@flag\@ne + \writ@newclefs\Writ@newsigns\z@suspend\@NewPage\fi} + +\def\changecontext{\n@wbar\updatecontext} +\def\zchangecontext{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip + \zn@wbar\updatecontext} + +\def\@breakpassInoauto{\def\T@bil{\getcurpos \ifdim\y@v<\h@lf\line@width}} +\def\ori@passIzbarre{\zn@wbar\fil@{z \the\barno}} + +\def\ori@passIendsection{\fil@{*\space\the\mulooseness}\mulooseness\z@} + +\def\@breakpassIauto{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinline}% + +\def\@xbarrepassIauto{\T@bil \else\advance\barsinlin@\m@ne \fi\@bar} +\let\@xbarrepassIIauto\barre + +\def\@zbarpassIauto{\T@bil \zn@wbar\else\zstoppiec@\@NewPage\fi} + +%!!! Attention: If you use \autolines, take care for the number of lines. +% If they exceed 127, trouble will be ahead. (adjust MAX_SECTIONS in +% musixflx.c or insert a \suspmorceau..\debutmorceau) !!! + +\def\autolines#1#2#3{% #1 nombre d'elemskip par mesure, +% #2 nombre de mesures par ligne, +% #3 nb lignes par page + \ifstartmuflex@done\else\startmuflex\fi + \global\maxbarsinline=#2\relax + \global\maxlinesinpage=#3\relax + \let\count@lines\count@lines@auto + \ifx\ragg@d\empty % ---> pass 1 + \message{/autolines pass I }% + \let\xbar=\@xbarrepassIauto + \let\zbar=\@zbarpassIauto + \let\@nds@ction=\empty + \def\fil@autolines{\fil@{a}}% + \let\barsinline=\barsinlin@ + \let\T@bil=\@breakpassIauto + \else %---> pass 2 + \message{/autolines pass II }% + \let\xbar=\@xbarrepassIIauto + \let\@nds@ction=\empty + \fi} + +\def\noautolines{\let\fil@autolines\empty + \ifstartmuflex@done\else\startmuflex\fi + \let\xbar\ori@xbarre % original X handling + \let\count@lines\count@lines@empty + \ifx\ragg@d\empty %---> pass 1 + \message{/noautolines pass I }% + \let\zbar\ori@zbarre % original X handling + \let\barsinline=\barsinline@ori + \let\T@bil\ori@T@bil + \let\@nds@ction=\ori@passIendsection + \else + \message{/noautolines pass II }% + \let\@nds@ction=\empty + \fi} + % + +\def\count@lines@auto{\global\advance\linesinpage\@ne + \ifnum\linesinpage<\maxlinesinpage + \else \eject \global\linesinpage\z@ \fi} +\def\count@lines@empty{\global\advance\linesinpage\@ne} +\let\count@lines\count@lines@empty + +\def\@NewPage{\count@lines \contpiece} +\def\@LeftRp{\stoppiec@\@NewPage\addspace{\h@lf\afterruleskip}% + \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip} + +\def\T@bil{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinlin@} +\def\ori@T@bil{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinlin@} + +\def\barre{\T@bil \@bar\else\stoppiec@\@NewPage\fi} + +\def\xbar{\@bar\global\advance\barsinpi@c@\m@ne } +\def\ori@xbarre{\@bar\global\advance\barsinpi@c@\m@ne } + +\def\zbar{\T@bil \zn@wbar\else\zstoppiece\@NewPage\fi} +\def\ori@zbarre{\T@bil \zn@wbar\else\zstoppiece\@NewPage\fi} + +\def\alaligne{\stoppiece\@NewPage} +\def\Suspmorceau{\Stoppiece\count@lines} +\def\suspmorceau{\stoppiece\count@lines} +\def\zalaligne{\zstoppiece\@NewPage} +\def\leftrepeat{\leftrepeat@II} +\def\leftrepeat@II{\T@bil \setleftrepeat\@bar\else\@LeftRp\fi} +\def\leftrightrepeat{\leftrightrepeat@II} +\def\leftrightrepeat@II{\T@bil \setleftrightrepeat\@bar + \else\setrightrepeat\@LeftRp\fi} + +\def\finrightrepeat{\setrightrepeat\stoppiec@} + + +\let\nbporteesi\n@pi +\let\nbporteesii\n@pii +\let\nbporteesiii\n@piii +\let\nbporteesiv\n@piv +\let\nbporteesv\n@pv +\let\nbporteesvi\n@pvi +\def\nbporteesvii{\n@pvii}% +\def\nbporteesviii{\n@pviii}% +\def\nbporteesix{\n@pvix}% + +\def\nbstaffsi{\n@pi}% +\def\nbstaffsii{\n@pii}% +\def\nbstaffsiii{\n@piii}% +\def\nbstaffsiv{\n@piv}% +\def\nbstaffsv{\n@pv}% +\def\nbstaffsvi{\n@pvi}% +\def\nbstaffsvii{\n@pvii}% +\def\nbstaffsviii{\n@pviii}% +\def\nbstaffsix{\n@pvix}% + +\def\resetlayout{\nullthick\f@ur\Interligne \let\interfacteur\nin@ + \stafftopmarg\thr@@\Interligne \staffbotmarg\thr@@\Interligne + \let\stafflinesnbi\fiv@ \let\stafflinesnbii\fiv@ \let\stafflinesnbiii\fiv@ + \let\stafflinesnbiv\fiv@ \let\stafflinesnbv\fiv@ \let\stafflinesnbvi\fiv@ + \let\clefdesoli\trebleclef \let\clefdesolii\trebleclef + \let\clefdesoliii\trebleclef \let\clefdesoliv\trebleclef + \let\clefdesolv\trebleclef \let\clefdesolvi\trebleclef + \let\clefduti\altoclef \let\clefdutii\altoclef + \let\clefdutiii\altoclef \let\clefdutiv\altoclef + \let\clefdutv\altoclef \let\clefdutvi\altoclef + \let\clefdefai\bassclef \let\clefdefaii\bassclef + \let\clefdefaiii\bassclef \let\clefdefaiv\bassclef + \let\clefdefav\bassclef \let\clefdefavi\bassclef + \elemskip\f@ur\Internote} + +% These definition depends on the assumption, that \elemskip is equal 10pt + +\def\hqsk{\off{.3\@l@mskip}} +\def\qsk{\hqsk\hqsk} + +% ============================ +% will change + +\chardef\@li=51 +\chardef\@liii=53 +\newif\ifcautionacc + +\def\@acc#1{\check@staff + \inhgetn@i#1\relax\@BigAcc + \fi} +\def\@BigAcc{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} + +\def\bigfl{\n@v\@l \@acc} +\def\bigdfl{\n@v\@li \@acc} +\def\bigsh{\n@v\@lii \@acc} +\def\bigdsh{\n@v\@liii \@acc} +\def\bigna{\n@v\@liv \@acc} + +\def\@smallacc#1{\check@staff + \inhgetn@i#1\relax\n@iv\fiv@ \@SmallACC + \fi} +\def\@SmallACC{\check@staff + \pl@base\raise\y@i\llap{\@SmallAcc\kern\accshift}\fi} +\def\@SmallAcc{\check@staff + \ifcautionacc\C@ChaR \fi \musixchar\n@v + \ifcautionacc\kern.3\qn@width \fi + \fi\global\cautionaccfalse} + +\def\smallna{\n@v94\@smallacc} +\def\smallfl{\n@v90\@smallacc} +\def\smallsh{\n@v92\@smallacc} +\def\smalldsh{\n@v93\@smallacc} +\def\smalldfl#1{\check@staff + \n@v91\inhgetn@i#1\relax\n@iv\si@ \@SmallACC + \fi} + +\def\csh{\cautionacctrue\smallsh} +\def\cdsh{\cautionacctrue\smalldsh} +\def\cna{\cautionacctrue\smallna} +\def\cfl{\cautionacctrue\smallfl} +\def\cdfl{\cautionacctrue\smalldfl} + +\def\@UpperAcc#1{\inhgetn@i#1\relax\@UpAcc} +\def\@UpAcc{\advance\n@i\thr@@ \zchar\n@i{\kern\qu@rt\qn@width\@SmallAcc}} + +\def\upperna{\n@v94\@UpperAcc} +\def\upperfl{\n@v90\@UpperAcc} +\def\uppersh{\n@v92\@UpperAcc} + +% analysis of accidentals within collective note coding + +\def\absoluteaccidentals{% + \let\Xna\na \let\Xsh\sh \let\Xfl\fl \let\Xdsh\dsh \let\Xdfl\dfl} +\absoluteaccidentals + +\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} + +\def\cNa{\cautionacctrue\smallNa} +\def\cFl{\cautionacctrue\smallFl} +\def\cSh{\cautionacctrue\smallSh} +\def\cdFl{\cautionacctrue\smalldFl} +\def\cdSh{\cautionacctrue\smalldSh} + +\def\lNa#1{\shiftaccwidth{\Na{#1}}} +\def\lFl#1{\shiftaccwidth{\Fl{#1}}} +\def\lSh#1{\shiftaccwidth{\Sh{#1}}} +\def\ldFl#1{\shiftaccwidth{\dFl{#1}}} +\def\ldSh#1{\shiftaccwidth{\dSh{#1}}} +\def\shiftaccwidth{\loffset\smallvalue} + +\def\sign@diff#1\relax{\getn@i#1\relax\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 \n@iv\fiv@} + +\def\C@aacc{\check@staff + \advance\n@v\n@vi \@Ti + \fi } + +\def\@Flat#1{\sign@diff#1\relax + \ifcase\n@ii \n@v\@liv \or\n@v\@l \or\n@v\@li \fi \C@aacc} + +\def\set@bigaccid{\n@vi\z@ \let\@Ti\@BigAcc} +\def\set@smallaccid{\n@vi\@xl \let\@Ti\@SmallACC} +\def\set@UpAcc{\n@vi\@xl \let\@Ti\@UpAcc} + +\def\bigFl{\set@bigaccid\@Flat} +\def\smallFl{\set@smallaccid\@Flat} +\def\upperFl{\set@UpAcc\@Flat} + +\def\@Natural#1{\sign@diff#1\relax + \ifcase\n@ii \n@v\@lii \or\n@v\@liv \or\n@v\@l \fi \C@aacc} + +\def\bigNa{\set@bigaccid\@Natural} +\def\smallNa{\set@smallaccid\@Natural} +\def\upperNa{\set@UpAcc\@Natural} + +\def\@Sharp#1{\sign@diff#1\relax + \ifcase\n@ii \n@v\@liii \or\n@v\@lii \or\n@v\@liv \fi \C@aacc} + +\def\bigSh{\set@bigaccid\@Sharp} +\def\smallSh{\set@smallaccid\@Sharp} +\def\upperSh{\set@UpAcc\@Sharp} + +\def\@nod{Can't double } + +\def\@dSharp#1{\sign@diff#1\relax + \ifcase\n@ii \message{\@nod sharpen !\noexpand\dSh #1}% + \or\n@v\@liii \C@aacc\or\n@v\@lii \C@aacc \fi} + +\def\bigdSh{\set@bigaccid\@dSharp} +\def\smalldSh{\set@smallaccid\@dSharp} +%\def\upperdSh{\set@UpAcc\@dSharp} + +\def\@dFlat#1{\sign@diff#1\relax + \ifcase\n@ii \n@v\@l \C@aacc\or\n@v\@li \C@aacc + \or\message{\@nod flatten !\noexpand\dFl #1}\fi} + +\def\bigdFl{\set@bigaccid\@dFlat} +\def\smalldFl{\n@vi\@xl \n@iv\si@ \let\@Ti\@SmallACC \@dFlat} +%\def\upperdFl{\set@UpAcc\@dFlat} + +\def\relativeaccidentals{% + \let\Xna\Na \let\Xsh\Sh \let\Xfl\Fl \let\Xdsh\dSh \let\Xdfl\dFl} + +%\def\writ@names{\n@loop +% \setbox\n@otebox\llap{\vbox{\hbox\@to\parindent{% +% \hss\csname instrument\romannumeral\noinstrum@nt\endcsname\hss}}~~}% +% \altportee\altitude \Comp@High\advance\y@v-\ht\n@otebox +% \advance\altportee\h@lf\y@v \raise\altportee\box\n@otebox \repeat} +%\let\Writ@names\writ@names + +%\let\instrumenti\empty \let\instrumentii\empty \let\instrumentiii\empty +%\let\instrumentiv\empty \let\instrumentv\empty \let\instrumentvi\empty + +% ============================ + +\def\dimin{\decrescendo{4\qn@width}} +\def\Dimin{\decrescendo{8\qn@width}} +\def\DImin{\decrescendo{12\qn@width}} +\def\DIMin{\decrescendo{16\qn@width}} +\def\DIMIn{\decrescendo{24\qn@width}} +\def\DIMIN{\decrescendo{36\qn@width}} +\def\cresc{\crescendo{4\qn@width}} +\def\Cresc{\crescendo{8\qn@width}} +\def\CResc{\crescendo{12\qn@width}} +\def\CREsc{\crescendo{16\qn@width}} +\def\CRESc{\crescendo{24\qn@width}} +\def\CRESC{\crescendo{36\qn@width}} + +\let\interligne\Interligne +\def\debutmorceau{\ifstartmuflex@done\else\startmuflex\fi +\startpiece +\let\debutmorceau\startpiece} +\let\finmorceau\Stoppiece +\let\zfinmorceau\zstoppiece +\let\finpartition\stoppiece +\let\debutextrait\startextract +\let\finextrait\endextract +\let\zfinextrait\zendextract +\let\reprmorceau\contpiece +\let\lreprmorceau\contpiece +\def\preprmorceau{\eject \global\linesinpage\z@ \contpiece} +\def\resetsignatures{\generalsignature0\savesignature} +\def\alapage{\stoppiece\eject \global\linesinpage\z@ \contpiece} +\def\zalapage{\zstoppiece\eject \global\linesinpage\z@ \contpiece} +\def\pchangecontext{\n@wbar\writ@newclefs\writ@newsigns + \z@suspend \eject \global\linesinpage\z@ \contpiece} +\def\lchangecontext{\n@wbar\writ@newclefs\writ@newsigns + \z@suspend \count@lines \contpiece} +\let\xbeambarre\bar +\def\xbarre{\xbar} +\def\zbarre{\zbar} +\let\temps\empty +\let\zglue\empty +\let\zglu\empty +\let\doublebarre\doublebar + +\def\leftrightrepeatsymbol{\C@rep\l@eftrightrepeat} +\def\leftrepeatsymbol{\C@rep\l@eftrepeat} +\def\rightrepeatsymbol{\C@rep\r@ightrepeat} +\def\C@rep#1{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip + #1\widthtyp@\z@ \t@rmskip\addspace\afterruleskip} + +%\let\suspmorceau\stoppiece +%\let\Suspmorceau\Stoppiece +\let\computewidths\empty +\let\computespecifics\empty +\let\zsuspmorceau\zstoppiece +\let\signaturegenerale\generalsignature +\let\pointdorgue\fermataup +\let\pointdurgue\fermatadown +\let\zbv\zbreve +\let\zsb\zmaxima +\let\ha\hu +\let\resetfacteurs\resetlayout +\let\savesignature\empty +\let\savemeter\empty +\let\savemeters\empty +\let\saveclefs\empty +%%%%%%%%%%%%%%%%%%%%%%%%%% +\let\ITenu\istieu +\let\ITenl\istied +%%%%%%%%%%%%%%%%%% +\let\ilegu\isluru +\let\ilegl\islurd +\let\Ilegu\isluru +\let\Ilegl\islurd +%\let\tleg\tslur +%\def\Tleg#1{\roff{\ttie#1}} +\let\Invertslur\invertslur +\let\qh\qb +\let\qhp\qbp +\let\qhpp\qbpp +\let\zqh\zqb +\let\zqhp\zqbp +\let\zqhpp\zqbpp +\let\hh\hb +\let\soupir\qp +\let\dsoupir\ds +\let\demisoupir\ds +\let\qsoupir\qs +\let\quartsoupir\qs +\let\hsoupir\hs +\let\huitsoupir\hs +\let\seizsoupir\qqs +\let\Pince\Shake +\let\pince\shake +\let\Lpince\Shakel +\let\Pincesw\Shakesw +\let\Pincene\Shakene +\let\Pincenw\Shakenw +\let\mordant\mordent +\let\nblines\z@ +\let\wd@skip\wn@width +\let\musicnfont\musixfont + +\let\clefdesolsymbol\trebleclef +\let\clefdefasymbol\altoclef +\let\clefdutsymbol\bassclef +\let\gclefdut\gregorianCclef +\let\drumclefsymbol\drumclef +\let\smallclefdesol\smalltrebleclef +\let\smallclefdefa\smallaltoclef +\let\smallclefdut\smallbassclef + +\let\cmbxmicro\sevenbf +\let\cmbxtiny\eightbf +\let\cmbxsmall\tenbf +\let\cmbx\twelvebf +\let\cmbxbig\bigfont +\let\moyen\bigfont +\let\gros\Bigfont +\let\enorme\BIGfont + +\def\setprimavolta{\setvolta1} +\def\setsecondavolta{\setvolta2} + +\def\advancebottom#1{} +\newif\ifraggedlines +\newcount\linesinpage +\newcount\barsinline@ori +\let\barsinline\barsinline@ori +\newcount\maxbarsinline +\newcount\maxlinesinpage \maxlinesinpage\maxdimen +\newskip\zglueskip +\newskip\tempsskip + +%%% definitions for holding up compatibility, not supported in musixtex + +\let\endinstrument\@ndstaff +\def\huslur#1#2{\errmessage{No more need for \noexpand\huslur!}} +\def\hdslur#1#2{\errmessage{No more need for \noexpand\hdslur!}} +\def\liftslur#1#2{\errmessage{\noexpand\liftslur is not supported in MusiXTeX}} + +\def\expause#1{\charnote{#1}{\musicnorfont\char 11\hss}} +\def\zexpause#1{\zcharnote{#1}{\musicnorfont\char 11\hss}} +\def\exhpause#1{\charnote{#1}{\musicnorfont\char 10\hss}} +\def\zexhpause#1{\zcharnote{#1}{\musicnorfont\char 10\hss}} + +\def\vdlthick{\vrule depth \hlthick} +\let\resettens\empty +\let\resetstem\resetst@m +\let\setstem\setst@m +\let\resetlegs\empty +\let\savepenalties\empty +\let\currenthyphenpenalty\empty +\let\setnohyphenpenalty\empty +\let\sethyphenpenalty\empty +\let\setnormalhyphen\empty +\let\glueaftersymbol\empty +\def\zgluearule{\addspace\afterruleskip}% +\let\gluearule\zgluearule +\let\ygluearule\zgluearule +\let\Writesignatures\writ@signs +\let\changecontexte\changecontext +\let\Changecontexte\Changecontext +\let\Changeclefs\changeclefs +\let\Changeclef\Changeclefs +\def\shortstems{\stemlength4}% +\def\normalstems{\stemlength{4.66}}% +\normalstems + +\def\phpause{\hbox to \noteskip{\vrule width + 1.2\qn@width height \internote\hss}}% +%\def\pause{\hbox{\raise 5\internote\phpause}}% +%\def\hpause{\hbox{\raise 4\internote\phpause}}% +\let\zha\zhu +\def\minternote{-\internote}% +\def\ffff{{\ppff {f}\kern -0.1ex{f}\kern -0.1ex{f}\kern -0.1ex{f}}} +\def\testseq{}% + +\def\rtenl#1#2{\roff{\islurd{#1}{#2}}} +\def\rtenu#1#2{\roff{\isluru{#1}{#2}}} + +\def\diamg{\ynq} +\def\diamw{\dnq} + +\def\zdiamg{\yznq} +\def\zdiamw{\dznq} + +\def\carrg{\squ} +\def\zcarrg{\zsqu} +\def\carpg{\lsqu} +\def\zcarpg{\zlsqu} +\def\carqg{\rsqu} +\def\zcarqg{\zrsqu} + +\def\yu{\yqu} +\def\yup{\yqup} +\def\yupp{\yqupp} +\def\yuppp{\yquppp} +\def\yl{\yql} +\def\ylp{\yqlp} +\def\ylpp{\yqlpp} +\def\ylppp{\yqlppp} + +\def\yh{\yqb} +\def\yb{\yqb} + +\def\zy{\yzq} +\def\zyp{\yzqp} +\def\zypp{\yzqpp} +\def\zyppp{\yzqppp} + +\def\du{\dqu} +\def\dup{\dqup} +\def\dupp{\dqupp} +\def\duppp{\dquppp} + +\def\dl{\dql} +\def\dlp{\dqlp} +\def\dlpp{\dqlpp} +\def\dlppp{\dqlppp} + +\def\dh{\dqb} +\def\db{\dqb} + +\def\zd{\dzq} +\def\zdp{\dzqp} +\def\zdpp{\dzqpp} +\def\zdppp{\dzqppp} + +\def\xu{\xqu} +\def\xup{\x@symbol\@qup} +\def\xupp{\x@symbol\@qupp} +\def\xl{\xql} +\def\xlp{\x@symbol\@qlp} +\def\xlpp{\x@symbol\@qlpp} + +\let\xb\xqb +\let\xh\xqb + +\def\zx{\xzq} +\def\zxp{\x@symbol\@zqp} +\def\zxpp{\x@symbol\@zqpp} + +\def\xcccu{\x@symbol\@cccu} +\def\xccccu{\x@symbol\@ccccu} +\def\xcccl{\x@symbol\@cccl} +\def\xccccl{\x@symbol\@ccccl} + +\def\xclp{\x@symbol\@clp} +\def\xcup{\x@symbol\@cup} +\def\xclpp{\x@symbol\@clpp} +\def\xcupp{\x@symbol\@cupp} + +\def\oxu{\oxqu} +\def\oxup{\ox@symbol\@qup} +\def\oxupp{\ox@symbol\@qupp} +\def\oxl{\oxql} +\def\oxlp{\ox@symbol\@qlp} +\def\oxlpp{\ox@symbol\@qlpp} + +\def\oxb\oxqb +\let\oxh\oxqb + +\def\ozx{\oxzq} +\def\ozxp{\ox@symbol\@zqp} +\def\ozxpp{\ox@symbol\@zqpp} + +\def\oxcccu{\ox@symbol\@cccu} +\def\oxccccu{\ox@symbol\@ccccu} +\def\oxcccl{\ox@symbol\@cccl} +\def\oxccccl{\ox@symbol\@ccccl} + +\def\oxclp{\ox@symbol\@clp} +\def\oxcup{\ox@symbol\@cup} +\def\oxclpp{\ox@symbol\@clpp} +\def\oxcupp{\ox@symbol\@cupp} + +\def\ku{\kqu} +\def\kup{\k@symbol\@qup} +\def\kupp{\k@symbol\@qupp} +\def\kl{\kql} +\def\klp{\k@symbol\@qlp} +\def\klpp{\k@symbol\@qlpp} + +\let\kb\kqb +\let\kh\kqb + +\def\zk{\kzq} +\def\zkp{\k@symbol\@zqp} +\def\zkpp{\k@symbol\@zqpp} + +\def\kcccu{\k@symbol\@cccu} +\def\kccccu{\k@symbol\@ccccu} +\def\kcccl{\k@symbol\@cccl} +\def\kccccl{\k@symbol\@ccccl} + +\def\kclp{\k@symbol\@clp} +\def\kcup{\k@symbol\@cup} +\def\kclpp{\k@symbol\@clpp} +\def\kcupp{\k@symbol\@cupp} + +%%% text, lyrics + +\def\midtwotext{\let\@Ti\hss \let\@Tii\hss \C@midcpt} +\def\rmidtwotext{\let\@Ti\empty \let\@Tii\hss \C@midcpt} +\def\zmidtwotext{\zmidstaff} +\def\lmidtwotext{\let\@Ti\hss \let\@Tii\empty \C@midcpt} + +\def\C@midcpt#1{\check@staff + \y@v\interportee \advance\y@v\f@ur\Interligne \divide\y@v\tw@ + \raise\y@v\uplap{\hbox\@to\noteskip{\@Ti\strut#1\@Tii}\vss}% + \advance\locx@skip\noteskip + \fi} + +% for what ? + +\def\sforz#1{{\advance\transpose by -2\usf{#1}}} +\def\pz#1{{\advance\transpose by -2\upz{#1}}} +\def\ppz{\uppz} +\def\st#1{{\advance\transpose by -2\ust{#1}}} + +% octlines + +\def\barfill{\leaders\hbox{ --}\hfill}% +\def\octnvrule{\vrule width \z@ height 3\p@ depth 3\p@}% +\def\octvrule{\vrule width \lthick height 3\p@ depth 3\p@}% +\def\octsup#1#2{\zcharnote{#1}{\hbox to #2\noteskip +{\llap{\rm 8}\barfill\octnvrule}}}% +\def\Octsup#1#2{\zcharnote{#1}{\hbox to #2{\rm 8\barfill\octnvrule}}}% + %\check + %\def\octfin#1#2{\zcharnote{#1}{\hbox to #2\noteskip{\llap{\rm 8}\barfill + %--\octvrule}}}% + \let\octfin\octfinup +\def\Octfin#1#2{\zcharnote{#1}{\hbox to #2{\rm 8\barfill +--\octvrule}}}% +\def\octline#1{\zcharnote{#1}{\hbox to \line@width{\llap{\rm 8}\barfill +\octnvrule\hskip 12\Internote}}}% +\def\Octline#1{\zcharnote{#1}{\hbox to \line@width{\rm 8\barfill +\octnvrule\hskip 8\Internote}}}% + %\check + +\def\octlineup{\n@v\@xxiii\C@ol} +\def\octlinedown{\n@v\@xxv \C@ol} +\def\C@ol#1{\zcharnote{#1}{\getcurpos\y@eol\advance\y@-\y@v + \hbox\@to\y@{\octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill}}} + +% now different meaning !!! + +\def\trilleC#1{\hbox to #1{\leaders\hbox{\musixchar69}\hfill}}% +\let\trille\trilleC +\def\TrilleC#1{\hbox to #1{\it tr\leaders\hbox{\musixchar69}\hfill}}% +\let\Trille\TrilleC + +\def\ntrille#1#2{\zcharnote{#1}{\trille{#2\elemskip}}}% +\def\nTrille#1#2{\zcharnote{#1}{\Trille{#2\elemskip}}}% +\def\xtrille#1#2{\zcharnote{#1}{\trille{#2}}}% +\def\xTrille#1#2{\zcharnote{#1}{\Trille{#2}}}% + +% finding which class of fonts is normally used (cmxxx, dmxxx, dcxxx,...) + +\def\@wsa#1#2+{#1} +\def\@wsb#1#2#3+{#2} +\rm +\edef\fonthdg{\expandafter\@wsa\fontname\the\font+} +\edef\fonthdge{\expandafter\@wsb\fontname\the\font+} + +% new coda is centered above a barrule + +\def\coda{\n@iv85\@Char} + +% special wish + +\let\octline\octlineup + +% old spacings + +\def\normal{\elemskip=4\Internote \def\scalenoteskip{1.00}% + \def\notes{\vnotes1.0\elemskip}% double croches + \def\notesp{\vnotes1.18\elemskip}% double croches + \def\Notes{\vnotes1.4\elemskip}% croches + \def\Notesp{\vnotes1.66\elemskip}% croches + \def\NOtes{\vnotes2.0\elemskip}% croches pointees + \def\NOtesp{\vnotes2.36\elemskip}% croches pointees + \def\NOTes{\vnotes2.8\elemskip}% noires + \def\NOTesp{\vnotes3.32\elemskip}% noires + \def\NOTEs{\vnotes4.0\elemskip}% + \def\NOTEsp{\vnotes4.72\elemskip}% + \def\NOTES{\vnotes5.6\elemskip}} + +% \large could cause trouble, if user changes \scalenoteskip on his own, +% but this is *HIS* problem + +\ifx\large\undefined \def\large{\normal\def\scalenoteskip{1.2}}\fi + +\def\etroit{\normal + \def\Notes{\vnotes1.3\elemskip}% + \def\NOtes{\vnotes1.8\elemskip}% + \def\NOTes{\vnotes2.6\elemskip}% + \def\NOTEs{\vnotes3.6\elemskip}% + \def\NOTES{\vnotes5.2\elemskip}} + +% correct the shifting of arpeggio to musictex's appearance, +% a little bit tricky, but works + +\let\arpeggio@X\arpeggio +\def\arpeggio#1#2{\roffset{.2}{\arpeggio@X{#1}{#2}}} +\def\larpeggio#1#2{\loffset{.6}{\arpeggio@X{#1}{#2}}} % .6=\smallvalue - 0.2 + +% correct (nearly) the distance between note and accidental + +\accshift=-.1\qn@width + +% 'translate' old metertoks (works only if they are used as +% \metertoksi={...}, not for \metertoksi{...} + +\def\metertoksi#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@ti={#2}} +\def\metertoksii#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@tii={#2}} +\def\metertoksiii#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@tiii={#2}} +\def\metertoksiv#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@tiv={#2}} +\def\metertoksv#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@tv={#2}} +\def\metertoksvi#1#2{\if =#1\else\C@warn \fi + \let\Writ@meters\writ@meters \m@tvi={#2}} + +\def\C@warn{\errmessage{You MUST use '=' behind \noexpand\metertoks}\end} + +\let\signi\a@si +\let\signii\a@sii +\let\signiii\a@siii +\let\signiv\a@siv +\let\signv\a@sv +\let\signvi\a@svi + +\let\cleftoksi\a@ci +\let\cleftoksii\a@cii +\let\cleftoksiii\a@ciii +\let\cleftoksiv\a@civ +\let\cleftoksv\a@cv +\let\cleftoksvi\a@cvi + +% to be used to make heavy bars at staff left + +\newskip\nullthick +\let\lowersonginstrum\maxdimen +\let\uppersonginstrum\z@ +\newdimen\Interportee % distance between staffs of the same instrument (excl) + +\def\xgetn@i#1\relax{\n@viii\z@ \n@i\maxdimen % par defaut + \edef\t@ruc{\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\Xna \C@GET \fi + \if *\t@ruc \sk \C@Get \fi + \if .\t@ruc \let\@TI\pt \C@GET \fi + \if >\t@ruc \let\@TI\Xdsh \C@GET \fi + \if <\t@ruc \let\@TI\Xdfl \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\Xsh \C@GET \fi + \if _\t@ruc \let\@TI\Xfl \C@GET \fi + \fi\alt@suite + \fi} + +% MusicTeX's settings + +\afterruleskip=10pt % plus glue +\beforeruleskip=2pt % plus glue +\nostemcut + +\let\nbinstruments\maxinstruments +\normalnotesize +\normal % to get \notes correctly defined +\resetlayout +\let\nbinstruments\@ne + +\def\breath{\errmessage{\noexpand\breath\space not implemented in MusiXTeX, + use \noexpand\zbreath\space or \noexpand\cbreath!}} + +\endcatcodesmusic +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixcrd.tex b/macros/musixtex/tex/musixcrd.tex new file mode 100644 index 0000000000..2701d104ee --- /dev/null +++ b/macros/musixtex/tex/musixcrd.tex @@ -0,0 +1,272 @@ +%% +%% This is file `musixcrd.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% musixcrd.dtx +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from musixcrd.tex. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file musixcrd.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% musixcrd - typsetting chord symbols with %% +%% musixtex %% +%% main source file contains code, doc, and examples %% +%% $Id: musixcrd.dtx,v 1.7 2004/11/02 13:13:41 hennig Exp $ %% +%% copyright 2004 , Robert Hennig %% +%% this code is licensed in terms of the %% +%% GNU Public License %% +%% %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ifx\makeatletter\undefined\def\makeatletter{\catcode`\@=11\relax}\fi +\ifx\makeatother\undefined\def\makeatother{\catcode`\@=12\relax}\fi + +\makeatletter% ^^A allows to use @ as ordinary letter +\def\crddefaultheight{10} +\def\crdtranspose{0} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\crd@append#1\to#2{% + \toks0=\expandafter{#1}\toks2=\expandafter{#2}% + \edef#2{\the\toks2 \the\toks0}} +\def\crd@prepend#1\by#2{% + \toks0=\expandafter{#1}\toks2=\expandafter{#2}% + \edef#1{\the\toks2 \the\toks0}} +\def\crd@movetoken#1\to#2{% + \ifx#1\empty\else\expandafter\crd@moveoff#1\crd@moveoff#1#2\fi}% +\def\crd@moveoff#1#2\crd@moveoff#3#4{\def#3{#2}\crd@prepend#4\by#1} +\newif\ifcrd@parsematched% true if parse matched +\newcount\crd@parsedepth% internal register + +\def\crd@parse#1\for#2{% parse tokens #1 for occurence of items of table #2 + \crd@parsedepth=1 % default if not defined + \expandafter\ifx\csname#2depth\endcsname\relax\else% + \crd@parsedepth=\csname#2depth\endcsname% + \fi% + \def\stack{}%\def\crd@parseresult{} + \crd@parsematchedfalse% initialisation + \crd@parser#1\for#2% call the recursive part +} +\def\crd@parser#1\for#2{% recursive part of parser + \ifx#1\empty\else% is list filled ? + \ifnum\crd@parsedepth>0 % and do we have to read more chars into stack + \advance\crd@parsedepth by-1 % + \crd@movetoken#1\to\stack% + \crd@parser#1\for#2% recursive call + \ifcrd@parsematched\else% if still not matched + \expandafter\ifx\csname#2\stack\endcsname\relax% does item match + \crd@movetoken\stack\to#1% no match, put char back to source + \else% match + \csname#2\stack\endcsname% + \crd@parsematchedtrue% signal success + \fi% + \fi% + \fi% + \fi% +} +\newcount\crd@vshift% +\newcount\crd@hshift% +\def\crd@number{crd@number}% +\def\crd@numberdepth{2}% +\expandafter\def\csname\crd@number0\endcsname{\crd@numberval=0 }% +\expandafter\def\csname\crd@number1\endcsname{\crd@numberval=1 }% +\expandafter\def\csname\crd@number2\endcsname{\crd@numberval=2 }% +\expandafter\def\csname\crd@number3\endcsname{\crd@numberval=3 }% +\expandafter\def\csname\crd@number4\endcsname{\crd@numberval=4 }% +\expandafter\def\csname\crd@number5\endcsname{\crd@numberval=5 }% +\expandafter\def\csname\crd@number6\endcsname{\crd@numberval=6 }% +\expandafter\def\csname\crd@number7\endcsname{\crd@numberval=7 }% +\expandafter\def\csname\crd@number8\endcsname{\crd@numberval=8 }% +\expandafter\def\csname\crd@number9\endcsname{\crd@numberval=9 }% +\expandafter\def\csname\crd@number1-\endcsname{\crd@numberval=-1 }% +\expandafter\def\csname\crd@number2-\endcsname{\crd@numberval=-2 }% +\expandafter\def\csname\crd@number3-\endcsname{\crd@numberval=-3 }% +\expandafter\def\csname\crd@number4-\endcsname{\crd@numberval=-4 }% +\expandafter\def\csname\crd@number5-\endcsname{\crd@numberval=-5 }% +\expandafter\def\csname\crd@number6-\endcsname{\crd@numberval=-6 }% +\expandafter\def\csname\crd@number7-\endcsname{\crd@numberval=-7 }% +\expandafter\def\csname\crd@number8-\endcsname{\crd@numberval=-8 }% +\expandafter\def\csname\crd@number9-\endcsname{\crd@numberval=-9 }% +\newcount\crd@quint% register used to represent notes in the circle of +\def\crd@quintval{crd@quintval}% +\def\crd@quintvalA{\crd@quint=3 }% A +\def\crd@quintvalB{\crd@quint=5 }% B +\def\crd@quintvalC{\crd@quint=0 }% C +\def\crd@quintvalD{\crd@quint=2 }% D +\def\crd@quintvalE{\crd@quint=4 }% E +\def\crd@quintvalF{\crd@quint=-1 }% F +\def\crd@quintvalG{\crd@quint=1 }% G +\def\crd@quintmod{crd@quintmod} +\def\crd@quintmoddepth{2} +\def\crd@quintmods{\advance\crd@quint by7 }% sharp +\def\crd@quintmodf{\advance\crd@quint by-7 }% flat +\def\crd@quintmodsd{\advance\crd@quint by14 }% double sharp +\def\crd@quintmodfd{\advance\crd@quint by-14 }% double flat +\def\crd@note{crd@note} +\expandafter\def\csname\crd@note3\endcsname{A} +\expandafter\def\csname\crd@note5\endcsname{B} +\expandafter\def\csname\crd@note0\endcsname{C} +\expandafter\def\csname\crd@note2\endcsname{D} +\expandafter\def\csname\crd@note4\endcsname{E} +\expandafter\def\csname\crd@note-1\endcsname{F} +\expandafter\def\csname\crd@note1\endcsname{G} +\def\crd@notelow{-1} % lowest quint without accidental +\def\crd@notehigh{5} % highest quint without accidental +\def\crd@sharp{\sharp} +\def\crd@flat{\flat} +\def\crd@doublesharp{\sharp\sharp} +\def\crd@doubleflat{\flat\flat} +\def\crd@parsenote#1#2{% parse input results: #1 + \def#1{}\def#2{}% + \crd@parse\crd@input\for\crd@quintval% + \ifcrd@parsematched% we got an valid note + \crd@parse\crd@input\for\crd@quintmod% + \advance\crd@quint by\crdtranspose \relax% transposition, space is needed! + \crd@enharmonic% + \ifnum\crd@quint>\crd@notehigh % sharps ? + \advance\crd@quint by-7 % + \ifnum\crd@quint>\crd@notehigh % double sharp ? + \advance\crd@quint by-7 % + \ifnum\crd@quint>\crd@notehigh % too much sharps ! + \relax ERROR:too much sharps% + \else\edef#2{\crd@doublesharp}\fi% + \else\edef#2{\crd@sharp}\fi% + \fi% + \ifnum\crd@quint<\crd@notelow % flats ? + \advance\crd@quint by7 % + \ifnum\crd@quint<\crd@notelow % double flat ? + \advance\crd@quint by7 % + \ifnum\crd@quint<\crd@notelow % too much flats ! + \relax ERROR:too much flats% + \else\edef#2{\crd@doubleflat}\fi% + \else\edef#2{\crd@flat}\fi% + \fi% + \expandafter\ifx\csname\crd@note\number\crd@quint\endcsname\relax% + ERROR:notename for (\number\crd@quint) is not defined. + \fi% + \edef#1{\csname\crd@note\number\crd@quint\endcsname}% set note + \fi% +} +\def\crd@enharmonic{}% +\def\crd@qualinit{% + \def\crd@lo{}% lower extensions + \def\crd@up{}% upper extensioins + \def\crd@alt{}% alterations +} +\def\crd@qual{crd@qual}% +\def\crd@qualdepth{2} +\def\crd@qualm{\crd@append{\crd@smalltype m}\to\crd@lo}% minor +\def\crd@qualM{\crd@append{\crd@capitaltype M}\to\crd@lo}% major7 +\expandafter\def\csname\crd@qual5+\endcsname% aug. 5 +{\crd@append{+}\to\crd@lo} +\expandafter\def\csname\crd@qual6\endcsname% 6 +{\crd@append{\crd@numbertype6}\to\crd@up} +\expandafter\def\csname\crd@qual7\endcsname% dominant 7 +{\crd@append{\crd@numbertype7}\to\crd@up} +\def\crd@quald{\crd@append{\crd@dim}\to\crd@up}% diminished +\def\crd@qualh{\crd@append{\crd@hdim}\to\crd@up}% half diminished +\expandafter\def\csname\crd@qual9-\endcsname% -9 +{\crd@append{\crd@numbertype\crd@numberflat9}\to\crd@alt} +\expandafter\def\csname\crd@qual9+\endcsname% +9 +{\crd@append{\crd@numbertype\crd@numbersharp9}\to\crd@alt} +\def\crd@skipcrdnote{crd@skipcrdnote} +\expandafter\def\csname\crd@skipcrdnote/\endcsname{} +\def\crd@parsecrd{% + \crd@vshift=0 % + \let\crd@numberval=\crd@vshift% + \crd@parse\crd@input\for\crd@number% + \crd@hshift=0 % + \let\crd@numberval=\crd@hshift% + \crd@parse\crd@input\for\crd@number% + \def\crd@crdnote{}% chord note + \def\crd@crdacc{}% chord note accidental + \def\crd@bassnote{}% bass note + \def\crd@bassacc{}% bass note accidental + \crd@qualinit% initialize qualifiers + \let\crd@flat=\crd@noteflat% + \let\crd@doubleflat=\crd@notedoubleflat% + \let\crd@sharp=\crd@notesharp% + \let\crd@doublesharp=\crd@notedoublesharp% + \crd@parsenote\crd@crdnote\crd@crdacc% read chord note + \loop\crd@parse\crd@input\for\crd@qual% read qualifiers + \ifcrd@parsematched\repeat% + \crd@parse\crd@input\for\crd@skipcrdnote% skip eventually + \let\crd@flat=\crd@bassflat% + \let\crd@doubleflat=\crd@bassdoubleflat% + \let\crd@sharp=\crd@basssharp% + \let\crd@doublesharp=\crd@bassdoublesharp% + \crd@parsenote\crd@bassnote\crd@bassacc% read bass note + \crd@formatcrd\hfil% call rendering +} +\def\crd@crddelim{crd@crddelim}% +\expandafter\def\csname\crd@crddelim,\endcsname{}% +\def\crd@parsecrds{% + \crd@parsecrd% + \crd@parse\crd@input\for\crd@crddelim% + \ifcrd@parsematched\crd@parsecrds\fi% +} +\def\c#1 {\def\crd@input{#1}\crd@output\crd@parsecrds} +\def\crd@fontstylea{% + \font\crd@eightrm=cmr8 + \font\crd@eightit=cmmi8 + \font\crd@seventeenrm=cmr17 + \font\crd@fourteenrm=cmr14 + \font\crd@twelverm=cmr12 + \font\crd@ninerm=cmr9 + \font\crd@smallninerm=cmr9 scaled 900 + \font\crd@bigninerm=cmr9 scaled 1100 + \let\crd@notetype=\crd@seventeenrm + \def\crd@noteflat{\raise0.6ex\hbox{\kern-0.085em\musictwenty2}} + \def\crd@notedoubleflat{\raise0.6ex\hbox{\kern-0.085em\musictwenty3}} + \def\crd@notesharp{\raise0.8ex\hbox{\musictwenty4}} + \def\crd@notedoublesharp{\raise0.8ex\hbox{\musictwenty5}} + \let\crd@basstype=\crd@fourteenrm + \def\crd@bassflat{\raise.5ex\hbox{\musicsixteen2}} + \def\crd@bassdoubleflat{\raise0.6ex\hbox{\kern-0.085em\musicsixteen3}} + \def\crd@basssharp{\raise1ex\hbox{\musicsixteen4}} + \def\crd@bassdoublesharp{\raise0.8ex\hbox{\musicsixteen5}} + \let\crd@numbertype=\crd@ninerm + \def\crd@numberflat{\raise.5ex\hbox{\musiceleven2}} + \def\crd@numbersharp{\raise1ex\hbox{\musiceleven4}} + \def\crd@numberminus{\crd@ninerm-} + \def\crd@numberplus{\crd@ninerm+} + \let\crd@capitaltype=\crd@smallninerm % capitals + \let\crd@smalltype=\crd@bigninerm % small + \def\crd@hdim{\crd@eightit$\circ$\kern-4.4pt\raise.9pt\hbox{\crd@eightrm/}} + \def\crd@dim{\crd@eightit$\circ$} +} +\def\crd@formatcrda{% + \hbox{\kern\crd@hshift\elemskip\raise\crd@vshift\internote\hbox{% + {\crd@notetype\crd@crdnote\crd@crdacc}% + \vbox{% + \hbox{% + \crd@up% + \ifx\crd@alt\empty\else\crd@numbertype(\crd@alt\crd@numbertype)\fi% + }% + \nointerlineskip\vskip1pt% + \hbox{\vphantom{\crd@capitaltype M}\crd@lo}}% + \ifx\crd@bassnote\empty\else% + {\crd@basstype/% + \lower0.5ex\hbox{\kern-0.17em \crd@bassnote\crd@bassacc}}% + \fi%\ + }} +} +\let\crd@formatcrd=\crd@formatcrda +\crd@fontstylea +\def\crd@musixOutput#1{\hbox{\zchar{\crddefaultheight}{\hbox to\elemskip{#1\hss}}}} +\let\crd@output=\crd@musixOutput +\makeatother +\endinput +%% +%% End of file `musixcrd.tex'. diff --git a/macros/musixtex/tex/musixdat.tex b/macros/musixtex/tex/musixdat.tex new file mode 100644 index 0000000000..16541a6e5c --- /dev/null +++ b/macros/musixtex/tex/musixdat.tex @@ -0,0 +1,59 @@ +% +% 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. +% +\immediate\write16{MusiXDATes 0.36\space<1 March 1995>}% + +\ifx\undefined\dategerman \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +%% This is 'stolen' from GERMAN.TEX or GERMAN.STY, Vers. 2.4a, 12 Apr 1991 + +% Dates +% ----- + +\def\month@german{\ifcase\month \or + Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or + Juli\or August\or September\or Oktober\or November\or Dezember\fi} +\def\dategerman{\def\today{\number\day.~\month@german + \space\number\year}} +\def\dateaustrian{\def\today{\number\day.~\ifnum 1=\month + J\"anner\else \month@german\fi \space\number\year}} +\def\month@english{\ifcase\month \or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi} +\def\dateUSenglish{\def\today{\month@english + \space\number\day, \number\year}} +\def\dateenglish{\def\today{\number\day \ifcase\day \or + st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or % 1..10 + th\or th\or th\or th\or th\or th\or th\or th\or th\or th\or % 11..20 + st\or nd\or rd\or th\or th\or th\or th\or th\or th\or th\or % 21..30 + st\fi + ~\month@english \space\number\year}} +\def\datefrench{\def\today{\number\day \ifnum1=\day \/$^{\rm er}$\fi + \space\ifcase\month \or + janvier\or f\'evrier\or mars\or avril\or mai\or juin\or + juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi + \space\number\year}} + +\def\aujourdhui{\datefrench\today} + +\dateUSenglish% or whatever you prefer + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixdbr.tex b/macros/musixtex/tex/musixdbr.tex new file mode 100644 index 0000000000..2ad82ca662 --- /dev/null +++ b/macros/musixtex/tex/musixdbr.tex @@ -0,0 +1,250 @@ +\ifx\indivbarrules\undefined\else\endinput\fi + +\immediate\write10{MusiXDashed and Dotted BaRlines 1.0\space<23 February 2002>}% +% by Rainer Dunker +% Ideas and code based on musixbar.tex +% by Mthimkhulu Molekwa + +\makeatletter + +\newdimen\barline@depth + +\def\barlinedash#1{\vskip.5\Internote + \hrule\@width#1\@height\Internote + \vskip.5\Internote} +\def\barlinedots#1{\vskip.5\Internote + \hbox to #1{\hss\tenrm.\hss} + \vskip.5\Internote} + +\def\rul@indiv#1{% + \n@loop + \Comp@High + \multiply\barline@depth -1\relax + \advance\barline@depth\altitude + \expandafter\ifx\csname s@b\romannumeral\noinstrum@nt\endcsname\relax + % normal barline below instrument + \raise\altitude\rlap{\vrule\@depth\barline@depth\@width#1\@height0pt }% + \else + \expandafter\ifx\csname s@b\romannumeral\noinstrum@nt\endcsname 2% + % dashed barline below instrument + \raise\altitude\hbox{% + \lower\barline@depth\rlap{% + \vbox to \barline@depth{% + \xleaders\vbox{\barlinedash{#1}}\vfill}}}% + \else + \expandafter\ifx\csname s@b\romannumeral\noinstrum@nt\endcsname 3% + % dotted barline below instrument + \raise\altitude\hbox{% + \lower\barline@depth\rlap{% + \vbox to \barline@depth{% + \xleaders\vbox{\barlinedots{#1}}\vfill}}}% + \fi + \fi + \fi + \ifnum\st@ffs>1 % multi-staff instrument + \multi@instrum@bars{#1}% + \else % single-staff instrument + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname\relax + % normal barline through instrument + \raise\altitude\rlap{\vrule\@depth0pt \@width#1\@height\y@v}% + \else + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 2% + % dashed barline through instrument + \raise\altitude\rlap{% + \vbox to \y@v{% + \cleaders\vbox to 2\internote{\vss + \hrule\@width#1\@height\internote + \vss}% + \vfill}}% + \else + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 3% + % dotted barline through instrument + \raise\altitude\rlap{% + \vbox to \y@v{% + \cleaders\vbox to 2\internote{\vss + \hbox to #1{\hss\tenrm.\hss}% + \vss}% + \vfill}}% + \fi + \fi + \fi + \fi + \barline@depth\altitude + \advance\barline@depth\y@v + \repeat + \addspace#1} + +\def\multi@instrum@bars#1{% + \begingroup + % retrieve staff height + \count@=\nblines \advance\count@ -1 \multiply\count@ 2 + \dimen@=\count@\internote + \p@loop + % barline within staff + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname\relax + % normal barline through staff + \raise\altportee\rlap{\vrule\@depth0pt \@width#1\@height\dimen@}% + \else + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 2% + % dashed barline through staff + \raise\altportee\rlap{% + \vbox to \dimen@{% + \cleaders\vbox to 2\internote{\vss + \hrule\@width#1\@height\internote + \vss}% + \vfill}}% + \else + \expandafter\ifx\csname h@bl\romannumeral\noinstrum@nt\endcsname 3% + % dotted barline through staff + \raise\altportee\rlap{% + \vbox to \dimen@{% + \cleaders\vbox to 2\internote{\vss + \hbox to #1{\hss\tenrm.\hss}% + \vss}% + \vfill}}% + \fi + \fi + \fi + \count@portee + % barline above staff + \ifnum\noport@@<\st@ffs % not for topmost staff + \barline@depth\interportee + \advance\barline@depth -\dimen@ + \raise\altportee\hbox{\raise\dimen@\rlap{% + \expandafter\ifx\csname s@mb\romannumeral\noinstrum@nt\endcsname + \relax + % normal barline + \vrule\@height\barline@depth\@width#1\relax + \else + \expandafter\ifx\csname s@mb\romannumeral\noinstrum@nt\endcsname 2% + % dashed barline + \vbox to \barline@depth{% + \xleaders\vbox{\barlinedash{#1}}\vfill}% + \else + \expandafter\ifx\csname s@mb\romannumeral\noinstrum@nt\endcsname + 3% dotted barline + \vbox to \barline@depth{% + \xleaders\vbox{\barlinedots{#1}}\vfill}% + \fi + \fi + \fi}}% + \fi + \repeat + \endgroup} + + +% Activate individual barline processing +\def\indivbarrules{% + \let\writ@rule\rul@indiv + \sepbarrule 1} + +%== separates bar line of specified instrument from one of previous instrument +\def\sepbarrule#1{\expandafter\let\csname s@b\romannumeral#1\endcsname 1} + +%== connects bar line of specified instrument to one of previous instrument +% with dashed line +\def\condashbarrule#1{% + \ifnum#1>1 \expandafter\let\csname s@b\romannumeral#1\endcsname 2\fi} + +%== connects bar line of specified instrument to one of previous instrument +% with dotted line +\def\condotbarrule#1{% + \ifnum#1>1 \expandafter\let\csname s@b\romannumeral#1\endcsname 3\fi} + +%== connects bar line of specified instrument to one of previous instrument +\def\conbarrule#1{% + \ifnum#1>1 \expandafter\let\csname s@b\romannumeral#1\endcsname\relax\fi} + +%== hides bar line for specified instrument +\def\hidebarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname 1} + +%== dashes bar line for specified instrument +\def\showdashbarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname 2} + +%== dots bar line for specified instrument +\def\showdotbarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname 3} + +%== shows bar line for specified instrument +\def\showbarrule#1{\expandafter\let\csname h@bl\romannumeral#1\endcsname\relax} + +%== separates bar line within multistaff instrument +\def\sepmultibarrule#1{\expandafter\let\csname s@mb\romannumeral#1\endcsname 1} + +%== dashes bar line between staves of multistaff instrument +\def\condashmultibarrule#1{% + \expandafter\let\csname s@mb\romannumeral#1\endcsname 2} + +%== dots bar line between staves of multistaff instrument +\def\condotmultibarrule#1{% + \expandafter\let\csname s@mb\romannumeral#1\endcsname 3} + +%== shows bar line between staves of multistaff instrument +\def\conmultibarrule#1{% + \expandafter\let\csname s@mb\romannumeral#1\endcsname\relax} + +% set barlines for all instruments together +\def\allbarrules#1{\n@loop#1\noinstrum@nt\repeat} + + +\makeatother +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Here comes an example of how to use these macros + +\input musixtex +\input musixdbr + +\instrumentnumber4 +\setstaffs23 +\setstaffs32 +\setlines14 +\setsize2\tinyvalue + +\indivbarrules + +\startpiece + % normal barlines + \bar + % barlines on staves + \allbarrules\sepbarrule + \allbarrules\sepmultibarrule + \allbarrules\showbarrule + \bar + % barlines between staves + \allbarrules\conbarrule + \allbarrules\conmultibarrule + \allbarrules\hidebarrule + \bar + % dashed barlines on staves + \allbarrules\sepbarrule + \allbarrules\sepmultibarrule + \allbarrules\showdashbarrule + \bar + % dashed barlines between staves + \allbarrules\condashbarrule + \allbarrules\condashmultibarrule + \allbarrules\hidebarrule + \bar + % dotted barlines on staves + \allbarrules\sepbarrule + \allbarrules\sepmultibarrule + \allbarrules\showdotbarrule + \bar + % dotted barlines between staves + \allbarrules\condotbarrule + \allbarrules\condotmultibarrule + \allbarrules\hidebarrule + \bar + % a wild mixture of all + \showdotbarrule1\hidebarrule2\showdashbarrule3\showbarrule4% + \condashbarrule2\conbarrule3\condotbarrule4% + \condashmultibarrule2\sepmultibarrule3% + \bar + % conventional ending + \allbarrules\showbarrule + \allbarrules\conbarrule + \allbarrules\conmultibarrule +\Endpiece +\bye diff --git a/macros/musixtex/tex/musixdia.tex b/macros/musixtex/tex/musixdia.tex new file mode 100644 index 0000000000..05839eea01 --- /dev/null +++ b/macros/musixtex/tex/musixdia.tex @@ -0,0 +1,110 @@ +% +% 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. +% + +\immediate\write16{MusiXDIAmond T.40\space<12 September 1995>}% + +\ifx\undefined\dqu \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +%%% notes with a unfilled diamond head, for gregorian and flagolet notes ... + +\def\d@symbol{\def\q@u{\musixfont\&}} + +\def\dnq{\d@symbol\@nq} +\def\dznq{\advancefalse\dnq} + +\def\dqu{\d@symbol\@qu} +\def\dqup{\d@symbol\@qup} +\def\dqupp{\d@symbol\@qupp} +%\def\dquppp{\d@symbol\@quppp} + +\def\dql{\d@symbol\@ql} +\def\dqlp{\d@symbol\@qlp} +\def\dqlpp{\d@symbol\@qlpp} +%\def\dqlppp{\d@symbol\@qlppp} + +\def\dqb{\d@symbol\@qb} + +\def\dzq{\d@symbol\@zq} +\def\dzqp{\d@symbol\@zqp} +\def\dzqpp{\d@symbol\@zqpp} +%\def\dzqppp{\d@symbol\@zqppp} + +\def\dcu{\d@symbol\@cu} +\def\dccu{\d@symbol\@ccu} +\def\dcccu{\d@symbol\@cccu} +\def\dccccu{\d@symbol\@ccccu} +\def\dcl{\d@symbol\@cl} +\def\dccl{\d@symbol\@ccl} +\def\dcccl{\d@symbol\@cccl} +\def\dccccl{\d@symbol\@ccccl} + +\def\dcup{\d@symbol\@cup} +\def\dcupp{\d@symbol\@cupp} +%\def\dcuppp{\d@symbol\@cuppp} + +\def\dclp{\d@symbol\@clp} +\def\dclpp{\d@symbol\@clpp} +%\def\dclppp{\d@symbol\@clppp} + +%%% notes with a filled diamond head, for gregorian notes ... + +\def\y@symbol{\def\q@u{\musixfont\%}} + +\def\ynq{\y@symbol\@nq} +\def\yznq{\advancefalse\ynq} +\def\zynq{\advancefalse\ynq} + +\def\yqu{\y@symbol\@qu} +\def\yqup{\y@symbol\@qup} +\def\yqupp{\y@symbol\@qupp} +%\def\yquppp{\y@symbol\@quppp} + +\def\yql{\y@symbol\@ql} +\def\yqlp{\y@symbol\@qlp} +\def\yqlpp{\y@symbol\@qlpp} +%\def\yqlppp{\y@symbol\@qlppp} + +\def\yqb{\y@symbol\@qb} + +\def\yzq{\y@symbol\@zq} +\def\yzqp{\y@symbol\@zqp} +\def\yzqpp{\y@symbol\@zqpp} +%\def\yzqppp{\y@symbol\@zqppp} + +\def\ycu{\y@symbol\@cu} +\def\yccu{\y@symbol\@ccu} +\def\ycccu{\y@symbol\@cccu} +\def\yccccu{\y@symbol\@ccccu} +\def\ycl{\y@symbol\@cl} +\def\yccl{\y@symbol\@ccl} +\def\ycccl{\y@symbol\@cccl} +\def\yccccl{\y@symbol\@ccccl} + +\def\ycup{\y@symbol\@cup} +\def\ycupp{\y@symbol\@cupp} +%\def\ycuppp{\y@symbol\@cuppp} + +\def\yclp{\y@symbol\@clp} +\def\yclpp{\y@symbol\@clpp} +%\def\yclppp{\y@symbol\@clppp} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixec.tex b/macros/musixtex/tex/musixec.tex new file mode 100644 index 0000000000..e213f30fb1 --- /dev/null +++ b/macros/musixtex/tex/musixec.tex @@ -0,0 +1,169 @@ +% musixec.tex : EC font definitions for MusiXTeX +% +% usage: +% +% \input musixtex +% \input musixec +% ... +% +% MusiXec.tex 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. +% +% MusiXppl.tex 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. +% +% Copyright 2015-2017 Bob Tennent rdt@cs.queensu.ca +% +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixec.tex}\fi +\immediate\write16{MusiXec\space<2017/02/10>} +% + +\longECfontnamestrue +\def\fontid{ec} + +% 7pt +\font\sevenrm=ecrm0700 +\font\sevenbf=ecbx0700 +\font\sevenit=ecti0800 at 7pt +\font\sevenbi=ecbi0700 +\font\sevensc=ecsc0700 +% +% 8pt +\font\eightrm=ecrm0800 +\font\eightbf=ecbx0800 +\font\eightit=ecti0800 +\font\eightbi=ecbi0800 +\font\eightsc=ecsc0800 +% +% 9pt +\font\ninerm=ecrm0900 +\font\ninebf=ecbx0900 +\font\nineit=ecti0900 +\font\ninebi=ecbi0900 +\font\ninesc=ecsc0900 +% +% 10pt +\font\tenrm=ecrm1000 +\font\tenbf=ecbx1000 +\font\tenit=ecti1000 +\font\tenbi=ecbi1000 +\font\tensc=ecsc1000 +% +% 11pt +\font\elevenrm=ecrm1095 +\font\elevenbf=ecbx1095 +\font\elevenit=ecti1095 +\font\elevenbi=ecbi1095 +\font\elevensc=ecsc1095 +% +% 12pt +\font\twelverm=ecrm1200 +\font\twelvebf=ecbx1200 +\font\twelveit=ecti1200 +\font\twelvebi=ecbi1200 +\font\twelvesc=ecsc1200 +% +% 14pt +\font\frtrm=ecrm1440 +\font\frtbf=ecbx1440 +\font\frtit=ecti1440 +\font\frtbi=ecbi1440 +\font\frtsc=ecsc1440 +% +% 17pt +\font\svtrm=ecrm1728 +\font\svtbf=ecbx1728 +\font\svtit=ecti1728 +\font\svtbi=ecbi1728 +\font\svtsc=ecsc1728 +% +% 20pt +\font\twtyrm=ecrm2074 +\font\twtybf=ecbx2074 +\font\twtyit=ecti2074 +\font\twtybi=ecbi2074 +\font\twtysc=ecsc2074 +% +% 25pt +\font\twfvrm=ecrm2488 +\font\twfvbf=ecbx2488 +\font\twfvit=ecti2488 +\font\twfvbi=ecbi2488 +\font\twfvsc=ecsc2488 +% +% +% +\font\ppfftwelve=ecbi0800 +\font\ppffsixteen=ecbi1000 +\font\ppfftwenty=ecbi1200 +\font\ppfftwentyfour=ecbi1440 +\font\ppfftwentynine=ecbi1728 +% +% +% tt fonts needed by musixsty +% +\font\eighttt=ectt0800 +\font\ninett=ectt0900 +\font\tentt=ectt1000 +\font\twelvett=ectt1200 +\font\frttt=ectt1440 +\font\svttt=ectt1728 +\font\twtytt=ectt2074 +\font\twfvtt=ectt2488 +% +% sl fonts needed by musixsty +% +\font\eightsl=ecsl0800 +\font\ninesl=ecsl0900 +\font\tensl=ecsl1000 +\font\twelvesl=ecsl1200 +\font\frtsl=ecsl1440 +\font\svtsl=ecsl1728 +\font\twtysl=ecsl2074 +\font\twfvsl=ecsl2488 + +% +% Redefine accented characters for 8-bit font +% + +\ifx\documentclass\undefined +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +\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 + +% \c requires special treatment +\def\c#1{\leavevmode\ifx c#1\char231 \else\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr + \hidewidth\char11\hidewidth}}\fi\fi} +\catcode`\@=\catcodeat +\fi + + +\normtype +\endinput diff --git a/macros/musixtex/tex/musixeng.tex b/macros/musixtex/tex/musixeng.tex new file mode 100644 index 0000000000..e9e3d0d8b9 --- /dev/null +++ b/macros/musixtex/tex/musixeng.tex @@ -0,0 +1,42 @@ +% +% 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. +% + +% suggested by Ross Mitchell + +\immediate\write16{MusiX ENGlish rests T.404\space<08 May 2018>}% + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\let\Qwr\PAUSe +\let\Dwr\PAuse +\let\liftwr\liftpause +\let\wrp\pausep +\let\wr@\pause +\let\lifthr\lifthpause +\let\hrp\hpausep +\let\hr\hpause +\let\qr\qp +\let\er\ds % \ds\oup no longer available +\let\eer\qs +\let\eeer\hs +\let\eeeer\qqs +\def\wr{\pause} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixesf.tex b/macros/musixtex/tex/musixesf.tex new file mode 100644 index 0000000000..0fa6fd0829 --- /dev/null +++ b/macros/musixtex/tex/musixesf.tex @@ -0,0 +1,79 @@ +%% +%% musixesf.tex : efont-serif series fonts definition for MusiXTeX +%% +%% usage: +%% \input musixtex +%% \input musixesf +%% ... +%% +%% This file is public domain. +%% +%% Author: +%% Hiroaki MORIMOTO +%% Tokyo, Japan +%% URL(en): http://homepage1.nifty.com/kuuku/pub/musixtex/index-e.html +%% (jp): http://homepage1.nifty.com/kuuku/pub/musixtex/index.html +%% +%% reference: musixtex.tex (T.99) 268-508 +%% MusiXTeX: (c) Daniel Taupin, et al. +%% +%% efont-serif: +%% (c) /efont/ +%% The Electronic Font Open Laboratory +%% http://openlab.ring.gr.jp/efont/dist/serif/efont-serif-tex-20010312-p3.tar.gz +%% http://openlab.ring.gr.jp/efont/serif/index.html.en +%% http://openlab.ring.gr.jp/efont/index.html.en +%% +%% History: see trailer. +% +\immediate\write16{MusiXTeX efont-serif\space<2009/10/15>} +% +% 8pt roman, bold, and italic +\font\eightrm=esfr7t at 8pt +\font\eightbf=esfb7t at 8pt +\font\eightit=esfri7t at 8pt +% +% 9pt +\font\ninerm=esfr7t at 9pt +\font\ninebf=esfb7t at 9pt +\font\nineit=esfri7t at 9pt +% +% 10pt +\font\tenrm=esfr7t +\font\tenbf=esfb7t +\font\tenit=esfri7t +% +% 12pt +\font\twelverm=esfr7t scaled \magstep 1 +\font\twelvebf=esfb7t scaled \magstep 1 +\font\twelveit=esfri7t scaled \magstep 1 +% +% Large fonts for titles +% (If you prefer efont-serif-bold, use esfb7t instead of esfr7t) +\font\bigfont=esfr7t scaled \magstep2 % 14pt +\font\Bigfont=esfr7t scaled \magstep3 % 17pt +\font\BIgfont=esfr7t scaled \magstep4 % 20pt +\font\BIGfont=esfr7t scaled \magstep5 % 25pt +% +% PMX changes font assignment in pmx.tex +% \BIGfont=\fontid bx10 scaled\magstep4 +% \Bigfont=\fontid bx10 scaled\magstep2 +\ifx\pmxversion\undefined\relax\else + \font\Bigfont=esfr7t scaled \magstep2 % 14pt + \font\BIGfont=esfr7t scaled \magstep4 % 20pt +\fi +% +\normtype +\endinput +%% +%% History +%% +%% 2006/05/13 +%% first publish +%% 2007/06/11 +%% no functional change. (email protection, real address change, URL change) +%% 2008/08/01 +%% Font assignment change on PMX. +%% 2009/10/15 +%% small update for MusiXTeX T.114 final release. +%% diff --git a/macros/musixtex/tex/musixevo.tex b/macros/musixtex/tex/musixevo.tex new file mode 100644 index 0000000000..dd6c1e5ffc --- /dev/null +++ b/macros/musixtex/tex/musixevo.tex @@ -0,0 +1,19 @@ +\immediate\write16{MusiXEVenOdd T.53\space<1 April 1996>}% + +% enables + +\makeatletter +\def\outmorceau{\shipout\hbox{\null\ifodd\pageno\kern 2.5mm + \else\kern -2.5mm + \fi + \vbox{\vbox to \vsize{\vss\pagecontents\vss}\line{% +\ifodd\pageno\sl \titremorceau\ (\s@hortauthor) +\ifcopyright\rm$\copyright$\fi\hss \number\pageno +\else\rm\number\pageno\hss\sl \titremorceau\ (\s@hortauthor) +\ifcopyright\rm$\copyright$\fi\fi}}}% + \global\advance\count0 by 1\relax + \ifnum\outputpenalty>-20000 \else\dosupereject\fi}% + +\output{\outmorceau} +\makeatother +\endinput diff --git a/macros/musixtex/tex/musixext.tex b/macros/musixtex/tex/musixext.tex new file mode 100644 index 0000000000..d6ac3b9c4b --- /dev/null +++ b/macros/musixtex/tex/musixext.tex @@ -0,0 +1,26 @@ +% +% 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. +% +% +% musixext.tex +% +\immediate\write16{MusiXext T.118 <2015-07-25>}% +% +% (nothing to do. - T.118 or later provides \slide and \raggedstoppiece +% +\endinput diff --git a/macros/musixtex/tex/musixfll.tex b/macros/musixtex/tex/musixfll.tex new file mode 100644 index 0000000000..7cb9e44fae --- /dev/null +++ b/macros/musixtex/tex/musixfll.tex @@ -0,0 +1,44 @@ +% +% 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\longledgerlines \else \endinput \fi + +\immediate\write16{MusiXFormerLedgerLines T.74\space<06 April 1997>}% + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\let\h@lineick\h@linei +\def\h@lineidt{% + \y@ii\n@v\internote + \y@iii\y@ii + \advance\y@ii\hlthick + \advance\y@iii-\hlthick + \y@iv\y@v + \advance\y@iv\h@lf\qn@width + \kernm.25\qn@width + \vrule\@height\y@ii\@depth-\y@iii\@width\y@iv + \kernm\y@iv\kern.25\qn@width} +\def\longledgerlines{\global\let\h@linei\h@lineidt} +\def\autoledgerlines{\global\let\h@linei\h@lineick} +\longledgerlines + +\catcode`\@=\catcodeat + +\endinput + diff --git a/macros/musixtex/tex/musixgre.tex b/macros/musixtex/tex/musixgre.tex new file mode 100644 index 0000000000..a7272fb30c --- /dev/null +++ b/macros/musixtex/tex/musixgre.tex @@ -0,0 +1,351 @@ +% +% 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. +% +\immediate\write16{MusiXGREgorian T.67\space<3 January 1997>}% + +\ifx\undefined\gregorianCclef \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +\catcodesmusic + +\font\xgregeleven=xgreg11 +\font\xgregthirteen=xgreg13 +\font\xgregsixteen=xgreg16 +\font\xgregtwenty=xgreg20 +\font\xgregtwentyfour=xgreg24 +\font\xgregtwentynine=xgreg29 + +\let\xgregnorfont\xgregtwenty + +\def\xgregkeyfont{% + \ifdim\internote<\p@seven6\Internote \xgregtinyfont + \else + \ifdim\internote<.95\Internote \xgregsmallfont + \else + \ifdim\internote<1.19\Internote \xgregnorfont + \else + \ifdim\internote<1.43\Internote \xgreglargefont + \else + \xgregLargefont + \fi + \fi + \fi + \fi} + +\def\xgregchar{\xgregfont\char} +\def\xgregkeychar{\xgregkeyfont\char} + + +% \[z]carrg=\[z]squ, \[z]carpg=\[z]lsqu, \[z]carqg=\[z]rsqu + +\def\gregorianCclef{\xgregkeychar98} +\def\gregorianFclef{\xgregkeychar122} + +\def\squ#1{\getn@i#1\relax\let\n@fon\squ \def\n@sym{\xgregchar5}\g@diamg} +\def\r@small@squ#1{\getn@i#1\relax\let\n@fon\r@small@squ + \def\n@sym{\xgregchar0\llap{\xgregchar12\xgregchar18}}\g@diamg} +\def\punctumauctup#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar9}\g@diamg} +\def\punctumauctdown#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar8}\g@diamg} +\def\punctumdeminutum#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar4}\g@diamg} +\def\shavedsqu#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar17}\g@diamg} +\let\punctum\squ +\def\diapunc#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar1}\g@diamg} +\def\diapuncauctdown#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar2}\g@diamg} +\def\apostropha#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar3}\g@diamg} +\def\apostrophaaucta#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar11}\g@diamg} +\def\oriscus#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar10}\g@diamg} +\def\usqu#1{\getn@i#1\relax\let\n@fon\squ + \def\n@sym{\xgregchar13}\g@diamg} +\def\lsqu#1{\getn@i#1\relax\let\n@fon\lsqu + \def\n@sym{\xgregchar6}\g@diamg} +\def\rsqu#1{\getn@i#1\relax\let\n@fon\rsqu + \def\n@sym{\xgregchar7}\g@diamg} +\let\virga\rsqu +\def\quilisma#1{\getn@i#1\relax\let\n@fon\quilisma + \def\n@sym{\xgregchar125}\g@diamg} +\def\shavedquilisma#1{\getn@i#1\relax\let\n@fon\shavedquilisma + \def\n@sym{\xgregchar126}\g@diamg} + + + +\def\zsqu{\advancefalse\squ} +\let\zpunctum\zsqu +\def\zusqu{\advancefalse\usqu} +\def\zlsqu{\advancefalse\lsqu} +\def\zrsqu{\advancefalse\rsqu} +\let\zvirga\zrsqu +\def\zoriscus{\advancefalse\oriscus} +\def\zdiapunc{\advancefalse\diapunc} +\def\zapostropha{\advancefalse\apostropha} +\def\zquilisma{\advancefalse\quilisma} +\def\zshavedquilisma{\advancefalse\shavedquilisma} + +\def\g@diamg{\y@v.71\qn@width \let\st@m\resetst@m \writ@note} + +\def\groff{\roffset{.71}} +\def\dgroff{\roffset{1.42}} + +\def\getthen@one@two#1#2{\getn@i{#1}\relax\edef\then@one{\the\n@i}% + \getn@i{#2}\relax\edef\then@two{\the\n@i}% + \n@ii=\then@one\relax + \advance\n@i -\n@ii\relax + \edef\the@two@minus@one{\the\n@i}% + \n@i=-\n@i + \edef\the@one@minus@two{\the\n@i}% +}% +\def\getthen@one@three#1#2#3{\getthen@one@two{#1}{#2}\relax + \getn@i{#3}\relax\edef\then@three{\the\n@i}% + \n@ii=\then@two\relax + \advance\n@i -\n@ii\relax + \edef\the@three@minus@two{\the\n@i}% + \n@i=-\n@i + \edef\the@two@minus@three{\the\n@i}% +}% + +\def\bivirga#1#2{\zrsqu{#1}\roff{\rsqu{#2}}} + +\def\trivirga#1#2#3{\zrsqu{#1}\roff{\zrsqu{#2}}\roffset2{\rsqu{#3}}} + +\def\bistropha#1#2{\zsqu{#1}\roff{\squ{#2}}} + +\def\tristropha#1#2#3{\zsqu{#1}\roff{\zsqu{#2}}\roffset2{\squ{#3}}} + +\def\trigonus#1#2#3{\zdiapunc{#1}\groff{\zdiapunc{#2}}\dgroff{\diapunc{#3}}} + +\def\clivis#1#2{\getthen@one@two{#1}{#2}\relax +\zlsqu{#1}{\xgregchar0}\zcharnote{#2}{\vrule\@depth\z@ \@height \the@one@minus@two\internote}\squ{#2}} + +\def\clivisdeminut#1#2{\getthen@one@two{#1}{#2}\relax +\zlsqu{#1}\zcharnote{#2}{\xgregchar0\vrule\@depth\z@ \@height +\the@one@minus@two\internote}\r@small@squ{#2}} + +\def\clivisauctup#1#2{\getthen@one@two{#1}{#2}\relax +\zlsqu{#1}{\xgregchar0}\zcharnote{#2}{\vrule\@depth\z@ \@height \the@one@minus@two\internote}\punctumauctup{#2}} + +\def\clivisauctdown#1#2{\getthen@one@two{#1}{#2}\relax +\zlsqu{#1}{\xgregchar0}\zcharnote{#2}{\vrule\@depth\z@ \@height \the@one@minus@two\internote}\punctumauctdown{#2}} + +\def\lclivis#1#2{\zsqu{#1}\groff{\lsqu{#2}}} + +\def\podatus#1#2{\getthen@one@two{#1}{#2}\relax + \zcharnote{#1}{\ifnum\the@two@minus@one<2\relax + \xgregchar16% + \else + \xgregchar15% + \fi + \vrule\@depth\z@ \@height\the@two@minus@one\internote}% +\ifnum\the@two@minus@one<2\relax + \shavedsqu{#2}% + \else + \squ{#2}% + \fi +} + +\def\podatusdeminut#1#2{\getthen@one@two{#1}{#2}\relax + \zcharnote{#1}{\ifnum\the@two@minus@one<2\relax + \xgregchar16% + \else + \xgregchar15% + \fi + \vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \r@small@squ{#2}% +} + +\def\lpodatus#1#2{\zusqu{#1}\groff{\rsqu{#2}}} + +\def\podatusinitiodebilis#1#2{\getthen@one@two{#1}{#2}\relax + \zcharnote{#1}{\xgregchar12\xgregchar18% + \vrule\@depth\z@ \@height\the@two@minus@one\internote}% + {\xgregchar18}\squ{#2}% +} + +\def\podatusauctup#1#2{\getthen@one@two{#1}{#2}\relax + \zcharnote{#1}{\xgregchar5\xgregchar0% + \vrule\@depth\z@ \@height\the@two@minus@one\internote}% + {\xgregchar0}\punctumauctup{#2}% +} + +\def\podatusauctdown#1#2{\getthen@one@two{#1}{#2}\relax + \zcharnote{#1}{\xgregchar5\xgregchar0% + \vrule\@depth\z@ \@height\the@two@minus@one\internote}% + {\xgregchar0}\punctumauctdown{#2}% +} + +\def\scandicus#1#2#3{\getthen@one@three{#1}{#2}{#3}\relax + \advancefalse\podatus{#1}{#2}{\xgregchar0}% +% \zcharnote{#2}{\vrule\@depth\z@ \@height\the@three@minus@two\internote}% + \rsqu{#3}} + +\def\scandicusdeminut#1#2#3{\getthen@one@two{#1}{#2}% + \zsqu{#1}{\xgregchar0}% +% \zcharnote{#1}{\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \podatusdeminut{#2}{#3}} + +\def\scandicusauctdown#1#2#3{\getthen@one@three{#1}{#2}{#3}\relax + \zsqu{#1}{\xgregchar0}% + \zcharnote{#1}{\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \zsqu{#2}{\xgregchar0}% + \zcharnote{#2}{\vrule\@depth\z@ \@height\the@three@minus@two\internote}% + \punctumauctdown{#3}} + +\def\torculus#1#2#3{\getthen@one@three{#1}{#2}{#3}\zsqu{#1}{\xgregchar0}% + \zcharnote{#1}{\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \zsqu{#2}{\xgregchar0}% + \zcharnote{#3}{\vrule\@depth\z@ \@height\the@two@minus@three\internote}% + \squ{#3}} + +\def\torculusdeminut#1#2#3{\getthen@one@three{#1}{#2}{#3}\zsqu{#1}{\xgregchar0}% + \zcharnote{#1}{\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \zsqu{#2}% + \zcharnote{#3}{\xgregchar0\vrule\@depth\z@ \@height\the@two@minus@three\internote}% + \r@small@squ{#3}} + +\def\torculusauctdown#1#2#3{\getthen@one@three{#1}{#2}{#3}\zsqu{#1}{\xgregchar0}% + \zcharnote{#1}{\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + \zsqu{#2}{\xgregchar0}% + \zcharnote{#3}{\vrule\@depth\z@ \@height\the@two@minus@three\internote}% + \punctumauctdown{#3}} + +\def\torculusinitiodebilis#1#2#3{\getthen@one@three{#1}{#2}{#3}% + \zcharnote{#1}{\xgregchar12\xgregchar18\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + {\xgregchar18}\zsqu{#2}{\xgregchar0}% + \zcharnote{#3}{\vrule\@depth\z@ \@height\the@two@minus@three\internote}% + \squ{#3}} + +\def\torculusdebilis#1#2#3{\getthen@one@three{#1}{#2}{#3}% + \zcharnote{#1}{\xgregchar12\xgregchar18\vrule\@depth\z@ \@height\the@two@minus@one\internote}% + {\xgregchar18}\zsqu{#2}% + \zcharnote{#3}{\xgregchar0\vrule\@depth\z@ \@height\the@two@minus@three\internote}% + \r@small@squ{#3}} + +\def\climacus#1#2#3{\zrsqu{#1}\groff{\zdiapunc{#2}{\xgregchar0}\diapunc{#3}}} + +\def\climacusresupinus#1#2#3#4{\zrsqu{#1}\groff{\zdiapunc{#2}{\xgregchar0}\zdiapunc{#3}{\xgregchar0}\squ{#4}}} + +\def\climacusdeminut#1#2#3{\zrsqu{#1}\groff{\zdiapunc{#2}{\xgregchar0}\punctumdeminutum{#3}}} + +\def\climacusauctdown#1#2#3{\zrsqu{#1}\groff{\zdiapunc{#2}{\xgregchar0}\diapuncauctdown{#3}}} + +\def\lclimacus#1#2#3{\zlsqu{#1}\groff{\zdiapunc{#2}{\xgregchar0}\diapunc{#3}}} + +\def\pesquassus#1#2{\getthen@one@two{#1}{#2}\relax + \zoriscus{#1}{\xgregchar0}\zcharnote{#1}{\vrule\@depth\z@ \@height \the@two@minus@one\internote}\rsqu{#2}} + +\def\pesquassusauctdown#1#2{\getthen@one@two{#1}{#2}\relax + \zoriscus{#1}{\xgregchar0}\zcharnote{#1}{\vrule\@depth\z@ \@height \the@two@minus@one\internote}\punctumauctdown{#2}} + +\def\quilismapes#1#2{\getthen@one@two{#1}{#2}\relax + \ifnum\the@two@minus@one<2\relax + \zshavedquilisma{#1}% \message{ zshavedqui OK}% + \else + \zquilisma{#1}% \message{ zquilisma OK}% + \fi %\message{zqui OK}% + \zcharnote{#1}{\xgregchar0\vrule\@depth\z@ \@height \the@two@minus@one\internote}% + \ifnum\the@two@minus@one<2\relax + \shavedsqu{#2}% + \else + \squ{#2}% + \fi +} +\def\quilismapesauctdown#1#2{\getthen@one@two{#1}{#2}\relax + \zquilisma{#1}% \message{ zquilisma OK}% + \zcharnote{#1}{\xgregchar0\vrule\@depth\z@ \@height \the@two@minus@one\internote}% + {\xgregchar0}\punctumauctdown{#2}% +} + + %\check +\def\hporrectus#1{\errmessage{\noexpand\hporrectus\space does not exist +anymore, use \bporrectus with two args}} + +\def\porrectus#1#2{\errmessage{\noexpand\porrectus does not exist anymore, use + \noexpand\Porrectus}} + +\def\porrectusflexus#1#2{\errmessage{\noexpand\porrectusflexus does not exist anymore, use + \noexpand\Porrectusflexus}} + + %\check +\def\bporrectus#1#2{\getthen@one@two{#1}{#2}\relax + \ifnum\the@one@minus@two=1\relax + \def\n@sym{\xgregchar121}\relax + \else\ifnum\the@one@minus@two=2\relax + \def\n@sym{\xgregchar120}\relax + \else\ifnum\the@one@minus@two=3\relax + \def\n@sym{\xgregchar119}\relax + \else\ifnum\the@one@minus@two=4\relax + \def\n@sym{\xgregchar118}\relax + \else\errmessage{Porrectus 2nd arg must be 1st minus 1 to 4}\relax + \fi + \fi + \fi + \fi + \getn@i#1\relax\let\n@fon\squ \g@diamg +} + +%\check + +\def\Porrectusflexus#1#2#3#4{% + \advancefalse\bporrectus{#1}{#2}{\xgregchar0\xgregchar0\xgregchar0}% + \getthen@one@three{#2}{#3}{#4}% + \zcharnote{#2}{\vrule \@height\the@two@minus@one\internote\@depth\z@}% + \zsqu{#3}% + {\xgregchar0}\zcharnote{#4}{\vrule\@depth\z@ \@height \the@two@minus@three\internote}\squ{#4}} + +%\check + +\def\Porrectus#1#2#3{\getthen@one@three{#1}{#2}{#3}\relax + \advancefalse\bporrectus{#1}{#2}{\xgregchar0\xgregchar0}% + \zcharnote{#2}{\xgregchar0\vrule\@height\the@three@minus@two\internote\@depth\z@}% + \ifnum\the@three@minus@two<2\relax + \shavedsqu{#3}% + \else + \squ{#3}% + \fi +} + +\def\Porrectusdeminut#1#2#3{\getthen@one@three{#1}{#2}{#3}\relax + \advancefalse\bporrectus{#1}{#2}{\xgregchar0\xgregchar0}% + \zcharnote{#2}{\xgregchar0\vrule\@height\the@three@minus@two\internote\@depth\z@}\r@small@squ{#3}% +} + +\def\Porrectusauctdown#1#2#3{\getthen@one@three{#1}{#2}{#3}\relax + \advancefalse\bporrectus{#1}{#2}{\xgregchar0\xgregchar0\xgregchar0}% + \zcharnote{#2}{\vrule\@height\the@three@minus@two\internote\@depth\z@}\punctumauctdown{#3}% +} + +\def\salicus#1#2#3{\zsqu{#1}\groff{\pesquassus{#2}{#3}}} +%\check + +\def\salicusflexus#1#2#3#4{\zsqu{#1}{\xgregchar0}\torculus{#2}{#3}{#4}} + +\def\salicusauctdown#1#2#3{\zsqu{#1}\groff{\pesquassusauctdown{#2}{#3}}} +%\check + +\let\xgregfont\xgregnorfont + +\endcatcodesmusic +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixgui.tex b/macros/musixtex/tex/musixgui.tex new file mode 100644 index 0000000000..103360b269 --- /dev/null +++ b/macros/musixtex/tex/musixgui.tex @@ -0,0 +1,41 @@ +% +% 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. +% +\immediate\write16{MusiXGUItar 0.36\space<1 March 1995>}% + +\ifx\undefined\guitar \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\newskip\guitar@dim \guitar@dim=-.6\qn@width\relax + +% to raise the chords (steps of internote) +\def\raiseguitar#1{\edef\r@gu{#1}} +\let\r@gu\z@ + +\def\d@c#1{\if x#1\tw@nty \else\if o#1\char19\else\char28\fi\fi} +\def\guitar#1#2#3#4#5#6#7#8{\zchar\r@gu{\raise\Interligne\lrlap{#1}% + \mxsps\lrlap\sixt@@n\lrlap{\d@c#3\d@c#4\d@c#5\d@c#6\d@c#7\d@c#8}% + \lower\Internote\lrlap{\eightbf#2\kern\s@v@n\guitar@dim}}} +\def\gbarre#1{\zchar\r@gu{\n@v#1\advance\n@v\m@ne + \raise\n@v\guitar@dim\lrlap{\mxsps\char18}}} +\def\gdot#1#2{\zchar\r@gu{\n@v#2\advance\n@v\m@ne\kern\si@\guitar@dim + \kernm#1\guitar@dim\raise\n@v\guitar@dim\rlap{\mxsps\char17}}} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixhor.tex b/macros/musixtex/tex/musixhor.tex new file mode 100644 index 0000000000..fbc73393e1 --- /dev/null +++ b/macros/musixtex/tex/musixhor.tex @@ -0,0 +1,41 @@ +% +% 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\Tenpoint + \input musixsty.tex +\fi + +\immediate\write16{MusiXtextSTYle-horizontal T.98\space<21 October 1999>}% + +\vsize=185mm +\hsize=275mm +\hoffset=297mm +\advance\hoffset -\hsize +\divide\hoffset 2\relax +\advance\hoffset -2.54cm +\voffset -3mm +\tenpoint +\def\horizontalscore{\relax} +%%%%%%%%%%%%%%%%%%%%%%%%% local adjust to be tuned %%%%%%%%%%%%%%%%%%%%%%%%%% +\advance\voffset -5mm +\hoffset=-1.54cm +%%%%%%%%%%%%%%%%%%%%%%%%% local adjust to be tuned %%%%%%%%%%%%%%%%%%%%%%%%%% + +\endinput + diff --git a/macros/musixtex/tex/musixhou.tex b/macros/musixtex/tex/musixhou.tex new file mode 100644 index 0000000000..d0eb65d23b --- /dev/null +++ b/macros/musixtex/tex/musixhou.tex @@ -0,0 +1,58 @@ +% +% 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. +% + +\immediate\write16{MusiXHOUsestyles T.64\space<8 October 1996>}% + +\ifx\undefined\Metron \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +% match the mid of lower chars (only for \tenrm) + +\def\writ@names{\n@loop + \setbox\toks@box\llap{\vbox{\hbox\@to\parindent{% + \hss\csname instrument\romannumeral\noinstrum@nt\endcsname + \hss}\kern\h@lf ex}~~}% + \altportee\altitude \Comp@High\advance\y@v-\ht\toks@box + \advance\altportee\h@lf\y@v \writ@box \repeat} + +% smaller metron + +\def\Metron#1{{\tinynotesize\stemlength\thr@@\eightrm (\zqu 0~~~= #1)}} + +%%% dynamics +\iflongDCfontnames + \font\frtnbxit=\fontid bi1440 +\else\iflongECfontnames + \font\frtnbxit=\fontid bi1440 + \else + \font\frtnbxit=\fontid bxti10 scaled \magstep2 + \fi +\fi +\def\f{\frtnbxit f} +\def\ff{\f\f@kern f} +\def\fff{\ff\f@kern f} +\def\mf{\twelveit m\p@kern\f@kern\f} +\def\mp@{\twelveit m\p@kern\p} +\def\p{\frtnbxit p} +\def\pp{\p\p@kern p} +\def\ppp{\pp\p@kern p} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixhv.tex b/macros/musixtex/tex/musixhv.tex new file mode 100644 index 0000000000..9c24763330 --- /dev/null +++ b/macros/musixtex/tex/musixhv.tex @@ -0,0 +1,180 @@ +% musixhv.tex : Helvetica font definitions for MusiXTeX +% +% usage: +% +% \input musixtex +% \input musixhv +% ... +% +% MusiXhv.tex 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. +% +% MusiXhv.tex 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. +% +% Copyright 2015-2017 Bob Tennent rdt@cs.queensu.ca +% +\immediate\write16{MusiXhv\space<2017/02/10>} +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixhv.tex}\fi +% +% 7pt "Roman" (sans serif), bold, "italic" (oblique), "bold-italic" (bold-oblique), and small-cap +\font\sevenrm=phvr8t at 7pt +\font\sevenbf=phvb8t at 7pt +\font\sevenit=phvro8t at 7pt +\font\sevenbi=phvbo8t at 7pt +\font\sevensc=phvrc8t at 7pt +% +% 8pt +\font\eightrm=phvr8t at 8pt +\font\eightbf=phvb8t at 8pt +\font\eightbi=phvbo8t at 8pt +\font\eightsc=phvrc8t at 8pt +\font\eightit=phvro8t at 8pt +% +% 9pt +\font\ninerm=phvr8t at 9pt +\font\ninebf=phvb8t at 9pt +\font\nineit=phvro8t at 9pt +\font\ninebi=phvbo8t at 9pt +\font\ninesc=phvrc8t at 9pt +% +% 10pt +\font\tenrm=phvr8t at 10pt +\font\tenbf=phvb8t at 10pt +\font\tenit=phvro8t at 10pt +\font\tenbi=phvbo8t at 10pt +\font\tensc=phvrc8t at 10pt +% +% 11pt +\font\elevenrm=phvr8t at 11pt +\font\elevenbf=phvb8t at 11pt +\font\elevenit=phvro8t at 11pt +\font\elevenbi=phvbo8t at 11pt +\font\elevensc=phvrc8t at 11pt +% +% 12pt +\font\twelverm=phvr8t scaled \magstep1 +\font\twelvebf=phvb8t scaled \magstep1 +\font\twelveit=phvro8t scaled \magstep1 +\font\twelvebi=phvbo8t scaled \magstep1 +\font\twelvesc=phvrc8t scaled \magstep1 +% +% 14pt +\font\frtrm=phvr8t scaled \magstep2 +\font\frtbf=phvb8t scaled \magstep2 +\font\frtit=phvro8t scaled \magstep2 +\font\frtbi=phvbo8t scaled \magstep2 +\font\frtsc=phvrc8t scaled \magstep2 +% +% 17pt +\font\svtrm=phvr8t scaled \magstep3 +\font\svtbf=phvb8t scaled \magstep3 +\font\svtit=phvro8t scaled \magstep3 +\font\svtbi=phvbo8t scaled \magstep3 +\font\svtsc=phvrc8t scaled \magstep3 +% +% 20pt +\font\twtyrm=phvr8t scaled \magstep4 +\font\twtybf=phvb8t scaled \magstep4 +\font\twtyit=phvro8t scaled \magstep4 +\font\twtybi=phvbo8t scaled \magstep4 +\font\twtysc=phvrc8t scaled \magstep4 +% +% 25pt +\font\twfvrm=phvr8t scaled \magstep5 +\font\twfvbf=phvb8t scaled \magstep5 +\font\twfvit=phvro8t scaled \magstep5 +\font\twfvbi=phvbo8t scaled \magstep5 +\font\twfvsc=phvrc8t scaled \magstep5 +% +% large fonts for titles +% (If you prefer bold, use \bf) +% +\def\bigtype{\bigfont\rm} +\def\Bigtype{\Bigfont\rm} +\def\BIgtype{\BIgfont\rm} +\def\BIGtype{\BIGfont\rm} +% +% +\font\ppfftwelve=phvbo8t at 8pt +\font\ppffsixteen=phvbo8t at 10pt +\font\ppfftwenty=phvbo8t at 12pt +\font\ppfftwentyfour=phvbo8t at 14pt +\font\ppfftwentynine=phvbo8t at 17pt +% +\def\f{{\ppff f}} +\def\ff{{\ppff ff}} +\def\fp{{\ppff fp}} +\def\fff{{\ppff fff}} +\def\ffff{{\ppff ffff}} +\def\mf{{\ppff mf}} +\def\p{{\ppff p}} +\def\pp{{\ppff pp}} +\def\ppp{{\ppff ppp}} +\def\pppp{{\ppff pppp}} + +% sl fonts needed by musixsty +% +\font\eightsl=phvro8t at 8pt +\font\ninesl=phvro8t at 9pt +\font\tensl=phvro8t at 10pt +\font\twelvesl=phvro8t scaled \magstep1 +\font\frtsl=phvro8t scaled \magstep2 +\font\svtsl=phvro8t scaled \magstep3 +\font\twtysl=phvro8t scaled \magstep4 +\font\twfvsl=phvro8t scaled \magstep5 +% +% +\edef\catcodeat{\the\catcode`\@} +\catcode`\@=11 +% +\def\sF{{\ppff s\p@kern f}} +\def\sfz{{\ppff s\p@kern f\f@kern z}} +\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} + +\def\mp@{{\ppff mp}} +\let\mezzopiano\mp@ +\catcode`\@=\catcodeat + +% +% Redefine accented characters for etex, suggested by David Carlisle: +% +\ifx\documentclass\undefined +\catcode`\@=11 +\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 + +\def\c#1{\leavevmode\ifx c#1\char231 \else\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr + \hidewidth\char11\hidewidth}}\fi\fi} +\catcode`\@=\catcodeat +\fi + +\normtype +\endinput diff --git a/macros/musixtex/tex/musixinv.tex b/macros/musixtex/tex/musixinv.tex new file mode 100644 index 0000000000..4a8d6ae864 --- /dev/null +++ b/macros/musixtex/tex/musixinv.tex @@ -0,0 +1,2 @@ +% still a dummy +\endinput diff --git a/macros/musixtex/tex/musixlit.tex b/macros/musixtex/tex/musixlit.tex new file mode 100644 index 0000000000..f55fb8f826 --- /dev/null +++ b/macros/musixtex/tex/musixlit.tex @@ -0,0 +1,87 @@ +% +% 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. +% + +\immediate\write16{MusiXLITurgical 0.38\space<17 Dec 2016>}% + +\ifx\undefined\oldGclef \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\def\oldGclef{\keychar103} + +\def\cqu{\def\q@u{\musixchar99}\@qu} +\def\cql{\def\q@u{\musixfont\@c}\@ql} +\def\chu{\def\q@u{\musixchar101}\@qu} +\def\chl{\def\q@u{\musixchar102}\@ql} + +\def\cnqu{\def\q@u{\musixchar99}\@nq} +\def\cnql{\def\q@u{\musixfont\@c}\@nq} +\def\cnhu{\def\q@u{\musixchar101}\@nq} +\def\cnhl{\def\q@u{\musixchar102}\@nq} +\def\cqb{\def\q@u{\musixchar99}\@qb} % RDT 2016-12-17 +\def\zcqb{\advancefalse\cqb} % RDT 2016-12-17 + + +% Moved to musixtex.tex. RDT 2015-12-23 +%\def\Hpause#1#2{\zcharnote{#1}{\def\s@r{% +% \vrule\@width.6\p@\@height1\h@lf\internote\@depth1\h@lf\internote}% +% \s@r +% \vrule\@width#2\noteskip\@height\h@lf\internote\@depth\h@lf\internote +% \s@r}} + +\def\Hlonga#1#2{\zcharnote{#1}{\def\s@r{% + \vrule\@width.6\p@\@height1\h@lf\internote\@depth1\h@lf\internote}% + \s@r + \raise\h@lf\internote\rlap{\vrule\@width#2\noteskip + \@height 0.3pt\@depth 0.3pt}% + \raise-\h@lf\internote\hbox{\vrule\@width#2\noteskip + \@height 0.3pt\@depth 0.3pt}% + \s@r}} + +% separated short vrules over every staff (fits only for 1,2,3,5 Lines) + +\def\rul@SEP#1{\n@loop\short@rule\repeat\addspace#1} +\def\short@rule{{\p@loop\y@\altportee\advance\y@\tw@\internote\raise\y@% + \rlap{\vrule\@width\lthick\@height\f@ur\internote}\count@portee\repeat}} +\def\shortbarrules{\let\writ@rule\rul@SEP } + +% separated short vrules between every staff (fits only for 1,2,3,5 Lines) + +\def\rul@int#1{\n@loop\inter@rule\repeat\addspace#1} +\def\inter@rule{{% + \y@iv\altitude \y@v\y@iv + \ifnum\st@ffs>\@ne \@ri \Comp@High\advance\y@v\altitude + \else \ifnum\st@ffs>\z@ \advance\y@v\@ight\internote \fi\fi + \advance\noinstrum@nt\@ne \s@l@ctinstr + \ifnum\st@ffs=\z@ \advance\noinstrum@nt\@ne\s@l@ctinstr \fi + \ifnum\nbinstruments<\noinstrum@nt + \y@iii\y@iv \y@ii\y@iii \advance\y@ii-\y@v \Put@inter@rule + \else + \y@iii\altitude \y@ii\y@iii \advance\y@ii-\y@v \Put@inter@rule + \fi}} +\def\@ri{\n@ii\st@ffs \advance\st@ffs\m@ne + \C@Inter \y@ii\stem@skip + \p@loop \y@iii\altportee \advance\y@iii\interportee + \Put@inter@rule \advance\noport@@\@ne \repeat + \st@ffs\n@ii} +\def\Put@inter@rule{\raise\y@iii\rlap{\vrule\@width\lthick\@depth\y@ii}} +\def\interbarrules{\let\writ@rule\rul@int } + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixlyr.tex b/macros/musixtex/tex/musixlyr.tex new file mode 100644 index 0000000000..fc9aaaf9b1 --- /dev/null +++ b/macros/musixtex/tex/musixlyr.tex @@ -0,0 +1,1162 @@ +%% +%% musixlyr.tex: Convenient lyrics handling for MusiXTeX T.52 or later +%% +%% Copyright (C) 1996-2003 Rainer Dunker +%% +%% This program 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 of the License, or +%% any later version. +%% +%% This program 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 this program; if not, write to the Free Software +%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%% +%% Author: +%% Rainer Dunker +%% Wachtelweg 31 +%% 85591 Vaterstetten +%% Germany +%% +%% E-mail: rainer.dunker@web.de +%% +\ifx\undefined\lyr\else\endinput\fi +\immediate\write16{MusiXLYRics 2.1c\space} +\def\musixlyrversion{2.12} + +\makeatletter + +%%%%%%%%%% +% +% register allocation +% +%%%%%%%%%% +\newtoks\alle@texte + +% internal parameters for setting text +\let\evtl@klein\empty +\let\evtl@komma\empty +\let\evtl@punktweg\empty +\let\evtl@offset\empty +\let\evtl@next@lyr\empty +\newif\if@strich +\newif\iflyr@processing +\newif\if@pmx@nextvoice +\newif\if@lyrmode +\newif\if@hyphen +\newif\ifaux@active +\newif\if@single@token +\newdimen\lyr@shift +\newbox\lyr@box +\newbox\lyr@hyphen@box +\newbox\lyr@linkbox +\newbox\lyr@linkdepthbox +\def\ma@sw{lyr@m} % "main/aux switch" + +% helpers for shuffling data around +\newtoks\@rohtext +\newtoks\@textvar + +\let\text@name\empty + +% public parameters +\newif\ifleftlyr +\newif\ifforcelyrhyphens +\newif\ifshowlyrshift +\newdimen\minlyrrulelength \minlyrrulelength=2mm +\newdimen\minmulthyphens \minmulthyphens=1.5cm +\newdimen\minlyrspace \minlyrspace=3pt +\def\lyrhyphenchar{-} +\newbox\lyrstrutbox +\def\lyrlinestartpos{-10cm } +\def\oldlyrlinestart{\def\lyrlinestartpos{0pt }} % to restore 2.1 behaviour + +\def\lyrlog#1{\immediate\write16{#1}} % just for debugging convenience + +% for testing token lists for emptyness with \ifx +\def\emp@tst{\empty@test@errmsg} +\def\empty@test@errmsg{% + \errmessage{This shouldn't happen; you have found a musixlyr bug}} + +%%%%%%%%%% +% +% lyrics definition +% +%%%%%%%%%% +% set up text completely +\def\setlyrics#1#2{% iterative variant + % Parameter: + % #1 - lyrics line name + % #2 - text + \@rohtext={#2 -}% + \@textvar={}% + %\lyrlog{setlyrics{#1}, raw text: \the\@rohtext}% + \loop + \expandafter\ifx\expandafter\emp@tst\the\@rohtext\emp@tst % no more text + \let\@weiter n\else \let\@weiter j% + \fi + \ifx\@weiter j% + \expandafter\split@lyr@by@hyphens\the\@rohtext\@end + \repeat + \expandafter\xdef\csname dertext@#1\endcsname{\the\@textvar}% + \expandafter\xdef\csname nochtext@#1\endcsname{\the\@textvar}% + %\lyrlog{setlyrics{#1}: \the\@textvar}% + \initialize@verse{#1}} + +\def\appendlyrics#1#2{% iterative variant + % Parameter: + % #1 - lyrics line name + % #2 - text + % test whether lyrics line name already defined + \expandafter\ifx\csname stp@#1\endcsname\relax + % if not: set it up newly + \setlyrics{#1}{#2}% + \else + % if yes: preprocess new material, then append it to existing stuff + \@rohtext={#2 -}% + \@textvar={}% + %\lyrlog{appendlyrics{#1}, raw text: \the\@rohtext}% + \loop + \expandafter\ifx\expandafter\emp@tst\the\@rohtext\emp@tst % no more text + \let\@weiter n\else \let\@weiter j% + \fi + \ifx\@weiter j% + \expandafter\split@lyr@by@hyphens\the\@rohtext\@end + \repeat + % + % properly append new material to \dertext@#1 + \toks@=\expandafter\expandafter\expandafter{\csname dertext@#1\endcsname}% + \expandafter\test@final@hyphen@i\the\toks@\@end + \expandafter\xdef\csname dertext@#1\endcsname{\the\toks@\the\@textvar}% + % + % properly append new material to \nochtext@#1 + \toks@=\expandafter\expandafter\expandafter{\csname nochtext@#1\endcsname}% + \expandafter\ifx\expandafter\emp@tst\the\toks@\emp@tst + % pending text empty - don't call \test@final@hyphen + \else + \expandafter\test@final@hyphen@i\the\toks@\@end + \fi + \expandafter\xdef\csname nochtext@#1\endcsname{\the\toks@\the\@textvar}% + %\lyrlog{appendlyrics{#1}: \the\@textvar}% + \fi} + +% separate hyphens from syllables +\def\split@lyr@by@hyphens#1-#2\@end{% + % #1: text before first hyphen + % #2: text after first hyphen; may be empty + \ifx\emp@tst#2\emp@tst % -> no hyphen present + \@textvar=\expandafter{\the\@textvar#1}% + \else % -> hyphen present + \@textvar=\expandafter{\the\@textvar#1 @}% + \fi + \@rohtext={#2}% + %\lyrlog{splitlyrics 1: \the\@textvar}% + %\lyrlog{splitlyrics 2: \the\@rohtext}% + } + +% helper macros for \appendlyrics, handling the case that pre-existing +% lyrics material ends with an open hyphen +\def\test@final@hyphen@i#1 \@end{% + % truncate trailing space, then proceed with detecting a trailing @ + \test@final@hyphen@ii#1@@\@end} +\def\test@final@hyphen@ii#1@@#2\@end{% + \ifx\emp@tst#2\emp@tst + % no trailing, open hyphen + %\lyrlog{No trailing hyphen: #1}% + \else + % reset \toks@ so that trailing @ is not longer followed by a space + \toks@={#1@}% + %\lyrlog{Trailing hyphen: #1}% + \fi} + +% copy whole text under different name +\def\copylyrics#1#2{% + % #1 - existing text name + % #2 - new text name + % text still undefined? + \expandafter\ifx\csname dertext@#1\endcsname\relax + \errmessage{Trying to copy undefined verse "#1" to "#2"}% + \setlyrics{#2}{UNDEFINED}% + \else + \expandafter\let\expandafter\text@copy\csname dertext@#1\endcsname + \global\expandafter\let\csname dertext@#2\endcsname\text@copy + \global\expandafter\let\csname nochtext@#2\endcsname\text@copy + \initialize@verse{#2}% + \fi} + +% at 1st definition of a text name +\def\initialize@verse#1{% + % test whether lyrics line name already defined + \expandafter\ifx\csname stp@#1\endcsname\relax + \expandafter\xdef\csname stp@#1\endcsname{\lyrlinestartpos}% tracks horizontal progress + \global\expandafter\let\csname cont@#1\endcsname\relax% context stuff + \expandafter\gdef\csname zwr@#1\endcsname{0}% flag for hyphen/rule status + % for layout definitions + \global\expandafter\let\csname llay@#1\endcsname\relax + % switch on auto-text + {\def\text@name{#1}\lyricson}% + % insert in list of all defined text names + \global\alle@texte=\expandafter{\the\alle@texte#1,}% + \fi} + +% just for more elegance ... +\def\if@multistaff{\ifnum\st@ffs>1 } + +\def\set@texte#1#2{% + % assign assigned lyrics lines to \@texte + % or \empty in case they are empty + % #1: instrument number + % #2: staff number of instrument + \expandafter\let\expandafter\@texte\csname\ma@sw#1-#2\endcsname + \ifx\@texte\relax\let\@texte\empty\fi} + +\def\set@texte@current#1{% + % apply \set@texte to current context + % using PMX, automatically switch to aux lyrics where required + \switch@pmx@aux{% + % get the verses + \ifnum\st@ffs>1 % multi-staff instrument + \set@texte{\the\noinstrum@nt}{\the\noport@@}% + \else + \set@texte{\the\noinstrum@nt}{1}% + \fi + % perform given action + #1}} + +\def\loop@texte#1\@repeat{% + % assumption: \@texte is already set properly, may be empty + % #1: action to be executed + \ifx\@texte\empty\else + \expandafter\loop@texte@step\@texte\@end{#1}% + \fi} + +\def\loop@texte@step#1,#2\@end#3{% + % assumption: text list is not empty, #1 contains list head + % #1: text list head + % #2: text list tail + % #3: action to be executed + % + % perform action on first text + \def\text@name{#1}% + #3\relax + % + % prepare iteration + \ifx\emp@tst#2\emp@tst % list tail empty + \let\@iterate \empty % stop looping + \let\text@name\empty % reset working environment + \else + \def\@iterate{\loop@texte@step#2\@end{#3}}% + \fi + \@iterate} + +% assign text name to staff +\def\assignlyrics#1{% for single-staff instruments + % #1: instrument number + \assignlyricsmulti{#1}1} + +\def\assignlyricshere#1{% assign lyrics to current instrument/staff context + % #1: comma-separated list of text names + \switch@pmx@aux{% + \ifnum\st@ffs>1 % multi-staff instrument + \assignlyricsmulti{\the\noinstrum@nt}{\the\noport@@}{#1}% + \else + \assignlyrics{\the\noinstrum@nt}{#1}% + \fi}} + +\def\assignlyricsmulti#1#2#3{% + % #1: instrument number + % #2: staff number of instrument + % #3: comma-separated list of text names + % gather farthest right current position + % of currently assigned lyrics lines + \y@v=\lyrlinestartpos + \set@texte{#1}{#2}% + \loop@texte + % starting position greater than retrieved so far? + \ifdim\csname stp@\text@name\endcsname > \y@v + \y@v=\csname stp@\text@name\endcsname % advance maximum + \fi + \@repeat + % + % new text names list non-empty -> append comma + \ifx\emp@tst#3\emp@tst + \expandafter\global\expandafter\let\csname\ma@sw#1-#2\endcsname\relax + \else + \expandafter\gdef\csname\ma@sw#1-#2\endcsname{#3,}% + \fi + % set parameters according to newly assigned lyrics lines + \set@texte{#1}{#2}% + \loop@texte + % check for existence + \expandafter\ifx\csname stp@\text@name\endcsname\relax + \errmessage{Trying to assign undefined verse "\text@name"}% + \expandafter\setlyrics\expandafter{\text@name}{EMPTY}% + \fi + \reset@params + \@repeat} + + +\def\reset@params{% + \expandafter\xdef\csname stp@\text@name\endcsname{\the\y@v}% + \expandafter\gdef\csname zwr@\text@name\endcsname{0}} + + +% +% reset horizontal positioning parameters of all lyrics lines +% +\def\resetlyrics{% + \edef\@texte{\the\alle@texte}% + \y@v=\lyrlinestartpos + \loop@texte \reset@params \@repeat} + + +%%%%%%%%%% +% +% process lyrics verse-wise +% +%%%%%%%%%% +% same action for all assigned verses +\def\forall@verses#1{% + % #1: action to be executed + \ifx\text@name\empty + % perform action for all assigned verses + \set@texte@current{% + \ifx\@texte\empty\else + \vplace@lyrics{\loop@texte \hbox{\lyr@strut #1}\@repeat}% + \fi}% + \else + % text name already selected -> perform action for this one only + #1% + \fi} + + +% specify separate actions per verse +\def\verses#1{% + % #1: comma-separated list of actions (from top to bottom) + \set@texte@current{% + \def\@param{#1}% running variable for per-text actions + \vplace@lyrics{% + \loop@texte \expandafter\one@verse\@param,\@end \@repeat}}} + +\def\one@verse#1,#2\@end{% + % #1: action list head = action for current verse + % #2: action list tail = actions for remaining verses + \def\@param{#2}% + % perfrom action + \hbox{\lyr@strut #1}} + + +%%%%%%%%%% +% +% line spacing for multiple verses +% +%%%%%%%%%% +\def\lyr@strut{\copy\lyrstrutbox} +\def\setlyrstrut{% set up strut according to currently active font + \setbox0=\hbox{()}% + \setbox\lyrstrutbox=\hbox{\vrule height 1.1\ht0 depth 1.1\dp0 width\z@}} +\setlyrstrut % initialize + + +%%%%%%%%%% +% +% retrieve text by syllable +% +%%%%%%%%%% +\def\next@lyr{% + \expandafter\let\expandafter\@nochtext\csname nochtext@\text@name\endcsname + %\show\@nochtext + \ifx\@nochtext\empty + % no more text + \@hyphenfalse\@lyric{???}% + \else + \@textvar=\expandafter{\@nochtext}% + \expandafter\next@syllable\the\@textvar\relax\relax + \fi} + +\def\next@syllable#1 #2#3\relax{% + % #1 - first syllable + % #2 - either hyphenation symbol @ + % or \relax (if text ends after #2) + % or 1st char/group of rest text + % #3 - rest text, may be empty + \parse@melisma{#2}{#3}#1_\@end} + +\def\test@single@token#1#2\@end{% + % #2 is empty if argument consists of a single token + \ifx\emp@tst#2\emp@tst + \@single@tokentrue + \else + \@single@tokenfalse + \fi} + +\def\parse@melisma#1#2#3_#4\@end{% parse trailing underscores + % #1: either hyphenation indicator @ + % or \relax (if text ends after #1), + % or 1st char/group of rest text + % #2: rest text, may be empty + % #3: current syllable; may be empty if melisma pending + % #4: trailing underscores, if any, or + % melisma notes number followed by single underscore, or + % empty if no melisma + % + % evaluate hyphenation sign + \ifx @#1% + \@hyphentrue + \@textvar={#2}% may be empty + \else + \@hyphenfalse + % decide rest text (#1 was no hyphen sign) + \ifx\relax#1% current syllable is final syllable + \@textvar={}% + \else + \test@single@token#1\@end % #1 may have been grouped + \if@single@token + \@textvar={#1#2}% + \else + \@textvar={{#1}#2}% + \fi + \fi + \fi + % + % melisma pending? + \ifx\emp@tst#4\emp@tst % no melisma + \let\melisma@spec\empty + \@lyric{\evtl@klein{\evtl@punktweg{#3}}\evtl@komma}% + \else % melisma + \ifx\emp@tst#3\emp@tst % syllable empty, d.i. in mid-melisma + \parse@melisma@tail#4\@end + \ifx\melisma@spec\empty % final melisma note + \lyrruleend + \fi + \else % syllable non-empty, d.i. at melisma start + \leftlyrtrue\@strichtrue + \parse@melisma@start#4\@end + \@lyric{\evtl@klein{\evtl@punktweg{#3}}\evtl@komma}% + \fi % at melisma start + \fi % in melisma + % + % set remaining text + \expandafter\xdef + \csname nochtext@\text@name\endcsname{\melisma@spec\the\@textvar}} + +\def\parse@melisma@start#1_\@end{% + % Cut trailing underscore and attach it at argument head. + % For underscore sequences, the effect is void. + % For numbers, it converts "num_" to "_num". + % Moreover, append a single space. + \def\melisma@spec{_#1 }} + +\def\parse@melisma@tail#1_\@end{% + % #1: either trailing underscores minus one + % or melisma notes number + % or empty + \ifx\emp@tst#1\emp@tst % no more underscores + \let\melisma@spec\empty + \else + \parse@melisma@tail@ii#1\@end + \fi} + +\def\parse@melisma@tail@ii#1#2\@end{% helper for deciding melisma spec type + % #1#2: either trailing underscores minus one + % or melisma notes number + \if#1_% % underscore sequence given + \def\melisma@spec{#1#2 }% + \else % number given + \ifnum#1#2>1 % more melisma notes pending + \count@=#1#2 + \advance\count@\m@ne + \edef\melisma@spec{_\the\count@\space}% + \else % no more melisma notes + \let\melisma@spec\empty + \fi + \fi} + +\def\@lyric#1{% + % #1: Text + \evtl@offset + % Alles Folgende ist Argument fuer obiges \evtl@offset: + {\csname llay@\text@name\endcsname% Layoutkontext abrufen + \lyr@processingtrue + \setbox\lyr@box=\hbox{#1}% + \setbox\lyr@hyphen@box=\hbox{\lyrhyphenchar}% + % Zwischenraum zu voriger Silbe ermitteln: + \get@lyrspace + \ifleftlyr\else + % Silbe zentriert -> Zwischenraum entspr. kleiner: + \advance\y@v -0.5\wd\lyr@box + \advance\y@v 0.5\qn@width % halbe Notenkopfbreite dazu + \fi + % Bindestrich von voriger Silbe anhaengig? + \expandafter\ifnum\csname zwr@\text@name\endcsname=2 + % Minimalzwischenraum entsprechend aendern: + \ifforcelyrhyphens + % Min. Zw.-R. mindestens so breit wie Bindestrich: + \ifdim\minlyrspace < \wd\lyr@hyphen@box + \minlyrspace=\wd\lyr@hyphen@box + \fi + \else + \minlyrspace=0pt % % kein Zwischenraum noetig + \fi + \fi + \ifdim\y@v < \minlyrspace % Zwischenraum zu klein? + \lyr@shift=\minlyrspace % Silbe um Differenz nach rechts verschieben + \advance\lyr@shift -\y@v + \y@v=\minlyrspace % Zwischenraumbreite = geg. Minimum + \else + \expandafter\ifnum\csname zwr@\text@name\endcsname=2 % Bindestrich anhaengig? + \ifforcelyrhyphens\else % Bindestrich nicht erzwungen? + \ifdim\y@v < \wd\lyr@hyphen@box % Zwischenraum zu schmal? + \advance\lyr@shift -\y@v % => Zw.raum ganz wegnehmen + % Dank an Sebastian Clauss fuer diese Verbesserung + \fi + \fi + \fi + \fi + \rlap{% + \hskip\lyr@shift + {\ifleftlyr + \aftergroup\rlap % linksbuendig + \else + \aftergroup\qlrlap % zentriert + \fi}% + % Alles Folgende ist Argument fuer obiges \qlrlap bzw. \rlap: + {% Ist von voriger Silbe noch ein Bindestrich anhaengig? + \expandafter\ifnum\csname zwr@\text@name\endcsname=2 + % limit hyphens at line beginning to zero position + \ifdim\csname stp@\text@name\endcsname < \z@ + \advance\y@v \csname stp@\text@name\endcsname \fi + % Bindestrich nur setzen, wenn Platz genug vorhanden: + \ifdim\y@v < \wd\lyr@hyphen@box\else + \print@hyphen + \fi + \fi + \ifshowlyrshift + % Mit Rechteck Wortverschiebung zeigen: + \llap{\vrule width \lyr@shift height \ht\strutbox}% + \fi + \unhcopy\lyr@box % Wort setzen + % Startposition des nachfolgenden Zwischenraums festhalten: + \getcurpos + \advance\y@v by \lyr@shift + \ifleftlyr + \advance\y@v \wd\lyr@box + \else + \advance\y@v 0.5\wd\lyr@box + \advance\y@v 0.5\qn@width % halbe Notenkopfbreite dazu + \fi + \expandafter\xdef\csname stp@\text@name\endcsname{\the\y@v}% Startposition setzen + \if@hyphen % Bindestrich gefordert? + \expandafter\gdef\csname zwr@\text@name\endcsname{2}% + \else + \if@strich % Verlaengerungs-Strich gefordert? + \expandafter\gdef\csname zwr@\text@name\endcsname{1}% + \else % nichts gefordert + \expandafter\gdef\csname zwr@\text@name\endcsname{0}% + \fi + \fi}}}} + +\def\print@hyphen{% + \llap{\hbox to \y@v{% + % Zwischenraum mit "Strich-Kette" ausfuellen: + \loop + \hfil\lyrhyphenchar\hss% rechter Raum darf am Systemende negativ werden + \advance\y@v by -\minmulthyphens + \ifdim\y@v > 0pt% + \repeat}}} + +\def\get@lyrspace{% + \getcurpos + \advance\y@v by -\csname stp@\text@name\endcsname + \relax} + +% set lyrpos to zero if less than that +\def\limit@lyrpos{% + \ifdim\csname stp@\text@name\endcsname < \z@ + \expandafter\xdef\csname stp@\text@name\endcsname{\the\z@}\fi} + +% Verlaengerungs-Striche abschliessen: +\def\lyrruleend{\forall@verses\lyrrule@end} + +\def\lyrrule@end{% + \expandafter\ifcase\csname zwr@\text@name\endcsname + % 0 -> kommt nicht vor + \or + % 1 -> Strich anhaengig: + \roff{% Zum rechten Notenkopf-Rand + \limit@lyrpos\get@lyrspace \print@lyr@rule + % Zwischenraum-Startposition festhalten, wenn Wort nicht nach + % rechts darueber hinausragt: + \getcurpos + \ifdim\csname stp@\text@name\endcsname < \y@v + \expandafter\xdef\csname stp@\text@name\endcsname{\the\y@v}% + \fi}% + % Einstellung zuruecksetzen: + \expandafter\gdef\csname zwr@\text@name\endcsname{0}% + \or + % 2 -> Bindestrich anhaengig -> nichts tun + \or + % 3 -> fortgesetzter Bindestrich anhaengig + % -> Einstellung fuer Bindestrich-Einfuegen an nächster Note setzen + \expandafter\gdef\csname zwr@\text@name\endcsname{2}% + \fi} + +\def\print@lyr@rule{% + % Kleiner Zwischenraum zur vorherigen Silbe: + \advance\y@v -2pt + \ifdim \y@v > \minlyrrulelength + \llap{\vrule\@width\y@v\@height\lthick\@depth0pt}% + \fi} + + +%%%%%%%%%% +% +% Textstellen per Label anspringen +% +%%%%%%%%%% +\def\llabel#1{}% Damit Kennzeichnung bei der Ausgabe ohne Effekt bleibt + +\def\golyr#1{\forall@verses{\@golyr{#1}}} + +\def\@golyr#1{{% + \expandafter\let\expandafter\@nochtext\csname dertext@\text@name\endcsname + \def\query@label{#1}% + \loop + \expandafter\find@llabel\@nochtext\ende + \ifx\query@label\cur@label\let\@weiter n\else \let\@weiter j\fi + \if\@weiter j\repeat + \expandafter\global\expandafter\let + \csname nochtext@\text@name\endcsname\@nochtext}} + +\def\find@llabel#1\llabel#2#3\ende{% + % #1 - Text vor erstem \llabel + % #2 - naechstfolgender \llabel-Name + % #3 - Resttext + \def\cur@label{#2}% + \def\@nochtext{#3}} + + +%%%%%%%%%% +% +% Offene Silbentrennungen und -verlaengerungen am Systemende abschliessen +% +%%%%%%%%%% +\let\@orig@z@suspend\z@suspend +\def\z@suspend{% + \znotes\sysend@lyrics\empty\en + \znotes\sysend@lyrics\auxlyr\en + \@orig@z@suspend} + +\def\sysend@verse{% + % Flag auswerten: + \ifnum\csname zwr@\text@name\endcsname = 1 % Verlaengerungs-Strich anhaengig + % Platz zum rechten Systemrand, damit Strich nicht in Taktstrich ragt + \loffset{0.3}{\limit@lyrpos\get@lyrspace\print@lyr@rule}% + \else\ifnum\csname zwr@\text@name\endcsname > 1 % Bindestrich anhaengig: + \csname llay@\text@name\endcsname% Layoutkontext abrufen + \limit@lyrpos\get@lyrspace\print@hyphen + % als forgesetzten Bindestrich fortfuehren + \expandafter\gdef\csname zwr@\text@name\endcsname{3}% + \fi\fi + % Startposition fuer naechstes System zuruecksetzen: + \expandafter\xdef\csname stp@\text@name\endcsname{\lyrlinestartpos}} + +\def\sysend@lyrics#1{% + % #1: \auxlyr or \empty + #1{\let\switch@pmx@aux\empty \forall@verses\sysend@verse}% + \if@multistaff + % loop over staves of instrument + \ifnum \noport@@ < \st@ffs + \def\@next{\nextstaff\sysend@lyrics#1}% + \else % staves of instrument finished; continue with next instrument + \sysend@lyrics@instrum@loop#1% + \fi + \else % single-staff instrument + \sysend@lyrics@instrum@loop#1% + \fi + % iterate + \@next} + +\def\sysend@lyrics@instrum@loop#1{% + % prepare instruments loop + \ifnum \noinstrum@nt < \nbinstruments + \def\@next{\nextinstrument\sysend@lyrics#1}% + \else % \noinstrum@nt >= \nbinstruments + \let\@next\empty + \fi} + + +%%%%%%%%%% +% +% Zeilenspezifisches Layout festlegen +% +%%%%%%%%%% +\def\lyrlayout#1{% + \forall@verses{% + \expandafter\gdef\csname llay@\text@name\endcsname{#1}% + % Wenn gerade Text verarbeitet wird, Kontext sofort abrufen: + \iflyr@processing #1\fi}} + +% +% Kontextbehandlung fuer Textnamen: +% +% Aktion zu Kontext hinzufuegen: +\def\add@context#1{% + \toks@=\expandafter\expandafter\expandafter + {\csname cont@\text@name\endcsname #1}% + \expandafter\xdef\csname cont@\text@name\endcsname{\the\toks@}} + +% Kontext abrufen: +\def\@context{% + \expandafter\let\expandafter\der@kontext\csname cont@\text@name\endcsname + \clear@context + \der@kontext} + +% Kontext loeschen: +\def\clear@context{% + \global\expandafter\let\csname cont@\text@name\endcsname\empty} + + +%%%%%%%%%% +% +% Zusaetzliche Textzeilen oberhalb der Notenzeile (auxiliary lyrics) +% +%%%%%%%%%% +\let\enableauxlyrics\empty % just for backward compatibility + +% Befehle auf auxlyrics beziehen: +\def\auxlyr#1{{% + \def\ma@sw{lyr@a}% + \aux@activetrue + #1}} + + +%%%%%%%%%% +% +% vertical lyrics positioning +% +%%%%%%%%%% +\def\lyrraise#1{% + % #1: instrument number + \lyrraisemulti{#1}1} + +\def\lyrraisehere#1{% + % #1: position/offset + \switch@pmx@aux{% + \ifnum\st@ffs>1 % multi-staff instrument + \lyrraisemulti{\the\noinstrum@nt}{\the\noport@@}{#1}% + \else + \lyrraise{\the\noinstrum@nt}{#1}% + \fi}} + +\def\lyrraisemulti#1#2#3{% + % #1: instrument number + % #2: staff of instrument + % #3: position/offset + \toks@=\expandafter{\csname l@raise#1-#2\endcsname}% + \expandafter\ifx\the\toks@\relax + % raise parameter still unset + \expandafter\lyrraise@init\the\toks@ + \fi + % now set raise parameter + \expandafter\expandafter\expandafter + \lyr@raise@multii\the\toks@\@end{#1}{#2}{#3}% + %\lyrlog{raise #1-#2: \expandafter\empty\the\toks@}% +} + +\def\lyr@raise@multii#1@#2\@end#3#4#5{% + % #1: current main position/offset + % #2: current aux position/offset + % #3: instrument number + % #4: staff of instrument + % #5: new position/offset + \expandafter\xdef\csname l@raise#3-#4\endcsname{% + \ifaux@active #1@#5\else #5@#2\fi}} + +% be backward compatible +\let\setsongraise@orig\setsongraise +\def\setsongraise#1#2{\setsongraise@orig{#1}{#2}\lyrraise{#1}{b#2}} +\def\auxsetsongraise#1#2{\auxlyr{\lyrraise{#1}{b#2}}} + + +\def\lyrraise@init#1{% + % #1: control sequence to be set to default value + \gdef#1{b0pt@a0pt}} + + +% vertically place lyrics columns +% replaces MusiXTeX's \C@tx +\def\vplace@lyrics#1{% + % find out applicable positioning settings + \edef\placelyr@staff{\ifnum\st@ffs>1 \the\noport@@ \else 1\fi}% + \toks@=\expandafter + {\csname l@raise\the\noinstrum@nt-\placelyr@staff\endcsname}% + % eventually initialize lyrraise setting first + \expandafter\ifx\the\toks@\relax % lyrraise still unset + \expandafter\lyrraise@init\the\toks@ + \fi + \expandafter\expandafter\expandafter\vplace@lyricsii\the\toks@\@end{#1}} + +\def\vplace@lyricsii#1#2@#3#4\@end#5{% + % #1: main lyrics positioning switch (a/b) + % #2: main lyrics raise value + % #3: aux lyrics positioning switch (a/b) + % #4: aux lyrics raise value + % #5: lyrics material to be issued + % + % decice main/aux context + % + \ifaux@active \let\lyr@ab#3\toks@={#4}% + \else \let\lyr@ab#1\toks@={#2}% + \fi + % + % decide placement situation: above/below/in-mid of system or instrument + % + \if\lyr@ab a% above staff + \ifnum\placelyr@staff<\st@ffs % non-highest staff of multiple staves + \vplaceLyricsAboveMultistaff{#5}% + \else % single or highest staff of instrument + \ifnum\noinstrum@nt<\nbinstruments % lyrics go above instrument + \vplaceLyricsAboveInstrument{#5}% + \else % lyrics go into top margin + \vplaceLyricsTopMargin{#5}% + \fi + \fi + \else % below staff + \ifnum\placelyr@staff>1 % non-lowest staff of multiple staves + \vplaceLyricsBelowMultistaff{#5}% + \else % single or lowest staff of instrument + \ifnum\noinstrum@nt>1 % lyrics go below instrument + \vplaceLyricsBelowInstrument{#5}% + \else % lyrics go into bottom margin + \vplaceLyricsBottomMargin{#5}% + \fi + \fi + \fi} + +% +% user-supersedable placement calculations +% +\def\vplaceLyricsBelowMultistaff#1{% + % #1: lyrics material + % reduced \C@Tx algorithm + \y@iv=\the\toks@\relax + \C@Inter % compute \stem@skip (?) + \advance\y@iv -0.5\stem@skip + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}} + +\def\vplaceLyricsAboveMultistaff#1{% + % #1: lyrics material + % reduced \C@Tx algorithm + \y@iv=\the\toks@\relax + \C@Inter % compute \stem@skip (?) + \advance\y@iv -0.5\stem@skip + % add height difference to base line of upper staff + \advance\y@iv \interportee + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}} + +\def\vplaceLyricsBottomMargin#1{% + % #1: lyrics material + % based on \C@tx + \y@iv=\the\toks@\relax + \advance\y@iv -\staffbotmarg + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}} + +\def\vplaceLyricsTopMargin#1{% + % #1: lyrics material + % based on \C@tx, "mirrored" bottom margin situation + \begingroup % seems to be necessary to make \Comp@High local; + % problem occurred with helper lines for low/high notes + \y@iv=\the\toks@\relax + \advance\y@iv \stafftopmarg + \Comp@High \advance\y@iv\y@v % \y@v = total height of instrument + \advance\y@iv \altitude % for multi-staff: + \advance\y@iv-\altportee % reduce by base height of current staff + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}% + \endgroup} + +\def\vplaceLyricsBelowInstrument#1{% + % #1: lyrics material + % assumption: \noinstrum@nt > 1 + % based on \C@tx + \y@iv=\the\toks@\relax + \multiply\y@iv 2 % balance division by 2 below + \advance\noinstrum@nt\m@ne + \advance\y@iv -\csname interinstrument\romannumeral\noinstrum@nt\endcsname + \C@Inter % compute \stem@skip (?) + \advance\y@iv -\stem@skip + \divide\y@iv\tw@ + \advance\noinstrum@nt\@ne + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}} + +\def\vplaceLyricsAboveInstrument#1{% + % #1: lyrics material + % assumption: \noinstrum@nt < \nbinstruments + % analogous to \C@tx, but refers to upper instrument instead + \y@iv=\the\toks@\relax + \multiply\y@iv 2 % balance division by 2 below + \advance\y@iv -\csname interinstrument\romannumeral\noinstrum@nt\endcsname + \C@Inter % compute \stem@skip (?) + \advance\y@iv -\stem@skip + \divide\y@iv\tw@ + % add height difference to base line of upper instrument + \begingroup + \advance\y@iv-\altportee \advance\noinstrum@nt\@ne \s@l@ctinstr + \advance\y@iv \altitude + \raise\y@iv\vbox\@to\z@{\vss\offinterlineskip#1\vss}% + \endgroup} + + +%\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 % compute \stem@skip +% \advance\y@iv\stem@skip +% \divide\y@iv\tw@ +% \advance\noinstrum@nt\@ne +% \fi +% \advance\y@iv-\csname T@R\romannumeral\noinstrum@nt\endcsname +% \lower\y@iv\uplap} +%\def\uplap#1{\vbox\@to\z@{\vss#1}} + + +%%%%%%%%%% +% +% Textsatz-Automatik +% +%%%%%%%%%% +% Text automatisch unter alle "spacing"-Noten eines Systems: +\let\orig@writ@note\writ@note +\def\writ@note{% + \ifnum\n@i<\@c % Bedingung fuer's Notenschreiben in \writ@note (warum?) +% \ifx\st@m\beamst@m +% \uptext{\csname s@bl\balken@nr\endcsname}% +% \else + \decide@lyrmode + \main@aux@or@not{\forall@verses{\@context\evtl@next@lyr}}% +% \fi + \fi + \orig@writ@note} + +\def\lyrmode@no {\def\main@aux@or@not##1{}} +\def\lyrmode@main{\def\main@aux@or@not##1{##1}} +\def\lyrmode@aux {\let\main@aux@or@not\auxlyr} +\let\pmx@auxmode\lyrmode@aux + +% Feststellen, ob Haupt- oder Nebentext oder gar nichts gesetzt werden soll: +\ifx\nextvoice\undefined % ohne PMX + \def\decide@lyrmode{% + \call@lyrmode + \if@lyrmode \decide@stem@direction % Notenhals-Automatik + \else % manuell, nur "spacing"-Noten + \ifadvance \lyrmode@main + \else \lyrmode@no + \fi + \fi} + \def\decide@stem@direction{% + \ifx\st@m\upst@m \lyrmode@aux \else + \ifx\st@m\up@flag \lyrmode@aux \else + \ifx\st@m\downst@m \lyrmode@main\else + \ifx\st@m\down@flag\lyrmode@main\else + \ifx\st@m\setst@m \lyrmode@no \else % kein Hals + \ifx\st@m\resetst@m\lyrmode@no \else + \ifx\st@m\beamst@m + \expandafter\ifx\csname s@bl\balken@nr\endcsname o\lyrmode@aux + \else\lyrmode@main + \fi + \else\errmessage{invalid \string\st@m\space setting}% + \fi\fi\fi\fi\fi\fi\fi} +\else % mit PMX + \def\decide@lyrmode{% + \ifadvance % nur "spacing"-Noten + \call@lyrmode + \if@pmx@nextvoice % Oberstimme + \if@lyrmode\lyrmode@main \else\pmx@auxmode \fi + \else % Unterstimme + \if@lyrmode\pmx@auxmode \else\lyrmode@main \fi + \fi + \else + \lyrmode@no % non-spacing Note + \fi} + \let\orig@nextvoice\nextvoice % \nextvoice erweitern + \def\nextvoice{\orig@nextvoice\@pmx@nextvoicetrue} +\fi + +\def\call@lyrmode{% activate lyrmode setting of current staff/instrument + \ifnum\st@ffs>1 % multi-staff instrument + \csname zlm@\the\noinstrum@nt-\the\noport@@\endcsname + \else % single-staff instrument + \csname zlm@\the\noinstrum@nt-1\endcsname + \fi} + +\def\switch@pmx@aux#1{% + % using PMX, automatically activate auxlyr context for #1 after \nextvoice + \ifx\nextvoice\undefined % not using PMX + #1% + \else % using PMX + \call@lyrmode + \if@pmx@nextvoice % upper PMX voice + \if@lyrmode\lyrmode@main \else\pmx@auxmode \fi + \else % lower PMX voice + \if@lyrmode\pmx@auxmode \else\lyrmode@main \fi + \fi + \main@aux@or@not{#1}% + \fi} + + + +% lyrmode umschalten: +\def\switch@lyrmode#1#2#3{% + % #1: instrument number + % #2: staff-of-instrument number + % #3: lyrmode setting + \ifnum#1=0 % % alle Zeilen einbeziehen + \switch@lyrmode@all@instrum#3% + \else % nur 1 Zeile + \global\expandafter\let\csname zlm@#1-#2\endcsname=#3% + \fi} + +% loop over all possible instruments +\def\switch@lyrmode@all@instrum#1{% + \m@loop \switch@lyrmode@all@staves#1\repeat} + +% loop over 4 possible staves of instrument +\def\switch@lyrmode@all@staves#1{% + \begingroup + \count@=0 + \loop + \advance\count@ 1 + \switch@lyrmode{\the\noinstrum@nt}{\the\count@}#1% + \ifnum\count@<4 \repeat + \endgroup} +% ... nicht wahnsinnig effizient, zugegeben ... + + +\def\lyrmodenormal#1{\lyrmodenormalmulti{#1}1} +\def\lyrmodealter #1{\lyrmodealtermulti {#1}1} + +\def\lyrmodenormalmulti#1#2{\switch@lyrmode{#1}{#2}\@lyrmodefalse} +\def\lyrmodealtermulti #1#2{\switch@lyrmode{#1}{#2}\@lyrmodetrue } + +\def\lyrmodenormalhere{\lyrmode@here\@lyrmodefalse} +\def\lyrmodealterhere {\lyrmode@here\@lyrmodetrue } + +\def\lyrmode@here#1{% apply lyrmode to current instrument/staff context + % #1: lyrmode switch + \if@multistaff + \switch@lyrmode{\the\noinstrum@nt}{\the\noport@@}#1% + \else + \switch@lyrmode{\the\noinstrum@nt}1#1% + \fi} + +\lyrmodenormal0 % auf "normal" initialisieren + +% fuer Halsrichtungs-Automatik: Balkenlage in \s@bl vermerken +\def\balk@nlage#1{\global\expandafter\let + \csname s@bl\balken@nr\endcsname #1\relax} +\let\orig@i@bu\i@bu \def\i@bu{\balk@nlage o\orig@i@bu}% ben +\let\orig@i@bl\i@bl \def\i@bl{\balk@nlage u\orig@i@bl}% nten + +\let\orig@s@l@ctbeam\s@l@ctbeam +\def\s@l@ctbeam#1\relax{\orig@s@l@ctbeam#1\relax \xdef\balken@nr{\number\n@i}} + + +% Auto-Text ein- und ausschalten (innerhalb \notes...\enotes): +\def\lyricson{\forall@verses{\add@context\verse@on@context}} +\def\verse@on@context{% + \let\evtl@next@lyr\next@lyr + \add@context\verse@on@context} + +\def\lyricsoff{\forall@verses\clear@context} + +\def\lyric {\let\evtl@hyph\@hyphenfalse\futurelet\ast@risk\lyric@i} +\def\lyrich{\let\evtl@hyph\@hyphentrue \futurelet\ast@risk\lyric@i} + +\def\lyric@i{% + \ifx\ast@risk*% + \let\evtl@nolyr\relax \let\@next\lyric@ii + \else + \let\evtl@nolyr\nolyr \def\@next{\nolyr\lyric@ii*}% + \fi + \@next} + +% Silben abseits vom Haupttext ausgeben: +\def\lyric@ii*#1{\forall@verses{\@context\evtl@hyph\@lyric{#1}}\evtl@nolyr} + +% Manipulationen einzelner Haupttext-Silben: +\def\forall@context#1{\forall@verses{\add@context{#1}}} + +% 1 Silbe ausgeben: +\def\lyr{\forall@verses{\@context\next@lyr}} + +% Linksbuendig: +\def\llyr{\forall@context{\leftlyrtrue}} + +% Verlaengerungs-Strich: +\def\lyrrule{\forall@context{\@strichtrue}} + +% Horizontale Verschiebung (analog \roffset): +\def\lyroffset#1{\forall@context{\def\evtl@offset{\roffset{#1}}}} + +% Kein automatischer Text: +\def\nolyr{\forall@context{\let\evtl@next@lyr\empty}} + +% Kleinbuchstaben: +\def\lclyr{\forall@context{\let\evtl@klein\@klein}} +\def\@klein#1{\lowercase\expandafter{#1}} + +% Satzzeichen anhaengen: +\def\lyrpt#1{\forall@context{\def\evtl@komma{#1}}} + +% Punkt vom Ende abschneiden: +\def\lyrnop{\forall@context{\let\evtl@punktweg\@punktweg}} +\def\@punktweg#1{{\punktweg@rek#1\ende}} +\def\punktweg@rek#1#2\ende{% + \def\par@ii{#2}% + \ifx\par@ii\empty\else + \aftergroup#1% + \expandafter\punktweg@rek\par@ii\ende + \fi} + +% Melisma beginnen und abschliessen: +\def\beginmel{\forall@verses{\llyr\lyrrule\add@context\lyricsoff}} +\def\endmel{\forall@verses{\lyrruleend\add@context\lyricson}} + +% +% Bindebogen unter zwei Silben derselben Note: +% +\def\lyrlink {\lyr@link0} +\def\lowlyrlink{\lyr@link1} + +\def\lyr@link#1{% + % Bogen erstellen: + \setbox\lyr@linkbox=\hbox{$\smile$}% + % In Box der Breite eines Wortzwischenraums einsetzen: + \setbox\lyr@linkbox=\hbox to\the\fontdimen2\the\font{% + \hss + % Unter die Grundlinie druecken: + \lower\ht\lyr@linkbox\hbox{% + % Zusaetzlicher vertikaler Abstand zur Wortunterseite: + \lower1pt\hbox{% + \if#10\relax + \hbox{$\smile$}% + \else + % Buchstabe mit Unterlaenge -> auch darunter druecken: + \setbox\lyr@linkdepthbox=\hbox{y}% + \lower\dp\lyr@linkdepthbox\hbox{$\smile$}% + \fi}}% + \hss}% + % Keine zusaetzliche Tiefe fuer Bogen anrechnen: + \dp\lyr@linkbox=0pt + % Bogen setzen: + \box\lyr@linkbox} + +\makeatother diff --git a/macros/musixtex/tex/musixmad.tex b/macros/musixtex/tex/musixmad.tex new file mode 100644 index 0000000000..6d29d3cd84 --- /dev/null +++ b/macros/musixtex/tex/musixmad.tex @@ -0,0 +1,30 @@ +% +% 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. +% +% +% musixmad.tex : allocate registers for more additional instruments +% +\immediate\write16{MusiXMore ADditional instruments T.115 <19 Nov 2010>}% +% +% +% setup the maximum element numbers +\setmaxinstruments{12}% +\setmaxgroups{4}% +\setmaxslurs\maxinstruments +% +\endinput diff --git a/macros/musixtex/tex/musixper.tex b/macros/musixtex/tex/musixper.tex new file mode 100644 index 0000000000..47ad54e644 --- /dev/null +++ b/macros/musixtex/tex/musixper.tex @@ -0,0 +1,195 @@ +% +% 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\drumclef \else \endinput \fi + +\immediate\write16{MusiXPERcussion T.60\space<27 September 2010>}% + +\ifx\undefined\dqb + \input musixdia +\fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +% if you need pointed percussion notes, say '\p[p][p]t n\xqu n' or '\xqu{.n}' +% if you need them more often define them by your one + +\def\drumclef{\raise2\internote\hbox{\keychar77}} + +%%% notes with a circled diagonal cross head, for closed hihat ... + +\def\dc@symbol{\def\q@u{\musixchar113}} + +\def\dcqu{\dc@symbol\@qu} +\def\dcql{\dc@symbol\@ql} + +\def\dcqb{\dc@symbol\@qb} + +\def\dczq{\dc@symbol\@zq} + +\def\dccu{\dc@symbol\@cu} +\def\dcccu{\dc@symbol\@ccu} +%\def\dccccu{\dc@symbol\@cccu} +%\def\dcccccu{\dc@symbol\@ccccu} +\def\dccl{\dc@symbol\@cl} +\def\dcccl{\dc@symbol\@ccl} +%\def\dccccl{\dc@symbol\@cccl} +%\def\dcccccl{\dc@symbol\@ccccl} + +%%% notes with a diagonal cross half circle head, for half open hihat ... + +\def\dh@symbol{\def\q@u{\musixchar112}} + +\def\dhqu{\dh@symbol\@qu} +\def\dhql{\dh@symbol\@ql} + +\def\dhqb{\dh@symbol\@qb} + +\def\dhzq{\dh@symbol\@zq} + +\def\dhcu{\dh@symbol\@cu} +\def\dhccu{\dh@symbol\@ccu} +%\def\dhcccu{\dh@symbol\@cccu} +%\def\dhccccu{\dh@symbol\@ccccu} +\def\dhcl{\dh@symbol\@cl} +\def\dhccl{\dh@symbol\@ccl} +%\def\dhcccl{\dh@symbol\@cccl} +%\def\dhccccl{\dh@symbol\@ccccl} + +%%% notes with a diagonal cross head, for open hihat ... + +\def\do@symbol{\def\q@u{\musixchar111}} + +\def\doqu{\do@symbol\@qu} +\def\doql{\do@symbol\@ql} + +\def\doqb{\do@symbol\@qb} + +\def\dozq{\do@symbol\@zq} + +\def\docu{\do@symbol\@cu} +\def\doccu{\do@symbol\@ccu} +%\def\docccu{\do@symbol\@cccu} +%\def\doccccu{\do@symbol\@ccccu} +\def\docl{\do@symbol\@cl} +\def\doccl{\do@symbol\@ccl} +%\def\docccl{\do@symbol\@cccl} +%\def\doccccl{\do@symbol\@ccccl} + +%%% notes with a doublesharp-head + +\def\x@symbol{\def\q@u{\musixchar114}} + +\def\xqu{\x@symbol\@qu} +\def\xql{\x@symbol\@ql} + +\def\xqb{\x@symbol\@qb} + +\def\xzq{\x@symbol\@zq} + +\def\xcu{\x@symbol\@cu} +\def\xccu{\x@symbol\@ccu} +%\def\xcccu{\x@symbol\@cccu} +%\def\xccccu{\x@symbol\@ccccu} +\def\xcl{\x@symbol\@cl} +\def\xccl{\x@symbol\@ccl} +%\def\xcccl{\x@symbol\@cccl} +%\def\xccccl{\x@symbol\@ccccl} + +%%% notes with a circled doublesharp-head + +\def\ox@symbol{\def\q@u{\musixfont\@cxv}} + +\def\oxqu{\ox@symbol\@qu} +\def\oxql{\ox@symbol\@ql} + +\def\oxqb{\ox@symbol\@qb} + +\def\oxzq{\ox@symbol\@zq} + +\def\oxcu{\ox@symbol\@cu} +\def\oxccu{\ox@symbol\@ccu} +%\def\oxcccu{\ox@symbol\@cccu} +%\def\oxccccu{\ox@symbol\@ccccu} +\def\oxcl{\ox@symbol\@cl} +\def\oxccl{\ox@symbol\@ccl} +%\def\oxcccl{\ox@symbol\@cccl} +%\def\oxccccl{\ox@symbol\@ccccl} + +%%% notes with a RhOmbus head, for shaker ... + +\def\r@symbol{\def\q@u{\musixchar118}} + +\def\roqu{\r@symbol\@qu} +\def\roql{\r@symbol\@ql} + +\def\roqb{\r@symbol\@qb} + +\def\rozq{\r@symbol\@zq} + +\def\rocu{\r@symbol\@cu} +\def\roccu{\r@symbol\@ccu} +%\def\rocccu{\r@symbol\@cccu} +%\def\roccccu{\r@symbol\@ccccu} +\def\rocl{\r@symbol\@cl} +\def\roccl{\r@symbol\@ccl} +%\def\rocccl{\r@symbol\@cccl} +%\def\roccccl{\r@symbol\@ccccl} + +%%% notes with a TrianGle head, for rattle ... + +\def\t@symbol{\def\q@u{\musixchar116}} + +\def\tgqu{\t@symbol\@qu} +\def\tgql{\t@symbol\@ql} + +\def\tgqb{\t@symbol\@qb} + +\def\tgzq{\t@symbol\@zq} + +\def\tgcu{\t@symbol\@cu} +\def\tgccu{\t@symbol\@ccu} +%\def\tgcccu{\t@symbol\@cccu} +%\def\tgccccu{\t@symbol\@ccccu} +\def\tgcl{\t@symbol\@cl} +\def\tgccl{\t@symbol\@ccl} +%\def\tgcccl{\t@symbol\@cccl} +%\def\tgccccl{\t@symbol\@ccccl} + +%%% notes with a + head, for bongos ... + +\def\k@symbol{\def\q@u{\musixchar117}} + +\def\kqu{\k@symbol\@qu} +\def\kql{\k@symbol\@ql} + +\def\kqb{\k@symbol\@qb} + +\def\kzq{\k@symbol\@zq} + +\def\kcu{\k@symbol\@cu} +\def\kccu{\k@symbol\@ccu} +%\def\kcccu{\k@symbol\@cccu} +%\def\kccccu{\k@symbol\@ccccu} +\def\kcl{\k@symbol\@cl} +\def\kccl{\k@symbol\@ccl} +%\def\kcccl{\k@symbol\@cccl} +%\def\kccccl{\k@symbol\@ccccl} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/musixplt.tex b/macros/musixtex/tex/musixplt.tex new file mode 100644 index 0000000000..3e0b36aae1 --- /dev/null +++ b/macros/musixtex/tex/musixplt.tex @@ -0,0 +1,184 @@ +% musixplt.tex : Palatino font definitions for MusiXTeX +% +% usage: +% +% \input musixtex +% \input musixplt +% ... +% +% MusiXplt.tex 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. +% +% MusiXplt.tex 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. +% +% Copyright 2015-2017 Bob Tennent rdt@cs.queensu.ca +% +\immediate\write16{MusiXplt\space<2017/02/10>} +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixplt.tex}\fi +% +% 7pt roman, bold, italic, bold italic, slanted and small-cap +\font\sevenrm=pplr8t at 7pt +\font\sevenbf=pplb8t at 7pt +\font\sevenit=pplri8t at 7pt +\font\sevenbi=pplbi8t at 7pt +\font\sevensc=pplrc9d at 7pt +% +% 8pt roman, bold, italic, bold italic, slanted and small-cap +\font\eightrm=pplr8t at 8pt +\font\eightbf=pplb8t at 8pt +\font\eightit=pplri8t at 8pt +\font\eightbi=pplbi8t at 8pt +\font\eightsc=pplrc9d at 8pt +% +% 9pt +\font\ninerm=pplr8t at 9pt +\font\ninebf=pplb8t at 9pt +\font\nineit=pplri8t at 9pt +\font\ninebi=pplbi8t at 9pt +\font\ninesc=pplrc9d at 9pt +% +% 10pt +\font\tenrm=pplr8t at 10pt +\font\tenbf=pplb8t at 10pt +\font\tenit=pplri8t at 10pt +\font\tenbi=pplbi8t at 10pt +\font\tensc=pplrc9d at 10pt +% +% 11pt +\font\elevenrm=pplr8t scaled \magstephalf +\font\elevenbf=pplb8t scaled \magstephalf +\font\elevenit=pplri8t scaled \magstephalf +\font\elevenbi=pplbi8t scaled \magstephalf +\font\elevensc=pplrc9d scaled \magstephalf +% +% 12pt +\font\twelverm=pplr8t scaled \magstep1 +\font\twelvebf=pplb8t scaled \magstep1 +\font\twelveit=pplri8t scaled \magstep1 +\font\twelvebi=pplbi8t scaled \magstep1 +\font\twelvesc=pplrc9d scaled \magstep1 +% +% 14pt +\font\frtrm=pplr8t scaled \magstep2 +\font\frtbf=pplb8t scaled \magstep2 +\font\frtit=pplri8t scaled \magstep2 +\font\frtbi=pplbi8t scaled \magstep2 +\font\frtsc=pplrc9d scaled \magstep2 +% +% 17pt +\font\svtrm=pplr8t scaled \magstep3 +\font\svtbf=pplb8t scaled \magstep3 +\font\svtit=pplri8t scaled \magstep3 +\font\svtbi=pplbi8t scaled \magstep3 +\font\svtsc=pplrc9d scaled \magstep3 +% +% 20pt +\font\twtyrm=pplr8t scaled \magstep4 +\font\twtybf=pplb8t scaled \magstep4 +\font\twtyit=pplri8t scaled \magstep4 +\font\twtybi=pplbi8t scaled \magstep4 +\font\twtysc=pplrc9d scaled \magstep4 +% +% 25pt +\font\twfvrm=pplr8t scaled \magstep5 +\font\twfvbf=pplb8t scaled \magstep5 +\font\twfvit=pplri8t scaled \magstep5 +\font\twfvbi=pplbi8t scaled \magstep5 +\font\twfvsc=pplrc9d scaled \magstep5 +% +% +% large fonts for titles +% (If you prefer bold, use \bf) +% (If you prefer roman, use \rm) +% +\def\bigtype{\bigfont\sc} +\def\Bigtype{\Bigfont\sc} +\def\BIgtype{\BIgfont\sc} +\def\BIGtype{\BIGfont\sc} +% +\font\ppfftwelve=pplbi8t at 8pt +\font\ppffsixteen=pplbi8t at 10pt +\font\ppfftwenty=pplbi8t at 12pt +\font\ppfftwentyfour=pplbi8t at 14pt +\font\ppfftwentynine=pplbi8t at 17pt +% +\def\f{{\ppff f}} +\def\ff{{\ppff ff}} +\def\fp{{\ppff fp}} +\def\fff{{\ppff fff}} +\def\ffff{{\ppff ffff}} +\def\mf{{\ppff mf}} +\def\p{{\ppff p}} +\def\pp{{\ppff pp}} +\def\ppp{{\ppff ppp}} +\def\pppp{{\ppff pppp}} +% +% +% sl fonts needed by musixsty +% +\font\eightsl=pplro8t at 8pt +\font\ninesl=pplro8t at 9pt +\font\tensl=pplro8t at 10pt +\font\twelvesl=pplro8t scaled \magstep1 +\font\frtsl=pplro8t scaled \magstep2 +\font\svtsl=pplro8t scaled \magstep3 +\font\twtysl=pplro8t scaled \magstep4 +\font\twfvsl=pplro8t scaled \magstep5 +% +% +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +% +\def\sF{{\ppff s\p@kern f}} +\def\sfz{{\ppff s\p@kern f\f@kern z}} +\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} + +\def\mp@{{\ppff mp}} +\let\mezzopiano\mp@ + +\catcode`\@=\catcodeat + +% +% Redefine accented characters for 8-bit font, suggested by David Carlisle: +% + +\ifx\documentclass\undefined +\catcode`\@=11 +\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 + +% \c needs special treatment +\def\c#1{\leavevmode\ifx c#1\char231 \else\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr + \hidewidth\char11\hidewidth}}\fi\fi} +\catcode`\@=\catcodeat +\fi + +\normtype +\endinput diff --git a/macros/musixtex/tex/musixpoi.tex b/macros/musixtex/tex/musixpoi.tex new file mode 100644 index 0000000000..dcf33f4f95 --- /dev/null +++ b/macros/musixtex/tex/musixpoi.tex @@ -0,0 +1,67 @@ +% +% 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. +% + +%\immediate\write16{MusiXPOInted shorties 0.36\space<1 March 1995>} +\immediate\write16{MusiXPOInted shorties T.114\space<16 June 2008>} + +%\ifx\undefined\ccup \else \endinput \fi % conflicts since musixtex.tex T.111 defines \ccup +\ifx\undefined\zcccclpp \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +%\def\@ccup{\n@vii\@xli \let\st@m\up@flag \g@qp}% moved into musixtex.tex since T.111 +\def\@cccup{\n@vii42\let\st@m\up@flag \g@qp} +\def\@ccccup{\n@vii43\let\st@m\up@flag \g@qp} +%\def\@cclp{\n@vii46\let\st@m\down@flag \g@qp}% moved into musixtex.tex at T.114 +\def\@ccclp{\n@vii47\let\st@m\down@flag \g@qp} +\def\@cccclp{\n@vii48\let\st@m\down@flag \g@qp} +\def\@ccupp{\n@vii\@xli \let\st@m\up@flag \g@qpp} +\def\@cccupp{\n@vii42\let\st@m\up@flag \g@qpp} +\def\@ccccupp{\n@vii43\let\st@m\up@flag \g@qpp} +\def\@cclpp{\n@vii46\let\st@m\down@flag \g@qpp} +\def\@ccclpp{\n@vii47\let\st@m\down@flag \g@qpp} +\def\@cccclpp{\n@vii48\let\st@m\down@flag \g@qpp} +%\def\ccup{\q@symbol\@ccup}% moved into musixtex.tex since T.111 +%\def\zccup{\advancefalse\ccup}% moved into musixtex.tex at T.114 +%\def\cclp{\q@symbol\@cclp}% moved into musixtex.tex since T.111 +%\def\zcclp{\advancefalse\cclp}% moved into musixtex.tex at T.114 +\def\ccupp{\q@symbol\@ccupp} +\def\zccupp{\advancefalse\ccupp} +\def\cclpp{\q@symbol\@cclpp} +\def\zcclpp{\advancefalse\cclpp} +\def\cccup{\q@symbol\@cccup} +\def\zcccup{\advancefalse\cccup} +\def\ccclp{\q@symbol\@ccclp} +\def\zccclp{\advancefalse\ccclp} +\def\cccupp{\q@symbol\@cccupp} +\def\zcccupp{\advancefalse\cccupp} +\def\ccclpp{\q@symbol\@ccclpp} +\def\zccclpp{\advancefalse\ccclpp} +\def\ccccup{\q@symbol\@ccccup} +\def\zccccup{\advancefalse\ccccup} +\def\cccclp{\q@symbol\@cccclp} +\def\zcccclp{\advancefalse\cccclp} +\def\ccccupp{\q@symbol\@ccccupp} +\def\zccccupp{\advancefalse\ccccupp} +\def\cccclpp{\q@symbol\@cccclpp} +\def\zcccclpp{\advancefalse\cccclpp} + +\catcode`\@=\catcodeat +\endinput + diff --git a/macros/musixtex/tex/musixppff.tex b/macros/musixtex/tex/musixppff.tex new file mode 100644 index 0000000000..6d06e70b42 --- /dev/null +++ b/macros/musixtex/tex/musixppff.tex @@ -0,0 +1,169 @@ +%% musippff.tex This is an extension library for Musix\Tex which +%% replaces the macros used for dynamic marks to use a mini-font xppff10 +%% +%% Author: +%% Hiroaki MORIMOTO +%% Tokyo, Japan +%% URL: http://homepage1.nifty.com/kuuku/pub/musixtex/index-e.html +%% +%% usage: +%% \input musixtex +%% \input musixppff +%% ... +%% +%% +\immediate\write16{MusiXppff \noexpand\ppff font replacement <2017/02/10>}% +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixppff.tex}\fi + +\font\xppfftwelve=xppff10 at 8pt +\font\xppffsixteen=xppff10 +\font\xppfftwenty=xppff10 scaled \magstep1 +\font\xppfftwentyfour=xppff10 scaled \magstep2 +\font\xppfftwentynine=xppff10 scaled \magstep3 +\font\tinyxppff=xppff10 at 8pt +\font\smallxppff=xppff10 +\font\normxppff=xppff10 scaled \magstep1 +\font\medxppff=xppff10 scaled \magstep2 + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\def\xppff{% +\ifdim\internote<\p@seven6\Internote \tinyxppff +\else\ifdim\internote<.95\Internote \smallxppff +\else\ifdim\internote<1.19\Internote \normxppff +\else\medxppff\fi\fi\fi} + + +\def\f{{\xppff f}}% +\def\ff{{\xppff ff}}% +\def\fp{{\xppff fp}}% +\def\sF{{\xppff sf}}% +\def\fff{{\xppff fff}}% +\def\ffff{{\xppff ffff}}% +\def\mf{{\xppff mf}}% +\def\p{{\xppff p}}% +\def\pp{{\xppff pp}}% +\def\ppp{{\xppff ppp}}% +\def\pppp{{\xppff pppp}}% +\def\sfz{{\xppff sfz}}% +\def\sfzp{{\xppff sfzp}}% +\def\mp@{{\xppff mp}}% +\let\mezzopiano\mp@ + +% +\def\tinydyn{\let\ppff\tinyppff\let\xppff\tinyxppff}% +\def\smalldyn{\let\ppff\smallppff\let\xppff\smallxppff}% +\def\normdyn{\let\ppff\normppff\let\xppff\normxppff}% +\def\meddyn{\let\ppff\medppff\let\xppff\medxppff}% + +\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 + \let\tinyxppff\xppfftwelve % version 1.17 RDT + \let\smallxppff\xppfftwelve + \let\normxppff\xppffsixteen + \let\medxppff\xppfftwenty + \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 + \let\tinyxppff\xppffsixteen + \let\smallxppff\xppfftwenty + \let\normxppff\xppfftwentyfour + \let\medxppff\xppfftwentynine + \else\ifnum\musicsize=\@xxix + \let\musicLargefont\musictwentynine + \let\musiclargefont\musictwentynine + \let\musicnorfont\musictwentynine + \let\musicsmallfont\musictwentyfour + \let\musictinyfont\musictwenty + \let\xgregLargefont\xgregtwentynine + \let\xgreglargefont\xgregtwentynine + \let\xgregnorfont\xgregtwentynine + \let\xgregsmallfont\xgregtwentyfour + \let\xgregtinyfont\xgregtwenty + \let\sluru\slurutwenty \let\slurd\slurdtwenty + \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty + \let\slurud\slurutwentyd \let\slurdd\slurdtwentyd % +ickd + \let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd + \let\meternorfont\svtbf \let\metersmallfont\frtbf % version 1.18 RDT + \let\meterbigfont\twtybf \let\meterlargefont\twfvbf + \let\meterLargefont\twfvbf + \let\tinyppff\ppfftwenty + \let\smallppff\ppfftwentyfour + \let\normppff\ppfftwentynine + \let\medppff\ppfftwentynine + \let\tinyxppff\xppfftwenty + \let\smallxppff\xppfftwentyfour + \let\normxppff\xppfftwentynine + \let\medxppff\xppfftwentynine +\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 + \let\tinyxppff\xppfftwelve + \let\smallxppff\xppffsixteen + \let\normxppff\xppfftwenty + \let\medxppff\xppfftwentyfour +\fi\fi\fi}% + +\catcode`\@=\catcodeat + +\endinput + diff --git a/macros/musixtex/tex/musixps.tex b/macros/musixtex/tex/musixps.tex new file mode 100644 index 0000000000..e2033e2b07 --- /dev/null +++ b/macros/musixtex/tex/musixps.tex @@ -0,0 +1,963 @@ +%% PostScript slurs, ties and crescendos +% Coded by Stanislav Kneifl + +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixps.tex}\fi +\ifx\undefined\liftcresc\else\endinput\fi + +\immediate\write16{MusiXPS PostScript slurs, ties and crescendos 0.93 (17.2.2015)}% + +\catcode`\@=11 + + +%%%% remove the next line if you include this file into a format (see endnotes!). + +\special{header=psslurs.pro}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\font\mxsk=mxsk + +% you can change these values if you want... +% Offsets are in \internotes measured vertically from the center and +% horizontally from the left edge of the notehead. +% see the doc at the end for (short) explanation + +\def\psslurraise{1.6} % vertical offset of the slur beginnings/endings +\def\psbslurraise{2} % vert. offset for slurs on beams + +\def\psLslurskip{-0.2} % horiz. offset of slurs shifted more to the left +\def\pslslurskip{0.4} % horiz. offset of slurs shifted to the left +\def\psislurskip{1.4} % horiz. offset of the slur beginnings +\def\pstslurskip{1.2} % horiz. offset of the slur endings +\def\psrslurskip{2.8} % horiz. offset of slurs shifted to the right + +\def\psfslurhgt{0.7} % height coeficient of the 'f'lat slurs +\def\psslurhgt{1} % height coeficient of normal slurs +\def\pshslurhgt{1.6} % height coeficient of 'h'igh slurs +\def\psHslurhgt{2.2} % height coeficient of 'H'igh slurs +\def\psHHslurhgt{2.8} % height coeficient of 'HH'igh slurs +\def\psslurmaxhgt{40} % maximal height of the slur + % (before multiplication by \...slurhgt !!) + +\def\psslurangul{0.17} % angularity of normal, flat and high slurs +\def\psHslurangul{0.15} % angularity of High slurs +\def\psHHslurangul{0.13} % angularity of HHigh slurs + +\def\pstieraise{1.3} % vertical offset of the ties +\def\psitieskip{2.6} % horiz. offset of the tie beginnings +\def\psttieskip{0.3} % horiz. offset of the tie endings +\def\psltieskip{-0.2} % horiz. offset of ties shifted to the left +\def\psrtieskip{3} % horiz. offset of ties shifted to the right + +\def\pstiehgt{0.7} % height coeficient of the ties +\def\pstiemaxhgt{30} % maximal height if the ties +\def\pstieflathgt{20} % maximal height if the ties between staff lines +\def\pstieangul{0.14} % angularity of the ties + +%%%% + +\def\d@nh{-5} % default altitude of the crescendos in \internote +\def\setcrescheight{\def@it\d@nh} + +\def\sl@space{-3pt} % neg. space before continued slurs, ties and crescs. +\def\h@tielim{15pt} % limit for drawing half continued ties + +\def\nohalfties{\def\h@tielim{\z@}} +\def\halfties{\def\h@tielim{15pt}} +\newif\ifslopebrkslurs +\slopebrkslursfalse + +\def\dotted{\def\d@sh{1}} % the '1' is important! +\def\solid{\def\d@sh{0}} +\def\Dotted{\def\D@sh{1}} +\def\Solid{\def\D@sh{0}} +\Solid\solid + +\def\nosluradjust{\gdef\s@adj{0}} +\def\sluradjust{\gdef\s@adj{1}} +\def\Nosluradjust{\gdef\S@adj{0}\gdef\s@adj{0}} +\def\Sluradjust{\gdef\S@adj{1}\gdef\s@adj{1}} +\Sluradjust + +\def\notieadjust{\gdef\t@adj{0}} +\def\tieadjust{\gdef\t@adj{1}} +\def\Notieadjust{\gdef\T@adj{0}\gdef\t@adj{0}} +\def\Tieadjust{\gdef\T@adj{1}\gdef\t@adj{1}} +\Notieadjust + +\newif\ifdangermessages\dangermessagestrue + +\def\@clr#1{\let#1\empty} +\def\def@it#1#2{\def#1{#2}} +\def\slurtext{\def@it\s@tx} +\let\s@tx\empty +\def\lr@lap#1{\rlap{\hss#1}} + +% how many slurs will be stored into the TeX's registers? +% => how many slurs can go across the page break? +% determines also the needed amount of the following registers. +\let\max@slurs\t@n + +\let\slur@alt=\s@xi \let\slur@hgt=\s@Yv \let\slur@lift=\s@yi +\let\slur@alti=\s@xii \let\slur@hgti=\s@Yvi \let\slur@lifti=\s@yii +\let\slur@altii=\s@xiii \newdimen\slur@hgtii \let\slur@liftii=\s@yiii +\let\slur@altiii=\s@xiv \newdimen\slur@hgtiii \let\slur@liftiii=\s@yiv +\let\slur@altiv=\s@xv \newdimen\slur@hgtiv \let\slur@liftiv=\s@yv +\let\slur@altv=\s@Y \newdimen\slur@hgtv \let\slur@liftv=\s@yvi +\let\slur@altvi=\s@Yi \newdimen\slur@hgtvi \let\slur@liftvi=\s@Ni +\let\slur@altvii=\s@Yii \newdimen\slur@hgtvii \let\slur@liftvii=\s@Nii +\let\slur@altviii=\s@Yiii \newdimen\slur@hgtviii \let\slur@liftviii=\s@Niii +\let\slur@altix=\s@Yiv \newdimen\slur@hgtix \let\slur@liftix=\s@Niv + +% in the 'lift' register is coded the altitude of the ending point of the slur +% at the end of a line (y1) and the relative alt. of the starting point at the +% beginning of a line (y2): y1=(reg div 65536)-16384, y2=(reg mod 65536)-16384 + +\newdimen\tie@alt \newdimen\tie@hgt +\newdimen\tie@alti \newdimen\tie@hgti +\newdimen\tie@altii \newdimen\tie@hgtii +\newdimen\tie@altiii \newdimen\tie@hgtiii +\newdimen\tie@altiv \newdimen\tie@hgtiv +\newdimen\tie@altv \newdimen\tie@hgtv +\newdimen\tie@altvi \newdimen\tie@hgtvi +\newdimen\tie@altvii \newdimen\tie@hgtvii +\newdimen\tie@altviii \newdimen\tie@hgtviii +\newdimen\tie@altix \newdimen\tie@hgtix + +\newdimen\cresc@alt +\newdimen\cresc@alti +\newdimen\cresc@altii +\newdimen\cresc@altiii +\newdimen\cresc@altiv +\newdimen\cresc@altv +\newdimen\cresc@altvi +\newdimen\cresc@altvii +\newdimen\cresc@altviii +\newdimen\cresc@altix + +\newcount\pss@rega \pss@rega=\z@ % PS slurs +\newcount\pss@regb \pss@regb=\z@ +\newcount\pst@rega \pss@rega=\z@ % PS ties +\newcount\pst@regb \pss@regb=\z@ +\newcount\psc@rega \pss@rega=\z@ % PS [de]crescendos +\newcount\psc@regb \pss@regb=\z@ + +\newif\if@up +\newif\if@dash + +% information in these registers is binary coded: +% a: lower bit is set ( 2^2i ): there is a pending slur number i +% upper bit is set ( 2^(2i+1) ): slur number i already went across line break +% b: lower bit is set: slur/tie is dotted +% upper bit is set: slur/tie is lower / decrescendo + +% everything else is stored in PostScript variables. If you run out +% of the PostScript dictionary used for slurs, you can increase its size +% by changing the number 200 in the first line of psslurs.pro to anything +% reasonable. (The number says how many tokens can be defined.) + +%%%%%%% + +% input is i for 2^i and register to extract the bits from +% in reg. n@i will be only the bits 2^2i and 2^(2i+1) +% in n@vi will be these bits shifted to 2^0 and 2^1, +% n@ii will be set to 2^2i +\def\get@bits#1#2{\n@i=#1\relax\n@ii\@ne + \loop\ifnum\n@i>\z@\multiply\n@ii\f@ur\advance\n@i\m@ne\repeat + \n@i=\n@ii\multiply\n@i\f@ur\n@iii #2\relax + \divide\n@iii\n@i\multiply\n@iii\n@i\n@i=#2\relax + \advance\n@i-\n@iii\divide\n@i\n@ii\n@vi\n@i\multiply\n@i\n@ii\relax} + +\def\s@l@slur#1{\xdef\th@salt{\csname slur@alt\romannumeral#1\endcsname}% + \xdef\th@shgt{\csname slur@hgt\romannumeral#1\endcsname}% + \xdef\th@slift{\csname slur@lift\romannumeral#1\endcsname}} + +\def\s@l@tie#1{\xdef\th@salt{\csname tie@alt\romannumeral#1\endcsname}% + \xdef\th@shgt{\csname tie@hgt\romannumeral#1\endcsname}} + +\def\s@l@cresc#1{\xdef\th@salt{\csname cresc@alt\romannumeral#1\endcsname}} + +\def\gt@pssb#1#2{\s@l@ctbeam#1\relax\getcurpos\advance\y@v#2\relax % \y@v = hpos + \advance\y@v-\b@x + \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z + \advance\y@ii-\altportee\n@ii=\internote \divide\n@ii6553 + \n@i=\y@ii\divide\n@i\n@ii\divide\n@i6554\relax} + +\def\t@bslur#1#2#3#4{\n@vii\n@i\ifnum#3<\fiv@t@@n\get@bits{#3}\pss@regb\n@i\n@vii + \ifnum\n@vi>\@ne\gt@pssb{#4}\z@\T@slur{#3}{\psbslurraise}{0}{#1}{#2}% + \else\gt@pssb{#4}{\tw@\qn@width}\T@slur{#3}{\psbslurraise}{2.4}{#1}{#2}\fi + \else\gt@pssb{#4}\z@\T@slur{#3}{1.7}{0}{#1}{#2}\fi} + + +%%%%%% slurs %%%%%%%%%%%%%%%%%%% + +% ID, pitch, voffset, hoffset +% all offsets are in \internote, the slur direction is determined +% by the sign of the vertical offset. + +\def\iSlur#1#2{\inhgetn@i#2\relax\I@slur{#1}} + +% ID, voffset, hoffset; \n@i = pitch +\def\I@slur#1#2#3{\y@i=\n@i\internote + \ifdim#2\internote<\z@\@upfalse\else\@uptrue\fi + \advance\y@i#2\internote\raise\y@i\rlap{\hskip #3\internote + \special{ps: slur@Dict begin CP /S#1y1 ED /S#1x1 ED + /S#1hgt (\the\y@i) psxGD N /S#1brk S#1hgt (\the\internote) psxGD + \ifslopebrkslurs 3 \else 1 \fi\if@up 1 \else -1 \fi M M A N /S#1lift 0 N + /S#1alt (\the\altportee) psxGDAR N /S#1dir \if@up1\else-1\fi\space N + /S#1dash \d@sh\space N /S#1adj \s@adj\space N end}}% + \ifnum#1>\fourt@@n + \ifnum#1=99\relax\else + \ifdangermessages\message{Danger! Slur with ID >14.}\fi\fi + \else\n@iv\n@i\get@bits{#1}\pss@rega + \ifcase\n@i\else\message{Slur #1 was re-opened.}% + \advance\pss@rega-\n@i\fi % clear the bits + \global\advance\pss@rega\n@ii % and set the lower bit + \get@bits{#1}\pss@regb\global\advance\pss@regb-\n@i % clear the bits + \ifnum\d@sh=1\relax\global\advance\pss@regb\n@ii\fi + \if@up\else\multiply\n@ii\tw@\global\advance\pss@regb\n@ii\fi + \ifnum#1<\max@slurs\s@l@slur{#1}% + \global\th@salt\altportee\global\th@shgt\y@i\th@slift\n@iv + \if@up\advance\th@slift\fiv@\else\advance\th@slift-\fiv@\fi + \advance\th@slift 16384\relax\multiply\th@slift65536\relax + \global\advance\th@slift16384\relax + \fi\fi\gdef\d@sh{\D@sh}\gdef\s@adj{\S@adj}} + +% ID, height, voffset, hoffset, curvature, angularity +\def\tSlur#1#2{\inhgetn@i#2\relax\T@slur{#1}} + +\def\T@slur#1#2#3#4#5{\n@vii\n@i\n@ii\@ne + \ifnum#1<\fiv@t@@n + \get@bits{#1}\pss@rega + \global\advance\pss@rega-\n@i + \ifcase\n@i\message{Not opened slur #1 was closed.}\n@ii\z@ + \else + \ifnum\n@vi>\@ne % the slur was breaked + \get@bits{#1}\pss@regb % it's not necessary to clear this register + \ifnum\n@vi>\@ne\@upfalse\else\@uptrue\fi + \ifodd\n@vi\@dashtrue\else\@dashfalse\fi + \y@ii=\lin@pos\advance\y@ii\locx@skip\advance\y@ii#3\internote + \advance\y@ii\sl@space + \y@i=\n@vii\internote\advance\y@i\if@up\else-\fi#2\internote + \ifnum#1<\max@slurs + \s@l@slur{#1}\n@ii\th@slift\divide\n@ii65536\relax + \multiply\n@ii65536\relax\n@iii\th@slift\advance\n@iii-\n@ii + \advance\n@iii-16384\y@iii=\n@iii\internote\advance\y@iii\th@shgt + \raise\y@i\rlap{\hskip #3\internote\special{ps: slur@Dict begin + CP S (\the\y@ii) psxGDAR SB /S#1x1 ED + (\the\y@i) psxGD (\the\y@iii) psxGD SB 4 psxAR M A /S#1y1 ED + (\the\internote) psxGD (\the\th@shgt) psxGD (\the\y@i) psxGD + S#1x1 S#1y1 CP #4 \if@up\else neg \fi #5 30 + \if@dash1\else0\fi\space \s@adj\space 90 DS end}}% + \else + \raise\y@i\rlap{\hskip #3\internote\special{ps: slur@Dict begin + CP S (\the\y@ii) psxGDAR SB /S#1x1 ED + S#1hgt S#1lift (\the\internote) psxGD M A 4 psxAR M + (\the\y@i) psxGDAR SB SB /S#1y1 ED + (\the\internote) psxGD S#1hgt (\the\y@i) psxGD + S#1x1 S#1y1 CP #4 \if@up\else neg \fi #5 30 + S#1dash \s@adj\space 90 DS end}}% + \fi\n@ii\z@ + \fi + \fi + \fi + \ifcase\n@ii\else\y@ii=#2\internote\setbox\z@=\hbox{\s@tx}% + \y@i=\n@vii\internote\raise\y@i\rlap{\hskip #3\internote + \special{ps: slur@Dict begin (\the\internote) psxGD S#1hgt (\the\y@i) psxGD + #2 (\the\internote) psxGD M S#1dir M A + S#1x1 S#1y1 CP (\the\y@ii) psxGDAR S#1dir M SB + #4 S#1dir M #5 \psslurmaxhgt\space S#1dash S#1adj 90 DS + /ay1 ay1 (\the\ht\z@) psxGDAR -10 psxAR add dir mul add def}% + \lr@lap{\box\z@}\special{ps: end}}% + \fi\@clr\s@tx} + +\def\liftslur#1#2{\special{ps: slur@Dict begin /S#1lift #2 N end}% + \ifnum#1<\t@n\s@l@slur{#1}\divide\th@slift65536\relax + \multiply\th@slift65536 \advance\th@slift16384\relax + \advance\th@slift#2\relax\fi} + +\def\breakslur#1#2{\inhgetn@i#2\relax\y@i=\n@i\internote\special + {ps: slur@Dict begin /S#1brk (\the\y@i) psxGD N end}% + \ifnum#1<\t@n\s@l@slur{#1}\n@ii\th@slift\divide\n@ii65536\relax + \multiply\n@ii65536 \advance\th@slift-\n@ii\advance\n@i16384\relax + \multiply\n@i65536 \global\advance\th@slift\n@i\fi} + +%%%%% [de]crescendos %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ID, height, hoffset + +\def\Icresc{\i@cresc0} +\def\Idecresc{\i@cresc2} + +\def\i@cresc#1#2#3#4{\y@i=#3\internote\raise\y@i\rlap + {\hskip#4\internote\advance\y@i\altportee\special{ps: slur@Dict begin + CP /C#2y1 ED /C#2x1 ED /C#2alt (\the\y@i) psxGD N + /C#2dir #1 N end}}% + \ifnum#2>\fourt@@n + \ifdangermessages\message{Danger! [De]crescendo with ID >14.}\fi + \else\get@bits{#2}\psc@rega + \ifcase\n@i\else\message{[De]crescendo #2 was re-opened.}% + \advance\psc@rega-\n@i\fi + \global\advance\psc@rega\n@ii + \get@bits{#2}\psc@regb\advance\psc@regb-\n@i + \multiply\n@ii#1\relax + \global\advance\psc@regb\n@ii\relax + \ifnum#2<\max@slurs\s@l@cresc{#2}% + \advance\y@i\altportee\global\th@salt\y@i\fi\fi} + +\def\Tcresc#1#2#3{\n@ii\@ne\n@i=#1\relax + \ifnum\n@i<\fiv@t@@n + \get@bits{#1}\psc@rega\global\advance\psc@rega-\n@i + \ifcase\n@i\message{Not opened crescendo #1 was closed.}\n@ii\z@ + \else + \ifnum\n@vi>\@ne % the crescendo was breaked + \get@bits{#1}\psc@regb % it's not necessary to clear this register + \y@ii=\lin@pos\advance\y@ii\locx@skip\advance\y@ii#3\internote + \advance\y@ii\sl@space + \zchar{#2}{\hskip #3\internote\special{ps: slur@Dict begin + CP S (\the\y@ii) psxGDAR SB S CP 4 \the\n@vi\space R + \the\n@vi\space 0 eq { DHC } { DC } ifelse end}}% + \global\n@ii\z@\fi + \fi\fi + \ifcase\n@ii\else\zchar{#2}{\hskip#3\internote\special{ps: slur@Dict begin + C#1x1 C#1y1 CP 4 C#1dir R DC end}}\fi} + +\def\liftcresc#1#2{\y@i=#2\internote\ifnum#1<\max@slurs\s@l@cresc{#1}% + \global\advance\th@salt\y@i\else\special{ps: slur@Dict begin + /C#1alt (\the\y@i) psxGDAR C#1alt A N end}\fi} + + +%%%% ties %%%%%%%%%%%%%%%%%%%%%% + +\def\iTieu{\i@tie{1}} +\def\iTied{\i@tie{-1}} + +% 1/-1, ID, height, hoffset +\def\i@tie#1#2#3#4{\inhgetn@i#3\relax\y@i=\pstieraise\internote + \multiply\y@i#1\relax\advance\y@i\n@i\internote\raise\y@i\rlap + {\hskip #4\internote\special{ps: slur@Dict begin + /S#1alt (\the\altportee) psxGDAR N + CP /T#2y1 ED /T#2x1 ED /T#2hgt (\the\y@i) psxGD N + /T#2dir #1 N /T#2dash \d@sh\space N + /T#2adj \t@adj\space N end}}% + \ifnum #2>\fourt@@n + \ifnum#2=99\relax\else + \ifdangermessages\message{Danger! Tie with ID >14.}\fi\fi + \else\get@bits{#2}\pst@rega + \ifcase\n@i\else\message{Tie #2 was re-opened.}% + \global\advance\pst@rega-\n@i\fi + \global\advance\pst@rega\n@ii + \get@bits{#2}\pst@regb\global\advance\pst@regb-\n@i % clear the bits + \ifnum\d@sh=1\relax\global\advance\pst@regb\n@ii\fi + \ifnum#1=1\relax\else\multiply\n@ii\tw@\global\advance\pst@regb\n@ii\fi + \ifnum#2<\max@slurs\s@l@tie{#2}% + \global\th@salt\altportee\global\th@shgt\y@i\fi + \fi\gdef\d@sh{\D@sh}\gdef\t@adj{\T@adj}} + +% ID, hoffset +\def\tTie#1#2{\n@ii\@ne + \ifnum#1<\fiv@t@@n + \get@bits{#1}\pst@rega + \global\advance\pst@rega-\n@i + \ifcase\n@i\message{Not opened tie #1 was closed.}\n@ii\z@ + \else + \ifnum\n@vi>\@ne % the tie was breaked + \get@bits{#1}\pst@regb % it's not necessary to clear this register + \ifnum\n@vi>\@ne\@upfalse\else\@uptrue\fi + \ifodd\n@vi\@dashtrue\else\@dashfalse\fi + \y@ii=\lin@pos\advance\y@ii\locx@skip\advance\y@ii#2\internote + \advance\y@ii\sl@space + \ifnum#1<\max@slurs\s@l@tie{#1}% + \ifdim\y@ii<\h@tielim + \raise\th@shgt\rlap{\hskip-0.3\internote + \ifdim\internote>.9\Internote\n@i=\z@\else + \ifdim\internote<.7\Internote \n@i=\@cxxviii + \else\n@i=64\fi\fi\if@up\else\advance\n@i\@ne\fi + \mxsk\char\n@i}% + \else + \rlap{\hskip #2\internote\special{ps: slur@Dict begin + (\the\internote) psxGD (\the\th@shgt) psxGD DP + CP S (\the\y@ii) psxGDAR SB S (\the\th@shgt) + psxGDAR SB DP CP P S \if@up \pstiehgt\space + \else -\pstiehgt\space \fi \pstieangul\space \pstiemaxhgt\space + \if@dash 1 \else 0 \fi \t@adj\space 40 DS end}}% + \fi + \else + \rlap{\hskip #2\internote\special{ps: slur@Dict begin + (\the\internote) psxGD T#1hgt psxGD DP + CP S (\the\y@ii) psxGDAR SB S T#1hgt psxGDAR SB DP CP P S + \if@up -\pstiehgt\space \else \pstiehgt\space \fi + \pstieangul\space \pstiemaxhgt\space \if@dash 1 \else 0 \fi + \t@adj\space 40 DS end}}% + \fi + \global\n@ii=\z@ + \fi + \fi + \fi + \ifcase\n@ii\else + \rlap{\hskip#2\internote + \special{ps: slur@Dict begin (\the\internote) psxGD T#1hgt DP + T#1x1 T#1y1 CP P T#1y1 + \pstiehgt\space T#1dir M \pstieangul\space \pstiemaxhgt\space T#1dash T#1adj 40 DS end}}% + \fi} + + +%%%%%%% simple slurs %%%%%%%%%%%%%%%%% + +% #1 start pitch #2 final pitch #3 sense(u,d) #4 length[noteskip] + +% \s@Y = vert. offset, \y@ii = horiz. offset at the end, \y@iii add to length +% \y@v = length + +\def\C@sl#1#2#3#4{\inhgetn@i#1\relax \n@ii\n@i\inhgetn@i#2\relax + \if d#3 \s@vy-\s@vy \ifx\@ne\nxt \y@ii\z@\fi \fi + \y@v#4\noteskip\advance\y@v\y@iii\advance\y@ii-\y@iii + \rlap{\hskip\y@ii\y@i=\n@ii\internote\advance\y@i\s@vy + \y@ii=\n@i\internote\advance\y@ii\s@vy\setbox\z@=\hbox{\s@tx}% + \ifx\s@tx\empty\def\tx@sp{1}\else\ifdim\y@v<\tw@nty\internote\def\tx@sp{1.5}% + \else\ifdim\y@v<\@l\internote\def\tx@sp{1.2}\else\def\tx@sp{1}\fi\fi\fi + \special{ps: slur@Dict begin (\the\internote) psxGD + (\the\y@i) psxGD (\the\y@ii) psxGD CP (\the\y@i) psxGDAR swub + CP exch (\the\y@v) psxGDAR add exch (\the\y@ii) psxGDAR sub + \if d#3 -1 \else 1 \fi \tx@sp\space mul \psslurangul\space + \psslurmaxhgt\space \d@sh\space \s@adj\space 90 DS + /ax1 ax1 (\the\y@v) psxGDAR add def /ay1 ay1 (\the\y@ii) psxGDAR sub + (\the\ht\z@) psxGDAR dir mul add def}\lr@lap{\unhbox\z@}\special{ps: end}}% + \@clr\s@tx\gdef\d@sh{\D@sh}\gdef\s@adj{\S@adj}} + + +%%%%%%% breaking the line %%%%%%%%%%%%%%%%% + +\def\br@slur{\divide\n@v\tw@ + \ifodd\n@v % the slur was breaked again + \y@i=\lin@pos\advance\y@i\x@skip\advance\y@i-\tw@\p@ + \advance\y@i\sl@space + \ifnum\n@iv<\max@slurs\s@l@slur\n@iv\n@i\th@slift\divide\n@i65536% + \n@ii\n@i\advance\n@ii-16384\y@iii=\n@ii\internote + \multiply\n@i65536 \n@ii\th@slift\advance\n@ii-\n@i + \advance\n@ii-16384\y@ii=\n@ii\internote\advance\y@ii\th@shgt + \ifnum\n@vi>\@ne\@upfalse\else\@uptrue\fi + \raise\th@salt\rlap{\hskip -2pt\special + {ps: slur@Dict begin /in (\the\internote) psxGD N + in (\the\y@ii) psxGD (\the\y@iii) psxGD CP S (\the\y@i) psxGD + 4 psxAR M SB S (\the\y@ii) psxGDAR SB + CP (\the\y@iii) psxGDAR SB \if@up1\else-1\fi\space + 0.13 30 \ifodd\n@vi 1 \else 0 \fi \s@adj\space 90 DS end}}% + \else + \rlap{\hskip -2pt\special{ps: slur@Dict begin + /in (\the\internote) psxGD N in S\the\n@iv hgt + S\the\n@iv lift in M A S\the\n@iv brk + CP S (\the\y@i) psxGDAR SB in 10 psxAR M A S + S\the\n@iv hgt S\the\n@iv lift in M A 4 psxAR M SB + S\the\n@iv alt 4 psxAR M SB CP S\the\n@iv brk + S\the\n@iv alt A 4 psxAR M SB S\the\n@iv dir + 0.13 30 S\the\n@iv dash S\the\n@iv adj 90 DS end}}% + \fi + \else % the slur was breaked the first time + \rlap{\hskip-2pt\special{ps: slur@Dict begin (\the\internote) psxGD + S\the\n@iv hgt S\the\n@iv brk S\the\n@iv x1 S\the\n@iv y1 CP P + S\the\n@iv y1 S\the\n@iv hgt S\the\n@iv brk SB 4 psxAR M A + S\the\n@iv dir 0.17 \psslurmaxhgt\space S\the\n@iv dash S\the\n@iv adj 90 DS end}}% + \get@bits\n@iv\pss@rega + \multiply\n@ii\tw@\global\advance\pss@rega\n@ii\fi} + + +\def\br@cresc{\divide\n@v\tw@ + \ifodd\n@v % the crescendo was breaked again + \y@i=\lin@pos\advance\y@i\x@skip\advance\y@i-\tw@\p@ + \advance\y@i\sl@space + \ifnum\n@iv<\max@slurs\s@l@cresc\n@iv + \rlap{\hskip-2pt\divide\n@vi\tw@\special{ps: slur@Dict begin CP S + (\the\y@i) psxGDAR SB S (\the\th@salt) psxGDAR SB DP CP P S + 4 \ifodd\n@vi 2 \else 0 \fi R DHC end}}% + \else + \rlap{\hskip-2pt\divide\n@vi\tw@\special{ps: slur@Dict begin CP S + (\the\y@i) psxGDAR SB (\the\internote) psxGD 10 psxAR M A S + C\the\n@iv alt psxGDAR SB DP CP P S + 4 C\the\n@iv dir R DHC end}}\fi + \else % the crescendo was breaked the first time + \rlap{\hskip-2pt\special{ps: slur@Dict begin + C\the\n@iv x1 C\the\n@iv y1 DP CP P S + 4 C\the\n@iv dir R C\the\n@iv dir 0 eq + { DC } { DHC } ifelse end}}% + \get@bits\n@iv\psc@rega + \multiply\n@ii\tw@\global\advance\psc@rega\n@ii\fi} + + +\def\br@tie{\divide\n@v\tw@ + \ifodd\n@v % the tie was breaked again + \y@i=\lin@pos\advance\y@i\x@skip\advance\y@i-\tw@\p@ + \advance\y@i\sl@space + \ifnum\n@iv<\max@slurs\s@l@tie\n@iv + \ifnum\n@vi>\@ne\@upfalse\else\@uptrue\fi + \y@ii\th@salt\advance\y@ii\th@shgt + \raise\y@ii\rlap{\hskip-2pt\special{ps: slur@Dict begin + (\the\internote) psxGD (\the\th@shgt) psxGD DP CP S (\the\y@i) psxGDAR SB S + CP \if@up \pstiehgt\space \else -\pstiehgt\space \fi \pstieangul\space + \pstiemaxhgt\space \ifodd\n@vi 1 \else 0 \fi \t@adj\space 40 DS end}}% + \else + \rlap{\hskip-2pt\special{ps: slur@Dict begin + (\the\internote) psxGD T\the\n@iv hgt DP CP S (\the\y@i) + psxGDAR SB (\the\internote) psxGD 10 psxAR M A S + T\the\n@iv alt T\the\n@iv hgt A 4 psxAR M SB DP + CP P S \pstiehgt\space T\the\n@iv dir M + \pstieangul\space \pstiemaxhgt\space T\the\n@iv dash T\the\n@iv adj 40 DS end}}\fi + \else % the tie was breaked the first time + \rlap{\hskip-2pt\special{ps: slur@Dict begin + (\the\internote) psxGD T\the\n@iv hgt DP + T\the\n@iv x1 T\the\n@iv y1 DP CP P S + \pstiehgt\space T\the\n@iv dir M \pstieangul\space \pstiemaxhgt\space + T\the\n@iv dash 40 T\the\n@iv adj DS end}}% + \get@bits\n@iv\pst@rega + \multiply\n@ii\tw@\global\advance\pst@rega\n@ii\fi} + +\let\mxps@oldsuspend=\z@suspend + +\def\z@suspend{% +% cut PostScript slurs + {\n@iv\z@\n@v\pss@rega\n@vi\pss@regb + \loop\ifnum\n@v>\z@ + \ifodd\n@v{\br@slur}\fi\divide\n@v\f@ur + \advance\n@iv\@ne\divide\n@vi\f@ur + \repeat}% +% cut PostScript [de]crescendos + {\n@iv=\z@\n@v=\psc@rega\n@vi\psc@regb + \loop\ifnum\n@v>\z@ + \ifodd\n@v{\br@cresc}\fi\divide\n@v\f@ur + \advance\n@iv\@ne\divide\n@vi\f@ur + \repeat}% +% cut PostScript ties + {\n@iv=\z@\n@v=\pst@rega\n@vi\pst@regb + \loop\ifnum\n@v>\z@ + \ifodd\n@v{\br@tie}\fi\divide\n@v\f@ur + \advance\n@iv\@ne\divide\n@vi\f@ur + \repeat}% + \special{ps: slur@Dict begin /pss@rega \the\pss@rega\space N + /psc@rega \the\psc@rega\space N /pst@rega \the\pst@rega\space N end }% +% do all other mxtex stuff + \mxps@oldsuspend} + +% checking for lost slurs + +\def\checkslurs{ + \ifcase\pss@rega\else\message{Warning! Opened slur(s) at checkpoint!}\fi + \ifcase\psc@rega\else\message{Warning! Opened crescendo(s) at checkpoint!}\fi + \ifcase\pst@rega\else\message{Warning! Opened tie(s) at checkpoint!}\fi} + + +%%%%%% common abbreviations %%%%%%%%%%%%%%%%%%%% + +\def\isluru#1#2{\iSlur{#1}{#2}{\psslurraise}{\psislurskip}} +\def\islurd#1#2{\iSlur{#1}{#2}{-\psslurraise}{\psislurskip}} +\def\irsluru#1#2{\iSlur{#1}{#2}{\psslurraise}{\psrslurskip}} +\def\irslurd#1#2{\iSlur{#1}{#2}{-\psslurraise}{\psrslurskip}} +\def\ilsluru#1#2{\iSlur{#1}{#2}{\psslurraise}{\pslslurskip}} +\def\ilslurd#1#2{\iSlur{#1}{#2}{-\psslurraise}{\pslslurskip}} +\def\iLsluru#1#2{\iSlur{#1}{#2}{\psslurraise}{\psLslurskip}} +\def\iLslurd#1#2{\iSlur{#1}{#2}{-\psslurraise}{\psLslurskip}} + +\def\tfslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pstslurskip}{\psfslurhgt}{\psslurangul}} +\def\tslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pstslurskip}{\psslurhgt}{\psslurangul}} +\def\thslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pstslurskip}{\pshslurhgt}{\psslurangul}} +\def\tHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pstslurskip}{\psHslurhgt}{\psHslurangul}} +\def\tHHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pstslurskip}{\psHHslurhgt}{\psHHslurangul}} + +\def\trfslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psrslurskip}{\psfslurhgt}{\psslurangul}} +\def\trslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psrslurskip}{\psslurhgt}{\psslurangul}} +\def\trhslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psrslurskip}{\pshslurhgt}{\psslurangul}} +\def\trHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psrslurskip}{\psHslurhgt}{\psHslurangul}} +\def\trHHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psrslurskip}{\psHHslurhgt}{\psHHslurangul}} + +\def\tlfslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pslslurskip}{\psfslurhgt}{\psslurangul}} +\def\tlslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pslslurskip}{\psslurhgt}{\psslurangul}} +\def\tlhslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pslslurskip}{\pshslurhgt}{\psslurangul}} +\def\tlHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pslslurskip}{\psHslurhgt}{\psHslurangul}} +\def\tlHHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\pslslurskip}{\psHHslurhgt}{\psHHslurangul}} + +\def\tLfslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psLslurskip}{\psfslurhgt}{\psslurangul}} +\def\tLslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psLslurskip}{\psslurhgt}{\psslurangul}} +\def\tLhslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psLslurskip}{\pshslurhgt}{\psslurangul}} +\def\tLHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psLslurskip}{\psHslurhgt}{\psHslurangul}} +\def\tLHHslur#1#2{\tSlur{#1}{#2}{\psslurraise}{\psLslurskip}{\psHHslurhgt}{\psHHslurangul}} + +% slur ID, beam ID +\def\iBsluru#1#2{\gt@pssb{#2}{\tw@\qn@width}\I@slur{#1}{\psbslurraise}{2.4}} +\def\iBslurd#1#2{\gt@pssb{#2}\z@\I@slur{#1}{-\psbslurraise}0} +\def\tBfslur{\t@bslur\psfslurhgt\psslurangul} +\def\tBslur{\t@bslur\psslurhgt\psslurangul} +\def\tBhslur{\t@bslur\pshslurhgt\psslurangul} +\def\tBHslur{\t@bslur\psHslurhgt\psHslurangul} +\def\tBhHslur{\t@bslur\psHHslurhgt\psHHslurangul} + + +\def\itieu#1#2{\iTieu{#1}{#2}{\psitieskip}} +\def\itied#1#2{\iTied{#1}{#2}{\psitieskip}} +\def\iltieu#1#2{\iTieu{#1}{#2}{\pslslurskip}} +\def\iltied#1#2{\iTied{#1}{#2}{\pslslurskip}} +\def\irtieu#1#2{\iTieu{#1}{#2}{\psrslurskip}} +\def\irtied#1#2{\iTied{#1}{#2}{\psrslurskip}} +\def\ttie#1{\tTie{#1}{\psttieskip}} +\def\tltie#1{\tTie{#1}{\psltieskip}} +\def\trtie#1{\tTie{#1}{\psrtieskip}} + +\def\icresc#1{\Icresc{#1}{\d@nh}{0}} +\def\idecresc#1{\Idecresc{#1}{\d@nh}{0}} +\def\tcresc#1{\Tcresc{#1}{\d@nh}{2}} +\let\tdecresc\tcresc + +\def\ilcresc#1{\Icresc{#1}{\d@nh}{-4}} +\def\ildecresc#1{\Idecresc{#1}{\d@nh}{-4}} +\def\tlcresc#1{\Tcresc{#1}{\d@nh}{-2}} +\let\tldecresc\tlcresc + +\def\ircresc#1{\Icresc{#1}{\d@nh}{4}} +\def\irdecresc#1{\Idecresc{#1}{\d@nh}{4}} +\def\trcresc#1{\Tcresc{#1}{\d@nh}{-6}} +\let\trdecresc\trcresc + +% for compatibility with old MusiXTeX slurs ... +\let\Tslur\tslur +\let\Ttie\ttie +\let\issluru\irsluru +\let\isslurd\irslurd +\let\tsslur\tLslur +\def\ibsluru#1#2{\iSlur{#1}{#2}8{\psrslurskip}} +\def\ibslurd#1#2{\iSlur{#1}{#2}{-8}{\psrslurskip}} +\def\tubslur#1#2{\tSlur{#1}{#2}8{\psrslurskip}{\psslurhgt}{\psslurangul}} +\def\tdbslur#1#2{\tSlur{#1}{#2}8{\pslslurskip}{\psslurhgt}{\psslurangul}} +\let\tbsluru=\tubslur +\let\tbslurd=\tdbslur +\let\istieu\irtieu +\let\istied\irtied +\let\itenu\irtieu +\let\itenl\irtied +\let\tstie\tltie +\let\tten\tltie +\let\Itenu\istieu +\let\Itenl\istied +\let\Liftslur\liftslur +% p1 p2 sense len +\def\slur#1#2#3#4{\csname islur#3\endcsname{99}{#1}% + \rlap{\hskip#4\noteskip\tslur{99}{#2}}} +\def\tie#1#2#3{\csname itie#2\endcsname{99}{#1}% + \rlap{\hskip#3\noteskip\ttie{99}}} + +\catcode`\@=\catcodeat + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +USAGE: +~~~~~~ +Basic usage is: + +\isluru0g - starts upper slur with ID 0 above the note 'g' +\tslur0i - terminates slur with ID 0. It will end above or below + the note 'i' with respect to the slur direction + +You can shift the starting or ending point slightly to the left +or right using \ilsluru, \ilslurd, \irsluru, \irslurd, \trslur and \tlslur. + +And finally you can make the slur a bit more flat than default +( \tfslur0f ), higher ( \thslur0f ), more higher ( \tHslur0f ) or +even more higher ( \tHHslur0f ). All combinations with shifting are +allowed (see the abbreviations above). These commands act like +\midslur for standard slurs. + +If this is not sufficient, you can use the \iSlur and \tSlur and adjust the +parameter as you want (see comments above their definitions) or even change +the default parameters. + +NOTE 1: The identification parameter should be a number greater + or equal to 0 and lower than 10. You can use even higher + numbers, but slurs, ties and crescendos with ID >10 + can not go over page break but can go across line break. + Slurs, ties and crescendos with ID >14 can't be breaked at all + (these slurs also can not be exactly positioned at a beam, so + don't use for example \tbslur{16}0; \ibslur{16}0 is safe). + If you know that a line break can not occur inside the slur + (probably inside a bar) you can happily use numbers + up to 2^31-1, which is also the maximal number of + simultaneously opened slurs :-). Such slurs will be also + a bit faster... + +NOTE 2: You can start a slur, tie and crescendo with the same ID, + the ID's are independent. This is not true for crescendos + and decrescendos. That means you can say \isluru0f\icresc0, + but not \icresc0\idecresc0, in which case you'll get a warning + message and the first crescendo will be forgotten. + +There are also macros for slurs begining or ending at a beam: + +\iBsluru{slur ID}{beam ID} +\iBslurd{slur ID}{beam ID} +\tBslur{slur ID}{beam ID} + +They are NOT THE SAME as for the original slurs, but a bit smarter... + +for example: + +\Notes\ibu0i0\iBsluru00\qb0{eh}\tbu0\qb0i\ibu0j0\qb0{jl}\tbu0% + \setslurtext{6}\tBslur00\qb0e\en + +The \slurtext works for PostScript slurs exactly the same way as +for the bitmapped ones. When you say '\slurtext3', a number '3' will +be typeset in the middle of the next closed slur. +The position of the reference point of the box with text will be +exactly in the middle horizontally and adjusted according to the +height of the box in case of upper slur. + +This works only for non-breaked slurs, if the slur is breaked, +the text disappears. + +The placing of the slur text is done with a very dirty PostScript +hack, so I am not really sure that everything you want to typeset +will be placed at the correct position (if you are interested, see +the end of psslurs.pro for details). If you find something that won't +work, let me know. + +There is also an unpleasant side-effect: when you look at the +DVI-file with some standard (non-PostScript) driver, the figure will +be placed at the end of the slur instead of the middle. From obvious +reasons this can't be fixed --- TeX can't know where the middle is, +as the slur shape is defined by a PostScript program. + + +General coding is very simple: + +\i[h.shift]slur[u|d]{slur ID}{note height} +\t[h.shift][slur height]slur{slur ID}{note height} + +\iBslur[u|d]{slur ID}{beam ID} +\tB[slur height]slur{slur ID}{beam ID} + +where h. shift can be 'l', 'r' or nothing +and slur height can be 'f', nothing, 'h', 'H' or 'HH' + +Mnemonics: \tlfslur means 'terminate left flat slur'. + + +There are also simple slurs with same invocation and parameters as the +original ones. + + +Similarly the ties: +~~~~~~~~~~~~~~~~~~~ +\itieu0e +\ttie0 + +\i[h.shift]tie[u|d]{ID}{note height} +\t[h.shift]tie{ID} + + +And crescendos: +~~~~~~~~~~~~~~~ +\icresc0 +\tcresc0 draws a crescendo at a default position (defined with + \setcrescheight) + +NOTE 1: \tcresc is the same as \tdecresc. + +NOTE 2: The coding of crescendos is incompatible with original crescendos. + The difference (as you notices) is in defining the type + (crescendo/decrescendo) at the beginning instead of the end. + This can't be fixed, because the TeX must know this at the end + of the line when the crescendo is breaked. + + +You can shift the starting and ending point horizontally with + +\ilcresc \ildecresc +\ircresc \irdecresc +\tlcresc \tldecresc +\trcresc \trdecresc + +to get some space for \mf, \ff etc. + + +Furthermore, you can say: + +\Icresc0{-6}0 +\Tcresc0{-8}2 + +and you will get crescendo with ending point lower than the begining +one. (The '0' and '2' at the end is horizontal offset in \internote +from the current point.) Due to some implemenational reasons, you must +use numbered height when specifying the altitude of the crescendos. + + + +Dotted slurs and ties +~~~~~~~~~~~~~~~~~~~~~ +The slurs and ties can be dotted, when you say \dotted anywhere before +the begining of the slur or tie. The first slur or tie following this +command will then be drawed with dotted line. + +[dangerous bend] When you say \Dotted, then ALL slurs and ties + from this point will be dotted until you say +\Solid. Furthermore, inside the \Dotted...\Solid you can make single slur or +tie solid saying \solid before its begining. + +NOTE: These macros are taken into account only at the begining + of the slur or tie. + + +Collisions of slurs/ties and staff lines +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In PostScript it is possible to do some computations, which are very hard +to implement in TeX. One of neat features of the PS slurs and ties is a +check, whether the curve passes close the staff line and if so, adjustment +of the altitude of the curve to avoid collision ("black triangles" or narrow +white space). You can turn this feature on globally (\Sluradjust, +\Tieadjust) or locally (\sluradjust, \tieadjust), or disable it either +globally (\Nosluradjust, \Notieadjust) or locally (\nosluradjust, +\notieadjust). Default is \Sluradjust and \Notieadjust. "Locally" +means before the next opening command of the slur or tie. + + +Line breaking: +~~~~~~~~~~~~~~ +The slurs, ties and crescendos going across the line breaks are handled +automatically. Of course they can go over more lines than two (this is +true also for ties, though it would be somewhat strange). + +There is the classic \breakslur implemented, which sets the height of the +ending point slur at the end of a line to given number of \internotes. + +There is also a switch, \ifslopebrkslurs, indicating whether the ending point +of the first segment of the breaked slur (at the end of the line) should +be automatically raised by 3 \internote. You can turn this feature on by +the \slopebrkslurstrue and off by \slopebrkslursfalse commands, default +is false. + +You can raise or lower the starting point of the slur at the begining of +the next line with the command \liftslur with ID and the relative offset in +\internotes measured from the slur beginning height. Its usage and behavior +is the same as of the original \liftslur, only it is not necessary to code +it in \atnextstaff{}, just anywhere inside the slur. + +Similar is \liftcresc, but it works only for the middle part of crescendos +broken into three parts. The height of the last part of a broken crescendo +is defined with the height parameter of \Tcresc. + +As said before, anything with ID <10 is breaked fully automatically, but +you should be careful about the slurs, ties and crescendos with 10 <= ID < 15. +These can not go acress PAGE break, otherwise you'll get a PostScript error +like 's11hgt undefined'. Of course the LINE breaking works for them +automatically too. + +When a tie is continuead after breaking at the very beginning of a line, +only a half of the tie is drawn (the 'very beginning' means that the tie +would be less than 15pt long). To forbid this feature, say \nohalfties +(default is \halfties). A font called mxsk is necessary for \halfties. + + +Backwards compatibility +~~~~~~~~~~~~~~~~~~~~~~~ + +There are several "aliases" which allow to use the old, bitmapped slur +commands for PS slurs without any change. There are however a few differences: +- the \invertslur is not implemented yet +- the \curve and \midslur macros have no effect + + + + +Memory requrements +~~~~~~~~~~~~~~~~~~ + +I have tried to make the macros as small and fast as possible. The problem +about them is not in their size, but in their output. Each \i... and \t... +produces a \special command, which must be stored into the TeX's main memory. +Therefore, if too many slur occurs in one page, some memory troubles could +occur. In that case either use BigTeX (but I suppose you already do), or +use the bitmapped slurs. + + + +About the PS header: +~~~~~~~~~~~~~~~~~~~~ +The slurs need the PS header file psslurs.pro to be included into the +output PostScript file. You have to say this to dvips with command + +\special{header=psslurs.pro} + +placed anywhere inside the piece. As default, this is done when \inputting +the MusiXpss, but if you include the MusiXpss.tex into a format, the first +page of your document will be always empty. If you want the macros included +in your format file, comment the line 13 of this file and don't forget +to copy it into your source file. + +Warning to dvidvi users: If you select a set of pages from your document, +don't forget to include the page in which the \special command was used +(default is first page). Otherwise the dvips won't find this command and +won't include the header file, putting the PostScript device into a serious +problems. You can also use the "-h psslurs.pro" option to tell dvips to add +the header file manually. + + +About the slur shape: +~~~~~~~~~~~~~~~~~~~~~ +The shape is defined via trapezium: + + c + <----> b + <-----------------------------------------> + _ _ _________________________________ _ _ + | /^1 _____/ ^2 ^3 ^4\_____ 5^\ | ^ + / __/ \___ \ | + | /_/ \ \_\ | | + // this is the 'slur' \\ | a + |/ \\| | + |_________________________________________| v + 0 6 + +Points 0 and 6 are the starting and ending points. When the slope is not +zero, the trapezium is simply rotated, NOT slanted. + +'a' is computed as sqrt(b)*2, bounded with <3,\psslurmaxhgt> and multiplied +by the given height coeficient (see \tSlur and \t..slur, defaults to 1) +The units are not equal to anything common, the values were found +after a lot of testing. + +'c' is computed as angularity*b. Default angularity is 0.17, reasonable +values should lie in <0.1, 0.3>. + +Then the shape is corrected when the slur is so steep that its extreme +in horizontal direction lies inside the slur and shifted up or down +if it's top would be too close to nearest staff line (!!!!!!!!). + +The slur then consists of two bezier curves: +from 0 to 3 with control points 1 and 2 and +from 3 to 6 with control points 4 and 5. + +The shading is made according to its length and current \internote. + + + +If you are interested, see a slightly commented PS code in psslurs.pro. + +Bug reports and complainments are welcomed at: + + Stanislav Kneifl, + + standa@hiero.cz + + + +HISTORY +~~~~~~~ + +0.93 (17.2.2015) + changed definitions of AR, GDAR and GD to avoid collisions in certain PS files + +0.92 (12.5.2002) + added: \nosluradjust, \sluradjust, \notieadjust, \tieadjust + added: \slopebrkslurtrue, \slopebrkslurfalse + fixed: shaded slurs now do not break up to separate curves + at high resolutions + +0.91 (10.1.2002) + First public release, adopted from OpusTeX version. diff --git a/macros/musixtex/tex/musixref.tex b/macros/musixtex/tex/musixref.tex new file mode 100644 index 0000000000..dd7c9b92d8 --- /dev/null +++ b/macros/musixtex/tex/musixref.tex @@ -0,0 +1,305 @@ +% +% 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. +% + +%format musix + +% version compatible with T103 12 Aug. 2001 D. Taupin + +%II 59.9 + +\input musixtex +%\input musixcpt +\input musixhou +\input musixper +\input musixlit +\input musixgre +\input musixext + +\parindent 0mm +\nopagenumbers\nobarnumbers + +\ifx\MusiXTeX\indefined\def\MusiXTeX{MusiX\TeX}\fi +%\centerline{\cmbxbig\MusiXTeX---Reference}\medskip +\centerline{\Bigfont\MusiXTeX---Reference}\medskip +\centerline{\bigfont Pitches}\medskip +\tt +\def\bs{\char92} +\setclef1{6000} +\afterruleskip2pt +\startmuflex\startpiece +% +% Pitches +% +\addspace\afterruleskip +\notes\wh{`ABCDEFG!ABCDEFGHIJKLMNabcde}\off{-26\noteskip}% + \zchar{14}{\llap`A}\sk + \zchar{14}{\llap`B}\sk + \zchar{14}{\llap`C}\sk + \zchar{14}{\llap`D}\sk + \zchar{14}{\llap`E}\sk + \zchar{14}{\llap`F}\sk + \zchar{14}{\llap`G}\sk + \zchar{14}A\sk + \zchar{14}B\sk + \zchar{14}C\sk + \zchar{14}D\sk + \zchar{14}E\sk + \zchar{14}F\sk + \zchar{14}G\sk + \zchar{-5}{\llap'A}\zchar{14}H\sk + \zchar{-5}{\llap'B}\zchar{14}I\sk + \zchar{-5}{\llap'C}\zchar{14}J\sk + \zchar{-5}{\llap'D}\zchar{14}K\sk + \zchar{-5}{\llap'E}\zchar{14}L\sk + \zchar{-5}{\llap'F}\zchar{14}M\sk + \zchar{-5}{\llap'G}\zchar{14}N\sk + \zchar{14}a\sk + \zchar{14}b\sk + \zchar{14}c\sk + \zchar{14}d\sk + \zchar{14}e\sk\en +\stoppiece\vskip-3\Interligne\setclef1{0000}\contpiece +\notes\wh{abcdefghijklmnopqrstuvwxyz}\off{-26\noteskip}% + \zchar{-8}a\sk + \zchar{-8}b\sk + \zchar{-8}c\sk + \zchar{-8}d\sk + \zchar{-8}e\sk + \zchar{-8}f\sk + \zchar{-8}g\sk + \zchar{-8}h\zchar{-4}{\llap'a}\sk + \zchar{-8}i\zchar{-4}{\llap'b}\sk + \zchar{-8}j\zchar{-4}{\llap'c}\sk + \zchar{-8}k\zchar{-4}{\llap'd}\sk + \zchar{-8}l\zchar{-4}{\llap'e}\sk + \zchar{-8}m\zchar{-4}{\llap'f}\sk + \zchar{-8}n\zchar{-4}{\llap'g}\sk + \zchar{-8}o\zchar{-4}{\llap{'\kern-2pt'}a}\sk + \zchar{-8}p\zchar{-4}{\llap{'\kern-2pt'}b}\sk + \zchar{-8}q\zchar{-4}{\llap{'\kern-2pt'}c}\sk + \zchar{-8}r\zchar{-4}{\llap{'\kern-2pt'}d}\sk + \zchar{-8}s\zchar{-4}{\llap{'\kern-2pt'}e}\sk + \zchar{-8}t\zchar{-4}{\llap{'\kern-2pt'}f}\sk + \zchar{-8}u\zchar{-4}{\llap{'\kern-2pt'}g}\sk + \zchar{-8}v\zchar{-4}{\llap{'\kern-2pt'\kern-2pt'}a}\sk + \zchar{-8}w\zchar{-4}{\llap{'\kern-2pt'\kern-2pt'}b}\sk + \zchar{-8}x\zchar{-4}{\llap{'\kern-2pt'\kern-2pt'}c}\sk + \zchar{-8}y\zchar{-4}{\llap{'\kern-2pt'\kern-2pt'}d}\sk + \zchar{-8}z\zchar{-4}{\llap{'\kern-2pt'\kern-2pt'}e}\sk\en +\stoppiece +\medskip\centerline{\bigfont Notes, Accidentals, Accents, Clefs and Rests} +\medskip +% +% Notes& Accidentals +% +\contpiece +\Notes + \zchar{-4}{Accidentals:}% + \zchar9{\bs zmaxima}\zmaxima i\sk + \zchar{12}{\bs zlonga}\zlonga i\sk + \zchar9{\bs zbreve}\zbreve i\sk + \zchar{12}{\bs zwq}\zwq i\sk + \zchar{12}{\bs wh}\wh i% + \zchar{12}{\bs hu}\zchar{-4}>\hu{>f}% + \zchar{12}{\bs hl}\loff{\zchar{-4}{\bs cdsh}}\cdsh l\hl l% + \zchar{12}{\bs qu}\zchar{-4}\^\qu{^f}% + \zchar{12}{\bs ql}\loff{\zchar{-4}{\bs csh}}\csh l\ql l% + \zchar{12}{\bs cu}\zchar{-4}=\cu{=f}% + \zchar{12}{\bs cl}\loff{\zchar{-4}{\bs cna}}\cna l\cl l% + \zchar{12}{\bs ccu}\zchar{-4}\_\ccu{_f}% + \zchar{12}{\bs ccl}\loff{\zchar{-4}{\bs cfl}}\cfl l\ccl l% + \zchar{12}{\bs cccu}\zchar{-4}<\cccu{0 \def\bslstr##1{$\backslash$##1} \else\def\bslstr##1{} \fi +$$\vbox{ +\halign{ ## \quad & ## & ## \hfill & ## \hfill & ## \hfill & ## \hfill \cr +\ifnum #1=1 & & Explication des signes & Explanation of the signs & Zeichenerkl\"arung & Jelek magyar\'azata \cr \fi +\ifnum #1=0 & & {\bf Explication des signes} & {\bf Explanation of the signs} & {\bf Zeichenerkl\"arung} & {\bf Jelek magyar\'azata} \cr \fi +\cr + \AB & \bslstr{AB} & Tirez l'archet & down-bow & Abstrich & Lefel\'e \cr +\ifnum #1>0 \downbow & \bslstr{downbow} & Tirez l'archet & down-bow & Abstrich & Lefel\'e \cr \fi + \AUF & \bslstr{AUF} & Poussez l'archet & up-bow & Aufstrich & F\"olfel\'e \cr +\ifnum #1>0 \upbow & \bslstr{upbow} & Poussez l'archet & up-bow & Aufstrich & F\"olfel\'e \cr \fi +\cr + \SP & \bslstr{SP} & A la pointe & at the top & An der Spitze & Cs\'ucsn\'al \cr + \FR & \bslstr{FR} & Au talon & at the nut & Am Frosch & K\'ap\'an\'al \cr +\cr + \GB & \bslstr{GB} & Tout l'archet & whole bow & Ganzer Bogen & Eg\'esz von\'oval \cr +\ifnum #1>0 \Gb & \bslstr{Gb} & Tout l'archet & whole bow & Ganzer Bogen & Eg\'esz von\'oval \cr \fi + \UH & \bslstr{UH} & La moiti\'e inf\'erieure ... & lower half & Untere H\"alfte & A von\'o als\'o fele \cr +\ifnum #1>0 \Uh & \bslstr{Uh} & La moiti\'e inf\'erieure ... & lower half & Untere H\"alfte & A von\'o als\'o fele \cr \fi + \OH & \bslstr{OH} & La moiti\'e sup\'erieure ... & upper half & Obere H\"alfte & A von\'o fels\H{o} fele \cr +\ifnum #1>0 \Oh & \bslstr{Oh} & La moiti\'e sup\'erieure ... & upper half & Obere H\"alfte & A von\'o fels\H{o} fele \cr \fi + \MI & \bslstr{MI} & Au milieu ... & middle & In der Mitte & K\"oz\'epen \cr +\ifnum #1>0 \Mi & \bslstr{Mi} & Au milieu ... & middle & In der Mitte & K\"oz\'epen \cr \fi + \UD & \bslstr{UD} & Le premier tiers ... & lower third & Unteres Drittel & A von\'o als\'o harmada \cr +\ifnum #1>0 \Ud & \bslstr{Ud} & Le premier tiers ... & lower third & Unteres Drittel & A von\'o als\'o harmada \cr \fi + \OD & \bslstr{OD} & Le troisi\`eme tiers ... & upper third & Oberes Drittel & A von\'o fels\H{o} harmada \cr +\ifnum #1>0 \Od & \bslstr{Od} & Le troisi\`eme tiers ... & upper third & Oberes Drittel & A von\'o fels\H{o} harmada \cr \fi + & & \hfill ... de l'archet \cr +\cr + \Pizz & \bslstr{Pizz} & Pincez avec la main & left hand pizzicato & Pizzicato der linken & piccikat\'o bal k\'ezzel \cr + & & gauche & & Hand \cr + \Tr & \bslstr{Tr} & (ou trille) & (or trille) & (oder Triller) & (vagy trilla) \cr +}}$$} + diff --git a/macros/musixtex/tex/musixstf.tex b/macros/musixtex/tex/musixstf.tex new file mode 100644 index 0000000000..a73cf021ff --- /dev/null +++ b/macros/musixtex/tex/musixstf.tex @@ -0,0 +1,28 @@ +% musixstr.ref + +\input musixstr +\input musixste + +\parindent0pt\nopagenumbers + +\def\T#1{\zcharnote g{#1}\qa d} +\def\Sk#1{\off{0.#1\noteskip}} + +\centerline{\bigfont MusiXSTRings}\smallskip + +\nostartrule\def\nbinstruments{1}\generalsignature{0} +\startmuflex\startpiece\transpose=7% +\NOtes\Sk5% + \T{\downbow}\T{\AB}\T{\upbow}\T{\AUF}% + \T{\SP}\T{\FR}\T{\GB}\T{\Gb}\T{\UH}\T{\Uh}\T{\OH}% + \T{\Oh}\T{\MI}\T{\Mi}\T{\UD}\T{\Ud}\T{\OD}\T{\Od}% + \T{\Pizz}\T{\Tr}\en +\stoppiece\endmuflex + +\bigskip{\bf$\backslash$explainstr1}\smallskip\explainstr1 +\bigskip{\bf$\backslash$explainstr0}\smallskip\explainstr0 + +\vfill\eject + +\bye + diff --git a/macros/musixtex/tex/musixstr.tex b/macros/musixtex/tex/musixstr.tex new file mode 100644 index 0000000000..ac23af18f4 --- /dev/null +++ b/macros/musixtex/tex/musixstr.tex @@ -0,0 +1,47 @@ +% +% 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. +% +\immediate\write16{MUsiXSTRingaccents T.57\space<6 September 1996>}% + +% accents for strings by Werner Icking (Werner.Icking@gmd.de) + +\let\AB\downbow +\let\AUF\upbow +\def\SP{$\mathrel\triangleleft\joinrel\mid$} +\def\FR{$\mapstochar\mathrel=\joinrel\mid$} +\def\GB{$\longleftrightarrow$} +\def\Gb{$\leftrightarrow$} +\def\UH{$\longleftarrow$} +\def\Uh{$\leftarrow$} +\def\OH{$\longrightarrow$} +\def\Oh{$\rightarrow$} +\def\MI{$\mapstochar\relbar\joinrel\relbar\joinrel\mapstochar$} +\def\Mi{$\mapstochar\relbar\joinrel\mapstochar$} +\def\UD{$\longleftarrow\joinrel\mapstochar$} +\def\Ud{$\leftarrow\joinrel\mapstochar$} +\def\OD{$\mapstochar\longrightarrow$} +\def\Od{$\mapstochar\rightarrow$} + + + + +\def\Pizz{\kern-.3pt{\sevenrm+}} +\let\Tr\Pizz + +\endinput + diff --git a/macros/musixtex/tex/musixsty.tex b/macros/musixtex/tex/musixsty.tex new file mode 100644 index 0000000000..794a7ce336 --- /dev/null +++ b/macros/musixtex/tex/musixsty.tex @@ -0,0 +1,388 @@ +% +% 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\Tenpoint \else \endinput\fi + +\immediate\write16{MusiXtextSTYle T.123\space<04 March 2016>}% + +% modified by RDT to be independent of Computer Modern (other than Math fonts) +% RDT: added \headline{..} in \maketitle + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +\edef\catcode@gt{\the\catcode`\>}\catcode`\>=12 +\edef\catcode@lt{\the\catcode`\<}\catcode`\<=12 + +% non musical procedures used in typesetting the non-musical +% texts together with musictex + +% eight point math fonts + +\font\eighti=cmmi8 \skewchar\eighti='177 +\font\eightsy=cmsy8 \skewchar\eightsy='60 +% +% nine point math fonts +% +\font\ninei=cmmi9 \skewchar\ninei='177 +\font\ninesy=cmsy9 \skewchar\ninesy='60 +% +% eleven point math fonts (RDT: not used?) +% +\font\eleveni=cmmi10 scaled \magstephalf \skewchar\eleveni='177 +\font\elevensy=cmsy10 scaled \magstephalf \skewchar\elevensy='60 +% +% twelve point math fonts +% +\font\twelvei=cmmi12 \skewchar\twelvei='177 +\font\twelvesy=cmsy10 scaled \magstep1 \skewchar\twelvesy='60 +% +% fourteen point math fonts +% +\font\frti=cmmi12 scaled \magstep1 \skewchar\frti='177 +\font\frtsy=cmsy10 scaled \magstep2 \skewchar\frtsy='60 +% +% seventeen point math fonts +% +\font\svti=cmmi12 scaled \magstep2 \skewchar\svti='177 +\font\svtsy=cmsy10 scaled \magstep3 \skewchar\svtsy='60 +% +% twenty point math fonts +% +\font\twtyi=cmmi12 scaled \magstep3 \skewchar\twtyi='177 +\font\twtysy=cmsy10 scaled \magstep4\skewchar\twtysy='60 +% +% twenty five point math fonts +% +\font\twfvi=cmmi12 scaled \magstep4 \skewchar\twfvi='177 +\font\twfvsy=cmsy10 scaled \magstep5 \skewchar\twfvsy='60 +% +% +% SEVERAL DIFFERENT POINT SIZES +% +\def\Twfvpoint{\normalbaselineskip=30pt + \def\rm{\fam0\twfvrm}% + \def\it{\fam\itfam\twfvit}% + \def\sl{\fam\slfam\twfvsl}% + \def\bf{\fam\bffam\twfvbf}% + \def\smc{\twfvrm}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\twfvrm \scriptfont0=\twtyrm \scriptscriptfont0=\svtrm + \textfont1=\twfvi \scriptfont1=\twtyi \scriptscriptfont1=\svti + \textfont2=\twfvsy \scriptfont2=\twtysy \scriptscriptfont2=\svtsy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\twfvit \scriptfont\itfam=\twtyit + \textfont\slfam=\twfvsl \scriptfont\slfam=\twtysl + \textfont\bffam=\twfvbf \scriptfont\bffam=\twtybf + \scriptscriptfont\bffam=\twtybf + \setbox\strutbox=\hbox{\vrule height 22pt depth 8pt width 0pt}% + \def\tt{\twfvtt}\normalbaselines\rm +} +\def\twfvpoint{\Twfvpoint} +% +\def\Twtypoint{\normalbaselineskip=25pt + \def\rm{\fam0\twtyrm}% + \def\it{\fam\itfam\twtyit}% + \def\sl{\fam\slfam\twtysl}% + \def\bf{\fam\bffam\twtybf}% + \def\smc{\twtyrm}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\twtyrm \scriptfont0=\svtrm \scriptscriptfont0=\frtrm + \textfont1=\twtyi \scriptfont1=\svti \scriptscriptfont1=\frti + \textfont2=\twtysy \scriptfont2=\svtsy \scriptscriptfont2=\frtsy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\twtyit \scriptfont\itfam=\svtit + \textfont\slfam=\twtysl \scriptfont\slfam=\svtsl + \textfont\bffam=\twtybf \scriptfont\bffam=\svtbf + \scriptscriptfont\bffam=\svtbf + \setbox\strutbox=\hbox{\vrule height 18pt depth 7pt width 0pt}% + \def\tt{\twtytt}\normalbaselines\rm} +\def\twtypoint{\Twtypoint} +% +\def\Svtpoint{\normalbaselineskip=21pt + \def\rm{\fam0\svtrm}% + \def\it{\fam\itfam\svtit}% + \def\sl{\fam\slfam\svtsl}% + \def\bf{\fam\bffam\svtbf}% + \def\smc{\svtrm}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\svtrm \scriptfont0=\frtrm \scriptscriptfont0=\twelverm + \textfont1=\svti \scriptfont1=\frti \scriptscriptfont1=\twelvei + \textfont2=\svtsy \scriptfont2=\frtsy \scriptscriptfont2=\twelvesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\svtit \scriptfont\itfam=\frtit + \textfont\slfam=\svtsl \scriptfont\slfam=\frtsl + \textfont\bffam=\svtbf \scriptfont\bffam=\frtbf + \scriptscriptfont\bffam=\frtbf + \setbox\strutbox=\hbox{\vrule height 14.5pt depth 6.5pt width 0pt}% + \def\tt{\svttt}\normalbaselines\rm} +\def\svtpoint{\Svtpoint} +% +\def\Frtpoint{\normalbaselineskip=17pt + \def\rm{\fam0\frtrm}% + \def\it{\fam\itfam\frtit}% + \def\sl{\fam\slfam\frtsl}% + \def\bf{\fam\bffam\frtbf}% + \def\smc{\frtrm}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\frtrm \scriptfont0=\twelverm \scriptscriptfont0=\eightrm + \textfont1=\frti \scriptfont1=\twelvei \scriptscriptfont1=\eighti + \textfont2=\frtsy \scriptfont2=\twelvesy \scriptscriptfont2=\eightsy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\frtit \scriptfont\itfam=\twelveit + \textfont\slfam=\frtsl \scriptfont\slfam=\twelvesl + \textfont\bffam=\frtbf \scriptfont\bffam=\twelvebf + \scriptscriptfont\bffam=\twelvebf + \setbox\strutbox=\hbox{\vrule height 12pt depth 5pt width 0pt}% + \def\tt{\frttt}\normalbaselines\rm} +\def\frtpoint{\Frtpoint} +% +\def\Twlpoint{\normalbaselineskip=14pt + \def\rm{\fam0\twelverm}% + \def\it{\fam\itfam\twelveit}% + \def\sl{\fam\slfam\twelvesl}% + \def\bf{\fam\bffam\twelvebf}% + \def\smc{\twelverm}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\twelverm \scriptfont0=\tenrm \scriptscriptfont0=\eightrm + \textfont1=\twelvei \scriptfont1=\teni \scriptscriptfont1=\eighti + \textfont2=\twelvesy \scriptfont2=\tensy \scriptscriptfont2=\eightsy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\twelveit \scriptfont\itfam=\tenit + \textfont\slfam=\twelvesl \scriptfont\slfam=\tensl + \textfont\bffam=\twelvebf \scriptfont\bffam=\tenbf + \scriptscriptfont\bffam=\tenbf + \setbox\strutbox=\hbox{\vrule height 10pt depth 4pt width 0pt}% + \def\tt{\twelvett}\normalbaselines\rm} +\def\twlpoint{\Twlpoint} +\def\twelvepoint{\Twlpoint} +% +\def\Tenpoint{\normalbaselineskip\tw@lv@\p@ + \def\rm{\fam\z@\tenrm}% + \def\it{\fam\itfam\tenit}% + \def\sl{\fam\slfam\tensl}% + \def\bf{\fam\bffam\tenbf}% + \let\smc\tenrm + \def\mit{\fam\@ne}% + \def\cal{\fam\tw@}% + \textfont0\tenrm \scriptfont0\eightrm \scriptscriptfont0\eightrm + \textfont1\teni \scriptfont1\eighti \scriptscriptfont1\eighti + \textfont2\tensy \scriptfont2\eightsy \scriptscriptfont2\eightsy + \textfont3\tenex \scriptfont3\tenex \scriptscriptfont3\tenex + \textfont\itfam\tenit \scriptfont\itfam=\eightit + \textfont\slfam\tensl \scriptfont\slfam=\eightsl + \textfont\bffam\tenbf \scriptfont\bffam\eightbf + \scriptscriptfont\bffam\eightbf + \setbox\strutbox\hbox{\vrule\@height8\h@lf\p@\@depth3\h@lf\p@\@width\z@}% + \let\tt\tentt \normalbaselines\rm} +\let\tenpoint\Tenpoint + +\def\Eightpoint{\normalbaselineskip\t@n\p@ + \def\rm{\fam\z@\eightrm}% + \def\it{\fam\itfam\eightit}% + \def\sl{\fam\slfam\eightsl}% + \def\bf{\fam\bffam\eightbf}% + \def\tt{\eighttt} + \def\mit{\fam\@ne}% + \def\cal{\fam\tw@}% + \textfont0\eightrm \scriptfont0\eightrm \scriptscriptfont0\eightrm + \textfont1\eighti \scriptfont1\eighti \scriptscriptfont1\eighti + \textfont2\eightsy \scriptfont2\eightsy \scriptscriptfont2\eightsy + \textfont3\tenex \scriptfont3\tenex \scriptscriptfont3\tenex + \textfont\itfam\eightit + \textfont\slfam\eightsl + \textfont\bffam\eightbf \scriptfont\bffam\eightbf + \scriptscriptfont\bffam\eightbf + \setbox\strutbox\hbox{\vrule\@height\s@v@n\p@\@depth\thr@@\p@\@width\z@}% + \normalbaselines\rm} +\def\eightpoint{\Eightpoint} +% +\def\Ninepoint{\normalbaselineskip=10pt + \def\rm{\fam0\ninerm}% + \def\it{\fam\itfam\nineit}% + \def\sl{\fam\slfam\ninesl}% + \def\bf{\fam\bffam\ninebf}% + \def\mit{\fam 1}% + \def\cal{\fam 2}% + \textfont0=\ninerm \scriptfont0=\ninerm \scriptscriptfont0=\ninerm + \textfont1=\ninei \scriptfont1=\ninei \scriptscriptfont1=\ninei + \textfont2=\ninesy \scriptfont2=\ninesy \scriptscriptfont2=\ninesy + \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex + \textfont\itfam=\nineit \scriptfont\itfam=\nineit + \textfont\slfam=\ninesl \scriptfont\slfam=\ninesl + \textfont\bffam=\ninebf \scriptfont\bffam=\ninebf + \scriptscriptfont\bffam=\ninebf + \setbox\strutbox=\hbox{\vrule height 7pt depth 3pt width 0pt}% + \def\tt{\ninettt}\normalbaselines\rm} +\def\ninepoint{\Ninepoint} + +% GENERAL FOOTNOTES + +\newcount\footmarkcount + +\def\resetfootnote{\global\footmarkcount\z@ } +\def\footmarknumber{\raise\smallvalue ex\hbox{% + \eightpoint\rm\the\footmarkcount}} + +\def\Footnote#1{\global\advance\footmarkcount\@ne + \footnote{\footmarknumber}{#1}} + +% \TeX book footnote +% En cas de panique: couper en deux (une seule note autorisee) + +\def\markfootnote{{\advance\footmarkcount\@ne \footmarknumber}} + +\def\realfootnote#1{\global\advance\footmarkcount\@ne + \vfootnote{{\footmarknumber}#1}} + +% to enable inserting different \hsize (two columns case) +\let\footnotehsize\empty + +\def\vfootnote#1{\insert\footins\bgroup\parskip\z@\eightpoint + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox \advance\splittopskip\p@ + \splitmaxdepth\dp\strutbox \floatingpenalty20000 + \leftskip\z@ \rightskip\z@ + \spaceskip\z@ \xspaceskip\z@ + \eightpoint\footnotehsize\noindent{#1}\footstrut\futurelet\next\fo@t} + +\def\footnoterule{\vskip-\thr@@\p@\hrule\@width2truein \vskip 2.6\p@} + +\def\aujourdhui{\space\number\day\space% + \ifcase\month\or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or + juillet\or ao\^ut\or septembre\or octobre\or novembre\or d\'ecembre\fi + \space\number\year} +\def\today{\space% + \ifcase\month\or January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day,\space\number\year} +\def\cenboxit#1{\centerline{\boxit{#1}}} +\def\Item{\medskip\item} + +\newdimen\theslant +\def\fup#1{\raise 0.8ex\hbox{\theslant=\fontdimen1\the\font\kernm.03em\kern \theslant\the\scriptfont\fam #1}} + +\def\umero{\fup{o}} +\def\ieme{\fup{e}} +\def\ier{\fup{er}} +\let\titremorceau\empty +\def\title#1{\def\titremorceau{#1}} +\def\shorttitle{\title} +\def\subtitle#1{\def\subt@itremorceau{#1}} +\let\headt@itremorceau\undefined +\def\headtitle#1{\def\headt@itremorceau{#1}} +\def\fulltitle{\headtitle} +\let\othert@itremorceau\empty +\def\othermention#1{\def\othert@itremorceau{#1}} + +\let\headl@ne\undefined +\def\headline#1{\def\headl@ne{#1}} + +\let\s@hortauthor\empty +\def\shortauthor#1{\def\s@hortauthor{(#1)}} + +\def\fullauthor#1{\def\f@ullauthor{#1}} +\def\author{\fullauthor} + +\newif\ifcopyright + +\def\outmorceau{\shipout\vbox{\vbox to \vsize{\vss\pagecontents\vss}\line{% +\ifodd\pageno\sl \titremorceau\ \s@hortauthor +\ifcopyright\rm$\copyright$\fi\hss \number\pageno +\else\rm\number\pageno\hss\sl \titremorceau\ \s@hortauthor +\ifcopyright\rm$\copyright$\fi\fi}}% + \global\advance\count0 by 1\relax + \ifnum\outputpenalty>-20000 \else\dosupereject\fi}% + +\output{\outmorceau} + +\def\maketitle{% +\ifx\headl@ne\undefined\else\line{\headl@ne}\bigskip\fi% for version 123 RDT +\centerline{\BIGfont \ifx\headt@itremorceau\undefined + \titremorceau\else\headt@itremorceau\fi} +\medskip +\ifx\subt@itremorceau\undefined\else + \centerline{\sl \subt@itremorceau} +\medskip +\fi + + +\hbox to \hsize{\vtop{\def\\{\hss\egroup\hbox to 0.5\hsize\bgroup\relax}\relax + \hbox to 0.5\hsize + \bgroup\othert@itremorceau\hss + \egroup + }\hss + \vtop{\def\\{\egroup\hbox to 0.5\hsize\bgroup\relax\hss}\relax + \hbox to 0.5\hsize + \bgroup\hss\f@ullauthor + \egroup + }} +\bigskip +} + + +\def\rectoverso#1{% +\def\outmorceau{\shipout\hbox{\null\ifodd\pageno\kern #1\relax + \else\kern -#1\relax + \fi + \vbox{\vbox to \vsize{\vss\pagecontents\vss}\line{% +\ifodd\pageno\sl \titremorceau\ \s@hortauthor +\ifcopyright\rm$\copyright$\fi\hss \number\pageno +\else\rm\number\pageno\hss\sl \titremorceau\ \s@hortauthor +\ifcopyright\rm$\copyright$\fi\fi}}}% + \global\advance\count0 by 1\relax + \ifnum\outputpenalty>-20000 \else\dosupereject\fi}% + +\output{\outmorceau}} + + + +\catcode`\>=\catcode@gt +\catcode`\<=\catcode@lt +\catcode`\@=\catcodeat + +%%% A4 (210mm x 297mm): +\hsize=190mm %%% adjust to increase/decrease printer margins +\vsize=270mm %%% adjust to increase/decrease printer margins +\hoffset=210mm\advance\hoffset-\hsize\divide\hoffset2 +\advance\hoffset-1.0in % TeX convention +\voffset=297mm\advance\voffset-\vsize\divide\voffset2 +\advance\voffset-1.0in % TeX convention + +%%% letter-size (8.5in x 11.0in): +%\hsize=7.5in %%% adjust to increase/decrease printer margins +%\vsize=10.0in %%% adjust to increase/decrease printer margins +%\hoffset=8.5in\advance\hoffset-\hsize\divide\hoffset2 +%\advance\hoffset-1.0in % TeX convention +%\voffset=11.0in\advance\voffset-\vsize\divide\voffset2 +%\advance\voffset-1.0in % TeX convention + +%%% To determine the *minimal* margins supported by your +%%% printer and check for printer mis-alignment, process +%%% testpage.tex with LaTeX and print the result. + +\tenpoint + +%%%%%%% adjust here for a non-centering printer %%%%%%%% +%\advance\hoffset 0mm +%\advance\voffset 0mm + +\endinput diff --git a/macros/musixtex/tex/musixtex.tex b/macros/musixtex/tex/musixtex.tex new file mode 100644 index 0000000000..55382f5dfe --- /dev/null +++ b/macros/musixtex/tex/musixtex.tex @@ -0,0 +1,5707 @@ +% +% 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{29} +\def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum +\def\mxversuffix{}% +\edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} +\def\mxdate{2018-08-04} + +\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% +\everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% + + +% version 1.29 + +% defined \tabfnt, \tabcleffnt, \tabstringfnt, \tab etc. to support tablature + +% version 1.28 + +% defined +% \z[left|right|leftright]repeat, for use *within* a bar +% \zz...repeat, to force to the end of a system +% corrected definition of \C@Inter for \nblines < 4 + +% version 1.27 + +% introduced \meterN +% eliminated \ds@oup +% introduced \nqqb \nqqh \nqqqb \nqqqh abbreviations and +% synonyms \nqql \nqqu \nqqql \nqqqu +% introduced \hap, \happ analogous to \qap, \qapp +% introduced \hbsk analogous to \hsk +% introduced \bqsk, \bhsk, \btsk analogous to \qsk, \hqsk, \tqsk +% introduced \xxtuplet + +% version 1.26 + +% deleted spurious definition in \resetlayout and +% spurious space in definition of \interfacteur... + +% version 1.25 + +% included a "dummy" tuplet.tex in the distribution +% added \ignorespaces in musixltx.tex +% defined \qap, \qapp, \tqsk + +% version 1.24 + +% preserve changes to \transpose in an hboxed tremolo command +% test that musixtex.tex has already been loaded in some extensions: +% musixps, musixec, musixhv, musixplt, musixtmr, musixppff +% changed from \it to \ppff in several places +% support new command \setinterstaff{n}{m} +% define \largenotesize, \Largenotesize +% correct typos \twtybf[g] \svtbf[g] + +% version 1.23 + +% added \xtr and \ptr ornaments +% adjusted spacing of \tr +% corrected definition of \C@Inter for \nblines > 6 + +% version 1.22 + +% bi and sc font definitions added; sl and tt definitions for musixsty moved +% explicit font choices for \txtfont replaced by generic commands \smalltype\it etc. +% \pdlud \halfwidthbigwedge and \raise-height font-dependent +% \cbreath and \zbreath use \BIGtype rather than \BIGfont + + +% version 1.21 + +% RDT adjusted the offsets and/or vertical positions for some tremolos +% RDT moved \lastbarpos\lin@pos after calls to \Writ@meters +% to correct \centerbar positioning +% RDT copied the definition of \Hpause from musixlit.tex +% RDT introduced \Changeclefs, \cHpause and \centerHpause +% RDT replaced \smalltype\it by \txtfont in octave clef commands +% RDT moved definitions of \txtfont into \comput@fonts +% RDT added support for piano-pedal bracket notation + +% version 1.20 + +% RDT re-defined tremolo commands to allow for numerical pitches; +% use of \raise and \hbox suggested by Jean-Pierre Colon + +% version 1.19: + +% RDT corrected typos in the definition of \comput@fonts +% affecting ppff fonts for \Largemusicsize +% RDT introduced definitions for tremolo commands \trml, \trmu, etc. +% RDT turned off lyrics for \metron and \metronequiv notes + +% version 1.18: + +% RDT added definitions of \raggedstoppiece and \slide from musixext.tex +% RDT increased the length of beam stems (adapted from J.-P. Coulon) + +% version 1.17: + +% RDT re-defined \txtfont for non-normal staff sizes +% RDT defined \tinyppff and \ppfftwelve, and re-defined \ppff to be staffsize dependent +% RDT introduced \tqqb \tqqh \tqqqb \tqqqh abbreviations +% and synonyms \tqql \tqqu \tqqql \tqqqu +% RDT introduced ornaments \tr, \trt +% RDT re-defined \triolet to be consistent with musixdoc (prints \txt, not nec. 3) +% RDT introduced \cpause etc. and corrected definitions of \centerpause etc. +% RDT introduced double-dotted rests \qppp, \dspp, \qspp, etc. + +% version 1.16: + +% RDT corrected the definitions of \nnotes and \nnnotes + +% HM corrected the definitions for cautionary small accidentals + +% RDT added \check@staff ... \fi to \@qa h, \@mca, \hs, \qqs +% so that \qa, \ca, \ha, etc. can be "hidden" using \setstaffs{n}{0} + +% RDT incorporated tuplet.tex (approved by George Sicherman) +% and introduced \txtfont to allow changing size or style + +% RDT introduced +% \qqsk, a one-quarter notehead skip +% \tqu and \tql, synonyms for \tqh and \tqb +% \ztqu and \ztql, synonyms for \ztqh and \ztqb +% \hpp, \qpp, \dsp, \qsp, \hsp, \qqsp for pointed rests +% \nnotes, \nnnotes: 1.6 and 1.28 \elemskip spacing +% \zcn, \ccn, \lcn, synomyms for \zcharnote etc. + +% RDT incorporated curly.tex (approved by Mthimkhulu Molekwa) + +% RDT modernized the treatment of text fonts +% meterfonts must be bf, even if titling fonts are rm or sc +% added dynamic-mark macros \sfz \sfzp + +% version 1.15: + +% moved out: +% - 1/128th beams -> musixbm +% - triple pointed notes -> musixtri + +% and shrinked the memory consumption + +%++ickd 19Sep1997: with help of William P. Houser introduced dotted slurs. +% Changes marked with +ickd for added single lines, -ickd for replaced +%++ickd single lines, ++ickd...++ickd for added blocks + +%++simick 04Dec2000: Don Simons and Werner Icking made some improvements +% to volta-processing and centerbar processing the changes are +% marked with +simick for added single lines, -simick for +%++simick replaced lines and ++simick...++simick for added blocks + +% Hiroaki, May2010, T.115: change register allocation codes into new ones +% which enables >12 elements. Search the string "version 1.15" for details. +% + +% TeXperts may want to change the next + +% PARAMETER DIFFERENT THAN PLAIN + +\showboxdepth=0 +\showboxbreadth=0 + +\ifx\undefined\documentstyle % -> []plain.tex + \parindent0pt + \hoffset-15.4mm + \voffset-10mm + \hsize190mm + \vsize260mm +\fi + +%%% from LaTeX +% The following definitions save token space. E.g., using \@height +% instead of height saves 5 tokens at the cost in time of one macro +% expansion. + +\def\@height{height} +\def\@depth{depth} +\def\@width{width} + +%%% also removed 'by', '=' + +\def\@to{to} +\def\p@ne{.1} +\def\qu@rt{.25} +\def\h@lf{.5} +\def\p@seven{.7} + +%%%from plain +% To make the macros more efficient in time and space, +% several constant values are declared here as control sequences +% If they were changed, anything could happen; so they are private symbols + +%\chardef\active=13 +%\chardef\&=`\& -> 38 +%\chardef\#=`\# -> 35 +%\chardef\$=`\$ -> 36 +% Nomenclature: '@' means most times 'e' or seperator, sometimes 'o','a' + +\chardef\f@ur=4 +\chardef\fiv@=5 +\chardef\si@=6 +\chardef\s@v@n=7 +\chardef\@ight=8 +\chardef\nin@=9 +\chardef\t@n=10 +\chardef\@l@v@n=11 +\chardef\tw@lv@=12 +\chardef\fourt@@n=14 +\chardef\fiv@t@@n=15 +\chardef\tw@nty=20 +\chardef\@xxiii=23 +\chardef\@xxv=25 +\chardef\@xxiv=24 +\chardef\@xxvi=26 +\chardef\@xxvii=27 +\chardef\@xxix=29 +\chardef\@xxxii=32 +\chardef\@xl=40 +\chardef\@xli=41 +\chardef\@xlv=45 +\chardef\@l=50 +\chardef\@lii=52 +\chardef\@liv=54 +\chardef\@lxxxiii=83 +\chardef\@c=100 +\chardef\@cxv=115 +\chardef\@cxxviii=128 + +\newif\ifcatcodesmusic + +\def\catcodesmusic{\ifcatcodesmusic\relax + \else + \edef\catcode@gt{\the\catcode`\>}\catcode`\>\tw@lv@ + \edef\catcode@lt{\the\catcode`\<}\catcode`\<\tw@lv@ + \edef\catcode@vert{\the\catcode`\|}\catcode`\|\active + \edef\catcode@and{\the\catcode`\&}\catcode`\&\active + \edef\catcode@excl{\the\catcode`\!}\catcode`\!\tw@lv@ + \edef\catcode@star{\the\catcode`\*}\catcode`\*\tw@lv@ + \edef\catcode@pt{\the\catcode`\.}\catcode`\.\tw@lv@ + \edef\catcode@sc{\the\catcode`\:}\catcode`\:\tw@lv@ + \let\@@bar\bar + \def\bar{\barre}% + \fi\catcodesmusictrue} + +\catcodesmusic + +% MusicTeX + MuFlex -> MusiXTeX +\def\musixtex{MusiX\TeX} + +\def\kernm{\kern-} + +%...\let\@wloG=\wlog +%...\def\wlog#1{} + +%%% account registers + +% \let\maxinstruments\si@ % [version 1.15] here disabled to avoid conflict + +% temporary registers + +\newcount\n@i +\newcount\n@ii +\newcount\n@iii +\newcount\n@iv +\newcount\n@v +\newcount\n@vi +\newcount\n@vii +\newcount\n@viii +\newcount\count@ + +\newbox\toks@box +\newbox\w@rkbox +\newbox\n@otebox + +\newdimen\y@ +\newdimen\y@i +\newdimen\y@ii +\newdimen\y@iii +\newdimen\y@iv +\newdimen\y@v + +% [version 1.15] moved out to the new register allocation code -- start from here -- +% altitude +% \newskip\k@ii +% InterNote +% \newdimen\i@ni +\def\i@n{\z@} % safety in case of.... +% positions x et z de debut des poutres +% \newdimen\b@xi \newdimen\b@zi +% \newdimen\c@xi \newskip\c@zi +% \newdimen\d@xi \newskip\d@zi +% \newdimen\e@xi \newskip\e@zi +% \newdimen\f@xi \newskip\f@zi +% pentes des poutres ( entier de -9 a +9 ) +% multiplicite des poutres ( de -5 a +5 . 0= inactive ) +% \newcount\b@pi \newcount\b@ni +% Number of Portees +% \newcount\n@pi \n@pi\@ne +% Actual Signs Old Signs +% \newcount\a@si \newcount\o@si +% ActualCleftoks +% \newtoks\a@ci \a@ci={{\z@}{\z@}{\z@}{\z@}} +% OldCleftoks +% \newtoks\o@ci +% MeterToks +% \newtoks\m@ti +% Altitude of choir groups +% \newskip\g@bi +% Height of choir groups +% \newskip\g@hi + +% [version 1.15] moved out to the new register allocation code -- until here -- +% \let\maxgroups\thr@@ % maximum three groups of instruments or choirs [version 1.15] moved to later, using \setmaxgroups +\newcount\group@no + +%%% [version 1.15] new register allocation code -- start from here -- +% +% register allocation for use inside \loop...\if...\repeat +% (only for plain, but no harm even in case of LaTeX) +\edef\noexpand@newcount{\noexpand\newcount}% +\edef\noexpand@newdimen{\noexpand\newdimen}% +\edef\noexpand@newskip{\noexpand\newskip}% +%\edef\noexpand@newmuskip{\noexpand\newmuskip}% not used +%\edef\noexpand@newbox{\noexpand\newbox}% not used +\edef\noexpand@newtoks{\noexpand\newtoks}% +%\edef\noexpand@newmarks{\noexpand\newmarks}% not used +% +% a shortcut for register allocation routines +\def\roman@c@{\romannumeral\count@}% +% +% some registers (i@n, b@x, b@z, c@x, d@x, e@x, s@x, s@Y) +% should be allocated by \newdimen (for id 0...5) and \newskip (for id 6...11) +% because T.114 and earlier did so and for the compatibility to Stanislav +% Kneifl's musixps.tex 0.92a. +% And again \newdimen (for id>11), because both \dimen and \skip are +% applicable but \dimen uses less memory in case of >255 on e-TeX. +\def\noexpand@newdimsk{% + \ifnum\count@<7 \let\@@newdimsk=\noexpand@newdimen + \else\ifnum\count@<13 \let\@@newdimsk=\noexpand@newskip + \else\let\@@newdimsk=\noexpand@newdimen + \fi\fi \@@newdimsk}% +% +% and some other registers (c@z, d@z, e@z, f@z, g@z) +% should be allocated by \newskip (for id 0...11) and \newdimen (for id>11) +% for the same reason of above. +\def\noexpand@newskdim{% + \ifnum\count@<13 \let\@@newskdim=\noexpand@newskip + \else \let\@@newskdim=\noexpand@newdimen + \fi \@@newskdim}% +% +% registers for instrument +\newdimen\interinstrument % moved from "distance between instruments" to here +\def\setmaxinstruments#1{% + \ifnum#1>\@oldmaxinstruments + \chardef\maxinstruments=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxinstruments=\@c + \fi + \count@\@oldmaxinstruments\loop + \advance\count@ by\@ne + % + \expandafter \let \csname interinstrument\roman@c@\endcsname \interinstrument + \expandafter\def\csname interfacteur\roman@c@\endcsname{\interfacteur}% RDT 1.26 + % + % altitude + \expandafter \noexpand@newskip \csname k@i\roman@c@\endcsname + % + % InterNote + \expandafter \noexpand@newdimsk \csname i@n\roman@c@\endcsname + % + % beam horizontal positions: x=start, z=end, 8th-64th beams + \expandafter \noexpand@newdimsk \csname b@x\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname b@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname c@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname c@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname d@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname d@z\roman@c@\endcsname + \expandafter \noexpand@newdimsk \csname e@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname e@z\roman@c@\endcsname + % + % pentes des poutres ( entier de -9 a +9 ) (slopes of the beams) + % multiplicite des poutres ( de -5 a +5 . 0= inactive ) (multiplicity of the beams) + \expandafter \noexpand@newcount \csname b@p\roman@c@\endcsname + \expandafter \noexpand@newcount \csname b@n\roman@c@\endcsname + % + % Number of Portees + \expandafter \noexpand@newcount \csname n@p\roman@c@\endcsname + \csname n@p\roman@c@\endcsname\@ne + % + % Actual Signs + \expandafter \noexpand@newcount \csname a@s\roman@c@\endcsname + % + % Old Signs + \expandafter \noexpand@newcount \csname o@s\roman@c@\endcsname + % + % ActualCleftoks + \expandafter \noexpand@newtoks \csname a@c\roman@c@\endcsname + \csname a@c\roman@c@\endcsname={{\z@}{\z@}{\z@}{\z@}}% + % + % OldCleftoks + \expandafter \noexpand@newtoks \csname o@c\roman@c@\endcsname + % + % MeterToks + \expandafter \noexpand@newtoks \csname m@t\roman@c@\endcsname + % + % staffsize + \expandafter \let \csname staffspacing\roman@c@\endcsname \@ne + % + % text, lyrics, free positioning of chars + \expandafter \let \csname T@R\roman@c@\endcsname \z@ + % + % preset clef symbols + \expandafter \let \csname treblec@s\roman@c@\endcsname \z@ + \expandafter \let \csname altoc@s\roman@c@\endcsname \z@ + \expandafter \let \csname bassc@s\roman@c@\endcsname \z@ + % + % preset default staff lines as 5 + \expandafter \let \csname n@l\roman@c@\endcsname \fiv@ + % + \ifnum\count@<\maxinstruments\repeat + \expandafter\message\expandafter{maxinstruments=\the\maxinstruments}% + \chardef\@oldmaxinstruments=\maxinstruments\relax% + \normalnotesize\resetlayout + \fi +}% +% +% registers for 128th beam +\def\setmaxcxxviiibeams#1{% + \ifnum#1>\maxinstruments + \errmessage{The number of 128th beam must not exceed maxinstruments}% + \else + \ifnum#1>\@oldmaxcxxviiibeams + \chardef\maxcxxviiibeams=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxcxxviiibeams=\@c + \fi + \count@\@oldmaxcxxviiibeams \loop + \advance\count@ by\@ne + \expandafter \noexpand@newdimen \csname f@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname f@z\roman@c@\endcsname + \ifnum\count@<\maxcxxviiibeams\repeat + \expandafter\message\expandafter{max128beams=\the\maxcxxviiibeams}% + \chardef\@oldmaxcxxviiibeams=\maxcxxviiibeams\relax% + \fi + \fi +}% +% +% registers for 256th beam +\def\setmaxcclvibeams#1{% + \ifnum#1>\maxcxxviiibeams + \errmessage{The number of 256th beam must not exceed the number of 128th beam}% + \else + \ifnum#1>\@oldmaxcclvibeams + \chardef\maxcclvibeams=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxcclvibeams=\@c + \fi + \count@\@oldmaxcclvibeams \loop + \advance\count@ by\@ne + \expandafter \noexpand@newdimen \csname g@x\roman@c@\endcsname + \expandafter \noexpand@newskdim \csname g@z\roman@c@\endcsname + \ifnum\count@<\maxcclvibeams\repeat + \expandafter\message\expandafter{max256beams=\the\maxcclvibeams}% + \chardef\@oldmaxcclvibeams=\maxcclvibeams\relax% + \fi + \fi +}% +% +% registers for choir group +\def\setmaxgroups#1{% + \ifnum#1>\@oldmaxgroups + \chardef\maxgroups=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxgroups=\@c + \fi + \count@\@oldmaxgroups \loop + \advance\count@ by\@ne + % Altitude + \expandafter \noexpand@newskip \csname g@b\roman@c@\endcsname + % Height + \expandafter \noexpand@newskip \csname g@h\roman@c@\endcsname + % + \expandafter \let \csname lowersonginstrum\roman@c@\endcsname \maxdimen + \expandafter \let \csname uppersonginstrum\roman@c@\endcsname \z@ + \ifnum\count@<\maxgroups\repeat + \expandafter\message\expandafter{maxgroups=\the\maxgroups}% + \chardef\@oldmaxgroups=\maxgroups\relax% + \fi +}% +% +% registers for slur +\def\setmaxslurs#1{% + \ifnum#1>\@oldmaxslurs + \chardef\maxslurs=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxslurs=\@c + \fi + \count@\@oldmaxslurs \loop + \advance\count@ by\@ne + % + % horizontal start position of slur + \expandafter \noexpand@newdimsk \csname s@x\roman@c@\endcsname + % + % sense u,d and x (flag) for pending slurs + \expandafter \noexpand@newtoks \csname s@s\roman@c@\endcsname + \csname s@s\roman@c@\endcsname={x}% + % + % vertical offset of slur + \expandafter \noexpand@newdimsk \csname s@Y\roman@c@\endcsname + % + % altportee of slur + \expandafter \noexpand@newskip \csname s@a\roman@c@\endcsname + % + % vertical start position of slur [steps of internote] + \expandafter \noexpand@newcount \csname s@y\roman@c@\endcsname + % + % instrument number of that slur (to retrieve internote) + \expandafter \noexpand@newcount \csname s@N\roman@c@\endcsname + % + % vertical end position of slur [steps of internote], used from + % \breakslur. the value \maxdimen is used to decide, if + % \breakslur is used or not (flag) + \expandafter \noexpand@newcount \csname s@z\roman@c@\endcsname + \csname s@z\roman@c@\endcsname\maxdimen + % + %++ickd: dotted indicator for pending slurs + \expandafter \noexpand@newtoks \csname s@d\roman@c@\endcsname + % + \ifnum\count@<\maxslurs\repeat + \expandafter\message\expandafter{maxslurs=\the\maxslurs}% + \chardef\@oldmaxslurs=\maxslurs\relax% + \fi +}% +% +% registers for trill (MusiXTeX-type trill only. Legacy \trillC and +% \TrillC are out of the scope.) +\def\setmaxtrills#1{% + \ifnum#1>\@oldmaxtrills + \chardef\maxtrills=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxtrills=\@c + \fi + \count@\@oldmaxtrills \loop + \advance\count@ by\@ne + % starting horizontal pos + \expandafter \noexpand@newskip \csname tr@x\roman@c@\endcsname + \csname tr@x\roman@c@\endcsname\maxdimen\relax + % heading of trill + \expandafter \noexpand@newtoks \csname tr@sw\roman@c@\endcsname + % height of trill + \expandafter \noexpand@newskip \csname tr@y\roman@c@\endcsname + \ifnum\count@<\maxtrills\repeat + \expandafter\message\expandafter{maxtrills=\the\maxtrills}% + \chardef\@oldmaxtrills=\maxtrills\relax% + \fi +}% +% +% registers for octave line +\def\setmaxoctlines#1{% + \ifnum#1>\@oldmaxoctlines + \chardef\maxoctlines=#1\relax + \ifnum#1>\@c + \errmessage{The maximum reference number of elements is limited to \the\@c} + \chardef\maxoctlines=\@c + \fi + \count@\@oldmaxoctlines \loop + \advance\count@ by\@ne + % starting horizontal pos + \expandafter \noexpand@newskip \csname o@x\roman@c@\endcsname + \csname o@x\roman@c@\endcsname\maxdimen\relax + % height of octline + \expandafter \noexpand@newskip \csname o@y\roman@c@\endcsname + % sense of octline + \expandafter \noexpand@newtoks \csname o@sw\roman@c@\endcsname + \ifnum\count@<\maxoctlines\repeat + \expandafter\message\expandafter{maxoctlines=\the\maxoctlines}% + \chardef\@oldmaxoctlines=\maxoctlines\relax% + \fi +}% +% +\chardef\@oldmaxinstruments=\z@ +\chardef\@oldmaxcxxviiibeams=\z@ +\chardef\@oldmaxcclvibeams=\z@ +\chardef\@oldmaxgroups=\z@ +\chardef\@oldmaxslurs=\z@ +\chardef\@oldmaxtrills=\z@ +\chardef\@oldmaxoctlines=\z@ +% +% actual setup (=register allocation) of the maximum element numbers +% should be done after fonts definition. +% +%%% [version 1.15] new register allocation code -- until here -- + + +%%% fonts + +\newif\iflongDCfontnames +\newif\iflongECfontnames +\longDCfontnamesfalse % obsolete +\longECfontnamesfalse % to use EC fonts, \input musixec +\def\fontid{cm} % deprecated but used in pmx.tex + +%% +% Small sans serif fonts % version 1.29 RDT +%% + +\font\threess=phvr8t at 3pt +\font\fourss=phvr8t at 4pt +\font\fivess=phvr8t at 5pt +\font\fivedc=phvb8t at 5pt +\font\sixss=phvr8t at 6pt +\font\sixdc=phvb8t at 6pt + +%% +% Seven point fonts +%% + +\font\sevenrm=cmr7 +\font\sevenbf=cmbx7 +\font\sevenit=cmti7 +\font\sevenbi=cmbxti10 at 7pt % version 1.22 RDT +\font\sevensc=cmcsc10 at 7pt +\font\sevenss=phvr8t at 7pt % version 1.29 RDT +\font\sevendc=phvb8t at 7pt + + +%% +% Eight point fonts +%% + +\font\eightrm=cmr8 +\font\eightbf=cmbx8 +\font\eightit=cmti8 +\font\eightbi=cmbxti10 at 8pt % version 1.22 RDT +\font\eightsc=cmcsc10 at 8pt +\font\eightss=phvr8t at 8pt % version 1.29 RDT +\font\eightdc=phvb8t at 8pt + +%% +% Nine point fonts +%% + +\font\ninerm=cmr9 +\font\ninebf=cmbx9 +\font\nineit=cmti9 +\font\ninebi=cmbxti10 at 9pt % version 1.22 RDT +\font\ninesc=cmcsc10 at 9pt +\font\niness=phvr8t at 9pt % version 1.29 RDT + +%% +% Ten point fonts +%% + +\font\tenrm=cmr10 +\font\tenbf=cmbx10 +\font\tenit=cmti10 +\font\tenbi=cmbxti10 % version 1.22 RDT +\font\tensc=cmcsc10 +\font\tenss=phvr8t % version 1.29 RDT +\font\tendc=phvb8t + +%% +% Eleven point fonts +%% +\font\elevenrm=cmr9 scaled \magstephalf +\font\elevenbf=cmbx9 scaled \magstephalf +\font\elevenit=cmti9 scaled \magstephalf +\font\elevenbi=cmbxti10 at 11pt % version 1.22 RDT +\font\elevensc=cmcsc10 at 11pt +\font\elevenss=phvr8t at 11pt % version 1.29 RDT + +%% +% Twelve point fonts +%% +\font\twelverm=cmr12 +\font\twelvebf=cmbx12 +\font\twelveit=cmti12 +\font\twelvebi=cmbxti10 scaled \magstep1 % version 1.22 RDT +\font\twelvesc=cmcsc10 scaled \magstep1 +\font\twelvess=phvr8t scaled \magstep1 % version 1.29 RDT +\font\twelvedc=phvb8t scaled \magstep1 + +% 14pt fonts +\font\frtrm=cmr12 scaled \magstep1 +\font\frtbf=cmbx12 scaled \magstep1 +\font\frtit=cmti12 scaled \magstep1 +\font\frtsc=cmcsc10 scaled \magstep2 +\font\frtbi=cmbxti10 scaled \magstep2 % version 1.22 RDT +\font\frtss=phvr8t scaled \magstep2 % version 1.29 RDT +\font\frtdc=phvb8t scaled \magstep2 +% +% 17pt +\font\svtrm=cmr12 scaled \magstep2 +\font\svtbf=cmbx12 scaled \magstep2 +\font\svtit=cmti12 scaled \magstep2 +\font\svtsc=cmcsc10 scaled \magstep3 +\font\svtbi=cmbxti10 scaled \magstep3 +\font\svtdc=phvb8t scaled \magstep3 +% +% 20pt +\font\twtyrm=cmr12 scaled \magstep3 +\font\twtybf=cmbx12 scaled \magstep3 +\font\twtyit=cmti12 scaled \magstep3 +\font\twtysc=cmcsc10 scaled \magstep4 +\font\twtybi=cmbxti10 scaled \magstep4 % version 1.22 RDT +\font\twtydc=phvb8t scaled \magstep4 +% +% 25pt +\font\twfvrm=cmr12 scaled \magstep4 +\font\twfvbf=cmbx12 scaled \magstep4 +\font\twfvit=cmti12 scaled \magstep4 +\font\twfvsc=cmcsc10 scaled \magstep5 +\font\twfvbi=cmbxti10 scaled \magstep5 % version 1.22 RDT +% +%% +%% +% Define five font families +%% +\def\tinytype{% + \let\rm\sevenrm + \let\bf\sevenbf + \let\it\sevenit + \let\bi\sevenbi + \let\sc\sevensc + \rm} +\def\smalltype{% + \let\rm\eightrm + \let\bf\eightbf + \let\it\eightit + \let\bi\eightbi + \let\sc\eightsc + \rm} +\def\Smalltype{% + \let\rm\ninerm + \let\bf\ninebf + \let\it\nineit + \let\bi\ninebi + \let\sc\ninesc + \rm} +\def\normtype{% + \let\rm\tenrm + \let\bf\tenbf + \let\it\tenit + \let\bi\tenbi + \let\sc\tensc + \rm} +\def\medtype{% + \let\rm\twelverm + \let\bf\twelvebf + \let\it\twelveit + \let\bi\twelvebi + \let\sc\twelvesc + \rm} +% +% four font families at big/Big/BIg/BIG sizes +% default is \bf here and in musixec, but \sc in musixplt, \rm in musixtmr +% +\def\bigfont{% + \let\rm\frtrm + \let\bf\frtbf + \let\it\frtit + \let\sc\frtsc + \let\bi\frtbi + \bf} +\def\Bigfont{% + \let\rm\svtrm + \let\bf\svtbf + \let\it\svtit + \let\sc\svtsc + \let\bi\svtbi + \bf} +\def\BIgfont{% + \let\rm\twtyrm + \let\bf\twtybf + \let\it\twtyit + \let\sc\twtysc + \let\bi\twtybi + \bf} +\def\BIGfont{% + \let\rm\twfvrm + \let\bf\twfvbf + \let\it\twfvit + \let\sc\twfvsc + \let\bi\twfvbi + \bf} +%% +% large fonts for titles +% (If you prefer Roman, use \rm) +% (If you prefer small-caps, use \sc) +% +\def\bigtype{\bigfont\bf} % default for "big" fonts is \bf +\def\Bigtype{\Bigfont\bf} +\def\BIgtype{\BIgfont\bf} +\def\BIGtype{\BIGfont\bf} +% +% +% Bold italic fonts for dynamic markings. +%% + +\font\ppfftwelve=cmbxti10 at 8pt % version 1.17 RDT +\font\ppffsixteen=cmbxti10 +\font\ppfftwenty=cmbxti10 scaled \magstep1 +\font\ppfftwentyfour=cmbxti10 scaled \magstep2 +\font\ppfftwentynine=cmbxti10 scaled \magstep3 + +\def\ppff{\ifdim\internote<\p@seven6\Internote\tinyppff% version 1.17 RDT +\else\ifdim\internote<.95\Internote\smallppff% +\else\ifdim\internote<1.19\Internote\normppff% +\else\medppff\fi\fi\fi}% + + +\def\tinydyn{\let\ppff\ppfftwelve} % version 1.18 RDT +\def\smalldyn{\let\ppff\ppffsixteen} +\def\normdyn{\let\ppff\ppfftwenty} +\def\meddyn{\let\ppff\ppfftwentyfour} + + +\font\musiceleven=musix11 +\font\musicthirteen=musix13 +\font\musicsixteen=musix16 +\font\musictwenty=musix20 +\font\musictwentyfour=musix24 +\font\musictwentynine=musix29 + + +% +% tt fonts needed by musixsty % version 1.22 RDT +% +\font\eighttt=cmtt8 +\font\ninett=cmtt9 +\font\tentt=cmtt10 +\font\twelvett=cmtt12 +\font\frttt=cmtt12 scaled \magstep1 +\font\svttt=cmtt12 scaled \magstep2 +\font\twtytt=cmtt12 scaled \magstep3 +\font\twfvtt=cmtt12 scaled \magstep4 +% +% +% sl fonts needed by musixsty % version 1.22 RDT +% +\font\eightsl=cmsl8 +\font\ninesl=cmsl9 +\font\tensl=cmsl10 +\font\twelvesl=cmsl12 +\font\frtsl=cmsl12 scaled \magstep1 +\font\svtsl=cmsl12 scaled \magstep2 +\font\twtysl=cmsl12 scaled \magstep3 +\font\twfvsl=cmsl12 scaled \magstep4 + +% piano brackets, slides, guitar chords, lines, (de)crescendi, circles + +\font\mxsps=musixspx + + +%%% +% +% Slur macro package for MusicTeX +% +% Ross Mitchell, February 20 1993 +% +%%% +%% +% Load the font set +% +% Nomenclature: slur[p][size] +% [p] : sign of slur gradient; u=positive, d=negative, z=zero +%% + +\font\slurz=xslz20 +\font\slurzd=xslz20d %+ickd + +\font\slurueleven=xslu11 % slur up eleven points +\font\sluruthirteen=xslu13 +\font\slurusixteen=xslu16 +\font\slurutwenty=xslu20 +\font\slurutwentyfour=xslu24 +\font\slurutwentynine=xslu29 + +\font\slurdeleven=xsld11 % slur down eleven points +\font\slurdthirteen=xsld13 +\font\slurdsixteen=xsld16 +\font\slurdtwenty=xsld20 +\font\slurdtwentyfour=xsld24 +\font\slurdtwentynine=xsld29 + +%++ickd same for dotted slurs +\font\sluruelevend=xslu11d % slur up eleven points +\font\sluruthirteend=xslu13d +\font\slurusixteend=xslu16d +\font\slurutwentyd=xslu20d +\font\slurutwentyfourd=xslu24d +\font\slurutwentynined=xslu29d + +\font\slurdelevend=xsld11d % slur down eleven points +\font\slurdthirteend=xsld13d +\font\slurdsixteend=xsld16d +\font\slurdtwentyd=xsld20d +\font\slurdtwentyfourd=xsld24d +\font\slurdtwentynined=xsld29d +%++ickd + +%!these fonts can't be used with highres printers (>~800dpi) +% for these printers comes a interface to PS using DVIPS (PS-Tricks) +% and \special{}-commands next time (patience is a virtue ...) + +\font\xtie=xslhz20 +\font\xtied=xslhz20d %+ickd + +\font\hslurdeleven=xslhd11 % slur half down eleven points +\font\hslurdthirteen=xslhd13 +\font\hslurdsixteen=xslhd16 % slur half down sixteen points +\font\hslurdtwenty=xslhd20 +\font\hslurdtwentyfour=xslhd24 +\font\hslurdtwentynine=xslhd29 + +\font\hslurueleven=xslhu11 +\font\hsluruthirteen=xslhu13 +\font\hslurusixteen=xslhu16 +\font\hslurutwenty=xslhu20 +\font\hslurutwentyfour=xslhu24 +\font\hslurutwentynine=xslhu29 + +%++ickd same for dotted slurs +\font\hslurdelevend=xslhd11d % slur half down eleven points +\font\hslurdthirteend=xslhd13d +\font\hslurdsixteend=xslhd16d % slur half down sixteen points +\font\hslurdtwentyd=xslhd20d +\font\hslurdtwentyfourd=xslhd24d +\font\hslurdtwentynined=xslhd29d + +\font\hsluruelevend=xslhu11d +\font\hsluruthirteend=xslhu13d +\font\hslurusixteend=xslhu16d +\font\hslurutwentyd=xslhu20d +\font\hslurutwentyfourd=xslhu24d +\font\hslurutwentynined=xslhu29d +%++ickd + +% number of pending slurs + +\newcount\N@s + +% [version 1.15] moved out to the new register allocation code (except for \s@Y) +% horizontal start position of slur +% \newdimen\s@xi +% sense u,d and x (flag) for pending slurs +% \newtoks\s@si \s@si={x} +% vertical offset of slur +\newdimen\s@Y % this register is for common use +% \newdimen\s@Yi +% altportee of slur +% \newskip\s@ai +% vertical start position of slur [steps of internote] +% \newcount\s@yi +% instrument number of that slur (to retrieve internote) +% \newcount\s@Ni +% vertical end position of slur [steps of internote], used from \breakslur +% the value \maxdimen is used to decide, if \breakslur is used or not (flag) +% \newcount\s@zi \s@zi\maxdimen +%++ickd: dotted indicator for pending slurs +% \newtoks\s@di % moved out to the new register allocation code +%++ickd + +\def\roman@n@i{\romannumeral\n@i\endcsname} + +% +% [version 1.15] make slurs independent from \maxinstruments +\def\test@slurnum{% + \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxslurs \else + \count@\maxslurs \advance\count@\m@ne + \errmessage{Wrong slur reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@% [version 1.15] + \fi + \advance\n@i\@ne}% +% +\def\s@l@ctslur#1\relax{% + \n@i#1\relax\test@slurnum% [version 1.15] make it independent from beams + \edef\s@a{\csname s@a\roman@n@i}% dimen (altportee) + \edef\s@x{\csname s@x\roman@n@i}% dimen (hor start pos) + \edef\s@y{\csname s@y\roman@n@i}% count (startnote [internote]) + \edef\s@N{\csname s@N\roman@n@i}% count (instrument number) + \edef\s@z{\csname s@z\roman@n@i}% count (endnote [internote]) + \edef\s@Y{\csname s@Y\roman@n@i}% dimen (voffset) + \edef\s@d{\csname s@d\roman@n@i}% token (dotted) +ickd + \edef\s@s{\csname s@s\roman@n@i}}% token (sense) + +% get current position (returns the dimen in \y@v) +% (\lin@pos starts behind signatures!) + +\newdimen\lin@pos +\def\getcurpos{\y@v\lin@pos \advance\y@v\locx@skip} + +% \n@i vertical offset of first note (number); temporary +% \n@ii vertical offset of second note (number); temporary +% \n@iii meet note +% \n@iv first note +% \n@v temp. character +% \n@vi last note +% \n@vii right halfslur length +% \n@viii don't touch +% \y@ complete length of slur - allowed overlap (4pt), temp. length +% \y@i abs. height of slur +% \y@ii complete length of slur +% \y@iii old maxslurwidth +% \y@iv don't touch +% \y@v don't touch + +% \@sense{u,d} +% +% if \curve (\midslur) is used +% \@meet{} +% \l@length{} +% \r@length{} + +% #1 start pitch #2 end pitch #3 length #4 right hoffset + +\newcount \meet@minus@n@iv +\def\writ@slur#1#2#3#4{\check@staff % modified: sld... into slurd... 12.04.95 ick + \let\slz\slurz% inserted + \let\slzd\slurzd% inserted for dotted slurs +ickd + \ifx\s@N\undefined \relax % \let\internote\Internote + \else + \edef\internote{\csname i@n\romannumeral\s@N\endcsname}% + \fi +% \immediate\write16{\noexpand\writ@slur internote:\the\internote}% + \n@iv#1% + \n@vi#2% +%% +% Get note vertical offsets +% \n@iv= vertical offset of first note(n@i temp); +% \n@vi= vertical offset of second note(n@ii temp); +% \y@i = reference height of first note (pt); +% +% Define adequate fonts for this slur, according to the value of \internote +% + \ifdim\internote>3.5pt + \let\sld\slurdtwentynine \let\slu\slurutwentynine + \let\hslurd\hslurdtwentynine \let\hsluru\hslurutwentynine + \let\sldd\slurdtwentynined \let\slud\slurutwentynined % +ickd + \let\hslurdd\hslurdtwentynined \let\hslurud\hslurutwentynined %+ickd + \def\@stepwidth{3.6pt}% + \else \ifdim\internote>2.9pt + \let\sld\slurdtwentyfour \let\slu\slurutwentyfour + \let\hslurd\hslurdtwentyfour \let\hsluru\hslurutwentyfour + \let\sldd\slurdtwentyfourd \let\slud\slurutwentyfourd % +ickd + \let\hslurdd\hslurdtwentyfourd \let\hslurud\hslurutwentyfourd %+ickd + \def\@stepwidth{3.0pt}% + \else \ifdim\internote>2.3pt + \let\sld\slurdtwenty \let\slu\slurutwenty + \let\hslurd\hslurdtwenty \let\hsluru\hslurutwenty + \let\sldd\slurdtwentyd \let\slud\slurutwentyd % +ickd + \let\hslurdd\hslurdtwentyd \let\hslurud\hslurutwentyd %+ickd + \def\@stepwidth{2.5pt}% + \else \ifdim\internote>1.8pt + \let\sld\slurdsixteen \let\slu\slurusixteen + \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen + \let\sldd\slurdsixteend \let\slud\slurusixteend % +ickd + \let\hslurdd\hslurdsixteend \let\hslurud\hslurusixteend %+ickd + \def\@stepwidth{2pt}% + \else \ifdim\internote>1.4pt + \let\sld\slurdthirteen \let\slu\sluruthirteen + \let\hslurd\hslurdthirteen \let\hsluru\hsluruthirteen + \let\sldd\slurdthirteend \let\slud\sluruthirteend % +ickd + \let\hslurdd\hslurdthirteend \let\hslurud\hsluruthirteend %+ickd + \def\@stepwidth{1.6pt}% + \else + \let\sld\slurdeleven \let\slu\slurueleven + \let\hslurd\hslurdeleven \let\hsluru\hslurueleven + \let\sldd\slurdelevend \let\slud\sluruelevend % +ickd + \let\hslurdd\hslurdelevend \let\hslurud\hsluruelevend %+ickd + \def\@stepwidth{1.28pt}% + \fi\fi\fi\fi\fi +% +% End choice of font +% + \n@i\n@iv \pl@base % \y@i = initial height + \n@ii\n@vi +% +% Select appropriate font +% Set \n@i to the vertical difference index +% setup \n@iii(meetnote) +% + \ifnum\n@ii=\n@i % Slope is zero + \n@iii\n@i + \if u\@sense \advance\n@iii\thr@@ \else \advance\n@iii-\thr@@ \fi + \def\@slope{z}\n@i\z@ + \else + \ifnum\n@ii<\n@i % Slope is negative + \C@csl\n@i\n@ii\def\@slope{d}% % compute @meet height for slurs + \else % Slope is positive + \C@csl\n@ii\n@i\def\@slope{u}\n@i\n@ii % compute @meet height for slurs + \fi + \fi +%% +% Select the required font and load the width parameters +% +% Font specific parameters +% \y@iii is the horizontal width of the longest slur in the fonts +% This parameter is loaded from the tfm \fontdimen parameter 5 +% respectively +%% + \y@iii\fontdimen\fiv@\csname sl\@slope\endcsname + \y@ii#3% +% +% \n@i contains slope (difference between start and end note) +% +% force longslurs if (!!! no check, be careful !!!) +% long slurs are at least 20[16] pt long) !!! Perhaps will change again !!! +% - difference between first note and last note > 8 +% - if \curve or \midslur is def'd +% - if \invertslur is used +% + \ifnum\n@i>\@ight \y@iii\z@ \fi % RMslurs limit 8 steps + \ifx\@meet\empty \else\y@iii\z@ \fi + \ifx\@invert\@ne \y@iii\z@ \fi + \ifdim\y@ii>\y@iii % start of longslurs +% +% setup meet height of slur +% + \ifx\empty\@meet +% \immediate\write16{\noexpand\@meet was empty.}% + \else + \n@iii\n@iv + \advance\n@iii\@meet + \fi + \edef\@meet{\the\n@iii}% +% \immediate\write16{\noexpand\@meet = \@meet.}% +% +% allow a little bit overlap (2*2pt) for nicer outlook (as longer as nicer) +% clip to extremities +% compute the max length in fontunits (\count@) +% + \y@\y@ii \advance\y@\f@ur\p@ \n@v\y@ + \sp@pt\t@n % 10pt steps + \advance\n@v-\f@ur % first brace is 20pt wide (perhaps 10pt is better ??) + \min@n@v\z@ + \max@n@v\fourt@@n % largest braces are 2*((90pt-20pt)/10pt) + \count@\n@v % max length +% +% compute the length of the starting and ending halfslurs +% in case, that curve is not def'd +% + \ifx\empty\l@length + \divide\n@v\tw@ % 2 halfslurs + \n@vii\n@v + \n@ii\n@v + \def@lr +% +% first try to reach nicer long slurs without using \curve +% + \if z\@slope % leave ties untouched + \else + \ifnum\count@>\z@ % only for long slurs + \multiply\n@v\tw@ + \if\@slope\@sense % uu,dd advance l@length ud,du advance r@length + \s@adjust\n@vii\n@ii + \else + \s@adjust\n@ii\n@vii + \fi + \def@lr + \fi + \fi +% +% adjust \curve parameters, if neccesary +% + \else + \n@vii\l@length + \n@ii\r@length + \loop + \count@\n@vii + \advance\count@\n@ii + \ifnum\count@>\n@v + \advance\n@vii\m@ne \ifnum\n@vii<\z@ \n@vii\z@ \fi + \advance\n@ii\m@ne \ifnum\n@ii<\z@ \n@ii\z@ \fi + \repeat + \def@lr + \fi +% +% clip to extremity heights (max slur height= 16\internote) +% + \C@csm\n@iv + \C@csm\n@vi +% +% change sense and offset behind linebreak and reset flag +% + \ifx\@invert\@ne \ifdim\s@x=\z@ + \@invsl \let\@invert\empty \s@Y-\s@Y + \fi \fi +% +% compute final height and put the box +% +% \immediate\write16{ before @meet:\noexpand\y@i=\the\y@i}% +% \message{ was \noexpand\n@iv\the\n@iv}% +% \message{ was \noexpand\n@vi\the\n@vi}% +% + \meet@minus@n@iv=\@meet + \advance\meet@minus@n@iv-\n@iv +% \immediate\write16{\noexpand\meet@minus@n@iv=\the\meet@minus@n@iv}% +% \y@i\@meet\internote % \y@i final height +% change from DT for staffspacing not standard + \y@i \@stepwidth % part proportional to slur font size + \multiply \y@i \meet@minus@n@iv + \advance\y@i \n@iv\internote % was done by \pl@base... +% + \C@sof % add the voffsets + \llap{\raise\y@i\hbox\@to\y@ii{% +% +% compute the beginning and ending halfslur chars +% n@i firstslur +% n@ii lastslur +% n@v character +% + \C@cc\n@iv\n@i\n@ii + \C@cc\n@vi +% + \n@v\l@length + \multiply\n@v\sixt@@n % 16 different heigths + \advance\n@v\n@i % offset to length + \advance\n@v\@cxxviii % offset to starthalfslur + \@boX \box\ch@box\hss% put starthalfslur + \n@v\r@length + \multiply\n@v\sixt@@n + \advance\n@v\n@ii +% +% put ending halfslur in box +% + \ifx\@invert\@ne \@invsl \fi + \@boX +% +% put the middle extension (could be replaced by []rule) +% + \ifdim\y@ii>\p@ne\p@ + \n@v\y@ii + \sp@pt\f@ur % 4pt steps + \ifx\@invert\@ne + \divide\n@v\tw@ + \if u\@sense \advance\n@v\@cxxviii \fi + \mid@box\hss\hss% don't ask me why + \if u\@sense \advance\n@v-\@cxxviii \else \advance\n@v\@cxxviii \fi + \mid@box% + \else + \if d\@sense \advance\n@v\@cxxviii \fi + \mid@box \fi \fi +% +% place the end of slur and kern right horizontal offset +% + \hss\box\ch@box}\kern#4}% +% +% reset slurcurve +% + \global\let\@meet\empty + \let\l@length\empty + \let\@invert\empty +% +%>>>>>> start of RM slurs +% Set \n@v to the width index in the slur font table +% + \else + \ifdim\y@ii<\@ight\p@ \y@ii\@ight\p@ \fi % Clip to extremities + \y@\y@ii + \advance\y@-\si@\p@ + \n@v\y@ + \sp@pt\f@ur +% +% Find decimal character count into font table +% (a) Zero height slurs: charnum= width index +% (b) Others: charnum= 16*(height index - 1) + width index +% Place the character count in \n@v +% + \if z\@slope + \if d\@sense \advance\n@v\@liv \fi % \@liv(=54) offset to slurchars + \else + \advance\n@i\m@ne % height index - 1 + \multiply\n@i\sixt@@n % 16*(height index - 1) + \advance\n@v\n@i % 16*(height index - 1) + width index + \if d\@sense \advance\n@v\@cxxviii \fi + \fi +% +% Place the slur character +% + \C@sof + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \llap{\raise\y@i\hbox\@to\y@ii{% +%-ickd \hss\csname sl\@slope\endcsname\char\n@v\hss}\kern#4}% + \hss\csname sl\@slope\@dotted\endcsname\char\n@v\hss}\kern#4}% + \fi +\fi} % end writ@slur + + +\def\sp@pt#1{\divide\n@v65536\divide\n@v#1} +\def\max@n@v#1{\ifnum\n@v>#1\n@v#1\fi} +\def\min@n@v#1{\ifnum\n@v<#1\n@v#1\fi} + +%-ickd \def\mid@box{\hbox{\xtie\char\n@v}} +\def\mid@box{% + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \hbox{\csname xtie\@dotted\endcsname\char\n@v}} +%-ickd \def\@boX{\setbox\ch@box\hbox{\csname hslur\@sense\endcsname\char\n@v}% +\def\@boX{% + \ifnum\n@v>255 % to avoid diags in case of... + \n@v=255\relax + \fi + \ifnum\n@v<0 % to avoid diags in case of... + \n@v=0\relax + \fi +% + \setbox\ch@box\hbox{\csname hslur\@sense\@dotted\endcsname\char\n@v}% + \advance\y@ii-\wd\ch@box} + +\def\def@lr{\edef\l@length{\the\n@vii}\edef\r@length{\the\n@ii}} + +\def\s@adjust#1#2{% + \ifnum\n@v<\count@ \advance#1\@ne \fi + \ifnum\n@v>\z@ \advance#1\@ne \advance#2\m@ne + \ifnum#1>\s@v@n #1\s@v@n \fi \fi} + +\def\C@csl#1#2{% compute meet height for slurs + \if u\@sense \n@iii#1\advance\n@iii\tw@ + \else \n@iii#2\advance\n@iii-\tw@ \fi + \ifx\@invert\@ne + \n@iii#1\advance\n@iii-#2\divide\n@iii\tw@ \advance\n@iii#2\fi + \advance#1-#2} + +\def\C@cc#1{% slur = abs(meet-note) - 1 + \n@ii\@meet + \advance\n@ii-#1% + \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \advance\n@ii\m@ne + } +% \ifnum\n@ii<\z@\immediate\write16{Warning: \noexpand\C@cc->\noexpand\n@ii=\the\n@ii}\fi +% \n@ii\z@} % modeif DT 20-12-97 + +\def\C@csm#1{% clip to extremity heights (max slur height= 16\internote) + \n@i\n@iii + \advance\n@i-#1% + \ifnum\n@i>\sixt@@n + \ifnum\n@iii>#1% + #1\n@iii \advance#1-\sixt@@n + \else + #1\n@iii \advance#1\sixt@@n + \fi + \fi} + +\def\C@sof{\advance\y@i\s@Y % abs. voffset + \ifx\@Ti\@ne \advance\y@i\s@a \let\@Ti\empty \fi}% call from cutslur + +% manual influation on the curve for long slurs +% must be coded in front of \tslur +% #1 final height [number, steps of internote, relativ to beginning! note] +% #2 (length)slope left #3 (length)slope right + +\def\curve#1#2#3{\getcurpos % ignore \curve behind a linebreak + \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\edef\l@length{#2}\edef\r@length{#3}\relax + \else +% \message{\noexpand\curve #1#2#3 not expanded}% + \fi} + +% raise (or lower) only the mid of slur +% #1 final height [number, steps of internote, relativ to beginning! note] +%! #1 can still be changed to work relativ from default height ??? + +\def\midslur#1{\getcurpos + \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\relax + \else +% \message{\noexpand\midslur #1 not expanded}% + \fi} + +\let\@meet\empty +\let\l@length\empty +\let\r@length\empty + +% Liftslur #1 refnumber #2 lift[steps of internote] + +\def\Liftslur#1#2{\n@i#1\advance\n@i\@ne \advance\csname s@y\roman@n@i#2} + +% breakslur #1 refnumber #2 endheight during linebreak[steps of internote] + +\def\breakslur#1#2{\inhgetn@i#2\relax\n@ii\n@i + \n@i#1\advance\n@i\@ne \global\csname s@z\roman@n@i\n@ii} + +% invertslur #1 refnumber + +\def\@invsl{\if u\the\s@s \s@s{d}\else \s@s{u}\fi} + +\def\invertslur#1{\s@l@ctslur#1\relax + \if u\the\s@s \global\s@s{D}% change sense and set flag for invertslur + \else \global\s@s{U}\fi} + +% initiate slur #1 reference number #2 start note + +\def\isluru{\i@slur\h@lf{1\p@seven\internote}u}% 'normal' +\def\issluru{\i@slur{1\p@ne}{\p@seven\internote}u}% shorter for accords +% for beam(ib[l]u) or stem, doesn't work with \stemcut (yet?) +\def\ibsluru{\y@i\stemfactor\interbeam + \advance\y@i\h@lf\internote \i@slur1\y@i u} +\def\islurd{\i@slur\h@lf{-1\p@seven\internote}d} +\def\isslurd{\i@slur{1\p@ne}{-\p@seven\internote}d} +\def\ibslurd{\y@i\stemfactor\interbeam + \advance\y@i\h@lf\internote \y@i-\y@i \i@slur0\y@i d} + +% initiate slur at half note width but NO vertical offset (for linkings) + +\def\ihsluru{\i@slur\h@lf\z@ u}% +\def\ihslurd{\i@slur\h@lf\z@ d}% + +\let\itieu\issluru +\let\itied\isslurd +\def\istieu{\i@slur{1\p@ne}{\qu@rt\internote}u}% shorter for accords +\def\istied{\i@slur{1\p@ne}{-\qu@rt\internote}d}% +\let\itenu\istieu +\let\itenl\istied +\let\Itenu\istieu +\let\Itenl\istied + +\def\dotted{\let\dott@d\@ne}\let\dott@d\empty %+ickd + +\def\@mis{missing } + +% #1 hoffset #2 voffset #3 sense (u,d) #4 reference number #5 start note + +\def\i@slur#1#2#3#4#5{% + \check@staff + \global\advance\N@s\@ne % update slurcounter + \s@l@ctslur#4\relax +% test for already invoked \islur + \if x\the\s@s \else\errmessage{\@mis\noexpand\tslur#4}\fi + \global\s@Y#2% store voffset (abs. dim. to rel. height) + \global\s@s{#3}% store sense (u,d) + \ifx\dott@d\empty \global\s@d{}\else\global\s@d{d}\fi %+ickd + \let\dott@d\empty % set dotted indicator +ickd + \global\s@N\noinstrum@nt % store instrument number + \inhgetn@i#5\relax + \global\s@y\n@i % start vpos (steps of internote) + \global\s@a\altportee % store altportee of current slur + \getcurpos + \advance\y@v#1\qn@width + \global\s@x\y@v + \fi}% start hpos (current pos including hoffset) + +% terminate slur #1 reference number #2 end note +% the various types only influence the horizontal offset, if you want to +% terminate a \ibslur with a \tslur it becomes a little bit tricky +%% +%% RDT: the "trick", whatever it is, doesn't seem to be working !!!!! +%% e.g. \Notes\ibsluru1g\qa g\ha l\sk\zq g\zq i\tslur1k\qu k\en + +\def\tslur{\t@slur\h@lf} +\def\tsslur{\t@slur{-\p@ne}} +\def\tubslur{\t@slur1} +\def\tdbslur{\t@slur0} +\def\tbsluru{\t@slur1} +\def\tbslurd{\t@slur0} + +% \def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}#1\@ne} +% \def\tleg#1{\let\T@i\@c \tslur #1\@ne} +% #1 should be braced... by David Alsop on January 11, 2009 +\def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}{#1}\@ne} +\def\tleg#1{\let\T@i\@c \tslur{#1}\@ne} +\let\tten\ttie +\let\Tten\ttie +\let\Tleg\tleg + +% y@i linewidth +% y@iv right hoffset +% y@v endpos, complete length + +% #1 hoffset #2 reference number #3 end note + +\def\t@slur#1#2#3{% + \check@staff + \s@l@ctslur#2\relax + \y@iv#1\qn@width + \def\@sense{\the\s@s}% + \edef\@dotted{\the\s@d}%+ickd +% test for missing \islur + \if x\@sense \errmessage{\@mis\noexpand\islur#2}\fi +% test for \invertslur + \if D\@sense \s@s{u}% + \let\@invert\@ne + \fi + \if U\@sense \s@s{d}% + \let\@invert\@ne + \fi +% compute length + \getcurpos + \advance\y@v\y@iv +% eoline + \y@eol\advance\y@-\beforeruleskip +% clip slur at eoline + \ifdim\y@v>\y@ \y@v\y@ \advance\y@v\beforeruleskip \y@iv\beforeruleskip \fi + \advance\y@v-\s@x + \ifx\T@i\@c \n@i\s@y \else \inhgetn@i#3\relax \fi + \writ@slur\s@y\n@i\y@v{-\y@iv}% +% reset sense of slur + \global\s@s{x}\let\T@i\empty + \global\advance\N@s\m@ne + \fi}% update slur counter + + % this command is made to terminate the slur #1 exactly on the note pitch #2 +\def\Tslurbreak#1#2{\s@l@ctslur#1\relax + \def\@sense{\the\s@s}% + {\if d\@sense \advance\transpose 2\raise0.2\Interligne\hbox{\tslur{#1}{#2}}\relax + \else \advance\transpose -2\raise-0.2\Interligne\hbox{\tslur{#1}{#2}}\relax + \fi + }% +\global\let\@meet\empty +\let\l@length\empty +\let\r@length\empty +\let\@invert\empty +} + +\def\Islurubreak#1#2{{\advance\transpose -1\isluru{#1}{#2}}} +\def\Islurdbreak#1#2{{\advance\transpose 1\islurd{#1}{#2}}} + +\def\TslurbreakNextBar#1#2{\off{\beforeruleskip}\hloff{\Tslurbreak{#1}{#2}}\off{-\beforeruleskip}} +\def\IslurubreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurubreak{#1}{#2}}\off{\afterruleskip}} +\def\IslurdbreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurdbreak{#1}{#2}}\off{\afterruleskip}} + +\def\y@eol{\y@\line@width \advance\y@-\sign@skip + \advance\y@-\clef@skip \advance\y@-\s@indent} + +% hold up the RM-slur calling, because faster coding, +% if the slurs are inside a bar (and you use one kind of \notes) +% and ... there is no limitation in the number of slurs +% if you want to call a short slur, extending to the left use \slur[][][]0 + +% #1 start pitch #2 final pitch #3 sense(u,d) #4 length[noteskip] + +\def\C@slur#1#2#3#4{\check@staff + \inhgetn@i#1\relax \n@ii\n@i + \inhgetn@i#2\relax \relax + \ifx\dott@d\empty \gdef\@dotted{}\else\gdef\@dotted{d}\fi %+ickd + \let\dott@d\empty % set dotted indicator +ickd + \def\@sense{#3}% + \if d\@sense \s@Y-\s@Y \fi + \y@v#4\noteskip + \y@iv\y@v + \advance\y@iv\y@ii + \advance\y@v\y@iii + \kern\y@iv + \writ@slur\n@ii\n@i\y@v\z@ + \kernm\y@iv + \fi} + +\def\sslur{% + \let\s@N\undefined % do not store instrument number + \s@Y\p@seven\internote + \y@iii-1.2\qn@width % offset to length 1.1behind+.1before + \y@ii-\p@ne\qn@width + \C@slur} +\def\slur{% + \let\s@N\undefined % do not store instrument number + \s@Y1\p@seven\internote + \y@iii\z@ + \y@ii\h@lf\qn@width + \C@slur} +\def\stie#1{\sslur{#1}{#1}} +\def\tie#1{\slur{#1}{#1}} + +%%% setup fontsizes + +\newdimen\interbeam % distance entre poutres +\newdimen\b@amthick % half beamthickness +\newdimen\Interligne% de la base d'une ligne a l'autre +\newdimen\Internote % la moitie de \Interligne +\let\internote\Internote +\def\musixchar{\musixfont\char} +\def\keychar{\musickeyfont\char} + +\let\musicnorfont\musictwenty + +\def\set@Largenotesize{\let\musixfont\musicLargefont + \let\xgregfont\xgregLargefont + \b@amthick.3456\Interligne \interbeam1.08\Interligne } + +\def\set@largenotesize{\let\musixfont\musiclargefont + \let\xgregfont\xgreglargefont + \b@amthick.288\Interligne \interbeam.9\Interligne } + +\def\set@normalnotesize{\let\musixfont\musicnorfont + \let\xgregfont\xgregnorfont + \b@amthick.24\Interligne \interbeam\p@seven5\Interligne } + +\def\set@smallnotesize{\let\musixfont\musicsmallfont + \let\xgregfont\xgregsmallfont + \b@amthick\p@ne92\Interligne \interbeam.6\Interligne } + +\def\set@tinynotesize{\let\musixfont\musictinyfont + \let\xgregfont\xgregtinyfont + \b@amthick\p@ne536\Interligne \interbeam.48\Interligne } + +\def\normalnotesize{\set@normalnotesize\comput@specifics + \let\curr@ntsiz@\normalnotesize} +\def\smallnotesize{\set@smallnotesize\comput@specifics + \let\curr@ntsiz@\smallnotesize} +\def\tinynotesize{\set@tinynotesize\comput@specifics + \let\curr@ntsiz@\tinynotesize} +\def\largenotesize{\set@largenotesize\comput@specifics % v.124 RDT + \let\curr@ntsiz@\largenotesize} +\def\Largenotesize{\set@Largenotesize\comput@specifics % v.124 RDT + \let\curr@ntsiz@\Largenotesize} + +\def\musickeyfont{% + \ifdim\internote<\p@seven6\Internote \musictinyfont + \else + \ifdim\internote<.95\Internote \musicsmallfont + \else + \ifdim\internote<1.19\Internote \musicnorfont + \else + \ifdim\internote<1.43\Internote \musiclargefont + \else + \musicLargefont + \fi + \fi + \fi + \fi} + +\def\meterfont{% + \ifdim\internote<\p@seven6\Internote \metersmallfont + \else + \ifdim\internote<.95\Internote \meternorfont + \else + \ifdim\internote<1.19\Internote \meterbigfont + \else + \ifdim\internote<1.43\Internote \meterlargefont + \else \meterLargefont + \fi + \fi + \fi + \fi} + +\def\tabcleffnt{% 1.29 RDT + \ifdim\internote<.95\Internote \tabsmallcleffnt + \else + \ifdim\internote<1.19\Internote \tabnorcleffnt + \else + \ifdim\internote<1.43\Internote \tablargecleffnt + \else \tabLargecleffnt + \fi + \fi + \fi} + +\def\tabfnt{% 1.29 RDT + \ifdim\internote<.95\Internote \tabsmallfnt + \else + \ifdim\internote<1.19\Internote \tabnorfnt + \else + \ifdim\internote<1.43\Internote \tablargefnt + \else \tabLargefnt + \fi + \fi + \fi} + +\newbox\ch@box +\newcount\musicsize +\newdimen\qd@skip +\newdimen\qn@width +\newdimen\wn@width + +\newskip\txt@ff +\newskip\s@indent % store parindent +\newskip\big@spc + +\newdimen\lthick \lthick=.4pt +\def\hlthick{\h@lf\lthick} + +%%% + +\def\normalmusicsize{\musicsize\tw@nty \comput@specifics + \afterruleskip\@ight\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} +\def\smallmusicsize{\musicsize\sixt@@n \comput@specifics + \afterruleskip\si@\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} +\def\largemusicsize{\musicsize\@xxiv \comput@specifics + \afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} +\def\Largemusicsize{\musicsize\@xxix \comput@specifics + \afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} + +\def\comput@fonts{% + \ifnum\musicsize=\sixt@@n + \let\musicLargefont\musictwentyfour + \let\musiclargefont\musictwenty + \let\musicnorfont\musicsixteen + \let\musicsmallfont\musicthirteen + \let\musictinyfont\musiceleven + \let\xgregLargefont\xgregtwentyfour + \let\xgreglargefont\xgregtwenty + \let\xgregnorfont\xgregsixteen + \let\xgregsmallfont\xgregthirteen + \let\xgregtinyfont\xgregeleven + \let\slurd\slurdsixteen \let\sluru\slurusixteen + \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen + \let\meternorfont\tenbf \let\metersmallfont\eightbf % version 1.16 RDT + \let\meterbigfont\twelvebf \let\meterlargefont\frtbf + \let\meterLargefont\svtbf + \let\tinyppff\ppfftwelve % version 1.17 RDT + \let\smallppff\ppfftwelve + \let\normppff\ppffsixteen + \let\medppff\ppfftwenty + \def\txtfont{\ifdim\internote<.95\Internote \tinytype\it % version 1.22 RDT + \else\ifdim\internote<1.19\Internote \smalltype\it + \else\ifdim\internote<1.43\Internote \Smalltype\it + \else\normtype\it\fi\fi\fi}% + \let\tabnorfnt\fivess \let\tablargefnt\sixss + \let\tabLargefnt\eightss \let\tabsmallfnt\fourss + \let\tabnorcleffnt\eightdc \let\tablargecleffnt\tendc + \let\tabLargecleffnt\twelvedc \let\tabsmallcleffnt\sixdc + \def\tabstringfnt{\ifdim\internote<.95\Internote \fourss % 1.29 RDT + \else\ifdim\internote<1.19\Internote \fivess + \else\ifdim\internote<1.43\Internote \sevenss + \else\eightss\fi\fi\fi}% + \else\ifnum\musicsize=\@xxiv + \let\musicLargefont\musictwentynine + \let\musiclargefont\musictwentynine + \let\musicnorfont\musictwentyfour + \let\musicsmallfont\musictwenty + \let\musictinyfont\musicsixteen + \let\xgregLargefont\xgregtwentynine + \let\xgreglargefont\xgregtwentynine + \let\xgregnorfont\xgregtwentyfour + \let\xgregsmallfont\xgregtwenty + \let\xgregtinyfont\xgregsixteen + \let\sluru\slurutwenty \let\slurd\slurdtwenty + \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty + \let\meternorfont\frtbf \let\metersmallfont\twelvebf % version 1.18 RDT + \let\meterbigfont\svtbf \let\meterlargefont\twtybf + \let\meterlargefont\twfvbf + \let\tinyppff\ppffsixteen + \let\smallppff\ppfftwenty + \let\normppff\ppfftwentyfour + \let\medppff\ppfftwentynine + \def\txtfont{\ifdim\internote<.95\Internote \smalltype\it % version 1.22 RDT + \else\ifdim\internote<1.19\Internote \Smalltype\it + \else\ifdim\internote<1.43\Internote \normtype\it + \else\medtype\it\fi\fi\fi}% + \let\tabnorfnt\eightss \let\tablargefnt\niness + \let\tabLargefnt\elevenss \let\tabsmallfnt\sixss + \let\tabnorcleffnt\twelvedc \let\tablargecleffnt\frtdc + \let\tabLargecleffnt\svtdc \let\tabsmallcleffnt\tendc + \def\tabstringfnt{\ifdim\internote<.95\Internote \sixss % 1.29 RDT + \else\ifdim\internote<1.19\Internote \eightss + \else\ifdim\internote<1.43\Internote \niness + \else\twelvess\fi\fi\fi}% + \else\ifnum\musicsize=\@xxix + \let\musicLargefont\musictwentynine + \let\musiclargefont\musictwentynine + \let\musicnorfont\musictwentynine + \let\musicsmallfont\musictwentyfour + \let\musictinyfont\musictwenty + \let\xgregLargefont\xgregtwentynine + \let\xgreglargefont\xgregtwentynine + \let\xgregnorfont\xgregtwentynine + \let\xgregsmallfont\xgregtwentyfour + \let\xgregtinyfont\xgregtwenty + \let\sluru\slurutwenty \let\slurd\slurdtwenty + \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty + \let\slurud\slurutwentyd \let\slurdd\slurdtwentyd % +ickd + \let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd + \let\meternorfont\svtbf \let\metersmallfont\frtbf % version 1.18 RDT + \let\meterbigfont\twtybf \let\meterlargefont\twfvbf % version 1.24 typos corrected + \let\meterLargefont\twfvbf + \let\tinyppff\ppfftwenty + \let\smallppff\ppfftwentyfour + \let\normppff\ppfftwentynine + \let\medppff\ppfftwentynine + \def\txtfont{\ifdim\internote<.95\Internote \normtype\it % version 1.22 RDT + \else\ifdim\internote<1.19\Internote \medtype\it + \else\ifdim\internote<1.43\Internote \bigfont\it + \else\Bigfont\it\fi\fi\fi}% + \let\tabnorfnt\niness \let\tablargefnt\elevenss + \let\tabLargefnt\twelvess \let\tabsmallfnt\eightss + \let\tabnorcleffnt\frtdc \let\tablargecleffnt\svtdc + \let\tabLargecleffnt\twtydc \let\tabsmallcleffnt\twelvedc + \def\tabstringfnt{\ifdim\internote<.95\Internote \eightss % 1.29 RDT + \else\ifdim\internote<1.19\Internote \niness + \else\ifdim\internote<1.43\Internote \twelvess + \else\frtss\fi\fi\fi}% +\else + \ifnum\musicsize=\tw@nty + \else\ifnum\musicsize=\z@ + \else\errmessage{\noexpand\musicsize=\the\musicsize\space not supported, + set to default of 20}% + \fi + \fi\musicsize\tw@nty + \let\musicLargefont\musictwentynine + \let\musiclargefont\musictwentyfour + \let\musicnorfont\musictwenty + \let\musicsmallfont\musicsixteen + \let\musictinyfont\musicthirteen + \let\xgreglargefont\xgregtwentyfour + \let\xgregLargefont\xgregtwentynine + \let\xgregnorfont\xgregtwenty + \let\xgregsmallfont\xgregsixteen + \let\xgregtinyfont\xgregthirteen + \let\sluru\slurutwenty \let\slurd\slurdtwenty + \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty + \let\meternorfont\twelvebf \let\metersmallfont\tenbf % version 1.18 RDT + \let\meterbigfont\frtbf \let\meterlargefont\svtbf + \let\meterLargefont\twtybf + \let\tinyppff\ppfftwelve + \let\smallppff\ppffsixteen + \let\normppff\ppfftwenty + \let\medppff\ppfftwentyfour + \def\txtfont{\ifdim\internote<.95\Internote \smalltype\it + \else\ifdim\internote<1.19\Internote \Smalltype\it + \else\ifdim\internote<1.43\Internote \normtype\it + \else\medtype\it\fi\fi\fi}% + \let\tabnorfnt\sixss \let\tablargefnt\eightss + \let\tabLargefnt\niness \let\tabsmallfnt\fivess + \let\tabnorcleffnt\tendc \let\tablargecleffnt\twelvedc + \let\tabLargecleffnt\frtdc \let\tabsmallcleffnt\eightdc + \def\tabstringfnt{\ifdim\internote<.95\Internote \fivess % 1.29 RDT + \else\ifdim\internote<1.19\Internote \sixss + \else\ifdim\internote<1.43\Internote \eightss + \else\niness\fi\fi\fi}% +\fi\fi\fi}% + +\def\comput@specifics{\comput@fonts\comput@sizes} + +\def\comput@sizes{% + \Interligne\fontdimen\fiv@\musicnorfont + \Internote\h@lf\Interligne \big@spc.6\Interligne + \qn@width\fontdimen\si@\musixfont + \wn@width1\qu@rt\qn@width + \txt@ff\h@lf\qn@width + \qd@skip\qn@width\advance\qd@skip-\hlthick} + +%\newdimen\afterruleskip +\newskip\afterruleskip +\newdimen\staffbotmarg % marge au-dessous des portees +\newdimen\stafftopmarg % au-dessus des portees +\newdimen\line@width + +\def\normalvalue{1} +\def\largevalue{1.2} +\def\Largevalue{1.44} +\def\smallvalue{.8} +\def\tinyvalue{.64} + +\def\instrumentnumber#1{\n@v#1\relax + \min@n@v\@ne + \max@n@v\maxinstruments + \edef\nbinstruments{\the\n@v}} + +% staffsize + +\def\setsize#1#2{\n@v#1\relax % select instrument + \expandafter\edef\csname staffspacing\romannumeral\n@v\endcsname{#2}} + +% [version 1.15] moved out to the new register allocation code +% \let\staffspacingi\@ne + +% number of staffs + +\def\setstaffs#1#2{\n@v#1\relax \csname n@p\romannumeral\n@v\endcsname#2} + +% staff lines + +\def\setlines#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname n@l\romannumeral\n@v\endcsname{#2}} + +\newdimen\interportee % distance between staffs of the same instrument (incl) +\newcount\noport@@ +\newcount\noinstrum@nt +\newdimen\altportee + +\def\interstaff#1{\def\interfacteur{#1}} + +\def\s@l@ctinstr{% + \ifnum\noinstrum@nt>\maxinstruments % [version 1.15] -- from here -- + \errmessage{Wrong instrument reference number \the\noinstrum@nt, maxinstruments=\the\maxinstruments} + \fi % [version 1.15] -- until here -- + \edef\altitude{\csname k@i\romannumeral\noinstrum@nt\endcsname}% + \edef\st@ffs{\csname n@p\romannumeral\noinstrum@nt\endcsname}% + \edef\nblines{\csname n@l\romannumeral\noinstrum@nt\endcsname}% + \edef\internote{\csname i@n\romannumeral\noinstrum@nt\endcsname}% + \edef\int@rf{\csname interfacteur\romannumeral\noinstrum@nt\endcsname}% RDT 1.24 + \interportee\int@rf\internote \interportee\tw@\interportee}% RDT 1.26 + +\def\C@Inter{% RDT: corrected to work if \nblines > 6 (version 1.23) + % RDT: corrected for \nblines < 4 (version 1.28) + \stem@skip\interportee + \ifnum\nblines<\f@ur + \advance\stem@skip-\@ight\internote + \else + \advance\stem@skip-\nblines\internote + \advance\stem@skip-\nblines\internote + \advance\stem@skip\tw@\internote + \fi} + +%%% loop over instruments and staffs + +\def\count@portee{\advance\noport@@\@ne} + +\def\n@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\nbinstruments + \advance\noinstrum@nt\@ne \s@l@ctinstr} + +\def\m@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\maxinstruments + \advance\noinstrum@nt\@ne} + +\def\p@loop{\noport@@\z@ \loop\ifnum\noport@@<\st@ffs + \altportee\altitude \advance\altportee\noport@@\interportee} + +\def\Comp@High{\y@v\st@ffs\interportee \C@Inter\advance\y@v-\stem@skip} + +% to be used to make heavy bars at staff left +% modified according to Werner Icking + + +\def\groupbottom#1#2{\group@no#1\relax + \advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1... + \expandafter\def\csname lowersonginstrum\romannumeral\group@no\endcsname{#2}} + +\def\grouptop#1#2{\group@no#1\relax + \advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1... + \expandafter\def\csname uppersonginstrum\romannumeral\group@no\endcsname{#2}} + +\def\songbottom{\groupbottom1} +\def\songtop{\grouptop1} + +% [version 1.15] moved out to the new register allocation code +% \let\lowersonginstrumi\maxdimen +% \let\uppersonginstrumi\z@ + +\def\g@loop{\group@no\z@ \loop\ifnum\group@no<\maxgroups + \s@l@ctgroup} +\def\s@l@ctgroup{% + \relax\test@grnum + \edef\g@b{\csname g@b\romannumeral\group@no\endcsname}% dimen (group bottom) + \edef\g@h{\csname g@h\romannumeral\group@no\endcsname}% dimen (group top) + \edef\lowersonginstrum{\csname lowersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) + \edef\uppersonginstrum{\csname uppersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) + }% +\def\test@grnum{% + \ifnum\group@no<\z@ \group@no\@c \fi + \ifnum\group@no<\maxgroups \else + \count@\maxgroups \advance\count@\m@ne + \errmessage{Wrong group reference number \the\group@no! (valid: 0 to \the\count@)}% [version 1.15] + \group@no\z@% [version 1.15] + \fi + \advance\group@no\@ne} + +% \nobarmessages prevents bar messages + +\def\nobarmessages{\let\no@b\@ne} +\let\no@b\empty + +% \nolinemessages prevents line messages in phase three +\def\nolinemessages{\let\no@l\@ne} +\let\no@l\empty + +% \nobarnumbers prevents bar numbering (Ian Collier) +% \barnumbers restores bar numbering + +\def\nobarnumbers{\let\lin@bar\empty \let\freqbarno\maxdimen} +\def\barnumbers{\let\freqbarno\normalvalue} +\barnumbers + +% show barnumbers only at the beginning system + +\def\raisebarno{\f@ur\internote} +\let\shiftbarno\z@ + +\def\writebarno{\boxit{\eightbf\the\barno\barnoadd}} +\def\systemnumbers{\nobarnumbers\let\lin@bar\@ne} + +% add 'a' behind the systembarnumber, if the previous line ended without +% a bar rule + +\let\z@sw\empty +\def\writezbarno{a} +\def\barnoadd{\ifx\z@sw\@ne \writezbarno \fi} + +% suppress the beginning vertical rule for single-staff scores + +\def\startrule{\let\b@rule\empty} +\def\nostartrule{\let\b@rule\z@} +\startrule + +%%% distance between instruments (added to \interportee) + +% [version 1.15] moved out to the above of the new register allocation code +% \newdimen\interinstrument +% [version 1.15] moved out to the new register allocation code +% \let\interinstrumenti\interinstrument + +\def\setinterinstrument#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname interinstrument\romannumeral\n@v\endcsname{#2}}% + +\def\setinterstaff#1#2{\n@v#1\relax % select instrument RDT 1.24 + \expandafter\def\csname interfacteur\romannumeral\n@v\endcsname{#2}}% + +%%% portees + +\newdimen\systemheight +\newdimen\altplancher + +% New version by Werner Icking + +\def\writ@staffs{% + \y@\staffbotmarg \global\altplancher\staffbotmarg + \rlap{\n@loop\w@st\repeat +% beginning vertical rule + \systemheight\y@ + \advance\systemheight-\altplancher + \C@Inter \global\advance\systemheight-\stem@skip + \ifx\empty\b@rule \raise\altplancher\rlap{% + \vrule\@depth\hlthick\@height\systemheight\@width\lthick}\fi +% 'Akkoladenklammer' don't know the english word + \g@loop + \ifnum\uppersonginstrum<\lowersonginstrum + \else + \noinstrum@nt\uppersonginstrum\s@l@ctinstr\C@Inter + \global\advance\g@h-\stem@skip \global\advance\g@h-\g@b + \global\advance\g@h\Interligne \global\advance\g@b-\Internote + \raise\g@b\llap{\uplap{\offinterlineskip + \set@normalnotesize\hbox{\musixfont\fourt@@n}\hbox{\vrule\@height\g@h + \@width\internote}\hbox{\musixfont\fiv@t@@n}}\kern\internote}% + \fi + \repeat +% systembarnumbers + \ifx\lin@bar\@ne \y@\altplancher \advance\y@\systemheight + \advance\y@\raisebarno \raise\y@\rlap{\kern\shiftbarno\writebarno}\fi +% strut + \advance\stafftopmarg\staffbotmarg + \raise\stafftopmarg\hbox{\vrule\@height\systemheight\@width\z@}}} + +\def\uplap#1{\vbox\@to\z@{\vss#1}} + +% new version of \w@st by Werner Icking + +\newskip\instrum@in@group +\def\w@st{% + \global\noport@@\z@ \global\altitude\y@ + \global\instrum@in@group=\z@ + {\g@loop + \ifnum\noinstrum@nt=\lowersonginstrum + \global\g@b\altitude + \fi + \ifnum\uppersonginstrum>\lowersonginstrum\relax + \ifnum\noinstrum@nt<\lowersonginstrum\relax + \else + \ifnum\noinstrum@nt>\uppersonginstrum\relax + \else +% \message{\the\noinstrum@nt\space in-group!}% + \global\instrum@in@group=2\internote + \fi + \fi + \fi + \repeat}% +% nullportee + \ifnum\st@ffs=\z@ + \advance\y@\f@ur\Interligne + \else +% multportee + \ifnum\st@ffs>\@ne \Comp@High\n@v\y@v \sp@pt\tw@ + \advance\n@v\@cxxviii \divide\y@v\tw@ +%==== the parenthesis should be shifted to the left if within +%==== songbottom -- songtop + \advance\y@v\y@ + \raise\y@v\hbox{\kern -\instrum@in@group\mxsps\char\n@v\kern\instrum@in@group}% + \fi +% normal staff + {\loop \staff@lines\ifnum\noport@@<\st@ffs \repeat}% + \fi % fin du \else pour 0 portees=chant + {\g@loop + \ifnum\noinstrum@nt=\uppersonginstrum \global\g@h\y@ \fi + \repeat}% + \ifnum\noinstrum@nt<\nbinstruments + \advance\y@\csname interinstrument\romannumeral\noinstrum@nt\endcsname \fi} + +\def\staff@lines{\raise\y@\rlap{\uplap{% + \ifcase\nblines + \or \Lin@\zLin@\zLin@ + \or \Lin@\zLin@\Lin@\zLin@ + \or \Lin@\zLin@\Lin@\zLin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ + \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ + \fi\kernm\hlthick}}% + \global\advance\y@\interportee \count@portee} + +\def\zLin@{\kern\tw@\internote} +\def\Lin@{\zLin@\kernm\lthick\hrule\@width\line@width} + +\newskip\boxitsep \boxitsep\thr@@\p@\relax + +\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern\boxitsep\vbox{% + \kern\boxitsep\hbox{#1}\kern\boxitsep}\kern\boxitsep\vrule}\hrule}} +\def\circleit#1{\setbox\ch@box\hbox{#1}\y@v\ht\ch@box + \y@v1.41\ht\ch@box % => sqrt(2) + \n@v\y@v \sp@pt\tw@ \advance\n@v69\rlap{#1}% + \raise\h@lf\ht\ch@box\rlap{\kern\h@lf\wd\ch@box\mxsps\char\n@v}} + +\def\thinrul@{\writ@rule\lthick} +\def\thickrul@{\writ@rule\big@spc} + +%%% start normal score + +%% +% Define a counter to keep track of total number of bars in piece +% which are terminated by a barline. This is not necessarily +% the same as \barno, in view of (eg) a bar containing +% multiple bars rest. +%% +% !!! \barsinpi@c@ now used for \zbar and \xbar too, if you use them +% the value of \barsinpi@c@ says nothing !!! +% + +\newcount\barsinpi@c@ +\newcount\barno +\newcount\startbarno \startbarno\@ne +\newdimen\sign@skip +\newdimen\maxsign@skip + + +\def\piece@begina{\catcodesmusic \barno\startbarno \@l@mskip\elemskip + \barsinlin@\z@ \let\z@sw\empty \frenchspacing +% \let\barrul@\thinrul@ \comp@internote} %-simick + \b@rrul@\comp@internote} %+simick + +\def\comp@internote{\comput@specifics + \n@loop + \internote\csname staffspacing\romannumeral\noinstrum@nt\endcsname\Internote + \repeat + \line@width\hsize} + +\def\piece@beginb{\advance\line@width-\parindent \s@indent\parindent + \writ@staffs \writ@names \advance\line@width\parindent} + +\def\piece@beginc{% +% write clefs + \n@loop{\writ@clefi}\repeat \kern\clef@skip +% everystaff stuff + \everyst@ff +% write signatures + \sign@skip\z@ \n@loop{\s@l@ctsigns \let\@Ti\writ@sign \C@wsi}\repeat + \kern\sign@skip \m@loop \s@l@ctsigns \o@s\a@s \s@l@ctclefs \o@c\a@c \repeat + \let\Writ@newsigns\empty \hskip\z@ plus\p@ minus\p@ \lastbarpos\z@} + +\let\fil@begin\empty +\let\Writ@meters\empty + +\def\startpiece{\ifstartmuflex@done\relax + \else\startmuflex + \immediate\write16{\noexpand\startmuflex launched by + \noexpand\startpiece }% + \fi + \barsinpi@c@\z@ \piece@begina \leavevmode \piece@beginb + \piece@beginc \fil@begin \Writ@meters\lastbarpos\lin@pos %%% 1.21: added \lastbarpos setting + \let\volta@set\empty % tells the kind of volta setting at next bar + \let\volta@cut\empty % flag to tell that a volta has been cut at line end + \let\volta@type\empty % the current volta setting (same defs as \volta@set) + \let\endvolta@set\empty % tells the kind of volta closing at next bar + \let\pdl@cut\empty % flag to signal a pedal rule has been cut at the end of a line % 1.21 RDT +} + +\let\everystaff\empty +\def\everyst@ff{\everystaff}% --> MuFlex Pass II + +%%% continue score + +\let\atnextline\empty + +\def\piece@conta{\catcodesmusic \atnextline \let\atnextline\empty + \comp@internote \leavevmode \barsinlin@\z@ } + +\def\contpiece{\noindent \piece@conta \writ@staffs \piece@beginc + \Writ@meters\wbarno@x\lastbarpos\lin@pos\addspace\afterruleskip %%% 1.21: added \lastbarpos setting +} + +% like contpiece but with indentation (parindent) and instrument names +% it's for changing the number of instrument in one piece + +\let\fil@indent\empty +\def\Contpiece{\piece@conta \piece@beginb \fil@indent \piece@beginc + \Writ@meters\lastbarpos\lin@pos} %%% 1.21: added \lastbarpos setting + + +%%% end score + +\let\ragg@d\empty +\let\z@suspend@autoflag\empty % used in musixcpt only + +\def\z@suspend{% + \z@suspend@autoflag % used in musixcpt only +% cut pedal rule 1.21 RDT + \ifdim\pdl@pos=\z@\else% + \noport@@\z@ + \znotes\selectinstrument{\pdl@instr}\selectstaff{\pdl@staff}\pdlc@\en% + \global\def\pdl@cut{\@one}% + \fi +% cutvolta + \write@volta@hrule + \ifx\volta@type\tw@\let\volta@set\tw@ \let\volta@type\empty + \let\volta@cut\tw@\fi % restart volta at next line if continuous + \ifx\volta@type\thr@@\let\volta@set\thr@@ \let\volta@type\empty + \let\volta@cut\thr@@ \fi % restart volta at next line if continuous +% cutoctline + \o@loop + \ifdim\o@x<\maxdimen \let\T@ii\n@ii \C@TO \o@x\z@ \fi + \repeat +% cut trill + \tr@loop + \ifdim\tr@x<\maxdimen \let\T@ii\n@ii \C@TR \tr@x\z@ \fi + \repeat +% cutslur + \ifnum\N@s>\z@% % any pending slurs ? + \n@viii\maxslurs % test all possible slur numbers [version 1.15] (Hiroaki) + \advance\n@viii\m@ne + \loop\ifnum\n@viii>\m@ne + \s@l@ctslur\n@viii\relax + \edef\@sense{\the\s@s}% + \if x\@sense% % sense flag + \else% % found slur + \edef\@dotted{\the\s@d}% +ickd + \y@v\lin@pos % get current position + \advance\y@v-\s@x % slurlength = currentpos - startpos + \let\@Ti\@ne % set flag for \writ@slur (\staffbotmarg) + \ifnum\s@z=\maxdimen \s@z\s@y \fi % flag (\breakslur not used -> tie) + \writ@slur\s@y\s@z\y@v\p@% avoid touching the bar rule + \s@x\z@% reset startpos for next line + \s@z\maxdimen% reset breakslur + \fi + \advance\n@viii\m@ne \repeat + \fi\s@indent\z@ +% + \ragg@d\par\lin@pos\z@ \endcatcodesmusic} + +\def\stoppiec@{\check@nopen\n@wbar\z@suspend} +%\def\stoppiece{\stoppiec@\@nds@ction} %-simick +\def\stoppiece{\T@bil\fi\stoppiec@\@nds@ction} %+simick +\let\endpiece\stoppiece + +\def\zstoppiec@{\check@nopen\zn@wbar\z@suspend} +%\def\zstoppiece{\zstoppiec@\@nds@ction} %-simick +\def\zstoppiece{\T@bil\fi\zstoppiec@\@nds@ction}%+simick +% if you need a line which appears ragged +\def\raggedstoppiece{\ifx\ragg@d\empty \fil@{r}\fi % version 1.18 RDT (from musixext) + \check@nopen\n@wbar\hfill\z@suspend\@nds@ction} + +\def\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\lastbarpos\lin@pos\let\pdl@cut\empty\addspace\afterruleskip} + %%% 1.21: added \lastbarpos and \pdl@cut settings + +% enable left and right extracts (e.g. for footnotes) + +\let\extractline\centerline + +\def\endextract{\let\z@suspend\write@volta@hrule + \stoppiec@\egroup\line@width\wd\w@rkbox + \extractline{\writ@names\writ@staffs\unhbox\w@rkbox}% + \endcatcodesmusic} +\def\zendextract{\let\stoppiec@\zstoppiec@ \endextract} + +%% +% Redefine \t@rmskip to include a macro for writing a record to a file, +% and define the macro +%% + +\newdimen\x@skip +\newdimen\n@skip + +\let\fil@termskip\empty +\def\t@rmskip{\kern\n@skip\advance\x@skip\n@skip + \advance\lin@pos\x@skip + % case of \hardnotes + \ifnum\V@sw>0\relax + \y@v\n@skip \fil@spc + \fi + % end case \hardnotes + \fil@termskip\global\n@skip\z@ \global\x@skip\z@ \let\V@sw\z@} + +%% +% Define the amount of space before each barline, +%% + +%\newdimen\beforeruleskip +\newskip\beforeruleskip + +%% +% We must distinguish between scalable ('soft'=1) material in the bar +% (eg noteboxes) and absolute ('hard'=0) widths such as those from +% barlines and clef symbols +% Hence introduce a switch defining this attribute +%% + +\newcount\widthtyp@ \widthtyp@\@ne + +%%% bar numbers + +\newcount\lastbarno + +\def\writethebarno{\fontbarno\the\barno\kernm\qn@width} +\def\fontbarno{\it} + +\def\wbarno@x{%%%% version 1.21: RDT moved \lastbarpos\lin@pos after calls to \Writ@meters + \ifx\volta@set\empty + \n@iii\barno \divide\n@iii\freqbarno\relax + \ifnum\n@iii=\lastbarno + \else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote + \raise\y@\llap{\writethebarno}\fi + \else + \ifx\volta@cut\empty + \else % volta was cut, there is nothing colliding with bar number. + \n@iii\barno \divide\n@iii\freqbarno\relax + \ifnum\n@iii=\lastbarno + \else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote + \raise\y@\llap{\writethebarno}\fi + \fi + \write@volta + \fi + \ifx\pdl@cut\empty % 1.21 RDT + \else% pedal rule was cut at the end of the previous line + \global\pdl@pos\lin@pos\let\pdl@cut\empty % reset \ped@pos + \fi + \b@rrul@ %+simick + \n@iii\barno \divide\n@iii\freqbarno\relax \lastbarno\n@iii } + +%%% pass selective scoring + +\newskip\cut@v % contains width of bar rule +\newskip\init@volta@pos % start position of volta +\newskip\volta@startcor %+simick volta start correction in case of leftrepeats +\newskip\volta@endcor %+simick volta end correction in case of rightrepeats + +\def\raisevolta{\f@ur\internote} + +\newbox\writ@volta@box + +\def\voltadot{.}% +\def\write@volta{% writes the requested |n. and moves the things for further use + \ifx\volta@type\empty\else\errmessage{/setvolta collision!}\fi + \y@\altplancher \advance\y@\systemheight + \advance\y@\raisevolta +% \setbox\writ@volta@box\rlap{\vrule % \musixfont\sixt@@n %-simick +% \rm\ \vphantom{\^{\volta@text}\strut gq}\volta@text\voltadot}% %-simick + \setbox\writ@volta@box\rlap{\vrule\rm\strut\ \volta@text\voltadot}% %+simick + \xdef\thevolta@boxheight{\the\ht\writ@volta@box}% + \xdef\thevolta@boxdepth{\the\dp\writ@volta@box}% + \ifx\volta@cut\empty \else\setbox\writ@volta@box\null + \fi % if continuation, make writ@volta@box null +% \raise\y@\llap{\box\writ@volta@box}% %-simick + \kernm\volta@startcor\raise\y@\llap{\box\writ@volta@box}\kern\volta@startcor %+simick + \let\volta@type\volta@set + \let\volta@set\empty + \let\volta@cut\empty +% \init@volta@pos\lin@pos\relax %-simick + \init@volta@pos\lin@pos \advance\init@volta@pos-\volta@startcor %+simick +}% + +\def\write@volta@hrule{% write the hrule of volta bar at its end + \ifx\volta@type\empty + \else + \y@v\lin@pos \advance\y@v-\init@volta@pos +% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick +% \global\advance\cut@v\lthick %-simick + \ifnum\barsinlin@=\maxbarsinlin@ %+simick + \y@i\z@ %+simick + \else %+simick + \y@i\cut@v \advance\y@i-\volta@endcor %+simick + \fi %+simick + \advance\y@v-\y@i %+simick + \y@\altplancher \advance\y@\systemheight + \advance\y@\raisevolta + \raise\y@\llap{% + \raise\thevolta@boxheight +% \hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}}% %-simick + \hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}\kern\y@i}% %+simick +% check whether termination has been required + \ifx\endvolta@set\thr@@ \let\volta@type\thr@@\fi % \endvoltabox forces type \thr@@ + \ifx\endvolta@set\empty \else \write@volta@endbox\fi + % now set volta@type \@ne to \empty + \ifx\volta@type\@ne \let\volta@type\empty\fi + \fi +}% + +\def\write@volta@endbox{% write the hrule of volta bar at its end + \ifx\volta@type\empty + \else +% \y@v\lin@pos \advance\y@v-\init@volta@pos %-simick +% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick +% \global\advance\cut@v\lthick %-simick + \y@\altplancher \advance\y@\systemheight + \advance\y@\raisevolta + \ifx\volta@type\thr@@ +% \raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}}% %-simick + \raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}\kern\y@i}%+simick + \fi +% now force volta@type to \empty + \let\volta@type\empty + \let\endvolta@set\empty + \let\volta@cut\empty + \fi +}% + +%\check + +\let\writ@volta\empty % provisional for testing % + +\let\volta@set\empty % tells the kind of volta setting at next bar + % \@ne = single \setvolta, \tw@ = \Setvolta + % \thr@@ = setvoltabox + +\let\volta@type\empty % the current volta setting (same defs as \volta@set) +\let\volta@cut\empty + +\let\endvolta@set\empty % tells the kind of volta closingg at next bar + % \@ne = not used, \tw@ = terminate \Setvolta[box] + % \thr@@ = terminate \Setvolta[box] with an ending hook + +\def\setvolta{\let\volta@set\@ne \gen@setvolta} +\def\Setvolta{\let\volta@set\tw@ \gen@setvolta} +\def\setvoltabox{\let\volta@set\thr@@ \gen@setvolta} + +\def\gen@setvolta#1{\def\volta@text{#1}} + +\def\setendvolta{% + \ifx\volta@type\empty\volta@err + \else\let\endvolta@set\tw@ + \fi} + +\def\setendvoltabox{% + \ifx\volta@type\empty\volta@err + \else\let\endvolta@set\thr@@ + \fi} + +\let\endvolta\setendvolta +\let\endvoltabox\setendvoltabox + +\def\true@endvoltabox{\raise-\thevolta@boxheight + \llap{\vrule\@height\thevolta@boxheight \@depth\thevolta@boxdepth}} + +\def\volta@err{\immediate\write16{% + type=\ifx\volta@type\empty 0\else \number\volta@type\fi, + set=\ifx\volta@set\empty 0\else \number\volta@set\fi}% +\errmessage{\noexpand\endvolta, %\noexpand\contvolta, +\noexpand\endvoltabox\space does not match opening \noexpand\S[s]volta...}} + + +%%% line breaking stuff + +\let\@nds@ction\empty + +\newcount\barsinlin@ +\newcount\maxbarsinlin@ + +%\def\@LeftRp{\stoppiec@\contpiece\addspace{\h@lf\afterruleskip}% %-simick +% \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip} %-simick +\def\@LeftRp{\stoppiec@\l@@ftrepeat\advance\volta@startcor-\afterruleskip %+simick + \contpiece\addspace{\h@lf\afterruleskip}% %+simick + \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip %+simick + \advance\lastbarpos\afterruleskip \b@rrul@} %+simick + +\def\@LeftRpCont{\stoppiec@\l@@ftrepeat\advance\volta@startcor-\afterruleskip % RDT 1.28 + \let\z@sw\@ne % turn on continuation bar number + \contpiece\addspace{\h@lf\afterruleskip}% + \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip% + \advance\lastbarpos\afterruleskip \b@rrul@} + +\def\T@bil{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinlin@} + +\def\barre{\T@bil \@bar\else\stoppiec@\contpiece \fi} +\def\xbar{\@bar\advance\barsinpi@c@\m@ne} +\def\zbar{\T@bil \zn@wbar\else\zstoppiec@\contpiece \fi} +\def\alaligne{\stoppiece\contpiece} +\def\zalaligne{\zstoppiece\contpiece} + +% ...@II means used in the *second* tex pass + +\def\leftrepeat@II{% +\T@bil + \setleftrepeat\@bar +\else + \@LeftRp % +\fi} + +\def\zleftrepeat@II{% % RDT 1.28 +\advance\barno\m@ne% +\T@bil + \setleftrepeat\@bar% +\else + \@LeftRpCont% % RDT 1.28 +\fi} + + +\let\leftrepeat\leftrepeat@II +\let\zleftrepeat\zleftrepeat@II % RDT 1.28 + +\def\zzleftrepeat{% % RDT 1.28 +\advance\barno\m@ne% +\stoppiece% +\let\z@sw\@ne% +\contpiece% +\advance\barno\m@ne% +\leftrepeat% +} + +\def\leftrightrepeat@II{% +\T@bil + \setleftrightrepeat\@bar +\else + \setrightrepeat\@LeftRp +\fi} + +\def\zzrightrepeat{% % RDT 1.28 + \advance\barno\m@ne% + \setrightrepeat\stoppiece + \let\z@sw\@ne + \contpiece +} + +\def\zrightrepeat{% % RDT 1.28 +\advance\barno\m@ne +\setrightrepeat +\T@bil + \@bar +\else + \stoppiec@ + \let\z@sw\@ne + \contpiece +\fi} + +\def\zzleftrightrepeat{% % RDT 1.28 + \advance\barno\m@ne + \setrightrepeat + \stoppiece + \let\z@sw\@ne + \contpiece + \addspace{\h@lf\afterruleskip}% + \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip + \advance\lastbarpos\afterruleskip \b@rrul@ +} + +\def\zleftrightrepeat@II{% % RDT 1.28 +\advance\barno\m@ne +\T@bil + \setleftrightrepeat\@bar +\else + \stoppiec@ + \let\z@sw\@ne + \contpiece +\fi} + +\let\leftrightrepeat\leftrightrepeat@II +\let\zleftrightrepeat\zleftrightrepeat@II % RDT 1.28 + +\def\alapage{\stoppiece\eject\contpiece} +\def\zalapage{\zstoppiece\eject\contpiece} + +% minuscule: une seule barre +% majuscule: double barre + +\let\Writ@newsigns\empty + +\def\updat@context{\writ@newclefs + \T@bil \wbarno@x\Writ@newsigns\Writ@meters\lastbarpos\lin@pos\addspace\afterruleskip +%%% 1.21: added \lastbarno setting + \else\Writ@newsigns\z@suspend\contpiece \fi} + +\def\changecontext{\showallbarrules\n@wbar\updat@context} +\def\Changecontext{\showallbarrules\setdoublebar\changecontext} +\def\zchangecontext{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip + \zn@wbar\updat@context} + +\def\pchangecontext{\showallbarrules\n@wbar + \writ@newclefs\Writ@newsigns\z@suspend\eject\contpiece} +\def\pChangecontext{\setdoublebar\pchangecontext} + +%%% bars, repeatbars, ... + +%% +% Change ... to add skip \beforeruleskip to the preceeding notebox, +% and to set the 'soft' switch for the output record +%% +%% +% Redefine \n@wbar to write the bar line thickness to file, +% then reset \n@skip and \x@skip +%% + +\newskip\lastbarpos +\let\fil@barno\empty +\let\atnextbar\empty + +\def\n@wbar{% + \t@rmskip % essai DT + \advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip +% \ifdim\cut@v>\z@ \else\ifx\barrul@\thinrul@ \else\global\cut@v.9\Interligne \fi\fi %-simick +% \barrul@\widthtyp@\z@ \fil@termskip\let\barrul@\thinrul@ %-simick + \barrul@\widthtyp@\z@ \fil@termskip %+simick + \advance\barsinpi@c@\@ne \fil@barno + \ifx\no@b\empty \message{bar \the\barno}\fi + \advance\barno\@ne \advance\lin@pos\x@skip \atnextbar \let\atnextbar\empty + \write@volta@hrule %+simick +% \global\cut@v\z@ % <===================================== inserted %-simick + \global\n@skip\z@ \global\x@skip\z@ \let\z@sw\empty +% \write@volta@hrule %-simick +}% + +\def\@bar{\n@wbar\wbarno@x\lastbarpos\lin@pos\addspace\afterruleskip} + +\def\zn@wbar{\t@rmskip\advance\barsinpi@c@\@ne \let\z@sw\@ne} + +\def\small@spc{\addspace{\h@lf\big@spc}} + +\def\b@rrul@{\let\barrul@\thinrul@ %+simick + \global\cut@v\lthick \global\volta@endcor-\thr@@\lthick \global\volta@startcor\z@} %+simick +\def\r@ightrepeat{% + \hbox{\writ@colons\addspace\big@spc\thinrul@\small@spc\thickrul@}} +\def\r@@ghtrepeat{% %+simick + \global\cut@v\big@spc \global\advance\cut@v\lthick \global\advance\cut@v\h@lf\big@spc %+simick + \global\volta@endcor\cut@v \global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick +\def\l@eftrepeat{% + \hbox{\thickrul@\small@spc\thinrul@\addspace\big@spc\writ@colons}} +\def\l@@ftrepeat{% %+simick + \global\cut@v\big@spc \global\advance\cut@v\h@lf\big@spc \global\advance\cut@v\lthick %+simick + \global\advance\cut@v\big@spc \global\volta@endcor\z@ \global\volta@startcor\big@spc %+simick + \global\advance\volta@startcor\lthick \global\advance\volta@startcor\h@lf\big@spc} %+simick +\def\l@eftrightrepeat{\hbox{\writ@colons\addspace\big@spc\thickrul@ + \small@spc\thickrul@\addspace\big@spc\writ@colons}} +\def\l@@ftrightrepeat{% %+simick + \global\cut@v\big@spc \global\advance\cut@v\big@spc \global\volta@endcor\cut@v %+simick + \global\advance\cut@v\h@lf\big@spc %+simick + \global\volta@startcor\big@spc \global\advance\volta@startcor\big@spc %+simick + \global\advance\cut@v\volta@endcor \global\advance\volta@startcor-\lthick} %+simick + +\def\doublebar{\showallbarrules\setdoublebar\barre}% double barre de mesure +%\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}} %-simick +\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}% %+simick + \global\cut@v\lthick \global\advance\cut@v\h@lf\big@spc \global\volta@endcor\cut@v %+simick + \global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick +%\def\setemptybar{\def\barrul@{\relax}} %-simick +\def\setemptybar{\def\barrul@{\relax}% %+simick + \global\cut@v\z@ \global\volta@endcor-\f@ur\lthick \global\volta@startcor\z@} %+simick +\def\setdoublebar{\showallbarrules\global\cut@v.4\Interligne + \global\advance\cut@v\tw@\lthick \global\volta@endcor\z@ \global\volta@startcor\z@ %+simick + \def\barrul@{\thinrul@\addspace{.4\Interligne}\thinrul@}} + +\def\rightrepeat{\setrightrepeat\barre} + +%\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat} %-simick +\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat \r@@ghtrepeat} %+simick +%\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat} %-simick +\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat \l@@ftrepeat} %+simick +%\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat} %-simick +\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat \l@@ftrightrepeat}%+simick + +% write colons on all staffs (a part of [left][right]repeat symbols + +%\def\writ@colons{\n@loop{\w@coli}\repeat} + + + +\def\writ@colons{\n@loop{\w@coli}\repeat} +\def\w@coli{\p@loop + {\ifnum\nblines=6\tabc@lsix% + \else\ifnum\nblines=4\tabc@lfour% + \else\raise\altportee\hbox{\raise4\internote\hbox{\keychar55}}\fi\fi}\count@portee\repeat} + +%%%% 1.29 RDT +\def\tabc@lsix{\raise\altportee\hbox{% + %\raise7\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% uncomment if wanted + \raise5\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% + \raise3\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% comment out if unwanted + \raise1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% + %\raise-1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% uncomment if wanted +}} + +%%%% 1.29 RDT +\def\tabc@lfour{\raise\altportee\hbox{% + \raise3\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% + \raise1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% comment out if unwanted + \raise-1\internote\rlap{\kernm1.2\internote\hbox{\keychar24}}% +}} +%%% seperated and full barlines + +%\def\rul@full#1{\raise\altplancher\rlap{\vrule\@depth\hlthick +% \@height\systemheight\@width#1}\addspace#1} + +\def\rul@full#1{\hbox{\raise\altplancher\rlap{\vrule\@depth\hlthick + \@height\systemheight\@width#1}}\addspace#1} + +\def\rul@sep#1{\noport@@\z@\n@loop + \edef\rul@hidden{\csname h@bl\romannumeral\noinstrum@nt\endcsname}% + \Comp@High\hbox{\raise\altitude\rlap{% +% \message{(tw@=\meaning\tw@\space thr@@=\meaning\thr@@\space \number\noinstrum@nt->}\expandafter\show\rul@hidden + \expandafter + \ifx\rul@hidden\relax % if \relax = never hidden + \vrule\@depth\hlthick\@width#1\@height\y@v + \else + \expandafter + \ifx\rul@hidden\thr@@ % if \thr@@ = not hidden one time, + \vrule\@depth\hlthick\@width#1\@height\y@v + \global\expandafter\let\rul@hidden\tw@ % reset to perm. hidden + \else + \expandafter + \ifx\rul@hidden\tw@ % if \tw@ = always hidden + \relax + \else + \expandafter + \ifx\rul@hidden\@ne % if \@ne = hidden only one time + \global\expandafter\let\rul@hidden\relax + \fi + \fi + \fi + \fi}}\repeat\addspace#1} + +%== hides (only) next bar line for specified instrument +\def\Hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\@ne} + +%== hides all next bar lines for specified instrument +\def\hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\tw@} + +%== force showing all bar lines for specified instrument +\def\showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\relax} + +%== force showing all bar lines for all instruments +\def\showallbarrules{% + %\ifx\writ@rule\rul@sep\relax + \n@loop + \global\expandafter\let\csname h@bl\romannumeral\noinstrum@nt\endcsname\relax + \repeat + %\fi +} + +%== force showing (only) next bar line for specified instrument +\def\Showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\thr@@} + +% standard vrules over all instruments +\def\stdbarrules{\let\writ@rule\rul@full } + +% separated vrules par instrum +\def\sepbarrules{\let\writ@rule\rul@sep } +\stdbarrules + +%%% signs + +\def\s@l@ctsigns{\edef\a@s{\csname a@s\romannumeral\noinstrum@nt\endcsname}% + \edef\o@s{\csname o@s\romannumeral\noinstrum@nt\endcsname}}% + +\def\setsign#1#2{\noinstrum@nt#1\relax + \let\Writ@newsigns\writ@newsigns % only write them, when they are touched + \s@l@ctsigns % select instrument + \a@s#2\relax % +} + +\def\generalsignature#1{\let\Writ@newsigns\writ@newsigns + \m@loop \s@l@ctsigns \a@s#1\repeat} + +% Inhibits writing erasing naturals at next change of context +\def\ignorenats{\m@loop \s@l@ctsigns \o@s\z@ \repeat} + +\def\changesignature{\t@rmskip\Writ@newsigns} + +\def\writ@sign{\ifnum\a@s=\z@ \else + \n@v\@lii + \ifnum\a@s>\z@ \C@sig\t@n + \C@sh\@ne\s@v@n + \C@sh\tw@\@l@v@n + \C@sh\thr@@\@ight + \C@sh\f@ur\fiv@ + \C@sh\fiv@\nin@ + \C@sh\si@\si@\fi + \n@v\@l + \ifnum\a@s<\z@ \C@sig\si@ + \C@fl\@ne\nin@ + \C@fl\tw@\fiv@ + \C@fl\thr@@\@ight + \C@fl\f@ur\f@ur + \C@fl\fiv@\s@v@n + \C@fl\si@\thr@@\fi + \fi} + +\def\C@sh#1#2{\ifnum\a@s>#1\C@sig#2\fi} +\def\C@fl#1#2{\ifnum\a@s<-#1\C@sig#2\fi} + +%% +% Augment \writ@newsigns so that +% (1) the space taken by the mid-line sign change is written to the file; +% (2) the new value of \sign@skip is written to the file +% Note that this is not necessarily the same value +% as the mid-line value, which includes cancellation naturals when +% the key signature changes from N flats to M sharps (or vice-versa) +%% + +\let\fil@signs\empty + +\def\writ@newsigns{\sign@skip\z@ + \n@loop{\s@l@ctsigns \let\@Ti\writ@newsign \C@wsi}\repeat + \n@skip\sign@skip \widthtyp@\z@ \t@rmskip + \m@loop \s@l@ctsigns \o@s\a@s \repeat + \let\Writ@newsigns\empty \fil@signs } + +\def\upd@width#1{\ifdim#1<\wd\toks@box \global#1\wd\toks@box \fi} +\def\writ@box{\leavevmode\raise\altportee\rlap{\box\toks@box}} + +\newcount\ut@ref + +\def\get@refs#1#2#3#4{% #1-#4: cle correspondante 0=sol, 5-6=fa, 1-4=ut + \ifcase\noport@@ \ut@ref\z@ \or \ut@ref#1\or \ut@ref#2\or + \ut@ref#3\or \ut@ref#4\fi + \relax \ifnum \ut@ref=9\relax \ut@ref-1\relax\fi + \global\ut@ref\ut@ref } + + %\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi + % \ifnum\o@s<\z@ \w@flats\w@sharps\else\w@sharps\w@flats \fi} + +\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi + \ifnum\o@s<\z@ \w@cancelflats\w@flats\w@sharps + \else\w@cancelsharps\w@sharps\w@flats \fi} + +\def\w@flats{\W@Fl\z@\si@ \W@Fl\@ne\nin@ \W@Fl\tw@\fiv@ \W@Fl\thr@@\@ight + \W@Fl\f@ur\f@ur \W@Fl\fiv@\s@v@n \W@Fl\si@\thr@@} + +\def\w@cancelflats{\W@canFl\z@\si@ \W@canFl\@ne\nin@ \W@canFl\tw@\fiv@ + \W@canFl\thr@@\@ight \W@canFl\f@ur\f@ur \W@canFl\fiv@\s@v@n \W@canFl\si@\thr@@} + + %\def\W@Fl#1#2{% + % \ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi} + +\def\W@Fl#1#2{% + \ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\relax\fi \fi} + +\def\W@canFl#1#2{% + \ifnum\a@s<-#1\relax\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi} + +\def\w@sharps{\W@Sh\z@\t@n \W@Sh\@ne\s@v@n \W@Sh\tw@\@l@v@n + \W@Sh\thr@@\@ight \W@Sh\f@ur\fiv@ \W@Sh\fiv@\nin@ \W@Sh\si@\si@} + +\def\w@cancelsharps{\W@canSh\z@\t@n \W@canSh\@ne\s@v@n \W@canSh\tw@\@l@v@n + \W@canSh\thr@@\@ight \W@canSh\f@ur\fiv@ \W@canSh\fiv@\nin@ \W@canSh\si@\si@} + + %\def\W@Sh#1#2{% + % \ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi} + +\def\W@Sh#1#2{% + \ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\relax\fi \fi} + +\def\W@canSh#1#2{% + \ifnum\a@s>#1\relax\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi} + +\def\C@wsi{\s@l@ctclefs \p@loop \count@portee \expandafter\get@refs\the\a@c + \setbox\toks@box\hbox{\kern.4\Internote \@Ti \kern.4\Internote}% + \upd@width\sign@skip \writ@box \repeat} + + %\def\C@sig#1{\n@iii#1% + % \ifnum\ut@ref>\z@ + % \advance\n@iii\ut@ref \advance\n@iii\ut@ref + % \ifnum\ut@ref=\si@ \advance\n@iii-\s@v@n \fi + % \ifnum\ut@ref>\thr@@ \advance\n@iii-\s@v@n \fi + % \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi + %\fi + %\advance\n@iii-\tw@ \raise\n@iii\internote + %\hbox\@to\tw@\internote{\hss\keychar\n@v\hss}} + +\def\C@sig#1{\n@iii#1% Correction by W. Icking + \advance\n@iii\ut@ref \advance\n@iii\ut@ref + \ifnum\ut@ref=\si@ \advance\n@iii-\fourt@@n% + \else \ifnum\ut@ref>\z@ \advance\n@iii-\s@v@n \fi\fi + \ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi + \ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi + \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi + \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi + \advance\n@iii-\tw@ \raise\n@iii\internote + \hbox\@to\tw@\internote{\hss\keychar\n@v\hss}} + +%%% meterindicators + +\def\s@l@ctm@t{\edef\m@t{\csname m@t\romannumeral\noinstrum@nt\endcsname}} + +\def\setmeter#1#2{\noinstrum@nt#1\relax % select instrument + \let\Writ@meters\writ@meters % only write them, when they are touched + \s@l@ctm@t \m@t{#2\empty\empty\empty}} + +\def\generalmeter#1{\let\Writ@meters\writ@meters + \m@loop \s@l@ctm@t \m@t{{#1}{#1}{#1}{#1}}\repeat} + +%% +% Redefine \writ@meters to set the 'hard' switch for +% \t@rmskip, indicating that this length is unscaleable +%% + +% \meterskip influence the space before !first! writemeters +\newskip\meterskip + +\def\writ@meters{\addspace\meterskip \meterskip\z@ \global\n@skip\z@ + \n@loop{\writ@meteri}\repeat + \ifdim\n@skip>\z@ \advance\n@skip\big@spc + \widthtyp@\z@ \t@rmskip \fi \let\Writ@meters\empty} + +\def\writ@meteri{\s@l@ctm@t \p@loop \setbox\toks@box + \hbox{\expandafter\writ@meterp\the\m@t{}{}{}{}}\upd@width\n@skip + \writ@box \count@portee\repeat} + +\def\writ@meterp#1#2#3#4{% + \ifcase\noport@@\hbox{#1}\or \hbox{#2}\or \hbox{#3}\or \hbox{#4}\fi} + +\def\meterfrac#1#2{% + \ifnum\nblines=6% + \setbox\toks@box\vbox{\hbox{~\meterfont#1}% + \hbox{~\meterfont #2}}\raise\internote% + \vbox\@to\@ight\internote{\offinterlineskip% + \vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vskip1.5\internote% + \vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss}% + \else\ifnum\nblines=4% + \setbox\toks@box\vbox{\hbox{\ \meterfont#1}% + \hbox{\ \meterfont #2}}\raise-1\internote\vbox\@to\@ight\internote{\offinterlineskip + \vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vss + \vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss} + \else + \setbox\toks@box\vbox{\hbox{\ \meterfont#1}% + \hbox{\ \meterfont #2}}\vbox\@to\@ight\internote{\offinterlineskip + \vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vss + \vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss} + \fi\fi +} +\def\allabreve{% -> 2/2 + \ifnum\nblines=6\raise5\internote\hbox{\keychar82}% + \else\ifnum\nblines=4\raise3\internote\hbox{\keychar82}% + \else\raise4\internote\hbox{\keychar82}\fi\fi} +\def\reverseallabreve{% + \ifnum\nblines=6\raise5\internote\hbox{\keychar123}% + \else\ifnum\nblines=4\raise3\internote\hbox{\keychar123} + \else\raise4\internote\hbox{\keychar123}\fi\fi} +\def\meterC{% -> 4/4 + \ifnum\nblines=6\raise5\internote\hbox{\musickeyfont\@lxxxiii}% + \else\ifnum\nblines=4\raise3\internote\hbox{\musickeyfont\@lxxxiii}% + \else\raise4\internote\hbox{\musickeyfont\@lxxxiii}\fi\fi} +\def\reverseC{% -> 4/2 + \ifnum\nblines=6\raise5\internote\hbox{\keychar84}% + \else\ifnum\nblines=4\raise3\internote\hbox{\keychar84}% + \else\raise4\internote\hbox{\keychar84}\fi\fi} +\def\meterN#1{% + \ifnum\nblines=6\raise3\internote\hbox{\meterfont#1}% + \else\ifnum\nblines=4\raise1\internote\hbox{\meterfont#1}% + \else\raise2\internote\hbox{\meterfont#1}\fi\fi} +\def\meterplus{{\keychar57}} + +%%% clefs + +\def\s@l@ctclefs{\edef\a@c{\csname a@c\romannumeral\noinstrum@nt\endcsname}% + \edef\o@c{\csname o@c\romannumeral\noinstrum@nt\endcsname}} + +% why simple, when it can be done complicated ? + +\newtoks\t@c +\def\@fourtoks#1#2#3#4#5+{#1#2#3#4} + +\def\setclef#1#2{\noinstrum@nt#1\relax + \ifnum#1<1\errmessage{Instrument number not positive}\fi + \s@l@ctclefs \t@c{#2000}% + \a@c\expandafter\expandafter\expandafter{\expandafter\@fourtoks\the\t@c+}} + \let\setclefs\setclef + +\let\bass\si@ +\let\alto\thr@@ +\let\treble\z@ + +\def\setclefsymbol#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}% + \expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}% + \expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}% +}% + +\def\setbassclefsymbol#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}% +}% + +\def\setaltoclefsymbol#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}% +}% + +\def\settrebleclefsymbol#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}% +}% + +\def\trebleclef{\keychar71} +\def\bassclef{\keychar73} +\def\altoclef{\keychar75} + +\def\smalltrebleclef{\keychar72} +\def\smallbassclef{\keychar74} +\def\smallaltoclef{\keychar76} + +%% version 1.21: replaced \smalltype\it by \txtfont (size-dependent) +%% and adjusted the kerns RDT +%% + +\def\trebleoct{\trebleclef\raise 9\internote\hbox\@to\z@{\txtfont{\kern -3.6\internote 8}\hss}} +\def\bassoct{\bassclef\raise 2\internote\hbox\@to\z@{\txtfont{\kern -4.6\internote 8}\hss}} +\def\treblelowoct{\trebleclef\raise -7.5\internote\hbox\@to\z@{\txtfont{\kern -4.6\internote 8}\hss}} +\def\basslowoct{\bassclef\raise -6\internote\hbox\@to\z@{\txtfont{\kern -5.0\internote 8}\hss}} + +% [version 1.15] reqest from Hermann Hinsch +\def\smalltrebleoct{\smalltrebleclef\raise 7.2\internote\hbox\@to\z@{\txtfont{\kern -3.6\internote 8}\hss}} +\def\smalltreblelowoct{\smalltrebleclef\raise-6.8\internote\hbox\@to\z@{\txtfont{\kern -4.2\internote 8}\hss}} +\def\smallbassoct{\smallbassclef\raise 2\internote\hbox\@to\z@{\txtfont{\kern -4.0\internote 8}\hss}} +\def\smallbasslowoct{\smallbassclef\raise-6.5\internote\hbox\@to\z@{\txtfont{\kern -4.4\internote 8}\hss}} +% [version 1.15] reqest from Hermann Hinsch: end + + +\newskip\clef@skip + +\def\changeclefs{\t@rmskip\writ@newclefs} +\def\zchangeclefs{\t@rmskip\zwrit@newclefs} + +%%% version 1.21: new command to call and reset \atnextbar before outputting new clefs RDT +\def\Changeclefs{\t@rmskip\atnextbar\let\atnextbar\empty\writ@newclefs} + +% since the characters are shifted by default(Metafont) they looked +% a little bit strange when you mix several staffstaffsizes (flushleft) +% I've introduced a hack(kern kernm), that they are (nearly) centered +% (aehmm, really not the best way, because now they look strange +% if you use music footnotes) + +\def\writ@clefi{\s@l@ctclefs + \p@loop + \setbox\toks@box\hbox{\expandafter\writ@clefp\the\a@c}% + \upd@width\clef@skip\raise\altportee\rlap{% + \ifdim\internote<\Internote \kern\thr@@\Internote\kernm\thr@@\internote \fi + \box\toks@box}\count@portee\repeat} + +\def\writ@clefp#1#2#3#4{% + \ifcase\noport@@\singl@clef#1% + \or \singl@clef#2\or \singl@clef#3\or \singl@clef#4\fi} + +\def\singl@clef#1{\n@iii#1\relax + \ifcase\n@iii + \C@Clef\@ne\trebleclef@var\or + \C@Clef\z@\altoclef@var\or + \C@Clef\@ne\altoclef@var\or + \C@Clef\tw@\altoclef@var\or + \C@Clef\thr@@\altoclef@var\or + \C@Clef\tw@\bassclef@var\or + \C@Clef\thr@@\bassclef@var\or + \C@Clef\f@ur\bassclef@var\or % 7 = subbass + \or + \C@Clef\z@\trebleclef@var % 9 = french violin-clef + \fi +} + +\def\C@Clef#1#2{\n@iii#1\relax\multiply\n@iii\tw@ + \raise\n@iii\internote\hbox{#2}} + +\def\bassclef@var{\expandafter + \ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@ + \bassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi} +\def\trebleclef@var{\expandafter + \ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@ + \trebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi} +\def\altoclef@var{\expandafter + \ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@ + \altoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi} + +\def\smallbassclef@var{\expandafter + \ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@ + \smallbassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi} +\def\smalltrebleclef@var{\expandafter + \ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@ + \smalltrebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi} +\def\smallaltoclef@var{\expandafter + \ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@ + \smallaltoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi} + + +%% +% Redefine \writ@newclefs similarly +% +% Note that \clef@skip does not change for the different clef +% symbols (always 3.2\Interligne for normal sized clefs) +% Hence there is no need to communicate clef changes to the +% formatting program +%% + +\def\writ@newclefs{\clef@skip\z@ \n@loop{\writ@newclefi}\repeat + \n@skip\clef@skip \widthtyp@\z@ \t@rmskip + \m@loop \s@l@ctclefs \o@c\a@c \repeat} + +% the same as \writ@newclefs, but no spacing + +\def\zwrit@newclefs{\clef@skip\z@ + \setbox\writ@volta@box \hbox{\n@loop{\writ@newclefi}\repeat}% + \kern -\clef@skip \box\writ@volta@box + \kern \clef@skip + \clef@skip\z@ % test + \n@skip\clef@skip + \widthtyp@\z@ + \t@rmskip + \m@loop \s@l@ctclefs \o@c\a@c \repeat} + +% Thanks to Helmut Kopka for helping me out +\def\writ@newclefi{\s@l@ctclefs\p@loop + \setbox\toks@box\hbox{\expandafter\expandafter\expandafter\writ@newclefp + \the\expandafter\a@c\the\o@c}% + \upd@width\clef@skip \writ@box \count@portee\repeat} + +\def\writ@newclefp#1#2#3#4#5#6#7#8{% + \ifcase\noport@@\newsingl@clef#1#5\or \newsingl@clef#2#6\or + \newsingl@clef#3#7\or \newsingl@clef#4#8\fi} + +\def\newsingl@clef#1#2{\n@iii#1\relax \n@ii#2\relax + \ifnum\n@ii=\n@iii + \else + \ifcase\n@iii + \C@Clef\@ne\smalltrebleclef@var\or + \C@Clef\z@\smallaltoclef@var\or + \C@Clef\@ne\smallaltoclef@var\or + \C@Clef\tw@\smallaltoclef@var\or + \C@Clef\thr@@\smallaltoclef@var\or + \C@Clef\tw@\smallbassclef@var \or + \C@Clef\thr@@\smallbassclef@var\or + \C@Clef\f@ur\smallbassclef@var\or % 7 = subbass + \or + \C@Clef\z@\smalltrebleclef@var % 9 = french violin-clef + \fi + \fi} + +%%% instrumentnames + +%\let\Writ@names\empty + +\def\setname#1#2{\n@v#1\relax % select instrument +% \let\Writ@names\writ@names + \expandafter\def\csname instrument\romannumeral\n@v\endcsname{#2}}% [version 1.15] changed from \edef to \def (Hiroaki) + +\def\writ@names{\n@loop + \setbox\toks@box\null\relax + \ifnum\st@ffs>0\relax + \setbox\toks@box\llap{\vbox{\hbox\@to\parindent{% + \hss\csname instrument\romannumeral\noinstrum@nt\endcsname\hss}}\ \ }% + \fi + \altportee\altitude \Comp@High \advance\y@v-\ht\toks@box + \advance\altportee\h@lf\y@v + \writ@box + \repeat} + +%%% + +% les notes proprement dites + +\newdimen\noteskip +\newcount\transpose +\newcount\normaltranspose +\newdimen\locx@skip +\newdimen\elemskip +\newdimen\@l@mskip + +\def\check@staff{% + \ifnum\noport@@>\st@ffs\relax + \ifx\Post@Elims\undefined\else + \immediate\write16{check@staff\space inst=\the\noinstrum@nt\space + staff=\the\noport@@\space st@ffs=\the\st@ffs\space Elim.}\relax + \fi + \ifnum\st@ffs>0\relax + \errmessage{Staff number (\the\noport@@) out of specified range (\the\st@ffs)!}\fi + \else\relax} +%\def\check@staff{\iftrue\relax} + +\let\ifactiveinstrument\check@staff + +\def\nextstaff{\@ndstaff\beginstaff} +\def\nextinstrument{\@ndstaff\begininstrument} +\def\prevstaff{\@ndstaff\advance\noport@@-2\relax\beginstaff} +\def\selectstaff#1{\@ndstaff\noport@@#1\relax + \advance\noport@@ -1\relax\beginstaff} +\def\selectinstrument#1{\@ndstaff\noinstrum@nt#1\relax + \advance\noinstrum@nt -1\relax\begininstrument} + +\def\begininstrument{\advance\noinstrum@nt\@ne \s@l@ctinstr + \ifdim\internote<\p@seven6\Internote \set@tinynotesize \comput@sizes + \else + \ifdim\internote<.95\Internote \set@smallnotesize \comput@sizes + \else + \ifdim\internote<1.19\Internote \set@normalnotesize \comput@sizes + \else + \ifdim\internote<1.43\Internote \set@largenotesize \comput@sizes + \else + \set@Largenotesize \comput@sizes + \fi + \fi + \fi + \fi + \noport@@\z@ \beginstaff} + +\def\beginstaff{\leavevmode + \altportee\altitude \advance\altportee\noport@@\interportee + \count@portee \s@l@ctclefs \expandafter\get@refs\the\a@c + \setbox\n@otebox\hbox\bgroup + \let\rq\rq@ \let\lq\lq@ \let\mp\mp@ % \let\ds\ds@oup RDT 1.27 + \locx@skip\x@skip} + +\def\@ndstaff{\egroup % this where \transpose gets reset + \ifdim\n@skip<\wd\n@otebox \n@skip\wd\n@otebox \fi + \raise\altportee\rlap{\unhbox\n@otebox}} + +%%% shifting + +\def\offs@t#1{\off{-\s@o@}#1\off\s@o@} +\def\loffset#1{\edef\s@o@{#1\qn@width}\offs@t} +\def\roffset#1{\edef\s@o@{-#1\qn@width}\offs@t} +\def\roff{\roffset\@ne} +\def\loff{\loffset\@ne} +\def\hroff{\roffset\h@lf} +\def\hloff{\loffset\h@lf} + +%%% decode collective coding + +% les symboles de notes ou assimiles + +\newcount\inh@alt +\def\getn@i{\inh@alt\z@ \xgetn@i} +\def\inhgetn@i{\inh@alt\@ne \xgetn@i} + +\def\f@tok#1#2\af@tok{#1} +\def\s@tok#1#2\af@tok{#2} + +% \n@viii used as flag: \n@viii=\maxdimen -> argument is no number + +\def\C@Get{\n@viii\maxdimen \edef\alt@suite{\noexpand\getn@i\s@uite\relax}} +\def\C@GET{\n@viii\maxdimen \edef\alt@suite{% + \ifnum\inh@alt=\z@ \noexpand\@TI{\s@uite}\fi \noexpand\getn@i\s@uite\relax}} + +\def\xgetn@i#1\relax{\n@viii\z@ \n@i\maxdimen % par defaut +%% \edef\t@ruc{\f@tok #1\relax\af@tok}% + \edef\t@ruc{\expandafter\f@tok #1\relax\af@tok}% + \edef\s@uite{\s@tok #1\empty\af@tok}% +%% pas lettre + \ifcat a\t@ruc \n@i\expandafter`\t@ruc\relax +%% ramener au E (position zero en clef de sol, ut@ref=0) + \ifnum\n@i>96\advance\n@i-101% + \else\advance\n@i-\@lxxxiii % ramener au S= E + 14 + \fi + \advance\n@i\ut@ref \advance\n@i\ut@ref \advance\n@i\transpose + \edef\ss@uite{\noexpand\n@fon{\s@uite}}% +%% cas active character dont chiffre + \else + \let\ss@uite\empty + \let\alt@suite\empty + \ifcat 1\t@ruc + \if =\t@ruc \let\@TI\na \C@GET \fi + \if *\t@ruc \sk \C@Get \fi + \if .\t@ruc \let\@TI\pt \C@GET \fi + \if >\t@ruc \let\@TI\dsh \C@GET \fi + \if <\t@ruc \let\@TI\dfl \C@GET \fi + \if !\t@ruc \transpose\normaltranspose \C@Get \fi + \if '\t@ruc \advance\transpose\s@v@n \C@Get \fi + \if `\t@ruc \advance\transpose-\s@v@n \C@Get \fi + \ifnum\n@viii<\maxdimen \n@i#1\fi + \else + \if ^\t@ruc \let\@TI\sh \C@GET \fi + \if _\t@ruc \let\@TI\fl \C@GET \fi + \fi\alt@suite + \fi} + +%%% setting stems and flags + +\newdimen\st@bot % note stem bottom +\newdimen\st@top % note stem top +\newdimen\stem@skip + +\def\stdstemfalse{\let\stdst@m\@ne} + +\def\setst@m{% + \advance\y@i\altportee + \ifdim\st@bot>\y@i \global\st@bot\y@i \fi + \ifdim\st@top<\y@i \global\st@top\y@i \fi + \advance\y@i-\altportee} + +\def\resetst@m{% + \global\st@bot\maxdimen \global\st@top-\maxdimen \let\stdst@m\empty} +\resetst@m + +\def\minst@bot{\ifdim\st@bot>\f@ur\internote + \ifx\stdst@m\empty \st@bot\f@ur\internote \fi \fi} + +\def\maxst@top{\ifdim\st@top<\f@ur\internote + \ifx\stdst@m\empty \st@top\f@ur\internote \fi \fi} + +\def\stem@rule{% + \vrule\@height\st@top\@depth-\st@bot\@width\lthick\kernm\lthick} + +\def\comp@stem{\advance\st@bot-\altportee \advance\st@top-\altportee} + +\def\C@stem{\ifdim\st@top>\st@bot + \comp@stem\kern\stem@skip\stem@rule + \kernm\stem@skip + \fi\resetst@m} + +\def\stemlength#1{\def\stemfactor{#1}} +\def\DefaultStemlength{4.66} +\stemlength{\DefaultStemlength} + +% cut stems in extrem positions for multiple voices in one staff + +\def\stemcut{\let\st@mcut\empty} +\def\nostemcut{\let\st@mcut\@ne} +\stemcut + +\def\Box@Flag{\setbox\ch@box\hbox{\musixfont\char\n@vii}\y@v\ht\ch@box } + +\def\down@flag{\Box@Flag\advance\st@bot-\y@v + \advance\st@bot-\stemfactor\interbeam + \advance\st@bot\DefaultStemlength\interbeam + \ifdim\st@top>\st@bot \comp@stem\minst@bot + \stem@rule\raise\st@bot\box\ch@box \fi\resetst@m} + +\def\up@flag{\Box@Flag\advance\st@top\y@v + \advance\st@top\stemfactor\interbeam + \advance\st@top-\DefaultStemlength\interbeam + \ifdim\st@top>\st@bot \comp@stem\maxst@top + \kern\qd@skip\stem@rule\advance\st@top-\y@v \raise\st@top\box\ch@box% + \kernm\qd@skip \fi\resetst@m} + +\def\cutst@l#1{% + \ifdim\st@bot<-#1\internote \advance\st@bot\qu@rt\interbeam \fi} + +\def\downst@m{\stem@skip\z@ + \advance\st@bot-\stemfactor\interbeam + \advance\st@bot-\altportee + \ifx\st@mcut\empty + \ifdim\st@bot<-\thr@@\internote + \cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@ + \cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi + \minst@bot\advance\st@bot\altportee + \C@stem} + +\def\cutst@u#1{% + \ifdim\st@top>#1\internote \advance\st@top-\qu@rt\interbeam \fi} + +\def\upst@m{\stem@skip\qd@skip + \advance\st@top\stemfactor\interbeam + \advance\st@top-\altportee + \ifx\st@mcut\empty + \ifdim\st@top>\@l@v@n\internote + \cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active + \cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi + \maxst@top\advance\st@top\altportee + \C@stem} + +\newdimen\s@lope + +\def\comp@slope#1{\s@lope\b@p#1\divide\s@lope\tw@nty} + +\def\beamst@m{% queue de note vers une poutre + \getcurpos \advance\y@v-\b@x + \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z + \ifdim\y@ii>\st@top % la poutre est au-dessus + \stem@skip\qd@skip \comp@slope\stem@skip \advance\y@ii\s@lope + \advance\y@ii .285\interbeam% version 1.18 RDT + \ifnum\b@n>\z@ \advance\y@ii\b@n\interbeam \advance\y@ii-\interbeam \fi + \st@top\y@ii % a mettre a jour avec la pente ulterieurement + \else + \advance\y@ii-.285\interbeam% version 1.18 RDT + \stem@skip\z@ + \ifdim\y@ii<\st@bot + \ifnum\b@n<\z@ \advance\y@ii\b@n\interbeam \advance\y@ii\interbeam \fi + \st@bot\y@ii \fi \fi + \C@stem} + +%%% writing notes inclusive lines (subsidiary lines ?) (german: Hilfslinien) + +\newif\ifadvance\advancetrue + +% Modification by Werner Icking +% ledger lines exceed the note by: y@vi := 0.35 (noteskip - notewidth) +% and: 0.5 qn@width > y@vi > 0.2 qn@width +\newdimen\y@vi +\def\h@linei{% + \y@ii\n@v\internote + \y@iii\y@ii + \advance\y@ii\hlthick + \advance\y@iii-\hlthick + \y@vi\noteskip % noteskip +%-\ifnum\y@vi=\z@ \y@vi\maxdimen\fi % (or maxdimen if noteskip = 0) + \advance\y@vi-\y@v % - notewidth + \y@vi0.7\y@vi % this may be eaten =: additional length + \y@iv\h@lf\qn@width\ifnum\y@vi>\y@iv \y@vi\y@iv\fi % not more than 0.5 qn@width + \y@iv0.2\qn@width \ifnum\y@vi<\y@iv \y@vi\y@iv\fi % not less than 0.2 qn@width + \y@iv\y@v % notewidth + \advance\y@iv\y@vi % + additional length =: total length + \kernm\h@lf\y@vi % center the ledger line +%-\message{noteskip = \the\noteskip, length = \the\y@iv, notewidth = \the\y@v}% + \vrule\@height\y@ii\@depth-\y@iii\@width\y@iv + \kernm\y@iv\kern\h@lf\y@vi} + +% end Werner Icking's modification of ledger lines. +% old behaviour can be restored with musixfll.tex (or musixfll.sty) + +\def\writ@note{% + \ifnum\n@i<\@c +% help lines \n@i (position) + \ifnum\nblines>\thr@@ % no help lines for percussion instruments + \n@v\z@ + \ifnum\n@i<\m@ne % waste memory, but saves time + \loop \advance\n@v\m@ne \ifnum\n@i<\n@v + \advance\n@v\m@ne \h@linei + \repeat + \else + \n@v\nblines \advance\n@v\m@ne \multiply\n@v\tw@ + \ifnum\n@i>\n@v + \loop \advance\n@v\@ne \ifnum\n@i>\n@v + \advance\n@v\@ne \h@linei + \repeat + \fi + \fi + \fi +% + \pl@base\setst@m\st@m + \ifadvance \raise\y@i\adv@box\n@sym \else \raise\y@i\hbox{\n@sym}\fi + \ss@uite \advancetrue + \fi} + +\def\adv@box#1{\hbox\@to\noteskip{#1\hss}\advance\locx@skip\noteskip} + +%%% breve, longa, maxima, arbitrary notes, non spacing + +\def\zmaxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \advancefalse \g@w} +\def\zlonga{\def\w@h{\musixchar39}\y@v\wn@width \advancefalse \g@w} +\def\zbreve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \advancefalse \g@w} +\def\zwq{\def\w@h{\musixchar56}\y@v\wn@width \advancefalse \g@w} +\def\zwqq{\def\w@h{\musixchar127}\y@v\wn@width \advancefalse \g@w} + +\def\g@w#1{\let\st@m\resetst@m + \check@staff + \getn@i#1\relax\let\n@fon\g@w \let\n@sym\w@h \writ@note + \fi} + +\def\maxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \g@w} +\def\longa{\def\w@h{\musixchar39}\y@v\wn@width \g@w} +\def\breve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \g@w} +\def\wq{\def\w@h{\musixchar56}\y@v\wn@width \g@w} +\def\wqq{\def\w@h{\musixchar127}\y@v\wn@width \g@w} + +%%% alternate longa (with up stem) by Ingo Struck +%%% struck@student.uni-siegen.de + +\def\lngdnst@m{\stem@skip1.25\qd@skip + \advance\st@bot-\stemfactor\interbeam + \advance\st@bot-\altportee + \ifx\st@mcut\empty + \ifdim\st@bot<-\thr@@\internote + \cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@ + \cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi + \minst@bot\advance\st@bot\altportee + \C@stem} + +\def\lngupst@m{\stem@skip1.25\qd@skip + \advance\st@top\stemfactor\interbeam + \advance\st@top-\altportee + \ifx\st@mcut\empty + \ifdim\st@top>\@l@v@n\internote + \cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active + \cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi + \maxst@top\advance\st@top\altportee + \C@stem} + +\def\@longa#1{\getn@i#1\relax + \ifnum\n@i>\thr@@ + \let\st@m\lngdnst@m + \else + \let\st@m\lngupst@m + \fi + \let\n@fon\@longa \let\n@sym\q@u \y@v\qn@width \writ@note} + +\def\l@ngasymbol{\def\q@u{\musixfont\@xxxii}} + +\def\longaa{\l@ngasymbol\@longa} + +%%% whole notes + +\def\C@Point#1#2{\ifodd\n@i \else#2\internote \fi\hbox{\musixchar#1}} + +\def\wh{\def\w@h{\musixfont\nin@}\y@v\wn@width \g@w} +\def\whp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\z@\raise}}% + \y@v\wn@width \g@w} +\def\whpp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\@ne\raise}}% + \y@v\wn@width \g@w} + +%%% whole noteheads, no advance + +\def\zw{\advancefalse\wh} +\def\zwp{\advancefalse\whp} +\def\zwpp{\advancefalse\whpp} +\let\zwh\zw + +\def\lw#1{\kernm\wn@width\zw{#1}\kern\wn@width} +\def\rw#1{\kern\wn@width\zw{#1}\kernm\wn@width} +\def\lwp#1{\kernm\wn@width\zwp{#1}\kern\wn@width} +\def\rwp#1{\kern\wn@width\zwp{#1}\kernm\wn@width} +\def\lwpp#1{\kernm\wn@width\zwpp{#1}\kern\wn@width} +\def\rwpp#1{\kern\wn@width\zwpp{#1}\kernm\wn@width} + +%%% common routines for noteheads with the same width as a quarter note + +\def\@qa#1{\getn@i#1\relax + \ifnum\n@i>\thr@@ + \let\st@m\downst@m + \else + \let\st@m\upst@m + \fi + \check@staff % version 1.16 + \let\n@fon\@qa \let\n@sym\q@u \y@v\qn@width \writ@note + \fi} + +\def\@qu{\let\st@m\upst@m \g@q} +\def\@ql{\let\st@m\downst@m \g@q} +\def\@zq{\let\st@m\setst@m \advancefalse\g@q} +\def\@nq{\let\st@m\resetst@m \g@q} + +\def\g@q#1{\check@staff + \getn@i#1\relax\let\n@fon\g@q \let\n@sym\q@u + \y@v\qn@width \writ@note\fi} + +\def\@qup{\let\st@m\upst@m \g@qp} +\def\@qlp{\let\st@m\downst@m \g@qp} +\def\@zqp{\let\st@m\setst@m \advancefalse\g@qp} +\def\@nqp{\let\st@m\resetst@m \g@qp} + +\def\q@up{\q@u\C@Point\z@\raise} +\def\g@qp#1{\check@staff + \getn@i#1\relax\let\n@fon\g@qp \let\n@sym\q@up + \y@v\qn@width \writ@note\fi} + +\def\@qupp{\let\st@m\upst@m \g@qpp} +\def\@qlpp{\let\st@m\downst@m \g@qpp} +\def\@zqpp{\let\st@m\setst@m \advancefalse\g@qpp} +\def\@nqpp{\let\st@m\resetst@m \g@qpp} + +\def\q@upp{\q@u\C@Point\@ne\raise} +\def\g@qpp#1{\check@staff + \getn@i#1\relax\let\n@fon\g@qpp \let\n@sym\q@upp + \y@v\qn@width \writ@note\fi} + +\def\@lqu#1{\kernm\qn@width\advancefalse\@qu{#1}\kern\qn@width} +\def\@rqu#1{\kern\qn@width\advancefalse\@qu{#1}\kernm\qn@width} + +\def\@lql#1{\kernm\qn@width\advancefalse\@ql{#1}\kern\qn@width} +\def\@rql#1{\kern\qn@width\advancefalse\@ql{#1}\kernm\qn@width} + +\def\@lq#1{\kernm\qn@width\@zq{#1}\kern\qn@width} +\def\@rq#1{\kern\qn@width\@zq{#1}\kernm\qn@width} + +\def\@qb#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@q} +\def\@tqb#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick \let\st@m\beamst@m \g@q} +\def\@tqh#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width \let\st@m\beamst@m \g@q} +\def\@qbp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qp} +\def\@qbpp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qpp} + +\def\@ca{\n@iv\@xlv \@mca} +\def\@cca{\n@iv46 \@mca} +\def\@ccca{\n@iv47 \@mca} +\def\@cccca{\n@iv48 \@mca} +\def\@ccccca{\n@iv49 \@mca} + +\def\@mca#1{\getn@i#1\relax \n@vii\n@iv + \ifnum\n@i>\thr@@ + \let\st@m\down@flag + \else + \let\st@m\up@flag \advance\n@vii -\fiv@\relax + \fi + \check@staff % version 1.16 + \let\n@fon\@mca \let\n@sym\q@u \y@v\qn@width \writ@note + \fi} + +\def\@cu{\n@vii\@xl \let\st@m\up@flag \g@q} +\def\@ccu{\n@vii\@xli \let\st@m\up@flag \g@q} +\def\@cccu{\n@vii42\let\st@m\up@flag \g@q} +\def\@ccccu{\n@vii43\let\st@m\up@flag \g@q} +\def\@cccccu{\n@vii44\let\st@m\up@flag \g@q} + +\def\@cl{\n@vii\@xlv \let\st@m\down@flag \g@q} +\def\@ccl{\n@vii46\let\st@m\down@flag \g@q} +\def\@cccl{\n@vii47\let\st@m\down@flag \g@q} +\def\@ccccl{\n@vii48\let\st@m\down@flag \g@q} +\def\@cccccl{\n@vii49\let\st@m\down@flag \g@q} + +\def\@cup{\n@vii\@xl \let\st@m\up@flag \g@qp} +\def\@ccup{\n@vii\@xli \let\st@m\up@flag \g@qp} +\def\@clp{\n@vii\@xlv \let\st@m\down@flag \g@qp} +\def\@cclp{\n@vii46\let\st@m\down@flag \g@qp} + + +\def\@cupp{\n@vii\@xl \let\st@m\up@flag \g@qpp} +\def\@clpp{\n@vii\@xlv \let\st@m\down@flag \g@qpp} + +%%% half notes + +\def\h@symbol{\def\q@u{\musixfont\@ight}} + +\def\ha{\h@symbol\@qa} +\def\hap#1{\pt{#1}\ha{#1}} % 1.27 RDT +\def\happ#1{\ppt{#1}\ha{#1}} % 1.27 RDT +\def\hu{\h@symbol\@qu} +\def\hup{\h@symbol\@qup} +\def\hupp{\h@symbol\@qupp} + +\def\hl{\h@symbol\@ql} +\def\hlp{\h@symbol\@qlp} +\def\hlpp{\h@symbol\@qlpp} + +\def\hb{\h@symbol\@qb} + +\def\zh{\h@symbol\@zq} +\def\zhp{\h@symbol\@zqp} +\def\zhpp{\h@symbol\@zqpp} + +\def\lh{\h@symbol\@lq} +\def\rh{\h@symbol\@rq} + +\def\zhu{\advancefalse\hu} +\def\zhup{\advancefalse\hup} +\def\zhupp{\advancefalse\hupp} + +\def\lhu{\h@symbol\@lqu} +\def\rhu{\h@symbol\@rqu} + +\def\zhl{\advancefalse\hl} +\def\zhlp{\advancefalse\hlp} +\def\zhlpp{\advancefalse\hlpp} + +\def\lhl{\h@symbol\@lql} +\def\rhl{\h@symbol\@rql} + +\def\lhp#1{\loff{\zhp{#1}}} +\def\rhp#1{\roff{\zhp{#1}}} +\def\lhpp#1{\loff{\zhpp{#1}}} +\def\rhpp#1{\roff{\zhpp{#1}}} + +%%% quarter notes, stem up + +\def\q@symbol{\def\q@u{\musixfont\s@v@n}} + +\def\qa{\q@symbol\@qa} + +\def\qap#1{\pt{#1}\qa{#1}} % 1.25 RDT +\def\qapp#1{\ppt{#1}\qa{#1}} % 1.25 RDT + +\def\qu{\q@symbol\@qu} +\def\qup{\q@symbol\@qup} +\def\qupp{\q@symbol\@qupp} + +%%% quarter notes, stem down + +\def\ql{\q@symbol\@ql} +\def\qlp{\q@symbol\@qlp} +\def\qlpp{\q@symbol\@qlpp} + +%%% quarter notes, stem up, no advance + +\def\zqu{\advancefalse\qu} +\def\zqup{\advancefalse\qup} +\def\zqupp{\advancefalse\qupp} + +\def\lqu{\q@symbol\@lqu} +\def\rqu{\q@symbol\@rqu} + +%%% quarter notes, stem down, no advance + +\def\zql{\advancefalse\ql} +\def\zqlp{\advancefalse\qlp} +\def\zqlpp{\advancefalse\qlpp} + +\def\lql{\q@symbol\@lql} +\def\rql{\q@symbol\@rql} + +%%% quarter noteheads, no advance + +\def\zq{\q@symbol\@zq} +\def\zqp{\q@symbol\@zqp} +\def\zqpp{\q@symbol\@zqpp} + +\def\lqp#1{\loff{\zqp{#1}}}% +\def\lqpp#1{\loff{\zqpp{#1}}}% +\def\rqp#1{\roff{\zqp{#1}}}% +\def\rqpp#1{\roff{\zqpp{#1}}}% + +\def\lq@{\q@symbol\@lq} +\def\rq@{\q@symbol\@rq} + +% +% note heads without stems +\def\nh{\h@symbol\@nq} +\def\nq{\q@symbol\@nq} +\def\znh{\advancefalse\nh} +\def\znq{\advancefalse\nq} + +%%% 8th, 16th, 32th, 64th, (128th) notes + +\def\ca{\q@symbol\@ca} +\def\cca{\q@symbol\@cca} +\def\ccca{\q@symbol\@ccca} +\def\cccca{\q@symbol\@cccca} +\def\ccccca{\q@symbol\@ccccca} + +\def\cu{\q@symbol\@cu} +\def\ccu{\q@symbol\@ccu} +\def\cccu{\q@symbol\@cccu} +\def\ccccu{\q@symbol\@ccccu} +\def\cccccu{\q@symbol\@cccccu} + +\def\cup{\q@symbol\@cup} +\def\ccup{\q@symbol\@ccup} +\def\cupp{\q@symbol\@cupp} + +\def\zcu{\advancefalse\cu} +\def\zccu{\advancefalse\ccu} +\def\zcccu{\advancefalse\cccu} +\def\zccccu{\advancefalse\ccccu} +\def\zcccccu{\advancefalse\cccccu} + +\def\lcu#1{\kernm\qn@width\zcu{#1}\kern\qn@width} +\def\rcu#1{\kern\qn@width\zcu{#1}\kernm\qn@width} + +\def\zcup{\advancefalse\cup} +\def\zccup{\advancefalse\ccup} +\def\zcupp{\advancefalse\cupp} + +\def\cl{\q@symbol\@cl} +\def\ccl{\q@symbol\@ccl} +\def\cccl{\q@symbol\@cccl} +\def\ccccl{\q@symbol\@ccccl} +\def\cccccl{\q@symbol\@cccccl} + +\def\clp{\q@symbol\@clp} +\def\cclp{\q@symbol\@cclp} +\def\clpp{\q@symbol\@clpp} + +\def\zcl{\advancefalse\cl} +\def\zccl{\advancefalse\ccl} +\def\zcccl{\advancefalse\cccl} +\def\zccccl{\advancefalse\ccccl} +\def\zcccccl{\advancefalse\cccccl} + +\def\zclp{\advancefalse\clp} +\def\zcclp{\advancefalse\cclp} +\def\zclpp{\advancefalse\clpp} + +\def\lcl#1{\kernm\qn@width\zcl{#1}\kern\qn@width} +\def\rcl#1{\kern\qn@width\zcl{#1}\kernm\qn@width} + +%%% beam notes + +\def\qb{\q@symbol\@qb} +\def\qbp{\q@symbol\@qbp} +\def\qbpp{\q@symbol\@qbpp} + +\def\zqb{\advancefalse\qb} +\def\zqbp{\advancefalse\qbp} +\def\zqbpp{\advancefalse\qbpp} + +\def\tqh{\q@symbol\@tqh} +\def\tqu{\q@symbol\@tqh} % version 1.16 RDT +\def\tqb{\q@symbol\@tqb} +\def\tql{\q@symbol\@tqb} % version 1.16 RDT + +\def\tqqh#1#2{\tbbu{#1}\tqh{#1}{#2}} % version 1.17 RDT +\def\tqqu{\tqqh} % version 1.17 RDT +\def\tqqb#1#2{\tbbl{#1}\tqb{#1}{#2}} % version 1.17 RDT +\def\tqql{\tqqb} % version 1.17 RDT +\def\tqqqh#1#2{\tbbbu{#1}\tqqh{#1}{#2}} % version 1.17 RDT +\def\tqqqu{\tqqqh} % version 1.17 RDT +\def\tqqqb#1#2{\tbbbl{#1}\tqqb{#1}{#2}} % version 1.17 RDT +\def\tqqql{\tqqqb} % version 1.17 RDT + +\def\nqqh#1#2{\tbbu{#1}\qb{#1}{#2}} % version 1.27 RDT +\def\nqqb#1#2{\tbbl{#1}\qb{#1}{#2}} % version 1.27 RDT +\def\nqqqh#1#2{\tbbbu{#1}\qb{#1}{#2}} % version 1.27 RDT +\def\nqqqb#1#2{\tbbbl{#1}\qb{#1}{#2}} % version 1.27 RDT +\def\nqqu{\nqqh} % version 1.27 RDT +\def\nqql{\nqqb} % version 1.27 RDT +\def\nqqqu{\nqqqh} % version 1.27 RDT +\def\nqqql{\nqqqb} % version 1.27 RDT + +\def\ztqh{\advancefalse\q@symbol\@tqh} +\def\ztqu{\advancefalse\q@symbol\@tqh} % version 1.16 RDT +\def\ztqb{\advancefalse\q@symbol\@tqb} +\def\ztql{\advancefalse\q@symbol\@tqb} % version 1.16 RDT + +%%% grace notes + +\def\grcu{\q@symbol\@grcu} +\def\grcl{\q@symbol\@grcl} + +\def\@grcu{\n@vii\tw@lv@ \let\st@m\up@flag \g@q} +\def\@grcl{\n@vii\active \let\st@m\down@flag \g@q} + +%%% starting beams + +% \ibu{0<=numero<10}{altitude~note}{pente de -9 a +9} +% \ibl{0<=numero<10}{altitude~note}{pente de -9 a +9} + +% \b@p slope (-9) - (9) +% \b@n number of pending beamlines (-4) - (4) + +\def\test@beamnum{% [version 1.15] new macro to make it independent from slur + \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxinstruments \else + \count@\maxinstruments \advance\count@\m@ne + \errmessage{Wrong beam reference number \the\n@i! (valid: 0 to \the\count@)} + \n@i\z@ + \fi + \advance\n@i\@ne}% + +\def\s@l@ctbeam#1\relax{% + \n@i#1\relax\test@beamnum % [version 1.15] make it independent from slur + \edef\b@x{\csname b@x\romannumeral\n@i\endcsname}% + \edef\b@z{\csname b@z\romannumeral\n@i\endcsname}% + \edef\b@n{\csname b@n\romannumeral\n@i\endcsname}% + \edef\b@p{\csname b@p\romannumeral\n@i\endcsname}} + +\def\s@l@ctc{\edef\c@x{\csname c@x\romannumeral\n@i\endcsname}% + \edef\c@z{\csname c@z\romannumeral\n@i\endcsname}} + +\def\s@l@ctd{\edef\d@x{\csname d@x\romannumeral\n@i\endcsname}% + \edef\d@z{\csname d@z\romannumeral\n@i\endcsname}\s@l@ctc} + +\def\s@l@cte{\edef\e@x{\csname e@x\romannumeral\n@i\endcsname}% + \edef\e@z{\csname e@z\romannumeral\n@i\endcsname}\s@l@ctd} + +\def\s@l@ctf{\edef\f@x{\csname f@x\romannumeral\n@i\endcsname}% + \edef\f@z{\csname f@z\romannumeral\n@i\endcsname}\s@l@cte} + +\def\s@l@ctg{\edef\g@x{\csname g@x\romannumeral\n@i\endcsname}% + \edef\g@z{\csname g@z\romannumeral\n@i\endcsname}\s@l@ctf} + +\def\ibu#1{\s@l@ctbeam#1\relax \i@bu} +\def\ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbu} +\def\ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbu} +\def\ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbu} +\def\ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbu} + +\def\ibl#1{\s@l@ctbeam#1\relax \i@bl} +\def\ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbl} +\def\ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbl} +\def\ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbl} +\def\ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbl} + +\def\i@bu#1#2{%\check@staff + \ifnum\b@n=\z@ \else \C@tb\t@bbu\qn@width \fi \global\b@n\m@ne + \inhgetn@i#1\relax \n@v#2 \C@ib+\global\advance\b@x\qd@skip} + +\def\i@bl#1#2{%\check@staff + \ifnum\b@n=\z@ \else \C@tb\t@bbl\lthick \fi \global\b@n\@ne + \inhgetn@i#1\relax \n@v#2 \C@ib-} + +\def\C@ib#1{\max@n@v\nin@\min@n@v{-\nin@}\global\b@p\n@v % clip slope number + \getcurpos \global\b@x\y@v \b@z#14.333\interbeam \advance\b@z\altportee + \pl@base \global\advance\b@z\y@i} + +\def\C@ba#1#2{\global\advance#1#2\interbeam} + +\def\i@bbu#1#2{\ifnum\b@n=\z@ \i@bu{#1}{#2}\C@ba\b@z\@ne \fi\n@bbu} +\def\i@bbl#1#2{\ifnum\b@n=\z@ \i@bl{#1}{#2}\C@ba\b@z\m@ne \fi\n@bbl} + +\def\i@bbbu#1#2{\ifnum\b@n=\z@ + \i@bbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \fi\n@bbbu} +\def\i@bbbl#1#2{\ifnum\b@n=\z@ + \i@bbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \fi\n@bbbl} + +\def\i@bbbbu#1#2{\ifnum\b@n=\z@ + \i@bbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \fi\n@bbbbu} +\def\i@bbbbl#1#2{\ifnum\b@n=\z@ + \i@bbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \fi\n@bbbbl} + +\def\i@bbbbbu#1#2{\ifnum\b@n=\z@ + \i@bbbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \C@ba\e@z\@ne \fi\n@bbbbbu} +\def\i@bbbbbl#1#2{\ifnum\b@n=\z@ + \i@bbbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \C@ba\e@z\m@ne \fi\n@bbbbbl} + +%%% changing beams + +\def\Dec@b#1#2{\ifnum\b@n=#1#2\fi\ifnum\b@n=-#1#2\fi} + +%!\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbu \fi \fi } +%!\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbl \fi \fi } + +\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbu} +\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbl} + +\def\nbbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu} +\def\nbbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl} + +\def\nbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte + \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu} +\def\nbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte + \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl} + +\def\nbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf + \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu \Dec@b\f@ur\n@bbbbbu} +\def\nbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf + \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl \Dec@b\f@ur\n@bbbbbl} + +\def\n@bbu{\C@nb\c@z\c@x\@ne\qd@skip} +\def\n@bbl{\C@nb\c@z\c@x\@ne\z@} +\def\n@bbbu{\C@nb\d@z\d@x\tw@\qd@skip} +\def\n@bbbl{\C@nb\d@z\d@x\tw@\z@} +\def\n@bbbbu{\C@nb\e@z\e@x\thr@@\qd@skip} +\def\n@bbbbl{\C@nb\e@z\e@x\thr@@\z@} +\def\n@bbbbbu{\C@nb\f@z\f@x\f@ur\qd@skip} +\def\n@bbbbbl{\C@nb\f@z\f@x\f@ur\z@} + +\def\C@nb#1#2#3#4{% + \global#1\b@z + \ifnum\b@n<\z@ \global\advance\b@n\m@ne \global\advance#1-#3\interbeam \fi + \ifnum\b@n>\z@ \global\advance\b@n\@ne \C@ba#1#3\fi + {\advance\locx@skip#4\getcurpos \global#2\y@v + \advance\y@v-\b@x \comp@slope\y@v \global\advance#1\s@lope}} + +%%% beam termination + +\def\b@adjust{\ifdim\y@ii>\tw@\y@ \advance\y@\y@ \advance\n@vi\@ne \fi} + +\def\@beam{% \y@ii : longueur, \b@p : pente, \y@i : altitude + \ifnum\b@p=\z@ +% slope zero + \y@iii\y@i\y@iv\y@i + \advance\y@iii-\b@amthick \advance\y@iv\b@amthick + \vrule\@height\y@iv\@depth-\y@iii\@width\y@ii + \else\n@vi\z@ +% slope offset + \ifnum\b@p>\z@ \n@vi\b@p \multiply\n@vi\si@ \advance\n@vi-\si@ \fi + \ifnum\b@p<\z@ \n@vi-\b@p \multiply\n@vi\si@ \advance\n@vi58\fi +% find longest possible character to avoid patchwork + \y@\tw@\p@ + \b@adjust \b@adjust \b@adjust \b@adjust \b@adjust + \advance\n@vi\@cxxviii + \chardef\b@alk\n@vi\musixfont +% +% \curwidth=0pt \curheight=\y@i \curxpos=\completewidth +% \loop\ifdim\curwidth<\completewidth +% \advance\curxpos by -\beamwidth +% \ifdim\curxpos<0pt +% \comp@slope\curxpos +% \advance\curheight by \s@lope \kern\curxpos \fi +% \raise\curheight\hbox{\b@alk}% +% \advance\curwidth by \beamwidth +% \comp@slope\beamwidth +% \advance\curheight by \s@lope +% \repeat \fi +% + \y@iv\z@ \y@iii\y@i \y@v\y@ii + \loop\ifdim\y@iv<\y@ii + \advance\y@v-\y@ + \ifdim\y@v<\z@ \comp@slope\y@v \advance\y@iii\s@lope \kern\y@v \fi + \raise\y@iii\hbox{\b@alk}% + \advance\y@iv\y@ \comp@slope\y@ \advance\y@iii\s@lope + \repeat \fi} + +\def\s@l@ctcde{\s@l@ctc \s@l@ctd \s@l@cte \s@l@ctf } + +\def\tbu#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width } +\def\tbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbu} +\def\tbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbu} +\def\tbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbu} +\def\tbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbu} + +\def\tbl#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick } +\def\tbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbl} +\def\tbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbl} +\def\tbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbl} +\def\tbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbl} + +\def\beam@pos#1{\getcurpos\y@ii\y@v\advance\y@ii-#1} + +\def\C@tb#1#2{% + \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \ifcase\n@ii \or \or \s@l@ctc \or \s@l@ctd \or \s@l@cte \or \s@l@ctf \or \s@l@ctg\fi + \ifnum\b@n<\m@ne #1\fi + \ifnum\b@n>\@ne #1\fi + \y@i\b@z \advance\y@i-\altportee \beam@pos\b@x + \advance\y@ii#2\relax + \check@staff + \llap{\@beam\kernm#2}\relax + \fi\global\b@n\z@} + +\def\t@bbu{\n@v\tw@ \C@b\t@bbbu\n@bbu\y@i\c@z \beam@pos\c@x \t@xbu} +\def\t@bbl{\n@v\tw@ \C@b\t@bbbl\n@bbl\y@i\c@z \beam@pos\c@x \t@xbl} + +\def\t@bbbu{\n@v\thr@@ \C@b\t@bbbbu\n@bbbu\y@i\d@z \beam@pos\d@x \t@xbu} +\def\t@bbbl{\n@v\thr@@ \C@b\t@bbbbl\n@bbbl\y@i\d@z \beam@pos\d@x \t@xbl} + +\def\t@bbbbu{\n@v\f@ur \C@b\t@bbbbbu\n@bbbbu\y@i\e@z \beam@pos\e@x \t@xbu} +\def\t@bbbbl{\n@v\f@ur \C@b\t@bbbbbl\n@bbbbl\y@i\e@z \beam@pos\e@x \t@xbl} + +\def\t@bbbbbu{\n@v\fiv@ \C@b\empty\n@bbbbbu\y@i\f@z \beam@pos\f@x \t@xbu} +\def\t@bbbbbl{\n@v\fiv@ \C@b\empty\n@bbbbbl\y@i\f@z \beam@pos\f@x \t@xbl} + +\def\C@b#1#2{% + \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi + \ifnum\n@ii>\n@v #1\fi + \loop + \advance\n@v\m@ne + \ifnum\n@ii=\n@v {\advance\locx@skip-\qn@width#2}\fi + \ifnum\n@v>\@ne \repeat} + +\def\t@xbu{\C@txb\qn@width\interbeam\b@amthick\qd@skip>} +\def\t@xbl{\C@txb\lthick\b@amthick\interbeam\hlthick<} + +\def\C@txb#1#2#3#4#5{\advance\y@i-\altportee + \advance\y@ii#1\relax + \check@staff + \llap{\@beam\kernm#1}% + \ifnum\b@n#5\z@ \comp@slope\y@ii \advance\y@i\s@lope + \raise\y@i\rlap{\kern#4\vrule\@height#3\@depth#2\@width\lthick}\relax + \fi + \fi + \ifnum\b@n<\z@ \global\advance\b@n\@ne \fi + \ifnum\b@n>\z@ \global\advance\b@n\m@ne \fi} + +%%% semiautomatic beams + +% adjustable beam slopes +% #1: beam number +% #2: starting pitch +% #3: ending pitch, +% #4: extension (number of \noteskip's) + +\def\Ibu#1{\s@l@ctbeam#1\relax\I@bu\i@bu} +\def\Ibl#1{\s@l@ctbeam#1\relax\I@bl\i@bl} +\def\Ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bu\i@bbu} +\def\Ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bl\i@bbl} +\def\Ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bu\i@bbbu} +\def\Ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bl\i@bbbl} +\def\Ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbu} +\def\Ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbl} +\def\Ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbbu} +\def\Ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbbl} + +% compute altitude difference of tried beam in \y@iv +% and compare with notes altitude difference + +\def\@@chk{\y@iv.05\y@v \multiply\y@iv\n@viii} + +\def\I@buuchk{\@@chk + \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@buuchk \fi + \ifnum\n@viii>\nin@ \advance\n@i\@ne \advance\n@ii\m@ne \I@buuchk \fi} + +\def\I@bldchk{\@@chk + \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@bldchk \fi + \ifnum\n@viii<-\nin@ \advance\n@i\m@ne \advance\n@ii\@ne \I@bldchk \fi} + +\def\I@budchk{\@@chk + \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@budchk \fi} + +\def\I@bluchk{\@@chk + \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@bluchk \fi} + +\def\I@bu{\let\@Ti\I@buuchk \let\@Tii\I@budchk \C@Ib} +\def\I@bl{\let\@Ti\I@bluchk \let\@Tii\I@bldchk \C@Ib} + +\def\C@Ib#1#2#3#4{{\n@v#4\relax \min@n@v\@ne + \inhgetn@i#3\relax\n@ii\n@i + \inhgetn@i#2\relax\advance\n@ii-\n@i + \y@v\noteskip \multiply\y@v\n@v + \ifnum\n@ii=\z@ #1{#2}0% + \else + \ifnum\n@ii>\z@ \n@viii\t@n \@Ti\else\n@viii-\t@n \@Tii \fi + \edef\I@boper{\noexpand#1{\the\n@i}{\the\n@viii}\relax}\I@boper + \fi}} + +% sets of double notes with computed slopes + +\def\B@h{\let\B@ii\tqh} +\def\B@b{\let\B@ii\tqb} + +\def\Dqbu{\let\B@i\Ibu \B@h\C@Dq} +\def\Dqbl{\let\B@i\Ibl \B@b\C@Dq} +\def\Dqbbu{\let\B@i\Ibbu \B@h\C@Dq} +\def\Dqbbl{\let\B@i\Ibbl \B@b\C@Dq} + +\def\C@Dq#1#2{\B@i0{#1}{#2}1\qb0{#1}\B@ii0{#2}} + +% sets of triple notes with computed slopes + +\def\Tqbu{\let\B@i\Ibu \B@h\C@Tq} +\def\Tqbl{\let\B@i\Ibl \B@b\C@Tq} +\def\Tqbbu{\let\B@i\Ibbu \B@h\C@Tq} +\def\Tqbbl{\let\B@i\Ibbl \B@b\C@Tq} + +\def\C@Tq#1#2#3{\B@i0{#1}{#3}2\qb0{#1#2}\B@ii0{#3}} + +% sets of quadruple notes with computed slopes + +\def\Qqbu{\let\B@i\Ibu \B@h\C@Qq} +\def\Qqbl{\let\B@i\Ibl \B@b\C@Qq} +\def\Qqbbu{\let\B@i\Ibbu \B@h\C@Qq} +\def\Qqbbl{\let\B@i\Ibbl \B@b\C@Qq} + +\def\C@Qq#1#2#3#4{\B@i0{#1}{#4}3\qb0{#1#2#3}\B@ii0{#4}} + +%%% duration points + +\def\pt{\g@pt\@ne\z@} +\def\ppt{\g@pt\@ne\@ne} +\def\pppt{\g@pt\@ne\tw@} + +\def\lpt{\g@pt\m@ne\z@} +\def\lppt{\g@pt\m@ne\@ne} +\def\lpppt{\g@pt\m@ne\tw@} + +\def\g@pt#1#2#3{\check@staff + \inhgetn@i#3\relax \relax % two \relax since the first one + \ifnum\n@i<\@c % in swallowed by \inhgetn@i + \ifodd\n@i \else\advance\n@i#1\fi + \pl@base \raise\y@i\hbox{\musixchar#2}\fi\fi} + +%%% rests + +\def\wholeshift#1{\roffset{\p@ne25}{#1}} + +\def\centerbar#1{\y@ii\lin@pos \advance\y@ii-\lastbarpos \advance\y@ii\cut@v + \kern-\h@lf\y@ii\lrlap{#1}\kern\h@lf\y@ii}% + + +\def\cpause{\hbox{\ccn{6}{\musixchar61}}} +\def\chpause{\hbox{\ccn{4}{\musixchar60}}} +\def\cPAuse{\hbox{\ccn{0}{\musixchar58}}} +\def\cPAUSe{\hbox{\ccn{0}{\musixchar59}}} + +\def\cHpause#1{% 1.21 RDT +\y@ii\lin@pos \advance\y@ii-\lastbarpos% +\def\v@rtpart{\hbox{\vrule width.6pt height1.5\internote depth1.5\internote}}% +\def\h@rizpart{\hbox{\vrule width0.35\y@ii height.5\internote depth.5\internote}}% +\raise4\internote\hbox{\v@rtpart\h@rizpart\ccn5{\meterfont{#1}}\h@rizpart\v@rtpart}}% + +\def\centerpause{\centerbar{\cpause}} +\def\centerhpause{\centerbar{\chpause}} +\def\centerPAuse{\centerbar{\cPAuse}} +\def\centerPAUSe{\centerbar{\cPAUSe}} +\def\centerHpause#1{\centerbar{\cHpause{#1}}} + +\def\C@ps#1#2#3{\n@viii#3\multiply\n@viii\tw@ + \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1}} +\def\C@pspt#1#2#3{\n@viii#3\multiply\n@viii\tw@ + \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1\relax + \ifnum #1=\t@n\relax \raise 0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% + \else \raise -0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% + \fi}% + } + +\def\PAUSe{\adv@box{\musixchar59}} +\def\PAuse{\adv@box{\musixchar58}} + +\def\pause{\check@staff + \adv@box{\raise\si@\internote\hbox{\musixchar61}}\fi} +\def\pausep{\wholeshift{\pt5}\pause} +\def\liftpause{\C@ps\@l@v@n\si@} +\def\liftpausep{\C@pspt\@l@v@n\si@} + +\def\hpause{\check@staff + \adv@box{\raise\f@ur\internote\hbox{\musixchar60}}\fi} +\let\hp\hpause +\def\hpausep{\wholeshift{\pt5}\hpause} +\let\hpp\hpausep +\def\lifthpause{\C@ps\t@n\f@ur} +\def\lifthpausep{\C@pspt\t@n\f@ur} + +\newdimen\lift@rest +\def\adv@restbox#1{\hbox{\lift@rest 5\internote + \advance\lift@rest -2.5\fontdimen\fiv@\musixfont + \raise\lift@rest\hbox\@to\noteskip{#1\hss}}\advance\locx@skip\noteskip} + +\def\qp{\adv@restbox{\check@staff\musixchar62\fi}} +\let\soupir\qp + +%\def\ds@oup{\adv@restbox{\check@staff\musixchar63\fi}} % why? RDT 1.27 +\def\ds{\adv@restbox{\check@staff\musixchar63\fi}} +\def\qs{\adv@restbox{\check@staff\musixchar64\fi}} +\def\hs{\adv@restbox{\check@staff\musixchar65\fi}} +\def\qqs{\adv@restbox{\check@staff\musixchar66\fi}} + +% pointed rests version 1.16 RDT +\def\qpp{\adv@restbox{\check@staff\pt5\musixchar62\fi}} +\def\dsp{\adv@restbox{\check@staff\pt5\musixchar63\fi}} +\def\qsp{\adv@restbox{\check@staff\pt5\musixchar64\fi}} +\def\hsp{\adv@restbox{\check@staff\pt5\musixchar65\fi}} +\def\qqsp{\adv@restbox{\check@staff\pt5\musixchar66\fi}} + +% double-dotted rests version 1.17 RDT + +\def\pausepp{\wholeshift{\ppt5}\pause} +\def\hpausepp{\wholeshift{\ppt5}\hpause} +\let\hppp\hpausepp +\def\qppp{\adv@restbox{\check@staff\ppt5\musixchar62\fi}} +\def\dspp{\adv@restbox{\check@staff\ppt5\musixchar63\fi}} +\def\qspp{\adv@restbox{\check@staff\ppt5\musixchar64\fi}} +\def\hspp{\adv@restbox{\check@staff\ppt5\musixchar65\fi}} +\def\qqspp{\adv@restbox{\check@staff\ppt5\musixchar66\fi}} + +% copied from musixlit.tex: version 1.21 RDT + +\def\Hpause#1#2{\zcharnote{#1}{\def\s@r{% +\vrule\@width.6\p@\@height1\h@lf\internote\@depth1\h@lf\internote}\s@r% +\vrule\@width#2\noteskip\@height\h@lf\internote\@depth\h@lf\internote\s@r}} + +%%% accidentals + +\newskip\accshift + +\def\bigaccid{\let\small@test\iftrue} +\def\smallaccid{\let\small@test\iffalse} +\def\varaccid{\def\small@test{\ifdim\noteskip>1\p@seven\qn@width}} + +\varaccid % accidents de taille variable + +\def\na#1{\small@test\bigna{#1}\else\smallna{#1}\fi} +\def\fl#1{\small@test\bigfl{#1}\else\smallfl{#1}\fi} +\def\sh#1{\small@test\bigsh{#1}\else\smallsh{#1}\fi} +\def\dfl#1{\small@test\bigdfl{#1}\else\smalldfl{#1}\fi} +\def\dsh#1{\small@test\bigdsh{#1}\else\smalldsh{#1}\fi} + +% n@vi char pos of cautionpar (normal=5, doubleflat=6) +% n@v offset to char pos (flat=0, dflat=1, sharp=2, dsharp=3, natural=4) +% n@vi offset to char pos (big=0, small=60) +% n@vii =maxdimen -> cautionacctrue + +\def\writ@ba{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} +\def\set@ba{\let\@Ti\writ@ba \n@vi\z@} + +\def\bigna{\set@ba \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\bigfl{\set@ba \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\bigsh{\set@ba \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\bigdfl{\set@ba \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\bigdsh{\set@ba \let\@Tii\@dSh \n@v\thr@@ \C@acc} + +\def\@sa{\ifnum\n@vii=\maxdimen \C@ChaR \musixchar\n@v \kern.3\qn@width + \else \musixchar\n@v \fi \n@vii\z@} + +\def\smallna{\set@sa \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\smallfl{\set@sa \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\smallsh{\set@sa \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\smalldfl{\set@sa \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\smalldsh{\set@sa \let\@Tii\@dSh \n@v\thr@@ \C@acc} + +\def\cna{\set@ca \let\@Tii\@Na \n@v\f@ur \C@acc} % version 1.16 HM +\def\cfl{\set@ca \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\csh{\set@ca \let\@Tii\@Sh \n@v\tw@ \C@acc} +\def\cdfl{\set@ca \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} +\def\cdsh{\set@ca \let\@Tii\@dSh \n@v\thr@@ \C@acc} +% +\def\writ@sa{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} +\def\set@sa{\let\@Ti\writ@sa \n@iv\fiv@ \n@vi\@xl } +\def\writ@ca{\pl@base\raise\y@i\llap{\C@ChaR \musixchar\n@v\kern.3\qn@width\kern\accshift}} +\def\set@ca{\let\@Ti\writ@ca \n@iv\fiv@ \n@vi\@xl } + +\def\writ@ua{\advance\n@i\thr@@ \zchar\n@i{\kern\qu@rt\qn@width\@sa}} +\def\set@upper{\let\@Ti\writ@ua \n@iv\fiv@ \n@vi\@xl } + +\def\upperna{\set@upper \let\@Tii\@Na \n@v\f@ur \C@acc} +\def\upperfl{\set@upper \let\@Tii\@Fl \n@v\z@ \C@acc} +\def\uppersh{\set@upper \let\@Tii\@Sh \n@v\tw@ \C@acc} + +\def\@Na{\ifcase\n@ii \n@v\tw@ \or \n@v\f@ur \or \n@v\z@ \fi} +\def\@Fl{\ifcase\n@ii \n@v\f@ur \or \n@v\z@ \or \n@v\@ne \fi} +\def\@Sh{\ifcase\n@ii \n@v\thr@@ \or \n@v\tw@ \or \n@v\f@ur \fi} +\def\@dFl{\ifcase\n@ii \n@v\z@ \or \n@v\@ne \or + \message{\@nod flatten \noexpand\dfl \t@ruc}\let\@Ti\empty \fi} +\def\@dSh{\ifcase\n@ii + \message{\@nod sharpen \noexpand\dsh \t@ruc}\let\@Ti\empty + \or \n@v\thr@@ \or \n@v\tw@ \fi} + +\def\C@acc#1{% + \check@staff + \inhgetn@i#1\relax + \ifx\rel@sw\@ne + \s@l@ctsigns \n@iii\n@i + \advance\n@iii-\ut@ref \advance\n@iii-\ut@ref + \loop\ifnum\n@iii>\si@ \advance\n@iii-\s@v@n \repeat + \loop\ifnum\n@iii<\z@ \advance\n@iii\s@v@n \repeat + \ifcase\n@iii + \n@ii\si@ % mi + \or\n@ii\@ne % fa + \or\n@ii\thr@@ % sol + \or\n@ii\fiv@ % la + \or\n@ii\s@v@n % si + \or\n@ii\tw@ % do + \or\n@ii\f@ur % re + \fi +% \n@ii positive signature limit, \n@ii-8 negative signature limit + \advance\n@ii-\a@s \advance\n@ii\si@ \divide\n@ii\s@v@n + \@Tii + \fi \advance\n@v\@l \advance\n@v\n@vi \expandafter\@Ti % [version 1.15] (Hiroaki) + \fi} + +\def\@nod{Can't double } + +\def\relativeaccid{\let\rel@sw\@ne } +\def\absoluteaccid{\let\rel@sw\empty } +\absoluteaccid + +\def\lna#1{\loffset\smallvalue{\na{#1}}} +\def\lfl#1{\loffset\smallvalue{\fl{#1}}} +\def\lsh#1{\loffset\smallvalue{\sh{#1}}} +\def\ldfl#1{\loffset\smallvalue{\dfl{#1}}} +\def\ldsh#1{\loffset\smallvalue{\dsh{#1}}} + +%%% arpeggio + +\def\arpeggio#1#2{\zcharnote{#1}{% + \uplap{\leaders\hbox{\musixchar70}\vskip#2\Interligne}}} +\def\larpeggio#1#2{\loffset\smallvalue{\arpeggio{#1}{#2}}} + +%%% ornaments, special signs + +\def\@Char#1{\zcharnote{#1}\C@ChaR} + +\def\backturn{\n@iv67\@Char} +\def\turn{\n@iv68\@Char} +\def\duevolte{{\keychar78}} +\def\caesura{\llap{\musixchar79\kern\h@lf\noteskip}} +\def\coda{\n@iv85\C@coda} +\def\Coda{\n@iv105\C@coda} +\def\C@coda#1{\llap{\@Char{#1}\kern\afterruleskip}} +\def\segno{\n@iv86\@Char} +\def\Segno{{\keychar110}} +\def\shake{\n@iv87\@Char} +\def\Shake{\n@iv88\@Char} +\def\Shakel{\n@iv106\@Char} +\def\Shakenw{\n@iv107\@Char} +\def\Shakesw{\n@iv108\@Char} +\def\Shakene{\n@iv109\@Char} +\def\mordent{\n@iv89\@Char} +\def\Mordent{\n@iv119\@Char} +\def\doublethumb{\n@iv121\@Char} +\def\trt#1{\loffset{0.65}{\shake{#1}}\roffset{0.65}{\mordent{#1}}} + + +\def\tr#1{\loffset{0.15}{\zcn{#1}{\ppff tr}}} % \loffset added version 1.23 RDT +\def\xtr#1{\raise1.25\internote\hbox{\n@iv111\zcn{#1}\C@ChaR}} % added version 1.23 RDT +\def\ptr#1{\raise1.25\internote\hbox{\n@iv117\zcn{#1}\C@ChaR}} % added version 1.23 RDT +%\def\Xtr#1{\wholeshift{\xtr{#1}}} % unnecessary? + +%%% accents + +\def\upbow{{\musixfont\@xxiii}} +\def\downbow{{\musixchar22}} + +\def\flageolett{\n@iv120\uacc@Char} +\def\usfz{\n@iv\tw@nty \uacc@Char} +\def\lsfz{\n@iv21\lacc@Char} +\def\dsfz{\lsfz} +\def\upz{\n@iv\@xxiv \uacc@Char} +\def\lpz{\n@iv\@xxv \lacc@Char} +\def\dpz{\lpz} +\def\ust{\n@iv\@xxvi \uacc@Char} +\def\lst{\n@iv\@xxvii \lacc@Char} +\def\dst{\lst} +\def\uppz{\n@iv28\uacc@Char} +\def\lppz{\n@iv\@xxix \lacc@Char} +\def\dppz{\lppz} +\def\usf{\n@iv30\uacc@Char} +\def\lsf{\n@iv31\lacc@Char} +\def\dsf{\lsf} +\def\upzst{\n@iv18\uacc@Char} +\def\lpzst{\n@iv19\lacc@Char} +\def\dpzst{\lpzst} + +\def\uacc@Char#1{\check@staff + \inhgetn@i#1\relax \relax + \ifnum\n@i<\@ight \ifodd\n@i \else\advance\n@i\@ne \fi \fi + \zchar\n@i\C@ChaR + \fi} + +\def\lacc@Char#1{\check@staff + \inhgetn@i#1\relax \relax + \ifnum\n@i>\@ne \ifodd\n@i \else\advance\n@i\m@ne \fi \fi + \zchar\n@i\C@ChaR + \fi} + +\def\C@ChaR{\musixfont\char\n@iv} + + %%% accents on beams (correction proposed by Klaus Bechert) + +\def\acc@ubalk{\acc@balk>\@ne} +\def\acc@lbalk{\acc@balk<\m@ne} +\def\acc@balk#1#2#3{\s@l@ctbeam#3\relax \getcurpos \advance\y@v\txt@ff + \advance\y@v-\b@x \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z + \ifnum\b@n#1#2\relax \advance\y@ii\b@n\interbeam + \advance\y@ii-#2\interbeam \fi + \advance\y@ii-\altportee \raise\y@ii\rlap\balk@accent} +\let\balk@accent\C@ChaR + +%\def\bflageolett{\n@iv120\acc@ubalk} +\def\busfz{\n@iv\tw@nty \acc@ubalk} +\def\blsfz{\n@iv21\acc@lbalk} +%\def\bdownbow{\n@iv22\acc@ubalk} +%\def\bupbow{\n@iv\@xxiii \acc@lbalk} +\def\bupz{\n@iv\@xxiv \acc@ubalk} +\def\blpz{\n@iv\@xxv \acc@lbalk} +\def\bust{\n@iv\@xxvi \acc@ubalk} +\def\blst{\n@iv\@xxvii \acc@lbalk} +\def\buppz{\n@iv28\acc@ubalk} +\def\blppz{\n@iv\@xxix \acc@lbalk} +\def\busf{\n@iv30\acc@ubalk} +\def\blsf{\n@iv31\acc@lbalk} +%\def\bupzst{\n@iv18\acc@ubalk} +%\def\blpzst{\n@iv19\acc@lbalk} + +% The next macros puts triplets (and others def'd with \txt) on beams + +\def\butext#1{\txt@ff\qn@width + \def\balk@accent{\uplap{\lrlap{\kern\tw@\txt@ff\txtfont\txt}\kern\internote}}% + \acc@ubalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR} + +\def\bltext#1{\txt@ff\z@ + \def\balk@accent{\vbox\@to\z@{\kern\internote\txtfont\lrlap\txt\vss}}% + \acc@lbalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR} + +%%% end of accents on beams (correction proposed by Klaus Bechert) + +%%% crescendo, decrescendo + +% These macros puts variable size (de)crescendo marks. +% \(de)crescendo{#1} #1=length (any TeX dimension, max 192pt(\simeq 68mm)) + +\def\C@cresc#1{\y@iv#1\n@v\y@iv + \sp@pt\@ne \advance\n@v\thr@@ % sp->pt round up + \divide\n@v\si@ % the next is 6pt(notehead) wider + \max@n@v\@xxxii + \min@n@v\@ne % clip to extremities + \advance\n@v\n@ii % first character position (-1) + \mxsps\char\n@v} + +\def\crescendo{\n@ii\@lxxxiii \C@cresc} +\def\decrescendo{\n@ii\@cxv \C@cresc} + +\newskip\@icresc +\def\icresc{\getcurpos\global\@icresc\y@v } +\def\tcresc{\n@ii\@lxxxiii \C@cre} +\def\tdecresc{\n@ii\@cxv \C@cre} +\def\C@cre{\getcurpos\advance\y@v-\@icresc \kernm\y@v\C@cresc\y@v\kern\y@v} + +%%% pedal signs + +\def\raiseped{-5} + +\def\sPed{\musixchar34} +\def\sPED{% +\zchar\raiseped\sPed% +\getcurpos\advance\y@v1.6ex\global\pdl@pos\y@v% +\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}% save current instrument and staff +} + +\def\Ped{\musixchar35} +\def\PED{% +\zchar\raiseped\Ped% +\getcurpos\advance\y@v2.8ex\global\pdl@pos\y@v% +\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}% save current instrument and staff +} +\def\Dep{\musixchar33} +\def\DEP{% +\zchar\raiseped\Dep% +\global\pdl@pos\z@% +} +\def\sDep{\musixchar104} +\def\sDEP{% +\zchar\raiseped\sDep% +\global\pdl@pos\z@% +} + +%%% pedal brackets version 1.21 RDT +%% +%% \pdld pedal down +%% \pdlu pedal up +%% \pdlud pedal up and immediately down + +\newdimen\pdl@pos % cursor position for pedal down +\global\pdl@pos\z@ + +\def\pdld{\hbox{\hroff{% +\raise\raiseped\internote\hbox{\vrule height2ex depth0.5pt width0.5pt}% +\getcurpos\global\pdl@pos\y@v% +% save current instrument and staff +\xdef\pdl@instr{\the\noinstrum@nt}\xdef\pdl@staff{\the\noport@@}% +}}}% + +\def\pdlu{\hbox{\hroff{\getcurpos\advance\y@v-\pdl@pos%% compute length of horizontal rule +\kern-\y@v% +\raise\raiseped\internote\hbox{% +\vrule height-0.5pt depth1pt width\y@v% +\vrule height2ex depth0.5pt width0.5pt %% pedal up +}}}% +\global\pdl@pos\z@}% + +\newbox\bigwedgebox % 1.22 RDT +\def\pdlud{\hbox{\hroff{\getcurpos\advance\y@v-\pdl@pos%% compute length of horizontal rule +\kern-\y@v% +\thinmuskip=2mu% +\setbox\bigwedgebox=\hbox{$\!\bigwedge\!$}% +\def\halfwidthbigwedge{0.5\wd\bigwedgebox}% +\advance\y@v-\halfwidthbigwedge% +\raise\raiseped\internote% +\hbox{% +\vrule height-0.5pt depth1pt width\y@v% draw horizontal rule +\kern\halfwidthbigwedge% +\raise0.33ex\lrlap{$\bigwedge$}% pedal up and down +}% +\getcurpos\advance\y@v\halfwidthbigwedge\global\pdl@pos\y@v% +}}}% + +%% cut pedal rule at line end +%% +% compute length of horizontal rule +\def\pdlc@{\getcurpos\advance\y@v-\pdl@pos% +\kern-\y@v\raise\raiseped\internote\hbox{% +\vrule height-0.5pt depth1pt width\y@v %% draw horizontal rule +}}% + +%%% fermata + +\def\fermataup{\n@iv80\@Char} +\def\fermatadown{\n@iv81\@Char} +% center on whole note +\def\Fermataup#1{\wholeshift{\fermataup{#1}}} +\def\Fermatadown#1{\wholeshift{\fermatadown{#1}}} + +%%% trills + +\def\trilleX{\let\T@i\empty \C@trille} +\let\trille\trilleX +\def\TrilleX{\def\T@i{\ppff tr }\C@trille} % 1.24 changed from \it RDT +\let\Trille\TrilleX +\def\C@trille#1#2{\zcharnote{#1}{\y@v#2\noteskip \trill@}} + +\let\maxtrilles\si@ +% \maxtrilles and \@itrille[i] are only for obsolete Legacy \trillC +% and \TrillC; not related with new register allocation code. Leave +% it as-is. [version 1.15] + +\newskip\@itrillei +\newskip\@itrilleii +\newskip\@itrilleiii +\newskip\@itrilleiv +\newskip\@itrillev +\newskip\@itrillevi + + %\def\s@l@cttrille#1\relax{% + % \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + % \ifnum\n@i<\maxtrilles \else + % \n@i\z@ \errmessage{Wrong trill number!}\fi + % \advance\n@i\@ne + % \edef\@itrille{\csname @itrille\roman@n@i}% dimen (altportee) + % }% select trill + + +\def\itrille{\itrill@old{0}} +\def\ttrille{\ttrill@old{0}} +\def\tTrille{\tTrill@old{0}} + +\def\itrill@old#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \getcurpos\global\tr@y\y@v} +\def\ttrill@old#1{\s@l@cttrill#1\relax + \message{\noexpand\tr@x=\the\tr@x, No. #1}% + \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi + \let\T@i\empty \C@tri} +\def\tTrill@old#1{\s@l@cttrill#1\relax + \message{\noexpand\tr@x=\the\tr@x, No. #1}% + \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi + \def\T@i{\ppff tr }\C@tri} % 1.24 changed from \it RDT + +\def\C@tri#1{\getcurpos\advance\y@v-\tr@y \kernm\y@v + \zcharnote{#1}\trill@\kern\y@v\let\T@i\empty\let\@itrille\undefined} +\def\trill@{\hbox\@to\y@v{\T@i\leaders\hbox{\musixchar69}\hfill}} + +%%%%%% + +% \let\maxtrills\si@ % here disabled to avoid conflict with new register allocation code +% [version 1.15] moved out to the new register allocation code +% \newskip\tr@xi \tr@xi\maxdimen\relax % starting horizontal pos +% \newtoks\tr@swi % heading of trill +% \newskip\tr@yi % height of trill + +\newcount\tr@number + +\def\tr@loop{\tr@number\z@ \loop\ifnum\tr@number<\maxtrills + \s@l@cttrill\tr@number\relax + \advance\tr@number\@ne } + +\def\s@l@cttrill#1\relax{% + \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxtrills \else + \count@\maxtrills \advance\count@\m@ne + \errmessage{Wrong trill reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@ % [version 1.15] + \fi + \advance\n@i\@ne + \xdef\tr@x{\csname tr@x\roman@n@i}% + \xdef\tr@y{\csname tr@y\roman@n@i}% + \xdef\tr@sw{\csname tr@sw\roman@n@i}% + }% select octiaviation line + +%\newskip\tr@x \tr@x\maxdimen\relax % starting horizontal pos +%\newskip\tr@y % height of trill + +\def\Itrille#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \global\tr@sw={\relax}% + \C@T} +\def\ITrille#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi + \global\tr@sw={{\ppff tr }}% 1.24 changed from \it RDT + \C@T} + +\def\C@T#1{% + \getcurpos\global\tr@x\y@v % store horizontal pos + \inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height + \global\tr@y\y@i } + +\def\Ttrille#1{\s@l@cttrill#1\relax + \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi + \advance\tr@y-\altportee \let\T@ii\char \C@TR \global\tr@x\maxdimen } + \let\TTrille\Ttrille + +\def\C@TR{% + \ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi + \advance\y@v-\tr@x \kernm\y@v \raise\tr@y\hbox\@to\y@v{% +% \the\tr@sw\xleaders\hbox{\musixchar69}\hfill\T@ii\n@ii}}% +% Correction by Julian Gilbey + \the\tr@sw\xleaders\hbox{\musixchar69}\hfill}}% + +%%% tremolos version 1.19 RDT +%%% based on code by Werner Icking and Andre van Ryckeghem +%%% version 1.20 RDT re-defined using \raise, suggested by JPC +%%% version 1.21 +%%% RDT changed beam numbers to 5, suggested by JPC +%%% RDT adjusted the vertical positions for 16th and 32nd tremolos +%%% version 1.24 +%%% RDT use new counter \tr@nspose to preserve changes to \transpose in an \hbox + +\newcount\tr@nspose % used to restore value of \transpose after closing an \hbox +\def\trml#1{\raise2\internote\hbox{\loffset{0.5}{\ibl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\trmu#1{\raise-3\internote\hbox{\loffset{0.5}{\ibu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\trrml#1{\raise3\internote\hbox{\loffset{0.5}{\ibbl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\trrmu#1{\raise-4\internote\hbox{\loffset{0.5}{\ibbu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\trrrml#1{\raise3\internote\hbox{\loffset{0.5}{\ibbbl5{#1}9}\roffset{0.5}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\trrrmu#1{\raise-4\internote\hbox{\loffset{0.5}{\ibbbu5{#1}9}\roffset{0.5}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% + +% whole notes are wider than quarter/half notes: +% version 1.21 RDT adjusted the offsets and vertical positions + +\def\Trml#1{\raise3\internote\hbox{\ibl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\Trmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\Trrml#1{\raise3\internote\hbox{\ibbl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\Trrmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibbu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\Trrrml#1{\raise3\internote\hbox{\ibbbl5{#1}9\roffset{1.25}{\tbl5}\global\tr@nspose\transpose}\transpose\tr@nspose}% +\def\Trrrmu#1{\raise-4\internote\hbox{\loffset{1.1}{\ibbbu5{#1}9}\roffset{0.15}{\tbu5}\global\tr@nspose\transpose}\transpose\tr@nspose}% + +%%% octave lines + +\def\octnumberup{\octnumberdefault\vrule width 0pt height2ex} +\def\octnumberdefault{\smallppff8} % version 1.17 RDT +\def\octnumberdown{\octnumberdefault$^a$\txtfont\kern 0.3em bassa\vrule width 0pt depth \Internote} + +\def\octfinup{\check@staff + \n@v\@xxiii\n@ii\@xxiv\global\o@swz={\@ne}\fi + \C@of} +\def\octfindown{\check@staff + \n@v\@xxv \n@ii\@xxvi\global\o@swz={\z@}\fi + \C@of} +\def\C@of#1#2{\check@staff + \y@v#2\noteskip\zcharnote{#1}{\hbox\@to\y@v{% + \xdef\o@sw{\csname o@swz\endcsname}\relax + \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\char\n@ii}}% + \fi} + +%%%%%% +% selecting \octnumber??? according to \o@sw +\def\octnumber{% \show\o@sw + \setbox\w@rkbox\hbox{% + \ifnum \@ne=\the\o@sw\relax \octnumberup + \else \octnumberdown + \fi}% + \ifdim \wd\w@rkbox>\y@v\setbox\w@rkbox\hbox{\octnumberdefault}\fi + \box\w@rkbox +} + + +%%%%%% + +% \let\maxoctlines\si@ % here disabled to avoid conflict with new register allocation code, except for \o@swz +% [version 1.15] moved out to the new register allocation code +% \newskip\o@xi \o@xi\maxdimen\relax % starting horizontal pos +% \newskip\o@yi % height of octline +\newtoks\o@swz % sense of octline for \octfin[up][down] without number +% \newtoks\o@swz % sense of octline for \octfin[up][down] without number + +\newcount\o@number + +\def\o@loop{\o@number\z@ \loop\ifnum\o@number<\maxoctlines + \s@l@ctoctline\o@number\relax + \advance\o@number\@ne } + +\def\s@l@ctoctline#1\relax{% + \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi + \ifnum\n@i<\maxoctlines \else + \count@\maxoctlines \advance\count@\m@ne + \errmessage{Wrong octaviation line reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] + \n@i\z@% [version 1.15] + \fi + \advance\n@i\@ne + \xdef\o@x{\csname o@x\roman@n@i}% + \xdef\o@y{\csname o@y\roman@n@i}% + \xdef\o@sw{\csname o@sw\roman@n@i}% + }% select octiaviation line + +%\newskip\o@x \o@x\maxdimen\relax % starting horizontal pos +%\newskip\o@y % height of octline + +\def\ioctfinup{\Ioctfinup0} +\def\ioctfindown{\Ioctfindown0} +\def\Ioctfinup#1{\check@staff + \s@l@ctoctline#1\relax + \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi + \global\o@sw={\@ne}\fi + \C@O} +\def\Ioctfindown#1{\check@staff + \s@l@ctoctline#1\relax + \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi + \global\o@sw={\z@}\fi + \C@O} + +\def\C@O#1{\check@staff + \getcurpos\global\o@x\y@v % store horizontal pos + \inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height + \global\o@y\y@i + \fi} % clise check@staff in Ioctfinup/down + +\def\toctfin{\Toctfin0} +\def\Toctfin#1{\check@staff + \s@l@ctoctline#1\relax + \advance\o@y-\altportee \let\T@ii\char \C@TO \global\o@x\maxdimen + \fi} + +\def\C@TO{\check@staff + \ifnum \@ne=\the\o@sw + \n@v\@xxiii \n@ii\@xxiv \else \n@v\@xxv \n@ii\@xxvi \fi + \ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi + \advance\y@v-\o@x \kernm\y@v \raise\o@y\hbox\@to\y@v{% + \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\T@ii\n@ii}\relax + \fi}% + +% Liftoctline #1 refnumber #2 lift[steps of internote] + +\def\Liftoctline#1#2{\n@i#1\advance\n@i\@ne + \advance\csname o@y\roman@n@i#2\internote} + +%%% some specials + +% \def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}} +% version 1.19 RDT: +\let\lyricson\relax +\let\lyricsoff\relax +\def\metron#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2\lyricson}} +\def\metronequiv#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1\lyricson}} + + +\def\txt{3} +\def\xtuplet#1#2{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip + \sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}% + \zcharnote{#2}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont#1\/\/}}} +\def\triolet{\xtuplet\txt} % version 1.17 RDT +\def\xxtuplet#1:#2#3{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip + \sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}% + \zcharnote{#3}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont{#1:#2\/\/}}}} + +% +% Following definitions based on tuplet.tex - conventional tuplet brackets for MusiXTeX. +% Col. G. L. Sicherman. Last revised 2003-05-17. +% +% Added to musixtex.tex version 1.16 by RDT. +% +% Standard MusiXTeX uses \uptrio and \downtrio to print tuplet brackets. +% We define \uptuplet and \downtuplet, with the same arguments: +% +% #1 : starting pitch +% #2 : width of bracket, in (\noteskip)s +% #3 : slope of bracket, in multiples of 1-1/8 degrees +% +% The user defines the text to appear in the opening as \tuplettxt. +% This is to avoid conflicting with the \txt in standard MusiXTeX. +% +% Examples: +% +% Draw a triplet bracket over the notes, starting at pitch "p", +% 1.25\noteskip wide, with a slope up of 3-3/8 degrees: +% +% \uptuplet p{1.25}3 +% +% Draw a sextuplet bracket under the notes, starting at pitch "a", +% 2.5\noteskip wide, with a slope down of 4-1/2 degrees: +% +% \def\tuplettxt{6\/\/} +% \downtuplet{a}{2.5}{-4} +% +% Send comments, complaints, and bouquets to the Colonel at +% . +% + +% Standard MusiXTeX prints a small "3" (or other number) within +% the bracket. Here we print the "3" in an opening in the bracket, +% so we need not use a small font. +% +% The double italic correction compensates for centering the number +% on the bracket line. + +\def\tuplettxt{3\/\/} + +%%% The rest is adapted from standard MusixTeX. + +\newdimen\y@vii % x of right end of left part of bracket. +\newdimen\y@viii % x of left end of right part of bracket. +\newdimen\y@ix +\newbox\tuptxtb@x + +% v@rline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) +% (comments and ideas from Ian Collier) (from -20 upto 20 ) +% This macro is used by some of the others which follow, +% using it directly it must be set in zero box + +\def\v@rline#1#2#3{\n@v#3\y@i#2% + \setbox\tuptxtb@x\hbox{\hskip1pt\txtfont\tuplettxt\hskip1pt}% + \y@vii=\h@lf\y@i\advance\y@vii-\h@lf\wd\tuptxtb@x% + \n@ii-\tw@nty \min@n@v\n@ii + \max@n@v\tw@nty \n@iii\n@v + \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars + \advance\n@v\@xxix + \setbox\ch@box\hbox{\mxsps\char\n@v}% + \ifdim\y@vii<\wd\ch@box \y@vii\wd\ch@box\fi% At least one whole segment! + \y@viii=\y@i\advance\y@viii-\y@vii% + \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ + \raise#1\internote\hbox{\mxsps\char\n@iv +% +% Build bracket with slanted line segments of width 10pt. +% Left part of bracket: +% + \loop\ifdim\y@iv<\y@vii\raise\y@iii\copy\ch@box + \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% +% last element +% +% \finalheight=2.5\completewidth +% \finalheight=\n@iii\finalheight +% \divide\finalheight by 100 +% \advance\overlapwidth by -\completewidth +% \stepheight=-2.5\overlapwidth +% \stepheight=\n@iii\stepheight +% \divide\stepheight by 100 +% \advance\curheight by \stepheight +% \kern -\overlapwidth \raise\curheight \box\ch@box +% + \y@ix=\y@vii\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% + \y@ix\y@vii\advance\y@ix-\wd\ch@box% + \y@iii\n@iii\y@ix\y@iii2\h@lf\y@iii\divide\y@iii\@c\raise\y@iii\copy\ch@box% +% +% Text: +% + \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c% + \y@ix=-\y@vii \advance\y@ix\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x% + \hbox to\y@ix{\hss}% + \y@iii\h@lf\y@v \raise\y@iii\vbox to\z@{% + \vss{\copy\tuptxtb@x}\vss} + \y@ix=\y@viii \advance\y@ix-\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x + \hbox to\y@ix{\hss}% To start of right part. No-op unless bracket is short. +% +% Right part of bracket: +% + \y@iii2\h@lf\y@viii \y@iii\n@iii\y@iii \divide\y@iii\@c% + \y@iv=\y@viii \advance\y@iv\wd\ch@box% + \loop\ifdim\y@iv<\y@i\raise\y@iii\copy\ch@box% + \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% +% Finish off the right part: +% + \y@iii\y@i\advance\y@iii-\wd\ch@box\y@iii2\h@lf\y@iii\y@iii\n@iii\y@iii% + \y@ix=\y@i\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% + \divide\y@iii\@c% + \raise\y@iii\copy\ch@box% +% + \raise\y@v\hbox{\mxsps\char\n@iv}}} +% +% y@i =complete length +% y@ii =height of linechar +% y@iii =current height +% y@iv =current width +% y@v =height of ending line +% y@vii =width of left segment of bracket +% y@viii=y@vii + width of opening +% y@ix =adjustment register +% +% n@iii=slope +% n@iv =(number of char for hooks) +% n@v =slope (number of linechar) + +\def\X@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width + \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\v@rline\n@i\y@v{#3}}} + +\def\uptuplet{\n@iv22\X@bkt} +\def\downtuplet{\n@iv21\X@bkt} + +%\check + +\def\zbreath{\check@staff\raise\si@\internote\rlap{\BIGtype'}\fi} +\def\cbreath{\check@staff\adv@box{\raise\si@\internote + \hbox\@to\noteskip{\hss\BIGtype'\hss}}\fi} + +% The following macros can be used to surround a note by parentheses +% \l[r]par p produces a left[right] parenthesis at pitch p (Ian Collier) + +\def\lpar{\n@iv\thr@@ \@Char} +\def\rpar{\n@iv\f@ur \@Char} + +% \bracket pn draws a square bracket [ to bracket an interval +% of an n-th whose lowest note is p (Ian Collier) + +\def\bracket#1#2{\y@iv#2\internote \advance\y@iv\tw@\internote + \inhgetn@i#1\relax\pl@base \advance\y@i-1\h@lf\internote + \raise\y@i\llap{\uplap{\offinterlineskip\hbox{\mxsps\@xxvii}% + \hbox{\vrule\@height\y@iv}\hbox{\mxsps\@xxvii}}}} + +%%% dynamics + +\def\f@kern{\kernm\p@ne ex} +\def\p@kern{\kernm\p@ne5ex} + +\def\f{{\ppff f}} +\def\ff{{\ppff f\f@kern f}} +\def\fp{{\ppff f\f@kern p}} +\def\sF{{\ppff s\ppff \p@kern f}} % changed \it to \ppff 1.24 RDT +\def\fff{{\ppff f\f@kern f\f@kern f}} +\def\ffff{{\ppff f\f@kern f\f@kern f\f@kern f}} +\def\mf{{\ppff m\p@kern\f@kern f}} +\def\mp@{{\ppff m\p@kern p}} +\let\mezzopiano\mp@ +\def\p{{\ppff p}} +\def\pp{{\ppff p\p@kern p}} +\def\ppp{{\ppff p\p@kern p\p@kern p}} +\def\pppp{{\ppff p\p@kern p\p@kern p\p@kern p}} +\def\sfz{{\ppff s\p@kern f\f@kern z}} % version 1.16 +\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} % version 1.16 + +%%% spacings + +% if you want to reduce the space behind e.g. \changecontext, use +% \addspace{dim} ! Only scaleable values are allowed ! + +\def\addspace#1{\kern#1\global\advance\x@skip#1} + +% \hardspace inserts (reduces) outside of \notes..\en unscaleable space + +\let\fil@spc\empty +\def\hardspace#1{\check@nopen\t@rmskip\y@v#1\addspace\y@v\fil@spc} + +\def\off#1{\advance\locx@skip#1\kern#1} +\def\sk{\off\noteskip} +\def\hsk{\off{\h@lf\noteskip}} +\def\bsk{\off{-\noteskip}} +\def\hbsk{\off{-\h@lf\noteskip}} % version 1.27 RDT + +%% +% Redefine \qsk to be scaleable softwidth rather than a fixed kern +% Otherwise, over/underfull boxes will occur on rescaled (pass 2) material +%% + +\def\qqsk{\off{\qu@rt\@l@mskip}} % version 1.16 RDT +\def\hqsk{\off{\h@lf\@l@mskip}} +\def\tqsk{\off{\p@seven\@l@mskip}} % version 1.25 RDT +\def\qsk{\off\@l@mskip} +\def\bhsk{\off{-\h@lf\@l@mskip}} % version 1.27 RDT +\def\btsk{\off{-\p@seven\@l@mskip}} % version 1.27 RDT +\def\bqsk{\off-\@l@mskip} % version 1.27 RDT + +\def\nspace{\hardspace{\h@lf\qn@width}} +\def\qspace{\hardspace\qn@width} + +%%% notes spacing + +\def\arithmeticskipscale{% + \def\znotes{\vnotes0\elemskip} + \def\notes{\vnotes2\elemskip}% 16th + \def\notesp{\vnotes2\h@lf\elemskip}% 16th point=8 trio + \def\Notes{\vnotes3\elemskip}% 8th + \def\Notesp{\vnotes3\h@lf\elemskip}% 8th point=4 trio + \def\NOtes{\vnotes4\elemskip}% 4th + \def\NOtesp{\vnotes4\h@lf\elemskip}% 4th point + \def\NOTes{\vnotes5\elemskip}% 2th + \def\NOTesp{\vnotes5\h@lf\elemskip}% 2th point + \def\NOTEs{\vnotes6\elemskip}% 1th + \def\NOTEsp{\undefined}% + \def\NOTES{\undefined}% +}% + +\def\geometricskipscale{% + \def\znotes{\vnotes0\elemskip} + \def\notes{\vnotes2\elemskip}% 16th + \def\notesp{\vnotes2.38\elemskip}% 16th point=8 trio + \def\Notes{\vnotes2.83\elemskip}% 8th + \def\Notesp{\vnotes3.36\elemskip}% 8th point=4 trio + \def\NOtes{\vnotes4\elemskip}% 4th + \def\NOtesp{\vnotes4.76\elemskip}% 4th point + \def\NOTes{\vnotes5.66\elemskip}% 2th + \def\NOTesp{\vnotes6.72\elemskip}% 2th point + \def\NOTEs{\vnotes8\elemskip}% 1th + \def\NOTEsp{\vnotes9.52\elemskip}% 1th + \def\NOTES{\vnotes11.32\elemskip}% 1th +}% + +\def\nnotes{\vnotes1.6\elemskip} % version 1.16 RDT (corrected 2015-03-31) +\def\nnnotes{\vnotes1.28\elemskip} % version 1.16 RDT (corrected 2015-03-31) + +\arithmeticskipscale + +\def\scale#1{\def\scalenoteskip{#1}} +\let\scalenoteskip\normalvalue + +\def\multnoteskip#1{\noteskip#1\noteskip} + +\def\vnotes#1\elemskip{\noteskip#1\@l@mskip \@vnotes} + +\let\V@sw\z@ +%\def\varnotes#1{\t@rmskip \let\V@sw\@ne +% \setbox\ch@box\hbox{#1}\noteskip\wd\ch@box \@vnotes} + +\def\hardnotes#1\notes{\t@rmskip \let\V@sw\@ne + \noteskip#1\relax \@vnotes} + +\let\thelyrics\empty +%\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne \def\thelyrics{\hbox{#1}}% +% \setbox\ch@box\thelyrics \noteskip\wd\ch@box \@vnotes} +\def\softlyrics#1{\def\thelyrics{\hbox{#1}}}% +\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne + \let\save@noteskip\noteskip + \def\noteskip{\z@\relax\errmessage{You cannot use \noexpand\noteskip + in \noexpand\hardlyrics's 1st argument!}}% + \def\thelyrics{\hbox{#1}}% + \setbox\ch@box\thelyrics \let\noteskip\save@noteskip + \noteskip\wd\ch@box \@vnotes} + + +\def\@vnotes{\multnoteskip\scalenoteskip + \def|{\nextstaff}\def&{\nextinstrument}\normaltranspose\transpose + \check@nopen\notes@open\@ne + \kern\n@skip\advance\x@skip\n@skip \locx@skip\x@skip + \n@skip\noteskip \noinstrum@nt\z@ \begininstrument} + +\def\en{\@ndstaff\notes@open\z@ + \ifnum\V@sw>0\t@rmskip + \fi + \let\thelyrics\empty} +\let\enotes\en + +\newcount\notes@open + +\def\check@nopen{% + \ifnum\notes@open>\z@ \en\errmessage{\@mis\noexpand\enotes ->}\fi} + +%%% text, lyrics, free positioning of chars + +\def\pl@base{\y@i\n@i\internote} +\def\lrlap#1{\rlap{\hss#1}} +\def\hard@box#1{\rlap{\hbox\@to\noteskip{#1\hfil}}} +\def\dhard@box#1{\rlap{\hbox\@to\tw@\noteskip{#1\hfil}}} +\def\thard@box#1{\rlap{\hbox\@to\thr@@\noteskip{#1\hfil}}} + +\def\zcharnote{\let\@Ti\rlap \C@ch} +\def\lcharnote{\let\@Ti\llap \C@ch} +\def\ccharnote{\let\@Ti\lrlap \C@ch} +\def\hcharnote{\let\@Ti\hard@box \C@ch} +\def\charnote#1#2{\zcharnote{#1}{#2}\sk} + +\def\zcn{\zcharnote} % version 1.16 +\def\ccn{\ccharnote} +\def\lcn{\lcharnote} + +\def\C@ch#1#2{\check@staff\inhgetn@i#1\relax\pl@base\raise\y@i\@Ti{#2}\fi} + +\def\zmidstaff{\let\@Ti\rlap \C@mid} +\def\lmidstaff{\let\@Ti\llap \C@mid} +\def\cmidstaff{\let\@Ti\lrlap \C@mid} + +\def\C@mid#1{\check@staff\y@v\interportee \advance\y@v\f@ur\Interligne \divide\y@v\tw@ + \raise\y@v\uplap{\@Ti{\strut#1}\vss}\fi} + +\def\zchar#1#2{\check@staff\raise#1\internote\rlap{#2}\fi} +\def\lchar#1#2{\check@staff\raise#1\internote\llap{#2}\fi} +\def\cchar#1#2{\check@staff\raise#1\internote\lrlap{#2}\fi} +\def\hchar#1#2{\check@staff\raise#1\internote\hard@box{#2}\fi} + +\def\uptext#1{\check@staff\zchar\t@n{#1}\fi} +\def\Uptext#1{\check@staff\zchar\fourt@@n{#1}\fi} + +\def\setsongraise#1#2{\n@v#1\relax % select instrument + \expandafter\def\csname T@R\romannumeral\n@v\endcsname{#2}} + +% [version 1.15] moved out to the new register allocation code +% \let\T@Ri\z@ + +\def\qlrlap#1{\rlap{\hbox to \qn@width{\hss#1\hss}}} +\def\zsong{\let\@Ti\rlap \C@t} +\def\lsong{\let\@Ti\llap \C@t} +\def\csong{\let\@Ti\qlrlap \C@t} +\def\hsong{\let\@Ti\hard@box \C@t} +\def\dhsong{\let\@Ti\dhard@box \C@t} +\def\thsong{\let\@Ti\thard@box \C@t} + +\def\C@t#1{\C@tx{\@Ti{\strut#1}\vss}} + +\def\C@tx{% + \ifnum\noinstrum@nt=\@ne \y@iv\staffbotmarg \else + \advance\noinstrum@nt\m@ne + \y@iv\csname interinstrument\romannumeral\noinstrum@nt\endcsname + \C@Inter \advance\y@iv\stem@skip \divide\y@iv\tw@ + \advance\noinstrum@nt\@ne \fi + \advance\y@iv-\csname T@R\romannumeral\noinstrum@nt\endcsname +%% \advance\noinstrum@nt\@ne \fi + \lower\y@iv\uplap} + +%%% slope lines and brackets + +% varline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) +% (comments and ideas from Ian Collier) (from -20 upto 20 ) +% This macro is used by some of the others which follow, +% using it directly it must be set in zero box + +\def\varline#1#2#3{\n@v#3\y@i#2% + \n@ii-\tw@nty \min@n@v\n@ii + \max@n@v\tw@nty \n@iii\n@v + \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars + \advance\n@v\@xxix + \setbox\ch@box\hbox{\mxsps\char\n@v}% + \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ + \raise#1\internote\hbox{\ifx\@hook\@ne \mxsps\char\n@iv \fi +% main loop + \loop\ifdim\y@iv<\y@i + \raise\y@iii\copy\ch@box\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat +% last element +% +% \finalheight=2.5\completewidth +% \finalheight=\n@iii\finalheight +% \divide\finalheight by 100 +% \advance\overlapwidth by -\completewidth +% \stepheight=-2.5\overlapwidth +% \stepheight=\n@iii\stepheight +% \divide\stepheight by 100 +% \advance\curheight by \stepheight +% \kern -\overlapwidth \raise\curheight \box\ch@box +% + \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c \advance\y@iv-\y@i + \y@ii-2\h@lf\y@iv \y@ii\n@iii\y@ii \divide\y@ii\@c \advance\y@iii\y@ii + \kernm\y@iv\raise\y@iii\box\ch@box% + \ifx\@hook\@ne \raise\y@v\hbox{\mxsps\char\n@iv}\fi +% text in the middle + \ifx\@text\@ne \ifnum\n@vi=\@ne \y@iii\p@ \else\y@iii-\p@ \fi + \advance\y@iii\h@lf\y@v \kernm\h@lf\y@i\raise\y@iii\vbox\@to\z@{% + \ifnum\n@vi=\@ne \vss \fi\lrlap{\txtfont\txt}\ifnum\n@vi=\@ne \else\vss \fi}\fi}% + \let\@hook\empty \let\@text\empty} +% +% y@i =complete length +% y@ii =height of linechar +% y@iii=current height +% y@iv =current width +% y@v =height of ending line +% +% n@iii=slope +% n@iv =(number of char for hooks) +% n@v =slope (number of linechar) +% n@vi =1 -> text above +% @hook=\@ne -> draws hookrules at begin and end of line +% @text=\@ne -> puts text at the middle of the line (def'd with \txt) + +% \ov[un]bkt{p}{n}{s} draws a bracket over the music starting at the +% current position at pitch p, width n\noteskip and slope s, causing no space +% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) + +\def\ovbkt{\n@iv22\C@bkt} +\def\unbkt{\n@iv21\C@bkt} + +\def\C@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width \let\@hook\@ne + \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\varline\n@i\y@v{#3}}} + +% \up[down]trio{p}{n}{s} same as above, +% draws \txt (default \eightit 3) above[below] in the middle +% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) + +\def\uptrio{\n@vi\z@ \let\@text\@ne \ovbkt} +\def\downtrio{\n@vi\@ne \let\@text\@ne \unbkt} + +% +% slide #1=height #2=number of elements #3=slope(-8 to 8 [step 10degree]) +% +\def\slide#1#2#3{\n@ii#3\relax\inhgetn@i#1\relax% + \ifnum\n@ii>\m@ne \advance\n@ii\m@ne\let\@Ti\raise + \else \n@ii-\n@ii \advance\n@ii\s@v@n\let\@Ti\lower \fi + \setbox\toks@box\hbox{\mxsps\char\n@ii}\n@iii\z@ + \raise\n@i\internote\rlap{\hbox{\loop\ifnum\n@iii<#2% + \@Ti\n@iii\ht\toks@box\copy\toks@box\advance\n@iii\@ne\repeat}}} + +%%% standard settings +% [115] make them compatible to >12 instruments +\def\resetlayout{\def\interfacteur{9}% + \stafftopmarg\thr@@\Interligne \staffbotmarg\thr@@\Interligne + \count@\z@ \loop + \advance\count@ by\@ne + \expandafter \let\csname n@l\roman@c@\endcsname \fiv@ +% \expandafter\def\csname interfacteur\roman@c@\endcsname{\interfacteur} % RDT deleted 1.26 + \ifnum\count@<\maxinstruments\repeat + \resetclefsymbols} + +\def\resetclefsymbols{% + \count@\z@ \loop + \advance\count@ by\@ne + \expandafter \let\csname treblec@s\roman@c@\endcsname \z@ + \expandafter \let\csname altoc@s\roman@c@\endcsname \z@ + \expandafter \let\csname bassc@s\roman@c@\endcsname \z@ + \ifnum\count@<\maxinstruments\repeat +} + +% [version 1.15] setup the default maximum element numbers to the same values of T.114 +\setmaxinstruments\si@ +\setmaxcxxviiibeams\si@ % 128th beam +\setmaxcclvibeams\z@ % 256th beam +\setmaxgroups\thr@@ % groups of inst's or choirs +\setmaxslurs\maxinstruments +\setmaxtrills\maxinstruments +\setmaxoctlines\maxinstruments +% + +% [version 1.15] new register allocation code requires some changes +%\resetlayout % no need +%\let\nbinstruments\maxinstruments % no need +%\normalnotesize % already executed in \setmaxinstruments +\normalmusicsize +\normalnotesize % important: execute it again after the first execute of \normalmusicsize --- to initialize \metron stem length. but why? +%\resetlayout % no need +\def\nbinstruments{1} +\noinstrum@nt1\s@l@ctinstr\internote\Internote +\def\tabstringfnt{\ifdim\internote<.95\Internote \fivess % 1.29 RDT +\else\ifdim\internote<1.19\Internote \sixss +\else\ifdim\internote<1.43\Internote \eightss +\else\niness\fi\fi\fi}% + +%%% +% +% This is muflex.tex version 1.00 , January 1993 +% +% Macro library for MusicTeX `flexiline' operations: MuFlex. +% The idea is to set up a two pass system. +% On the first pass, information about each bar is written to the file +% jobname.mx1. +% After the first pass, an external (non TeX) routine is run to +% determine optimal values of the elemental spacing (\elemskip) +% for each line, so as to properly fill each line, and to lead to +% the piece filling an integral number of lines. +% The relevant parameters are written onto the file +% jobname.mx2. +% On the second pass, the .mx2 file is read in, and the information +% used as described above. +% +% Ross Mitchell, January 1993. +% +%%% + +\newwrite\outmux +\def\fil@{\immediate\write\outmux} + +%% +% \mulooseness is the MuFlex analog of TeX's \looseness parameter: +% the increment to the natural number of lines in the section just +% ended. +%% + +\newcount\mulooseness +% Alternative \linegoal +\newcount\linegoal + +%% +% Invoke \startmuflex before \startpiece to find out the pass number +% and generally get things going. +%% +% !!! If you want (have) to override the .mx1, delete the .mx2 before !!! +% !! You have to change the mx1, if you change the spacing inbetween !! + +\newif\ifstartmuflex@done +\def\startmuflex{% + \ifstartmuflex@done + \immediate\write16{Warning: \noexpand\startmuflex\space + already done, ignored.}% + \else + \startmuflex@donetrue +% \global\let\ifstartmuflex@done\iftrue + \openin\inmux\jobname.mx2\relax + \ifeof\inmux + \immediate\openout\outmux\jobname.mx1\relax + \fil@{\mufl@x}% + \pass@I + \else + \message{(\jobname.mx2)}\pass@II + \fi + \fi} + +\let\endmuflex\empty + +\newbox\l@eftrightbox + +\def\leftrightrepeat@I{% + % \setbox\toks@box\l@eftrightrepeat\y@v\wd\toks@box + % \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box + % \advance\y@v\y@iv \global\advance\x@skip-\y@v + % + \setleftrightrepeat\@bar + \edef\thex@skip{\the\x@skip}% + \setbox\l@eftrightbox\l@eftrightrepeat + \edef\they@v{\the\wd\l@eftrightbox}% + \setbox\l@eftrightbox\l@eftrepeat + \edef\they@iv{\the\wd\l@eftrightbox}% + \global\x@skip\thex@skip + \fil@{l \they@v\space\they@iv}} + +\def\leftrepeat@I{% +% \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box +% \global\advance\x@skip-\y@iv + \setleftrepeat\@bar + \edef\thex@skip{\the\x@skip}% + \setbox\l@eftrightbox\l@eftrepeat + \edef\they@iv{\the\wd\l@eftrightbox}% + \global\x@skip\thex@skip + \fil@{L \they@iv}} + +% \akkoladen from: "Rainer Dunker" + + +\def\akkoladen#1{% + \def\akk@count{0}% avoid occupying yet another count register + \ifx\empty#1\else\@akkoladen#1\@nd\fi + % deactivate all remaining \grouptop...bottom items + \loop + \ifnum\akk@count<\maxgroups + \incr@akk@count + \expandafter\groupbottom\expandafter{\akk@count}\maxdimen + \expandafter\grouptop\expandafter{\akk@count}\z@ + \repeat} +\def\@akkoladen#1#2#3\@nd{% + \incr@akk@count + \expandafter\groupbottom\expandafter{\akk@count}{#1}% + \expandafter\grouptop\expandafter{\akk@count}{#2}% + \ifx\empty#3\else\@akkoladen#3\@nd\fi} +\def\incr@akk@count{% + \count@\akk@count\relax \advance\count@\@ne \edef\akk@count{\the\count@}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is MusiXTex code for multiple left curly brackets % +% % +% submitted by Mthimkhulu Molekwa % +% to the mutex list on 19 May 1999 % +% % +% % +% usage: % +% \curlybrackets{ % +% % +% ... % +% % +% } % +% % +% % +% % +% This version corrected 07/23/2007 by Rainer Dunker to make it % +% insensitive to changes in \interstaff by PMX % +% % +% Added to musixtex.tex version 1.16 by RDT % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Macros for tablature. They put numbers on or above the staff lines.% +% Based on tabdefs.tex by R.J. Gelten % +% version 1.29 RDT +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newif\iftabstylespace\tabstylespacefalse +% \tabbox ensures a white background for the tab number in the ps-file +% so the stafflines don't overwrite the number. Symbols are centered. +\def\tabbox#1#2{% + \setbox0=\hbox{\tabfnt #2}% + \stringraise\nblines + \advance\stringraise by -#1 + \multiply\stringraise by 2 + \advancefalse\def\q@u{}\loffset{0.45}{\@nq{\the\stringraise}}% + \iftabstylespace\else\advance\stringraise-1\fi + \special{ps: 1 setgray}% + \ccharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}% + \special{ps: 0 setgray}% + \ccharnote{\the\stringraise}{\box0}% +} +% \ltabbox does the same as \tabbox, except that it produces +% left-outlined symbols +\def\ltabbox#1#2{\setbox0=\hbox{\tabfnt #2}% + \stringraise\nblines + \advance\stringraise by -#1 + \multiply\stringraise by 2 + \advancefalse\def\q@u{}\loffset{0.2}{\@nq{\the\stringraise}}% + \iftabstylespace\else\advance\stringraise-1\fi + \special{ps: 1 setgray}% + \zcharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}% + \special{ps: 0 setgray}% + \zcharnote{\the\stringraise}{\box0}% +} +% \rtabbox does the same as \tabbox, except that it produces +% right-outlined symbols +\def\rtabbox#1#2{\setbox0=\hbox{\tabfnt #2}% + \stringraise\nblines + \advance\stringraise by -#1 + \multiply\stringraise by 2 + \advancefalse\def\q@u{}\loffset{0.75}{\@nq{\the\stringraise}}% + \iftabstylespace\else\advance\stringraise-1\fi + \special{ps: 1 setgray}% + \lcharnote{\the\stringraise}{\vrule height \ht0 width \wd0 depth \dp0}% + \special{ps: 0 setgray}% + \lcharnote{\the\stringraise}{\box0}% +} + +% \tab takes two arguments. +% #1 is the string number +% #2 is the symbol to be put on the string +% the symbols are horizontally centered and a \sk is put behind it, +% to jump to the position of the next symbol +\newcount\stringraise +\def\tab#1#2{% + \tabbox{#1}{#2}\sk% +} +% left spilling \tab +\def\ltab#1#2{% + \ltabbox{#1}{#2}\sk% +} +% right spilling \tab +\def\rtab#1#2{% + \rtabbox{#1}{#2}\sk% +} +% \chord-tab symbol. Same as \tab, but no \sk is given, so multiple +% symbols can be placed above one another +\def\ztab#1#2{% + \tabbox{#1}{#2}% +} +% left spilling \ztab +\def\zltab#1#2{% + \ltabbox{#1}{#2}% +} +% right spilling \ztab +\def\zrtab#1#2{% + \rtabbox{#1}{#2}% +} +% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% define a new clefsymbol \tabclef for tablature % +% 1.29 RDT +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\tabclef{% + \setbox0=\hbox{\tabcleffnt T} + \setbox1=\vbox{\baselineskip=0.5\baselineskip + \hbox to 2\wd0{{\tabcleffnt T}\hfil} + \hbox to 2\wd0{{\tabcleffnt A}\hfil} + \hbox to 2\wd0{{\tabcleffnt B}\hfil} + } + \ifnum\nblines=6\lower1.5\internote\box1 + \else\ifnum\nblines=4\lower3.5\internote\box1\else\lower2.5\internote\box1\fi\fi} + + +\let\origin@lwrit@staffs\writ@staffs +\def\writ@staffs{% + \origin@lwrit@staffs + \ifx\br@cks\empty\else\expandafter\@bracks\br@cks\ende\fi} + +\let\br@cks\empty +\def\curlybrackets#1{\def\br@cks{#1}} + +\def\@bracks#1#2#3\ende{% + \ifnum #1<#2 %=========================== inserted by D.S.(?) + \noinstrum@nt=#1\s@l@ctinstr\b@zi\altitude + \noinstrum@nt=#2\s@l@ctinstr\b@zii\altitude + \advance\b@zii-\b@zi + \C@Inter + \advance\b@zii\nblines\internote + \advance\b@zii\nblines\internote + \advance\b@zii-2\internote + \n@v\b@zii \sp@pt\tw@ \advance\n@v\@cxxviii + \divide\b@zii\tw@ + \advance\b@zi\b@zii + \raise\b@zi\rlap{\mxsps\char\n@v\kern\instrum@in@group}% + \fi %==================================== inserted by D.S.(?) + \ifx\empty#3\else\@bracks#3\ende\fi} + + +%% +% Define \pass@I to perform the following functions: +% +% (a) set line and page breaking for the first pass by setting +% rigid values for \elemskip (#1), +% \maxbarsinlin@ (#2) +% +% (b) Redefine \t@rmskip so that it writes to the .mx1 file; +% +% (c) Redefine part of \debutmorceau to open the output (.mx1) file +% and write the following parameters to the .mx1 file: +% \line@width +% \parindent +% \beforeruleskip +% \afterruleskip +% \elemskip +% \clef@skip +% \sign@skip; +% +% (d) redefine various other macros so that length measures will be +% written to the .mx1 file +%% + +\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness\space\the\linegoal}% + \mulooseness\z@\relax \linegoal\z@}% + +%\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness}\mulooseness\z@}% +%% +% Redefine \t@rmskip to include a macro for writing a record to a file, +% and define the macro +%% + \def\fil@termskip{% + \fil@{\the\barsinpi@c@\space\the\widthtyp@\space\the\x@skip}% + \widthtyp@\@ne}% +%% +% Redefine part of debutmorceau to write header information to file +%% + \def\fil@begin{% + \fil@{S}% Startindicator + \fil@{\the\line@width}% + \fil@{\the\parindent}% + \fil@{\the\beforeruleskip}% + \fil@{\the\afterruleskip}% + \fil@{\the\@l@mskip}% + \fil@{\the\clef@skip}% + \fil@{\the\sign@skip}}% +% +% -> \writ@newsigns +% + \def\fil@signs{% + \maxsign@skip\z@ + \n@loop \s@l@ctsigns + \sign@skip\tw@\Internote + \sign@skip\a@s\sign@skip + \ifdim\sign@skip<\z@ \sign@skip-\sign@skip \fi + \global\advance\sign@skip\smallvalue\Internote + \ifdim\maxsign@skip<\sign@skip \global\maxsign@skip\sign@skip + \fi + \repeat + \global\sign@skip\maxsign@skip + \fil@{s\space\the\sign@skip}}% +% +% -> \Contpiece +% + \def\fil@indent{\fil@{\the\barsinpi@c@\space0 \the\parindent}}% +% +% when a line is stopped with a zbar, to the next bar is added the amount +% of afterruleskip +% -> no line break during Pass 1 and indicate musixflx a zbar +% + \def\zbar{\zn@wbar\fil@{z \the\barno}}% +% +% \leftrightrepeat behaves different in mid of line and end of line +% -> no line break during Pass 1, get the widths and +% indicate musixflx a leftrightrepeat +% + \let\leftrightrepeat\leftrightrepeat@I + \let\zleftrightrepeat\leftrightrepeat@I % RDT 1.28 +% +% s.a. +% + \let\leftrepeat\leftrepeat@I + \let\zleftrepeat\leftrepeat@I % RDT 1.28 +% +% -> \hardspace +% + \def\fil@spc{\fil@{h \the\y@v}}% +% +% makes the .mx2 more transparent +% + \def\fil@barno{\fil@{b \the\barno}}% +% +% break line if value of \lin@pos (exclusive parindent, signs and clefs) +% is larger than 0.5\hsize +% + \def\T@bil{\getcurpos \ifdim\y@v<\h@lf\line@width}% +% +% close the file +% + \def\endmuflex{\immediate\closeout\outmux}}% + +%% +% Macros to set up the second pass +%% + +\newread\inmux + +%% +% Main macro: \pass@II +% Function: %%%(a) Open the .mx2 file +% %%%(b) Set the number of lines per page to #1 +% (c) Set the \everystaff macro to read and decode line +% parameter settings +% %%%(d) Define end of bar, end of line and repeat macros +% %%% according to \autolines +%% + +\def\pass@II{\def\ragg@d{\hfilneg\ }% +% \def\everyst@ff{\everystaff\read\inmux\@to\inline \inline}} % ancient + \def\everyst@ff{\read\inmux\@to\inline \inline\relax \everystaff}} + +%% +% \inline expands to \lineset#1#2#3#4#5, so define the latter +%% + +\def\lineset#1#2#3#4#5{\ifx\no@l\empty \message{<#1>}\fi + \maxbarsinlin@#2% + \@l@mskip#3% + \elemskip\@l@mskip + \afterruleskip#4% + \beforeruleskip#5} + +\def\musicparskip{\parskip\z@ plus\fiv@\Interligne minus\Interligne} + +\def\endcatcodesmusic{% + \catcode`\&\catcode@and + \catcode`\|\catcode@vert + \catcode`\>\catcode@gt + \catcode`\<\catcode@lt + \catcode`\!\catcode@excl + \catcode`\*\catcode@star + \catcode`\:\catcode@sc + \catcode`\.\catcode@pt + \let\bar\@@bar + \catcodesmusicfalse} + +\endcatcodesmusic + +%...\let\wlog=\@wloG + +\catcode`\@=\catcodeat +\endinput + diff --git a/macros/musixtex/tex/musixtmr.tex b/macros/musixtex/tex/musixtmr.tex new file mode 100644 index 0000000000..16f48a67e3 --- /dev/null +++ b/macros/musixtex/tex/musixtmr.tex @@ -0,0 +1,201 @@ +%% +%% musixtmr.tex : Times-series fonts definition for MusiXTeX +%% +%% usage: +%% \input musixtex +%% \input musixtmr +%% ... +%% +%% This file is public domain. +%% +%% Author: +%% Hiroaki MORIMOTO +%% Tokyo, Japan +%% URL(en): http://homepage1.nifty.com/kuuku/pub/musixtex/index-e.html +%% (jp): http://homepage1.nifty.com/kuuku/pub/musixtex/index.html +%% Extensions: Bob Tennent (rdt@cs.queensu.ca) 2016-02-22 +%% +%% reference: musixtex.tex (0.99) 268-508 +%% MusiXTeX: (c) Daniel Taupin, et al. +%% +%% History: see trailer. +% +\immediate\write16{MusiXTimesFonts\space<2017/02/10>} +\ifx\undefined\startpiece\errmessage{Input musixtex.tex before musixtmr.tex}\fi +% +% 7pt roman, bold, italic, bold italic, slanted and small-cap +\font\sevenrm=ptmr8t at 7pt +\font\sevenbf=ptmb8t at 7pt +\font\sevenit=ptmri8t at 7pt +\font\sevenbi=ptmbi8t at 7pt +\font\sevensc=ptmrc8t at 7pt % artificial small-caps +% +% 8pt roman, bold, italic, bold italic, slanted and small-cap +\font\eightrm=ptmr8t at 8pt +\font\eightbf=ptmb8t at 8pt +\font\eightit=ptmri8t at 8pt +\font\eightbi=ptmbi8t at 8pt +\font\eightsc=ptmrc8t at 8pt % artificial small-caps +% +% 9pt +\font\ninerm=ptmr8t at 9pt +\font\ninebf=ptmb8t at 9pt +\font\nineit=ptmri8t at 9pt +\font\ninebi=ptmbi8t at 9pt +\font\ninesc=ptmrc8t at 9pt +% +% 10pt +\font\tenrm=ptmr8t at 10pt +\font\tenbf=ptmb8t at 10pt +\font\tenit=ptmri8t at 10pt +\font\tenbi=ptmbi8t at 10pt +\font\tensc=ptmrc8t at 10pt +% +% +% 11pt +\font\elevenrm=ptmr8t scaled \magstephalf +\font\elevenbf=ptmb8t scaled \magstephalf +\font\elevenit=ptmri8t scaled \magstephalf +\font\elevenbi=ptmbi8t scaled \magstephalf +\font\elevensc=ptmrc8t scaled \magstephalf +% +% 12pt +\font\twelverm=ptmr8t scaled \magstep 1 +\font\twelvebf=ptmb8t scaled \magstep 1 +\font\twelveit=ptmri8t scaled \magstep 1 +\font\twelvebi=ptmbi8t scaled \magstep 1 +\font\twelvesc=ptmrc8t scaled \magstep 1 +% +% 14pt +\font\frtrm=ptmr8t scaled \magstep2 +\font\frtbf=ptmb8t scaled \magstep2 +\font\frtit=ptmri8t scaled \magstep2 +\font\frtbi=ptmbi8t scaled \magstep2 +\font\frtsc=ptmrc8t scaled \magstep2 +% +% 17pt +\font\svtrm=ptmr8t scaled \magstep3 +\font\svtbf=ptmb8t scaled \magstep3 +\font\svtit=ptmri8t scaled \magstep3 +\font\svtbi=ptmbi8t scaled \magstep3 +\font\svtsc=ptmrc8t scaled \magstep3 +% +% 20pt +\font\twtyrm=ptmr8t scaled \magstep4 +\font\twtybf=ptmb8t scaled \magstep4 +\font\twtyit=ptmri8t scaled \magstep4 +\font\twtybi=ptmbi8t scaled \magstep4 +\font\twtysc=ptmrc8t scaled \magstep4 +% +% 25pt +\font\twfvrm=ptmr8t scaled \magstep5 +\font\twfvbf=ptmb8t scaled \magstep5 +\font\twfvit=ptmri8t scaled \magstep5 +\font\twfvbi=ptmbi8t scaled \magstep5 +\font\twfvsc=ptmrc8t scaled \magstep5 +% +% large fonts for titles +% (If you prefer Times-bold, use \bf) +% (If you prefer small-caps, use \sc) +% +\def\bigtype{\bigfont\rm} +\def\Bigtype{\Bigfont\rm} +\def\BIgtype{\BIgfont\rm} +\def\BIGtype{\BIGfont\rm} +% +% +\font\ppfftwelve=ptmbi8t at 8pt +\font\ppffsixteen=ptmbi8t at 10pt +\font\ppfftwenty=ptmbi8t scaled \magstep 1 +\font\ppfftwentyfour=ptmbi8t scaled \magstep2 +\font\ppfftwentynine=ptmbi8t scaled \magstep3 +% +% +\def\f{{\ppff f}} +\def\ff{{\ppff ff}} +\def\fp{{\ppff fp}} +\def\fff{{\ppff fff}} +\def\ffff{{\ppff ffff}} +\def\mf{{\ppff mf}} +\def\p{{\ppff p}} +\def\pp{{\ppff pp}} +\def\ppp{{\ppff ppp}} +\def\pppp{{\ppff pppp}} + + +% +% sl fonts needed by musixsty +% +\font\eightsl=ptmro8t at 8pt +\font\ninesl=ptmro8t at 9pt +\font\tensl=ptmro8t at 10pt +\font\twelvesl=ptmro8t scaled \magstep1 +\font\frtsl=ptmro8t scaled \magstep2 +\font\svtsl=ptmro8t scaled \magstep3 +\font\twtysl=ptmro8t scaled \magstep4 +\font\twfvsl=ptmro8t scaled \magstep5 +% +% + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 +% +\def\sF{{\ppff s\p@kern f}} +\def\sfz{{\ppff s\p@kern f\f@kern z}} +\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} + +\def\mp@{{\ppff mp}} +\let\mezzopiano\mp@ + +% +% Redefine accented characters for 8-bit font, 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}} +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\input t1enc.def + +% \c needs special treatment +\def\c#1{\leavevmode\ifx c#1\char231 \else\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr + \hidewidth\char11\hidewidth}}\fi\fi} +\catcode`\@=\catcodeat +\fi + +\normtype +\endinput +%% +%% History +%% +%% 2001/08/21 +%% first publish +%% 2004/12/24 +%% no functional change. (email & real address change) +%% 2007/06/11 +%% no functional change. (email protection, real address change, URL change) +%% 2008/08/01 +%% Font assignment change on PMX. +%% 2009/10/15 +%% small update for MusiXTeX 1.14 final release. +%% 2015/02/06 +%% 8-bit encoding and extensions, similar to musixplt.tex +%% 2015-07-25 +%% change to ptmr8t fonts and use t1enc.def to re-defined accented characters +%% 2016-07-11 RDT +%% \catcode`\@=11 before inputting t1enc.def diff --git a/macros/musixtex/tex/musixtri.tex b/macros/musixtex/tex/musixtri.tex new file mode 100644 index 0000000000..52375e170d --- /dev/null +++ b/macros/musixtex/tex/musixtri.tex @@ -0,0 +1,64 @@ +% +% 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. +% + +\immediate\write16{MusiXTRIplepoint 1.05\space<30 April 2002>} + +\ifx\undefined\hlppp \else \endinput \fi + +\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 + +\def\lppt{\g@pt\m@ne\tw@} + +\def\whppp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\tw@\raise}}% + \y@v\wn@width \g@w} +\def\zwppp{\advancefalse\whppp} + +\def\@quppp{\let\st@m\upst@m \g@qppp} +\def\@qlppp{\let\st@m\downst@m \g@qppp} +\def\@zqppp{\let\st@m\setst@m \advancefalse\g@qppp} +\def\@nqppp{\let\st@m\resetst@m \g@qppp} + +\def\q@uppp{\q@u\C@Point\tw@\raise} +\def\g@qppp#1{\getn@i#1\relax \let\n@fon\g@qppp \let\n@sym\q@uppp + \y@v\qn@width \writ@note} + +\def\@qbppp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qppp} + +\def\@cuppp{\n@vii\@xl \let\st@m\up@flag \g@qppp} +\def\@clppp{\n@vii45\let\st@m\down@flag \g@qppp} + +\def\huppp{\h@symbol\@quppp} +\def\hlppp{\h@symbol\@qlppp} +\def\zhppp{\h@symbol\@zqppp} +\def\zhuppp{\advancefalse\huppp} +\def\zhlppp{\advancefalse\hlppp} +\def\quppp{\q@symbol\@quppp} +\def\qlppp{\q@symbol\@qlppp} +\def\zquppp{\advancefalse\quppp} +\def\zqlppp{\advancefalse\qlppp} +\def\zqppp{\q@symbol\@zqppp} +\def\cuppp{\q@symbol\@cuppp} +\def\zcuppp{\advancefalse\cuppp} +\def\clppp{\q@symbol\@clppp} +\def\zclppp{\advancefalse\clppp} +\def\qbppp{\q@symbol\@qbppp} +\def\zqbppp{\advancefalse\qbppp} + +\catcode`\@=\catcodeat +\endinput diff --git a/macros/musixtex/tex/tuplet.tex b/macros/musixtex/tex/tuplet.tex new file mode 100644 index 0000000000..8ea0dfc030 --- /dev/null +++ b/macros/musixtex/tex/tuplet.tex @@ -0,0 +1,27 @@ +% +% 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. +% +% +% tuplet.tex +% +\immediate\write16{tuplet.tex <2017-03-16>}% +% +% (nothing to do. - T.116 or later provide the definitions +% by Col. Sicherman formerly in tuplet.tex) +% +\endinput -- cgit v1.2.3