musiktheorietheorie/musixtex/tex/musixvbm.tex
Josia Pietsch 200080fe9d Tag 6
2022-03-27 12:09:14 +02:00

212 lines
6.1 KiB
TeX

%%
%% musixvbm.tex - MusiXTeX Extension, Vectorized Beams (& crescendos)
%% by tpic specials / pdfTeX raw literal
%%
%% Copyright (C) 2000-2007 Hiroaki MORIMOTO (Kuuku)
%% 2021-05-17: RDT added comments on the tpic \specials
%%
%% This program is free software; you can redistribute it and/or
%% modify it under the terms of the GNU General Public License
%% as published by the Free Software Foundation; either version 2
%% of the License, or any later version.
%%
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%% GNU General Public License for more details.
%%
%% You should have received a copy of the GNU General Public License
%% along with this program; if not, write to the Free Software
%% Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
%%
%% \def\domain{nifty.com}
%% Author:
%% Hiroaki MORIMOTO <CQX\relax05646@\domain>
%% Tokyo, Japan
%% URL: http://kuuku.no.coocan.jp/pub/musixtex/index-e.html
%%
%% based on musixtex.tex T.104, line 3255-3290.
%% MusiXTeX : (C) Daniel Taupin et al.
%%
%% January 1, 2007 version 1.20-beta6
%% This is a successor of `musixtpb.tex' ver.1.10.
%%
\ifx\ifvectorizedbeam\undefined\else\endinput\fi
\immediate\write16{MusiXTeX Extension, Vectorized Beams and crescendos <2007/01/01>}%
%
\edef\catcodeat{\the\catcode`\@}\catcode`\@=11
%
% Allocation of registers
% No register is required except for scratch (\dimen@, \count@)
%
% Modes definition (default: true)
\newif\ifvectorizedbeam \vectorizedbeamtrue
%
% Operation mode automatic selection (v1.20)
%
\let\@beammodesel\relax%
\ifx\pdftexversion\undefined\else%
\ifnum\pdfoutput>0\relax
\immediate\write16{musixvbm: uses pdfTeX raw literal}%
\edef\@beammodesel{pdftex}%
\fi
\fi
\ifx\@beammodesel\relax
\immediate\write16{musixvbm: uses tpic specials}%
\edef\@beammodesel{tpic}%
\fi
%
% Overriding beam termination code (v1.20)
%
\let\@beam@font=\@beam\relax
\def\@beam{%
\ifvectorizedbeam
\csname @beam@\@beammodesel\endcsname
\else
\@beam@font
\fi
}%
%
% Main routine for tpic-version beam
% \y@ii : length, \b@p : slope, \y@i : altitude
%
\def\@beam@tpic{%
% X of end
\@dimentomil{\y@ii}{\@Xend}%
% Y of start
\y@iii\y@i
\advance\y@iii -\b@amthick
\@dimentomil{-\y@iii}{\@Ystart@l}%
\advance\y@iii \tw@\b@amthick
\@dimentomil{-\y@iii}{\@Ystart@u}%
% Y of end
\y@iv\y@i
\dimen@=\b@p\y@ii \divide\dimen@ \tw@nty% \tw@nty=20 def'd in musixtex.tex
\advance\y@iv \dimen@
\advance\y@iv -\b@amthick
\@dimentomil{-\y@iv}{\@Yend@l}%
\advance\y@iv \tw@\b@amthick
\@dimentomil{-\y@iv}{\@Yend@u}%
% \special{pn 1}%
\special{sh 1}% RDT: set beam shading to black
\@addbeampath{0}{\@Ystart@l}% RDT: add points to define the beam perimeter
\@addbeampath{\@Xend}{\@Yend@l}%
\@addbeampath{\@Xend}{\@Yend@u}%
\@addbeampath{0}{\@Ystart@u}%
\@addbeampath{0}{\@Ystart@l}% RDT: close the perimeter
\special{ip}% RDT: draw the beam (without the outline)
\kern\y@ii
}%
%
%
% Subroutines for tpic-version beam
%
\def\@dimentomil#1#2{{%
% 1m-in = 0.07227pt, 1pt = 13.837m-in
% \count@=\count255 \dimen@=\dimen0 def'd in plain
\dimen@=#1\relax\dimen@=13.837\dimen@\relax
\count@\dimen@
\ifnum\count@>0
\advance\count@ by 32768
\else
\advance\count@ by -32768
\fi
\divide\count@ by 65536
\xdef#2{\the\count@}}}%
%
\def\@addbeampath#1#2{\special{pa #1 #2}}%
%
%
% Main routine for pdfTeX
%
\def\@beam@pdftex{%
% X of end
\edef\@Xend{\strip@pt\y@ii}%
% Y of start
\y@iii\y@i
\advance\y@iii -\b@amthick
\edef\@Ystart@l{\strip@pt\y@iii}%
\advance\y@iii \tw@\b@amthick
\edef\@Ystart@u{\strip@pt\y@iii}%
% Y of end
\y@iv\y@i
\dimen@=\b@p\y@ii \divide\dimen@ \tw@nty% \tw@nty=20 def'd in musixtex.tex
\advance\y@iv \dimen@
\advance\y@iv -\b@amthick
\edef\@Yend@l{\strip@pt\y@iv}%
\advance\y@iv \tw@\b@amthick
\edef\@Yend@u{\strip@pt\y@iv}%
\pdfliteral{q 0 g 0 \@Ystart@l\space m \@Xend\space\@Yend@l\space l \@Xend\space\@Yend@u\space l 0 \@Ystart@u\space l 0 \@Ystart@l\space l f Q}%
\kern\y@ii
}%
%
% Subroutines for pdfTeX
% (taken from latex.ltx 2003/12/01)
\begingroup
\catcode`P=12
\catcode`T=12
\lowercase{%
\def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}%
\expandafter\endgroup\x
\def\strip@pt{\expandafter\rem@pt\the}%
%
%
% vectorized version of crescendo, decrescendo (under construction)
%
\let\C@cresc@font=\C@cresc\relax
%
% for tpic-version crescendo
% #1=length (any TeX dimension, no limit))
\def\C@cresc@tpic#1{%
\y@iv#1\relax
% \rlap{\vrule width\y@iv height1pt}%
\@dimentomil{\y@iv}{\@Xend}%
\dimen@=2.5pt \advance\dimen@ by.00125\y@iv\relax% see musixspx.mf
\@dimentomil{\dimen@}{\@Yend@l}%
\special{pn 6}% 0.4pt=5.5348mil see musixspx.mf
\ifnum\n@ii=\@cxv% decrescendo see musixtex.tex T.112 line 3870
\@addbeampath{0}{\@Yend@l}%
\@addbeampath{\@Xend}{0}%
\special{fp}%
\@addbeampath{0}{-\@Yend@l}%
\@addbeampath{\@Xend}{0}%
\special{fp}%
\else
\@addbeampath{\@Xend}{\@Yend@l}%
\@addbeampath{0}{0}%
\special{fp}%
\@addbeampath{\@Xend}{-\@Yend@l}%
\@addbeampath{0}{0}%
\special{fp}%
\fi
% \C@cresc@font#1%
}%
%
% for pdfTeX-version crescendo
% #1=length (any TeX dimension, no limit))
\def\C@cresc@pdftex#1{%
\y@iv#1\relax
% \rlap{\vrule width\y@iv height1pt}%
\edef\@Xend{\strip@pt\y@iv}%
\dimen@=2.5pt \advance\dimen@ by.00125\y@iv\relax% see musixspx.mf
\edef\@Yend@l{\strip@pt\dimen@}%
\ifnum\n@ii=\@cxv% decrescendo see musixtex.tex T.112 line 3870
\pdfliteral{.4 w q 0 g 0 \@Yend@l\space m \@Xend\space 0 l S Q q 0 g 0 -\@Yend@l\space m \@Xend\space 0 l S Q}%
\else
\pdfliteral{.4 w q 0 g \@Xend\space \@Yend@l\space m 0 0 l S Q q 0 g \@Xend\space -\@Yend@l\space m 0 0 l S Q}%
\fi
% \C@cresc@font#1%
}%
%
% Overriding crescendo (v1.20)
%
\def\C@cresc#1{%
\ifvectorizedbeam
\csname C@cresc@\@beammodesel\endcsname#1
\else
\C@cresc@font#1
\fi
}%
%
\catcode`\@=\catcodeat
\endinput