home *** CD-ROM | disk | FTP | other *** search
- %
- % 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
- \newbox\@rotbox
-
- \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{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
- \hbox to\@rotdimen{\hskip\ht#1\vbox to\wd#1{\@rotstart{90 rotate}%
- \box#1\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{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
- \hbox to\@rotdimen{\vbox to\wd#1{\vskip\wd#1\@rotstart{270 rotate}%
- \box#1\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{\@rotdimen=\ht#1\advance\@rotdimen by\dp#1%
- \hbox to\wd#1{\hskip\wd#1\vbox to\@rotdimen{\vskip\@rotdimen
- \@rotstart{-1 dup scale}\box#1\vss}\hss}\@rotfinish}%
- %
- % And flipped end for end is pretty ysae too. We retain the baseline.
- %
- \def\@rotf#1{\hbox to\wd#1{\hskip\wd#1\@rotstart{-1 1 scale}%
- \box#1\hss}\@rotfinish}%
- %
- % Now the user interface for LaTeX: \rotate[type]{text} where
- % ``type'' is `l' for left, `r' for right, `u' for upside-down, or
- % `f' for flip. `l' is the default.
- %
- \def\rotate{\@ifnextchar[{\@rotate}{\@rotate[l]}}
- \def\@rotate[#1]#2{\setbox\@rotbox=\hbox{#2}\@nameuse{@rot#1}\@rotbox}
-
-