From 3bb41342bf8898ed16ea8eb9f8932a172da32565 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 13 Dec 2015 23:43:35 +0000 Subject: musixtex (13dec15) git-svn-id: svn://tug.org/texlive/trunk@39094 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/generic/musixtex/ChangeLog-120.txt | 6 + Master/texmf-dist/doc/generic/musixtex/README | 13 +- .../texmf-dist/doc/generic/musixtex/musixdoc.pdf | Bin 1251932 -> 1252604 bytes .../doc/generic/musixtex/musixdoc/frontmatter.tex | 12 +- .../doc/generic/musixtex/musixdoc/introduction.tex | 2 +- .../generic/musixtex/musixdoc/miscellaneous.tex | 3 + .../doc/generic/musixtex/musixdoc/musixtex.tex | 5125 -------------------- .../doc/generic/musixtex/musixtex-install.pdf | Bin 93293 -> 93367 bytes .../doc/generic/musixtex/musixtex-install.tex | 2 + .../doc/generic/musixtex/scripts/musixtex.pdf | Bin 4990 -> 6895 bytes Master/texmf-dist/doc/man/man1/musixtex.1 | 114 +- Master/texmf-dist/doc/man/man1/musixtex.man1.pdf | Bin 19666 -> 21624 bytes Master/texmf-dist/scripts/musixtex/musixtex.lua | 505 +- .../texmf-dist/tex/generic/musixtex/musixtex.tex | 34 +- 14 files changed, 469 insertions(+), 5347 deletions(-) create mode 100644 Master/texmf-dist/doc/generic/musixtex/ChangeLog-120.txt delete mode 100644 Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex (limited to 'Master') diff --git a/Master/texmf-dist/doc/generic/musixtex/ChangeLog-120.txt b/Master/texmf-dist/doc/generic/musixtex/ChangeLog-120.txt new file mode 100644 index 00000000000..5b9b796d156 --- /dev/null +++ b/Master/texmf-dist/doc/generic/musixtex/ChangeLog-120.txt @@ -0,0 +1,6 @@ +Changes from MusiXTeX 119 to 120: + +2015-12-13 + + re-defined tremolo commands \trml, \trmu, etc. to allow for numerical + pitches diff --git a/Master/texmf-dist/doc/generic/musixtex/README b/Master/texmf-dist/doc/generic/musixtex/README index d42c4b62ddb..c3ef5af699b 100644 --- a/Master/texmf-dist/doc/generic/musixtex/README +++ b/Master/texmf-dist/doc/generic/musixtex/README @@ -1,4 +1,4 @@ -This is MusiXTeX, version 1.19-2015-11-29. +This is MusiXTeX, version 1.20-2015-12-13. MusiXTeX is a TeX-based system for typesetting music. The main author was Daniel Taupin, who died in a climbing @@ -25,10 +25,11 @@ The package includes + a script musixflx.lua for the 2nd-pass processing - + a script musixtex.lua that automates the 3-pass - etex -> musixflx -> [pdf]etex process, - possibly followed by calls to dvips and ps2pdf (or dvipdfm) - to convert the output to Portable Document Format (PDF) + + a script musixtex.lua that uses pre-processors prepmx, + pmxab or autosp, as necessary, and automates the 3-pass + etex -> musixflx -> [pdf]etex process, possibly + followed by calls to dvips and ps2pdf (or dvipdfm) to + convert the output to Portable Document Format (PDF) + wrapper scripts musixflx.bat and musixtex.bat for use on Windows @@ -42,7 +43,7 @@ following instructions: To install (on TDS-compliant TeX systems): - + unzip tex-archive/install/macros/musixtex.tds.zip at the root of a + + unzip mirror.ctan.org/install/macros/musixtex.tds.zip at the root of a texmf tree and, if necessary, update the filename database; e.g., texhash texmf. diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf b/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf index 3e390f7b319..9e880520bb4 100644 Binary files a/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf and b/Master/texmf-dist/doc/generic/musixtex/musixdoc.pdf differ diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex index 92bc0ab32f1..5b2b0852366 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/frontmatter.tex @@ -1,6 +1,6 @@ \title{\Huge\bfseries\musixtex\\[\bigskipamount] \LARGE\bfseries Using \TeX{} to write polyphonic\\or -instrumental music\\\Large\itshape Version 1.19} +instrumental music\\\Large\itshape Version 1.20} %\author{\Large\rm Daniel \sc Taupin\\\large\sl @@ -65,11 +65,11 @@ event. You may read tributes to Daniel Taupin that are archived at the Since then, the only significant update to \musixtex\ has been in version 1.15 (April 2011) which takes advantage of the greater capacity of the e\TeX\ version of \TeX. -In the current version~1.19 (November~2015), +In the current version~1.20 (December~2015), new commands for tremolos HAVE BEEN added and discussion of non-spacing rests has been added to this manual, which is the definitive reference to all features of -\musixtex\ version~1.19. +\musixtex\ version~1.20. Novice users need not start here. Most @@ -86,6 +86,12 @@ want to use \verb|autosp|, another preprocessor. It simplifies the production of \musixtex\ scores by automating the choice of note-spacing commands; see Section~\ref{autosp}. +It is possible to create inputs for \musixtex, \textbf{PMX}, \mbox{\textbf{M-Tx}} or +\texttt{autosp} using any text editor, such as \verb|notepad| or \verb|vi| or +\verb|emacs|. Currently there is no graphical user interface for +generating input files, other than \TeX-oriented integrated +graphical development environments such as \TeX Works. + The \href{http://icking-music-archive.org/software/indexmt6.html} {\underline{Werner Icking Music Archive}}\ (WIMA) contains excellent and detailed instructions for installing \TeX, \musixtex{} and the strongly recommended diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/introduction.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/introduction.tex index d54dbf23351..3407902e615 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/introduction.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/introduction.tex @@ -762,7 +762,7 @@ convert the result to PDF and delete intermediate files. There are many options available to change the behavior; run -\verb|musixtex --help| +\verb|musixtex -h| \noindent to get a summary. diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex index 77471a5bc30..3ef4e25ff00 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixdoc/miscellaneous.tex @@ -463,6 +463,9 @@ which is coded as For all of the commands described in this section, the pitch parameter may be used if it is necessary to raise or lower the tremolo indication. +%however, note values +%must be alphabetic and not numeric, +%because transposition is used to adjust the vertical position of the mini-beams. \subsection{Piano pedal commands} The macro \keyindex{PED} inserts a piano pedal command below the staff; diff --git a/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex b/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex deleted file mode 100644 index 0016785fb64..00000000000 --- a/Master/texmf-dist/doc/generic/musixtex/musixdoc/musixtex.tex +++ /dev/null @@ -1,5125 +0,0 @@ -% -% This file is part of MusiXTeX -% -% MusiXTeX is free software; you can redistribute it and/or modify -% it under the terms of the GNU General Public License as published by -% the Free Software Foundation; either version 2, or (at your option) -% any later version. -% -% MusiXTeX is distributed in the hope that it will be useful, -% but WITHOUT ANY WARRANTY; without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -% GNU General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with MusiXTeX; see the file COPYING. If not, write to -% the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% -\ifx\undefined\startpiece \else \endinput \fi -\edef\catcodeat{\the\catcode`\@}\catcode`\@=11 - -\ifx\makeatletter\undefined\def\makeatletter{\catcode`\@=11\relax}\fi -\ifx\makeatother\undefined\def\makeatother{\catcode`\@=12\relax}\fi - -\def\mufl@x{0.83}% -\def\mxmajorvernumber{1} -\def\mxminorvernumber{19} -\def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum -\def\mxversuffix{}% -\edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} -\def\mxdate{2015-11-29} - -\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% -\everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% - -% version 1.19: - -% RDT corrected typos in the definition of \comput@fonts affecting ppff fonts for \Largemusicsize -% RDT introduced definitions for tremolo commands \trml, \trmu, etc. - -% version 1.18: - -% RDT added definitions of \raggedstoppiece and \slide from musixext.tex -% RDT increased the length of beam stems (adapted from J.-P. Coulon) - -% version 1.17: - -% RDT re-defined \txtfont for non-normal staff sizes -% RDT defined \tinyppff and \ppfftwelve, and re-defined \ppff to be staffsize dependent -% RDT introduced \tqqb \tqqh \tqqqb \tqqqh abbreviations -% and synonyms \tqql \tqqu \tqqql \tqqqu -% RDT introduced ornaments \tr, \trt -% RDT re-defined \triolet to be consistent with musixdoc (prints \txt, not nec. 3) -% RDT introduced \cpause etc. and corrected definitions of \centerpause etc. -% RDT introduced double-dotted rests \qppp, \dspp, \qspp, etc. - -% version 1.16: - -% RDT corrected the definitions of \nnotes and \nnnotes - -% HM corrected the definitions for cautionary small accidentals - -% RDT added \check@staff ... \fi to \@qa h, \@mca, \hs, \qqs -% so that \qa, \ca, \ha, etc. can be "hidden" using \setstaffs{n}{0} - -% RDT incorporated tuplet.tex (approved by George Sicherman) -% and introduced \txtfont to allow changing size or style - -% RDT introduced -% \qqsk, a one-quarter notehead skip -% \tqu and \tql, synonyms for \tqh and \tqb -% \ztqu and \ztql, synonyms for \ztqh and \ztqb -% \hpp, \qpp, \dsp, \qsp, \hsp, \qqsp for pointed rests -% \nnotes, \nnnotes: 1.6 and 1.28 \elemskip spacing -% \zcn, \ccn, \lcn, synomyms for \zcharnote etc. - -% RDT incorporated curly.tex (approved by Mthimkhulu Molekwa) - -% RDT modernized the treatment of text fonts -% meterfonts must be bf, even if titling fonts are rm or sc -% added dynamic-mark macros \sfz \sfzp - -% version 1.15: - -% moved out: -% - 1/128th beams -> musixbm -% - triple pointed notes -> musixtri - -% and shrinked the memory consumption - -%++ickd 19Sep1997: with help of William P. Houser introduced dotted slurs. -% Changes marked with +ickd for added single lines, -ickd for replaced -%++ickd single lines, ++ickd...++ickd for added blocks - -%++simick 04Dec2000: Don Simons and Werner Icking made some improvements -% to volta-processing and centerbar processing the changes are -% marked with +simick for added single lines, -simick for -%++simick replaced lines and ++simick...++simick for added blocks - -% Hiroaki, May2010, T.115: change register allocation codes into new ones -% which enables >12 elements. Search the string "version 1.15" for details. -% - -% TeXperts may want to change the next - -% PARAMETER DIFFERENT THAN PLAIN - -\showboxdepth=0 -\showboxbreadth=0 - -\ifx\undefined\documentstyle % -> []plain.tex - \parindent0pt - \hoffset-15.4mm - \voffset-10mm - \hsize190mm - \vsize260mm -\fi - -%%% from LaTeX -% The following definitions save token space. E.g., using \@height -% instead of height saves 5 tokens at the cost in time of one macro -% expansion. - -\def\@height{height} -\def\@depth{depth} -\def\@width{width} - -%%% also removed 'by', '=' - -\def\@to{to} -\def\p@ne{.1} -\def\qu@rt{.25} -\def\h@lf{.5} -\def\p@seven{.7} - -%%%from plain -% To make the macros more efficient in time and space, -% several constant values are declared here as control sequences -% If they were changed, anything could happen; so they are private symbols - -%\chardef\active=13 -%\chardef\&=`\& -> 38 -%\chardef\#=`\# -> 35 -%\chardef\$=`\$ -> 36 -% Nomenclature: '@' means most times 'e' or seperator, sometimes 'o','a' - -\chardef\f@ur=4 -\chardef\fiv@=5 -\chardef\si@=6 -\chardef\s@v@n=7 -\chardef\@ight=8 -\chardef\nin@=9 -\chardef\t@n=10 -\chardef\@l@v@n=11 -\chardef\tw@lv@=12 -\chardef\fourt@@n=14 -\chardef\fiv@t@@n=15 -\chardef\tw@nty=20 -\chardef\@xxiii=23 -\chardef\@xxv=25 -\chardef\@xxiv=24 -\chardef\@xxvi=26 -\chardef\@xxvii=27 -\chardef\@xxix=29 -\chardef\@xxxii=32 -\chardef\@xl=40 -\chardef\@xli=41 -\chardef\@xlv=45 -\chardef\@l=50 -\chardef\@lii=52 -\chardef\@liv=54 -\chardef\@lxxxiii=83 -\chardef\@c=100 -\chardef\@cxv=115 -\chardef\@cxxviii=128 - -\newif\ifcatcodesmusic - -\def\catcodesmusic{\ifcatcodesmusic\relax - \else - \edef\catcode@gt{\the\catcode`\>}\catcode`\>\tw@lv@ - \edef\catcode@lt{\the\catcode`\<}\catcode`\<\tw@lv@ - \edef\catcode@vert{\the\catcode`\|}\catcode`\|\active - \edef\catcode@and{\the\catcode`\&}\catcode`\&\active - \edef\catcode@excl{\the\catcode`\!}\catcode`\!\tw@lv@ - \edef\catcode@star{\the\catcode`\*}\catcode`\*\tw@lv@ - \edef\catcode@pt{\the\catcode`\.}\catcode`\.\tw@lv@ - \edef\catcode@sc{\the\catcode`\:}\catcode`\:\tw@lv@ - \let\@@bar\bar - \def\bar{\barre}% - \fi\catcodesmusictrue} - -\catcodesmusic - -% MusicTeX + MuFlex -> MusiXTeX -\def\musixtex{MusiX\TeX} - -\def\kernm{\kern-} - -%...\let\@wloG=\wlog -%...\def\wlog#1{} - -%%% account registers - -% \let\maxinstruments\si@ % [version 1.15] here disabled to avoid conflict - -% temporary registers - -\newcount\n@i -\newcount\n@ii -\newcount\n@iii -\newcount\n@iv -\newcount\n@v -\newcount\n@vi -\newcount\n@vii -\newcount\n@viii -%\newcount\count@ %=\count255 def'd in plain - -\newbox\toks@box -\newbox\w@rkbox -\newbox\n@otebox - -\newdimen\y@ -\newdimen\y@i -\newdimen\y@ii -\newdimen\y@iii -\newdimen\y@iv -\newdimen\y@v - -% [version 1.15] moved out to the new register allocation code -- start from here -- -% altitude -% \newskip\k@ii -% InterNote -% \newdimen\i@ni -\def\i@n{\z@} % safety in case of.... -% positions x et z de debut des poutres -% \newdimen\b@xi \newdimen\b@zi -% \newdimen\c@xi \newskip\c@zi -% \newdimen\d@xi \newskip\d@zi -% \newdimen\e@xi \newskip\e@zi -% \newdimen\f@xi \newskip\f@zi -% pentes des poutres ( entier de -9 a +9 ) -% multiplicite des poutres ( de -5 a +5 . 0= inactive ) -% \newcount\b@pi \newcount\b@ni -% Number of Portees -% \newcount\n@pi \n@pi\@ne -% Actual Signs Old Signs -% \newcount\a@si \newcount\o@si -% ActualCleftoks -% \newtoks\a@ci \a@ci={{\z@}{\z@}{\z@}{\z@}} -% OldCleftoks -% \newtoks\o@ci -% MeterToks -% \newtoks\m@ti -% Altitude of choir groups -% \newskip\g@bi -% Height of choir groups -% \newskip\g@hi - -% [version 1.15] moved out to the new register allocation code -- until here -- -% \let\maxgroups\thr@@ % maximum three groups of instruments or choirs [version 1.15] moved to later, using \setmaxgroups -\newcount\group@no - -%%% [version 1.15] new register allocation code -- start from here -- -% -% register allocation for use inside \loop...\if...\repeat -% (only for plain, but no harm even in case of LaTeX) -\edef\noexpand@newcount{\noexpand\newcount}% -\edef\noexpand@newdimen{\noexpand\newdimen}% -\edef\noexpand@newskip{\noexpand\newskip}% -%\edef\noexpand@newmuskip{\noexpand\newmuskip}% not used -%\edef\noexpand@newbox{\noexpand\newbox}% not used -\edef\noexpand@newtoks{\noexpand\newtoks}% -%\edef\noexpand@newmarks{\noexpand\newmarks}% not used -% -% a shortcut for register allocation routines -\def\roman@c@{\romannumeral\count@}% -% -% some registers (i@n, b@x, b@z, c@x, d@x, e@x, s@x, s@Y) -% should be allocated by \newdimen (for id 0...5) and \newskip (for id 6...11) -% because T.114 and earlier did so and for the compatibility to Stanislav -% Kneifl's musixps.tex 0.92a. -% And again \newdimen (for id>11), because both \dimen and \skip are -% applicable but \dimen uses less memory in case of >255 on e-TeX. -\def\noexpand@newdimsk{% - \ifnum\count@<7 \let\@@newdimsk=\noexpand@newdimen - \else\ifnum\count@<13 \let\@@newdimsk=\noexpand@newskip - \else\let\@@newdimsk=\noexpand@newdimen - \fi\fi \@@newdimsk}% -% -% and some other registers (c@z, d@z, e@z, f@z, g@z) -% should be allocated by \newskip (for id 0...11) and \newdimen (for id>11) -% for the same reason of above. -\def\noexpand@newskdim{% - \ifnum\count@<13 \let\@@newskdim=\noexpand@newskip - \else \let\@@newskdim=\noexpand@newdimen - \fi \@@newskdim}% -% -% registers for instrument -\newdimen\interinstrument % moved from "distance between instruments" to here -\def\setmaxinstruments#1{% - \ifnum#1>\@oldmaxinstruments - \chardef\maxinstruments=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxinstruments=\@c - \fi - \count@\@oldmaxinstruments\loop - \advance\count@ by\@ne - % - \expandafter \let \csname interinstrument\roman@c@\endcsname \interinstrument - % - % altitude - \expandafter \noexpand@newskip \csname k@i\roman@c@\endcsname - % - % InterNote - \expandafter \noexpand@newdimsk \csname i@n\roman@c@\endcsname - % - % beam horizontal positions: x=start, z=end, 8th-64th beams - \expandafter \noexpand@newdimsk \csname b@x\roman@c@\endcsname - \expandafter \noexpand@newdimsk \csname b@z\roman@c@\endcsname - \expandafter \noexpand@newdimsk \csname c@x\roman@c@\endcsname - \expandafter \noexpand@newskdim \csname c@z\roman@c@\endcsname - \expandafter \noexpand@newdimsk \csname d@x\roman@c@\endcsname - \expandafter \noexpand@newskdim \csname d@z\roman@c@\endcsname - \expandafter \noexpand@newdimsk \csname e@x\roman@c@\endcsname - \expandafter \noexpand@newskdim \csname e@z\roman@c@\endcsname - % - % pentes des poutres ( entier de -9 a +9 ) (slopes of the beams) - % multiplicite des poutres ( de -5 a +5 . 0= inactive ) (multiplicity of the beams) - \expandafter \noexpand@newcount \csname b@p\roman@c@\endcsname - \expandafter \noexpand@newcount \csname b@n\roman@c@\endcsname - % - % Number of Portees - \expandafter \noexpand@newcount \csname n@p\roman@c@\endcsname - \csname n@p\roman@c@\endcsname\@ne - % - % Actual Signs - \expandafter \noexpand@newcount \csname a@s\roman@c@\endcsname - % - % Old Signs - \expandafter \noexpand@newcount \csname o@s\roman@c@\endcsname - % - % ActualCleftoks - \expandafter \noexpand@newtoks \csname a@c\roman@c@\endcsname - \csname a@c\roman@c@\endcsname={{\z@}{\z@}{\z@}{\z@}}% - % - % OldCleftoks - \expandafter \noexpand@newtoks \csname o@c\roman@c@\endcsname - % - % MeterToks - \expandafter \noexpand@newtoks \csname m@t\roman@c@\endcsname - % - % staffsize - \expandafter \let \csname staffspacing\roman@c@\endcsname \@ne - % - % text, lyrics, free positioning of chars - \expandafter \let \csname T@R\roman@c@\endcsname \z@ - % - % preset clef symbols - \expandafter \let \csname treblec@s\roman@c@\endcsname \z@ - \expandafter \let \csname altoc@s\roman@c@\endcsname \z@ - \expandafter \let \csname bassc@s\roman@c@\endcsname \z@ - % - % preset default staff lines as 5 - \expandafter \let \csname n@l\roman@c@\endcsname \fiv@ - % - \ifnum\count@<\maxinstruments\repeat - \expandafter\message\expandafter{maxinstruments=\the\maxinstruments}% - \chardef\@oldmaxinstruments=\maxinstruments\relax% - \normalnotesize\resetlayout - \fi -}% -% -% registers for 128th beam -\def\setmaxcxxviiibeams#1{% - \ifnum#1>\maxinstruments - \errmessage{The number of 128th beam must not exceed maxinstruments}% - \else - \ifnum#1>\@oldmaxcxxviiibeams - \chardef\maxcxxviiibeams=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxcxxviiibeams=\@c - \fi - \count@\@oldmaxcxxviiibeams \loop - \advance\count@ by\@ne - \expandafter \noexpand@newdimen \csname f@x\roman@c@\endcsname - \expandafter \noexpand@newskdim \csname f@z\roman@c@\endcsname - \ifnum\count@<\maxcxxviiibeams\repeat - \expandafter\message\expandafter{max128beams=\the\maxcxxviiibeams}% - \chardef\@oldmaxcxxviiibeams=\maxcxxviiibeams\relax% - \fi - \fi -}% -% -% registers for 256th beam -\def\setmaxcclvibeams#1{% - \ifnum#1>\maxcxxviiibeams - \errmessage{The number of 256th beam must not exceed the number of 128th beam}% - \else - \ifnum#1>\@oldmaxcclvibeams - \chardef\maxcclvibeams=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxcclvibeams=\@c - \fi - \count@\@oldmaxcclvibeams \loop - \advance\count@ by\@ne - \expandafter \noexpand@newdimen \csname g@x\roman@c@\endcsname - \expandafter \noexpand@newskdim \csname g@z\roman@c@\endcsname - \ifnum\count@<\maxcclvibeams\repeat - \expandafter\message\expandafter{max256beams=\the\maxcclvibeams}% - \chardef\@oldmaxcclvibeams=\maxcclvibeams\relax% - \fi - \fi -}% -% -% registers for choir group -\def\setmaxgroups#1{% - \ifnum#1>\@oldmaxgroups - \chardef\maxgroups=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxgroups=\@c - \fi - \count@\@oldmaxgroups \loop - \advance\count@ by\@ne - % Altitude - \expandafter \noexpand@newskip \csname g@b\roman@c@\endcsname - % Height - \expandafter \noexpand@newskip \csname g@h\roman@c@\endcsname - % - \expandafter \let \csname lowersonginstrum\roman@c@\endcsname \maxdimen - \expandafter \let \csname uppersonginstrum\roman@c@\endcsname \z@ - \ifnum\count@<\maxgroups\repeat - \expandafter\message\expandafter{maxgroups=\the\maxgroups}% - \chardef\@oldmaxgroups=\maxgroups\relax% - \fi -}% -% -% registers for slur -\def\setmaxslurs#1{% - \ifnum#1>\@oldmaxslurs - \chardef\maxslurs=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxslurs=\@c - \fi - \count@\@oldmaxslurs \loop - \advance\count@ by\@ne - % - % horizontal start position of slur - \expandafter \noexpand@newdimsk \csname s@x\roman@c@\endcsname - % - % sense u,d and x (flag) for pending slurs - \expandafter \noexpand@newtoks \csname s@s\roman@c@\endcsname - \csname s@s\roman@c@\endcsname={x}% - % - % vertical offset of slur - \expandafter \noexpand@newdimsk \csname s@Y\roman@c@\endcsname - % - % altportee of slur - \expandafter \noexpand@newskip \csname s@a\roman@c@\endcsname - % - % vertical start position of slur [steps of internote] - \expandafter \noexpand@newcount \csname s@y\roman@c@\endcsname - % - % instrument number of that slur (to retrieve internote) - \expandafter \noexpand@newcount \csname s@N\roman@c@\endcsname - % - % vertical end position of slur [steps of internote], used from - % \breakslur. the value \maxdimen is used to decide, if - % \breakslur is used or not (flag) - \expandafter \noexpand@newcount \csname s@z\roman@c@\endcsname - \csname s@z\roman@c@\endcsname\maxdimen - % - %++ickd: dotted indicator for pending slurs - \expandafter \noexpand@newtoks \csname s@d\roman@c@\endcsname - % - \ifnum\count@<\maxslurs\repeat - \expandafter\message\expandafter{maxslurs=\the\maxslurs}% - \chardef\@oldmaxslurs=\maxslurs\relax% - \fi -}% -% -% registers for trill (MusiXTeX-type trill only. Legacy \trillC and -% \TrillC are out of the scope.) -\def\setmaxtrills#1{% - \ifnum#1>\@oldmaxtrills - \chardef\maxtrills=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxtrills=\@c - \fi - \count@\@oldmaxtrills \loop - \advance\count@ by\@ne - % starting horizontal pos - \expandafter \noexpand@newskip \csname tr@x\roman@c@\endcsname - \csname tr@x\roman@c@\endcsname\maxdimen\relax - % heading of trill - \expandafter \noexpand@newtoks \csname tr@sw\roman@c@\endcsname - % height of trill - \expandafter \noexpand@newskip \csname tr@y\roman@c@\endcsname - \ifnum\count@<\maxtrills\repeat - \expandafter\message\expandafter{maxtrills=\the\maxtrills}% - \chardef\@oldmaxtrills=\maxtrills\relax% - \fi -}% -% -% registers for octave line -\def\setmaxoctlines#1{% - \ifnum#1>\@oldmaxoctlines - \chardef\maxoctlines=#1\relax - \ifnum#1>\@c - \errmessage{The maximum reference number of elements is limited to \the\@c} - \chardef\maxoctlines=\@c - \fi - \count@\@oldmaxoctlines \loop - \advance\count@ by\@ne - % starting horizontal pos - \expandafter \noexpand@newskip \csname o@x\roman@c@\endcsname - \csname o@x\roman@c@\endcsname\maxdimen\relax - % height of octline - \expandafter \noexpand@newskip \csname o@y\roman@c@\endcsname - % sense of octline - \expandafter \noexpand@newtoks \csname o@sw\roman@c@\endcsname - \ifnum\count@<\maxoctlines\repeat - \expandafter\message\expandafter{maxoctlines=\the\maxoctlines}% - \chardef\@oldmaxoctlines=\maxoctlines\relax% - \fi -}% -% -\chardef\@oldmaxinstruments=\z@ -\chardef\@oldmaxcxxviiibeams=\z@ -\chardef\@oldmaxcclvibeams=\z@ -\chardef\@oldmaxgroups=\z@ -\chardef\@oldmaxslurs=\z@ -\chardef\@oldmaxtrills=\z@ -\chardef\@oldmaxoctlines=\z@ -% -% actual setup (=register allocation) of the maximum element numbers -% should be done after fonts definition. -% -%%% [version 1.15] new register allocation code -- until here -- - - -%%% fonts - -\newif\iflongDCfontnames -\newif\iflongECfontnames -\longDCfontnamesfalse % obsolete -\longECfontnamesfalse % to use EC fonts, \input musixec -\def\fontid{cm} % deprecated but used in pmx.tex - -%% -% Seven point fonts: roman, bold, and italic. -%% - -%\ifx\undefined\sevenrm % version 1.17 RDT unconditional font definitions - \font\sevenrm=cmr7 - \font\sevenbf=cmbx7 - \font\sevenit=cmti7 -%\fi - -%% -% Eight point fonts: roman, bold, and italic; tt and sl needed for musixsty -%% - -%\ifx\undefined\eightrm - \font\eightrm=cmr8 - \font\eightbf=cmbx8 - \font\eightit=cmti8 - \font\eighttt=cmtt8 - \font\eightsl=cmsl8 -%\fi - -%% -% Nine point fonts -%% - -%\ifx\undefined\ninerm - \font\ninerm=cmr9 - \font\ninebf=cmbx9 - \font\nineit=cmti9 - \font\ninett=cmtt9 - \font\ninesl=cmsl9 -%\fi - -%% -% Ten point fonts -%% - -%\ifx\undefined\tenrm - \font\tenrm=cmr10 - \font\tenbf=cmbx10 - \font\tenit=cmti10 - \font\tentt=cmtt10 - \font\tensl=cmsl10 -%\fi - - -%% -% Eleven point fonts -%% -%\ifx\undefined\elevenrm - \font\elevenrm=cmr9 scaled \magstephalf - \font\elevenbf=cmbx9 scaled \magstephalf - \font\elevenit=cmti9 scaled \magstephalf - \font\eleventt=cmtt9 scaled \magstephalf - \font\elevensl=cmsl9 scaled \magstephalf -%\fi - -%% -% Twelve point fonts -%% -%\ifx\undefined\twelverm - \font\twelverm=cmr12 - \font\twelvebf=cmbx12 - \font\twelveit=cmti12 - \font\twelvett=cmtt12 - \font\twelvesl=cmsl12 -%\fi - -% 14pt: roman, bold, italic and small caps; tt and sl needed for musixsty -%\ifx\undefined\frtrm - \font\frtrm=cmr12 scaled \magstep1 - \font\frtbf=cmbx12 scaled \magstep1 - \font\frtit=cmti12 scaled \magstep1 - \font\frtsc=cmcsc10 scaled \magstep2 - \font\frttt=cmtt12 scaled \magstep1 - \font\frtsl=cmsl12 scaled \magstep1 -%\fi -% -% 17pt -%\ifx\undefined\svtrm - \font\svtrm=cmr12 scaled \magstep2 - \font\svtbf=cmbx12 scaled \magstep2 - \font\svtit=cmti12 scaled \magstep2 - \font\svtsc=cmcsc10 scaled \magstep3 - \font\svttt=cmtt12 scaled \magstep2 -%\fi -% -% 20pt -%\ifx\undefined\twtyrm - \font\twtyrm=cmr12 scaled \magstep3 - \font\twtybf=cmbx12 scaled \magstep3 - \font\twtyit=cmti12 scaled \magstep3 - \font\twtysc=cmcsc10 scaled \magstep4 - \font\twtytt=cmtt12 scaled \magstep3 - \font\twtysl=cmsl12 scaled \magstep3 -%\fi -% -% 25pt -%\ifx\undefined\twfvrm - \font\twfvrm=cmr12 scaled \magstep4 - \font\twfvbf=cmbx12 scaled \magstep4 - \font\twfvit=cmti12 scaled \magstep4 - \font\twfvsc=cmcsc10 scaled \magstep5 - \font\twfvtt=cmtt12 scaled \magstep4 - \font\twfvsl=cmsl12 scaled \magstep4 -%\fi -% -% Large fonts for titles -% (If you prefer Roman, use ..rm instead of ..bf) -% (If you prefer small-caps, use ..sc instead of ..bf) -\let\bigfont=\frtbf -\let\Bigfont=\svtbf -\let\BIgfont=\twtybf -\let\BIGfont=\twfvbf -% -%% -%% -% Define six font families. -%% - -\def\smalltype{% - \let\rm\eightrm - \let\bf\eightbf - \let\it\eightit - \rm} -\def\Smalltype{% - \let\rm\ninerm - \let\bf\ninebf - \let\it\nineit - \rm} -\def\normtype{% - \let\rm\tenrm - \let\bf\tenbf - \let\it\tenit - \rm} -\def\medtype{% - \let\rm\twelverm - \let\bf\twelvebf - \let\it\twelveit - \rm} -\def\bigtype{% - \let\rm\bigfont - \let\bf\bigfont - \let\it\bigfont - \bf} -\def\Bigtype{% - \let\rm\Bigfont - \let\bf\Bigfont - \let\it\Bigfont - \bf} -\def\BIgtype{% - \let\rm\BIgfont - \let\bf\BIgfont - \let\it\BIgfont - \bf} -\def\BIGtype{% - \let\rm\BIGfont - \let\bf\BIGfont - \let\it\BIGfont - \bf} -% -%% -% Bold italic fonts for dynamic markings. -%% - -\font\ppfftwelve=cmbxti10 at 8pt % version 1.17 RDT -\font\ppffsixteen=cmbxti10 -\font\ppfftwenty=cmbxti10 scaled \magstep1 -\font\ppfftwentyfour=cmbxti10 scaled \magstep2 -\font\ppfftwentynine=cmbxti10 scaled \magstep3 - -\def\ppff{\ifdim\internote<\p@seven6\Internote\tinyppff% version 1.17 RDT -\else\ifdim\internote<.95\Internote\smallppff% -\else\ifdim\internote<1.19\Internote\normppff% -\else\medppff\fi\fi\fi}% - -\def\tinydyn{\let\ppff\tinyppff} % version 1.17 RDT -\def\smalldyn{\let\ppff\smallppff} -\def\normdyn{\let\ppff\normppff} -\def\meddyn{\let\ppff\medppff} - - -\font\musiceleven=musix11 -\font\musicthirteen=musix13 -\font\musicsixteen=musix16 -\font\musictwenty=musix20 -\font\musictwentyfour=musix24 -\font\musictwentynine=musix29 - -% piano brackets, slides, guitar chords, lines, (de)crescendi, circles - -\font\mxsps=musixspx - - -%%% -% -% Slur macro package for MusicTeX -% -% Ross Mitchell, February 20 1993 -% -%%% -%% -% Load the font set -% -% Nomenclature: slur[p][size] -% [p] : sign of slur gradient; u=positive, d=negative, z=zero -%% - -\font\slurz=xslz20 -\font\slurzd=xslz20d %+ickd - -\font\slurueleven=xslu11 % slur up eleven points -\font\sluruthirteen=xslu13 -\font\slurusixteen=xslu16 -\font\slurutwenty=xslu20 -\font\slurutwentyfour=xslu24 -\font\slurutwentynine=xslu29 - -\font\slurdeleven=xsld11 % slur down eleven points -\font\slurdthirteen=xsld13 -\font\slurdsixteen=xsld16 -\font\slurdtwenty=xsld20 -\font\slurdtwentyfour=xsld24 -\font\slurdtwentynine=xsld29 - -%++ickd same for dotted slurs -\font\sluruelevend=xslu11d % slur up eleven points -\font\sluruthirteend=xslu13d -\font\slurusixteend=xslu16d -\font\slurutwentyd=xslu20d -\font\slurutwentyfourd=xslu24d -\font\slurutwentynined=xslu29d - -\font\slurdelevend=xsld11d % slur down eleven points -\font\slurdthirteend=xsld13d -\font\slurdsixteend=xsld16d -\font\slurdtwentyd=xsld20d -\font\slurdtwentyfourd=xsld24d -\font\slurdtwentynined=xsld29d -%++ickd - -%!these fonts can't be used with highres printers (>~800dpi) -% for these printers comes a interface to PS using DVIPS (PS-Tricks) -% and \special{}-commands next time (patience is a virtue ...) - -\font\xtie=xslhz20 -\font\xtied=xslhz20d %+ickd - -\font\hslurdeleven=xslhd11 % slur half down eleven points -\font\hslurdthirteen=xslhd13 -\font\hslurdsixteen=xslhd16 % slur half down sixteen points -\font\hslurdtwenty=xslhd20 -\font\hslurdtwentyfour=xslhd24 -\font\hslurdtwentynine=xslhd29 - -\font\hslurueleven=xslhu11 -\font\hsluruthirteen=xslhu13 -\font\hslurusixteen=xslhu16 -\font\hslurutwenty=xslhu20 -\font\hslurutwentyfour=xslhu24 -\font\hslurutwentynine=xslhu29 - -%++ickd same for dotted slurs -\font\hslurdelevend=xslhd11d % slur half down eleven points -\font\hslurdthirteend=xslhd13d -\font\hslurdsixteend=xslhd16d % slur half down sixteen points -\font\hslurdtwentyd=xslhd20d -\font\hslurdtwentyfourd=xslhd24d -\font\hslurdtwentynined=xslhd29d - -\font\hsluruelevend=xslhu11d -\font\hsluruthirteend=xslhu13d -\font\hslurusixteend=xslhu16d -\font\hslurutwentyd=xslhu20d -\font\hslurutwentyfourd=xslhu24d -\font\hslurutwentynined=xslhu29d -%++ickd - -% number of pending slurs - -\newcount\N@s - -% [version 1.15] moved out to the new register allocation code (except for \s@Y) -% horizontal start position of slur -% \newdimen\s@xi -% sense u,d and x (flag) for pending slurs -% \newtoks\s@si \s@si={x} -% vertical offset of slur -\newdimen\s@Y % this register is for common use -% \newdimen\s@Yi -% altportee of slur -% \newskip\s@ai -% vertical start position of slur [steps of internote] -% \newcount\s@yi -% instrument number of that slur (to retrieve internote) -% \newcount\s@Ni -% vertical end position of slur [steps of internote], used from \breakslur -% the value \maxdimen is used to decide, if \breakslur is used or not (flag) -% \newcount\s@zi \s@zi\maxdimen -%++ickd: dotted indicator for pending slurs -% \newtoks\s@di % moved out to the new register allocation code -%++ickd - -\def\roman@n@i{\romannumeral\n@i\endcsname} - -% -% [version 1.15] make slurs independent from \maxinstruments -\def\test@slurnum{% - \ifnum\n@i<\z@ \n@i\@c \fi - \ifnum\n@i<\maxslurs \else - \count@\maxslurs \advance\count@\m@ne - \errmessage{Wrong slur reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] - \n@i\z@% [version 1.15] - \fi - \advance\n@i\@ne}% -% -\def\s@l@ctslur#1\relax{% - \n@i#1\relax\test@slurnum% [version 1.15] make it independent from beams - \edef\s@a{\csname s@a\roman@n@i}% dimen (altportee) - \edef\s@x{\csname s@x\roman@n@i}% dimen (hor start pos) - \edef\s@y{\csname s@y\roman@n@i}% count (startnote [internote]) - \edef\s@N{\csname s@N\roman@n@i}% count (instrument number) - \edef\s@z{\csname s@z\roman@n@i}% count (endnote [internote]) - \edef\s@Y{\csname s@Y\roman@n@i}% dimen (voffset) - \edef\s@d{\csname s@d\roman@n@i}% token (dotted) +ickd - \edef\s@s{\csname s@s\roman@n@i}}% token (sense) - -% get current position (returns the dimen in \y@v) -% (\lin@pos starts behind signatures!) - -\newdimen\lin@pos -\def\getcurpos{\y@v\lin@pos \advance\y@v\locx@skip} - -% \n@i vertical offset of first note (number); temporary -% \n@ii vertical offset of second note (number); temporary -% \n@iii meet note -% \n@iv first note -% \n@v temp. character -% \n@vi last note -% \n@vii right halfslur length -% \n@viii don't touch -% \y@ complete length of slur - allowed overlap (4pt), temp. length -% \y@i abs. height of slur -% \y@ii complete length of slur -% \y@iii old maxslurwidth -% \y@iv don't touch -% \y@v don't touch - -% \@sense{u,d} -% -% if \curve (\midslur) is used -% \@meet{} -% \l@length{} -% \r@length{} - -% #1 start pitch #2 end pitch #3 length #4 right hoffset - -\newcount \meet@minus@n@iv -\def\writ@slur#1#2#3#4{\check@staff % modified: sld... into slurd... 12.04.95 ick - \let\slz\slurz% inserted - \let\slzd\slurzd% inserted for dotted slurs +ickd - \ifx\s@N\undefined \relax % \let\internote\Internote - \else - \edef\internote{\csname i@n\romannumeral\s@N\endcsname}% - \fi -% \immediate\write16{\noexpand\writ@slur internote:\the\internote}% - \n@iv#1% - \n@vi#2% -%% -% Get note vertical offsets -% \n@iv= vertical offset of first note(n@i temp); -% \n@vi= vertical offset of second note(n@ii temp); -% \y@i = reference height of first note (pt); -% -% Define adequate fonts for this slur, according to the value of \internote -% - \ifdim\internote>3.5pt - \let\sld\slurdtwentynine \let\slu\slurutwentynine - \let\hslurd\hslurdtwentynine \let\hsluru\hslurutwentynine - \let\sldd\slurdtwentynined \let\slud\slurutwentynined % +ickd - \let\hslurdd\hslurdtwentynined \let\hslurud\hslurutwentynined %+ickd - \def\@stepwidth{3.6pt}% - \else \ifdim\internote>2.9pt - \let\sld\slurdtwentyfour \let\slu\slurutwentyfour - \let\hslurd\hslurdtwentyfour \let\hsluru\hslurutwentyfour - \let\sldd\slurdtwentyfourd \let\slud\slurutwentyfourd % +ickd - \let\hslurdd\hslurdtwentyfourd \let\hslurud\hslurutwentyfourd %+ickd - \def\@stepwidth{3.0pt}% - \else \ifdim\internote>2.3pt - \let\sld\slurdtwenty \let\slu\slurutwenty - \let\hslurd\hslurdtwenty \let\hsluru\hslurutwenty - \let\sldd\slurdtwentyd \let\slud\slurutwentyd % +ickd - \let\hslurdd\hslurdtwentyd \let\hslurud\hslurutwentyd %+ickd - \def\@stepwidth{2.5pt}% - \else \ifdim\internote>1.8pt - \let\sld\slurdsixteen \let\slu\slurusixteen - \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen - \let\sldd\slurdsixteend \let\slud\slurusixteend % +ickd - \let\hslurdd\hslurdsixteend \let\hslurud\hslurusixteend %+ickd - \def\@stepwidth{2pt}% - \else \ifdim\internote>1.4pt - \let\sld\slurdthirteen \let\slu\sluruthirteen - \let\hslurd\hslurdthirteen \let\hsluru\hsluruthirteen - \let\sldd\slurdthirteend \let\slud\sluruthirteend % +ickd - \let\hslurdd\hslurdthirteend \let\hslurud\hsluruthirteend %+ickd - \def\@stepwidth{1.6pt}% - \else - \let\sld\slurdeleven \let\slu\slurueleven - \let\hslurd\hslurdeleven \let\hsluru\hslurueleven - \let\sldd\slurdelevend \let\slud\sluruelevend % +ickd - \let\hslurdd\hslurdelevend \let\hslurud\hsluruelevend %+ickd - \def\@stepwidth{1.28pt}% - \fi\fi\fi\fi\fi -% -% End choice of font -% - \n@i\n@iv \pl@base % \y@i = initial height - \n@ii\n@vi -% -% Select appropriate font -% Set \n@i to the vertical difference index -% setup \n@iii(meetnote) -% - \ifnum\n@ii=\n@i % Slope is zero - \n@iii\n@i - \if u\@sense \advance\n@iii\thr@@ \else \advance\n@iii-\thr@@ \fi - \def\@slope{z}\n@i\z@ - \else - \ifnum\n@ii<\n@i % Slope is negative - \C@csl\n@i\n@ii\def\@slope{d}% % compute @meet height for slurs - \else % Slope is positive - \C@csl\n@ii\n@i\def\@slope{u}\n@i\n@ii % compute @meet height for slurs - \fi - \fi -%% -% Select the required font and load the width parameters -% -% Font specific parameters -% \y@iii is the horizontal width of the longest slur in the fonts -% This parameter is loaded from the tfm \fontdimen parameter 5 -% respectively -%% - \y@iii\fontdimen\fiv@\csname sl\@slope\endcsname - \y@ii#3% -% -% \n@i contains slope (difference between start and end note) -% -% force longslurs if (!!! no check, be careful !!!) -% long slurs are at least 20[16] pt long) !!! Perhaps will change again !!! -% - difference between first note and last note > 8 -% - if \curve or \midslur is def'd -% - if \invertslur is used -% - \ifnum\n@i>\@ight \y@iii\z@ \fi % RMslurs limit 8 steps - \ifx\@meet\empty \else\y@iii\z@ \fi - \ifx\@invert\@ne \y@iii\z@ \fi - \ifdim\y@ii>\y@iii % start of longslurs -% -% setup meet height of slur -% - \ifx\empty\@meet -% \immediate\write16{\noexpand\@meet was empty.}% - \else - \n@iii\n@iv - \advance\n@iii\@meet - \fi - \edef\@meet{\the\n@iii}% -% \immediate\write16{\noexpand\@meet = \@meet.}% -% -% allow a little bit overlap (2*2pt) for nicer outlook (as longer as nicer) -% clip to extremities -% compute the max length in fontunits (\count@) -% - \y@\y@ii \advance\y@\f@ur\p@ \n@v\y@ - \sp@pt\t@n % 10pt steps - \advance\n@v-\f@ur % first brace is 20pt wide (perhaps 10pt is better ??) - \min@n@v\z@ - \max@n@v\fourt@@n % largest braces are 2*((90pt-20pt)/10pt) - \count@\n@v % max length -% -% compute the length of the starting and ending halfslurs -% in case, that curve is not def'd -% - \ifx\empty\l@length - \divide\n@v\tw@ % 2 halfslurs - \n@vii\n@v - \n@ii\n@v - \def@lr -% -% first try to reach nicer long slurs without using \curve -% - \if z\@slope % leave ties untouched - \else - \ifnum\count@>\z@ % only for long slurs - \multiply\n@v\tw@ - \if\@slope\@sense % uu,dd advance l@length ud,du advance r@length - \s@adjust\n@vii\n@ii - \else - \s@adjust\n@ii\n@vii - \fi - \def@lr - \fi - \fi -% -% adjust \curve parameters, if neccesary -% - \else - \n@vii\l@length - \n@ii\r@length - \loop - \count@\n@vii - \advance\count@\n@ii - \ifnum\count@>\n@v - \advance\n@vii\m@ne \ifnum\n@vii<\z@ \n@vii\z@ \fi - \advance\n@ii\m@ne \ifnum\n@ii<\z@ \n@ii\z@ \fi - \repeat - \def@lr - \fi -% -% clip to extremity heights (max slur height= 16\internote) -% - \C@csm\n@iv - \C@csm\n@vi -% -% change sense and offset behind linebreak and reset flag -% - \ifx\@invert\@ne \ifdim\s@x=\z@ - \@invsl \let\@invert\empty \s@Y-\s@Y - \fi \fi -% -% compute final height and put the box -% -% \immediate\write16{ before @meet:\noexpand\y@i=\the\y@i}% -% \message{ was \noexpand\n@iv\the\n@iv}% -% \message{ was \noexpand\n@vi\the\n@vi}% -% - \meet@minus@n@iv=\@meet - \advance\meet@minus@n@iv-\n@iv -% \immediate\write16{\noexpand\meet@minus@n@iv=\the\meet@minus@n@iv}% -% \y@i\@meet\internote % \y@i final height -% change from DT for staffspacing not standard - \y@i \@stepwidth % part proportional to slur font size - \multiply \y@i \meet@minus@n@iv - \advance\y@i \n@iv\internote % was done by \pl@base... -% - \C@sof % add the voffsets - \llap{\raise\y@i\hbox\@to\y@ii{% -% -% compute the beginning and ending halfslur chars -% n@i firstslur -% n@ii lastslur -% n@v character -% - \C@cc\n@iv\n@i\n@ii - \C@cc\n@vi -% - \n@v\l@length - \multiply\n@v\sixt@@n % 16 different heigths - \advance\n@v\n@i % offset to length - \advance\n@v\@cxxviii % offset to starthalfslur - \@boX \box\ch@box\hss% put starthalfslur - \n@v\r@length - \multiply\n@v\sixt@@n - \advance\n@v\n@ii -% -% put ending halfslur in box -% - \ifx\@invert\@ne \@invsl \fi - \@boX -% -% put the middle extension (could be replaced by []rule) -% - \ifdim\y@ii>\p@ne\p@ - \n@v\y@ii - \sp@pt\f@ur % 4pt steps - \ifx\@invert\@ne - \divide\n@v\tw@ - \if u\@sense \advance\n@v\@cxxviii \fi - \mid@box\hss\hss% don't ask me why - \if u\@sense \advance\n@v-\@cxxviii \else \advance\n@v\@cxxviii \fi - \mid@box% - \else - \if d\@sense \advance\n@v\@cxxviii \fi - \mid@box \fi \fi -% -% place the end of slur and kern right horizontal offset -% - \hss\box\ch@box}\kern#4}% -% -% reset slurcurve -% - \global\let\@meet\empty - \let\l@length\empty - \let\@invert\empty -% -%>>>>>> start of RM slurs -% Set \n@v to the width index in the slur font table -% - \else - \ifdim\y@ii<\@ight\p@ \y@ii\@ight\p@ \fi % Clip to extremities - \y@\y@ii - \advance\y@-\si@\p@ - \n@v\y@ - \sp@pt\f@ur -% -% Find decimal character count into font table -% (a) Zero height slurs: charnum= width index -% (b) Others: charnum= 16*(height index - 1) + width index -% Place the character count in \n@v -% - \if z\@slope - \if d\@sense \advance\n@v\@liv \fi % \@liv(=54) offset to slurchars - \else - \advance\n@i\m@ne % height index - 1 - \multiply\n@i\sixt@@n % 16*(height index - 1) - \advance\n@v\n@i % 16*(height index - 1) + width index - \if d\@sense \advance\n@v\@cxxviii \fi - \fi -% -% Place the slur character -% - \C@sof - \ifnum\n@v>255 % to avoid diags in case of... - \n@v=255\relax - \fi - \ifnum\n@v<0 % to avoid diags in case of... - \n@v=0\relax - \fi -% - \llap{\raise\y@i\hbox\@to\y@ii{% -%-ickd \hss\csname sl\@slope\endcsname\char\n@v\hss}\kern#4}% - \hss\csname sl\@slope\@dotted\endcsname\char\n@v\hss}\kern#4}% - \fi -\fi} % end writ@slur - - -\def\sp@pt#1{\divide\n@v65536\divide\n@v#1} -\def\max@n@v#1{\ifnum\n@v>#1\n@v#1\fi} -\def\min@n@v#1{\ifnum\n@v<#1\n@v#1\fi} - -%-ickd \def\mid@box{\hbox{\xtie\char\n@v}} -\def\mid@box{% - \ifnum\n@v>255 % to avoid diags in case of... - \n@v=255\relax - \fi - \ifnum\n@v<0 % to avoid diags in case of... - \n@v=0\relax - \fi -% - \hbox{\csname xtie\@dotted\endcsname\char\n@v}} -%-ickd \def\@boX{\setbox\ch@box\hbox{\csname hslur\@sense\endcsname\char\n@v}% -\def\@boX{% - \ifnum\n@v>255 % to avoid diags in case of... - \n@v=255\relax - \fi - \ifnum\n@v<0 % to avoid diags in case of... - \n@v=0\relax - \fi -% - \setbox\ch@box\hbox{\csname hslur\@sense\@dotted\endcsname\char\n@v}% - \advance\y@ii-\wd\ch@box} - -\def\def@lr{\edef\l@length{\the\n@vii}\edef\r@length{\the\n@ii}} - -\def\s@adjust#1#2{% - \ifnum\n@v<\count@ \advance#1\@ne \fi - \ifnum\n@v>\z@ \advance#1\@ne \advance#2\m@ne - \ifnum#1>\s@v@n #1\s@v@n \fi \fi} - -\def\C@csl#1#2{% compute meet height for slurs - \if u\@sense \n@iii#1\advance\n@iii\tw@ - \else \n@iii#2\advance\n@iii-\tw@ \fi - \ifx\@invert\@ne - \n@iii#1\advance\n@iii-#2\divide\n@iii\tw@ \advance\n@iii#2\fi - \advance#1-#2} - -\def\C@cc#1{% slur = abs(meet-note) - 1 - \n@ii\@meet - \advance\n@ii-#1% - \ifnum\n@ii<\z@ \n@ii-\n@ii \fi - \advance\n@ii\m@ne - } -% \ifnum\n@ii<\z@\immediate\write16{Warning: \noexpand\C@cc->\noexpand\n@ii=\the\n@ii}\fi -% \n@ii\z@} % modeif DT 20-12-97 - -\def\C@csm#1{% clip to extremity heights (max slur height= 16\internote) - \n@i\n@iii - \advance\n@i-#1% - \ifnum\n@i>\sixt@@n - \ifnum\n@iii>#1% - #1\n@iii \advance#1-\sixt@@n - \else - #1\n@iii \advance#1\sixt@@n - \fi - \fi} - -\def\C@sof{\advance\y@i\s@Y % abs. voffset - \ifx\@Ti\@ne \advance\y@i\s@a \let\@Ti\empty \fi}% call from cutslur - -% manual influation on the curve for long slurs -% must be coded in front of \tslur -% #1 final height [number, steps of internote, relativ to beginning! note] -% #2 (length)slope left #3 (length)slope right - -\def\curve#1#2#3{\getcurpos % ignore \curve behind a linebreak - \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\edef\l@length{#2}\edef\r@length{#3}\relax - \else -% \message{\noexpand\curve #1#2#3 not expanded}% - \fi} - -% raise (or lower) only the mid of slur -% #1 final height [number, steps of internote, relativ to beginning! note] -%! #1 can still be changed to work relativ from default height ??? - -\def\midslur#1{\getcurpos - \ifdim\y@v>\@xxxii\p@ \xdef\@meet{#1}\relax - \else -% \message{\noexpand\midslur #1 not expanded}% - \fi} - -\let\@meet\empty -\let\l@length\empty -\let\r@length\empty - -% Liftslur #1 refnumber #2 lift[steps of internote] - -\def\Liftslur#1#2{\n@i#1\advance\n@i\@ne \advance\csname s@y\roman@n@i#2} - -% breakslur #1 refnumber #2 endheight during linebreak[steps of internote] - -\def\breakslur#1#2{\inhgetn@i#2\relax\n@ii\n@i - \n@i#1\advance\n@i\@ne \global\csname s@z\roman@n@i\n@ii} - -% invertslur #1 refnumber - -\def\@invsl{\if u\the\s@s \s@s{d}\else \s@s{u}\fi} - -\def\invertslur#1{\s@l@ctslur#1\relax - \if u\the\s@s \global\s@s{D}% change sense and set flag for invertslur - \else \global\s@s{U}\fi} - -% initiate slur #1 reference number #2 start note - -\def\isluru{\i@slur\h@lf{1\p@seven\internote}u}% 'normal' -\def\issluru{\i@slur{1\p@ne}{\p@seven\internote}u}% shorter for accords -% for beam(ib[l]u) or stem, doesn't work with \stemcut (yet?) -\def\ibsluru{\y@i\stemfactor\interbeam - \advance\y@i\h@lf\internote \i@slur1\y@i u} -\def\islurd{\i@slur\h@lf{-1\p@seven\internote}d} -\def\isslurd{\i@slur{1\p@ne}{-\p@seven\internote}d} -\def\ibslurd{\y@i\stemfactor\interbeam - \advance\y@i\h@lf\internote \y@i-\y@i \i@slur0\y@i d} - -% initiate slur at half note width but NO vertical offset (for linkings) - -\def\ihsluru{\i@slur\h@lf\z@ u}% -\def\ihslurd{\i@slur\h@lf\z@ d}% - -\let\itieu\issluru -\let\itied\isslurd -\def\istieu{\i@slur{1\p@ne}{\qu@rt\internote}u}% shorter for accords -\def\istied{\i@slur{1\p@ne}{-\qu@rt\internote}d}% -\let\itenu\istieu -\let\itenl\istied -\let\Itenu\istieu -\let\Itenl\istied - -\def\dotted{\let\dott@d\@ne}\let\dott@d\empty %+ickd - -\def\@mis{missing } - -% #1 hoffset #2 voffset #3 sense (u,d) #4 reference number #5 start note - -\def\i@slur#1#2#3#4#5{% - \check@staff - \global\advance\N@s\@ne % update slurcounter - \s@l@ctslur#4\relax -% test for already invoked \islur - \if x\the\s@s \else\errmessage{\@mis\noexpand\tslur#4}\fi - \global\s@Y#2% store voffset (abs. dim. to rel. height) - \global\s@s{#3}% store sense (u,d) - \ifx\dott@d\empty \global\s@d{}\else\global\s@d{d}\fi %+ickd - \let\dott@d\empty % set dotted indicator +ickd - \global\s@N\noinstrum@nt % store instrument number - \inhgetn@i#5\relax - \global\s@y\n@i % start vpos (steps of internote) - \global\s@a\altportee % store altportee of current slur - \getcurpos - \advance\y@v#1\qn@width - \global\s@x\y@v - \fi}% start hpos (current pos including hoffset) - -% terminate slur #1 reference number #2 end note -% the various types only influence the horizontal offset, if you want to -% terminate a \ibslur with a \tslur it becomes a little bit tricky - -\def\tslur{\t@slur\h@lf} -\def\tsslur{\t@slur{-\p@ne}} -\def\tubslur{\t@slur1} -\def\tdbslur{\t@slur0} -\def\tbsluru{\t@slur1} -\def\tbslurd{\t@slur0} - -% \def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}#1\@ne} -% \def\tleg#1{\let\T@i\@c \tslur #1\@ne} -% #1 should be braced... by David Alsop on January 11, 2009 -\def\ttie#1{\let\T@i\@c \t@slur{-\p@ne}{#1}\@ne} -\def\tleg#1{\let\T@i\@c \tslur{#1}\@ne} -\let\tten\ttie -\let\Tten\ttie -\let\Tleg\tleg - -% y@i linewidth -% y@iv right hoffset -% y@v endpos, complete length - -% #1 hoffset #2 reference number #3 end note - -\def\t@slur#1#2#3{% - \check@staff - \s@l@ctslur#2\relax - \y@iv#1\qn@width - \def\@sense{\the\s@s}% - \edef\@dotted{\the\s@d}%+ickd -% test for missing \islur - \if x\@sense \errmessage{\@mis\noexpand\islur#2}\fi -% test for \invertslur - \if D\@sense \s@s{u}% - \let\@invert\@ne - \fi - \if U\@sense \s@s{d}% - \let\@invert\@ne - \fi -% compute length - \getcurpos - \advance\y@v\y@iv -% eoline - \y@eol\advance\y@-\beforeruleskip -% clip slur at eoline - \ifdim\y@v>\y@ \y@v\y@ \advance\y@v\beforeruleskip \y@iv\beforeruleskip \fi - \advance\y@v-\s@x - \ifx\T@i\@c \n@i\s@y \else \inhgetn@i#3\relax \fi - \writ@slur\s@y\n@i\y@v{-\y@iv}% -% reset sense of slur - \global\s@s{x}\let\T@i\empty - \global\advance\N@s\m@ne - \fi}% update slur counter - - % this command is made to terminate the slur #1 exactly on the note pitch #2 -\def\Tslurbreak#1#2{\s@l@ctslur#1\relax - \def\@sense{\the\s@s}% - {\if d\@sense \advance\transpose 2\raise0.2\Interligne\hbox{\tslur{#1}{#2}}\relax - \else \advance\transpose -2\raise-0.2\Interligne\hbox{\tslur{#1}{#2}}\relax - \fi - }% -\global\let\@meet\empty -\let\l@length\empty -\let\r@length\empty -\let\@invert\empty -} - -\def\Islurubreak#1#2{{\advance\transpose -1\isluru{#1}{#2}}} -\def\Islurdbreak#1#2{{\advance\transpose 1\islurd{#1}{#2}}} - -\def\TslurbreakNextBar#1#2{\off{\beforeruleskip}\hloff{\Tslurbreak{#1}{#2}}\off{-\beforeruleskip}} -\def\IslurubreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurubreak{#1}{#2}}\off{\afterruleskip}} -\def\IslurdbreakPrevBar#1#2{\off{-\afterruleskip}\hloff{\Islurdbreak{#1}{#2}}\off{\afterruleskip}} - -\def\y@eol{\y@\line@width \advance\y@-\sign@skip - \advance\y@-\clef@skip \advance\y@-\s@indent} - -% hold up the RM-slur calling, because faster coding, -% if the slurs are inside a bar (and you use one kind of \notes) -% and ... there is no limitation in the number of slurs -% if you want to call a short slur, extending to the left use \slur[][][]0 - -% #1 start pitch #2 final pitch #3 sense(u,d) #4 length[noteskip] - -\def\C@slur#1#2#3#4{\check@staff - \inhgetn@i#1\relax \n@ii\n@i - \inhgetn@i#2\relax \relax - \ifx\dott@d\empty \gdef\@dotted{}\else\gdef\@dotted{d}\fi %+ickd - \let\dott@d\empty % set dotted indicator +ickd - \def\@sense{#3}% - \if d\@sense \s@Y-\s@Y \fi - \y@v#4\noteskip - \y@iv\y@v - \advance\y@iv\y@ii - \advance\y@v\y@iii - \kern\y@iv - \writ@slur\n@ii\n@i\y@v\z@ - \kernm\y@iv - \fi} - -\def\sslur{% - \let\s@N\undefined % do not store instrument number - \s@Y\p@seven\internote - \y@iii-1.2\qn@width % offset to length 1.1behind+.1before - \y@ii-\p@ne\qn@width - \C@slur} -\def\slur{% - \let\s@N\undefined % do not store instrument number - \s@Y1\p@seven\internote - \y@iii\z@ - \y@ii\h@lf\qn@width - \C@slur} -\def\stie#1{\sslur{#1}{#1}} -\def\tie#1{\slur{#1}{#1}} - -%%% setup fontsizes - -\newdimen\interbeam % distance entre poutres -\newdimen\b@amthick % half beamthickness -\newdimen\Interligne% de la base d'une ligne a l'autre -\newdimen\Internote % la moitie de \Interligne -\let\internote\Internote -\def\musixchar{\musixfont\char} -\def\keychar{\musickeyfont\char} - -\let\musicnorfont\musictwenty - -\def\set@Largenotesize{\let\musixfont\musicLargefont - \let\xgregfont\xgregLargefont - \b@amthick.3456\Interligne \interbeam1.08\Interligne } - -\def\set@largenotesize{\let\musixfont\musiclargefont - \let\xgregfont\xgreglargefont - \b@amthick.288\Interligne \interbeam.9\Interligne } - -\def\set@normalnotesize{\let\musixfont\musicnorfont - \let\xgregfont\xgregnorfont - \b@amthick.24\Interligne \interbeam\p@seven5\Interligne } - -\def\set@smallnotesize{\let\musixfont\musicsmallfont - \let\xgregfont\xgregsmallfont - \b@amthick\p@ne92\Interligne \interbeam.6\Interligne } - -\def\set@tinynotesize{\let\musixfont\musictinyfont - \let\xgregfont\xgregtinyfont - \b@amthick\p@ne536\Interligne \interbeam.48\Interligne } - -\def\normalnotesize{\set@normalnotesize\comput@specifics - \let\curr@ntsiz@\normalnotesize} -\def\smallnotesize{\set@smallnotesize\comput@specifics - \let\curr@ntsiz@\smallnotesize} -\def\tinynotesize{\set@tinynotesize\comput@specifics - \let\curr@ntsiz@\tinynotesize} - -\def\musickeyfont{% - \ifdim\internote<\p@seven6\Internote \musictinyfont - \else - \ifdim\internote<.95\Internote \musicsmallfont - \else - \ifdim\internote<1.19\Internote \musicnorfont - \else - \ifdim\internote<1.43\Internote \musiclargefont - \else - \musicLargefont - \fi - \fi - \fi - \fi} - -\def\meterfont{% - \ifdim\internote<\p@seven6\Internote \metersmallfont - \else - \ifdim\internote<.95\Internote \meternorfont - \else - \ifdim\internote<1.19\Internote \meterbigfont - \else - \ifdim\internote<1.43\Internote \meterlargefont - \else \meterLargefont - \fi - \fi - \fi - \fi} - -\newbox\ch@box -\newcount\musicsize -\newdimen\qd@skip -\newdimen\qn@width -\newdimen\wn@width - -\newskip\txt@ff -\newskip\s@indent % store parindent -\newskip\big@spc - -\newdimen\lthick \lthick=.4pt -\def\hlthick{\h@lf\lthick} - -%%% - -\def\normalmusicsize{\musicsize\tw@nty \comput@specifics - \afterruleskip\@ight\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} -\def\smallmusicsize{\musicsize\sixt@@n \comput@specifics - \afterruleskip\si@\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} -\def\largemusicsize{\musicsize\@xxiv \comput@specifics - \afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} -\def\Largemusicsize{\musicsize\@xxix \comput@specifics - \afterruleskip\t@n\p@ \elemskip\fontdimen\si@\musicnorfont \clef@skip\z@} - -\def\comput@fonts{% - \ifnum\musicsize=\sixt@@n - \let\musicLargefont\musictwentyfour - \let\musiclargefont\musictwenty - \let\musicnorfont\musicsixteen - \let\musicsmallfont\musicthirteen - \let\musictinyfont\musiceleven - \let\xgregLargefont\xgregtwentyfour - \let\xgreglargefont\xgregtwenty - \let\xgregnorfont\xgregsixteen - \let\xgregsmallfont\xgregthirteen - \let\xgregtinyfont\xgregeleven - \let\slurd\slurdsixteen \let\sluru\slurusixteen - \let\hslurd\hslurdsixteen \let\hsluru\hslurusixteen - \let\meternorfont\tenbf \let\metersmallfont\eightbf % version 1.16 RDT - \let\meterbigfont\twelvebf \let\meterlargefont\frtbf - \let\meterLargefont\svtbf - \let\tinyppff\ppfftwelve % version 1.17 RDT - \let\smallppff\ppfftwelve - \let\normppff\ppffsixteen - \let\medppff\ppfftwenty - \else\ifnum\musicsize=\@xxiv - \let\musicLargefont\musictwentynine - \let\musiclargefont\musictwentynine - \let\musicnorfont\musictwentyfour - \let\musicsmallfont\musictwenty - \let\musictinyfont\musicsixteen - \let\xgregLargefont\xgregtwentynine - \let\xgreglargefont\xgregtwentynine - \let\xgregnorfont\xgregtwentyfour - \let\xgregsmallfont\xgregtwenty - \let\xgregtinyfont\xgregsixteen - \let\sluru\slurutwenty \let\slurd\slurdtwenty - \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty - \let\meternorfont\frtbf \let\metersmallfont\twelvebf % version 1.18 RDT - \let\meterbigfont\svtbf \let\meterlargefont\twtybf - \let\meterlargefont\twfvbf - \let\tinyppff\ppffsixteen - \let\smallppff\ppfftwenty - \let\normppff\ppfftwentyfour - \let\medppff\ppfftwentynine - \else\ifnum\musicsize=\@xxix - \let\musicLargefont\musictwentynine - \let\musiclargefont\musictwentynine - \let\musicnorfont\musictwentynine - \let\musicsmallfont\musictwentyfour - \let\musictinyfont\musictwenty - \let\xgregLargefont\xgregtwentynine - \let\xgreglargefont\xgregtwentynine - \let\xgregnorfont\xgregtwentynine - \let\xgregsmallfont\xgregtwentyfour - \let\xgregtinyfont\xgregtwenty - \let\sluru\slurutwenty \let\slurd\slurdtwenty - \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty - \let\slurud\slurutwentyd \let\slurdd\slurdtwentyd % +ickd - \let\hslurud\hslurutwentyd \let\hslurdd\hslurdtwentyd %+ickd - \let\meternorfont\svtbfg \let\metersmallfont\frtbf % version 1.18 RDT - \let\meterbigfont\twtybfg \let\meterlargefont\twfvbf - \let\meterLargefont\twfvbf - \let\tinyppff\ppfftwenty - \let\smallppff\ppfftwentyfour - \let\normppff\ppfftwentynine - \let\medppff\ppfftwentynine -\else - \ifnum\musicsize=\tw@nty - \else\ifnum\musicsize=\z@ - \else\errmessage{\noexpand\musicsize=\the\musicsize\space not supported, - set to default of 20}% - \fi - \fi\musicsize\tw@nty - \let\musicLargefont\musictwentynine - \let\musiclargefont\musictwentyfour - \let\musicnorfont\musictwenty - \let\musicsmallfont\musicsixteen - \let\musictinyfont\musicthirteen - \let\xgreglargefont\xgregtwentyfour - \let\xgregLargefont\xgregtwentynine - \let\xgregnorfont\xgregtwenty - \let\xgregsmallfont\xgregsixteen - \let\xgregtinyfont\xgregthirteen - \let\sluru\slurutwenty \let\slurd\slurdtwenty - \let\hsluru\hslurutwenty \let\hslurd\hslurdtwenty - \let\meternorfont\twelvebf \let\metersmallfont\tenbf % version 1.18 RDT - \let\meterbigfont\frtbf \let\meterlargefont\svtbf - \let\meterLargefont\twtybf - \let\tinyppff\ppfftwelve - \let\smallppff\ppffsixteen - \let\normppff\ppfftwenty - \let\medppff\ppfftwentyfour -\fi\fi\fi}% - -\def\comput@specifics{\comput@fonts\comput@sizes} - -\def\comput@sizes{% - \Interligne\fontdimen\fiv@\musicnorfont - \Internote\h@lf\Interligne \big@spc.6\Interligne - \qn@width\fontdimen\si@\musixfont - \wn@width1\qu@rt\qn@width - \txt@ff\h@lf\qn@width - \qd@skip\qn@width\advance\qd@skip-\hlthick} - -%\newdimen\afterruleskip -\newskip\afterruleskip -\newdimen\staffbotmarg % marge au-dessous des portees -\newdimen\stafftopmarg % au-dessus des portees -\newdimen\line@width - -\def\normalvalue{1} -\def\largevalue{1.2} -\def\Largevalue{1.44} -\def\smallvalue{.8} -\def\tinyvalue{.64} - -\def\instrumentnumber#1{\n@v#1\relax - \min@n@v\@ne - \max@n@v\maxinstruments - \edef\nbinstruments{\the\n@v}} - -% staffsize - -\def\setsize#1#2{\n@v#1\relax % select instrument - \expandafter\edef\csname staffspacing\romannumeral\n@v\endcsname{#2}} - -% [version 1.15] moved out to the new register allocation code -% \let\staffspacingi\@ne - -% number of staffs - -\def\setstaffs#1#2{\n@v#1\relax \csname n@p\romannumeral\n@v\endcsname#2} - -% staff lines - -\def\setlines#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname n@l\romannumeral\n@v\endcsname{#2}} - -\newdimen\interportee % distance between staffs of the same instrument (incl) -\newcount\noport@@ -\newcount\noinstrum@nt -\newdimen\altportee - -\def\interstaff#1{\def\interfacteur{#1}} - -\def\s@l@ctinstr{% - \ifnum\noinstrum@nt>\maxinstruments % [version 1.15] -- from here -- - \errmessage{Wrong instrument reference number \the\noinstrum@nt, maxinstruments=\the\maxinstruments} - \fi % [version 1.15] -- until here -- - \edef\altitude{\csname k@i\romannumeral\noinstrum@nt\endcsname}% - \edef\st@ffs{\csname n@p\romannumeral\noinstrum@nt\endcsname}% - \edef\nblines{\csname n@l\romannumeral\noinstrum@nt\endcsname}% - \edef\internote{\csname i@n\romannumeral\noinstrum@nt\endcsname}% - \interportee\interfacteur\internote \interportee\tw@\interportee} - -\def\C@Inter{\stem@skip\interportee \advance\stem@skip-\@ight\internote - \ifnum\nblines=\f@ur \advance\stem@skip\tw@\internote \fi - \ifnum\nblines>\fiv@ \advance\stem@skip-\tw@\internote \fi} - -%%% loop over instruments and staffs - -\def\count@portee{\advance\noport@@\@ne} - -\def\n@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\nbinstruments - \advance\noinstrum@nt\@ne \s@l@ctinstr} - -\def\m@loop{\noinstrum@nt\z@ \loop\ifnum\noinstrum@nt<\maxinstruments - \advance\noinstrum@nt\@ne} - -\def\p@loop{\noport@@\z@ \loop\ifnum\noport@@<\st@ffs - \altportee\altitude \advance\altportee\noport@@\interportee} - -\def\Comp@High{\y@v\st@ffs\interportee \C@Inter\advance\y@v-\stem@skip} - -% to be used to make heavy bars at staff left -% modified according to Werner Icking - - -\def\groupbottom#1#2{\group@no#1\relax - \advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1... - \expandafter\def\csname lowersonginstrum\romannumeral\group@no\endcsname{#2}} - -\def\grouptop#1#2{\group@no#1\relax - \advance\group@no\m@ne\test@grnum % testgr@num advances group@no by 1... - \expandafter\def\csname uppersonginstrum\romannumeral\group@no\endcsname{#2}} - -\def\songbottom{\groupbottom1} -\def\songtop{\grouptop1} - -% [version 1.15] moved out to the new register allocation code -% \let\lowersonginstrumi\maxdimen -% \let\uppersonginstrumi\z@ - -\def\g@loop{\group@no\z@ \loop\ifnum\group@no<\maxgroups - \s@l@ctgroup} -\def\s@l@ctgroup{% - \relax\test@grnum - \edef\g@b{\csname g@b\romannumeral\group@no\endcsname}% dimen (group bottom) - \edef\g@h{\csname g@h\romannumeral\group@no\endcsname}% dimen (group top) - \edef\lowersonginstrum{\csname lowersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) - \edef\uppersonginstrum{\csname uppersonginstrum\romannumeral\group@no\endcsname}% dimen (group top) - }% -\def\test@grnum{% - \ifnum\group@no<\z@ \group@no\@c \fi - \ifnum\group@no<\maxgroups \else - \count@\maxgroups \advance\count@\m@ne - \errmessage{Wrong group reference number \the\group@no! (valid: 0 to \the\count@)}% [version 1.15] - \group@no\z@% [version 1.15] - \fi - \advance\group@no\@ne} - -% \nobarmessages prevents bar messages - -\def\nobarmessages{\let\no@b\@ne} -\let\no@b\empty - -% \nolinemessages prevents line messages in phase three -\def\nolinemessages{\let\no@l\@ne} -\let\no@l\empty - -% \nobarnumbers prevents bar numbering (Ian Collier) -% \barnumbers restores bar numbering - -\def\nobarnumbers{\let\lin@bar\empty \let\freqbarno\maxdimen} -\def\barnumbers{\let\freqbarno\normalvalue} -\barnumbers - -% show barnumbers only at the beginning system - -\def\raisebarno{\f@ur\internote} -\let\shiftbarno\z@ - -\def\writebarno{\boxit{\eightbf\the\barno\barnoadd}} -\def\systemnumbers{\nobarnumbers\let\lin@bar\@ne} - -% add 'a' behind the systembarnumber, if the previous line ended without -% a bar rule - -\let\z@sw\empty -\def\writezbarno{a} -\def\barnoadd{\ifx\z@sw\@ne \writezbarno \fi} - -% suppress the beginning vertical rule for single-staff scores - -\def\startrule{\let\b@rule\empty} -\def\nostartrule{\let\b@rule\z@} -\startrule - -%%% distance between instruments (added to \interportee) - -% [version 1.15] moved out to the above of the new register allocation code -% \newdimen\interinstrument -% [version 1.15] moved out to the new register allocation code -% \let\interinstrumenti\interinstrument - -\def\setinterinstrument#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname interinstrument\romannumeral\n@v\endcsname{#2}} - -%%% portees - -\newdimen\systemheight -\newdimen\altplancher - -% New version by Werner Icking - -\def\writ@staffs{% - \y@\staffbotmarg \global\altplancher\staffbotmarg - \rlap{\n@loop\w@st\repeat -% beginning vertical rule - \systemheight\y@ - \advance\systemheight-\altplancher - \C@Inter \global\advance\systemheight-\stem@skip - \ifx\empty\b@rule \raise\altplancher\rlap{% - \vrule\@depth\hlthick\@height\systemheight\@width\lthick}\fi -% 'Akkoladenklammer' don't know the english word - \g@loop - \ifnum\uppersonginstrum<\lowersonginstrum - \else - \noinstrum@nt\uppersonginstrum\s@l@ctinstr\C@Inter - \global\advance\g@h-\stem@skip \global\advance\g@h-\g@b - \global\advance\g@h\Interligne \global\advance\g@b-\Internote - \raise\g@b\llap{\uplap{\offinterlineskip - \set@normalnotesize\hbox{\musixfont\fourt@@n}\hbox{\vrule\@height\g@h - \@width\internote}\hbox{\musixfont\fiv@t@@n}}\kern\internote}% - \fi - \repeat -% systembarnumbers - \ifx\lin@bar\@ne \y@\altplancher \advance\y@\systemheight - \advance\y@\raisebarno \raise\y@\rlap{\kern\shiftbarno\writebarno}\fi -% strut - \advance\stafftopmarg\staffbotmarg - \raise\stafftopmarg\hbox{\vrule\@height\systemheight\@width\z@}}} - -\def\uplap#1{\vbox\@to\z@{\vss#1}} - -% new version of \w@st by Werner Icking - -\newskip\instrum@in@group -\def\w@st{% - \global\noport@@\z@ \global\altitude\y@ - \global\instrum@in@group=\z@ - {\g@loop - \ifnum\noinstrum@nt=\lowersonginstrum - \global\g@b\altitude - \fi - \ifnum\uppersonginstrum>\lowersonginstrum\relax - \ifnum\noinstrum@nt<\lowersonginstrum\relax - \else - \ifnum\noinstrum@nt>\uppersonginstrum\relax - \else -% \message{\the\noinstrum@nt\space in-group!}% - \global\instrum@in@group=2\internote - \fi - \fi - \fi - \repeat}% -% nullportee - \ifnum\st@ffs=\z@ - \advance\y@\f@ur\Interligne - \else -% multportee - \ifnum\st@ffs>\@ne \Comp@High\n@v\y@v \sp@pt\tw@ - \advance\n@v\@cxxviii \divide\y@v\tw@ -%==== the parenthesis should be shifted to the left if within -%==== songbottom -- songtop - \advance\y@v\y@ - \raise\y@v\hbox{\kern -\instrum@in@group\mxsps\char\n@v\kern\instrum@in@group}% - \fi -% normal staff - {\loop \staff@lines\ifnum\noport@@<\st@ffs \repeat}% - \fi % fin du \else pour 0 portees=chant - {\g@loop - \ifnum\noinstrum@nt=\uppersonginstrum \global\g@h\y@ \fi - \repeat}% - \ifnum\noinstrum@nt<\nbinstruments - \advance\y@\csname interinstrument\romannumeral\noinstrum@nt\endcsname \fi} - -\def\staff@lines{\raise\y@\rlap{\uplap{% - \ifcase\nblines - \or \Lin@\zLin@\zLin@ - \or \Lin@\zLin@\Lin@\zLin@ - \or \Lin@\zLin@\Lin@\zLin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ - \or \Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@\Lin@ - \fi\kernm\hlthick}}% - \global\advance\y@\interportee \count@portee} - -\def\zLin@{\kern\tw@\internote} -\def\Lin@{\zLin@\kernm\lthick\hrule\@width\line@width} - -\newskip\boxitsep \boxitsep\thr@@\p@\relax - -\def\boxit#1{\vbox{\hrule\hbox{\vrule\kern\boxitsep\vbox{% - \kern\boxitsep\hbox{#1}\kern\boxitsep}\kern\boxitsep\vrule}\hrule}} -\def\circleit#1{\setbox\ch@box\hbox{#1}\y@v\ht\ch@box - \y@v1.41\ht\ch@box % => sqrt(2) - \n@v\y@v \sp@pt\tw@ \advance\n@v69\rlap{#1}% - \raise\h@lf\ht\ch@box\rlap{\kern\h@lf\wd\ch@box\mxsps\char\n@v}} - -\def\thinrul@{\writ@rule\lthick} -\def\thickrul@{\writ@rule\big@spc} - -%%% start normal score - -%% -% Define a counter to keep track of total number of bars in piece -% which are terminated by a barline. This is not necessarily -% the same as \barno, in view of (eg) a bar containing -% multiple bars rest. -%% -% !!! \barsinpi@c@ now used for \zbar and \xbar too, if you use them -% the value of \barsinpi@c@ says nothing !!! -% - -\newcount\barsinpi@c@ -\newcount\barno -\newcount\startbarno \startbarno\@ne -\newdimen\sign@skip -\newdimen\maxsign@skip - - -\def\piece@begina{\catcodesmusic \barno\startbarno \@l@mskip\elemskip - \barsinlin@\z@ \let\z@sw\empty \frenchspacing -% \let\barrul@\thinrul@ \comp@internote} %-simick - \b@rrul@\comp@internote} %+simick - -\def\comp@internote{\comput@specifics - \n@loop - \internote\csname staffspacing\romannumeral\noinstrum@nt\endcsname\Internote - \repeat - \line@width\hsize} - -\def\piece@beginb{\advance\line@width-\parindent \s@indent\parindent - \writ@staffs \writ@names \advance\line@width\parindent} - -\def\piece@beginc{% -% write clefs - \n@loop{\writ@clefi}\repeat \kern\clef@skip -% everystaff stuff - \everyst@ff -% write signatures - \sign@skip\z@ \n@loop{\s@l@ctsigns \let\@Ti\writ@sign \C@wsi}\repeat - \kern\sign@skip \m@loop \s@l@ctsigns \o@s\a@s \s@l@ctclefs \o@c\a@c \repeat - \let\Writ@newsigns\empty \hskip\z@ plus\p@ minus\p@ \lastbarpos\z@} - -\let\fil@begin\empty -\let\Writ@meters\empty - -\def\startpiece{\ifstartmuflex@done\relax - \else\startmuflex - \immediate\write16{\noexpand\startmuflex launched by - \noexpand\startpiece }% - \fi - \barsinpi@c@\z@ \piece@begina \leavevmode \piece@beginb - \piece@beginc \fil@begin \Writ@meters - \let\volta@set\empty % tells the kind of volta setting at next bar - \let\volta@cut\empty % flag to tell that a volta has been cut at line end - \let\volta@type\empty % the current volta setting (same defs as \volta@set) - \let\endvolta@set\empty % tells the kind of volta closing at next bar -} - -\let\everystaff\empty -\def\everyst@ff{\everystaff}% --> MuFlex Pass II - -%%% continue score - -\let\atnextline\empty - -\def\piece@conta{\catcodesmusic \atnextline \let\atnextline\empty - \comp@internote \leavevmode \barsinlin@\z@ } - -\def\contpiece{\noindent \piece@conta \writ@staffs \piece@beginc - \Writ@meters \wbarno@x \addspace\afterruleskip -} - -% like contpiece but with indentation (parindent) and instrument names -% it's for changing the number of instrument in one piece - -\let\fil@indent\empty -\def\Contpiece{\piece@conta \piece@beginb \fil@indent \piece@beginc - \Writ@meters} - -%%% end score - -\let\ragg@d\empty -\let\z@suspend@autoflag\empty % used in musixcpt only - -\def\z@suspend{% - \z@suspend@autoflag % used in musixcpt only -% cutvolta - \write@volta@hrule - \ifx\volta@type\tw@\let\volta@set\tw@ \let\volta@type\empty - \let\volta@cut\tw@\fi % restart volta at next line if continuous - \ifx\volta@type\thr@@\let\volta@set\thr@@ \let\volta@type\empty - \let\volta@cut\thr@@ \fi % restart volta at next line if continuous -% cutoctline - \o@loop - \ifdim\o@x<\maxdimen \let\T@ii\n@ii \C@TO \o@x\z@ \fi - \repeat -% cut trill - \tr@loop - \ifdim\tr@x<\maxdimen \let\T@ii\n@ii \C@TR \tr@x\z@ \fi - \repeat -% cutslur - \ifnum\N@s>\z@% % any pending slurs ? - \n@viii\maxslurs % test all possible slur numbers [version 1.15] (Hiroaki) - \advance\n@viii\m@ne - \loop\ifnum\n@viii>\m@ne - \s@l@ctslur\n@viii\relax - \edef\@sense{\the\s@s}% - \if x\@sense% % sense flag - \else% % found slur - \edef\@dotted{\the\s@d}% +ickd - \y@v\lin@pos % get current position - \advance\y@v-\s@x % slurlength = currentpos - startpos - \let\@Ti\@ne % set flag for \writ@slur (\staffbotmarg) - \ifnum\s@z=\maxdimen \s@z\s@y \fi % flag (\breakslur not used -> tie) - \writ@slur\s@y\s@z\y@v\p@% avoid touching the bar rule - \s@x\z@% reset startpos for next line - \s@z\maxdimen% reset breakslur - \fi - \advance\n@viii\m@ne \repeat - \fi\s@indent\z@ -% - \ragg@d\par\lin@pos\z@ \endcatcodesmusic} - -\def\stoppiec@{\check@nopen\n@wbar\z@suspend} -%\def\stoppiece{\stoppiec@\@nds@ction} %-simick -\def\stoppiece{\T@bil\fi\stoppiec@\@nds@ction} %+simick -\let\endpiece\stoppiece - -\def\zstoppiec@{\check@nopen\zn@wbar\z@suspend} -%\def\zstoppiece{\zstoppiec@\@nds@ction} %-simick -\def\zstoppiece{\T@bil\fi\zstoppiec@\@nds@ction}%+simick -% if you need a line which appears ragged -\def\raggedstoppiece{\ifx\ragg@d\empty \fil@{r}\fi % version 1.18 RDT (from musixext) - \check@nopen\n@wbar\hfill\z@suspend\@nds@ction} - -\def\Stoppiece{\setdoubleBAR\stoppiece} -\let\Endpiece\Stoppiece - -%%% short excerpts - -\def\startextract{\lastbarno\z@ \barno\startbarno - \piece@begina\setbox\w@rkbox\hbox{\writ@staffs}% to compute heights - \setbox\w@rkbox\hbox\bgroup% !! all changes are local !! - \line@width\maxdimen - \maxbarsinlin@\maxdimen %+simick - \let\T@bil\iftrue \let\everyst@ff\everystaff \let\fil@spc\empty - \let\fil@termskip\empty \let\fil@signs\empty \let\fil@barno\empty - \let\leftrepeat\leftrepeat@II \let\leftrightrepeat\leftrightrepeat@II - \piece@beginc\Writ@meters\addspace\afterruleskip} - -% enable left and right extracts (e.g. for footnotes) - -\let\extractline\centerline - -\def\endextract{\let\z@suspend\write@volta@hrule - \stoppiec@\egroup\line@width\wd\w@rkbox - \extractline{\writ@names\writ@staffs\unhbox\w@rkbox}% - \endcatcodesmusic} -\def\zendextract{\let\stoppiec@\zstoppiec@ \endextract} - -%% -% Redefine \t@rmskip to include a macro for writing a record to a file, -% and define the macro -%% - -\newdimen\x@skip -\newdimen\n@skip - -\let\fil@termskip\empty -\def\t@rmskip{\kern\n@skip\advance\x@skip\n@skip - \advance\lin@pos\x@skip - % case of \hardnotes - \ifnum\V@sw>0\relax - \y@v\n@skip \fil@spc - \fi - % end case \hardnotes - \fil@termskip\global\n@skip\z@ \global\x@skip\z@ \let\V@sw\z@} - -%% -% Define the amount of space before each barline, -%% - -%\newdimen\beforeruleskip -\newskip\beforeruleskip - -%% -% We must distinguish between scalable ('soft'=1) material in the bar -% (eg noteboxes) and absolute ('hard'=0) widths such as those from -% barlines and clef symbols -% Hence introduce a switch defining this attribute -%% - -\newcount\widthtyp@ \widthtyp@\@ne - -%%% bar numbers - -\newcount\lastbarno - -\def\writethebarno{\fontbarno\the\barno\kernm\qn@width} -\def\fontbarno{\it} - -\def\wbarno@x{\lastbarpos\lin@pos - \ifx\volta@set\empty - \n@iii\barno \divide\n@iii\freqbarno\relax - \ifnum\n@iii=\lastbarno - \else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote - \raise\y@\llap{\writethebarno}\fi - \else - \ifx\volta@cut\empty - \else % volta was cut, there is nothing colliding with bar number. - \n@iii\barno \divide\n@iii\freqbarno\relax - \ifnum\n@iii=\lastbarno - \else \y@\altplancher \advance\y@\systemheight \advance\y@\tw@\internote - \raise\y@\llap{\writethebarno}\fi - \fi - \write@volta - \fi - \b@rrul@ %+simick - \n@iii\barno \divide\n@iii\freqbarno\relax \lastbarno\n@iii } - -%%% pass selective scoring - -\newskip\cut@v % contains width of bar rule -\newskip\init@volta@pos % start position of volta -\newskip\volta@startcor %+simick volta start correction in case of leftrepeats -\newskip\volta@endcor %+simick volta end correction in case of rightrepeats - -\def\raisevolta{\f@ur\internote} - -\newbox\writ@volta@box - -\def\voltadot{.}% -\def\write@volta{% writes the requested |n. and moves the things for further use - \ifx\volta@type\empty\else\errmessage{/setvolta collision!}\fi - \y@\altplancher \advance\y@\systemheight - \advance\y@\raisevolta -% \setbox\writ@volta@box\rlap{\vrule % \musixfont\sixt@@n %-simick -% \rm\ \vphantom{\^{\volta@text}\strut gq}\volta@text\voltadot}% %-simick - \setbox\writ@volta@box\rlap{\vrule\rm\strut\ \volta@text\voltadot}% %+simick - \xdef\thevolta@boxheight{\the\ht\writ@volta@box}% - \xdef\thevolta@boxdepth{\the\dp\writ@volta@box}% - \ifx\volta@cut\empty \else\setbox\writ@volta@box\null - \fi % if continuation, make writ@volta@box null -% \raise\y@\llap{\box\writ@volta@box}% %-simick - \kernm\volta@startcor\raise\y@\llap{\box\writ@volta@box}\kern\volta@startcor %+simick - \let\volta@type\volta@set - \let\volta@set\empty - \let\volta@cut\empty -% \init@volta@pos\lin@pos\relax %-simick - \init@volta@pos\lin@pos \advance\init@volta@pos-\volta@startcor %+simick -}% - -\def\write@volta@hrule{% write the hrule of volta bar at its end - \ifx\volta@type\empty - \else - \y@v\lin@pos \advance\y@v-\init@volta@pos -% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick -% \global\advance\cut@v\lthick %-simick - \ifnum\barsinlin@=\maxbarsinlin@ %+simick - \y@i\z@ %+simick - \else %+simick - \y@i\cut@v \advance\y@i-\volta@endcor %+simick - \fi %+simick - \advance\y@v-\y@i %+simick - \y@\altplancher \advance\y@\systemheight - \advance\y@\raisevolta - \raise\y@\llap{% - \raise\thevolta@boxheight -% \hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}}% %-simick - \hbox{\vrule\@height\z@\@depth\lthick\@width\y@v}\kern\y@i}% %+simick -% check whether termination has been required - \ifx\endvolta@set\thr@@ \let\volta@type\thr@@\fi % \endvoltabox forces type \thr@@ - \ifx\endvolta@set\empty \else \write@volta@endbox\fi - % now set volta@type \@ne to \empty - \ifx\volta@type\@ne \let\volta@type\empty\fi - \fi -}% - -\def\write@volta@endbox{% write the hrule of volta bar at its end - \ifx\volta@type\empty - \else -% \y@v\lin@pos \advance\y@v-\init@volta@pos %-simick -% \global\advance\cut@v\lthick \advance\y@v-\cut@v %-simick -% \global\advance\cut@v\lthick %-simick - \y@\altplancher \advance\y@\systemheight - \advance\y@\raisevolta - \ifx\volta@type\thr@@ -% \raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}}% %-simick - \raise\y@\llap{\raise\thevolta@boxheight\hbox{\true@endvoltabox}\kern\y@i}%+simick - \fi -% now force volta@type to \empty - \let\volta@type\empty - \let\endvolta@set\empty - \let\volta@cut\empty - \fi -}% - -%\check - -\let\writ@volta\empty % provisional for testing % - -\let\volta@set\empty % tells the kind of volta setting at next bar - % \@ne = single \setvolta, \tw@ = \Setvolta - % \thr@@ = setvoltabox - -\let\volta@type\empty % the current volta setting (same defs as \volta@set) -\let\volta@cut\empty - -\let\endvolta@set\empty % tells the kind of volta closingg at next bar - % \@ne = not used, \tw@ = terminate \Setvolta[box] - % \thr@@ = terminate \Setvolta[box] with an ending hook - -\def\setvolta{\let\volta@set\@ne \gen@setvolta} -\def\Setvolta{\let\volta@set\tw@ \gen@setvolta} -\def\setvoltabox{\let\volta@set\thr@@ \gen@setvolta} - -\def\gen@setvolta#1{\def\volta@text{#1}} - -\def\setendvolta{% - \ifx\volta@type\empty\volta@err - \else\let\endvolta@set\tw@ - \fi} - -\def\setendvoltabox{% - \ifx\volta@type\empty\volta@err - \else\let\endvolta@set\thr@@ - \fi} - -\let\endvolta\setendvolta -\let\endvoltabox\setendvoltabox - -\def\true@endvoltabox{\raise-\thevolta@boxheight - \llap{\vrule\@height\thevolta@boxheight \@depth\thevolta@boxdepth}} - -\def\volta@err{\immediate\write16{% - type=\ifx\volta@type\empty 0\else \number\volta@type\fi, - set=\ifx\volta@set\empty 0\else \number\volta@set\fi}% -\errmessage{\noexpand\endvolta, %\noexpand\contvolta, -\noexpand\endvoltabox\space does not match opening \noexpand\S[s]volta...}} - - -%%% line breaking stuff - -\let\@nds@ction\empty - -\newcount\barsinlin@ -\newcount\maxbarsinlin@ - -%\def\@LeftRp{\stoppiec@\contpiece\addspace{\h@lf\afterruleskip}% %-simick -% \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip} %-simick -\def\@LeftRp{\stoppiec@\l@@ftrepeat\advance\volta@startcor-\afterruleskip %+simick - \contpiece\addspace{\h@lf\afterruleskip}% %+simick - \kernm\afterruleskip\l@eftrepeat\kern\afterruleskip %+simick - \advance\lastbarpos\afterruleskip \b@rrul@} %+simick - -\def\T@bil{\advance\barsinlin@\@ne \ifnum\barsinlin@<\maxbarsinlin@} - -\def\barre{\T@bil \@bar\else\stoppiec@\contpiece \fi} -\def\xbar{\@bar\advance\barsinpi@c@\m@ne} -\def\zbar{\T@bil \zn@wbar\else\zstoppiec@\contpiece \fi} -\def\alaligne{\stoppiece\contpiece} -\def\zalaligne{\zstoppiece\contpiece} -\def\leftrepeat@II{\T@bil \setleftrepeat\@bar\else\@LeftRp \fi} -\let\leftrepeat\leftrepeat@II -\def\leftrightrepeat@II{\T@bil \setleftrightrepeat - %\setbox\toks@box\l@eftrightrepeat \global\cut@v=\wd\toks@box - \@bar - \else\setrightrepeat\@LeftRp \fi} -\let\leftrightrepeat\leftrightrepeat@II -\def\alapage{\stoppiece\eject\contpiece} -\def\zalapage{\zstoppiece\eject\contpiece} - -% minuscule: une seule barre -% majuscule: double barre - -\let\Writ@newsigns\empty - -\def\updat@context{\writ@newclefs - \T@bil \wbarno@x\Writ@newsigns\Writ@meters\addspace\afterruleskip - \else\Writ@newsigns\z@suspend\contpiece \fi} - -\def\changecontext{\showallbarrules\n@wbar\updat@context} -\def\Changecontext{\showallbarrules\setdoublebar\changecontext} -\def\zchangecontext{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip - \zn@wbar\updat@context} - -\def\pchangecontext{\showallbarrules\n@wbar - \writ@newclefs\Writ@newsigns\z@suspend\eject\contpiece} -\def\pChangecontext{\setdoublebar\pchangecontext} - -%%% bars, repeatbars, ... - -%% -% Change ... to add skip \beforeruleskip to the preceeding notebox, -% and to set the 'soft' switch for the output record -%% -%% -% Redefine \n@wbar to write the bar line thickness to file, -% then reset \n@skip and \x@skip -%% - -\newskip\lastbarpos -\let\fil@barno\empty -\let\atnextbar\empty - -\def\n@wbar{% - \t@rmskip % essai DT - \advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip -% \ifdim\cut@v>\z@ \else\ifx\barrul@\thinrul@ \else\global\cut@v.9\Interligne \fi\fi %-simick -% \barrul@\widthtyp@\z@ \fil@termskip\let\barrul@\thinrul@ %-simick - \barrul@\widthtyp@\z@ \fil@termskip %+simick - \advance\barsinpi@c@\@ne \fil@barno - \ifx\no@b\empty \message{bar \the\barno}\fi - \advance\barno\@ne \advance\lin@pos\x@skip \atnextbar \let\atnextbar\empty - \write@volta@hrule %+simick -% \global\cut@v\z@ % <===================================== inserted %-simick - \global\n@skip\z@ \global\x@skip\z@ \let\z@sw\empty -% \write@volta@hrule %-simick -}% - -\def\@bar{\n@wbar\wbarno@x\addspace\afterruleskip} - -\def\zn@wbar{\t@rmskip\advance\barsinpi@c@\@ne \let\z@sw\@ne} - -\def\small@spc{\addspace{\h@lf\big@spc}} - -\def\b@rrul@{\let\barrul@\thinrul@ %+simick - \global\cut@v\lthick \global\volta@endcor-\thr@@\lthick \global\volta@startcor\z@} %+simick -\def\r@ightrepeat{% - \hbox{\writ@colons\addspace\big@spc\thinrul@\small@spc\thickrul@}} -\def\r@@ghtrepeat{% %+simick - \global\cut@v\big@spc \global\advance\cut@v\lthick \global\advance\cut@v\h@lf\big@spc %+simick - \global\volta@endcor\cut@v \global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick -\def\l@eftrepeat{% - \hbox{\thickrul@\small@spc\thinrul@\addspace\big@spc\writ@colons}} -\def\l@@ftrepeat{% %+simick - \global\cut@v\big@spc \global\advance\cut@v\h@lf\big@spc \global\advance\cut@v\lthick %+simick - \global\advance\cut@v\big@spc \global\volta@endcor\z@ \global\volta@startcor\big@spc %+simick - \global\advance\volta@startcor\lthick \global\advance\volta@startcor\h@lf\big@spc} %+simick -\def\l@eftrightrepeat{\hbox{\writ@colons\addspace\big@spc\thickrul@ - \small@spc\thickrul@\addspace\big@spc\writ@colons}} -\def\l@@ftrightrepeat{% %+simick - \global\cut@v\big@spc \global\advance\cut@v\big@spc \global\volta@endcor\cut@v %+simick - \global\advance\cut@v\h@lf\big@spc %+simick - \global\volta@startcor\big@spc \global\advance\volta@startcor\big@spc %+simick - \global\advance\cut@v\volta@endcor \global\advance\volta@startcor-\lthick} %+simick - -\def\doublebar{\showallbarrules\setdoublebar\barre}% double barre de mesure -%\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}} %-simick -\def\setdoubleBAR{\showallbarrules\def\barrul@{\thinrul@\small@spc\thickrul@}% %+simick - \global\cut@v\lthick \global\advance\cut@v\h@lf\big@spc \global\volta@endcor\cut@v %+simick - \global\advance\cut@v\big@spc \global\volta@startcor\z@} %+simick -%\def\setemptybar{\def\barrul@{\relax}} %-simick -\def\setemptybar{\def\barrul@{\relax}% %+simick - \global\cut@v\z@ \global\volta@endcor-\f@ur\lthick \global\volta@startcor\z@} %+simick -\def\setdoublebar{\showallbarrules\global\cut@v.4\Interligne - \global\advance\cut@v\tw@\lthick \global\volta@endcor\z@ \global\volta@startcor\z@ %+simick - \def\barrul@{\thinrul@\addspace{.4\Interligne}\thinrul@}} - -\def\rightrepeat{\setrightrepeat\barre} - -%\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat} %-simick -\def\setrightrepeat{\showallbarrules\let\barrul@\r@ightrepeat \r@@ghtrepeat} %+simick -%\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat} %-simick -\def\setleftrepeat{\showallbarrules\let\barrul@\l@eftrepeat \l@@ftrepeat} %+simick -%\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat} %-simick -\def\setleftrightrepeat{\showallbarrules\let\barrul@\l@eftrightrepeat \l@@ftrightrepeat}%+simick - -% write colons on all staffs (a part of [left][right]repeat symbols - -\def\writ@colons{\n@loop{\w@coli}\repeat} -\def\w@coli{\p@loop - \raise\altportee\hbox{\raise4\internote\hbox{\keychar55}}\count@portee\repeat} - -%%% seperated and full barlines - -%\def\rul@full#1{\raise\altplancher\rlap{\vrule\@depth\hlthick -% \@height\systemheight\@width#1}\addspace#1} - -\def\rul@full#1{\hbox{\raise\altplancher\rlap{\vrule\@depth\hlthick - \@height\systemheight\@width#1}}\addspace#1} - -\def\rul@sep#1{\noport@@\z@\n@loop - \edef\rul@hidden{\csname h@bl\romannumeral\noinstrum@nt\endcsname}% - \Comp@High\hbox{\raise\altitude\rlap{% -% \message{(tw@=\meaning\tw@\space thr@@=\meaning\thr@@\space \number\noinstrum@nt->}\expandafter\show\rul@hidden - \expandafter - \ifx\rul@hidden\relax % if \relax = never hidden - \vrule\@depth\hlthick\@width#1\@height\y@v - \else - \expandafter - \ifx\rul@hidden\thr@@ % if \thr@@ = not hidden one time, - \vrule\@depth\hlthick\@width#1\@height\y@v - \global\expandafter\let\rul@hidden\tw@ % reset to perm. hidden - \else - \expandafter - \ifx\rul@hidden\tw@ % if \tw@ = always hidden - \relax - \else - \expandafter - \ifx\rul@hidden\@ne % if \@ne = hidden only one time - \global\expandafter\let\rul@hidden\relax - \fi - \fi - \fi - \fi}}\repeat\addspace#1} - -%== hides (only) next bar line for specified instrument -\def\Hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\@ne} - -%== hides all next bar lines for specified instrument -\def\hidebarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\tw@} - -%== force showing all bar lines for specified instrument -\def\showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\relax} - -%== force showing all bar lines for all instruments -\def\showallbarrules{% - %\ifx\writ@rule\rul@sep\relax - \n@loop - \global\expandafter\let\csname h@bl\romannumeral\noinstrum@nt\endcsname\relax - \repeat - %\fi -} - -%== force showing (only) next bar line for specified instrument -\def\Showbarrule#1{\global\expandafter\let\csname h@bl\romannumeral#1\endcsname\thr@@} - -% standard vrules over all instruments -\def\stdbarrules{\let\writ@rule\rul@full } - -% separated vrules par instrum -\def\sepbarrules{\let\writ@rule\rul@sep } -\stdbarrules - -%%% signs - -\def\s@l@ctsigns{\edef\a@s{\csname a@s\romannumeral\noinstrum@nt\endcsname}% - \edef\o@s{\csname o@s\romannumeral\noinstrum@nt\endcsname}}% - -\def\setsign#1#2{\noinstrum@nt#1\relax - \let\Writ@newsigns\writ@newsigns % only write them, when they are touched - \s@l@ctsigns % select instrument - \a@s#2\relax % -} - -\def\generalsignature#1{\let\Writ@newsigns\writ@newsigns - \m@loop \s@l@ctsigns \a@s#1\repeat} - -% Inhibits writing erasing naturals at next change of context -\def\ignorenats{\m@loop \s@l@ctsigns \o@s\z@ \repeat} - -\def\changesignature{\t@rmskip\Writ@newsigns} - -\def\writ@sign{\ifnum\a@s=\z@ \else - \n@v\@lii - \ifnum\a@s>\z@ \C@sig\t@n - \C@sh\@ne\s@v@n - \C@sh\tw@\@l@v@n - \C@sh\thr@@\@ight - \C@sh\f@ur\fiv@ - \C@sh\fiv@\nin@ - \C@sh\si@\si@\fi - \n@v\@l - \ifnum\a@s<\z@ \C@sig\si@ - \C@fl\@ne\nin@ - \C@fl\tw@\fiv@ - \C@fl\thr@@\@ight - \C@fl\f@ur\f@ur - \C@fl\fiv@\s@v@n - \C@fl\si@\thr@@\fi - \fi} - -\def\C@sh#1#2{\ifnum\a@s>#1\C@sig#2\fi} -\def\C@fl#1#2{\ifnum\a@s<-#1\C@sig#2\fi} - -%% -% Augment \writ@newsigns so that -% (1) the space taken by the mid-line sign change is written to the file; -% (2) the new value of \sign@skip is written to the file -% Note that this is not necessarily the same value -% as the mid-line value, which includes cancellation naturals when -% the key signature changes from N flats to M sharps (or vice-versa) -%% - -\let\fil@signs\empty - -\def\writ@newsigns{\sign@skip\z@ - \n@loop{\s@l@ctsigns \let\@Ti\writ@newsign \C@wsi}\repeat - \n@skip\sign@skip \widthtyp@\z@ \t@rmskip - \m@loop \s@l@ctsigns \o@s\a@s \repeat - \let\Writ@newsigns\empty \fil@signs } - -\def\upd@width#1{\ifdim#1<\wd\toks@box \global#1\wd\toks@box \fi} -\def\writ@box{\leavevmode\raise\altportee\rlap{\box\toks@box}} - -\newcount\ut@ref - -\def\get@refs#1#2#3#4{% #1-#4: cle correspondante 0=sol, 5-6=fa, 1-4=ut - \ifcase\noport@@ \ut@ref\z@ \or \ut@ref#1\or \ut@ref#2\or - \ut@ref#3\or \ut@ref#4\fi - \relax \ifnum \ut@ref=9\relax \ut@ref-1\relax\fi - \global\ut@ref\ut@ref } - - %\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi - % \ifnum\o@s<\z@ \w@flats\w@sharps\else\w@sharps\w@flats \fi} - -\def\writ@newsign{\ifnum\a@s=\z@ \else\kern.4\Internote \fi - \ifnum\o@s<\z@ \w@cancelflats\w@flats\w@sharps - \else\w@cancelsharps\w@sharps\w@flats \fi} - -\def\w@flats{\W@Fl\z@\si@ \W@Fl\@ne\nin@ \W@Fl\tw@\fiv@ \W@Fl\thr@@\@ight - \W@Fl\f@ur\f@ur \W@Fl\fiv@\s@v@n \W@Fl\si@\thr@@} - -\def\w@cancelflats{\W@canFl\z@\si@ \W@canFl\@ne\nin@ \W@canFl\tw@\fiv@ - \W@canFl\thr@@\@ight \W@canFl\f@ur\f@ur \W@canFl\fiv@\s@v@n \W@canFl\si@\thr@@} - - %\def\W@Fl#1#2{% - % \ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi} - -\def\W@Fl#1#2{% - \ifnum\a@s<-#1\n@v\@l \C@sig#2\else \ifnum\o@s<-#1\relax\fi \fi} - -\def\W@canFl#1#2{% - \ifnum\a@s<-#1\relax\else \ifnum\o@s<-#1\n@v\@liv \C@sig#2\fi \fi} - -\def\w@sharps{\W@Sh\z@\t@n \W@Sh\@ne\s@v@n \W@Sh\tw@\@l@v@n - \W@Sh\thr@@\@ight \W@Sh\f@ur\fiv@ \W@Sh\fiv@\nin@ \W@Sh\si@\si@} - -\def\w@cancelsharps{\W@canSh\z@\t@n \W@canSh\@ne\s@v@n \W@canSh\tw@\@l@v@n - \W@canSh\thr@@\@ight \W@canSh\f@ur\fiv@ \W@canSh\fiv@\nin@ \W@canSh\si@\si@} - - %\def\W@Sh#1#2{% - % \ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi} - -\def\W@Sh#1#2{% - \ifnum\a@s>#1\n@v\@lii \C@sig#2\else\ifnum\o@s>#1\relax\fi \fi} - -\def\W@canSh#1#2{% - \ifnum\a@s>#1\relax\else\ifnum\o@s>#1\n@v\@liv \C@sig#2\fi \fi} - -\def\C@wsi{\s@l@ctclefs \p@loop \count@portee \expandafter\get@refs\the\a@c - \setbox\toks@box\hbox{\kern.4\Internote \@Ti \kern.4\Internote}% - \upd@width\sign@skip \writ@box \repeat} - - %\def\C@sig#1{\n@iii#1% - % \ifnum\ut@ref>\z@ - % \advance\n@iii\ut@ref \advance\n@iii\ut@ref - % \ifnum\ut@ref=\si@ \advance\n@iii-\s@v@n \fi - % \ifnum\ut@ref>\thr@@ \advance\n@iii-\s@v@n \fi - % \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi - %\fi - %\advance\n@iii-\tw@ \raise\n@iii\internote - %\hbox\@to\tw@\internote{\hss\keychar\n@v\hss}} - -\def\C@sig#1{\n@iii#1% Correction by W. Icking - \advance\n@iii\ut@ref \advance\n@iii\ut@ref - \ifnum\ut@ref=\si@ \advance\n@iii-\fourt@@n% - \else \ifnum\ut@ref>\z@ \advance\n@iii-\s@v@n \fi\fi - \ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi - \ifnum\n@iii<\@ne \global\advance\n@iii\s@v@n \fi - \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi - \ifnum\n@iii>\@l@v@n \advance\n@iii-\s@v@n \fi - \advance\n@iii-\tw@ \raise\n@iii\internote - \hbox\@to\tw@\internote{\hss\keychar\n@v\hss}} - -%%% meterindicators - -\def\s@l@ctm@t{\edef\m@t{\csname m@t\romannumeral\noinstrum@nt\endcsname}} - -\def\setmeter#1#2{\noinstrum@nt#1\relax % select instrument - \let\Writ@meters\writ@meters % only write them, when they are touched - \s@l@ctm@t \m@t{#2\empty\empty\empty}} - -\def\generalmeter#1{\let\Writ@meters\writ@meters - \m@loop \s@l@ctm@t \m@t{{#1}{#1}{#1}{#1}}\repeat} - -%% -% Redefine \writ@meters to set the 'hard' switch for -% \t@rmskip, indicating that this length is unscaleable -%% - -% \meterskip influence the space before !first! writemeters -\newskip\meterskip - -\def\writ@meters{\addspace\meterskip \meterskip\z@ \global\n@skip\z@ - \n@loop{\writ@meteri}\repeat - \ifdim\n@skip>\z@ \advance\n@skip\big@spc - \widthtyp@\z@ \t@rmskip \fi \let\Writ@meters\empty} - -\def\writ@meteri{\s@l@ctm@t \p@loop \setbox\toks@box - \hbox{\expandafter\writ@meterp\the\m@t{}{}{}{}}\upd@width\n@skip - \writ@box \count@portee\repeat} - -\def\writ@meterp#1#2#3#4{% - \ifcase\noport@@\hbox{#1}\or \hbox{#2}\or \hbox{#3}\or \hbox{#4}\fi} - -\def\meterfrac#1#2{\setbox\toks@box\vbox{\hbox{\ \meterfont#1}% - \hbox{\ \meterfont #2}}\vbox\@to\@ight\internote{\offinterlineskip - \vss\hbox\@to\wd\toks@box{\hss\meterfont#1\hss}\vss - \vss\hbox\@to\wd\toks@box{\hss\meterfont#2\hss}\vss}} - -%%% clefs - -\def\s@l@ctclefs{\edef\a@c{\csname a@c\romannumeral\noinstrum@nt\endcsname}% - \edef\o@c{\csname o@c\romannumeral\noinstrum@nt\endcsname}} - -% why simple, when it can be done complicated ? - -\newtoks\t@c -\def\@fourtoks#1#2#3#4#5+{#1#2#3#4} - -\def\setclef#1#2{\noinstrum@nt#1\relax - \ifnum#1<1\errmessage{Instrument number not positive}\fi - \s@l@ctclefs \t@c{#2000}% - \a@c\expandafter\expandafter\expandafter{\expandafter\@fourtoks\the\t@c+}} - \let\setclefs\setclef - -\let\bass\si@ -\let\alto\thr@@ -\let\treble\z@ - -\def\setclefsymbol#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}% - \expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}% - \expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}% -}% - -\def\setbassclefsymbol#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname bassc@s\romannumeral\n@v\endcsname{#2}% -}% - -\def\setaltoclefsymbol#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname altoc@s\romannumeral\n@v\endcsname{#2}% -}% - -\def\settrebleclefsymbol#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname treblec@s\romannumeral\n@v\endcsname{#2}% -}% - -\def\trebleclef{\keychar71} -\def\bassclef{\keychar73} -\def\altoclef{\keychar75} - -\def\smalltrebleclef{\keychar72} -\def\smallbassclef{\keychar74} -\def\smallaltoclef{\keychar76} - -\def\trebleoct{\trebleclef\raise 9\internote\hbox\@to\z@{\smalltype\it\kern -1.8\Interligne 8\hss}} -\def\bassoct{\bassclef\raise 2\internote\hbox\@to\z@{\smalltype\it\kern -2.3\Interligne 8\hss}} -\def\treblelowoct{\trebleclef\raise -7\internote\hbox\@to\z@{\smalltype\it\kern -2.3\Interligne 8\hss}} -\def\basslowoct{\bassclef\raise -6\internote\hbox\@to\z@{\smalltype\it\kern -2.5\Interligne 8\hss}} - -% [version 1.15] reqest from Hermann Hinsch -\def\smalltrebleoct{\smalltrebleclef\raise 7.2\internote\hbox\@to\z@{\smalltype\it\kern -1.8\Interligne 8\hss}} -\def\smalltreblelowoct{\smalltrebleclef\raise-6.8\internote\hbox\@to\z@{\smalltype\it\kern -2.1\Interligne 8\hss}} -\def\smallbassoct{\smallbassclef\raise 2\internote\hbox\@to\z@{\smalltype\it\kern -2.0\Interligne 8\hss}} -\def\smallbasslowoct{\smallbassclef\raise-6.2\internote\hbox\@to\z@{\smalltype\it\kern -2.2\Interligne 8\hss}} -% [version 1.15] reqest from Hermann Hinsch: end - - -\newskip\clef@skip - -\def\changeclefs{\t@rmskip\writ@newclefs} - -\def\zchangeclefs{\t@rmskip\zwrit@newclefs} - -% since the characters are shifted by default(Metafont) they looked -% a little bit strange when you mix several staffstaffsizes (flushleft) -% I've introduced a hack(kern kernm), that they are (nearly) centered -% (aehmm, really not the best way, because now they look strange -% if you use music footnotes) - -\def\writ@clefi{\s@l@ctclefs - \p@loop - \setbox\toks@box\hbox{\expandafter\writ@clefp\the\a@c}% - \upd@width\clef@skip\raise\altportee\rlap{% - \ifdim\internote<\Internote \kern\thr@@\Internote\kernm\thr@@\internote \fi - \box\toks@box}\count@portee\repeat} - -\def\writ@clefp#1#2#3#4{% - \ifcase\noport@@\singl@clef#1% - \or \singl@clef#2\or \singl@clef#3\or \singl@clef#4\fi} - -\def\singl@clef#1{\n@iii#1\relax - \ifcase\n@iii - \C@Clef\@ne\trebleclef@var\or - \C@Clef\z@\altoclef@var\or - \C@Clef\@ne\altoclef@var\or - \C@Clef\tw@\altoclef@var\or - \C@Clef\thr@@\altoclef@var\or - \C@Clef\tw@\bassclef@var\or - \C@Clef\thr@@\bassclef@var\or - \C@Clef\f@ur\bassclef@var\or % 7 = subbass - \or - \C@Clef\z@\trebleclef@var % 9 = french violin-clef - \fi -} - -\def\C@Clef#1#2{\n@iii#1\relax\multiply\n@iii\tw@ - \raise\n@iii\internote\hbox{#2}} - -\def\bassclef@var{\expandafter - \ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@ - \bassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi} -\def\trebleclef@var{\expandafter - \ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@ - \trebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi} -\def\altoclef@var{\expandafter - \ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@ - \altoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi} - -\def\smallbassclef@var{\expandafter - \ifx\csname bassc@s\romannumeral\noinstrum@nt\endcsname\z@ - \smallbassclef\else \csname bassc@s\romannumeral\noinstrum@nt\endcsname \fi} -\def\smalltrebleclef@var{\expandafter - \ifx\csname treblec@s\romannumeral\noinstrum@nt\endcsname\z@ - \smalltrebleclef\else \csname treblec@s\romannumeral\noinstrum@nt\endcsname \fi} -\def\smallaltoclef@var{\expandafter - \ifx\csname altoc@s\romannumeral\noinstrum@nt\endcsname\z@ - \smallaltoclef\else \csname altoc@s\romannumeral\noinstrum@nt\endcsname \fi} - - -%% -% Redefine \writ@newclefs similarly -% -% Note that \clef@skip does not change for the different clef -% symbols (always 3.2\Interligne for normal sized clefs) -% Hence there is no need to communicate clef changes to the -% formatting program -%% - -\def\writ@newclefs{\clef@skip\z@ \n@loop{\writ@newclefi}\repeat - \n@skip\clef@skip \widthtyp@\z@ \t@rmskip - \m@loop \s@l@ctclefs \o@c\a@c \repeat} - -% the same as \writ@newclefs, but no spacing - -\def\zwrit@newclefs{\clef@skip\z@ - \setbox\writ@volta@box \hbox{\n@loop{\writ@newclefi}\repeat}% - \kern -\clef@skip \box\writ@volta@box - \kern \clef@skip - \clef@skip\z@ % test - \n@skip\clef@skip - \widthtyp@\z@ - \t@rmskip - \m@loop \s@l@ctclefs \o@c\a@c \repeat} - -% Thanks to Helmut Kopka for helping me out -\def\writ@newclefi{\s@l@ctclefs\p@loop - \setbox\toks@box\hbox{\expandafter\expandafter\expandafter\writ@newclefp - \the\expandafter\a@c\the\o@c}% - \upd@width\clef@skip \writ@box \count@portee\repeat} - -\def\writ@newclefp#1#2#3#4#5#6#7#8{% - \ifcase\noport@@\newsingl@clef#1#5\or \newsingl@clef#2#6\or - \newsingl@clef#3#7\or \newsingl@clef#4#8\fi} - -\def\newsingl@clef#1#2{\n@iii#1\relax \n@ii#2\relax - \ifnum\n@ii=\n@iii - \else - \ifcase\n@iii - \C@Clef\@ne\smalltrebleclef@var\or - \C@Clef\z@\smallaltoclef@var\or - \C@Clef\@ne\smallaltoclef@var\or - \C@Clef\tw@\smallaltoclef@var\or - \C@Clef\thr@@\smallaltoclef@var\or - \C@Clef\tw@\smallbassclef@var \or - \C@Clef\thr@@\smallbassclef@var\or - \C@Clef\f@ur\smallbassclef@var\or % 7 = subbass - \or - \C@Clef\z@\smalltrebleclef@var % 9 = french violin-clef - \fi - \fi} - -%%% instrumentnames - -%\let\Writ@names\empty - -\def\setname#1#2{\n@v#1\relax % select instrument -% \let\Writ@names\writ@names - \expandafter\def\csname instrument\romannumeral\n@v\endcsname{#2}}% [version 1.15] changed from \edef to \def (Hiroaki) - -\def\writ@names{\n@loop - \setbox\toks@box\null\relax - \ifnum\st@ffs>0\relax - \setbox\toks@box\llap{\vbox{\hbox\@to\parindent{% - \hss\csname instrument\romannumeral\noinstrum@nt\endcsname\hss}}\ \ }% - \fi - \altportee\altitude \Comp@High \advance\y@v-\ht\toks@box - \advance\altportee\h@lf\y@v - \writ@box - \repeat} - -%%% - -% les notes proprement dites - -\newdimen\noteskip -\newcount\transpose -\newcount\normaltranspose -\newdimen\locx@skip -\newdimen\elemskip -\newdimen\@l@mskip - -\def\check@staff{% - \ifnum\noport@@>\st@ffs\relax - \ifx\Post@Elims\undefined\else - \immediate\write16{check@staff\space inst=\the\noinstrum@nt\space - staff=\the\noport@@\space st@ffs=\the\st@ffs\space Elim.}\relax - \fi - \ifnum\st@ffs>0\relax - \errmessage{Staff number (\the\noport@@) out of specified range (\the\st@ffs)!}\fi - \else\relax} -%\def\check@staff{\iftrue\relax} - -\let\ifactiveinstrument\check@staff - -\def\nextstaff{\@ndstaff\beginstaff} -\def\nextinstrument{\@ndstaff\begininstrument} -\def\prevstaff{\@ndstaff\advance\noport@@-2\relax\beginstaff} -\def\selectstaff#1{\@ndstaff\noport@@#1\relax - \advance\noport@@ -1\relax\beginstaff} -\def\selectinstrument#1{\@ndstaff\noinstrum@nt#1\relax - \advance\noinstrum@nt -1\relax\begininstrument} - -\def\begininstrument{\advance\noinstrum@nt\@ne \s@l@ctinstr - \ifdim\internote<\p@seven6\Internote \set@tinynotesize \comput@sizes - \else - \ifdim\internote<.95\Internote \set@smallnotesize \comput@sizes - \else - \ifdim\internote<1.19\Internote \set@normalnotesize \comput@sizes - \else - \ifdim\internote<1.43\Internote \set@largenotesize \comput@sizes - \else - \set@Largenotesize \comput@sizes - \fi - \fi - \fi - \fi - \noport@@\z@ \beginstaff} - -\def\beginstaff{\leavevmode - \altportee\altitude \advance\altportee\noport@@\interportee - \count@portee \s@l@ctclefs \expandafter\get@refs\the\a@c - \setbox\n@otebox\hbox\bgroup - \let\rq\rq@ \let\lq\lq@ \let\ds\ds@oup \let\mp\mp@ - \locx@skip\x@skip} - -\def\@ndstaff{\egroup - \ifdim\n@skip<\wd\n@otebox \n@skip\wd\n@otebox \fi - \raise\altportee\rlap{\unhbox\n@otebox}} - -%%% shifting - -\def\offs@t#1{\off{-\s@o@}#1\off\s@o@} -\def\loffset#1{\edef\s@o@{#1\qn@width}\offs@t} -\def\roffset#1{\edef\s@o@{-#1\qn@width}\offs@t} -\def\roff{\roffset\@ne} -\def\loff{\loffset\@ne} -\def\hroff{\roffset\h@lf} -\def\hloff{\loffset\h@lf} - -%%% decode collective coding - -% les symboles de notes ou assimiles - -\newcount\inh@alt -\def\getn@i{\inh@alt\z@ \xgetn@i} -\def\inhgetn@i{\inh@alt\@ne \xgetn@i} - -\def\f@tok#1#2\af@tok{#1} -\def\s@tok#1#2\af@tok{#2} - -% \n@viii used as flag: \n@viii=\maxdimen -> argument is no number - -\def\C@Get{\n@viii\maxdimen \edef\alt@suite{\noexpand\getn@i\s@uite\relax}} -\def\C@GET{\n@viii\maxdimen \edef\alt@suite{% - \ifnum\inh@alt=\z@ \noexpand\@TI{\s@uite}\fi \noexpand\getn@i\s@uite\relax}} - -\def\xgetn@i#1\relax{\n@viii\z@ \n@i\maxdimen % par defaut -%% \edef\t@ruc{\f@tok #1\relax\af@tok}% - \edef\t@ruc{\expandafter\f@tok #1\relax\af@tok}% - \edef\s@uite{\s@tok #1\empty\af@tok}% -%% pas lettre - \ifcat a\t@ruc \n@i\expandafter`\t@ruc\relax -%% ramener au E (position zero en clef de sol, ut@ref=0) - \ifnum\n@i>96\advance\n@i-101% - \else\advance\n@i-\@lxxxiii % ramener au S= E + 14 - \fi - \advance\n@i\ut@ref \advance\n@i\ut@ref \advance\n@i\transpose - \edef\ss@uite{\noexpand\n@fon{\s@uite}}% -%% cas active character dont chiffre - \else - \let\ss@uite\empty - \let\alt@suite\empty - \ifcat 1\t@ruc - \if =\t@ruc \let\@TI\na \C@GET \fi - \if *\t@ruc \sk \C@Get \fi - \if .\t@ruc \let\@TI\pt \C@GET \fi - \if >\t@ruc \let\@TI\dsh \C@GET \fi - \if <\t@ruc \let\@TI\dfl \C@GET \fi - \if !\t@ruc \transpose\normaltranspose \C@Get \fi - \if '\t@ruc \advance\transpose\s@v@n \C@Get \fi - \if `\t@ruc \advance\transpose-\s@v@n \C@Get \fi - \ifnum\n@viii<\maxdimen \n@i#1\fi - \else - \if ^\t@ruc \let\@TI\sh \C@GET \fi - \if _\t@ruc \let\@TI\fl \C@GET \fi - \fi\alt@suite - \fi} - -%%% setting stems and flags - -\newdimen\st@bot % note stem bottom -\newdimen\st@top % note stem top -\newdimen\stem@skip - -\def\stdstemfalse{\let\stdst@m\@ne} - -\def\setst@m{% - \advance\y@i\altportee - \ifdim\st@bot>\y@i \global\st@bot\y@i \fi - \ifdim\st@top<\y@i \global\st@top\y@i \fi - \advance\y@i-\altportee} - -\def\resetst@m{% - \global\st@bot\maxdimen \global\st@top-\maxdimen \let\stdst@m\empty} -\resetst@m - -\def\minst@bot{\ifdim\st@bot>\f@ur\internote - \ifx\stdst@m\empty \st@bot\f@ur\internote \fi \fi} - -\def\maxst@top{\ifdim\st@top<\f@ur\internote - \ifx\stdst@m\empty \st@top\f@ur\internote \fi \fi} - -\def\stem@rule{% - \vrule\@height\st@top\@depth-\st@bot\@width\lthick\kernm\lthick} - -\def\comp@stem{\advance\st@bot-\altportee \advance\st@top-\altportee} - -\def\C@stem{\ifdim\st@top>\st@bot - \comp@stem\kern\stem@skip\stem@rule - \kernm\stem@skip - \fi\resetst@m} - -\def\stemlength#1{\def\stemfactor{#1}} -\def\DefaultStemlength{4.66} -\stemlength{\DefaultStemlength} - -% cut stems in extrem positions for multiple voices in one staff - -\def\stemcut{\let\st@mcut\empty} -\def\nostemcut{\let\st@mcut\@ne} -\stemcut - -\def\Box@Flag{\setbox\ch@box\hbox{\musixfont\char\n@vii}\y@v\ht\ch@box } - -\def\down@flag{\Box@Flag\advance\st@bot-\y@v - \advance\st@bot-\stemfactor\interbeam - \advance\st@bot\DefaultStemlength\interbeam - \ifdim\st@top>\st@bot \comp@stem\minst@bot - \stem@rule\raise\st@bot\box\ch@box \fi\resetst@m} - -\def\up@flag{\Box@Flag\advance\st@top\y@v - \advance\st@top\stemfactor\interbeam - \advance\st@top-\DefaultStemlength\interbeam - \ifdim\st@top>\st@bot \comp@stem\maxst@top - \kern\qd@skip\stem@rule\advance\st@top-\y@v \raise\st@top\box\ch@box% - \kernm\qd@skip \fi\resetst@m} - -\def\cutst@l#1{% - \ifdim\st@bot<-#1\internote \advance\st@bot\qu@rt\interbeam \fi} - -\def\downst@m{\stem@skip\z@ - \advance\st@bot-\stemfactor\interbeam - \advance\st@bot-\altportee - \ifx\st@mcut\empty - \ifdim\st@bot<-\thr@@\internote - \cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@ - \cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi - \minst@bot\advance\st@bot\altportee - \C@stem} - -\def\cutst@u#1{% - \ifdim\st@top>#1\internote \advance\st@top-\qu@rt\interbeam \fi} - -\def\upst@m{\stem@skip\qd@skip - \advance\st@top\stemfactor\interbeam - \advance\st@top-\altportee - \ifx\st@mcut\empty - \ifdim\st@top>\@l@v@n\internote - \cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active - \cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi - \maxst@top\advance\st@top\altportee - \C@stem} - -\newdimen\s@lope - -\def\comp@slope#1{\s@lope\b@p#1\divide\s@lope\tw@nty} - -\def\beamst@m{% queue de note vers une poutre - \getcurpos \advance\y@v-\b@x - \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z - \ifdim\y@ii>\st@top % la poutre est au-dessus - \stem@skip\qd@skip \comp@slope\stem@skip \advance\y@ii\s@lope - \advance\y@ii .285\interbeam% version 1.18 RDT - \ifnum\b@n>\z@ \advance\y@ii\b@n\interbeam \advance\y@ii-\interbeam \fi - \st@top\y@ii % a mettre a jour avec la pente ulterieurement - \else - \advance\y@ii-.285\interbeam% version 1.18 RDT - \stem@skip\z@ - \ifdim\y@ii<\st@bot - \ifnum\b@n<\z@ \advance\y@ii\b@n\interbeam \advance\y@ii\interbeam \fi - \st@bot\y@ii \fi \fi - \C@stem} - -%%% writing notes inclusive lines (subsidiary lines ?) (german: Hilfslinien) - -\newif\ifadvance\advancetrue - -% Modification by Werner Icking -% ledger lines exceed the note by: y@vi := 0.35 (noteskip - notewidth) -% and: 0.5 qn@width > y@vi > 0.2 qn@width -\newdimen\y@vi -\def\h@linei{% - \y@ii\n@v\internote - \y@iii\y@ii - \advance\y@ii\hlthick - \advance\y@iii-\hlthick - \y@vi\noteskip % noteskip -%-\ifnum\y@vi=\z@ \y@vi\maxdimen\fi % (or maxdimen if noteskip = 0) - \advance\y@vi-\y@v % - notewidth - \y@vi0.7\y@vi % this may be eaten =: additional length - \y@iv\h@lf\qn@width\ifnum\y@vi>\y@iv \y@vi\y@iv\fi % not more than 0.5 qn@width - \y@iv0.2\qn@width \ifnum\y@vi<\y@iv \y@vi\y@iv\fi % not less than 0.2 qn@width - \y@iv\y@v % notewidth - \advance\y@iv\y@vi % + additional length =: total length - \kernm\h@lf\y@vi % center the ledger line -%-\message{noteskip = \the\noteskip, length = \the\y@iv, notewidth = \the\y@v}% - \vrule\@height\y@ii\@depth-\y@iii\@width\y@iv - \kernm\y@iv\kern\h@lf\y@vi} - -% end Werner Icking's modification of ledger lines. -% old behaviour can be restored with musixfll.tex (or musixfll.sty) - -\def\writ@note{% - \ifnum\n@i<\@c -% help lines \n@i (position) - \ifnum\nblines>\thr@@ % no help lines for percussion instruments - \n@v\z@ - \ifnum\n@i<\m@ne % waste memory, but saves time - \loop \advance\n@v\m@ne \ifnum\n@i<\n@v - \advance\n@v\m@ne \h@linei - \repeat - \else - \n@v\nblines \advance\n@v\m@ne \multiply\n@v\tw@ - \ifnum\n@i>\n@v - \loop \advance\n@v\@ne \ifnum\n@i>\n@v - \advance\n@v\@ne \h@linei - \repeat - \fi - \fi - \fi -% - \pl@base\setst@m\st@m - \ifadvance \raise\y@i\adv@box\n@sym \else \raise\y@i\hbox{\n@sym}\fi - \ss@uite \advancetrue - \fi} - -\def\adv@box#1{\hbox\@to\noteskip{#1\hss}\advance\locx@skip\noteskip} - -%%% breve, longa, maxima, arbitrary notes, non spacing - -\def\zmaxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \advancefalse \g@w} -\def\zlonga{\def\w@h{\musixchar39}\y@v\wn@width \advancefalse \g@w} -\def\zbreve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \advancefalse \g@w} -\def\zwq{\def\w@h{\musixchar56}\y@v\wn@width \advancefalse \g@w} -\def\zwqq{\def\w@h{\musixchar127}\y@v\wn@width \advancefalse \g@w} - -\def\g@w#1{\let\st@m\resetst@m - \check@staff - \getn@i#1\relax\let\n@fon\g@w \let\n@sym\w@h \writ@note - \fi} - -\def\maxima{\def\w@h{\musixchar36}\y@v\tw@\wn@width \g@w} -\def\longa{\def\w@h{\musixchar39}\y@v\wn@width \g@w} -\def\breve{\def\w@h{\musixfont\@xxxii}\y@v\wn@width \g@w} -\def\wq{\def\w@h{\musixchar56}\y@v\wn@width \g@w} -\def\wqq{\def\w@h{\musixchar127}\y@v\wn@width \g@w} - -%%% alternate longa (with up stem) by Ingo Struck -%%% struck@student.uni-siegen.de - -\def\lngdnst@m{\stem@skip1.25\qd@skip - \advance\st@bot-\stemfactor\interbeam - \advance\st@bot-\altportee - \ifx\st@mcut\empty - \ifdim\st@bot<-\thr@@\internote - \cutst@l\thr@@\cutst@l\f@ur\cutst@l\fiv@ - \cutst@l\si@\cutst@l\s@v@n\cutst@l\@ight \fi \fi - \minst@bot\advance\st@bot\altportee - \C@stem} - -\def\lngupst@m{\stem@skip1.25\qd@skip - \advance\st@top\stemfactor\interbeam - \advance\st@top-\altportee - \ifx\st@mcut\empty - \ifdim\st@top>\@l@v@n\internote - \cutst@u\@l@v@n\cutst@u\tw@lv@\cutst@u\active - \cutst@u\fourt@@n\cutst@u\fiv@t@@n\cutst@u\sixt@@n \fi \fi - \maxst@top\advance\st@top\altportee - \C@stem} - -\def\@longa#1{\getn@i#1\relax - \ifnum\n@i>\thr@@ - \let\st@m\lngdnst@m - \else - \let\st@m\lngupst@m - \fi - \let\n@fon\@longa \let\n@sym\q@u \y@v\qn@width \writ@note} - -\def\l@ngasymbol{\def\q@u{\musixfont\@xxxii}} - -\def\longaa{\l@ngasymbol\@longa} - -%%% whole notes - -\def\C@Point#1#2{\ifodd\n@i \else#2\internote \fi\hbox{\musixchar#1}} - -\def\wh{\def\w@h{\musixfont\nin@}\y@v\wn@width \g@w} -\def\whp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\z@\raise}}% - \y@v\wn@width \g@w} -\def\whpp{\def\w@h{\musixfont\nin@\roffset\qu@rt{\C@Point\@ne\raise}}% - \y@v\wn@width \g@w} - -%%% whole noteheads, no advance - -\def\zw{\advancefalse\wh} -\def\zwp{\advancefalse\whp} -\def\zwpp{\advancefalse\whpp} -\let\zwh\zw - -\def\lw#1{\kernm\wn@width\zw{#1}\kern\wn@width} -\def\rw#1{\kern\wn@width\zw{#1}\kernm\wn@width} -\def\lwp#1{\kernm\wn@width\zwp{#1}\kern\wn@width} -\def\rwp#1{\kern\wn@width\zwp{#1}\kernm\wn@width} -\def\lwpp#1{\kernm\wn@width\zwpp{#1}\kern\wn@width} -\def\rwpp#1{\kern\wn@width\zwpp{#1}\kernm\wn@width} - -%%% common routines for noteheads with the same width as a quarter note - -\def\@qa#1{\getn@i#1\relax - \ifnum\n@i>\thr@@ - \let\st@m\downst@m - \else - \let\st@m\upst@m - \fi - \check@staff % version 1.16 - \let\n@fon\@qa \let\n@sym\q@u \y@v\qn@width \writ@note - \fi} - -\def\@qu{\let\st@m\upst@m \g@q} -\def\@ql{\let\st@m\downst@m \g@q} -\def\@zq{\let\st@m\setst@m \advancefalse\g@q} -\def\@nq{\let\st@m\resetst@m \g@q} - -\def\g@q#1{\check@staff - \getn@i#1\relax\let\n@fon\g@q \let\n@sym\q@u - \y@v\qn@width \writ@note\fi} - -\def\@qup{\let\st@m\upst@m \g@qp} -\def\@qlp{\let\st@m\downst@m \g@qp} -\def\@zqp{\let\st@m\setst@m \advancefalse\g@qp} -\def\@nqp{\let\st@m\resetst@m \g@qp} - -\def\q@up{\q@u\C@Point\z@\raise} -\def\g@qp#1{\check@staff - \getn@i#1\relax\let\n@fon\g@qp \let\n@sym\q@up - \y@v\qn@width \writ@note\fi} - -\def\@qupp{\let\st@m\upst@m \g@qpp} -\def\@qlpp{\let\st@m\downst@m \g@qpp} -\def\@zqpp{\let\st@m\setst@m \advancefalse\g@qpp} -\def\@nqpp{\let\st@m\resetst@m \g@qpp} - -\def\q@upp{\q@u\C@Point\@ne\raise} -\def\g@qpp#1{\check@staff - \getn@i#1\relax\let\n@fon\g@qpp \let\n@sym\q@upp - \y@v\qn@width \writ@note\fi} - -\def\@lqu#1{\kernm\qn@width\advancefalse\@qu{#1}\kern\qn@width} -\def\@rqu#1{\kern\qn@width\advancefalse\@qu{#1}\kernm\qn@width} - -\def\@lql#1{\kernm\qn@width\advancefalse\@ql{#1}\kern\qn@width} -\def\@rql#1{\kern\qn@width\advancefalse\@ql{#1}\kernm\qn@width} - -\def\@lq#1{\kernm\qn@width\@zq{#1}\kern\qn@width} -\def\@rq#1{\kern\qn@width\@zq{#1}\kernm\qn@width} - -\def\@qb#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@q} -\def\@tqb#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick \let\st@m\beamst@m \g@q} -\def\@tqh#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width \let\st@m\beamst@m \g@q} -\def\@qbp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qp} -\def\@qbpp#1{\s@l@ctbeam#1\relax \let\st@m\beamst@m \g@qpp} - -\def\@ca{\n@iv\@xlv \@mca} -\def\@cca{\n@iv46 \@mca} -\def\@ccca{\n@iv47 \@mca} -\def\@cccca{\n@iv48 \@mca} -\def\@ccccca{\n@iv49 \@mca} - -\def\@mca#1{\getn@i#1\relax \n@vii\n@iv - \ifnum\n@i>\thr@@ - \let\st@m\down@flag - \else - \let\st@m\up@flag \advance\n@vii -\fiv@\relax - \fi - \check@staff % version 1.16 - \let\n@fon\@mca \let\n@sym\q@u \y@v\qn@width \writ@note - \fi} - -\def\@cu{\n@vii\@xl \let\st@m\up@flag \g@q} -\def\@ccu{\n@vii\@xli \let\st@m\up@flag \g@q} -\def\@cccu{\n@vii42\let\st@m\up@flag \g@q} -\def\@ccccu{\n@vii43\let\st@m\up@flag \g@q} -\def\@cccccu{\n@vii44\let\st@m\up@flag \g@q} - -\def\@cl{\n@vii\@xlv \let\st@m\down@flag \g@q} -\def\@ccl{\n@vii46\let\st@m\down@flag \g@q} -\def\@cccl{\n@vii47\let\st@m\down@flag \g@q} -\def\@ccccl{\n@vii48\let\st@m\down@flag \g@q} -\def\@cccccl{\n@vii49\let\st@m\down@flag \g@q} - -\def\@cup{\n@vii\@xl \let\st@m\up@flag \g@qp} -\def\@ccup{\n@vii\@xli \let\st@m\up@flag \g@qp} -\def\@clp{\n@vii\@xlv \let\st@m\down@flag \g@qp} -\def\@cclp{\n@vii46\let\st@m\down@flag \g@qp} - - -\def\@cupp{\n@vii\@xl \let\st@m\up@flag \g@qpp} -\def\@clpp{\n@vii\@xlv \let\st@m\down@flag \g@qpp} - -%%% half notes - -\def\h@symbol{\def\q@u{\musixfont\@ight}} - -\def\ha{\h@symbol\@qa} -\def\hu{\h@symbol\@qu} -\def\hup{\h@symbol\@qup} -\def\hupp{\h@symbol\@qupp} - -\def\hl{\h@symbol\@ql} -\def\hlp{\h@symbol\@qlp} -\def\hlpp{\h@symbol\@qlpp} - -\def\hb{\h@symbol\@qb} - -\def\zh{\h@symbol\@zq} -\def\zhp{\h@symbol\@zqp} -\def\zhpp{\h@symbol\@zqpp} - -\def\lh{\h@symbol\@lq} -\def\rh{\h@symbol\@rq} - -\def\zhu{\advancefalse\hu} -\def\zhup{\advancefalse\hup} -\def\zhupp{\advancefalse\hupp} - -\def\lhu{\h@symbol\@lqu} -\def\rhu{\h@symbol\@rqu} - -\def\zhl{\advancefalse\hl} -\def\zhlp{\advancefalse\hlp} -\def\zhlpp{\advancefalse\hlpp} - -\def\lhl{\h@symbol\@lql} -\def\rhl{\h@symbol\@rql} - -\def\lhp#1{\loff{\zhp{#1}}} -\def\rhp#1{\roff{\zhp{#1}}} -\def\lhpp#1{\loff{\zhpp{#1}}} -\def\rhpp#1{\roff{\zhpp{#1}}} - -%%% quarter notes, stem up - -\def\q@symbol{\def\q@u{\musixfont\s@v@n}} - -\def\qa{\q@symbol\@qa} - -\def\qu{\q@symbol\@qu} -\def\qup{\q@symbol\@qup} -\def\qupp{\q@symbol\@qupp} - -%%% quarter notes, stem down - -\def\ql{\q@symbol\@ql} -\def\qlp{\q@symbol\@qlp} -\def\qlpp{\q@symbol\@qlpp} - -%%% quarter notes, stem up, no advance - -\def\zqu{\advancefalse\qu} -\def\zqup{\advancefalse\qup} -\def\zqupp{\advancefalse\qupp} - -\def\lqu{\q@symbol\@lqu} -\def\rqu{\q@symbol\@rqu} - -%%% quarter notes, stem down, no advance - -\def\zql{\advancefalse\ql} -\def\zqlp{\advancefalse\qlp} -\def\zqlpp{\advancefalse\qlpp} - -\def\lql{\q@symbol\@lql} -\def\rql{\q@symbol\@rql} - -%%% quarter noteheads, no advance - -\def\zq{\q@symbol\@zq} -\def\zqp{\q@symbol\@zqp} -\def\zqpp{\q@symbol\@zqpp} - -\def\lqp#1{\loff{\zqp{#1}}}% -\def\lqpp#1{\loff{\zqpp{#1}}}% -\def\rqp#1{\roff{\zqp{#1}}}% -\def\rqpp#1{\roff{\zqpp{#1}}}% - -\def\lq@{\q@symbol\@lq} -\def\rq@{\q@symbol\@rq} - -% -% note heads without stems -\def\nh{\h@symbol\@nq} -\def\nq{\q@symbol\@nq} -\def\znh{\advancefalse\nh} -\def\znq{\advancefalse\nq} - -%%% 8th, 16th, 32th, 64th, (128th) notes - -\def\ca{\q@symbol\@ca} -\def\cca{\q@symbol\@cca} -\def\ccca{\q@symbol\@ccca} -\def\cccca{\q@symbol\@cccca} -\def\ccccca{\q@symbol\@ccccca} - -\def\cu{\q@symbol\@cu} -\def\ccu{\q@symbol\@ccu} -\def\cccu{\q@symbol\@cccu} -\def\ccccu{\q@symbol\@ccccu} -\def\cccccu{\q@symbol\@cccccu} - -\def\cup{\q@symbol\@cup} -\def\ccup{\q@symbol\@ccup} -\def\cupp{\q@symbol\@cupp} - -\def\zcu{\advancefalse\cu} -\def\zccu{\advancefalse\ccu} -\def\zcccu{\advancefalse\cccu} -\def\zccccu{\advancefalse\ccccu} -\def\zcccccu{\advancefalse\cccccu} - -\def\lcu#1{\kernm\qn@width\zcu{#1}\kern\qn@width} -\def\rcu#1{\kern\qn@width\zcu{#1}\kernm\qn@width} - -\def\zcup{\advancefalse\cup} -\def\zccup{\advancefalse\ccup} -\def\zcupp{\advancefalse\cupp} - -\def\cl{\q@symbol\@cl} -\def\ccl{\q@symbol\@ccl} -\def\cccl{\q@symbol\@cccl} -\def\ccccl{\q@symbol\@ccccl} -\def\cccccl{\q@symbol\@cccccl} - -\def\clp{\q@symbol\@clp} -\def\cclp{\q@symbol\@cclp} -\def\clpp{\q@symbol\@clpp} - -\def\zcl{\advancefalse\cl} -\def\zccl{\advancefalse\ccl} -\def\zcccl{\advancefalse\cccl} -\def\zccccl{\advancefalse\ccccl} -\def\zcccccl{\advancefalse\cccccl} - -\def\zclp{\advancefalse\clp} -\def\zcclp{\advancefalse\cclp} -\def\zclpp{\advancefalse\clpp} - -\def\lcl#1{\kernm\qn@width\zcl{#1}\kern\qn@width} -\def\rcl#1{\kern\qn@width\zcl{#1}\kernm\qn@width} - -%%% beam notes - -\def\qb{\q@symbol\@qb} -\def\qbp{\q@symbol\@qbp} -\def\qbpp{\q@symbol\@qbpp} - -\def\zqb{\advancefalse\qb} -\def\zqbp{\advancefalse\qbp} -\def\zqbpp{\advancefalse\qbpp} - -\def\tqh{\q@symbol\@tqh} -\def\tqu{\q@symbol\@tqh} % version 1.16 RDT -\def\tqb{\q@symbol\@tqb} -\def\tql{\q@symbol\@tqb} % version 1.16 RDT -\def\tqqh#1#2{\tbbu{#1}\tqh{#1}{#2}} % version 1.17 RDT -\def\tqqu#1#2{\tbbu{#1}\tqu{#1}{#2}} % version 1.17 RDT -\def\tqqb#1#2{\tbbl{#1}\tqb{#1}{#2}} % version 1.17 RDT -\def\tqql#1#2{\tbbl{#1}\tql{#1}{#2}} % version 1.17 RDT -\def\tqqqh#1#2{\tbbbu{#1}\tqqh{#1}{#2}} % version 1.17 RDT -\def\tqqqu#1#2{\tbbbu{#1}\tqqu{#1}{#2}} % version 1.17 RDT -\def\tqqqb#1#2{\tbbbl{#1}\tqqb{#1}{#2}} % version 1.17 RDT -\def\tqqql#1#2{\tbbbl{#1}\tqql{#1}{#2}} % version 1.17 RDT - -\def\ztqh{\advancefalse\q@symbol\@tqh} -\def\ztqu{\advancefalse\q@symbol\@tqh} % version 1.16 RDT -\def\ztqb{\advancefalse\q@symbol\@tqb} -\def\ztql{\advancefalse\q@symbol\@tqb} % version 1.16 RDT - -%%% grace notes - -\def\grcu{\q@symbol\@grcu} -\def\grcl{\q@symbol\@grcl} - -\def\@grcu{\n@vii\tw@lv@ \let\st@m\up@flag \g@q} -\def\@grcl{\n@vii\active \let\st@m\down@flag \g@q} - -%%% starting beams - -% \ibu{0<=numero<10}{altitude~note}{pente de -9 a +9} -% \ibl{0<=numero<10}{altitude~note}{pente de -9 a +9} - -% \b@p slope (-9) - (9) -% \b@n number of pending beamlines (-4) - (4) - -\def\test@beamnum{% [version 1.15] new macro to make it independent from slur - \ifnum\n@i<\z@ \n@i\@c \fi - \ifnum\n@i<\maxinstruments \else - \count@\maxinstruments \advance\count@\m@ne - \errmessage{Wrong beam reference number \the\n@i! (valid: 0 to \the\count@)} - \n@i\z@ - \fi - \advance\n@i\@ne}% - -\def\s@l@ctbeam#1\relax{% - \n@i#1\relax\test@beamnum % [version 1.15] make it independent from slur - \edef\b@x{\csname b@x\romannumeral\n@i\endcsname}% - \edef\b@z{\csname b@z\romannumeral\n@i\endcsname}% - \edef\b@n{\csname b@n\romannumeral\n@i\endcsname}% - \edef\b@p{\csname b@p\romannumeral\n@i\endcsname}} - -\def\s@l@ctc{\edef\c@x{\csname c@x\romannumeral\n@i\endcsname}% - \edef\c@z{\csname c@z\romannumeral\n@i\endcsname}} - -\def\s@l@ctd{\edef\d@x{\csname d@x\romannumeral\n@i\endcsname}% - \edef\d@z{\csname d@z\romannumeral\n@i\endcsname}\s@l@ctc} - -\def\s@l@cte{\edef\e@x{\csname e@x\romannumeral\n@i\endcsname}% - \edef\e@z{\csname e@z\romannumeral\n@i\endcsname}\s@l@ctd} - -\def\s@l@ctf{\edef\f@x{\csname f@x\romannumeral\n@i\endcsname}% - \edef\f@z{\csname f@z\romannumeral\n@i\endcsname}\s@l@cte} - -\def\s@l@ctg{\edef\g@x{\csname g@x\romannumeral\n@i\endcsname}% - \edef\g@z{\csname g@z\romannumeral\n@i\endcsname}\s@l@ctf} - -\def\ibu#1{\s@l@ctbeam#1\relax \i@bu} -\def\ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbu} -\def\ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbu} -\def\ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbu} -\def\ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbu} - -\def\ibl#1{\s@l@ctbeam#1\relax \i@bl} -\def\ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \i@bbl} -\def\ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \i@bbbl} -\def\ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \i@bbbbl} -\def\ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf \i@bbbbbl} - -\def\i@bu#1#2{%\check@staff - \ifnum\b@n=\z@ \else \C@tb\t@bbu\qn@width \fi \global\b@n\m@ne - \inhgetn@i#1\relax \n@v#2 \C@ib+\global\advance\b@x\qd@skip} - -\def\i@bl#1#2{%\check@staff - \ifnum\b@n=\z@ \else \C@tb\t@bbl\lthick \fi \global\b@n\@ne - \inhgetn@i#1\relax \n@v#2 \C@ib-} - -\def\C@ib#1{\max@n@v\nin@\min@n@v{-\nin@}\global\b@p\n@v % clip slope number - \getcurpos \global\b@x\y@v \b@z#14.333\interbeam \advance\b@z\altportee - \pl@base \global\advance\b@z\y@i} - -\def\C@ba#1#2{\global\advance#1#2\interbeam} - -\def\i@bbu#1#2{\ifnum\b@n=\z@ \i@bu{#1}{#2}\C@ba\b@z\@ne \fi\n@bbu} -\def\i@bbl#1#2{\ifnum\b@n=\z@ \i@bl{#1}{#2}\C@ba\b@z\m@ne \fi\n@bbl} - -\def\i@bbbu#1#2{\ifnum\b@n=\z@ - \i@bbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \fi\n@bbbu} -\def\i@bbbl#1#2{\ifnum\b@n=\z@ - \i@bbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \fi\n@bbbl} - -\def\i@bbbbu#1#2{\ifnum\b@n=\z@ - \i@bbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \fi\n@bbbbu} -\def\i@bbbbl#1#2{\ifnum\b@n=\z@ - \i@bbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \fi\n@bbbbl} - -\def\i@bbbbbu#1#2{\ifnum\b@n=\z@ - \i@bbbbu{#1}{#2}\C@ba\b@z\@ne \C@ba\c@z\@ne \C@ba\d@z\@ne \C@ba\e@z\@ne \fi\n@bbbbbu} -\def\i@bbbbbl#1#2{\ifnum\b@n=\z@ - \i@bbbbl{#1}{#2}\C@ba\b@z\m@ne \C@ba\c@z\m@ne \C@ba\d@z\m@ne \C@ba\e@z\m@ne \fi\n@bbbbbl} - -%%% changing beams - -\def\Dec@b#1#2{\ifnum\b@n=#1#2\fi\ifnum\b@n=-#1#2\fi} - -%!\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbu \fi \fi } -%!\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \ifnum\b@n>-\tw@ \ifnum\b@n<\tw@ \n@bbl \fi \fi } - -\def\nbbu#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbu} -\def\nbbl#1{\s@l@ctbeam#1\relax \s@l@ctc \n@bbl} - -\def\nbbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu} -\def\nbbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl} - -\def\nbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte - \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu} -\def\nbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte - \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl} - -\def\nbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctf - \Dec@b\@ne\n@bbu \Dec@b\tw@\n@bbbu \Dec@b\thr@@\n@bbbbu \Dec@b\f@ur\n@bbbbbu} -\def\nbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctf - \Dec@b\@ne\n@bbl \Dec@b\tw@\n@bbbl \Dec@b\thr@@\n@bbbbl \Dec@b\f@ur\n@bbbbbl} - -\def\n@bbu{\C@nb\c@z\c@x\@ne\qd@skip} -\def\n@bbl{\C@nb\c@z\c@x\@ne\z@} -\def\n@bbbu{\C@nb\d@z\d@x\tw@\qd@skip} -\def\n@bbbl{\C@nb\d@z\d@x\tw@\z@} -\def\n@bbbbu{\C@nb\e@z\e@x\thr@@\qd@skip} -\def\n@bbbbl{\C@nb\e@z\e@x\thr@@\z@} -\def\n@bbbbbu{\C@nb\f@z\f@x\f@ur\qd@skip} -\def\n@bbbbbl{\C@nb\f@z\f@x\f@ur\z@} - -\def\C@nb#1#2#3#4{% - \global#1\b@z - \ifnum\b@n<\z@ \global\advance\b@n\m@ne \global\advance#1-#3\interbeam \fi - \ifnum\b@n>\z@ \global\advance\b@n\@ne \C@ba#1#3\fi - {\advance\locx@skip#4\getcurpos \global#2\y@v - \advance\y@v-\b@x \comp@slope\y@v \global\advance#1\s@lope}} - -%%% beam termination - -\def\b@adjust{\ifdim\y@ii>\tw@\y@ \advance\y@\y@ \advance\n@vi\@ne \fi} - -\def\@beam{% \y@ii : longueur, \b@p : pente, \y@i : altitude - \ifnum\b@p=\z@ -% slope zero - \y@iii\y@i\y@iv\y@i - \advance\y@iii-\b@amthick \advance\y@iv\b@amthick - \vrule\@height\y@iv\@depth-\y@iii\@width\y@ii - \else\n@vi\z@ -% slope offset - \ifnum\b@p>\z@ \n@vi\b@p \multiply\n@vi\si@ \advance\n@vi-\si@ \fi - \ifnum\b@p<\z@ \n@vi-\b@p \multiply\n@vi\si@ \advance\n@vi58\fi -% find longest possible character to avoid patchwork - \y@\tw@\p@ - \b@adjust \b@adjust \b@adjust \b@adjust \b@adjust - \advance\n@vi\@cxxviii - \chardef\b@alk\n@vi\musixfont -% -% \curwidth=0pt \curheight=\y@i \curxpos=\completewidth -% \loop\ifdim\curwidth<\completewidth -% \advance\curxpos by -\beamwidth -% \ifdim\curxpos<0pt -% \comp@slope\curxpos -% \advance\curheight by \s@lope \kern\curxpos \fi -% \raise\curheight\hbox{\b@alk}% -% \advance\curwidth by \beamwidth -% \comp@slope\beamwidth -% \advance\curheight by \s@lope -% \repeat \fi -% - \y@iv\z@ \y@iii\y@i \y@v\y@ii - \loop\ifdim\y@iv<\y@ii - \advance\y@v-\y@ - \ifdim\y@v<\z@ \comp@slope\y@v \advance\y@iii\s@lope \kern\y@v \fi - \raise\y@iii\hbox{\b@alk}% - \advance\y@iv\y@ \comp@slope\y@ \advance\y@iii\s@lope - \repeat \fi} - -\def\s@l@ctcde{\s@l@ctc \s@l@ctd \s@l@cte \s@l@ctf } - -\def\tbu#1{\s@l@ctbeam#1\relax \C@tb\t@bbu\qn@width } -\def\tbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbu} -\def\tbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbu} -\def\tbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbu} -\def\tbbbbbu#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbu} - -\def\tbl#1{\s@l@ctbeam#1\relax \C@tb\t@bbl\lthick } -\def\tbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbl} -\def\tbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbl} -\def\tbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbl} -\def\tbbbbbl#1{\s@l@ctbeam#1\relax \s@l@ctcde \t@bbbbbl} - -\def\beam@pos#1{\getcurpos\y@ii\y@v\advance\y@ii-#1} - -\def\C@tb#1#2{% - \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi - \ifcase\n@ii \or \or \s@l@ctc \or \s@l@ctd \or \s@l@cte \or \s@l@ctf \or \s@l@ctg\fi - \ifnum\b@n<\m@ne #1\fi - \ifnum\b@n>\@ne #1\fi - \y@i\b@z \advance\y@i-\altportee \beam@pos\b@x - \advance\y@ii#2\relax - \check@staff - \llap{\@beam\kernm#2}\relax - \fi\global\b@n\z@} - -\def\t@bbu{\n@v\tw@ \C@b\t@bbbu\n@bbu\y@i\c@z \beam@pos\c@x \t@xbu} -\def\t@bbl{\n@v\tw@ \C@b\t@bbbl\n@bbl\y@i\c@z \beam@pos\c@x \t@xbl} - -\def\t@bbbu{\n@v\thr@@ \C@b\t@bbbbu\n@bbbu\y@i\d@z \beam@pos\d@x \t@xbu} -\def\t@bbbl{\n@v\thr@@ \C@b\t@bbbbl\n@bbbl\y@i\d@z \beam@pos\d@x \t@xbl} - -\def\t@bbbbu{\n@v\f@ur \C@b\t@bbbbbu\n@bbbbu\y@i\e@z \beam@pos\e@x \t@xbu} -\def\t@bbbbl{\n@v\f@ur \C@b\t@bbbbbl\n@bbbbl\y@i\e@z \beam@pos\e@x \t@xbl} - -\def\t@bbbbbu{\n@v\fiv@ \C@b\empty\n@bbbbbu\y@i\f@z \beam@pos\f@x \t@xbu} -\def\t@bbbbbl{\n@v\fiv@ \C@b\empty\n@bbbbbl\y@i\f@z \beam@pos\f@x \t@xbl} - -\def\C@b#1#2{% - \n@ii\b@n \ifnum\n@ii<\z@ \n@ii-\n@ii \fi - \ifnum\n@ii>\n@v #1\fi - \loop - \advance\n@v\m@ne - \ifnum\n@ii=\n@v {\advance\locx@skip-\qn@width#2}\fi - \ifnum\n@v>\@ne \repeat} - -\def\t@xbu{\C@txb\qn@width\interbeam\b@amthick\qd@skip>} -\def\t@xbl{\C@txb\lthick\b@amthick\interbeam\hlthick<} - -\def\C@txb#1#2#3#4#5{\advance\y@i-\altportee - \advance\y@ii#1\relax - \check@staff - \llap{\@beam\kernm#1}% - \ifnum\b@n#5\z@ \comp@slope\y@ii \advance\y@i\s@lope - \raise\y@i\rlap{\kern#4\vrule\@height#3\@depth#2\@width\lthick}\relax - \fi - \fi - \ifnum\b@n<\z@ \global\advance\b@n\@ne \fi - \ifnum\b@n>\z@ \global\advance\b@n\m@ne \fi} - -%%% semiautomatic beams - -% adjustable beam slopes -% #1: beam number -% #2: starting pitch -% #3: ending pitch, -% #4: extension (number of \noteskip's) - -\def\Ibu#1{\s@l@ctbeam#1\relax\I@bu\i@bu} -\def\Ibl#1{\s@l@ctbeam#1\relax\I@bl\i@bl} -\def\Ibbu#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bu\i@bbu} -\def\Ibbl#1{\s@l@ctbeam#1\relax \s@l@ctc \I@bl\i@bbl} -\def\Ibbbu#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bu\i@bbbu} -\def\Ibbbl#1{\s@l@ctbeam#1\relax \s@l@ctd \I@bl\i@bbbl} -\def\Ibbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbu} -\def\Ibbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbl} -\def\Ibbbbbu#1{\s@l@ctbeam#1\relax \s@l@cte \I@bu\i@bbbbbu} -\def\Ibbbbbl#1{\s@l@ctbeam#1\relax \s@l@cte \I@bl\i@bbbbbl} - -% compute altitude difference of tried beam in \y@iv -% and compare with notes altitude difference - -\def\@@chk{\y@iv.05\y@v \multiply\y@iv\n@viii} - -\def\I@buuchk{\@@chk - \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@buuchk \fi - \ifnum\n@viii>\nin@ \advance\n@i\@ne \advance\n@ii\m@ne \I@buuchk \fi} - -\def\I@bldchk{\@@chk - \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@bldchk \fi - \ifnum\n@viii<-\nin@ \advance\n@i\m@ne \advance\n@ii\@ne \I@bldchk \fi} - -\def\I@budchk{\@@chk - \ifdim\y@iv<\n@ii\internote \advance\n@viii\@ne \I@budchk \fi} - -\def\I@bluchk{\@@chk - \ifdim\y@iv>\n@ii\internote \advance\n@viii\m@ne \I@bluchk \fi} - -\def\I@bu{\let\@Ti\I@buuchk \let\@Tii\I@budchk \C@Ib} -\def\I@bl{\let\@Ti\I@bluchk \let\@Tii\I@bldchk \C@Ib} - -\def\C@Ib#1#2#3#4{{\n@v#4\relax \min@n@v\@ne - \inhgetn@i#3\relax\n@ii\n@i - \inhgetn@i#2\relax\advance\n@ii-\n@i - \y@v\noteskip \multiply\y@v\n@v - \ifnum\n@ii=\z@ #1{#2}0% - \else - \ifnum\n@ii>\z@ \n@viii\t@n \@Ti\else\n@viii-\t@n \@Tii \fi - \edef\I@boper{\noexpand#1{\the\n@i}{\the\n@viii}\relax}\I@boper - \fi}} - -% sets of double notes with computed slopes - -\def\B@h{\let\B@ii\tqh} -\def\B@b{\let\B@ii\tqb} - -\def\Dqbu{\let\B@i\Ibu \B@h\C@Dq} -\def\Dqbl{\let\B@i\Ibl \B@b\C@Dq} -\def\Dqbbu{\let\B@i\Ibbu \B@h\C@Dq} -\def\Dqbbl{\let\B@i\Ibbl \B@b\C@Dq} - -\def\C@Dq#1#2{\B@i0{#1}{#2}1\qb0{#1}\B@ii0{#2}} - -% sets of triple notes with computed slopes - -\def\Tqbu{\let\B@i\Ibu \B@h\C@Tq} -\def\Tqbl{\let\B@i\Ibl \B@b\C@Tq} -\def\Tqbbu{\let\B@i\Ibbu \B@h\C@Tq} -\def\Tqbbl{\let\B@i\Ibbl \B@b\C@Tq} - -\def\C@Tq#1#2#3{\B@i0{#1}{#3}2\qb0{#1#2}\B@ii0{#3}} - -% sets of quadruple notes with computed slopes - -\def\Qqbu{\let\B@i\Ibu \B@h\C@Qq} -\def\Qqbl{\let\B@i\Ibl \B@b\C@Qq} -\def\Qqbbu{\let\B@i\Ibbu \B@h\C@Qq} -\def\Qqbbl{\let\B@i\Ibbl \B@b\C@Qq} - -\def\C@Qq#1#2#3#4{\B@i0{#1}{#4}3\qb0{#1#2#3}\B@ii0{#4}} - -%%% duration points - -\def\pt{\g@pt\@ne\z@} -\def\ppt{\g@pt\@ne\@ne} -\def\pppt{\g@pt\@ne\tw@} - -\def\lpt{\g@pt\m@ne\z@} -\def\lppt{\g@pt\m@ne\@ne} -\def\lpppt{\g@pt\m@ne\tw@} - -\def\g@pt#1#2#3{\check@staff - \inhgetn@i#3\relax \relax % two \relax since the first one - \ifnum\n@i<\@c % in swallowed by \inhgetn@i - \ifodd\n@i \else\advance\n@i#1\fi - \pl@base \raise\y@i\hbox{\musixchar#2}\fi\fi} - -%%% rests - -\def\wholeshift#1{\roffset{\p@ne25}{#1}} - -\def\centerbar#1{\y@ii\lin@pos \advance\y@ii-\lastbarpos \advance\y@ii\cut@v - \kern-\h@lf\y@ii\lrlap{#1}\kern\h@lf\y@ii}% - - -\def\cpause{\hbox{\ccn{6}{\musixchar61}}} -\def\chpause{\hbox{\ccn{4}{\musixchar60}}} -\def\cPAuse{\hbox{\ccn{0}{\musixchar58}}} -\def\cPAUSe{\hbox{\ccn{0}{\musixchar59}}} - -\def\centerpause{\centerbar{\cpause}} -\def\centerhpause{\centerbar{\chpause}} -\def\centerPAuse{\centerbar{\cPAuse}} -\def\centerPAUSe{\centerbar{\cPAUSe}} - -\def\C@ps#1#2#3{\n@viii#3\multiply\n@viii\tw@ - \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1}} -\def\C@pspt#1#2#3{\n@viii#3\multiply\n@viii\tw@ - \advance\n@viii#2\raise\n@viii\internote \hbox{\musixchar#1\relax - \ifnum #1=\t@n\relax \raise 0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% - \else \raise -0.7\internote\hbox{\kern 0.2\qn@width\musixchar0}% - \fi}% - } - -\def\PAUSe{\adv@box{\musixchar59}} -\def\PAuse{\adv@box{\musixchar58}} - -\def\pause{\check@staff - \adv@box{\raise\si@\internote\hbox{\musixchar61}}\fi} -\def\pausep{\wholeshift{\pt5}\pause} -\def\liftpause{\C@ps\@l@v@n\si@} -\def\liftpausep{\C@pspt\@l@v@n\si@} - -\def\hpause{\check@staff - \adv@box{\raise\f@ur\internote\hbox{\musixchar60}}\fi} -\let\hp\hpause -\def\hpausep{\wholeshift{\pt5}\hpause} -\let\hpp\hpausep -\def\lifthpause{\C@ps\t@n\f@ur} -\def\lifthpausep{\C@pspt\t@n\f@ur} - -\newdimen\lift@rest -\def\adv@restbox#1{\hbox{\lift@rest 5\internote - \advance\lift@rest -2.5\fontdimen\fiv@\musixfont - \raise\lift@rest\hbox\@to\noteskip{#1\hss}}\advance\locx@skip\noteskip} - -\def\qp{\adv@restbox{\check@staff\musixchar62\fi}} -\let\soupir\qp - -\def\ds@oup{\adv@restbox{\check@staff\musixchar63\fi}} -\def\qs{\adv@restbox{\check@staff\musixchar64\fi}} -\def\hs{\adv@restbox{\check@staff\musixchar65\fi}} -\def\qqs{\adv@restbox{\check@staff\musixchar66\fi}} - -% pointed rests version 1.16 RDT -\def\qpp{\adv@restbox{\check@staff\pt5\musixchar62\fi}} -\def\dsp{\adv@restbox{\check@staff\pt5\musixchar63\fi}} -\def\qsp{\adv@restbox{\check@staff\pt5\musixchar64\fi}} -\def\hsp{\adv@restbox{\check@staff\pt5\musixchar65\fi}} -\def\qqsp{\adv@restbox{\check@staff\pt5\musixchar66\fi}} - -% double-dotted rests version 1.17 RDT - -\def\pausepp{\wholeshift{\ppt5}\pause} -\def\hpausepp{\wholeshift{\ppt5}\hpause} -\let\hppp\hpausepp -\def\qppp{\adv@restbox{\check@staff\ppt5\musixchar62\fi}} -\def\dspp{\adv@restbox{\check@staff\ppt5\musixchar63\fi}} -\def\qspp{\adv@restbox{\check@staff\ppt5\musixchar64\fi}} -\def\hspp{\adv@restbox{\check@staff\ppt5\musixchar65\fi}} -\def\qqspp{\adv@restbox{\check@staff\ppt5\musixchar66\fi}} - - -%%% accidentals - -\newskip\accshift - -\def\bigaccid{\let\small@test\iftrue} -\def\smallaccid{\let\small@test\iffalse} -\def\varaccid{\def\small@test{\ifdim\noteskip>1\p@seven\qn@width}} - -\varaccid % accidents de taille variable - -\def\na#1{\small@test\bigna{#1}\else\smallna{#1}\fi} -\def\fl#1{\small@test\bigfl{#1}\else\smallfl{#1}\fi} -\def\sh#1{\small@test\bigsh{#1}\else\smallsh{#1}\fi} -\def\dfl#1{\small@test\bigdfl{#1}\else\smalldfl{#1}\fi} -\def\dsh#1{\small@test\bigdsh{#1}\else\smalldsh{#1}\fi} - -% n@vi char pos of cautionpar (normal=5, doubleflat=6) -% n@v offset to char pos (flat=0, dflat=1, sharp=2, dsharp=3, natural=4) -% n@vi offset to char pos (big=0, small=60) -% n@vii =maxdimen -> cautionacctrue - -\def\writ@ba{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} -\def\set@ba{\let\@Ti\writ@ba \n@vi\z@} - -\def\bigna{\set@ba \let\@Tii\@Na \n@v\f@ur \C@acc} -\def\bigfl{\set@ba \let\@Tii\@Fl \n@v\z@ \C@acc} -\def\bigsh{\set@ba \let\@Tii\@Sh \n@v\tw@ \C@acc} -\def\bigdfl{\set@ba \let\@Tii\@dFl \n@v\@ne \C@acc} -\def\bigdsh{\set@ba \let\@Tii\@dSh \n@v\thr@@ \C@acc} - -\def\@sa{\ifnum\n@vii=\maxdimen \C@ChaR \musixchar\n@v \kern.3\qn@width - \else \musixchar\n@v \fi \n@vii\z@} - -\def\smallna{\set@sa \let\@Tii\@Na \n@v\f@ur \C@acc} -\def\smallfl{\set@sa \let\@Tii\@Fl \n@v\z@ \C@acc} -\def\smallsh{\set@sa \let\@Tii\@Sh \n@v\tw@ \C@acc} -\def\smalldfl{\set@sa \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} -\def\smalldsh{\set@sa \let\@Tii\@dSh \n@v\thr@@ \C@acc} - -\def\cna{\set@ca \let\@Tii\@Na \n@v\f@ur \C@acc} % version 1.16 HM -\def\cfl{\set@ca \let\@Tii\@Fl \n@v\z@ \C@acc} -\def\csh{\set@ca \let\@Tii\@Sh \n@v\tw@ \C@acc} -\def\cdfl{\set@ca \n@iv\si@ \let\@Tii\@dFl \n@v\@ne \C@acc} -\def\cdsh{\set@ca \let\@Tii\@dSh \n@v\thr@@ \C@acc} -% -\def\writ@sa{\pl@base\raise\y@i\llap{\musixchar\n@v\kern\accshift}} -\def\set@sa{\let\@Ti\writ@sa \n@iv\fiv@ \n@vi\@xl } -\def\writ@ca{\pl@base\raise\y@i\llap{\C@ChaR \musixchar\n@v\kern.3\qn@width\kern\accshift}} -\def\set@ca{\let\@Ti\writ@ca \n@iv\fiv@ \n@vi\@xl } - -\def\writ@ua{\advance\n@i\thr@@ \zchar\n@i{\kern\qu@rt\qn@width\@sa}} -\def\set@upper{\let\@Ti\writ@ua \n@iv\fiv@ \n@vi\@xl } - -\def\upperna{\set@upper \let\@Tii\@Na \n@v\f@ur \C@acc} -\def\upperfl{\set@upper \let\@Tii\@Fl \n@v\z@ \C@acc} -\def\uppersh{\set@upper \let\@Tii\@Sh \n@v\tw@ \C@acc} - -\def\@Na{\ifcase\n@ii \n@v\tw@ \or \n@v\f@ur \or \n@v\z@ \fi} -\def\@Fl{\ifcase\n@ii \n@v\f@ur \or \n@v\z@ \or \n@v\@ne \fi} -\def\@Sh{\ifcase\n@ii \n@v\thr@@ \or \n@v\tw@ \or \n@v\f@ur \fi} -\def\@dFl{\ifcase\n@ii \n@v\z@ \or \n@v\@ne \or - \message{\@nod flatten \noexpand\dfl \t@ruc}\let\@Ti\empty \fi} -\def\@dSh{\ifcase\n@ii - \message{\@nod sharpen \noexpand\dsh \t@ruc}\let\@Ti\empty - \or \n@v\thr@@ \or \n@v\tw@ \fi} - -\def\C@acc#1{% - \check@staff - \inhgetn@i#1\relax - \ifx\rel@sw\@ne - \s@l@ctsigns \n@iii\n@i - \advance\n@iii-\ut@ref \advance\n@iii-\ut@ref - \loop\ifnum\n@iii>\si@ \advance\n@iii-\s@v@n \repeat - \loop\ifnum\n@iii<\z@ \advance\n@iii\s@v@n \repeat - \ifcase\n@iii - \n@ii\si@ % mi - \or\n@ii\@ne % fa - \or\n@ii\thr@@ % sol - \or\n@ii\fiv@ % la - \or\n@ii\s@v@n % si - \or\n@ii\tw@ % do - \or\n@ii\f@ur % re - \fi -% \n@ii positive signature limit, \n@ii-8 negative signature limit - \advance\n@ii-\a@s \advance\n@ii\si@ \divide\n@ii\s@v@n - \@Tii - \fi \advance\n@v\@l \advance\n@v\n@vi \expandafter\@Ti % [version 1.15] (Hiroaki) - \fi} - -\def\@nod{Can't double } - -\def\relativeaccid{\let\rel@sw\@ne } -\def\absoluteaccid{\let\rel@sw\empty } -\absoluteaccid - -\def\lna#1{\loffset\smallvalue{\na{#1}}} -\def\lfl#1{\loffset\smallvalue{\fl{#1}}} -\def\lsh#1{\loffset\smallvalue{\sh{#1}}} -\def\ldfl#1{\loffset\smallvalue{\dfl{#1}}} -\def\ldsh#1{\loffset\smallvalue{\dsh{#1}}} - -%%% special metersigns - -\def\allabreve{\raise4\internote\hbox{\keychar82}} %-> 2/2 -\def\reverseallabreve{\raise4\internote\hbox{\keychar123}} -\def\meterC{\raise4\internote\hbox{\musickeyfont\@lxxxiii}} %-> 4/4 -\def\reverseC{\raise4\internote\hbox{\keychar84}} %-> 4/2 -\def\meterplus{{\keychar57}} - -%%% arpeggio - -\def\arpeggio#1#2{\zcharnote{#1}{% - \uplap{\leaders\hbox{\musixchar70}\vskip#2\Interligne}}} -\def\larpeggio#1#2{\loffset\smallvalue{\arpeggio{#1}{#2}}} - -%%% ornaments, special signs - -\def\@Char#1{\zcharnote{#1}\C@ChaR} - -\def\backturn{\n@iv67\@Char} -\def\turn{\n@iv68\@Char} -\def\duevolte{{\keychar78}} -\def\caesura{\llap{\musixchar79\kern\h@lf\noteskip}} -\def\coda{\n@iv85\C@coda} -\def\Coda{\n@iv105\C@coda} -\def\C@coda#1{\llap{\@Char{#1}\kern\afterruleskip}} -\def\segno{\n@iv86\@Char} -\def\Segno{{\keychar110}} -\def\shake{\n@iv87\@Char} -\def\Shake{\n@iv88\@Char} -\def\Shakel{\n@iv106\@Char} -\def\Shakenw{\n@iv107\@Char} -\def\Shakesw{\n@iv108\@Char} -\def\Shakene{\n@iv109\@Char} -\def\mordent{\n@iv89\@Char} -\def\Mordent{\n@iv119\@Char} -\def\doublethumb{\n@iv121\@Char} -\def\tr#1{\zcn{#1}{\ppff tr}} -\def\trt#1{\loffset{0.65}{\shake{#1}}\roffset{0.65}{\mordent{#1}}} - -%%% accents - -\def\upbow{{\musixfont\@xxiii}} -\def\downbow{{\musixchar22}} - -\def\flageolett{\n@iv120\uacc@Char} -\def\usfz{\n@iv\tw@nty \uacc@Char} -\def\lsfz{\n@iv21\lacc@Char} -\def\dsfz{\lsfz} -\def\upz{\n@iv\@xxiv \uacc@Char} -\def\lpz{\n@iv\@xxv \lacc@Char} -\def\dpz{\lpz} -\def\ust{\n@iv\@xxvi \uacc@Char} -\def\lst{\n@iv\@xxvii \lacc@Char} -\def\dst{\lst} -\def\uppz{\n@iv28\uacc@Char} -\def\lppz{\n@iv\@xxix \lacc@Char} -\def\dppz{\lppz} -\def\usf{\n@iv30\uacc@Char} -\def\lsf{\n@iv31\lacc@Char} -\def\dsf{\lsf} -\def\upzst{\n@iv18\uacc@Char} -\def\lpzst{\n@iv19\lacc@Char} -\def\dpzst{\lpzst} - -\def\uacc@Char#1{\check@staff - \inhgetn@i#1\relax \relax - \ifnum\n@i<\@ight \ifodd\n@i \else\advance\n@i\@ne \fi \fi - \zchar\n@i\C@ChaR - \fi} - -\def\lacc@Char#1{\check@staff - \inhgetn@i#1\relax \relax - \ifnum\n@i>\@ne \ifodd\n@i \else\advance\n@i\m@ne \fi \fi - \zchar\n@i\C@ChaR - \fi} - -\def\C@ChaR{\musixfont\char\n@iv} - - %%% accents on beams (correction proposed by Klaus Bechert) - -\def\acc@ubalk{\acc@balk>\@ne} -\def\acc@lbalk{\acc@balk<\m@ne} -\def\acc@balk#1#2#3{\s@l@ctbeam#3\relax \getcurpos \advance\y@v\txt@ff - \advance\y@v-\b@x \y@ii\b@p\y@v \divide\y@ii\tw@nty \advance\y@ii\b@z - \ifnum\b@n#1#2\relax \advance\y@ii\b@n\interbeam - \advance\y@ii-#2\interbeam \fi - \advance\y@ii-\altportee \raise\y@ii\rlap\balk@accent} -\let\balk@accent\C@ChaR - -%\def\bflageolett{\n@iv120\acc@ubalk} -\def\busfz{\n@iv\tw@nty \acc@ubalk} -\def\blsfz{\n@iv21\acc@lbalk} -%\def\bdownbow{\n@iv22\acc@ubalk} -%\def\bupbow{\n@iv\@xxiii \acc@lbalk} -\def\bupz{\n@iv\@xxiv \acc@ubalk} -\def\blpz{\n@iv\@xxv \acc@lbalk} -\def\bust{\n@iv\@xxvi \acc@ubalk} -\def\blst{\n@iv\@xxvii \acc@lbalk} -\def\buppz{\n@iv28\acc@ubalk} -\def\blppz{\n@iv\@xxix \acc@lbalk} -\def\busf{\n@iv30\acc@ubalk} -\def\blsf{\n@iv31\acc@lbalk} -%\def\bupzst{\n@iv18\acc@ubalk} -%\def\blpzst{\n@iv19\acc@lbalk} - -% The next macros puts triplets (and others def'd with \txt) on beams - -\def\butext#1{\txt@ff\qn@width - \def\balk@accent{\uplap{\lrlap{\kern\tw@\txt@ff\txtfont\txt}\kern\internote}}% - \acc@ubalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR} - -\def\bltext#1{\txt@ff\z@ - \def\balk@accent{\vbox\@to\z@{\kern\internote\txtfont\lrlap\txt\vss}}% - \acc@lbalk{#1}\txt@ff\h@lf\qn@width \let\balk@accent\C@ChaR} - -%%% end of accents on beams (correction proposed by Klaus Bechert) - -%%% crescendo, decrescendo - -% These macros puts variable size (de)crescendo marks. -% \(de)crescendo{#1} #1=length (any TeX dimension, max 192pt(\simeq 68mm)) - -\def\C@cresc#1{\y@iv#1\n@v\y@iv - \sp@pt\@ne \advance\n@v\thr@@ % sp->pt round up - \divide\n@v\si@ % the next is 6pt(notehead) wider - \max@n@v\@xxxii - \min@n@v\@ne % clip to extremities - \advance\n@v\n@ii % first character position (-1) - \mxsps\char\n@v} - -\def\crescendo{\n@ii\@lxxxiii \C@cresc} -\def\decrescendo{\n@ii\@cxv \C@cresc} - -\newskip\@icresc -\def\icresc{\getcurpos\global\@icresc\y@v } -\def\tcresc{\n@ii\@lxxxiii \C@cre} -\def\tdecresc{\n@ii\@cxv \C@cre} -\def\C@cre{\getcurpos\advance\y@v-\@icresc \kernm\y@v\C@cresc\y@v\kern\y@v} - -%%% pedal signs - -\def\raiseped{-5} - -\def\sPed{\musixchar34} -\def\sPED{\zchar\raiseped\sPed} -\def\Ped{\musixchar35} -\def\PED{\zchar\raiseped\Ped} -\def\Dep{\musixchar33} -\def\DEP{\zchar\raiseped\Dep} -\def\sDep{\musixchar104} -\def\sDEP{\zchar\raiseped\sDep} - -%%% fermata - -\def\fermataup{\n@iv80\@Char} -\def\fermatadown{\n@iv81\@Char} -% center on whole note -\def\Fermataup#1{\wholeshift{\fermataup{#1}}} -\def\Fermatadown#1{\wholeshift{\fermatadown{#1}}} - -%%% trills - -\def\trilleX{\let\T@i\empty \C@trille} -\let\trille\trilleX -\def\TrilleX{\def\T@i{\it tr }\C@trille} -\let\Trille\TrilleX -\def\C@trille#1#2{\zcharnote{#1}{\y@v#2\noteskip \trill@}} - -\let\maxtrilles\si@ -% \maxtrilles and \@itrille[i] are only for obsolete Legacy \trillC -% and \TrillC; not related with new register allocation code. Leave -% it as-is. [version 1.15] - -\newskip\@itrillei -\newskip\@itrilleii -\newskip\@itrilleiii -\newskip\@itrilleiv -\newskip\@itrillev -\newskip\@itrillevi - - %\def\s@l@cttrille#1\relax{% - % \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi - % \ifnum\n@i<\maxtrilles \else - % \n@i\z@ \errmessage{Wrong trill number!}\fi - % \advance\n@i\@ne - % \edef\@itrille{\csname @itrille\roman@n@i}% dimen (altportee) - % }% select trill - - -\def\itrille{\itrill@old{0}} -\def\ttrille{\ttrill@old{0}} -\def\tTrille{\tTrill@old{0}} - -\def\itrill@old#1{\s@l@cttrill#1\relax - \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi - \getcurpos\global\tr@y\y@v} -\def\ttrill@old#1{\s@l@cttrill#1\relax - \message{\noexpand\tr@x=\the\tr@x, No. #1}% - \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi - \let\T@i\empty \C@tri} -\def\tTrill@old#1{\s@l@cttrill#1\relax - \message{\noexpand\tr@x=\the\tr@x, No. #1}% - \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi - \def\T@i{\it tr }\C@tri} - -\def\C@tri#1{\getcurpos\advance\y@v-\tr@y \kernm\y@v - \zcharnote{#1}\trill@\kern\y@v\let\T@i\empty\let\@itrille\undefined} -\def\trill@{\hbox\@to\y@v{\T@i\leaders\hbox{\musixchar69}\hfill}} - -%%%%%% - -% \let\maxtrills\si@ % here disabled to avoid conflict with new register allocation code -% [version 1.15] moved out to the new register allocation code -% \newskip\tr@xi \tr@xi\maxdimen\relax % starting horizontal pos -% \newtoks\tr@swi % heading of trill -% \newskip\tr@yi % height of trill - -\newcount\tr@number - -\def\tr@loop{\tr@number\z@ \loop\ifnum\tr@number<\maxtrills - \s@l@cttrill\tr@number\relax - \advance\tr@number\@ne } - -\def\s@l@cttrill#1\relax{% - \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi - \ifnum\n@i<\maxtrills \else - \count@\maxtrills \advance\count@\m@ne - \errmessage{Wrong trill reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] - \n@i\z@ % [version 1.15] - \fi - \advance\n@i\@ne - \xdef\tr@x{\csname tr@x\roman@n@i}% - \xdef\tr@y{\csname tr@y\roman@n@i}% - \xdef\tr@sw{\csname tr@sw\roman@n@i}% - }% select octiaviation line - -%\newskip\tr@x \tr@x\maxdimen\relax % starting horizontal pos -%\newskip\tr@y % height of trill - -\def\Itrille#1{\s@l@cttrill#1\relax - \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi - \global\tr@sw={\relax}% - \C@T} -\def\ITrille#1{\s@l@cttrill#1\relax - \ifdim\tr@x < \maxdimen\errmessage{\@mis \noexpand\Ttrille \number #1}\fi - \global\tr@sw={{\it tr }}% - \C@T} - -\def\C@T#1{% - \getcurpos\global\tr@x\y@v % store horizontal pos - \inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height - \global\tr@y\y@i } - -\def\Ttrille#1{\s@l@cttrill#1\relax - \ifdim\tr@x < \maxdimen\else\errmessage{\@mis \noexpand\Itrille \number #1}\fi - \advance\tr@y-\altportee \let\T@ii\char \C@TR \global\tr@x\maxdimen } - \let\TTrille\Ttrille - -\def\C@TR{% - \ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi - \advance\y@v-\tr@x \kernm\y@v \raise\tr@y\hbox\@to\y@v{% -% \the\tr@sw\xleaders\hbox{\musixchar69}\hfill\T@ii\n@ii}}% -% Correction by Julian Gilbey - \the\tr@sw\xleaders\hbox{\musixchar69}\hfill}}% - -%%% tremolos version 1.19 RDT -%%% based on code by Werner Icking and Andre van Ryckeghem - -\def\trml#1{\advance\transpose2\loffset{0.5}{\ibl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trmu#1{\advance\transpose-3\loffset{0.5}{\ibu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% -\def\trrml#1{\advance\transpose2\loffset{0.5}{\ibbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trrmu#1{\advance\transpose-3\loffset{0.5}{\ibbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% -\def\trrrml#1{\advance\transpose2\loffset{0.5}{\ibbbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trrrmu#1{\advance\transpose-3\loffset{0.5}{\ibbbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% - -% whole notes are wider than quarter/half notes: -\def\Trml#1{\advance\transpose2\loffset0{\ibl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trmu#1{\advance\transpose-3\loffset{1.125}{\ibu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% -\def\Trrml#1{\advance\transpose2\loffset0{\ibbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trrmu#1{\advance\transpose-3\loffset{1.125}{\ibbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% -\def\Trrrml#1{\advance\transpose2\loffset0{\ibbbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trrrmu#1{\advance\transpose-3\loffset{1.125}{\ibbbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% - -%%% octave lines - -\def\octnumberup{\octnumberdefault\vrule width 0pt height2ex} -\def\octnumberdefault{\smallppff8} % version 1.17 RDT -\def\octnumberdown{\octnumberdefault$^a$\txtfont\kern 0.3em bassa\vrule width 0pt depth \Internote} - -\def\octfinup{\check@staff - \n@v\@xxiii\n@ii\@xxiv\global\o@swz={\@ne}\fi - \C@of} -\def\octfindown{\check@staff - \n@v\@xxv \n@ii\@xxvi\global\o@swz={\z@}\fi - \C@of} -\def\C@of#1#2{\check@staff - \y@v#2\noteskip\zcharnote{#1}{\hbox\@to\y@v{% - \xdef\o@sw{\csname o@swz\endcsname}\relax - \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\char\n@ii}}% - \fi} - -%%%%%% -% selecting \octnumber??? according to \o@sw -\def\octnumber{% \show\o@sw - \setbox\w@rkbox\hbox{% - \ifnum \@ne=\the\o@sw\relax \octnumberup - \else \octnumberdown - \fi}% - \ifdim \wd\w@rkbox>\y@v\setbox\w@rkbox\hbox{\octnumberdefault}\fi - \box\w@rkbox -} - - -%%%%%% - -% \let\maxoctlines\si@ % here disabled to avoid conflict with new register allocation code, except for \o@swz -% [version 1.15] moved out to the new register allocation code -% \newskip\o@xi \o@xi\maxdimen\relax % starting horizontal pos -% \newskip\o@yi % height of octline -\newtoks\o@swz % sense of octline for \octfin[up][down] without number -% \newtoks\o@swz % sense of octline for \octfin[up][down] without number - -\newcount\o@number - -\def\o@loop{\o@number\z@ \loop\ifnum\o@number<\maxoctlines - \s@l@ctoctline\o@number\relax - \advance\o@number\@ne } - -\def\s@l@ctoctline#1\relax{% - \n@i#1\relax \ifnum\n@i<\z@ \n@i\@c \fi - \ifnum\n@i<\maxoctlines \else - \count@\maxoctlines \advance\count@\m@ne - \errmessage{Wrong octaviation line reference number \the\n@i! (valid: 0 to \the\count@)}% [version 1.15] - \n@i\z@% [version 1.15] - \fi - \advance\n@i\@ne - \xdef\o@x{\csname o@x\roman@n@i}% - \xdef\o@y{\csname o@y\roman@n@i}% - \xdef\o@sw{\csname o@sw\roman@n@i}% - }% select octiaviation line - -%\newskip\o@x \o@x\maxdimen\relax % starting horizontal pos -%\newskip\o@y % height of octline - -\def\ioctfinup{\Ioctfinup0} -\def\ioctfindown{\Ioctfindown0} -\def\Ioctfinup#1{\check@staff - \s@l@ctoctline#1\relax - \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi - \global\o@sw={\@ne}\fi - \C@O} -\def\Ioctfindown#1{\check@staff - \s@l@ctoctline#1\relax - \ifdim\o@x < \maxdimen\errmessage{\@mis \noexpand\Toctfin \number #1}\fi - \global\o@sw={\z@}\fi - \C@O} - -\def\C@O#1{\check@staff - \getcurpos\global\o@x\y@v % store horizontal pos - \inhgetn@i#1\relax\pl@base\advance\y@i\altportee % get absolute height - \global\o@y\y@i - \fi} % clise check@staff in Ioctfinup/down - -\def\toctfin{\Toctfin0} -\def\Toctfin#1{\check@staff - \s@l@ctoctline#1\relax - \advance\o@y-\altportee \let\T@ii\char \C@TO \global\o@x\maxdimen - \fi} - -\def\C@TO{\check@staff - \ifnum \@ne=\the\o@sw - \n@v\@xxiii \n@ii\@xxiv \else \n@v\@xxv \n@ii\@xxvi \fi - \ifx\T@ii\n@ii \y@v\lin@pos \else \getcurpos \fi - \advance\y@v-\o@x \kernm\y@v \raise\o@y\hbox\@to\y@v{% - \octnumber\mxsps\xleaders\hbox{\char\n@v}\hfill\T@ii\n@ii}\relax - \fi}% - -% Liftoctline #1 refnumber #2 lift[steps of internote] - -\def\Liftoctline#1#2{\n@i#1\advance\n@i\@ne - \advance\csname o@y\roman@n@i#2\internote} - -%%% some specials - -% \def\metron#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2}} -% version 1.19 RDT: -\let\lyricson\relax -\let\lyricsoff\relax -\def\metron#1#2{{\lyricsoff\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2\lyricson}} -\def\metronequiv#1#2{{\stemlength\f@ur\noteskip\t@n\p@ #1 1\ = #2 1}} - - -\def\txtfont{% % version 1.17 RDT -\ifdim\internote<.95\Internote \sevenit -\else\ifdim\internote<1.19\Internote \eightit -\else\ifdim\internote<1.43\Internote \tenit -\else\twelveit\fi\fi\fi} - -\def\txt{3} -\def\xtuplet#1#2{\n@iv#1\advance\n@iv\m@ne {\sign@skip=\n@iv\noteskip - \sign@skip=0.5\sign@skip \xdef\half@sign@skip{\the\sign@skip}}% - \zcharnote{#2}{\kern\h@lf\qn@width\kern \half@sign@skip\lrlap{\txtfont#1\/\/}}} -\def\triolet{\xtuplet\txt} % version 1.17 RDT - -% -% Following definitions based on tuplet.tex - conventional tuplet brackets for MusiXTeX. -% Col. G. L. Sicherman. Last revised 2003-05-17. -% -% Added to musixtex.tex version 1.16 by RDT. -% -% Standard MusiXTeX uses \uptrio and \downtrio to print tuplet brackets. -% We define \uptuplet and \downtuplet, with the same arguments: -% -% #1 : starting pitch -% #2 : width of bracket, in (\noteskip)s -% #3 : slope of bracket, in multiples of 1-1/8 degrees -% -% The user defines the text to appear in the opening as \tuplettxt. -% This is to avoid conflicting with the \txt in standard MusiXTeX. -% -% Examples: -% -% Draw a triplet bracket over the notes, starting at pitch "p", -% 1.25\noteskip wide, with a slope up of 3-3/8 degrees: -% -% \uptuplet p{1.25}3 -% -% Draw a sextuplet bracket under the notes, starting at pitch "a", -% 2.5\noteskip wide, with a slope down of 4-1/2 degrees: -% -% \def\tuplettxt{6\/\/} -% \downtuplet{a}{2.5}{-4} -% -% Send comments, complaints, and bouquets to the Colonel at -% . -% - -% Standard MusiXTeX prints a small "3" (or other number) within -% the bracket. Here we print the "3" in an opening in the bracket, -% so we need not use a small font. -% -% The double italic correction compensates for centering the number -% on the bracket line. - -\def\tuplettxt{3\/\/} - -%%% The rest is adapted from standard MusixTeX. - -\newdimen\y@vii % x of right end of left part of bracket. -\newdimen\y@viii % x of left end of right part of bracket. -\newdimen\y@ix -\newbox\tuptxtb@x - -% v@rline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) -% (comments and ideas from Ian Collier) (from -20 upto 20 ) -% This macro is used by some of the others which follow, -% using it directly it must be set in zero box - -\def\v@rline#1#2#3{\n@v#3\y@i#2% - \setbox\tuptxtb@x\hbox{\hskip1pt\txtfont\tuplettxt\hskip1pt}% - \y@vii=\h@lf\y@i\advance\y@vii-\h@lf\wd\tuptxtb@x% - \n@ii-\tw@nty \min@n@v\n@ii - \max@n@v\tw@nty \n@iii\n@v - \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars - \advance\n@v\@xxix - \setbox\ch@box\hbox{\mxsps\char\n@v}% - \ifdim\y@vii<\wd\ch@box \y@vii\wd\ch@box\fi% At least one whole segment! - \y@viii=\y@i\advance\y@viii-\y@vii% - \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ - \raise#1\internote\hbox{\mxsps\char\n@iv -% -% Build bracket with slanted line segments of width 10pt. -% Left part of bracket: -% - \loop\ifdim\y@iv<\y@vii\raise\y@iii\copy\ch@box - \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat -% -% last element -% -% \finalheight=2.5\completewidth -% \finalheight=\n@iii\finalheight -% \divide\finalheight by 100 -% \advance\overlapwidth by -\completewidth -% \stepheight=-2.5\overlapwidth -% \stepheight=\n@iii\stepheight -% \divide\stepheight by 100 -% \advance\curheight by \stepheight -% \kern -\overlapwidth \raise\curheight \box\ch@box -% - \y@ix=\y@vii\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% - \y@ix\y@vii\advance\y@ix-\wd\ch@box% - \y@iii\n@iii\y@ix\y@iii2\h@lf\y@iii\divide\y@iii\@c\raise\y@iii\copy\ch@box% -% -% Text: -% - \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c% - \y@ix=-\y@vii \advance\y@ix\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x% - \hbox to\y@ix{\hss}% - \y@iii\h@lf\y@v \raise\y@iii\vbox to\z@{% - \vss{\copy\tuptxtb@x}\vss} - \y@ix=\y@viii \advance\y@ix-\h@lf\y@i \advance\y@ix-\h@lf\wd\tuptxtb@x - \hbox to\y@ix{\hss}% To start of right part. No-op unless bracket is short. -% -% Right part of bracket: -% - \y@iii2\h@lf\y@viii \y@iii\n@iii\y@iii \divide\y@iii\@c% - \y@iv=\y@viii \advance\y@iv\wd\ch@box% - \loop\ifdim\y@iv<\y@i\raise\y@iii\copy\ch@box% - \advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat -% -% Finish off the right part: -% - \y@iii\y@i\advance\y@iii-\wd\ch@box\y@iii2\h@lf\y@iii\y@iii\n@iii\y@iii% - \y@ix=\y@i\advance\y@ix-\y@iv\hbox to\y@ix{\hss}% - \divide\y@iii\@c% - \raise\y@iii\copy\ch@box% -% - \raise\y@v\hbox{\mxsps\char\n@iv}}} -% -% y@i =complete length -% y@ii =height of linechar -% y@iii =current height -% y@iv =current width -% y@v =height of ending line -% y@vii =width of left segment of bracket -% y@viii=y@vii + width of opening -% y@ix =adjustment register -% -% n@iii=slope -% n@iv =(number of char for hooks) -% n@v =slope (number of linechar) - -\def\X@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width - \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\v@rline\n@i\y@v{#3}}} - -\def\uptuplet{\n@iv22\X@bkt} -\def\downtuplet{\n@iv21\X@bkt} - -%\check - -\def\zbreath{\check@staff\raise\si@\internote\rlap{\BIGfont'}\fi} -\def\cbreath{\check@staff\adv@box{\raise\si@\internote - \hbox\@to\noteskip{\hss\BIGfont'\hss}}\fi} - -% The following macros can be used to surround a note by parentheses -% \l[r]par p produces a left[right] parenthesis at pitch p (Ian Collier) - -\def\lpar{\n@iv\thr@@ \@Char} -\def\rpar{\n@iv\f@ur \@Char} - -% \bracket pn draws a square bracket [ to bracket an interval -% of an n-th whose lowest note is p (Ian Collier) - -\def\bracket#1#2{\y@iv#2\internote \advance\y@iv\tw@\internote - \inhgetn@i#1\relax\pl@base \advance\y@i-1\h@lf\internote - \raise\y@i\llap{\uplap{\offinterlineskip\hbox{\mxsps\@xxvii}% - \hbox{\vrule\@height\y@iv}\hbox{\mxsps\@xxvii}}}} - -%%% dynamics - -\def\f@kern{\kernm\p@ne ex} -\def\p@kern{\kernm\p@ne5ex} - -\def\f{{\ppff f}} -\def\ff{{\ppff f\f@kern f}} -\def\fp{{\ppff f\f@kern p}} -\def\sF{{\it s\ppff \p@kern f}} -\def\fff{{\ppff f\f@kern f\f@kern f}} -\def\ffff{{\ppff f\f@kern f\f@kern f\f@kern f}} -\def\mf{{\ppff m\p@kern\f@kern f}} -\def\mp@{{\ppff m\p@kern p}} -\let\mezzopiano\mp@ -\def\p{{\ppff p}} -\def\pp{{\ppff p\p@kern p}} -\def\ppp{{\ppff p\p@kern p\p@kern p}} -\def\pppp{{\ppff p\p@kern p\p@kern p\p@kern p}} -\def\sfz{{\ppff s\p@kern f\f@kern z}} % version 1.16 -\def\sfzp{{\ppff s\p@kern f\f@kern z\p@kern p}} % version 1.16 - -%%% spacings - -% if you want to reduce the space behind e.g. \changecontext, use -% \addspace{dim} ! Only scaleable values are allowed ! - -\def\addspace#1{\kern#1\global\advance\x@skip#1} - -% \hardspace inserts (reduces) outside of \notes..\en unscaleable space - -\let\fil@spc\empty -\def\hardspace#1{\check@nopen\t@rmskip\y@v#1\addspace\y@v\fil@spc} - -\def\off#1{\advance\locx@skip#1\kern#1} -\def\sk{\off\noteskip} -\def\hsk{\off{\h@lf\noteskip}} -\def\bsk{\off{-\noteskip}} - -%% -% Redefine \qsk to be scaleable softwidth rather than a fixed kern -% Otherwise, over/underfull boxes will occur on rescaled (pass 2) material -%% - -\def\qqsk{\off{\qu@rt\@l@mskip}} % version 1.16 RDT -\def\hqsk{\off{\h@lf\@l@mskip}} -\def\qsk{\off\@l@mskip} - -\def\nspace{\hardspace{\h@lf\qn@width}} -\def\qspace{\hardspace\qn@width} - -%%% notes spacing - -\def\arithmeticskipscale{% - \def\znotes{\vnotes0\elemskip} - \def\notes{\vnotes2\elemskip}% 16th - \def\notesp{\vnotes2\h@lf\elemskip}% 16th point=8 trio - \def\Notes{\vnotes3\elemskip}% 8th - \def\Notesp{\vnotes3\h@lf\elemskip}% 8th point=4 trio - \def\NOtes{\vnotes4\elemskip}% 4th - \def\NOtesp{\vnotes4\h@lf\elemskip}% 4th point - \def\NOTes{\vnotes5\elemskip}% 2th - \def\NOTesp{\vnotes5\h@lf\elemskip}% 2th point - \def\NOTEs{\vnotes6\elemskip}% 1th - \def\NOTEsp{\undefined}% - \def\NOTES{\undefined}% -}% - -\def\geometricskipscale{% - \def\znotes{\vnotes0\elemskip} - \def\notes{\vnotes2\elemskip}% 16th - \def\notesp{\vnotes2.38\elemskip}% 16th point=8 trio - \def\Notes{\vnotes2.83\elemskip}% 8th - \def\Notesp{\vnotes3.36\elemskip}% 8th point=4 trio - \def\NOtes{\vnotes4\elemskip}% 4th - \def\NOtesp{\vnotes4.76\elemskip}% 4th point - \def\NOTes{\vnotes5.66\elemskip}% 2th - \def\NOTesp{\vnotes6.72\elemskip}% 2th point - \def\NOTEs{\vnotes8\elemskip}% 1th - \def\NOTEsp{\vnotes9.52\elemskip}% 1th - \def\NOTES{\vnotes11.32\elemskip}% 1th -}% - -\def\nnotes{\vnotes1.6\elemskip} % version 1.16 RDT (corrected 2015-03-31) -\def\nnnotes{\vnotes1.28\elemskip} % version 1.16 RDT (corrected 2015-03-31) - -\arithmeticskipscale - -\def\scale#1{\def\scalenoteskip{#1}} -\let\scalenoteskip\normalvalue - -\def\multnoteskip#1{\noteskip#1\noteskip} - -\def\vnotes#1\elemskip{\noteskip#1\@l@mskip \@vnotes} - -\let\V@sw\z@ -%\def\varnotes#1{\t@rmskip \let\V@sw\@ne -% \setbox\ch@box\hbox{#1}\noteskip\wd\ch@box \@vnotes} - -\def\hardnotes#1\notes{\t@rmskip \let\V@sw\@ne - \noteskip#1\relax \@vnotes} - -\let\thelyrics\empty -%\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne \def\thelyrics{\hbox{#1}}% -% \setbox\ch@box\thelyrics \noteskip\wd\ch@box \@vnotes} -\def\softlyrics#1{\def\thelyrics{\hbox{#1}}}% -\def\hardlyrics#1\notes{\t@rmskip \let\V@sw\@ne - \let\save@noteskip\noteskip - \def\noteskip{\z@\relax\errmessage{You cannot use \noexpand\noteskip - in \noexpand\hardlyrics's 1st argument!}}% - \def\thelyrics{\hbox{#1}}% - \setbox\ch@box\thelyrics \let\noteskip\save@noteskip - \noteskip\wd\ch@box \@vnotes} - - -\def\@vnotes{\multnoteskip\scalenoteskip - \def|{\nextstaff}\def&{\nextinstrument}\normaltranspose\transpose - \check@nopen\notes@open\@ne - \kern\n@skip\advance\x@skip\n@skip \locx@skip\x@skip - \n@skip\noteskip \noinstrum@nt\z@ \begininstrument} - -\def\en{\@ndstaff\notes@open\z@ - \ifnum\V@sw>0\t@rmskip - \fi - \let\thelyrics\empty} -\let\enotes\en - -\newcount\notes@open - -\def\check@nopen{% - \ifnum\notes@open>\z@ \en\errmessage{\@mis\noexpand\enotes ->}\fi} - -%%% text, lyrics, free positioning of chars - -\def\pl@base{\y@i\n@i\internote} -\def\lrlap#1{\rlap{\hss#1}} -\def\hard@box#1{\rlap{\hbox\@to\noteskip{#1\hfil}}} -\def\dhard@box#1{\rlap{\hbox\@to\tw@\noteskip{#1\hfil}}} -\def\thard@box#1{\rlap{\hbox\@to\thr@@\noteskip{#1\hfil}}} - -\def\zcharnote{\let\@Ti\rlap \C@ch} -\def\lcharnote{\let\@Ti\llap \C@ch} -\def\ccharnote{\let\@Ti\lrlap \C@ch} -\def\hcharnote{\let\@Ti\hard@box \C@ch} -\def\charnote#1#2{\zcharnote{#1}{#2}\sk} - -\def\zcn{\zcharnote} % version 1.16 -\def\ccn{\ccharnote} -\def\lcn{\lcharnote} - -\def\C@ch#1#2{\check@staff\inhgetn@i#1\relax\pl@base\raise\y@i\@Ti{#2}\fi} - -\def\zmidstaff{\let\@Ti\rlap \C@mid} -\def\lmidstaff{\let\@Ti\llap \C@mid} -\def\cmidstaff{\let\@Ti\lrlap \C@mid} - -\def\C@mid#1{\check@staff\y@v\interportee \advance\y@v\f@ur\Interligne \divide\y@v\tw@ - \raise\y@v\uplap{\@Ti{\strut#1}\vss}\fi} - -\def\zchar#1#2{\check@staff\raise#1\internote\rlap{#2}\fi} -\def\lchar#1#2{\check@staff\raise#1\internote\llap{#2}\fi} -\def\cchar#1#2{\check@staff\raise#1\internote\lrlap{#2}\fi} -\def\hchar#1#2{\check@staff\raise#1\internote\hard@box{#2}\fi} - -\def\uptext#1{\check@staff\zchar\t@n{#1}\fi} -\def\Uptext#1{\check@staff\zchar\fourt@@n{#1}\fi} - -\def\setsongraise#1#2{\n@v#1\relax % select instrument - \expandafter\def\csname T@R\romannumeral\n@v\endcsname{#2}} - -% [version 1.15] moved out to the new register allocation code -% \let\T@Ri\z@ - -\def\qlrlap#1{\rlap{\hbox to \qn@width{\hss#1\hss}}} -\def\zsong{\let\@Ti\rlap \C@t} -\def\lsong{\let\@Ti\llap \C@t} -\def\csong{\let\@Ti\qlrlap \C@t} -\def\hsong{\let\@Ti\hard@box \C@t} -\def\dhsong{\let\@Ti\dhard@box \C@t} -\def\thsong{\let\@Ti\thard@box \C@t} - -\def\C@t#1{\C@tx{\@Ti{\strut#1}\vss}} - -\def\C@tx{% - \ifnum\noinstrum@nt=\@ne \y@iv\staffbotmarg \else - \advance\noinstrum@nt\m@ne - \y@iv\csname interinstrument\romannumeral\noinstrum@nt\endcsname - \C@Inter \advance\y@iv\stem@skip \divide\y@iv\tw@ - \advance\noinstrum@nt\@ne \fi - \advance\y@iv-\csname T@R\romannumeral\noinstrum@nt\endcsname -%% \advance\noinstrum@nt\@ne \fi - \lower\y@iv\uplap} - -%%% slope lines and brackets - -% varline #1=height[dimen] #2=length[dimen] #3=slope (1\eqiv 1.125degree) -% (comments and ideas from Ian Collier) (from -20 upto 20 ) -% This macro is used by some of the others which follow, -% using it directly it must be set in zero box - -\def\varline#1#2#3{\n@v#3\y@i#2% - \n@ii-\tw@nty \min@n@v\n@ii - \max@n@v\tw@nty \n@iii\n@v - \ifnum\n@v<\z@ \n@v-\n@v \advance\n@v\tw@nty \fi % offset to lower linechars - \advance\n@v\@xxix - \setbox\ch@box\hbox{\mxsps\char\n@v}% - \y@iv\wd\ch@box \y@ii\qu@rt\p@ \y@ii\n@iii\y@ii \y@iii\z@ - \raise#1\internote\hbox{\ifx\@hook\@ne \mxsps\char\n@iv \fi -% main loop - \loop\ifdim\y@iv<\y@i - \raise\y@iii\copy\ch@box\advance\y@iv\wd\ch@box \advance\y@iii\y@ii \repeat -% last element -% -% \finalheight=2.5\completewidth -% \finalheight=\n@iii\finalheight -% \divide\finalheight by 100 -% \advance\overlapwidth by -\completewidth -% \stepheight=-2.5\overlapwidth -% \stepheight=\n@iii\stepheight -% \divide\stepheight by 100 -% \advance\curheight by \stepheight -% \kern -\overlapwidth \raise\curheight \box\ch@box -% - \y@v2\h@lf\y@i \y@v\n@iii\y@v \divide\y@v\@c \advance\y@iv-\y@i - \y@ii-2\h@lf\y@iv \y@ii\n@iii\y@ii \divide\y@ii\@c \advance\y@iii\y@ii - \kernm\y@iv\raise\y@iii\box\ch@box% - \ifx\@hook\@ne \raise\y@v\hbox{\mxsps\char\n@iv}\fi -% text in the middle - \ifx\@text\@ne \ifnum\n@vi=\@ne \y@iii\p@ \else\y@iii-\p@ \fi - \advance\y@iii\h@lf\y@v \kernm\h@lf\y@i\raise\y@iii\vbox\@to\z@{% - \ifnum\n@vi=\@ne \vss \fi\lrlap{\txtfont\txt}\ifnum\n@vi=\@ne \else\vss \fi}\fi}% - \let\@hook\empty \let\@text\empty} -% -% y@i =complete length -% y@ii =height of linechar -% y@iii=current height -% y@iv =current width -% y@v =height of ending line -% -% n@iii=slope -% n@iv =(number of char for hooks) -% n@v =slope (number of linechar) -% n@vi =1 -> text above -% @hook=\@ne -> draws hookrules at begin and end of line -% @text=\@ne -> puts text at the middle of the line (def'd with \txt) - -% \ov[un]bkt{p}{n}{s} draws a bracket over the music starting at the -% current position at pitch p, width n\noteskip and slope s, causing no space -% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) - -\def\ovbkt{\n@iv22\C@bkt} -\def\unbkt{\n@iv21\C@bkt} - -\def\C@bkt#1#2#3{\y@v#2\noteskip \advance\y@v\wn@width \let\@hook\@ne - \inhgetn@i#1\relax \rlap{\kernm\p@ne\qn@width\varline\n@i\y@v{#3}}} - -% \up[down]trio{p}{n}{s} same as above, -% draws \txt (default \eightit 3) above[below] in the middle -% #1=height (note), #2=length (noteskips) #3=slope (1\eqiv 1.125[degree]) - -\def\uptrio{\n@vi\z@ \let\@text\@ne \ovbkt} -\def\downtrio{\n@vi\@ne \let\@text\@ne \unbkt} - -% -% slide #1=height #2=number of elements #3=slope(-8 to 8 [step 10degree]) -% -\def\slide#1#2#3{\n@ii#3\relax\inhgetn@i#1\relax% - \ifnum\n@ii>\m@ne \advance\n@ii\m@ne\let\@Ti\raise - \else \n@ii-\n@ii \advance\n@ii\s@v@n\let\@Ti\lower \fi - \setbox\toks@box\hbox{\mxsps\char\n@ii}\n@iii\z@ - \raise\n@i\internote\rlap{\hbox{\loop\ifnum\n@iii<#2% - \@Ti\n@iii\ht\toks@box\copy\toks@box\advance\n@iii\@ne\repeat}}} - -%%% standard settings -% [115] make them compatible to >12 instruments -\def\resetlayout{\let\interfacteur\nin@ - \stafftopmarg\thr@@\Interligne \staffbotmarg\thr@@\Interligne - \count@\z@ \loop - \advance\count@ by\@ne - \expandafter \let\csname n@l\roman@c@\endcsname \fiv@ - \ifnum\count@<\maxinstruments\repeat - \resetclefsymbols} - -\def\resetclefsymbols{% - \count@\z@ \loop - \advance\count@ by\@ne - \expandafter \let\csname treblec@s\roman@c@\endcsname \z@ - \expandafter \let\csname altoc@s\roman@c@\endcsname \z@ - \expandafter \let\csname bassc@s\roman@c@\endcsname \z@ - \ifnum\count@<\maxinstruments\repeat -} - -% [version 1.15] setup the default maximum element numbers to the same values of T.114 -\setmaxinstruments\si@ -\setmaxcxxviiibeams\si@ % 128th beam -\setmaxcclvibeams\z@ % 256th beam -\setmaxgroups\thr@@ % groups of inst's or choirs -\setmaxslurs\maxinstruments -\setmaxtrills\maxinstruments -\setmaxoctlines\maxinstruments -% - -% [version 1.15] new register allocation code requires some changes -%\resetlayout % no need -%\let\nbinstruments\maxinstruments % no need -%\normalnotesize % already executed in \setmaxinstruments -\normalmusicsize -\normalnotesize % important: execute it again after the first execute of \normalmusicsize --- to initialize \metron stem length. but why? -%\resetlayout % no need -\def\nbinstruments{1} -\noinstrum@nt1\s@l@ctinstr\internote\Internote - -%%% -% -% This is muflex.tex version 1.00 , January 1993 -% -% Macro library for MusicTeX `flexiline' operations: MuFlex. -% The idea is to set up a two pass system. -% On the first pass, information about each bar is written to the file -% jobname.mx1. -% After the first pass, an external (non TeX) routine is run to -% determine optimal values of the elemental spacing (\elemskip) -% for each line, so as to properly fill each line, and to lead to -% the piece filling an integral number of lines. -% The relevant parameters are written onto the file -% jobname.mx2. -% On the second pass, the .mx2 file is read in, and the information -% used as described above. -% -% Ross Mitchell, January 1993. -% -%%% - -\newwrite\outmux -\def\fil@{\immediate\write\outmux} - -%% -% \mulooseness is the MuFlex analog of TeX's \looseness parameter: -% the increment to the natural number of lines in the section just -% ended. -%% - -\newcount\mulooseness -% Alternative \linegoal -\newcount\linegoal - -%% -% Invoke \startmuflex before \startpiece to find out the pass number -% and generally get things going. -%% -% !!! If you want (have) to override the .mx1, delete the .mx2 before !!! -% !! You have to change the mx1, if you change the spacing inbetween !! - -\newif\ifstartmuflex@done -\def\startmuflex{% - \ifstartmuflex@done - \immediate\write16{Warning: \noexpand\startmuflex\space - already done, ignored.}% - \else - \startmuflex@donetrue -% \global\let\ifstartmuflex@done\iftrue - \openin\inmux\jobname.mx2\relax - \ifeof\inmux - \immediate\openout\outmux\jobname.mx1\relax - \fil@{\mufl@x}% - \pass@I - \else - \message{(\jobname.mx2)}\pass@II - \fi - \fi} - -\let\endmuflex\empty - -\newbox\l@eftrightbox - -\def\leftrightrepeat@I{% - % \setbox\toks@box\l@eftrightrepeat\y@v\wd\toks@box - % \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box - % \advance\y@v\y@iv \global\advance\x@skip-\y@v - % - \setleftrightrepeat\@bar - \edef\thex@skip{\the\x@skip}% - \setbox\l@eftrightbox\l@eftrightrepeat - \edef\they@v{\the\wd\l@eftrightbox}% - \setbox\l@eftrightbox\l@eftrepeat - \edef\they@iv{\the\wd\l@eftrightbox}% - \global\x@skip\thex@skip - \fil@{l \they@v\space\they@iv}} - -\def\leftrepeat@I{% -% \setbox\toks@box\l@eftrepeat\y@iv\wd\toks@box -% \global\advance\x@skip-\y@iv - \setleftrepeat\@bar - \edef\thex@skip{\the\x@skip}% - \setbox\l@eftrightbox\l@eftrepeat - \edef\they@iv{\the\wd\l@eftrightbox}% - \global\x@skip\thex@skip - \fil@{L \they@iv}} - -% \akkoladen from: "Rainer Dunker" - - -\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 % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\let\origin@lwrit@staffs\writ@staffs -\def\writ@staffs{% - \origin@lwrit@staffs - \ifx\br@cks\empty\else\expandafter\@bracks\br@cks\ende\fi} - -\let\br@cks\empty -\def\curlybrackets#1{\def\br@cks{#1}} - -\def\@bracks#1#2#3\ende{% - \ifnum #1<#2 %=========================== inserted by D.S.(?) - \noinstrum@nt=#1\s@l@ctinstr\b@zi\altitude - \noinstrum@nt=#2\s@l@ctinstr\b@zii\altitude - \advance\b@zii-\b@zi - \C@Inter - \advance\b@zii\nblines\internote - \advance\b@zii\nblines\internote - \advance\b@zii-2\internote - \n@v\b@zii \sp@pt\tw@ \advance\n@v\@cxxviii - \divide\b@zii\tw@ - \advance\b@zi\b@zii - \raise\b@zi\rlap{\mxsps\char\n@v\kern\instrum@in@group}% - \fi %==================================== inserted by D.S.(?) - \ifx\empty#3\else\@bracks#3\ende\fi} - - -%% -% Define \pass@I to perform the following functions: -% -% (a) set line and page breaking for the first pass by setting -% rigid values for \elemskip (#1), -% \maxbarsinlin@ (#2) -% -% (b) Redefine \t@rmskip so that it writes to the .mx1 file; -% -% (c) Redefine part of \debutmorceau to open the output (.mx1) file -% and write the following parameters to the .mx1 file: -% \line@width -% \parindent -% \beforeruleskip -% \afterruleskip -% \elemskip -% \clef@skip -% \sign@skip; -% -% (d) redefine various other macros so that length measures will be -% written to the .mx1 file -%% - -\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness\space\the\linegoal}% - \mulooseness\z@\relax \linegoal\z@}% - -%\def\pass@I{\def\@nds@ction{\fil@{*\space\the\mulooseness}\mulooseness\z@}% -%% -% Redefine \t@rmskip to include a macro for writing a record to a file, -% and define the macro -%% - \def\fil@termskip{% - \fil@{\the\barsinpi@c@\space\the\widthtyp@\space\the\x@skip}% - \widthtyp@\@ne}% -%% -% Redefine part of debutmorceau to write header information to file -%% - \def\fil@begin{% - \fil@{S}% Startindicator - \fil@{\the\line@width}% - \fil@{\the\parindent}% - \fil@{\the\beforeruleskip}% - \fil@{\the\afterruleskip}% - \fil@{\the\@l@mskip}% - \fil@{\the\clef@skip}% - \fil@{\the\sign@skip}}% -% -% -> \writ@newsigns -% - \def\fil@signs{% - \maxsign@skip\z@ - \n@loop \s@l@ctsigns - \sign@skip\tw@\Internote - \sign@skip\a@s\sign@skip - \ifdim\sign@skip<\z@ \sign@skip-\sign@skip \fi - \global\advance\sign@skip\smallvalue\Internote - \ifdim\maxsign@skip<\sign@skip \global\maxsign@skip\sign@skip - \fi - \repeat - \global\sign@skip\maxsign@skip - \fil@{s\space\the\sign@skip}}% -% -% -> \Contpiece -% - \def\fil@indent{\fil@{\the\barsinpi@c@\space0 \the\parindent}}% -% -% when a line is stopped with a zbar, to the next bar is added the amount -% of afterruleskip -% -> no line break during Pass 1 and indicate musixflx a zbar -% - \def\zbar{\zn@wbar\fil@{z \the\barno}}% -% -% \leftrightrepeat behaves different in mid of line and end of line -% -> no line break during Pass 1, get the widths and -% indicate musixflx a leftrightrepeat -% - \let\leftrightrepeat\leftrightrepeat@I -% -% s.a. -% - \let\leftrepeat\leftrepeat@I -% -% -> \hardspace -% - \def\fil@spc{\fil@{h \the\y@v}}% -% -% makes the .mx2 more transparent -% - \def\fil@barno{\fil@{b \the\barno}}% -% -% break line if value of \lin@pos (exclusive parindent, signs and clefs) -% is larger than 0.5\hsize -% - \def\T@bil{\getcurpos \ifdim\y@v<\h@lf\line@width}% -% -% close the file -% - \def\endmuflex{\immediate\closeout\outmux}}% - -%% -% Macros to set up the second pass -%% - -\newread\inmux - -%% -% Main macro: \pass@II -% Function: %%%(a) Open the .mx2 file -% %%%(b) Set the number of lines per page to #1 -% (c) Set the \everystaff macro to read and decode line -% parameter settings -% %%%(d) Define end of bar, end of line and repeat macros -% %%% according to \autolines -%% - -\def\pass@II{\def\ragg@d{\hfilneg\ }% -% \def\everyst@ff{\everystaff\read\inmux\@to\inline \inline}} % ancient - \def\everyst@ff{\read\inmux\@to\inline \inline\relax \everystaff}} - -%% -% \inline expands to \lineset#1#2#3#4#5, so define the latter -%% - -\def\lineset#1#2#3#4#5{\ifx\no@l\empty \message{<#1>}\fi - \maxbarsinlin@#2% - \@l@mskip#3% - \elemskip\@l@mskip - \afterruleskip#4% - \beforeruleskip#5} - -\def\musicparskip{\parskip\z@ plus\fiv@\Interligne minus\Interligne} - -\def\endcatcodesmusic{% - \catcode`\&\catcode@and - \catcode`\|\catcode@vert - \catcode`\>\catcode@gt - \catcode`\<\catcode@lt - \catcode`\!\catcode@excl - \catcode`\*\catcode@star - \catcode`\:\catcode@sc - \catcode`\.\catcode@pt - \let\bar\@@bar - \catcodesmusicfalse} - -\endcatcodesmusic - -%...\let\wlog=\@wloG - -\catcode`\@=\catcodeat -\endinput - diff --git a/Master/texmf-dist/doc/generic/musixtex/musixtex-install.pdf b/Master/texmf-dist/doc/generic/musixtex/musixtex-install.pdf index ecbd089a5c5..716a4bf6b35 100644 Binary files a/Master/texmf-dist/doc/generic/musixtex/musixtex-install.pdf and b/Master/texmf-dist/doc/generic/musixtex/musixtex-install.pdf differ diff --git a/Master/texmf-dist/doc/generic/musixtex/musixtex-install.tex b/Master/texmf-dist/doc/generic/musixtex/musixtex-install.tex index 458d118f6d8..b24bceaf793 100644 --- a/Master/texmf-dist/doc/generic/musixtex/musixtex-install.tex +++ b/Master/texmf-dist/doc/generic/musixtex/musixtex-install.tex @@ -98,6 +98,8 @@ The Lua script \verb\.../scripts/musixtex/musixtex.lua\ is simply a convenient wrapper that, by default, runs the following processes in order (and then deletes intermediate files): \begin{itemize}\topsep=0pt\itemsep=0pt +\item pre-processors \verb|prepmx|, \verb|pmxab| or \verb|autosp|, +as necessary \item \verb\etex\ (1st pass) \item \verb\musixflx\ (2nd pass) \item \verb\etex\ (3rd pass) diff --git a/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf b/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf index 4df687bb31e..5b7df7315df 100644 Binary files a/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf and b/Master/texmf-dist/doc/generic/musixtex/scripts/musixtex.pdf differ diff --git a/Master/texmf-dist/doc/man/man1/musixtex.1 b/Master/texmf-dist/doc/man/man1/musixtex.1 index d1d15a13706..1d98e7b87aa 100644 --- a/Master/texmf-dist/doc/man/man1/musixtex.1 +++ b/Master/texmf-dist/doc/man/man1/musixtex.1 @@ -1,24 +1,19 @@ .\" This manpage is licensed under the GNU Public License -.TH MUSIXTEX 1 2015-11-28 "musixtex version 0.12" "" +.TH MUSIXTEX 1 2015-12-12 "musixtex version 0.15" "" .SH NAME -musixtex \- processes MusiXTeX files, deleting intermediate files - +musixtex \- processes MusiXTeX files, using pre-processors prepmx, pmxab and autosp as necessary, +and then deletes intermediate and log files (unless +.B -i +is used) .SH SYNOPSIS [ texlua ] .B musixtex[.lua] { -.IR option -| -.IR jobname -[ .tex ] -| -.IR jobname -[ .aspc ] -| -.IR jobname -[ .ltx ] -} ... +.I option +| +.I jobname +[ .mtx | .pmx | .aspc | .tex | .ltx ] } ... .TP If a jobname argument has a .tex extension, the default effect is to process the file using .TP 12 @@ -37,26 +32,36 @@ If a jobname argument has a .tex extension, the default effect is to process the .BR ps2pdf (1) (Postscript to Portable Document Format) .TP -followed by removal of intermediate files. +normally followed by removal of intermediate and log files. A log musixtex.log is generated, even if other log files are removed. .P +If a jobname argument has a .pmx extension, the file is first preprocessed using +.BR pmxab (1) +and the resulting .tex file is processed as above. +.P +If a jobname argument has a .mtx extension, the file is first preprocessed using +.BR prepmx (1) +and the resulting .pmx file is processed as above. +.P If a jobname argument has a .aspc extension, the file is first preprocessed using .BR autosp (1) and the resulting .tex file is processed as above. .P If a jobname argument has a .ltx extension, the file is processed using .BR latex (1) -or -.BR pdflatex (1). +(or +.BR pdflatex (1)). .P -If a jobname argument has neither .tex nor .aspc nor .ltx extension, file +If a jobname argument has no extension, the script will look for a file +.IR jobname .mtx +or +.IR jobname .pmx +or .IR jobname .aspc or -.IR jobname .ltx -will be processed as above if it exists; otherwise file -.IR jobname .tex -will -be processed, if it exists. - +.IR jobname .tex +or +.IR jobname .ltx , +in that order, and process it as above. .SH OPTIONS .TP 8 .B -v @@ -66,10 +71,7 @@ output program name and version number, and quit output usage summary and quit .TP .B -l -changes the TeX processor to -.BR latex (1) -or -.BR pdflatex (1); +assumes LaTeX source; implied if the file has .ltx extension .TP .B -p @@ -85,9 +87,24 @@ or .BR dvipdfm (1) ) .TP +.B -c +preprocess pmx file using +.BR pmxchords (1) +.TP .B -d changes the dvi processor to .BR dvipdfm (1) +.TP +.B -F fmt +uses +.B fmt +as the TeX processor +.TP +.B -m +stops processing at the pmx file +.TP +.B -t +stops processing at the tex/mid files .TP .B -s stops processing at the dvi file @@ -96,30 +113,36 @@ stops processing at the dvi file stops processing at the ps file .TP .B -i -retain intermediate files +retain intermediate and log files .TP .B -1 -one-pass [pdf][la]tex processing +one-pass [pdf][la]tex processing; i.e., without calling +.B musixflx .TP .B -x call .BR makeindex (1) to update index database .TP -.B -a -force -.BR autosp (1) -preprocessing; implied if the file has .aspc extension. -.TP .B -f -default processing +restore default processing +.TP +.B -q +quiet mode (only musixtex's own messages); other messages are diverted to a temporary file. +If an error occurs at the TeX stage, processing halts immediately and the tail of the log file is sent to stderr. + + .TP 0 -Options affect processing of all succeeding MusiXTeX files unless changed by another option. -Option flags cannot be combined; e.g., use -.B -l -x -rather than -.BR -lx . +Options affect processing of all succeeding MusiXTeX files unless changed by another option. Option flags cannot be combined; e.g., use \fB -l -x \fP rather than \fB -lx\fP. +Note that four TeX engines are available via the -l and -p options: +.TP + etex default + latex -l + pdfetex -p + pdflatex -l -p +.TP 0 +The -F option allows any engine to be named. In that case, an attempt is made to deduce implied -l and -p settings from the presence or absence of the strings 'latex' and 'pdf' in the name of the engine. If this is not correct, the user should explicitly specify the appropriate option. .SH SEE ALSO .BR autosp (1), .BR etex (1), @@ -130,9 +153,10 @@ rather than .BR musixflx (1), .BR dvipdfm (1), .BR dvips (1), -.BR ps2pdf (1). -.br -musixdoc.pdf - +.BR pmxab (1), +.BR pmxchords (1) +.BR prepmx (1), +.BR ps2pdf (1) +and musixdoc.pdf. .SH AUTHOR This manual page was written by Bob Tennent . diff --git a/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf b/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf index fc91b3e65a6..937ce1d92ac 100644 Binary files a/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf and b/Master/texmf-dist/doc/man/man1/musixtex.man1.pdf differ diff --git a/Master/texmf-dist/scripts/musixtex/musixtex.lua b/Master/texmf-dist/scripts/musixtex/musixtex.lua index c85f38a8a15..f4de32954af 100755 --- a/Master/texmf-dist/scripts/musixtex/musixtex.lua +++ b/Master/texmf-dist/scripts/musixtex/musixtex.lua @@ -1,11 +1,13 @@ #!/usr/bin/env texlua -VERSION = "0.12" +VERSION = "0.15" --[[ - musixtex.lua: processes MusiXTeX files (and deletes intermediate files) + musixtex.lua: processes MusiXTeX files using prepmx and/or pmxab and/or + autosp as pre-processors (and deletes intermediate files) - (c) Copyright 2012-15 Bob Tennent rdt@cs.queensu.ca + (c) Copyright 2011-2015 Bob Tennent rdt@cs.queensu.ca + and Dirk Laurie dirk.laurie@gmail.com 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 @@ -26,8 +28,28 @@ VERSION = "0.12" --[[ ChangeLog: + + version 0.15 2015-12-03 DL + Option -q added, which redirects most screen output into + a temporary file. If an error occurs at the TeX stage, processing + halts immediately and the tail of the log file is sent to stderr. + + version 0.14 2015-12-01 DL + Writes `musixtex.log` and deletes other logfiles (except with -i) + Hierarchy of extensions emphasized in usage() and consistently + used elsewhere. + Unknown option-like arguments reported and ignored, not treated + as filenames + Warnings and error messages generated by musixtex.lua start with + respctively `!` and `!!`. + + version 0.13 2015-11-30 RDT + Process .mtx and .pmx files (suggested by Dirk Laurie) + exit_code is now an error count + Use pmxab exit code to distinguish between errors and warnings + version 0.12 2015-11-28 RDT - Process .ltx files with -l implied + Process .ltx files, with -l implied version 0.11 2015-07-16 RDT Automatic autosp preprocessing. @@ -63,188 +85,365 @@ VERSION = "0.12" Allow basename.tex as filename. Add -p option for pdfetex processing. Add standard -v -h options. - --]] +local orig_print = print function usage() - print("Usage: [texlua] musixtex.lua { option | basename[.tex] | basename[.aspc] basename[.ltx] } ... ") - print("options: -v version") - print(" -h help") - print(" -l latex (or pdflatex) (implied with .ltx extension)") - print(" -p pdfetex (or pdflatex)") - print(" -d dvipdfm") - print(" -s stop at dvi") - print(" -g stop at ps") - print(" -i retain intermediate files") - print(" -1 one-pass [pdf][la]tex processing") - print(" -F fmt use fmt as the TeX processor") - print(" -x run makeindex") - print(" -a preprocess using autosp (impled with .aspc extension)") - print(" -f restore default processing") + orig_print +[[ +Usage: [texlua] musixtex.lua { option | basename[.mtx | .pmx | .aspc | .tex | .ltx] } ... + When no extension is given, extensions are tried in the above order + until a source file is found. Preprocessing goes mtx-pmx-tex or + aspc-tex, with the entry point determined by the extension. + The normal route after preprocessing goes tex-dvi-ps-pdf, but shorter + routes are also available, see the options. +Options: -v version + -h help + -l latex source + -p direct tex-pdf (pdftex etc) + -F fmt use fmt as the TeX processor + -d tex-dvi-pdf (dvipdfm) + -c preprocess pmx file using pmxchords + -m stop at pmx + -t stop at tex/mid + -s stop at dvi + -g stop at ps + -i retain intermediate and log files + -q quiet mode (give only musixtex's own messages) + -1 one-pass [pdf][la]tex processing + -x run makeindex + -f restore default processing +Four TeX engines are available via the -l and -p options. + etex default + latex -l + pdfetex -p + pdflatex -l -p +The -F option allows any engine to be named. In that case, an attempt is made +to deduce implied -l and -p settings from the presence or absence of the +strings `latex` and `pdf` in the name of the engine. If this is not correct, +the user should explicitly specify the appropriate option.]] end function whoami () print("This is musixtex.lua version ".. VERSION .. ".") end -whoami() +function exists (filename, nolog) + local f = io.open(filename, "r") + if f then + f:close() + if not nolog then musixlog:write("Processing " .. filename,'\n' ) end + return true + else + return false + end +end + +-- The global variables below may be changed by set_options(). System +-- commands for the various programs are mostly set to nil if the step +-- is to be omitted, which can be tested by a simple "if" statement. +-- Exceptions: +-- 'tex' is the command for processing a TeX file, but it is important +-- to know whether the user has explicitly specified an option that +-- affects this choice, in which case the automatic selection of the +-- command is restricted or disabled. +-- force_engine "use the command provided" +-- override records when 'l' and/or 'p' options are in effect +-- 'dvi' is the command for processing a DVI file, but there are two +-- reasons for not needing it and it is important for the automatic +-- selection of a TeX engine to know which is in effect. This is +-- possible by exploiting the the fact that Lua has two false values. +-- dvi == nil "do not produce a DVI file" (but maybe PDF) +-- dvi == false "do not process the DVI file" (but stop after TeX) +local dvips = "dvips -e0" +function defaults() + prepmx = "prepmx" + pmx = "pmxab" + tex = "etex" + musixflx = "musixflx" + dvi = dvips + ps2pdf = "ps2pdf" + cleanup = true -- clean up intermediate and log files + index = false + latex = false + force_engine = false -- indicates whether -F is specified + override = "" + passes = 2 + quiet = "" -- set by "-q" +end + + if #arg == 0 then + whoami() usage() os.exit(0) end --- defaults: -tex = "etex" -musixflx = "musixflx" -dvips = "dvips -e0 " -dvi = dvips -ps2pdf = "ps2pdf" -intermediate = 1 -passes = 2 -index = 0 -preprocess = 0 +-- Logging on `musixtex.log` everything that is printed, all os calls, +-- and warnings from other log files. -exit_code = 0 -narg = 1 -repeat - this_arg = arg[narg] +musixlog = io.open("musixtex.log","w") +if not musixlog then + print"!! Can't open files for writing in current directory, aborting" + os.exit(1) +end + +print = function(...) + orig_print(...) + musixlog:write(...,"\n") -- only the first argument gets written! +end + +local orig_remove = os.remove +remove = function(filename) + if exists(filename,"nolog") then + musixlog:write(" removing ",filename,"\n") + return orig_remove(filename) + end +end + +local orig_execute = os.execute +execute = function(command) + musixlog:write(" ",command,"\n") + return orig_execute(command .. quiet) +end + +function report_warnings(filename,pattern) + local log = io.open(filename) + if not log then + print("! No file "..filename) + return + end + for line in log:lines() do + if line:match(pattern) then + musixlog:write("! "..line,"\n") + end + end +end + +function report_error(filename) + local log = io.open(filename) + if not log then + print("! No file "..filename) + return + end + local trigger = false + for line in log:lines() do + trigger = trigger or line:match"^!" + if trigger then + io.stderr:write("! "..line,"\n") + end + end +end + + function process_option(this_arg) if this_arg == "-v" then os.exit(0) elseif this_arg == "-h" then usage() os.exit(0) - elseif this_arg == "-l" then - if tex == "pdfetex" then - tex = "pdflatex" - else - tex = "latex" - end + elseif this_arg == "-l" then + latex = true + override = override .. 'l' elseif this_arg == "-p" then - if tex == "latex" then - tex = "pdflatex" - else - tex = "pdfetex" - end - dvi = ""; ps2pdf = "" + dvi = nil + override = override .. 'p' elseif this_arg == "-d" then - dvi = "dvipdfm"; ps2pdf = "" + dvi = "dvipdfm"; ps2pdf = nil + elseif this_arg == "-c" then + pmx = "pmxchords" + elseif this_arg == "-F" then + narg = narg+1 + tex = arg[narg] + force_engine = true elseif this_arg == "-s" then - dvi = ""; ps2pdf = "" + dvi = false; ps2pdf = nil; + elseif this_arg == "-g" then + dvi = dvips; ps2pdf = nil elseif this_arg == "-i" then - intermediate = 0 + cleanup = false + elseif this_arg == "-x" then + index = true elseif this_arg == "-1" then passes = 1 elseif this_arg == "-f" then - tex = "etex"; dvi = dvips; ps2pdf = "ps2pdf"; intermediate = 1; passes = 2; index = 0; preprocess = 0 - elseif this_arg == "-g" then - dvi = dvips; ps2pdf = "" - elseif this_arg == "-x" then - index = 1 - elseif this_arg == "-a" then - preprocess = 1 - elseif this_arg == "-F" then - narg = narg+1 - tex = arg[narg] + defaults() + elseif this_arg == "-t" then + tex, dvi, ps2pdf = nil,nil,nil + elseif this_arg == "-m" then + pmx, tex, dvi, ps2pdf = nil,nil,nil + elseif this_arg == "-q" then + if not tempname then + tempname = tempname or os.tmpname() + print("Redirecting screen output to "..tempname) + end + if dvi == dvips then dvi = dvi .. " -q" end + quiet = " >> " .. tempname else - repeat -- pseudo loop to get effect of "continue" using "break" - texfilename = this_arg - if texfilename ~= "" and string.sub(texfilename, -5, -1) == ".aspc" then - if io.open(texfilename, "r") then - print("Processing ".. texfilename ) - else - print("No file: " .. texfilename ) - break -- out of pseudo loop - end - preprocess = 1 - filename = string.sub(texfilename, 1, -6) - texfilename = filename .. ".tex" - elseif texfilename ~= "" and string.sub(texfilename, -4, -1) == ".ltx" then - if io.open(texfilename, "r") then - print("Processing ".. texfilename ) - else - print("No file: " .. texfilename ) - break -- out of pseudo loop - end - if tex == "pdfetex" then - tex = "pdflatex" - else - tex = "latex" - end - filename = string.sub(texfilename, 1, -5) - elseif texfilename ~= "" and string.sub(texfilename, -4, -1) == ".tex" then - if io.open(texfilename, "r") then - print("Processing ".. texfilename ) - else - print("No file: " .. texfilename ) - break -- out of pseudo loop - end - filename = string.sub(texfilename, 1, -5) - elseif io.open(texfilename .. ".aspc", "r") then - preprocess = 1 - print("Processing ".. texfilename .. ".aspc") - filename = texfilename - elseif io.open(texfilename .. ".ltx", "r") then - if tex == "pdfetex" then - tex = "pdflatex" - else - tex = "latex" - end - ltx = 1 - filename = texfilename - texfilename = filename .. ".ltx" - elseif io.open(texfilename .. ".tex", "r") then - print("Processing ".. texfilename .. ".tex") - filename = texfilename - texfilename = filename .. ".tex" + print("! Unknown option "..this_arg.." ignored") + end +end + +function find_file(this_arg) + basename, extension = this_arg:match"(.*)%.(.*)" + if not extension then + basename = this_arg + for ext in ("mtx,pmx,aspc,tex,ltx"):gmatch"[^,]+" do + if exists (basename .. "." .. ext) then + extension = ext + break + end + end + if not extension then + print("!! No file " .. basename .. "[.mtx|.pmx|.aspc|.tex|.ltx]") + exit_code = exit_code+1 + return + end + end + if tex then -- tex output enabled, now select engine + if tex:match"pdf" then dvi = nil end + if not dvi then ps2pdf = nil end + -- .ltx extension will be taken into account later, in `process` + -- deduce tex/latex from current engine name if -l is not specified + if not override:match"l" then latex = tex:match"latex" end + if not force_engine then -- select appropriate default engine + if latex then + if dvi==nil then tex = "pdflatex" else tex = "latex" end + else + if dvi==nil then tex = "pdfetex" else tex = "etex" end + end + end + end + return basename, extension +end + +function preprocess(basename,extension) + if not (basename and extension) then return end + if extension == "mtx" then + if execute(prepmx .. " " .. basename ) == 0 then + extension = "pmx" + else + print ("!! prepmx preprocessing of " .. basename .. ".mtx fails.") + return + end + end + if extension == "pmx" then + local OK = true + if pmx then + local code = execute(pmx .. " " .. basename) + local pmxaerr = io.open("pmxaerr.dat", "r") + if (not pmxaerr) then + OK = false + print("!! No pmx log file.") else - print("No file: " .. texfilename ) - break -- out of pseudo loop - end - if preprocess == 1 and os.execute("autosp " .. filename) ~= 0 then - print ("Preprocessing fails.") - break -- out of pseudo loop - end - os.remove( filename .. ".mx2" ) - if (passes == 1 or os.execute(tex .. " " .. texfilename) == 0) and - (passes == 1 or os.execute(musixflx .. " " .. filename) == 0) and - (os.execute(tex .. " " .. texfilename) == 0) and - ((tex ~= "latex" and tex ~="pdflatex") - or (index == 0) - or (os.execute("makeindex -q " .. filename) == 0)) and - ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. texfilename) == 0)) and - ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. texfilename) == 0)) and - ((tex ~= "latex" and tex ~= "pdflatex") - or (os.execute(tex .. " " .. texfilename) == 0)) and - (dvi == "" or (os.execute(dvi .. " " .. filename) == 0)) and - (ps2pdf == "" or (os.execute(ps2pdf .. " " .. filename .. ".ps") == 0) ) - then - if ps2pdf ~= "" then - print(filename .. ".pdf generated by " .. ps2pdf .. ".") - end - if intermediate == 1 then -- clean-up: - os.remove( filename .. ".mx1" ) - os.remove( filename .. ".mx2" ) - if dvi ~= "" then - os.remove( filename .. ".dvi" ) - end - if ps2pdf ~= "" then - os.remove( filename .. ".ps" ) + extension = "tex" + local linebuf = pmxaerr:read() + local err = tonumber(linebuf) + if (code == 0) then + if err ~=0 then + print ("! pmx produced a warning on line "..err.. + " of "..basename..".pmx") end + else + OK = false + print ("!! pmx processing of " .. basename .. ".pmx fails.") end - else - print("Musixtex processing of " .. texfilename " fails.\n") - exit_code = 2 - --[[ uncomment for debugging - print("tex = ", tex) - print("dvi = ", dvi) - print("ps2pdf = ", ps2pdf) - --]] + pmxaerr:close() end - until true -- end of pseudo loop + end + if not OK then + exit_code = exit_code+1 + return + end + end + if extension == "aspc" then + if execute ("autosp " .. basename .. ".aspc" ) == 0 then + extension = "tex" + else + print ("!! autosp preprocessing of " .. filename .. " fails.") + exit_code = exit_code+1 + return + end + end + return extension +end - end --if this_arg == ... +function tex_process(tex,basename,extension) + if not (extension == "tex" or extension == "ltx") or not tex then return end + remove(basename .. ".mx2") + local filename = basename .. "." ..extension +-- .ltx extension re-selects engine only for the current file, and only +-- if default processing is plain TeX + local latex = latex + if extension == "ltx" then + if not force_engine and not latex then + if dvi then tex = "latex" else tex = "pdflatex" end + end + latex = true + end + if quiet ~= "" then + tex = tex .. " -halt-on-error" + end + local OK = (execute(tex .. " " .. filename) == 0) + if passes ~= 1 then + OK = OK and (execute(musixflx .. " " .. basename) == 0) + and (execute(tex .. " " .. filename) == 0) + if latex and index then + OK = OK and (execute("makeindex -q " .. basename) == 0) + and (execute(tex .. " " .. filename) == 0) + if exists (basename .. ".toc","nolog") then + -- an extra line for the index will have been added + OK = OK and (execute(tex .. " " .. filename) == 0) + -- there is a tiny possibility that the extra line for the index + -- has changed the pagination. If you feel this should not be + -- ignored, here are the possibilities: + -- a. Do an extra TeX pass regardless. + -- b. Provide a user option -4 to force the extra pass. + -- c. Compare aux files to find out. + end + end + end + if (quiet ~= "") and not OK then + report_error(basename..".log") + end + if OK and latex then + report_warnings(basename..".log","LaTeX.*Warning") + end + if dvi then OK = OK and (execute(dvi .. " " .. basename) == 0) end + if dvi and ps2pdf then + OK = OK and (execute(ps2pdf .. " " .. basename .. ".ps") == 0) + if OK then + print(basename .. ".pdf generated by " .. ps2pdf .. ".") + end + end + if not OK then + print("!! Processing of " .. filename .. " fails.\n") + exit_code = exit_code+1 + end +end + +whoami() + +defaults() + +exit_code = 0 +narg = 1 + +repeat + this_arg = arg[narg] + if this_arg:match"^%-" then process_option(this_arg) + else + basename, extension = find_file(this_arg) -- nil,nil if not found + extension = preprocess(basename,extension) + tex_process(tex,basename,extension) + if basename and cleanup then + remove("pmxaerr.dat") + for ext in ("mx1,mx2,dvi,ps,idx,log,ilg,pml"):gmatch"[^,]+" do + remove(basename.."."..ext) + end + end + end narg = narg+1 until narg > #arg + +musixlog:close() os.exit( exit_code ) diff --git a/Master/texmf-dist/tex/generic/musixtex/musixtex.tex b/Master/texmf-dist/tex/generic/musixtex/musixtex.tex index 0016785fb64..44377fda165 100644 --- a/Master/texmf-dist/tex/generic/musixtex/musixtex.tex +++ b/Master/texmf-dist/tex/generic/musixtex/musixtex.tex @@ -25,15 +25,20 @@ \def\mufl@x{0.83}% \def\mxmajorvernumber{1} -\def\mxminorvernumber{19} +\def\mxminorvernumber{20} \def\mxvernumber{\mxmajorvernumber\mxminorvernumber}% make it possible to compare with \ifnum \def\mxversuffix{}% \edef\mxversion{\mxmajorvernumber.\mxminorvernumber\mxversuffix} -\def\mxdate{2015-11-29} +\def\mxdate{2015-12-13} \immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}% \everyjob{\immediate\write16{MusiXTeX(c) \mxversion\space<\mxdate>}}% +% 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 @@ -4213,21 +4218,22 @@ %%% 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 -\def\trml#1{\advance\transpose2\loffset{0.5}{\ibl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trmu#1{\advance\transpose-3\loffset{0.5}{\ibu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% -\def\trrml#1{\advance\transpose2\loffset{0.5}{\ibbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trrmu#1{\advance\transpose-3\loffset{0.5}{\ibbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% -\def\trrrml#1{\advance\transpose2\loffset{0.5}{\ibbbl0{#1}9}\roffset{0.5}{\tbl0}\advance\transpose-2}% -\def\trrrmu#1{\advance\transpose-3\loffset{0.5}{\ibbbu0{#1}9}\roffset{0.5}{\tbu0}\advance\transpose3}% +\def\trml#1{\raise2\internote\hbox{\loffset{0.5}{\ibl0{#1}9}\roffset{0.5}{\tbl0}}}% +\def\trmu#1{\raise-3\internote\hbox{\loffset{0.5}{\ibu0{#1}9}\roffset{0.5}{\tbu0}}}% +\def\trrml#1{\raise2\internote\hbox{\loffset{0.5}{\ibbl0{#1}9}\roffset{0.5}{\tbl0}}}% +\def\trrmu#1{\raise-3\internote\hbox{\loffset{0.5}{\ibbu0{#1}9}\roffset{0.5}{\tbu0}}}% +\def\trrrml#1{\raise2\internote\hbox{\loffset{0.5}{\ibbbl0{#1}9}\roffset{0.5}{\tbl0}}}% +\def\trrrmu#1{\raise-3\internote\hbox{\loffset{0.5}{\ibbbu0{#1}9}\roffset{0.5}{\tbu0}}}% % whole notes are wider than quarter/half notes: -\def\Trml#1{\advance\transpose2\loffset0{\ibl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trmu#1{\advance\transpose-3\loffset{1.125}{\ibu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% -\def\Trrml#1{\advance\transpose2\loffset0{\ibbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trrmu#1{\advance\transpose-3\loffset{1.125}{\ibbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% -\def\Trrrml#1{\advance\transpose2\loffset0{\ibbbl0{#1}9}\roffset{1.125}{\tbl0}\advance\transpose-2}% -\def\Trrrmu#1{\advance\transpose-3\loffset{1.125}{\ibbbu0{#1}9}\roffset0{\tbu0}\advance\transpose3}% +\def\Trml#1{\raise2\internote\hbox{\loffset0{\ibl0{#1}9}\roffset{1.125}{\tbl0}}}% +\def\Trmu#1{\raise-3\internote\hbox{\loffset{1.125}{\ibu0{#1}9}\roffset0{\tbu0}}}% +\def\Trrml#1{\raise2\internote\hbox{\loffset0{\ibbl0{#1}9}\roffset{1.125}{\tbl0}}}% +\def\Trrmu#1{\raise-3\internote\hbox{\loffset{1.125}{\ibbu0{#1}9}\roffset0{\tbu0}}}% +\def\Trrrml#1{\raise2\internote\hbox{\loffset0{\ibbbl0{#1}9}\roffset{1.125}{\tbl0}}}% +\def\Trrrmu#1{\raise-3\internote\hbox{\loffset{1.125}{\ibbbu0{#1}9}\roffset0{\tbu0}}}% %%% octave lines -- cgit v1.2.3