% \iffalse meta-comment
%
% isorot.dtx
%
%
% This program is provided under the terms of the
% LaTeX Project Public License distributed from CTAN
% archives in directory macros/latex/base/lppl.txt.
%
% Author: Peter Wilson (CUA)
% now at: peter.r.wilson@boeing.com
%
% \fi
% \CheckSum{1619}
%
%
% \def\fileversion{v2.1}
% \def\filedate{2000/02/15}
% \title{\LaTeX{} files for typesetting ISO Standards: \\
% Source code: The isorot package\thanks{This
% file has version number \fileversion, last revised
% \filedate.}}
%
% \author{%
% Peter Wilson\\
% Catholic University of America\thanks{This work was originally
% performed at Rensselaer Polytechnic Institute.} \\
% Now at \texttt{peter.r.wilson@boeing.com}
% }
% \date{\filedate}
% \maketitle
% \tableofcontents
%
% \StopEventually{}
%
%
%
% \section{Introduction}
%
% This document provides the commented source for \LaTeX{}
% package files designed for the typesetting of
% documents according to the rules for ISO international standards.
% A seperate document provides the user manual~\cite{PRW96i}.
% This manual is typeset according to the conventions of the
% \LaTeX{} \textsc{docstrip} utility which enables the automatic
% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
%
% ISO (the International Organization for Standardisation) specify
% their document layout requirements in ISO Directives~\cite{ISOD397}.
% Unfortunately these Directives do not completely define the document
% layout, leaving several aspects open to interpretation by the
% document editor and re-interpretation by the ISO editorial board.
% The following specifications are a re-implementation of the \LaTeX{}
% macros that have been used for the production of camera ready copy
% for the ISO~10303 standard {\em Product data representation and
% exchange}. The initial release of ISO~10303:1994 consisted of twelve
% parts and over 2400 pages. The editorial board of the ISO Central
% Secretariat in Geneva accepted the typographic conventions embodied
% in these macros.
%
% This manual is provided as a service for future developers
% and maintainers of the
% class and packages for ISO standards. It is assumed that any
% any such person is \LaTeX{} literate and accustomed to supporting
% complex class and package files~\cite{GOOSSENS94}.
%
%
% Section~\ref{sec:docstrip} describes some
% administrative elements and code for general use later in the specification.
% Section~\ref{sec:rot} specifies
% the macros for rotation of textual and tabular elements.
%
% \section{The {\sc docstrip} modules} \label{sec:docstrip}
%
% The following modules are used in the implementation to direct
% {\sc docstrip} in generating the external files:
% \begin{center}
% \begin{tabular}{ll}
% rot & produce the isorot package\\
% rotne & produce the isorotne style file\\
% driver & produce a documentation driver file \\
% \end{tabular}
% \end{center}
%
% \subsection{A driver for this document}
%
% The next series of code contains the documentation driver file for
% \LaTeX, i.e., the file that will produce the documentation you are
% currently reading. This will be extracted from this file by the
% {\sc docstrip} program.
%
% \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
% \end{macrocode}
%
% We do not want the following basic elements to appear in the index.
% \begin{macrocode}
\DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
\DoNotIndex{\@centercr,\@cite}
\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
\DoNotIndex{\@input,\@ixpt,\@m}
\DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
\DoNotIndex{\advance,\Alph,\alph}
\DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
\DoNotIndex{\bullet}
\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
\DoNotIndex{\fbox}
\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
\DoNotIndex{\input}
\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
\DoNotIndex{\NeedsTeXFormat,\newdimen}
\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
\DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
\DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
\DoNotIndex{\viipt,\vipt,\vskip,\vspace}
\DoNotIndex{\wd,\xiipt,\year,\z@}
% \end{macrocode}
% We do want an index, using linenumbers, but not update information.
% \begin{macrocode}
\EnableCrossrefs
\CodelineIndex
%%%% \RecordChanges
% \end{macrocode}
% We may use so many \file{docstrip} modules that we set the
% \texttt{StandardModuleDepth} counter to 1.
% \begin{macrocode}
\setcounter{StandardModuleDepth}{1}
% \end{macrocode}
% Some commonly used abbreviations
% \begin{macrocode}
\newcommand*{\Lopt}[1]{\textsf {#1}} % typeset an option
\newcommand*{\file}[1]{\texttt {#1}} % typeset a file
\newcommand*{\Lcount}[1]{\textsl {\small#1}} % typeset a counter
\newcommand*{\pstyle}[1]{\textsl {#1}} % typeset a pagestyle
\newcommand*{\Lenv}[1]{\texttt {#1}} % typeset an environment
% \end{macrocode}
% We want the full details printed.
% \begin{macrocode}
\begin{document}
\DocInput{isorot.dtx}
\end{document}
%
% \end{macrocode}
%
%
% \section{Identification} \label{sec:id}
%
% Announce the name, option files and version for \LaTeX 2e files:
% \begin{macrocode}
%\ProvidesPackage{isorot}[2000/02/15 v2.1 ISO rotation package]
% \end{macrocode}
%
% These files are for use with \LaTeX\ v2.09 or a disadvantaged \LaTeX 2e
% distribution.
% \begin{macrocode}
%\typeout{isorotne.sty [1997/12/02 v2 LaTeX 2.09 ISO rotation package]}
% \end{macrocode}
%
%
% \section{The \file{isorot} package and \file{isorotne} style} \label{sec:rot}
%
% The \file{isorot} package provides a specialization of the \file{rotating}
% package
% for use within ISO standard documents. The principal modifications
% relate to the table and figure environments. The original \file{rotating}
% package was developed by
% Sebastian Rahtz and Leonor Barroca\footnote{Sebastian Rahtz and Leonor
% Barroca, {\em A style option for rotated objects in TeX,} TUGboat, 13, 2,
% pp 156--180, July 1992.}.
%
% Apparently not all distributions of \LaTeX{} contain the necessary
% packages for a simple implementation. The \file{isorotne} style provides
% the same capabilities for these users.
% This essentially replaces all \LaTeX 2e facilities from \file{rotating}
% by generic ones, and includes the relevent package sources within the one
% file.
%
% \changes{v11}{1997/09/30}{Added new dvi drivers to isrotne package}
% \changes{v2}{1997/12/02}{Updated rotations to rotating v2.12}
% \changes{v2.1}{2000/02/15}{Updated to latest ISO class, and generalised for any class}
% \begin{macrocode}
%<*rot|rotne>
% \end{macrocode}
%
% The package takes one option which prints debugging information.
%
% \begin{macro}{\PWRFc@tracing}
% A counter controlling debug printing.
% \begin{macrocode}
\newcount\PWRFc@tracing
\DeclareOption{errorshow}{\PWRFc@tracing\z@}
\DeclareOption{debugshow}{\PWRFc@tracing5\relax}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{graphics}}
\ProcessOptions
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\PWRF@trace}
% A macro that gets the trace message as its argument.
% \begin{macrocode}
\newcommand\PWRF@trace[2]{%
\ifnum\PWRFc@tracing>#1\relax
\GenericWarning
{(isorot)\@spaces\@spaces}
{Package isorot: #2}%
\fi
}
% \end{macrocode}
% \end{macro}
%
% For the \file{isorot} package most of the work is done by the
% \file{graphicx} package, so make sure it is loaded. Also, David
% Carlisle's \file{lscape} package is required for landscaping some
% pages or long wide tables.
% \begin{macrocode}
%<*rot>
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{graphicx}
\RequirePackage{lscape}
%
% \end{macrocode}
%
% For the disadvantaged user, the required basic facilities are
% a portion of the \file{graphics} package, which in turn requires
% the \file{trig} package. We also need the code from the
% \file{lscape} package.
%
% \begin{macrocode}
%<*rotne>
% \end{macrocode}
% Firstly, here is the code from the \file{trig} package.
%
% \subsection{Trigonometry functions}
%
% \emph{The following is the contents of the \file{trig} package written by
% David Carlisle. The code and explanations are from \file{trig.dtx}
% version 1.08, dated 1994/10/16. The original file should be consulted
% for a full explanation.}
%
%
% These macros implement the trigonometric functions, sin, cos and tan.
% In each case two commands are defined. For instance the command
% |\CalculateSin{33}| may be isued at some point, and then anywhere
% later in the document, the command |\UseSin{33}| will return the
% decimal expansion of $\sin(33^\circ)$.
%
% The arguments to these macros do not have to be whole numbers,
% although in the case of whole numbers, \LaTeX\ or plain \TeX\ counters
% may be used. In \TeX{}Book syntax, arguments must be of type:
% \meta{optional signs}\meta{factor}
%
% Some other examples are:\\
% |\CalculateSin{22.5}|, |\UseTan{\value{mycounter}}|,
% |\UseCos{\count@}|.
%
% Note that unlike the psfig macros, these save all previously
% computed values. This could easily be changed, but I thought that in
% many applications one would want many instances of the
% same value. (eg rotating all the headings of a table by the
% \emph{same} amount).
%
% Some useful constants for converting between degrees and radians.
% $$\frac{\pi}{180}\simeq\frac{355}{113\times180}=\frac{71}{4068}$$
% \begin{macrocode}
\chardef\nin@ty=90
\chardef\@clxx=180
\chardef\@lxxi=71
\mathchardef\@mmmmlxviii=4068
% \end{macrocode}
%
% The approximation to $\sin$.
% \begin{eqnarray*}
% \sin(x)& \simeq& x - (1/3!)x^3 + (1/5!)x^5 - (1/7!)x^7 + (1/9!)x^9\\
% &\simeq&\frac{((((7!/9!x^2-7!/7!)x^2+7!/5!)x^2 +7!/3!)x^2+7!/1!)x}
% {7!}\\
% &=&\frac{((((1/72x^2-1)x^2+42)x^2 +840)x^2+5040)x}
% {5040}
% \end{eqnarray*}
%
% \begin{macrocode}
\chardef\@coeffz=72
%\chardef\@coefa=1
\chardef\@coefb=42
\mathchardef\@coefc=840
\mathchardef\@coefd=5040
% \end{macrocode}
%
% \begin{macrocode}
{\catcode`t=12\catcode`p=12\gdef\noPT#1pt{#1}}
\def\TG@rem@pt#1{\expandafter\noPT\the#1\space}
% \end{macrocode}
%
% \begin{macrocode}
\def\TG@term#1{%
\dimen@\@tempb\dimen@
\advance\dimen@ #1\p@}
% \end{macrocode}
%
% \begin{macrocode}
\def\TG@series{%
\dimen@\@lxxi\dimen@
\divide \dimen@ \@mmmmlxviii
\edef\@tempa{\TG@rem@pt\dimen@}%
\dimen@\@tempa\dimen@
\edef\@tempb{\TG@rem@pt\dimen@}%
\divide\dimen@\@coeffz
\advance\dimen@\m@ne\p@
\TG@term\@coefb
\TG@term{-\@coefc}%
\TG@term\@coefd
\dimen@\@tempa\dimen@
\divide\dimen@ \@coefd}
% \end{macrocode}
%
% \begin{macrocode}
\def\CalculateSin#1{{%
\expandafter\ifx\csname sin(\number#1)\endcsname\relax
\dimen@=#1\p@\TG@@sin
\expandafter\xdef\csname sin(\number#1)\endcsname
{\TG@rem@pt\dimen@}%
\fi}}
% \end{macrocode}
%
% \begin{macrocode}
\def\CalculateCos#1{{%
\expandafter\ifx\csname cos(\number#1)\endcsname\relax
\dimen@=\nin@ty\p@
\advance\dimen@-#1\p@
\TG@@sin
\expandafter\xdef\csname cos(\number#1)\endcsname
{\TG@rem@pt\dimen@}%
\fi}}
% \end{macrocode}
%
% \begin{macrocode}
\def\TG@reduce#1#2{%
\dimen@#1#2\nin@ty\p@
\advance\dimen@#2-\@clxx\p@
\dimen@-\dimen@
\TG@@sin}
% \end{macrocode}
%
% \begin{macrocode}
\def\TG@@sin{%
\ifdim\TG@reduce>+%
\else\ifdim\TG@reduce<-%
\else\TG@series\fi\fi}%
% \end{macrocode}
%
% \begin{macrocode}
\def\UseSin#1{\csname sin(\number#1)\endcsname}
\def\UseCos#1{\csname cos(\number#1)\endcsname}
% \end{macrocode}
%
% \begin{macrocode}
\chardef\z@num\z@
\expandafter\let\csname sin(0)\endcsname\z@num
\expandafter\let\csname cos(0)\endcsname\@ne
\expandafter\let\csname sin(90)\endcsname\@ne
\expandafter\let\csname cos(90)\endcsname\z@num
\expandafter\let\csname sin(-90)\endcsname\m@ne
\expandafter\let\csname cos(-90)\endcsname\z@num
\expandafter\let\csname sin(180)\endcsname\z@num
\expandafter\let\csname cos(180)\endcsname\m@ne
% \end{macrocode}
%
% This is accurate to 4 decimal places for angles up to
% $50^\circ$, after that the accuracy tails off, giving
% 57.47894 instead of 57.2900 for $89^\circ$.
% \begin{macrocode}
\def\CalculateTan#1{{%
\expandafter\ifx\csname tan(\number#1)\endcsname\relax
\CalculateSin{#1}%
\CalculateCos{#1}%
\@tempdima\UseCos{#1}\p@
\divide\@tempdima\@iv
\@tempdimb\UseSin{#1}\p@
\@tempdimb\two@fourteen\@tempdimb
\divide\@tempdimb\@tempdima
\expandafter\xdef\csname tan(\number#1)\endcsname
{\TG@rem@pt\@tempdimb}%
\fi}}
% \end{macrocode}
%
% \begin{macrocode}
\def\UseTan#1{\csname tan(\number#1)\endcsname}
% \end{macrocode}
%
% \begin{macrocode}
\mathchardef\two@fourteen=16384
\chardef\@iv=4
% \end{macrocode}
%
% \begin{macrocode}
\expandafter\def\csname tan(90)\endcsname{\errmessage{Infinite tan !}}
\expandafter\let\csname tan(-90)\expandafter\endcsname
\csname tan(90)\endcsname
% \end{macrocode}
%
% \subsection{Landscape environment}
%
% The \file{lscape} package by David Carlisle provides a landscape
% environment which prints the enclosed pages in landscape rather
% than portrait. For 2.09 this package does not work, so we provide
% for the functionality here. The following code is taken from
% the \file{lscape} package.\footnote{Version 3.0, last revised
% 1994/10/05.}
%
% \begin{environment}{landscape}
% \begin{macrocode}
\let\LS@makecol=\@makecol
\let\LS@makefcolumn=\@makefcolumn
\def\LS@rot{%
\setbox\@outputbox\vbox{\hbox{\rotatebox{90}{\box\@outputbox}}}}
\def\landscape{%
\clearpage
\begingroup
\vsize=\textwidth
\hsize=\textheight
\linewidth=\hsize
\columnwidth=\hsize
\@colroom=\vsize
\textheight=\vsize
\@colht=\vsize
\def\@makecol{\LS@makecol\LS@rot}%
\def\@makefcolumn##1{\LS@makefcolumn{##1}\LS@rot}}
\def\endlandscape{%
\clearpage
\endgroup
\global\@colht=\textheight
\global\vsize=\textheight
\global\@colroom=\textheight}
% \end{macrocode}
% \end{environment}
%
% \begin{macrocode}
%
% \end{macrocode}
%
% \subsection{Drivers}
%
% Rotation is not done within \TeX\ but by the device drivers via |\special|
% commands appropriate for each driver.
%
% \begin{macrocode}
%<*rot>
\def\rotdriver#1{%
\message{The .dvi file is to be processed by the #1 driver.}
\typeout{Change rotdriver in the source accordingly if you do not have this.}
\makeatletter\input{#1.def}\makeatother}
%
% \end{macrocode}
%
% \begin{macrocode}
%<*rotne>
% \end{macrocode}
%
% Life is much more difficult for the \file{isorotne} style as we have to
% include source (runnable under 2.09) that the \file{isorot} package
% gets for free.
%
% \begin{macro}{\Grot@start}
% \begin{macro}{\Grot@end}
% The commands |\Grot@start| and |\Grot@end| are defined which assume
% that the macro |\Grot@angle| contains the rotation angle. First
% set these to do nothing, just in case the user calls for an unsupported
% driver.
% \begin{macrocode}
\def\Grot@start{}
\def\Grot@end{}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\Dvitops@count}
% A counter for the DVITOPS driver.
% \begin{macrocode}
\newcount\Dvitops@count
\Dvitops@count=\@ne
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\listrotdrivers}
% Writes out the list of currently available rotdrivers.
% \begin{macrocode}
\newcommand{\listrotdrivers}{%
\typeout{If you do not have this driver then change rotdriver in your source.}
\typeout{Available rotdrivers are:}
\typeout{ \space\space dvipdf, dvips, dvipsone, dvitops, dviwindo,}
\typeout{ \space\space pctex32, pctexps, pubps, textures}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rotdriver}
% The command |\rotdriver{|\meta{driver}|}| must be put in the preamble,
% where \meta{driver} is the identification of one of the drivers that
% support rotation.
% \begin{macrocode}
\newcommand{\rotdriver}[1]{%
% \end{macrocode}
% Put the argument into an uppercase string
% \begin{macrocode}
\bgroup\edef\next{\def\noexpand\tempa{#1}}%
\uppercase\expandafter{\next}%
% \end{macrocode}
% \begin{macro}{\ISOROTSTD}
% \begin{macro}{\DVIPS}
% \begin{macro}{\DVIPSONE}
% \begin{macro}{\DVITOPS}
% \begin{macro}{\PCTEXPS}
% \begin{macro}{\PUBPS}
% \begin{macro}{\TEXTURES}
% \begin{macro}{\DVIPDF}
% \begin{macro}{\DVIWINDO}
% \begin{macro}{\PCTEX32}
% These are the currently supported drivers that can cope with rotations.
% The code for the drivers has been taken from
% \file{drivers.dtx}\footnote{Version v3.0d, revised 1996/12/12.} by
% Sebastian Rahtz and David Carlisle.
%
% The |isorotstd| driver is included against the (improbable) time
% when there might be one `standard' driver, or at least all the
% |\special| code for rotations might be common.
% \begin{macrocode}
\def\ISOROTSTD{ISOROTSTD}
\def\DVIPS{DVIPS}
\def\DVIPSONE{DVIPSONE}
\def\DVITOPS{DVITOPS}
\def\PCTEXPS{PCTEXPS}
\def\PUBPS{PUBPS}
\def\TEXTURES{TEXTURES}
\def\DVIPDF{DVIPDF}
\def\DVIWINDO{DVIWINDO}
\def\PCTEXxxxii{PCTEX32}
% \end{macrocode}
% Later we will use a case statement for picking the proper code. Define
% a numeric code for each driver.
% \begin{macrocode}
\global\chardef\rot@driver=0
\ifx\tempa\ISOROTSTD
\global\chardef\rot@driver=1\fi
\ifx\tempa\DVIPS
\global\chardef\rot@driver=2\fi
\ifx\tempa\DVIPSONE
\global\chardef\rot@driver=3\fi
\ifx\tempa\DVITOPS
\global\chardef\rot@driver=4\fi
\ifx\tempa\PCTEXPS
\global\chardef\rot@driver=5\fi
\ifx\tempa\PUBPS
\global\chardef\rot@driver=6\fi
\ifx\tempa\TEXTURES
\global\chardef\rot@driver=7\fi
\ifx\tempa\DVIPDF
\global\chardef\rot@driver=8\fi
\ifx\tempa\DVIWINDO
\global\chardef\rot@driver=9\fi
\ifx\tempa\PCTEXxxxii
\global\chardef\rot@driver=10\fi
\egroup
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% Now define the particulars for each driver. \\
% {\bf Case 0:} We should not be here!
% \begin{macrocode}
\ifcase\rot@driver % case 0
\message{WARNING *** unknown driver --- no rotation.} \listrotdrivers
% \end{macrocode}
% {\bf Case 1: ISOROTSTD} Not yet available.
% \begin{macrocode}
\or % case 1: ISOROTSTD
\message{WARNING *** isorotstd driver not available yet --- no rotation.}
\listrotdrivers
% \end{macrocode}
% {\bf Case 2: DVIPS} For Tom Rokicki's {\em dvips} driver. Has been tested
% with version 5.518 of July 1993.
% \begin{macrocode}
\or % case 2: DVIPS
\typeout{Rotdriver set to dvips.} \listrotdrivers
\def\Grot@start{%
\special{ps: gsave currentpoint
currentpoint translate \Grot@angle\space neg
rotate neg exch neg exch translate}}
\def\Grot@end{%
\special{ps: currentpoint grestore moveto}}
% \end{macrocode}
% {\bf Case 3: DVIPSONE} For Y\&Y's {\em dvipsone}.
% \begin{macrocode}
\or % case 3: DVIPSONE
\typeout{Rotdriver set to dvipsone.} \listrotdrivers
\def\Grot@start{%
\special{ps: gsave currentpoint
currentpoint translate \Grot@angle\space
rotate neg exch neg exch translate}}
\def\Grot@end{%
\special{ps: currentpoint grestore moveto}}
% \end{macrocode}
% {\bf Case 4: DVITOPS} For James Clark's {\em dvitops}.
% \begin{macrocode}
\or % case 4: DVITOPS
\typeout{Rotdriver set to dvitops.} \listrotdrivers
\def\Grot@start{%
\special{dvitops: origin
rot\the\@tempdima}%
\special{dvitops: begin rot\the\Dvitops@count}}%
\def\Grot@end{%
\special{dvitops: end}%
\special{dvitops: rotate rot\the\Dvips@count \space
\Grot@angle}%
\global\advance\Dvitops@count by\@ne}
% \end{macrocode}
% {\bf Case 5: PCTEXPS} For Personal TeX's PC PTI Laser/PS. Information
% supplied by Lance Carnes and Tao Wang ||.
% \begin{macrocode}
\or % case 5: PCTEXPS
\typeout{Rotdriver set to pctexps.} \listrotdrivers
\def\Grot@start{%
\special{ps:: gsave currentpoint
currentpoint translate \Grot@angle\space
rotate neg exch neg exch translate}}
\def\Grot@end{%
\special{ps:: currentpoint grestore moveto}}
% \end{macrocode}
% {\bf Case 6: PUBPS} For Arbortext's {\em pubps}.
% (Interestingly, I (PRW) note
% that my original (circa 1991) code for this used |ps::| but the code
% has since been modified to |ps:|.)
% \begin{macrocode}
\or % case 6: PUBPS
\typeout{Rotdriver set to pubps.} \listrotdrivers
\def\Grot@start{%
\special{ps: gsave currentpoint
currentpoint translate \Grot@angle\space
rotate neg exch neg exch translate}}
\def\Grot@end{%
\special{ps: currentpoint grestore moveto}}
% \end{macrocode}
% {\bf Case 7: TEXTURES} For Blue Sky's {\em Textures}. This code is liable
% to change as there is ongoing work to produce a new version of Textures.
% \begin{macrocode}
\or % case 7: TEXTURES
\typeout{Rotdriver set to textures.} \listrotdrivers
\def\Grot@start{%
\special{postscript
0 0 transform
grestore
matrix currentmatrix
3 1 roll
itransform
dup 3 -1 roll
dup 4 1 roll exch
translate
\Grot@angle\space neg rotate
neg exch neg exch translate
gsave}}
\def\Grot@end{\special{postscript grestore setmatrix gsave}}
% \end{macrocode}
% {\bf Case 8: DVIPDF} For the {\em dvipdf} driver.
% \begin{macrocode}
\or % case 8: DVIPDF
\typeout{Rotdriver set to dvipdf.} \listofdrivers
\def\Grot@start{%
\special{pdf: /ROT \Grot@angle\space << }}
\def\Grot@end{\special{pdf: /ROT >> }}
% \end{macrocode}
% {\bf Case 9: DVIWINDO} For Y\&Y's {\em dviwindo} driver.
% \begin{macrocode}
\or % case 9: DVIWINDO (same as DVIPSONE)
\typeout{Rotdriver set to dviwindo.} \listofdrivers
\def\Grot@start{%
\special{ps: gsave currentpoint
currentpoint translate \Grot@angle\space
rotate neg exch neg exch translate}}
\def\Grot@end{%
\special{ps: currentpoint grestore moveto}}
% \end{macrocode}
% {\bf Case 10: PCTEX32} For Personal TeX's PC TeX for 32 bit Windows.
% (Code supplied by Tao Wang ||).
% \begin{macrocode}
\or % case 10: PCTEX32
\typeout{Rotdriver set to pctex32.} \listofdrivers
\def\Grot@start{%
\special{ps:: gsave currentpoint
currentpoint translate \Grot@angle\space neg
rotate neg exch neg exch translate}}
\def\Grot@end{\special{ps:: currentpoint grestore moveto}}
% \end{macrocode}
%
% {\bf Case unknown:} We should not have got here!
% \begin{macrocode}
\else
\message{WARNING *** unknown driver --- no rotation.} \listrotdrivers
\fi
}
% \end{macrocode}
% \end{macro}
% Set up a default driver (use DVIPS as it appears the most popular).
% \begin{macrocode}
\rotdriver{DVIPS}
% \end{macrocode}
% The default driver has been set to DVIPS for both \file{isorot} and
% \file{isorotne}.
%
% \begin{macrocode}
%
% \end{macrocode}
%
% \subsection{Box rotation}
%
% The \file{isorotne} package needs some code that is part of the
% \file{graphics} package.
%
% The following code has been mainly taken from the graphics package
% \file{graphics.dtx}\footnote{Version v1.0d, last revised 1997/06/07.}
% by D.P. Carlisle and S.P.Q. Rahtz.
%
%
% The \file{isorotne} package requires some macros that are in the
% 2e kernel but not the 2.09 kernel.
% The following macros are defined in the 2e kernel but
% not in all v2.09 kernels. We need them. We use \verb|\def| instead
% of \verb|\newcommand|
% just in case a v2.09 document is processed in compatibility
% mode, but additionally check if 2e is being used.
%
% \begin{macrocode}
%<*rotne>
\ifx\usepackage\undefined
% \end{macrocode}
%
% \begin{macro}{\@plus}
% \begin{macro}{\@minus}
% Save some string space.
% \begin{macrocode}
\def\@plus{plus}
\def\@minus{minus}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\on@line}
% \begin{macrocode}
\ifnum\inputlineno=\m@ne
\let\on@line\empty
\else
\def\on@line{ on input line \the\inputlineno}
\fi
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\rem@pt}
% Utility macro to assist in removing the string `pt' from a dimension.
% It is complicated but appears to work.
% \begin{macrocode}
\begingroup
\catcode`P=12
\catcode`T=12
\lowercase{
\def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}}
\expandafter\endgroup\x
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\strip@pt}
% Call this to strip `pt' from a dimension like |\strip@pt\dim|.
% \begin{macrocode}
\def\strip@pt{\expandafter\rem@pt\the}
% \end{macrocode}
% \end{macro}
% The end of \LaTeX 2e kernel macros.
% \begin{macrocode}
\fi
% \end{macrocode}
%
% \begin{macro}{\color@begingroup}
% \begin{macro}{\color@endgroup}
% \begin{macro}{\color@setgroup}
% \begin{macro}{\normalcolor}
% \begin{macro}{\color@hbox}
% \begin{macro}{\color@vbox}
% \begin{macro}{\color@endbox}
% These are normally no-ops (but are redefined by the \file{color} package).
% \begin{macrocode}
\let\color@begingroup\relax
\let\color@endgroup\relax
\let\color@setgroup\relax
\let\normalcolor\relax
\let\color@hbox\relax
\let\color@vbox\relax
\let\color@endbox\relax
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{environment}{lrbox}
% A new 2e environment form of |\sbox|. (This is why the color stuff is
% needed.)
% \begin{macrocode}
\def\lrbox#1{%
\edef\reserved@a{%
\endgroup
\setbox#1\hbox{%
\begingroup\aftergroup}%
\def\noexpand\@currenvir{\@currenvir}%
\def\noexpand\@currenvline{\on@line}}%
\reserved@a
\@endpefalse
\color@setgroup
\ignorespaces}
\def\endlrbox{\unskip\color@endgroup}
% \end{macrocode}
% \end{environment}
%
% We are now basically back to the \file{graphics} package code.
%
% Some registers are needed to store some sizes and angles.
% Local registers are re-used (see the Graphics package documentation).
% \begin{macro}{\Grot@height}
% \begin{macro}{\Grot@depth}
% \begin{macro}{\Grot@right}
% \begin{macro}{\Grot@left}
% Final rotated box dimensions.
% \changes{v2}{1997/12/02}{Graphics updated to version v1.0d}
% \begin{macrocode}
\let\Grot@height\@ovxx
\let\Grot@depth\@ovdy
\let\Grot@right\@ovdx
\let\Grot@left\@ovyy
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\Grot@h}
% \begin{macro}{\Grot@d}
% \begin{macro}{\Grot@r}
% \begin{macro}{\Grot@l}
% The original box dimensions.
% \begin{macrocode}
\let\Grot@h\@xdim
\let\Grot@d\@ydim
\let\Grot@r\@ovri
\let\Grot@l\@ovro
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}{\Grot@x}
% \begin{macro}{\Grot@y}
% Coordinates of the centre of rotation.
% \begin{macrocode}
\let\Grot@x\@linelen
\let\Grot@y\@dashdim
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\rotatebox}
% The rotation angle is specified by parameter |#1| and the box to be
% rotated by |#2|. In the standard interface the center of rotation
% is $(0,0)$. Finally |\Grot@box| is called to rotate the box.
%
% |\rotatebox{|\meta{degrees}|}{|\meta{text}|}| rotates \meta{text}
% by \meta{degrees} anticlockwise. The rotation is about the left hand
% end of the baseline of \meta{text}.
% \changes{v2}{1997/12/02}{Added call to \cs{leavevmode}}
% \begin{macrocode}
\def\rotatebox#1#2{%
\leavevmode
\Grot@setangle{#1}%
\setbox\z@\hbox{{#2}}%
\Grot@x\z@
\Grot@y\z@
\Grot@box}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Grot@setangle}
% \begin{macro}{\Grot@angle}
% These set the internal macro |\Grot@angle| used by |\Grot@box|.
% |\Grot@setangle| is the `standard' definition from the \file{graphics}
% package.
% \begin{macrocode}
\def\Grot@setangle#1{\edef\Grot@angle{#1}}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% We need to know the size of the enclosing rectangle of a rotated box.
% Two macros are used for calculating coordinate positions. (See Graphics
% documentation for details.)
%
% \begin{macro}{\Grot@Px}
% Calculate the x coordinate of a point after rotation. The new x
% coordinate is parameter |#1| and the original point coordinates
% are parameters |#2| and |#3|.
% \begin{macrocode}
\def\Grot@Px#1#2#3{%
#1\Grot@cos#2%
\advance#1-\Grot@sin#3}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Grot@Py}
% Similarly for the y coordinate.
% \begin{macrocode}
\def\Grot@Py#1#2#3{%
#1\Grot@sin#2%
\advance#1\Grot@cos#3}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Grot@box}
% Rotates |\box0| through |\Grot@angle| degrees anticlockwise.
%
% For details, consult the Graphics documentation.
%
% \begin{macrocode}
\def\Grot@box{%
\begingroup
\CalculateSin\Grot@angle
\CalculateCos\Grot@angle
\edef\Grot@sin{\UseSin\Grot@angle}%
\edef\Grot@cos{\UseCos\Grot@angle}%
\Grot@r\wd\z@ \advance\Grot@r-\Grot@x
\Grot@l\z@ \advance\Grot@l-\Grot@x
\Grot@h\ht\z@ \advance\Grot@h-\Grot@y
\Grot@d-\dp\z@ \advance\Grot@d-\Grot@y
\ifdim\Grot@sin\p@>\z@
\ifdim\Grot@cos\p@>\z@
\Grot@Py\Grot@height \Grot@r\Grot@h
\Grot@Px\Grot@right \Grot@r\Grot@d
\Grot@Px\Grot@left \Grot@l\Grot@h
\Grot@Py\Grot@depth \Grot@l\Grot@d
\else
\Grot@Py\Grot@height \Grot@r\Grot@d
\Grot@Px\Grot@right \Grot@l\Grot@d
\Grot@Px\Grot@left \Grot@r\Grot@h
\Grot@Py\Grot@depth \Grot@l\Grot@h
\fi
\else
\ifdim\Grot@cos\p@<\z@
\Grot@Py\Grot@height \Grot@l\Grot@d
\Grot@Px\Grot@right \Grot@l\Grot@h
\Grot@Px\Grot@left \Grot@r\Grot@d
\Grot@Py\Grot@depth \Grot@r\Grot@h
\else
\Grot@Py\Grot@height \Grot@l\Grot@h
\Grot@Px\Grot@right \Grot@r\Grot@h
\Grot@Px\Grot@left \Grot@l\Grot@d
\Grot@Py\Grot@depth \Grot@r\Grot@d
\fi
\fi
\advance\Grot@height\Grot@y
\advance\Grot@depth\Grot@y
\Grot@Px\dimen@ \Grot@x\Grot@y
\Grot@Py\dimen@ii \Grot@x\Grot@y
\dimen@-\dimen@ \advance\dimen@-\Grot@left
\dimen@ii-\dimen@ii \advance\dimen@ii\Grot@y
\setbox\z@\hbox{%
\kern\dimen@
\raise\dimen@ii\hbox{\Grot@start\box\z@\Grot@end}}%
\ht\z@\Grot@height
\dp\z@-\Grot@depth
\advance\Grot@right-\Grot@left\wd\z@\Grot@right
\leavevmode\box\z@
\endgroup}
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
%
% \end{macrocode}
%
% \subsection{The rotating code}
%
% Much of the code from here on is taken from the
% \file{rotating.dtx}\footnote{Version v2.9, last revised 1995/04/07.}
% package file by Leonor Barroca, but some is hacked for 2.09 users.
% Extensions are made to accomodate the special requirements for ISO
% typesetting.
%
% \subsubsection{Initial macros}
%
% Define some general helper macros.
%
% \begin{macro}{\if@rot@twoside}
% A flag for one or two sided.
% \begin{macrocode}
\newif\if@rot@twoside
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\Grot@setnegangle}
% \emph{Extension:} |\Grot@setnegangle| sets |\Grot@angle| to be the
% negative of its input
% parameter. We use this for changing rotation direction.
% \begin{macrocode}
\def\Grot@setnegangle#1{%
\dimen@#1\p@
\dimen@-\dimen@
\edef\Grot@angle{\strip@pt\dimen@}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ifcl@ckwise}
% \begin{macro}{\figuresleft}
% \begin{macro}{\figuresright}
% \begin{macro}{\clockwise}
% \begin{macro}{\counterclockwise}
% \emph{Extension:} The \file{rotating} package has some options.
% Our packages instead define some additional
% macros to enable these to be expressed as commands.
%
% A flag for the desired rotational direction.
% \begin{macrocode}
\newif\ifcl@ckwise
% \end{macrocode}
% The extension commands:
% \begin{macrocode}
\newcommand{\figuresleft}{%
\@rot@twosidefalse
\def\rot@LR{0}%
}
\newcommand{\figuresright}{%
\@rot@twosidefalse
\def\rot@LR{-1}%
}
\newcommand{\clockwise}{%
\cl@ckwisetrue
}
\newcommand{\counterclockwise}{%
\cl@ckwisefalse
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\r@protected@write}
% \begin{macro}{\therpage}
% \begin{macro}{\rot@label}
%
% The \file{rotating} package used to use the |\label| command. It now
% uses a special |\rot@label| version. This variant writes the \emph{true}
% page number, not the value of |\thepage|. It also involves a variant
% |\protected@write|\footnote{The original author states `\ldots for reasons
% which I do not fully understand.'}.
%
% \changes{v2}{1997/12/03}{Added \cs{r@protected@write}, \cs{therpage} and \cs{rot@label}}
% \begin{macrocode}
\long\def\r@protected@write#1#2#3{%
\begingroup
\let\therpage\relax
#2%
\let\protect\@unexpandable@protect
\edef\reserved@a{\write#1{#3}}%
\reserved@a
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi
}
\def\therpage{\arabic{page}}
\def\rot@label#1{\@bsphack
\r@protected@write\@auxout{}%
{\string\newlabel{#1}{{\@currentlabel}{\therpage}}}%
\@esphack}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\r@tfl@t}
% A counter for use later in matching rotations to page numbers.
% \changes{v2}{1997/12/02}{Changed \cs{r@tfl@t} to a \cs{newcounter}}
% \begin{macrocode}
\newcounter{r@tfl@t}
\setcounter{r@tfl@t}{0}
% \end{macrocode}
% \end{macro}
%
% Sideways floats take up the whole page. They can be rotated so that
% the bottom of the float is on the left or the right; the default
% is to always turn to the right. If the main document uses the
% \Lopt{twoside} option then the floats are rotated according to the
% page number (requiring at least two passes through \LaTeX). The
% \Lopt{figuresleft} and \Lopt{figuresright} `options' will ensure
% a constant rotation direction when \Lopt{twoside} is in effect.
%
% \begin{macrocode}
\if@twoside
\@rot@twosidetrue
\else
\@rot@twosidefalse
\fi
% \end{macrocode}
%
% \begin{macro}{\rotatedirection}
% For setting rotation direction for positive angle. The |\rotatedirection|
% command is provided for backwards compatibility.
% \begin{macrocode}
\newcommand{\rotatedirection}[1]{%
\def\@tempa{#1}\def\@tempb{clockwise}%
\ifx\@temp\@tempb
\cl@ckwisetrue
\else
\cl@ckwisefalse
\fi}
% \end{macrocode}
% \end{macro}
%
% Set default to be \Lopt{clockwise} rotation for positive angles,
% and \Lopt{figuresright} to make all bottoms of sideways floats
% to be at the righthand edge of the paper.
% \begin{macrocode}
\clockwise
\figuresright
% \end{macrocode}
%
% \subsubsection{Turn and rotation environments}
%
% These are general rotational environments.
%
% \begin{environment}{sideways}
% The \Lenv{sideways} environment rotates its contents through the fixed
% angle of 90 degrees counterclockwise.
% \begin{macrocode}
\def\sideways{%
\Grot@setangle{90}%
\setbox\z@\hbox\bgroup\ignorespaces}
\def\endsideways{%
\unskip\egroup
\Grot@x\z@
\Grot@y\z@
\Grot@box
}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{turn}
% The \Lenv{turn} environment rotates its contents through the given
% angle, leaving the appropriate space.
%
% \emph{Extension:} We take account of the specified rotational direction.
% \begin{macrocode}
\def\turn#1{%
\ifcl@ckwise
\Grot@setnegangle{#1}
\else
\Grot@setangle{#1}
\fi
\setbox\z@\hbox\bgroup\ignorespaces}
\def\endturn{%
\unskip\egroup
\Grot@x\z@
\Grot@y\z@
\Grot@box
}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{rotate}
% The \Lenv{rotate} environment rotates its contents through the given
% angle, leaving no space.
%
% \emph{Extension:} We take account of the specified rotational direction.
% \begin{macrocode}
\def\rotate#1{%
\ifcl@ckwise
\Grot@setnegangle{#1}
\else
\Grot@setangle{#1}
\fi
\setbox\z@\hbox\bgroup\ignorespaces}
\def\endrotate{%
\unskip\egroup
\Grot@x\z@
\Grot@y\z@
\wd0\z@\dp0\z@\ht0\z@
\Grot@box
}
% \end{macrocode}
% \end{environment}
%
% \begin{macro}{\turnbox}
% A macro version of the \Lenv{rotate} environment.
%
% |\turnbox{|\meta{degrees}|}{|\meta{text}|}|
% \begin{macrocode}
\def\turnbox#1#2{%
\ifcl@ckwise
\Grot@setnegangle{#1}
\else
\Grot@setangle{#1}
\fi
\setbox\z@\hbox{{#2}}%
\Grot@x\z@
\Grot@y\z@
\wd0\z@\dp0\z@\ht0\z@
\Grot@box
}
% \end{macrocode}
% \end{macro}
%
% \subsubsection{Sideways figures and tables}
%
% Rotation of floats through a fixed angle of 90 degrees.
%
% First, a generalized |rotfloat| environment.
% \begin{macro}{\rot@float@box}
% \begin{macro}{\@rotfloat}
% \begin{macro}{\@xrotfloat}
% \begin{macrocode}
\newsavebox\rot@float@box
\def\@rotfloat#1{%
\@ifnextchar[%
{\@xrotfloat{#1}}%
{\edef\@tempa{\noexpand\@xrotfloat{#1}[\csname fps@#1\endcsname]}\@tempa}%
}
\def\@xrotfloat#1[#2]{%
\@float{#1}[#2]%
% \end{macrocode}
% Set the float contents in a box of |\textheight| instead of
% |\columnwidth|.
% \begin{macrocode}
\begin{lrbox}\rot@float@box
\begin{minipage}\textheight
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\end@rotfloat}
%
% We call |\end@float| having previously rotated the box |\@currbox|.
% The rotation is either clockwise or counterclockwise, depending on
% whether the page is odd or even. In |oneside| mode it is always odd.
% See the \file{rotating} package documentation for further details.
%
% \emph{Extension:} Generalised the output messages.
% \changes{v2}{1997/12/02}{Using \cs{rot@label} instead of \cs{label}}
% \begin{macrocode}
\def\end@rotfloat{%
\end{minipage}\end{lrbox}%
\global\addtocounter{r@tfl@t}{1}%
\rot@label{RF\ther@tfl@t}%
\def\R@@page{\pageref{RF\ther@fl@t}}%
\wd\rot@float@box\z@
\ht\rot@float@box\z@
\dp\rot@float@box\z@
\vbox to \textheight{%
\if@rot@twoside
\def\R@@page{\pageref{RF\ther@tfl@t}}%
\else
\let\R@@page\rot@LR
\fi
\ifodd\R@@page
\PWRF@trace\tw@{Adding sideways float on right hand page}%
\vfill
\centerline{\rotatebox{90}{\box\rot@float@box}}%
\else
\PWRF@trace\tw@{Adding sideways float on left hand page}%
\centerline{\rotatebox{-90}{\box\rot@float@box}}%
\vfill
\fi
}%
\end@float
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@rotdblfloat}
% \begin{macro}{\@rotdblflt}
% \begin{macro}{\@rotxdblfloat}
% General macros for double column floats.
% \changes{v2}{1997/12/03}{Added code for double column floats}
% \begin{macrocode}
\def\@rotdblfloat{%
\if@twocolumn\let\reserved@a\@rotdblflt\else\let\reserved@a\@rotfloat\fi
\reserved@a}
\def\@rotdblflt#1{\@ifnextchar[{\@rotxdblfloat{#1}}{\@rotxdblfloat{#1}[tp]}}
\def\@rotxdblfloat#1[#2]{%
\hsize\textwidth\linewidth\textwidth
\@float{#1}[#2]%
\begin{lrbox}\rot@float@box
\begin{minipage}\textheight
}
\def\end@rotdblfloat{%
\end{minipage}\end{lrbox}%
\global\addtocounter{r@tfl@t}{1}%
\rot@label{RF\ther@tfl@t}%
\def\R@@page{\pageref{RF\ther@tfl@t}}%
\@tempdima\ht\rot@float@box
\advance\@tempdima by \dp\rot@float@box
\PWRF@trace\thr@@{BOX wd: \the\wd\rot@float@box, ht: \the\ht\rot@float@box, dp: \the\dp\rot@float@box: so shift by .5 of \the\@tempdima}%
\wd\rot@float@box\z@
\ht\rot@float@box\z@
\dp\rot@float@box\z@
\vbox to \textheight{%
\if@rot@twoside
\def\R@@page{\pageref{RF\ther@tfl@t}}%
\else
\let\R@@page\rot@LR
\fi
\ifodd\R@@page
\PWRF@trace\tw@{Adding sideways float on right hand page}%
\vfill
\hbox to \textwidth{\hfill\rotatebox{90}{\box\rot@float@box}\hfill}%
\else
\PWRF@trace\tw@{Adding sideways float on left hand page}%
\hbox to \textwidth{\hfill\rotatebox{-90}{\box\rot@float@box}\hfill}%
\vfill
\fi
}
\end@dblfloat
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%
% \begin{macro}{\@initisofig}
% \begin{macro}{\@initisotab}
% \begin{macro}{\rotcapfont}
% \emph{Extension:} The following definitions implement some of
% the ISO-specific stuff. They basically provide for the setting up of
% the \file{lof} and \file{lot} files. |\rotcapfont| is the font for
% typesetting any captions. For ISO it is bold and may be larger than normal.
%
% \changes{v2}{1997/12/03}{Added \cs{PWRF@initfig} and \cs{PWRF@inittab}}
% \changes{v2.1}{2000/02/15}{Added check for iso class}
% \changes{v2.1}{2000/02/15}{Used \cs{@initisofig} instead of
% \cs{PWRF@initfig} and same for tables}
% \begin{macrocode}
\@ifundefined{@initisofig}{%
\newcommand{\@initisofig}{}
\newcommand{\@initisotab}{}
\newif\ifinfloat
\newcommand{\rotcapfont}{}}{\newcommand{\rotcapfont}{\captionsize\bf}}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{environment}{sidewaysfigure}
% Use |\def| instead of |\...environment| in order to be OK for both
% redefining the \file{rotating} environment and creating a new 2.09
% environment.
% \begin{macrocode}
\def\sidewaysfigure{%
\@initisofig
\@rotfloat{figure}}
\def\endsidewaysfigure{\end@rotfloat\infloatfalse}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{sidewaystable}
% The \Lenv{sidewaystable} environment is similar.
% It also requires redefinition to take account of the ISO peculiarities.
% \begin{macrocode}
\def\sidewaystable{%
\@initisotab
\@rotfloat{table}}
\def\endsidewaystable{\end@rotfloat\infloatfalse}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{sidewaysfigure*}
% \begin{environment}{sidewaystable*}
% These are for rotations in a two column setting. The definitions
% are similar to the previous ones for single column.
% \changes{v2}{1997/12/03}{Added sidewaysfigure and sidewaystable for double columns}
% \begin{macrocode}
\newenvironment{sidewaysfigure*}{%
\@initisofig
\@rotdblfloat{figure}}{%
\end@rotdblfloat\infloatfalse}
\newenvironment{sidewaystable*}{%
\@initisotab
\@rotdblfloat{table}}{%
\end@rotdblfloat\infloatfalse}
% \end{macrocode}
% \end{environment}
% \end{environment}
%
% \subsubsection{Rotated captions}
%
% \begin{macro}{\rotcaption}
% \begin{macro}{\@rotcaption}
% This inserts a caption rotated through 90 degrees. The code, which is
% essentially a copy of the normal |\caption| code, is defined
% in the \file{rotation} package.
% \begin{macrocode}
\def\rotcaption{\refstepcounter\@captype\@dblarg{\@rotcaption\@captype}}
\long\def\@rotcaption#1[#2]#3{%
\addcontentsline{\csname ext@#1\endcsname}{#1}{%
\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
\par
\begingroup
\@parboxrestore
\normalsize
\@makerotcaption{\csname fnum@#1\endcsname}{#3}%
\endgroup}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@makerotcaption}
% The workhorse for rotated captions.
% \begin{macrocode}
\long\def\@makerotcaption#1#2{%
\hspace{\abovecaptionskip}
\setbox\@tempboxa\hbox{{\rotcapfont #1 -- #2}}%
\ifdim \wd\@tempboxa > .8\vsize
\rotatebox{90}{%
\begin{minipage}{.8\textheight}{\centering{\rotcapfont #1 -- #2}\par}\end{minipage}%
}\par
\else%
\rotatebox{90}{\box\@tempboxa}%
\fi
\hspace{\belowcaptionskip}
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\controtcaption}
% A rotated continuation caption.
% \begin{macrocode}
\newcommand{\controtcaption}{\@controtcaption\@captype}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@controtcaption}
% The worker for a rotated continuation caption.
% \begin{macrocode}
\long\def\@controtcaption#1#2{%
\begingroup
\@parboxrestore
\normalsize
\@makerotcaption{\csname fnum@#1\endcsname}{\ignorespaces #2}\par
\endgroup}
% \end{macrocode}
% \end{macro}
%
% The end of the package code.
% \begin{macrocode}
%
% \end{macrocode}
%
%
%
% \bibliographystyle{alpha}
%
% \begin{thebibliography}{GMS94}
%
% \bibitem[GMS94]{GOOSSENS94}
% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
% \newblock {\em The LaTeX Companion}.
% \newblock Addison-Wesley Publishing Company, 1994.
%
% \bibitem[ISO97]{ISOD397}
% {\em {ISO/IEC Directives Part 3 --- Drafting and presentation of International
% Standards}}, third edition, 1997.
%
% \bibitem[Wil96]{PRW96i}
% Peter~R. Wilson.
% \newblock {\em {LaTeX for standards: The LaTeX package files user manual}}.
% \newblock NIST Report NISTIR, June 1996.
%
% \end{thebibliography}
%
%
% \Finale
% \PrintIndex
%
\endinput
%% \CharacterTable
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%% Digits \0\1\2\3\4\5\6\7\8\9
%% Exclamation \! Double quote \" Hash (number) \#
%% Dollar \$ Percent \% Ampersand \&
%% Acute accent \' Left paren \( Right paren \)
%% Asterisk \* Plus \+ Comma \,
%% Minus \- Point \. Solidus \/
%% Colon \: Semicolon \; Less than \<
%% Equals \= Greater than \> Question mark \?
%% Commercial at \@ Left bracket \[ Backslash \\
%% Right bracket \] Circumflex \^ Underscore \_
%% Grave accent \` Left brace \{ Vertical bar \|
%% Right brace \} Tilde \~}