212 lines
6.1 KiB
TeX
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
|