From ae046b09c49c37fbd70455aab429f8a1f3032e8f Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 11 Jan 2006 23:55:38 +0000
Subject: trunk/Master/texmf-dist/source/latex/nrc

git-svn-id: svn://tug.org/texlive/trunk@417 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/nrc/nrc.dtx | 5470 ++++++++++++++++++++++++++++
 1 file changed, 5470 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/nrc/nrc.dtx

(limited to 'Master/texmf-dist/source/latex/nrc/nrc.dtx')

diff --git a/Master/texmf-dist/source/latex/nrc/nrc.dtx b/Master/texmf-dist/source/latex/nrc/nrc.dtx
new file mode 100644
index 00000000000..c59b87d7c01
--- /dev/null
+++ b/Master/texmf-dist/source/latex/nrc/nrc.dtx
@@ -0,0 +1,5470 @@
+% \section{Document preambles}
+%
+%    \begin{macrocode}
+%<nrc1|nrc2>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+%<*dtx>
+\ProvidesFile            {nrc.dtx}
+%</dtx>
+%<nrc1cls>\ProvidesClass  {nrc1}
+%<nrc1sty>\ProvidesPackage{nrc1}
+%<nrc2cls>\ProvidesClass  {nrc2}
+%<nrc2sty>\ProvidesPackage{nrc2}
+%<balance>\ProvidesPackage{baltools}
+%<*nrc1|nrc2|balance>
+                 [2002/11/19 v2.0
+%</nrc1|nrc2|balance>
+%<nrc1cls>       NRC single-column journal class%
+%<nrc1sty>       NRC single-column journal compatibility package%
+%<nrc2cls>       NRC 2-column journal class%
+%<nrc2sty>       NRC 2-column journal compatibility package%
+%<balance>       NRC 2-column balancing tools%
+%<*dtx>
+                 NRC macros source file%
+%</dtx>
+%<*nrc1|nrc2|balance>
+]% $Id: nrc.dtx,v 2.141 2002/11/19 17:45:07 rf Exp rf $
+%</nrc1|nrc2|balance>
+%    \end{macrocode}
+%
+% \iffalse
+%
+% Note that the RCS version relates to the number of times the file
+% has been checked-in, which relates to a development process taking
+% place on several machines, rather than the incidence of significant
+% change; the definitive version number is that in the \Provides*
+% things, while the RCS Id may provide a clue as to the latest date
+% the documentation was worked on.
+%
+% Code to compile the thing using LaTeX2e
+%
+%    \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+%
+%
+\begin{document}
+ \GetFileInfo{nrc.dtx}
+ \title{The \textsf{nrc} macros\thanks{This file
+        has version number \fileversion, last
+        revised \filedate}}
+    \author{Robin Fairbairns\\\small\texttt{rf10@cam.ac.uk}}
+ \date{Printed \today}
+ \maketitle
+ \tableofcontents
+ \begin{center}
+   \fboxsep1.5mm
+   \framebox{\bfseries
+     \begin{minipage}{4.5in}
+       Copyright \copyright\
+       Her Majesty the Queen in Right of Canada (1999--\\
+       \hphantom{Copyright \copyright\ }%
+         2002) as represented by the Minister responsible\\
+       \hphantom{Copyright \copyright\ }%
+         for the National Research Council of Canada.
+     \end{minipage}}
+ \end{center}
+ \DocInput{nrc.dtx}
+\end{document}
+%</driver>
+%    \end{macrocode}
+% 
+% \fi
+% \CheckSum{4586}
+%
+% \StopEventually{}
+% \section{Introduction}
+%
+% This file generates class files that provide macros for use with
+% \LaTeXe{} to typeset journals published by the National Research
+% Council of Canada, in both one- (\textsf{nrc1}) and two-column
+% (\textsf{nrc2}) formats.
+%
+% \subsection{Class options}
+%
+% \begin{macro}{\NRC@clsname}
+% \begin{macro}{\NRC@warning}
+% \begin{macro}{\hb@xt@}
+% \begin{macro}{\NRC@xlap}
+% \begin{macro}{\NRC@footer@centre}
+% \begin{macro}{\NRC@tpheader@centre}
+% \begin{macro}{\NRC@tpfooter@centre}
+% First, a few utility definitions, etc.
+%
+% \cs{hb@xt@} is in modern \LaTeX{} kernels, but \cs{providecommand}
+% was there from the very start of \LaTeXe.
+%
+% \cs{NRC@clsname} is self-explanatory and \cs{NRC@warning} is a
+% warning for the class.  \cs{NRC@xlap} is a centred lap (a zero-width
+% box, like \cs{llap} and \cs{rlap}); the name comes from the
+% \textsl{TUGboat} macros.  \cs{NRC@footer@centre} is used in the
+% footer of pages; it may be blank~--- hence pre-emptive declaration
+% here.  \cs{NRC@tpfooter@centre} (old style) or
+% \cs{NRC@tpheader@centre} (new style) contains the same information on
+% the title page, and may also therefore be blank.
+%
+%    \begin{macrocode}
+%<*nrc1cls|nrc2cls>
+\newcommand{\NRC@clsname}%
+%<nrc1>{nrc1}
+%<nrc2>{nrc2}
+\newcommand{\NRC@warning}[1]{\ClassWarning\NRC@clsname{#1}}
+\providecommand{\hb@xt@}{\hbox to}
+\newcommand{\NRC@xlap}[1]{\hb@xt@\z@{\hss#1\hss}}
+\let\NRC@footer@centre\@empty
+%<newtplayout>\let\NRC@tpheader@centre\@empty
+%<!newtplayout>\let\NRC@tpfooter@centre\@empty
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{landscape}
+% \begin{environment}{11pt}
+% \begin{environment}{12pt}
+% \begin{environment}{a5paper}
+% \begin{environment}{b5paper}
+% Kill off all actively irrelevant options.  (Landscape anything, and
+% the standard 5-size papers are too small\dots)  Unless we do this,
+% we will inherit those options (which are defined by
+% \textsf{article.cls}) and cause potential confusion.
+%    \begin{macrocode}
+\DeclareOption{landscape}{\NRC@warning{Option \CurrentOption\space
+    ignored}}
+\DeclareOption{11pt}{\ds@landscape}
+\DeclareOption{12pt}{\ds@landscape}
+\DeclareOption{a5paper}{\ds@landscape}
+\DeclareOption{b5paper}{\ds@landscape}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{cmfonts}
+% \begin{environment}{type1fonts}
+% \begin{environment}{type1rest}
+% Font usage: this provides the mechanism to test the class without
+% access to the specialised (and rather expensive) fonts used at the
+% NRC.
+%
+% Option \verb|usecmfonts| replaces text Times and Helvetica by
+% Computer Modern family fonts.  Option \verb|type1rest| uses Times
+% and Helvetica, but restricts the set of Helvetica available by
+% replacing Helvetica Light by Helvetica (Medium: the regular weight
+% of the font), and Helvetica Black by Helvetica Bold.
+%
+% Option \verb|type1fonts| (the default) uses the complete set of
+% Times and Helvetica fonts available in the production process.
+%    \begin{macrocode}
+\newif\if@usecmfonts
+\newif\if@restrictedtypeone
+\DeclareOption{cmfonts}{\@usecmfontstrue}
+\DeclareOption{type1fonts}{\@usecmfontsfalse
+  \@restrictedtypeonefalse}
+\DeclareOption{type1rest}{\@usecmfontsfalse
+  \@restrictedtypeonetrue}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{YandY}
+% \begin{environment}{genTeX}
+% Option \verb|YandY| specifies that \verb|LY1| encoding should be
+% used.  Otherwise (option |genTeX|~--- `generic' \TeX{}) we use
+% whatever encoding the user specifies (by default, |OT1|).  We make
+% no moves on input encoding: that's up to the user, regardless\dots
+%    \begin{macrocode}
+\newif\if@yandy
+\DeclareOption{YandY}{\@yandytrue}
+\DeclareOption{genTeX}{\@yandyfalse}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{breakaddress}
+% \begin{environment}{nobreakaddress}
+% These control an aspect of the layout of the address information box
+% at the bottom of the title page.
+%
+% Option \verb|breakaddress| arranges that the address is printed on a
+% new line after the list of authors whose address it is.  Option
+% \verb|nobreakaddress| (the default) arranges that the address runs
+% on after the list of authors.
+%    \begin{macrocode}
+\DeclareOption{breakaddress}{\let\if@breakaddress\iftrue}
+\DeclareOption{nobreakaddress}{\let\if@breakaddress\iffalse}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{twocolid}
+% \begin{environment}{twocolid*}
+% \begin{environment}{onecolid}
+% Options \verb'twocolid' and \verb'twocolid*' arrange that the IDbox
+% at the bottom of the title page is set over both columns, rather
+% than over one column only (which is the default, and which the
+% nervous can select by option \verb'onecolid').  The IDbox can be set
+% internally in a single column over the entire width of the page
+% (option \verb'twocolid'), or in two columns (option
+% \verb'twocolid*').
+%    \begin{macrocode}
+%<*nrc2>
+\newif\if@onecolid
+\newif\if@multcolid
+\DeclareOption{twocolid}{\@onecolidfalse\@multcolidfalse}
+\DeclareOption{twocolid*}{\@onecolidfalse\@multcolidtrue}
+\DeclareOption{onecolid}{\@onecolidtrue}
+%</nrc2>
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{leqno}
+% \begin{environment}{reqno}
+% \begin{macro}{\iflefteqnos}
+% The option \verb'leqno' (the default) has the same meaning (in
+% effect) as does the \verb'article' class option (which in fact loads
+% its view of the world through a \verb'.clo' file).  The option
+% \verb'reqno' restores the standard \TeX{} view of the matter, which
+% is sometimes needed in \verb'nrc2'-class papers.
+%    \begin{macrocode}
+\newif\iflefteqnos
+\DeclareOption{leqno}{\lefteqnostrue}
+\DeclareOption{reqno}{\lefteqnosfalse}
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% Now control of the labels in the bibliography.
+%
+% \begin{environment}{numbib}
+% \begin{environment}{nonumbib}
+% \begin{macro}{\ifNRC@numbib}
+% These options merely switch
+%    \begin{macrocode}
+\newif\ifNRC@numbib
+\DeclareOption{numbib}{\NRC@numbibtrue}
+\DeclareOption{nonumbib}{\NRC@numbibfalse}
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+%
+% \begin{environment}{author}
+% \begin{macro}{\ifNRC@author@use}
+% If the class is being used by an author to prepare a paper, there
+% are things that can't be entered: for example, final volume, issue,
+% or page number, and NRC file number.  The |author| class option
+% (which will almost never be executed other than by way of
+% \cs{ExecuteOptions}) forewarns the class that such commands should
+% not be expected.
+%    \begin{macrocode}
+\newif\ifNRC@author@use
+\NRC@author@usefalse
+\DeclareOption{author}{\NRC@author@usetrue}
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+%
+% The next two control the preprint/production state of the paper.
+%
+% \begin{environment}{preprint}
+% \begin{environment}{production}
+% \begin{macro}{\ifNRC@preprint}
+% Option \verb|preprint| causes the page styles to change (omit dates,
+% page numbers, etc.), while option \verb|production| (the default)
+% sets page styles as required in the production process.  Note that
+% \verb|preprint| is really `incompatible' (i.e., makes no sense) with
+% \verb|trimmarks|, but we don't diagnose the two together.
+%    \begin{macrocode}
+\newif\ifNRC@preprint
+\DeclareOption{preprint}{\NRC@preprinttrue}
+\DeclareOption{production}{\NRC@preprintfalse}
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% Then two that control decorations in page footers.
+%
+% \begin{environment}{proof}
+% \begin{environment}{pagnf}
+% \begin{macro}{\NRC@footer@defd}
+% Notices that this is a proof printing only, or that it is a printing
+% (e.g., on the web) whose pagination differs from the final
+% pagination in the journal.
+%
+% \cs{NRC@footer@defd} records which of these options has been given
+% (0 for neither, 1 for |proof|, 2 for |pagnf|); it's used for
+% diagnostics here, and (in `original' style) when deciding whether to
+% set up the title page footer centre, later.
+%    \begin{macrocode}
+\newcommand{\NRC@footer@defd}{0}
+\DeclareOption{proof}{\ifcase\NRC@footer@defd
+    \renewcommand\NRC@footer@centre{%
+      \fontsize{14}{16}%
+      \usefont\f@encoding\sfdefault cn%
+      \NRC@text@proof
+    }%
+%<newtplayout> \let\NRC@tpheader@centre\NRC@footer@centre
+%<!newtplayout> \let\NRC@tpfooter@centre\NRC@footer@centre
+    \renewcommand{\NRC@footer@defd}{1}%
+  \or
+    \NRC@warning{"\CurrentOption" option repeated}%
+  \or
+    \NRC@warning{"\CurrentOption" option inconsistent
+                                  with "pagnf" option}%
+  \fi
+}
+\DeclareOption{pagnf}{\ifcase\NRC@footer@defd
+    \renewcommand\NRC@footer@centre{%
+      \fontsize\@xpt\@xiipt%
+      \usefont\f@encoding\sfdefault mn%
+      \NRC@text@pagination
+    }%
+%<newtplayout> \let\NRC@tpheader@centre\NRC@footer@centre
+%<!newtplayout> \let\NRC@tpfooter@centre\NRC@footer@centre
+    \renewcommand{\NRC@footer@defd}{2}%
+  \or
+    \NRC@warning{"\CurrentOption" option inconsistent
+                                  with "proof" option}%
+  \or
+    \NRC@warning{"\CurrentOption" option repeated}%
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{finalverso}
+% \begin{environment}{nofinalverso}
+% Option |finalverso| specifies that the paper should end on a recto
+% page (creating a blank, unnumbered page if the text doesn't for
+% itself; the blank page does \emph{not} appear in the paper's page
+% count).
+%    \begin{macrocode}
+\newif\if@finalverso
+\DeclareOption{finalverso}{\@finalversotrue}
+\DeclareOption{nofinalverso}{\@finalversofalse}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% 
+%
+% \begin{environment}{notrimmarks}
+% \begin{environment}{trimmarks}
+% \begin{macro}{\NRC@toptrim}
+% \begin{macro}{\NRC@bottomtrim}
+% The next two options control the creation of trim marks.
+%
+% Option \verb|trimmarks| enables output of trim marks, which are
+% needed in the final production process.  Option \verb|notrimmarks|
+% (the default) suppresses the trim marks.
+%    \begin{macrocode}
+\DeclareOption{notrimmarks}{%
+  \let\NRC@toptrim\relax
+  \let\NRC@bottomtrim\relax
+}
+\DeclareOption{trimmarks}{%
+  \AtEndOfClass{%
+    \let\NRC@toptrim\NRC@dotoptrim
+    \let\NRC@bottomtrim\NRC@dobottomtrim
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% \begin{environment}{english}
+% Languages: we recognise the possibility English and French words in
+% the structural text of the paper.  First, the English variants
+% (option \verb|english|, the default):
+%    \begin{macrocode}
+\DeclareOption{english}{%
+%    \end{macrocode}
+%
+% \begin{macro}{\ifNRC@french}
+% General flag for odds and ends
+%    \begin{macrocode}
+\let\ifNRC@french\iffalse
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@DeclareText}
+% Establish the declaration of texts
+%    \begin{macrocode}
+\def\NRC@DeclareText#1#2#3{\def#1{#2}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@journal}
+% Name of the journal for use in page headers and footers
+% \emph{Note}: this value is no longer preset; in the days when there
+% was \emph{only} a \texttt{cjp} class, the value was preset to `Can.\
+% J.\ Phys.', but that setting is inappropriate in a class that can be
+% used for several different journals.
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% \begin{macro}{\tablename}
+% These are \LaTeX\ original commands~--- the name for the references
+% section of the paper, and the names to use in float captions; these
+% have to be deferred to begin document, to avoid the ravages both of
+% \textsf{article.cls} and (if the user loads it) of
+% \textsf{babel.sty}:
+%    \begin{macrocode}
+  \AtBeginDocument{\renewcommand\refname{References}%
+    \renewcommand\tablename{Table}}
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% \begin{environment}{french}
+% And now the same thing for French (option \verb|french|); note that
+% since option |english| is executed by default, all the names defined
+% by \cs{newcommand} in that option have to be redefined by
+% \cs{renewcommand} here\dots
+%    \begin{macrocode}
+\DeclareOption{french}{%
+%    \end{macrocode}
+%
+% \begin{macro}{\ifNRC@french}
+% General flag for odds and ends
+%    \begin{macrocode}
+\let\ifNRC@french\iftrue
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@DeclareText}
+% Establish the declaration of texts
+%    \begin{macrocode}
+\def\NRC@DeclareText#1#2#3{\def#1{#3}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% \begin{macro}{\tablename}
+%    \begin{macrocode}
+  \AtBeginDocument{\renewcommand\refname{Bibliographie}%
+    \renewcommand\tablename{Tableau}%
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% Execute the options that define our defaults:
+%    \begin{macrocode}
+%<editors>\ExecuteOptions{type1fonts,YandY}
+%<*authors>
+\IfFileExists{times.sty}%
+  {\ExecuteOptions{type1rest,genTeX,author}}%
+  {\ExecuteOptions{cmfonts,genTeX,author}}%
+%</authors>
+\ExecuteOptions{nobreakaddress,notrimmarks,english,%
+  numbib,nofinalverso%
+}
+%<nrc2>\ExecuteOptions{onecolid,leqno}
+%<nrc1>\ExecuteOptions{reqno}
+%</nrc1cls|nrc2cls>
+%    \end{macrocode}
+%
+% \begin{environment}{finalbalance}
+% \begin{environment}{nofinalbalance}
+% \begin{macro}{\ifNRC@finalbalance}
+% For the \textsf{baltools} package, we provide just one option, and
+% its negation: whether or not to balance columns at the end of the
+% document.  The default is to balance.
+%    \begin{macrocode}
+%<*balance>
+\newif\ifNRC@finalbalance
+\DeclareOption{finalbalance}{\NRC@finalbalancetrue}
+\DeclareOption{nofinalbalance}{\NRC@finalbalancefalse}
+\DeclareOption*{\PackageError{baltools}%
+  {Option \CurrentOption\space not recognised}}
+\ExecuteOptions{finalbalance}
+\ProcessOptions
+\ifNRC@finalbalance
+  \AtEndDocument{\if@twocolumn\BalanceColumns\fi}
+\fi
+%</balance>
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% Finally (back with the classes), dispose of any remaining options via
+% \textsf{article.cls}, tell it to use |leqno| if necessary, and
+% |fleqn|, and load it:
+%    \begin{macrocode}
+%<*nrc1cls|nrc2cls>
+\DeclareOption*{\PassOptionsToClass\CurrentOption{article}}
+\ProcessOptions
+\iflefteqnos
+  \PassOptionsToClass{leqno}{article}
+\fi
+\LoadClass[fleqn,twoside]{article}
+%    \end{macrocode}
+%
+% \subsection{Tidying up after options}
+%
+% The \textsf{babel} package has the unfortunate habit of changing all
+% the structural text elements when the language changes:
+% `unfortunate' because we need to use text other than \textsf{babel}
+% chooses\dots
+%
+% We therefore have to arrange that enthusiasm of some of
+% \textsf{babel}'s commands is somewhat curtailed.  However, at the
+% present stage we don't even know if \textsf{babel} is going to be
+% loaded, so we dump stuff into the token stream at begin document to
+% do the job for us.
+%
+% For English, the list is relatively straightforward:
+%    \begin{macrocode}
+\AtBeginDocument{\NRC@stripdef{english}\figurename}
+%    \end{macrocode}
+%
+% For French, the situation is complicated by the existence of three
+% different established language definition files: one distributed
+% with current babel itself (\textsf{frenchb}), one distributed with
+% the previous edition of babel (\textsf{francais}), and the one
+% distributed with the GUTenberg French language support bundle
+% (\textsf{french}).  At this stage, the only way of determining
+% what's going to be loaded, if it does get loaded, is to look for the
+% file it will be loaded from: so we have three paths through the code,
+% distinguishing on the existence of the various \texttt{*.ldf} files.
+%
+% The GUTenberg \textsf{french} style does various unamendable things
+% that clash with the NRC's requirements, so we warn of the
+% possibility of slight confusion if it proves to be present.  (The
+% NRC themselves do not use the GUTenberg style in production, but
+% potential authors may.)
+%    \begin{macrocode}
+\IfFileExists{french.ldf}{%
+  \def\NRC@french@lang{french}%
+  \NRC@warning{GUTenberg Babel french style detected --
+    \MessageBreak
+    some corruption of NRC-defined format may occur\@gobble
+  }%
+}{%
+  \IfFileExists{frenchb.ldf}{%
+    \def\NRC@french@lang{frenchb}%
+%    \end{macrocode}
+%
+% \textsf{frenchb.ldf} has these other odd ideas about how lists
+% should be formatted.  
+%    \begin{macrocode}
+    \AtBeginDocument{%
+      \@nameuse{bbl@nonfrenchlistspacing}%
+    }%
+  }{%
+    \IfFileExists{francais.ldf}{%
+      \def\NRC@french@lang{francais}%
+    }{%
+      \NRC@warning{No Babel french style detected --
+        \MessageBreak
+        French sections of paper will not be correctly formatted\@gobble}%
+      \let\NRC@french@lang\@empty
+    }%
+  }%
+}
+\ifx\NRC@french@lang\@empty
+\else
+  \AtBeginDocument{%
+    \expandafter\NRC@stripdef{\NRC@french@lang}\figurename
+    \expandafter\NRC@stripdef{\NRC@french@lang}\tablename
+    \expandafter\NRC@stripdef{\NRC@french@lang}\abstractname
+    \expandafter\NRC@stripdef{\NRC@french@lang}\refname
+%    \end{macrocode}
+%
+% We define our own list spacing and item label layouts, thank you
+% very much; this ensures that \textsf{babel}'s |french| option
+% doesn't interfere.
+%    \begin{macrocode}
+    \@ifpackageloaded{babel}{%
+      \expandafter\addto\csname extras\NRC@french@lang\endcsname
+        {\bbl@nonfrenchitemize}%
+    }{}%
+  }
+\fi
+%    \end{macrocode}
+%
+%
+% \subsection{Auxiliary package requirements}
+%
+% Current thinking (at least) is that the \textsf{nrc2} class needs to
+% load the \textsf{multicol} package, so (in default of a better place)
+% we do that here.
+%    \begin{macrocode}
+%<nrc2>\RequirePackage[infoshow]{multicol}
+%    \end{macrocode}
+%
+%
+% \subsection{Declaring texts}
+%
+% A lot of `fixed' texts are used in the classes, and these are
+% declared using a \cs{NRC@DeclareText} command, which is established
+% during option processing to select the appropriate language for the
+% substitution text.
+%
+% \begin{macro}{\NRC@DeclareText}
+% Syntax: \cs{NRC@DeclareText}\marg{\cs{cmd}}\marg{english text}%
+%                                            \marg{french text}
+%
+% Declares `\cs{cmd}' to have English or French substitution text.
+% This section of the classes makes use of the command.
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@and}
+% Err, a conjunction
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@and}{and}{et}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@NRC}
+% The name for the National Research Council Canada, for use in page
+% footers
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@NRC}{NRC\ Canada}{CNRC Canada}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@vol}
+% The name for `volume', for use in page footers
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@vol}{Vol.}{Vol.}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@correspondAll}
+% The name for the author for correspondence, when no other
+% information is given
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@correspondAll}{Author to whom all
+    correspondence should be addressed.}{Auteur correspondant.}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@correspond}
+% The text for the author for correspondence, when extra address, or
+% whatever, is given
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@correspond}%
+                  {Corresponding author (e-mail: \@tempa).}%
+                  {Auteur correspondant (courriel~\string: \@tempa).}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@present}
+% The text for the author's present address
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@present}{Present Address:}%
+                                   {Adresse actuelle~\string:}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@telephone}
+% \begin{macro}{\NRC@text@fax}
+% \begin{macro}{\NRC@text@telefax}
+% \begin{macro}{\NRC@text@email}
+% Texts for telephone, fax, `telefax' and email
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@telephone}{Telephone:}%
+                  {T\'el\'ephone\protect~\string:}
+\NRC@DeclareText{\NRC@text@fax}{FAX:}%
+                  {t\'el\'ecopie\protect~\string:}
+\NRC@DeclareText{\NRC@text@telefax}{Telephone/FAX:}%
+                  {T\'el\'ephone/t\'el\'ecopie\protect~\string:}
+\NRC@DeclareText{\NRC@text@email}{e-mail:}%
+                  {courriel\protect~\string:}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@received}
+% \begin{macro}{\NRC@text@accepted}
+% \begin{macro}{\NRC@text@revreceived}
+% \begin{macro}{\NRC@text@revaccepted}
+% Texts for `received' and `accepted'
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@received}{Received}%
+                                    {Re\c{c}u le}
+\NRC@DeclareText{\NRC@text@accepted}{Accepted}%
+                                    {Accept\'e le}
+\NRC@DeclareText{\NRC@text@revreceived}{Revision received}%
+                                       {R\'{e}vision re\c{c}u le}
+\NRC@DeclareText{\NRC@text@revaccepted}{Revision accepted}%
+                                       {R\'{e}vision accepte\'{e} le}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@webpub}
+% \begin{macro}{\NRC@text@assoced}
+% \begin{macro}{\NRC@text@corred}
+% \begin{macro}{\NRC@text@commdate}
+% The web publication notice
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@webpub}%
+                {Published on the NRC Research Press Web site at
+                 \@tempa{} on \@tempb}%
+                {Publi\'{e} sur le site Web des Presses
+                 scientifiques du CNRC, \`a \@tempa, le \@tempb}
+\NRC@DeclareText{\NRC@text@assoced}%
+                {Paper handled by Associate Editor:}%
+                {Production de l'article coordonn\'{e}e par
+                 le directeur scientifique associ\'{e}~\string:}
+\NRC@DeclareText{\NRC@text@corred}%
+                {Corresponding Editor:}%
+                {Directeur scientifique correspondant~\string:}
+\NRC@DeclareText{\NRC@text@commdate}%
+                {Written discussion of this article is welcomed and
+                 will be received by the Editor until}%
+                {Les commentaires sur le contenu de cet article
+                 doivent \^{e}tre envoy\'{e}s au directeur
+                 scientifique de la revue avant le}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@abbreviations}
+% Text for `abbreviations'
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@abbreviations}{Abbreviations}%
+                                         {Abbr\'eviations}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@proof}
+% \begin{macro}{\NRC@text@pagination}
+% These two appear with both languages in their representation for
+% each language mode; doing them in this way makes it possible,
+% however, for us to change them to single-language forms with little
+% difficulty.
+%    \begin{macrocode}
+\NRC@DeclareText{\NRC@text@proof}{Proof/\'Epreuve}%
+                                 {Proof/\'Epreuve}
+\NRC@DeclareText{\NRC@text@pagination}{Pagination not final/%
+                                       Pagination non finale}%
+                                      {Pagination not final/%
+                                       Pagination non finale}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@text@citation}
+% Citation information: used in the title page footer (in new title
+% page layout).
+%    \begin{macrocode}
+%<*newtplayout>
+\NRC@DeclareText{\NRC@text@citation}%
+                  {Citation information:}%
+                  {Citation information\protect~\string:}%
+%</newtplayout>
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Font usage}
+%
+% The switch \texttt{@usecmfonts} tells us which fonts are to be used.
+% If we're going to use {\small CM} fonts (\cs{@usecmfontstrue}), we
+% need to define various things that enable us to use them at sizes
+% and in weights required for the use of Helvetica.  If we're using
+% Times and Helvetica, we merely have to change the default families
+% to use (we assume that the |.fd| files carry all the weights we have
+% available, or at least those we need to use).
+%    \begin{macrocode}
+\if@usecmfonts
+  \DeclareFontShape{OT1}{cmss}{m}{n}
+      {
+        <5><6><7><8>cmss8
+        <9>cmss9
+        <10><10.95>cmss10
+        <12><14.4><16>cmss12
+        <17.28><18><20.74><24.88>cmss17
+       }{}
+  \DeclareFontShape{OT1}{cmss}{l}{n}
+         {<->ssub*cmss/m/n}{}
+  \DeclareFontShape{OT1}{cmss}{m}{sl}
+      {
+        <5><6><7><8>cmssi8 <9> cmssi9
+        <10><10.95>cmssi10
+        <12><14.4><16>cmssi12
+        <17.28><18><20.74><24.88>cmssi17
+        }{}
+  \DeclareFontShape{OT1}{cmss}{m}{it}
+         {<->ssub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{l}{sl}
+         {<->ssub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{l}{it}
+         {<->ssub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{bx}{n}
+       {
+         <5> <6> <7> <8> <9> cmssbx10
+         <10> <10.95> <12> <14.4> <16> <17.28> <18> <20.74> <24.88> cmssbx10
+        }{}
+  \DeclareFontShape{OT1}{cmss}{c}{n}
+         {<->ssub*cmss/bx/n}{}
+  \DeclareFontShape{OT1}{cmss}{bx}{sl}
+         {<->sub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{bx}{it}
+         {<->sub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{c}{sl}
+         {<->sub*cmss/m/sl}{}
+  \DeclareFontShape{OT1}{cmss}{c}{it}
+         {<->sub*cmss/m/sl}{}
+\else
+  \renewcommand\rmdefault{ptm}
+  \renewcommand\sfdefault{phv}
+  \if@yandy
+    \RequirePackage[LY1]{fontenc}
+    \RequirePackage[LY1,mtbold]{mathtime}
+%    \end{macrocode}
+%
+% we add the following here, for convenience:
+%    \begin{macrocode}
+    \PassOptionsToPackage{dvipsone}{graphics}
+    \PassOptionsToPackage{dvipsone}{color}
+  \fi
+%    \end{macrocode}
+%
+% If we're using a restricted Type 1 set, establish substitutions that
+% can be used by those who haven't released any arms or legs for
+% Adobe's use\dots
+%    \begin{macrocode}
+  \if@restrictedtypeone
+    \AtBeginDocument{{\sf
+      \DeclareFontShape{OT1}{phv}{c}{n}%
+         {<->ssub*phv/b/n}{}%
+      \DeclareFontShape{OT1}{phv}{c}{sl}%
+         {<->ssub*phv/b/sl}{}%
+      \DeclareFontShape{OT1}{phv}{c}{it}%
+         {<->ssub*phv/b/sl}{}%
+      \DeclareFontShape{OT1}{phv}{l}{n}%
+         {<->ssub*phv/m/n}{}%
+      \DeclareFontShape{OT1}{phv}{l}{sl}%
+         {<->ssub*phv/m/sl}{}%
+      \DeclareFontShape{OT1}{phv}{l}{it}%
+         {<->ssub*phv/m/sl}{}%
+    }}%
+%    \end{macrocode}
+%
+% If we're using restricted Type1, we assume we're in a puckah PSNFSS
+% system, and play safe with \cs{textcopyright}
+%    \begin{macrocode}
+    \providecommand\textcopyright{\textcircled{c}}
+  \else
+%    \end{macrocode}
+%
+% We'll assume that full Type1 is using the PC\TeX{} font encodings,
+% and  proceed to declare symbols on that basis.  Sadly, there are no
+% standard \LaTeX-style font encoding command sets for this
+% encoding\dots
+%    \begin{macrocode}
+    \DeclareTextSymbol{\textcopyright}{OT1}{169}
+    \DeclareTextSymbolDefault{\textcopyright}{OT1}
+    \DeclareTextSymbol{\textguillemetleft}{OT1}{171}
+    \DeclareTextSymbolDefault{\textguillemetleft}{OT1}
+    \DeclareTextSymbol{\textguillemetright}{OT1}{187}
+    \DeclareTextSymbolDefault{\textguillemetright}{OT1}
+  \fi
+\fi
+\providecommand\textcopyright{\textcircled{c}}
+%    \end{macrocode}
+%
+% \section{General information}
+%
+% \begin{macro}{\volyear}
+% \begin{macro}{\NRC@volume}
+% \begin{macro}{\NRC@year}
+% \begin{macro}{\NRC@copyrightyear}
+% \begin{macro}{\NRC@years}
+% Syntax: \cs{volyear}\marg{volume}\oarg{copyright year}\marg{year}
+%
+% This volume's number (presumably derivable from the year\dots), 
+% the year of publication and (optionally) the copyright year (which
+% may validly differ from the year of publication, but defaults to
+% that year if the optional argument isn't given).
+%    \begin{macrocode}
+\newcommand*\NRC@volume{99}
+\newcommand*\NRC@year{}
+\edef\NRC@year{\the\year}
+\newcommand*\NRC@copyrightyear{}
+\let\NRC@copyrightyear\NRC@year
+\newcommand\volyear[1]{%
+  \renewcommand*\NRC@volume{#1}%
+  \@dblarg\NRC@years
+}
+\newcommand\NRC@years[2][]{%
+  \renewcommand*\NRC@copyrightyear{#1}
+  \renewcommand*\NRC@year{#2}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\journal}
+% \begin{macro}{\NRC@text@journal}
+% \begin{macro}{\ifNRC@journalcommand}
+% \begin{macro}{\ifNRC@knownjournal}
+% Syntax: \cs{journal}\marg{journal-name}
+%
+% Sets up the journal name for use in running feet, etc.  If we've
+% already had a \cs{journalcode} command that gave us a known journal code, we
+% now check for consistency between our journal name and the 
+% journal code.  This command (and \cs{journalcode}) sets up
+% \cs{ifNRC@journalcommand} to say at least one of them has been
+% processed, and \cs{ifNRC@knownjournal} to say that the argument was
+% acceptable.
+%    \begin{macrocode}
+\newif\ifNRC@journalcommand  \NRC@journalcommandfalse
+\newif\ifNRC@knownjournal
+\newcommand*{\journal}[1]{%
+  \NRC@journalcommandtrue
+  \renewcommand*\NRC@text@journal{#1}%
+  \@ifundefined{NRC@jlist@text@journal}%
+    {%
+      \NRC@knownjournalfalse
+      \expandafter\NRC@checkonejournal\NRC@journallist
+      \ifNRC@knownjournal
+        \edef\NRC@journal@linenumber{\the\inputlineno}%
+      \else
+        \NRC@warning{Journal "\NRC@text@journal" not recognised}%
+      \fi
+    }%
+    {%
+      \ifx\NRC@text@journal\NRC@jlist@text@journal
+      \else
+        \NRC@warning{Journal name inconsistent between\MessageBreak
+            \string\journalcode\space command on line
+            \NRC@journalcode@linenumber\space and\MessageBreak
+            \string\journal\space command}%
+      \fi
+    }%
+}
+\newcommand*{\NRC@text@journal}{}
+\@onlypreamble\journal
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\filenumber}
+% \begin{macro}{\NRC@a@filenumber}
+% \begin{macro}{\NRC@filenumber}
+% \begin{macro}{\ifNRC@pagewithfile}
+% \begin{macro}{\ifNRC@hadfilenumber}
+% \begin{macro}{\NRC@tpfooter@centre}
+% Syntax: \cs{NRCfilenumber}\texttt{[*]}\marg{file number string}
+%
+% Sets the file number to be used in the title page footer and
+% (optionally) in printed page numbers.  Authors aren't expected to
+% know this, so we provide a default; diagnostic code to spot that
+% editors haven't provided the command is not yet available.
+%
+% If the optional \texttt{*} is present, page numbers in the paper
+% will be prefixed by the file number.
+%    \begin{macrocode}
+\newif\ifNRC@pagewithfile
+\newif\ifNRC@hadfilenumber
+\newcommand*{\filenumber}{\@ifstar
+  {\NRC@pagewithfiletrue\NRC@a@filenumber}%
+  {\NRC@pagewithfilefalse\NRC@a@filenumber}%
+}
+\newcommand*{\NRC@a@filenumber}[1]{%
+  \NRC@hadfilenumbertrue
+  \renewcommand*{\NRC@filenumber}{#1}%
+}
+\newcommand*{\NRC@filenumber}{\emph{Zxx-xxx}}
+%    \end{macrocode}
+%
+% in case we're not doing a \texttt{proof} or \texttt{pagnf} paper,
+% define the centre item of the title page footer; the only
+% significant information in it is the file number\dots
+%    \begin{macrocode}
+%<*!newtplayout>
+\ifcase\NRC@footer@defd
+  \renewcommand*{\NRC@tpfooter@centre}{%
+    \fontsize\@viiipt\@xpt
+    \usefont\f@encoding\rmdefault mn%
+    DOI:\ 10.1139/\NRC@filenumber
+  }%
+\fi
+%</!newtplayout>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\journalcode}
+% \begin{macro}{\jcode}
+% \begin{macro}{\NRC@journalcode}
+% Syntax: \cs{journalcode}\marg{journal code}, or
+% \par\noindent\phantom{Syntax: }\cs{jcode}\marg{journal code}
+%
+% Defines the code of the journal this paper is aimed at.
+%    \begin{macrocode}
+\newcommand*{\journalcode}[1]{%
+  \NRC@journalcommandtrue
+  \renewcommand*{\NRC@journalcode}{#1}%
+  \NRC@knownjournalfalse
+  \expandafter\NRC@checkonejournalcode\NRC@journallist
+  \ifNRC@knownjournal
+    \ifx\NRC@text@journal\@empty
+      \let\NRC@text@journal\NRC@jlist@text@journal
+      \edef\NRC@journalcode@linenumber{\the\inputlineno}%
+    \else
+      \ifx\NRC@text@journal\NRC@jlist@text@journal
+      \else
+        \NRC@warning{Journal name inconsistent between\MessageBreak
+          \string\journal\space command on line
+          \NRC@journal@linenumber\space and \MessageBreak
+          \string\journalcode\space command%
+        }%
+      \fi
+    \fi
+  \else
+    \NRC@warning{Journal code \NRC@journalcode\space not recognised}%
+  \fi
+}
+\newcommand{\jcode}{}
+\let\jcode\journalcode
+\newcommand*{\NRC@journalcode}{}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\issuenumber}
+% \begin{macro}{\NRC@issuenumber}
+% \begin{macro}{\NRC@issuenumber@parens}
+% Syntax: \cs{issuenumber}\marg{issue number}
+%
+% The issue number is used in new-style citation information
+%    \begin{macrocode}
+%<*newtplayout>
+\newcommand*{\issuenumber}[1]{%
+  \renewcommand{\issuenumber}{#1}%
+}
+\newcommand*{\NRC@issuenumber}{}
+\newcommand{\NRC@issuenumber@parens}{%
+  \ifx\NRC@issuenumber\@empty
+  \else
+    (\NRC@issuenumber)%
+  \fi
+}
+%</newtplayout>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\NRC@journallist}
+% A list of journal names, their journal codes and web site addresses.
+% Each journal appears as a triple:
+% \begin{center}
+%   \marg{journal code}\marg{English site address}%
+%\marg{French site address}\marg{Journal abbrev.}
+% \end{center}
+% The ``addresses'' here are the first component of the journal's web
+% site, to be quoted (by default) in \cs{webpub}
+%    \begin{macrocode}
+\newcommand{\NRC@journallist}{%
+  {bcb}{bcb}{bbc}{Biochem. Cell Biol.}%
+  {cgj}{cgj}{rcg}{Can. Geotech. J.}%
+  {cjb}{canjbot}{revcanbot}{Can. J. Bot.}%
+  {cjc}{canjchem}{revcanchim}{Can. J. Chem.}%
+  {cjce}{cjce}{rcgc}{Can. J. Civ. Eng.}%
+  {cjes}{cjes}{rcst}{Can. J. Earth Sci.}%
+  {cjfas}{cjfas}{jcsha}{Can. J. Fish. Aquat. Sci.}%
+  {cjfr}{cjfr}{rcrf}{Can. J. For. Res.}%
+  {cjm}{cjm}{rcm}{Can. J. Microbiol.}%
+  {cjp}{cjp}{rcp}{Can. J. Phys.}%
+  {cjpp}{cjpp}{rcpp}{Can. J. Physiol. Pharmacol.}%
+  {cjz}{cjz}{rcz}{Can. J. Zool.}%
+  {er}{er}{de}{Environ. Rev.}%
+  {gen}{genome}{genome}{Genome}%
+  {jees}{jees}{rgse}{J. Environ. Eng. Sci.}%
+  {}{}{}{}%
+}
+\@onlypreamble\NRC@journallist
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\NRC@checkonejournal}
+% \begin{macro}{\NRC@checkonejournalcode}
+% \begin{macro}{\NRC@jlist@text@journal}
+% \begin{macro}{\NRC@def@webaddress}
+% Syntax: \cs{NRC@checkonejournal}\marg{journal short code}%
+%\marg{english web addr}\par\noindent
+%\phantom{Syntax: \cs{NRC@checkonejournal}}\marg{french web addr}%
+%\marg{running foot abbrev.}\par\noindent
+%\phantom{Syntax: }\cs{NRC@checkonejournalcode} identical
+%
+% The \cs{check*} commands are actually called with a sequence of
+% short codes, web addresses and abbreviations, and munches through
+% the lot.  This isn't as efficient as it might be, but it's no big
+% deal when the job only happens at most three times\dots
+%    \begin{macrocode}
+\newcommand{\NRC@checkonejournal}[4]{%
+  \def\reserved@a{#4}%
+  \ifx\reserved@a\@empty
+  \else
+    \ifx\reserved@a\NRC@text@journal
+      \NRC@knownjournaltrue
+      \def\NRC@jlist@journalcode{#1}%
+      \def\NRC@def@webaddress{%
+        http://\ifNRC@french#3.cnrc\else#2.nrc\fi.ca/%
+      }%
+    \fi
+    \expandafter\NRC@checkonejournal
+  \fi
+}
+\newcommand{\NRC@checkonejournalcode}[4]{%
+  \def\reserved@a{#1}%
+  \ifx\reserved@a\@empty
+  \else
+    \ifx\reserved@a\NRC@journalcode
+      \NRC@knownjournaltrue
+      \def\NRC@jlist@text@journal{#4}%
+      \def\NRC@def@webaddress{%
+        http://\ifNRC@french#3.cnrc\else#2.nrc\fi.ca/%
+      }%
+    \fi
+    \expandafter\NRC@checkonejournalcode
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@setupdefaults}
+% Now diagnose the absence of either sort of journal command, and
+% provide default values; also diagnose missing \cs{filenumber}
+% command here, for good measure
+%    \begin{macrocode}
+\AtBeginDocument{\NRC@setupdefaults}
+\newcommand*{\NRC@setupdefaults}{%
+  \providecommand\NRC@def@webaddress{%
+    http://www.\ifNRC@french cnrc\else nrc\fi.ca/%
+  }%
+  \ifNRC@journalcommand
+  \else
+    \NRC@warning{No \string\journal\space or \string\journalcode\space
+      command given\@gobble
+    }%
+  \fi
+  \ifx\NRC@text@journal\@empty
+    \def\NRC@text@journal{\texttt{\emph{unknown}}}%
+  \fi
+%<*!newtplayout>
+  \ifx\NRC@journalcode\@empty
+    \def\NRC@journalcode{???}%
+  \fi
+%</!newtplayout>
+  \ifNRC@hadfilenumber
+  \else
+    \ifNRC@author@use
+    \else
+      \NRC@warning{No \string\filenumber\space command given\@gobble}%
+    \fi
+  \fi
+}
+\@onlypreamble{\journalcode}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@tpfooter@centre}
+% \begin{macro}{\NRC@tpfooter@left}
+% \emph{\textbf{Note:}} This code is for the proposed title page
+% layout: it is not used in current papers.
+%
+% Define the footer texts for use on the title page, in terms of
+% the things that have been defined in the commands above.
+%    \begin{macrocode}
+%<*newtplayout>
+\newcommand*{\NRC@tpfooter@centre}{%
+  \fontsize\@viiipt\@xpt
+  \usefont\f@encoding\rmdefault mn%
+    DOI:\ 10.1139/\NRC@filenumber.%
+}%
+\newcommand*{\NRC@tpfooter@left}{%
+  \fontsize\@viiipt\@xpt
+  \usefont\f@encoding\rmdefault mn%
+  \NRC@text@citation\ \NRC@text@journal\ %
+  \textbf{\NRC@volume}\NRC@issuenumber@parens:\ %
+  (\NRC@year).%
+}
+%</newtplayout>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Page layout, etc.}
+% \subsection{Page dimensions}
+%
+% \begin{macro}{\hoffset}
+% \begin{macro}{\voffset}
+% We cancel the curious enforced one-inch-margins\dots
+%    \begin{macrocode}
+\hoffset -1in
+\voffset -1in
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@columnwidth}
+% Horizontal layout: we treat this fairly `trivially',
+%    \begin{macrocode}
+%<nrc1> \textwidth 34pc
+%<*nrc2>
+\newdimen\NRC@columnwidth
+\paperwidth        51pc
+\textwidth         43pc
+\NRC@columnwidth   20.75pc
+\columnsep         1.5pc
+\columnseprule     \z@
+%</nrc2>
+\hsize             \textwidth
+\@tempdima         \paperwidth
+\advance           \@tempdima   -\textwidth
+\evensidemargin    0.5\@tempdima
+\oddsidemargin     0.5\@tempdima
+%    \end{macrocode}
+% \end{macro}
+%
+% Height of text on page is unambiguously defined in NRC1 class:
+%    \begin{macrocode}
+%<nrc1> \textheight 49.5pc
+%    \end{macrocode}
+%
+% but is a bit of an ephemeral concept in NRC2 class, since it's
+% supposed to be variable within a quoted range.  The specification
+% says 56pc \ensuremath{\pm} 0.5pc; but \TeX{} doesn't have a concept
+% of a limited stretch so we make the basic height 55.5pc, and then
+% add a 1pc skip that can shrink to zero at the bottom of the page.
+%    \begin{macrocode}
+%<*nrc2>
+\textheight 55.5pc
+\def\@textbottom{\vskip 1pc \@minus 1pc}
+%</nrc2>
+%    \end{macrocode}
+%
+% The head height and separation, and foot skip are set `wrongly' for
+% us in \textsf{size10.clo}:
+% \begin{macro}{\headheight}
+% \begin{macro}{\headsep}
+% \begin{macro}{\footskip}
+%    \begin{macrocode}
+\setlength\headheight{10\p@}
+%<nrc1>\setlength\headsep {14\p@}
+%<nrc2>\setlength\headsep {17\p@}
+\setlength\footskip  {20\p@}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% We don't change \cs{topskip} and \cs{maxdepth} (which \LaTeX{}
+% inscrutably relates to one another\dots)
+%
+% Now, generate \cs{topmargin}
+%    \begin{macrocode}
+\setlength\topmargin{\paperheight}
+\addtolength\topmargin{-\headheight}
+\addtolength\topmargin{-\headsep}
+\addtolength\topmargin{-\textheight}
+\addtolength\topmargin{-\footskip}
+\addtolength\topmargin{-.5\topmargin}
+%    \end{macrocode}
+%
+% However, that's not quite good enough for letter paper (where we
+% seem only to have about \ensuremath{\frac{1}{12}''} to spare when the
+% trim marks are there)\dots
+%
+% Therefore, we boil some sugar, cream and butter to create this nice
+% little fudge:
+%    \begin{macrocode}
+\addtolength\topmargin{7.5pt}
+%    \end{macrocode}
+%
+% \begin{macro}{\textfloatsep}
+% \begin{macro}{\dbltextfloatsep}
+% Float separations are quoted relative to the baseline.  We achieve
+% this using a notional value for \cs{baselineskip}: this is fairly
+% safe, given the NRC's style of setting tables, which more-or-less
+% guarantees that floats have zero depth.  There \emph{is} the slight
+% problem of the section head (with attendant larger skip) immediately
+% below a float, but there's nothing we can do about that.
+%    \begin{macrocode}
+\setlength{\textfloatsep}
+%<nrc1>{3pc}
+%<nrc2>{20\p@}
+\addtolength{\textfloatsep}{-10\p@}
+%<nrc2>\setlength{\dbltextfloatsep}{\textfloatsep}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@restore@dbltextfloatsep}
+% Syntax: \cs{NRC@restore@dbltextfloatsep}
+%
+% For use in pagestyle commands to restore the text float separation
+% (currently, just for the first page, where it has been zapped by
+% two-column version of \cs{maketitle}
+%    \begin{macrocode}
+%<*nrc2>
+\edef\NRC@restore@dbltextfloatsep{%
+  \global\noexpand\dbltextfloatsep \the\dbltextfloatsep}
+%</nrc2>
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Page Styles}
+%
+% \begin{macro}{\ps@nrctitlepage}
+% Syntax: \cs{thispagestyle}|{nrctitlepage}|
+%
+% Establishes the page layout for the title page of a paper.  The
+% definition is not needed for \verb'nrc1' preprints, but (because the
+% page style is used when creating one-column IDboxes) it is defined
+% for \verb'nrc2' preprints, in a form that doesn't differ much from
+% the body style \cs{ps@nrc}
+%    \begin{macrocode}
+\ifNRC@preprint
+  \newcommand\ps@nrctitlepage{%
+    \let\@evenhead\@empty
+    \let\@oddhead\@empty
+    \def\@evenfoot{%
+      {%
+%    \end{macrocode}
+%
+% pull the one-column IDbox into the text area if necessary
+%    \begin{macrocode}
+%<*nrc2>
+        \if@onecolid\else
+          \NRC@restorefootskip
+          \raise\footskip\hb@xt@\z@{%
+            \vbox to\z@{\vss\box\NRC@theIDbox}%
+            \hss
+          }%
+        \fi
+%</nrc2>
+%<newtplayout> \rlap{\NRC@tpfooter@left}%
+        \hfill\NRC@xlap{\NRC@tpfooter@centre}%
+        \hfill\llap{%
+          \fontsize\@viiipt\@xpt
+          \usefont\f@encoding\rmdefault mn%
+          \textcopyright \NRC@copyrightyear\ \NRC@text@NRC%
+        }%
+      }%
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\else
+  \newcommand\ps@nrctitlepage{%
+    \renewcommand\@oddhead{%
+      {%
+        \NRC@toptrim
+        \hfill
+        {%
+%<*newtplayout>
+          \hfill
+          \NRC@xlap{\NRC@tpheader@centre}%
+          \hfill\llap{%
+%</newtplayout>
+            \fontsize\@ixpt\@xiipt
+            \usefont\f@encoding\sfdefault ln%
+            \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
+%<newtplayout> }%
+        }%
+%<nrc2> \NRC@restore@dbltextfloatsep
+      }%
+    }%
+    \renewcommand\@evenhead{%
+      {%
+        \NRC@toptrim
+        {%
+%<newtplayout> \rlap{%
+            \fontsize\@ixpt\@xiipt
+            \usefont\f@encoding\sfdefault ln%
+            \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
+%<*newtplayout>
+          }%
+          \hfill
+          \NRC@xlap{\NRC@tpheader@centre}%
+          \hfill
+%</newtplayout>
+        }%
+%<nrc2> \NRC@restore@dbltextfloatsep
+      }%
+    }%
+    \renewcommand\@oddfoot{%
+      {%
+        \NRC@bottomtrim
+%<*nrc2>
+%    \end{macrocode}
+%
+% If we have a column-spanning ID box, we insert it here, raised into
+% the position it would (ought to) be if it had appeared as a bottom
+% float\dots
+%    \begin{macrocode}
+        \if@onecolid\else
+          \NRC@restorefootskip
+          \raise\footskip\hb@xt@\z@{%
+            \vbox to\z@{\vss\box\NRC@theIDbox}%
+            \hss
+          }%
+        \fi
+%</nrc2>
+%<newtplayout> \rlap{\NRC@tpfooter@left}%
+%<*!newtplayout>
+        \rlap{%
+          \fontsize\@viiipt\@xpt
+          \usefont\f@encoding\rmdefault mn%
+          \NRC@text@journal\ \textbf{\NRC@volume}%
+          \ifNRC@french\ \fi:
+          \ifNRC@pagewithfile\NRC@filenumber-\fi
+          \pageref{\jobname.start.page}--%
+          \ifNRC@pagewithfile\NRC@filenumber-\fi
+          \pageref{\jobname.end.page}
+          (\NRC@year)%
+        }%
+%</!newtplayout>
+        \hfill\NRC@xlap{\NRC@tpfooter@centre}%
+        \hfill\llap{%
+          \fontsize\@viiipt\@xpt
+          \usefont\f@encoding\rmdefault mn%
+          \textcopyright\ \NRC@copyrightyear\ \NRC@text@NRC%
+        }%
+      }%
+    }%
+    \let\@evenfoot\@oddfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% The above uses two labels, one each for the start and the end of the
+% paper.  We need to arrange that they get defined (note that the
+% start page has to be defined \cs{AtBeginDocument} because typically
+% the start page isn't even set until then, and in any case its number
+% has to be written to the \verb'.aux' output which isn't open until
+% just before \cs{AtBeginDocument}).
+%
+%    \begin{macrocode}
+\AtBeginDocument{\immediate\write\@auxout{\string\newlabel
+    {\jobname.start.page}{{}{\thepage}}}}
+\AtEndDocument{\clearpage
+  \@tempcnta\c@page
+  \advance\@tempcnta-1
+  \immediate\write\@auxout{\string\newlabel{\jobname.end.page}%
+    {{}{\number\@tempcnta}}}%
+  \if@finalverso\thispagestyle{nrcempty}\cleardoublepage\fi
+}
+%    \end{macrocode}
+%
+% [The code for the last page is derived from \texttt{lastpage.sty} by
+% Jeff Goldberg, which is available on CTAN.]
+%
+% \begin{macro}{\ps@nrc}
+% Syntax: \cs{pagestyle}|{nrc}|
+%
+% Establishes the page layout for the body of a paper (or, in the case
+% of a preprint, for all of a paper, since a preprint has no
+% distinctions\dots)
+%    \begin{macrocode}
+\ifNRC@preprint
+  \newcommand\ps@nrc{%
+    \def\@evenhead{%
+      {%
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\sfdefault ln%
+        \hfill
+        \NRC@text@journal
+      }%
+    }%
+    \def\@oddhead{%
+      {%
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\sfdefault ln%
+        \@shortauthor\hfill
+      }%
+    }%
+    \def\@evenfoot{%
+      {%
+        \hfill\NRC@xlap{\NRC@footer@centre}%
+        \hfill\llap{%
+          \fontsize\@viiipt\@xpt
+          \usefont\f@encoding\rmdefault mn%
+          \textcopyright \NRC@copyrightyear\ \NRC@text@NRC%
+        }%
+      }%
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\else
+  \newcommand\ps@nrc{%
+    \def\@evenhead{%
+      {%
+        \NRC@toptrim
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\sfdefault ln%
+        \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage\hfill
+        \NRC@text@journal\ \NRC@text@vol\ \NRC@volume, \NRC@year
+      }%
+    }%
+    \def\@oddhead{%
+      {%
+        \NRC@toptrim
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\sfdefault ln%
+        \@shortauthor\hfill
+        \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
+      }%
+    }%
+    \def\@evenfoot{%
+      {%
+        \NRC@bottomtrim
+        \hfill\NRC@xlap{\NRC@footer@centre}%
+        \hfill\llap{%
+          \fontsize\@viiipt\@xpt
+          \usefont\f@encoding\rmdefault mn%
+          \textcopyright \NRC@copyrightyear\ \NRC@text@NRC%
+        }%
+      }%
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ps@nrcplain}
+% Syntax: \cs{pagestyle}|{nrcplain}|
+%
+% The page style for special title (only) pages (i.e., those
+% containing a \cs{specialtitle*} command).
+%    \begin{macrocode}
+\ifNRC@preprint
+  \newcommand\ps@nrcplain{%
+    \let\@evenhead\@empty
+    \let\@oddhead\@evenhead
+    \def\@evenfoot{%
+      {%
+        \hfill
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\rmdefault mn%
+        \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
+        \hfill
+      }%
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\else
+  \newcommand\ps@nrcplain{%
+    \def\@evenhead{%
+      \NRC@toptrim
+      \hfill
+    }%
+    \let\@oddhead\@evenhead
+    \def\@evenfoot{%
+      {%
+        \NRC@bottomtrim
+        \hfill
+        \fontsize\@ixpt\@xiipt
+        \usefont\f@encoding\rmdefault mn%
+        \ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
+        \hfill
+      }%
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ps@nrcempty}
+% Syntax: \cs{pagestyle}|{nrcempty}|
+%
+% The page style for blank final (uncounted) verso pages
+%    \begin{macrocode}
+\ifNRC@preprint
+  \let\ps@nrcempty\ps@empty
+\else
+  \newcommand\ps@nrcempty{%
+    \def\@evenhead{%
+      \NRC@toptrim
+      \hfill
+    }%
+    \let\@oddhead\@evenhead
+    \def\@evenfoot{%
+      \NRC@bottomtrim
+      \hfill
+    }%
+    \let\@oddfoot\@evenfoot
+    \let\@mkboth\@gobbletwo
+    \let\sectionmark\@gobble
+    \let\subsectionmark\@gobble
+    \let\appendixmark\@gobble
+  }
+\fi
+%    \end{macrocode}
+% \end{macro}
+% 
+% 
+%
+% The default page style is that for the body of journal\dots
+%    \begin{macrocode}
+\pagestyle{nrc}
+%    \end{macrocode}
+%
+% \subsection{Trim marks}
+%
+% \begin{macro}{\NRC@dotoptrim}
+% \begin{macro}{\NRC@dobottomtrim}
+%
+% These commands generate the trim marks, and are for use
+% (respectively) in the headers and footers of pages
+%    \begin{macrocode}
+\newcommand\NRC@dotoptrim{%
+  \hb@xt@\z@{%
+    \vbox to\z@{%
+      \vss
+      \hb@xt@\textwidth{%
+        \llap{%
+          \NRC@left@trimrule
+          \NRC@up@trimrule
+          \hskip\NRC@trimhsep
+        }%
+        \hss
+        \rlap{%
+          \hskip\NRC@trimhsep
+          \NRC@up@trimrule
+          \NRC@right@trimrule
+        }%
+      }%
+      \vskip\NRC@trimtopsep
+    }%
+    \hss
+  }%
+}
+\newcommand\NRC@dobottomtrim{%
+  \hb@xt@\z@{%
+    \vbox to\z@{%
+      \vskip\NRC@trimbotsep
+      \hb@xt@\textwidth{%
+        \llap{%
+          \NRC@left@trimrule
+          \NRC@down@trimrule
+          \hskip\NRC@trimhsep
+        }%
+        \hss
+        \rlap{%
+          \hskip\NRC@trimhsep
+          \NRC@down@trimrule
+          \NRC@right@trimrule
+        }%
+      }%
+      \vss
+    }%
+    \hss
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@trimhsep}
+% \begin{macro}{\NRC@trimtopsep}
+% \begin{macro}{\NRC@trimbotsep}
+%
+% These macros define separations of the trim marks from the body of
+% the text of the page.  Note that \cs{NRC@trimhsep} is as specified,
+% but \cs{NRC@trimtopsep} and \cs{NRC@trimbotsep} are specified in
+% terms of distances from the text body, and so have \cs{headsep} and
+% \cs{footskip} (respectively) subtracted from them.
+%    \begin{macrocode}
+\newcommand\NRC@trimhsep{4pc}
+\newcommand\NRC@trimtopsep{54pt}
+\newcommand\NRC@trimbotsep{30pt}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@up@trimrule}
+% \begin{macro}{\NRC@down@trimrule}
+% \begin{macro}{\NRC@left@trimrule}
+% \begin{macro}{\NRC@right@trimrule}
+%
+% These macros construct the constituent bits of the trim marks
+%    \begin{macrocode}
+\newcommand\NRC@up@trimrule{%
+  \vrule\@height\NRC@trimvsize
+        \@depth\NRC@trimvgap
+        \@width\NRC@trimthickness
+}
+\newcommand\NRC@down@trimrule{%
+  \vrule\@height\NRC@trimvgap
+        \@depth\NRC@trimvsize
+        \@width\NRC@trimthickness
+}
+\newcommand\NRC@left@trimrule{%
+  \vrule\@height\NRC@trimhalfthick
+        \@depth\NRC@trimhalfthick
+        \@width\NRC@trimhsize
+  \hskip\NRC@trimhgap        
+}
+\newcommand\NRC@right@trimrule{%
+  \hskip\NRC@trimhgap        
+  \vrule\@height\NRC@trimhalfthick
+        \@depth\NRC@trimhalfthick
+        \@width\NRC@trimhsize
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@trimhsize}
+% \begin{macro}{\NRC@trimvsize}
+% \begin{macro}{\NRC@trimhalfthick}
+% \begin{macro}{\NRC@trimthickness}
+% \begin{macro}{\NRC@trimhgap}
+% \begin{macro}{\NRC@trimvgap}
+%
+% These macros specify the dimensions of trim marks; requirements are:
+% \begin{itemize}
+% \item \cs{NRC@trimhalfthick} should be half \cs{NRC@trimthickness}
+% \item \cs{NRC@trim*size} are \emph{nominally} 3pc each
+% \item \cs{NRC@trimvsize} should incorporate \cs{NRC@trimvgap}
+% \end{itemize}
+%    \begin{macrocode}
+\newcommand\NRC@trimhsize{36\p@}
+\newcommand\NRC@trimvsize{39\p@}
+\newcommand\NRC@trimhalfthick{0.1\p@}
+\newcommand\NRC@trimthickness{0.2\p@}
+\newcommand\NRC@trimhgap{3\p@}
+\newcommand\NRC@trimvgap{-3\p@}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Parallel setting of multilingual text}
+%
+% \begin{environment}{par-text}
+% \begin{macro}{\NRC@enclosingenv}
+% Syntax: \cs{begin}\verb|{par-text}|\oarg{right language}\oarg{left
+%         width}\oarg{separation}\oarg{right width}
+%
+% Set parallel (bilingual) text.
+%
+% If \meta{right language} is present, it will be selected as a
+% language (using Babel commands) in the right column.  If \meta{left
+% width} is present, it will be used as the width of the left column;
+% otherwise the width will be set to \texttt{15.5pc} (nrc1), or
+% \texttt{20.75pc} (nrc2).  If
+% \meta{separation} is present, it will be used as the separation
+% between the two columns; otherwise that separation will be set to
+% \texttt{1.5pc}.  If \meta{right width} is present, it will be used as
+% the width of the right column; otherwise the width will be set to
+% \cs{textwidth}\(-\)\meta{left width}\(-\)\meta{separation}.
+%
+% Thus the two `standard' ways of using the environment start with the
+% commands:
+% \begin{itemize}
+% \item\verb|\begin{par-text}[french]|
+%
+% Which assumes that Babel has been loaded, and that the main language
+% in the document is English.  In this case, the left column will be
+% in English, the right column in French.
+% \item\verb|\begin{par-text}[english][17pc]|
+%
+% Which assumes that Babel has been loaded, and the surrounding text
+% is in French.  En ce cas, la colonne gauche se presente en fran\c cais,
+% la colonne droite en anglais.
+% \end{itemize}
+%
+% We start by grabbing the first argument.  If it's present, we
+% transform it to a \textsf{babel} \cs{select@language} command.
+% (Note that the `natural' \cs{selectlanguage} command would write
+% language selection guff to the \verb|.aux| file, which causes havoc
+% with box alignment, so we use the internal command instead.)
+%    \begin{macrocode}
+\newenvironment{par-text}[1][]{%
+%    \end{macrocode}
+%
+% If we're in a two-column class, ensure we've got the full width
+% available to us\dots
+%    \begin{macrocode}
+%<*nrc2>
+  \if@twocolumn
+    \BalanceColumns[0.5]%
+  \fi
+%</nrc2>
+  \def\@rightlanguage{#1}%
+  \ifx\@rightlanguage\@empty
+  \else
+    \edef\@rightlanguage{%
+      \noexpand\select@language{\@rightlanguage}%
+    }%
+  \fi
+%    \end{macrocode}
+%
+% Now we set \cs{NRC@enclosingenv} and look for the second, third and
+% fourth optional arguments.  This is boring code indeed\dots
+%    \begin{macrocode}
+  \let\NRC@enclosingenv\@currenvir
+  \@ifnextchar[%]
+     \NRC@partext@a
+%<nrc1>   {\NRC@partext@a[15.5pc][1.5pc][17pc]}%
+%<nrc2>   {\NRC@partext@a[20.75pc][1.5pc][20.75pc]}%
+}%
+{\par}
+%    \end{macrocode}
+%
+% \cs{NRC@enclosingenv} is set either to \cs{relax} or to the
+% enclosing \verb|par-text| environment name.
+%    \begin{macrocode}
+\let\NRC@enclosingenv\relax
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% Three syntax support commands follow.
+%
+% \begin{macro}{\NRC@partext@a}
+% \begin{macro}{\NRC@par@leftwidth}
+% Syntax: \cs{NRC@partext@a}\oarg{left
+%             width}\oarg{separation}\oarg{right width}
+%    \begin{macrocode}
+\def\NRC@partext@a[#1]{%
+  \def\NRC@par@leftwidth{#1}%
+  \@ifnextchar[%]
+     \NRC@partext@b
+    {\NRC@partext@b[1.5pc][\z@]}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@partext@b}
+% \begin{macro}{\NRC@par@separation}
+% Syntax: \cs{NRC@partext@b}\oarg{separation}\oarg{right width}
+%    \begin{macrocode}
+\def\NRC@partext@b[#1]{%
+  \def\NRC@par@separation{#1}%
+  \NRC@partext@c
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@partext@c}
+% \begin{macro}{\NRC@par@rightwidth}
+% \begin{macro}{\NRC@warning@inconpar}
+% Syntax: \cs{NRC@partext@c}\oarg{right width}
+%    \begin{macrocode}
+\newcommand\NRC@partext@c[1][\z@]{%
+  \@tempdima#1\relax
+  \ifdim\@tempdima>\z@
+    \def\NRC@par@rightwidth{#1}%
+    \@tempdima #1\relax
+    \advance\@tempdima \NRC@par@separation\relax
+    \advance\@tempdima \NRC@par@leftwidth\relax
+    \ifdim\@tempdima > \textwidth
+      \NRC@warning@inconpar
+    \fi
+  \else
+    \@tempdima\textwidth
+    \advance\@tempdima -\NRC@par@leftwidth\relax
+    \advance\@tempdima -\NRC@par@separation\relax
+    \ifdim\@tempdima>\z@
+    \else
+      \NRC@warning@inconpar
+    \fi
+    \edef\NRC@par@rightwidth{\the\@tempdima}%
+  \fi
+  \NRC@last@parparafalse
+  \par
+}
+\def\NRC@warning@inconpar{%
+  \NRC@warning{Inconsistent parameters for environment par-text}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ifNRC@last@parpara}
+% \begin{macro}{\NRC@last@parparatrue}
+% \begin{macro}{\NRC@last@parparafalse}
+% Controlling vertical spacing in between blocks of parallel
+% paragraphs
+%    \begin{macrocode}
+\def\NRC@last@parparatrue{\global\let\ifNRC@last@parpara\iftrue}
+\def\NRC@last@parparafalse{\global\let\ifNRC@last@parpara\iffalse}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\parallelparsep}
+% \begin{macro}{\NRC@parpara@sep}
+% Syntax: \cs{parallelparsep}\marg{paragraph separation}
+%
+% Sets the separation between paragraphs in a \verb|par-text|
+% environment to the argument (which is a rubber length)
+%    \begin{macrocode}
+\newcommand\parallelparsep[1]{\gdef\NRC@parpara@sep{#1}}
+\parallelparsep{1pc}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now the original environments for setting left and right columns
+% separately.
+%
+% \begin{environment}{leftcolumn}
+% \begin{macro}{\ifNRC@firstleftcolumn}
+% \begin{macro}{\NRC@checknesting}
+% Set the left-hand column of the bilingual text.  The left column is
+% presumed to be in the base language of the document.
+%    \begin{macrocode}
+\newif\ifNRC@firstleftcolumn  \global\NRC@firstleftcolumntrue
+\newenvironment{leftcolumn}{%
+  \ifNRC@last@parpara
+    \vskip\NRC@parpara@sep\relax
+  \else
+    \NRC@last@parparatrue
+  \fi
+  \NRC@checknesting
+  \noindent
+  \begin{minipage}[t]{\NRC@par@leftwidth}%
+  \NRC@sectragged
+  \usefont\f@encoding\sfdefault mn%
+  \ifNRC@firstleftcolumn
+    \global\NRC@firstleftcolumnfalse
+  \else
+    \hspace*{\NRC@par@parindent}%
+  \fi
+  \strut\ignorespaces
+}{%
+  \strut
+  \end{minipage}%
+  \NRC@insertignore\NRC@colsepskip
+}%
+\def\NRC@checknesting{%
+  \def\@tempa{par-text}%
+  \ifx\@tempa\NRC@enclosingenv
+  \else
+    \NRC@warning{\@currenvir\space environment may only be used%
+      \MessageBreak
+      within a \@tempa\space environment}%
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% \begin{environment}{rightcolumn}
+% \begin{macro}{\ifNRC@firstrightcolumn}
+% Set the right-hand column of the bilingual text.  This is set either
+% in the \meta{right language} (if that argument was given), or in the
+% base language.
+%    \begin{macrocode}
+\newif\ifNRC@firstrightcolumn  \global\NRC@firstrightcolumntrue
+\newenvironment{rightcolumn}{%
+  \NRC@checknesting
+  \noindent
+  \begin{minipage}[t]{\NRC@par@rightwidth}%
+  \NRC@sectragged
+  \usefont\f@encoding\sfdefault mn%
+  \@rightlanguage
+  \ifNRC@firstrightcolumn
+    \global\NRC@firstrightcolumnfalse
+  \else
+    \hspace*{\NRC@par@parindent}%
+  \fi
+  \strut\ignorespaces
+}{%
+  \strut
+  \end{minipage}%
+  \NRC@insertignore\par
+}%
+%    \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+%
+% \begin{macro}{\NRC@par@parindent}
+% Simply defined to be the `paragraph' indentation in parallel text
+%    \begin{macrocode}
+\def\NRC@par@parindent{\@xiipt\p@}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@colsepskip}
+% Syntax: \cs{NRC@colsepskip}
+%
+% Skip to separate the columns in a 2-column section.  Default is
+% \texttt{2pc}: this value is programmed into \cs{NRC@par@separation}
+% at the time the arguments to the \verb|par-para| environment are
+% decoded
+%    \begin{macrocode}
+\def\NRC@colsepskip{\hskip\NRC@par@separation\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{par-para}
+% \begin{macro}{\othercol}
+% \begin{macro}{\NRC@leftbox}
+% \begin{macro}{\NRC@rightbox}
+% Syntax: \cs{begin}\verb|{par-para}| \meta{left text} \cs{othercol}
+%           \meta{right text} \cs{end}\verb|{par-para}|
+%
+% Set a pair of paragraphs of parallel text
+%    \begin{macrocode}
+\newbox\NRC@leftbox
+\newbox\NRC@rightbox
+\newenvironment{par-para}{%
+  \ifNRC@last@parpara
+    \vskip\NRC@parpara@sep\relax
+  \else
+    \NRC@last@parparatrue
+  \fi
+  \NRC@checknesting
+  \NRC@ignorespacesandpars\NRC@gatherleft
+}%
+%    \end{macrocode}
+% So here we are, with the left paragraph in \cs{NRC@leftbox} and an
+% unterminated right paragraph being set into \cs{NRC@rightbox}
+%    \begin{macrocode}
+{%
+    \unskip
+  \egroup
+%    \end{macrocode}
+%
+% Now we've got both paragraphs in their boxes, so we have to play
+% them out into single lines of parallel text.
+%    \begin{macrocode}
+  {%
+    \vbadness\@M
+    \vfuzz5ex
+    \let\@tempa\p@
+    \par
+    \loop
+      \ifvoid\NRC@leftbox
+        \ifvoid\NRC@rightbox
+          \let\@tempa\z@
+        \fi
+      \fi
+      \ifdim\@tempa>\z@
+        \hb@xt@\textwidth{%
+          \vbox{\ifvoid\NRC@leftbox
+              \hrule\@width\NRC@par@leftwidth\@height\z@\@depth\z@
+            \else
+              \setbox\@tempboxa\vsplit\NRC@leftbox to\p@
+              \unvbox\@tempboxa
+            \fi}%
+          \NRC@colsepskip
+          \vbox{\ifvoid\NRC@rightbox
+              \hrule\@width\NRC@par@rightwidth\@height\z@\@depth\z@
+            \else
+              \setbox\@tempboxa\vsplit\NRC@rightbox to\p@
+              \unvbox\@tempboxa
+            \fi}%
+        }%
+    \repeat
+  }%
+  \par
+}
+%    \end{macrocode}
+%
+% \begin{macro}{NRC@gatherleft}
+% \cs{NRC@gatherleft} sets up gathering the left column paragraph of a
+% \verb|par-para| environment into its box.  The process is terminated
+% in \cs{othercol}
+%    \begin{macrocode}
+\newcommand\NRC@gatherleft{%
+  \setbox\NRC@leftbox\vbox\bgroup
+    \hsize\NRC@par@leftwidth\relax
+    \usefont\f@encoding\sfdefault mn%
+    \noindent
+    \ifNRC@firstleftcolumn
+      \global\NRC@firstleftcolumnfalse
+    \else
+      \hspace*{\NRC@parallelparindent}%
+    \fi
+    \NRC@sectragged
+  }%
+%    \end{macrocode}
+%
+% \begin{macro}{\othercol}
+% \cs{othercol} terminates the collection that \cs{NRC@gatherleft}
+% started, and then initiates the collection of the right column via
+% \cs{NRC@gatherright}
+% paragraph (which collection is completed in the
+% \cs{end}\verb|{par-para}| `macro').
+%    \begin{macrocode}
+\newcommand\othercol{%
+    \unskip
+  \egroup
+  \NRC@ignorespacesandpars\NRC@gatherright
+}
+%    \end{macrocode}
+%
+% \begin{macro}{\NRC@gatherright}
+% \cs{NRC@gatherright} completes the |par-para| environment, by
+% initiating collection of the right hand column of the pair, which
+% collection is terminated in the \cs{end}|{par-para}| `macro'
+%    \begin{macrocode}
+\newcommand\NRC@gatherright{%
+  \setbox\NRC@rightbox\vbox\bgroup
+    \hsize\NRC@par@rightwidth\relax
+    \usefont\f@encoding\sfdefault mn%
+    \@rightlanguage
+    \noindent
+    \ifNRC@firstrightcolumn
+      \global\NRC@firstrightcolumnfalse
+    \else
+      \hspace*{\NRC@parallelparindent}%
+    \fi
+    \NRC@ignorespacesandpars\NRC@sectragged
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\NRC@parallelparindent}
+% Simply defined to be the `paragraph' indentation in parallel text
+%    \begin{macrocode}
+\def\NRC@parallelparindent{10\p@}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Full-width intervals in two-column papers}
+%
+% Naturally, this code is not provided in the one-column class, just
+% the 2-column class and the column-balancing package.
+%    \begin{macrocode}
+%</nrc1cls|nrc2cls>
+%<*nrc2cls|balance>
+%    \end{macrocode}
+%
+% \begin{macro}{\BalanceColumns}
+% \begin{macro}{\@tempboxb}
+%
+% Syntax: \cs{BalanceColumns}\oarg{epsilon}
+%
+% Balances what's left as contributions to the final page, subject to
+% fudge-factor \emph{epsilon} in the final balancing: the default
+% factor is \texttt{0.5}, and it's multiplied by \cs{baselineskip} and
+% then added to the `target' height of the left column which is passed
+% to the \cs{vsplit} primitive
+%
+% A spare temporary box, needed for \cs{BalanceColumns}~\dots\ or could
+% we use \cs{@holdpg}?
+%    \begin{macrocode}
+\newbox\@tempboxb
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\newcommand\BalanceColumns[1][0.5]{%
+%    \end{macrocode}
+%
+% ensure we're in vertical mode
+%    \begin{macrocode}
+  \par
+%    \end{macrocode}
+%
+% insert a zero penalty to ensure that the penultimate page is output
+% properly
+%    \begin{macrocode}
+  \penalty\z@
+%    \end{macrocode}
+%
+% define a dummy output routine for gathering up what's left at the
+% end of the last page:
+%    \begin{macrocode}
+  \def\@dummy@balance@output{%
+    \if@firstcolumn
+      \ifx\@toplist\@empty
+        \global\setbox\@tempboxa \vbox{\unvbox\@cclv}%
+      \else
+        % 1. (?) get rid of \topskip glue at the top of \@cclv
+        % 2. insert the top float(s) and the appropriate separations
+        % 3. adjust \@colroom and so on
+        \global\setbox\@tempboxa \vbox{%
+          \@tempswatrue
+          \NRC@return@floats\@toplist\@toproom\@topnum\@empty
+          \vspace\textfloatsep
+          \unvbox\@cclv
+        }%
+        % 4. (?) warn about potential problems?
+        % ... or ...
+        % moan about the thing being there in the first place?
+      \fi
+    \else
+%    \end{macrocode}
+%
+% we were in the right-hand column, so box 255 has (at this stage) got
+% a \cs{topskip} glue in it (which we definitely don't want), so we
+% stick in a penalty and \cs{vsplit} if off again, which loses the
+% glue for us\dots
+%    \begin{macrocode}
+      \setbox\@cclv \vbox{%
+        \penalty-\@M
+        \unvbox\@cclv}%
+      \splittopskip\topskip
+      \splitmaxdepth\maxdepth
+      \setbox\@tempboxa \vsplit\@cclv to\z@
+%    \end{macrocode}
+%
+% now reassemble the two columns into one, in \cs{@tempboxa}
+%    \begin{macrocode}
+      \ifx\@toplist\@empty
+      % insert top floats in the right column here?
+      % ... or ...
+      \else
+      % moan at their very existence?
+%<balance> \PackageWarning{baltools}{%
+%<nrc2> \NRC@warning{%
+          Top float(s) (2nd column) lost in balancing}%
+        \@tempswafalse
+        \NRC@return@floats\@toplist\@toproom\@topnum\@empty
+      \fi
+      \global\setbox\@tempboxa \vbox{%
+        \unvbox\@leftcolumn
+        \unskip
+        \unvbox\@cclv}%
+    \fi
+  }%
+%    \end{macrocode}
+%
+% now check if there are outstanding floats, and moan if so (I'm not
+% in the slightest particular sure whether the presence of floats can
+% be dealt with at all without major restructuring, so we complain
+% instead\dots).
+%
+% Note, we \emph{don't}, now, complain about deferred floats (they're
+% the user's problem), but bottom floats have me stumped.  (In-text
+% floats have already been committed by the time we get to this stage,
+% and it's acceptable simply to return them):
+%    \begin{macrocode}
+  \ifx\@botlist\@empty\else
+%<balance> \PackageWarning{baltools}{%
+%<nrc2> \NRC@warning{%
+      Bottom floats outstanding when balancing may be lost\MessageBreak
+      What's more, balancing may be invalid}%
+  \fi
+  \xdef\@freelist{\@freelist\@midlist}
+%    \end{macrocode}
+%
+% Acquire the output contributions so far, by exercising our little
+% dummy output routine
+%    \begin{macrocode}
+  {%
+    \output{\@dummy@balance@output}%
+    \eject
+  }%
+%    \end{macrocode}
+%
+% Establish the total height of the boxes we've thereby acquired
+%    \begin{macrocode}
+  {%
+    \@tempdima .5\ht\@tempboxa
+    \advance\@tempdima .5\dp\@tempboxa
+    \splittopskip\topskip
+    \splitmaxdepth\maxdepth
+%<balance> \PackageInfo{baltools}{%
+%<nrc2> \ClassInfo\NRC@clsname{%
+      \string\BalanceColumns: total height of page is
+      \the\@tempdima\space--\MessageBreak
+      \string\vsplit\space to half of that
+      (plus #1\string\baselineskip)}%
+    \advance\@tempdima #1\baselineskip
+    \vbadness\@M
+    \setbox\@tempboxb \vsplit\@tempboxa to\@tempdima
+%    \end{macrocode}
+%
+% Log what we've done\dots
+%    \begin{macrocode}
+%<balance> \PackageInfo{baltools}{%
+%<nrc2> \ClassInfo\NRC@clsname{%
+      Column balance: left column height
+                      \the\ht\@tempboxb+\the\dp\@tempboxb
+      \MessageBreak
+      right column height \the\ht\@tempboxa+\the\dp\@tempboxa}%
+%    \end{macrocode}
+%
+% Reassemble the two columns we now have into the `top of the page'
+%    \begin{macrocode}
+    \@tempdima \ht\@tempboxa
+    \advance\@tempdima \dp\@tempboxa
+    \dimen@    \ht\@tempboxb
+    \advance\dimen@    \dp\@tempboxb
+    \ifdim \dimen@ < \@tempdima
+      \dimen@ \@tempdima
+    \fi
+    \global\setbox\@tempboxa \vbox {%
+      \ifx\@dbltoplist\@empty
+      \else
+        \@tempswatrue
+        \NRC@return@floats\@dbltoplist\@dbltoproom\@dbltopnum{dbl}%
+        \vspace\dbltextfloatsep
+      \fi
+      \hb@xt@\textwidth {%
+        \hb@xt@\columnwidth {%
+          \vbox to\dimen@{%
+            \unvbox\@tempboxb
+            \vfill
+          }%
+          \hss
+        }%
+        \hfill
+        \vrule \@width\columnseprule
+        \hfill
+        \hb@xt@\columnwidth {%
+          \vbox to\dimen@{%
+            \unvbox\@tempboxa
+            \vfill
+          }%
+          \hss
+        }%
+      }%
+    }%
+%    \end{macrocode}
+%
+% Preserve the value of the \cs{columnwidth} for use in the
+% \cs{*ColumnBar} commands
+%    \begin{macrocode}
+    \xdef\NRC@narrow@width{\the\columnwidth}
+%    \end{macrocode}
+%
+% We now have the two columns, nestling happily together, in (global)
+% \cs{@tempboxa}, so we simulate a \cs{onecolumn} command, so that we
+% can proceed as if we've now given up on this two column game\dots
+%    \begin{macrocode}
+    \global\columnwidth\textwidth
+    \global\hsize\columnwidth
+    \global\linewidth\columnwidth
+    \global\@twocolumnfalse
+    \col@number \@ne
+%    \end{macrocode}
+%
+% Finally, dump the contents of the \@tempboxa we prepared earlier
+% into this new one-columned environment
+%    \begin{macrocode}
+    \unvbox\@tempboxa
+  }%
+}
+%    \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@return@floats}
+% Syntax: \cs{NRC@return@floats}\marg{flt list}\marg{flt room}^^A
+%                               \marg{flt cnt}\marg{dbl ind}
+%
+% `Return' a list of floats that existed for the present page, and
+% recover the space they would have occupied in the present column;
+% note that since this operation redefines the float list \cs{@elt}
+% macro, it operates inside a group, and all its external actions need
+% to be done \cs{global}.  \cs{if@tempswa}, the body(ies) of the
+% float(s) is(are) inserted; otherwise they're simply lost.  It is the
+% responsibility of the calling routine to add \cs{textfloatsep} (or
+% whatever), where necessary, to ensure the floats are properly
+% positioned with respect to the rest of the matter in the column.
+%
+% The \meta{dble ind} parameter is either \verb'dbl' (if we're
+% returning a double-top list) or empty (it's used to determine which
+% separation to use in calculations (and in the case of returning
+% multiple floats, even when making inter-float skips)
+%    \begin{macrocode}
+\newcommand{\NRC@return@floats}[4]{{%
+%    \end{macrocode}
+%
+% \cs{@elt} macro for returning the first float in the list.  Note
+% that it doesn't insert any separation of its own\dots
+%    \begin{macrocode}
+    \def\@elt##1{%
+      \global\advance#3\@ne
+      \global\advance\@colnum\@ne
+      \@tempdima\ht##1%
+      \advance\@tempdima\dp##1%
+      \advance\@tempdima\csname#4textfloatsep\endcsname
+      \csname NRC@advance@#4colspace\endcsname{#2}%
+      \if@tempswa\vbox{\unvbox##1}\fi
+%    \end{macrocode}
+%
+% now the \cs{@elt} macro for returning subsequent floats in the
+% list.  Since we know that at least one float has already been added,
+% we insert \cs{\#4floatsep} before inserting the float's actual body.
+%    \begin{macrocode}
+      \def\@elt####1{%
+        \global\advance#3\@ne
+        \global\advance\@colnum\@ne
+        \@tempdima\ht####1%
+        \advance\@tempdima\dp####1%
+        \advance\@tempdima\csname#4floatsep\endcsname
+        \csname NRC@advance@#4colspace\endcsname{#2}%
+        \if@tempswa
+          \vskip\csname#4floatsep\endcsname%
+          \vbox{\unvbox####1}%
+        \fi
+      }%
+    }%
+%    \end{macrocode}
+%
+% Now we simply execute the list, and it will self-insert.
+%    \begin{macrocode}
+    #1%
+  }%
+%    \end{macrocode}
+%
+% Having closed the group in which \cs{@elt} was defined, we can
+% safely do the following to return the list to the free list, since
+% \cs{@elt} \emph{should} always be \cs{let} to \cs{relax}
+%    \begin{macrocode}
+  \let\@elt\relax
+  \xdef\@freelist{\@freelist#1}%
+  \xdef#1{}%
+  \global\vsize\@colroom
+}
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\NRC@advance@colspace}
+% \begin{macro}{\NRC@advance@dblcolspace}
+%
+% Add \cs{@tempdima} to the space available in the column(s).  The
+% version for double-column floats also restores space to \cs{@colht}.
+%    \begin{macrocode}
+\newcommand{\NRC@advance@colspace}[1]{%
+  \global\advance\@colroom\@tempdima
+  \global\advance#1\@tempdima
+}
+\newcommand{\NRC@advance@dblcolspace}[1]{%
+  \global\advance\@colroom\@tempdima
+  \global\advance#1\@tempdima
+  \global\advance\@colht\@tempdima
+%    \end{macrocode}
+%
+% \cs{@topnum} gets advanced in the \cs{@elt} macros and shouldn't be
+% in this case
+%    \begin{macrocode}
+  \global\advance\@topnum\m@ne
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now code for restarting double columns\dots
+%
+% \begin{macro}{\RestartDouble}
+%
+%    \begin{macrocode}
+\newcommand{\RestartDouble}{%
+  \penalty\z@
+  {%
+    \output{\NRC@gather@top}
+    \vfill
+    \eject
+  }%
+  \twocolumn[\unvbox\@tempboxb]%
+  \NRC@restorefootskip
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{FullWidth}
+% Syntax: \cs{begin}\verb'{FullWidth}'\oarg{epsilon}
+%
+% This environment encapsulates \cs{BalanceColumns} and
+% \cs{RestartDouble} in a single user-friendly, hyper-buzz-word,
+% package.
+%
+% The optional \emph{epsilon} argument is the same as that to
+% \cs{BalanceColumns} and should not ordinarily be required.
+%    \begin{macrocode}
+\newenvironment{FullWidth}[1][0.5]%
+  {\BalanceColumns[#1]}%
+  {\RestartDouble}
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\NRC@gather@top}
+%
+% Another dummy output routine, whose sole task is to salt away the
+% contents of a (nominally) single-column output-page-so-far
+%    \begin{macrocode}
+\newcommand{\NRC@gather@top}{%
+  \global\setbox\@tempboxb\vbox{\unvbox\@cclv}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LeftColumnBar}
+% \begin{macro}{\RightColumnBar}
+%
+% \cs{LeftColumnBar} and \cs{RightColumnBar} place bars across
+% columns, as are required to separate the two-column portion of the
+% text from interposed full-width material.  They are to be used
+% \emph{within} the full-width material, in vertical mode
+%    \begin{macrocode}
+\newcommand{\LeftColumnBar}{%
+  \addvspace{0.75\baselineskip}%
+  \hbox{\rule{\NRC@narrow@width}{\p@}}%
+  \addvspace{0.75\baselineskip}%
+}
+\newcommand{\RightColumnBar}{%
+  \par
+  \addvspace{0.75\baselineskip}%
+  \hb@xt@\textwidth{\hfill\rule{\NRC@narrow@width}{\p@}}%
+  \addvspace{0.75\baselineskip}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{WideText}
+% \begin{macro}{\NRC@widetext@i}
+% \begin{macro}{\NRC@widetext@ii}
+%
+% Syntax: \verb'\begin{WideText}'\oarg{left indent}\oarg{right indent}
+%
+% The \verb'WideText' environment allows variation of the text margins
+% for a short period.  It will typically be used to narrow the right
+% margin of full-width text in the two-column style, hence the default
+% values for the argument of \emph{left}:~\verb'0pc',
+% \emph{right}:~\verb'3pc'.
+%
+%    \begin{macrocode}
+\newenvironment{WideText}{%
+  \@testopt{\NRC@widetext@i}{\z@}%
+}{%
+  \endlist
+}
+\def\NRC@widetext@i[#1]{%
+  \@testopt{\NRC@widetext@ii{#1}}{3pc}%
+}
+\def\NRC@widetext@ii#1[#2]{%
+  \list{}{%
+    \topsep\z@
+    \leftmargin#1\relax
+    \rightmargin#2\relax
+    \listparindent\parindent
+    \parsep\parskip
+  }%
+  \item[]%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% \noindent At the going down of the sun, and in the morning, we will
+% remember them.
+%
+% \noindent 11:02 {\small GMT\@}, 8\textsuperscript{th} November
+% 1998 (Remembrance Sunday).
+%    \begin{macrocode}
+%</nrc2cls|balance>
+%<*nrc1cls|nrc2cls>
+%    \end{macrocode}
+%
+%
+% \subsection{Other miscellaneous layout}
+%
+% \begin{macro}{\frenchspacing}
+% We use \cs{frenchspacing} throughout.  Fortunately, \textsf{babel}
+% respects our wishes, and doesn't reset \cs{nonfrenchspacing} every
+% time we select English from within French.  (\textsf{babel} accords
+% English a haughty position whereby every other language is required
+% to restore the original English state, so that the selection of
+% English doesn't give us a problem here.)
+%    \begin{macrocode}
+\frenchspacing
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parindent}
+% Paragraph indentation is smaller than normal in the the two-column
+% classes:
+%    \begin{macrocode}
+%<*nrc2>
+\parindent 10pt
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parskip}
+% And the inter-paragraph skip contributes to the stretchability of
+% vertical lists:
+%    \begin{macrocode}
+\parskip 0pt plus 2pt
+%</nrc2>
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Support macros}
+%
+% Pseudo-counters are implemented in \cs{NRC@c@*} macros.  The
+% following bits of code manipulate these macros.  We refer to these
+% things via the name part (the |*|, as it were).
+%
+% \begin{macro}{\NRC@definecounter}
+% Syntax: \cs{NRC@definecounter}\marg{macro-name}
+%
+% \cs{NRC@definecounter} creates and zeroes a counter macro |#1|:
+%    \begin{macrocode}
+\newcommand\NRC@definecounter[1]{%
+  \global\expandafter\newcommand\csname NRC@c@#1\endcsname{0}}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\NRC@addtocounter}
+% Syntax: \cs{NRC@addtocounter}\marg{macro-name}\marg{increment}
+%
+% \cs{NRC@addtocounter} adds |#2| to counter macro |#1|:
+%    \begin{macrocode}
+\newcommand\NRC@addtocounter[2]{\bgroup
+  \expandafter\@tempcnta\csname NRC@c@#1\endcsname\relax
+  \advance\@tempcnta#2\relax
+  \expandafter\xdef\csname NRC@c@#1\endcsname{\the\@tempcnta}%
+  \egroup
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@stepcounter}
+% Syntax: \cs{NRC@stepcounter}\marg{counter-name}
+%
+% Advance a counter by 1
+%    \begin{macrocode}
+\newcommand\NRC@stepcounter[1]{\NRC@addtocounter{#1}1}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@NRCcounter}
+% Syntax:
+% \cs{if@NRCcounter}\marg{counter-name}\meta{condition}\meta{integer-value}
+%
+% \cs{if@NRCcounter} establishes an \cs{ifnum} test on the contents of
+% a counter
+%    \begin{macrocode}
+\newcommand\if@NRCcounter[1]{\expandafter\ifnum\csname
+  NRC@c@#1\endcsname}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@valcounter}
+% Syntax: \cs{NRC@valcounter}\marg{counter-name}
+%
+% \cs{NRC@valcounter} simply inserts the value of a counter into the
+% token stream
+%    \begin{macrocode}
+\newcommand\NRC@valcounter[1]{\csname NRC@c@#1\endcsname}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@condgobble}
+% Syntax: \cs{NRC@condgobble}\marg{ignore}, or just
+% \cs{NRC@condgobble}
+%
+% \cs{NRC@condgobble} looks to see if it's got an `argument' and if
+% so, gobbles it
+%    \begin{macrocode}
+\def\NRC@condgobble{\futurelet\reserved@a\NRC@relayto@gobble}
+\def\NRC@relayto@gobble{\ifx\reserved@a\bgroup\expandafter\@gobble\fi}
+%    \end{macrocode}
+% \end{macro}
+%
+% A few odds and ends for the parallel-text setting\dots
+%
+% \begin{macro}{\NRC@insertignore}
+% \begin{macro}{\@@ignorespaces}
+% Syntax: \cs{NRC@insertignore}\marg{execute next}
+%
+% Insert \cs{NRC@ignorespacesandpars}\marg{execute next} after the
+% current environment by mucking about with \cs{if@ignore} and
+% \cs{ignorespaces}
+%    \begin{macrocode}
+\newcommand\NRC@insertignore[1]{%
+  \@ignoretrue
+  \gdef\ignorespaces{%
+    \global\let\ignorespaces\@@ignorespaces
+    \def\@tempa{\NRC@ignorespacesandpars{#1}}%
+    \expandafter\@tempa
+  }%
+}
+\let\@@ignorespaces\ignorespaces
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@ignorespacesandpars}
+% Syntax: \cs{NRC@ignorespacesandpars}\marg{execute next}
+%
+% Ignore any blank space following the present environment, then
+% ignore any \cs{par} tokens, then execute our argument
+%    \begin{macrocode}
+\newcommand\NRC@ignorespacesandpars[1]{%
+  \def\@tempb\par{\@tempa}%
+  \def\@tempa{\@long@ifnextchar\par\@tempb{#1}}%
+  \@tempa
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@long@ifnextchar}
+% Syntax: \cs{@long@ifnextchar}\marg{token}\marg{match}\marg{no match}
+%
+% As \cs{@ifnextchar} (from which the code is derived), but
+% \marg{token} is allowed to be \cs{par}\dots
+%    \begin{macrocode}
+\long\def\@long@ifnextchar#1#2#3{%
+  \let\reserved@d=#1%
+  \def\reserved@a{#2}\def\reserved@b{#3}%
+  \futurelet\@let@token\@ifnch}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@stripdef}
+% \begin{macro}{\NRC@stripdef@}
+% Syntax: \cs{NRC@stripdef}\cs{\emph{defining}}\cs{\emph{defined}}
+%
+% Strip the defnition of \cs{\emph{defined}} from the definition of
+% \cs{captions\meta{defining}}, if it proves that
+% \cs{captions\meta{defining}} actually exists
+%    \begin{macrocode}
+\newcommand\NRC@stripdef[2]{%
+  \@ifundefined{captions#1}{}{%
+    \def\NRC@stripdef@##1\def#2##2##3\NRC@stripdef@{%
+      \@namedef{captions#1}{##1##3}%
+    }%
+    \edef\@tempa{\noexpand\expandafter
+      \noexpand\NRC@stripdef@
+      \expandafter\noexpand\csname captions#1\endcsname
+      \noexpand\NRC@stripdef@
+    }%
+    \@tempa
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \section{Titles and origins}
+%
+% \subsection{Title material}
+%
+% The number of authors is a counter macro; it is used as an index in
+% the author number definitions, too:
+%    \begin{macrocode}
+\NRC@definecounter{author}
+%    \end{macrocode}
+%
+% \begin{macro}{\author}
+% \begin{macro}{\@NRC@dblauthor}
+% Syntax: \cs{author}\oarg{author initials}\marg{author name}
+%
+% A new author is defined by the \cs{author} macro.  The mandatory
+% argument is the author's `full' name; the optional argument gives
+% the author's name in abbreviated form, which will be used in the
+% IDbox on the title page in place of the full name.\footnote{In
+%   principal, this short name could be used to derive an author
+%   `list' for the running head (saving the editor the use of the
+%   \cs{shortauthor} command if there are sufficiently few authors)
+%   but this facility has not yet been implemented.}
+%    \begin{macrocode}
+\renewcommand\author{\@dblarg\@NRC@dblauthor}
+\newcommand\@NRC@dblauthor[2][]{%
+  \if@NRCcounter{author}>0
+    \expandafter\ifx\csname NRC@addr\NRC@c@author\endcsname\relax
+%    \end{macrocode}
+%
+% If no address was given for the previous author, things are going to
+% fall apart unless we allocate a (spurious) one.
+%    \begin{macrocode}
+      \NRC@warning{No address given for author \NRC@c@author}%
+      \address{(\emph{\texttt{address missing}})}%
+    \fi
+  \fi
+  \let\NRC@tempb\NRC@c@author%
+  \NRC@stepcounter{author}%
+  \NRC@definecounter{AN\NRC@c@author}
+  \@namedef{NRC@author\NRC@c@author}{#2}%
+  \@namedef{NRC@initialsonly\NRC@c@author}{#1}%
+  \ifnum\NRC@tempb=0
+%    \end{macrocode}
+%
+% We explicitly \cs{let} the first address to \cs{relax}, in case that
+% we're on the second or subsequent paper of an issue of the journal:
+% otherwise, we're in danger of picking up an address from the
+% previous paper in the error case where the address has been omitted.
+%    \begin{macrocode}
+    \expandafter\let\csname NRC@addr\NRC@c@author\endcsname\relax
+  \else
+%    \end{macrocode}
+%
+% Otherwise, we start by assuming that the address is the same as that
+% of the previous author.  An explicit address command is needed
+% somewhere or other, though.  (Of course\dots)
+%    \begin{macrocode}
+    \expandafter\edef\csname NRC@addr\NRC@c@author\endcsname
+      {\csname NRC@addr\NRC@tempb\endcsname}
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\shortauthor}
+% \begin{macro}{\@shortauthor}
+% Syntax: \cs{shortauthor}\marg{author-spec}
+%
+% Defines the reference to be made to the authors in the running
+% heads, in the case where it's not derivable from the author
+% specifications.\footnote{There's currently no provision for deriving
+%   `\cs{shortauthor}' from the names given (in either argument) to
+%   \cs{author} commands.}
+%    \begin{macrocode}
+\newcommand\shortauthor[1]{\newcommand\@shortauthor{#1}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% An author's address is defined by the \cs{address} macro.  The
+% mandatory argument is the address defined; the optional argument (if
+% present) allows the address to be tagged for future reference from
+% other authors.
+%
+% For each author \meta{n} there's an \cs{NRC@addr\meta{n}} which
+% expands to the address label.  If an address is defined by
+% \cs{address}\marg{address}, the label is simply `the current author
+% number'; otherwise, it's \cs{address}'s optional argument.  If an
+% author isn't given an explicit address, she is assumed to be at the
+% same place as the previous author (which all falls apart if there's
+% been no author defined yet).
+%
+% For each address \meta{label}, there's an
+% \cs{NRC@addr@\meta{label}} that expands to the actual address.
+%    \begin{macrocode}
+\newcommand\address{\@ifnextchar[%]
+  \NRC@address@l  \NRC@address@nl
+}
+%    \end{macrocode}
+%
+% If there's no optional argument, the command simply defines the
+% current author's address to be that in the argument:
+%    \begin{macrocode}
+\newcommand\NRC@address@nl[1]{%
+%    \end{macrocode}
+%
+% First, define the address for label `author number'
+%    \begin{macrocode}
+  \@namedef{NRC@addr@\NRC@c@author}{#1}%
+%    \end{macrocode}
+%
+% And then allocate `this author's number' as this author's label
+%    \begin{macrocode}
+  \expandafter\edef\csname NRC@addr\NRC@c@author\endcsname
+    {\NRC@c@author}%
+%    \end{macrocode}
+%
+% Finally, register the empty tree of
+% author\ensuremath{\rightarrow}address mappings:
+%    \begin{macrocode}
+  \NRC@allocaddr\NRC@c@author%
+}
+%    \end{macrocode}
+%
+% The optional argument could represent two forms, according to
+% whether the `mandatory' (-seeming) argument is present.  Preserve
+% the optional (label) argument and split on whether we're actually
+% defining an address, or merely referring to one.  Whatever, we
+% define the current author's address label.
+%    \begin{macrocode}
+\def\NRC@address@l[#1]{%
+  \@namedef{NRC@addr\NRC@c@author}{#1}%
+  \def\NRC@tempa{#1}%
+  \futurelet\reserved@a\NRC@address@lsw
+}
+%    \end{macrocode}
+%
+% If we now enter with \cs{reserved@a} the same as \cs{bgroup}, we've
+% got an address definition, and a label definition to go with it.
+% Otherwise, we merely have a label reference
+%    \begin{macrocode}
+\def\NRC@address@lsw{%
+  \ifx\reserved@a\bgroup
+    \expandafter\NRC@address@ldef
+  \fi
+}
+%    \end{macrocode}
+%
+%
+% Address with label definition: set up the address itself, and
+% allocate an entry in the tree of addresses
+%    \begin{macrocode}
+\def\NRC@address@ldef#1{%
+  \@namedef{NRC@addr@\NRC@tempa}{#1}%
+  \NRC@allocaddr\NRC@tempa%
+}
+%    \end{macrocode}
+%
+% \begin{macro}{\NRC@addresses}
+% \begin{macro}{\NRC@allocaddr}
+% Syntax: \cs{NRC@allocaddr}\marg{addr-label}
+%
+% Allocate a root of a tree and register it in the list \cs{NRC@addresses}
+%    \begin{macrocode}
+\gdef\NRC@addresses{}
+\newcommand\NRC@allocaddr[1]{%
+  \expandafter\gdef\csname NRC@addrlist#1\endcsname{}%
+  \NRC@definecounter{addr@#1}%
+  \NRC@addtolist\NRC@addresses{#1}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@addtolist}
+% Syntax: \cs{NRC@addtolist}\marg{list-cs-name}\marg{list-element}
+%
+% Adds an element |#2| to list |#1|
+%    \begin{macrocode}
+\newcommand\NRC@addtolist[2]{\bgroup
+  \let\do\relax
+  \xdef#1{#1\do{#2}}%
+  \egroup
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@addauthortoaddress}
+% Syntax: \cs{NRC@addauthortoaddress}\marg{author-count}
+%
+% Adds the author specified by the \emph{count} to the relevant
+% address list, and counts the author in the counter
+% \texttt{@addr@\meta{addr-label}}
+%    \begin{macrocode}
+\newcommand\NRC@addauthortoaddress[1]{%
+  \expandafter\edef\expandafter\@tempa\expandafter{%
+    \csname NRC@addr#1\endcsname}%
+  \expandafter\NRC@addtolist
+                  \csname NRC@addrlist\@tempa\endcsname{#1}%
+  \NRC@stepcounter{addr@\@tempa}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\correspond}
+% \begin{macro}{\@correspond}
+% \begin{macro}{\@correspond@a}
+% Syntax: \cs{correspond}\marg{correspondence-details} (argument,
+% despite looking as if it's mandatory, is in fact optional)
+%
+% Designate one author as the target for correspondence:
+%    \begin{macrocode}
+\newcommand\correspond{%
+  \futurelet\reserved@a\@correspond
+}
+%    \end{macrocode}
+%
+% Now, if there actually is an argument, \cs{reserved@a} will contain an
+% opening brace
+%    \begin{macrocode}
+\newcommand\@correspond{%
+  \ifx\reserved@a\bgroup
+    \expandafter\@correspond@a
+  \else
+    \AddressNote{\NRC@text@correspondAll}%
+  \fi
+}
+%    \end{macrocode}
+%
+% Deal with a \cs{correspond} command with arguments
+%    \begin{macrocode}
+\newcommand\@correspond@a[1]{%
+  \def\@tempa{#1}%
+  \protected@xdef\@tempa{\noexpand\AddressNote{\NRC@text@correspond}}
+  \@tempa
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\present}
+% Syntax: \cs{present}\marg{address}
+%
+% Record that this author has an alternative address.
+%    \begin{macrocode}
+\newcommand\present[1]{%
+  \AddressNote{\NRC@text@present\ #1}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AddressNote}
+% \begin{macro}{\IDnote}
+% Syntax: \cs{AddressNote}\marg{note}
+%
+% Define an anonymous address note (\cs{IDnote} is a synonym).
+%    \begin{macrocode}
+\newcommand\AddressNote[1]{%
+  \NRC@stepcounter{AN\NRC@c@author}
+  \bgroup
+    \@NRC@AddressCommands
+    \expandafter\protected@xdef
+      \csname NRC@AN\NRC@c@author.%
+        \@nameuse{NRC@c@AN\NRC@c@author}\endcsname{%
+      \noexpand\NRC@addrfnote{#1}%
+    }%
+  \egroup
+}
+\let\IDnote\AddressNote
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@NRC@AddressCommands}
+% \begin{macro}{\phone}
+% \begin{macro}{\fax}
+% \begin{macro}{\telefax}
+% \begin{macro}{\email}
+%
+% Define the auxiliary address commands for use in the arguments of
+% \cs{AddressNote} and \cs{address} commands.  The commands are
+% themselves declared as null robust commands, and their expansions
+% are only declared within the groups where the commands are going to
+% be used
+%    \begin{macrocode}
+\def\@NRC@AddressCommands{%
+  \expandafter\def\csname phone \endcsname##1{%
+    \NRC@text@telephone\protect~##1}%
+  \expandafter\def\csname fax \endcsname##1{|%
+    \NRC@text@fax\protect~##1}%
+  \expandafter\def\csname telefax \endcsname##1{%
+    \NRC@text@telefax\protect~##1}%
+  \expandafter\def\csname email \endcsname##1{%
+    \mbox{\NRC@text@email}\protect~##1}%
+}
+\DeclareRobustCommand\phone[1]{}
+\DeclareRobustCommand\fax[1]{}
+\DeclareRobustCommand\telefax[1]{}
+\DeclareRobustCommand\email[1]{}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\received}
+% \begin{macro}{\NRC@received}
+% \begin{macro}{\NRC@received@sep}
+% \begin{macro}{\accepted}
+% \begin{macro}{\revreceived}
+% \begin{macro}{\revaccepted}
+% Syntax: \cs{received}\marg{received date}~\dots~\cs{accepted}\marg{accepted
+%   date} \dots\ \cs{revreceived}\marg{date revision received}
+%   \dots\ \cs{revaccepted}\marg{date revision accepted}
+%
+% Preserve the `received' and  `accepted' dates (two sorts of each).
+%
+% The \cs{received} |[...| \cs{accepted}|]| |[...| \cs{revreceived}|]|
+% |[...| \cs{revaccepted}|]| form is now preferred.
+%    \begin{macrocode}
+\newcommand\NRC@received@sep{}
+\def\NRC@received{}
+\newcommand\received[1]{%
+  \protected@xdef\NRC@received{\NRC@received\NRC@received@sep
+    \protect\NRC@text@received\ #1.%
+  }%
+  \let\NRC@received@sep\space
+}
+\newcommand\accepted[1]{%
+  \protected@xdef\NRC@received{\NRC@received\NRC@received@sep
+    \protect\NRC@text@accepted\ #1.%
+  }%
+  \let\NRC@received@sep\space
+}
+\newcommand\revreceived[1]{%
+  \protected@xdef\NRC@received{\NRC@received\NRC@received@sep
+    \protect\NRC@text@revreceived\ #1.%
+  }%
+  \let\NRC@received@sep\space
+}
+\newcommand\revaccepted[1]{%
+  \protected@xdef\NRC@received{\NRC@received\NRC@received@sep
+    \protect\NRC@text@revaccepted\ #1.%
+  }%
+  \let\NRC@received@sep\space
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\IDdates}
+% \begin{macro}{\IDdate}
+% Syntax: \cs{IDdates}\marg{Date text}
+%
+% Provides the means of entering a more freely-specified date entry.
+% If present, it's tagged on the end of the \cs{accepted} stuff, with
+% a separating space if appropriate.  Repeated \cs{IDdates} commands
+% are acceptable, and their arguments are tagged on, one after
+% another, with a separating space.  (\cs{IDdate} is an alias for
+% \cs{IDdates}.)
+%    \begin{macrocode}
+\newcommand{\IDdates}[1]{%
+  \protected@xdef\NRC@received{\NRC@received\NRC@received@sep#1}%
+  \let\NRC@received@sep\space
+}
+\let\IDdate\IDdates
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dedication}
+% \begin{macro}{\NRC@dedication}
+% \begin{macro}{\ifNRC@dedication}
+% Syntax: \cs{dedication}\marg{pious words}
+%
+% Preserve a dedicatory text to be printed in the ident box at the
+% bottom of the title page
+%    \begin{macrocode}
+\newif\ifNRC@dedication  \NRC@dedicationfalse
+\newcommand\dedication[1]{\gdef\NRC@dedication{#1}%
+  \NRC@dedicationtrue
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\assoced}
+% \begin{macro}{\NRC@assoced}
+% \begin{macro}{\ifNRC@assoced}
+% Syntax: \cs{assoced}\marg{details of associate editor}
+%
+% Preserve details of the associate editor, to be printed in the ident
+% box at the bottom of the title page
+%    \begin{macrocode}
+\newif\ifNRC@assoced  \NRC@assocedfalse
+\newcommand\assoced[1]{\gdef\NRC@assoced{\NRC@text@assoced{} #1.}%
+  \NRC@assocedtrue
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\corred}
+% \begin{macro}{\NRC@corred}
+% \begin{macro}{\ifNRC@corred}
+% Syntax: \cs{corred}\marg{details of corresponding editor}
+%
+% Preserve details of the corresponding editor, to be printed in the ident
+% box at the bottom of the title page
+%    \begin{macrocode}
+\newif\ifNRC@corred  \NRC@corredfalse
+\newcommand\corred[1]{\gdef\NRC@corred{\NRC@text@corred{} #1.}%
+  \NRC@corredtrue
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\commdate}
+% \begin{macro}{\NRC@commdate}
+% \begin{macro}{\if@NRCcommdate}
+% Syntax: \cs{commdate}\marg{comment date}
+%
+% Preserve the date by which comments should be received, to be
+% printed in the ident box at the bottom of the title page
+%    \begin{macrocode}
+\newif\ifNRC@commdate  \NRC@commdatefalse
+\newcommand\commdate[1]{\gdef\NRC@commdate{\NRC@text@commdate{} #1.}%
+  \NRC@commdatetrue
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\webpub}
+% \begin{macro}{\NRCurl}
+% \begin{macro}{\NRC@a@webpub}
+% \begin{macro}{\NRC@webpub}
+% \begin{macro}{\ifNRC@webpub}
+% \begin{macro}{\NRC@def@webaddress}
+% \begin{macro}{\NRC@url}
+% \begin{macro}{\NRC@url@command}
+% Syntax: \cs{webpub}\marg{web address}\marg{date of web publication}\par
+% \noindent\phantom{Syntax: }\cs{NRCurl}\marg{url command name}
+%
+% \cs{webpub} preserves the location and date of publication on the WWW, to be
+% printed in the ident box at the bottom of the title page.  The
+% \emph{first} `mandatory' argument may in fact be omitted: the
+% presence of two such arguments is determined by there being a ``{'' % }
+% immediately after the first argument.
+%    \begin{macrocode}
+\newif\ifNRC@webpub  \NRC@webpubfalse
+\newcommand\webpub[1]{\@ifnextchar\bgroup
+  {\def\@tempa{#1}\NRC@a@webpub}%
+  {%
+    \def\@tempa{\protect\NRC@url{\protect\NRC@def@webaddress}}%
+    \NRC@a@webpub{#1}%
+  }%
+}
+\newcommand\NRC@a@webpub[1]{%
+  \def\@tempb{#1}%
+  \protected@xdef\NRC@webpub{\NRC@text@webpub.}%
+  \NRC@webpubtrue
+}
+\newcommand*{\NRC@def@webaddress}{\emph{unknown}}
+%    \end{macrocode}
+%
+% \cs{NRCurl} sets up typesetting of URLs in \cs{webpub}; there's a
+% complicated sequence of protections and non-expansions and things
+% whose real purpose is to ensure that \cs{NRC@def@webaddress} doesn't
+% get expanded until the web address is actually put into the IDbox.
+%    \begin{macrocode}
+\DeclareRobustCommand\NRCurl[1]{\expandafter\let\expandafter
+  \NRC@url@command\csname#1\endcsname}
+\NRCurl{@firstofone}
+\newcommand\NRC@url[1]{{%
+  \let\protect\@empty
+  \edef\@tempa{\noexpand\NRC@url@command{#1}}%
+  \@tempa
+}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\abbreviations}
+% \begin{macro}{\@abbreviations}
+% \begin{macro}{\if@abbreviations}
+% Syntax: \cs{abbreviations}\marg{set of abbrev.\ specs}
+%
+% Preserve a set of abbreviations to be printed in the ident box,
+% between the dedication and list of authors.
+%    \begin{macrocode}
+\newif\if@abbreviations  \@abbreviationsfalse
+\newcommand\abbreviations[1]{\gdef\@abbreviations{#1}%
+  \@abbreviationstrue
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Support code for \cs{maketitle}}
+%
+% Make a list of all the authors
+%    \begin{macrocode}
+\newcommand\NRC@defaultauthorlist{\bgroup
+  \let\correspond\NRC@condgobble
+  \expandafter\@tempcnta\NRC@c@author\relax
+  \advance\@tempcnta -2
+  \@tempcntb 0
+  \loop
+    \ifnum\@tempcnta>0
+      \advance\@tempcntb 1
+      \NRC@addauthortoaddress{\the\@tempcntb}%
+      \ignorespaces\csname NRC@author\number\@tempcntb\endcsname\unskip,
+      \advance\@tempcnta -1
+  \repeat
+  \expandafter\@tempcnta\NRC@c@author\relax
+  \advance\@tempcnta -\@tempcntb
+  \expandafter\ifnum\NRC@c@author>0
+    \ifnum\@tempcnta>1
+      \expandafter\@tempcnta\NRC@c@author\relax
+      \advance\@tempcnta -1
+      \NRC@addauthortoaddress{\the\@tempcnta}%
+      \ignorespaces\csname NRC@author\number\@tempcnta\endcsname\unskip
+      \expandafter\ifnum\NRC@c@author>2
+        \ifNRC@french\else,\fi
+      \fi\ \NRC@text@and\
+    \fi
+    \NRC@addauthortoaddress\NRC@c@author
+    \ignorespaces\csname NRC@author\NRC@c@author\endcsname\unskip
+  \fi
+\egroup
+}
+%    \end{macrocode}
+%
+% \begin{macro}{\NRC@default@authaddlist}
+% Output the list of authors sorted by address, as in the ident box on
+% the title page
+%    \begin{macrocode}
+\newcommand\NRC@default@authaddlist{\bgroup
+  \let\do\NRC@output@authorline
+  \NRC@addresses
+  \egroup
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@output@authorline}
+% Syntax: \cs{NRC@output@authorline}\marg{addr-label}
+%
+% Outputs all the authors associated with that address, then a full
+% stop (having put the correspondence mark in place if required), then
+% the address
+%    \begin{macrocode}
+\newcommand\NRC@output@authorline[1]{\bgroup
+  \@tempswafalse
+  \expandafter\@tempcnta\NRC@valcounter{addr@#1}\relax
+%    \end{macrocode}
+%
+% Decide how to do separators between author names on the basis of how
+% many there are: case 0 can't happen, and in case 1 the separator
+% never gets used
+%    \begin{macrocode}
+  \ifcase\@tempcnta
+  \or
+%    \end{macrocode}
+%
+% in case 2, there's only one separator `` and ''
+%    \begin{macrocode}
+  \or \def\NRC@authorseparator{\NRC@optfnmark{} \NRC@text@and\ }%
+%    \end{macrocode}
+%
+% in case of 3 or more authors at the same address, we need an
+% intelligent separator
+%    \begin{macrocode}
+  \else
+    \def\NRC@authorseparator{%
+      \ifnum\@tempcnta>0\relax
+        \ifNRC@french
+          \NRC@optfnmark,
+        \else
+          ,\NRC@optfnmark{}
+        \fi
+        \advance\@tempcnta-1\relax
+      \else
+        \ifNRC@french
+          \NRC@optfnmark\ \NRC@text@and{}
+        \else
+          ,\NRC@optfnmark{} \NRC@text@and{}
+        \fi
+      \fi
+    }%
+    \advance\@tempcnta-2\relax
+  \fi
+  \let\do\NRC@output@oneauthor
+  \noindent{\usefont\f@encoding\rmdefault {bx}n%
+            \csname NRC@addrlist#1\endcsname
+            \ifNRC@french
+              \NRC@optfnmark.%
+            \else
+              .\NRC@optfnmark
+            \fi}
+  \if@breakaddress\par\noindent\fi
+  \csname NRC@addr@#1\endcsname\par
+  \egroup
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@output@oneauthor}
+% Syntax: \cs{NRC@output@oneauthor}\marg{author-number}
+%
+% Outputs one author: for use during processing lists of authors at
+% one address.  Switch |@tempswa| set true by first author, and
+% subsequent ones get separated by a comma.
+%    \begin{macrocode}
+\newcommand\NRC@output@oneauthor[1]{%
+  \if@tempswa\NRC@authorseparator\else\@tempswatrue\fi
+  \csname NRC@initialsonly#1\endcsname
+  \def\NRC@optfnmark{\NRC@processAN{#1}}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@addrfnote}
+% \begin{macro}{\NRC@addrfnbody}
+% Syntax: \cs{NRC@addrfnote}\marg{address footnote matter}
+%
+% This code (rather closely modelled on \cs{thanks}) saves up any
+% `footnotes' (i.e., corresponding or present addresses) that may
+% occur during typesetting of the ident box
+%    \begin{macrocode}
+\newcommand\NRC@addrfnote[1]{%
+  \NRC@addrfnmark
+  \protected@xdef\NRC@addrfnbody{\NRC@addrfnbody
+    \protect\NRC@addrfntext[\the\c@footnote]{#1}\protect\par}%
+}
+\def\NRC@addrfnbody{}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@addrfnmark}
+% For use by \cs{NRC@addrfnote}; differs from standard
+% \cs{footnotemark} only in that it uses current body font for the
+% superscripted character.
+%    \begin{macrocode}
+\newcommand{\NRC@addrfnmark}{%
+  {%
+    \stepcounter{footnote}%
+    \protected@xdef\@thefnmark{\thefootnote}%
+  }%
+  \leavevmode
+  \edef\@x@sf{\the\spacefactor}%
+  \nobreak
+  \hbox{\textsuperscript{\@thefnmark}}%
+  \spacefactor\@x@sf\relax
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+% Syntax: \cs{thanks}\marg{comment}
+%
+% This redefinition of the standard \LaTeX{} command puts the notes
+% into the IDbox.
+%    \begin{macrocode}
+\let\thanks\NRC@addrfnote
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@addrfntext}
+% Syntax: \cs{NRC@addrfntext}\oarg{mark}\marg{body}
+%
+% Does the slightly gutted footnotes we have in the ident block
+%    \begin{macrocode}
+\def\NRC@addrfntext[#1]#2{%
+  \begingroup
+    \csname c@\@mpfn\endcsname #1\relax
+    \unrestored@protected@xdef\@thefnmark{\thempfn}%
+  \endgroup
+  \@makefntext{%
+    \rule\z@\footnotesep
+    \NRC@sectragged\ignorespaces
+    #2%
+    \@finalstrut\strutbox}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@processAN}
+% Syntax: \cs{NRC@processAN}\marg{author number}
+%
+% Generate the \cs{AddressNote}s for this author; takes account of
+% multiple notes for one author (placing a comma between the note
+% numbers superscripted after the author's name)
+%    \begin{macrocode}
+\newcommand\NRC@processAN[1]{%
+  \@tempcntb 0\relax
+  \loop
+    \if@NRCcounter{AN#1}>\@tempcntb
+      \advance\@tempcntb 1\relax
+      \csname NRC@AN#1.\the\@tempcntb\endcsname
+%    \end{macrocode}
+%
+% Note, we can't use \cs{if@NRCcounter} here, because we need to have
+% something that the parser will cope with as being a conditional
+% command
+%    \begin{macrocode}
+      \expandafter\ifnum\csname NRC@c@AN#1\endcsname>\@tempcntb
+        \textsuperscript{,}%
+      \fi
+  \repeat
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\specialtitle}
+% \begin{macro}{\@specialtitle}
+% \begin{macro}{\if@specialtitle}
+% \begin{macro}{\if@specialonly}
+% Syntax: \cs{specialtitle}\marg{title}, or
+% \cs{specialtitle*}\marg{title}
+%
+% Declares a boxed reversed-colour box at the top of the page.  The
+% \marg{title} appears in the box.  If the \texttt{*}-form of the
+% command is used, no `regular' title block is expected, and the
+% reversed box is the only title for this item; otherwise, a normal
+% title box exists, with the special title block included within it.
+%    \begin{macrocode}
+\newcommand\specialtitle{\@ifstar
+  {\@specialonlytrue\@specialtitle}%
+  {\@specialonlyfalse\@specialtitle}}
+\newcommand\@specialtitle[1]{\gdef\@special@title{#1}\@specialtitletrue}
+\newif\if@specialtitle  \@specialtitlefalse
+\newif\if@specialonly
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Setting the title}
+%
+% \begin{macro}{\NRC@titleoffset}
+% \cs{NRC@titleoffset} holds the offset of titles from the left margin
+% (note, this is larger than the distance between the heavy left bar
+% and the title, and is also the left margin used for the abstract/
+% r\'esum\'e)
+%    \begin{macrocode}
+\def\NRC@titleoffset{5pc\relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifNRC@IDbox}
+% \begin{macro}{\NRC@theIDbox}
+% \cs{ifNRC@IDbox} is globally set to determine whether an IDbox is
+% needed (initially false: may be set true inside \cs{NRC@maketitle}).
+% If we're doing a two-column IDbox, it gets set into \cs{NRC@theIDbox}
+%    \begin{macrocode}
+\newif\ifNRC@IDbox
+\global\NRC@IDboxfalse
+%<nrc2>\newbox\NRC@theIDbox
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\maketitle}
+% \begin{macro}{\ifNRC@closingrule}
+% Syntax: \cs{maketitle}\meta{optional-asterisk}
+%
+% Simply use what's gone before.  If the \meta{optional-asterisk} is
+% present (two-column classes only), a 1pc rule is placed after the
+% abstract/r\'esum\'e: this is required if the whole is so long that
+% it runs over to a second page.
+%
+% First, let's define a flag for this closing rule
+%    \begin{macrocode}
+%<*nrc2>
+\newif\ifNRC@closingrule
+\NRC@closingrulefalse
+%</nrc2>
+%    \end{macrocode}
+%
+% Start the definition.  There's not actually much code in common for
+% the 1-column and the 2-column cases.  The 1-column case is in
+% fact \emph{much} simpler.
+%    \begin{macrocode}
+\renewcommand\maketitle{%
+%    \end{macrocode}
+%
+% For 1-column setting, we start by adjusting the skip from the base of
+% the headline (consisting, in this case, merely of the folio) to the
+% baseline of the title.  Flying blind (calculation doesn't seem to
+% get this right, so this is an empirical separation)\dots
+%    \begin{macrocode}
+%<*nrc1>
+  \NRC@maketitle
+  \vspace*{2pc}%
+  \ifNRC@IDbox\NRC@makeIDbox{\textwidth}\fi
+}
+%</nrc1>
+%    \end{macrocode}
+%
+% The other (2-column) journals set themselves with a title at the
+% top, and the rest in 2 columns.  First detect (and save the flag
+% for) the closing rule; then continue 
+%    \begin{macrocode}
+%<*nrc2>
+  \@ifstar{\NRC@closingruletrue\NRC@iimaketitle}{\NRC@iimaketitle}%
+}
+\newcommand{\NRC@iimaketitle}{%
+  \NRC@maketitle
+  \ifNRC@IDbox\NRC@makeIDbox{%
+    \if@onecolid\NRC@columnwidth\else\textwidth\fi}%
+  \fi
+  \ifx\NRC@abstract@i\@undefined
+    \NRC@warning{Neither abstract nor resume given}%
+  \else
+    \begingroup
+      \the\NRC@abstract@i
+      \@topsepadd\z@
+      \endtrivlist
+    \endgroup
+    \ifx\NRC@abstract@ii\@undefined
+      \NRC@warning{One of abstract and resume missing}%
+    \else
+      \gdef\NRC@absressep{8}%
+      \begingroup
+        \the\NRC@abstract@ii
+        \@topsepadd\z@
+        \endtrivlist
+        \endgroup
+    \fi
+  \fi
+%    \end{macrocode}
+%
+% Now we insert the closing rule, if the user asked for it.  The space
+% above and below the rule is to be \texttt{1pc} nominal, but in a
+% properly formatted paper, the abstract or r\'esum\'e (whichever
+% came second) will have added \texttt{8pt} by way of \cs{topsep} at
+% the bottom of the list.  We therefore only add \texttt{4pt} above
+% the rule.
+%
+% The spacing in the absence of the rule is still that derived from
+% \texttt{nrc1.cls} --- it may need adjustment.
+%    \begin{macrocode}
+  \ifNRC@closingrule
+    \vskip 4\p@
+    \noindent\rule{\textwidth}{\p@}
+    \vskip 1pc
+  \else
+    \vspace*{8\p@}%
+  \fi
+  \global\dbltextfloatsep \z@
+  \RestartDouble
+  \if@onecolid
+    \ifNRC@IDbox
+      \@float{figure}[b!]
+        \box\NRC@theIDbox
+      \end@float
+    \fi
+  \fi
+}
+%</nrc2>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@maketitle}
+% Syntax: \cs{NRC@maketitle}
+%
+% Makes the title of a paper, which will reside at the top of the
+% first page of the paper.
+%
+% First, do we have a reversed-box special title?  If we do, and it's
+% the only title we have, we create it now.
+%    \begin{macrocode}
+\newcommand{\NRC@maketitle}{%
+  \vspace*{-6\p@}%
+  \if@specialtitle
+    \if@specialonly
+      \bgroup
+        \fboxsep\z@
+        \noindent\hspace{\NRC@titleoffset}%
+        \colorbox{black}{%
+          \hskip 1pc\relax
+%<*nrc2>
+          \parbox[t]{37pc}{%} match extra parbox opening
+            \fontsize{18}{28}%
+%</nrc2>
+%<*nrc1>
+          \parbox[t]{28pc}{%
+            \fontsize{16}{24}%
+%</nrc1>
+            \usefont\f@encoding\sfdefault mn%
+            \NRC@sectragged
+            \advance\rightskip 1pc\relax
+            \textcolor{white}{%
+              \vrule \@height21\p@ \@depth\z@  \@width\z@
+              \@special@title
+              \vrule \@height\z@   \@depth9\p@ \@width\z@}%
+          }%
+        }%
+        \par
+        \pagestyle{nrcplain}%
+        \thispagestyle{nrcplain}%
+      \egroup
+%    \end{macrocode}
+%
+% This article \emph{only} has a special title, so we're now
+% done\dots\par\noindent\dots\ but how do we signal that?  Pro tem,
+% we'll do a touch of the \cs{if@tempswa} diddling
+%    \begin{macrocode}
+      \@tempswafalse
+    \else
+      \@tempswatrue
+    \fi
+  \else
+    \@tempswatrue
+  \fi
+%    \end{macrocode}
+%
+% Now, we know whether we're to do an `ordinary' paper title (possibly
+% in addition to a reversed-box special title); this knowledge is
+% encoded in \cs{if@tempswa}, which we now use.
+%
+% Thereafter, we're generating an `ordinary title'.  Evaluate width
+% for box to hold the title (allowing for indent but not left rule)
+%    \begin{macrocode}
+  \if@tempswa
+    \@tempdima\textwidth
+    \advance\@tempdima -\NRC@titleoffset
+    \setbox\@tempboxa\vbox{%
+      \hsize\@tempdima
+%    \end{macrocode}
+%
+% Is there an `ordinary' special title?  If so, we put it in now, so
+% as to get it into the bit with a vertical bar along its side
+%    \begin{macrocode}
+      \if@specialtitle
+        \bgroup
+          \fboxsep\z@
+          \noindent
+          \colorbox{black}{%
+            \hskip 1pc\relax
+%<*nrc2>
+            \parbox[t]{37pc}{%} match extra parbox opening
+              \fontsize{18}{28}%
+%</nrc2>
+%<*nrc1>
+            \parbox[t]{28pc}{%
+              \fontsize{16}{24}%
+%</nrc1>
+              \usefont\f@encoding\sfdefault mn%
+              \NRC@sectragged
+              \advance\rightskip 1pc\relax
+              \textcolor{white}{%
+                \vrule \@height21\p@ \@depth\z@  \@width\z@
+                \@special@title
+                \vrule \@height\z@   \@depth9\p@ \@width\z@}%
+            }%
+          }%
+          \par
+          \vspace*{2pc}%
+        \egroup
+      \fi
+%    \end{macrocode}
+%
+% Now the common-or-garden `ordinary' title
+%    \begin{macrocode}
+      \fontsize{18}{24}%
+      \usefont\f@encoding\sfdefault cn%
+      \NRC@sectragged
+      \noindent\@title\par
+      \@tempdima 2.5pc
+      \advance\@tempdima -\prevdepth
+      \advance\@tempdima -11pt% *** pragmatic value ***
+      \vspace\@tempdima
+      \fontsize{11}\@xiipt
+      \selectfont\NRC@sectragged
+      \noindent\NRC@defaultauthorlist\par
+      \@tempdima 17\p@% 1.5pc - 1pt
+      \advance\@tempdima -\prevdepth
+      \vspace\@tempdima
+      }%
+    \@tempdima \NRC@titleoffset
+    \advance\@tempdima -4\p@
+    \bgroup
+      \noindent\hb@xt@\hsize{%
+        \vrule \@width4\p@
+        \kern \@tempdima
+        \vbox{\box\@tempboxa}%
+        }%
+      \parskip\z@skip
+      \par
+      \noindent\hrule \@height\p@
+    \egroup
+    \global\NRC@IDboxtrue
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@makeIDbox}
+% Syntax: \cs{NRC@makeIDbox}\marg{width}
+%
+% Makes an `ident box' for a paper, in the given width (which will
+% typically be \cs{textwidth} or \cs{columnwidth})
+%
+% If we are doing the original sort of ID box (either for the 1-column
+% case, or the 2-column classes in the  one-column-only case), we set
+% the box into a float at the bottom of the page.  It being an
+% unknown sort of float, we could allocate it a float classification,
+% but that seems a little \emph{de trop}, so we call it a figure.
+%    \begin{macrocode}
+\newcommand{\NRC@makeIDbox}[1]{%
+%<!nrc2>\@float{figure}[b!]
+%<*nrc2>
+%    \end{macrocode}
+%
+% For the 2-column classes, we
+% simply stick the ID box into a (\TeX) box, for later use by the
+% title-page page style (if it's a 2-column-wide box), or for putting
+% into a float \emph{after} two-column typesetting has been
+% established.
+%    \begin{macrocode}
+  \setbox\NRC@theIDbox\vbox\bgroup
+    \hsize #1
+%</nrc2>
+    \noindent\hrule \@height\p@
+    \@tempdima #1
+    \advance\@tempdima -1pc
+    \setbox\@tempboxa\hbox{%
+      \smallt\NRC@received
+    }%
+    \setbox\@tempboxa\vbox{%
+      \hsize \@tempdima
+      \@tempdima 1pc
+      \advance\@tempdima -\ht\@tempboxa
+      \vspace{\@tempdima}%
+%    \end{macrocode}
+%
+% If the IDbox is going to be set in two columns internally, start up
+% multicols now; we zero the multicolumn separator to avoid excessive
+% vertical spacing at the top of the IDbox (note that since we're
+% inside a \cs{vbox} at this stage we can rely on grouping to restore
+% the value for us)
+%    \begin{macrocode}
+%<*nrc2>
+      \if@onecolid\else
+        \if@multcolid
+          \linewidth \hsize
+          \multicolsep\z@skip
+          \columnsep 1.5pc
+          \begin{multicols}{2}
+        \fi
+      \fi
+%</nrc2>
+%    \end{macrocode}
+%
+% Insert the received/accepted/`other ID dates'/`published on the web
+% site' line(s).  The [rev]received/[rev]accepted commands sort out their
+% own internal spacing, and a global marker (\cs{NRC@received@sep}) says
+% whether a space is needed before the next thing in the ID box.
+%    \begin{macrocode}
+      \noindent
+      {%
+        \smallt
+        \NRC@received
+        \ifNRC@webpub
+          \NRC@received@sep
+          \NRC@webpub
+        \fi
+        \par
+      }%
+      \vspace{7\p@}% *** pragmatic value ***
+%    \end{macrocode}
+%
+% Change font size for the next few things
+%    \begin{macrocode}
+      \smallt
+%    \end{macrocode}
+%
+% Insert the associate editor's name, if there is one
+%    \begin{macrocode}
+      \ifNRC@assoced
+        \noindent\NRC@assoced\par
+        \vspace{7\p@}% *** pragmatic value ***
+      \fi
+%    \end{macrocode}
+%
+% Insert the corresponding editor's name, if there is one
+%    \begin{macrocode}
+      \ifNRC@corred
+        \noindent\NRC@corred\par
+        \vspace{7\p@}% *** pragmatic value ***
+      \fi
+%    \end{macrocode}
+%
+% Insert the dedication, if there is one
+%    \begin{macrocode}
+      \ifNRC@dedication
+        \bgroup
+          \NRC@sectragged
+          \noindent
+          \textit{\NRC@dedication}\par
+          \vspace{7\p@}% *** pragmatic value ***
+        \egroup
+      \fi
+%    \end{macrocode}
+%
+% Insert the list of abbreviations, if there is one
+%    \begin{macrocode}
+      \if@abbreviations
+        \bgroup
+          \NRC@sectragged
+          \noindent
+          \textbf{\NRC@text@abbreviations\ifNRC@french~\fi\string:}%
+                        \ \@abbreviations\par
+          \vspace{7\p@}% *** pragmatic value ***
+        \egroup
+      \fi
+%    \end{macrocode}
+%
+% Now the list of authors and their
+% addresses
+%    \begin{macrocode}
+      {%
+        \@NRC@AddressCommands
+        \NRC@default@authaddlist
+%    \end{macrocode}
+%
+% Add the comment deadline note
+%    \begin{macrocode}
+        \ifNRC@commdate
+          \vspace{7\p@}% pragmatic
+          \noindent\NRC@commdate\par
+        \fi
+%    \end{macrocode}
+%
+% and finally the footnote bodies, if there are any
+%    \begin{macrocode}
+        \ifx\NRC@addrfnbody\@empty
+        \else
+          \vspace{7\p@}% *** pragmatic value ***
+          \NRC@addrfnbody
+        \fi
+      }%
+%<*nrc2>
+      \if@onecolid\else
+        \if@multcolid
+          \end{multicols}
+        \fi
+      \fi
+%</nrc2>
+    }%
+%    \end{macrocode}
+% (That brace closes the assignation to \cs{@tempboxa}.)
+%
+% And now finish off the float that makes up the ID box
+%    \begin{macrocode}
+    \@tempdima 1pc
+    \advance\@tempdima -4\p@
+    \noindent\hb@xt@#1{%
+      \vrule \@width4\p@
+      \kern \@tempdima
+      \vbox{\box\@tempboxa}%
+      }
+%<!nrc2>\end@float
+%<*nrc2>
+    \egroup
+  \if@onecolid
+  \else
+%   \typeout{\string\NRC@theIDbox: ht=\the\ht\NRC@theIDbox,
+%      dp=\the\dp\NRC@theIDbox}%
+    \@tempdima \ht\NRC@theIDbox
+    \advance\@tempdima \dp\NRC@theIDbox
+    \advance\@tempdima \textfloatsep
+    \global\advance\@colht -\@tempdima
+    \global\@colroom \@colht
+    \global\vsize    \@colht
+    \global\pagegoal \@colht
+    \global\advance\footskip \@tempdima
+  \fi
+%</nrc2>
+  \thispagestyle{nrctitlepage}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@restorefootskip}
+% Used to restore \cs{footskip} after mucking about with it in
+% case we're going to encounter a huge great monster
+% abstract/r\'esum\'e; can be used anywhere at any time, since it's
+% restoring a default value\dots
+%    \begin{macrocode}
+\xdef\NRC@restorefootskip{%
+  \global\noexpand\footskip\the\footskip}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Abstract and R\'esum\'e}
+%
+% \begin{environment}{abstract}
+% \begin{environment}{resume}
+% \begin{macro}{\NRC@absressep}
+% \begin{macro}{\NRC@extract@name}
+% The abstract and r\'esum\'e are specified as simple list
+% environments, and preserved in a token register.  Nothing special is
+% done about their body, and no effort is made to enforce the order
+% (i.e., English or French first) that they appear.  Apart from the
+% name (and the fact that the abstract environment already exists, so
+% that it must needs be redefined) they are implemented by identical
+% code.  If Babel is loaded with the appropriate language, each
+% environment safely (i.e., without writing the \verb|.aux| file)
+% selects the appropriate language within itself.
+%
+% In the case of the nrc1 class, the token register is immediately
+% typeset.  In the case of the nrc2 class, the token registers are
+% stored for use when a \cs{maketitle} command is issued.
+%
+% \cs{NRC@absressep} is the value to use for \cs{topsep} for the
+% \emph{top} only of the \texttt{trivlist} implementation of the
+% environments (\cs{z@} is used at the bottom of the environments:
+% things get out of hand otherwise\dots).  It gets multiplied by
+% \cs{p@}.
+%
+% The other skips are played fast and loose with, too, inside the
+% environments' groups.  \cs{partopsep} is set zero, since we want
+% absolute control of separation, and the stretchability of
+% \cs{parskip} is also stamped upon while we execute the \cs{trivlist}
+% command that establishes our `list'.
+%    \begin{macrocode}
+\newcommand\NRC@absressep{18}
+\renewenvironment{abstract}{%
+  \NRC@gather@env{\expandafter\topsep\NRC@absressep\p@
+    \partopsep\z@
+    \parskip\z@
+    \trivlist
+    \parskip0\p@ \@plus\p@
+    \leftmargin \NRC@titleoffset
+    \advance\linewidth -\leftmargin
+    \advance\linewidth -\rightmargin
+    \advance\@totalleftmargin \leftmargin
+    \parshape \@ne \@totalleftmargin \linewidth
+    \item[]%
+    \let\NRC@extract@name\@firstoftwo
+    \ifx\extrasenglish\@undefined
+    \else
+      \select@language{english}%
+    \fi
+    \smalll
+    \textbf{\abstractname}:%
+    \NRC@sectragged
+    \ \ignorespaces}}%
+%<*nrc1>
+  {%
+    \the\NRC@gather@toks
+    \@topsepadd\z@
+    \endtrivlist
+    \gdef\NRC@absressep{8}}
+%</nrc1>
+%    \end{macrocode}
+%
+% In the two-column classes, we don't typeset the abstract (or
+% r\'esum\'e) as we come to it, merely relying on having saved it in
+% \cs{NRC@abstract@i(i)} and dumping it out in the course of
+% \cs{maketitle}'s ``full-width'' phase.
+%    \begin{macrocode}
+%<nrc2>  {}
+%    \end{macrocode}
+%
+% Now the analagous things for the French r\'esum\'e
+%    \begin{macrocode}
+\newenvironment{resume}{%
+  \NRC@gather@env{\expandafter\topsep\NRC@absressep\p@
+    \partopsep\z@
+    \parskip\z@
+    \trivlist
+    \parskip0\p@ \@plus\p@
+    \leftmargin \NRC@titleoffset
+    \advance\linewidth -\leftmargin
+    \advance\linewidth -\rightmargin
+    \advance\@totalleftmargin \leftmargin
+    \parshape \@ne \@totalleftmargin \linewidth
+    \item[]%
+    \let\NRC@extract@name\@secondoftwo
+    \ifx\extrasfrench\@undefined
+    \else
+      \select@language{french}%
+    \fi
+    \smalll
+    \textbf{\nomresume}\,:%
+    \NRC@sectragged
+    \ \ignorespaces}}%
+%<*nrc1>
+  {%
+    \the\NRC@gather@toks
+    \@topsepadd\z@
+    \endtrivlist
+    \gdef\NRC@absressep{8}}
+%</nrc1>
+%<nrc2>  {}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macro}{\nomresume}
+% \begin{macro}{\traduit}
+% \begin{macro}{\Traduit}
+% \begin{macro}{\translation}
+% \begin{macro}{\keywords}
+% \begin{macro}{\motscles}
+% \begin{macro}{\PACS}
+% \begin{macro}{\NRC@PACS@en}
+% \begin{macro}{\NRC@PACS@ens}
+% \begin{macro}{\NRC@PACS@fr}
+% \begin{macro}{\NRC@PACS@frs}
+% Various small supporting macros for the above.
+%
+% \cs{traduit} is used at the end of a r\'esum\'e when the author
+% hasn't provided a French version: the editors have translated the
+% English abstract, and \cs{traduit} records this fact.  Similarly,
+% \cs{translation} is used at the end of an abstract that has been
+% translated for a French-writing author.
+%
+% \cs{Traduit} is as \cs{traduit}, but with a capital letter for
+% r\'edaction\dots
+%
+% \cs{keywords} and \cs{motscles} may also be used within an abstract
+% or resume (respectively) environment.  If used, they should appear
+% immediately after the body of the abstract and above any
+% \cs{traduit} or \cs{translation} command.
+%
+% \cs{PACS} generates PACS code entries for the end of abstracts or
+% resum\'es; it ``knows'' which language to use, from the setting of
+% \cs{NRC@extract@name}.
+%    \begin{macrocode}
+\newcommand\nomresume{R\'esum\'e}
+\newcommand\traduit{\par\vspace{4\p@}\noindent
+  [Traduit par la r\'edaction]%
+}
+\newcommand\Traduit{\par\vspace{4\p@}\noindent
+  [Traduit par la R\'edaction]%
+}
+\newcommand\translation{\par\vspace{4\p@}\noindent
+  [Journal translation]%
+}
+\newcommand\keywords[1]{\par\vspace{4\p@}\noindent
+  \emph{Key words:}\ #1.%
+}
+\newcommand\motscles[1]{\par\vspace{4\p@}\noindent
+  \emph{Mots cl\'es\,:}\ #1.%
+}
+\newcommand\PACS{%
+  \par\vspace{4\p@}%
+  \noindent PACS\ %
+  \@ifstar{%
+    \NRC@extract@name\NRC@PACS@ens\NRC@PACS@frs
+  }{%
+    \NRC@extract@name\NRC@PACS@en\NRC@PACS@fr
+  }%
+}
+\newcommand\NRC@PACS@ens[1]{No.:\ #1}
+\newcommand\NRC@PACS@en[1]{Nos.:\ #1}
+\newcommand\NRC@PACS@frs[1]{N\textsuperscript{o}\,:\ #1}
+\newcommand\NRC@PACS@fr[1]{N\textsuperscript{os}\,:\ #1}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@abstract@toks}
+% \begin{macro}{\NRC@resume@toks}
+% \begin{macro}{\NRC@gather@toks}
+% In the two-column classes, \cs{NRC@abstract@toks} and
+% \cs{NRC@resume@toks} are used to gather the abstract or r\'esum\'e;
+% in the physics class both are gathered in \cs{NRC@gather@toks}
+%    \begin{macrocode}
+%<nrc2>\newtoks\NRC@abstract@toks
+%<nrc2>\newtoks\NRC@resume@toks
+%<nrc1>\newtoks\NRC@gather@toks
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@gather@env}
+% Syntax: \cs{NRC@gather@env}\marg{preamble}
+%
+% Gather the contents of a text environment into the corresponding
+% token register.  The routine assumes that it's gathering an
+% abstract's content, and inserts the \meta{preamble} in front of the
+% gathered text (this will be language selection, `Abstract' or
+% `R\'esum\'e', and the start of the doings of the abstract
+% environment itself).  (There's no need of a postamble, since the
+% same termination is used in both cases.  This is a bit of a relief,
+% since it would be dead tricky to program.)
+%
+% The routine has the side effect of setting up \cs{NRC@abstract@i}
+% (to the token register containing the first abstract gathered) and
+% \cs{NRC@abstract@ii} (to the second one)
+%
+% This code uses what (now) seems a Usual trick (it originally
+% derives, in my experience, from David Carlisle's tabularx package).
+%    \begin{macrocode}
+\newcommand\NRC@gather@env[1]{%
+  \let\NRC@gathering\@currenvir
+%<*nrc2>
+  \expandafter\let\expandafter\NRC@gather@toks
+    \csname NRC@\NRC@gathering @toks\endcsname
+%</nrc2>
+  \global\NRC@gather@toks{#1}%
+  {\ifnum0=`}\fi
+  \NRC@gather@body
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@gather@body}
+% Syntax: \cs{NRC@gather@body}\marg{body-portion}\cs{end}
+%
+% Gathers the body of an environment up to the next instance of
+% \cs{end}
+%    \begin{macrocode}
+\long\def\NRC@gather@body#1\end{%
+  \global\NRC@gather@toks\expandafter{\the\NRC@gather@toks#1}%
+  \NRC@gather@findend
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@gather@findend}
+% Syntax: \cs{NRC@gather@findend}\marg{end-arg}
+%
+% Checks the `argument' that the user thought she was giving to the
+% \cs{end} `command' that terminated the argument of a
+% \cs{NRC@gather@body}
+%    \begin{macrocode}
+\newcommand\NRC@gather@findend[1]{%
+  \def\@tempa{#1}%
+  \ifx\@tempa\NRC@gathering
+    \expandafter\NRC@gather@end
+  \else
+    \global\NRC@gather@toks\expandafter{\the\NRC@gather@toks\end{#1}}%
+    \expandafter\NRC@gather@body
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@gather@end}
+% \begin{macro}{\NRC@abstract@i}
+% \begin{macro}{\NRC@abstract@ii}
+% Syntax: \cs{NRC@gather@end}
+%
+% Terminates a gathering operation, by closing the group it's operated
+% in, setting up the appropriate \cs{NRC@abstract@i(i)} if necessary
+% and finally issuing an `end \meta{gather-environment}' command.
+%    \begin{macrocode}
+\newcommand\NRC@gather@end{%
+  \ifnum0=`{\fi}%
+%    \end{macrocode}
+%
+% we only need preserve the token registers if we're in a two-column
+% class
+%    \begin{macrocode}
+%<*nrc2>
+  \ifx\NRC@abstract@i\@undefined
+    \global\let\NRC@abstract@i \NRC@gather@toks
+  \else
+    \global\let\NRC@abstract@ii\NRC@gather@toks
+  \fi
+%</nrc2>
+  \expandafter\end\expandafter{\NRC@gathering}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \section{Font size definitions}
+%
+% \begin{macro}{\easebaselines}
+% \begin{macro}{\ifNRC@easedbaselines}
+% \begin{macro}{\ifNRC@relaxedspacing}
+% Syntax: \cs{easebaselines}
+%
+% An editorial command for two-column papers: if a decision is taken
+% to ease the baselines of the paper, this command is issued: the
+% effect is very slightly to ease the values for \cs{baselineskip}
+% used for \cs{normalsize}, \cs{small} and \cs{footnotesize} font
+% selections.  A preamble command, only.
+%
+% \cs{ifNRC@relaxedspacing} allows the extended relaxation of skips
+% (above sectioning commands, around floats, and around equations)
+% that seems to be necessary in some cases.  The switch is a separate
+% on from \cs{ifNRC@easedbaselines}, at present, though implemented
+% (as it were) as a sub-switch; however it always has the same value
+% as the main switch.
+%    \begin{macrocode}
+\newif\ifNRC@easedbaselines  \NRC@easedbaselinesfalse
+\newif\ifNRC@relaxedspacing  \NRC@relaxedspacingfalse
+\newcommand*{\easebaselines}{%
+  \ifNRC@author@use
+    \NRC@warning{\string\easebaselines\space is an editor command}
+  \fi
+  \NRC@easedbaselinestrue
+% \NRC@relaxedspacingtrue
+  \AtBeginDocument{\renewcommand{\arraystretch}{1.05}}%
+}
+\@onlypreamble\easebaselines
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \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 \texttt{10pt}/\texttt{12pt} size.
+% 
+% The |\normalsize| macro also sets new values for\\
+% |\abovedisplayskip|, |\abovedisplayshortskip| and
+% |\belowdisplayshortskip|.
+%    \begin{macrocode}
+\renewcommand{\normalsize}{%
+%<nrc2> \ifNRC@easedbaselines
+    \@setfontsize\normalsize\@xpt\@xiipt
+%<*nrc2> 
+  \else
+    \@setfontsize\normalsize\@xpt{11}%
+  \fi
+%</nrc2>
+  \ifNRC@relaxedspacing
+    \abovedisplayskip 10\p@ \@plus0.0003fil \@minus5\p@
+  \else
+    \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+  \fi
+  \abovedisplayshortskip \z@ \@plus3\p@
+  \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+%    \end{macrocode}
+%
+% The |\belowdisplayskip| is always equal to the
+% |\abovedisplayskip|. The parameters of the first level list at
+% \cs{normalsize} are always given by |\@listI|.
+%    \begin{macrocode}
+   \belowdisplayskip \abovedisplayskip
+   \let\@listi\@listI}
+%    \end{macrocode}
+%
+% We initially choose the normalsize font (article class does this,
+% but it's also done in \cs{begin}|{document}|, so it's not entirely
+% clear what the point is\dots).
+%    \begin{macrocode}
+\normalsize
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\small}
+% This is similar to |\normalsize|.
+%    \begin{macrocode}
+\renewcommand{\small}{%
+%<nrc2> \ifNRC@easedbaselines
+    \@setfontsize\small\@ixpt{11}%
+%<*nrc2>
+  \else
+    \@setfontsize\small\@ixpt\@xpt
+  \fi
+%</nrc2>
+  \ifNRC@relaxedspacing
+    \abovedisplayskip 8.5\p@ \@plus0.0003fil \@minus4\p@
+  \else
+    \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+  \fi
+  \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}%
+  \belowdisplayskip \abovedisplayskip
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\smalll}
+% \begin{macro}{\smallt}
+% These are variants of \cs{small} for use where the baseline spacing
+% is fixed regardless of the state of \cs{easedbaselines}; \cs{smalll}
+% (loose small) has 11pt baseline skip; \cs{smallt} (tight small) has
+% 10pt baseline skip.
+%    \begin{macrocode}
+\newcommand{\smalll}{%
+  \@setfontsize\small\@ixpt{11}%
+  \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}%
+  \belowdisplayskip \abovedisplayskip
+}
+\newcommand{\smallt}{%
+  \@setfontsize\small\@ixpt\@xpt
+  \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}%
+  \belowdisplayskip \abovedisplayskip
+}
+ %    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footnotesize}
+% This is similar to |\normalsize|.
+%    \begin{macrocode}
+\renewcommand{\footnotesize}{%
+%<nrc2> \ifNRC@easedbaselines
+    \@setfontsize\footnotesize\@viiipt{9.5}%
+%<*nrc2>
+  \else
+    \@setfontsize\footnotesize\@viiipt\@ixpt
+  \fi
+%</nrc2>
+  \ifNRC@relaxedspacing
+    \abovedisplayskip 6\p@ \@plus0.0003fil \@minus4\p@
+  \else
+    \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+  \fi
+  \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}%
+  \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}
+\renewcommand{\scriptsize}{\@setfontsize\scriptsize\@viipt\@viiipt}
+\renewcommand{\tiny}{\@setfontsize\tiny\@vpt\@vipt}
+\renewcommand{\large}{\@setfontsize\large\@xiipt{14}}
+\renewcommand{\Large}{\@setfontsize\Large\@xivpt{18}}
+\renewcommand{\LARGE}{\@setfontsize\LARGE\@xviipt{22}}
+\renewcommand{\huge}{\@setfontsize\huge\@xxpt{25}}
+\renewcommand{\Huge}{\@setfontsize\Huge\@xxvpt{30}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Divisions of the paper}
+%
+% \begin{macro}{\NRC@sectragged}
+% All the section titles that aren't run-in (as well as a whole bunch
+% of other things) are set ragged right, which we define as:
+%    \begin{macrocode}
+\newcommand{\NRC@sectragged}{\hyphenpenalty\@M
+  \rightskip\z@ \@plus 5em
+  \parfillskip\z@ \@plus 1fil
+  \spaceskip=0.3333em\relax
+  \xspaceskip=0.5em\relax
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{\LaTeX{} `sections'}
+%
+% \begin{macro}{\section}
+% \begin{macro}{\Asection}
+% \begin{macro}{\subsection}
+% \begin{macro}{\Bsection}
+% \begin{macro}{\subsubsection}
+% \begin{macro}{\Csection}
+% \begin{macro}{\subsubsubsection}
+% \begin{macro}{\Dsection}
+% \begin{macro}{\paragraph}
+% \begin{macro}{\Esection}
+%
+% The following definitions all incorporate the baseline-baseline
+% skips of the specification in a slightly cavalier way: the skip is
+% calculated out in points, and the font size of the following text is
+% subtracted.  This is inaccurate because (1) the depth of the text
+% above is ignored (how would one find it?), and (2) the font size is
+% only rather loosely related to the typical height of a line of
+% text.  However, the results prove acceptable, so let's not worry!
+%    \begin{macrocode}
+\renewcommand\section{%
+               \@startsection{section}%
+                             \@ne
+                             \z@
+%<*nrc1>
+                             {12\p@ \@plus4.5\p@ \@minus1.5\p@}%
+                             {6\p@}%
+%</nrc1>
+%<*nrc2>
+                             {18\p@ \@plus6\p@}%
+                             {6\p@ \@plus3\p@}%
+%</nrc2>
+                             {\fontsize{11}{12}%
+%<nrc2>                       \let\@hangfrom\@firstofone\noindent
+                              \usefont\f@encoding\sfdefault cn%
+                              \NRC@sectragged}%
+                            }
+\let\Asection\section
+\renewcommand\subsection{%
+               \@startsection{subsection}%
+                             \tw@
+                             \z@
+%<*nrc2>
+                             {12\p@ \@plus6\p@}%
+                             {.1\p@ \@plus2\p@}%
+%</nrc2>
+%<*nrc1>
+                             {14\p@ \@plus4.5\p@ \@minus1.5\p@}%
+                             {2\p@ \@plus \p@}%
+%</nrc1>
+                             {\reset@font\bfseries
+%<nrc2>                       \let\@hangfrom\@firstofone\noindent
+                              \NRC@sectragged}%
+                            }
+\let\Bsection\subsection
+\renewcommand\subsubsection{%
+               \@startsection{subsubsection}%
+                             \thr@@
+                             \z@
+%<*nrc2>
+                             {9\p@ \@plus3\p@}%
+                             {.1\p@ \@plus2\p@}%
+%</nrc2>
+%<*nrc1>
+                             {14\p@ \@plus4.5\p@ \@minus1.5\p@}%
+                             {2\p@ \@plus \p@}%
+%</nrc1>
+                             {\reset@font\bfseries\itshape
+%<nrc2>                       \let\@hangfrom\@firstofone\noindent
+                              \NRC@sectragged}%
+                            }
+\let\Csection\subsubsection
+\newcommand\subsubsubsection{%
+               \@startsection{paragraph}%
+                             4%
+                             \z@
+%<*nrc2>
+                             {7\p@ \@plus2\p@}%
+                             {.1\p@ \@plus2\p@}%
+%</nrc2>
+%<*nrc1>
+                             {14\p@ \@plus4.5\p@ \@minus1.5\p@}%
+                             {2\p@ \@plus \p@}%
+%</nrc1>
+                             {\reset@font\itshape
+%<nrc2>                       \let\@hangfrom\@firstofone\noindent
+                              \NRC@sectragged}%
+                            }
+\let\Dsection\subsubsubsection
+% \renewcommand\paragraph{%
+%                \@startsection{subparagraph}%
+%                              5%
+%                              \z@
+%                              {3.25ex \@plus1ex \@minus.2ex}%
+%                              {-1em}%
+%                              {\normalfont\normalsize\bfseries}%
+%                           }
+\renewcommand\paragraph{%
+               \@startsection{subparagraph}%
+                             4%
+                             \z@
+                             {8\p@ \@plus2.5\p@ \@minus\p@}%
+                             {-0.5em}%
+                             {\reset@font\itshape}%
+                            }
+\let\Esection\paragraph
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@seccntformat}
+% \begin{macro}{\NRC@seccnt@paragraph}
+%
+% Section counters have a trailing full stop.
+%    \begin{macrocode}
+\renewcommand\@seccntformat[1]{%
+  \@ifundefined{NRC@seccnt@#1}%
+    {\@nameuse{the#1}.\hskip0.5em\relax}%
+    {\@nameuse{NRC@seccnt@#1}}%
+}
+\newcommand\NRC@seccnt@paragraph{\theparagraph.\ }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{secnumdepth}
+%
+% For the above to have the effect we require, we must allow
+% \cs{paragraph}'s section number to appear\dots
+%    \begin{macrocode}
+\setcounter{secnumdepth}{4}
+%    \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Appendices}
+%
+% We introduce a minor extension of the \LaTeX{} \cs{appendix}
+% command.  (Used as in \LaTeX{}, the command behaves in the standard
+% way.)
+%
+% \begin{macro}{\appendix}
+% \begin{macro}{\NRC@appendix}
+% \begin{macro}{\NRC@@appendix}
+% \begin{macro}{\NRC@seccnt@section}
+% Syntax: \cs{appendix}\meta{optional-asterisk}
+%
+% Used as in `bare' \LaTeX{}, the command merely does the \LaTeX{}
+% thing, \emph{viz}., reset section numbering and change the form of
+% the section counter.  In the form \cs{appendix*}, the command
+% additionally prepends section headings with `Appendix'.
+%    \begin{macrocode}
+\let\NRC@@appendix\appendix
+\renewcommand{\appendix}{\@ifstar \NRC@appendix\NRC@@appendix}
+\newcommand{\NRC@appendix}{\NRC@@appendix
+  \gdef\NRC@seccnt@section{\appendixname\ %
+    \thesection\ifNRC@french~\string:\else:\fi\hskip0.5em\relax
+  }%
+}
+%    \end{macrocode}
+%    \end{macro}
+%    \end{macro}
+%    \end{macro}
+%    \end{macro}
+%
+%
+% \section{Miscellaneous typesetting}
+%
+% \subsection{Footnotes}
+%
+% The footnotes used within the ident box on the title page are dealt
+% with separately; here we specify footnotes for the body text.
+%
+% \begin{macro}{\footnoterule}
+% The skip allows for 3pt (nrc1) or 4pt (nrc2) between the rule and
+% the text of the footnote (the \cs{footnoterule} command adds nothing
+% to the vertical spacing, as is proper).
+%    \begin{macrocode}
+%<*nrc1>
+\skip\footins20\p@
+\renewcommand\footnoterule{\kern-4\p@
+  \hrule \@height\p@
+  \kern3\p@
+}
+%</nrc1>
+%<*nrc2>
+\skip\footins14\p@\@plus10\p@
+\renewcommand\footnoterule{\kern-5\p@
+  \hrule \@height\p@
+  \kern4\p@
+}
+%</nrc2>
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+% Since we use a non-standard size for footnotes, we reproduce the
+% whole of the \cs{@footnotetext} command here, with the size
+% changed.  The size used is ``tight'' small (9/10pt).
+%    \begin{macrocode}
+\long\def\@footnotetext#1{%
+  \insert\footins{%
+    \reset@font\smallt
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected@edef\@currentlabel{%
+       \csname p@footnote\endcsname\@thefnmark
+    }%
+    \color@begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+      }%
+    \color@endgroup
+  }%
+}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+% And the body of footnotes looks as follows:
+%    \begin{macrocode}
+\renewcommand\@makefntext[1]{%
+  \@hangfrom{%
+    \ifNRC@french
+      \@thefnmark.\hskip0.3333em%
+    \else
+      \hb@xt@4\p@{\@makefnmark\hss}%
+    \fi
+  }%
+  #1%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Mathematics}
+%
+% \begin{macro}{\mathindent}
+% We set \cs{mathindent} according to which side the equations are
+% going to appear (it can be either side in either class, nowadays).
+%    \begin{macrocode}
+\iflefteqnos
+  \mathindent32pt
+\else
+  \mathindent\z@
+\fi
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifNRC@amsmath}
+% In case that \verb'amsmath' has been loaded, things are going to be
+% somewhat different.  So, first of all, we need to detect whether
+% this is the case\dots
+%    \begin{macrocode}
+\newif\ifNRC@amsmath
+\NRC@amsmathfalse
+\AtBeginDocument{%
+  \@ifundefined{tagform@}\relax{%
+    \NRC@amsmathtrue
+%    \end{macrocode}
+%
+% If we are indeed under the sway of \verb'amsmath', we need to patch a
+% different skip for margin adjustment.  If equation numbers are to be
+% set on the left, this will be set non-zero because of the allowance
+% needed for the equation tag.
+%    \begin{macrocode}
+    \iflefteqnos
+      \@mathmargin32\p@\relax
+    \else
+      \@mathmargin\z@skip
+    \fi
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% In case \verb'amsmath' is going to be loaded (we don't know at this
+% stage, of course), we ensure it gets told about equations being set
+% flush left; we also tell it about left-positioned equation numbers
+% if we're doing those:
+%    \begin{macrocode}
+\iflefteqnos
+  \PassOptionsToPackage{fleqn,leqno}{amsmath}
+\else
+  \PassOptionsToPackage{fleqn}{amsmath}
+\fi
+%    \end{macrocode}
+%
+%
+% \begin{macro}{\@eqnnum}
+% Set an equation number, potentially at the left (this will be zapped
+% by amsmath if it's loaded)
+%    \begin{macrocode}
+\renewcommand{\@eqnnum}{%
+  \iflefteqnos
+    \hb@xt@1sp{}%
+    \rlap{\normalfont\normalcolor
+      \hskip -\displaywidth \eqnoformat\theequation}%
+  \else
+    {%
+      \normalfont\normalcolor \eqnoformat\theequation
+    }%
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqnoformat}
+% Syntax: \cs{eqnoformat}\marg{equation number}
+%
+% Defines the layout of an equation tag; by default this is
+% \verb'[number]' (except in \verb'nrc1', in its default state of
+% equation numbers being on the right, when it's \verb'(number)'), but
+% the user may redefine\dots
+%    \begin{macrocode}
+%<nrc1> \iflefteqnos
+  \newcommand{\eqnoformat}[1]{[\ignorespaces#1\unskip\@@italiccorr]}
+%<*nrc1>
+\else
+  \newcommand{\eqnoformat}[1]{(\ignorespaces#1\unskip\@@italiccorr)}
+\fi
+%</nrc1>
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\tagform@}
+% If \verb'amsmath' has been loaded, we need to redo the above when the
+% document is actually `starting'.  We also note that \cs{@eqnnum}
+% will have been hacked, but that the thing that makes the difference
+% is \cs{tagform@}, so we also redo that at this stage.
+%    \begin{macrocode}
+\AtBeginDocument{\ifNRC@amsmath
+    \def\tagform@#1{%
+      \maketag@@@{\eqnoformat{#1}}}
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@displaymath}
+% \begin{macro}{\NRC@@displaymath}
+% \begin{macro}{\NRC@enddisplaymath}
+% \begin{macro}{\NRC@@enddisplaymath}
+% In the first version of the \textsf{nrc2} class, we had the
+% \texttt{displaymath} environment ($\equiv$ \cs{[}\cs{]}) as a
+% non-indented un-numbered version.  The NRC's editors have come to
+% rely on this, even though it provoked problems following a change in
+% specification of the maths margins; we therefore restore the
+% original functionality here, in a safe way.
+%    \begin{macrocode}
+%<nrc1>\iflefteqnos
+\def\NRC@displaymath{\begingroup
+  \ifNRC@amsmath
+    \@mathmargin\z@skip
+  \else
+    \mathindent\z@skip
+  \fi
+  \NRC@@displaymath
+}
+\def\NRC@enddisplaymath{\NRC@@enddisplaymath\endgroup}
+\AtBeginDocument{\let\NRC@@displaymath\[%
+  \let\[\NRC@displaymath
+  \let\NRC@@enddisplaymath\]%
+  \let\]\NRC@enddisplaymath}%
+%<nrc1>\fi
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Maths sizes affect sub- and superscripts done in text mode, too.
+% Specifications exist for all text sizes we actually use: we declare,
+% below, only for those sizes that differ from what is in the \LaTeX{}
+% kernel.
+%    \begin{macrocode}
+\DeclareMathSizes  {18}   {18}   \@xiipt \@xpt
+\DeclareMathSizes  {16}   {16}   \@xiipt \@xpt
+\DeclareMathSizes  {15}   {15}   \@xpt   {8}
+\DeclareMathSizes  \@xipt \@xipt \@ixpt  {7}
+\DeclareMathSizes  \@ixpt \@ixpt {6}     {5}
+%    \end{macrocode}
+%
+% \begin{macro}{\numberby}
+% Syntax: \cs{numberby}\marg{counter}\marg{division-name}
+%
+% Arrange that \meta{counter} is reset every time \meta{division-name}
+% is stepped, and that \cs{the\meta{counter}} is represented as
+% `\meta{division-name}.\meta{counter}'
+%    \begin{macrocode}
+\newcommand\numberby[2]{%
+  \@ifundefined{c@#1}{\@nocounterr{#1}}%
+  \@ifundefined{c@#2}{\@nocounterr{#2}}%
+  \@addtoreset{#1}{#2}%
+  \expandafter\gdef\csname the#1\expandafter\endcsname
+    \expandafter{\csname the#2\endcsname.\arabic{#1}}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \emph{Note}: \cs{numberby} is in this section because of its only
+% present expected use for number equations by section.
+%
+% \subsection{Tables}
+%
+% We need to provide a simple handle on overweight rules.  This we do
+% by a modification of the \textsf{variline} package I wrote for the
+% TUG'95 proceedings.
+%
+% \begin{macro}{\hline}
+% \begin{macro}{\@shline}
+% \begin{macro}{\arrayrulewidth}
+% Syntax: \cs{hline}\meta{optional-asterisk}
+%
+% \cs{hline} and \cs{@shline} are a division into two parts of the
+% kernel's \cs{hline}; we set \cs{arrayrulewidth}, too, since it has
+% a non-standard value
+%    \begin{macrocode}
+\renewcommand\hline{%
+  \noalign{\ifnum0=`}\fi\@ifstar
+    {\@shline{2\p@}}%
+    {\@shline{\arrayrulewidth}}}
+\newcommand\@shline[1]{\hrule \@height #1\relax
+   \futurelet \reserved@a \@xhline}
+\arrayrulewidth\p@
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{tabular}
+% \begin{environment}{NRC@@tabular}
+% Syntax: unchanged
+%
+% We save the \LaTeX{} \textsf{tabular} environment definition, and
+% sneak a size setting into our redefinition.  We have to do this
+% \cs{AtBeginDocument}, since useful packages (such as \textsf{array})
+% mangle the definition of \textsf{tabular}
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \let\NRC@@tabular\tabular
+  \let\endNRC@@tabular\endtabular
+  \renewenvironment{tabular}%
+    {\smalll\NRC@@tabular}%
+    {\endNRC@@tabular}%
+}
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{Text subscripts}
+%
+% \LaTeX{} itself provides a \cs{textsuperscript} command, but nothing
+% for subscripts.
+%
+% \begin{macro}{\textsubscript}
+% \begin{macro}{\@textsubscript}
+% Syntax: \cs{textsubscript}\marg{subscripting text}
+%
+% The code comes from |subscript.sty| on CTAN (written by the author
+% of the NRC classes).
+%    \begin{macrocode}
+\DeclareRobustCommand*\textsubscript[1]{%
+  \@textsubscript{\selectfont#1}}
+\def\@textsubscript#1{%
+  {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \section{Lists, etc.}
+%
+% Specialised versions of the \texttt{list} environment.
+%
+%
+% \begin{environment}{flenumerate}
+% \begin{environment}{flitemize}
+% Syntax: \emph{As \texttt{enumerate}/\texttt{itemize}}
+%
+% We make no provision for the nesting of these lists: they must be
+% the outermost list of a nested set (though the specification makes
+% no mention of nesting at all).
+%    \begin{macrocode}
+\newenvironment{flenumerate}%
+  {%
+    \ifnum \@enumdepth>\z@
+      \@toodeep
+    \else
+      \advance\@enumdepth\@ne
+      \def\@enumctr{enumi}%
+      \leftmargini1.5pc\relax
+      \labelwidth\leftmargini
+      \labelsep\z@
+      \list
+        \labelenumi
+        {%
+          \usecounter\@enumctr
+          \def\makelabel##1{##1\hss}%
+        }%
+    \fi
+  }%
+  \endlist
+\newenvironment{flitemize}%
+  {%
+    \ifnum \@itemdepth>\z@
+      \@toodeep
+    \else
+      \advance\@itemdepth\@ne
+      \def\@itemitem{labelitemi}%
+      \leftmargini10\p@
+      \labelwidth\leftmargini
+      \labelsep\z@
+      \list
+        \labelitemi
+        {\def\makelabel##1{##1\hss}}%
+    \fi
+  }%
+  \endlist
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+%
+% \subsection{Captions and general float handling}
+%
+% \begin{macro}{\caption}
+% \begin{macro}{\topcaption}
+% \begin{macro}{\if@topcaption}
+% \begin{macro}{\NRC@@caption}
+% \begin{macro}{\NRC@topcaptcounter}
+% Syntax: \cs{caption} unchanged; \cs{topcaption} the same
+%
+% \cs{caption} and \cs{topcaption} set their version of
+% \cs{if@topcaption} and relay to the saved copy \cs{NRC@@caption}.
+% \cs{caption} does nothing else, but \cs{topcaption} also sets up for
+% remembering the width of the following table.
+%    \begin{macrocode}
+\let\NRC@@caption\caption
+\renewcommand\caption{\@topcaptionfalse\NRC@caption}
+\newcommand\topcaption{\@topcaptiontrue
+  \global\advance\NRC@topcaptcounter\@ne
+  \NRC@caption
+}
+\newif\if@topcaption
+\@topcaptionfalse
+\newcount\NRC@topcaptcounter
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@caption}
+% \begin{macro}{\NRC@capt@left}
+% \begin{macro}{\NRC@capt@right}
+% \cs{NRC@caption} relays from \cs{caption}/\cs{topcaption} to
+% \cs{NRC@@caption} (the preserved copy of the kernel \cs{caption}),
+% making note of the values of \cs{leftskip} and \cs{rightskip} as we
+% go. 
+%    \begin{macrocode}
+\newcommand{\NRC@caption}{%
+  \edef\NRC@capt@left{\the\leftskip}%
+  \edef\NRC@capt@right{\the\rightskip}%
+  \NRC@@caption
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@makecaption}
+% \begin{macro}{\figurename}
+% \begin{macro}{\captionwidth}
+% \begin{macro}{\@makecaption}
+% Syntax: unchanged from \cs{@makecaption}, but takes account of
+% \cs{if@topcaption}
+%
+% None of the fancy centring code found in standard \LaTeX, and we use
+% a fixed size (though the size \emph{is} adjustable by the user).
+% The above caption skip is adjusted if in a \cs{topcaption}, to take
+% account of effects arising from different font sizes in different
+% columns.
+%
+% We have to defer our definition of \cs{@makecaption} to the start of
+% the document, since \textsf{babel} has taken to mucking up our
+% definition, if we're usuing `french'.
+%
+% The width in which to set the caption is \cs{captionwidth} if that's
+% set non-zero; otherwise, if this is a topcaption which is followed
+% by a tabular whose width we've recorded, we use that; failing both
+% conditions we use \cs{hsize}
+%    \begin{macrocode}
+\newcommand\NRC@makecaption[2]{%
+  \if@topcaption \@tempdima\belowcaptionskip \advance\@tempdima 3.5\p@
+  \else \@tempdima\abovecaptionskip \fi \vskip\@tempdima
+  \@tempdima\captionwidth
+  \ifdim\@tempdima=\z@
+    \if@topcaption
+      \expandafter\let\expandafter\@tempa
+        \csname NRC@tabwd@\the\NRC@topcaptcounter\endcsname
+      \@tempdima\ifx\@tempa\relax
+        \hsize
+      \else
+        \@tempa
+      \fi
+    \else
+      \@tempdima\hsize
+    \fi
+  \fi
+  \hb@xt@\hsize{%
+    \hskip\NRC@capt@left
+    \vbox{%
+      \hsize\@tempdima
+%<nrc2> \NRC@sectragged
+      \smalll
+      \textbf{#1.}\enspace\ignorespaces#2\unskip\par
+    }%
+    \hskip\NRC@capt@right
+  }%
+  \@tempdima\if@topcaption
+    \abovecaptionskip
+    \advance\@tempdima -6\p@ % pragmatic value from NRC experience
+  \else
+    \belowcaptionskip
+  \fi
+  \vskip\@tempdima
+}
+\renewcommand\figurename{Fig.}
+\newdimen\captionwidth
+\captionwidth\z@
+\AtBeginDocument{\let\@makecaption\NRC@makecaption}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endtabular}
+% \begin{macro}{\endtabular*}
+% \begin{macro}{\NRC@@endtabular}
+% Termination of tabulars, with code to preserve the width of the
+% table just set.  Again, this needs to be done \cs{AtBeginDocument}
+% (for the same reason that the size change for tabulars has to be).
+%    \begin{macrocode}
+\AtBeginDocument{%
+  \let\NRC@@endtabular\endtabular
+  \def\endtabular{\NRC@@endtabular
+    \if@topcaption
+      \if@filesw
+        \setbox\z@\lastbox
+        \immediate\write\@auxout{%
+          \string\NRC@tabwd{\the\NRC@topcaptcounter}%
+                           {\the\wd\z@}%
+        }%
+        \box\z@
+      \fi
+    \fi
+  }%
+  \expandafter\let\csname endtabular*\endcsname\endtabular
+}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NRC@tabwd}
+% \begin{macro}{\NRC@tabwd@atend}
+% Syntax: \cs{NRC@tabwd}\marg{topcaption number}\marg{table width}
+%
+% \verb|.aux| file command for processing table widths.  (Note, we set
+% up a dummy version of the command in the file, for the usual
+% precautionary reason.)
+%
+% \cs{NRC@tabwd@atend} is the version of the command to be used in
+% end-document \verb|.aux| processing.
+%    \begin{macrocode}
+\newcommand\NRC@tabwd[2]{%
+  \global\@namedef{NRC@tabwd@#1}{#2}%
+}
+\AtBeginDocument{\immediate\write\@auxout{%
+    \noexpand\providecommand\noexpand\NRC@tabwd{%
+      \noexpand\@gobbletwo}%
+  }%
+}
+\newcommand\NRC@tabwd@atend[2]{%
+  \edef\@tempa{\@nameuse{NRC@tabwd@#1}}%
+  \def\@tempb{#2}%
+  \ifx\@tempa\@tempb\else\@tempswatrue\fi
+}
+\AtEndDocument{\let\NRC@tabwd\NRC@tabwd@atend}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\sepcaption}
+% Syntax: \cs{sepcaption}\oarg{\texttt{.lo\emph{x}} text}\marg{caption}
+%
+% Produce a caption that's to be separated from its figure or table.
+% This requires the caption to be of a fixed width, and that there
+% should be a full-width rule underneath the caption.  The caption
+% makes up the whole of a float.
+%    \begin{macrocode}
+\newcommand{\sepcaption}{%
+  \ifdim \textwidth=\hsize
+    \def\@tempa{{\NRC@sepcaption{0.8}}}%
+  \else
+    \def\@tempa{{\NRC@sepcaption{0.7}}}%
+  \fi
+  \expandafter\@dblarg\@tempa
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NRC@sepcaption}
+% Syntax: \cs{NRC@sepcaption}\marg{fraction of width}\oarg{caption opt}%
+%                            \marg{caption}
+%
+% Orchestrate \cs{sepcaption}
+%    \begin{macrocode}
+\def\NRC@sepcaption#1[#2]#3{%
+  \setlength{\captionwidth}{#1\columnwidth}%
+  \topcaption[#1]{#2}%
+  \vrule \@depth.5\p@ \@height.5\p@ \@width\hsize
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@fptop}
+% \begin{macro}{\@dblfptop}
+%
+% We set these two to prevent floats from dribbling down float pages
+%    \begin{macrocode}
+\setlength\@fptop{\z@}
+\setlength\@dblfptop{\z@}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{The bibliography}
+%
+% \begin{environment}{thebibliography}
+% \begin{macro}{\thebibliography}
+% \begin{macro}{\NRC@thebibliography}
+% \begin{macro}{\NRC@thebib@brace}
+% \begin{macro}{\NRC@thebib@nobrace}
+% \begin{macro}{\endthebibliography}
+% \begin{macro}{\NRC@bibitem}
+% Syntax: \cs{begin}|{thebibliography}|\marg{widest label}
+% 
+% \noindent\phantom{Syntax: }\cs{begin}|{thebibliography}| (in the
+% presence of the |nonumbib| class option)
+%
+% First, the bibliography environment, which we repeat, patched in a
+% minor way, from \textsf{article.cls} (we suppress the open
+% bibliography switch)
+%    \begin{macrocode}
+\ifNRC@numbib
+\renewenvironment{thebibliography}[1]{%
+  \section*{\refname}%
+  \smalll
+  \list{\@biblabel{\@arabic\c@enumiv}}%
+       {%
+         \settowidth\labelwidth{#1.}%
+         \leftmargin 1.5pc
+         \labelsep \leftmargin
+         \advance\labelsep -\labelwidth 
+         \usecounter{enumiv}%
+         \let\p@enumiv\@empty
+         \renewcommand\theenumiv{\@arabic\c@enumiv}
+        }%
+  \sloppy
+%<!nrc2> \NRC@sectragged
+  \clubpenalty4000
+  \@clubpenalty \clubpenalty
+  \widowpenalty4000
+%<nrc1> \itemsep\z@
+%<nrc2> \itemsep\z@ \@plus\p@
+  \parsep\z@
+  \parskip\z@
+}{%
+  \def\@noitemerr{%
+    \@latex@warning{Empty `thebibliography' environment}%
+  }%
+  \endlist
+}
+%    \end{macrocode}
+%
+% If we're not numbering bibliography items, we need to be careful in
+% a number of areas.  First, we make the ``label width'' argument to
+% the environment (sort of) optional.  Second, if (as is usually the
+% case) there's no citation name, we generate a spurious one so as to
+% avoid masses of ``repeated label'' error messages.
+%
+% Note we define the environment as two commands, as the tricks with
+% the ``optional'' argument might come unstuck otherwise; of course,
+% \cs{endthebibliography} can't be defined with \cs{newcommand}\dots
+%    \begin{macrocode}
+\else
+\renewcommand{\thebibliography}{%
+  \futurelet\reserved@a\NRC@thebibliography
+}
+\newcommand{\NRC@thebibliography}{%
+  \ifx\reserved@a\bgroup
+    \expandafter\NRC@thebib@brace
+  \else
+    \expandafter\NRC@thebib@nobrace
+  \fi
+}
+\newcommand{\NRC@thebib@brace}[1]{%
+  \NRC@thebib@nobrace
+}
+\newcommand{\NRC@thebib@nobrace}{%
+  \section*{\refname}%
+  \smalll
+  \list{}%
+       {%
+         \let\bibitem\NRC@bibitem
+         \leftmargin 10\p@
+         \labelwidth \z@
+         \labelsep   \z@
+         \itemindent -\leftmargin
+         \usecounter{enumiv}%
+         \let\p@enumiv\@empty
+         \renewcommand\theenumiv{\@arabic\c@enumiv}
+        }%
+  \sloppy
+%<!nrc2> \NRC@sectragged
+  \clubpenalty4000
+  \@clubpenalty \clubpenalty
+  \widowpenalty4000
+%<nrc1> \itemsep\z@
+%<nrc2> \itemsep\z@ \@plus\p@
+  \parsep\z@
+  \parskip\z@
+}
+\def\endthebibliography{%
+  \def\@noitemerr{%
+    \@latex@warning{Empty `thebibliography' environment}%
+  }%
+  \endlist
+}
+\newcommand{\NRC@bibitem}[2][\the\value{\@listctr}]{%
+  \item
+  \if@filesw
+    \def\@tempa{#2}%
+    \ifx\@tempa\@empty
+      \edef\@tempa{bibitem\the\value{\@listctr}}%
+    \fi
+    \immediate\write\@auxout{%
+      \string\bibcite{\@tempa}{#1}%
+    }%
+  \fi
+  \ignorespaces
+}
+\fi
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\@biblabel}
+% The label for a |\bibitem[...]| command is produced by this
+% macro. This version marginally modifies that defined in the \LaTeX{}
+% kernel.
+%    \begin{macrocode}
+\renewcommand*{\@biblabel}[1]{\hb@xt@\labelwidth{\hfill#1.}}
+%</nrc1cls|nrc2cls>
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%<*nrc1cls|nrc2cls|balance>
+\endinput
+%</nrc1cls|nrc2cls|balance>
+%    \end{macrocode}
+%
+% \Finale
+%
+%
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
-- 
cgit v1.2.3

