diff options
Diffstat (limited to 'macros/latex/contrib/isostds/iso')
-rw-r--r-- | macros/latex/contrib/isostds/iso/README | 43 | ||||
-rw-r--r-- | macros/latex/contrib/isostds/iso/iso4ht.dtx | 1579 | ||||
-rw-r--r-- | macros/latex/contrib/isostds/iso/iso4ht.ins | 60 | ||||
-rw-r--r-- | macros/latex/contrib/isostds/iso/iso4ht.pdf | bin | 0 -> 205628 bytes | |||
-rw-r--r-- | macros/latex/contrib/isostds/iso/isoe.dtx | 5444 | ||||
-rw-r--r-- | macros/latex/contrib/isostds/iso/isoe.ins | 96 | ||||
-rw-r--r-- | macros/latex/contrib/isostds/iso/isoe.pdf | bin | 0 -> 385405 bytes | |||
-rw-r--r-- | macros/latex/contrib/isostds/iso/isoman.pdf | bin | 0 -> 447492 bytes | |||
-rw-r--r-- | macros/latex/contrib/isostds/iso/isoman.tex | 3874 |
9 files changed, 11096 insertions, 0 deletions
diff --git a/macros/latex/contrib/isostds/iso/README b/macros/latex/contrib/isostds/iso/README new file mode 100644 index 0000000000..5be2457e8a --- /dev/null +++ b/macros/latex/contrib/isostds/iso/README @@ -0,0 +1,43 @@ + The iso class is for typesetting ISO International Standard documents +according to the requirements specified in "ISO/IEC Directives, Part 2, +Rules for the structure and drafting of International Standards. +(Fourth edition, 2001)". Configuration files for TeX4ht are also provided. + +Changes in the 2002 release +o Updated from ISO/IEC Directives, Third edition, 1997 to the + Fourth edition, 2001. + + The distribution is under the LPPL and consists of the following files: +README (this file) +isoe.dtx +isoe.ins +isoe.pdf +iso4ht.dtx +iso4ht.ins +iso4ht.pdf +isoman.tex +isoman.pdf (user manual) + + To install the class (and packages) +o run: latex isoe.ins (which will generate *.cls, *.clo, *.sty and *.tex files) +o Move the generated files to a location where LaTeX will find them + (if you don't know where this is, see the FAQ on CTAN in /help/uktug-faq) + +o To regenerate the commented source code + o run: latex isoe.dtx + o run: makeindex -s gind.ist isoe + o run: latex isoe.dtx + o print isoe.dvi for a hardcopy +o For the User Manual, either latex isoman.tex or print isoman.pdf + +o If you might use TeX4ht (and this might well not work): + o run: latex iso4ht.dtx (which will generate *.4ht file(s)) + o To print the commented source code, follow instructions above on iso4ht.dtx + o Move the generated *.4ht file(s) to a location where TeX4ht will find them + + Don't forget to update the (La)TeX file database if you have one. + +2002/09/04 +Peter Wilson +peter.r.wilson@boeing.com + diff --git a/macros/latex/contrib/isostds/iso/iso4ht.dtx b/macros/latex/contrib/isostds/iso/iso4ht.dtx new file mode 100644 index 0000000000..68aafddb62 --- /dev/null +++ b/macros/latex/contrib/isostds/iso/iso4ht.dtx @@ -0,0 +1,1579 @@ +% \iffalse meta-comment +% +% Author: Peter Wilson (CUA) (now at: peter.r.wilson@boeing.com) +% +% This system is released under the LaTeX Project Public License. +% +% This system is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{url} +\newcommand{\makecolonletter}{\catcode`\:11\relax} +\renewcommand{\MakePrivateLetters}{\makeatletter\makecolonletter} +\EnableCrossrefs +\CodelineIndex +\setcounter{StandardModuleDepth}{1} +\begin{document} + \DocInput{iso4ht.dtx} +\end{document} +%</driver> +% +% \fi +% +% \CheckSum{1914} +% +% \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@} +% \DoNotIndex{\HCode} +% +% \changes{v0.1}{2000/01/20}{First public release} +% +% \def\fileversion{v0.1} +% \def\filedate{2000/01/20} +% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package +% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option +% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file +% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter +% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle +% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment +% \newcommand*{\texht}{\Lpack{TeX4ht}} ^^A typeset TeX4ht +% +% \title{The \Lpack{iso4ht} \texht{} package\thanks{This +% file has version number \fileversion, last revised +% \filedate.}} +% +% \author{% +% Peter Wilson\\ +% Catholic University of America \\ +% Now at \texttt{peter.r.wilson@boeing.com} +% } +% \date{\filedate} +% \maketitle +% \begin{abstract} +% The \Lpack{iso4ht} package, in conjunction with \texht{} +% can be used to convert \LaTeX{} +% \Lpack{iso} class documents into HTML tagged documents. +% \end{abstract} +% \tableofcontents +% +% \StopEventually{} +% +% +% +% \section{Introduction} +% +% The \Lpack{iso4ht} package can be used in conjunction with +% the \texht{} system to convert \LaTeX{} \Lpack{iso} class documents +% into HTML tagged documents. The \Lpack{iso} class is for typesetting +% ISO standard documents~\cite{PRW96i}. +% +% Section~\ref{sec:usc} describes the package and +% commented source code for the package is in Section~\ref{sec:code}. +% +% 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}. +% +% \subsection{Acknowledgement} +% +% Development of the \Lpack{iso4ht} package would not have been possible +% without the help and expertise of Eitan Gurari, and in particular his +% willingness to put up with the many questions I asked. +% +% +% \section{The \Lpack{iso4ht} package} \label{sec:usc} +% +% The \texht{} system has been developed by Eitan Gurari (see Chapter~4 +% and Appendix~B in~\cite{GOOSSENS99}. It is a general purpose conversion +% system to convert \LaTeX{} tagged documents into HTML (or other *ML) +% tagged documents. \texht{} can be obtained from +% \url{http://www.cis.ohio-state.edu/~gurari/TeX4ht/mn.html}. +% The \Lpack{iso4ht} +% package is not guaranteed to work with versions of \texht{} earlier +% than mid-January 2000. At the time of writing, the default \texht{} +% distribution was dated mid-1999. The latest version of \texht{} is obtainable +% from \url{http://www.cis.ohio-state.edu/~gurari/TeX4ht/bugfixes.html}. +% +% To use the \Lpack{iso4ht} package, just process the \LaTeX{} document +% as you would any other under \texht. That is, either call the |ht| script +% a document starting like: +% \begin{verbatim} +% \documentclass[...]{isov2} +% \usepackage[...]{tex4ht} +% ... +% \end{verbatim} +% or call the |htlatex| script on a document without the +% |\usepackage[...]{tex4ht}| line. +% +% +% \section{The package code} \label{sec:code} +% +% The following code is based on \Lpack{article.4ht}, \Lpack{html0.4ht}, +% \Lpack{html32.4ht} and \Lpack{html4.4ht}, all written by Eitan Gurari. +% +% Most of the necessary work already exists in \Lpack{latex.4ht}, which +% sets up the \LaTeX{} kernel code. \Lpack{article.4ht} provides the +% setup for the \Lpack{article} class, and \Lpack{html0.4ht}, +% \Lpack{html32.4ht} and \Lpack{html4.4ht} provide the HTML option-related +% configurations. +% +% The \Lpack{iso} class was originally based on the \Lpack{article} class, +% so \Lpack{isov2.4ht} is in turn based on \Lpack{article.4ht} (although little +% code is actually reused). The HTML option-related configurations are +% embedded in \Lpack{isov2.4ht} instead of being supplied as seperate files. +% +% \changes{v0.1}{2000/01/20}{First public release} +% +% Announce the name and version of the package. +% \begin{macrocode} +%<*usc> +\typeout{[isov2.4ht 2000/01/20 version v0.1]} + +% \end{macrocode} +% +% \subsection{Setup and hooks} +% +% The first major part of the code deals with setting up for configuring +% the \LaTeX{} commands and environments, which forms the second major +% portion of the code. +% +% Setting up may involve adding hooks into commands, either by redefining +% them or, in simpler cases prepending and/or appending code before and/or +% after the original code. It can also involve specifying that commands +% are configurable. +% +% \subsubsection{Table of contents} +% +% What follows is a revised version of the \Lpack{article.4ht} setup +% for the |\tableofcontents|, |listoffigures| and |\listoftables| commands. +% Parctically all of the revision has to do with replacing \Lpack{article} +% sectioning commands (i.e., |\section|, |\subsection|, etc.) +% with the \Lpack{iso} +% sectioning commands (i.e., |\clause|, |\sclause|, etc. +%). +% \DescribeMacro{\listof} +% \begin{macrocode} +\NewConfigure{listof}{6} + +% \end{macrocode} +% +% \DescribeMacro{\tableofcontents} +% The revised version of \Lpack{article.4ht} |\tableofcontents| +% configuration setup. +% +% Do the |tocdepth| setup. +% \begin{macrocode} +\def\:tableofcontents{\futurelet\:temp\:TOC} +\edef\:TOC{% + \noexpand\ifx [\noexpand\:temp + \noexpand\expandafter\noexpand\:TableOfContents + \noexpand\else + \noexpand\Auto:ent{% + \ifnum 1>\c@tocdepth\else clause,fibicl@use,likefibicl@use,normannex,infannex,repannex,\fi +\ifnum 2>\c@tocdepth \else sclause,\fi +\ifnum 3>\c@tocdepth \else ssclause,\fi +\ifnum 4>\c@tocdepth \else sssclause,\fi +\ifnum 5>\c@tocdepth \else ssssclause,\fi +\ifnum 6>\c@tocdepth \else sssssclause,\fi +UnDFexyz}% + \noexpand\fi} + +\def\Auto:ent#1{% + \edef\auto:toc{\noexpand\:TableOfContents[\ifx \auto:toc\:UnDef + #1\else \auto:toc \fi]} \auto:toc + \global\let\auto:toc\:UnDef } + +% \end{macrocode} +% +% Specify the various kinds of entries in the ToC. +% \begin{macrocode} +\def\tocnormannex#1#2#3{\par\annexname\ \toc:num{annex}{#1 (\normativename)}{#2}\par}% +\def\toclikenormannex#1#2#3{\par\:SPAN{likenormannexToc}{#2}\par}% +\def\tocinfannex#1#2#3{\par\annexname\ \toc:num{infannex}{#1 (\informativename)}{#2}\par}% +\def\toclikeinfannex#1#2#3{\par\:SPAN{likeinfannexToc}{#2}\par}% +\def\tocrepannex#1#2#3{\par\annexname\ \toc:num{annex}{#1}{#2}\par}% +\def\toclikerepannex#1#2#3{\par\:SPAN{likerepannexToc}{#2}\par}% +\def\tocfibicl@use#1#2#3{\par\:SPAN{fibicl@useToc}{#2}\par}% +\def\toclikefibicl@use#1#2#3{\par\:SPAN{likefibicl@useToc}{#2}\par}% +\def\tocclause#1#2#3{\par\toc:num{clause}{#1}{#2}\par}% +\def\toclikeclause#1#2#3{\par\:SPAN{likeclauseToc}{#2}\par}% +\def\tocsclause#1#2#3{\par\ \toc:num{sclause}{#1}{#2}\par} +\def\toclikesclause#1#2#3{\par\ \:SPAN{likesclauseToc}{#2}\par} +\def\tocssclause#1#2#3{\par + \ \ \toc:num{ssclause}{#1}{#2}\par} +\def\toclikessclause#1#2#3{\par + \ \ \:SPAN{likessclauseToc}{#2}\par} +\def\tocsssclause#1#2#3{\par\ \ \toc:num{sssclause}{#1}{#2}\par} +\def\toclikesssclause#1#2#3{\par\ \ \:SPAN{likesssclauseToc}{#2}\par} +\def\tocssssclause#1#2#3{\par + \ \ \ \ \toc:num{ssssclause}{#1}{#2}\par} +\def\toclikessssclause#1#2#3{\par + \ \ \ \ \:SPAN{likessssclauseToc}{#2}\par} +\def\tocsssssclause#1#2#3{\par + \ \ \ \ \ \toc:num{sssssclause}{#1}{#2}\par} +\def\toclikesssssclause#1#2#3{\par + \ \ \ \ \ \:SPAN{likesssssclauseToc}{#2}\par} +% \end{macrocode} +% There is also a special entry to cater for the |\title| command +% (see page~\pageref{titlehooks}). +% \begin{macrocode} +\def\toctitleclause#1#2#3{\par\toc:num{titleclause}{#1}{#2}\par}% +\def\tocliketitleclause#1#2#3{\par\:SPAN{liketitleclauseToc}{#2}\par}% + +% \end{macrocode} +% The next bit is a straight copy of original \texht{} code. +% \begin{macrocode} +\def\toc:num#1#2#3{\def\:temp{#1#2}\:SPAN{#1Toc}{\ifx \:temp\empty \else + #2 \fi #3}} +\def\:tocs{\noexpand\:tableofcontents} +\pend:defIII\addcontentsline{% + \def\:temp{##1}\def\:tempa{toc}\ifx \:temp\:tempa + \gHAdvance\TitleCount 1 \fi } +\def\@dottedtocline#1#2#3#4#5{\hbox{\def\numberline##1{\e:listof + ##1\f:listof}\c:listof#4\d:listof}\ignorespaces} + +% \end{macrocode} +% +% Setup the |\@starttoc| command. +% \begin{macrocode} +\def\@starttoc#1{% + \begingroup + \makeatletter \Configure{cite}{}{}% + \def\:temp{#1}\def\:tempa{toc}% + \a:listof\par + \@input{\jobname.\ifx \:temp\:tempa otc\else #1\fi}% + \b:listof + \if@filesw + \expandafter\expandafter\csname + newwrite\endcsname\csname tf@#1\endcsname + \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax + \fi + \global\@nobreakfalse + \endgroup} + +% \end{macrocode} +% +% The next chunk of code only applies for HTML. +% \begin{macrocode} +\ifHtml + \NewConfigure{tableofcontents*}[1]{\edef\auto:toc{#1}% + \ifx \au:StartSec\:UnDef + \let\au:StartSec\:StartSec + \def\:StartSec{\:tableofcontents + \global\let\auto:toc\:UnDef \:StartSec} + \pend:def\:tableofcontents{\gdef\:StartSec{\au:StartSec}} + \fi +} + +% \end{macrocode} +% +% Define the various levels at which the document may be cut into seperate +% files (|\CutAt|) and at which points a ToC may be produced (|\TocAt|). \\ +% \textbf{NOTE:} This may require modification to deal with the |\title|. +% +% Cut at the clause (and annex) level. +% \begin{macrocode} + \def\:tempa{ + \CutAt{clause,likeclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{likeclause,clause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \Configure{tableofcontents*}{clause,likeclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} +} + +% \end{macrocode} +% +% Cut at the clause and subclause levels. +% \begin{macrocode} +\def\:tempb{ + \TocAt*{clause,/likeclause,sclause,likesclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \TocAt*{likeclause,/clause,sclause,likesclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{clause,likeclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{likeclause,clause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \Configure{tableofcontents*}{clause,likeclause,sclause,likesclause,% + ssclause,likessclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} +} + +% \end{macrocode} +% +% Cut at the clause, subclause, and subsubclause levels. +% \begin{macrocode} +\def\:tempc{ + \TocAt*{clause,/likeclause,sclause,likesclause,ssclause,likessclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \TocAt*{likeclause,/clause,sclause,likesclause,ssclause,likessclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{clause,likeclause,sclause,likesclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{likeclause,clause,sclause,likesclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \Configure{tableofcontents*}{clause,likeclause,sclause,likesclause,% + ssclause,likessclause,sssclause,likesssclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} +} + +% \end{macrocode} +% +% Cut at the clause, subclause, subsubclause, and subsubsubclause levels. +% \begin{macrocode} +\def\:tempd{ + \TocAt*{clause,/likeclause,sclause,likesclause,ssclause,likessclause,% + sssclause,likesssclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \TocAt*{likeclause,/clause,sclause,likesclause,ssclause,likessclause,% + sssclause,likesssclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{clause,likeclause,sclause,likesclause,ssclause,likessclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \CutAt{likeclause,clause,sclause,likesclause,ssclause,likessclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} + \Configure{tableofcontents*}{clause,likeclause,sclause,likesclause,% + ssclause,likessclause,sssclause,likesssclause,% + ssssclause,likessssclause,% + normannex,infannex,repannex,fibicl@use,likefibicl@use} +} + +% \end{macrocode} +% +% Now pick the cut levels appropriate for the cutting option. +% Option 4 generates the most cuts (down to subsubsubclauses) and option 1 +% one the least (clauses and annexes only). +% \begin{macrocode} +\:CheckOption{4} + \if:Option + \:tempa \:tempb \:tempc \:tempd + \else\:CheckOption{3} + \if:Option + \:tempa \:tempb \:tempc + \else\:CheckOption{2} + \if:Option + \:tempa \:tempb + \else\:CheckOption{1} + \if:Option + \:tempa + \fi + \fi + \fi + \fi + +\fi % end ifHtml + +% \end{macrocode} +% That ends the HTML specific code. +% +% \DescribeMacro{\listoffigures} +% \DescribeMacro{\listoftables} +% The following code is copied from \Lpack{article.4ht}. +% \begin{macrocode} + \pend:def\listoffigures{\begingroup \a:listoffigures + \def\@starttoc{\:tableofcontents[lof]\:gobble}} +\append:def\listoffigures{\b:listoffigures \endgroup} +\pend:def\listoftables{\begingroup \a:listoftables + \def\@starttoc{\:tableofcontents[lot]\:gobble}} +\append:def\listoftables{\b:listoftables \endgroup} + +\NewConfigure{listoffigures}{2} +\NewConfigure{listoftables}{2} + +\def\toclot#1#2#3{\par\ \toc:num{table}{#1}{#2}\par} +\def\toclof#1#2#3{\par\ \toc:num{figure}{#1}{#2}\par} + +% \end{macrocode} +% +% +% \subsubsection{Sectioning commands} +% +% This part of the code provides the setup for the sectioning commands. +% +% For an ISO document, the Title comes after the ToC, Foreword and +% Introduction.\label{titlehooks} +% The \Lpack{iso} |\title| command should really end +% any previous sectioning commands, and the easiest way to manage this +% seems to be by redefining the |\title| command in terms of a sectioning +% command. In order to do this, some new commands are required and some +% \Lpack{iso} commands redefined. +% +% Eventually, it is the sectioning command that gets configured instead +% of the |\title| command. +% Another reason for doing things this way is that elsewhere, for +% a package under the \Lpack{iso} class, I will +% be configuring a different |\title| command and I will be able to use +% this as a basis for that configuration. +% +% \DescribeMacro{\introelement} +% \DescribeMacro{\compelement} +% These require redefining as, for reasons I don't understand, the system +% falls over when it tries to process the \Lpack{iso} |\isoemptystring| +% command. This is replaced by a more direct test. +% \begin{macrocode} +\renewcommand{\introelement}[1]{\ifx\empty#1\else {#1 ---\newline}\fi} +\renewcommand{\compelement}[1]{\ifx\empty#1\else { ---\newline #1}\fi} + +% \end{macrocode} +% +% \DescribeMacro{\titleclause} +% A `clause' for typesetting (in \texht{} only) the title. This should make +% no entry in the ToC. There is no typeset number, so life is a bit simpler +% than when normally defining sectioning commands. +% \begin{macrocode} +\newcommand{\titleclause}{% + \@startsection{titleclause}{100}% large level to avoid adding to ToC + {\z@}% + {\beforecskip}% + {\aftercskip}% + {\raggedright\Tfont\bfseries}} + +% \end{macrocode} +% +% \DescribeMacro{\title} +% Now redefine the original |\title| command in terms of |\titleclause*|. +% \begin{macrocode} +\renewcommand{\title}[3]{% + \setcounter{clause}{0} + \gdef\thetitle{\introelement{#1} % + \mainelement{#2} % + \compelement{#3}} + \titleclause*{\thetitle}} + +% \end{macrocode} +% +% Do the |\title| `clause' hooks. +% \begin{macrocode} +\let\no@titleclause\titleclause +\Def:Section\titleclause{}{#1} +\let\no:titleclause\titleclause +\def\titleclause{\rdef:sec{titleclause}} +\Def:Section\liketitleclause{}{#1} +\let\:liketitleclause\liketitleclause +\let\liketitleclause\:UnDef + +% \end{macrocode} +% +% +% Add the hooks for the normal sectioning commands. This is a revision of code +% in \Lpack{article.4ht}. +% \begin{macrocode} +\let\no@clause\clause +\Def:Section\clause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \theclause \fi}{#1} +\let\no:clause\clause +\def\clause{\rdef:sec{clause}} +\Def:Section\likeclause{}{#1} +\let\:likeclause\likeclause +\let\likeclause\:UnDef + +\let\no@sclause\sclause +\Def:Section\sclause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \thesclause \fi}{#1} +\let\no:sclause\sclause +\def\sclause{\rdef:sec{sclause}} +\Def:Section\likesclause{}{#1} +\let\:likesclause\likesclause +\let\likesclause\:UnDef + +\let\no@ssclause\ssclause +\Def:Section\ssclause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \thessclause \fi}{#1} +\let\no:ssclause\ssclause +\def\ssclause{\rdef:sec{ssclause}} +\Def:Section\likessclause{}{#1} +\let\:likessclause\likessclause +\let\likessclause\:UnDef + +\let\no@sssclause\sssclause +\Def:Section\sssclause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \thesssclause \fi}{#1} +\let\no:sssclause\sssclause +\def\sssclause{\rdef:sec{sssclause}} +\Def:Section\likesssclause{}{#1} +\let\:likesssclause\likesssclause +\let\likesssclause\:UnDef + +\let\no@ssssclause\ssssclause +\Def:Section\ssssclause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \thessssclause \fi}{#1} +\let\no:ssssclause\ssssclause +\def\ssssclause{\rdef:sec{ssssclause}} +\Def:Section\likessssclause{}{#1} +\let\:likessssclause\likessssclause +\let\likessssclause\:UnDef + +\let\no@sssssclause\sssssclause +\Def:Section\sssssclause{\ifnum \c:secnumdepth>\c@secnumdepth \else + \thesssssclause \fi}{#1} +\let\no:sssssclause\sssssclause +\def\sssssclause{\rdef:sec{sssssclause}} +\Def:Section\likesssssclause{}{#1} +\let\:likesssssclause\likesssssclause +\let\likesssssclause\:UnDef + +\let\no@fibicl@use\fibicl@use +\Def:Section\fibicl@use{}{#1} +\let\no:fibicl@use\fibicl@use +\def\fibicl@use{\rdef:sec{fibicl@use}} +\Def:Section\likefibicl@use{}{#1} +\let\:likefibicl@use\likefibicl@use +\let\likefibicl@use\:UnDef + +\def\@normannex#1{% + \tocskip{\tocentryskip} + \SkipRefstepAnchor + \addcontentsline{toc}{annex}{\annexname\space\theannex\space(\normativename)\space#1}% + \csname @endnormannex\endcsname} + +\let\:tempb\normannex +\Def:Section\normannex{\theannex}{#1} +\let\:normannex\normannex +\let\normannex\:tempb +\let\no@normannex\@normannex +\def\@normannex#1{% + {\let\addcontentsline\:gobbleIII\no@normannex{#1}}% + \HtmlEnv \Toc:Title{#1}\:normannex{#1}} + +\def\@infannex#1{% + \tocskip{\tocentryskip} + \SkipRefstepAnchor + \addcontentsline{toc}{annex}{\annexname\space\theannex\space(\informativename)\space#1}% + \csname @endinfannex\endcsname} + +\let\:tempb\infannex +\Def:Section\infannex{\theannex}{#1} +\let\:infannex\infannex +\let\infannex\:tempb +\let\no@infannex\@infannex +\def\@infannex#1{% + {\let\addcontentsline\:gobbleIII\no@infannex{#1}}% + \HtmlEnv \Toc:Title{#1}\:infannex{#1}} + +\def\@repannex#1{% + \tocskip{\tocentryskip} + \SkipRefstepAnchor + \addcontentsline{toc}{annex}{\annexname\space\theannex\space#1}% + \csname @endrepannex\endcsname} + +\let\:tempb\repannex +\Def:Section\repannex{\theannex}{#1} +\let\:repannex\repannex +\let\repannex\:tempb +\let\no@repannex\@repannex +\def\@repannex#1{% + {\let\addcontentsline\:gobbleIII\no@repannex{#1}}% + \HtmlEnv \Toc:Title{#1}\:repannex{#1}} + +% \end{macrocode} +% +% Specify which sectioning commands end which kinds of section. +% \begin{macrocode} +\Configure{endtitleclause} + {clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endliketitleclause} + {clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endclause} + {likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endlikeclause} + {clause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endsclause} + {likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endlikesclause} + {sclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endssclause} + {likessclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endlikessclause} + {ssclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endsssclause} + {likesssclause,ssclause,likessclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endlikesssclause} + {sssclause,ssclause,likessclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endssssclause} + {likessssclause,likesssclause,ssclause,likessclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} +\Configure{endlikessssclause} + {ssssclause,likesssclause,ssclause,likessclause,sclause,likesclause,% + clause,likeclause,fibicl@use,likefibicl@use,normannex,infannex,repannex} + +\Configure{endfibicl@use}{fibicl@use,endlikefibicl@use,clause,likeclause} +\Configure{endlikefibicl@use}{fibicl@use,endlikefibicl@use,clause,likeclause} + +\Configure{endnormannex}{normannex,infannex,repannex,fibicl@use,likefibicl@use} +\Configure{endinfannex}{normannex,infannex,repannex,fibicl@use,likefibicl@use} +\Configure{endrepannex}{normannex,infannex,repannex,fibicl@use,likefibicl@use} + +% \end{macrocode} +% +% \subsubsection{Miscellaneous} +% +% \DescribeMacro{\caption} +% \DescribeMacro{\@makecaption} +% We have to add configuration hooks and code for captions. +% \begin{macrocode} +\NewConfigure{caption}[4]{\c:def\cptA:{#1}\c:def\cptB:{#2}% + \c:def\cptC:{#3}\c:def\cptD:{#4}} +\long\def\@makecaption#1#2{% + {\cptA: \cap:ref{#1}% +\cptB:}{\cptC:{#2}\cptD:}} +\pend:def\caption{\SkipRefstepAnchor} + +% \end{macrocode} +% +% \DescribeMacro{\theindex} +% |\theindex| is redefined to cater for the difference between printed +% documents with page numbers and HTML documents. This is a copy of the code +% in \Lpack{article.4ht}. +% \begin{macrocode} +\long\def\c:theindex:#1#2#3#4#5#6#7#8#9{% + \def\theindex{% + \def\idx:item{\SaveEverypar\everypar{}#1}% + \def\endtheindex{\idx:item#2\RecallEverypar}% + \def\item{\idx:item\let\index\@gobble #3\def\idx:item{#4}}% + \def\subitem{\idx:item\let\index\@gobble #5\def\idx:item{#6}}% + \def\subsubitem{\idx:item\let\index\@gobble #7\def\idx:item{#8}}}% + \def\indexspace{\idx:item#9\let\idx:item\empty}} + +% \end{macrocode} +% +% +% \DescribeEnv{quote} +% \DescribeEnv{quotation} +% A copy of the code from \Lpack{article.4ht}. +% \begin{macrocode} +\append:def\quote{\par\@totalleftmargin\z@} +\append:def\quotation{\a:quotation\par\@totalleftmargin\z@} +\NewConfigure{quotation}{1} + +% \end{macrocode} +% +% +% \DescribeMacro{\thefootnote} +% The default \texht{} treatment of footnotes is to put each one into a +% seperate file. In the \Lpack{iso} case I want to have the footnote text +% in the same file as the body of the document. Eitan Gurari suggested +% the method implemented here to override the default +% (see also page~\pageref{footpage}). +% \begin{macrocode} +\renewcommand{\thefootnote}{\arabic{footnote}\csname PRNT\endcsname} + +% \end{macrocode} +% +% +% \subsection{Configuration} +% +% All, or nearly all, configurations depend on the HTML level option chosen. +% Typically, html0 results in empty or null values of the hooks. html32 has +% some simple hook vaules, while html4 are the most complex. +% +% \subsubsection{Table of contents} +% +% The ToC configuration is basically a copy of the relevant code from +% \Lpack{html0.4ht}, \Lpack{html32.4ht} and \Lpack{html4.4ht}, from the +% \texttt{article} section of each of those. +% +% \begin{macro}{\listof} +% \begin{macro}{\lof} +% \begin{macro}{\lot} +% I'm not sure what |\listof| does, but it is related to the ToC, LoF and LoT. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option + %%%% Do html0 + \ConfigureToc{lof}{\empty}{ }{}{} + \ConfigureToc{lot}{\empty}{ }{}{} +\else + \:CheckOption{3.2} + \if:Option + %%%% Do html32 + {\Configure{Needs}{Font\string_Size: #1}\ifcase \@ptsize + \or \Needs{11}\or \Needs{12}\else \fi} + \Configure{listof}{}{}{}{\HCode{<br\xml:empty>}}{}{} + \ConfigureToc{lof}{\empty}{\ }{}{\HCode{<br\xml:empty>}} + \ConfigureToc{lot}{\empty}{\ }{}{\HCode{<br\xml:empty>}} + \else + %%%% Do html4 + {\Configure{Needs}{Font\string_Size: #1}\ifcase \@ptsize + \or \Needs{11}\or \Needs{12}\else \fi} + \Configure{listof}{}{}{}{\HCode{<br\xml:empty>}}{}{} + \ConfigureToc{lof} + {\HCode{<span class="lofToc">}}{\ }{}{\HCode{</span><br\xml:empty>}} + \ConfigureToc{lot} + {\HCode{<span class="lotToc">}}{\ }{}{\HCode{</span><br\xml:empty>}} + \fi +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Sectioning commands} +% +% Configure the sectioning commands, HTML option dependent. +% +% \begin{macro}{\titleclause} +% \begin{macro}{\titleclause*} +% \begin{macro}{\clause} +% \begin{macro}{\clause*} +% \begin{macro}{\sclause} +% \begin{macro}{\sclause*} +% \begin{macro}{\ssclause} +% \begin{macro}{\ssclause*} +% \begin{macro}{\sssclause} +% \begin{macro}{\sssclause*} +% \begin{macro}{\ssssclause} +% \begin{macro}{\ssssclause*} +% \begin{macro}{\sssssclause} +% \begin{macro}{\sssssclause*} +% \begin{macro}{\fibicl@use} +% \begin{macro}{\fibicl@use*} +% \begin{macro}{\normannex} +% \begin{macro}{\infannex} +% \begin{macro}{\repannex} +% This code is based on the \Lpack{article} sectioning configuration. In most +% cases only the sectioning names have been changed. The annexes have a +% style of their own, though. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option +% \end{macrocode} +% +% HTML option 0.0 +% \begin{macrocode} + %%%% Do html0 + \Configure{titleclause}{}{}{}{} + \Configure{liketitleclause}{}{}{}{} + \Configure{clause}{}{}{\theclause\space}{} + \Configure{likeclause}{}{}{}{} + \Configure{sclause}{}{}{\thesclause\space}{} + \Configure{likesclause}{}{}{}{} + \Configure{ssclause}{}{}{\thessclause\space}{} + \Configure{likessclause}{}{}{}{} + \Configure{sssclause}{}{}{\thesssclause\space}{} + \Configure{likesssclause}{}{}{}{} + \Configure{ssssclause}{}{}{\thessssclause\space}{} + \Configure{likessssclause}{}{}{}{} + \Configure{sssssclause}{}{}{\thesssssclause\space}{} + \Configure{likesssssclause}{}{}{}{} + \Configure{fibicl@use}{}{}{}{} + \Configure{likefibicl@use}{}{}{}{} + \Configure{normannex}{}{} + {\annexname~\theannex~(\normativename)\space}{} + \Configure{infannex}{}{} + {\annexname~\theannex~(\informativename)\space}{} + \Configure{repannex}{}{} + {\annexname~\theannex\space}{} + +\else + \:CheckOption{3.2} + \if:Option +% \end{macrocode} +% +% HTML option 3.2 +% \begin{macrocode} + %%%% Do html3 + \Configure{titleclause}{}{} + {\IgnorePar\HCode{<h1 class="titleHead">}} + {\HCode{</h1>}\NoIndent \par} + \Configure{titleclauseTITLE+}{#1} + \Configure{liketitleclause}{}{} + {\IgnorePar\HCode{<h1 class="titleHead">}} + {\HCode{</h1>}\NoIndent \par} + + \Configure{clause}{}{} + {\IgnorePar\HCode{<h3 class="clauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \theclause \space \fi} + {\HCode{</h3>}\NoIndent \par} + \Configure{clauseTITLE+}{\theclause\space#1} + \Configure{likeclause}{}{} + {\IgnorePar\HCode{<h3 class="likeclauseHead">}} + {\HCode{</h3>}\NoIndent \par} + + \Configure{sclause}{}{} + {\bgroup \IgnorePar\HCode{<h4 class="sclauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \thesclause \space \fi} + {\HCode{</h4>}\NoIndent\egroup} + \Configure{sclauseTITLE+}{\thesclause \space#1} + \Configure{likesclause}{}{} + {\bgroup \IgnorePar\HCode{<h4 class="likesclauseHead">}} + {\HCode{</h4>}\NoIndent\egroup} + + \Configure{ssclause}{}{} + {\bgroup \IgnorePar\HCode{<h5 class="ssclauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \thessclause \space \fi} + {\HCode{</h5>}\NoIndent\egroup} + \Configure{likessclause}{}{} + {\bgroup \IgnorePar\HCode{<h5 class="likessclauseHead">}} + {\HCode{</h5>}\NoIndent\egroup} + \Configure{ssclauseTITLE+}{\thessclause \space#1} + + \Configure{sssclause}{}{} + {\ShowPar\NoIndent\HCode{<span class="sssclauseHead">}\begingroup\bf + \thesssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likesssclause}{}{} + {\ShowPar\NoIndent\HCode{<span class="likesssclauseHead">}} + {\HCode{</span>}\IgnorePar} + \Configure{sssclauseTITLE+}{\thesssclause \space#1} + + \Configure{ssssclause}{}{} + {\ShowPar\HCode{<span class="ssssclauseHead">}\begingroup\bf + \thessssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likessssclause}{}{} + {\ShowPar\HCode{<span class="likssssclauseHead">}\begingroup\bf} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{ssssclauseTITLE+}{\thessssclause \space#1} + + \Configure{sssssclause}{}{} + {\ShowPar\HCode{<span class="sssssclauseHead">}\begingroup\bf + \thesssssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likesssssclause}{}{} + {\ShowPar\HCode{<span class="liksssssclauseHead">}\begingroup\bf} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{sssssclauseTITLE+}{\thesssssclause \space#1} + + \Configure{fibicl@use}{}{} + {\IgnorePar\HCode{<h3 class="fibicl@useHead">}} + {\HCode{</h3>}\NoIndent \par} + \Configure{fibicl@useTITLE+}{#1} + \Configure{likefibicl@use}{}{} + {\IgnorePar\HCode{<h3 class="likefibicl@useHead">}} + {\HCode{</h3>}\NoIndent \par} + + \Configure{normannex}{}{} + {\IgnorePar\HCode{<h3 class="normannexHead">} + \annexname\ \theannex\ (\normativename)\HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{normannexTITLE+}{\annexname\space \theannex\space (\normativename)\space #1} + + \Configure{infannex}{}{} + {\IgnorePar\HCode{<h3 class="infannexHead">} + \annexname\ \theannex\ (\informativename)\HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{infannexTITLE+}{\annexname\space \theannex\space (\informativename)\space #1} + + \Configure{repannex}{}{} + {\IgnorePar\HCode{<h3 class="repannexHead">} + \annexname\ \theannex\ \HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{repannexTITLE+}{\annexname\space \theannex\space #1} + + \else +% \end{macrocode} +% +% HTML default option (4.0) +% \begin{macrocode} + %%%% Do html4 + \Configure{titleclause}{}{} + {\IgnorePar \EndP\IgnorePar\HCode{<h1 class="titleHead">}} + {\HCode{</h1>}\NoIndent \par} + \Configure{titleclauseTITLE+}{#1} + \Configure{liketitleclause}{}{} + {\IgnorePar \EndP\IgnorePar\HCode{<h1 class="titleHead">}} + {\HCode{</h1>}\NoIndent \par} + + \Configure{clause}{}{} + {\IgnorePar \EndP\IgnorePar\HCode{<h3 class="clauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \theclause \space \fi} + {\HCode{</h3>}\NoIndent \par} + \Configure{clauseTITLE+}{\theclause\space#1} + \Configure{likeclause}{}{} + {\IgnorePar \EndP\IgnorePar\HCode{<h3 class="likeclauseHead">}} + {\HCode{</h3>}\NoIndent \par} + + \Configure{sclause}{}{} + {\EndP\bgroup \IgnorePar\HCode{<h4 class="sclauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \thesclause \space \fi} + {\HCode{</h4>}\NoIndent\egroup} + \Configure{sclauseTITLE+}{\thesclause \space#1} + \Configure{likesclause}{}{} + {\EndP\bgroup \IgnorePar\HCode{<h4 class="likesclauseHead">}} + {\HCode{</h4>}\NoIndent\egroup} + + \Configure{ssclause}{}{} + {\EndP\bgroup \IgnorePar\HCode{<h5 class="ssclauseHead">} + \ifnum \c:secnumdepth>\c@secnumdepth + \else \thessclause \space \fi} + {\HCode{</h5>}\NoIndent\egroup} + \Configure{likessclause}{}{} + {\EndP\bgroup \IgnorePar\HCode{<h5 class="likessclauseHead">}} + {\HCode{</h5>}\NoIndent\egroup} + \Configure{ssclauseTITLE+}{\thessclause \space#1} + + \Configure{sssclause}{}{} + {\ShowPar\NoIndent\HCode{<span class="sssclauseHead">}\begingroup\bf + \thesssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likesssclause}{}{} + {\ShowPar\NoIndent\HCode{<span class="likesssclauseHead">}} + {\HCode{</span>}\IgnorePar} + \Css{.sssclauseHead, .likesssclauseHead + { margin-top:2em; font-weight: bold;}} + + \Configure{ssssclause}{}{} + {\ShowPar\HCode{<span class="ssssclauseHead">}\begingroup\bf + \thessssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likessssclause}{}{} + {\ShowPar\HCode{<span class="likssssclauseHead">}\begingroup\bf} + {\endgroup\HCode{</span>}\IgnorePar} + \Css{.ssssclauseHead, .likessssclauseHead + { font-weight: bold;}} + + \Configure{sssssclause}{}{} + {\ShowPar\HCode{<span class="sssssclauseHead">}\begingroup\bf + \thesssssclause\space} + {\endgroup\HCode{</span>}\IgnorePar} + \Configure{likesssssclause}{}{} + {\ShowPar\HCode{<span class="liksssssclauseHead">}\begingroup\bf} + {\endgroup\HCode{</span>}\IgnorePar} + \Css{.sssssclauseHead, .likesssssclauseHead + { font-weight: bold;}} + + \Configure{fibicl@use}{}{} + {\IgnorePar\EndP \IgnorePar\HCode{<h3 class="fibicl@useHead">}} + {\HCode{</h3>}\NoIndent \par} + \Configure{fibicl@useTITLE+}{#1} + \Configure{likefibicl@use}{}{} + {\IgnorePar\EndP \IgnorePar\HCode{<h3 class="likefibicl@useHead">}} + {\HCode{</h3>}\NoIndent \par} + + \Configure{normannex}{}{} + {\IgnorePar \EndP\IgnorePar\HCode{<h3 class="normannexHead">} + \annexname\ \theannex\ (\normativename)\HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{normannexTITLE+}{\annexname\space \theannex\space (\normativename)\space #1} + \Css{h3.normannexHead{text-align: center}} + + \Configure{infannex}{}{} + {\IgnorePar\EndP \IgnorePar\HCode{<h3 class="infannexHead">} + \annexname\ \theannex\ (\informativename)\HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{infannexTITLE+}{\annexname\space \theannex\space (\informativename)\space #1} + \Css{h3.infannexHead{text-align: center}} + + \Configure{repannex}{}{} + {\IgnorePar\EndP \IgnorePar\HCode{<h3 class="repannexHead">} + \annexname\ \theannex\ \HCode{<BR\xml:empty>}} + {\HCode{</h3>}\NoIndent \par} + \Configure{repannexTITLE+}{\annexname\space \theannex\space #1} + \Css{h3.repannexHead{text-align: center}} + + \fi +\fi + +% \end{macrocode} +% +% Reconfigure sectioning if not HTML. +% \begin{macrocode} +\ifHtml \else + \ifx\bf\:UnDef + \def\bf{\normalfont\bfseries} + \fi + \Configure{titleclause}{\begingroup\bf}{\endgroup} + \Configure{liketitleclause}{\begingroup\bf}{\endgroup} + \Configure{clause}{}{}{\begingroup\bf\theclause\space}{\endgroup} + \Configure{likeclause}{}{}{\begingroup\bf}{\endgroup} + \Configure{sclause}{}{}{\begingroup\bf\thesclause\space}{\endgroup} + \Configure{likesclause}{}{}{\begingroup\bf}{\endgroup} + \Configure{ssclause}{}{}{\begingroup\bf\thessclause\space}{\endgroup} + \Configure{likessclause}{}{}{\begingroup\bf}{\endgroup} + \Configure{sssclause}{}{} + {\begingroup\bf\thesssclause\space}{\endgroup} + \Configure{likesssclause}{}{}{\begingroup\bf}{\endgroup} + \Configure{ssssclause}{}{} + {\begingroup\it\thessssclause\space}{\endgroup} + \Configure{likessssclause}{}{} + {\begingroup\it}{\endgroup} + \Configure{sssssclause}{}{} + {\begingroup\it\thesssssclause\space}{\endgroup} + \Configure{likesssssclause}{}{} + {\begingroup\it}{\endgroup} + \Configure{fibicl@use}{}{}{\begingroup\bf}{\endgroup} + \Configure{likefibicl@use}{}{}{\begingroup\bf}{\endgroup} + \Configure{normannex}{}{} + {\begingroup\bf \annexname~\theannex~(\normativename)\space}{\endgroup} + \Configure{infannex}{}{} + {\begingroup\bf \annexname~\theannex~(\informativename)\space}{\endgroup} + \Configure{repannex}{}{} + {\begingroup\bf v\annexname~\theannex\space}{\endgroup} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Miscellaneous} +% +% \begin{macro}{\caption} +% Configure the |\caption| command. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option +% \end{macrocode} +% The html0 option is in effect. +% \begin{macrocode} + %%%% Do html0 + \Configure{caption}{}{}{}{} +\else + \:CheckOption{3.2} + \if:Option +% \end{macrocode} +% The html32 option is in effect. +% \begin{macrocode} + %%%% Do html32 + \Configure{caption}{\HCode{\if:nopar \else <br\xml:empty>\fi + <div align="center"><table\Hnewline> + <tr valign="bottom"><td nowrap><strong>}} + {} {\HCode{</strong></td><td \Hnewline}} + {\HCode{</td></tr></table></div>}} + \else +% \end{macrocode} +% The html4 option +% (the default, unless specifically overridden by html0 or html32) +% is in effect. +% \begin{macrocode} + %%%% Do html4 + \Configure{caption}{\HCode{\if:nopar \else <br\xml:empty>\fi} + \:xhtml{\IgnorePar\EndP}\HCode{<div align="center" + class="caption"><table class="caption"\Hnewline><tr + valign="baseline" class="caption"><td class="id">}} + {: } {\HCode{</td><td \Hnewline class="content">}} + {\HCode{</td></tr></table></div>}} + \Css{.caption td.id{font-weight: bold; white-space: nowrap; }} + \fi +\fi + +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{theindex} +% Copy of original \texht{} code. There are 9 hooks for possible +% configuration. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option + %%%% Do html0 + \Configure{theindex}{}{}{}{}{}{}{}{}{} +\else + \:CheckOption{3.2} + \if:Option + %%%% Do html32 + \Configure{theindex} + {\HCode{<div>}} + {\HCode{</div>}} + {} + {\HCode{<br\xml:empty>}\hfil\break} + {\ \ \ \ } + {\HCode{<br\xml:empty>}\hfil\break} + {\ \ \ \ \ \ \ \ } + {\HCode{<br\xml:empty>}\hfil\break} + {\hbox{\HCode{<p>}}} + \else + %%%% Do html4 + \Configure{theindex} + {\HCode{<div class="theindex">}\let\end:theidx\empty} + {\end:theidx\HCode{</div>}} + {} + {\HCode{<br\xml:empty>}\hfil\break} + {\ \ \ \ } + {\HCode{<br\xml:empty>}\hfil\break} + {\ \ \ \ \ \ \ \ } + {\HCode{<br\xml:empty>}\hfil\break} + {\hbox{\end:theidx\HCode{<p class="theindex">}}% + \def\end:theidx{\HCode{</p>}}} + \fi +\fi + +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{quotation} +% \begin{environment}{quote} +% \begin{environment}{anote} +% \begin{environment}{note} +% \begin{environment}{anexample} +% \begin{environment}{example} +% These are all quotation-like environments. |quotation| and |quote| +% are original \texht, while the others are specifically for \Lpack{iso}. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option + %%%% Do html0 + \ConfigureEnv{quotation}{}{}{}{} + \ConfigureEnv{quote}{}{}{}{} + \ConfigureEnv{anote}{}{}{}{} + \ConfigureEnv{note}{}{}{}{} + \ConfigureEnv{anexample}{}{}{}{} + \ConfigureEnv{example}{}{}{}{} +\else + \:CheckOption{3.2} + \if:Option + %%%% Do html32 + \ConfigureEnv{quotation}{}{}{\start:env{quotation}}{\end:env} + \ConfigureEnv{quote}{}{}{\start:env{quote}}{\end:env} + \ConfigureEnv{anote}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{anote}}{\end:env} + \ConfigureEnv{note}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{note}}{\end:env} + \ConfigureEnv{anexample}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{anexample}}{\end:env} + \ConfigureEnv{example}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{example}}{\end:env} + \else + %%%% Do html4 + \ConfigureEnv{quotation}{}{}{\start:env{quotation}}{\end:env} + \ConfigureEnv{quote}{}{}{\start:env{quote}}{\end:env} + \Css{.quote {margin-bottom:0.25em; + margin-top:0.25em; + margin-left:1em;}} + \ConfigureEnv{anote}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{anote}}{\end:env} + \ConfigureEnv{note}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{note}}{\end:env} + \ConfigureEnv{anexample}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{anexample}}{\end:env} + \ConfigureEnv{example}{\HCode{<blockquote>}}{\HCode{</blockquote>}}% + {\start:env{example}}{\end:env} + \fi +\fi + +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% +% +% +% \begin{environment}{description} +% \begin{environment}{nreferences} +% \begin{environment}{references} +% \begin{environment}{symbols} +% These all all description-like environments. |description| is the +% original \texht{} configuration, while the others are new for \Lpack{iso}. +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option + %%%% Do html0 + \ConfigureList{description}{}{}{}{}{}{} + \ConfigureList{nreferences}{}{}{}{}{}{} + \ConfigureList{references}{}{}{}{}{}{} + \ConfigureList{symbols}{}{}{}{}{}{} +\else + \:CheckOption{3.2} + \if:Option + %%%% Do html32 + \ConfigureList{description}% + {\HCode{<dl>}} + {\HCode{</dl>}\ShowPar} + {\HCode{<dt>}\bgroup \bf} + {\egroup\HCode{<dd\Hnewline>}} + \ConfigureList{nreferences}% + {\HCode{<dl>}} + {\HCode{</dl>}\ShowPar} + {\HCode{<dt>}\bgroup \bf} + {\egroup\HCode{<dd\Hnewline>}} + \ConfigureList{references}% + {\HCode{<dl>}} + {\HCode{</dl>}\ShowPar} + {\HCode{<dt>}\bgroup \bf} + {\egroup\HCode{<dd\Hnewline>}} + \ConfigureList{symbols}% + {\HCode{<dl>}} + {\HCode{</dl>}\ShowPar} + {\HCode{<dt>}\bgroup \bf} + {\egroup\HCode{<dd\Hnewline>}} + \else + %%%% Do html4 + \ConfigureList{description}% + {\EndP\HCode{<dl class="description">}\let\end:itm=\empty} + {\EndP\HCode{</dd></dl>}\ShowPar} + {\end:itm\def\end:itm{\EndP\Tg</dd>} + \HCode{<dt class="description">}\bgroup \bf} + {\egroup\EndP\HCode{</dt><dd\Hnewline class="description">}} + \ConfigureList{nreferences}% + {\EndP\HCode{<dl class="nreferences">}\let\end:itm=\empty} + {\EndP\HCode{</dd></dl>}\ShowPar} + {\end:itm\def\end:itm{\EndP\Tg</dd>} + \HCode{<dt class="nreferences">}\bgroup \bf} + {\egroup\EndP\HCode{</dt><dd\Hnewline class="nreferences">}} + \ConfigureList{references}% + {\EndP\HCode{<dl class="references">}\let\end:itm=\empty} + {\EndP\HCode{</dd></dl>}\ShowPar} + {\end:itm\def\end:itm{\EndP\Tg</dd>} + \HCode{<dt class="references">}\bgroup \bf} + {\egroup\EndP\HCode{</dt><dd\Hnewline class="references">}} + \ConfigureList{symbols}% + {\EndP\HCode{<dl class="symbols">}\let\end:itm=\empty} + {\EndP\HCode{</dd></dl>}\ShowPar} + {\end:itm\def\end:itm{\EndP\Tg</dd>} + \HCode{<dt class="symbols">}\bgroup \bf} + {\egroup\EndP\HCode{</dt><dd\Hnewline class="symbols">}} + \fi +\fi + +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% \end{environment} +% +% +% \begin{macro}{\footnotetext} +% \begin{macro}{\footnote} +% These are configured to print the footnote text in the main body of the +% document and for the number to link to the text. This is based on +% suggestions by Eitan Gurari.\label{footpage} +% \begin{macrocode} +\:CheckOption{0.0} +\if:Option + \Configure{footnotetext}{}{}{} % from latex section +\else + \:CheckOption{3.2} + \if:Option + %% \Configure{footnotetext} % from latex section I THINK THIS IS WRONG + %% {\HCode{<hr>}} {\HCode{<hr>}} + %% {\HCode{<sup>}} {\HCode{</sup>}} + \Configure{footnotetext} + {\HCode{<sup>}\FNmark\HCode{</sup>}} + {(footnote\ifx \FNmark\empty \else\space\fi \FNmark : } + {)} + \Configure{footnote} + {\def\PRNT{)}\HCode{<sup>}% + \Link{\arabic{footnote}}{}\FNmark\EndLink + \HCode{</sup>}} + {\relax\space + \Link{}{\arabic{footnote}}\EndLink + (footnote \FNmark : } + {)} + + \else + %% \Configure{footnotetext} % from latex section + %% {\HCode{<br \xml:empty><span class="footnotetext"><sup>}\FNmark + %% \HCode{</sup}} + %% {} + %% {\HCode{</span>}} + %% \Css{span.footnotetext{ font-size:75\%; font-style:italic; } } + %% + %% \Configure{footnote} % from latex section + %% {\HPageButton[fn\FNnum]{\HCode{<sup>}\FNmark\HCode{</sup>}}} + %% {\BeginHPage[fn\FNnum]{ }} + %% {\EndHPage{}} +% \end{macrocode} +% This is Eitan's suggested code. +% \begin{macrocode} + \Configure{footnotetext} + {\Tg<sup>\FNmark\Tg</sup>} + {(footnote\ifx \FNmark\empty \else\space\fi \FNmark : } + {)} + + \Configure{footnote} + {\def\PRNT{)}\Tg<sup>% + \Link{\arabic{footnote}}{}\FNmark\EndLink + \Tg</sup>} + {\relax\space + \Link{}{\arabic{footnote}}\EndLink + (footnote \FNmark : } + {)} + \fi +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% The following is a slight revision of the end of \Lpack{article.4ht}. +% \begin{macrocode} +\def\tableofcontents{% + \ifx\contentsname\empty \else + \clause*{\contentsname}% + \fi + \:tableofcontents} +\let\dx:begin\begin +\def\begin#1{\def\:temp{#1}\def\:tempa{theindex}\ifx \:temp\:tempa + \fibicl@use*{\indexname}\fi\dx:begin{#1}} + +% \end{macrocode} +% +% The end of the package +% \begin{macrocode} +%</usc> +% \end{macrocode} +% +% +% \subsection{Observations} +% +% There are three main aspects to developing \texht{} code and +% configurations for a new class or package: +% \begin{enumerate} +% \item Finding out what hooks and configurations are already available. +% \item Determining what additional hooks, and where they should be put, for +% the new package. +% \item Configuring all the hooks. +% \end{enumerate} +% +% \texht{} has added many hooks to the \LaTeX{} kernel and classes +% and packages +% based on kernel code inherit those hooks. I found it advisable to run +% a test document with new macros through \texht{} to see what +% the result looked like. Depending on the particular macros it may be that +% the inherited hooks and configuration are sufficient and nothing needs +% to be done. +% +% For this particular class a lot of new hooks were required, but mainly +% related to the new macros for sectioning. Configurations were obviously +% required for these, together with a few for new kinds of environments +% and lists. +% +% There are other packages that, in their turn, are designed to work +% with the \Lpack{iso} +% class and it turned +% out that they required few new hooks or changes to the existing +% configurations. +% +% The rest of this section is concerned with item~2, namely +% adding hooks. +% +% \subsubsection{Colon is a letter} +% +% Within the \texht{} `environment', that is the \file{*.4ht} +% files, the colon character (|:|) acts as a letter in a similar manner +% as the at character (|@|) does in class and package files; |@| is also +% treated as a letter in the environment. Normally, something like +% |\start:env{myenv}| would be treated as the command |\start| followed by +% the text |:env{myenv}|. In the \texht{} environment it is the command +% |\start:env| with the argument |{myenv}|. If any commands like this +% occur in the preamble to a \LaTeX{} document, then they must be surrounded +% by |\makecolonletter| and |\restorecolon|, which may be defined +% as:\footnote{Note that a package may redefine the category code for +% the colon, which is why the old value is saved.} +% \begin{verbatim} +% \chardef\oldcolon=\thecatcode`\: +% \newcommand{\makecolonletter}{\catcode`\:11\relax} +% \newcommand{\restorecolon}{\catcode`\:=\oldcolon\relax} +% \end{verbatim} +% +% The fact that command names can include a colon means that you have +% to be careful in code that includes any colon characters. In \LaTeX, +% code like like |{footnote \thefootnote:}| will print the footnote number +% immediately followed by a colon (e.g., |footnote 3:|). In the \texht{} +% environment you are more likely to get an error message saying that +% |\thefootnote:| is undefined! Instead, this needs to be coded as +% |{footnote \thefootnote :}|, so that the |\thefootnote| command is ended +% by the space before the colon. +% +% \subsubsection{Adding code and hooks} +% +% A \LaTeX{} idiom for adding code at the start and/or end of +% an existing macro which takes no arguments called, say |\foo|, is: +% \begin{verbatim} +% \let\oldfoo\foo +% \renewcommand{\foo}{new-start-code \oldfoo new-end-code} +% \end{verbatim} +% Similarly for commands |\baz| and |\biz| which take one and two arguments +% respectively: +% \begin{verbatim} +% \let\oldbaz\baz +% \renewcommand{\baz}[1]{new-start-code \oldbaz{#1} new-end-code} +% \let\oldbiz\biz +% \renewcommand{\biz}[2]{new-start-code \oldbiz{#1}{#2} new-end-code} +% \end{verbatim} +% +% As these kinds of redefinitions are a common occurrence +% \file{tex4ht.sty} provides commands that encapsulate the above idiom. +% These are |\pend:def\foo{new-start-code}| and +% |\append:def\foo{new-end-code}| for when |\foo| is a macro without +% arguments, and there are similar commands for prepending and appending +% to macros with up to three arguments. Repeating and extending +% the \LaTeX{} example, +% in the \texht{} environment it could be coded as: +% \begin{verbatim} +% \pend:def\foo{new-start-code} % \foo has no arguments +% \append:def\foo{new-end-code} +% \pend:defI\baz{new-start-code} % \baz has one argument +% \append:defI\baz{new-end-code} +% \pend:defII\biz{new-start-code} % \biz has two arguments +% \append:defII\biz{new-end-code} +% \pend:defIII\boz{new-start-code} % \boz has three arguments +% \append:defIII\boz{new-end-code} +% \end{verbatim} +% +% The definition of a hook in a macro called, say |\buz|, takes +% the form |\X:buz| where X is a single letter. For example, adding a +% configurable hook +% at the start and end of the macro |\baz| can be done like this: +% \begin{verbatim} +% \pend:defI\baz{\a:baz} % hook at start +% \append:defI\baz{\b:baz} % hook at end +% \NewConfigure{baz}{2} % declare \baz has two configurable hooks +% \end{verbatim} +% Note that by default a |\NewConfigure{baz}{2}| command expects the hook +% corresponding to the first argument to be |\a:baz| and the hook +% corresponding to the second argument to be |\b:baz|. Extending the +% example, |\NewConfigure{foo}{9}| will expect the hook corresponding to +% the ninth argument to be |\i:foo| (`i' is the ninth letter of the +% alphabet). This default setting for |\NewConfigure| has been created via: \\ +% |\Configure{NewConfigure}{a:}{b:}{c:}{d:}{e:}{f:}{g:}{h:}{i:}| \\ +% in \file{tex4ht.sty}. +% +% +% As an example for hook insertion, assume a macro defined like: \\ +% |\newcommand{\mac}[1]{START #1 END}| \\ +% in which there are four potential places for hooks (call them h1 to h4): \\ +% |{h1 START h2 #1 h3 END h4}|. Hooks h1 and h4 can be added via |\pend:defI| +% and |\append:defI|, but these are not sufficient by themselves. Other +% methods are required for inserting all four hooks. Two of these are: +% \begin{itemize} +% \item Redefine the whole macro from scratch: +% \begin{verbatim} +% \renewcommand{\mac}[1]{\a:mac START \c:mac #1 \d:mac END \b:mac} +% \NewConfigure{mac}{4} +% \end{verbatim} +% +% \item Reuse parts of the original macro +% (similar to the \LaTeX{} ap/pre-pending idiom): +% \begin{verbatim} +% \let\oldmac\mac +% \renewcommand{\mac}[1]{\a:mac\oldmac{\c:mac #1 \d:mac}\b:mac} +% \NewConfigure{mac}{4} +% \end{verbatim} +% \end{itemize} +% Either of these examples can be configured via: +% \begin{verbatim} +% \Configure{mac}% +% {first arg for a hook} % \a:mac at the start of the command +% {second arg for a hook} % \b:mac at the end of the command +% {third arg for a hook} % \c:mac immediately before the argument +% {fourth arg for a hook} % \d:mac immediately after the argument +% \end{verbatim} +% Note that the hooks do not have to be placed in the |\mac| command in +% alphabetical order. +% +% +% +% \bibliographystyle{alpha} +% +% \begin{thebibliography}{GMS94} +% +% \bibitem[GMS94]{GOOSSENS94} +% Michel Goossens, Frank Mittelbach, and Alexander Samarin. +% \newblock \textit{The LaTeX Companion}. +% \newblock Addison-Wesley Publishing Company, 1994. +% +% \bibitem[GR99]{GOOSSENS99} +% Michel Goossens and Sebastian Rahtz +% (with Eitan Gurari, Ross Moore, and Robert Sutor). +% \newblock \textit{The LaTeX Web Companion --- Integrating TeX, HTML, and XML}. +% \newblock Addison-Wesley Publishing Company, 1999. +% +% \bibitem[Wil96]{PRW96i} +% Peter~R. Wilson. +% \newblock \textit{{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 \~} + + diff --git a/macros/latex/contrib/isostds/iso/iso4ht.ins b/macros/latex/contrib/isostds/iso/iso4ht.ins new file mode 100644 index 0000000000..820171de05 --- /dev/null +++ b/macros/latex/contrib/isostds/iso/iso4ht.ins @@ -0,0 +1,60 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% This system is released under the Latex Project Public License. +%% +%% This system is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +%% +%% Author: Peter Wilson (CUA) +%% now at: peter.r.wilson@boeing.com +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{iso4ht.ins} +\input docstrip.tex +\preamble + +Author: Peter Wilson (CUA) + now at: peter.r.wilson@boeing.com + + This system is released under the Latex Project Public License. + + This system is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +\endpreamble + +\keepsilent + +%%% \Msg{*** Generating the driver file ***} +%%% \generateFile{iso4ht.drv}{t}{\from{iso4ht.dtx}{driver}} + +\Msg{*** Generating the TeX4ht package files ***} + +\generateFile{isov2.4ht}{t}{\from{iso4ht.dtx}{usc}} + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file(s) into a directory searched by TeX4ht:} +\Msg{*} +\Msg{* \space\space isov2.4ht} +\Msg{*} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{* Process any name.idx file by:} +\Msg{* \space\space\space\space makeindex -s gind.ist name} +\Msg{* Process any name.glo file by:} +\Msg{* \space\space\space\space makeindex -s gglo.ist -o name.gls name.glo} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + +\endinput diff --git a/macros/latex/contrib/isostds/iso/iso4ht.pdf b/macros/latex/contrib/isostds/iso/iso4ht.pdf Binary files differnew file mode 100644 index 0000000000..1264b092a2 --- /dev/null +++ b/macros/latex/contrib/isostds/iso/iso4ht.pdf diff --git a/macros/latex/contrib/isostds/iso/isoe.dtx b/macros/latex/contrib/isostds/iso/isoe.dtx new file mode 100644 index 0000000000..564feef456 --- /dev/null +++ b/macros/latex/contrib/isostds/iso/isoe.dtx @@ -0,0 +1,5444 @@ +% \iffalse meta-comment +% +% isoe.dtx +% +% This work has been partially funded by the US government +% and is not subject to copyright. +% +% 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 and NIST) +% now at: peter.r.wilson@boeing.com +% +% \fi +% \CheckSum{3764} +% +% \changes{v11}{1997/09/30}{Output character table to class and package files only} +% \changes{v2}{1997/12/01}{Moved xtab and uschyp package code to seperate files} +% \changes{v2}{1997/12/04}{Moved isorot package code to seperate file} +% \changes{v2.1}{1999/02/15}{General updates} +% \changes{v2.1}{1999/02/15}{Character table not output at all} +% \changes{v2.1}{1999/03/19}{Some changes to boilerplate} +% \changes{v2.2}{2000/01/10}{Modified to support tex4ht} +% \changes{v2.3}{2001/07/06}{Modified to match ISO 2001 requirements} +% \changes{v2.3}{2002/01/10}{More changes to match ISO 2001 requirements} +% \changes{v2.4}{2002/07/22}{Added support for pdf/hyperref bookmarking} +% +% ^^A \def\fileversion{v2.2} +% ^^A \def\filedate{2000/01/10} +% \def\fileversion{v2.3} +% ^^A \def\filedate{2001/07/06} +% \def\filedate{2002/01/10} +% \def\fileversion{v2.4} +% \def\filedate{2002/07/22} +% \title{\LaTeX{} for ISO Standards: \\ +% Source code\thanks{This +% file has version number \fileversion, last revised +% \filedate.}} +% +% \author{% +% Peter Wilson\\ +% Catholic University of America\thanks{This work was originally +% performed as +% a Guest Researcher at the National Institute of Standards and Technology.} \\ +% Now at \texttt{peter.r.wilson@boeing.com} +% } +% \date{\filedate} +% \maketitle +% \tableofcontents +% +% \StopEventually{} +% +% +% +% \section{Introduction} +% +% This document provides the commented source for \LaTeX{} +% class and 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}. +% +% The original version of this class was used for the production +% of camera ready copy +% for the ISO~10303 standard \emph{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 those macros. +% +% 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. +% At the request of the editors of ISO~10303, and no doubt others as +% well, ISO has clarified the intent of their Directives~\cite{ISOD201}. +% Also, since +% they were published ISO has been considering how best to accept +% and use electronic manuscripts instead of camer ready paper copy. +% At the time of writing (July 2001) they will accept documents in +% PDF format. This has also lead to some changes in requirements. +% +% The following specifications are a re-implementation of the +% class macros published in July 2000. +% +% 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}. +% +% +% Sections~\ref{sec:docstrip} through~\ref{sec:ic} describe some +% administrative elements and code for general use later in the specification. +% The macros forming the class file are defined in sections~\ref{sec:opt} +% through~\ref{sec:init}. These are principally revisions of the +% report class to meet ISO typographic requirements and many new macros +% to support specific structural elements of an ISO standard to provide +% logical markup capabilities. Section~\ref{sec:askinc} describes the +% macros for the \texttt{askinc} package for interactive file inclusion. +% +% +% \section{A driver for this document} \label{sec:docstrip} +% +% 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 +% \textsc{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 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 +\newcommand*{\Lpack}[1]{\textsf {#1}} % typeset a package +% \end{macrocode} +% We want the full details printed. +% \begin{macrocode} +\begin{document} +\DocInput{isoe.dtx} +\PrintIndex +%% \PrintChanges +\end{document} +%</driver> +% \end{macrocode} +% +% +% +% +% +% \section{Identification} \label{sec:id} +% +% \changes{v2}{1997/11/30}{Eliminated all native v2.09 support} +% +% The \file{iso} document class can only be used with \LaTeX 2e, so we make +% sure that an appropriate message is displayed when another \TeX\ +% format is used. +% \begin{macrocode} +%<iso>\NeedsTeXFormat{LaTeX2e} +% \end{macrocode} +% +% Announce the name, option files and version for \LaTeX 2e files: +% \begin{macrocode} +%<iso>\ProvidesClass{isov2}[2002/07/22 v2.4 LaTeX ISO document class] +%<9pt>\ProvidesFile{iso9.clo}[1997/11/30 v1.1 ISO class size option] +%<10pt>\ProvidesFile{iso10.clo}[1997/11/30 v1.1 ISO class size option] +%<11pt>\ProvidesFile{iso11.clo}[1997/11/30 v1.1 ISO class size option] +%<inc>\ProvidesPackage{askincv1}[1995/05/31 Interactive include package] +%<fwd1>\ProvidesFile{isofwdbp.tex}[2002/01/10 ISO Foreword boilerplate] +%<trfwd1>\ProvidesFile{trfwd1.tex}[2002/01/10 PAS/TS Foreword boilerplate] +% \end{macrocode} +% +% +% \section{Initial Code} \label{sec:ic} +% +% \begin{macrocode} +%<*iso> +% \end{macrocode} +% +% \changes{v2.1}{1999/02/15}{Requires the url package} +% The class requires the \file{url} package, so make sure +% that it is loaded. +% \begin{macrocode} +\RequirePackage{url} +% \end{macrocode} +% +% In this part we define a few commands that are used later on. +% +% \begin{macro}{\@ptsize} +% This control sequence is used to store the second digit of the +% pointsize we are typesetting in. So, normally, it's value is one +% of 0, 1 or 2. +% \begin{macrocode} +\newcommand{\@ptsize}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@restonecol} +% When the document has to be printed in two columns, we sometimes +% have to temporarily switch to one column. This switch is used to +% remember to switch back. +% \begin{macrocode} +\newif\if@restonecol +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\isostringsequal} +% \begin{macro}{\isoemptystring} +% The command |\isostringsequal| is based on code in Stephan von +% Bechtolsheim \emph{\TeX{} in Practice}, vol III page 334. +% It enables the definition of specific commands for testing whether +% two strings are equal. +% \begin{macrocode} +\def\isostringsequal #1#2{% + TT\fi + \edef\@is@str@ngsequali{#1}% + \edef\@is@str@ngsequalii{#2}% + \ifx\@is@str@ngsequali\@is@str@ngsequalii} +% \end{macrocode} +% Now we define the |\isoemptystring| command for use in testing +% for an empty parameter. +% \begin{macrocode} +\def\isoemptystring #1{% + TT\fi + \if\isostringsequal{#1}{}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fillline} +% This command draws a horizontal line across the page. +% \begin{macrocode} +\newcommand{\fillline}{\mbox{}\hrulefill\mbox{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makecommand} +% \begin{macro}{\make@command} +% \changes{v2.2}{2000/01/10}{Added makecommand} +% The |\makecommand| macro is like the |\newcommand| macro except that it +% always (re)defines a command. It is equivalent to the pair of commands: \\ +% |\providecommand{\com}...\renewcommand{\com}...|. \\ +% The code for |\make@command}| is a simplified version of the code +% for |\renew@command| in file \file{ltdefns.dtx}. +% \begin{macrocode} +\newcommand{\makecommand}{\@star@or@long\make@command} +\newcommand{\make@command}[1]{% + \let\@ifdefinable\@rc@ifdefinable + \new@command#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ifpdf} +% \changes{v2.2}{2000/01/10}{Added ifpdf to support pdfLaTeX} +% This can be used to check whether or not a document is being processed +% by LaTeX or pdfLaTeX. +% \begin{macrocode} +\newif\ifpdf +\ifx\pdfoutput\undefined + \pdffalse +\else + \pdftrue +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifisohyper} +% This can be used to check, after |\begin{document}| to check if +% the \Lpack{hyperref} package has been used. +% \changes{v2.4}{2002/07/22}{Added \cs{ifisohyper} to support hyperref} +% \begin{macrocode} +\newif\ifisohyper + \isohyperfalse +\AtBeginDocument{% + \@ifpackageloaded{hyperref}% + {\isohypertrue}% + {\newcommand{\hyperpage}[1]{#1}}% +} + +% \end{macrocode} +% \end{macro} +% +% \section{Declaration of Options} \label{sec:opt} +% +% +% \subsection{Setting Paper Sizes} +% +% The variables |\paperwidth| and |\paperheight| should reflect the +% physical paper size after trimming. For desk printer output this +% is usually the real paper size since there is no post-processing. +% We assume that the document will only be printed on either ISO +% standard A4 paper (option \Lopt{a4paper}) or on the most common +% of the US paper sizes (option \Lopt{letterpaper}). +% +% Option \Lopt{a4paper} will be the default. +% +% \begin{macro}{\if@us} +% A flag for the paper size option. +% \begin{macrocode} +\newif\if@us\@usfalse +% \end{macrocode} +% \end{macro} +% Declare the paper size options. +% \begin{macrocode} +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% %% 11.69in + \setlength\paperwidth {210mm}} %% 8.27in +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% %% 279mm + \setlength\paperwidth {8.5in}% %% 216mm + \@ustrue} +% \end{macrocode} +% +% \subsection{Choosing the type size} +% +% The type size options are handled by defining |\@ptsize| to contain +% the last digit of the size in question and branching on |\ifcase| +% statements. This is done for historical reasons to stay compatible +% with other packages that use the |\@ptsize| variable to select +% special actions. It makes the declarations of size options less +% than 10pt difficult, although one can probably use \texttt{9} +% assuming that a class will not define both +% \Lopt{9pt} and \Lopt{19pt} options. +% +% Option \Lopt{11pt} will be the default. +% +% \begin{macrocode} +\renewcommand{\@ptsize}{1} +\DeclareOption{9pt}{\renewcommand{\@ptsize}{9}} +\DeclareOption{10pt}{\renewcommand{\@ptsize}{0}} +\DeclareOption{11pt}{\renewcommand{\@ptsize}{1}} +% \end{macrocode} +% +% +% \subsection{Two-side or one-side printing} +% +% For two-sided printing we use the switch |\if@twoside|. In +% addition we have to set the |\if@mparswitch| to get any margin +% paragraphs into the outside margin. In this class we always +% use two-sided printing with marginal notes on the outside. +% \begin{macro}{\if@twoside} +% \begin{macro}{\if@mparswitch} +% \begin{macrocode} +\@twosidetrue \@mparswitchtrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v2}{1997/11/30}{Eliminated the sect option} +% +% \subsection{Two column printing} +% +% Two-column and one-column printing is again realized via a switch +% which is defined in the kernel. The default is single column printing. +% +% \begin{macro}{\if@twocolumn} +% \begin{macrocode} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +% \end{macrocode} +% \end{macro} +% +% \subsection{The \Lopt{copyright} option} +% +% The default is not to print ISO copyright notices. This option +% enables copyright notice printing. As usual, we employ a flag. +% \changes{v11}{1997/09/30}{Added additional \cs{ifc@pyrightopt} flag} +% \begin{macro}{\ifc@pyrightopt} +% |c@pyrightopt| stores the user's option, while |c@pyright| will +% be used to control printing of copyright notices and symbols +% in the body of the document. +% \begin{macrocode} +\newif\ifc@pyright\c@pyrightfalse +\newif\ifc@pyrightopt\c@pyrightoptfalse +\DeclareOption{copyright}{\c@pyrightopttrue} +\DeclareOption{notcopyright}{\c@pyrightoptfalse} +% \end{macrocode} +% \end{macro} +% +% \subsection{Document kind options \Lopt{is}, \Lopt{dis}, \Lopt{cd}, +% \Lopt{wd}, \Lopt{techrep}, \Lopt{otherdoc} etc.} +% +% The default is to assume that an ISO standard in preparation is +% to be printed (effectively this is the \Lopt{otherdoc} option). +% The \Lopt{is} option declares that an International Standard (IS) +% is to be printed. +% The \Lopt{fdis} option declares that a Final Draft International +% Standard (FDIS) is to be printed, and similarly the +% \Lopt{dis} option declares that a Draft International Standard +% (DIS) is to be printed. The \Lopt{cd} option is for Committee +% Draft (CD) documents and the option \Lopt{wd} is for Working +% Drafts. +% +% The \Lopt{techrep} option declares that a Technical Report (probably +% type 1 or 2) is to be printed. +% +% The \Lopt{otherdoc} option indicates that +% the document is not intended to become an ISO standard (e.g., is +% an ISO internal report). +% \begin{macro}{\ifisstandard} +% \begin{macro}{\iffdisstandard} +% \begin{macro}{\ifdisstandard} +% \begin{macro}{\ifcdstandard} +% \begin{macro}{\ifwdstandard} +% \begin{macro}{\iftechrep} +% \begin{macro}{\ifotherdoc} +% We use flags for remembering which option is in effect. +% \changes{v1.1}{1997/09/30}{Added options: fdis, cd, and wd} +% \begin{macrocode} +\newif\ifisstandard\isstandardfalse +\newif\iffdisstandard\fdisstandardfalse +\newif\ifdisstandard\disstandardfalse +\newif\ifcdstandard\cdstandardfalse +\newif\ifwdstandard\wdstandardfalse +\newif\iftechrep\techrepfalse +\newif\ifotherdoc\otherdocfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\iftechspec} +% \begin{macro}{\ifpaspec} +% Flags for the \Lopt{techspec} Technical Specification and \Lopt{pas} +% Publicly Available Specification options. +% \changes{v2.3}{2001/07/06}{Added ts and pas options} +% \begin{macrocode} +\newif\iftechspec\techspecfalse +\newif\ifpaspec\paspecfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% Now declare the options (including an \Lopt{is} option just for +% completeness). We need to ensure (later) that, whatever copyright +% option has been used, copyright notices are not printed for certain +% kinds of documents. +% \begin{macrocode} +\DeclareOption{is}{\isstandardtrue + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techrepfalse + \techspecfalse + \paspecfalse + \otherdocfalse} +\DeclareOption{fdis}{\isstandardfalse + \fdisstandardtrue + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techrepfalse + \techspecfalse + \paspecfalse + \otherdocfalse} +\DeclareOption{dis}{\isstandardfalse + \fdisstandardfalse + \disstandardtrue + \cdstandardfalse + \wdstandardfalse + \techrepfalse + \techspecfalse + \paspecfalse + \otherdocfalse} +\DeclareOption{cd}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardtrue + \wdstandardfalse + \techrepfalse + \techspecfalse + \paspecfalse + \otherdocfalse + \c@pyrightfalse} +\DeclareOption{wd}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardtrue + \techrepfalse + \techspecfalse + \paspecfalse + \otherdocfalse + \c@pyrightfalse} +\DeclareOption{techrep}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techreptrue + \techspecfalse + \paspecfalse + \otherdocfalse} +\DeclareOption{techspec}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techrepfalse + \techspectrue + \paspecfalse + \otherdocfalse} +\DeclareOption{pas}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techreptrue + \techspecfalse + \paspectrue + \otherdocfalse} +\DeclareOption{otherdoc}{\isstandardfalse + \fdisstandardfalse + \disstandardfalse + \cdstandardfalse + \wdstandardfalse + \techrepfalse + \techspecfalse + \paspecfalse + \otherdoctrue + \c@pyrightfalse} +% \end{macrocode} +% +% \subsection{The \Lopt{draft} option} +% +% If the user requests \Lopt{draft} we show any overfull boxes, +% marginal notes are allowed, and any copyright notices are not +% printed. For symmetry, we also define a \Lopt{final} option +% which is the default. +% \begin{macro}{\ifdr@ftd@c} +% \begin{macrocode} +\newif\ifdr@ftd@c\dr@ftd@cfalse +\setlength{\overfullrule}{\z@} +\DeclareOption{final}{\setlength{\overfullrule}{\z@} + \dr@ftd@cfalse} +\DeclareOption{draft}{\setlength\overfullrule{5pt}% + \dr@ftd@ctrue} +% \end{macrocode} +% \end{macro} +% +% +% +% \section{Executing Options} \label{sec:xopt} +% +% Here we execute the default options to initialize certain +% variables. Note that the document class \file{isoe} always uses two +% sided printing. +% \changes{v2.3}{2001/07/06}{Deleted the uglycaption option} +% \begin{macrocode} +\ExecuteOptions{notcopyright,otherdoc,final,a4paper,11pt,onecolumn} +% \end{macrocode} +% +% The |\ProcessOptions| command causes the execution of the code +% for every option \Lopt{FOO} +% which is declared and for which the user typed +% the \Lopt{FOO} option in his +% |\documentclass| command. For every option \Lopt{BAR} he typed, +% which is not declared, the option is assumed to be a global option. +% All options will be passed as document options to any +% |\usepackage| command in the document preamble. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% \begin{macro}{\ifc@pyright} +% Ensure that we have the correct value of |\ifc@pyright| no matter +% the ordering in which the options are processed. +% \changes{v11}{1997/09/30}{Added setting of c@pyright after option processing} +% \changes{v2.3}{2001/07/06}{Changed copyright option to apply to all docs} +% \begin{macrocode} +\c@pyrightfalse +\ifc@pyrightopt + \c@pyrighttrue +\fi +% \end{macrocode} +% \end{macro} +% +% Now that all the options have been executed we can load the +% chosen class option file that contains all size dependent code. +% \begin{macrocode} +\ifnum\@ptsize < \tw@ + \input{iso1\@ptsize.clo} +\else + \input{iso\@ptsize.clo} +\fi +% \end{macrocode} +% +% \section{Loading Packages} \label{sec:lpack} +% +% This class file does not load additional package files. +% +% +% \section{Document Layout} \label{sec:docl} +% \label{sec:maincode} +% +% In this section we deal with the more difficult typographical +% details. +% +% \subsection{Fonts} +% +% \LaTeX\ offers the user commands to change the size of the font, +% relative to the `main' size. Each relative size changing command +% |\size| executes the command +% |\@setfontsize||\size|\meta{font-size}\meta{baselineskip} where: +% +% \begin{description} +% \item[\meta{font-size}] The absolute size of the font to use from +% now on. +% +% \item[\meta{baselineskip}] The normal value of |\baselineskip| +% for the size of the font selected. (The actual value will be +% |\baselinestretch| * \meta{baselineskip}.) +% \end{description} +% +% A number of commands, defined in the \LaTeX\ kernel, shorten the +% following definitions and are used throughout. They are: +% \begin{center} +% \begin{tabular}{ll@{\qquad}ll@{\qquad}ll} +% \verb=\@vpt= & 5 & \verb=\@vipt= & 6 & \verb=\@viipt= & 7 \\ +% \verb=\@viiipt= & 8 & \verb=\@ixpt= & 9 & \verb=\@xpt= & 10 \\ +% \verb=\@xipt= & 10.95 & \verb=\@xiipt= & 12 & \verb=\@xivpt= & 14.4\\ +% \verb=\@xviipt= & 17.28 & \verb=\@xxpt= & 20.74 & \verb=\@xxvpt= & 24.88\\ +% \end{tabular} +% \end{center} +% +% \begin{macro}{\normalsize} +% \begin{macro}{\@normalsize} +% +% The user level command for the main size is |\normalsize|. +% Internally \LaTeX\ uses |\@normalsize| when it refers to the +% main size. |\@normalsize| will be defined to work like +% |\normalsize| if the latter is redefined from its default +% definition (that just issues an error message). Otherwise +% |\@normalsize| simply selects a 9pt/11pt size. +% +% The |\normalsize| macro also sets new values for\\ +% |\abovedisplayskip|, |\abovedisplayshortskip| and +% |\belowdisplayshortskip|. +% +% \begin{macrocode} +%</iso> +%<*9pt|10pt|11pt> +\renewcommand{\normalsize}{% +%<*9pt> + \@setfontsize\normalsize\@ixpt\@xpt + \abovedisplayskip 9\p@ \@plus 2\p@ \@minus 4.5\p@ + \abovedisplayshortskip \z@ \@plus 3\p@ + \belowdisplayshortskip 5.5\p@ \@plus 2.5\p@ \@minus 3\p@ +%</9pt> +%<*10pt> + \@setfontsize\normalsize\@xpt\@xiipt + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ +%</10pt> +%<*11pt> + \@setfontsize\normalsize\@xipt{13.6}% + \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ +%</11pt> +% \end{macrocode} +% The |\belowdisplayskip| is always equal to the +% |\abovedisplayskip|. The parameters of the first level list are +% always given by |\@listI|. +% \begin{macrocode} + \belowdisplayskip \abovedisplayskip + \let\@listi\@listI} +% \end{macrocode} +% +% We initially choose the normalsize font. +% \begin{macrocode} +\normalsize +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@smidgeon} +% \begin{macro}{\parskip} +% \begin{macro}{\@onelineskip} +% ISO typesetting is grid based, which is not something that \LaTeX{} +% is good at. We use some `fixed' skips for before and after headings, +% plus a flexible smidgeon. +% +% For the grid, we want a fixed size |\parskip|, dependant only on +% the normal font, of one blank line (i.e., the |\baselineskip|). +% +% Just in case the value of |\parskip| gets changed, also keep +% a similar value in |@onelineskip|. +% \changes{v2}{1997/11/30}{parskip fixed and moved to .clo files} +% \changes{v2}{1997/11/30}{Added \cs{@smidgeon} command} +% \changes{v2}{1997/11/30}{Added \cs{@onelineskip} command} +% \begin{macrocode} +\newlength{\@smidgeon} + \setlength{\@smidgeon}{0.5\p@ \@plus 1\p@ \@minus 1\p@} +\newlength{\@onelineskip} +%<9pt>\parskip \@xpt\p@ +%<9pt>\setlength{\@onelineskip}{\@xpt\p@} +%<10pt>\parskip \@xiipt\p@ +%<10pt>\setlength{\@onelineskip}{\@xiipt\p@} +%<11pt>\parskip 13.6\p@ +%<11pt>\setlength{\@onelineskip}{13.6\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\small} +% This code is similar to that for |\normalsize|. +% \begin{macrocode} +\newcommand{\small}{% +%<*9pt> + \@setfontsize\small\@viiipt{9} + \abovedisplayskip 6\p@ \@plus 2\p@ \@minus 4\p@ + \abovedisplayshortskip \z@ \@plus 2\p@ + \belowdisplayshortskip 4\p@ \@plus 2\p@ \@minus 2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 2\p@ \@plus 2\p@ \@minus 2\p@ + \parsep 1\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</9pt> +%<*10pt> + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</10pt> +%<*11pt> + \@setfontsize\small\@xpt\@xiipt + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 6\p@ \@plus2\p@ \@minus2\p@ + \parsep 3\p@ \@plus2\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</11pt> + \belowdisplayskip \abovedisplayskip +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotesize} +% This code is similar to that for |\normalsize|. +% \begin{macrocode} +\newcommand{\footnotesize}{% +%<*9pt> + \@setfontsize\footnotesize\@viiipt{9} + \abovedisplayskip 6\p@ \@plus 2\p@ \@minus 4\p@ + \abovedisplayshortskip \z@ \@plus 2\p@ + \belowdisplayshortskip 4\p@ \@plus 2\p@ \@minus 2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 2\p@ \@plus 2\p@ \@minus 2\p@ + \parsep 1\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</9pt> +%<*10pt> + \@setfontsize\footnotesize\@viiipt{9.5}% + \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</10pt> +%<*11pt> + \@setfontsize\footnotesize\@ixpt{11}% + \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep + \itemindent\z@ + }% +%</11pt> + \belowdisplayskip \abovedisplayskip +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\scriptsize} +% \begin{macro}{\tiny} +% \begin{macro}{\large} +% \begin{macro}{\Large} +% \begin{macro}{\LARGE} +% \begin{macro}{\huge} +% \begin{macro}{\Huge} +% These are all much simpler than the previous macros, they just +% select a new fontsize, but leave the parameters for displays and +% lists alone. +% \begin{macrocode} +%<*9pt> +\newcommand{\tiny}{\@setfontsize\tiny\@vpt{6}} +\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viipt{8}} +\newcommand{\large}{\@setfontsize\large\@xpt{11}} +\newcommand{\Large}{\@setfontsize\Large\@xipt{12}} +\newcommand{\LARGE}{\@setfontsize\LARGE\@xivpt{18}} +\newcommand{\huge}{\@setfontsize\huge\@xviipt{22}} +\newcommand{\Huge}{\@setfontsize\Huge\@xxpt{25}} +%</9pt> +%<*10pt> +\newcommand{\tiny}{\@setfontsize\tiny\@vipt{7}} +\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viiipt{9}} +\newcommand{\large}{\@setfontsize\large\@xipt{12}} +\newcommand{\Large}{\@setfontsize\Large\@xiipt{14}} +\newcommand{\LARGE}{\@setfontsize\LARGE\@xivpt{18}} +\newcommand{\huge}{\@setfontsize\huge\@xviipt{22}} +\newcommand{\Huge}{\@setfontsize\Huge\@xxvpt{30}} +%</10pt> +%<*11pt> +\newcommand{\tiny}{\@setfontsize\tiny\@vipt{7}} +\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viiipt{9}} +\newcommand{\large}{\@setfontsize\large\@xiipt{14}} +\newcommand{\Large}{\@setfontsize\Large\@xivpt{18}} +\newcommand{\LARGE}{\@setfontsize\LARGE\@xviipt{22}} +\newcommand{\huge}{\@setfontsize\huge\@xxpt{25}} +\newcommand{\Huge}{\@setfontsize\Huge\@xxvpt{30}} +%</11pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Gfont} +% \begin{macro}{\Tfont} +% \begin{macro}{\Cfont} +% \begin{macro}{\SCfont} +% \begin{macro}{\SSCfont} +% \begin{macro}{\Nfont} +% \begin{macro}{\Efont} +% Define the font sizes for headings, captions, etc. +% |\Gfont| is the normal size font for general text. +% |\Tfont| is for the title of the standard. +% |\Cfont| is for clause headings. Similarly |\SCfont| and |\SSCfont| +% are for subheadings. +% |\Nfont| is for notes, examples, footers, footnotes, copyright. +% |\Efont| is for code in typewriter font. +% \changes{v2}{1997/11/30}{New \cs{SCfont} and \cs{SSCfont} commands} +% \changes{v2.3}{2001/07/06}{Added font series to heading font sizes} +% \begin{macrocode} +\newcommand{\Gfont}{\normalsize} +\newcommand{\Nfont}{\small} +\newcommand{\Efont}{\small} +%<*9pt> +%%%\newcommand{\Tfont}{\huge} +\newcommand{\Tfont}{\@setfontsize\Tfont\@xviipt{22}\bfseries} +\newcommand{\Cfont}{\Large\bfseries} +\newcommand{\SCfont}{\large\bfseries} +\newcommand{\SSCfont}{\normalsize\bfseries} + +%</9pt> +%<*10pt> +%%%\newcommand{\Tfont}{\huge} +\newcommand{\Tfont}{\@setfontsize\Tfont\@xviipt{22}\bfseries} +\newcommand{\Cfont}{\Large\bfseries} +\newcommand{\SCfont}{\large\bfseries} +\newcommand{\SSCfont}{\normalsize\bfseries} + +%</10pt> +%<*11pt> +%%%\newcommand{\Tfont}{\LARGE} +\newcommand{\Tfont}{\LARGE\bfseries} +\newcommand{\Cfont}{\Large\bfseries} +\newcommand{\SCfont}{\large\bfseries} +\newcommand{\SSCfont}{\normalsize\bfseries} + +%</11pt> + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\beforecskip} +% \begin{macro}{\aftercskip} +% \begin{macro}{\beforescskip} +% \begin{macro}{\afterscskip} +% \begin{macro}{\beforesscskip} +% \begin{macro}{\aftersscskip} +% We define skips for before and after headings. ISO wants two blank +% lines before a clause and one afterwards. For lower level sectioning +% the spacing is one blank line before and one after. +% +% Remember that \LaTeX{} automatically adds |\parskip| before and +% after headings. +% \changes{v2}{1997/11/30}{New before and after clause skip commands} +% \begin{macrocode} +\newlength{\beforecskip} + \setlength{\beforecskip}{\@smidgeon} + \addtolength{\beforecskip}{2\@onelineskip} + \addtolength{\beforecskip}{-\parskip} +\newlength{\aftercskip} + \setlength{\aftercskip}{\@smidgeon} + \addtolength{\aftercskip}{\@onelineskip} + \addtolength{\aftercskip}{-\parskip} +\newlength{\beforescskip} + \setlength{\beforescskip}{\@smidgeon} + \addtolength{\beforescskip}{\@onelineskip} + \addtolength{\beforescskip}{-\parskip} +\newlength{\afterscskip} + \setlength{\afterscskip}{\@smidgeon} + \addtolength{\afterscskip}{\@onelineskip} + \addtolength{\afterscskip}{-\parskip} +\newlength{\beforesscskip} + \setlength{\beforesscskip}{\@smidgeon} + \addtolength{\beforesscskip}{\@onelineskip} + \addtolength{\beforesscskip}{-\parskip} +\newlength{\aftersscskip} + \setlength{\aftersscskip}{\@smidgeon} + \addtolength{\aftersscskip}{\@onelineskip} + \addtolength{\aftersscskip}{-\parskip} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</9pt|10pt|11pt> +%<*iso> +% \end{macrocode} +% +% \begin{macro}{\captionsize} +% This internal command holds the font size for captions. Its value +% depends on the \Lopt{uglycaption} option. +% \changes{v1.1}{1997/07/31}{Added \cs{captionsize} command to support the uglycaption} +% \changes{v2.3}{2001/07/06}{\cs{captionsize} is just \cs{normalsize}} +% \begin{macrocode} + \newcommand{\captionsize}{\normalsize} +% \end{macrocode} +% \end{macro} +% +% \subsection{Paragraphing} +% +% \begin{macro}{\lineskip} +% \begin{macro}{\normallineskip} +% These parameters control \TeX's behaviour when two lines tend to +% come too close together. +% \begin{macrocode} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\baselinestretch} +% This is used as a multiplier for |\baselineskip|. The default is +% to \emph{not} stretch the baselines. +% \begin{macrocode} +\renewcommand{\baselinestretch}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parindent} +% |\parskip| gives extra vertical space between paragraphs and +% |\parindent| is the width of the paragraph indentation. +% (|\parskip| is defined in the \file{.clo} file.) +% \begin{macrocode} +\setlength\parindent{\z@} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty}% +% The commands |\nopagebreak| and |\nolinebreak| put in penalties +% to discourage these breaks at the point they are put in. +% They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, +% dependent on their argument. +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\clubpenalty} +% \begin{macro}{\widowpenalty} +% These penalties are used to discourage club and widow lines. +% The default values are 150 each, but we want stronger discouragement. +% \begin{macrocode} +\clubpenalty 1000 +\widowpenalty 1000 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\displaywidowpenalty} +% \begin{macro}{\predisplaypenalty} +% \begin{macro}{\postdisplaypenalty} +% Discourage, but do not prevent, widows in front of a math display +% and forbid breaking directly in front of a display. Allow break +% after a display without a penalty. The default values are +% used, therefore we only show them here. +% \begin{macrocode} +% \displaywidowpenalty 50 +% \predisplaypenalty 10000 +% \postdisplaypenalty 0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% Allow the breaking of a page in the middle of a paragraph. +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\brokenpenalty} +% We allow the breaking of a page after a hyphenated line. +% \begin{macrocode} +% \brokenpenalty 100 +% \end{macrocode} +% \end{macro} +% +% +% +% +% \subsection{Page Layout} +% +% All margin dimensions are measured from a point one inch from the +% top and lefthand side of the page. +% +% The ISO layout on A4 paper (297 by 210 mm) is 25mm sidemargins +% (make that 25.4mm for simplicity) +% 12mm above and below the header and footer, at least one blank line +% between the typeblock and headers/footers. This leads to +% |\...sidemargin = 0|, and |\textwidth = 159.2mm = 160mm| for convenience, +% and |\topmargin = -13.5mm|. +% +% Make |\headheight|, +% |\headskip| and footheight each be 12pt, then |\footskip = 24pt|. +% The total height of the typeblock is then 256mm; subtracting the +% |\topskip| (say 12pt = 4mm) gives |\textheight = 252mm|. +% \changes{v2.3}{2001/07/06}{Reconfigured the page layout} +% +% \subsubsection{Vertical spacing} +% +% \begin{macro}{\headheight} +% \begin{macro}{\headsep} +% \begin{macro}{\topskip} +% The |\headheight| is the height of the box that will contain the +% running head. The |\headsep| is the distance between the bottom +% of the running head and the top of the text. The |\topskip| is the +% |\baselineskip| for the first line on a page; +% \LaTeX's output routine will not work properly if it has the +% value 0pt, so do not do that! +% \begin{macrocode} +\setlength\headheight{12\p@} +\setlength\headsep{12\p@} +%</iso> +%<9pt>\setlength\topskip{12\p@} +%<10pt>\setlength\topskip{12\p@} +%<11pt>\setlength\topskip{12\p@} +%<*iso> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\footskip} +% The distance from the baseline of the box which contains the +% running footer to the baseline of last line of text is controlled +% by the |\footskip|. +% \begin{macrocode} +\setlength\footskip{24\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxdepth} +% \begin{macro}{\@maxdepth} +% The \TeX\ primitive register |\maxdepth| has a function that is +% similar to that of |\topskip|. The register |\@maxdepth| should +% always contain a copy of |\maxdepth|. In both plain \TeX\ and +% \LaTeX~2.09 |\maxdepth| had a fixed value of \texttt{4pt}; in +% native \LaTeX 2e mode we let the value depend on the typesize. We +% set it so that |\maxdepth| $+$ |\topskip| $=$ typesize $\times +% 1.5$. As it happens, in these classes |\topskip| is equal to the +% typesize, therefor we set |\maxdepth| to half the value of +% |\topskip|. +% \begin{macrocode} +\setlength\maxdepth{.5\topskip} +\setlength\@maxdepth\maxdepth +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{The dimension of text} +% +% \begin{macro}{\textwidth} +% \begin{macro}{\textheight} +% \begin{macro}{\columnsep} +% The width and height of the text which are fixed in this class. +% Also, the gutter width when in two column mode. +% +% \begin{macrocode} +\setlength\textwidth{160mm} +%%%\setlength\textheight{221.5mm} +\setlength\textheight{252mm} +\setlength\columnsep{10mm} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsubsection{Margins} +% +% \begin{macro}{\topmargin} +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% \begin{macro}{\marginparwidth} +% \begin{macro}{\marginparsep} +% \begin{macro}{\marginparpush} +% The margins are fixed in this class. +% \begin{macrocode} +%%%\setlength\topmargin{0mm} +\setlength\topmargin{-13.5mm} +\setlength\oddsidemargin{0mm} +\setlength\evensidemargin{0mm} +\setlength\marginparwidth{0pt} +\setlength\marginparsep{0pt} +\setlength\marginparpush{3mm} +% \end{macrocode} +% However, some of the options can change these values. The \Lopt{draft} +% option allows marginal notes. +% \begin{macrocode} +\ifdr@ftd@c + \setlength\marginparwidth{20mm} + \setlength\marginparsep{0.5mm} +\fi +% \end{macrocode} +% The \Lopt{letterpaper} (279 by 216 mm) option rearranges the text block on the page, +% trying to center it horizontally. +% \begin{macrocode} +\if@us +%%% \setlength\topmargin{-9.4mm} +%%% \setlength\oddsidemargin{1.55mm} +%%% \setlength\evensidemargin{1.55mm} + \addtolength{\topmargin}{-9mm} + \setlength\oddsidemargin{2mm} + \setlength\evensidemargin{2mm} + \typeout{ } + \typeout{*********************************************************} + \typeout{* Warning: You have used the letterpage option. *********} + \typeout{* This will not be acceptable as ISO camera ready copy. *} + \typeout{*********************************************************} + \typeout{ } +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsubsection{Footnotes} +% +% \begin{macro}{\footnotesep} +% |\footnotesep| is the height of the strut placed at the beginning +% of every footnote. +% \begin{macrocode} +\setlength\footnotesep{12\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footins} +% |\skip\footins| is the space between the last line of the main +% text and the top of the first footnote. +% \begin{macrocode} +\setlength{\skip\footins}{6\p@ \@plus 2\p@ \@minus 2\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Float placement parameters} +% +% All float parameters are given default values in the \LaTeX 2e +% kernel. For this reason counters only need to be set with +% |\setcounter| and other parameters are set using |\renewcommand|. +% +% \paragraph{Limits for the placement of floating objects} +% +% \begin{macro}{\c@topnumber} +% The \Lcount{topnumber} counter holds the maximum number of +% floats that can appear on the top of a text page (classically 2) +% \begin{macrocode} +\setcounter{topnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the top (classically 0.7). +% \begin{macrocode} +\renewcommand{\topfraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@bottomnumber} +% The \Lcount{bottomnumber} counter holds the maximum number of +% floats that can appear on the bottom of a text page (classically 1). +% \begin{macrocode} +\setcounter{bottomnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bottomfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the bottom (classically 0.3). +% \begin{macrocode} +\renewcommand{\bottomfraction}{.5} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@totalnumber} +% This indicates the maximum number of floats that can appear on +% any text page (classically 3). +% \begin{macrocode} +\setcounter{totalnumber}{4} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textfraction} +% This indicates the minimum part of a text page that has to be +% occupied by text (classically 0.2). +% \begin{macrocode} +\renewcommand{\textfraction}{.1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by floating objects before a `float page' is +% produced (classically 0.5). +% \begin{macrocode} +\renewcommand{\floatpagefraction}{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@dbltopnumber} +% The \Lcount{dbltopnumber} counter holds the maximum number of +% two column floats that can appear on the top of a two column text +% page (classically 2). +% \begin{macrocode} +\setcounter{dbltopnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dbltopfraction} +% This indicates the maximum part of a two column text page that +% can be occupied by two column floats at the top (classically 0.7). +% \begin{macrocode} +\renewcommand{\dbltopfraction}{.8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dblfloatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by two column wide floating objects before a `float +% page' is produced (classically 0.5). +% \begin{macrocode} +\renewcommand{\dblfloatpagefraction}{.7} +% \end{macrocode} +% \end{macro} +% +% \paragraph{Floats on a text page} +% +% \begin{macro}{\floatsep} +% \begin{macro}{\textfloatsep} +% \begin{macro}{\intextsep} +% When a floating object is placed on a page with text, these +% parameters control the separation between the float and the other +% objects on the page. These parameters are used for both +% one-column mode and single-column floats in two-column mode. +% +% |\floatsep| is the space between adjacent floats that are moved +% to the top or bottom of the text page. +% +% |\textfloatsep| is the space between the main text and floats +% at the top or bottom of the page. +% +% |\intextsep| is the space between in-text floats and the text. +% \begin{macrocode} +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dblfloatsep} +% \begin{macro}{\dbltextfloatsep} +% When floating objects that span the whole |\textwidth| are placed +% on a text page and \LaTeX{} is in twocolumn mode the separation +% between the float and the text is controlled by |\dblfloatsep| +% and |\dbltextfloatsep|. +% +% |\dblfloatsep| is the space between adjacent floats that are moved +% to the top or bottom of the text page. +% +% |\dbltextfloatsep| is the space between the main text and floats +% at the top or bottom of the page. +% +% \begin{macrocode} +\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{Floats on their own page or column} +% +% \begin{macro}{\@fptop} +% \begin{macro}{\@fpsep} +% \begin{macro}{\@fpbot} +% When floating objects are placed on separate pages the layout of +% such pages is controlled by these parameters. At the top of the +% page |\@fptop| amount of stretchable whitespace is inserted, at +% the bottom of the page we get an |\@fpbot| amount of stretchable +% whitespace. Between adjacent floats the |\@fpsep| is inserted. +% +% These parameters are used for the placement of floating objects +% in one column mode, or in single column floats in two column +% mode. +% +% Note that at least one of the two parameters |\@fptop| and +% |\@fpbot| should contain a |plus ...fil| to allow filling the +% remaining empty space. +% \begin{macrocode} +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{8\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dblfptop} +% \begin{macro}{\@dblfpsep} +% \begin{macro}{\@dblfpbot} +% Double column floats in two column mode are handled with similar +% parameters. +% \begin{macrocode} +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{8\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Page Styles} +% +% The page style \pstyle{foo} is defined by defining the command +% |\ps@foo|. This command should make only local definitions. +% There should be no stray spaces in the definition, since they +% could lead to mysterious extra spaces in the output. +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% The |\ps@...| command defines the macros |\@oddhead|, +% |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running +% heads and feet---e.g., |\@oddhead| is the macro to produce the +% contents of the heading box for odd-numbered pages. It is called +% inside an |\hbox| of width |\textwidth|. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Marking conventions} +% +% To make headings determined by the sectioning commands, the page +% style defines the commands |\chaptermark|, |\sectionmark|, +% \ldots,\\ +% where |\chaptermark{|\meta{TEXT}|}| is called by +% |\chapter| to set a mark, and so on. +% +% The |\...mark| commands and the |\...head| macros are defined +% with the help of the following macros. (All the |\...mark| +% commands should be initialized to no-ops.) +% +% \LaTeX{} extends \TeX's |\mark| facility by producing two kinds +% of marks, a `left' and a `right' mark, using the following +% commands: +% \begin{flushleft} +% |\markboth{|\meta{LEFT}|}{|\meta{RIGHT}|}|: Adds both marks. +% +% |\markright{|\meta{RIGHT}|}|: Adds a `right' mark. +% +% |\leftmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current `left' +% mark. |\leftmark| works like \TeX's |\botmark| +% command. +% +% |\rightmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current +% `right' mark. |\rightmark| works like \TeX's +% |\firstmark| command. +% \end{flushleft} +% +% The marking commands work reasonably well for right marks +% `numbered within' left marks--e.g., the left mark is changed by a +% |\chapter| command and the right mark is changed by a |\section| +% command. However, it does produce somewhat anomalous results if +% two |\markboth|'s occur on the same page. +% +% +% Commands like |\tableofcontents| that should set the marks in some +% page styles use a |\@mkboth| command, which is |\let| by the +% pagestyle command (|\ps@...|) to |\markboth| for setting the +% heading or to |\@gobbletwo| to do nothing. +% +% +% \begin{macrocode} + %%%\mark{{}{}} % Initializes TeX's marks <--- can vanish +% \end{macrocode} +% +% \begin{macro}{\standard} +% \begin{macro}{\yearofedition} +% \begin{macro}{\languageofedition} +% These commands are to be used in the document preamble. They +% are used to specify the identification of the standard, +% the year of the standard and the language of the standard. +% For example, for a DIS printed in 1995 in English: +% \begin{verbatim} +% \standard{ISO/DIS 10303-321} +% \yearofedition{1995} +% \languageofedition{(E)} +% \end{verbatim} +% \begin{macro}{\thestandard} +% \begin{macro}{\thesyear} +% \begin{macro}{\theslanguage} +% \begin{macro}{\@runninghead} +% |\thestandard| and |\thesyear| hold the number and year of the +% standard being documented. |\theslanguage| holds the ISO +% identification of the publication language; note that +% this must include parentheses around the code letter. +% \begin{macrocode} +\gdef\thestandard{} +\gdef\thesyear{} +\gdef\theslanguage{} +\def\standard#1{\gdef\thestandard{#1}} +\def\yearofedition#1{\gdef\thesyear{#1}} +\def\languageofedition#1{\gdef\theslanguage{#1}} +% \end{macrocode} +% |\@runninghead| contains the document identification text for +% the running head. Its value depends on the \Lopt{otherdoc} option. +% \begin{macrocode} +\ifotherdoc +% \end{macrocode} +% This is not intended to be a standard, so just use |\thestandard| text. +% \begin{macrocode} + \newcommand{\@runninghead}{\thestandard} +\else +% \end{macrocode} +% It either is, or is intended to become, a standard, +% `so the year and language are +% required as well; note the colon. +% \begin{macrocode} + \newcommand{\@runninghead}{\thestandard:\thesyear\theslanguage} +\fi + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\copyrighthead} +% +% |\copyrighthead| contains the text for a copyright mark +% in a heading. +% However, it should be blank if the document is not copyrighted. +% \changes{v2.3}{2001/07/06}{Changed \cs{copyrighthead}} +% \begin{macrocode} +\newcommand{\copyrighthead}{\ifc@pyright + {\mbox{\copyright \textsc{\copyrightname} \thesyear{} --- All rights reserved}} + \else + \mbox{} + \fi} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\extrahead} +% |\extrahead| puts its contents into the page header (e.g., a document +% number). Use it in the preamble as |\renewcommand{\extrahead}{N5496}|. +% \changes{v2.3}{2001/07/06}{Added \cs{extrahead}} +% \begin{macrocode} +\newcommand{\extrahead}{\mbox{}} + +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Defining the page styles} +% +% The pagestyles \pstyle{empty} and \pstyle{plain} are defined +% in \file{latex.dtx}. +% +% \begin{macro}{\ps@headings} +% \pstyle{headings} is the typical pagestyle throughout the document. +% The header contains the identification of the standard. +% The footer has the page number at the outer edge and a copyright +% notice at the inner. +% \changes{v2.3}{2001/07/06}{The headings pagestyle has been modified} +% \begin{macrocode} +\newcommand{\ps@headings}{% + \def\@oddhead{\bfseries\extrahead\hfil\@runninghead}% + \def\@evenhead{\bfseries\@runninghead\hfil\extrahead}% + \def\@oddfoot{\copyrighthead\hfil\thepage}% + \def\@evenfoot{\thepage\hfil\copyrighthead}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@startpage} +% The \pstyle{startpage} page style is similar to \pstyle{headings} +% but without a copyright notice. +% \changes{v2.3}{2001/07/06}{The startpage pagestyle modified like headings} +% \begin{macrocode} +\newcommand{\ps@startpage}{% + \def\@oddhead{\bfseries\extrahead\hfil\@runninghead}% + \def\@evenhead{\bfseries\@runninghead\hfil\extrahead}% + \def\@oddfoot{\hfil\thepage}% + \def\@evenfoot{\thepage\hfil}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@nohead} +% Pagestyle \pstyle{nohead} has no headers or footers. +% \begin{macrocode} +\newcommand{\ps@nohead}{% + \def\@oddhead{}% + \def\@evenhead{}% + \def\@oddfoot{}% + \def\@evenfoot{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\rectoisotitlehead} +% \begin{macro}{\versoisotitlehead} +% \begin{macro}{\ps@isotitlehead} +% +% \pstyle{isotitlehead} is a special pagestyle for the title page of +% a standard. |\rectoisotitlehead| and |\versoisotitlehead| +% contain the relevent texts. +% \changes{v2.3}{2002/01/22}{Changed the isotitlehead pagestyle} +% \begin{macrocode} +\newcommand{\rectoisotitlehead}{% + \fillline\vspace{0.1\baselineskip}\linebreak% + {\bfseries \uppercase{\ISname}} +%% \mbox{\ifc@pyright\space\copyright {\scshape \copyrightname}\else +%% \space{\scshape (\copyrightname)}\fi} + \hfil {\bfseries \@runninghead}% + \vspace{-0.5\baselineskip}\linebreak\fillline} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand{\versoisotitlehead}{% + \fillline\vspace{0.1\baselineskip}\linebreak% + {\bfseries \@runninghead} \hfil + {\bfseries \uppercase{\ISname}} +%% \mbox{\ifc@pyright\space\copyright {\scshape \copyrightname}\else +%% \space{\scshape (\copyrightname)}\fi} + \vspace{-0.5\baselineskip}\linebreak\fillline} +% \end{macrocode} +% +% \begin{macrocode} +\def\ps@isotitlehead{% + \def\@oddhead{\parbox{\textwidth}{\protect\rectoisotitlehead}}% + \def\@evenhead{\parbox{\textwidth}{\protect\versoisotitlehead}}% +%% \def\@oddfoot{\hfil\thepage}% +%% \def\@evenfoot{\thepage\hfil}} + \def\@oddfoot{\copyrighthead\hfil\thepage}% + \def\@evenfoot{\thepage\hfil\copyrighthead}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \section{Document Markup} \label{sec:docm} +% +% \subsection{The title} +% +% In this class the |\title| command is somewhat different to that +% in the standard classes. +% +% \begin{macro}{\title} +% \begin{macro}{\thetitle} +% \begin{macro}{\introelement} +% \begin{macro}{\mainelement} +% \begin{macro}{\compelement} +% The command |\title{|\meta{intro}|}{|\meta{main}|}{|\meta{comp}|}| +% produces a macro |\thetitle| which is used when generating the +% first normative clause. +% +% First define a default |\thetitle|. +% \begin{macrocode} +\gdef\thetitle{} +% \end{macrocode} +% Define the elements to be used in the title. +% \changes{v2}{1997/11/30}{Tweaked the \cs{title} command} +% \changes{v2.3}{2001/07/06}{Tweaked the \cs{title} command by adding \cs{par}} +% \begin{macrocode} +\newcommand{\introelement}[1]{\if\isoemptystring{#1}\else {#1 ---\newline}\fi} +\newcommand{\mainelement}[1]{#1} +\newcommand{\compelement}[1]{\if\isoemptystring{#1}\else { --- \newline #1}\fi} +% \end{macrocode} +% The |\title| command starts a new recto page with arabic numbering and +% initialises the counters. It also uses the |isotitlehead|. +% \begin{macrocode} +\renewcommand{\title}[3]{% + \cleardoublepage\pagenumbering{arabic}% + \setcounter{clause}{0}% + \ifotherdoc \else % + \protect\thispagestyle{isotitlehead} + \fi + \gdef\thetitle{{\Tfont \introelement{#1} % + \mainelement{#2} % + \compelement{#3}\par}} + \if@twocolumn + \twocolumn[\vspace*{2\baselineskip}\vbox to 35mm{\thetitle}] + \else + \vspace*{2\baselineskip}\vbox to 35mm{\thetitle} + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{The cover} +% +% ISO will produce the cover (pages 1 and 2) for any documents they +% publish. It can be useful for editors to be able to provide their +% own, informal, cover sheet. +% +% \begin{environment}{cover} +% The |cover| environment is for typesetting an informal cover sheet. +% there is no restriction on what can go into it, except that if used it +% must be the first element in the document and the contents must not +% exceed a single page. +% \changes{v2.3}{2001/07/06}{Added the cover environment} +% \begin{macrocode} +\newenvironment{cover}{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \setcounter{page}{1} \pagenumbering{roman} + \thispagestyle{empty}}{% +% \end{macrocode} +% A copyright notice has to go at the foot of the second page. +% \begin{macrocode} +%% \clearpage + \thispagestyle{startpage} + \mbox{} + \ifc@pyright\@copyrighttext\fi + \newpage + \if@restonecol\twocolumn\fi} + +% \end{macrocode} +% \end{environment} +% +% \subsection{Clauses} +% +% \subsubsection{Building blocks} The definitions in this part of a +% class file usually make use of two internal macros, |\@startsection| and +% |\secdef|. To understand +% what is going on here, we describe their syntax. +% +% The macro |\@startsection| has 6 required arguments, optionally +% followed by a $*$, an optional argument and a required argument: +% +% |\@startsection|\meta{name}\meta{level}\meta{indent}^^A +% \meta{beforeskip}\meta{afterskip}\meta{style} +% optional *\\ +% \null\hphantom{\bslash @startsection}^^A +% |[|\meta{altheading}|]|\meta{heading} +% +% It is a generic command to start a section, the arguments have +% the following meaning: +% +% \begin{description} +% \item[\meta{name}] The name of the user level command, e.g., +% `section'. +% \item[\meta{level}] A number, denoting the depth of the section +% -- e.g., chapter=1, section = 2, etc. A section number +% will be printed if and only if \meta{level} $<=$ the value +% of the \Lcount{secnumdepth} counter. +% \item[\meta{indent}] The indentation of the heading from the left +% margin +% \item[\meta{beforeskip}] The absolute value of this argument +% gives the skip to leave above the heading. If it is +% negative, then the paragraph indent of the text following +% the heading is suppressed. +% \item[\meta{afterskip}] If positive, this gives the skip to leave +% below the heading, else it gives the skip to leave to the +% right of a run-in heading. +% \item[\meta{style}] Commands to set the style of the heading. +% \item[$*$] When this is missing the heading is numbered and the +% corresponding counter is incremented. +% \item[\meta{altheading}] Gives an alternative heading to use in +% the table of contents and in the running heads. This should +% be present when the $*$ form is used. +% \item[\meta{heading}] The heading of the new section. +% \end{description} +% A sectioning command is normally defined to |\@startsection| and +% its first six arguments. +% +% The macro |\secdef| can be used when a sectioning command is +% defined without using |\@startsection|. It has two arguments: +% +% |\secdef|\meta{unstarcmds}\meta{starcmds} +% +% \begin{description} +% \item[\meta{unstarcmds}] Used for the normal form of a +% sectioning command. +% \item[\meta{starcmds}] Used for the $*$-form of a +% sectioning command. +% \end{description} +% +% You can use |\secdef| as follows: +% \begin{verbatim} +% \def\chapter { ... \secdef \CMDA \CMDB } +% \def\CMDA [#1]#2{ ... } % Command to define +% % \chapter[...]{...} +% \def\CMDB #1{ ... } % Command to define +% % \chapter*{...} +% \end{verbatim} +% +% \changes{v2.2}{2000/01/10}{deleted \cs{@prwstartsection} } +% +% \subsubsection{Overview} +% +% ISO terminology uses `clause' instead of the typical terms for +% subdivisions in a document, although they do use the term `section'. +% Accordingly, we have defined new terms for the document sectioning +% commands. We also use the shorthand `ss' for `subsub', and so on. +% +% \begin{center} +% \begin{tabular}{llc}\hline +% \LaTeX\ & ISO & level \\ \hline +% chapter & clause, annex & 1 \\ +% section & sclause & 2 \\ +% subsection & ssclause & 3 \\ +% subsubsection & sssclause & 4 \\ +% paragraph & ssssclause & 5 \\ +% subparagraph & sssssclause & 6 \\ \hline +% \end{tabular} +% \end{center} +% +% We also provide `annex' commands, which are equivalent to a `clause' +% command. +% +% \subsubsection{Hyperref ToC levels} +% +% \begin{macro}{\toclevel@clause} +% \begin{macro}{\toclevel@sclause} +% \begin{macro}{\toclevel@ssclause} +% \begin{macro}{\toclevel@sssclause} +% \begin{macro}{\toclevel@ssssclause} +% \begin{macro}{\toclevel@sssssclause} +% \begin{macro}{\toclevel@annex} +% \begin{macro}{\toclevel@index} +% The \Lpack{hyperref} package needs to know ToC entry levels. +% \changes{v2.4}{2002/07/22}{Added \cs{toclevel@} macros for hyperref} +% \begin{macrocode} +\newcommand*{\toclevel@clause}{1} +\newcommand*{\toclevel@sclause}{2} +\newcommand*{\toclevel@ssclause}{3} +\newcommand*{\toclevel@sssclause}{4} +\newcommand*{\toclevel@ssssclause}{5} +\newcommand*{\toclevel@sssssclause}{6} +\newcommand*{\toclevel@annex}{1} +\newcommand*{\toclevel@index}{1} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Define Counters} +% +% \begin{macro}{\c@secnumdepth} +% The value of the counter \Lcount{secnumdepth} gives the depth of +% the highest-level sectioning command that is to produce section +% numbers. +% \begin{macrocode} +\setcounter{secnumdepth}{6} +% \end{macrocode} +% \end{macro} +% +% The macro\\ +% |\newcounter{|\meta{newctr}|}[|\meta{oldctr}|]|\\ +% defines\meta{newctr} to be a counter, which is reset to zero when +% counter \meta{oldctr} is stepped. Counter \meta{oldctr} must +% already be defined. +% +% \begin{macro}{\c@annex} +% \begin{macro}{\c@clause} +% \begin{macro}{\c@fibicl@use} +% These counters are used for the sectioning numbers. +% Clause and annex are the top level document divisions. +% \begin{macrocode} +\newcounter{annex} +\newcounter{clause} +\newcounter{fibicl@use} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\c@sclause} +% \begin{macro}{\c@ssclause} +% \begin{macro}{\c@sssclause} +% \begin{macro}{\c@ssssclause} +% \begin{macro}{\c@sssssclause} +% The lower level divisions get reset by higher level divisions. +% \begin{macrocode} +\newcounter{sclause}[clause] +\newcounter{ssclause}[sclause] +\newcounter{sssclause}[ssclause] +\newcounter{ssssclause}[sssclause] +\newcounter{sssssclause}[ssssclause] +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\c@yextra} +% We need an extra counter for the \Lpack{hyperref} package. +% \changes{v2.4}{2002/07/22}{Added \cs{c@yextra} counter for hyperref} +% \begin{macrocode} +\newcounter{yextra} + +% \end{macrocode} +% \end{macro} +% +% For any counter \Lcount{CTR}, |\theCTR| is a macro that defines +% the printed version of counter \Lcount{CTR}. It is defined in +% terms of the following macros: +% +% |\arabic{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an arabic numeral. +% +% |\roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as a lowercase roman numeral. +% +% |\Roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an uppercase roman numeral. +% +% |\alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as a lowercase letter: $1 =$~a, $2 =$~ b, etc. +% +% |\Alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as an uppercase letter: $1 =$~A, $2 =$~B, etc. +% +% \begin{macro}{\theannex} +% \begin{macro}{\theclause} +% \begin{macro}{\thefibicl@use} +% The top level division numbers. +% \begin{macrocode} +\renewcommand{\theannex}{\Alph{annex}} +\renewcommand{\theclause}{\arabic{clause}} +\renewcommand{\thefibicl@use}{\arabic{fibicl@use}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thesclause} +% \begin{macro}{\thessclause} +% \begin{macro}{\thesssclause} +% \begin{macro}{\thessssclause} +% \begin{macro}{\thesssssclause} +% The lower level division number representations. +% \begin{macrocode} +\renewcommand{\thesclause}{\theclause.\arabic{sclause}} +\renewcommand{\thessclause}{\thesclause.\arabic{ssclause}} +\renewcommand{\thesssclause}{\thessclause.\arabic{sssclause}} +\renewcommand{\thessssclause}{\thesssclause.\arabic{ssssclause}} +\renewcommand{\thesssssclause}{\thessssclause.\arabic{sssssclause}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\theHannex} +% \begin{macro}{\theHclause} +% \begin{macro}{\theHsclause} +% \begin{macro}{\theHssclause} +% \begin{macro}{\theHsssclause} +% \begin{macro}{\theHssssclause} +% \begin{macro}{\theHsssssclause} +% For \Lpack{hyperref} we have to specify a similar set of +% number representations. +% \changes{v2.4}{2002/07/22}{Added a lot of \cs{theHsclause} like commands} +% \begin{macrocode} +\newcommand{\theHannex}{\Alph{annex}} +\newcommand{\theHclause}{\arabic{clause}} +\newcommand{\theHsclause}{\theHclause.\arabic{sclause}} +\newcommand{\theHssclause}{\theHsclause.\arabic{ssclause}} +\newcommand{\theHsssclause}{\theHssclause.\arabic{sssclause}} +\newcommand{\theHssssclause}{\theHsssclause.\arabic{ssssclause}} +\newcommand{\theHsssssclause}{\theHssssclause.\arabic{sssssclause}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{Clauses} +% +% +% \begin{macro}{\zerocounters} +% \changes{v2.2}{2000/01/10}{Added \cs{zerocounters}} +% At the start of each document division counters like for notes and examples +% are zeroed. +% \begin{macrocode} +\newcommand{\zerocounters}{% + \setcounter{note}{0}\setcounter{example}{0}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@hangfrom} +% Multiline clause headings are flushleft (block paragraph style). +% \changes{v2.3}{200/07/06}{Changed \cs{@hangfrom} for block para clauses} +% \begin{macrocode} +\renewcommand{\@hangfrom}[1]{#1} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\clause} +% The command to start a new clause. +% \changes{v2}{1997/11/30}{Use beforecskip and aftercskip for skips around clause headings} +% \changes{v2.2}{2000/01/10}{To support tex4ht all clausing commands use \cs{@startsection}} +% \begin{macrocode} +\newcommand{\clause}{\zerocounters + \addtocounter{clause}{1} + \typeout{Clause: \theclause} + \addtocounter{clause}{-1} + \tocskip{\tocentryskip} + \@startsection{clause}{1}% + {\z@}% + {\beforecskip}% + {\aftercskip}% +%% {\raggedright\Cfont\bfseries}} + {\raggedright\Cfont}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fibicl@use} +% \changes{v2.2}{2000/01/10}{To support tex4ht added \cs{fibicl@use}} +% Document divisions like the Foreword and the Bibliography are +% effectively unnumbered clauses, but which appear in the ToC. In order +% to ease support for the \Lpack{tex4ht} package, +% the |\fibicl@use| command is defined, but should +% only be used in its starred form. +% \begin{macrocode} +\newcommand{\fibicl@use}{% + \@startsection{fibicl@use}{1}% + {\z@}% + {\beforecskip}% + {\aftercskip}% +%% {\raggedright\Cfont\bfseries}} + {\raggedright\Cfont}} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Lower level headings} +% +% These commands all make use of |\@startsection|. They also +% reinitialize the note and example counters. +% \begin{macro}{\sclause} +% \begin{macro}{\ssclause} +% \begin{macro}{\sssclause} +% \begin{macro}{\ssssclause} +% \begin{macro}{\sssssclause} +% \changes{v2}{1997/11/30}{Use beforescskip and afterscskip, etc, for skips around s...clause headings} +% \changes{v2}{1997/11/30}{s...clauses reset the example counter} +% \begin{macrocode} +\newcommand{\sclause}{\zerocounters + \@startsection{sclause}{2}% + {\z@}% + {\beforescskip}% + {\afterscskip}% + {\raggedright\SCfont}} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand{\ssclause}{\zerocounters + \@startsection{ssclause}{3}% + {\z@}% + {\beforesscskip}% + {\aftersscskip}% + {\raggedright\SSCfont}} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand{\sssclause}{\zerocounters + \@startsection{sssclause}{4}% + {\z@}% + {\beforesscskip}% + {\aftersscskip}% + {\raggedright\SSCfont}} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand{\ssssclause}{\zerocounters + \@startsection{ssssclause}{5}% + {\z@}% + {\beforesscskip}% + {\aftersscskip}% + {\raggedright\SSCfont}} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand{\sssssclause}{\zerocounters + \@startsection{sssssclause}{6}% + {\z@}% + {\beforesscskip}% + {\aftersscskip}% + {\raggedright\SSCfont}} +% \end{macrocode} +% Preloaded definitions. +% \begin{macrocode} +\def\clausemark#1{} +\def\sclausemark#1{} +\def\ssclausemark#1{} +\def\sssclausemark#1{} +\def\ssssclausemark#1{} +\def\sssssclausemark#1{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% +% \subsubsection{Annexes} +% +% \begin{macro}{\init@nnex} +% As an annex command has to do quite a lot, we define the internal +% |\init@nnex| command as a worker. It has to: +% \begin{itemize} +% \item clear the page; +% \item reset the table and figure counters to zero; +% \item redefine the |\thefigure| and the |\thetable| to precede them +% with the annex letter; +% \item reset the |sclause| counter to zero; +% \item test for annexes I and O since these are not allowed by ISO. +% \end{itemize} +% Use as: |\@annex{|\meta{title}|}{|\meta{typeset body kind}|}{|\meta{typeset toc kind}|}| +% \changes{v1}{1996/06/19}{Added blank line after `annexes' title in toc.} +% \changes{v2}{1997/11/30}{Deleted Annex heading in the ToC} +% \changes{v2}{1997/11/30}{Added annex type to ToC} +% \changes{v2}{1997/11/30}{Annexes reset the note and example counters} +% \changes{v2}{1997/12/01}{Replaced \cs{typeout} by \cs{ClassError}} +% \changes{v2.2}{2000/01/10}{Reimplented annexes to support tex4ht} +% \changes{v2.4}{2002/07/22}{Changed \cs{init@nnex} for hyperref} +% \begin{macrocode} +\newcommand{\init@nnex}{% + \clearpage +% \end{macrocode} +% Reset the counters and test for illegal annex numbering +% \begin{macrocode} + \setcounter{table}{0} + \setcounter{figure}{0} + \setcounter{sclause}{0} + \zerocounters + \refstepcounter{annex} + \ifnum 9=\value{annex} \refstepcounter{annex}\fi + \ifnum 15=\value{annex} \refstepcounter{annex}\fi +% \end{macrocode} +% Reset the numbering scheme, but not just when first called. +% \begin{macrocode} +%%% \ifnum 1=\value{annex} + \renewcommand{\clause}{% + \ClassWarning{iso}{% + \protect\clause\space commands are not allowed after starting Annexes}{% + Type \space <return> to proceed and I'll ignore your \protect\clause.}} + \renewcommand{\thesclause}{\theannex.\arabic{sclause}} + \renewcommand{\thetable}{\theannex.\arabic{table}} + \renewcommand{\thefigure}{\theannex.\arabic{figure}} + \renewcommand{\theHsclause}{\theHannex.\arabic{sclause}} + \ifisohyper + \renewcommand{\theHtable}{\theHannex.\arabic{table}} + \renewcommand{\theHfigure}{\theHannex.\arabic{figure}} + \fi +%%% \fi +% \end{macrocode} +% Prevent floats appearing before the title. +% \begin{macrocode} + \global\@topnum\z@ + \@afterindentfalse +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makepreannexhead} +% Command to typeset the first part of an annex title. Use as +% |\makepreannexhead{|\meta{type}|}|. +% \begin{macrocode} +\newcommand{\makepreannexhead}[1]{% + \begin{center} + {{\Cfont \annexname~\theannex}\\\Large #1} + \end{center} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makeannexhead} +% Typeset the title name of an annex. +% Use as |\makeannexhead{|\meta{title}|}|. +% \begin{macrocode} +\newcommand{\makeannexhead}[1]{% + \centerline{\Cfont #1} + \vskip 0.5\baselineskip +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addannextotoc} +% Add an annex title to the ToC. +% Use as |\addannextotoc{|\meta{type}|}{|\meta{title}|}|. +% \changes{v2.4}{2002/07/22}{Fixed minor problem in \cs{addannextotoc}} +% \begin{macrocode} +\newcommand{\addannextotoc}[2]{% + \tocskip{\tocentryskip} + \addcontentsline{toc}{annex}{\ifnum2>\c@secnumdepth \else + \protect\numberline{\annexname~\theannex\space #1}\fi #2}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@infannex} +% \begin{macro}{\infannex} +% \begin{macro}{\@normannex} +% \begin{macro}{\normannex} +% \begin{macro}{\@repannex} +% \begin{macro}{\repannex} +% Three kinds of annexes are provided. |\infannex| is an informative +% annex and |\normannex| is a normative annex. Just to round things +% out, |\repannex| is neither of these. +% +% All the titles are centered, together with the kind of annex. +% +% Here are the informative annex commands. +% \begin{macrocode} +\newcommand{\@infannex}[1]{% + \makepreannexhead{(\informativename)} + \makeannexhead{#1} + \addannextotoc{(\informativename)}{#1} +} +\newcommand{\infannex}[1]{% + \init@nnex + \@infannex{#1} + \typeout{Informative annex: #1} +} +% \end{macrocode} +% +% Here are the normative annex commands. +% \begin{macrocode} +\newcommand{\@normannex}[1]{% + \makepreannexhead{(\normativename)} + \makeannexhead{#1} + \addannextotoc{(\normativename)}{#1} +} +\newcommand{\normannex}[1]{% + \init@nnex + \@normannex{#1} + \typeout{Normative annex: #1} +} +% \end{macrocode} +% +% Here are the other annex commands. +% \begin{macrocode} +\newcommand{\@repannex}[1]{% + \makepreannexhead{} + \makeannexhead{#1} + \addannextotoc{}{#1} +} +\newcommand{\repannex}[1]{% + \init@nnex + \@repannex{#1} + \typeout{Annex: #1} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Lists} +% +% \subsubsection{General List Parameters} +% +% The following commands are used to set the default values for the list +% environment's parameters. See the \LaTeX{} manual for an explanation +% of the meanings of the parameters. Defaults for the list +% environment are set as follows. First, |\rightmargin|, +% |\listparindent| and |\itemindent| are set to 0pt. Then, for a Kth +% level list, the command |\@listK| is called, where `K' denotes `i', +% '`i', ... , `vi'. (I.e., |\@listiii| is called for a third-level +% list.) By convention, |\@listK| should set |\leftmargin| to +% |\leftmarginK|. +% +% \changes{v2}{1997/11/30}{list labels are flush with left margin} +% \changes{v2}{1997/11/30}{list text is indented 3 spaces from the label} +% +% \begin{macro}{\leftmargin} +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% For efficiency, level-one list's values are defined at top level, and +% |\@listi| is defined to set only |\leftmargin|. +% +% \begin{macrocode} +\setlength{\leftmargini}{2em} +% \end{macrocode} +% The value of |\leftmargin| has to be set at this outer level. +% \begin{macrocode} +\leftmargin \leftmargini +% \end{macrocode} +% For ISO, all lists are indented the same amount. +% \begin{macrocode} +\setlength{\leftmarginii}{\leftmargini} +\setlength{\leftmarginiii}{\leftmargini} +\setlength{\leftmarginiv}{\leftmargini} +\setlength{\leftmarginv}{\leftmargini} +\setlength{\leftmarginvi}{\leftmargini} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\itemindent} +% Here we set the |\itemindent| which is the extra indentation before +% a label. +% \begin{macrocode} +\setlength{\itemindent}{\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\labelsep} +% \begin{macro}{\labelwidth} +% |\labelsep| is the distance between the label and the text of an +% item; |\labelwidth| is the width of the label. +% \begin{macrocode} +\setlength{\labelsep}{0.5em} +\setlength{\labelwidth}{\leftmargini} + \addtolength{\labelwidth}{-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partopsep} +% When the user leaves a blank line before the environment an extra +% vertical space of |\partopsep| is inserted, in addition to +% |\parskip| and |\topsep|. +% \begin{macrocode} +%</iso> +%<*9pt|10pt|11pt> +\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@} +%</9pt|10pt|11pt> +%<*iso> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@beginparpenalty} +% \begin{macro}{\@endparpenalty} +% These penalties are inserted before and after a list or paragraph +% environment. They are set to a bonus value to encourage page +% breaking at these points. +% \begin{macro}{\@itempenalty} +% This penalty is inserted between list items. +% \begin{macrocode} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@setitemparams} +% Lists may be called within other list environments with differing +% layouts. We use a routine to set the layout for \Lenv{itemize} and +% \Lenv{enumerate} lists. +% \changes{v2}{1997/12/02}{Added \cs{@setitemparams} routine} +% \begin{macrocode} +%</iso> +%<*9pt|10pt|11pt> +\newcommand{\@setitemparams}{% + \setlength{\labelsep}{0.5em} + \setlength{\labelwidth}{\leftmargini} + \addtolength{\labelwidth}{-\labelsep} + \setlength{\itemindent}{\z@} + \setlength{\parsep}{\baselineskip} + \topsep \z@ \@plus1\p@ \@minus1\p@ + \itemsep \z@ \@plus1\p@ \@minus1\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@listI} +% \begin{macro}{\@listi} +% |\@listI| defines top level and |\@listi| values of +% |\leftmargin|, |\parsep|, |\topsep|, and |\itemsep| +% +% \begin{macrocode} +\def\@listi{\leftmargin\leftmargini + %%% \itemindent\labelsep + %% \itemindent\z@ + %% \parsep\baselineskip + %% \topsep 0\p@ \@plus1\p@ \@minus1\p@ + %% \itemsep0\p@ \@plus1\p@ \@minus1\p@} + \@setitemparams} +\let\@listI\@listi +% \end{macrocode} +% We have to initialise these parameters. +% \begin{macrocode} +\@listi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% Here are the same macros for the lower level lists. +% \begin{macrocode} +\def\@listii {\leftmargin\leftmarginii + %%% \itemindent\labelsep} + %% \itemindent\z@ + \@setitemparams + } +\def\@listiii{\leftmargin\leftmarginiii + %%% \itemindent\labelsep} + %% \itemindent\z@ + \@setitemparams + } +\def\@listiv {\leftmargin\leftmarginiv + %%% \itemindent\labelsep} + %% \itemindent\z@ + \@setitemparams + } +\def\@listv {\leftmargin\leftmarginv + %%% \itemindent\labelsep} + %% \itemindent\z@ + \@setitemparams + } +\def\@listvi {\leftmargin\leftmarginvi + %%% \itemindent\labelsep} + %% \itemindent\z@ + \@setitemparams + } +%</9pt|10pt|11pt> +%<*iso> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Enumerate} +% +% \changes{v2}{1997/11/30}{Enumeration increased from 3 to 4 levels} +% +% ISO only requires two levels of enumeration labelled `a)' and +% `1)'. We include a third level and fourth labelled `i)' and `A)', +% just in case. +% ISO has printed ISO 10303:1994 which includes all three levels +% defined here. +% The enumerate environment uses four counters: \Lcount{enumi}, +% \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where +% \Lcount{enumN} controls the numbering of the Nth level +% enumeration. +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% The counters are already defined in \file{latex.dtx}, but their +% representation is changed here. +% \changes{v2.3}{2001/07/06}{4th level enumerate now uses Roman, not Alph} +% \begin{macrocode} +\renewcommand{\theenumi}{\alph{enumi}} +\renewcommand{\theenumii}{\arabic{enumii}} +\renewcommand{\theenumiii}{\roman{enumiii}} +\renewcommand{\theenumiv}{\Roman{enumiv}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% The label for each item is generated by the commands\\ +% |\labelenumi| \ldots\ |\labelenumiv|. +% \begin{macrocode} +\newcommand{\labelenumi}{\theenumi)} +\newcommand{\labelenumii}{\theenumii)} +\newcommand{\labelenumiii}{\theenumiii)} +\newcommand{\labelenumiv}{\theenumiv)} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% The expansion of |\p@enumN||\theenumN| defines the output of a +% |\ref| command when referencing an item of the Nth level of an +% enumerated list. +% \begin{macrocode} +\renewcommand{\p@enumii}{\theenumi} +\renewcommand{\p@enumiii}{\p@enumii\theenumii} +\renewcommand{\p@enumiv}{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{enumerate} +% We modify the default |enumerate| environment to make labels +% flush left in the label box. +% \begin{macrocode} +\def\enumerate{% + \ifnum \@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + + \expandafter + \list + \csname label\@enumctr\endcsname + {\usecounter\@enumctr\def\makelabel##1{##1\hfill}}% + \fi} +\let\endenumerate =\endlist +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Itemize} +% +% \changes{v2}{1997/11/30}{Itemize increased from 3 to 4 levels} +% +% ISO only requires one level labelled with either a long dash +% or a bullet. We provide +% four levels, three of which have been used in ISO 10303:1994. +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiii} +% Itemization is controlled by the commands: |\labelitemi|, +% |\labelitemii|, etc., which define +% the labels of the various itemization levels: the symbols used are +% bold em-dash, bullet, asterisk, and centered period. +% +% \changes{v2}{1997/11/30}{Itemize dash changed from en- to em-dash} +% \changes{v2}{1997/11/30}{1st and 2nd level itemize symbols swapped} +% \changes{v2.1}{1999/02/15}{1st and 2nd level itemize symbols swapped} +% \changes{v2.3}{2001/07/06}{All itemize labels are em dashes} +% \begin{macrocode} +\newcommand{\labelitemi}{{\normalfont\bfseries \textemdash}\hfill} +%%\newcommand{\labelitemii}{\textbullet\hfill} +%%\newcommand{\labelitemiii}{\textasteriskcentered} +%%\newcommand{\labelitemiv}{\textperiodcentered} +\newcommand{\labelitemii}{\labelitemi} +\newcommand{\labelitemiii}{\labelitemi} +\newcommand{\labelitemiv}{\labelitemi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{itemize} +% We modify the default |itemize| environment to make the labels +% flush left in the label box. +% \begin{macrocode} +\def\itemize{% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + + \expandafter + \list + \csname\@itemitem\endcsname + {\def\makelabel##1{##1\hfill}}% + \fi} +\let\enditemize =\endlist +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Description} +% +% \begin{environment}{description} +% The description environment is defined here -- while the default itemize +% and enumerate environments are defined in \file{latex.dtx}. +% +% \begin{macrocode} +\newenvironment{description}% + {\list{}{\labelwidth\z@ \itemindent 0.5em \labelsep 0.5em + \let\makelabel\descriptionlabel}}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% To change the formatting of the label, you must redefine +% |\descriptionlabel|. Note that the label includes a colon. +% +% \begin{macrocode} +\newcommand*{\descriptionlabel}[1]{\normalfont\bfseries #1:\hfill} +% \end{macrocode} +% \end{macro} +% +% \subsection{Defining new environments} +% +% +% \subsubsection{Quotation} +% +% This is not required by ISO, but we leave it in anyway. +% \begin{environment}{quotation} +% The quotation environment is defined by making clever use of +% the list environment's parameters. The lines in the environment +% are set smaller than |\textwidth|. The first line of a paragraph +% inside this environment is indented. +% +% \begin{macrocode} +\newenvironment{quotation}% + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item[]}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quote} +% +% This is also not an ISO requirement, but leave it in anyway. +% +% \begin{environment}{quote} +% The quote environment is like the quotation environment except +% that paragraphs are not indented. +% +% \begin{macrocode} +\newenvironment{quote}% + {\list{}{\rightmargin\leftmargin}% + \item[]}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Theorem} +% +% This document class does not define it's own theorem environments, +% the defaults, supplied by \file{latex.dtx} are available. +% +% \subsubsection{Notes} +% +% ISO requires that information which is essential to the +% understanding of a standard but which is not a requirement +% is to be given in the form of a note. In the Directives edition 2, +% there were three +% styles of note: +% \begin{enumerate} +% \item isolated notes which are marked NOTE - 1, NOTE - 2, etc. +% \item a local grouping of notes marked \\ +% NOTES \\ +% 1 - \ldots \\ +% 2 - \ldots +% \item an isolated note that is not numbered because it is +% the only one in that (sub-) clause of the document. +% \end{enumerate} +% +% The 3rd edition removed the local grouping. +% +% \begin{macro}{\ifinfloat} +% Special consideration has to be given when notes appear within a float. +% \changes{v2}{1997/12/02}{Deleted \cs{ifintable} as \cs{ifinfloat} does the job} +% \begin{macrocode} +\newif\ifinfloat\infloatfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@note} +% \begin{macro}{\c@floatnote} +% \begin{macro}{\thenote} +% \begin{macro}{\thefloatnote} +% Define note counters, where the counter \Lcount{note} for body +% notes gets reset within each new clause and notes +% within floats have their own numbering scheme +% via \Lcount{floatnote}. +% \begin{macrocode} +\newcounter{note}[clause] +\renewcommand{\thenote}{\arabic{note}} +\newcounter{floatnote} +\renewcommand{\thefloatnote}{\arabic{floatnote}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\theHnote} +% \begin{macro}{\theHfloatnote} +% We also need \Lpack{hyperref} representations. +% \changes{v2.4}{2002/07/22}{Added \cs{theHnote} and \cs{theHfloatnote}} +% \begin{macrocode} +\newcommand{\theHnote}{\thenote.\arabic{yextra}} +\newcommand{\theHfloatnote}{\thefloatnote.\arabic{yextra}} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\notelabel} +% Labeling of notes (and examples). +% \begin{macrocode} +\newcommand{\notelabel}[1]{{#1\hfill}} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{notes} +% This environment produced a fixed heading followed by a +% numbered list. The environment is defined in terms of a general list. +% +% Use as: +% \begin{verbatim} +% \begin{notes} +% \begin{note}Text of first note ... \end{note} +% \begin{note}Text of second note ... \end{note} +% \end{notes} +% \end{verbatim} +% +% With the 3rd edition of the ISO Directives, this has been made a no-op +% and is only retained for compatability. The original code was: +% \begin{verbatim} +% \newif\ifinnotes\innotesfalse +% \newenvironment{notes}{\list{}% +% {\ifinfloat \leftmargin 0em \else \leftmargin 2em\fi +% \itemindent 0.5em \labelwidth 0em +% \labelsep 0.5em \listparindent 0em +% \let\makelabel\notelabel} +% \innotestrue +% \Nfont\item[\notesname]\mbox{}\nopagebreak[2]}% +% {\innotesfalse\endlist} +% \end{verbatim} +% +% \changes{v2}{1997/11/30}{notes environment made a no-op} +% \changes{v2.3}{2001/07/06}{Deleted notes environment} +% \end{environment} +% +% \begin{macro}{\@setnoteparams} +% Because notes, and examples, have the same basic layout we use a +% routine to set the various parameters. +% \changes{v2}{1997/12/02}{Added \cs{@setnoteparams}} +% \changes{v2.3}{2001/07/06}{Notes not indented} +% \begin{macrocode} +\newcommand{\@setnoteparams}{% + \setlength{\partopsep}{\z@} + \setlength{\topsep}{\z@} + \setlength{\labelsep}{1em} + \setlength{\itemindent}{\labelsep} + \setlength{\labelwidth}{\z@} + \setlength{\listparindent}{\z@} + \setlength{\leftmargin}{\z@} % added in v2.3 +} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{anote} +% An isolated un-numbered note. +% \changes{v2}{1997/11/30}{dash removed from NOTE label} +% \changes{v2}{1997/12/02}{Adjusted anote margins when in a float} +% \begin{macrocode} +\newenvironment{anote}{\list{}{% +%% \ifinfloat \setlength{\leftmargin}{\z@} \else +%% \setlength{\leftmargin}{2em} \fi + \@setnoteparams} + \Nfont\item[\notename]}% +{\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{note} +% A numbered note. +% \changes{v2.4}{2002/07/22}{Changed note environment for hyperref} +% \begin{macrocode} +\newenvironment{note}{\list{}{% +% \end{macrocode} +% Use the appropriate counter: normally \Lcount{note} but +% \Lcount{floatnote} when in a floating environment. +% \begin{macrocode} + \stepcounter{yextra} + \ifinfloat + \refstepcounter{floatnote} + \let\thenote\thefloatnote + \else + \refstepcounter{note} + \fi +% \end{macrocode} +% Originally we adjusted the margins according to whether we were +% in a notes environment or not. +% \changes{v2}{1997/11/30}{Deleted the dash after NOTE number} +% \changes{v2}{1997/12/01}{Deleted \cs{ifinnotes} test from note environment} +% \changes{v2}{1997/12/02}{Added \cs{ifinfloat} test} +% \begin{macrocode} +%% \ifinfloat \setlength{\leftmargin}{\z@} \else +%% \setlength{\leftmargin}{2em} \fi + \@setnoteparams} + \Nfont\item[\notename~\thenote]}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Examples} +% +% ISO Directives part 3 (2nd edition) had no rules on how to display +% an example, but it did use examples itself; these examples were +% displayed in a format similar to notes. +% +% We provided two styles of example: +% \begin{enumerate} +% \item isolated examples which are marked EXAMPLE - 1, EXAMPLE - 2, etc. +% \item a local grouping of examples marked \\ +% EXAMPLES \\ +% 1 - \ldots \\ +% 2 - \ldots +% \end{enumerate} +% +% The 3rd edition of the Directives does specify some options for +% typesetting examples. A single example in a (sub) clause is +% preceeded by the word `EXAMPLE'. If there are several examples, +% then each is numbered (e.g., `EXAMPLE 3'). It also states that +% all lines of an example shall be inset from the margin or set +% in a smaller font, so that its extent can be determined. +% +% For now, we choose both options. +% +% Implementation is very similar to that for notes. +% +% \begin{macro}{\c@example} +% \begin{macro}{\theexample} +% \begin{macro}{\theHexample} +% Define example counter. Example numbering is only continuous +% within a (sub) clause (we used to have it continuous throughout +% the document). +% \changes{v2}{1997/11/30}{Reset example counter at each clause} +% \changes{v2.4}{2002/07/22}{Added \cs{theHexample}} +% \begin{macrocode} +\newcounter{example}[clause] +\renewcommand{\theexample}{\arabic{example}} +\newcommand{\theHexample}{theexample.\arabic{yextra}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{environment}{examples} +% Originally, this environment produces a fixed heading followed by a +% numbered list. The environment is defined in terms of a general list. +% +% Use as: +% \begin{verbatim} +% \begin{examples} +% \begin{example}Text of first ...\end{example} +% \begin{example}Text of second ... \end{example} +% \end{examples} +% \end{verbatim} +% +% \changes{v2}{1997/11/30}{examples environment made into a no-op} +% With the 3rd edition of the ISO Directives the environment has been +% made a no-op, but is retained for compatibility. +% The code used to be: +% \begin{verbatim} +% \newif\ifinexamples\inexamplesfalse +% \newenvironment{examples}{\list{}% +% {\leftmargin 2em +% \itemindent 0.5em \labelwidth 0em +% \labelsep 0.5em \listparindent 0em +% \let\makelabel\notelabel} +% \inexamplestrue +% \Nfont\item[\examplesname]\mbox{}\nopagebreak[2]}% +% {\inexamplesfalse\endlist} +% \end{verbatim} +% \changes{v2.3}{2001/07/06}{Deleted examples environment} +% \end{environment} +% +% \begin{environment}{anexample} +% An isolated un-numbered example. +% \changes{v2}{1997/11/30}{Added anexample environment} +% \begin{macrocode} +\newenvironment{anexample}{\list{}{% +%% \ifinfloat \setlength{\leftmargin}{\z@} \else +%% \setlength{\leftmargin}{2em} \fi + \@setnoteparams} + \Nfont\item[\examplename]}{\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{example} +% Like the |note| environment. +% \changes{v2}{1997/11/30}{Deleted dash after examples number} +% \changes{v2}{1997/12/01}{Removed \cs{ifinexamples} test in example environment} +% \changes{v2}{1997/12/02}{Added \cs{ifinfloat} test} +% \changes{v2.4}{2002/07/22}{Changed example environment for hyperref} +% \begin{macrocode} +\newenvironment{example}{\list{}{% + \stepcounter{yextra} + \refstepcounter{example} +%% \ifinfloat \setlength{\leftmargin}{\z@} \else +%% \setlength{\leftmargin}{2em} \fi + \@setnoteparams} + \Nfont\item[\examplename~\theexample]}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Listing of references} +% +% ISO has three kinds of literature references, broken into two +% categories. The categories are normative and informative +% references. Within the normative category, references are +% to either published or `unpublished' standards (IS or DIS +% in ISO terminology). +% +% \begin{environment}{nreferences} +% +% The |nreferences| environment is for listing normative +% references. It is implemented as a list. +% +% \begin{macro}{\nreferencelabel} +% Labelling of normative references. +% \begin{macrocode} +\newcommand{\nreferencelabel}[1]{#1,\hfill} +% \end{macrocode} +% \end{macro} +% Define the environment. It is used as: +% \begin{verbatim} +% \begin{nreferences} +% \isref{id}{published standard title} +% \disref{id}{unpublished standard title} +% .... +% \end{nreferences} +% \end{verbatim} +% \begin{macrocode} +\newenvironment{nreferences}{\list{}% + {\leftmargin 0pt \itemindent 0.5em + \labelwidth\z@ \labelsep 0.5em + \let\makelabel\nreferencelabel}}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\isref} +% This is a two parameter command for printing a normative reference to +% a published standard. +% \begin{macrocode} +\newcommand{\isref}[2]{\item[#1]{\itshape #2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\disref} +% This is a two parameter command for printing a normative reference to +% an unpublished standard. ISO requires that each unpublished standard +% should be footnoted as `unpublished'. Awkwardly, only one footnote +% is permitted. This means we have to fiddle with the footnote counter. +% \changes{v2.2}{2000/01/10}{Simplified definition of \cs{disref}} +% \begin{macro}{\ifd@is} +% A flag to denote if there have been any previous disrefs. +% \begin{macrocode} +\newif\ifd@is\d@isfalse +% \end{macrocode} +% \end{macro} +% Now define the |\disref| command. +% \begin{macrocode} +\newcommand{\disref}[2]{\begingroup + \ifd@is +% \end{macrocode} +% This is not the first call to |\disref|, so just footnotemark the entry +% \begin{macrocode} + {\item[#1\protect\@footnotemark]{\itshape #2}} + \else +% \end{macrocode} +% This is the first call, so we have to make the footnote +% \begin{macrocode} + \addtocounter{footnote}{1} + \xdef\@thefnmark{\thefootnote} + \item[#1\protect\@footnotemark]{\itshape #2}% + \footnotetext[\value{footnote}]{\tbpname} + \d@istrue + \fi + \endgroup\d@istrue} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{references} +% +% The |references| environment is for listing informative +% references. It is implemented as a list. +% +% \begin{macro}{\c@infrefctr} +% \begin{macro}{\p@infrefctr} +% \begin{macro}{\theinfrefctr} +% \begin{macro}{\labelinfref} +% Informative references are labelled with a number enclosed in +% square brackets. +% +% In the body of the text, a reference to an informatively +% listed document |n| has to be printed as |[n]|. Use the +% standard \LaTeX\ |\label| command and the|\bref| command for this. +% \begin{macrocode} +\newcounter{infrefctr} +\renewcommand{\p@infrefctr}{} +\renewcommand{\theinfrefctr}{\arabic{infrefctr}} +\newcommand{\labelinfref}{[\arabic{infrefctr}]} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% Define the environment. It is used as: +% \begin{verbatim} +% \begin{references} +% \reference{authors}{title}{publisher and date} +% .... +% \end{references} +% \end{verbatim} +% \begin{macrocode} +\newenvironment{references}{\list{\labelinfref}{\usecounter{infrefctr} + \leftmargin 0pt \itemindent 0.5em + \labelwidth\z@ \labelsep 0.5em}}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\reference} +% This is a three parameter command for printing an informatively +% listed reference document. \\ +% |\reference{|\meta{authors}|}{|\meta{title}|}{|\meta{publisher and date}|}| +% \begin{macrocode} +\newcommand{\reference}[3]{\item {#1} {{\itshape #2}} {#3}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Listing of definitions} +% +% One element of an ISO standard is the listing of definitions +% of terms. +% +% \begin{environment}{olddefinitions} +% The |olddefinitions| environment is for listing terms which +% have been defined in some other standard. It is defined +% in terms of the |itemize| environment. +% \begin{macrocode} +\newenvironment{olddefinitions}% + {\begin{itemize}}% + {\end{itemize}} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\olddefinition} +% Within an |olddefinitions| environment each term is specified by +% the \\ +% |\olddefinition{|\meta{phrase}|}{|\meta{supplement}|}| +% command. +% \begin{macrocode} +\newcommand{\olddefinition}[2]{\item #1 #2} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{definitions} +% Terms being defined within the current document are listed within +% the |definitions| environment. ISO requires that each definition +% be sequentially numbered within the clause in which it is defined. +% This numbering is as though the definition formed a sub-clause. +% \changes{v11}{1997/09/30}{Reimplemented definitions as clauses} +% \changes{v2}{1997/11/30}{Reimplemented definitions} +% \begin{macro}{\c@cl@level} +% A counter for determing the current sectioning level. +% \begin{macrocode} +\newcounter{cl@level} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@defcl} +% We use this internally for the |\definition| command. A default +% definition is suplied here as we are going to renew it, possibly +% several times. +% \begin{macrocode} +\newcommand{\@defcl}[1]{} +% \end{macrocode} +% \end{macro} +% Now we define the |definitions| environment. +% \begin{macrocode} +\newenvironment{definitions}{% +% \end{macrocode} +% First, set the \Lcount{cl@level} according to the sectioning +% level within which the environment is called. +% \begin{macrocode} + \setcounter{cl@level}{6} + \ifnum\value{sssssclause}=0 \setcounter{cl@level}{5} \fi + \ifnum\value{ssssclause}=0 \setcounter{cl@level}{4} \fi + \ifnum\value{sssclause}=0 \setcounter{cl@level}{3} \fi + \ifnum\value{ssclause}=0 \setcounter{cl@level}{2} \fi + \ifnum\value{sclause}=0 \setcounter{cl@level}{1} \fi + \ifnum\value{clause}=0 \setcounter{cl@level}{0} \fi +% \end{macrocode} +% Now redefine an appropriate (s)clause definition to get a number +% on one line, followed by the heading on the next line +% with a bold normal font. A new paragraph is not started after +% the heading, and there is no entry in the ToC. +% As this is done within the +% group automatically set up be the environment, any original definitions +% will get restored afterwards. +% \begin{macrocode} + \ifcase\value{cl@level} % 0, NOT YET IN A CLAUSE + \ClassWarning{iso}{Definitions started before the initial clause} + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforecskip} + \@afterindentfalse + \refstepcounter{clause} + {\raggedright\bfseries \theclause\\ ##1\\}} +% \end{macrocode} +% Do similar things for the other cases. +% \begin{macrocode} + \or % 1, called in a clause + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforescskip} + \@afterindentfalse + \refstepcounter{sclause} + {\raggedright\bfseries \thesclause\\ ##1\\}} + \or % 2, called in an sclause + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforesscskip} + \@afterindentfalse + \refstepcounter{ssclause} + {\raggedright\bfseries \thessclause\\ ##1\\}} + \or % 3, called in an ssclause + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforesscskip} + \@afterindentfalse + \refstepcounter{sssclause} + {\raggedright\bfseries \thesssclause\\ ##1\\}} + \or % 4, called in an sssclause + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforesscskip} + \@afterindentfalse + \refstepcounter{ssssclause} + {\raggedright\bfseries \thessssclause\\ ##1\\}} + \or % 5, called in an ssssclause + \renewcommand{\@defcl}[1]{\setcounter{note}{0}\setcounter{example}{0} + \par + \addvspace{\beforesscskip} + \@afterindentfalse + \refstepcounter{sssssclause} + {\raggedright\bfseries \thesssssclause\\ ##1\\}} + \else % 5+, called in an sssssclause or lower + \ClassWarning{iso}{Definitions too deeply nested} + \renewcommand{\@defcl}[1]{ + \par + \addvspace{\beforesscskip} + \@afterindentfalse + \refstepcounter{sssssclause} + {\raggedright\bfseries \thesssssclause\\ ##1\\}} + \fi}% + {} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\definition} +% Within a |definitions| environment the command +% |\definition{|\meta{phrase}|}{|\meta{definition text}|}| +% is used to specify and define each term. It uses the sectional heading +% definition stored in |\@defcl| set up by the environment. +% \begin{macrocode} +\newcommand{\definition}[2]{\@defcl{#1} #2} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Listing of symbols and abbreviations} +% +% Another possible element in a standard is the listing of symbols +% and abbreviations. This is similar to the original |definitions| +% listing, except that terms are not treated as clauses. +% +% \begin{environment}{symbols} +% \begin{macro}{\symbollabel} +% \begin{macrocode} +\newcommand{\symbollabel}[1]{{#1 \hfill}} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\newenvironment{symbols}{\list{}% + {\itemindent 0em \leftmargin 8em + \labelsep 1em \labelwidth 5em + \let\makelabel\symbollabel}}% + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\symboldef} +% Within a |symbols| environment the command +% |\symboldef{|\meta{symbol}|}{|\meta{meaning}|}| +% is used to specify and explain each symbol or abbreviation. +% \begin{macrocode} +\newcommand{\symboldef}[2]{\item[#1] #2} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Listing of scope items} +% +% Another possible element in a standard is the listing of +% items that are within the scope; conversely, listing +% of items that are out of scope may also be useful. +% +% \begin{environment}{inscope} +% \begin{environment}{outofscope} +% We define synonyms for the |itemize| list environment, and +% initiate the lists with some boilerplate. Use as, for example: +% \begin{verbatim} +% \begin{inscope}{international standard} +% \item ... +% \item ... +% \end{inscope} +% \end{verbatim} +% \begin{macrocode} +\newenvironment{inscope}[1]{% + \inscopename #1: + \begin{itemize}}% + {\end{itemize}} +\newenvironment{outofscope}[1]{% + \outofscopename #1: + \begin{itemize}}% + {\end{itemize}} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% +% \subsection{Setting parameters for existing environments} +% +% \subsubsection{Array and tabular} +% +% \begin{macro}{\arraycolsep} +% The columns in an array environment are separated by +% 2|\arraycolsep|. +% \begin{macrocode} +\setlength\arraycolsep{4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% The columns in an tabular environment are separated by +% 2|\tabcolsep|. +% \begin{macrocode} +\setlength\tabcolsep{4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% The width of rules in the array and tabular environments is given +% by\\ |\arrayrulewidth|. +% \begin{macrocode} +\setlength\arrayrulewidth{.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% The space between adjacent rules in the array and tabular +% environments is given by |\doublerulesep|. +% \begin{macrocode} +\setlength\doublerulesep{2\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tabbing} +% +% \begin{macro}{\tabbingsep} +% This controls the space that the |\'| command puts in. (See +% \LaTeX{} manual for an explanation.) +% \begin{macrocode} +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Minipage} +% +% \begin{macro}{\@minipagerestore} +% The macro |\@minipagerestore| is called upon entry to a minipage +% environment to set up things that are to be handled differently +% inside a minipage environment. In the current styles, it does +% nothing. +% \end{macro} +% +% \begin{macro}{\@mpfootins} +% Minipages have their own footnotes; |\skip||\@mpfootins| plays +% same r\^ole for footnotes in a minipage as |\skip||\footins| does +% for ordinary footnotes. +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framed boxes} +% +% \begin{macro}{\fboxsep} +% The space left by |\fbox| and |\framebox| between the box and the +% text in it. +% \begin{macro}{\fboxrule} +% The width of the rules in the box made by |\fbox| and |\framebox|. +% \begin{macrocode} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Equation and eqnarray} +% +% |equation| and |eqnarray| counters are not required by ISO, and +% the equations are to be left-justified. The default is for the +% left-hand side of equations to be flushleft. + +% \begin{macro}{\theequation} +% The equation counter will be reset at beginning of a new chapter +% and the equation number will be prefixed by the chapter number. +% +% This code must follow the |\chapter| definition, or more exactly +% the definition of the chapter counter. +% \begin{macrocode} +\renewcommand{\theequation}{\arabic{equation}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jot} +% |\jot| is the extra space added between lines of an eqnarray +% environment. The default value is used. +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% The macro |\@eqnnum| defines how equation numbers are to appear in +% equations. Again the default is used. +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% \subsection{Floating objects} +% +% The file \file{latex.dtx} only defines a number of tools with +% which floating objects can be defined. This is done in the +% document class. It needs to define the following macros for each +% floating object of type \texttt{TYPE} (e.g., \texttt{TYPE} = +% figure). +% +% \begin{description} +% \item[\texttt{\bslash fps@TYPE}] +% The default placement specifier for floats of type +% \texttt{TYPE}. +% +% \item[\texttt{\bslash ftype@TYPE}] +% The type number for floats of type \texttt{TYPE}. Each +% \texttt{TYPE} has associated a unique positive \texttt +% {TYPE} number, which is a power of two. E.g., figures might +% have type number 1, tables type number 2, programs type +% number 4, etc. +% +% \item[\texttt{\bslash ext@TYPE}] +% The file extension indicating the file on which the contents +% list for float type \texttt{TYPE} is stored. For example, +% |\ext@figure| = `lof'. +% +% \item[\texttt{\bslash fnum@TYPE}] +% A macro to generate the figure number for a caption. For +% example, |\fnum@TYPE| == `Figure |\thefigure|'. +% +% \item[\texttt{\bslash @makecaption}{\meta{num}}{\meta{text}}] +% A macro to make a caption, with \meta{num} the value produced +% by |\fnum@...| and \meta{text} the text of the caption. It +% can assume it's in a |\parbox| of the appropriate width. +% This will be used for \emph{all} floating objects. +% +% \end{description} +% +% The actual environment that implements a floating object such as +% a figure is defined using the macros |\@float| and |\end@float|, +% which are defined in \file{latex.dtx}. +% +% An environment that implements a single column floating object is +% started with |\@float{|\texttt{TYPE}|}[|\meta{placement}|]| of type +% \texttt{TYPE} with \meta{placement} as the placement specifier. +% The default value of \meta{PLACEMENT} is defined by |\fps@TYPE|. +% +% The environment is ended by |\end@float|. E.g., |\figure| == +% |\@float|{figure}, |\endfigure| == |\end@float|. +% +% \subsubsection{Figure} +% +% Here is the implementation of the figure environment. +% +% \begin{macro}{\c@figure} +% First we have to allocate a counter to number the figures. In this +% class figures are numbered sequentially. +% \begin{macrocode} +\newcounter{figure} +\renewcommand{\thefigure}{\@arabic\c@figure} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@figure} +% \begin{macro}{\ftype@figure} +% \begin{macro}{\ext@figure} +% \begin{macro}{\fnum@figure} +% Here are the parameters for the floating objects of type `figure'. +% \begin{macrocode} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename~\thefigure} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\iffigs} +% We define a flag to tell whether the document contains any figures. +% Elsewhere a flag, |\ifinfloat|, is defined to tell if we are in a float. +% \begin{macrocode} +\newif\iffigs\figsfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@initisofig} +% At the start of a |figure| environment we have to set a flag and do +% some work to deal with the ISO requirements +% for the ToC, and also zero the floatnote counter. +% \changes{v2.2}{2000/01/10}{Added \cs{@initisofig} command} +% \begin{macrocode} +\newcommand{\@initisofig}{% + \iffigs\else\figstrue + \if@filesw \immediate\write\@mainaux{% + \string\gdef\string\setfigs{% + \string\floatlist{\listfigurename}{lof}}} + \fi + \fi +% \end{macrocode} +% Now deal with the possibility that the float may contain notes. +% \begin{macrocode} + \infloattrue\setcounter{floatnote}{0} +} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{figure} +% \begin{environment}{figure*} +% This is the definition of the actual environment. The form with the +% |*| is used for double column figures. +% \begin{macrocode} +\newenvironment{figure}{% + \@initisofig + \@float{figure}}% +% \end{macrocode} +% At the end of the environment we are no longer in a float. +% \begin{macrocode} + {\end@float\infloatfalse} +% \end{macrocode} +% The starred version is similar. +% \begin{macrocode} +\newenvironment{figure*}{% + \@initisofig + \@dblfloat{figure}}% + {\end@dblfloat\infloatfalse} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{Table} +% +% Here is the implementation of the table environment. It is very +% much the same as the figure environment, the additional complication +% being that we have to flag that we are in a table, as well as +% being in a float. +% +% \begin{macro}{\c@table} +% First we have to allocate a counter to number the tables. In this +% class tables are numbered sequentially. +% \begin{macrocode} +\newcounter{table} +\renewcommand{\thetable}{\@arabic\c@table} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@table} +% \begin{macro}{\ftype@table} +% \begin{macro}{\ext@table} +% \begin{macro}{\fnum@table} +% Here are the parameters for the floating objects of type `table'. +% \begin{macrocode} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename~\thetable} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\iftabs} +% We define a flag to tell whether the document contains any tables. +% Elsewhere a flag, |\ifinfloat|, is defined to tell if we are in a float. +% \begin{macrocode} +\newif\iftabs\tabsfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@initisotab} +% Initial code at the start of a |table| environment. +% \changes{v2.2}{2000/01/10}{Added \cs{@initisotab} command} +% \begin{macrocode} +\newcommand{\@initisotab}{% + \iftabs\else\tabstrue + \if@filesw \immediate\write\@mainaux{% + \string\gdef\string\settabs{% + \string\floatlist{\listtablename}{lot}}} + \fi + \fi + \infloattrue\setcounter{floatnote}{0} +} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{table} +% \begin{environment}{table*} +% This is the definition of the actual environment. The form with the +% |*| is used for double column tables. +% \begin{macrocode} +\newenvironment{table}{% + \@initisotab + \@float{table}}% + {\end@float\infloatfalse} +% \end{macrocode} +% The starred version is similar. +% \begin{macrocode} +\newenvironment{table*}{% + \@initisotab + \@dblfloat{table}}% + {\end@dblfloat\infloatfalse} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{A bottom float} +% +% We define an additional float environment. Unless something +% additional is done, this will not be listed in the table +% of contents. +% +% \begin{macro}{\c@bottomfloat} +% \begin{macro}{\thebottomfloat} +% First we have to allocate a counter to number the float. +% \begin{macrocode} +\newcounter{bottomfloat} +\renewcommand{\thebottomfloat}{\@arabic\c@bottomfloat} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fps@bottomfloat} +% \begin{macro}{\ftype@bottomfloat} +% \begin{macro}{\ext@bottomfloat} +% \begin{macro}{\fnum@bottomfloat} +% Here are the parameters for the floating objects of type `bottomfloat'. +% \begin{macrocode} +\def\fps@bottomfloat{b} +\def\ftype@bottomfloat{4} +\def\ext@bottomfloat{lbf} +\def\fnum@bottomfloat{\thebottomfloat} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{bottomfloat} +% \begin{environment}{bottomfloat*} +% This is the definition of the actual environment. The form with the +% |*| is used for double column floats. +% \begin{macrocode} +\newenvironment{bottomfloat}% + {\@float{bottomfloat}}% + {\end@float} +\newenvironment{bottomfloat*}% + {\@dblfloat{bottomfloat}}% + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% +% \subsubsection{Captions} +% +% \begin{macro}{\@makecaption} +% The |\caption| command calls |\@makecaption| to format the +% caption of floating objects. It gets two arguments, +% \meta{number}, the number of the floating object and \meta{text}, +% the text of the caption. Usually \meta{number} contains a string +% such as `Figure 3.2'. The macro can assume it is called inside a +% |\parbox| of right width, with |\normalsize|. +% +% \begin{macro}{\abovecaptionskip} +% \begin{macro}{\belowcaptionskip} +% These lengths contain the amount of white space to leave above +% and below the caption. +% \begin{macrocode} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{10\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% The definition of this macro is |\long| in order to allow more +% then one paragraph in a caption. +% \begin{macrocode} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip +% \end{macrocode} +% We want to see if the caption fits on one line on the page, +% therefore we first typeset it in a temporary box. +% \begin{macrocode} + \sbox\@tempboxa{{\captionsize\bfseries #1 -- #2}}% +% \end{macrocode} +% We can the measure its width. It that is larger than the current +% |\hsize| we typeset the caption as a centered paragraph. +% \begin{macrocode} + \ifdim \wd\@tempboxa >\hsize + {\centering {\captionsize\bfseries #1 -- #2}\par} +% \end{macrocode} +% If the caption fits, we center it. Because this uses an |\hbox| +% directly in vertical mode, it does not execute the |\everypar| +% tokens; the only thing that could be needed here is resetting the +% `minipage flag' so we do this explicitly. +% \begin{macrocode} + \else + \global \@minipagefalse + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\contcaption} +% The |\contcaption| command can be used to put a `continuation' +% caption into a float. It neither increments the float number +% nor makes any entry in the toc listings. +% +% It is called as +% |\contcaption{|\meta{continued/concluded}|}{|\meta{optional text}|}| +% \begin{macrocode} +\newcommand{\contcaption}{\@contcaption\@captype} +% \end{macrocode} +% \begin{macro}{\@contcaption} +% This does the work for us. +% \begin{macrocode} +\long\def\@contcaption#1#2{% + \begingroup + \@parboxrestore + \normalsize + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #2}\par + \endgroup} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Font changing} +% +% Here we supply the declarative font changing commands that were +% common in \LaTeX\ version 2.09 and earlier. These commands work +% in text mode \emph{and} in math mode. They are provided for +% compatibility, but one should start using the |\text...| and +% |\math...| commands instead. These commands are defined using +% |\DeclareTextFontCommand|, a command with three arguments: the +% user command to be defined; \LaTeX\ commands to execute in text +% mode and \LaTeX\ commands to execute in math mode. +% +% \begin{macro}{\rm} +% \begin{macro}{\tt} +% \begin{macro}{\sf} +% +% The commands to change the family. When in compatibility mode we +% select the `default' font first, to get \LaTeX2.09 behviour. +% \begin{macrocode} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% The command to change to the bold series. One should use +% |\mdseries| to explicitly switch back to medium series. +% \begin{macrocode} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sl} +% \begin{macro}{\it} +% \begin{macro}{\sc} +% +% And the commands to change the shape of the font. The slanted and +% small caps shapes are not available by default as math alphabets, +% so those changes do nothing in math mode. However, we do warn the +% user that the selection will not have any effect.One should use +% |\upshape| to explicitly change back to the upright shape. +% \begin{macrocode} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \begin{macro}{\mit} +% +% The commands |\cal| and |\mit| should only be used in math mode, +% outside math mode they have no effect. Currently the New Font +% Selection Scheme defines these commands to generate warning +% messages. Therefore we have to define them `by hand'. +% \begin{macrocode} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Urls, etc} +% +% \changes{v2.1}{1999/02/15}{Added the isourl command} +% ISO uses its own format for typesetting urls. This is implemented here +% via the \file{url} package. +% \begin{macro}{\url} +% \begin{macro}{\isourl} +% The |\url{|\meta{text}|}| command is provided by the \file{url} package. +% It may be used for typesetting email addresses. The +% |\isourl{|\meta{text}|}| command typesets \meta{text} in the format +% required by ISO for an url; that is, the address is underlined and enclosed +% within (not-underlined) angle brackets. +% +% NOTE: The underlining prohibits linebreaking in the url. I also tried +% the \file{ulem} package's |\uline| command, but this also prevented any +% linebreaking, so we might as well stick to the \TeX{} |\underline|. +% \changes{v2.3}{2002/01/10}{Removed underline from \cs{isourl}} +% \begin{macrocode} +%%\newcommand{\isourl}[1]{\texttt{<}\underline{\url{#1}}\texttt{>}} +\newcommand{\isourl}[1]{\texttt{<}\url{#1}\texttt{>}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \section{Cross Referencing} \label{sec:xref} +% +% \subsection{Label referencing} +% +% \begin{macro}{\aref} +% \begin{macro}{\bref} +% \begin{macro}{\cref} +% \begin{macro}{\eref} +% \begin{macro}{\fref} +% \begin{macro}{\nref} +% \begin{macro}{\tref} +% \begin{macro}{\pref} +% Named references to labeled elements. |\bref{|\meta{label id}|}| is +% a reference to a labeled informative bibliographic element (similar +% to the standard \LaTeX\ |\cite| command. The others are to named +% elements of the document. +% \changes{v2.3}{2001/07/06}{Added \cs{pref}} +% \begin{macrocode} +\newcommand{\aref}[1]{\annexrefname~\ref{#1}} +\newcommand{\bref}[1]{[\ref{#1}]} +\newcommand{\cref}[1]{\clauserefname~\ref{#1}} +\newcommand{\eref}[1]{\examplerefname~\ref{#1}} +\newcommand{\fref}[1]{\figurerefname~\ref{#1}} +\newcommand{\nref}[1]{\noterefname~\ref{#1}} +\newcommand{\tref}[1]{\tablerefname~\ref{#1}} +\newcommand{\pref}[1]{\pagerefname~\pageref{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Table of Contents, etc.} +% +% A |\section| command writes a +% |\contentsline{section}{|\meta{title}|}{|\meta{page}|}| command +% on the \file{.toc} file, where \meta{title} contains the +% contents of the entry and \meta{page} is the page number. If +% sections are being numbered, then \meta{title} will be of the +% form |\numberline{|\meta{num}|}{|\meta{heading}|}| where +% \meta{num} is the number produced by |\thesection|. Other +% sectioning commands work similarly. +% +% A |\caption| command in a `figure' environment writes +% +% |\contentsline{figure}{\numberline{|\meta{num}|}{|% +% \meta{caption}|}}{|\meta{page}|}| +% +% on the .\file{lof} file, where \meta{num} is the number produced +% by |\thefigure| and \meta{caption} is the figure caption. It +% works similarly for a `table' environment. +% +% The command |\contentsline{|\meta{name}|}| expands to +% |\l@|\meta{name}. So, to specify the table of contents, we must +% define |\l@chapter|, |\l@section|, |\l@subsection|, ... ; to +% specify the list of figures, we must define |\l@figure|; and so +% on. Most of these can be defined with the |\@dottedtocline| +% command, which works as follows. +% +% |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|^^A +% \meta{numwidth}|}{|^^A +% \meta{title}|}{|\meta{page}|}| +% +% \begin{description} +% \item[\meta{level}] An entry is produced only if\meta{ level} +% $<=$ value of the \Lcount{tocdepth} counter. Note, +% |\chapter| is level 0, |\section| is level 1, etc. +% \item[\meta{indent}] The indentation from the outer left margin +% of the start of the contents line. +% \item[\meta{numwidth}] The width of a box in which the section +% number is to go, if \meta{title} includes a |\numberline| +% command. +% \end{description} +% +% \begin{macro}{\@pnumwidth} +% \begin{macro}{\@tocrmarg} +% \begin{macro}{\@dotsep} +% This command uses the following three parameters, which are set +% with a |\newcommand| (so em's can be used to make them depend upon +% the font). +% \begin{description} +% \item[\texttt{\bslash @pnumwidth}] The width of a box in which the +% page number is put. +% \item[\texttt{\bslash @tocrmarg}] The right margin for multiple +% line entries. One wants |\@tocrmarg| $\ge$ |\@pnumwidth| +% \item[\texttt{\bslash @dotsep}] Separation between dots, in mu +% units. Should be defined as a number like 2 or 1.7 +% \end{description} +% +% \begin{macrocode} +\newcommand{\@pnumwidth}{1.55em} +\newcommand{\@tocrmarg} {2.55em} +\newcommand{\@dotsep}{4.5} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\tocentryskip} +% \begin{macro}{\tocbaseline} +% \begin{macro}{\tocskip} +% We define two lengths and a utility command. +% \begin{macrocode} +\newlength{\tocentryskip} \setlength{\tocentryskip}{1em} +\newlength{\tocbaseline} \setlength{\tocbaseline}{20pt} +\newcommand{\tocskip}[1]{% + \addtocontents{toc}{\protect\vspace{#1}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Table of Contents} +% +% \begin{macro}{\tableofcontents} +% This macro is used to request that \LaTeX{} produces a table of +% contents. In this class the tables of +% contents, figures etc. are always set in single-column style. +% +% \changes{v1}{1995/05/31}{Added `page' above page numbers in +% table of contents.} +% \changes{v2.3}{2001/07/06}{copyright at foot of page ii, not ToC} +% \begin{macrocode} +\newcommand{\tableofcontents}{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi +% \end{macrocode} +% If the document is copyrighted, then the copyright notice is +% placed at the foot of page ii. +% \begin{macrocode} +%%% \setcounter{page}{2} +%%% \thispagestyle{startpage} +%%% \mbox{} +%%% \ifc@pyright\@copyrighttext\fi +% \end{macrocode} +% Set the title for the toc, which must start on page (iii) of the +% document. The actual table of contents is made by calling +% |\@starttoc{toc}|. +% \begin{macrocode} +%%% \cleardoublepage + \setcounter{page}{3} + \pagestyle{headings} + \hbox to \textwidth{{\Cfont \contentsname}\hfil\pagename} +% \end{macrocode} +% Add a locator for a bookmark. +% \changes{v2.4}{2002/07/22}{Added bookmark to \cs{tableofcontents}} +% \begin{macrocode} + \ifisohyper + \pdfbookmark[1]{\contentsname}{isotoc}% + \fi + \begingroup + \parskip\z@ + \@starttoc{toc} + \endgroup +% \end{macrocode} +% Finish by restoring two column mode if necessary. +% \begin{macrocode} + \if@restonecol\twocolumn\fi} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +% \end{macrocode} +% +% Each sectioning command needs an additional macro to format its +% entry in the table of contents, as described above. In this class +% the formatting depends on whether or not the |sect| option +% is used. +% \begin{macro}{\l@clause} +% \begin{macro}{\l@sclause} +% \begin{macro}{\l@ssclause} +% \begin{macro}{\l@sssclause} +% \begin{macro}{\l@ssssclause} +% \begin{macro}{\l@sssssclause} +% \begin{macro}{\l@annex} +% First the default specifications. +% \begin{macrocode} +\newcommand{\l@clause}{\@dottedtocline{1}{0em}{2.3em}} +\newcommand{\l@sclause}{\@dottedtocline{2}{1.5em}{3.2em}} +\newcommand{\l@ssclause}{\@dottedtocline{3}{3em}{4.1em}} +\newcommand{\l@sssclause}{\@dottedtocline{4}{4.5em}{5em}} +\newcommand{\l@ssssclause}{\@dottedtocline{5}{6em}{5.9em}} +\newcommand{\l@sssssclause}{\@dottedtocline{6}{7.5em}{6.8em}} +\newcommand{\l@annex}{\@dottedtocline{1}{0em}{11.0em}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% In this class lists of floats are made to appear as though they +% were an integral part of the table of contents. Further, headings +% are only printed if there is at least one float of the given kind +% in the body of the document. +% +% \begin{macro}{\floatlist} +% For print a heading for a list of floats. +% \changes{v2}{1997/12/04}{Doubled beforeskip in ToC} +% \changes{v2}{1997/12/04}{Added \cs{nopagebreak} after heading text} +% \begin{macrocode} +\newcommand{\floatlist}[2]{% + \vspace{2\tocentryskip} + \hbox to \textwidth{\bfseries #1\hfil} + \vspace*{\tocentryskip} + \nopagebreak + \begingroup + \parskip\z@ + \@starttoc{#2} + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{List of figures} +% +% +% \begin{macro}{\iffigs} +% A flag for figure floats. +% \begin{macrocode} +\newif\iffigs\figsfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\listoffigures} +% This macro is used to request that \LaTeX{} produces a list of +% figures. +% +% \begin{macrocode} +\newcommand{\listoffigures}{% + \ifx\undefined\setfigs\else\setfigs\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\loftnumberline} +% Used to add a dash after a figure/table number in the listing. +% \changes{v2.3}{2001/07/06}{Added \cs{loftnumberline}} +% \begin{macrocode} +\newcommand{\loftnumberline}[1]{#1 --- } + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@figure} +% This macro produces an entry in the list of figures. +% Note that \verb*?Figure M.999 ? is 6.15em. +% \changes{v11}{1997/11/24}{Increased ToC figure number space from 2.3em to 3.0em (caters for M.999)} +% \changes{v2.3}{2001/07/06}{Increased ToC fignum space to 7.5em to cater for name} +% \begin{macrocode} +\newcommand{\l@figure}{\@dottedtocline{1}{0em}{7.5em}} +% \end{macrocode} +% +% \begin{macrocode} +\renewcommand{\l@figure}[2]{% + \vskip \z@ \@plus.2\p@ + {% + \leftskip 0em + \rightskip \@tocrmarg + \parfillskip -\rightskip + \parindent 0em\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima 3.15em + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {\let\numberline\loftnumberline \normalfont\figurename{} #1}\nobreak + \loftfillnum{#2}} +} + +\newcommand{\loftfillnum}[1]{\normalfont% + {\leaders\hbox{$\m@th\mkern 4.5mu\hbox{.}\mkern 4.5mu$}\hfill}\nobreak + \hb@xt@\@pnumwidth{\hfil #1}\par} + + +% \end{macrocode} +% \end{macro} +% +% \subsubsection{List of tables} +% +% \begin{macro}{\iftabs} +% A flag for table floats. +% \begin{macrocode} +\newif\iftabs\tabsfalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\listoftables} +% This macro is used to request that \LaTeX{} produces a list of +% tables. It is very similar to |\listoffigures|. Note that +% \verb*?Table M.999 ? is 5.75em. +% +% \begin{macrocode} +\newcommand{\listoftables}{% + \ifx\undefined\settabs\else\settabs\fi} +% \end{macrocode} +% +% \begin{macro}{\l@table} +% This macro produces an entry in the list of tables. +% \changes{v2.3}{2001/07/06}{Defined \cs{l@table} as a macro} +% \begin{macrocode} +\newcommand{\l@table}{\@dottedtocline{1}{0em}{6.5em}} + +\renewcommand{\l@table}[2]{% + \vskip \z@ \@plus.2\p@ + {% + \leftskip 0em + \rightskip \@tocrmarg + \parfillskip -\rightskip + \parindent 0em\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima 2.75em + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {\let\numberline\loftnumberline \normalfont\tablename{} #1}\nobreak + \loftfillnum{#2}} +} + +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@caption} +% This is a reimplementation of the kernel |\@caption| macro (ltfloat.dtx) +% to cater for the peculiarity of putting the float name before the number in +% the List of\ldots +% \changes{v2.3}{2001/07/06}{Redefined the \cs{@caption} kernel macro} +% \begin{macrocode} +\long\def\@isocaption#1[#2]#3{% + \par + \addcontentsline{\csname ext@#1\endcsname}{#1}% + {\protect\numberline{{\@nameuse{#1name}} {\@nameuse{the#1}} --- }% + {\ignorespaces #2}}% + \begingroup + \@parboxrestore + \if@minipage + \@setminipage + \fi + \normalsize + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} + +% \end{macrocode} +% \end{macro} +% +% \subsubsection{ToC and clause numbering} +% +% Commands are provided, based on the \Lpack{tocvsec2} package, for changing +% the section numbering level and the ToC entry level. +% \changes{v2.2}{2000/01/10}{Added tocvsec2-like commands} +% +% \begin{macro}{\if@knownclause} +% \begin{macro}{\@setclcnt} +% Helper macro to set a sectioning-related counter. Use as +% |\@setclcnt{|\meta{sec}|}{|\meta{counter}|}| to set \Lcount{counter} +% to the level of \meta{sec}. +% \begin{macrocode} +\newif\if@knownclause +\newcommand{\@setclcnt}[2]{ + \@knownclausefalse + \if\isostringsequal{#1}{none} + \setcounter{#2}{-10} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{clause} + \setcounter{#2}{1} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sclause} + \setcounter{#2}{2} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{ssclause} + \setcounter{#2}{3} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sssclause} + \setcounter{#2}{4} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{ssssclause} + \setcounter{#2}{5} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sssssclause} + \setcounter{#2}{6} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{all} + \setcounter{#2}{50} + \@knownclausetrue + \fi + \if@knownclause\else + \ClassError{isov2}{% + Unknown clause command name (#1) + }{% + I'll ignore it. Type \space <return> and I'll continue.\MessageBreak + If you haven't mistyped the name then use \protect\setcounter\space instead.} + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\settocdepth} +% |\settocdepth{|\meta{sec}|}| is the user command for setting +% \Lcount{tocdepth} in the \file{.toc} file to the value corresponding to +% \meta{sec}. It can only be used after the preamble. +% \begin{macrocode} +\newcommand{\settocdepth}[1]{% + \@knownclausefalse + \if\isostringsequal{#1}{none} + \addtocontents{toc}{\protect\setcounter{tocdepth}{-10}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{clause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{1}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sclause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{2}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{ssclause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{3}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sssclause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{4}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{ssssclause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{5}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{sssssclause} + \addtocontents{toc}{\protect\setcounter{tocdepth}{6}} + \@knownclausetrue + \fi + \if\isostringsequal{#1}{all} + \addtocontents{toc}{\protect\setcounter{tocdepth}{50}} + \@knownclausetrue + \fi + \if@knownclause\else + \ClassError{isov2}{% + Unknown clause command name (#1) + }{% + I'll ignore it. Type \space <return> and I'll continue.} + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxtocdepth} +% |\maxtocdepth{|\meta{sec}|}| can be used to initialise \Lcount{tocdepth} +% to the value corresponding to \meta{sec}. This can only be used +% between the end of the preamble and the |\tableofcontents| command. +% \begin{macrocode} +\newcommand{\maxtocdepth}[1]{% + \@setclcnt{#1}{tocdepth} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setsecnumdepth} +% |\setsecnumdepth{|\meta{sec}|}| is the user command for setting +% \Lcount{secnumdepth} to the value for \meta{sec}. It can only be used after +% the preamble. +% \begin{macrocode} +\newcommand{\setsecnumdepth}[1]{\leavevmode% + \@setclcnt{#1}{secnumdepth} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxsecnumdepth} +% |\maxsecnumdepth{|\meta{sec}|}| can be used to initialise +% \Lcount{secnumdepth} +% after the preamble to the value corresponding to \meta{sec}. +% \begin{macrocode} +\newcommand{\maxsecnumdepth}[1]{% + \@setclcnt{#1}{secnumdepth} +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Bibliography} +% +% This class does not implement a bibliography. The |references| +% environment is defined instead. +% +% \subsection{The index} +% +% \begin{environment}{theindex} +% \changes{v2.2}{2000/01/10}{Reconfigured theindex to use \cs{fibicl@use}} +% The environment `theindex' can be used for indices. It makes an +% index with one column, with each entry a separate paragraph. At +% the user level the commands |\item|, |\subitem| and |\subsubitem| +% are used to produce index entries of various levels. When a new +% letter of the alphabet is encountered an amount of |\indexspace| +% white space can be added. +% +% ISO requires that an index, if present, must be the last element +% in the document. +% +% +% \begin{macrocode} +\newenvironment{theindex}% + {\clearpage + \typeout{Index}% + \refstepcounter{clause}% + \tocskip{\tocentryskip}% + \addcontentsline{toc}{index}{\indexname}% + \columnseprule \z@ + \onecolumn{\fibicl@use*{\indexname}} + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \let\item\@idxitem}% + {\clearpage} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\l@index} +% Format the index entry in the table of contents. +% \begin{macrocode} +\newcommand{\l@index}{\@dottedtocline{1}{0em}{0pt}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@idxitem} +% \begin{macro}{\subitem} +% \begin{macro}{\subsubitem} +% Thsee macros are used to format the entries in the index. +% \begin{macrocode} +\newcommand{\@idxitem} {\par\hangindent 40\p@} +\newcommand{\subitem} {\par\hangindent 40\p@ \hspace*{20\p@}} +\newcommand{\subsubitem}{\par\hangindent 40\p@ \hspace*{30\p@}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\indexspace} +% The amount of white space that is inserted between `letter +% blocks' in the index. +% \begin{macrocode} +\newcommand{\indexspace}{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +% \end{macrocode} +% \end{macro} +% +% The program GenIndex, written for processing ISO documents, +% takes an \file{.idx} file and converts it to a |theindex| format. +% The following are the formatting commands output by GenIndex. +% +% \begin{macro}{\indexfill} +% \begin{macro}{\sindexfill} +% \begin{macro}{\ssindexfill} +% Thse define the format of leaders between the (sub-) topic and +% the page number. ISO requires a dotted line between each index +% entry and the page number. +% \begin{macrocode} +\newcommand{\indexfill}{\dotfill} +\newcommand{\sindexfill}{\dotfill} +\newcommand{\ssindexfill}{\dotfill} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\indexsee} +% \begin{macro}{\indexseealso} +% These format entries of type `see \ldots' and `see also \ldots'. +% \begin{macrocode} +\newcommand{\indexsee}[1]{\par \hspace*{2em} \emph{see} #1} +\newcommand{\indexseealso}[1]{\par \hspace*{2em} \emph{see also} #1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\alphaindexspace} +% \begin{macro}{\otherindexspace} +% These format the space between each alphabetic block of entries, +% and correspondingly for entries that begin with an analpahbetic +% character. ISO requires no additional spacing. +% +% These commands take one parameter, intended to be the +% (letter) heading for the next block of entries. For example, +% we could have defined: +% \begin{verbatim} +% \newcommand{\alphaindexspace}[1]{\indexspace +% {\bfseries #1}} +% \end{verbatim} +% for printing a vertical space and a bold heading. +% \begin{macrocode} +\newcommand{\alphaindexspace}[1]{} +\newcommand{\otherindexspace}[1]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% For good measure we provide a style file for users of the +% {\sc makeindex} program. +% +% \begin{macrocode} +%</iso> +%<*ist> + %%%%iso.ist Makeindex style file for ISO documents +group_skip "\n\n" % no vertical space between blocks +headings_flag 0 % make sure headings are turned off +delim_0 " \\dotfill " % dot leaders between entry and page numbers +delim_1 " \\dotfill " +delim_2 " \\dotfill " + +%</ist> +%<*iso> +% \end{macrocode} +% +% \subsection{Footnotes} +% +% \begin{macro}{\footnoterule} +% Usually, footnotes are separated from the main body of the text +% by a small rule. This rule is drawn by the macro |\footnoterule|. +% We have to make sure that the rule takes no vertical space (see +% \file{plain.tex}) so we compensate for the natural heigth of the +% rule of 0.4pt by adding the right amount of vertical skip. +% +% To prevent the rule from colliding with the footnote we first add +% a little negative vertical skip, then we put the rule and make +% sure we end up at the same point where we begun this operation. +% \begin{macrocode} +\renewcommand{\footnoterule}{% + \kern-3\p@ + \hrule width .4\columnwidth + \kern 2.6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% Footnotes are numbered sequentially throughout the document. +% ISO requires footnotes to be a superscripted arabic numeral +% with a right parenthesis. The counter is predefined. +% \begin{macrocode} +% \newcounter{footnote} +\renewcommand{\thefootnote}{\arabic{footnote})} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| +% to produce the actual footnote. The macro gets the text of the +% footnote as its argument and should use |\@thefnmark| as the mark +% of the footnote. The macro |\@makefntext|is called when +% effectively inside a |\parbox| of width |\columnwidth| (i.e., +% with |\hsize| = |\columnwidth|). +% +% An example of what can be achieved is given by the following piece +% of \TeX\ code. +% \begin{verbatim} +% \long\def\@makefntext#1{% +% \@setpar{\@@par +% \@tempdima = \hsize +% \advance\@tempdima-10pt +% \parshape \@ne 10pt \@tempdima}% +% \par +% \parindent 1em\noindent +% \hbox to \z@{\hss\@makefnmark}#1} +% \end{verbatim} +% The effect of this definition is that all lines of the footnote +% are indented by 10pt, while the first line of a new paragraph is +% indented by 1em. To change these dimensions, just substitute the +% desired value for `10pt' (in both places) or `1em'. The mark is +% flushright against the footnote. +% +% In this document class we use a simpler macro, in which the +% footnote text is set like an ordinary text paragraph, with no +% indentation except on the first line of a paragraph, and the +% first line of the footnote. Thus, all the macro must do is set +% |\parindent| to the appropriate value for succeeding paragraphs +% and put the proper indentation before the mark. +% +% +% \begin{macrocode} +\long\def\@makefntext#1{% + \parindent 1em% + \noindent + \hbox to 1.8em{\hss\@makefnmark}#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% The footnote markers that are printed in the text to point to the +% footnotes should be produced by the macro |\@makefnmark|. We use +% the default definition for it. +% \begin{macrocode} +%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +% \end{macrocode} +% \end{macro} +% +% +% \section{Version control tools} \label{sec:vct} +% +% When preparing an international standard the document goes through +% several iterations. In particular it may change due to international +% ballot comments. The commands provided may be used to identify +% changes made to a document during its life cycle. +% +% \subsection{Print control} +% +% Members of the development group often need to see the changes +% between document versions, while the general public does not. +% \begin{macro}{\ifchangemarks} +% This controls the appearence of the version controls defined +% below. +% \begin{macrocode} +\newif\ifchangemarks\changemarksfalse +% \end{macrocode} +% The version controls only work properly when the |draft| option +% is in effect. Also, the command |\changemarkstrue| must be +% put in the document preamble. +% \end{macro} +% +% \begin{macro}{\v@rid} +% This acts as an alias for |\marginpar| when both |changemarks| is +% true and the |draft| option is in effect, otherwise it throws +% away its two arguments. +% \begin{macrocode} +\newcommand{\v@rid}[2]{% + \ifchangemarks + \ifdr@ftd@c + \marginpar[#1]{#2}% + \fi\fi} +% \end{macrocode} +% \end{macro} +% +% \subsection{Change marking} +% +% The following commands flag changes in the typeset document. Each of +% the commands takes one parameter which is intended to be a +% `change number' for tracking purposes. Some also take a text +% parameter which is the changed text. +% +% \begin{macro}{\editorial} +% |\editorial{|\meta{change id}|}| +% Places the \meta{change id} in the document to indicate an editorial +% change. +% \begin{macrocode} +\newcommand{\editorial}[1]{% + \@bsphack + \ifchangemarks + \v@rid{\small\hfill$^{#1}$ED}% + {\small ED$^{#1}$\hfill}% + \fi\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\added} +% |\added{|\meta{text}|}{|\meta{change id}|}| +% Flags the additional \meta{text} with the \meta{change id}. +% \begin{macrocode} +\long\def\added#1#2{% + \@bsphack + \ifchangemarks + \v@rid{\small\hfill$^{#2}\Rightarrow$}% + {\small $\Leftarrow^{#2}$\hfill}% + \emph{#1}% + \else + #1 + \fi\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\deleted} +% |\deleted{|\meta{change id}|}| +% Places the \meta{change id} in the document to indicate that +% some text has been deleted. +% \begin{macrocode} +\newcommand{\deleted}[1]{% + \@bsphack + \ifchangemarks + \v@rid{\small\hfill$^{#1}\Leftarrow$}% + {\small $\Rightarrow^{#1}$\hfill}% + \fi\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\moved} +% |\moved{|\meta{text}|}{|\meta{change id}|}| +% Flags the moved \meta{text} with the \meta{change id}. +% \begin{macrocode} +\long\def\moved#1#2{% + \@bsphack + \ifchangemarks + \v@rid{\small\hfill$^{#2}\Leftrightarrow$}% + {\small $\Leftrightarrow^{#2}$\hfill}% + \emph{#1}% + \else + #1 + \fi\@esphack} +% \end{macrocode} +% \end{macro} +% +% \section{Structure and boilerplate} \label{sec:bp} +% +% ISO standard documents have certain required elements and boilerplate. +% +% \subsection{Structural elements} +% +% \begin{environment}{foreword} +% The |foreword| environment initializes the front matter for a standard +% and starts an unnumbered foreword clause. To ensure that the +% front matter is set in single column we use an environment. +% \changes{v2}{1997/12/04}{Added Foreword to ToC} +% \changes{v2.1}{1999/02/15}{Deleted Foreword from ToC} +% \changes{v2.2}{2000/01/10}{Reconfigured Foreword to use \cs{fibicl@use}} +% \changes{v2.4}{2002/07/22}{Added bookmark to the foreword} +% \begin{macrocode} +\newenvironment{foreword}% + {\tableofcontents + \listoffigures + \listoftables + \clearpage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \fibicl@use*{\forewordname}% +%% \tocskip{\tocentryskip}% +%% \addcontentsline{toc}{clause}{\forewordname}% + \ifisohyper + \pdfbookmark[1]{\forewordname}{isofwd}% + \fi}% + {\if@restonecol\twocolumn\fi} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@copyrighttext} +% This command sets up the copyright notice on the first page of +% the table of contents. The text is set in a |bottomfloat| +% environment in a small size. +% \begin{macrocode} +\newcommand{\@copyrighttext}{% + \vfill +%%% \begin{bottomfloat}[b] + \begin{small} + \copyrightnotice + \end{small} +%%% \end{bottomfloat} +} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{introduction} +% Starts a new unnumbered introduction clause, the body of which is set +% in single column, so we use an environment. +% \changes{v2}{1997/12/04}{Added Introduction to ToC} +% \changes{v2.1}{1999/02/15}{Deleted Introduction from Toc} +% \changes{v2.2}{2000/01/10}{Changed introduction to use \cs{fibicl@use}} +% \changes{v2.4}{2002/07/22}{Added bookmark to introduction} +% \begin{macrocode} +\newenvironment{introduction}% + {\clearpage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \fibicl@use*{\introductionname}% +%% \tocskip{\tocentryskip} +%% \addcontentsline{toc}{clause}{\introductionname}% + \ifisohyper + \pdfbookmark[1]{\introductionname}{isointro} + \fi}% + {\if@restonecol\twocolumn\fi} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\scopeclause} +% Starts a new numbered scope clause. +% This is given the label |;i1| as it is the first numbered clause. +% \changes{v2.2}{2000/01/10}{Scope clause labelled ;i1} +% \begin{macrocode} +\newcommand{\scopeclause}{\clause{\scopename}\label{;i1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\normrefsclause} +% Starts a new numbered normative references clause. +% This is given the label |;i2| as it is the second numbered clause. +% \changes{v2.2}{2000/01/10}{Normrefs clause labelled ;i2} +% \begin{macrocode} +\newcommand{\normrefsclause}{\clause{\normrefsname}\label{;i2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\defclause} +% \begin{macro}{\symclause} +% \begin{macro}{\abbclause} +% \begin{macro}{\defsymclause} +% \begin{macro}{\defabbclause} +% \begin{macro}{\symabbclause} +% \begin{macro}{\defsymabbclause} +% These macros start new clauses for definitions, symbols and abbreviations. +% ISO allows these to be grouped in various ways, depending on the +% amount of material in the respective categories. +% These are each given the label |;i3| as one should be the third numbered clause. +% \changes{v2.2}{2000/01/10}{Definition clauses labelled ;i3} +% \begin{macrocode} +\newcommand{\defclause}{\clause{\defname}\label{;i3}} +\newcommand{\symclause}{\clause{\symname}\label{;i3}} +\newcommand{\abbclause}{\clause{\abbname}\label{;i3}} +\newcommand{\defsymclause}{\clause{\defsymname}\label{;i3}} +\newcommand{\defabbclause}{\clause{\defabbname}\label{;i3}} +\newcommand{\symabbclause}{\clause{\symabbname}\label{;i3}} +\newcommand{\defsymabbclause}{\clause{\defsymabbname}\label{;i3}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\defsubclause} +% \begin{macro}{\symsubclause} +% \begin{macro}{\abbsubclause} +% \begin{macro}{\defsymsubclause} +% \begin{macro}{\defabbsubclause} +% \begin{macro}{\symabbsubclause} +% These macros start new sub-clauses for definitions, symbols and abbreviations. +% ISO allows these to be grouped in various ways, depending on the +% amount of material in the respective categories. +% \begin{macrocode} +\newcommand{\defsubclause}{\sclause{\defname}} +\newcommand{\symsubclause}{\sclause{\symname}} +\newcommand{\abbsubclause}{\sclause{\abbname}} +\newcommand{\defsymsubclause}{\sclause{\defsymname}} +\newcommand{\defabbsubclause}{\sclause{\defabbname}} +\newcommand{\symabbsubclause}{\sclause{\symabbname}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fcandaclause} +% This macro starts a clause `Fundamental concepts and assumptions'. +% The actual title is given by the value of |\fcandaname|. +% \begin{macrocode} +\newcommand{\fcandaclause}{\clause{\fcandaname}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibannex} +% This macro starts a bibliography (which used to be an +% informative annex). +% +% \changes{v2}{1997}{Bibliography is no longer an informative annex} +% \changes{v2.2}{2000/01/10}{Reconfigured \cs{bibannex} to use \cs{fibicl@use}} +% \begin{macrocode} +\newcommand{\bibannex}{% + \typeout{Bibliography} + \clearpage + \fibicl@use*{\bibname} + \tocskip{\tocentryskip} + \addcontentsline{toc}{index}{\bibname} +} +% \end{macrocode} +% \end{macro} +% +% \subsection{Boilerplate} +% +% ISO defines the wording of certain textual elements within a +% standard. +% +% This class has been prepared for standard documents in the +% English language. The boilerplate text commands must be +% redefined for other languages. +% +% \begin{macro}{\copyrightnotice} +% The required English text of the copyright notice. +% \changes{v2.3}{2001/07/06}{Text of \cs{copyrightnotice} changed} +% \begin{macrocode} +\newcommand{\copyrightnotice}{% +\copyright\quad \copyrightname\quad \thesyear\newline +All rights reserved. Unless otherwise specified, no part of +this publication may be reproduced or utilized in any form or +by any means, electronic or mechanical, including photocopying +and microfilm, without permission in writing from %%% the publisher. +%%%\makebox[\textwidth][r]{% +%%%ISO/IEC Copyright Office $\bullet$ Case Postale 56 $\bullet$ +%%%CH-1211 Gen{\`e}ve 20 $\bullet$ Switzerland} +%%\vspace{\baselineskip}\newline +%%\hspace*{1em} International Organization for Standardization\newline +%%\hspace*{1em} Case Postale 56 $\bullet$ CH-2111 Gen{\`e}ve 20 $\bullet$ Switzerland +either ISO at the address below or ISO's member body in the country +of the requester. +\par +\noindent ISO copyright office \\ +Case postale 56. CH-1211 Geneva 20 \\ +Tel. +41 22 749 01 11 \\ +Fax +41 22 734 10 79 \\ +E-mail \texttt{copyright@iso.ch} \\ +Web \texttt{www.iso.ch} +% \end{macrocode} +% For an IS or a Tech Report, need a blank line and place of printing +% \begin{macrocode} +%%\ifisst@ndard \ifc@pyright +%% \vspace{\baselineskip}\newline\noindent +%% Printed in Switzerland +%%\fi\fi +%%\ift@chrep \ifc@pyright +%% \vspace{\baselineskip}\newline\noindent +%% Printed in Switzerland +%%\fi\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fwdbp} +% +% The prescribed text of the initial paragraphs in an ISO Standard +% Foreword. +% \begin{macrocode} +\newcommand{\fwdbp}{\input{isofwdbp}} +% \end{macrocode} +% +% The following is the text contained in the file \file{isofwdbp.tex}. +% \changes{v2.1}{1999/02/15}{Change to foreword boilerplate} +% \changes{v2.3}{2001/07/06}{Change to foreword boilerplate} +% \changes{v2.3}{2001/08/29}{Yet another ISO change to foreword boilerplate} +% \begin{macrocode} +%</iso> +%<*fwd1> +\ProvidesFile{isofwdbp.tex}[2001/08/29 Boilerplate for start of Foreword] + +ISO (the International Organization for Standardization) is a worldwide +federation of national standards bodies (ISO member bodies). The work +of preparing International Standards is normally carried out through +ISO technical committees. Each member body interested in a subject for +which a technical committee has been established has the right to be +represented on that committee. International organizations, +governmental and non-governmental, in liaison with ISO, also take part +in the work. ISO collaborates closely with the International +Electrotechnical Commission (IEC) on all matters of electrotechnical +standardization. + +International Standards are drafted in accordance with the rules given +in the ISO/IEC Directives, Part~2. + +The main task of technical committees is to prepare International Standards. +Draft International Standards adopted by the technical committees are +circulated to the member bodies for voting. Publication as an +International Standard requires approval by at least 75\% of the member +bodies casting a vote. +\par + +%</fwd1> +%<*iso> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tspasfwdbp} +% +% The prescribed text of the initial paragraphs in an ISO +% Technical Specification or PAS Foreword. +% \begin{macrocode} +\newcommand{\tspasfwdbp}{\input{tspasfwdbp}} +% \end{macrocode} +% +% The following is the text contained in the file \file{tspasfwdbp.tex}. +% \changes{v2.3}{2001/07/06}{Added TS/PAS foreword boilerplate} +% \changes{v2.3}{2002/01/10}{Modified TS/PAS foreword boilerplate} +% \begin{macrocode} +%</iso> +%<*tspasfwd1> +\ProvidesFile{tspasfwdbp.tex}[2001/07/06 Boilerplate for start of TS/PAS Foreword] + +ISO (the International Organization for Standardization) is a worldwide +federation of national standards bodies (ISO member bodies). The work +of preparing International Standards is normally carried out through +ISO technical committees. Each member body interested in a subject for +which a technical committee has been established has the right to be +represented on that committee. International organizations, +governmental and non-governmental, in liaison with ISO, also take part +in the work. ISO collaborates closely with the International +Electrotechnical Commission (IEC) on all matters of electrotechnical +standardization. + +International Standards are drafted in accordance with the rules given +in the ISO/IEC Directives, Part~2. + + The main task of technical committees is to prepare International +Standards. +Draft International Standards adopted by the technical committees are +circulated to the member bodies for voting. Publication as an +International Standard requires approval by at least 75\% of the member +bodies casting a vote. + + In other circumstances, particularly when there is an urgent market +requirement for such documents, a technical committee may decide to +publish other types of normative document: +\begin{itemize} +\item an ISO Publicly Available Specification (ISO/PAS) represents an +agreement between technical experts in an ISO working group and is +accepted for publication if it is approved by more than 50\% of the +members of the parent committee casting a vote; + +\item an ISO Technical Specification (ISO/TS) represents an agreement +between the members of a technical committee and is accepted for +publication if it is approved by 2/3 of the members of the committee +casting a vote. +\end{itemize} + + An ISO/PAS or ISO/TS is reviewed every three years with a view to +deciding whether it can be transformed into an International Standard. +\par + +%</tspasfwd1> +% \end{macrocode} +% \end{macro} +% +% The following is the text contained in the file \file{trfwd1.tex}. +% \begin{macrocode} +%<*trfwd1> + %% trfwd1.tex Boilerplate for start of a tech rep Foreword clause +% + + ISO (the International Organization for Standardization) is a worldwide +federation of national standards bodies (ISO member bodies). The work +of preparing International Standards is normally carried out through +ISO technical committees. Each member body interested in a subject for +which a technical committee has been established has the right to be +represented on that committee. International organizations, +governmental and non-governmental, in liaison with ISO, also take part +in the work. ISO collaborates closely with the International +Electrotechnical Commission (IEC) on all matters of electrotechnical +standardization. + + International Standards are drafted in accordance with the rules +given in the ISO/IEC Directives, Part 3. + + The main task of technical committees is to prepare International +Standards. Draft International Standards adopted by the technical +committees are circulated to the member bodies for voting. Publication +as an International Standard requires approval by at least 75\% of the +member bodies casting a vote. + + In other circumstances, particularly when there is an urgent market +requirement for such documents, a technical committee may decide to +publish other types of normative document: +\begin{itemize} +\item an ISO Publicly Available Specification (ISO/PAS) represents an +agreement between technical experts in an ISO working group and is +accepted for publication if it is approved by more than 50\% of the +members of the parent committee casting a vote; + +\item an ISO Technical Specification (ISO/TS) represents an agreement +between the members of a technical committee and is accepted for +publication if it is approved by 2/3 of the members of the committee +casting a vote. +\end{itemize} + + An ISO/PAS or ISO/TS is reviewed every three years with a view to +deciding whether it can be transformed into an International Standard. +\par + + +%</trfwd1> +%<*iso> +% \end{macrocode} +% +% +% \begin{macro}{\trfwdbpi} +% \begin{macro}{\trfwdbpii} +% \changes{v2.1}{1999/03/19}{Removed trfwdbpii command} +% Required texts for a technical report foreword. +% Use as: |\trfwdbpii{|\meta{application field}|}|. +% \begin{macrocode} +\newcommand{\trfwdbpi}{\input{trfwd1}} +\newcommand{\trfwdbpii}[1]{% + \ClassError{iso}{The \protect\trfwdpbii\space command has been removed}% + {Type <return> to proceed, and change your source file before + running LaTeX again.} +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\intropatents} +% |\intropatents| is the boilerplate for the last Introduction +% paragraph dealing with potential additional patent rights. +% \changes{v2.3}{2001/07/06}{Added \cs{fwdpatents} macro} +% \changes{v2.3}{2001/08/29}{Changed \cs{fwdpatents} macro} +% \changes{v2.3}{2002/01/10}{Changed \cs{fwdpatents} macro to \cs{intropatents}} +% \begin{macrocode} +\newcommand{\intropatents}{\par + Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights +other than those mentioned above. +ISO [and/or] IEC shall not be held responsible +for identifying any or all such patent rights.\par} + +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fwdnopatents} +% |\fwdnopatents| is the boilerplate for the Foreword +% paragraph dealing with potential patent rights. +% \changes{v2.3}{2001/08/29}{Added \cs{fwdnopatents} macro} +% \begin{macrocode} +\newcommand{\fwdnopatents}{\par + Attention is drawn to the possibility that some of the elements of this +document may be the subject of patent rights. +ISO shall not be held responsible +for identifying any or all such patent rights.\par} + +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\normrefbp} +% The required text for the introduction +% of the normative references clause. Use as: +% |\normrefbp{|\meta{standard identifier}|}| +% \changes{v2}{1997/11/30}{\cs{normrefbp} boilerplate modified} +% \begin{macrocode} +\newcommand{\normrefbp}[1]{% + +The following normative documents contain provisions which, through +reference in this text, constitute provisions of this #1. +For dated references, subsequent amendments to, or revisions of, +any of these publications do not apply. +However, parties +to agreements based on this #1 +are encouraged to investigate the possibility of applying +the most recent editions of the normative documents indicated below. +For undated references, the latest edition of the normative +document referred to applies. +Members of ISO and IEC maintain registers of currently +valid International Standards. + +} +% \end{macrocode} +% \end{macro} +% +% +% \section{Initialization} \label{sec:init} +% +% \subsection{Words and phrases} +% +% \begin{macro}{\annexname} +% \begin{macro}{\bibname} +% \begin{macro}{\contentsname} +% \begin{macro}{\defname} +% \begin{macro}{\symname} +% \begin{macro}{\abbname} +% \begin{macro}{\defabbname} +% \begin{macro}{\defsymname} +% \begin{macro}{\defsymabbname} +% \begin{macro}{\fcandaname} +% \begin{macro}{\forewordname} +% \begin{macro}{\indexname} +% \begin{macro}{\informativename} +% \begin{macro}{\introductionname} +% \begin{macro}{\normativename} +% \begin{macro}{\normrefsname} +% \begin{macro}{\scopename} +% \begin{macro}{\sectionname} +% \begin{macro}{\symabbname} +% This document class is for documents prepared in the English language. +% To prepare a version for another language, various English words +% and phrases must +% be replaced. The English elements that require replacement are +% defined below in command names. +% +% This list is for titles of document sections. +% +% \changes{v2.1}{1999/02/15}{Changed defname, defabbname, defsymname, defsymabbname} +% \begin{macrocode} +\newcommand{\abbname}{Abbreviations} +\newcommand{\annexname}{Annex} +\newcommand{\bibname}{Bibliography} +\newcommand{\contentsname}{Contents} +\newcommand{\defname}{Terms and definitions} +\newcommand{\defabbname}{Terms, definitions, and abbreviations} +\newcommand{\defsymname}{Terms, definitions, and symbols} +\newcommand{\defsymabbname}{Terms, definitions, abbreviations, and symbols} +\newcommand{\fcandaname}{Fundamental concepts and assumptions} +\newcommand{\forewordname}{Foreword} +\newcommand{\indexname}{Index} +\newcommand{\informativename}{informative} +\newcommand{\introductionname}{Introduction} +\newcommand{\normativename}{normative} +\newcommand{\normrefsname}{Normative references} +\newcommand{\scopename}{Scope} +\newcommand{\sectionname}{Section} +\newcommand{\symname}{Symbols} +\newcommand{\symabbname}{Symbols and abbreviations} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\copyrightname} +% \begin{macro}{\examplename} +% \begin{macro}{\figurename} +% \begin{macro}{\inscopename} +% \begin{macro}{\ISname} +% \begin{macro}{\listannexname} +% \begin{macro}{\listfigurename} +% \begin{macro}{\listtablename} +% \begin{macro}{\notename} +% \begin{macro}{\outofscopename} +% \begin{macro}{\pagename} +% \begin{macro}{\tablename} +% \begin{macro}{\tbpname} +% +% These are the names and phrases used for general elements. +% +% \changes{v2}{1997/11/30}{\cs{examplesname} and \cs{notesname} deleted} +% \changes{v2.3}{2001/07/06}{Additional forms of \cs{ISname}} +% \begin{macrocode} +\newcommand{\copyrightname}{ISO} +\newcommand{\examplename}{EXAMPLE} + %%%\newcommand{\examplesname}{EXAMPLES} +\newcommand{\figurename}{Figure} +\newcommand{\inscopename}{The following are within the scope of this } +\newcommand{\ISname}{INTERNATIONAL STANDARD} +\iffdisstandard\renewcommand{\ISname}{FINAL DRAFT INTERNATIONAL STANDARD}\fi +\ifdisstandard\renewcommand{\ISname}{DRAFT INTERNATIONAL STANDARD}\fi +\ifcdstandard\renewcommand{\ISname}{COMMITTEE DRAFT}\fi +\ifwdstandard\renewcommand{\ISname}{WORKING DRAFT}\fi +\iftechrep\renewcommand{\ISname}{TECHNICAL REPORT}\fi +\iftechspec\renewcommand{\ISname}{TECHNICAL SPECIFICATION}\fi +\ifpaspec\renewcommand{\ISname}{PUBLICLY AVAILABLE SPECIFICATION}\fi +\ifotherdoc\renewcommand{\ISname}{}\fi +\newcommand{\listannexname}{Annexes} +\newcommand{\listfigurename}{Figures} +\newcommand{\listtablename}{Tables} +\newcommand{\notename}{NOTE} + %%%\newcommand{\notesname}{NOTES} +\newcommand{\outofscopename}{The following are outside the scope of this } +\newcommand{\pagename}{Page} +\newcommand{\tablename}{Table} +\newcommand{\tbpname}{To be published.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\annexrefname} +% \begin{macro}{\clauserefname} +% \begin{macro}{\examplerefname} +% \begin{macro}{\figurerefname} +% \begin{macro}{\noterefname} +% \begin{macro}{\tablerefname} +% \begin{macro}{\pagerefname} +% These are the names for referenced document elements. Except when +% starting a sentence or referring to a figure, references to document +% elements start with +% a lower case letter. +% \changes{v2}{1997/11/30}{\cs{figurename} changed to print Figure} +% \changes{v2}{1997/11/30}{\cs{tablerefname} changed to print Table} +% \changes{v2}{1997/11/30}{Added \cs{noterefname} command} +% \changes{v2.3}{2001/07/06}{Added \cs{pagerefname} command} +% \begin{macrocode} +\newcommand{\annexrefname}{annex} +\newcommand{\clauserefname}{clause} +\newcommand{\examplerefname}{example} +\newcommand{\figurerefname}{Figure} +\newcommand{\noterefname}{note} +\newcommand{\tablerefname}{Table} +\newcommand{\pagerefname}{page} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\abstractname} +% \begin{macro}{\appendixname} +% \begin{macro}{\chaptername} +% \begin{macro}{\partname} +% \begin{macro}{\refname} +% These names are used in the standard \LaTeX\ classes but are not +% applicable in this class. We just make them null. +% \begin{macrocode} +\newcommand{\abstractname}{} +\newcommand{\appendixname}{} +\newcommand{\chaptername}{} +\newcommand{\partname}{} +\newcommand{\refname}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Date} +% +% \begin{macro}{\today} +% This macro uses the \TeX\ primitives |\month|, |\day| and |\year| +% to provide the date of the \LaTeX-run. +% \begin{macrocode} +\newcommand{\today}{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +% \end{macrocode} +% \end{macro} +% +% \subsection{Two column mode} +% +% \begin{macro}{\columnsep} +% This gives the distance between two columns in two column mode. +% \begin{macrocode} +\setlength\columnsep{10\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnseprule} +% This gives the width of the rule between two columns in two +% column mode. We have no visible rule. +% \begin{macrocode} +\setlength\columnseprule{0\p@} +% \end{macrocode} +% \end{macro} +% +% \subsection{The page style} +% We use the page style \pstyle{headings} by +% default and start with roman numbering for the +% front matter, this being reset to arabic by the title +% or first main matter section/clause. +% \begin{macrocode} +\pagestyle{headings} +\pagenumbering{roman} +% \end{macrocode} +% We set the sectional counters to zero and the |tocdepth| to +% one (clauses only listed). +% \begin{macrocode} +\setcounter{clause}{0} +\setcounter{annex}{0} +\setcounter{tocdepth}{1} +% \end{macrocode} +% +% +% \subsection{Single or double sided printing} +% +% +% We do not try to make each page as long as all the others, even +% though it is two-side printing. +% \begin{macrocode} +\@twosidetrue +\raggedbottom +% \end{macrocode} +% When the \Lopt{twocolumn} option was specified we call +% |\twocolumn| to activate this mode. We try to make each column as +% long as the others, but call |sloppy| to make our life easier. +% \begin{macrocode} +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +% \end{macrocode} +% Normally we call |\onecolumn| to initiate typesetting in one +% column. +% \begin{macrocode} +\else + \onecolumn +\fi +% \end{macrocode} +% +% The end of the class definitions. +% \begin{macrocode} +%</iso> +% \end{macrocode} +% +% +% +% \section{The \file{askinc} package} \label{sec:askinc} +% +% This package provides an interactive `include' facility. It was developed +% by Phil Spiby of CADDETC, Leeds, United Kingdom in the late eighties. +% \begin{macrocode} +%<*inc> +% \end{macrocode} +% +% \begin{macro}{\infile} +% The |\infile{|\meta{file name}|}| command is a cross between the +% |\input| and |\include| commands. When this package is used, at +% runtime the user is asked to interactively specify a comma-seperated +% list of the names of |\infile|d files that are to be processed. In +% this sense it acts like the |\include| and |\includeonly| pair of +% commands. If no list is entered at the terminal (by hitting the +% \meta{RETURN} key) then all |\infile|d files are processed. In this +% sense it acts like the |\input| command. However, like the |\include| +% command, an |\infile|d file cannot contain any other |\infile|d file. +% +% \begin{macro}{temp} +% Define a counter \Lcount{temp} for general use within the include files. +% This is required to ensure that the contents of |\incfiles| is +% used and not |\incfiles| the string. +% \begin{macrocode} +\newcounter{temp} +% \end{macrocode} +% \end{macro} +% Now for the rest of the definition. +% \begin{macrocode} +\def\readinclude#1\endread{\gdef\myincludeonly{\includeonly{#1}}} +\long\def\stripspace#1 \nextspace{#1} +\typeout{Which files do you want processing ?} +\message{enter names (separated by commas) or <RET> for all.} +\message{}\global\read-1 to\incfiles +\if\incfiles\par\let\infile\input +\else\let\infile\include +\edef\incfiles{\expandafter\stripspace\incfiles\nextspace} +\expandafter\readinclude\incfiles\endread\myincludeonly\fi +% \end{macrocode} +% \end{macro} +% +% The end of the askinc package. +% \begin{macrocode} +%</inc> +% \end{macrocode} +% +% +% +% +% +% +% \bibliographystyle{alpha} +% +% \begin{thebibliography}{GMS94} +% +% \bibitem[GMS94]{GOOSSENS94} +% Michel Goossens, Frank Mittelbach, and Alexander Samarin. +% \newblock \emph{The LaTeX Companion}. +% \newblock Addison-Wesley Publishing Company, 1994. +% +% \bibitem[ISO97]{ISOD397} +% ISO/IEC Directives Part 3. +% \newblock \emph{Drafting and presentation of International +% Standards}, Third edition, 1997. +% +% \bibitem[ISO01]{ISOD201} +% ISO/IEC Directives Part 2. +% \newblock \emph{Rules for the structure and drafting +% of International Standards}, Fourth edition, 2001. +% +% \bibitem[Wil96]{PRW96i} +% Peter~R. Wilson. +% \newblock \emph{{LaTeX for standards: The LaTeX package files user manual}}. +% \newblock NIST Report NISTIR, June 1996. +% +% \end{thebibliography} +% +% +% \Finale +% +\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 \~} + + + diff --git a/macros/latex/contrib/isostds/iso/isoe.ins b/macros/latex/contrib/isostds/iso/isoe.ins new file mode 100644 index 0000000000..2a1bfab67b --- /dev/null +++ b/macros/latex/contrib/isostds/iso/isoe.ins @@ -0,0 +1,96 @@ +%% +%% isoe.dtx +%% This work has been partially funded by the US government and is +%% not subject to copyright. +%% +%% This program is provided under the terms of the +%% LaTeX Project Public License distributed from CTAN +%% archives in directory macros/latex/base/lppl.txt. +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Author: Peter Wilson (CUA and NIST) +%% now at: peter.r.wilson@boeing.com +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{isoe.ins} +\input docstrip.tex +\preamble + + This work has been partially funded by the US government and is + not subject to copyright. + + 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 and NIST) + now at: peter.r.wilson@boeing.com + +\endpreamble + +\keepsilent + +%% \Msg{*** Generating the driver file ***} + +%% \generateFile{isoe.drv}{t}{\from{isoe.dtx}{driver}} + +\Msg{*** Generating the LaTeX2e document class files ***} + +\generateFile{isov2.cls}{t}{\from{isoe.dtx}{iso}} + +\Msg{*** Generating the LaTeX2e document class option files ***} + +\generateFile{iso9.clo}{t}{\from{isoe.dtx}{9pt}} +\generateFile{iso10.clo}{t}{\from{isoe.dtx}{10pt}} +\generateFile{iso11.clo}{t}{\from{isoe.dtx}{11pt}} + +\Msg{*** Generating the LaTeX2e package files ***} + +\generateFile{askincv1.sty}{t}{\from{isoe.dtx}{inc}} + +\Msg{*** Generating the boilerplate files ***} + +\generateFile{isofwdbp.tex}{t}{\from{isoe.dtx}{fwd1}} +\generateFile{tspasfwdbp.tex}{t}{\from{isoe.dtx}{tspasfwd1}} +\generateFile{trfwd1.tex}{t}{\from{isoe.dtx}{trfwd1}} + +\Msg{*** Generating the makeindex style file ***} + +\generateFile{iso.ist}{t}{\from{isoe.dtx}{ist}} + +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* For a LaTeX2e system:} +\Msg{* \space\space isov2.cls} +\Msg{* \space\space iso9.clo} +\Msg{* \space\space iso10.clo} +\Msg{* \space\space iso11.clo} +\Msg{* \space\space askincv1.sty} +\Msg{* \space\space isofwdbp.tex} +\Msg{* \space\space tspasfwdbp.tex} +\Msg{* \space\space trfwd1.tex} +\Msg{*} +\Msg{*} +\Msg{* For MakeIndex:} +\Msg{* \space\space iso.ist} +\Msg{*} +\Msg{*} +\Msg{* To produce the documented source run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{* Process any name.idx file by:} +\Msg{* \space\space\space\space makeindex -s gind.ist name} +\Msg{* Process any name.glo file by:} +\Msg{* \space\space\space\space makeindex -s gglo.ist -o name.gls name.glo} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} + +\endinput diff --git a/macros/latex/contrib/isostds/iso/isoe.pdf b/macros/latex/contrib/isostds/iso/isoe.pdf Binary files differnew file mode 100644 index 0000000000..cdcb7740f8 --- /dev/null +++ b/macros/latex/contrib/isostds/iso/isoe.pdf diff --git a/macros/latex/contrib/isostds/iso/isoman.pdf b/macros/latex/contrib/isostds/iso/isoman.pdf Binary files differnew file mode 100644 index 0000000000..9dcdc520bf --- /dev/null +++ b/macros/latex/contrib/isostds/iso/isoman.pdf diff --git a/macros/latex/contrib/isostds/iso/isoman.tex b/macros/latex/contrib/isostds/iso/isoman.tex new file mode 100644 index 0000000000..18eb6cf29d --- /dev/null +++ b/macros/latex/contrib/isostds/iso/isoman.tex @@ -0,0 +1,3874 @@ +% isoman.tex User guide for ISO style files for LaTeX(2e) August 2002 +% +\documentclass[wd,letterpaper,copyright]{isov2} +%\documentclass[wd,letterpaper,draft]{isov2} +%\documentclass{isov2} + +%%%\usepackage[isoman]{tex4ht} + +\usepackage{comment} + +%%%\usepackage{times} +\usepackage{isorot} +\usepackage{xtab} +\usepackage{hyphenat} + +\ifpdf + \pdfoutput=1 + \usepackage[plainpages=false, + pdfpagelabels, + bookmarksnumbered, + hyperindex=true + ]{hyperref} +\fi + +\standard{LaTeX for ISO standards} +\yearofedition{2002} +\languageofedition{(E)} + +%\partno{3456} +\changemarkstrue + +\makeindex + +% Uncomment the following to change the Foreword heading +%\renewcommand{\forewordname}{Avant-propos} % change the Foreword title + +\setcounter{tocdepth}{3} % add more levels to table of contents +% +% remainder of preamble is some special macro definitions +\makeatletter +% the \meta{} command +% +\begingroup +\obeyspaces% +\catcode`\^^M\active% +\gdef\meta{\begingroup\obeyspaces\catcode`\^^M\active% +\let^^M\do@space\let \do@space% +\def\-{\egroup\discretionary{-}{}{}\hbox\bgroup\it}% +\m@ta}% +\endgroup +\def\m@ta#1{\leavevmode\hbox\bgroup\texttt{<}\textit{#1}\/\texttt{>}\egroup + \endgroup} +\def\do@space{\egroup\space + \hbox\bgroup\it\futurelet\next\sp@ce} +\def\sp@ce{\ifx\next\do@space\expandafter\sp@@ce\fi} +\def\sp@@ce#1{\futurelet\next\sp@ce} +% +% +\makeatother +% +% the \latex command +\newcommand{\latex}{LaTeX} +\newcommand{\tex}{TeX} +% +% the \file{} command +% +\newcommand{\file}[1]{\textsf{#1}} +% +\makeatletter +% index a command +\newcommand{\bs}{\symbol{'134}} +\newcommand{\ixcom}[1]{\index{#1/ @{\tt \protect\bs #1}}} +% index an environment +\newcommand{\ixenv}[1]{\index{#1 @{\tt #1} (environment)}} +% index a starred environment +\newcommand{\ixenvs}[1]{\index{#1s @{\tt #1*} (environment)}} +% index an option +\newcommand{\ixopt}[1]{\index{#1 @{\tt #1} (option)}} +% index a package +\newcommand{\ixpack}[1]{\index{#1 @\file{#1} (package)}} +% index a class +\newcommand{\ixclass}[1]{\index{#1 @\file{#1} (class)}} +% index in typewriter font +\newcommand{\ixtt}[1]{\index{#1@{\tt #1}}} +% index LaTeX +\newcommand{\ixltx}{\index{latex@\latex}} +% index LaTeX 2e +\newcommand{\ixltxe}{\index{latex2e@\latex 2e}} +% index LaTeX v2.09 +\newcommand{\ixltxv}{\index{latex209@\latex{} v2.09}} +\makeatother +% +% end of preamble +% +\begin{document} + + +\begin{cover} +\vspace*{4in} +\begin{center} +\Huge\bfseries LaTeX for ISO standards +\end{center} +\begin{center} +\bfseries 2002/08/10 +\end{center} +\begin{center} +Peter Wilson \\ +\texttt{peter.r.wilson@boeing.com} +\end{center} +\clearpage +\end{cover} +%%%\clearpage + +\begin{foreword} +\fwdbp +\fwdnopatents +Annexes~\ref{anx:extraiso} and~\ref{anx:lord} +are an integral part of this document. +Annexes~\ref{anx:indexing}, \ref{anx:sgml}, \ref{anx:getstuff}, +and \ref{anx:changes} +are for information only. +\end{foreword} + + +\begin{introduction} + + This document describes the use of the \file{isov2} \latex{} class +file and some package files in preparing ISO standard documents. + +\sclause*{Overview} + + This document describes a \latex{} class file, called \file{isov2}, + for typesetting ISO standards. It also +provides descriptions of some particular package files (e.g., \file{isorot}) +that have been developed to support the writing of ISO standards. +The electronic source of this document also provides an example of the +use of these files. + + + + The current set of files~\bref{isoe} have been developed by +Peter Wilson (RPI, CUA and NIST, Boeing) +from files written by Kent Reed (NIST). +In turn, these were revisions of files originally created by +Phil Spiby (CADDETC, UK), based on early work by +Phil Kennicott (GE).\footnote{In mid 1994 \latex{} was upgraded from +version 2.09 to what is called \latex 2e. The files described in +earlier versions this document were compatible with both versions +of \latex. Starting with the October 1997 release, +support was withdrawn from any \latex{} v2.09 file versions.} + + + Documents produced with the \latex{} files have been reviewed +by the ISO Editorial Board in Geneva for conformance to their typographical +requirements. The first review was of a series of Draft International +Standard documents. This review resulted in some changes to the style +files. The second review was of a series of twelve International Standard +documents (ISO 10303:1994). Likewise, this review led to changes in the +style files to bring the documents into compliance. + + With the publication of the ISO~10303:1994 standard, the opportunity +was taken +to provide a new baseline release of the package files. +The new baseline release was also designed to address the fact that +a major update of \latex{} to \latex 2e took place during 1994. \latex 2e +is now the officially supported version. However, some users needed time +to convert to using \latex 2e. Consequently, although the +facilities described in the original version of this document +were common for both +\latex{} v2.09 and \latex 2e users, there were two different +implementations. + + Because ISO standard documents have a very structured layout, the class +and package files have been designed to reflect the logical document structure +to a much greater extent than the `standard' \latex{} files. Further, ISO +documents are published in more than one language. The files described +here are written for the English language, but the language-specific elements +have been parameterized for easy modification for publication in other +official ISO languages, such as French. + + In 1997 ISO produced a new version of their Directives on the +requirements for the layout of ISO documents. These were not completely +unambiguous as to their intent; the current version was released in +2001. Members of ISO TC184/SC4 have worked with +the ISO Editorial Board and have reached an agreement that more precisely +identifies the requirements. The current version of the \latex{} files +implements that agreement. + +\begin{note} +The original of this manual has been typeset using the \verb?draft? +option in order to display its effect of placing a black box at the +end of each line that is longer than the normal width of the text. +\end{note} + +\begin{note} +The author of this document may be contacted at +\texttt{peter.r.wilson@boeing.com}. +\end{note} + +\end{introduction} + +\title{LaTeX for ISO standards: User manual}% +{Peter Wilson}% +{August 2002} + + +\scopeclause + +This manual describes a set of \ixltx\latex{} files for typesetting +documents according to the ISO Directives Part 3 (third edition, 1997), +together with some elements from the ISO~10303 Supplementary Directives. + +\begin{inscope}{manual} +\item use of \latex{} for preparing ISO standard documents. +\end{inscope} + +\begin{outofscope}{manual} +\item use of \latex{} in general; +\item use of other document preparation systems. +\end{outofscope} + +\textbf{IMPORTANT:} No matter whether or not there are copyright attributions +to ISO, this document is \emph{not} copyrighted by ISO. Any copyright +markings are for illustrative purposes only. This document is released under +the LaTeX Project Public Licence. + +\normrefsclause \label{sec:nrefs} + +\normrefbp{manual} +\begin{nreferences} + +\isref{ISO/IEC Directives, Part 2}{Rules for the structure and drafting of + International Standards. (Fourth edition, 2001)} + +\isref{ISO TC 184/SC4 N1217:2001(E)}{SC4 Supplementary directives --- Rules + for the structure and drafting of SC4 + standards for industrial data. (2001--11--01).} + +\isref{ISO/IEC 8824-1:1998}{Information technology --- + Abstract Syntax Notation One (ASN.1): + Specification of basic notation.} + +\disref{ISO}{Camera-ready copy (CRC) --- + Submission requirements and ISO type specification. + (Version 1.0, 1996-04-26)} + +\end{nreferences} + +\defabbclause +%\clause{Terms, definitions, and abbreviations} + +\defsubclause +%\sclause{Terms and definitions} + + For the purposes of this manual, the following definitions +apply. + +\begin{definitions} +\definition{boilerplate}{text whose wording is fixed and has been agreed + to be present in a specific type of document} \index{boilerplate} +\definition{style file}{a set of \latex{} macros assembled into a single + file with an extension \file{.sty}} + \index{style file}\ixltx\index{file!.sty} +\definition{package file}{a style file for use with \latex 2e}\ixltxe +\end{definitions} + +\abbsubclause +%\sclause{Abbreviations} + + For the purposes of this manual, the following abbreviations + apply. + +\begin{symbols} +\symboldef{CD}{Committee Draft}\index{CD} +\symboldef{DIS}{Draft International Standard}\index{DIS} +\symboldef{FDIS}{Final Draft International Standard}\index{DIS} +\symboldef{IS}{International Standard}\index{IS} +\symboldef{IS-REVIEW}{The documentation style accepted by the ISO + Editorial Board review (September 1994) of twelve IS documents + (the initial release of ISO~10303) for compliance with ISO + typographical and layout requirements.}\index{IS-REVIEW} +\symboldef{ISOD}{ISO/IEC Directives, Part 2}\index{ISOD}\index{ISO/IEC Directives} +\symboldef{PAS}{Publicly Available Specification}\index{PAS} +\symboldef{SD}{SC4 Supplementary directives}\index{SD}\index{Supplementary directives} +\symboldef{TR}{Technical Report}\index{TR} +\symboldef{TS}{Technical Specification}\index{TS} +\symboldef{WD}{Working Draft}\index{WD} +\symboldef{CRC}{The ISO \emph{Camera-ready copy (CRC)} document}\index{CRC} +\symboldef{ToC}{table of contents}\index{ToC} +\end{symbols} + +\clause{Conformance requirements} \label{sec:iconform} + + The \latex{} macro source files shall not be modified. + + If there is a need to modify the macro definitions then the +modifications shall be defined in a separate \file{.sty}\index{file!.sty} + file (or files), using the +\latex{} \verb|\renewcommand|\ixcom{renewcommand} +and/or the +\verb|\renewenvironment|\ixcom{renewenvironment} +commands as appropriate. The resulting \file{.sty} file(s) shall then +be called in within the preamble\index{preamble} portion of the +document to be typeset. + + Author specified \verb|\label{...}| commands shall not start with +the characters \verb|;i| (semicolon and `i'); definition of labels +starting with these characters is reserved for the maintainer of the +facility files. + + +\fcandaclause +%\clause{Fundamental concepts and assumptions} + + It is assumed that the reader of this document is familiar with the +\latex{} document preparation system.\ixltx + +\begin{note}Reference~\bref{lamport} in the bibliography describes the + \latex{} system. +\end{note} + + The reader is also assumed to be familiar with the ISO/IEC Directives +Part~2 (ISOD\index{ISOD}). Agreements reached between the ISO Editorial Board +and ISO TC184/SC4 are documented in the SC4 Supplementary Directives +(SD\index{SD}). + + If there are any discrepancies between the layout and wording of this +document and the requirements of the ISO/IEC Directives Part~2, +then the requirements in that document shall be +followed for any ISO standard document. + + The \file{isov2}\ixclass{isov2} class requires the +\file{url}\ixpack{url} package. + +\begin{note} +Additional \latex{} facilities specifically designed for ISO~10303 are +defined and described elsewhere~\bref{stepsty}. +\end{note} + + Because of many revisions over the years to the files described +herein, a naming convention has been adopted for them. +The primary name of the file is suffixed by \file{v\#} or \file{\#}, where +\file{\#} is the version number of the file in question. +All file primary names have been limited to a +maximum of eight characters. + +\begin{note} + Table~\ref{tab:curfiles} shows the versions of the files that were +current at the time of publication. +\end{note} % end note +\begin{note} +Starting with the October 1997 release, files that were specific to +\ixltxv\latex{} v2.09 are no +longer either supported or supplied. +\end{note} + +\begin{note} +As of 1999, the \file{uschyp}\ixpack{uschyp} package is no longer supported. +It has been replaced by the +\file{hyphenat}\ixpack{hyphenat}\index{hyphenat.sty@\file{hyphenat.sty}} +package. +\end{note} + +\ixclass{isov2}\index{isov2.cls@\file{isov2.cls}} +% \index{isonev11.sty@\file{isonev11.sty}} +\ixopt{9pt}\index{iso9.clo@\file{iso9.clo}} +% \index{iso9.sty@\file{iso9.sty}} +\ixopt{10pt}\index{iso10.clo@\file{iso10.clo}} +% \index{iso10.sty@\file{iso10.sty}} +\ixopt{11pt}\index{iso11.clo@\file{iso11.clo}} +% \index{iso11.sty@\file{iso11.sty}} +\ixpack{isorot}\index{isorot.sty@\file{isorot.sty}} +% \index{isrotne1.sty@\file{isrotne1.sty}} +\ixpack{askinc}\index{askincv1.sty@\file{askincv1.sty}} +\ixpack{xtab}\index{xtab.sty@\file{xtab.sty}} +\ixpack{uschyp}\index{uschyp.sty@\file{uschyp.sty}} +% \index{uschypne.sty@\file{uschypne.sty}} + +\begin{table} +\centering +\caption{Current file versions} \label{tab:curfiles} +\begin{tabular}{|l|l|} \hline +\textbf{Facility} & \textbf{File} \\ \hline\hline +\file{iso} & \file{isov2.cls} \\ +9pt option & \file{iso9.clo} \\ +10pt option & \file{iso10.clo} \\ +11pt option & \file{iso11.clo} \\ +\file{isorot} & \file{isorot.sty} \\ +\file{askinc} & \file{askincv1.sty} \\ +\file{xtab} & \file{xtab.sty} \\ +\file{hyphenat} & \file{hyphenat.sty} \\ \hline +\end{tabular} +\end{table} + + +\begin{anexample} At the time of +publication of this document, any references to \file{iso.cls} should be +read as actually referring to \file{isov2.cls}, and similarly for references +to other files. +\end{anexample} % end example + + +\begin{note}This document is not intended for publication as a standard, +although it has been laid out in a +similar, but not necessarily identical, manner.\end{note} % end note + + +\clause{The \file{iso} class facility} + + The \latex{} \file{isov2}\ixclass{isov2} class file +is a general file for use in preparing ISO +standard documents using the \latex{} document preparation system. + + As usual, any \latex{} document has the following structure: +\begin{verbatim} +\documentclass[<list of options>]{isov2} +% preamble goes here +\begin{document} +% document body goes here +\end{document} +\end{verbatim} + +\sclause{Options} + + The \file{isov2}\ixclass{isov2} class file supports the following options: +\begin{itemize} +\item \verb|draft|\ixopt{draft} for a draft document where + overfull horizontal boxes are marked, marginal notes are allowed, + and ISO copyright text is not placed in the document; +\item \verb|final|\ixopt{final} the opposite of \verb|draft| + (this is the default); +\item \verb|letterpaper|\ixopt{letterpaper} for printing + on US letter size paper; +\item \verb|a4paper|\ixopt{a4paper} for printing on A4 + size paper (this is the default); +\item \verb|twocolumn|\ixopt{twocolumn} for two column + formatting; +\item \verb|onecolumn|\ixopt{onecolumn} for single column + printing (this is the default); +\item One of \verb|11pt|, \ixopt{11pt} + \verb|10pt|, \ixopt{10pt} + \verb|9pt|\ixopt{9pt} for 11pt, 10pt or 9pt printing + respectively (the default is \verb|11pt|); +\item \verb|notcopyright|\ixopt{notcopyright} for + disabling the printing of copyright notices (this is the default); +\item \verb|copyright|\ixopt{copyright} enables printing + of copyright notices; +\item \verb|is|\ixopt{is} for International Standard documents; +\item \verb|fdis|\ixopt{fdis} for Final Draft + International Standard documents; \index{FDIS} +\item \verb|dis|\ixopt{dis} for Draft + International Standard documents; \index{DIS} +\item \verb|cd|\ixopt{cd} for Committee Draft + standard documents; \index{CD} +\item \verb|wd|\ixopt{wd} for Working Draft + standard documents; \index{WD} +\item \verb|pas|\ixopt{pas} for Publicly Available Specification + standard documents; +\item \verb|techrep|\ixopt{techrep} for Technical + Report standard documents; \index{TR} +\item \verb|techspec|\ixopt{techspec} for Technical + Spefication standard documents; \index{TS} +\item \verb|otherdoc|\ixopt{otherdoc} for documents + that are not intended to become a standard (this is the default); +%\item \verb|uglycaption|\ixopt{uglycaption} to produce +% an ugly style of captioning; +\item Any other facilities that are available via packages. +\end{itemize} + + When no options are specified, then the result is 11pt, single column +printing on A4 size paper, without copyright notice and a running header. +That is, by default, the options set are: +\verb|final|\ixopt{final}; +\verb|a4paper|\ixopt{a4paper}; +\verb|onecolumn|\ixopt{onecolumn}; +\verb|11pt|\ixopt{11pt}; +\verb|notcopyright|\ixopt{notcopyright}; and +\verb|otherdoc|\ixopt{otherdoc}. + + +%\begin{note}ISOD\index{ISOD} calls for 9pt double column printing but the +% SD\index{SD} calls for 11pt single column printing. +% Using 9pt double column printing is awkward if any computer +% code has to +% be typeset in the document. The IS-REVIEW\index{IS-REVIEW} accepted +% 11pt single column layout. \end{note} % end note +%\begin{note}The CRC\index{CRC} states that acceptable founts are: Univers, +% Helvetica, and Times Roman with the body text in 10pt. +% The IS-REVIEW accepted camera-ready copy +% using Computer Modern 11pt set in single column. \end{note} +\begin{note}The user of the \file{isov2}\ixclass{isov2} class is encouraged + to process this document using + different combinations of the options to gain experience with + their effects. This printing of the document is typeset using the + \verb|draft|\ixopt{draft} option. +\end{note} % end note +\begin{note} + The \verb|otherdoc|\ixopt{otherdoc} option +was chosen as the default so that the +current stage of ISO standardardization has to be explicitly declared +as an option, and is therefore available to any software package that +might process the document source (e.g., a \latex{} to SGML translator). +\end{note} + + +\sclause{Sectioning commands} + + Table~\ref{tab:sec} gives the sectioning commands defined for \file{isov2} +class documents. +\ixcom{clause} \ixcom{normannex} \ixcom{infannex} \ixcom{repannex} +\ixcom{sclause} +\ixcom{ssclause} +\ixcom{sssclause} +\ixcom{ssssclause} +\ixcom{sssssclause} + +\begin{table} +\centering +\caption{Sectioning commands.} \label{tab:sec} +\begin{tabular}{|c|l|} \hline +\textbf{Level} & \textbf{Command} \\ \hline\hline +1 & \verb|\clause|, \verb|\normannex|, \verb|\infannex|, \verb|\repannex| \\ +2 & \verb|\sclause| \\ +3 & \verb|\ssclause| \\ +4 & \verb|\sssclause| \\ +5 & \verb|\ssssclause| \\ +6 & \verb|\sssssclause| \\ \hline +\end{tabular} +\end{table} + +% The \verb|\section|\ixcom{section} command +% is similar to the normal \latex{} \verb|\part|\ixcom{part} +%command. It is only available when the \verb|sect|\ixopt{sect} +%option is specified. + + The \verb|\clause|\ixcom{clause} commands are similar to +the normal \latex{} \verb|\section|ing +commands. There are also starred versions of these commands +(e.g., \verb|\clause*|). + + Three varieties of annex\index{annex} commands are available: +\begin{itemize} +\item \verb+\normannex{+\meta{title}\verb+}+\ixcom{normannex} + for a normative annex; +\item \verb+\infannex{+\meta{title}\verb+}+\ixcom{infannex} + for an informative annex; +\item \verb+\repannex{+\meta{title}\verb+}+\ixcom{repannex} + for an annex that is neither normative or + informative (e.g. an annex in a technical report). +\end{itemize} + + Only \verb|\sclause|\ixcom{sclause} and lower level +sectioning commands can be used after +an annex\index{annex} command. + + +\begin{example} + The command \verb|\infannex{Technical discussion}|, assuming that this is the first +annex in the document, produces: + \begin{center} + \textbf{Annex A}\\ + (informative) + + \textbf{Technical discussion} + \end{center} +\end{example} % end example +\begin{example} + The command \verb|\repannex{Title of annex}|, assuming that this is the second +annex in the document, produces: + +\begin{center} + \textbf{Annex B} + + \textbf{Title of annex} +\end{center} +\end{example} % end example + + +\ssclause{The use of \texttt{tocdepth} and \texttt{secnumdepth}} + + In the standard \latex{} classes the +\verb|tocdepth|\ixtt{tocdepth} and +\verb|secnumdepth|\ixtt{secnumdepth} counters +are set in the preamble\index{preamble} to respectively control the level at +which clause titles are inserted into a table of contents (ToC)\index{ToC} +and at which clause numbering ceases. + + In the \file{isov2}\ixclass{isov2} class, +the values of these can be changed at +any point in the document. The change lasts until another change is +made to the value. +\begin{example} + Assume that in the preamble we have +\begin{verbatim} +\setcounter{secnumdepth}{3} % number ssclauses and above +\setcounter{tocdepth}{3} % ToC includes ssclauses and above +\end{verbatim} +and that a certain subclause has subsubclauses that should be numbered but +not put into the table of contents, then we could do: +\begin{verbatim} +... +\sclause{The certain subclause} +\setcounter{tocdepth}{2} +... +\ssclause{Numbered but not in ToC} +... +... +\setcounter{tocdepth}{3} +\sclause{Following subclause} +\end{verbatim} + +\end{example} + + It can sometimes be difficult to remember which level number corresponds +to which kind of clause. Accordingly, a set of commands are provided to ease +this task. These commands can only be used after the preamble. +\begin{itemize} +\item \verb|\maxsecnumdepth{|\meta{sec}\verb|}|\ixcom{maxsecnumdepth} + sets the level at which clauses will be numbered. This command + should be used before the first sectioning command. +\item \verb|\maxtocdepth{|\meta{sec}\verb|}|\ixcom{maxtocdepth} + sets the level at which clauses will be put into the ToC. + This command should be used before the \verb|\tableofcontents| command. +\item \verb|\setsecnumdepth{|\meta{sec}\verb|}|\ixcom{setsecnumdepth} + sets the current level at which clauses will be numbered. + This command can be used anywhere after the preamble. +\item \verb|\settocdepth{|\meta{sec}\verb|}|\ixcom{settocdepth} + sets the current level at which clauses will put into the ToC. + This command can be used anywhere after the preamble. +\end{itemize} +The value of the argument \meta{sec} can be any of the following: +\texttt{clause}, \texttt{sclause}, \ldots, \texttt{sssssclause}. + +\begin{example} +Using these commands, the previous example can also be coded as: +\begin{verbatim} +... +\begin{document} +\maxsecnumdepth{ssclause} +\maxtocdepth{ssclause} +... +\sclause{The certain subclause} +\settocdepth{sclause} +... +\ssclause{Numbered but not in ToC} +... +... +\settocdepth{ssclause} +\sclause{Following subclause} +\end{verbatim} + +\end{example} + + + +\sclause{LaTeX environments and commands} + + Many of the standard \latex{} environments and commands are available. +In particular, all the normal mathematical typesetting capabilities are +present. +However, there are some additional environments and commands defined. + +\ssclause{Lists} + + The standard \latex{} \verb|itemize|,\ixenv{itemize} +\verb|enumerate|\ixenv{enumerate} and \verb|description|\ixenv{description} +environments are provided. The labels in these lists, though, differ from +those normally provided by \latex. + +\begin{note} +The ISOD describes only a single level for an itemized list, being marked +with either an em-dash or a bullet. The SD deprecates the bullet but +provides four levels, each being marked with an em-dash. These are +provided in the \file{isov2} class. +\end{note} +\begin{note} +The ISOD allows for two levels of enumerated lists. The SD extends this +to four levels, and these are provided in the \file{isov2} class. +\end{note} + +\begin{example} +The list environments provided are shown below as:\ixenv{itemize} +\begin{verbatim} +\begin{itemize} +\item First level itemized element; + \begin{itemize} + \item Second level itemized element; + \begin{itemize} + \item Third level itemized element; + \begin{itemize} + \item Fourth level itemized element. + \end{itemize} + \end{itemize} + \end{itemize} +\end{itemize} +\end{verbatim} + +\ixenv{enumerate} +\begin{verbatim} +\begin{enumerate} +\item First level enumerated element; + \begin{enumerate} + \item Second level enumerated element; + \begin{enumerate} + \item Third level enumerated element; + \begin{enumerate} + \item Fourth level enumerated element. + \end{enumerate} + \end{enumerate} + \end{enumerate} +\end{enumerate} +\end{verbatim} + +\ixenv{description} +\begin{verbatim} +\begin{description} +\item[Description] a description element. Note that a colon is + automatically added to the item label. +\end{description} +\end{verbatim} +and they produce +\begin{itemize} +\item First level itemized element; + \begin{itemize} + \item Second level itemized element; + \begin{itemize} + \item Third level itemized element; + \begin{itemize} + \item Fourth level itemized element. + \end{itemize} + \end{itemize} + \end{itemize} +\end{itemize} + +\begin{enumerate} +\item First level enumerated element; + \begin{enumerate} + \item Second level enumerated element; + \begin{enumerate} + \item Third level enumerated element; + \begin{enumerate} + \item Fourth level enumerated element. + \end{enumerate} + \end{enumerate} + \end{enumerate} +\end{enumerate} + +\begin{description} +\item[Description] a description element. Note that a colon is + automatically added to the item label. +\end{description} + +\end{example} % end example + +\begin{example} + Here is a more complex set of lists: + +\begin{itemize} +\item First level itemization + \begin{enumerate} + \item First level enumeration + \begin{itemize} + \item Second level itemization + \begin{enumerate} + \item Second level enumeration + \begin{itemize} + \item Third level itemization +% \begin{enumerate} % At this point the list is too deeply nested. +% \item Third level enumeration % For the TeXnophile this is +% \item 3rd level enumeration % because the example environment +% \end{enumerate} % is itself a list. + \item 3rd level itemization + \end{itemize} + \item 2nd level enumeration + \end{enumerate} + \item 2nd level itemization + \end{itemize} + \item 1st level enumeration + \end{enumerate} +\item 1st level itemization +\end{itemize} + +\end{example} % end example + +\begin{note} +On occasion, \latex{} objects to a well formed list. Typically, this happens +when a list has only one entry. \index{list!error} + The \latex{} error message is of the form: +\begin{verbatim} +! Something's wrong--perhaps a missing \item. +\end{verbatim} +Hitting the \verb|<return>| key usually gets \latex{} to run on happily. +\end{note}% end note +\begin{note} +Similarly, you may get the message +\begin{verbatim} +! Too deeply nested +\end{verbatim} +Again, hit \verb|<return>| and processing should continue. However, +the indentation of later lists may not be correct. +\end{note} % end note + + +\ssclause{Notes} + + + Two different kinds of environments are provided for typesetting notes. + +\sssclause{Numbered notes} + + The environment +\verb+\begin{note}+ \meta{text} \verb+\end{note}+\ixenv{note} +produces a numbered note whose body consists +of \meta{text}. + +\begin{anexample} +The commands +\begin{verbatim} +\begin{note}Numbered note.\end{note} +\end{verbatim} +produce + +\begin{note}Numbered note.\end{note} +\end{anexample} + +\sssclause{Isolated notes} + + The environment +\verb+\begin{anote}+ \meta{text} \verb+\end{anote}+\ixenv{anote} +produces an un-numbered note whose body +consists of \meta{text}. + +\begin{anexample} + The commands +\begin{verbatim} +\begin{anote}Plain note.\end{anote} +\end{verbatim} +produce + +\begin{anote}Plain note.\end{anote} +\end{anexample} % end example + + +\ssclause{Examples} \label{ssc:ex} + + Two different kinds of environments are provided for typesetting +examples. + +\sssclause{Numbered examples} \label{cl:numex} + +The environment \verb?\begin{example}? \meta{text} \verb?\end{example}? +produces a numbered example whose body consists of \meta{text}. + +\begin{anexample} +The commands +\begin{verbatim} +\begin{example}Numbered example. \label{ex:exref} \end{example} +\end{verbatim} +produce + +\begin{example}Numbered example. \label{ex:exref} \end{example} +\end{anexample} + +\begin{anote} +Numbered examples (and numbered notes) may be identified using the +\verb?\label{...}?\ixcom{label} command, as exhibited in \eref{ex:exref} +in \ref{cl:numex}, and then referred to by the +\verb?\ref{...}?\ixcom{ref} command. +\end{anote} + +\sssclause{Isolated examples} + +The environment \verb?\begin{anexample}? \meta{text} \verb?\end{anexample}? +produces an un-numbered example whose body consists of \meta{text}. +\ixenv{anexample} + +\begin{anexample} +The commands +\begin{verbatim} +\begin{anexample}Isolated example.\end{anexample} +\end{verbatim} +produce + +\begin{anexample}Isolated example.\end{anexample} +\end{anexample} + + + +\ssclause{Bibliographic references} + + Two different kinds of environments are provided for bibliographic +references. It should be noted that neither of these has anything to do with +BibTeX.\index{BibTeX} + +\sssclause{Normative references} + + Normative references are listed in the +\verb|nreferences|\ixenv{nreferences} environment. + + In this environment, bibliographic entries are denoted by either +\verb+\isref{+\meta{ref}\verb+}{+\meta{title}\verb+}+ or by +\verb+\disref{+\meta{ref}\verb+}{+\meta{title}\verb+}+. The +\meta{ref} parameter is the number of the standard document and +the \meta{title} parameter is the title of the standard. + + Use the \verb|\isref|\ixcom{isref} command for published standards +and the \verb|\disref|\ixcom{disref} + command for documents that have not yet been +finally approved as a standard. This latter command automatically adds a +footnote to the effect that the document is +to be published. + +\begin{example} +The \latex{} source for the references in clause~\ref{sec:nrefs} of +this document is: +\begin{verbatim} +\begin{nreferences} +\isref{ISO/IEC Directives, Part 2}{Rules for the structure and drafting of + International Standards. (Fourth edition, 2001)} +... +... +\disref{ISO}{Camera-ready copy (CRC) --- + Submission requirements and ISO type specification. + (Version 1.0, 1996-04-26)} +\end{nreferences} +\end{verbatim} +\end{example} % end example + + +\sssclause{Informative references} + + Informative bibliography elements are listed in the +\verb|references|\ixenv{references} environment. +Each element in the list is specified as +\verb+\reference{+\meta{author}\verb+}{+\meta{title}\verb+}{+\meta{publisher}\verb+}+.\ixcom{reference} + +\begin{example} +The \latex{} source for the bibliography in one version of this document was: +\begin{verbatim} +\infannex{Bibliography} +\begin{references} +\reference{LAMPORT, L.,}{\latex\/ A Document Preparation System,}% + {Addison-Wesley Publishing Co., 1986} \label{lamport} +\reference{GOOSSENS, M., MITTELBACH, F. and SAMARIN, A.,}{% + The \latex\/ Companion,} + Addison-Wesley Publishing Co., 1994} \label{goosens} +\reference{CHEN, P. and HARRISON, M.A.,}{Index preparation and + processing,}{Software--Practice and Experience, 19(9):897--915, + September 1988.} \label{chen} +.... +\end{references} + +\end{verbatim} +\end{example} % end example + + Informative references may be cited in the text via the \latex{} +\verb|\label|\ixcom{label} and \verb|\ref|\ixcom{ref} +mechanism. Note that \verb|\cite|\ixcom{cite} is not available +for references to bibliographic items. For the purposes of +ISO documents, the command +\verb+\bref{+\meta{ref}\verb+}+\ixcom{bref} +is supplied which +properly formats a bibliographic reference. + +\ssclause{Listing of scope items} + + The \verb|inscope|\ixenv{inscope} and +\verb|outofscope|\ixenv{outofscope} +environments are provided for itemized listing of elements that +are within and outside the scope of the standard. Each list +element is introduced via the \verb|\item|\ixcom{item} command. +Some boilerplate +text is also printed that introduces the scope list. + + The environments take one parameter, \meta{text}, that must read +naturally in a sentence of the form: `The following are within/outside +the scope of this \meta{text}:'. The non-parameterized part of this +sentence is specified by the commands +|\verb|\inscopename|\ixcom{inscopename} and +\verb|\outofscopename|\ixcom{outofscopename} + respectively for `within' and `outside'. + +\begin{example}The following text was printed by the commands shown at the +end of the example. + +\begin{inscope}{part of ISO~10303} +\item use of \latex{} for preparing ISO standard documents; +\item use of \latex{} for preparing ISO~10303 documents. +\end{inscope} + +\begin{outofscope}{part of ISO~10303} +\item use of \latex{} in general; +\item use of other document preparation systems. +\end{outofscope} + +\begin{verbatim} +\begin{inscope}{part of ISO~10303} +\item use of \latex{} for preparing ISO standard documents; +\item use of \latex{} for preparing ISO~10303 documents. +\end{inscope} + +\begin{outofscope}{part of ISO~10303} +\item use of \latex{} in general; +\item use of other document preparation systems. +\end{outofscope} +\end{verbatim} + +\end{example} % end example + +\ssclause{Listing of definitions} + + The \verb|\begin{olddefinitions}| \ldots \verb|\end{olddefinitions}| +\ixenv{olddefinitions} environment is provided for +listing terms that have been defined within +the normatively referenced documents. Each term in the list is specified as: \\ +\verb+\olddefinition{+\meta{phrase}\verb+}{+\meta{supplement}\verb+}+\ixcom{olddefinition}. + + + The \verb|\begin{definitions}| \ldots \verb|\end{definitions}| +\ixenv{definitions} environment is provided for listing +the definitions of terms specific to the +document being written. Each term in the +list is specified as: \ixcom{definition} \\ +\verb+\definition{+\meta{phrase}\verb+}{+\meta{definition text}\verb+}+. + + +\begin{example}A listing of terms defined elsewhere could be specified as: + +\begin{verbatim} +\begin{olddefinitions} +\olddefinition{application protocol (AP)}{} +\olddefinition{integrated resource}{} +\end{olddefinitions} +\end{verbatim} +\end{example} % end example +\begin{example}The definition listing earlier in this document was produced by: + +\begin{verbatim} +\begin{definitions} +\definition{boilerplate}{text whose wording is fixed ...} +\definition{style file}{a set of \latex{} macros assembled + into a single file} +... +\end{definitions} +\end{verbatim} +\end{example} % end example + + +\ssclause{Listing of abbreviations} + + The \verb|\begin{symbols}| \ldots \verb|\end{symbols}|\ixenv{symbols} +environment is provided for listing symbols +and abbreviations. Each term (either symbol or abbreviation) in the list is +specified as: \ixcom{symboldef} \\ + \verb+\symboldef{+\meta{symbol}\verb+}{+\meta{definition text}\verb+}+. + +\begin{example}The list of abbreviations earlier in this document was specified as: +\begin{verbatim} +\begin{symbols} +\symboldef{DIS}{Draft International Standard} +\symboldef{IS}{International Standard} +... +\end{symbols} +\end{verbatim} +\end{example} % end example + +\sclause{Floating bodies} + + \latex{} provides the \verb|figure|\ixenv{figure} +and \verb|table|\ixenv{table} environments. +Captions (produced by the \verb|\caption|\ixcom{caption} +command) increment the figure or +table number and add the caption to the relevant contents listing file. + +\index{floats} \index{floats!continuation} + + The command +\verb+\contcaption{+\meta{text}\verb+}+\ixcom{contcaption} +may be used instead. This command neither increments the number nor adds +anything to the listing files. + +\begin{example} +The following code: +\begin{verbatim} +\begin{table}[tbp] +\centering +\caption{Example table in three parts} \label{tab:cont} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +A & 1 \\ +B & 2 \\ \hline +\end{tabular} +\end{table} + +\begin{table}[tbp] +\centering +\contcaption{(continued)} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +C & 3 \\ +D & 4 \\ \hline +\end{tabular} +\end{table} + +\begin{table}[tbp] +\centering +\contcaption{(concluded)} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +E & 5 \\ +F & 6 \\ \hline +\end{tabular} +\end{table} +\end{verbatim} +produces the three-part \tref{tab:cont}. \end{example} %end example + +\begin{table}[tbp] +\centering +\caption{Example table in three parts} \label{tab:cont} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +A & 1 \\ +B & 2 \\ \hline +\end{tabular} +\end{table} + +\begin{table}[tbp] +\centering +\contcaption{(continued)} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +C & 3 \\ +D & 4 \\ \hline +\end{tabular} +\end{table} + +\begin{table}[tbp] +\centering +\contcaption{(concluded)} +\begin{tabular}{|c|c|} \hline +\textbf{Col 1} & \textbf{Col 2} \\ \hline\hline +E & 5 \\ +F & 6 \\ \hline +\end{tabular} +\end{table} + +\sclause{Title command} + + + The command to produce the title of the standard\ixcom{title} +is +\verb+\title{+\meta{intro}\verb+}{+\meta{main}\verb+}{+\meta{compl}\verb+}+. +The command takes three parameters +according to the three elements of the title as specified in the ISO directives. +\begin{enumerate} +\item \meta{intro} The introductory element of the title. This may be empty. +\item \meta{main} The main element of the title. +\item \meta{compl} The complementary element of the title. This may be empty. +\end{enumerate} + +\begin{example} +If this were actually meant to be an ISO standard, then the \latex{} source +for the title of this document might be: +\begin{verbatim} +\title{Industrial automation systems and integration}% +{Product data representation and exchange}% +{Part 3456 : Documentation methods: The LaTeX style +file reference manual} +\end{verbatim} +\end{example} % end example + +\begin{anote}There must be a space on either side of the colon separating the +part number and the final part of the title. +\end{anote}% end of note + + Three other commands are used for setting the running header throughout the +document. These shall be placed in the preamble.\index{preamble} + + The command \verb+\standard{+\meta{number of standard}\verb+}+ is used to identify +the standard.\ixcom{standard} + + The command \verb+\yearofedition{+\meta{year}\verb+}+ is used to identify the +\ixcom{yearofedition} year of the edition. + + The command +\verb+\languageofedition{+\meta{code}\verb+}+\ixcom{languageofedition} + is used to identify the language of the edition. + +\begin{example} +This document is identified by: +\begin{verbatim} +\standard{LaTeX for standards} +\yearofedition{1997} +\languageofedition{(E)} +\end{verbatim} +\end{example} % end of example + + As a convenience the vacuous command \verb+\extrahead+\ixcom{extrahead} +is supplied which will add it's contents, if any, to the header. It may +be used, for example, to add a document number to the header by +\verb+\renewcommand{\extrahead}{Doc number}+. If \verb+\extrahead+ is +modified it must be done in the preamble. + + The \verb|\title|\ixcom{title} command sets the page numbering +style to be arabic, +starts a new page, numbered 1, and puts the title +at the start of the page. It also puts the appropriate header at the top +of the page, dependending on the particular combination of selected +options. + +\begin{anote} +Remember that you have to use the \verb|copyright|\ixopt{copyright} +option to enable printing of copyright symbols and notices. +\end{anote} + +\ssclause{The cover} + + For publication, ISO want to be supplied with a document starting +on page iii with the ToC. They supply the cover (page i) and page ii. + +It can often be useful to have a cover page for documents while they +are in the process of being prepared for submittal to ISO. + The \verb+cover+\ixenv{cover} environment is provided for that +purpose. The contents of the environment must not exceed one page and the +contents must have a \verb+\clearpage+\ixcom{clearpage} immediately before +the end. The \verb+cover+ environment also prints page ii, which has a +copyright notice on it if the document is copyrighted. + + For example, this document starts with: +\begin{verbatim} +\begin{cover} +\vspace*{4in} +\begin{center} +\Huge\bfseries LaTeX for standards +\end{center} +\begin{center} +\bfseries 2001/07/06 +\end{center} +\begin{center} +Peter Wilson \\ +\texttt{peter.r.wilson@boeing.com} +\end{center} +\clearpage +\end{cover} +\end{verbatim} + +\sclause{Cross referencing commands} + + The usual \latex{} \verb+\label+\ixcom{label} and +\verb+\ref+\ixcom{ref} commands are supported. The class also +provides some formatted referencing commands in addition to \verb+\ref+. + + The following commands are useful for referring to figures, clauses etc. +Each takes a parameter that is the parameter of a \latex{} \verb|\label{}| +command. + +\begin{itemize} +\item The command \verb|`\aref{anx:lord}'|\ixcom{aref} prints `\aref{anx:lord}' + while \verb|`\ref{anx:lord}'|\ixcom{ref} + prints `\ref{anx:lord}' +\item The command \verb|`\bref{lamport}'|\ixcom{bref} prints `\bref{lamport}' + while \verb|`\ref{lamport}'|\ixcom{ref} + prints `\ref{lamport}' +\item The command \verb|`\cref{sec:nrefs}'|\ixcom{cref} prints `\cref{sec:nrefs}' + while \verb|`\ref{sec:nrefs}'|\ixcom{ref} + prints `\ref{sec:nrefs}' +\item The command \verb|`\eref{sec:nrefs}'|\ixcom{eref} prints `\eref{sec:nrefs}' + while \verb|`\ref{sec:nrefs}'|\ixcom{ref} + prints `\ref{sec:nrefs}' +\item The command \verb|`\fref{sec:nrefs}'|\ixcom{fref} prints `\fref{sec:nrefs}' + while \verb|`\ref{sec:nrefs}'|\ixcom{ref} + prints `\ref{sec:nrefs}' +\item The command \verb|`\nref{sec:nrefs}'|\ixcom{nref} prints `\nref{sec:nrefs}' + while \verb|`\ref{sec:nrefs}'|\ixcom{ref} + prints `\ref{sec:nrefs}' +\item The command \verb|`\tref{sec:nrefs}'|\ixcom{tref} prints `\tref{sec:nrefs}' + while \verb|`\ref{sec:nrefs}'|\ixcom{ref} + prints `\ref{sec:nrefs}' +\item The command \verb|`\pref{sec:nrefs}'|\ixcom{pref} prints + `\pref{sec:nrefs}'. +\end{itemize} + + + + +\sclause{Heading commands} + +\ssclause{Foreword} + + The \verb|foreword|\ixenv{foreword} environment specifies +that a table of contents, list of +figures and list of tables be produced, and starts a new unnumbered +clause called Foreword. +Formatting is one column style only and roman page numbering is set. The +table of contents starts on page iii. + + More precisely, the title of the clause is given by the value of +\verb|\forewordname|\ixcom{forewordname} (see \aref{anx:extraiso}). + +\begin{note} +The default style only lists level 1 clauses in the table of contents. If you +need a more detailed listing, then put the command +\verb|\setcounter{tocdepth}{<level #>}|\ixcom{setcounter}\ixtt{tocdepth} +in the preamble.\index{preamble} +For example \verb|\setcounter{tocdepth}{3}| will produce a contents +listing down to the level of \verb|\ssclause| (see \tref{tab:sec} for +the definitions of clause levels). +\end{note} %end note + + The command \verb+\fwdbp+\ixcom{fwdbp} prints the +ISO specified boilerplate for +the initial paragraphs of a foreword. + + The boilerplate for a Technical Specification (ISO/TS) or a +Publicly Available Specification (ISO/PAS) differs from that +for a standard. The command \verb|\tspasfwdbp|\ixcom{tspasfwdbp} +prints some of this boilerplate. +\begin{example} +In this document, \verb|\tspasfwdbp| prints: + +\tspasfwdbp +\end{example} +\begin{note} + The required paragraph immediately following this boilerplate is: + +ISO/PAS [or ISO/TS] \ldots was prepared by Technical Committee ISO/TC \ldots +\end{note} + +%% The boilerplate for a Technical Report (TR) also differs from that for +%%a standard. +%%The command \verb|\trfwdbpi|\ixcom{trfwdbpi} +%%prints some of this boilerplate. +%%\begin{example} +%%In this document, \verb|\trfwdbpi| prints: +%% +%%\trfwdbpi +%%\end{example} + + The \verb|\fwdnopatents|\ixcom{fwdnopatents} +prints out the Foreword +boilerplate paragraph concerning potential patent rights. +\begin{example} +In this document, \verb|\fwdnopatents| prints: +\fwdnopatents +\end{example} + + + +\ssclause{Introduction} + + The \verb|introduction|\ixenv{introduction} environment +starts a new unnumbered clause +called `Introduction' with one column formatting. + + More precisely, the title of the clause is given by the value of +\verb|\introductionname|\ixcom{introductionname} (see \aref{anx:extraiso}). + + The \verb|\intropatents|\ixcom{intropatents} prints some of the +patent boilerplate that may be required in the Introduction. +\begin{anexample} +In this document, \verb|\intropatents| prints: +\fwdnopatents +\end{anexample} + + +\ssclause{Scope clause} + + The \verb|\scopeclause|\ixcom{scopeclause} +command starts a new numbered clause called `Scope', which is given +the label \verb|;i1|\index{;i1}. + + More precisely, the title of the clause is given by the value of +\verb|\scopename|\ixcom{scopename} (see \aref{anx:extraiso}). + +\ssclause{Normative references clause} + + The \verb|\normrefsclause|\ixcom{normrefsclause} +command starts a new numbered clause called `Normative references', +which is given the label \verb|;i2|\index{;i2}. + + More precisely, the title of the clause is given by the value of +\verb|\normrefsname|\ixcom{normrefsname} (see \aref{anx:extraiso}). + + The command +\verb+\normrefbp{+\meta{document identifier}\verb+}+\ixcom{normrefbp} +prints the +ISO required text for the introduction to the listing of normative +references. The \meta{document identifier} parameter must be such +that it reads sensibly in a sentence of the form `\ldots constitute +provisions of this \meta{document identifier}.'. + +\begin{example}Clause~\ref{sec:nrefs} in this document was started by the +commands: +\begin{verbatim} +\normrefsclause \label{sec:nrefs} + +\normrefbp{manual} +\begin{nreferences} +... +\end{verbatim} +\end{example} % end example + +\ssclause{Definitions, symbols and abbreviations} + + A variety of commands are provided that initiate new numbered +clauses for definitions, symbols and abbreviations. Depending on the +amount of material in these respective categories, one or more clauses +may be used. The commands and clause titles are listed in \tref{tab:dsa}. +The clause level headings are each given the label \verb|;i3|\index{;i3}; +one and only one of these headings should appear in a standard document. +\ixcom{defclause} \ixcom{defname} +\ixcom{symclause} \ixcom{symname} +\ixcom{abbclause} \ixcom{abbname} +\ixcom{defsymclause} \ixcom{defsymname} +\ixcom{defabbclause} \ixcom{defabbname} +\ixcom{symabbclause} \ixcom{symabbname} +\ixcom{defsymabbclause} \ixcom{defsymabbname} +\ixcom{defsubclause} +\ixcom{symsubclause} +\ixcom{abbsubclause} +\ixcom{defsymsubclause} +\ixcom{defabbsubclause} +\ixcom{symabbsubclause} + +\begin{table} +\centering +\caption{Definition, symbol and abbreviation clause commands} +\label{tab:dsa} +\begin{tabular}{|l|c|l|l|} \hline +\textbf{Command} & \textbf{Clause} & \textbf{Title} & \textbf{Default text} \\ \hline +\verb|\defclause| & C & \verb|\defname| & \defname{} \\ +\verb|\symclause| & C & \verb|\symname| & \symname{} \\ +\verb|\abbclause| & C & \verb|\abbname| & \abbname{} \\ +\verb|\defsymclause| & C & \verb|\defsymname| & \defsymname{} \\ +\verb|\defabbclause| & C & \verb|\defabbname| & \defabbname{} \\ +\verb|\symabbclause| & C & \verb|\symabbname| & \symabbname{} \\ +\verb|\defsymabbclause| & C & \verb|\defsymabbname| & \defsymabbname{} \\ +\verb|\defsubclause| & SC & \verb|\defname| & \defname{} \\ +\verb|\symsubclause| & SC & \verb|\symname| & \symname{} \\ +\verb|\abbsubclause| & SC & \verb|\abbname| & \abbname{} \\ +\verb|\defsymsubclause| & SC & \verb|\defsymname| & \defsymname{} \\ +\verb|\defabbsubclause| & SC & \verb|\defabbname| & \defabbname{} \\ +\verb|\symabbsubclause| & SC & \verb|\symabbname| & \symabbname{} \\ + \hline +\multicolumn{4}{|l|}{% +NOTE - In the table, C = clause, SC = subclause. } \\ \hline +\end{tabular} +\end{table} + +\sssclause{Heading labels} + + Some of the defined clauses have associated \verb|\label|s. These +heading commands and their \verb|\label| values are listed in +\tref{tab:clabels}. + +\begin{table} +\centering +\caption{Defined clause headings with labels} +\label{tab:clabels} +\begin{tabular}{|l|c|} \hline +\textbf{Command} & \textbf{Label} \\ \hline +\verb|\scopeclause| & \texttt{;i1} \\ +\verb|\normrefsclause| & \texttt{;i2} \\ +\verb|\defclause| & \texttt{;i3} \\ +\verb|\symclause| & \texttt{;i3} \\ +\verb|\abbclause| & \texttt{;i3} \\ +\verb|\defsymclause| & \texttt{;i3} \\ +\verb|\defabbclause| & \texttt{;i3} \\ +\verb|\symabbclause| & \texttt{;i3} \\ +\verb|\defsymabbclause| & \texttt{;i3} \\ + \hline +\end{tabular} +\end{table} + + + +\ssclause{Bibliography} + + The command \verb|\bibannex|\ixcom{bibannex} + starts an informative section of the document entitled `Bibliography'. +Or, more precisely, +by the value of the \verb|\bibname|\ixcom{bibname} +command. + +\sclause{Urls, etc} + + The command \verb|\url{|\meta{text}\verb|}|\ixcom{url} can be used for +typesetting \meta{text} as an email address. + + The command \verb|\isourl{|\meta{text}\verb|}|\ixcom{isourl} can be +used for +typesetting \meta{text} as an URL address. + +\begin{example} +The following code +\begin{verbatim} +The Email address is \url{joe@fred.mik} or the homepage is at +\isourl{http://fred.mik/home/}. +\end{verbatim} +will be typeset as: \\ +The Email address is \url{joe@fred.mik} or the homepage is at +\isourl{http://fred.mik/home/}. +\end{example} + + +\sclause{Version control commands} + + + A set of commands are provided to assist when revising a document. +For these commands to flag the changes in the printed document the command +\verb|\changemarkstrue|\ixcom{changemarkstrue} +must be put in the preamble.\index{preamble} + + In the commands described below, the \meta{number} parameter can be used +to correlate changes in a document +to some external (numbered) requirement for the change. + +\ssclause{Editorial} + + The command \verb+\editorial{+\meta{number}\verb+}+\ixcom{editorial} +flags an editorial change to the +document text with ED$^{number}$. + +\begin{anexample} + + Just to start things off, this is an original sentence, which should +take up about a line. +This example sentence contains an editorial \editorial{37} +change. The command \verb|\editorial{37}| was included in the previous +sentence. +This sentence, though, has no changes marked in it and may be +assumed to be unaltered from a prior version. +\end{anexample} % end example + +\ssclause{Added} + + The command +\verb+\added{+\meta{text}\verb+}{+\meta{number}\verb+}+\ixcom{added} +flags the +position of the additional \meta{text} and highlights it. + +\begin{anexample} + + Just to start things off, this is an original sentence, which should +take up about a line. +This example sentence contains \added{some added text}{27} in +the middle of it. The command \verb|\added{some added text}{27}| was +included in the previous sentence. +This sentence, though, has no changes marked in it and may be +assumed to be unaltered from a prior version. +\end{anexample} % end example + +\ssclause{Deleted} + + The command \verb+\deleted{+\meta{number}\verb+}+\ixcom{deleted} +flags the position of deleted text. + +\begin{anexample} + + Just to start things off, this is an original sentence, which should +take up about a line. +Some text was deleted \deleted{34} from the middle of this sentence. +The command \verb|\deleted{34}| was included in the previous sentence. +This sentence, though, has no changes marked in it and may be +assumed to be unaltered from a prior version. +\end{anexample} % end example + +\ssclause{Moved} + + The command +\verb+\moved{+\meta{text}\verb+}{+\meta{number}\verb+}+\ixcom{moved} +flags the position of +moved \meta{text} and highlights it. + +\begin{anexample} + + Just to start things off, this is an original sentence, which should +take up about a line. +This sentence contains some \moved{moved}{81} text in the middle of it. +The command \verb|\moved{moved}{81}| was included in the previous +sentence. +This sentence, though, has no changes marked in it and may be +assumed to be unaltered from a prior version. +\end{anexample} % end example + +\sclause{PDF} + + The class provides a command, \verb|\ifpdf|\ixcom{ifpdf}, +to test whether or not the document is being processed by \latex{} +or by pdf\latex. \latex{} processing produces a \file{.dvi} file which +needs further processing, usually by \file{dvips}, to generate PostScript +for printing. pdf\latex, however, directly generates a \file{.pdf} file +which can then be printed. + +\begin{anexample} +A document for processing by either \latex{} or pdf\latex{} could be +started like: +\begin{verbatim} +\documentclass{iso} +\usepackage{times} +\ifpdf + \pdfoutput=1 + \usepackage[pdftex]{graphicx} +\else + \usepackage{graphicx} +\fi +.... +\end{verbatim} + +The \file{times} package is used in this example as PDF printers tend +to handle +PostScript fonts better than other kinds of fonts. +\end{anexample} + + + The class also supports the use of the +\file{hyperref}\ixpack{hyperref} package in conjunction with pdf\latex. +Typically bookmark processing would be specifed by: +\begin{verbatim} +\ifpdf + \pdfoutput=1 + \usepackage[plainpages=false, + pdfpagelabels, + bookmarksnumbered, + hyperindex=true + ]{hyperref} + ... +\else + ... +\fi +.... +\end{verbatim} +If the \verb|hyperindex=true| option to the \file{hyperref} package is used +the the index has to be processed via the +\textsc{MakeIndex}\index{makeIndex@{\sc MakeIndex}} program. + +%%%%%%%%%%% +%%%\end{document} +%%%%%%%%%%% + +\clause{The \file{isorot} package facility} + + The \file{isorot}\ixpack{isorot} facility enables the rotation +of document elements on +a page. It uses the \latex{} \verb|\special|\ixcom{special} +command to perform its +effects, and thus can only be used +with a limited number of dvi to postscript programs. The facilities +available are summarized in \tref{tab4}. + + \file{isorot} is a modification of the \file{rotation.sty} file +created by Rahtz and Barroca~\bref{rahtz}. Further examples of the usage +of their style are given in Goosens \emph{et al}~\bref{goosens}. + +\begin{note}Several examples of the effects of the commands described herein +are shown. In many cases the results are not pretty. This should act as +a warning that using rotational elements requires more care than +most other document elements.\end{note} %end note + +\begin{sidewaystable} +\ixcom{rotdriver} \ixcom{clockwise} \ixcom{counterclockwise} +\ixcom{figuresright} \ixcom{figuresleft} \ixcom{rotcaption} +\ixcom{controtcaption} +\ixenv{sideways} \ixenv{turn} \ixenv{rotate} \ixenv{sidewaystable} +\ixenv{sidewaysfigure} \ixenv{landscape} +\centering +\caption{The rotation facilities} \label{tab4} +\begin{tabular}{|l|l|} \hline +\textbf{Facility} & \textbf{Effect} \\ \hline +\multicolumn{2}{|c|}{\textbf{Commands}} \\ \hline +\verb|\rotdriver{<driver>}| & +declare the name of the dvi to Postscript translator (default {\tt dvips}) \\ +\verb|\clockwise| & +sets rotation direction clockwise for positive angles (the default) \\ +\verb|\counterclockwise| & +sets rotation direction counterclockwise for positive angles \\ +\verb|\figuresright| & +sets rotation direction for sideways floats counterclockwise (the default) \\ +\verb|\figuresleft| & +sets rotation direction for sideways floats clockwise \\ +\verb|\rotcaption| & +like the \verb|caption| command, but rotates the caption through 90 degrees \\ +\verb|\controtcaption| & +like the \verb|contcaption| command, but rotates the caption through 90 degrees \\ \hline +\multicolumn{2}{|c|}{\textbf{Environments}} \\ \hline +\verb|sideways| & +rotates the contents through 90 degrees counterclockwise \\ +\verb|turn| & +rotates the contents through the given angle \\ +\verb|rotate| & +rotates the contents through the given angle, but no space allowed for the result\\ +\verb|sidewaystable| & +like the \verb|table| environment, but rotated 90 degrees \\ +\verb|sidewaystable*| & +twocolumn version of \verb|sidewaystable| \\ +\verb|sidewaysfigure| & +like the \verb|figure| environment, but rotated 90 degrees \\ +\verb|sidewaysfigure*| & +twocolumn version of \verb|sidewaysfigure| \\ +\verb|landscape| & +prints all enclosed pages in landscape mode \\ \hline +\end{tabular} +\end{sidewaystable} + +\sclause{Options} + + The \file{isorot} facility has one option, +namely \verb|debugshow|\ixopt{debugshow}. Calling this option produces +messages on the screen and in the \file{log} file regarding the actions +being taken. + +\begin{anote} This option is principally of interest to the maintainer +of the facility. \end{anote} + +\sclause{DVI drivers} + + The \file{isorot} facility supports only a limited number of +dvi to postscript translators. The default translator is \emph{dvips}. + The following command must be put in +the preamble of the document if \emph{dvips} is not being used: +\verb|\rotdriver{<drivername>}|,\ixcom{rotdriver} where +\verb|<drivername>| is one of the following:\footnote{I have been able to +try the {\tt dvips} driver +but not the others. If anyone has experience with the other drivers, or has +extended the range of drivers, I would like to be given the results.} %end footnote + +\begin{enumerate} +\item \verb|dvipdf| for the \emph{dvipdf} + translator;\ixtt{dvipdf} +\item \verb|dvips| for Tom Rockicki's \emph{dvips} + translator;\ixtt{dvips} +\item \verb|dvipsone| for Y\&Y's \emph{dvipsone} + translator;\ixtt{dvipsone} +\item \verb|dvitops| for James Clark's \emph{dvitops} + translator;\ixtt{dvitops} +\item \verb|dviwindo| for Y\&Y's \emph{dviwindo} + translator;\ixtt{dviwindo} +\item \verb|pctex32| for Personal TeX's PC TeX for 32 bit Windows + (\emph{pctex32}) + translator;\ixtt{pctex32} +\item \verb|pctexps| for Personal TeX's PC PTI Laser/PS (\emph{pctexps}) + translator;\ixtt{pctexps} +\item \verb|pubps| for the Arbortext's \emph{pubps} + translator.\ixtt{pubps} +\item \verb|textures| for Blue Sky's \emph{Textures} + translator;\ixtt{textures} + +\end{enumerate} + + +\sclause{Rotational directions} + + \file{isorot} enables the textual and other elements of a document +to be rotated from their normal horizontal layout. In some cases elements +can be rotated through arbitrary angles, whereas in others only 90 degree +rotation is possible. + + By default, a rotation through a positive number of +degrees corresponds to a clockwise rotation. The command +\verb|\counterclockwise|\ixcom{counterclockwise} +sets the following rotations to be counterclockwise for positive angles. +The command \verb|\clockwise|\ixcom{clockwise} +sets the following rotations to be clockwise for positive angles. +These commands can be used to toggle the rotational behavior. + + + Rotated floating environments are normally rotated so that they are +printed with a counterclockwise rotation (i.e. the original bottom of the float +is placed at the right hand side of the paper), +which is what is normally required. +This behavior can be altered by the command +\verb|\figuresleft|,\ixcom{figuresleft} +which will give the reverse effect. The command +\verb|\figuresright|\ixcom{figuresright} +will set the behavior to the default. +These commands can be used to toggle the rotational behavior of +floats. + + +\sclause{Rotation of text} + + The \verb|sideways|\ixenv{sideways} +environment rotates the contents of the environment +by 90 degrees counterclockwise, and leaves space for the result. + + The \verb|\begin{turn}{|\meta{angle}\verb|}|\ixenv{turn} +environment rotates the contents by the given number +of degrees in the direction specified by the most recent of the +\verb|\clockwise|\ixcom{clockwise} or +\verb|\counterclockwise|\ixcom{counterclockwise} +commands, leaving space for the result. + + The \verb|\begin{rotate}{|\meta{angle}\verb|}|\ixenv{rotate} +environment rotates the contents by the given number +of degrees in the direction specified by the most recent of the +\verb|\clockwise|\ixcom{clockwise} or +\verb|\counterclockwise|\ixcom{counterclockwise} +commands, but no arrangements are made for leaving space for the result. + + +\begin{example}Some simple rotations: \label{ex:1} + +This code +\begin{verbatim} +Default rotation direction: \\ +A +\begin{sideways}% +B C +\end{sideways} +D E F G H I J K L M +\begin{turn}{-90}% +Minus 90 turn +\end{turn} +N O P +\begin{rotate}{90}% +Plus 90 rotate +\end{rotate} +Q \\ +and continue on with another line after rotations. +\end{verbatim} +produces the following (note how space is allowed for the \verb|turn|ed +text, whereas the \verb|rotate|d text runs into the text below). + +Default rotation direction: \\ +A +\begin{sideways}% +B C +\end{sideways} +D E F G H I J K L M +\begin{turn}{-90}% +Minus 90 turn +\end{turn} +N O P +\begin{rotate}{90}% +Plus 90 rotate +\end{rotate} +Q \\ +and continue on with another line after rotations. +\end{example} % end example +\begin{example}This example shows the effect of using the +\verb|\counterclockwise|\ixcom{counterclockwise} +command. + +This code +\begin{verbatim} +Flip rotation direction: \\ +\counterclockwise +A +\begin{sideways}% +B C +\end{sideways} +D E F G H I J K L M +\begin{turn}{-90}% +Minus 90 turn +\end{turn} +N O P +\begin{rotate}{90}% +Plus 90 rotate +\end{rotate} +Q \\ +Set rotation direction back to default value. +\clockwise +\end{verbatim} + +produces the following, which should be compared with example~\ref{ex:1}. + +Flip rotation direction: \\ +\counterclockwise +A +\begin{sideways}% +B C +\end{sideways} +D E F G H I J K L M +\begin{turn}{-90}% +Minus 90 turn +\end{turn} +N O P +\begin{rotate}{90}% +Plus 90 rotate +\end{rotate} +Q \\ +Set rotation direction back to default value. +\clockwise +\end{example} % end example + + + Although the examples so far have only shown the rotation of text, boxes +can also be rotated. + +\begin{example}Rotating a box. + +This code +\begin{verbatim} +\newsavebox{\foo} +\newlength{\fool} +\settowidth{\fool}{Hurrah for ISO.} +\savebox{\foo}{\parbox{\fool}{Hurrah for ISO. Hurrah for ISO. + Hurrah for ISO. Hurrah for ISO.}} +Start +\usebox{\foo} +\& +\begin{turn}{-45}\usebox{\foo}\end{turn} +\& +\begin{turn}{45}\usebox{\foo}\end{turn} +End +\end{verbatim} +produces: + +\newsavebox{\foo} +\newlength{\fool} +\settowidth{\fool}{Hurrah for ISO.} +\savebox{\foo}{\parbox{\fool}{Hurrah for ISO. Hurrah for ISO. + Hurrah for ISO. Hurrah for ISO.}} +Start +\usebox{\foo} +\& +\begin{turn}{-45}\usebox{\foo}\end{turn} +\& +\begin{turn}{45}\usebox{\foo}\end{turn} +End + +\end{example} %end example + + Elements can be rotated through arbitrary angles, and also rotated +elements can be nested inside other rotated elements. + + +\begin{example}Repeated rotation: + + The following example code shows that text can be rotated through any angle. +The result is shown in \fref{fig:wheel}. +\begin{verbatim} +\newcount\prwc +\newsavebox{\prwtext} +\newdimen\prwspace +\def\wheel#1#2{% + \savebox{\prwtext}{#1\begin{sideways}#2\end{sideways}}% + \prwspace\wd\prwtext% + \advance\prwspace by 1cm% + \centerline{% + \rule{0pt}{\prwspace}% + \rule[-\prwspace]{0pt}{\prwspace}% + \prwc=-180\loop\ifnum\prwc<180 + \rlap{\begin{rotate}{\the\prwc}% + \rule{1cm}{0pt}\usebox{\prwtext}\end{rotate}}% + \advance\prwc by 20\repeat}} +\begin{figure} +\wheel{Express yourself ---}{Hooray for STEP!} +\caption{Example rotation through multiple angles} +\label{fig:wheel} +\end{figure} +\end{verbatim} + +\newcount\prwc +\newsavebox{\prwtext} +\newdimen\prwspace +\def\wheel#1#2{% + \savebox{\prwtext}{#1\begin{sideways}#2\end{sideways}}% + \prwspace\wd\prwtext% + \advance\prwspace by 1cm% + \centerline{% + \rule{0pt}{\prwspace}% + \rule[-\prwspace]{0pt}{\prwspace}% + \prwc=-180\loop\ifnum\prwc<180 + \rlap{\begin{rotate}{\the\prwc}% + \rule{1cm}{0pt}\usebox{\prwtext}\end{rotate}}% + \advance\prwc by 20\repeat}} +\begin{figure} +\vspace*{1cm} +\wheel{Express yourself ---}{Hooray for STEP!} +\vspace*{1cm} +\caption{Example rotation through multiple angles} +\label{fig:wheel} +\end{figure} + + Figures~\ref{fig:angles1} and~\ref{fig:angles2} also show rotations through a +range of angles, both positive and negative. +\end{example} %end example + +\begin{example}Nested rotations. \label{ex:sidetabular} + +This code +\begin{verbatim} + Here is some text before a \verb|sideways| environment. +And some more, and more and more garble gobble cluck +click clack clock cluck and so on and on and on. +\begin{center} +\begin{sideways} +\rule{1in}{0pt} +\begin{tabular}{|lr|} +\begin{rotate}{-45}\emph{Word}\end{rotate} & \begin{rotate}{-90}% +Occurrences\end{rotate} +\\ +\hline +hello & 33 \\ +goodbye & 34 \\ +\hline +\end{tabular} +\end{sideways} +\end{center} + Here is some text after a \verb|sideways| environment. + And some more, and more and more garble gobble cluck +click clack clock cluck and so on and on and on. +\end{verbatim} +produces: + + Here is some text before a \verb|sideways| environment. +And some more, and more and more garble gobble cluck +click clack clock cluck and so on and on and on. +\begin{center} +\begin{sideways} +%\rule{1in}{0pt} +\begin{tabular}{|lr|} +\begin{rotate}{-45}\emph{Word}\end{rotate} & \begin{rotate}{-90}% +Occurrences\end{rotate} \\ \hline +hello & 33 \\ +goodbye & 34 \\ \hline +\end{tabular} +\end{sideways} +\end{center} + Here is some text after a \verb|sideways| environment. + And some more, and more and more garble gobble cluck +click clack clock cluck and so on and on and on. +\end{example} %end example + + + +\sclause{Rotations of tables and figures} + + The previous examples have demonstrated the rotation of textual elements. +For instance, example~\ref{ex:sidetabular} shows that tabular material can be rotated using +the \verb|sideways|\ixenv{sideways} +environment. (Actually, any of the previously +mentioned environments may be used.) +Two further environments are provided which rotate a \latex{} float through +90 degrees. These are: +\begin{itemize} +\item \verb|sidewaystable|\ixenv{sidewaystable}, which + corresponds to the standard \latex{} \verb|table|\ixenv{table} + environment; and +\item \verb|sidewaysfigure|\ixenv{sidewaysfigure}, which + corresponds to the standard \latex{} \verb|figure|\ixenv{figure} + environment. +\end{itemize} +There are also starred versions of these, namely +\verb|sidewaystable*|\ixenvs{sidewaystable} and +\verb|sidewaysfigure*|\ixenvs{sidewaysfigure}, for use in twocolumn mode. +However, the correspondence with the standard environments is not strictly +complete as a sideways float is alway placed on a page by itself. + + The direction of rotation may be controlled by the +\verb|\figuresright|\ixcom{figuresright} and +\verb|\figuresleft|\ixcom{figuresleft} commands. + +\begin{example}Table~\ref{tab4} is produced by the code below: \label{ex:4} + +\begin{verbatim} +\begin{sidewaystable} +\centering +\caption{The rotation facilities} \label{tab4} +\begin{tabular}{|l|l|} \hline +\textbf{Facility} & \textbf{Effect} \\ \hline +\multicolumn{2}{|c|}{\textbf{Commands}} \\ \hline +\verb|\rotdriver{<driver>}| & +declare the name of the dvi to Postscript translator (default {\tt dvips}) \\ +...... +\verb|sidewaysfigure| & +like the \verb|figure| environment, but rotated 90 degrees \\ \hline +\end{tabular} +\end{sidewaystable} +\end{verbatim} +\end{example} % end example + + + +\sclause{Rotation of float captions and bodies} + + Sometimes it may be useful to rotate a caption independently of the +rotation of a figure or table. The command +\verb|\rotcaption|\ixcom{rotcaption} is analogous +to the normal \verb|\caption|\ixcom{caption} command, +and inserts the caption rotated +by 90~degrees. There is also the companion command +\verb|\controtcaption|\ixcom{controtcaption}, analagous to the +\verb|\contcaption|\ixcom{contcaption} command, +for continuation captions. + +%\newsavebox{\picbox} + +\begin{figure} +\centering +\caption{Example figure with a standard caption.} \label{fig:nocrot} +\setlength{\unitlength}{0.2in} +\footnotesize +\begin{picture}(17,2) +\thicklines +\put(0,0){\begin{picture}(4,1) + \put(1.5,0.5){\oval(3,1)} + \put(1.5,0.5){\makebox(0,0){2,5 (1)}} + \put(3,0.5){\line(1,0){1.0}} + \put(4.25,0.5){\circle{0.5}} + \end{picture}} + +\put(4.5,0){\begin{picture}(8,1) + \put(0,0){\dashbox{0.25}(4,1){date}} + \put(4,0.5){\line(1,0){3.5}} + \put(7.75,0.5){\circle{0.5}} + \put(6,1){\makebox(0,0){A[1:3]}} + \end{picture}} + +\put(12.5,0){\begin{picture}(4,1) + \put(0,0){\framebox(4,1){INTEGER}} + \put(3.75,0){\line(0,1){1}} + \end{picture}} +\end{picture} +\normalsize +\setlength{\unitlength}{1pt} +\end{figure} + + +\begin{example}Float with a regular caption. + +Figure~\ref{fig:nocrot} is produced by the code below: +\begin{verbatim} +\begin{figure} +\centering +\caption{Example figure with a standard caption.} \label{fig:nocrot} +\setlength{\unitlength}{0.2in} +\footnotesize +\begin{picture}(17,2) +\thicklines +\put(0,0){\begin{picture}(4,1) + \put(1.5,0.5){\oval(3,1)} + \put(1.5,0.5){\makebox(0,0){2,5 (1)}} + \put(3,0.5){\line(1,0){1.0}} + \put(4.25,0.5){\circle{0.5}} + \end{picture}} +\put(4.5,0){\begin{picture}(8,1) + \put(0,0){\dashbox{0.25}(4,1){date}} + \put(4,0.5){\line(1,0){3.5}} + \put(7.75,0.5){\circle{0.5}} + \put(6,1){\makebox(0,0){A[1:3]}} + \end{picture}} +\put(12.5,0){\begin{picture}(4,1) + \put(0,0){\framebox(4,1){INTEGER}} + \put(3.75,0){\line(0,1){1}} + \end{picture}} +\end{picture} +\normalsize +\setlength{\unitlength}{1pt} +\end{figure} +\end{verbatim} +\end{example} % end example + +\begin{example}Float with a rotated caption. + +Figure~\ref{fig:crot} is produced by the code below: +\begin{verbatim} +\begin{figure} +\centering +\rotcaption{Figure~\protect\ref{fig:nocrot} with a rotated caption.} + \label{fig:crot} +\setlength{\unitlength}{0.2in} +\footnotesize +\begin{picture}(17,2) +... +\end{picture} +\normalsize +\setlength{\unitlength}{1pt} +\end{figure} +\end{verbatim} +\end{example} % end example + + +\begin{figure} +\centering +\rotcaption{Figure~\protect\ref{fig:nocrot} with a rotated caption.} + \label{fig:crot} +\setlength{\unitlength}{0.2in} +\footnotesize +\begin{picture}(17,2) +\thicklines +\put(0,0){\begin{picture}(4,1) + \put(1.5,0.5){\oval(3,1)} + \put(1.5,0.5){\makebox(0,0){2,5 (1)}} + \put(3,0.5){\line(1,0){1.0}} + \put(4.25,0.5){\circle{0.5}} + \end{picture}} +\put(4.5,0){\begin{picture}(8,1) + \put(0,0){\dashbox{0.25}(4,1){date}} + \put(4,0.5){\line(1,0){3.5}} + \put(7.75,0.5){\circle{0.5}} + \put(6,1){\makebox(0,0){A[1:3]}} + \end{picture}} +\put(12.5,0){\begin{picture}(4,1) + \put(0,0){\framebox(4,1){INTEGER}} + \put(3.75,0){\line(0,1){1}} + \end{picture}} +\end{picture} +\normalsize +\setlength{\unitlength}{1pt} +\end{figure} + + As can be seen from \fref{fig:crot} the advisability of rotating a caption +depends on the size of the body of the float. It may be better in certain +cases to leave the caption in its regular position and rotate the body of +the float instead. + +\def\prwrot#1{% +\settowidth{\fool}{ISOROT} +\savebox{\foo}{\parbox{\fool}{ISOROT ISOROT ISOROT ISOROT}}% +\framebox{---\begin{turn}{#1}\framebox{\usebox{\foo}}\end{turn}---}}% +\def\degrees{{\small$^{o}$}} + +\begin{figure} +\centering +\begin{tabular}{|c|c|c|} \hline +\prwrot{0} &\prwrot{-40}&\prwrot{-80}\\ +0\degrees & -40\degrees & -80\degrees \\ \hline +\prwrot{-120}&\prwrot{-160}&\prwrot{-200}\\ +-120\degrees & -160\degrees & -200\degrees \\ \hline +\prwrot{-240}&\prwrot{-280}&\prwrot{-320}\\ +-240\degrees & -280\degrees & -320\degrees \\ \hline +\end{tabular} +\caption{Rotation of paragraphs between 0 and -320 degrees} \label{fig:angles1} +\end{figure} + + +\begin{example}Regular caption and float. + +Figure~\ref{fig:angles1} is a regular figure and caption. It is produced by +the following code: +\begin{verbatim} +\def\prwrot#1{% +\settowidth{\fool}{ISOROT} +\savebox{\foo}{\parbox{\fool}{ISOROT ISOROT ISOROT ISOROT}}% +\framebox{---\begin{turn}{#1}\framebox{\usebox{\foo}}\end{turn}---}}% +\def\degrees{{\small$^{o}$}} +\end{verbatim} + +\begin{verbatim} +\begin{figure} +\centering +\begin{tabular}{|c|c|c|} \hline +\prwrot{0} &\prwrot{-40}&\prwrot{-80}\\ +0\degrees & -40\degrees & -80\degrees \\ \hline +\prwrot{-120}&\prwrot{-160}&\prwrot{-200}\\ +-120\degrees & -160\degrees & -200\degrees \\ \hline +\prwrot{-240}&\prwrot{-280}&\prwrot{-320}\\ +-240\degrees & -280\degrees & -320\degrees \\ \hline +\end{tabular} +\caption{Rotation of paragraphs between 0 and -320 degrees} \label{fig:angles1} +\end{figure} +\end{verbatim} +\end{example} % end example + + +\begin{figure} +\centering +\begin{sideways} +\begin{tabular}{|c|c|c|} \hline +\prwrot{0} &\prwrot{40}&\prwrot{80}\\ +0\degrees & 40\degrees & 80\degrees \\ \hline +\prwrot{120}&\prwrot{160}&\prwrot{200}\\ +120\degrees & 160\degrees & 200\degrees \\ \hline +\prwrot{240}&\prwrot{280}&\prwrot{320}\\ +240\degrees & 280\degrees & 320\degrees \\ \hline +\end{tabular} +\end{sideways} +\caption[Rotation of paragraphs between 0 and 320 degrees]% + {Rotation of paragraphs between 0 and 320 degrees (with figure + body turned sideways)}\label{fig:angles2} +\end{figure} + +\begin{example}Regular caption and rotated float body. + +Figure~\ref{fig:angles2} is a regular figure and caption where the figure +contents have been rotated. It was produced by the following code. +\begin{verbatim} +\begin{figure} +\centering +\begin{sideways} +\begin{tabular}{|c|c|c|} \hline +\prwrot{0} &\prwrot{40}&\prwrot{80}\\ +0\degrees & 40\degrees & 80\degrees \\ \hline +\prwrot{120}&\prwrot{160}&\prwrot{200}\\ +120\degrees & 160\degrees & 200\degrees \\ \hline +\prwrot{240}&\prwrot{280}&\prwrot{320}\\ +240\degrees & 280\degrees & 320\degrees \\ \hline +\end{tabular} +\end{sideways} +\caption[Rotation of paragraphs between 0 and 320 degrees]% + {Rotation of paragraphs between 0 and 320 degrees (with figure + body turned sideways)}\label{fig:angles2} +\end{figure} +\end{verbatim} +\end{example} % end example + +\begin{landscape} +\sclause{Landscaping} + + \latex{} normally prints in portrait mode. +The \verb|landscape|\ixenv{landscape} environment +prints all the enclosed stuff in landscape mode, except for headers +and footers which are not rotated. + +\begin{example} Landscaping + +The source for this part of the document is: +\begin{verbatim} +\begin{landscape} +\sclause{Landscaping} + + \latex{} normally prints in portrait mode. The ... +... +... long, wide tables. +\end{landscape} +\end{verbatim} +\end{example} + + The environment starts by clearing the current page and then switches +to portrait mode. At the end of the environment the current page is cleared +and the next page is back to normal portrait mode. + + All the other rotation commands and environments produce boxes and +\latex{} will not break a box across a page. The \verb|landscape| environemt +does not produce a box and so many pages can be printed in landscape mode +with \latex{} taking care of the page breaking for you. + + Landscape mode is not particularly useful for normal text as the +lines are far too long for comfortable reading. Where it can be useful +is where you have a table that is too wide to fit on a portrait page, so +needs to be rotated, yet is also too long to fit on the page when it is +rotated. The \file{supertabular}\ixpack{supertabular}, +the \file{longtable}\ixpack{longtable}, +and the \file{xtab}\ixpack{xtab} +packages provide facilities for automatically breaking long tables across +pages. Any of these can be used in conjunction with landscaping to both +rotate and automatically page break long, wide tables. +\end{landscape} + +\clause{The \file{xtab} package facility} + + The \file{xtab} package is fully documented in \bref{bib:xtab}. +This clause provides an overview of the package. + + The \file{xtab}\ixpack{xtab} package facility is an extension +of the \file{supertabular}\ixpack{supertabular} package originally +developed by Johannes Braams and Theo Jurriens. +The extension provides for the specification of a header to +go on the last page of a long table. + + The principal commands available are given in \tref{tab:xtab}. +\ixenv{xtabular} +\ixenv{mpxtabular} +\ixcom{topcaption} +\ixcom{bottomcaption} +\ixcom{tablecaption} +\ixcom{tablefirsthead} +\ixcom{tablehead} +\ixcom{tablelasthead} +\ixcom{notablelasthead} +\ixcom{tabletail} +\ixcom{tablelasttail} + +\topcaption{The principal xtab package commands} \label{tab:xtab} +\tablefirsthead{\hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tablehead{\multicolumn{2}{c}% + {{\captionsize\bfseries \tablename\ \thetable{} -- continued from previous page}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tablelasthead{\multicolumn{2}{c}% + {{\captionsize\bfseries \tablename\ \thetable{} -- concluded from previous page}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tabletail{\hline \multicolumn{2}{|r|}{{Continued on next page}} \\ \hline} +\tablelasttail{\\ \hline \hline} + +\begin{center} +\begin{xtabular}{|l|p{0.5\textwidth}|} +\verb|\begin{xtabular}{...}| & This is equivalent to the normal + \verb|\begin{tabular}{...}| environment. + You supply the specification of the columns + just as for the normal tabular environment. + All commands that can be used within a tabular + environment can also be used within + the xtabular environment. + \\ + & + Unlike the tabular environment which prevents page breaking +within the tabular, the xtabular allows page breaking, so that +tabulars can extend automatically across several pages. Xtabular +starts off with a tabular environment and checks the amount of +space left on the page as it adds each row to the tabular. +If the space left on the page is too short for another row, then +it ends the current tabular, performs a page break and starts +another tabular on the following page. This process is repeated +until all the rows have been output. + \\ + & + There are special commands for captioning a xtabular as a +table, and also elements can be automatically inserted after each +(internal) \verb|\begin{tabular}| and immediately before each +\verb|\end{tabular}|. + \\ + & + Do not put a xtabular in a table environment, as the table +environment keeps its contents on a single page (presumably you +are using xtabular because its contents are longer than +one page). + \\ +\verb|\end{xtabular}| & End the xtabular environment. \\ \hline +\verb|\begin{mpxtabular}| & Like the xtabular environment +except that each `page' is put into a \verb|minipage| first. Thus +it is possible to have footnotes inside an \verb|mpxtabular|. +The footnote text is printed at the end of each page. + \\ +\verb|\end{mpxtabular}| & End the mpxtabular environment. \\ \hline + & \textbf{Note:} If any of the following commands + are used, then they should be placed + before the particular xtabular + environment that they apply to. \\ +\verb|\topcaption{...}| & A command to provide a caption for the + table. The caption is placed at the top + of the table. \\ +\verb|\bottomcaption{...}| & A command to provide a caption for the + table. The caption is placed at the bottom + of the table. \\ +\verb|\tablecaption{...}| & A command to provide a caption for the + table. The caption is placed at the default + position, which is at the top + of the table. + \\ + & + \textbf{Notes:} You cannot use the \verb|caption| + command but you can put a label after + any of these captioning commands. If you + want captioning, the command must be specified + before the start of the xtabular environment. + \\ + & + The \verb|\...caption{}| command(s) remain + in effect until changed by another + \verb|\...caption| command. + \\ +\verb|\tablefirsthead{...}| & Defines the contents of the first occurence + of the tabular head. The tabular head is some + special treatment of the first row in the table. + This command is optional. + If used, the header must be closed by the + end of line command for tabulars (e.g., \verb|\\|). \\ +\verb|\tablehead{...}| & Defines the contents of the table head on + subsequent pages. + \\ + & + For example, you might want to note that + this is a continuation of the table on + the previous page, as well as repeating + any column headings that were given + at the start of the xtabular by + \verb|\tablefirsthead|. + \\ +\verb|\tablelasthead{...}| & Defines the contents of the table head + on the last page of the table. + \\ + & + This works by writing to the \file{.aux} file the number of +pages that the xtabular extends over. When the xtabular +comes to the last tabular (which it calculates from the +information it reads from the \file{.aux} file) it replaces the +contents of \verb|\tablehead| by the contents of \verb|\tablelasthead|. + \\ + & +It makes no attempt to measure the amount of space used by the last +table head, so if this is more than for \verb|tablehead| then the +tabular might be a litle too long. + \\ + & + In any case, when using this command, the document has to +be LaTeXed at least twice, just as it has to be to resolve +references and so on. + \\ +\verb|\notablelasthead| & Switches off the last \verb|\tablelasthead|. + A \verb|tablelasthead| stays in effect until + overwritten by a new \verb|\tablelasthead| + or cancelled by this command. + \\ +\verb|\tabletail{...}| & The contents of this command are inserted before + the \verb|\end{tabular}| on each page except + for the last page of the table. + \\ + & + For example, you might want to note that the + table is continued on the next page. + \\ +\verb|\tablelasttail{...}| & The contents of this command are inserted before + the final \verb|\end{tabular}| of the table. + \\ + & + For example, you might want to note that + this is where the table ends. +\end{xtabular} +\end{center} + + As well as the \verb|xtabular|\ixenv{xtabular} and +\verb|mpxtabular|\ixenv{mpxtabular} environments there are +the corresponding starred versions +(i.e., \verb|xtabular*|\ixenvs{xtabular} and + \verb|mpxtabular*|\ixenvs{mpxtabular}) for use in +two column\ixopt{twocolumn} mode where the table is meant to span +both columns. + +\begin{example} \label{ex:xtab} Table~\ref{tab:xtab} was produced by +the following code: +\begin{verbatim} +\topcaption{The principal xtab package commands} \label{tab:xtab} +\tablefirsthead{\hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tablehead{\multicolumn{2}{c}% + {{\captionsize\bfseries \tablename\ \thetable{} -- + continued from previous page}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tablelasthead{\multicolumn{2}{c}% + {{\captionsize\bfseries \tablename\ \thetable{} -- + concluded from previous page}} \\ + \hline \multicolumn{1}{|c|}{\textbf{Command}} & + \multicolumn{1}{c|}{\textbf{Effect}} \\ \hline } +\tabletail{\hline \multicolumn{2}{|r|}{{Continued on next page}} \\ \hline} +\tablelasttail{\\ \hline \hline} + +\begin{center} +\begin{xtabular}{|l|p{0.5\textwidth}|} +\verb|\begin{xtabular}{...}| & This is equivalent to the normal + \verb|\begin{tabular}{...}| environment. + You supply the specification of the columns + just as for the normal tabular environment. + All commands that can be used within a tabular + environment can also be used within + the xtabular environment. + \\ + & + Unlike the tabular environment which prevents page breaking +within the tabular, the xtabular allows page breaking, so that +tabulars can extend automatically across several pages. Xtabular +... ... ... +\verb|\tablelasttail{...}| & The contents of this command are inserted before + the final \verb|\end{tabular}| of the table. + \\ + & + For example, you might want to note that this is where +the table ends. +\end{xtabular} +\end{center} +\end{verbatim} +\end{example} + + The table is only broken between rows --- a row will not be split +across pages. This can lead to some bad page breaks, especially if +there are rows with a large vertical height (like some in \tref{tab:xtab}). +It is best to keep rows not too tall. + +The command +\verb|\shrinkheight{|\meta{length}\verb|}|\ixcom{shrinkheight} may be +used after the first \verb|\\| in the table to modify the allowed +height of the table on each page. A positive \meta{length} decreases +the allowed space per page and a negative \meta{length} increases +the allowed space. + +\begin{example} +This example illustrates changing the natural height of the pages +in a \verb|xtabular| and its relatives. + +\verb|\shrinkheight{2\baselineskip}| decreases the space per page by +two lines. + +\verb|\shrinkheight{-\baselineskip}| increases the space per page by +one line. +\end{example} + + You have to specify the font used for the +\verb|\tablehead|\ixcom{tablehead} and +\verb|tablelasthead|\ixcom{tablelasthead} yourself. +Within ISO documents, captions shall +be in bold font. The \file{iso}\ixclass{iso} class also provides +a command for +setting the size of the font used in captions, namely +\verb|\captionsize|\ixcom{captionsize}. +Note that this is used in~\eref{ex:xtab}. + The value of \verb|\captionsize|\ixcom{captionsize} is set by the +class. + +\sclause{Options} + + The \file{xtab} package has three options which control the amount of +information that is written to the \file{.log}\index{file!.log} file. The +options are: +\begin{enumerate} +\item The option \verb|errorshow|\ixopt{errorshow} (the default) does not + write any extra information; +\item The option \verb|pageshow|\ixopt{pageshow} writes information + about when and why \verb|xtabular| decides to produce a new page; +\item The option \verb|debugshow|\ixopt{debugshow}, which also includes + \verb|pageshow|, additionally writes information about each line + that is added to the table. +\end{enumerate} + + Under normal circumstances \file{xtab} is used without invoking any +option. The \verb|pageshow| option may be useful when attempting to cure +a bad page break. The \verb|debugshow| option, as its name implies, is +principally of use to the \file{xtab} developer. + + Independently of the options, the command +\verb|\sstraceon|\ixcom{sstraceon} may be used at any +point in the document to turn on printing of \verb|debugshow| data. This +can be turned off later by the \verb|\sstraceoff|\ixcom{sstraceoff} +command, which will stop all \verb|...show| printing. + +\sclause{Caveats} + + The authors of the original \file{supertabular} package note that +it has the following weaknesses: +\begin{itemize} +\item Sometimes the body of the first page of a table gets moved to the +following, leaving the caption behind; +\item Sometimes the last page of a table consists of just the head and foot +with no contents. +\end{itemize} +The weaknesses are caused by trying to guess where \tex{} will put a page +break. The package has to guesstimate how long the next entry will be in +the table and, if it is too long for the available space, it puts in its +own page break. If its guess is off too much in one direction, \tex{} will +break the page unexpectadly; if its off in the other direction +\file{supertabular} will put in an unnecessary page break. + + The \file{xtab} package has reduced, but perhaps not entirely +eliminated, these weaknesses. Some hand tuning may still be required. + + +%%%%%%%%% +%%%%\end{document} +%%%%%%%%% + + + +\clause{The \file{askinc} package facility} + + The \file{askinc}\ixpack{askinc} package facility contains \latex{} +code to enable the interactive +input of files. This functionality is a cross between the \latex{} +\verb|\include|\ixcom{include} and +\verb|\includeonly|\ixcom{includeonly} commands, and the +\verb|\input|\ixcom{input} command. + +In the body of the root source document, use the command +\verb+\infile{+\meta{file}\verb+}+\ixcom{infile} +for each \meta{file} +that comprises the document. That is, the command \verb|\infile| is similar +to the \verb|\input|\ixcom{input} and +\verb|\include|\ixcom{include} commands. + + When \latex ing the root document, you will be asked to provide a +comma-separated list of the \verb|\infile|s to be processed (similar to the +argument to the \verb|\includeonly|\ixcom{includeonly} +command). If you want all the files to be processed, just hit the +\verb|<RETURN>| key (or its equivalent). + + Like \verb|\include|d files, a file that is \verb|\infile|d into a +document shall not itself contain another \verb|\infile|d file. + +\begin{example}The following root file has three files that are \verb|\infile|d. +\begin{verbatim} +\documentclass[...]{...} +\usepackage{askincv} +% other preamble stuff +\begin{document} +% perhaps some stuff +\infile{file1} +\infile{file2} +\infile{file3} +% perhaps more stuff +\end{document} +\end{verbatim} +\end{example} % end example + +\clause{The \file{hyphenat} package facility} \label{sec:uschyp} + + The \file{hyphenat} package is fully described in~\bref{bib:hyphenat}. +This clause provides an overview of the portions of the package that are +most relevant to typesetting ISO standards. + + In \latex{} if you need to use the underscore (\verb|_|) +character in normal text, for example when documenting identifiers +in a programming language code, you have to use the +\verb|\_|\index{_ /@\verb?\_?} command, +as in \verb|a\_multiword\_identifier|. \latex{} normally treats +\verb|_|\index{_@\verb?_? (underscore)} as a math mode subscript command. +Further, if you want +the possibility of hyphenation\index{hyphenation} +at the position of an underscore +you have to use the command pairing +\verb|\_\-|;\index{_ /@\verb?\_?}\ixcom{-} this has the side +effect of disabling normal hyphenation in any succeeding `word' in +the identifier. + + The \file{hyphenat}\ixpack{hyphenat} package facility redefines the +\verb|\_|\index{_ /@\verb?\_?} command +so that hyphenationen is automatically enabled at the position +of the underscore and in all succeeding words in the identifier. + + +\begin{note} + Using the command pair \verb|\_\-| in conjunction with this facility +disables automatic hyphenation of succeeding words, so don't do it. +\end{note} + + + +\begin{example} \label{eg:uschyp} +This set of \latex{} source +\begin{verbatim} +Amazingly An\_excessively\_long\_multiword\_identifier% +\_demonstrating\_hyphenation + +\begin{minipage}{3cm} +\begin{itemize} +\item An\_excessively\_long\_multiword\_identifier% +\_demonstrating\_hyphenation +\item Underscore in math mode: $A_n$ +\item \verb|\_| command in math mode: $A\_n$ +\end{itemize} +\end{minipage} +\end{verbatim} +prints as: + +Amazingly An\_excessively\_long\_multiword\_identifier% +\_demonstrating\_hyphenation + +\begin{minipage}{3cm} +\begin{itemize} +\item An\_excessively\_long\_multiword\_identifier% +\_demonstrating\_hyphenation +\item Underscore in math mode: $A_n$ +\item \verb|\_| command in math mode: $A\_n$ +\end{itemize} +\end{minipage} + +\end{example} + +\begin{example} +Contrast this example with \eref{eg:uschyp}. +This set of \latex{} source +\begin{verbatim} +Amazingly An\_\-excessively\_\-long\_\-multiword\_\-identifier% +\_\-demonstrating\_\-hyphenation\_\-disabling + +\begin{minipage}{3cm} +\begin{itemize} +\item An\_\-excessively\_\-long\_\-multiword\_\-identifier% +\_\-demonstrating\_\-hyphenation\_\-disabling +\item Underscore in math mode: $A_n$ +\item \verb|\_| command in math mode: $A\_n$ +\end{itemize} +\end{minipage} +\end{verbatim} +prints as: + +Amazingly An\_\-excessively\_\-long\_\-multiword\_\-identifier% +\_\-demonstrating\_\-hyphenation\_\-disabling + +\begin{minipage}{3cm} +\begin{itemize} +\item An\_\-excessively\_\-long\_\-multiword\_\-identifier% +\_\-demonstrating\_\-hyphenation\_\-disabling +\item Underscore in math mode: $A_n$ +\item \verb|\_| command in math mode: $A\_n$ +\end{itemize} +\end{minipage} + +\end{example} + + + The \file{hyphenat} package also provides some other commands for +enabling hyphenation of words that include +analphabetic\index{character!analphabetic}\footnote{An {\it analphabetic} +character is any character +that is not alphabetic. Typically it refers to punctuation characters.} +characters. In this context, the phrase +`breakable character'\index{character!breakable} is used +to describe an analphabetic character that enables hyphenation immediately +after it and does not prevent further hyphenation in the `word' +in which it occurs. The \verb|\_|\index{_ /@\verb?\_?} command produces +a breakable underscore. Table~\ref{tab:breakable} lists all the commands +that generate breakable characters. + +\begin{table} +\centering +\caption{Commands producing breakable characters} \label{tab:breakable} +\begin{tabular}{|l|c|} \hline +\textbf{Command} & \textbf{Character} \\ \hline +\verb|\_| & \_ \\ +%\verb|\?| & \? \\ +\verb|\bshyp| & \bshyp \\ +\verb|\colonhyp| & \colonhyp \\ +\verb|\dothyp| & \dothyp \\ +\verb|\fshyp| & \fshyp \\ \hline +\end{tabular} +\end{table} + + The \verb|\bshyp|\ixcom{bshyp} command prodes a breakable backslash +(\verb|\|), \verb|\fshyp|\ixcom{fshp} produces a breakable forward +slash (\verb|/|), the \verb|\dothyp|\ixcom{dothyp} command produces a +breakable full stop (\verb|.|), also known in some countries as a period, +and the \verb|\colonhyp|\ixcom{colonhyp} command produces a breakable +colon (:). + +\begin{example} +This is similar to \eref{eg:uschyp} except that it demonstrates other +breakable characters. + +This set of \latex{} source +\begin{verbatim} +Analphabetically an\bshyp{}excessively\fshyp{}long\dothyp{}multiword\bshyp{}identifier% +\fshyp{}demonstrating\dothyp{}hyphenation + +\begin{minipage}{3cm} +Analphabetically an\bshyp{}excessively\fshyp{}long\dothyp{}multiword\bshyp{}identifier% +\fshyp{}demonstrating\dothyp{}hyphenation +\end{minipage} +\end{verbatim} +prints as: + +Analphabetically an\bshyp{}excessively\fshyp{}long\dothyp{}multiword\bshyp{}identifier% +\fshyp{}demonstrating\dothyp{}hyphenation + +\begin{minipage}{3cm} +Analphabetically an\bshyp{}excessively\fshyp{}long\dothyp{}multiword\bshyp{}identifier% +\fshyp{}demonstrating\dothyp{}hyphenation +\end{minipage} + +\end{example} + +\begin{note} +\latex{} will not hyphenate the first word in a paragraph. +\end{note} + + Just as with the \verb|\_|\index{_ /@\verb?\_?} command, +the discretionary hyphen +command (i.e., \verb|\-|\ixcom{-}) should not be used in conjunction with +any of the breakable character commands as it will then inhibit any +further potential hyphenation points. In general, any analphabetic +character in a word will inhibit further hyphenation. + +\normannex{Additional commands} \label{anx:extraiso} + +\sclause{Language configuration commands} + + There is an additional set of commands in the +\file{iso}\ixclass{iso} class +facility that +are specified here. This set has been provided to enable the style to be +easily configured for a non-English language.\index{non-English languages} + + The modified commands may be put in the document +preamble\index{preamble} or, preferably, +placed in a separate \file{.sty}\index{file!.sty} file and +called as a package. This latter option improves reuseability. + +\ssclause{Words and phrases} + + To produce a non-English version of the \file{iso}\ixclass{iso} +class the relevant commands +from the following list may require re-definition together with +the heading commands in \tref{tab:dsa}. + +\begin{note}In the listing, the default values are printed \emph{in this +font} to distinguish them from the explanatory text. +\end{note} % end note} + +\begin{itemize} +\item \verb|\annexname|\ixcom{annexname}: Header for + an annex. + Default value is: \emph{\annexname}\index{Annex} +\item \verb|\contentsname|\ixcom{contentsname}: Header + for table of contents listing. + Default value is: \emph{\contentsname}\index{Contents} +\item \verb|\copyrightname|\ixcom{copyrightname}: + The copyright owner. + Default value is: \emph{\copyrightname}\index{ISO} +\item \verb|\examplename|\ixcom{examplename}: + Identification of an example. + Default value is: \emph{\examplename}\index{EXAMPLE} +%\item \verb|\examplesname|\ixcom{examplesname}: +% Header for a list of examples. +% Default value is: \emph{\examplesname}\index{EXAMPLES} +\item \verb|\figurename|\ixcom{figurename}: Start of + the caption for a figure. + Default value is: \emph{\figurename}\index{Figure} +\item \verb|\forewordname|\ixcom{forewordname}: + Title of the Foreword. + Default value is: \emph{\forewordname}\index{Foreword} +\item \verb|\indexname|\ixcom{indexname}: Header for + the index. + Default value is: \emph{\indexname}\index{Index} +\item \verb|\informativename|\ixcom{informativename}: + Identification of an informative annex. + Default value is: \emph{\informativename}\index{informative} +\item \verb|\inscopename|\ixcom{inscopename}: + Introduction to in-scope listing. + Default value is: \emph{\inscopename} + \index{The following are within the scope of this} +\item \verb|\ISname|\ixcom{ISname}: + `INTERNATIONAL STANDARD' as used in the header for an IS title page. + Default value is: + \emph{\ISname}\index{INTERNATIONAL STANDARD} +\item \verb|\introductionname|\ixcom{introductionname}: + Title of the Introduction. + Default value is: + \emph{\introductionname}\index{Introduction} +\item \verb|\listannexname|\ixcom{listannexname}: + Header for list of annexes listing. + Default value is: \emph{\listannexname}\index{Annexes} +\item \verb|\listfigurename|\ixcom{listfigurename}: + Header for list of figures listing. + Default value is: \emph{\listfigurename}\index{Figures} +\item \verb|\listtablename|\ixcom{listtablename}: + Header for list of tables listing. + Default value is: \emph{\listtablename}\index{Tables} +\item \verb|\normativename|\ixcom{normativename}: + Identification of a normative annex. + Default value is: \emph{\normativename}\index{normative} +\item \verb|\normrefsname|\ixcom{normrefsname}: + Title of normative references clause. + Default value is: + \emph{\normrefsname}\index{Normative references} +\item \verb|\notename|\ixcom{notename}: + Identification of a note. + Default value is: \emph{\notename}\index{NOTE} +%\item \verb|\notesname|\ixcom{notesname}: +% Header for a list of notes. +% Default value is: \emph{\notesname}\index{NOTES} +\item \verb|\outofscopename|\ixcom{outofscopename}: + Introduction to out-of-scope listing. + Default value is: \emph{\outofscopename} + \index{The following are outside the scope of this} +\item \verb|\pagename|\ixcom{pagename}: + The word for the page header in the table of contents. + Default value is: \emph{\pagename}\index{Page} +\item \verb|\scopename|\ixcom{scopename}: + Title of the Scope. + Default value is: \emph{\scopename}\index{Scope} +%\item \verb|\sectionname|\ixcom{sectionname}: +% The word for a 'section'. +% Default value is: \emph{\sectionname}\index{Section} +\item \verb|\tablename|\ixcom{tablename}: + Start of the caption for a table. + Default value is: \emph{\tablename}\index{Table} +\item \verb|\tbpname|\ixcom{tbpname}: + Footnote text for `to be published.'. + Default value is: + \emph{\tbpname}\index{To be published.} +\end{itemize} + + The following commands provide the names for referenced document elements. +\begin{itemize} +\item \verb|\annexrefname|\ixcom{annexrefname}: + Reference to an annex. + Default value is: \emph{\annexrefname}\index{annex} +\item \verb|\clauserefname|\ixcom{clauserefname}: + Reference to a clause. + Default value is: \emph{\clauserefname}\index{clause} +\item \verb|\examplerefname|\ixcom{examplerefname}: + Reference to an example. + Default value is: \emph{\examplerefname}\index{example} +\item \verb|\figurerefname|\ixcom{figurerefname}: + Reference to a figure. + Default value is: \emph{\figurerefname}\index{figure} +\item \verb|\noterefname|\ixcom{noterefname}: + Reference to a note. + Default value is: \emph{\noterefname} +\item \verb|\tablerefname|\ixcom{tablerefname}: + Reference to a table. + Default value is: \emph{\tablerefname}\index{table} +\item \verb|\pagerefname|\ixcom{pagerefname}: + Reference to a page. + Default value is: \emph{\pagerefname}\index{page} +\end{itemize} + + + +\begin{note} The above commands, + may be changed via the \latex{} +\verb|\renewcommand|\ixcom{renewcommand}. +\end{note} % end note +\begin{note}The \latex{} command \verb|\today|\ixcom{today} + will probably also require modification. This is not something + for the casual user to attempt. +\end{note} % end note + + +\begin{example}The following is a partial list of the commands to convert to a + French language\index{French language} style. +\begin{verbatim} +\renewcommand{\annexname}{Annexe} +\renewcommand{\contentsname}{Sommaire} +\renewcommand{\examplename}{EXEMPLE} +%\renewcommand{\examplesname}{EXEMPLES} +\renewcommand{\forewordname}{Avant-propos} +\renewcommand{\ISname}{NORME INTERNATIONALE} +\renewcommand{\listtablename}{Tableaux} +\renewcommand{\scopename}{Domaine d'application} +\renewcommand{\tablename}{Tableau} +\end{verbatim} +\end{example} % end example + +\ssclause{Boilerplate} + + Some commands print boilerplate text; again, the default text is in English. +For \file{iso}\ixclass{iso} there are several such commands. The first is +\verb|\copyrightnotice|\ixcom{copyrightnotice} + which contains the text of the copyright notice +for an International Standard. This can be changed via the +\verb|\renewcommand|\ixcom{renewcommand} command. + + The second is \verb|\normrefbp|\ixcom{normrefbp} +which prints the boilerplate for the introduction to the Normative +references clause. Like the \verb|\copyrightnotice| command, this can +be redefined using the \verb|\renewcommand|. + + Another is the \verb|\fwdbp|\ixcom{fwdbp} command which +\verb|\input|s the boilerplate text from a file called \file{isofwdbp.tex}. +\index{isofwdbp.tex@\file{isofwdbp.tex}} For non-English text either +modify the contents of this +file or create a new file and modify the \verb|\fwdbp| command to call in +the new file. + + + +\begin{example}This is how \verb|\normrefbp| could be written for the +French language and in accordance with the second edition of the +ISO Directives. +\label{eg:frenchnfbp} +\begin{verbatim} +\renewcommand{\normrefbp}[1]{% + Les normes suivantes contiennent des dispositions qui, par +suite de la r\'{e}f\'{e}nce qui en est faite, constituent des +dispositions valables pour la pr\'{e}sente #1. +Au moment de la publication, les \'{e}ditions indiqu\'{e}es +\'{e}taient en viguer. Toute norms est sujette \`{a} r\'{e}vision et +les parties prenantes des accords fond\'{e}s sur la pr\'{e}sente #1 +sont invit\'{e}es \`{a} rechercher la possibilit\'{e} d'appliquer +les \'{e}ditions les plus r\'{e}centes des normes indiqu\'{e}es +ci-apr\`{e}s. Les membres de la CEI et de l'ISO poss\`{e}dent +le registre des Normes Internationales en vigueur \`{a} un +moment donn\'{e}. +}% end renewcommand +\end{verbatim} +\end{example} % end example +\begin{example}Given that \verb|\normrefbp| has been redefined as in \eref{eg:frenchnfbp}, +then the command \\ + \verb|\normrefbp{norme internationale}| will print: + +\newcommand{\tempbp}[1]{% + Les normes suivantes contiennent des dispositions qui, par +suite de la r\'{e}f\'{e}nce qui en est faite, constituent des +dispositions valables pour la pr\'{e}sente #1. +Au moment de la publication, les \'{e}ditions indiqu\'{e}es +\'{e}taient en viguer. Toute norms est sujette \`{a} r\'{e}vision et +les parties prenantes des accords fond\'{e}s sur la pr\'{e}sente #1 +sont invit\'{e}es \`{a} rechercher la possibilit\'{e} d'appliquer +les \'{e}ditions les plus r\'{e}centes des normes indiqu\'{e}es +ci-apr\`{e}s. Les membres de la CEI et de l'ISO poss\`{e}dent +le registre des Normes Internationales en vigueur \`{a} un +moment donn\'{e}. +}% end newcommand + +\tempbp{norme internationale} +\end{example} % end example + + + + The \verb|\tspasfwdbp|\ixcom{tspasfwdbp} also maintains +boilerplate text in the file +\file{tspasfwdbp.tex}\index{tspasfwdbp.tex@\file{tspasfwdbp.tex}}. + +\sclause{Caption text size} + + The size of the font used for typestting the captions of figures and +tables is defined within the \file{iso}\ixclass{iso} class. +% The +%\verb|uglycaption|\ixopt{uglycaption} option resets the size to larger +%than normal for the captioning text. + + The size of the captioning font is controlled by the value of the +\verb|\captionsize|\ixcom{captionsize} command. The default definition +of \verb|\captionsize| is similar to: +\verb|\captionsize{\normalsize}| \ixcom{normalsize}\\ +%The \verb|uglycaption| option resets this to (approximately): \\ +%\verb|\captionsize{\large}|. \ixcom{large} + + You can reset the \verb|\captionsize| at any point in your +document to change the size of captions from then onwards. + + All the normal \latex{} font size commands are available. +\begin{example} +The following shows the effects of the font size commands. \\ +\verb|{\tiny tiny text}|\ixcom{tiny} +prints: {\tiny tiny text} \\ +\verb|{\scriptsize scriptsize text}|\ixcom{scriptsize} +prints: {\scriptsize scriptsize text} \\ +\verb|{\footnotesize footnotesize text}|\ixcom{footnotesize} +prints: {\footnotesize footnotesize text} \\ +\verb|{\small small text}|\ixcom{small} +prints: {\small small text} \\ +\verb|{\normalsize normalsize text}|\ixcom{normalsize} +prints: {\normalsize normalsize text} \\ +\verb|{\large large text}|\ixcom{large} +prints: {\large large text} \\ +\verb|{\Large Large text}|\ixcom{Large} +prints {\Large Large text} \\ +\verb|{\LARGE LARGE text}|\ixcom{LARGE} +prints: {\LARGE LARGE text} \\ +\verb|{\huge huge text}|\ixcom{huge} +prints: {\huge huge text} \\ +\verb|{\Huge Huge text}|\ixcom{Huge} +prints: {\Huge Huge text} +\end{example} + + +\normannex{Ordering of LaTeX commands} \label{anx:lord} + + The \latex{} commands for the logical structuring of an ISO standard +document are: +\begin{verbatim} +\documentclass[<options>]{isov2} % for LaTeX 2e +\usepackage{<name>} % additional packages (LaTeX 2e) +\standard{<standard identification>} +\yearofedition{<year>} +\languageofedition{<parenthesized code letter>} + % other preamble commands +\begin{document} +\begin{foreword} % start Foreword + \fwdbp % boilerplate + % other text and perhaps \fwdnopatents +\end{foreword} +\begin{introduction} % start Introduction + % text and perhaps \intropatents +\end{introduction} +\title{<intro>}{<main>}{<compl>} % the title +\scopeclause % The Scope clause + \begin{inscope}{<document>} % in scope boilerplate + % \item list + \end{inscope} + % text + \begin{outofscope}{<document>} % out of scope boilerplate + % \item list + \end{outofscope} + % text +\normrefsclause % The Normative references clause + \normrefbp{<document identifier>} % boilerplate + \begin{nreferences} + % \isref{<p1>}{<p2>} and/or \disref{<p1>}{<p2>} commands + \end{nreferences} +% definitions, symbols, abbreviation clause as appropriate +\clause{<Clause title>} +% THE BODY OF THE DOCUMENT +% ... +% \normannex{<Normative annex title>} +% ... +% \infannex{<Infomative annex title>} +% ... +\bibannex % optional bibliography + % bibliography listing +% the index +\end{document} +\end{verbatim} + + +\infannex{Creating an index} \label{anx:indexing} + + \latex, although providing some assistance in preparing the data for an +index\index{index}, only does part of the job. Providing the command +\verb|\makeindex|\ixcom{makeindex} is put in the document's +preamble\index{preamble} +the \latex{} command \verb|\index{text}|\ixcom{index} +writes out \verb|text| to an \file{.idx}\index{file!.idx} file +in the following format:\ixcom{indexentry} +\begin{verbatim} +\indexentry{text}{pg} +\end{verbatim} +where \verb|pg| is the page number in the document where the \verb|\index| +command occurred. + + The \verb|theindex|\ixenv{theindex} environment +is used for printing an index. The format of this is: +\begin{verbatim} +\begin{theindex} +\item <text and page numbers> + \subitem <text and page numbers> + \subsubitem <text and page numbers> +. +. +\end{theindex} +\end{verbatim} +where \verb|\item|\ixcom{item} is a major topic entry, +\verb|\subitem|\ixcom{subitem} is a sub-topic entry, and +\verb|\subsubitem|\ixcom{subsubitem} is a sub-subtopic +entry. The command \verb|\indexspace|\ixcom{indexspace} +can be used to add space between the entries. Other text and commands can also +occur within the environment. + + \latex{} provides no help in going from an \file{.idx} file to the +\verb|theindex| environment~\bref{lamport}. The data in the file has to be +sorted, duplicate page numbers deleted, etc, and then re-written in the +desired environment format. + + The typical process for producing a document with an index is: +\begin{enumerate} +\item Prepare the source file, say \file{fred.tex}, with the command + \verb|\makeindex|\ixcom{makeindex} in the + preamble\index{preamble}, and \verb|\index|\ixcom{index} + commands within the body of the text. +\item Run \latex. As well as producing the usual output files, it will also + produce the file \file{fred.idx}. +\item By some means produce a file, let's call it \file{fredidx.tex}, from the + data in \file{fred.idx} that contains the appropriate \verb|theindex| + formatted data. +\item Run \latex{} again on \file{fred.tex} which now has to contain (either + via \verb|\input|\ixcom{input} or \verb|\include|\ixcom{include}) + the file \file{fredidx.tex}. +\end{enumerate} + + Chen and Harrison~\bref{chen} discuss the problems of creating an index +in their +paper \emph{Index preparation and processing} and also describe the +{\sc MakeIndex}\index{makeIndex@{\sc MakeIndex}} program. Goosens, Mittelbach +and Samarin~\bref{goosens} also describe how to use the {\sc MakeIndex} +program for producing indexes for \latex{} documents. For users of +{\sc MakeIndex} a style file called +\file{iso.ist}\index{iso.ist@\file{iso.ist}}\index{file!.ist} is provided as +part of this distribution. + +\sclause{The index command}\ixcom{index} + + The \verb|\index| command is one of the standard \latex{} commands. +The command format is \verb|\index{|\meta{str}\verb|}|, where \meta{str} + is any +string of characters, and it writes an entry to the \file{.idx} file in +the form \verb|\indexentry{<str>}{pg}|, where \verb|pg| is the page +number in the document where the command is called. + + Some points to note: +\begin{itemize} +\item The \verb|\index| command is, in \latex{} terminology, + \emph{fragile}\index{fragile}. That is, if it appears in a moving + argument (like the caption to a table or figure) it must be preceded + by the \latex{} \verb|\protect|\ixcom{protect} + command. +\item Any of the ten \latex{} special characters\index{special characters} + (i.e., \verb|#|, \verb|$|, \verb|%|, \verb|&|, \verb|~|, \verb|_|, + \verb|^|, \verb|\|, \verb|{| and \verb|}|) may appear + within the argument, with the proviso that it must have no unmatched + braces (the braces in \verb|\{| and \verb|\}| are counted in the + matching process). +\item The \verb|\index| command must not appear inside another command's + argument (e.g., within a + \verb|\footnote|\ixcom{footnote} or \verb|\clause|\ixcom{clause} + command) unless the argument of the \verb|\index| command contains + only letters, digits, and/or punctuation characters. In particular, + it should not contain any of the special characters. + \begin{note}This means that the argument of the \verb|\ix|\ixcom{ix} + command should not contain any special characters. Remember that the + \verb|\ix| command prints its argument in the body of the text and also + calls \verb|\index| to place its argument into the \file{.idx} file. + \end{note} % end note +\end{itemize} + +\begin{note}Under some circumstances, an \verb|\index| command appearing in another +command's argument may contain special characters, provided they are +\verb|\protect|ed. Determination of when this is satisfactory is a process +of trial and error. +\end{note} % end note + +\begin{example}The command \verb|\ix{an\protect\_underscore}| will print the +characters \emph{an\_undescore} +in the text and also write the following to the \file{.idx} file: +\begin{verbatim} +\indexentry{an\_ underscore}{pg} +\end{verbatim} +Notice that there is a space between the underscore character and the word +`underscore' in the \file{.idx} file (but there is no space in the printed +body of the document text). This extraneous space may have to be edited out +from the final index. +\end{example} % end example + + +\begin{comment} + +\sclause{The program GenIndex} \index{genindex@GenIndex} + + GenIndex is a C program\index{C language} that converts \file{.idx} +data to \verb|theindex|\ixenv{theindex} data. +Source code for GenIndex is freely available from +the NIST SOLIS\index{SOLIS} system (see \ref{anx:solis}). +The GenIndex program is not +as sophisticated as {\sc MakeIndex} but does a reasonable +job.\footnote{These two programs are not completely compatible but do have +a common subset of commands. The common subset excludes the {\tt SeeAlso} +and {\tt See} commands. At some later time GenIndex may be rewritten to +be compatible with {\sc MakeIndex}. It is probably advisable, therefore, not +to use the GenIndex {\tt SeeAlso} and {\tt See} commands.} + + +\ssclause{Input} \index{genindex@GenIndex!input} + + GenIndex reads lines of data of the form: +\begin{verbatim} +\indexentry{IndexData}{Page} +\end{verbatim} + + \verb|Page| is a character string representing a page number. GenIndex only +recognizes strings that represent integer values greater than or equal to zero, +or (upper and lower case) roman numerals. For any other numbering system, the +page number is treated as zero. + + \verb|IndexData| is a string of characters and command characters that +specify the data that is to be indexed. In the simplest case, this is just the +word or phrase to appear in the index, but much more can be done than this, as +is described below. + + The general form of \verb|IndexData| is given by the following partial +grammar: +\begin{verbatim} +IndexData = MainData ['!' SubData ['!' SubSubData ] ] . +MainData = Data . +SubData = Data . +SubSubData = Data . +Data = Key [ Entry ] [ SeeAlso ] [ See ] . +Key = any string not containing the @, !, + or * characters . +Entry = '@' any string not containing the !, + or * characters + (unless enclosed in braces {} ) . +SeeAlso = '+' any string not containing the ! or * characters + (unless enclosed in braces {} ) . +See = '*' any string not containing the ! character + (unless enclosed in braces {} ) . +\end{verbatim} + + Upto three levels of indexing are enabled --- a main topic entry, an optional +sub-topic, and an optional sub-subtopic. The sub-topics for an entry are +introduced by the \verb|!| character. \index{(33@{\verb?!?}} + + Apart from \verb|Key|, braces within a string must be matched. That is, +they must appear in pairs of an opening and a closing brace. +Spaces are significant within the \verb|Key| string, but not in the others. +That is, \verb*|\indexentry{A}| differs from \verb*|\indexentry{ A}| +both of which differ from \verb*|\indexentry{A }|. + + +\begin{example}Here is an index entry for a simple topic: +\begin{verbatim} +\indexentry{Topic}{27} +\end{verbatim} +\end{example} % end example +\begin{example}And here is one where the key and the main entry are different, a +sub-topic is being indexed, and the page is in roman numerals: +\begin{verbatim} +\indexentry{main@\textbf{Main}!sub topic}{xviii} +\end{verbatim} +\end{example} % end example +\begin{example}This is how the characters \verb|@|, \verb|!|, \verb|+| and +\verb|*| characters are indexed in this document. +\begin{verbatim} +\index{(64@{\verb?@?}} +\index{(33@{\verb?!?}} +\index{(43@{\verb?+?}} +\index{(42@{\verb?*?}} +\end{verbatim} +\end{example} % end example + + +\sssclause{Key} \index{genindex@GenIndex!input!key} + + The indexed entries are sorted alphabetically on the value of \verb|Key|. +Sorting is case-insensitive. A \verb|Key| value is required. + + More precisely, the key entries are sorted according to the +C language\index{C language} implementation collating sequence, which is usually ASCII. +Table~\ref{tab:ascii} gives the ASCII collating sequence for the \latex\ +character set. \index{ASCII} + + +\begin{table} +\def\vissp{\hbox{\tt\char`\ }} % visible space +\centering +\caption{The \protect\latex{} ASCII character set} \label{tab:ascii} +\begin{tabular}{|r|c|c|c|c|c|c|c|c|c|c|} \hline + & \textbf{0} & \textbf{1} & \textbf{2} & \textbf{3} & \textbf{4} & +\textbf{5} & \textbf{6} & \textbf{7} & \textbf{8} & \textbf{9} \\ \hline\hline +\textbf{30} & & & \vissp & \verb|!| & \verb|"| & + \verb|#| & \verb|$| & \verb|%| & \verb|&| & \verb|'| \\ +\textbf{40} & \verb|(| & \verb|)| & \verb|*| & \verb|+| & \verb|,| & + \verb|-| & \verb|.| & \verb|/| & \verb|0| & \verb|1| \\ +\textbf{50} & \verb|2| & \verb|3| & \verb|4| & \verb|5| & \verb|6| & + \verb|7| & \verb|8| & \verb|9| & \verb|:| & \verb|;| \\ +\textbf{60} & \verb|<| & \verb|=| & \verb|>| & \verb|?| & \verb|@| & + \verb|A| & \verb|B| & \verb|C| & \verb|D| & \verb|E| \\ +\textbf{70} & \verb|F| & \verb|G| & \verb|H| & \verb|I| & \verb|J| & + \verb|K| & \verb|L| & \verb|M| & \verb|N| & \verb|O| \\ +\textbf{80} & \verb|P| & \verb|Q| & \verb|R| & \verb|S| & \verb|T| & + \verb|U| & \verb|V| & \verb|W| & \verb|X| & \verb|Y| \\ +\textbf{90} & \verb|Z| & \verb|[| & \verb|\| & \verb|]| & \verb|^| & + \verb|_| & \verb|`| & \verb|a| & \verb|b| & \verb|c| \\ +\textbf{100} & \verb|d| & \verb|e| & \verb|f| & \verb|g| & \verb|h| & + \verb|i| & \verb|j| & \verb|k| & \verb|l| & \verb|m| \\ +\textbf{110} & \verb|n| & \verb|o| & \verb|p| & \verb|q| & \verb|r| & + \verb|s| & \verb|t| & \verb|u| & \verb|v| & \verb|w| \\ +\textbf{120} & \verb|x| & \verb|y| & \verb|z| & \verb|{| & \verb/|/ & + \verb|}| & \verb|~| & & & \\ \hline +\end{tabular} +\end{table} + +\sssclause{Entry} \index{genindex@GenIndex!input!entry} +\index{(64@{\verb?@?}} + + \verb|Entry| is optional and is introduced by the \verb|@| character. If present, this will form the indexed string. +If absent, then the value of \verb|Key| is used instead. + +\sssclause{See also} \index{genindex@GenIndex!input!see also} + \index{(43@{\verb?+?}} + + \verb|SeeAlso| is optional and is introduced by the \verb|+| character. +Within a document, it should only be used once +per entry. If used more than once, then only the last value is taken. + + This is used to produce an entry that refers to another indexed entry in +a \emph{see also \ldots} style. + +\sssclause{See} \index{genindex@GenIndex!input!see} +\index{(42@{\verb?*?}} + + \verb|See| is optional and is introduced by the \verb|*| character. +Within a document, it should be used only once per +entry. If used more than once, then only the last value is taken. + + This is used to produce an entry that refers to another entry in a +\emph{see \ldots} style. Use of this option prohibits printing page numbers +for the entry. + +\ssclause{Output} \index{genindex@GenIndex!output} + + The program GenIndex sorts the entries into alphabetical order (based on +the \verb|Key| values), and produces a \verb|theindex| for the input data. +Several formatting commands are included in the output file to enable +adjustment of the appearance of the printed index. These are shown in +\tref{tab:indexc}. + +\begin{table} +\centering +\caption{GenIndex formatting commands} \label{tab:indexc} +\begin{tabular}{|l|l|} \hline +\textbf{Command} & \textbf{Effect} \\ \hline +\verb|\indexfill|\ixcom{indexfill} & + spacing style between main topic and page numbers \\ +\verb|\sindexfill|\ixcom{sindexfill} & + spacing style between subtopic and page numbers \\ +\verb|\ssindexfill|\ixcom{ssindexfill} & + spacing between sub-subtopic and page numbers \\ +\verb|\indexsee{text}|\ixcom{indexsee} & + produces \verb|text| as a \emph{see} entry \\ +\verb|\indexseealso{text}|\ixcom{indexseealso} & + produces \verb|text| as a \emph{see also} entry \\ +\verb|\otherindexspace{c}|\ixcom{otherindexspace} & + heading for non-alphabetic entry \\ +\verb|\alphaindexspace{c}|\ixcom{alphaindexspace} & + heading for an alphabetic entry \\ \hline +\end{tabular} +\end{table} + + +\begin{note}The commands in \tref{tab:indexc} are defined in the + \file{iso}\ixclass{iso} class file. +\end{note} +\begin{note}If the commands are not defined in your system, + then you can define them + using the \latex{} \verb|\newcommand|\ixcom{newcommand} + command. On the other hand, if they are defined in your system, + you can change them using the + \latex{} \verb|\renewcommand|\ixcom{renewcommand} command. +\end{note} % end note + + +\begin{example} +This input file: +\begin{verbatim} +\indexentry{Freddy+Fred}{27} +\indexentry{Frederick*Fred}{29} +\indexentry{Fred}{42} +\indexentry{Fred}{52} +\indexentry{Fred}{43} +\end{verbatim} +will produce output like: +\begin{verbatim} +\begin{theindex} +\alphaindexspace{F} +\item Fred \indexfill 42--43, 52 +\item Frederick \indexsee{Fred} +\item Freddy \indexfill 27 \indexseealso{Fred} +\end{theindex} +\end{verbatim} +\end{example} % end example + +\sssclause{Indexfill commands} + + The commands \verb|\indexfill{|\meta{style}\verb|}|\ixcom{indexfill}, +\verb|\sindexfill{|\meta{style}\verb|}|\ixcom{sindexfill} and +\verb|\ssindexfill{|\meta{style}\verb|}|\ixcom{ssindexfill} +control the style of spacing between an indexed entry and its corresponding +page numbers. + +\begin{example} +If you want to have the page numbers right justified, with lines between the +main topics and their numbers, dots between sub-topics and pages, and +sub-subtopic numbers right justified, then you could define these commands as: +\begin{verbatim} +\newcommand{\indexfill}{\hrulefill} +\newcommand{\sindexfill}{\dotfill} +\newcommand{\ssindexfill}{\hfill} +\end{verbatim} +\end{example} % end example + + +\begin{anote}The usual \latex{} style is to have a small gap between the +topic and page number, the whole being set ragged right. +If this is what you want, then define the commands as: +\begin{verbatim} +\newcommand{\indexfill}{} +\newcommand{\sindexfill}{} +\newcommand{\ssindexfill}{} +\end{verbatim} +\end{anote} % end note + +\sssclause{Indexsee and indexseealso commands} + + The \verb?\indexsee{?\meta{text}\verb?}?\ixcom{indexsee} and +\verb?\indexseealso{?\meta{text}\verb?}?\ixcom{indexseealso} commands +control the appearance +of the \emph{see} and \emph{see also} text. + + +\begin{example} +These commands could be defined as: +\begin{verbatim} +\newcommand{\indexsee}[1]{\par \hspace*{2em} \emph{see} #1} +\newcommand{\indexseealso}[1]{\par \hspace*{2em} \emph{see also} #1} +\end{verbatim} +\end{example} % end example + +\sssclause{Index space commands} +\ixcom{alphaindexspace} +\ixcom{otherindexspace} + + The commands +\verb?\alphaindexspace{?\meta{c}\verb?}?\ixcom{alphaindexspace} and +\verb?\otherindexspace{?\meta{c}\verb?}?\ixcom{otherindexspace} +control the amount of space between blocks of index entries. +These are an extension of the +\latex{} \verb|\indexspace|\ixcom{indexspace} +command, which just inserts some vertical space into the index listing. +Both these commands take a single parameter, which is typically a single +character. + +\begin{anote} +GenIndex looks at the first character (call it \verb|c|) of the \verb|Key| +and if this changes +as it processes the ordered list of main topics, it puts that character +as the parameter for these commands. It writes \verb|\alphaindexspace{c}| if +the character is alphabetic (and \verb|c| is put into upper-case), +otherwise it writes \verb|\otherindexspace{c}|. +\end{anote} % end note + +\begin{example} +These commands could be defined as: +\begin{verbatim} +\newcommand{\alphaindexspace}[1]{\indexspace + {\bfseries #1}} +\newcommand{\otherindexspace}[1]{} +\end{verbatim} +which would result in the printing of a vertical space and a bold font text +for an alphabetic header, or nothing for anything else. +\end{example} % end example + +\ssclause{Running GenIndex} \index{genindex@GenIndex!run} + + To run GenIndex, first obtain a copy of the program, and compile it if +necessary. Execute the program on your data. + + GenIndex takes zero, one or two file names as parameters. If no files are +given then input and output is from and to \verb|stdin| and \verb|stdout| +respectively. + + If one file is given, then input is taken from this file, and output +is to \verb|stdout|. + + If two file names are given, then input is taken from the first and output +is to the second. + +\begin{example} +A typical usage would be: +\begin{verbatim} +GenIndex fred.idx fredidx.tex +\end{verbatim} +which would read the \file{fred.idx} file and write the resulting index data to +file \file{fredidx.tex}. +\end{example} % end example + +\end{comment} + +% sgmlannx.tex latex and SGML + +\infannex{LaTeX, the Web, and *ML} \label{anx:sgml} \index{SGML} + + ISO are becoming more interested in electronic sources for their +standards as well as the traditional camera-ready copy. Acronyms like +PDF, HTML, SGML and XML have been bandied about. Fortunately documents +written using \latex{} are well placed to be provided in a variety of +electronic formats. A comprehensive treatment of \latex{} with respect +to this topic is provided by Goossens and Rahtz~\bref{lwebcom}. + + SGML (Standard Generalized Markup Language) is a document tagging +language that is described in ISO~8879~\bref{sgml} and whose usage is described +in~\bref{bryan}, among others. The principal +mover behind SGML is Charles Goldfarb from IBM, who has authored a detailed +handbook~\bref{goldfarb} on the SGML standard. + + The concepts lying behind both \latex{} and SGML are similar, but on the face +of it they are distinctly different in both syntax and capabilities. ISO is +migrating towards electronic versions of its standard documents and, naturally, +would prefer these to be SGML tagged. + Like \latex, SGML has a +concept of style files, which are termed DTDs, and both systems support +powerful macro-like capabilities. SGML provides for logical document +markup and not typesetting --- commercial SGML systems often use +\TeX{} or \latex{} as their printing engine, as does the NIST SGML +environment for ISO~10303~\bref{pandl}. + + + +NIST have SGML tagged some ISO~10303 documents +using manual methods, which are time consuming and expensive. +About 1997 there was a NIST +effort underway to develop an auto-tagger that would (semi-) automatically convert +a \latex{} tagged document to one with SGML tags. This tool assumed a +fixed set of \latex{} macros and a fixed DTD. + The design of an auto-tagger +essentially boils down to being able to convert from a source document tagged +according to a \latex{} style file to one which is tagged according to an +SGML DTD. + Fully automatic conversion is really only possible if the authors' +of the documents to be translated avoid using any `non-standard' macros within +their documents. There is a program called \file{ltx2x}\index{ltx2x} available +from SOLIS, which replaces \latex{} commands within a document with +user-defined text strings~\bref{ltx2x}. This can be used as a basis for +a \latex{} to whatever auto-tagger, provided the \latex{} commands are not +too exotic. + + HTML is a simple markup language, based on SGML, and is used for the +publication of many documents on the Web. XML is a subset of SGML and appears +to being taken up by every man and his dog as \emph{the} document markup +language. HTML is being recast in terms of XML instead of SGML. PDF is a page +description language that is a popular format for display of documents +on the Web. + + \latex{} documents can be output in PDF by using pdfLaTeX. Instead +of a \file{.dvi} file being produced a \file{.pdf} file is output directly. +The best +results are obtained when PostScript fonts rather than Knuth's cm fonts +are used. Noting that the \file{iso} class provides an \verb|\ifpdf| command, +a general form for documents to be processed by either \latex{} or pdfLaTeX +is +\begin{verbatim} +\documentclass{isov2} +\usepackage{times} % PostScript fonts Times, Courier, Helvetica +\ifpdf + \pdfoutput=1 % request PDF output + \usepackage[pdftex]{graphicx} +\else + \usepackage{graphicx} +\fi +... +\end{verbatim} + + There are several converters available to transform a \latex{} document +into an HTML document, but like \file{ltx2x} they generally do their own +parsing of the source file, and unlike \file{ltx2x} are typically limited +to only generating HTML. Eitan Gurari's \file{TeX4ht}\index{TeX4ht} +suite is a notable +exception (see Chapter~4 and Appendix~B of~\bref{lwebcom}). It uses the +\file{.dvi} file as input, so that all the parsing is done by \TeX, and can be +configured to generate a wide variety of output formats. +A set of \file{TeX4ht} configuration files are available for converting +ISO \latex{} documents into HTML\footnote{Later, configuration files for XML +output will be developed.}. + + Some points to watch when writing \latex{} documents that will assist +in translations into *ML are given below. Typically, attention to these points +will make it easier to parse the \latex{} source. + +\begin{itemize} +\item Avoid using the \verb|\label|\ixcom{label} command within + clause headings or captions. It can just as easily be placed immediately + after these constructs. +\item Avoid using the \verb|\index|\ixcom{index} command within + clause headings or captions. It can just as easily be placed immediately + after these constructs. +\end{itemize} + + + + + + +\infannex{Obtaining LaTeX and friends} \label{anx:getstuff} + + \latex{} is a freely available document typesetting system. There are many +public domain additions to the basic system. +The information below gives pointers to where +you can obtain \latex{} etc., from the\index{Internet} Internet. + + \latex{} runs on a wide variety of hardware, from PCs to Crays. +Source to build a \latex{} system is freely available via anonymous +ftp\index{ftp} from what is called CTAN\index{CTAN} +(Comprehensive \tex{} Archive Network). +There are three sites; pick the one nearest to you. +\begin{itemize} +\item \url{ftp.dante.de} CTAN in Germany; +\item \url{ftp.tex.ac.uk} CTAN in the UK; +\item \url{ctan.tug.org} CTAN in the USA; +\end{itemize} +The top level CTAN directory for \latex{} and friends is +\url{/tex-archive}. CTAN contains a wide variety +of (La)TeX sources, style files, and software tools and scripts +to assist in document processing. + +\begin{anote} + CTAN is maintained by the \tex{} Users Group (TUG). Their homepage +\isourl{http://www.tug.org} should be consulted for the current +list of CTAN sites and mirrors. +\end{anote} + +\begin{comment} + +\sclause{SOLIS} \index{SOLIS} \label{anx:solis} + + SOLIS is the \emph{SC4 On Line Information Service}. It contains many electronic +sources of STEP related documents. The relevant top level directory is +\url{pub/subject/sc4}. + In particular, SOLIS contains the source for this document +and the \file{.sty} files, as well as other \latex{} related files. +The \latex{} root directory is \url{sc4/editing/latex}. The latest +versions of the \latex{} related files are kept in the sub-directory +\url{latex/current}. +Some \latex{} related programs are also available in the +\url{latex/programs} sub-directory. + + SOLIS can be reached at \isourl{http://www.nist.gov/sc4}. + +\end{comment} + + +\infannex{Changes in this release} \label{anx:changes} + + Many of the commands and environments have been redefined in order +to match the change in requirements from the the third to the fourth +edition of the ISO Directives. Usage of these is unaffected. + + The following changes have been made in this release: +\begin{itemize} +\item The \verb|cover|\ixenv{cover} environment has been added; + +\item The boolean test \verb|\ifpdf|\ixcom{ifpdf} has been added; + +\item The command \verb|\fwdnopatents|\ixcom{fwdnopatents} has been added + for patent boilerplate in the Foreword. + +\item The command \verb|\tpasfwdbp|\ixcom{tpasfwdbp} has been added + for TS/PAS Foreword boilerplate. + +\item The command \verb|\intropatents|\ixcom{intropatents} has been added + for patent boilerplate in the Introduction. + +\item The commands \verb|\pref|\ixcom{pref} and + \verb|\pagerefname|\ixcom{pagerefname} have been added. + +\item The command \verb|\trwfwdbpi|\ixcom{trfwdbpi} for Foreword boilerplate + in a Technical Report has been deleted. + +\item The \verb|notes|\ixenv{notes} and \verb|examples|\ixenv{examples} + environments have been deleted. + +\item Support is provided for the \file{hyperref}\ixpack{hyperref} + package. + +\end{itemize} + + + +\bibannex +%\label{biblio} + +\begin{references} +\reference{LAMPORT, L.,}{LaTeX --- A Document Preparation System,} + {Addison-Wesley Publishing Co., 2nd edition, 1994.} \label{lamport} +\reference{WILSON, P.R.,}{LaTeX files for typesetting ISO standards: + Source code,} + {NISTIR, National Institute of Standards and Technology, + Gaithersburg, MD 20899. June 1996.} \label{isoe} +\reference{WILSON, P.R.,}{LaTeX package files for ISO~10303: User manual,} + {NISTIR, National Institute of Standards and Technology, + Gaithersburg, MD 20899. June 1996.} \label{stepsty} +\reference{RAHTZ, S., and BARROCA, L.,}{A style option for rotated + objects in \latex,}{ TUGBoat, volume 13, number 2, pp 156--180, + July 1992.} \label{rahtz} +\reference{GOOSSENS, M., MITTELBACH, F. and SAMARIN, A.,}{% + The LaTeX Companion,} + {Addison-Wesley Publishing Co., 1994.} \label{goosens} +\reference{GOOSSENS, M., and RAHTZ, S.,}{% + The LaTeX Web Companion --- Integrating TeX, HTML and XML,} + {Addison-Wesley Publishing Co., 1999.} \label{lwebcom} +\reference{CHEN, P. and HARRISON, M.A.,}{Index preparation and + processing,}{Software--Practice and Experience, 19(9):897--915, + September 1988.} \label{chen} +%\reference{KOPKA, H. and DALY, P.W.,}{A Guide to LaTeX,} +% {Addison-Wesley Publishing Co., 1993.} \label{kopka} +%\reference{WALSH, N.,}{Making TeX Work,}{O'Reilly \& Associates, Inc., +% 103 Morris Street, Suite A, Sebastopol, CA 95472. 1994. } \label{walsh} +\reference{ISO 8879:1986,}{Information processing --- + Text and office systems --- + Standard Generalized Markup Language (SGML).}{} \label{sgml} +\reference{GOLDFARB, C.F.,}{The SGML Handbook,} + {Oxford University Press, 1990.} \label{goldfarb} +\reference{BRYAN, M.,}{SGML --- An Author's Guide to the Standard Generalized + Markup Language,}{Addison-Wesley Publishing Co., 1988. } \label{bryan} +\reference{PHILLIPS, L. and LUBELL, J.,}{An SGML Environment for STEP,}% + {NISTIR 5515, National Institute of Standards and Technology, + Gaithersburg, MD 20899. November 1994.} \label{pandl} +\reference{WILSON, P. R.,}{LTX2X: A LaTeX to X Auto-tagger,}% + {NISTIR, National Institute of Standards and Technology, + Gaithersburg, MD 20899. June 1996.} \label{ltx2x} +\begin{comment} +\reference{RESSLER, S.,}{The National PDES Testbed Mail Server User's Guide,} + {NSTIR 4508, National Institute of Standards and Technology, + Gaithersburg, MD 20899. January 1991.} \label{ressler} +\reference{RINAUDOT, G.R.,}{STEP On Line Information Service (SOLIS),} + {NISTIR 5511, National Institute of Standards and Technology, + Gaithersburg, MD 20899. October 1994. } \label{rinaudot} +\reference{KROL, E.,}{The Whole Internet --- User's Guide \& Catalog,} + {O'Reilly \& Associates, Inc., + 103 Morris Street, Suite A, Sebastopol, CA 95472. 1993. } \label{krol} +\end{comment} +\reference{WILSON, P.R.,}{The hyphenat package,}% + {1999. (Available from CTAN)} \label{bib:hyphenat} +\reference{WILSON, P.R.,}{The xtab package,}% + {1998. (Available from CTAN)} \label{bib:xtab} +\end{references} + + +%%%%%%% here is the index at the end +%%\input{isomanidx} +\input{isoman.ind} + + + +\end{document} |