% 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