diff options
Diffstat (limited to 'Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty')
-rw-r--r-- | Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty | 478 |
1 files changed, 478 insertions, 0 deletions
diff --git a/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty b/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty new file mode 100644 index 00000000000..3696f6cedae --- /dev/null +++ b/Master/tlpkg/dviout/GRAPHIC/PBM/pbmf.sty @@ -0,0 +1,478 @@ +% PBM macro for DVIOUT/DVIPRT version 0.5e +% based on eclepsf.sty by Kazuhiro Kazama and modified by Hideki ISOZAKI +% and psfig.tex by Trevor J. Darrell. +% +% All software, documentation, and related files in this distribution of +% psfig/tex are Copyright (c) 1987 Trevor J. Darrell +% +% Permission is granted for use and non-profit distribution of psfig/tex +% providing that this notice be clearly maintained, but the right to +% distribute any portion of psfig/tex for profit or as part of any commercial +% product is specifically reserved for the author. +% +% +% ☆scaleオプション指定での基準サイズ(scale=1での出力) +% \realscaletrue時、PBMデータ1dotをプリンタ出力の1dotとして出力 +% \realscalefalse時、PBMデータ1dotを 1pt x 1pt の点として出力 +% +% ☆\realscaletrue時用に、プリンタの解像度を\pbmhdpiと\pbmvdpiで設定します。 +% Ex. \pbmhdpi=300\pbmvdpi=300 +% +% \pbmfile +% usage : \pbmfile{file=foo.pbm,width=5cm,height=3.5cm} +% usage : \pbmfile{file=foo.pbm,width=100pt,height=70pt} +% usage : \pbmfile{file=foo.pbm,scale=2} +% usage : \pbmfile{file=foo.pbm,hscale=1.5,vscale=1.2} +% ^^ ^^ +% オプション間に、空白を入れないで下さい。 +% +% \pbmfat +% usage : \pbmfile[\pbmfat(10mm,12mm){テスト}]{file=foo.pbm} +% +% \pbmfon +% usage : \pbmfile[\pbmfon(10mm,12mm){テスト}]{file=foo.pbm} +% +% \ovpbmfon +% usage : \pbmfile[\ovpbmfon(10mm,12mm){テスト}]{file=foo.pbm} +% ^^^^^^^^^ +% 座標指定 +% +% +% \giffile +% +% ・orgsizeオプションを使う場合 +% usage : \giffile{file=foo.gif,orgsize=640x400,scale=2} +% usage : \giffile{file=foo.gif,orgsize=200x200,hscale=3,vscale=2} +% +% ・使わない場合、scaleオプションは使用不可。width=とheight=は省略不可 +% usage : \giffile{file=foo.gif,width=5cm,height=3.5cm} +% usage : \giffile{file=foo.gif,width=100pt,height=70pt} +% +% Oct. 25, 1993 by Yakumo +% +\endlinechar=-1 +\typeout{PBM macro ver. 0.5e - Released Oct. 25, 1993} +\newcount\pbmhdpi +\newcount\pbmvdpi +\pbmhdpi=360%<---- プリンタ水平方向解像度のデフォルト値 +\pbmvdpi=360%<---- プリンタ垂直方向解像度のデフォルト値 +\newif\ifrealscale +\realscaletrue +\newif\ifset@vscale +\newif\ifset@hscale +\set@vscalefalse\set@hscalefalse +\newif\ifset@orgsize +\set@orgsizefalse +\newdimen\@pbmhsize +\newdimen\@pbmvsize +\newcount\@bmarga +\newcount\@bmargb +\newcount\@bmsum +\newcount\@bmrema +\newcount\@bmremb +\newcount\@bmctmpa +\newcount\@bmctmpb +\newcount\@bmctmpc +\newdimen\@bmdarg +\newif\ifcontinue + +\def\@setpbmfile#1{ + \def\@pbmfile{#1} + \pbmbb@search +} +\def\@setpbmheight#1{ + \@bmdarg=#1\relax + \edef\@pbmheight{\number\@bmdarg} +} +\def\@setpbmwidth#1{ + \@bmdarg=#1\relax + \edef\@pbmwidth{\number\@bmdarg} +} +\def\@setpbmscale#1{ + \def\@pbmhscale{#1} + \def\@pbmvscale{#1} + \set@vscaletrue\set@hscaletrue +} +\def\@setpbmhscale#1{ + \def\@pbmhscale{#1} + \set@hscaletrue +} +\def\@setpbmvscale#1{ + \def\@pbmvscale{#1} + \set@vscaletrue +} +\def\parse@pbm@parms#1{ + \def\@bbw{0}\def\@bbh{0} + \def\@pbmhscale{1}\def\@pbmvscale{1} + \def\@pbmheight{0}\def\@pbmwidth{0} + \@for\@pbmopt:=#1\do + {\expandafter\@bmsetparms\@pbmopt,}} + +\def\@bmsetparms#1=#2,{\@nameuse{@setpbm#1}{#2}} +% +% \pbmin@compute performs #1 * (#2 / #3) +% then leaves the result in @result +% +\def\@divmod#1#2{ + \@bmctmpa=#1\relax + \divide\@bmctmpa by#2\relax + \edef\@quotient{\number\@bmctmpa\relax} + \multiply\@bmctmpa by#2\relax + \@bmctmpb=#1\relax + \advance\@bmctmpb by -\@bmctmpa + \edef\@remaindar{\number\@bmctmpb}} +% +\def\pbmin@compute#1#2#3{ + \ifnum#3>\z@ + \@divmod{#1}{#3} + \@bmsum=\@quotient + \multiply\@bmsum by#2\relax + \@bmrema=\@remaindar\relax + \ifnum\@bmrema>\z@ + \@divmod{#2}{#3} + \@bmctmpc=\@quotient + \multiply\@bmctmpc by\@bmrema + \advance\@bmsum by\@bmctmpc + \@bmremb=\@remaindar\relax + \ifnum\@bmremb>\z@ + \ifnum#3<32769 + \multiply\@bmrema by\@bmremb + \divide\@bmrema by#3\relax + \advance\@bmsum by\@bmrema + \else + \edef\bm@digit{1} + \@bmarga=0\relax + \loop + \edef\bm@digit{\bm@digit0} + \@divmod{\the\@bmremb0}{#3} + \@bmremb=\@remaindar\relax + \@bmargb=\@bmrema + \multiply\@bmargb by\@quotient + \advance\@bmargb by\@bmarga + \@divmod{\@bmargb}{\bm@digit} + \advance\@bmsum by\@quotient + \@bmarga=\@remaindar0\relax + \ifnum\bm@digit<\@bmrema + \repeat + \fi + \fi + \fi + \else + \errmessage{pbm: Illegal parameter} + \fi + \edef\@result{\number\@bmsum} +} +\def\bmcompute@handw{ + \ifnum\@pbmheight=\z@ + \ifnum\@pbmwidth=\z@ + \@bmdarg=\@bbh sp \@bmdarg=\@pbmvscale\@bmdarg + \edef\@pbmheight{\number\@bmdarg} + \@bmdarg=\@bbw sp \@bmdarg=\@pbmhscale\@bmdarg + \edef\@pbmwidth{\number\@bmdarg} + \multiply\@pbmhsize by\@pbmhscale + \multiply\@pbmvsize by\@pbmvscale + \else + \pbmin@compute{\number\@pbmwidth}{\number\@pbmvsize}{\number\@pbmhsize} + \edef\@pbmheight{\@result} + \fi + \else + \ifnum\@pbmwidth=\z@ + \pbmin@compute{\number\@pbmheight}{\number\@pbmhsize}{\number\@pbmvsize} + \edef\@pbmwidth{\@result} + \fi + \fi + \ifnum\@pbmheight<\z@ + \errmessage{pbm: Illegal height} + \fi + \ifnum\@pbmwidth<\z@ + \errmessage{pbm: Illegal width} + \fi +} + +\def\pbmfile{\@ifnextchar[{\@pbmfile}{\@pbmfile[]}} +\def\@pbmfile[#1]#2{{ + \parse@pbm@parms{#2} + \bmcompute@handw + {\@bmarga=\@pbmwidth \divide\@bmarga by 186468\relax + \@bmargb=\@pbmheight \divide\@bmargb by 186468\relax + \message{becomes \the\@bmarga mm x \the\@bmargb mm}} + \@bmarga=\@pbmheight \divide\@bmarga by 65536\relax + \edef\@bmvsize{\number\@bmarga} + \@bmarga=\@pbmwidth \divide\@bmarga by 65536\relax + \edef\@bmhsize{\number\@bmarga} + \leavevmode + \hbox to \@pbmwidth sp{ + \vrule\@width\z@\@height\@pbmheight sp\@depth\z@ + \raise\@pbmheight sp + \hbox to\z@{ + \ifrealscale + \special{pbmfile=\@pbmfile\space + \ifset@hscale hsize=\number\@pbmhsize dot/\the\pbmhdpi dpi + \else hsize=\@bmhsize\fi\space + \ifset@vscale vsize=\number\@pbmvsize dot/\the\pbmvdpi dpi + \else vsize=\@bmvsize\fi\space + } + \else + \special{pbmfile=\@pbmfile\space + \ifset@hscale hscale=\@pbmhscale + \else hsize=\@bmhsize\fi\space + \ifset@vscale vscale=\@pbmvscale + \else vsize=\@bmvsize\fi\space + } + \fi + } + \vrule\@width\z@\@height\@pbmheight sp \@depth\z@ + \hbox to\z@{#1}\hfil + } +}} + +\newread\pbm@stream +\catcode`\#=11\relax +\def\pbmbb@search{\continuetrue + \typeout{analyzing \@pbmfile} + \openin\pbm@stream=\@pbmfile\relax + \ifeof\pbm@stream\errmessage{pbm: \@pbmfile\space not found}\fi + \read\pbm@stream to \pbm@line + \expandafter\id@pbmplus\pbm@line. + \ifnum4=\@magic \message{PBM(P4-type) } + \else \ifnum1=\@magic \errmessage{pbm: P1-type not supported} + \else \errmessage{pbm: \@pbmfile\space is not PBM file}\fi\fi + \loop + \read\pbm@stream to \pbm@line + \if\expandafter\next@char\pbm@line\end@getbb #\else\continuefalse\fi + \ifeof\pbm@stream\errmessage{pbm: \@pbmfile\space has no data}\fi + \ifcontinue \repeat + \expandafter\pbm@getbb\pbm@line. + \closein\pbm@stream +} +\catcode`\#=6\relax +\def\next@char#1#2\end@getbb{#1} +\def\id@pbmplus#1#2.{\edef\@magic{\if#1P\next@char#2\end@getbb\else0\fi}} +% +% +\def\pbm@getbb#1 #2.{ + \@bmdarg=#1pt\ifrealscale\divide\@bmdarg by \pbmhdpi\@bmdarg=72.27\@bmdarg\fi + \edef\@bbw{\number\@bmdarg}\@pbmhsize=#1sp + \@bmdarg=#2pt\ifrealscale\divide\@bmdarg by \pbmvdpi\@bmdarg=72.27\@bmdarg\fi + \edef\@bbh{\number\@bmdarg}\@pbmvsize=#2sp + \message{original: #1 x #2} +} +% +% You can put anything on the picture using \pbmfat , \pbmfon , \ovpbmfon +% +\def\pbmfat(#1,#2)#3{\@killglue{ + \smash{\raise#2\hbox to \z@{\kern#1 \relax#3\hss}}}\ignorespaces} +% +\newbox\@strbox +% +\def\pbmfon(#1,#2)#3{ + \setbox\@strbox=\hbox{#3} + \@bmctmpa=\number\wd\@strbox + \@bmctmpb=\number\ht\@strbox + \@bmctmpc=\number\dp\@strbox + \advance\@bmctmpc by\@bmctmpb + \divide\@bmctmpc by 4736\relax + \divide\@bmctmpa by 4736\relax + \pbmfat(#1,#2){ + \raise\@bmctmpb sp\hbox to\z@{ + \special{pn 0}\special{sh 0} + \special{pa 0 0}\special{pa \the\@bmctmpa\space 0} + \special{pa \the\@bmctmpa\space \the\@bmctmpc}\special{pa 0 \the\@bmctmpc} + \special{pa 0 0} + \special{ip}}#3 + } +} +% +\newdimen\ovrulewidth +\newdimen\ovradius +\ovrulewidth=0.4pt +\ovradius=2mm +\def\hornlength{5} +% +\def\ovpbmfon{\@ifnextchar({\@ovpbmfon{}}{\@ovpbmfon}} +\def\@ovpbmfon#1(#2,#3)#4{ + \setbox\@strbox=\hbox{#4} + \@bmctmpa=\number\wd\@strbox + \@bmctmpb=\number\ht\@strbox + \@bmctmpc=\number\dp\@strbox + \@bmremb=\number\ovrulewidth + \@bmarga=\number\ovradius + \divide\@bmarga by 4736\relax + \edef\CoRadius{\the\@bmarga} + \divide\@bmarga by 2\relax + \edef\CoBase{\the\@bmarga} + \@bmdarg=\ovradius + \advance\@bmdarg by\@bmremb sp + \@bmarga=\number\@bmdarg + \advance\@bmctmpc by\@bmctmpb + \advance\@bmctmpb by\@bmarga + \divide\@bmctmpc by 4736\relax + \divide\@bmctmpa by 4736\relax + \divide\@bmarga by 4736\relax + \divide\@bmremb by 4736\relax + \advance\@bmctmpa by\@bmarga + \@bmargb=\@bmctmpa + \advance\@bmargb by\@bmarga + \advance\@bmctmpc by\@bmarga + \@bmrema=\@bmctmpc + \advance\@bmrema by\@bmarga + \advance\@bmargb by-\@bmremb + \advance\@bmrema by-\@bmremb + \if#1\@empty\else + \@bmsum=\@bmarga + \divide\@bmsum by 10\relax + \multiply\@bmsum by\hornlength + \edef\@hornlg{\the\@bmsum} + \if#1a\@bmsum=\@bmremb + \advance\@bmsum by -\@hornlg\relax + \edef\@hornx{\the\@bmsum} + \else\if#1b\@bmsum=\@bmargb + \advance\@bmsum by \@hornlg\relax + \edef\@hornx{\the\@bmsum} + \@bmsum=\@bmremb + \advance\@bmsum by -\@hornlg\relax + \edef\@horny{\the\@bmsum} + \else\if#1c\@bmsum=\@bmargb + \advance\@bmsum by \@hornlg\relax + \edef\@hornx{\the\@bmsum} + \@bmsum=\@bmrema + \advance\@bmsum by \@hornlg\relax + \edef\@horny{\the\@bmsum} + \else\if#1d\@bmsum=\@bmremb + \advance\@bmsum by -\@hornlg\relax + \edef\@hornx{\the\@bmsum} + \@bmsum=\@bmrema + \advance\@bmsum by \@hornlg\relax + \edef\@horny{\the\@bmsum} + \else\multiply\@bmsum by 3\relax + \edef\@hornlg{\the\@bmsum} + \if#1A\pbm@horn\@bmctmpa\@bmremb{-\@hornlg} + \else\if#1B\pbm@horn\@bmctmpc\@bmargb{\@hornlg} + \else\if#1C\pbm@horn\@bmctmpa\@bmrema{\@hornlg} + \else\if#1D\pbm@horn\@bmctmpc\@bmremb{-\@hornlg} + \fi\fi\fi\fi\fi\fi\fi\fi\fi + \pbmfat(#2,#3){ + \raise\@bmctmpb sp\hbox to\z@{ + \special{pn \the\@bmremb}\special{sh 0} + \special{pa \the\@bmarga\space \the\@bmremb} + \if#1A\special{pa \@horni\space \the\@bmremb} + \special{pa \@hornx\space \@horny} + \special{pa \@hornii\space \the\@bmremb}\fi + \special{pa \the\@bmctmpa\space \the\@bmremb} + \if#1b\special{pa \@hornx\space \@horny}\fi + \special{pa \the\@bmargb\space \the\@bmarga} + \if#1B\special{pa \the\@bmargb\space \@horni} + \special{pa \@horny\space \@hornx} + \special{pa \the\@bmargb\space \@hornii}\fi + \special{pa \the\@bmargb\space \the\@bmctmpc} + \if#1c\special{pa \@hornx\space \@horny}\fi + \special{pa \the\@bmctmpa\space \the\@bmrema} + \if#1C\special{pa \@hornii\space \the\@bmrema} + \special{pa \@hornx\space \@horny} + \special{pa \@horni\space \the\@bmrema}\fi + \special{pa \the\@bmarga\space \the\@bmrema} + \if#1d\special{pa \@hornx\space \@horny}\fi + \special{pa \the\@bmremb\space \the\@bmctmpc} + \if#1D\special{pa \the\@bmremb\space \@hornii} + \special{pa \@horny\space \@hornx} + \special{pa \the\@bmremb\space \@horni}\fi + \special{pa \the\@bmremb\space \the\@bmarga} + \if#1a\special{pa \@hornx\space \@hornx}\fi + \special{pa \the\@bmarga\space \the\@bmremb} + \ifnum\@bmremb>0\special{fp}\else\special{ip}\fi + \if#1a\else\special{sh 0} + \special{ia \the\@bmarga\space \the\@bmarga\space + \CoRadius\space \CoRadius\space 0.0 6.28319} + \ifnum\@bmremb>0\special{ar \the\@bmarga\space \the\@bmarga\space + \CoRadius\space \CoRadius\space 3.14159 4.71239}\fi\fi + \if#1b\else\special{sh 0} + \special{ia \the\@bmctmpa\space \the\@bmarga\space + \CoRadius\space \CoRadius\space 0.0 6.28319} + \ifnum\@bmremb>0\special{ar \the\@bmctmpa\space \the\@bmarga\space + \CoRadius\space \CoRadius\space 4.71239 6.28319}\fi\fi + \if#1c\else\special{sh 0} + \special{ia \the\@bmctmpa\space \the\@bmctmpc\space + \CoRadius\space \CoRadius\space 0.0 6.28319} + \ifnum\@bmremb>0\special{ar \the\@bmctmpa\space \the\@bmctmpc\space + \CoRadius\space \CoRadius\space 0.0 1.5708}\fi\fi + \if#1d\else\special{sh 0} + \special{ia \the\@bmarga\space \the\@bmctmpc\space + \CoRadius\space \CoRadius\space 0.0 6.28319} + \ifnum\@bmremb>0\special{ar \the\@bmarga\space \the\@bmctmpc\space + \CoRadius\space \CoRadius\space 1.5708 3.14159}\fi\fi + }\hbox to\z@{\kern\the\@bmdarg\relax #4\hss} + } +} +\def\pbm@horn#1#2#3{ + \@bmsum=#1\relax + \advance\@bmsum by \@bmarga + \divide\@bmsum by 2\relax + \advance\@bmsum by -\CoBase\relax + \edef\@horni{\the\@bmsum} + \advance\@bmsum by \CoBase\relax + \edef\@hornx{\the\@bmsum} + \advance\@bmsum by \CoBase\relax + \edef\@hornii{\the\@bmsum} + \@bmsum=#2\relax + \advance\@bmsum by #3\relax + \edef\@horny{\the\@bmsum} +} +% +% GIF macros +% +\def\@setpbmorgsize#1{ + \gif@search#1. + \set@orgsizetrue +} +\def\gif@search#1x#2.{\pbm@getbb#1 #2.} +\def\giffile{\@ifnextchar[{\@giffile}{\@giffile[]}} +\def\@giffile[#1]#2{{ + \def\@setpbmfile##1{\def\@pbmfile{##1}} + \typeout{input GIF file} + \parse@pbm@parms{#2} + \ifset@orgsize + \bmcompute@handw + {\@bmarga=\@pbmwidth \divide\@bmarga by 186468\relax + \@bmargb=\@pbmheight \divide\@bmargb by 186468\relax + \message{becomes \the\@bmarga mm x \the\@bmargb mm}} + \else + \ifset@hscale\errmessage{gif(\@pbmfile): You must set orgsize option}\fi + \ifset@vscale\errmessage{gif(\@pbmfile): You must set orgsize option}\fi + \ifnum\@pbmheight<1\errmessage{gif(\@pbmfile): You should set the height}\fi + \ifnum\@pbmwidth<1\errmessage{gif(\@pbmfile): You should set the width}\fi + \fi + \@bmarga=\@pbmheight \divide\@bmarga by 65536\relax + \edef\@bmvsize{\number\@bmarga} + \@bmarga=\@pbmwidth \divide\@bmarga by 65536\relax + \edef\@bmhsize{\number\@bmarga} + \leavevmode + \hbox to \@pbmwidth sp{ + \vrule\@width\z@\@height\@pbmheight sp\@depth\z@ + \raise\@pbmheight sp + \hbox to\z@{ + \ifrealscale + \special{giffile=\@pbmfile\space + \ifset@hscale hsize=\number\@pbmhsize dot/\the\pbmhdpi dpi + \else hsize=\@bmhsize\fi\space + \ifset@vscale vsize=\number\@pbmvsize dot/\the\pbmvdpi dpi + \else vsize=\@bmvsize\fi\space + } + \else + \special{pbmfile=\@pbmfile\space + \ifset@hscale hscale=\@pbmhscale + \else hsize=\@bmhsize\fi\space + \ifset@vscale vscale=\@pbmvscale + \else vsize=\@bmvsize\fi\space + } + \fi + } + \vrule\@width\z@\@height\@pbmheight sp \@depth\z@ + \hbox to\z@{#1}\hfil + } +}} +\def\giffat{\pbmfat} +\def\giffon{\pbmfon} +\def\ovgiffon{\ovpbmfon} +% +\endlinechar=13\relax +\endinput |