% \section{Document preambles}
%
% \begin{macrocode}
%\NeedsTeXFormat{LaTeX2e}[1995/12/01]
%<*dtx>
\ProvidesFile {nrc.dtx}
%
%\ProvidesClass {nrc1}
%\ProvidesPackage{nrc1}
%\ProvidesClass {nrc2}
%\ProvidesPackage{nrc2}
%\ProvidesPackage{baltools}
%<*nrc1|nrc2|balance>
[2013/02/02 v2.01a
%
% NRC single-column journal class%
% NRC single-column journal compatibility package%
% NRC 2-column journal class%
% NRC 2-column journal compatibility package%
% NRC 2-column balancing tools%
%<*dtx>
NRC macros source file%
%
%<*nrc1|nrc2|balance>
]% $Id: nrc.dtx,v 2.143 2013/02/02 17:45:07 ct $
%
% \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}
%
% \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}
%{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
%\let\NRC@tpheader@centre\@empty
%\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}
%
% \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
}%
% \let\NRC@tpheader@centre\NRC@footer@centre
% \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
}%
% \let\NRC@tpheader@centre\NRC@footer@centre
% \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}
%\ExecuteOptions{type1fonts,YandY}
%<*authors>
\IfFileExists{times.sty}%
{\ExecuteOptions{type1rest,genTeX,author}}%
{\ExecuteOptions{cmfonts,genTeX,author}}%
%
\ExecuteOptions{nobreakaddress,notrimmarks,english,%
numbib,nofinalverso%
}
%\ExecuteOptions{onecolid,leqno}
%\ExecuteOptions{reqno}
%
% \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
%
% \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}
%\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}{Published by NRC Research Press}%
{Publi\'e par NRC Research Press}
% \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:}%
%
% \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
}
%
% \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).%
}
%
% \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}
% \textwidth 34pc
%<*nrc2>
\newdimen\NRC@columnwidth
\paperwidth 51pc
\textwidth 43pc
\NRC@columnwidth 20.75pc
\columnsep 1.5pc
\columnseprule \z@
%
\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}
% \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}
%
% \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@}
%\setlength\headsep {14\p@}
%\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}
%{3pc}
%{20\p@}
\addtolength{\textfloatsep}{-10\p@}
%\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}
%
% \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
%
% \rlap{\NRC@tpfooter@left}%
\hfill\NRC@xlap{\NRC@tpfooter@centre}%
\hfill\llap{%
\fontsize\@viiipt\@xpt
\usefont\f@encoding\rmdefault mn%
\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{%
%
\fontsize\@ixpt\@xiipt
\usefont\f@encoding\sfdefault ln%
\ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
% }%
}%
% \NRC@restore@dbltextfloatsep
}%
}%
\renewcommand\@evenhead{%
{%
\NRC@toptrim
{%
% \rlap{%
\fontsize\@ixpt\@xiipt
\usefont\f@encoding\sfdefault ln%
\ifNRC@pagewithfile\NRC@filenumber-\fi\thepage
%<*newtplayout>
}%
\hfill
\NRC@xlap{\NRC@tpheader@centre}%
\hfill
%
}%
% \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
%
% \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%
\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%
\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%
\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
%
\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
% {\NRC@partext@a[15.5pc][1.5pc][17pc]}%
% {\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}
%
%<*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?
% \PackageWarning{baltools}{%
% \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
% \PackageWarning{baltools}{%
% \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
% \PackageInfo{baltools}{%
% \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}
% \PackageInfo{baltools}{%
% \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}
%
%<*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
%
% \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
%\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
%
% \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
}
%
% \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
}
%
% \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}%
%
%<*nrc1>
\parbox[t]{28pc}{%
\fontsize{16}{24}%
%
\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}%
%
%<*nrc1>
\parbox[t]{28pc}{%
\fontsize{16}{24}%
%
\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]{%
%\@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
%
\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
%
% \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
%
}%
% \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}%
}
%\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
%
\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}}
%
% \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}
% {}
% \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}}
%
% {}
% \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}
%\newtoks\NRC@abstract@toks
%\newtoks\NRC@resume@toks
%\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
%
\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
%
\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}{%
% \ifNRC@easedbaselines
\@setfontsize\normalsize\@xpt\@xiipt
%<*nrc2>
\else
\@setfontsize\normalsize\@xpt{11}%
\fi
%
\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}{%
% \ifNRC@easedbaselines
\@setfontsize\small\@ixpt{11}%
%<*nrc2>
\else
\@setfontsize\small\@ixpt\@xpt
\fi
%
\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}{%
% \ifNRC@easedbaselines
\@setfontsize\footnotesize\@viiipt{9.5}%
%<*nrc2>
\else
\@setfontsize\footnotesize\@viiipt\@ixpt
\fi
%
\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@}%
%
%<*nrc2>
{18\p@ \@plus6\p@}%
{6\p@ \@plus3\p@}%
%
{\fontsize{11}{12}%
% \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@}%
%
%<*nrc1>
{14\p@ \@plus4.5\p@ \@minus1.5\p@}%
{2\p@ \@plus \p@}%
%
{\reset@font\bfseries
% \let\@hangfrom\@firstofone\noindent
\NRC@sectragged}%
}
\let\Bsection\subsection
\renewcommand\subsubsection{%
\@startsection{subsubsection}%
\thr@@
\z@
%<*nrc2>
{9\p@ \@plus3\p@}%
{.1\p@ \@plus2\p@}%
%
%<*nrc1>
{14\p@ \@plus4.5\p@ \@minus1.5\p@}%
{2\p@ \@plus \p@}%
%
{\reset@font\bfseries\itshape
% \let\@hangfrom\@firstofone\noindent
\NRC@sectragged}%
}
\let\Csection\subsubsection
\newcommand\subsubsubsection{%
\@startsection{paragraph}%
4%
\z@
%<*nrc2>
{7\p@ \@plus2\p@}%
{.1\p@ \@plus2\p@}%
%
%<*nrc1>
{14\p@ \@plus4.5\p@ \@minus1.5\p@}%
{2\p@ \@plus \p@}%
%
{\reset@font\itshape
% \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@
}
%
%<*nrc2>
\skip\footins14\p@\@plus10\p@
\renewcommand\footnoterule{\kern-5\p@
\hrule \@height\p@
\kern4\p@
}
%
% \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}
% \iflefteqnos
\newcommand{\eqnoformat}[1]{[\ignorespaces#1\unskip\@@italiccorr]}
%<*nrc1>
\else
\newcommand{\eqnoformat}[1]{(\ignorespaces#1\unskip\@@italiccorr)}
\fi
%
% \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}
%\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}%
%\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
% \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
% \NRC@sectragged
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000
% \itemsep\z@
% \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
% \NRC@sectragged
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000
% \itemsep\z@
% \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.}}
%
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
%<*nrc1cls|nrc2cls|balance>
\endinput
%
% \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 \~}