%%%%%%%%%%%%%%%%%%%%%%% %% %% %% pmx.tex %% %% %% %%%%%%%%%%%%%%%%%%%%%%% \ifx\pmxversion\undefined\else\endinput\fi \def\pmxversion{3.00}\def\pmxdate{27 Jan 23} % 3.00 add steep beam stuff % 2.94 add def'ns of \hbp, \hbpp % 2.80 add def'n of \slx, real stemlength % 2.73 4 Feb 16 Fix \pmxclefsym to include \smalltreblelowoct % 2.73 Added \pmxlyr command. % 2.619 At movement break, directly set \nbinstruments in \newmovement; % probably don't need \newnoi any more. % (2.619a) Added \resetlyrics in \newmovement. % 2.614 Comment out definitions of some dotted rests, since either in % musixtex.tex or not needed. % Modified for two figured bass lines 081115 % 2.502 (Olivier Vogel) change all the commands of the form % \font\...=\fontid sy1000 to \font\...=cmsy10 % 2.408 comment out extra definition of \mdot % tweak \hpausep, replace \liftPAuse, add \liftPAusep % 2.406 redefine \starteq to put down strut for first system inside \znotes % 2.354a add \zcharnote{##2}{~} to \tieforsl % 2.354 % Macros \tieforisu, etc, to replace slurs with ties, for use with musixps % 2.353 % Define \pmxversion % Insert Dirk's 2nd set of (LaTeX-aware) redefinitions for \centerline etc. % Add 5th option for \endset to \newmovement, for Rz. % 12/24/01 add \setzalaligne % 12/23/01 Remove \parskip re-definition. % 12/16/01 Define \psforts (postscript slur endings to replace \midslur) % 10/20/01 added defn's of \bigcna, etc % 10/20/01 define \resetsize, redefine \gaft, \grace, and \shlft so resizing % is conditional on current staff line spacing. % 11 September Redefine liftpausc to include ledger line. % 26 Aug 01 Add \pcaesura, \pbreath % 10/21/00 Added PMXbarnotrue/false and stopped PMX zapping writezbarno % 15 October added vertical equalization macros % 4 July added \PAusep, \brevep, dynamic mark placement \pmxdyn, \sfz % 1 July inserted stuff for hairpins % 31 May 99 Redefined \smno % \immediate\write10% {PMX, a Preprocessor for MusiXTeX, Version\space\pmxversion b\space<\pmxdate>}% % Check for MusiXTeX version. TeX generates an error, not an ordinary % \end, because the \ifnum is not completed. \ifnum\mxvernumber<121\immediate\write16{ } \immediate\write16{****************} \immediate\write16{! STOPPING TeX because MusiXTeX Version = \mxvernumber} \immediate\write16{ while PMX 2.71+ requires at least 121} \immediate\write16{****************} \immediate\write16{ }\end{document}\fi % \edef\catcodeat{\the\catcode`\@}\catcode`\@=11 % % The next 4 lines are for Don's home use only % \font\specfnt=cmssqi8% \def\mtr#1{\zcharnote{#1}% {\specfnt\kern 1.5\internote\raise 0.3\internote\hbox to 0pt{/\hss}% \kern -0.7\internote\raise 1.0\internote\hbox to 0pt{/\hss}}} \newif\ifolder% % % Older fonts had clefs at different heights. If you have the older % version you should uncomment the following line %\oldertrue% % % The next 3 lines should be in musixmad. They were omitted in % some early versions! % %\newcount\s@Nx %\newcount\s@Nxi %\newcount\s@Nxii % % Stemlength macro shorthands for 2-note unbeamed tremolos % \def\slx#1{\stdstemfalse\nostemcut\stemlength{#1}} \def\slz{\stemcut\stemlength{4.66}} % % Special clef change stuff % \newcount\reflect \def\pmxnewclefs{\m@loop\s@l@ctclefs\o@c\a@c\repeat}% \newtoks\pmxclefsym \def\pmxclef#1#2{\ifnum#1=0\def\pmxclefsym{\smalltrebleclef}\else\ifnum#1<5% \def\pmxclefsym{\smallaltoclef}\else\ifnum#1=7\def\pmxclefsym{\smalltrebleclef}% \else\ifnum#1=8\def\pmxclefsym{\smalltreblelowoct}% \else\def\pmxclefsym{\smallbassclef}\fi\fi\fi\fi% % Adjust height here for older clef default heights. \reflect#2\ifolder\ifnum#1=0\advance\reflect-2\else\ifnum#1<5\advance\reflect-4% \else\advance\reflect-6\fi\fi\fi% \lcharnote{0}{\raise\reflect\internote\hbox{\pmxclefsym}}}% % % Grace note stuff, incl. macro to reset size after going tiny. % This may assume that \musicsize is 20pt but some staves may have % \setsize#1\smallvalue % \def\resetsize{\ifdim\internote<.95\Internote% \let\musictinyfont\musicthirteen\smallnotesize\else\normalnotesize\fi}% \def\settiny{\ifdim\internote<.95\Internote\let\musictinyfont\musiceleven\fi% \tinynotesize}% \def\grace#1#2#3{\off{-#1pt}\settiny\stdstemfalse#2\zcu{#3}% \resetsize\off{#1pt}}% \def\shlft#1#2{\off{-#1pt}\settiny\stdstemfalse#2\resetsize\off{#1pt}}% \def\gaft#1#2{\bsk\roffset{#1}{{\settiny\stdstemfalse#2\resetsize}}\sk}% % % The following keep octaviation out of brackets. % 10/20/01: Are these used anywhere??? % %\def\Gshl#1{\off{-#1pt}\tinynotesize}% %\def\Gshr#1{\normalnotesize\off{#1pt}}% \def\segnoo#1#2{\zcharnote{#2}{\kern#1pt\musicsmallfont\char"56}}% \def\ssegno#1{\zcharnote{#1}{\musictinyfont\char86}}% % % Some ornaments... % % Font for x-trill symbol. Could make this more general. % \def\xtr#1{\zcharnote{#1}{\xtrfont\char"02}} % % Plus-trill % \def\ptr#1{\ptrx{#1}{1.8}{.35}} \def\ptrx#1#2#3{\zcharnote{#1}{\raise.9\internote\hbox{% \pcil\h@lf\qn@width\kern\pcil% \razclef#2\internote\pcil#3\internote\kern-\h@lf\razclef\vrule height \h@lf\pcil depth \h@lf\pcil width \razclef\kern-\h@lf\razclef\kern-\h@lf\pcil\kern-.1pt \vrule height \h@lf\razclef depth \h@lf\razclef width \pcil}}% }% % % Put in a number for an xtuplet. % \def\xnum#1#2#3{\off{#1\elemskip}\zcharnote{#2}{\smalltype\it #3}% \off{-#1\elemskip}} % % accidental skips % \def\ast#1{\off{#1\elemskip}} % % Check for and read a .mod file; open the .ask file % \newread\pmxmod \def\readmod#1{\openin\pmxmod #1.mod\relax \ifeof\pmxmod\else\input #1.mod\fi\closein\pmxmod} % % Macros for optional small notes, usually w/ down stems. Offset to center % them below a large note. I used these in Matteis. % %\def\smno#1{\roffset{.17}{\tinynotesize#1\normalnotesize}}% % % Redefined, due to some mysterious problem with \roffset % \def\smno#1{\off{.17\qn@width}\tinynotesize#1\normalnotesize\off{-.17\qn@width}}% \def\pmno#1{\roffset{.08}{\smallnotesize#1\normalnotesize}}% \def\smq#1{\smno{\zql{#1}}}\def\smc#1{\smno{\zcl{#1}}}% \def\smh#1{\smno{\zhl{#1}}}% % % Single-digit meter symbol % \newbox\workbox% \def\meterN#1{\setbox\workbox=\vbox{\hbox{\ \meterfont #1}}% \vbox to 8\internote{\offinterlineskip\vss\hbox to \wd\workbox{\hss \meterfont #1\hss}\vss }}% % % Meter symbol '3' with vertical slash % \def\meterIIIS{\kern\internote\raise\Interligne\hbox{\meterfont 3}% \kern -2.0\internote \vrule height 7\internote depth -\internote width0.3\internote \kern 1.7\internote}% % % Fractional meter with a slash % \def\meterfracS#1#2{% \kern\internote\raise2\Interligne\rlap{\meterfont #1}%\lower2\Interligne% \hbox{\meterfont #2}% \kern -1.85\internote \vrule height 8\internote width0.3\internote \kern 1.55\internote}% % % *Symbols* for use in figures % \def\sharpfig{\musixchar92} \def\flatfig{\musixchar90} \def\natfig{\musixchar94} \def\fsmsh{\llap{\musixchar92}} \def\fsmfl{\llap{\musixchar90}} \def\fsmna{\llap{\musixchar94}} % % Macros for editorial accidentals % \def\qedit#1{\roffset{.2}{\zcharnote{#1}{\normtype\rm?}}} \def\qsharp#1{% \loffset{.2}{\zcharnote{#1}{\sharpfig\lower1.3\internote\hbox{\normtype\rm?}}}} \def\qflat#1{% \loffset{.2}{\zcharnote{#1}{\flatfig\lower.8\internote\hbox{\normtype\rm?}}}} \def\qnat#1{% \loffset{.2}{\zcharnote{#1}{\natfig\lower1.2\internote\hbox{\normtype\rm?}}}} \def\esharp#1{\roffset{.3}{\zcharnote{#1}{\sharpfig}}} \def\eflat#1{\roffset{.3}{\zcharnote{#1}{\flatfig}}} \def\enat#1{\roffset{.3}{\zcharnote{#1}{\natfig}}} % % Cautionary big accidentals % \def\bigcna{\cna} \def\bigcfl{\cfl} \def\bigcsh{\csh} % % Some fonts...for some reason my system can't do cmbx12 scaled \magstep4 % 9/17/97 Must redo the following 3 lines to permit EC/DC fonts % %\font\BIGfont=cmbx10 scaled\magstep4\font\Bigfont=cmbx10 scaled\magstep2 %\font\tempo=\fontid bx12% %\font\dyn=\fontid bx10% \iflongDCfontnames \font\xtrfont=cmsy10 \font\tempo=\fontid bx1200 \font\dyn=\fontid bx1000 \else\iflongECfontnames \font\xtrfont=cmsy10 \font\tempo=\fontid bx1200 \font\dyn=\fontid bx1000 \else %\font\xtrfont=cmsy10 %\font\BIGfont=cmbx10 scaled\magstep4 %\font\Bigfont=cmbx10 scaled\magstep2 \font\xtrfont=cmsy10 % Definitions deleted per Bob Tennent's request 150726 %\font\BIGfont=\fontid bx10 scaled\magstep4 %\font\Bigfont=\fontid bx10 scaled\magstep2 \font\tempo=\fontid bx12% \font\dyn=\fontid bx10% \fi\fi % % Continuation figure % \def\Cont#1#2{\advance\figdrop by #1\lower\figdrop\internote% \hbox to \z@{\kern -0.3\noteskip% \vbox{\hrule height 1.4\lthick width #2\noteskip}\hss}% \advance\figdrop by -#1}% \def\Cott#1#2{\advance\figdtwo by #1\lower\figdtwo\internote% \hbox to \z@{\kern -0.3\noteskip% \vbox{\hrule height 1.4\lthick width #2\noteskip}\hss}% \advance\figdtwo by -#1}% % % Tiny C clef on line #1: Will need to mod with new fonts 11-4-96 % \newdimen\razclef\newdimen\symwid% \newdimen\pcil %\ifnum\musicsize=20\pcil4pt\else\pcil3.25pt\fi% \def\preclef#1#2{% \ifnum#2=20\pcil4pt\else\pcil3.25pt\fi% \symwid3.692\pcil% \hbox{\vbox{\hrule height \lthick width \symwid}% \kern-\symwid\raise\pcil\vbox{\hrule height \lthick width \symwid}% \kern-\symwid\raise2\pcil\vbox{\hrule height \lthick width \symwid}% \kern-\symwid\raise3\pcil\vbox{\hrule height \lthick width \symwid}% \kern-\symwid\raise4\pcil\vbox{\hrule height \lthick width \symwid}% \razclef-2.43\pcil\advance\razclef#1\pcil% \kern-\symwid\raise\razclef\hbox to \symwid{\hss\smallaltoclef\hss}% }}% \def\namewpc#1#2#3#4#5{\raise#4pt\hbox to \parindent{\raise#5pt\hbox{#1}% \hfill\preclef{#2}{#3}}} % % Stuff for figure placements % % 9/17/97 redo font names % %\font\figfont=cmr10 \def\figfont{\normtype\rm}% % \newcount\figdrop \newcount\figdtwo %\figdrop=6 \newcount\sysno \global\sysno=0\relax% \def\Figu#1#2{\off{.9pt}\advance\figdrop by #1\lower\figdrop\internote% \hbox to \z@{\figfont#2\hss}\off{-.9pt}\advance\figdrop by -#1}% % % Special Figure macro for 2-bass parts % %\def\Figt#1#2{\zcharnote{#1}{\kern.9pt\figfont#2}}% \def\Figt#1#2{\off{.9pt}\advance\figdtwo by #1\lower\figdtwo\internote% \hbox to \z@{\figfont#2\hss}\off{-.9pt}\advance\figdtwo by -#1}% % % Bar numbering % \systemnumbers% \def\raisebarno{3.5\internote}% \def\shiftbarno{3.5\internote}% \newdimen\rbnbl\newdimen\sbnbl\newdimen\xrbn\newdimen\xsbn% \newdimen\rbndim\newdimen\sbndim% \global\rbndim\raisebarno\global\sbndim\shiftbarno% \global\def\raisebarno{\rbndim}\global\def\shiftbarno{\sbndim}% \global\rbnbl\rbndim\global\sbnbl\sbndim\global\xrbn0pt\global\xsbn0pt% % % The following 2 macros are messy, but they retain \raisebarno as a macro and % retain original definition in musixtex for the end-of-line utility. % \def\bnrs#1#2{% % % If here, baseline values will not change. On exit, \rbndim will % be the temporary value, \xrbn will be the increment (must save to check later; % if <>0 then baseline hasn't changed!), and \rbnbl is still the baseline value. % \global\xrbn#1\internote\global\advance\rbndim\xrbn% \global\xsbn#2\internote\global\advance\sbndim\xsbn% }% \def\writebarno{% \ifnum\barno>1% \boxit{\smalltype\bf\the\barno\barnoadd}% \ifdim\raisebarno=\rbnbl% \empty% \else% \ifdim\xrbn=0pt% \global\rbnbl\raisebarno% \global\def\raisebarno{\rbndim}% \else% \global\xrbn0pt% \fi% \global\rbndim\rbnbl% \fi% \ifdim\shiftbarno=\sbnbl% \empty% \else% \ifdim\xsbn=0pt% \global\sbnbl\shiftbarno% \global\def\shiftbarno{\sbndim}% \else% \global\xsbn0pt% \fi% \global\sbndim\sbnbl% \fi% \fi% }% % % Make small accidentals the default % \smallaccid% % % Put in a new time signature. Modified 151226 % \def\newtimes#1% {\ifnum#1=0% \n@wbar\writ@newclefs\advance\barsinlin@\@ne% % % Added 151216 % \wbarno@x\Writ@newsigns% \advance\n@skip0.3\afterruleskip\widthtyp@\@ne\t@rmskip% \Writ@meters\lastbarpos\lin@pos\addspace\afterruleskip% \else\ifnum#1=1% \alaligne \else \wbarno@x% % % Added 151226 % \addspace\afterruleskip % % -0.7 gave too much space before meter. % % \advance\n@skip-0.7\afterruleskip\widthtyp@\@ne\t@rmskip% \advance\n@skip-\afterruleskip\widthtyp@\@ne\t@rmskip% \Writ@meters\addspace\afterruleskip% \fi\fi}% % % changecontext with no line break % \def\xchangecontext{\n@wbar\writ@newclefs \wbarno@x\Writ@newsigns\Writ@meters\addspace\afterruleskip}% % % changecontext with forced line break and no barline % \def\zachangecontext{\advance\n@skip\beforeruleskip \widthtyp@\@ne \t@rmskip \zn@wbar \writ@newclefs \advance\barsinlin@\@ne \Writ@newsigns\z@suspend\contpiece } % % Dotted rests. % %\def\hsp{\pt7\hs} %\def\hspp{\ppt7\hs} %\def\qsp{\pt5\qs}\def\dsp{\pt5\ds}\def\qpp{\pt5\qp} %\def\qspp{\ppt5\qs}\def\dspp{\ppt5\ds}\def\qppp{\ppt5\qp} %\def\pausep{\off{.33\qn@width}\pt5\off{-.33\qn@width}\pause} %\def\pausep{\wholeshift{\pt5}\pause} \def\hpausepp{\wholeshift{\ppt5}\hpause} \def\pausepp{\wholeshift{\ppt5}\pause} % % Redefine headline to lower pagenumber. The original defn: % \def\makeheadline{\vbox to\z@{\vskip-22.5\p@ % \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip} % \def\makeheadline{\vbox to\z@{\vskip-8\p@ \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip} % % Dot at arbitrary height above a top line of staff % %\def\mdot#1{\zcharnote8{\kern-5.3pt\raise{#1}\internote\hbox{\musixchar0}}} % % Titles % %\def\titles#1#2#3#4#5#6#7{\kern-\lin@pos% %\kern-3.2\Interligne\kern-\parindent\kern-\afterruleskip% %\kern-\sign@skip% %\vbox{\vskip#1\Interligne %\ifx\relax#2\relax\else\leftline{\Bigtype #2}\fi\vskip#3\Interligne% %\ifx\relax#4\relax\else\centerline{\BIGtype #4}\fi\vskip#5\Interligne% %\ifx\relax#6\relax\else\rightline{\Bigtype #6}\fi\vskip#7\Interligne}}% % % New def'n per Dirk Laurie to allow multiple lines. % \ifx\documentclass\undefined \def\centerlines#1{{\def\\{\hss\egroup\medskip\par\line\bgroup\hss}% \line\bgroup\hss#1\hss\egroup}} \def\leftlines#1{{\def\\{\hss\egroup\smallskip\par\line\bgroup}% \line\bgroup#1\hss\egroup}} \def\rightlines#1{{\def\\{\egroup\smallskip\par\line\bgroup\hss}% \line\bgroup\hss#1\egroup}} \else \def\centerlines#1{{\centering#1\\}} \def\leftlines#1{{\raggedright#1\\}} \def\rightlines#1{{\raggedleft#1\\}} \fi %\def\centerline#1{{\def\\{\hss\egroup\medskip\par\line\bgroup\hss}% % \line\bgroup\hss#1\hss\egroup}} %\def\leftline#1{{\def\\{\hss\egroup\smallskip\par\line\bgroup}% % \line\bgroup#1\hss\egroup}} %\def\rightline#1{{\def\\{\egroup\smallskip\par\line\bgroup\hss}% % \line\bgroup\hss#1\egroup}} \def\titles#1#2#3#4#5#6#7{\kern-\lin@pos% \kern-3.2\Interligne\kern-\parindent\kern-\afterruleskip% \kern-\sign@skip% \vbox{\vskip#1\Interligne % Next 3 lines replaced at Bob Tennent's request 150726 %\ifx\relax#2\relax\else{\Bigtype\leftlines{#2}}\fi\vskip#3\Interligne% %\ifx\relax#4\relax\else{\BIGtype\centerlines{#4}}\fi\vskip#5\Interligne% %\ifx\relax#6\relax\else{\Bigtype\rightlines{#6}}\fi\vskip#7\Interligne}}% \ifx\relax#2\relax\else{\bigtype\leftlines{#2}}\fi\vskip#3\Interligne% \ifx\relax#4\relax\else{\BIgtype\centerlines{#4}}\fi\vskip#5\Interligne% \ifx\relax#6\relax\else{\bigtype\rightlines{#6}}\fi\vskip#7\Interligne}}% % % Slashes on stems % \def\usoff#1{% % Set \pcil to (stem length)-9\Internote \ifnum#1>10 \pcil-3.8\Internote \else \pcil#1\Internote \ifnum#1>3 \pcil-.38\pcil\advance\pcil-.5\Internote \ifnum#1>7 \advance\pcil.38\Internote \fi \else \ifnum#1<-2 \pcil-\pcil\advance\pcil-5\Internote \else \pcil-2\Internote \fi \fi \fi \advance\pcil#1\Internote }% % \def\us#1{\usoff{#1}% \raise\pcil\hbox{\loffset{.5}{\ibu009}\roffset{.5}{\tbu0}}}% \def\ls#1{\reflect-#1\advance\reflect8 % \usoff{\reflect}\advance\pcil-7\Internote% \lower\pcil\hbox{\loffset{.5}{\ibl009}\roffset{.5}{\tbl0}}}% % % Thinner slashes, better coding % \newdimen\pmxtop\def\aslash#1#2#3{% % % #1 = note level relative to bottom line. #2 = 0/1 for down/up stem % #3 = 0/1 for down/up slash, For downstem, reflect, do as up, then unreflect. % \ifcase#3\def\slchar{\char248}\or\def\slchar{\char184}\fi% \ifcase#2\pmxtop-#1\internote\advance\pmxtop8\internote\or\pmxtop#1\internote% \fi\advance\pmxtop4.66\interbeam\ifdim\pmxtop>11\internote\uptop{11}\uptop{12}% \uptop{13}\uptop{14}\uptop{15}\uptop{16}\fi% \ifdim\pmxtop<4\internote\pmxtop4\internote\fi% % % \pmxtop now top of stem for upstem. Unreflect if downstem % \ifcase#2\pmxtop-\pmxtop\advance\pmxtop8\internote\ifcase#3% \advance\pmxtop2.5\internote\or\advance\pmxtop.9\internote\fi% \ccharnote0{\raise\pmxtop\hbox{\musictinyfont\slchar}}% \or\ifcase#3\advance\pmxtop-.9\internote\or\advance\pmxtop-2.5\internote\fi% \roff{\ccharnote0{\raise\pmxtop\hbox{\musictinyfont\slchar}}}\fi}% \def\uptop#1{\ifdim\pmxtop>#1\internote\advance\pmxtop-.25\interbeam\fi}% % % Signature change at end of line % \def\sigatend#1#2{\setdoublebar\xbar\hardspace{-#2pt}\generalsignature{#1}% \zchangecontext\hardspace{-#2pt}\advance\barno-1\let\barrul@\empty}% % % Macros for beams % \def\rbbu#1{\roff{\tbbu{#1}}} \def\rbbbu#1{\roff{\tbbbu{#1}}} \def\rbbbbu#1{\roff{\tbbbbu{#1}}} \def\rbbl#1{\roff{\tbbl{#1}}} \def\rbbbl#1{\roff{\tbbbl{#1}}} \def\rbbbbl#1{\roff{\tbbbbl{#1}}} % % Stuff for second voice per staff % \def\nextvoice{% \@ndstaff\reflect\noport@@\advance\noport@@-1\beginstaff\noport@@\reflect}% % % Macros for moving slur starts and stops % \def\isu#1#2#3{\roffset{#3}{\isluru{#1}{#2}}}% \def\isd#1#2#3{\roffset{#3}{\islurd{#1}{#2}}}% \def\ts#1#2#3{\roffset{#3}{\tslur{#1}{#2}}}% % % Macro to replace old \tslur with special postscript slur endings % \def\psforts#1{\let\tst\tslur\def\tslur##1##2{% \ifnum#1=0\tst{##1}{##2}\else% \ifnum#1=1\tfslur{##1}{##2}\else% \ifnum#1<4\tst{##1}{##2}\else% \ifnum#1=4\thslur{##1}{##2}\else% \ifnum#1=5\tHslur{##1}{##2}\else% \tHHslur{##1}{##2}\fi\fi\fi\fi\fi\let\tslur\tst}}% % % Macros to replace slurs with ties % \def\tieforisu{\let\ist\isluru% \def\isluru##1##2{\itieu{##1}{##2}\let\isluru\ist}}% \def\tieforisd{\let\ist\islurd% \def\islurd##1##2{\itied{##1}{##2}\let\islurd\ist}}% \def\tieforts{\let\ist\tslur% \def\tslur##1##2{\ttie{##1}\zcharnote{##2}{~}\let\tslur\ist}}% % % Replacement trill macros, to avoid overfull boxes on 1st pass % \let\savtr\trille\let\savTr\Trille% \def\trille#1#2{\ifeof\inmux\else\savtr{#1}{#2}\fi}% \def\Trille#1#2{\ifeof\inmux\else\savTr{#1}{#2}\fi}% % % Mordent as \rpar. If dotted, must move dot to right. % \def\lpn#1{\loffset{.3}{\lpar{#1}}}% '(' \def\rpn#1{\roffset{.3}{\rpar{#1}}}% Beam or not, no dot [ ')' only ] \def\clm#1#2{\mdot{#1}{#2}\cl{#2}}% Non-beam, dot [ '.' + ')' + note ] \def\cum#1#2{\mdot{#1}{#2}\cu{#2}}% \def\qlm#1#2{\mdot{#1}{#2}\ql{#2}}% \def\qum#1#2{\mdot{#1}{#2}\qu{#2}}% \def\hlm#1#2{\mdot{#1}{#2}\hl{#2}}% \def\hum#1#2{\mdot{#1}{#2}\hu{#2}}% \def\qbm#1#2#3{\mdot{#2}{#3}\qb{#1}{#3}}% Beamed & dotted \def\mdot#1#2{\roffset{.32}{\pt{#1}}\roffset{.24}{\rpar{#2}}}% \def\lpnu#1{\smallnotesize\loffset{.3}{\zcharnote{#1}% {\raise1pt\hbox{\musixchar3}}}\normalnotesize}% \def\lpnd#1{\smallnotesize\loffset{.3}{\zcharnote{#1}% {\lower1pt\hbox{\musixchar3}}}\normalnotesize}% \def\rpnu#1{\smallnotesize\roffset{.6}{\zcharnote{#1}% {\raise1pt\hbox{\musixchar4}}}\normalnotesize}% \def\rpnd#1{\smallnotesize\roffset{.6}{\zcharnote{#1}% {\lower1pt\hbox{\musixchar4}}}\normalnotesize}% % % For use with mid-bar signature changes, to permit using \ast machinery % \def\rdoff{\let\toff\off\let\off\addspace}% % % For raising arpeggios by .5/internote % \def\raisearp#1#2{\zcharnote{#1}{% \raise.5\internote\hbox{% \uplap{\leaders\hbox{\musixchar70}\vskip#2\Interligne}}}} % % New Movement Macro % %\def\newmovement#1#2{\let\holdstop\stoppiece\let\holdcont\contpiece% \def\newmovement#1#2#3{\let\holdstop\stoppiece\let\holdcont\contpiece% \ifcase#2\def\endset{\setdoubleBAR}\or\def\endset{\setdoublebar}\or% %\def\endset{\setrightrepeat}\or\def\endset{\empty}\fi% \def\endset{\setrightrepeat}\or\def\endset{\empty}% \or\def\endset{\empty}\fi% \def\stoppiece{\endset% % %+++ \ifnum#2=4\zstoppiece\else% %+++ % \holdstop% % %+++ \fi% %+++ % \vskip#1\internote% \let\stoppiece\holdstop}% % \def\contpiece{ \def\contpiece{\def\nbinstruments{#3}% <-- assignment inserted here % % Added 120904 per Rainer's suggestion to fix problem with M-Tx at m-break. % \ifx\resetlyrics\undefined\else\resetlyrics\fi% % \startpiece\addspace\afterruleskip\let\contpiece\holdcont}% }% % % Redefinitions for moving dots vertically by x\interligne and % horizontally by y headwidths. Should work for all kinds of dotted notes. % Usage: \def\C@Point#1#2{\PMXpt{.0}{-.2}} (x and y hardwired by PMX) % \global\let\C@Psave\C@Point% \def\PMXpt#1#2#3{\ifodd\n@i\else\raise\internote\fi% \hbox{\raise#1\internote\hbox{\kern#2\qn@width\musixchar#3\kernm#2\qn@width}}% \global\let\C@Point\C@Psave}% % % Shifted, pointed chord notes (Missing in musixtex.tex ???) % \def\lhp#1{\loff{\zhp{#1}}} \def\rhp#1{\roff{\zhp{#1}}} \def\lqp#1{\loff{\zqp{#1}}} \def\rqp#1{\roff{\zqp{#1}}} \def\rhpp#1{\roff{\zhpp{#1}}} \def\lhpp#1{\loff{\zhpp{#1}}} \def\rqpp#1{\roff{\zqpp{#1}}} \def\lqpp#1{\loff{\zqpp{#1}}} % % Redefine to include \sk !!! % \def\liftpause#1{\C@ps\@l@v@n\si@{#1}\sk} %\def\liftPAuse#1{\C@ps{58}0{#1}\sk} % 1/19/03 Replaced old def'n; added \liftPAusep \def\liftPAuse#1{\reflect#1\multiply\reflect2% \zcharnote{0}{\raise\reflect\internote\hbox{\kern.4\qn@width\musixchar58}}\sk}% \def\liftPAusep#1{\reflect#1\multiply\reflect2% \zcharnote{0}{\raise\reflect\internote\hbox{\kern.4\qn@width\musixchar58% \kern-\qn@width\pt4}}\sk}% \def\lifthpause#1{\C@ps\t@n\f@ur{#1}\sk}% \def\liftpausep#1{\reflect#1\advance\reflect2% \wholeshift{\raise\reflect\Interligne\hbox{\pt0}}\liftpause{#1}}% \def\liftpausepp#1{\reflect#1\advance\reflect2% \wholeshift{\raise\reflect\Interligne\hbox{\ppt0}}\liftpause{#1}}% \def\lifthpausep#1{\reflect#1\advance\reflect2% \wholeshift{\raise\reflect\Interligne\hbox{\pt0}}\lifthpause{#1}}% \def\lifthpausepp#1{\reflect#1\advance\reflect2% \wholeshift{\raise\reflect\Interligne\hbox{\ppt0}}\lifthpause{#1}}% % % Text up to bar line. Use before last note, assume 1 noteskip to bar. % \def\bartext#1#2{\sk\loffset{.3}{\zcharnote{#1}{\llap{#2}}}\bsk} % % Macro used before movement break to change # of instruments. % 120818 Set \nbinstruments in \newmovement; probably don't need this any more. % \def\newnoi#1{\let\atnb\atnextbar\def\atnextbar{\atnb\def\nbinstruments{#1}}}% % % Set up top page numbers with optional centered heading % % #2=0 if odds on rt, else 1. #1 = initial page no. #3=name \def\toppageno#1#2#3{\pageno#1% \headline{\reflect#2\advance\reflect\pageno% \ifodd\reflect\rhead{#3}\else\lhead{#3}\fi}% \def\rhead##1{\tempo\ifnum\pageno>1\hfil{##1}\fi\hfil\llap\folio}% \def\lhead##1{\tempo\rlap\folio\hfil{##1}\hfil}}% % % Temporary date and file name. To use it: % % (1) Define a script to create a file tempdate.dat. The file will % contain a single line of text to be centered at the bottom of % each page. I use a 4DOS alias (makedate) that inserts current date % filename, and filedate as follows: % % echo \smalltype\rm Printed %_date from file %1.pmx %@filedate[c:\pmx\%1.pmx], % %@filetime[c:\pmx\%1.pmx] >tempdate.dat % % (2) Include a call to makedate in the batch file you use to run pmx+tex. % Be sure tempdate.dat is written to a directory accessible to TeX. % % (3) Include in-line tex \\tempdate\ at the top of the pmx file. % \def\tempdate{\def\makefootline{\baselineskip2pt\line{\the\footline}} \footline{\hss\input tempdate.dat\hss}} % \def\pnotes#1{\vnotes#1\elemskip}% % % Hairpins and other dynamic stuff % \newdimen\hpi\newdimen\hpii\newdimen\hpiii\newdimen\hpiv% \newdimen\hpv\newdimen\hpvi\newdimen\hpvii\newdimen\hpviii% \newdimen\hpix\newdimen\hpx\newdimen\hpxi\newdimen\hpxii\newdimen\hptmp% % \def\hpstrt#1#2{\getcurpos\advance\y@v#2\qn@width\advance\y@v\txt@ff% \global\csname hp\romannumeral#1\endcsname=\y@v}% % \def\hpendall#1#2#3#4{\getcurpos% \advance\y@v-\csname hp\romannumeral#1\endcsname% \zcharnote{#2}{\kernm\y@v\advance\y@v\txt@ff\advance\y@v#3\qn@width#4{\y@v}}}% % \def\hpcend#1#2#3{\hpendall{#1}{#2}{#3}\crescendo}% \def\hpdend#1#2#3{\hpendall{#1}{#2}{#3}\decrescendo}% % \def\pmxdyn#1#2#3{\ccharnote{#1}{\kern#2\qn@width#3}} \def\txtdyn#1#2#3{\zcharnote{#1}{\kern#2\qn@width#3}} % \def\sfz{{\ppff s\f@kern\f@kern f\f@kern z}}% % % Dotted breve and rest % \def\brevep{\def\w@h{\musixchar32\roffset\qu@rt{\C@Point\z@\raise}}% \y@v\wn@width \g@w} \def\PAusep{\loffset{.5}{\pt5}\PAuse}% % % Vertical equalization macros % %\newskip\pssav\pssav\parskip% % % Remove this from here in 2.352, since it caused some incompatibilities. % (Let PMX write it into *.tex when needed). % %\parskip 0pt plus 12\Interligne minus 99\Interligne% \def\upamt{27}\def\dnamt{-20}% %\def\upstrut{\znotes\nextinstrument\nextinstrument\zcharnote{\upamt}{X}\en}% % % Let PMX write the def'n of \upstrut since I couldn't get the loop to work % \def\dnstrut{\znotes\zcharnote{\dnamt}{~}\en}% % % Call the following inline type1 anywhere in first line of equalization. % \def\starteq{\gdef\everystaff{\upstrut\dnstrut}\dnstrut}% % % And put this as type 1 in the next-to-last line of equalization! % %\def\endeq{\gdef\everystaff{\upstrut\global\parskip\pssav% \def\endeq{\gdef\everystaff{\upstrut% \gdef\everystaff{\empty}}}% % \gdef\spread#1{\global\let\cont\contpiece% \gdef\contpiece{\vskip#1\internote\cont\global\let\contpiece\cont}}% % % The following avoid zapping \writezbarno in several special situations % \def\PMXbarnotrue{\let\z@sw\empty}% \def\PMXbarnofalse{\let\z@sw\@ne}% % % Centered rests % \def\pausc{\lrlap{\pause\off{\qn@width}}}% \def\PAusc{\lrlap{\PAuse\off{\txt@ff}}}% %\def\liftpausc#1{\raise#1\Interligne\pausc}% \def\liftpausc#1{\raise#1\Interligne\lrlap{\ \raise6\internote\hbox{\musixchar11}\off{1.2\qn@width}}}% \def\liftPAusc#1{\raise#1\Interligne\PAusc}% % % CenterBar and mbrest modified 2/01 to account for simick mods in % musixtex 1.01 % \def\CenterBar#1#2#3{% \y@ii\lin@pos\advance\y@ii-\lastbarpos% \ifx\volta@startcor\undefined \else\advance\y@ii\cut@v\fi% \advance\y@ii-#2pt\advance\y@ii-#3pt\kern-#3pt% \kern-\h@lf\y@ii\lrlap{#1}\kern\h@lf\y@ii\kern#3pt}% % % mbrest mods 151226. Changed # of args in mbrest from 3 to 1; % changed pmx271 accordingly % 160103 back to 3 args % \def\mbgap{\qsk\hqsk}% \def\mbrhgt{9}% \def\mbrest#1#2#3{% %\CenterBar{\ccn{9}{\meterfont#1}}{#2}{#3}% \CenterBar{\ccn{\mbrhgt}{\meterfont#1}}{#2}{#3}% \CenterBar{% \ifcase #1% \relax% \or\cpause% 1 \or\cPAuse% 2 \or\cPAuse\mbgap\cpause% 3 \or\cPAUSe% 4 \or\cPAUSe\mbgap\cpause% 5 \or\cPAUSe\mbgap\cPAuse% 6 \or\cPAUSe\mbgap\cPAuse\mbgap\cpause% 7 \or\cPAUSe\mbgap\cPAUSe% 8 \or\cPAUSe\mbgap\cPAUSe\mbgap\cpause% 9 \else \def\vertpart{\hbox{\vrule width.6pt height1.5\internote depth1.5\internote}}% \raise4\internote\hbox{\vertpart% \vrule width0.7\y@ii height.5\internote depth.5\internote% \vertpart}% \fi}{#2}{#3}}% % % 151226 Redefine \xchangecontext to add in \afterruleskip % \def\xchangecontext{\n@wbar\writ@newclefs \wbarno@x\Writ@newsigns\Writ@meters\lastbarpos\lin@pos\addspace\afterruleskip}% % % 151227 Define \ccoda so it positions like any other ornament % \def\ccoda{\n@iv85\@Char}% \def\pcaesura#1#2{\raise#1\internote\hbox{% \rlap{\kern.5\noteskip\kern#2\qn@width\musixchar79}}}% \def\pbreath#1#2{\zcharnote6{\raise#1\internote\hbox{% \rlap{\kern.5\noteskip\kern#2\qn@width\BIGfont'}}}}% % % Macro to set up for blank bar line % %\def\setzalaligne{\let\alat\alaligne% % \def\alaligne{\zalaligne\let\alaligne\alat}}% \def\setzalaligne{\let\zalat\stoppiece% \def\stoppiece{\zstoppiece\let\stoppiece\zalat}}% % % Slanted line arpeggio or coule ornament % \def\arpg#1#2{% \roffset{#2}{\zcharnote0{\raise#1\internote\hbox{\varline0{6pt}{20}}}}}% \def\arpgu#1{\arpg{#1}{.8}}% % % \pmxlyr command, see Usage afer \endinput. Dirk Laurie 2016-01-24 % The unrolled loops are necessary because \assignlyricshere must have % a raw string literal as argument. \def\pmxlyr#1{% \ifnum\noinstrum@nt=1% \ifnum\noport@@=1% \if@pmx@nextvoice\setlyrics{I1P1V2}{#1}\assignlyricshere{I1P1V2}% \else\setlyrics{I1P1V1}{#1}\assignlyricshere{I1P1V1}\fi\fi% \ifnum\noport@@=2% \if@pmx@nextvoice\setlyrics{I1P2V2}{#1}\assignlyricshere{I1P2V2}% \else\setlyrics{I1P2V1}{#1}\assignlyricshere{I1P2V1}\fi\fi\fi% \ifnum\noinstrum@nt=2% \ifnum\noport@@=1% \if@pmx@nextvoice\setlyrics{I2P1V2}{#1}\assignlyricshere{I2P1V2}% \else\setlyrics{I2P1V1}{#1}\assignlyricshere{I2P1V1}\fi\fi% \ifnum\noport@@=2% \if@pmx@nextvoice\setlyrics{I2P2V2}{#1}\assignlyricshere{I2P2V2}% \else\setlyrics{I2P2V1}{#1}\assignlyricshere{I2P2V1}\fi\fi\fi% \ifnum\noinstrum@nt=3% \ifnum\noport@@=1% \if@pmx@nextvoice\setlyrics{I3P1V2}{#1}\assignlyricshere{I3P1V2}% \else\setlyrics{I3P1V1}{#1}\assignlyricshere{I3P1V1}\fi\fi% \ifnum\noport@@=2% \if@pmx@nextvoice\setlyrics{I3P2V2}{#1}\assignlyricshere{I3P2V2}% \else\setlyrics{I3P2V1}{#1}\assignlyricshere{I3P2V1}\fi\fi\fi% \ifnum\noinstrum@nt=4% \ifnum\noport@@=1% \if@pmx@nextvoice\setlyrics{I4P1V2}{#1}\assignlyricshere{I4P1V2}% \else\setlyrics{I4P1V1}{#1}\assignlyricshere{I4P1V1}\fi\fi% \ifnum\noport@@=2% \if@pmx@nextvoice\setlyrics{I4P2V2}{#1}\assignlyricshere{I4P2V2}% \else\setlyrics{I4P2V1}{#1}\assignlyricshere{I4P2V1}\fi\fi\fi% }% % % Definition for \lyrlink&\at, used with pmxlyr strings with '~'and '@' % \def\lk{\lyrlink}% \def\at#1{\lyrraisehere{#1\internote}}% % % 190526 Items for short line enhancements % \let\wbnt\writebarno \def\nobarno{\gdef\writebarno{\global\let\writebarno\wbnt}} % % 200123 Open headed dotted chord notes % \def\hbp{\h@symbol\@qbp}% \def\hbpp{\h@symbol\@qbpp}% % % % For allowing steeper beams % \def\C@ib#1{\max@n@v\@l\min@n@v{-\@l}\global\b@p\n@v \getcurpos \global\b@x\y@v \b@z#14.333\interbeam \advance\b@z\altportee \pl@base \global\advance\b@z\y@i} % \catcode`\@=\catcodeat \endinput Usage: \pmxlyr{TEXT} (assigns TEXT as lyrics in the current context) In PMX, enter the command with a trailing backslash. Starting at PMX 2.73, "TEXT" on a music line is equivalent to \pmxlyr{TEXT}. Spaces and hyphens separate TEXT into syllables. An underscore between words combines syllables from different words into a single syllable. TEXT may contain any TeX macro, in particular: \space Space character that does not separate syllables \lyrhyphenchar Hyphen that does not separate syllables {\empty} Invisible syllable (for notes that get no lyrics) \pmxlyr uses the unexpanded contents of TEXT when looking for the syllable splitters, e.g. \def\mylyrics{many words of poetry} followed by \pmxlyr{\mylyrics} will put all those words on one note. For more information on what is acceptable in TEXT, consult mxlyrdoc.pdf. Limits: Lyrics are recognized only on the first two staves of instruments 1 to 4. Elsewhere they are ignored.