%% BEGIN poster.tex/poster.sty %% %% %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU %% %% DESCRIPTION: %% poster.tex/poster.sty contains a macro for making posters and banners %% with TeX. It is compatible with most TeX macro packages, including Plain %% TeX, LaTeX, AmSTeX, and Ams-LaTeX. The only special requirement is that %% your printer not be bothered by text that lies off the page. This is %% true of most printers, including laser printers and PostScript printers. %% %% COPYING: %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% CODE: % These macros use TeX primitives, plus the Plain TeX commands: % \dimen@, \dimen@i, \count@, \newcount, \newtoks, % % Check if file is loaded, announce file on terminal, and take care of @: % \def\fileversion{1.1} \def\filedate{10/05/15} \csname PosterLoaded\endcsname \let\PosterLoaded\endinput \message{\space\space v\fileversion\space\space\filedate\space\space } \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \newbox\@posterbox \newbox\poster@savedbox \newbox\poster@cropbox \def\POSTERpaperheight{11in} \def\POSTERpaperwidth{8.5in} \def\POSTERimageheight{10in} \def\POSTERimagewidth{7.5in} \def\POSTERlandscape{false} \def\POSTERclip{none} \def\POSTERcrop{corners} \def\POSTERvcenter{false} \def\POSTERhcenter{false} \def\poster@set#1[#2]{% \poster@@set#2,=\@nil,% #1} \def\poster@@set#1=#2,{% \ifx\@nil#2\else \expandafter\ifx\csname POSTER#1\endcsname\relax \errmessage{Poster parameter `#1' not defined}% \else \expandafter\edef\csname POSTER#1\endcsname{#2}% \fi \expandafter\poster@@set \fi} \def\poster@true{true} \def\poster{% \begingroup \futurelet\next\poster@i} \def\poster@i{% \ifx\next[% \expandafter\poster@set \fi \poster@ii} \def\poster@ii{% \afterassignment\poster@iii \setbox\@posterbox=\hbox} \def\poster@iii{\aftergroup\poster@iv} \def\poster@iv{% \setbox\@posterbox=\hbox{\raise\dp\@posterbox\box\@posterbox}% \poster@savepage \poster@magtonum \ifx\POSTERlandscape\poster@true \poster@landscape \fi \poster@hoffsets \poster@voffsets \ifx\POSTERvcenter\poster@true \poster@vcenter \fi \ifx\POSTERhcenter\poster@true \poster@hcenter \fi \poster@makecropbox \count\z@=\z@ \poster@vloop \endgroup} \def\Poster{% \begingroup \futurelet\next\Poster@i} \def\Poster@i{% \ifx\next[% \expandafter\poster@set \fi \Poster@ii} \def\Poster@ii{% \setbox\@posterbox=\hbox\bgroup\ignorespaces} \def\endPoster{\egroup\poster@iv} \def\PosterPage{\futurelet\next\PosterPage@i} \def\PosterPage@i{% \ifx\next[% \expandafter\poster@set \fi \PosterPage@ii} \def\PosterPage@ii{% \count2=\z@ \let\poster@trueshipout\shipout \let\shipout\poster@pageshipout} \def\poster@pageshipout{% \begingroup \global\advance\count2\@ne \def\poster@swapcounters{% \count@=\count2 \count2=\count1 \count1=\count\z@ \count\z@=\count@}% \let\poster@savepage\relax \let\shipout\poster@trueshipout \setbox\@posterbox\box\voidb@x \afterassignment\poster@@pageshipout \setbox\@posterbox} \def\poster@@pageshipout{% \ifvoid\@posterbox\aftergroup\poster@iv\else\poster@iv\fi} \let\poster@swapcounters\relax % Save current contents of page in case it contains \special's: \def\poster@savepage{% \begingroup \global\setbox\poster@savedbox\box\voidb@x \output{\global\setbox\poster@savedbox\box\@cclv}% \par\hbox{}\penalty-10000 \endgroup \ifvoid\poster@savedbox\else \dp\poster@savedbox\z@ \ht\poster@savedbox\z@ \wd\poster@savedbox\z@ \fi} % \poster@mag set to decimal value of \mag. \def\poster@magtonum{% \ifnum\mag=1000 \def\poster@mag{}% \else \count@=10000000 \divide\count@\mag \advance\count@ by 200000000 \expandafter\poster@@magtonum\the\count@ \fi \dimen@=2000pt \divide\dimen@\mag \edef\poster@cropwidth{\number\dimen@ sp }} \def\poster@@magtonum#1#2#3#4#5#6#7#8#9{% \count@ #2#3#4#5\relax \edef\poster@mag{\the\count@.#6#7#8#9}} \def\poster@landscape{% \let\next\POSTERpaperheight \let\POSTERpaperheight\POSTERpaperwidth \let\POSTERpaperwidth\next \let\next\POSTERimageheight \let\POSTERimageheight\POSTERimagewidth \let\POSTERimagewidth\next} % \dimen@ii set to imageheight \def\poster@voffsets{% \dimen@\POSTERimageheight\relax \dimen@ii=\poster@mag\dimen@ \voffset=\POSTERpaperheight\relax \advance\voffset-\dimen@ \divide\voffset 2 \ifdim\voffset<\z@ \voffset\z@ \fi \dimen@=\poster@mag\voffset \edef\poster@vmargin{\number\dimen@ sp }% \advance\voffset-1in \voffset=\poster@mag\voffset} % \dimen@i set to imagewidth \def\poster@hoffsets{% \dimen@\POSTERimagewidth\relax \dimen@i=\poster@mag\dimen@ \hoffset=\POSTERpaperwidth\relax \advance\hoffset-\dimen@ \divide\hoffset 2 \ifdim\hoffset<\z@ \hoffset=\z@ \fi \dimen@=\poster@mag\hoffset \edef\poster@hmargin{\number\dimen@ sp }% \advance\hoffset-1in \hoffset=\poster@mag\hoffset} % Center vertically \def\poster@vcenter{% \count@=\ht\@posterbox \divide\count@\dimen@ii \dimen@=\the\count@\dimen@ii \advance\dimen@-\ht\@posterbox \ifdim\dimen@<-.1pt \advance\count@ 1 \fi \setbox\@posterbox=\hbox{\vbox to \the\count@\dimen@ii{% \vss\box\@posterbox\vss}}} % Center horizontally \def\poster@hcenter{% \count@=\wd\@posterbox \divide\count@\dimen@i \dimen@=\the\count@\dimen@i \advance\dimen@-\wd\@posterbox \ifdim\dimen@<-.1pt \advance\count@ 1 \fi \setbox\@posterbox=\hbox to \the\count@\dimen@i{% \hss\box\@posterbox\hss}} % Print rows: \def\poster@vloop{% \ifdim\ht\@posterbox>.1pt \ifdim\ht\@posterbox<\dimen@ii \dimen@ii=\ht\@posterbox \poster@makecropbox \fi \advance\count\z@ 1 \count1=\z@ \dimen@=\wd\@posterbox \poster@hloop \dimen@=\ht\@posterbox \advance\dimen@-\dimen@ii \ht\@posterbox\dimen@ \expandafter\poster@vloop \fi} % Print columns. % \dimen@ is used as scratch to keep track of remaining width. \def\poster@hloop{% \ifdim\dimen@>.1pt \advance\count1 by 1 \begingroup \ifdim\dimen@<\dimen@i \dimen@i=\dimen@ \poster@makecropbox \fi \poster@swapcounters \poster@shipout \endgroup \advance\dimen@-\dimen@i \expandafter\poster@hloop \fi} % Shipout, aligning everything at the top-left corner: \def\poster@shipout{% \shipout\hbox{% \ifvoid\poster@savedbox\else\box\poster@savedbox\fi \csname beginposterclip@\POSTERclip\endcsname \lower\ht\@posterbox\hbox to\z@{% \advance\dimen@-\wd\@posterbox \kern\dimen@ \copy\@posterbox \hss}% \csname endposterclip@\POSTERclip\endcsname \copy\poster@cropbox}}% % clip=pstricks \def\beginposterclip@pstricks{% \expandafter\ifx\csname @pstrickserr\endcsname\relax \errmessage{% You must load PSTricks to use poster.tex's clip=pstricks option!}% \global\let\beginposterclip@pstricks\relax \else \gdef\beginposterclip@pstricks{\beginposterclip@@pstricks}% \gdef\endposterclip@pstricks{\pstVerb{currentpoint initclip moveto}}% \beginposterclip@@pstricks \fi} \let\endposterclip@pstricks\relax \def\beginposterclip@@pstricks{% \pst@Verb{% /mtrxc CM def \tx@STV CP translate newpath 0 0 moveto \pst@number\dimen@i 0 rlineto 0 \pst@number\dimen@ii neg rlineto \pst@number\dimen@i neg 0 rlineto closepath clip newpath 0 0 moveto mtrxc setmatrix}} \def\poster@makecropbox{% \setbox\poster@cropbox=\hbox{\csname postercrop@\POSTERcrop\endcsname}% \ht\poster@cropbox=\z@ \dp\poster@cropbox=\z@ \wd\poster@cropbox=\z@} \def\postercrop@corners{% \vtop{% \hbox{% \kern -\poster@hmargin \vrule height \poster@cropwidth width \poster@hmargin \kern -\poster@cropwidth \vrule height \poster@vmargin width \poster@cropwidth \kern \dimen@i \vrule height \poster@vmargin width \poster@cropwidth \kern -\poster@cropwidth \vrule height \poster@cropwidth width \poster@hmargin}% \nointerlineskip \vskip\dimen@ii \hbox{% \kern -\poster@hmargin \vrule height \z@ depth \poster@cropwidth width \poster@hmargin \kern -\poster@cropwidth \vrule height \z@ depth \poster@vmargin width \poster@cropwidth \kern \dimen@i \vrule height \z@ depth \poster@vmargin width \poster@cropwidth \kern -\poster@cropwidth \vrule height \z@ depth \poster@cropwidth width \poster@hmargin}}}% \def\postercrop@full{% \begingroup \hbox to\z@{% \advance\dimen@ii\poster@vmargin \kern -\poster@cropwidth \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth \kern \dimen@i \vrule height \poster@vmargin depth \dimen@ii width \poster@cropwidth \hss}% \kern -\poster@hmargin \vtop{% \advance\dimen@i \poster@hmargin \advance\dimen@i \poster@hmargin \kern-\poster@cropwidth \hrule height \poster@cropwidth width \dimen@i \kern\dimen@ii \hrule height \z@ depth \poster@cropwidth width \dimen@i}% \endgroup} \catcode`\@=\TheAtCode\relax \endinput %% %% END poster.tex