% Written by Tomas Rokicki, modified by Paul Taylor % % These macros allow you to rotate or flip a \TeX\ box. Very useful for % sideways tables or upsidedown answers. % % To use, create a box containing the information you want to rotate. % (An hbox or vbox will do.) Now call \rotr\boxnum to rotate the % material and create a new box with the appropriate (flipped) dimensions. % \rotr rotates right, \rotl rotates left, \rotu turns upside down, and % \rotf flips. These boxes may contain other rotated boxes. % \newdimen\rotdimen \def\vspec#1{\special{ps:#1}}% passes #1 verbatim to the output \def\rotstart#1{\vspec{gsave currentpoint currentpoint translate #1 neg exch neg exch translate}}% #1 can be any origin-fixing transformation \def\rotfinish{\vspec{currentpoint grestore moveto}}% gets back in synch % % % First, the rotation right. The reference point of the rotated box % is the lower right corner of the original box. % \def\rotr#1{\setbox2\hbox{#1}\rotdimen=\ht2\advance\rotdimen by\dp2% \hbox to\rotdimen{\hskip\ht2\vbox to\wd2{\rotstart{90 rotate}% \box2\vss}\hss}\rotfinish} % % Next, the rotation left. The reference point of the rotated box % is the upper left corner of the original box. % \def\rotl#1{\setbox2\hbox{#1}\rotdimen=\ht2\advance\rotdimen by\dp2% \hbox to\rotdimen{\vbox to\wd2{\vskip\wd2\rotstart{270 rotate}% \box2\vss}\hss}\rotfinish}% % % Upside down is simple. The reference point of the rotated box % is the upper right corner of the original box. (The box's height % should be the current font's xheight, \fontdimen5\font, % if you want that xheight to be at the baseline after rotation.) % \def\rotu#1{\setbox2\hbox{#1}\rotdimen=\ht2\advance\rotdimen by\dp2% \hbox to\wd2{\hskip\wd2\vbox to\rotdimen{\vskip\rotdimen \rotstart{-1 dup scale}\box2\vss}\hss}\rotfinish}% % % And flipped end for end is pretty ysae too. We retain the baseline. % \def\rotf#1{\setbox2\hbox{#1}\hbox to\wd2{\hskip\wd2\rotstart{-1 1 scale}% \box2\hss}\rotfinish}%