From 1d4ca8a6dd26d16a41726aac1b7944ab8a3c5b3c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 11 Jan 2006 23:54:10 +0000 Subject: trunk/Master/texmf-dist/source/latex/isorot git-svn-id: svn://tug.org/texlive/trunk@334 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/source/latex/isorot/isorot.dtx | 1536 ++++++++++++++++++++++ 1 file changed, 1536 insertions(+) create mode 100644 Master/texmf-dist/source/latex/isorot/isorot.dtx (limited to 'Master/texmf-dist/source/latex/isorot/isorot.dtx') diff --git a/Master/texmf-dist/source/latex/isorot/isorot.dtx b/Master/texmf-dist/source/latex/isorot/isorot.dtx new file mode 100644 index 00000000000..b027b4cc670 --- /dev/null +++ b/Master/texmf-dist/source/latex/isorot/isorot.dtx @@ -0,0 +1,1536 @@ +% \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 \~} + + -- cgit v1.2.3