From 4a52a92895350a70137eb781d4061d4bee589853 Mon Sep 17 00:00:00 2001 From: Wild-Queue Date: Fri, 13 Dec 2024 21:33:53 +0300 Subject: [PATCH] Submit Final Paper --- .../IEEEtran.cls | 6347 +++++++++++++++++ .../final-paper.pdf | Bin 0 -> 115837 bytes .../main.tex | 488 ++ 3 files changed, 6835 insertions(+) create mode 100644 _comparative_analysis_of_methods_for_requirements_engineering/IEEEtran.cls create mode 100644 _comparative_analysis_of_methods_for_requirements_engineering/final-paper.pdf create mode 100644 _comparative_analysis_of_methods_for_requirements_engineering/main.tex diff --git a/_comparative_analysis_of_methods_for_requirements_engineering/IEEEtran.cls b/_comparative_analysis_of_methods_for_requirements_engineering/IEEEtran.cls new file mode 100644 index 0000000..8d2b1c6 --- /dev/null +++ b/_comparative_analysis_of_methods_for_requirements_engineering/IEEEtran.cls @@ -0,0 +1,6347 @@ +%% +%% IEEEtran.cls 2015/08/26 version V1.8b +%% +%% This is the IEEEtran LaTeX class for authors of the Institute of +%% Electrical and Electronics Engineers (IEEE) Transactions journals and +%% conferences. +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and +%% http://www.ieee.org/ +%% +%% Based on the original 1993 IEEEtran.cls, but with many bug fixes +%% and enhancements (from both JVH and MDS) over the 1996/7 version. +%% +%% +%% Contributors: +%% Gerry Murray (1993), Silvano Balemi (1993), +%% Jon Dixon (1996), Peter N"uchter (1996), +%% Juergen von Hagen (2000), and Michael Shell (2001-2014) +%% +%% +%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, +%% Jon Dixon, Peter N"uchter, +%% Juergen von Hagen +%% and +%% Copyright (c) 2001-2015 by Michael Shell +%% +%% Current maintainer (V1.3 to V1.8b): Michael Shell +%% See: +%% http://www.michaelshell.org/ +%% for current contact information. +%% +%% Special thanks to Peter Wilson (CUA) and Donald Arseneau +%% for allowing the inclusion of the \@ifmtarg command +%% from their ifmtarg LaTeX package. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE. +%% +%% This work is distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%% +%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, +%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, +%% bare_jrnl_compsoc.tex +%% +%% Major changes to the user interface should be indicated by an +%% increase in the version numbers. If a version is a beta, it will +%% be indicated with a BETA suffix, i.e., 1.4 BETA. +%% Small changes can be indicated by appending letters to the version +%% such as "IEEEtran_v14a.cls". +%% In all cases, \Providesclass, any \typeout messages to the user, +%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the +%% correct version information. +%% The changes should also be documented via source comments. +%%************************************************************************* +%% +% +% Available class options +% e.g., \documentclass[10pt,conference]{IEEEtran} +% +% *** choose only one from each category *** +% +% 9pt, 10pt, 11pt, 12pt +% Sets normal font size. The default is 10pt. +% +% conference, journal, technote, peerreview, peerreviewca +% determines format mode - conference papers, journal papers, +% correspondence papers (technotes), or peer review papers. The user +% should also select 9pt when using technote. peerreview is like +% journal mode, but provides for a single-column "cover" title page for +% anonymous peer review. The paper title (without the author names) is +% repeated at the top of the page after the cover page. For peer review +% papers, the \IEEEpeerreviewmaketitle command must be executed (will +% automatically be ignored for non-peerreview modes) at the place the +% cover page is to end, usually just after the abstract (keywords are +% not normally used with peer review papers). peerreviewca is like +% peerreview, but allows the author names to be entered and formatted +% as with conference mode so that author affiliation and contact +% information can be easily seen on the cover page. +% The default is journal. +% +% draft, draftcls, draftclsnofoot, final +% determines if paper is formatted as a widely spaced draft (for +% handwritten editor comments) or as a properly typeset final version. +% draftcls restricts draft mode to the class file while all other LaTeX +% packages (i.e., \usepackage{graphicx}) will behave as final - allows +% for a draft paper with visible figures, etc. draftclsnofoot is like +% draftcls, but does not display the date and the word "DRAFT" at the foot +% of the pages. If using one of the draft modes, the user will probably +% also want to select onecolumn. +% The default is final. +% +% letterpaper, a4paper, cspaper +% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. +% Changing the paper size in the standard journal and conference modes +% will not alter the typesetting of the document - only the margins will +% be affected. In particular, documents using the a4paper option will +% have reduced side margins (A4 is narrower than US letter) and a longer +% bottom margin (A4 is longer than US letter). For both cases, the top +% margins will be the same and the text will be horizontally centered. +% For the compsoc conference and draft modes, it is the margins that will +% remain constant, and thus the text area size will vary, with changes in +% the paper size. +% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) +% used in the actual publication of Computer Society journals. Under +% compsoc journal mode, this option does not alter the typesetting of the +% document. Authors should invoke the cspaper option only if requested to +% do so by the editors of the specific journal they are submitting to. +% For final submission to the IEEE, authors should generally use US letter +% (8.5 X 11in) paper unless otherwise instructed. Note that authors should +% ensure that all post-processing (ps, pdf, etc.) uses the same paper +% specificiation as the .tex document. Problems here are by far the number +% one reason for incorrect margins. IEEEtran will automatically set the +% default paper size under pdflatex (without requiring any change to +% pdftex.cfg), so this issue is more important to dvips users. Fix +% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the +% dvips -t papersize option instead as needed. For the cspaper option, +% the corresponding dvips paper name is "ieeecs". +% See the testflow documentation +% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow +% for more details on dvips paper size configuration. +% The default is letterpaper. +% +% oneside, twoside +% determines if layout follows single sided or two sided (duplex) +% printing. The only notable change is with the headings at the top of +% the pages. +% The default is oneside. +% +% onecolumn, twocolumn +% determines if text is organized into one or two columns per page. One +% column mode is usually used only with draft papers. +% The default is twocolumn. +% +% comsoc, compsoc, transmag +% Use the format of the IEEE Communications Society, IEEE Computer Society +% or IEEE Transactions on Magnetics, respectively. +% +% romanappendices +% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls +% now defaults to Alpha "Appendix A" convention - the opposite of what +% v1.6b and earlier did. +% +% captionsoff +% disables the display of the figure/table captions. Some IEEE journals +% request that captions be removed and figures/tables be put on pages +% of their own at the end of an initial paper submission. The endfloat +% package can be used with this class option to achieve this format. +% +% nofonttune +% turns off tuning of the font interword spacing. Maybe useful to those +% not using the standard Times fonts or for those who have already "tuned" +% their fonts. +% The default is to enable IEEEtran to tune font parameters. +% +% +%---------- +% Available CLASSINPUTs provided (all are macros unless otherwise noted): +% \CLASSINPUTbaselinestretch +% \CLASSINPUTinnersidemargin +% \CLASSINPUToutersidemargin +% \CLASSINPUTtoptextmargin +% \CLASSINPUTbottomtextmargin +% +% Available CLASSINFOs provided: +% \ifCLASSINFOpdf (TeX if conditional) +% \CLASSINFOpaperwidth (macro) +% \CLASSINFOpaperheight (macro) +% \CLASSINFOnormalsizebaselineskip (length) +% \CLASSINFOnormalsizeunitybaselineskip (length) +% +% Available CLASSOPTIONs provided: +% all class option flags (TeX if conditionals) unless otherwise noted, +% e.g., \ifCLASSOPTIONcaptionsoff +% point size options provided as a single macro: +% \CLASSOPTIONpt +% which will be defined as 9, 10, 11, or 12 depending on the document's +% normalsize point size. +% also, class option peerreviewca implies the use of class option peerreview +% and classoption draft implies the use of class option draftcls + + + + + +\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] +\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} +\typeout{-- http://www.michaelshell.org/tex/ieeetran/} +\NeedsTeXFormat{LaTeX2e} + +% IEEEtran.cls version numbers, provided as of V1.3 +% These values serve as a way a .tex file can +% determine if the new features are provided. +% The version number of this IEEEtrans.cls can be obtained from +% these values. i.e., V1.4 +% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- +% (no need to enumerate "a" minor changes here) +\def\IEEEtransversionmajor{1} +\def\IEEEtransversionminor{8} + + +% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting +\def\@IEEEclspkgerror{\ClassError{IEEEtran}} + + +% These do nothing, but provide them like in article.cls +\newif\if@restonecol +\newif\if@titlepage + + +% class option conditionals +\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse +\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue + +\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue +\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse + +\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue +\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse +\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse +\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse + +\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse +\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse + +\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue +\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse +\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse + +\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse + +\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse + +\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse +\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse +\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse + +\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse + + +% class info conditionals + +% indicates if pdf (via pdflatex) output +\newif\ifCLASSINFOpdf \CLASSINFOpdffalse + + +% V1.6b internal flag to show if using a4paper +\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse +% V1.6b internal flag to show if using cspaper +\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse + + +% IEEEtran class scratch pad registers +% dimen +\newdimen\@IEEEtrantmpdimenA +\newdimen\@IEEEtrantmpdimenB +\newdimen\@IEEEtrantmpdimenC +% count +\newcount\@IEEEtrantmpcountA +\newcount\@IEEEtrantmpcountB +\newcount\@IEEEtrantmpcountC +% token list +\newtoks\@IEEEtrantmptoksA + +% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) +% as well as LaTeX's \@ptsize to retain some compatability with some +% external packages +\def\@ptsize{0} +% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt +\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} +\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} +\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} +\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} + + + +\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% + \setlength{\paperheight}{11in}% + \@IEEEusingAfourpaperfalse + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{letter}% + \def\CLASSINFOpaperwidth{8.5in}% + \def\CLASSINFOpaperheight{11in}} + + +\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% + \setlength{\paperheight}{297mm}% + \@IEEEusingAfourpapertrue + \@IEEEusingcspaperfalse + \def\CLASSOPTIONpaper{a4}% + \def\CLASSINFOpaperwidth{210mm}% + \def\CLASSINFOpaperheight{297mm}} + +% special paper option for compsoc journals +\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% + \setlength{\paperheight}{10.75in}% + \@IEEEusingcspapertrue + \@IEEEusingAfourpaperfalse + \def\CLASSOPTIONpaper{ieeecs}% + \def\CLASSINFOpaperwidth{7.875in}% + \def\CLASSINFOpaperheight{10.75in}} + +\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse + \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} +\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue + \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} + +\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} +\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} + +% If the user selects draft, then this class AND any packages +% will go into draft mode. +\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftcls is for a draft mode which will not affect any packages +% used by the document. +\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofootfalse} +% draftclsnofoot is like draftcls, but without the footer. +\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue + \CLASSOPTIONdraftclsnofoottrue} +\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse + \CLASSOPTIONdraftclsnofootfalse} + +\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} + +\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} + +\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue + \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} + +\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} + +\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} + +\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} + +\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} + +\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} + +\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} + + +% default to US letter paper, 10pt, twocolumn, one sided, final, journal +\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} +% overrride these defaults per user requests +\ProcessOptions + + + +%% -- Command Argument Scanning Support Functions -- + +% Sets the category codes for punctuation to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 +\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 +\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 +\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 +\catcode`\]=12 \catcode`\==12 \catcode`\|=12} +% Sets the category codes for numbers to their normal values. +% For local use with argument scanning. +\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 +\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 +\catcode`\8=12 \catcode`\9=12} +% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum +\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} + + +% usage: \@IEEEextracttoken*{} +% \@IEEEextracttoken fully expands its argument (which it then stores in +% \@IEEEextracttokenarg) via \edef and then the meaning of the first +% nonbrace (but including the empty group) token found is assigned via \let +% to \@IEEEextractedtoken as well as stored in the macro +% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during +% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, +% however their original relative brace nesting depths are not guaranteed to +% be preserved. +% If the argument is empty, or if a first nonbrace token does not exist (or +% is an empty group), \@IEEEextractedtoken will be \relax and +% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. +% +% For example: +% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} +% results in: +% +% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedtoken ==> the letter a +% \@IEEEextractedtokenmacro ==> a macro containing a +% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g +% +% the *-star form, \@IEEEextracttoken*, does not expand its argument +% contents during processing. +\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} + +\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax +\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty +% if the macro is unchanged after being acquired as a single undelimited argument +% with anything after it being stripped off as a delimited argument +% we know we have one token without any enclosing braces. loop until this is true. +\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg +\loop + % trap case of an empty argument as this would cause a problem with + % \@@@IEEEextracttoken's first (nondelimited) argument acquisition + \ifx\@IEEEextracttokencurgroup\@empty + \def\@IEEEextractedtokenmacro{}\relax + \else + \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax + \fi + \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup + \else + \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro +\repeat +% we can safely do a \let= here because there should be at most one token +% the relax is needed to handle the case of no token found +\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} + +\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax +\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter +\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter +{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} +%% +%% -- End of Command Argument Scanning Support Functions -- + + + +% Computer Society conditional execution command +\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} +% inverse +\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} +% compsoc conference +\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} +% compsoc not conference +\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} + + +% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded +\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax + \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} +\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} +\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} +\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} + +% comsoc, if a Times math font was not loaded by user, enforce it +\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax +\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} +\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} +\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} +\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} +% if no acceptable Times math font package found, error with newtxmath requirement +\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} + + +\ifCLASSOPTIONcomsoc + % ensure that if newtxmath is used, the cmintegrals option is also invoked + \PassOptionsToPackage{cmintegrals}{newtxmath} + % comsoc requires a Times like math font + % ensure this requirement is satisfied at document start + \AtBeginDocument{\@IEEEcomsocverifymathfont} +\fi + + + +% The IEEE uses Times Roman font, so we'll default to Times. +% These three commands make up the entire times.sty package. +\renewcommand{\sfdefault}{phv} +\renewcommand{\rmdefault}{ptm} +\renewcommand{\ttdefault}{pcr} + +% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, +% not Times Roman. +\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} + +% enable the selected main text font +\normalfont\selectfont + + +\ifCLASSOPTIONcomsoc + \typeout{-- Using IEEE Communications Society mode.} +\fi + +\ifCLASSOPTIONcompsoc + \typeout{-- Using IEEE Computer Society mode.} +\fi + + +% V1.7 conference notice message hook +\def\@IEEEconsolenoticeconference{\typeout{}% +\typeout{** Conference Paper **}% +\typeout{Before submitting the final camera ready copy, remember to:}% +\typeout{}% +\typeout{ 1. Manually equalize the lengths of two columns on the last page}% +\typeout{ of your paper;}% +\typeout{}% +\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% +\typeout{ uses only Type 1 fonts and that every step in the generation}% +\typeout{ process uses the appropriate paper size.}% +\typeout{}} + + +% we can send console reminder messages to the user here +\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} + + +% warn about the use of single column other than for draft mode +\ifCLASSOPTIONtwocolumn\else% + \ifCLASSOPTIONdraftcls\else% + \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% + \fi% +\fi + + +% V1.7 improved paper size setting code. +% Set pdfpage and dvips paper sizes. Conditional tests are similar to that +% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, +% even if only effect is to set them to \relax. +% if \pdfoutput is undefined or equal to relax, output a dvips special +{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% +% pdfoutput is defined and not equal to \relax +% check for pdfpageheight existence just in case someone sets pdfoutput +% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. +\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth +\global\pdfpageheight\paperheight}% +% if using \pdfoutput=0 under pdflatex, send dvips papersize special +\ifcase\pdfoutput +\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% +\else +% we are using pdf output, set CLASSINFOpdf flag +\global\CLASSINFOpdftrue +\fi}} + +% let the user know the selected papersize +\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space +(\CLASSOPTIONpaper)\space paper.} + +\ifCLASSINFOpdf +\typeout{-- Using PDF output.} +\else +\typeout{-- Using DVI output.} +\fi + + +% The idea hinted here is for LaTeX to generate markleft{} and markright{} +% automatically for you after you enter \author{}, \journal{}, +% \journaldate{}, journalvol{}, \journalnum{}, etc. +% However, there may be some backward compatibility issues here as +% well as some special applications for IEEEtran.cls and special issues +% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. +% We'll leave this as an open future suggestion. +%\newcommand{\journal}[1]{\def\@journal{#1}} +%\def\@journal{} + + + +% pointsize values +% used with ifx to determine the document's normal size +\def\@IEEEptsizenine{9} +\def\@IEEEptsizeten{10} +\def\@IEEEptsizeeleven{11} +\def\@IEEEptsizetwelve{12} + + + +% FONT DEFINITIONS (No sizexx.clo file needed) +% V1.6 revised font sizes, displayskip values and +% revised normalsize baselineskip to reduce underfull vbox problems +% on the 58pc = 696pt = 9.5in text height we want +% normalsize #lines/column baselineskip (aka leading) +% 9pt 63 11.0476pt (truncated down) +% 10pt 58 12pt (exact) +% 11pt 52 13.3846pt (truncated down) +% 12pt 50 13.92pt (exact) +% + +% we need to store the nominal baselineskip for the given font size +% in case baselinestretch ever changes. +% this is a dimen, so it will not hold stretch or shrink +\newdimen\@IEEEnormalsizeunitybaselineskip +\@IEEEnormalsizeunitybaselineskip\baselineskip + + + +%% ******* WARNING! ******* +%% +%% Authors should not alter font sizes, baselineskip ("leading"), +%% margins or other spacing values in an attempt to squeeze more +%% material on each page. +%% +%% The IEEE's own typesetting software will restore the correct +%% values when re-typesetting/proofing the submitted document, +%% possibly resulting in unexpected article over length charges. +%% +%% ******* WARNING! ******* + + +% 9pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\typeout{-- This is a 9 point document.} +\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} +\normalsize +\abovedisplayskip 1.5ex plus 3pt minus 1pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 3pt +\belowdisplayshortskip 1.5ex plus 3pt minus 1pt +\def\small{\@setfontsize{\small}{8.5}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is the same as large - 10pt +\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} +\def\large{\@setfontsize{\large}{10}{12pt}} +\def\Large{\@setfontsize{\Large}{12}{14pt}} +\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} +\def\huge{\@setfontsize{\huge}{17}{20pt}} +\def\Huge{\@setfontsize{\Huge}{20}{24pt}} +\fi +% +% 10pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\typeout{-- This is a 10 point document.} +\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} +\normalsize +\abovedisplayskip 1.5ex plus 4pt minus 2pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4pt +\belowdisplayshortskip 1.5ex plus 4pt minus 2pt +\def\small{\@setfontsize{\small}{9}{10pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} +\def\tiny{\@setfontsize{\tiny}{5}{6pt}} +% sublargesize is a tad smaller than large - 11pt +\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 11pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\typeout{-- This is an 11 point document.} +\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} +\normalsize +\abovedisplayskip 1.5ex plus 5pt minus 3pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5pt +\belowdisplayshortskip 1.5ex plus 5pt minus 3pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 12pt +\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} +\def\large{\@setfontsize{\large}{12}{14pt}} +\def\Large{\@setfontsize{\Large}{14}{17pt}} +\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} +\def\huge{\@setfontsize{\huge}{20}{24pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi +% +% 12pt option defaults +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\typeout{-- This is a 12 point document.} +\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} +\normalsize +\abovedisplayskip 1.5ex plus 6pt minus 4pt +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6pt +\belowdisplayshortskip 1.5ex plus 6pt minus 4pt +\def\small{\@setfontsize{\small}{10}{12pt}} +\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} +\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} +\def\tiny{\@setfontsize{\tiny}{6}{7pt}} +% sublargesize is the same as large - 14pt +\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} +\def\large{\@setfontsize{\large}{14}{17pt}} +\def\Large{\@setfontsize{\Large}{17}{20pt}} +\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} +\def\huge{\@setfontsize{\huge}{22}{26pt}} +\def\Huge{\@setfontsize{\Huge}{24}{28pt}} +\fi + + + +% V1.8a compsoc font sizes +% compsoc font sizes use bp "Postscript" point units (1/72in) +% rather than the traditional pt (1/72.27) +\ifCLASSOPTIONcompsoc +% -- compsoc defaults -- +% ** will override some of these values later ** +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\def\small{\@setfontsize{\small}{8.5bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is the same as large - 10bp +\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} +\def\large{\@setfontsize{\large}{10bp}{12bp}} +\def\Large{\@setfontsize{\Large}{12bp}{14bp}} +\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} +\def\huge{\@setfontsize{\huge}{17bp}{20bp}} +\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} +\fi +% +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\def\small{\@setfontsize{\small}{9bp}{10bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} +\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} +% sublargesize is a tad smaller than large - 11bp +\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 12bp +\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} +\def\large{\@setfontsize{\large}{12bp}{14bp}} +\def\Large{\@setfontsize{\Large}{14bp}{17bp}} +\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} +\def\huge{\@setfontsize{\huge}{20bp}{24bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% +\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\def\small{\@setfontsize{\small}{10bp}{12bp}} +\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} +\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} +\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} +% sublargesize is the same as large - 14bp +\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} +\def\large{\@setfontsize{\large}{14bp}{17bp}} +\def\Large{\@setfontsize{\Large}{17bp}{20bp}} +\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} +\def\huge{\@setfontsize{\huge}{22bp}{26bp}} +\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} +\fi +% +% -- override defaults: compsoc journals use special normalsizes -- +\ifCLASSOPTIONconference +% +% compsoc conferences +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +% +% compsoc nonconferences +\else +% 9pt +\ifx\CLASSOPTIONpt\@IEEEptsizenine +\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} +\normalsize +\abovedisplayskip 1.5ex plus 3bp minus 1bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0bp plus 3bp +\belowdisplayshortskip 1.5ex plus 3bp minus 1bp +\fi +% 10pt +\ifx\CLASSOPTIONpt\@IEEEptsizeten +% the official spec is 9.5bp with 11.4bp leading for 10pt, +% but measurements of proofs suggest upto 11.723bp leading +% here we'll use 11.54bp which gives 61 lines per column +% with the standard compsoc margins +\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} +\normalsize +\abovedisplayskip 1.5ex plus 4bp minus 2bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 4bp +\belowdisplayshortskip 1.5ex plus 4bp minus 2bp +\fi +% 11pt +\ifx\CLASSOPTIONpt\@IEEEptsizeeleven +\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} +\normalsize +\abovedisplayskip 1.5ex plus 5bp minus 3bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 5bp +\belowdisplayshortskip 1.5ex plus 5bp minus 3bp +\fi +% 12pt +\ifx\CLASSOPTIONpt\@IEEEptsizetwelve +\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} +\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} +\normalsize +\abovedisplayskip 1.5ex plus 6bp minus 4bp +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip 0pt plus 6bp +\belowdisplayshortskip 1.5ex plus 6bp minus 4bp +\fi +\fi\fi + + + + +% V1.6 The Computer Modern Fonts will issue a substitution warning for +% 24pt titles (24.88pt is used instead, but the default and correct +% Times font will scale exactly as needed) increase the substitution +% tolerance to turn off this warning. +% +% V1.8a, the compsoc bp font sizes can also cause bogus font substitution +% warnings with footnote or scriptsize math and the $\bullet$ itemized +% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. +\def\fontsubfuzz{1.7bp} + + +% warn the user in case they forget to use the 9pt option with +% technote +\ifCLASSOPTIONtechnote% + \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% + \typeout{** ATTENTION: Technotes are normally 9pt documents.}% + \fi% +\fi + + +% V1.7 +% Improved \textunderscore to provide a much better fake _ when used with +% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use +% available true _ glyph for those two typewriter fonts. +\def\@IEEEstringptm{ptm} % Times Roman family +\def\@IEEEstringppl{ppl} % Palatino Roman family +\def\@IEEEstringphv{phv} % Helvetica Sans Serif family +\def\@IEEEstringpcr{pcr} % Courier typewriter family +\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family +\DeclareTextCommandDefault{\textunderscore}{\leavevmode +\ifx\f@family\@IEEEstringpcr\string_\else +\ifx\f@family\@IEEEstringcmtt\string_\else +\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else +\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else +\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} + + + + +% set the default \baselinestretch +\def\baselinestretch{1} +\ifCLASSOPTIONdraftcls + \def\baselinestretch{1.5}% default baselinestretch for draft modes +\fi + + +% process CLASSINPUT baselinestretch +\ifx\CLASSINPUTbaselinestretch\@IEEEundefined +\else + \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override + \typeout{** ATTENTION: Overriding \string\baselinestretch\space to + \baselinestretch\space via \string\CLASSINPUT.} +\fi + +\small\normalsize % make \baselinestretch take affect + + + + +% store the normalsize baselineskip +\newdimen\CLASSINFOnormalsizebaselineskip +\CLASSINFOnormalsizebaselineskip=\baselineskip\relax +% and the normalsize unity (baselinestretch=1) baselineskip +% we could save a register by giving the user access to +% \@IEEEnormalsizeunitybaselineskip. However, let's protect +% its read only internal status +\newdimen\CLASSINFOnormalsizeunitybaselineskip +\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax +% store the nominal value of jot +\newdimen\IEEEnormaljot +\IEEEnormaljot=0.25\baselineskip\relax + +% set \jot +\jot=\IEEEnormaljot\relax + + + + +% V1.6, we are now going to fine tune the interword spacing +% The default interword glue for Times under TeX appears to use a +% nominal interword spacing of 25% (relative to the font size, i.e., 1em) +% a maximum of 40% and a minimum of 19%. +% For example, 10pt text uses an interword glue of: +% +% 2.5pt plus 1.49998pt minus 0.59998pt +% +% However, the IEEE allows for a more generous range which reduces the need +% for hyphenation, especially for two column text. Furthermore, the IEEE +% tends to use a little bit more nominal space between the words. +% The IEEE's interword spacing percentages appear to be: +% 35% nominal +% 23% minimum +% 50% maximum +% (They may even be using a tad more for the largest fonts such as 24pt.) +% +% for bold text, the IEEE increases the spacing a little more: +% 37.5% nominal +% 23% minimum +% 55% maximum + +% here are the interword spacing ratios we'll use +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.35} +\def\@IEEEinterspaceMINratioM{0.23} +\def\@IEEEinterspaceMAXratioM{0.50} + +% for bold +\def\@IEEEinterspaceratioB{0.375} +\def\@IEEEinterspaceMINratioB{0.23} +\def\@IEEEinterspaceMAXratioB{0.55} + + +% compsoc nonconference papers use Palatino, +% tweak settings to better match the proofs +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference\else +% for medium (normal weight) +\def\@IEEEinterspaceratioM{0.28} +\def\@IEEEinterspaceMINratioM{0.21} +\def\@IEEEinterspaceMAXratioM{0.47} +% for bold +\def\@IEEEinterspaceratioB{0.305} +\def\@IEEEinterspaceMINratioB{0.21} +\def\@IEEEinterspaceMAXratioB{0.52} +\fi\fi + + +% command to revise the interword spacing for the current font under TeX: +% \fontdimen2 = nominal interword space +% \fontdimen3 = interword stretch +% \fontdimen4 = interword shrink +% since all changes to the \fontdimen are global, we can enclose these commands +% in braces to confine any font attribute or length changes +\def\@@@IEEEsetfontdimens#1#2#3{{% +\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\fontdimen2\font=\@IEEEtrantmpdimenA\relax +\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% +\fontdimen3\font=-\@IEEEtrantmpdimenA\relax +\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% +\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% +\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} + +% revise the interword spacing for each font weight +\def\@@IEEEsetfontdimens{{% +\mdseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% +\bfseries +\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% +}} + +% revise the interword spacing for each font shape +% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are +% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we +% won't alter these either. +\def\@IEEEsetfontdimens{{% +\normalfont +\@@IEEEsetfontdimens +\normalfont\itshape +\@@IEEEsetfontdimens +}} + +% command to revise the interword spacing for each font size (and shape +% and weight). Only the \rmfamily is done here as \ttfamily uses a +% fixed spacing and \sffamily is not used as the main text of IEEE papers. +\def\@IEEEtunefonts{{\selectfont\rmfamily +\tiny\@IEEEsetfontdimens +\scriptsize\@IEEEsetfontdimens +\footnotesize\@IEEEsetfontdimens +\small\@IEEEsetfontdimens +\normalsize\@IEEEsetfontdimens +\sublargesize\@IEEEsetfontdimens +\large\@IEEEsetfontdimens +\LARGE\@IEEEsetfontdimens +\huge\@IEEEsetfontdimens +\Huge\@IEEEsetfontdimens}} + +% if the nofonttune class option is not given, revise the interword spacing +% now - in case IEEEtran makes any default length measurements, and make +% sure all the default fonts are loaded +\ifCLASSOPTIONnofonttune\else +\@IEEEtunefonts +\fi + +% and again at the start of the document in case the user loaded different fonts +\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} + + + + + +% -- V1.8a page setup commands -- + +% The default sample text for calculating margins +% Note that IEEE publications use \scriptsize for headers and footers. +\def\IEEEdefaultsampletext{\normalfont\normalsize gT} +\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase +\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} + + + +% usage: \IEEEsettextwidth{inner margin}{outer margin} +% Sets \textwidth to allow the specified inner and outer margins +% for the current \paperwidth. +\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth +\@IEEEtrantmpdimenB#1\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\@IEEEtrantmpdimenB#2\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\textwidth\@IEEEtrantmpdimenA} + + + +% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} +% Sets \oddsidemargin and \evensidemargin to yield the specified margin +% of the given mode. +% The available modes are: +% i = inner margin +% o = outer margin +% c = centered, with the given offset +% a = adjust the margins using the given offset +% For the offsets, positive values increase the inner margin. +% \textwidth should be set properly for the given margins before calling this +% function. +\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax + \let\@IEEEextractedtoken=i\relax + \def\@IEEEextractedtokenmacro{i}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \divide\oddsidemargin by 2\relax + \advance\oddsidemargin by -1in\relax + \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken o\relax + \oddsidemargin\paperwidth + \advance\oddsidemargin by -\textwidth + \advance\oddsidemargin by -\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\else + \if\@IEEEextractedtoken i\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `i'}% + {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% + \fi + \oddsidemargin\@IEEEtrantmpdimenA + \advance\oddsidemargin by -1in\relax +\fi\fi\fi +% odd and even side margins both mean "inner" for single sided pages +\evensidemargin\oddsidemargin +% but are mirrors of each other when twosided is in effect +\if@twoside + \evensidemargin\paperwidth + \advance\evensidemargin by -\textwidth + \advance\evensidemargin by -\oddsidemargin + % have to compensate for both the builtin 1in LaTex offset + % and the fact we already subtracted this offset from \oddsidemargin + \advance\evensidemargin -2in\relax +\fi} + + + +% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} +% Sets \textheight based on the specified top margin and bottom margin. +% Takes into consideration \paperheight, \topskip, and (by default) the +% the actual height and depth of the \IEEEdefaultsampletext text. +\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} +\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax + \@IEEEtrantmpdimenA #2\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin + \@IEEEtrantmpdimenA #3\relax + \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin + \advance \textheight by \topskip% add \topskip + % subtract off everything above the top, and below the bottom, baselines + \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA + \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance \textheight by -\@IEEEtrantmpdimenA} + + + +\newdimen\IEEEquantizedlength +\IEEEquantizedlength 0sp\relax +\newdimen\IEEEquantizedlengthdiff +\IEEEquantizedlengthdiff 0sp\relax +\def\IEEEquantizedlengthint{0} + +% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} +% Sets the length \IEEEquantizedlength to be an integer multiple of the given +% (nonzero) base unit such that \IEEEquantizedlength approximates the given +% length. +% \IEEEquantizedlengthdiff is a length equal to the difference between the +% \IEEEquantizedlength and the given length. +% \IEEEquantizedlengthint is a macro containing the integer number of base units +% in \IEEEquantizedlength. +% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit +% The mode determines how \IEEEquantizedlength is quantized: +% d = always decrease (always round down \IEEEquantizeint) +% c = use the closest match +% i = always increase (always round up \IEEEquantizeint) +% In anycase, if the given length is already quantized, +% \IEEEquantizedlengthdiff will be set to zero. +\def\IEEEquantizelength#1#2#3{\begingroup +% work in isolation so as not to externally disturb the \@IEEEtrantmp +% variables +% load the argument values indirectly via \IEEEquantizedlengthdiff +% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, +% etc. in the arguments. we also will work with these as counters, +% i.e., in sp units +% A has the base unit +\IEEEquantizedlengthdiff #2\relax\relax\relax\relax +\@IEEEtrantmpcountA\IEEEquantizedlengthdiff +% B has the input length +\IEEEquantizedlengthdiff #3\relax\relax\relax\relax +\@IEEEtrantmpcountB\IEEEquantizedlengthdiff +\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax +\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax +% \@IEEEtrantmpcountC will have the quantized int +% \IEEEquantizedlength will have the quantized length +% \@IEEEtrantmpdimenC will have the quantized diff +% initialize them to zero as this is what will be +% exported if an error occurs +\@IEEEtrantmpcountC 0\relax +\IEEEquantizedlength 0sp\relax +\@IEEEtrantmpdimenC 0sp\relax +% extract mode +\@IEEEextracttoken{#1}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax + \let\@IEEEextractedtoken=d\relax + \def\@IEEEextractedtokenmacro{d}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% check for base unit is zero error +\ifnum\@IEEEtrantmpcountA=0\relax +\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax +\else% base unit is nonzero + % \@IEEEtrantmpcountC carries the number of integer units + % in the quantized length (integer length \ base) + \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax + \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax + % \IEEEquantizedlength has the (rounded down) quantized length + % = base * int + \IEEEquantizedlength\@IEEEtrantmpdimenA\relax + \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax + % \@IEEEtrantmpdimenC has the difference + % = quantized length - length + \@IEEEtrantmpdimenC\IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax + % trap special case of length being already quantized + % to avoid a roundup under i option + \ifdim\@IEEEtrantmpdimenC=0sp\relax + \else % length not is already quantized + % set dimenA to carry the upper quantized (absolute value) difference: + % quantizedlength + base - length + \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax + % set dimenB to carry the lower quantized (absolute value) difference: + % length - quantizedlength + \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax + % handle each mode + \if\@IEEEextractedtoken c\relax + % compare upper and lower amounts, select upper if lower > upper + \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax + % use upper + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else% <=. uselower + % no need to do anything for lower, use output values already setup + \fi + \else% not mode c + \if\@IEEEextractedtoken i\relax + % always round up under i mode + \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax + \advance\@IEEEtrantmpcountC by 1\relax + \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA + \else + \if\@IEEEextractedtoken d\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak + Defaulting to `d'}% + {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax + \fi % if d + % no need to do anything for d, use output values already setup + \fi\fi % if i, c + \fi % if length is already quantized +\fi% if base unit is zero +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +% \@IEEEtrantmpcountC has the quantized int +% \IEEEquantizedlength has the quantized length +% \@IEEEtrantmpdimenC has the quantized diff +\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax +\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax +\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax +\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} + + + +\newdimen\IEEEquantizedtextheightdiff +\IEEEquantizedtextheightdiff 0sp\relax + +% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} +% Sets \textheight to be an integer multiple of the current \baselineskip +% (or the optionally specified base unit) plus the first (\topskip) line. +% \IEEEquantizedtextheightdiff is a length equal to the difference between +% the new quantized and original \textheight. +% \IEEEquantizedtextheightlpc is a macro containing the integer number of +% lines per column under the quantized \textheight. i.e., +% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip +% The mode determines how \textheight is quantized: +% d = always decrease (always round down the number of lines per column) +% c = use the closest match +% i = always increase (always round up the number of lines per column) +% In anycase, if \textheight is already quantized, it will remain unchanged, +% and \IEEEquantizedtextheightdiff will be set to zero. +% Depends on: \IEEEquantizelength +\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} +\def\@IEEEquantizetextheight[#1]#2{\begingroup +% use our \IEEEquantizedtextheightdiff as a scratch pad +% we need to subtract off \topskip before quantization +\IEEEquantizedtextheightdiff\textheight +\advance\IEEEquantizedtextheightdiff by -\topskip\relax +\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} +% add back \topskip line +\advance\IEEEquantizedlength by \topskip +\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax +\advance\@IEEEtrantmpcountC by 1\relax +% globally assign the results to macros we use here to escape the enclosing +% group without needing to call \global on any of the \@IEEEtrantmp variables. +\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlength\relax +\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax +\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax +\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax +\endgroup +% locally assign the outputs here from the macros +\textheight\@IEEEquantizedtextheightmacro sp\relax +\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax +\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} + + + +% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} +% Sets \topmargin based on the specified vertical margin. +% Takes into consideration the base 1in offset, \headheight, \headsep, +% \topskip, and (by default) the the actual height (or, for the bottom, depth) +% of the \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin +% b = bottom margin +% c = vertically centered, with the given offset +% a = adjust the vertical margins using the given offset +% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset +% For the offsets, positive values increase the top margin. +% \headheight, \headsep, \topskip and \textheight should be set properly for the +% given margins before calling this function. +\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} +\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax +\@IEEEextracttoken{#2}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken q\relax + % we need to adjust by half the \IEEEquantizedtextheightdiff value + \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax + \divide\@IEEEtrantmpdimenB by 2\relax + % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin + % because \textheight has been lenghtened + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken c\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \divide\topmargin by 2\relax + \advance\topmargin by \@IEEEtrantmpdimenA\relax +\else +\if\@IEEEextractedtoken b\relax + \topmargin\paperheight + \advance\topmargin by -\textheight + % \textheight includes \topskip, but we should not count topskip whitespace here, backout + \advance \topmargin by \topskip + \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by -\@IEEEtrantmpdimenB\relax + \advance\topmargin by -\@IEEEtrantmpdimenA\relax +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax + \fi + \topmargin\@IEEEtrantmpdimenA\relax + \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\topmargin by \@IEEEtrantmpdimenB\relax +\fi\fi % if t, b, c +% convert desired top margin into actual \topmargin +% this is not done for the q or a modes because they are only adjustments +\advance \topmargin by -\topskip +\advance \topmargin by -1in +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep +\fi\fi % if q, a +} + + + +% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} +% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) +% based on the specified header margin. +% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) +% the actual height (or depth) of the \IEEEdefaultheadersampletext and +% \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the header text to the top of the page) +% b = bottom margin (bottom of the header text to the top of the main text) +% c = vertically centered between the main text and the top of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the header downward. +% \headheight, \headsep, \topskip and \topmargin should be set properly before +% calling this function. +\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} +\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \topmargin and \headsep will + % do all that is needed +\else +\if\@IEEEextractedtoken c\relax + % get the bottom margin + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % subtract from it the top header margin + \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by -\topmargin + \advance\@IEEEtrantmpdimenB by -\headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins + % we need to adjust by half this amount to center the header + \divide\@IEEEtrantmpdimenB by 2\relax + % and add to offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + \@IEEEtrantmpdimenB\headsep\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \advance\@IEEEtrantmpdimenB by \topskip + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin + \advance\@IEEEtrantmpdimenB by \topmargin + \advance\@IEEEtrantmpdimenB by \headheight + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual header top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \topmargin by the needed amount and reduce \headsep by the same +% so as not to disturb the location of the main text +\advance\topmargin by \@IEEEtrantmpdimenA\relax +\advance\headsep by -\@IEEEtrantmpdimenA\relax +} + + + +% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} +% Adjusts \footskip based on the specified footer margin. +% Takes into consideration the base 1in offset, \paperheight, \headheight, +% \headsep, \textheight and (by default) the actual height (or depth) of the +% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. +% The available modes are: +% t = top margin (top of the footer text to the bottom of the main text) +% b = bottom margin (bottom of the footer text to the bottom of page) +% c = vertically centered between the main text and the bottom of the page, +% with the given offset +% a = adjust the vertical position using the given offset +% For the offsets, positive values move the footer downward. +% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set +% properly before calling this function. +\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} +\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} +\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax +\@IEEEextracttoken{#3}\relax +% check for mode errors +\ifx\@IEEEextractedtokenmacro\@empty + \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax + \let\@IEEEextractedtoken=t\relax + \def\@IEEEextractedtokenmacro{t}\relax +\else + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi +\fi +% handle each mode +\if\@IEEEextractedtoken a\relax + % No need to do anything here and can pass through the adjustment + % value as is. The end adjustment of \footskip will do all that + % is needed +\else +\if\@IEEEextractedtoken c\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % now subtract off the footer top margin + \advance\@IEEEtrantmpdimenB -\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the difference between the bottom + % and top footer margins + % our adjustment must be half this value to center the footer + \divide\@IEEEtrantmpdimenB by 2\relax + % add to the offset + \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB +\else +\if\@IEEEextractedtoken b\relax + % calculate the bottom margin + \@IEEEtrantmpdimenB 1in\relax % system 1in offset + \advance\@IEEEtrantmpdimenB\topmargin\relax + \advance\@IEEEtrantmpdimenB\headheight\relax + \advance\@IEEEtrantmpdimenB\headsep\relax + \advance\@IEEEtrantmpdimenB\textheight\relax + \advance\@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB + \@IEEEtrantmpdimenB\paperheight + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin + % get the difference between the actual and the desired + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA + \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB +\else + \if\@IEEEextractedtoken t\relax + \else + \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak + Defaulting to `t'}% + {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax + \fi + \@IEEEtrantmpdimenB\footskip\relax + \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax + \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC + % at this point \@IEEEtrantmpdimenB has the actual footer top margin + % get the difference between the desired and the actual + \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB +\fi\fi % if t, b, c +\fi % if a +% advance \footskip by the needed amount +\advance\footskip by \@IEEEtrantmpdimenA\relax +} + +% -- End V1.8a page setup commands -- + + + + + +% V1.6 +% LaTeX is a little to quick to use hyphenations +% So, we increase the penalty for their use and raise +% the badness level that triggers an underfull hbox +% warning. The author may still have to tweak things, +% but the appearance will be much better "right out +% of the box" than that under V1.5 and prior. +% TeX default is 50 +\hyphenpenalty=750 +\ifCLASSOPTIONcompsoc +\hyphenpenalty 500 +\fi +% If we didn't adjust the interword spacing, 2200 might be better. +% The TeX default is 1000 +\hbadness=1350 +% The IEEE does not use extra spacing after punctuation +\frenchspacing + +% V1.7 increase this a tad to discourage equation breaks +\binoppenalty=1000 % default 700 +\relpenalty=800 % default 500 + +% v1.8a increase these to discourage widows and orphans +\clubpenalty=1000 % default 150 +\widowpenalty=1000 % default 150 +\displaywidowpenalty=1000 % default 50 + + +% margin note stuff +\marginparsep 10pt +\marginparwidth 20pt +\marginparpush 25pt + + +% if things get too close, go ahead and let them touch +\lineskip 0pt +\normallineskip 0pt +\lineskiplimit 0pt +\normallineskiplimit 0pt + +% The distance from the lower edge of the text body to the +% footline +\footskip 0.4in + +% normally zero, should be relative to font height. +% put in a little rubber to help stop some bad breaks (underfull vboxes) +\parskip 0ex plus 0.2ex minus 0.1ex + +\parindent 1.0em +\ifCLASSOPTIONcompsoc + \parindent 1.5em +\fi + +\headheight 12pt +\headsep 18pt +% use the normal font baselineskip +% so that \topskip is unaffected by changes in \baselinestretch +\topskip=\@IEEEnormalsizeunitybaselineskip + + +% V1.8 \maxdepth defaults to 4pt, but should be font size dependent +\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip +\textheight 58pc % 9.63in, 696pt + +% set the default top margin to 58pt +% which results in a \topmargin of -49.59pt for 10pt documents +\IEEEsettopmargin{t}{58pt} +% tweak textheight to a perfect integer number of lines/column. +% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc +\IEEEquantizetextheight{c} +% tweak top margin so that the error is shared equally at the top and bottom +\IEEEsettopmargin{q}{0sp} + + +\columnsep 1pc +\textwidth 43pc % 2 x 21pc + 1pc = 43pc + +% set the default side margins to center the text +\IEEEsetsidemargin{c}{0pt} + + +% adjust margins for default conference mode +\ifCLASSOPTIONconference + \textheight 9.25in % The standard for conferences (668.4975pt) + \IEEEsettopmargin{t}{0.75in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + +% compsoc text sizes, margins and spacings +\ifCLASSOPTIONcompsoc + \columnsep 12bp + % CS specs for \textwdith are 6.875in + % \textwidth 6.875in + % however, measurements from proofs show they are using 3.5in columns + \textwidth 7in + \advance\textwidth by \columnsep + % set the side margins to center the text + \IEEEsetsidemargin{c}{0pt} + % top/bottom margins to center + % could just set \textheight to 9.75in for all the different paper sizes + % and then quantize, but we'll do it the long way here to allow for easy + % future per-paper size adjustments + \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals + \IEEEsettopmargin{t}{0.625in} + \if@IEEEusingcspaper + \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in + \IEEEsettopmargin{t}{0.5in} + \fi + \if@IEEEusingAfourpaper + \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) + \IEEEsettopmargin{t}{24.675mm} + \fi + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + +% compsoc conference + \ifCLASSOPTIONconference + % compsoc conference use a larger value for columnsep + \columnsep 0.25in + \IEEEsettextwidth{0.75in}{0.75in} + % set the side margins to center the text (0.75in for letterpaper) + \IEEEsetsidemargin{c}{0pt} + % compsoc conferences want 1in top and bottom margin + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % tweak textheight to a perfect integer number of lines/page. + % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} + \fi +\fi + + + +% draft mode settings override that of all other modes +% provides a nice 1in margin all around the paper and extra +% space between the lines for editor's comments +\ifCLASSOPTIONdraftcls + % we want 1in side margins regardless of paper type + \IEEEsettextwidth{1in}{1in} + \IEEEsetsidemargin{c}{0pt} + % want 1in top and bottom margins + \IEEEsettextheight{1in}{1in} + \IEEEsettopmargin{t}{1in} + % digitize textheight to be an integer number of lines. + % this may cause the top and bottom margins to be off a tad + \IEEEquantizetextheight{c} + % tweak top margin so that the error is shared equally at the top and bottom + \IEEEsettopmargin{q}{0sp} +\fi + + + +% process CLASSINPUT inner/outer margin +% if inner margin defined, but outer margin not, set outer to inner. +\ifx\CLASSINPUTinnersidemargin\@IEEEundefined +\else + \ifx\CLASSINPUToutersidemargin\@IEEEundefined + \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} + \fi +\fi + +\ifx\CLASSINPUToutersidemargin\@IEEEundefined +\else + % if outer margin defined, but inner margin not, set inner to outer. + \ifx\CLASSINPUTinnersidemargin\@IEEEundefined + \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} + \fi + \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} + \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} + \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and + outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} +\fi + + + +% process CLASSINPUT top/bottom text margin +% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin +\ifx\CLASSINPUTtoptextmargin\@IEEEundefined +\else + \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined + \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} + \fi +\fi + +\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined +\else + % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin + \ifx\CLASSINPUTtoptextmargin\@IEEEundefined + \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} + \fi + \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} + \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} + \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and + bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} +\fi + + + +% default to center header and footer text in the margins +\IEEEsetheadermargin{c}{0pt} +\IEEEsetfootermargin{c}{0pt} + +% adjust header and footer positions for compsoc journals +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONjournal + \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} + \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} + \fi +\fi + + +% V1.8a display lines per column info message on user's console +\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight +% topskip represents only one line even if > baselineskip +\advance\@IEEEtrantmpdimenA by -1\topskip +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA +\divide\@IEEEtrantmpcountB by \baselineskip +% need to add one line to include topskip (first) line +\advance\@IEEEtrantmpcountB by 1 +% save lines per column value as text +\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} +% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison +\advance\@IEEEtrantmpcountB by -1 +% restore value as text height (without topskip) rather than just as number of lines +\multiply\@IEEEtrantmpcountB by \baselineskip +% is the column height an integer number of lines per column? +\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB +\edef\@IEEEnumlinespercolumnexactinfotxt{exact} +\else +\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax +\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax +\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} +\fi +\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} +% delay execution till start of document to allow for user changes +\AtBeginDocument{\IEEEdisplayinfolinespercolumn} + + + +% LIST SPACING CONTROLS + +% Controls the amount of EXTRA spacing +% above and below \trivlist +% Both \list and IED lists override this. +% However, \trivlist will use this as will most +% things built from \trivlist like the \center +% environment. +\topsep 0.5\baselineskip + +% Controls the additional spacing around lists preceded +% or followed by blank lines. the IEEE does not increase +% spacing before or after paragraphs so it is set to zero. +% \z@ is the same as zero, but faster. +\partopsep \z@ + +% Controls the spacing between paragraphs in lists. +% The IEEE does not increase spacing before or after paragraphs +% so this is also zero. +% With IEEEtran.cls, global changes to +% this value DO affect lists (but not IED lists). +\parsep \z@ + +% Controls the extra spacing between list items. +% The IEEE does not put extra spacing between items. +% With IEEEtran.cls, global changes to this value DO affect +% lists (but not IED lists). +\itemsep \z@ + +% \itemindent is the amount to indent the FIRST line of a list +% item. It is auto set to zero within the \list environment. To alter +% it, you have to do so when you call the \list. +% However, the IEEE uses this for the theorem environment +% There is an alternative value for this near \leftmargini below +\itemindent -1em + +% \leftmargin, the spacing from the left margin of the main text to +% the left of the main body of a list item is set by \list. +% Hence this statement does nothing for lists. +% But, quote and verse do use it for indention. +\leftmargin 2em + +% we retain this stuff from the older IEEEtran.cls so that \list +% will work the same way as before. However, itemize, enumerate and +% description (IED) could care less about what these are as they +% all are overridden. +\leftmargini 2em +%\itemindent 2em % Alternative values: sometimes used. +%\leftmargini 0em +\leftmarginii 1em +\leftmarginiii 1.5em +\leftmarginiv 1.5em +\leftmarginv 1.0em +\leftmarginvi 1.0em +\labelsep 0.5em +\labelwidth \z@ + + +% The old IEEEtran.cls behavior of \list is retained. +% However, the new V1.3 IED list environments override all the +% @list stuff (\@listX is called within \list for the +% appropriate level just before the user's list_decl is called). +% \topsep is now 2pt as the IEEE puts a little extra space around +% lists - used by those non-IED macros that depend on \list. +% Note that \parsep and \itemsep are not redefined as in +% the sizexx.clo \@listX (which article.cls uses) so global changes +% of these values DO affect \list +% +\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} +\let\@listI\@listi +\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% + \advance\labelwidth-\labelsep \topsep 2pt} +\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% + \advance\labelwidth-\labelsep \topsep 2pt} + + +% The IEEE uses 5) not 5. +\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} + +% The IEEE uses a) not (a) +\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} + +% The IEEE uses iii) not iii. +\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} + +% The IEEE uses A) not A. +\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} + +% exactly the same as in article.cls +\def\p@enumii{\theenumi} +\def\p@enumiii{\theenumi(\theenumii)} +\def\p@enumiv{\p@enumiii\theenumiii} + +% itemized list label styles +\def\labelitemi{$\scriptstyle\bullet$} +\def\labelitemii{\textbf{--}} +\def\labelitemiii{$\ast$} +\def\labelitemiv{$\cdot$} + + + +% **** V1.3 ENHANCEMENTS **** +% Itemize, Enumerate and Description (IED) List Controls +% *************************** +% +% +% The IEEE seems to use at least two different values by +% which ITEMIZED list labels are indented to the right +% For The Journal of Lightwave Technology (JLT) and The Journal +% on Selected Areas in Communications (JSAC), they tend to use +% an indention equal to \parindent. For Transactions on Communications +% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. +% We'll provide both values here for you so that you can choose +% which one you like in your document using a command such as: +% setlength{\IEEEilabelindent}{\IEEEilabelindentB} +\newdimen\IEEEilabelindentA +\IEEEilabelindentA \parindent + +\newdimen\IEEEilabelindentB +\IEEEilabelindentB 1.3\parindent +% However, we'll default to using \parindent +% which makes more sense to me +\newdimen\IEEEilabelindent +\IEEEilabelindent \IEEEilabelindentA + + +% This controls the default amount the enumerated list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEelabelindent +\IEEEelabelindent \parindent + +% This controls the default amount the description list labels +% are indented to the right. +% Normally, this is the same as the paragraph indention +\newdimen\IEEEdlabelindent +\IEEEdlabelindent \parindent + +% This is the value actually used within the IED lists. +% The IED environments automatically set its value to +% one of the three values above, so global changes do +% not have any effect +\newdimen\IEEElabelindent +\IEEElabelindent \parindent + +% The actual amount labels will be indented is +% \IEEElabelindent multiplied by the factor below +% corresponding to the level of nesting depth +% This provides a means by which the user can +% alter the effective \IEEElabelindent for deeper +% levels +% There may not be such a thing as correct "standard IEEE" +% values. What the IEEE actually does may depend on the specific +% circumstances. +% The first list level almost always has full indention. +% The second levels I've seen have only 75% of the normal indentation +% Three level or greater nestings are very rare. I am guessing +% that they don't use any indentation. +\def\IEEElabelindentfactori{1.0} % almost always one +\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases +\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? +\def\IEEElabelindentfactoriv{0.0} +\def\IEEElabelindentfactorv{0.0} +\def\IEEElabelindentfactorvi{0.0} + +% value actually used within IED lists, it is auto +% set to one of the 6 values above +% global changes here have no effect +\def\IEEElabelindentfactor{1.0} + +% This controls the default spacing between the end of the IED +% list labels and the list text, when normal text is used for +% the labels. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newdimen\IEEEiednormlabelsep +\IEEEiednormlabelsep 0.6em + +% This controls the default spacing between the end of the IED +% list labels and the list text, when math symbols are used for +% the labels (nomenclature lists). The IEEE usually increases the +% spacing in these cases +\newdimen\IEEEiedmathlabelsep +\IEEEiedmathlabelsep 1.2em + +% This controls the extra vertical separation put above and +% below each IED list. the IEEE usually puts a little extra spacing +% around each list. However, this spacing is barely noticeable. +% compsoc uses a larger value here, but we'll set that later +% in the class so that this code block area can be extracted +% as-is for IEEEtrantools.sty +\newskip\IEEEiedtopsep +\IEEEiedtopsep 2pt plus 1pt minus 1pt + + +% This command is executed within each IED list environment +% at the beginning of the list. You can use this to set the +% parameters for some/all your IED list(s) without disturbing +% global parameters that affect things other than lists. +% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} +% will alter the \labelsep for the next list(s) until +% \IEEEiedlistdecl is redefined. +\def\IEEEiedlistdecl{\relax} + +% This command provides an easy way to set \leftmargin based +% on the \labelwidth, \labelsep and the argument \IEEElabelindent +% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} +% output is in the \leftmargin variable, i.e., effectively: +% \leftmargin = argument + \labelwidth + \labelsep +% Note controlled spacing here, shield end of lines with % +\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% +\addtolength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}} + +% This command provides an easy way to set \labelwidth to the +% width of the given text. It is the same as +% \settowidth{\labelwidth}{label-text} +% and useful as a shorter alternative. +% Typically used to set \labelwidth to be the width +% of the longest label in the list +\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} + +% When this command is executed, IED lists will use the +% IEEEiedmathlabelsep label separation rather than the normal +% spacing. To have an effect, this command must be executed via +% the \IEEEiedlistdecl or within the option of the IED list +% environments. +\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} + +% A flag which controls whether the IED lists automatically +% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep +% Useful if you want to specify your own \leftmargin +% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) +% via the \IEEEiedlistdecl or within the option of the IED list +% environments to have an effect. +\newif\ifIEEEnocalcleftmargin +\IEEEnocalcleftmarginfalse + +% A flag which controls whether \IEEElabelindent is multiplied by +% the \IEEElabelindentfactor for each list level. +% This flag must be set via the \IEEEiedlistdecl or within the option +% of the IED list environments to have an effect. +\newif\ifIEEEnolabelindentfactor +\IEEEnolabelindentfactorfalse + + +% internal variable to indicate type of IED label +% justification +% 0 - left; 1 - center; 2 - right +\def\@IEEEiedjustify{0} + + +% commands to allow the user to control IED +% label justifications. Use these commands within +% the IED environment option or in the \IEEEiedlistdecl +% Note that changing the normal list justifications +% is nonstandard and the IEEE may not like it if you do so! +% I include these commands as they may be helpful to +% those who are using these enhanced list controls for +% other non-IEEE related LaTeX work. +% itemize and enumerate automatically default to right +% justification, description defaults to left. +\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left +\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center +\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right + + + + +% commands to save to and restore from the list parameter copies +% this allows us to set all the list parameters within +% the list_decl and prevent \list (and its \@list) +% from overriding any of our parameters +% V1.6 use \edefs instead of dimen's to conserve dimen registers +% Note controlled spacing here, shield end of lines with % +\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% +\edef\@IEEEiedlabelwidth{\the\labelwidth}% +\edef\@IEEEiedlabelsep{\the\labelsep}% +\edef\@IEEEiedleftmargin{\the\leftmargin}% +\edef\@IEEEiedpartopsep{\the\partopsep}% +\edef\@IEEEiedparsep{\the\parsep}% +\edef\@IEEEieditemsep{\the\itemsep}% +\edef\@IEEEiedrightmargin{\the\rightmargin}% +\edef\@IEEEiedlistparindent{\the\listparindent}% +\edef\@IEEEieditemindent{\the\itemindent}} + +% Note controlled spacing here +\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% +\labelwidth\@IEEEiedlabelwidth\relax% +\labelsep\@IEEEiedlabelsep\relax% +\leftmargin\@IEEEiedleftmargin\relax% +\partopsep\@IEEEiedpartopsep\relax% +\parsep\@IEEEiedparsep\relax% +\itemsep\@IEEEieditemsep\relax% +\rightmargin\@IEEEiedrightmargin\relax% +\listparindent\@IEEEiedlistparindent\relax% +\itemindent\@IEEEieditemindent\relax} + + +% v1.6b provide original LaTeX IED list environments +% note that latex.ltx defines \itemize and \enumerate, but not \description +% which must be created by the base classes +% save original LaTeX itemize and enumerate +\let\LaTeXitemize\itemize +\let\endLaTeXitemize\enditemize +\let\LaTeXenumerate\enumerate +\let\endLaTeXenumerate\endenumerate + +% provide original LaTeX description environment from article.cls +\newenvironment{LaTeXdescription} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} + + +% override LaTeX's default IED lists +\def\itemize{\@IEEEitemize} +\def\enditemize{\@endIEEEitemize} +\def\enumerate{\@IEEEenumerate} +\def\endenumerate{\@endIEEEenumerate} +\def\description{\@IEEEdescription} +\def\enddescription{\@endIEEEdescription} + +% provide the user with aliases - may help those using packages that +% override itemize, enumerate, or description +\def\IEEEitemize{\@IEEEitemize} +\def\endIEEEitemize{\@endIEEEitemize} +\def\IEEEenumerate{\@IEEEenumerate} +\def\endIEEEenumerate{\@endIEEEenumerate} +\def\IEEEdescription{\@IEEEdescription} +\def\endIEEEdescription{\@endIEEEdescription} + + +% V1.6 we want to keep the IEEEtran IED list definitions as our own internal +% commands so they are protected against redefinition +\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} +\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} +\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} +\def\@endIEEEitemize{\endlist} +\def\@endIEEEenumerate{\endlist} +\def\@endIEEEdescription{\endlist} + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran itemized list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEitemize[#1]{% + \ifnum\@itemdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@itemdepth\@ne% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEilabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % the user can override this later if + % they specified a \labelwidth + \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% + \@IEEEsavelistparams% save our list parameters + \list{\csname\@itemitem\endcsname}{% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran enumerate list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEenumerate[#1]{% + \ifnum\@enumdepth>3\relax\@toodeep\else% + \ifnum\@listdepth>5\relax\@toodeep\else% + \advance\@enumdepth\@ne% + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{2}% right justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEelabelindent% + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % calculate the label width + % We'll set it to the width suitable for all labels using + % normalfont 1) to 9) + % The user can override this later + \settowidth{\labelwidth}{9)}% + \@IEEEsavelistparams% save our list parameters + \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% + \@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % IEEElabelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}% + \fi}\fi\fi}% + + +% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS +% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS +% IEEEtran description list MDS 1/2001 +% Note controlled spacing here, shield end of lines with % +\def\@@IEEEdescription[#1]{% + \ifnum\@listdepth>5\relax\@toodeep\else% + % get the IEEElabelindentfactor for this level + \advance\@listdepth\@ne% we need to know what the level WILL be + \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% + \advance\@listdepth-\@ne% undo our increment + \def\@IEEEiedjustify{0}% left justified labels are default + % set other defaults + \IEEEnocalcleftmarginfalse% + \IEEEnolabelindentfactorfalse% + \topsep\IEEEiedtopsep% + \IEEElabelindent\IEEEdlabelindent% + % assume normal labelsep + \labelsep\IEEEiednormlabelsep% + \partopsep 0ex% + \parsep 0ex% + \itemsep 0ex% + \rightmargin 0em% + \listparindent 0em% + \itemindent 0em% + % Bogus label width in case the user forgets + % to set it. + % TIP: If you want to see what a variable's width is you + % can use the TeX command \showthe\width-variable to + % display it on the screen during compilation + % (This might be helpful to know when you need to find out + % which label is the widest) + \settowidth{\labelwidth}{Hello}% + \@IEEEsavelistparams% save our list parameters + \list{}{\@IEEErestorelistparams% override any list{} changes + % to our globals + \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel + \IEEEiedlistdecl% let user alter parameters + #1\relax% + % If the user has requested not to use the + % labelindent factor, don't revise \IEEElabelindent + \ifIEEEnolabelindentfactor\relax% + \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% + \fi% + % Unless the user has requested otherwise, + % calculate our left margin based + % on \IEEElabelindent, \labelwidth and + % \labelsep + \ifIEEEnocalcleftmargin\relax% + \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% + \fi}\fi} + +% v1.6b we use one makelabel that does justification as needed. +\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax +\makebox[\labelwidth][l]{\normalfont #1}\else +\if\@IEEEiedjustify 1\relax +\makebox[\labelwidth][c]{\normalfont #1}\else +\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} + + +% compsoc uses a larger value for the normal labelsep +% and also extra spacing above and below each list +\ifCLASSOPTIONcompsoc + \IEEEiednormlabelsep 1.2em + \IEEEiedtopsep 6pt plus 3pt minus 3pt +\fi + + +% VERSE and QUOTE +% V1.7 define environments with newenvironment +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent + \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} + {\endlist} +\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent + \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} + {\endlist} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} + {\endlist} + + +% \titlepage +% provided only for backward compatibility. \maketitle is the correct +% way to create the title page. +\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn + \else \newpage \fi \thispagestyle{empty}\c@page\z@} +\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} + +% standard values from article.cls +\arraycolsep 5pt +\arrayrulewidth .4pt +\doublerulesep 2pt + +\tabcolsep 6pt +\tabbingsep 0.5em + + +%% FOOTNOTES +% +%\skip\footins 10pt plus 4pt minus 2pt +% V1.6 respond to changes in font size +% space added above the footnotes (if present) +\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip + +% V1.6, we need to make \footnotesep responsive to changes +% in \baselineskip or strange spacings will result when in +% draft mode. Here is a little LaTeX secret - \footnotesep +% determines the height of an invisible strut that is placed +% *above* the baseline of footnotes after the first. Since +% LaTeX considers the space for characters to be 0.7\baselineskip +% above the baseline and 0.3\baselineskip below it, we need to +% use 0.7\baselineskip as a \footnotesep to maintain equal spacing +% between all the lines of the footnotes. The IEEE often uses a tad +% more, so use 0.8\baselineskip. This slightly larger value also helps +% the text to clear the footnote marks. Note that \thanks in IEEEtran +% uses its own value of \footnotesep which is set in \maketitle. +{\footnotesize +\global\footnotesep 0.8\baselineskip} + + +\skip\@mpfootins = \skip\footins +\fboxsep = 3pt +\fboxrule = .4pt +% V1.6 use 1em, then use LaTeX2e's \@makefnmark +% Note that the IEEE normally *left* aligns the footnote marks, so we don't need +% box resizing tricks here. +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em +% V1.7 compsoc does not use superscipts for footnote marks +\ifCLASSOPTIONcompsoc +\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} +\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} +\fi + +% The IEEE does not use footnote rules +\def\footnoterule{} + +% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" +% system to implement this. +\newif\if@IEEEenableoneshotfootnoterule +\@IEEEenableoneshotfootnoterulefalse +\ifCLASSOPTIONcompsoc +\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule +\kern-5pt +\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} +\kern4.6pt +\global\@IEEEenableoneshotfootnoterulefalse +\else +\relax +\fi} +\fi + +% V1.6 do not allow LaTeX to break a footnote across multiple pages +\interfootnotelinepenalty=10000 + +% V1.6 discourage breaks within equations +% Note that amsmath normally sets this to 10000, +% but LaTeX2e normally uses 100. +\interdisplaylinepenalty=2500 + +% default allows section depth up to /paragraph +\setcounter{secnumdepth}{4} + +% technotes do not allow /paragraph +\ifCLASSOPTIONtechnote + \setcounter{secnumdepth}{3} +\fi +% neither do compsoc conferences +\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} + + +\newcounter{section} +\newcounter{subsection}[section] +\newcounter{subsubsection}[subsection] +\newcounter{paragraph}[subsubsection] + +% used only by IEEEtran's IEEEeqnarray as other packages may +% have their own, different, implementations +\newcounter{IEEEsubequation}[equation] + +% as shown when called by user from \ref, \label and in table of contents +\def\theequation{\arabic{equation}} % 1 +\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) +\ifCLASSOPTIONcompsoc +% compsoc is all arabic +\def\thesection{\arabic{section}} +\def\thesubsection{\thesection.\arabic{subsection}} +\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} +\def\theparagraph{\thesubsubsection.\arabic{paragraph}} +\else +\def\thesection{\Roman{section}} % I +% V1.7, \mbox prevents breaks around - +\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A +% V1.7 use I-A1 format used by the IEEE rather than I-A.1 +\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 +\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a +\fi + +% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to +% tell hyperref to disable the \mbox command when making PDF bookmarks. +% This done already with hyperref.sty version 6.74o and later, but +% it will not hurt to do it here again for users of older versions. +\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% +\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} + + +% Main text forms (how shown in main text headings) +% V1.6, using \thesection in \thesectiondis allows changes +% in the former to automatically appear in the latter +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference + \def\thesectiondis{\thesection.} + \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} + \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} + \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} + \else% compsoc not conferencs + \def\thesectiondis{\thesection} + \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} + \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} + \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} + \fi +\else% not compsoc + \def\thesectiondis{\thesection.} % I. + \def\thesubsectiondis{\Alph{subsection}.} % B. + \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) + \def\theparagraphdis{\alph{paragraph})} % d) +\fi + +% just like LaTeX2e's \@eqnnum +\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) +% IEEEsubequation used only by IEEEtran's IEEEeqnarray +\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) +% redirect LaTeX2e's equation number display and all that depend on +% it, through IEEEtran's \theequationdis +\def\@eqnnum{\theequationdis} + + + +% V1.7 provide string macros as article.cls does +\def\contentsname{Contents} +\def\listfigurename{List of Figures} +\def\listtablename{List of Tables} +\def\refname{References} +\def\indexname{Index} +\def\figurename{Fig.} +\def\tablename{TABLE} +\@IEEEcompsocconfonly{\def\figurename{Figure}} +\def\partname{Part} +\def\appendixname{Appendix} +\def\abstractname{Abstract} +% IEEE specific names +\def\IEEEkeywordsname{Index Terms} +\def\IEEEproofname{Proof} + + +% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS +% +\def\@pnumwidth{1.55em} +\def\@tocrmarg{2.55em} +\def\@dotsep{4.5} +\setcounter{tocdepth}{3} + +% adjusted some spacings here so that section numbers will not easily +% collide with the section titles. +% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. +% MDS 1/2001 +\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} +\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% + \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% + \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% + \endgroup} +% argument format #1:level, #2:labelindent,#3:labelsep +\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} +\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} +% must provide \l@ defs for ALL sublevels EVEN if tocdepth +% is such as they will not appear in the table of contents +% these defs are how TOC knows what level these things are! +\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} +\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} +\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} +\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} +\def\listoftables{\section*{\listtablename}\@starttoc{lot}} +\let\l@table\l@figure + + +% Definitions for floats +% +% Normal Floats +% V1.8 floatsep et al. revised down by 0.15\baselineskip +% to account for the sideeffects of \topskip compensation +\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +\@fptop 0pt plus 1fil +\@fpsep 0.75\baselineskip plus 2fil +\@fpbot 0pt plus 1fil +\def\topfraction{0.9} +\def\bottomfraction{0.4} +\def\floatpagefraction{0.8} +% V1.7, let top floats approach 90% of page +\def\textfraction{0.1} + +% Double Column Floats +\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip + +\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip +% Note that it would be nice if the rubber here actually worked in LaTeX2e. +% There is a long standing limitation in LaTeX, first discovered (to the best +% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable +% portion of \dbltextfloatsep, and as a result, double column figures can and +% do result in an non-integer number of lines in the main text columns with +% underfull vbox errors as a consequence. A post to comp.text.tex +% by Donald Arseneau confirms that this had not yet been fixed in 1998. +% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't +% protect you from other double floats. Happy vspace'ing. + +\@dblfptop 0pt plus 1fil +\@dblfpsep 0.75\baselineskip plus 2fil +\@dblfpbot 0pt plus 1fil +\def\dbltopfraction{0.8} +\def\dblfloatpagefraction{0.8} +\setcounter{dbltopnumber}{4} + +\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip +\setcounter{topnumber}{2} +\setcounter{bottomnumber}{2} +\setcounter{totalnumber}{4} + + + +% article class provides these, we should too. +\newlength\abovecaptionskip +\newlength\belowcaptionskip +% but only \abovecaptionskip is used above figure captions and *below* table +% captions +\setlength\abovecaptionskip{0.5\baselineskip} +% compsoc journals are a little more generous +\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal + \setlength\abovecaptionskip{0.75\baselineskip} +\fi\fi +\setlength\belowcaptionskip{0pt} +% V1.6 create hooks in case the caption spacing ever needs to be +% overridden by a user +\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% +\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% + + +% 1.6b revise caption system so that \@makecaption uses two arguments +% as with LaTeX2e. Otherwise, there will be problems when using hyperref. +\def\@IEEEtablestring{table} + + +% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text +% here we calculate a space equal to the amount \topskip exceeds the main text height +% we hook in at \@floatboxreset +\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax +\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax +\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax +\vspace*{\@IEEEtrantmpdimenA}\fi} +% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline +% use a strut set on the caption baseline within \@makecaption +\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} +% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering +% because top of figure content and top of captions in tables is the first thing on the vertical +% list of these floats +% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. + + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc \@makecaption +\ifCLASSOPTIONconference% compsoc conference +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center +\else% +\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\fi\fi} +% +\else% nonconference compsoc +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, left justify +\else% +\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% +\fi\fi} +\fi +% +\else% traditional noncompsoc \@makecaption +\long\def\@makecaption#1#2{% +% test if is a for a figure or table +\ifx\@captype\@IEEEtablestring% +% if a table, do table caption +\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% +\@IEEEtablecaptionsepspace +% if not a table, format it as a figure +\else +\@IEEEfigurecaptionsepspace +% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% +\ifdim \wd\@tempboxa >\hsize% +% if caption is longer than a line, let it wrap around +\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% +\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% +% if caption is shorter than a line, center if conference, left justify otherwise +\else% +\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% +\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% +\fi\fi\fi} +\fi + + + +% V1.7 disable captions class option, do so in a way that retains operation of \label +% within \caption +\ifCLASSOPTIONcaptionsoff +\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% +\let\@IEEEtemporiglabeldefsave\label +\let\@IEEEtemplabelargsave\relax +\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% +\setbox\@tempboxa\hbox{#2}% +\let\label\@IEEEtemporiglabeldefsave +\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} +\fi + + +% V1.7 define end environments with \def not \let so as to work OK with +% preview-latex +\newcounter{figure} +\def\thefigure{\@arabic\c@figure} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset +\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} +\def\endfigure{\end@float} +% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* +\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} +\@namedef{endfigure*}{\end@dblfloat} + +\newcounter{table} +\ifCLASSOPTIONcompsoc +\def\thetable{\arabic{table}} +\else +\def\thetable{\@Roman\c@table} +\fi +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% V1.6 The IEEE uses 8pt text for tables +% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize +\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} +\def\endtable{\end@float} +% v1.6b double column tables need to default to footnotesize as well. +\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} +\@namedef{endtable*}{\end@dblfloat} + + + + +%% -- Command Argument Scanning Support Functions -- +%% V1.8a + +% usage: \@IEEEstripouterbraces*{} +% \@IEEEstripouterbraces fully expands its argument (which it then stores +% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing +% braces, and finally stores the result in the macro +% \@IEEEstrippedouterbraces. +% +% For example: +% \@IEEEstripouterbraces{{{{ab}c}}} +% results in: +% +% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} +% \@IEEEstrippedouterbraces ==> a macro containing {ab}c +% +% the *-star form,\@IEEEstripouterbraces*, does not expand the argument +% contents during processing +\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} + +\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax +% If the macro is unchanged after being acquired as a single delimited +% argument, we know we have one sequence of tokens without any enclosing +% braces. Loop until this is true. +\loop + \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER +\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg +\else + \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces +\repeat} + +\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} + + + +% usage: \@IEEEextractgroup*{} +% \@IEEEextractgroup fully expands its argument (which it then stores in +% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" +% of tokens to the macro \@IEEEextractedgroup. +% The remaining groups, if any, are stored in the macro +% \@IEEEextractedgroupremain. If the argument does not contain the requisite +% groups, the respective macros will be defined to be empty. +% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first +% outer grouping while \@IEEEextractedgroupremain retains even the outer +% grouping (if present) that originally identified it as a group. +% +% For example: +% \@IEEEextractgroup{{{ab}}{c{de}}} +% results in: +% +% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} +% \@IEEEextractedgroup ==> a macro containing {ab} +% \@IEEEextractedgroupremain ==> a macro containing {c{de}} +% +% The *-star form, \@IEEEextractgroup*, does not expand its argument +% contents during processing. +\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} + +\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax +% trap the case of an empty extracted group as this would cause problems with +% \@IEEEextractgroupremain's argument acquisition +\ifx\@IEEEextractgrouparg\@empty + \def\@IEEEextractedgroup{}\relax + \def\@IEEEextractedgroupremain{}\relax +\else + % We have to use some dirty tricks here. We want to insert {} around + % whatever remains after the first group so that TeX's argument scanner + % will preserve any originally enclosing braces as well as provide an + % empty argument to acquire even if there isn't a second group. + % In this first of two dirty tricks, we put a } at the end of the structure + % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow + % what would otherwise be an unbalanced macro definition for + % \@@IEEEextractgroup to be acceptable to it. + \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax +\fi} + +% In the second part of the dirty tricks, we insert a leading { right after +% the first group is acquired, but before the remainder is. Again, the +% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear +% during run time. +\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} + +\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} + + + +% \@IEEEextracttoken relocated at top because margin setting commands rely on it + + + +% usage: \@IEEEextracttokengroups*{} +% \@IEEEextracttokengroups fully expands its argument (which it then stores +% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of +% tokens (with the outermost braces removed) to the macro +% \@IEEEextractedfirstgroup. +% The meaning of the first nonbrace (but including the empty group) token +% within this first group is assigned via \let to \@IEEEextractedfirsttoken +% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first +% nonbrace token does not exist (or is an empty group), these will be \relax +% and empty, respectively. Tokens that would otherwise be discarded during +% the acquisition of the first token in the first group are stored in +% \@IEEEextractedfirsttokensdiscarded, however their original relative brace +% nesting depths are not guaranteed to be preserved. +% The first group within this first group is stored in the macro +% \@IEEEextractedfirstfirstgroup. +% Likewise for the next group after the first: \@IEEEextractednextgroup, +% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, +% \@IEEEextractednextgroupfirsttokenmacro, and +% \@IEEEextractednextfirsttokensdiscarded. +% All tokens/groups after the first group, including any enclosing braces, +% are stored in the macro \@IEEEextractedafterfirstgroupremain which will +% be empty if none exist. +% +% For example: +% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} +% will result in: +% +% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} +% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} +% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} +% \@IEEEextractedfirsttoken ==> the letter a +% \@IEEEextractedfirsttokenmacro ==> a macro containing a +% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd +% \@IEEEextractedfirstfirstgroup ==> a macro containing ab +% \@IEEEextractednextgroup ==> a macro containing {ef}g +% \@IEEEextractednextfirsttoken ==> the letter e +% \@IEEEextractednextfirsttokenmacro ==> a macro containing e +% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg +% \@IEEEextractednextfirstgroup ==> a macro containing ef +% +% If given an empty argument, \@IEEEextractedfirsttoken and +% \@IEEEextractednextfirsttoken will be set to \relax +% and all the macros will be empty. +% the *-star form, \@IEEEextracttokengroups*, does not expand its argument +% contents during processing. +% +% Depends on: \@IEEEextractgroup, \@IEEEextracttoken +\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} +\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax +% begin extraction, these functions are safe with empty arguments +% first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax +\let\@IEEEextractedfirstgroup\@IEEEextractedgroup +\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirsttoken\@IEEEextractedtoken +\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% first first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax +\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup +% next group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax +\let\@IEEEextractednextgroup\@IEEEextractedgroup +\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken +\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro +\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded +% next first group +\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax +\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} + + +%% -- End of Command Argument Scanning Support Functions -- + + + + +%% +%% START OF IEEEeqnarray DEFINITIONS +%% +%% Inspired by the concepts, examples, and previous works of LaTeX +%% coders and developers such as Donald Arseneau, Fred Bartlett, +%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, +%% Roland Winkler and Mark Wooding. +%% I don't make the claim that my work here is even near their calibre. ;) + + +\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form +\@IEEEeqnarrayboxnojotfalse + +\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter +% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray +% used by IEEEeqnarraymulticol so that it can work properly in both +\@advanceIEEEeqncolcnttrue + +\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined +\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used + + +% The default math style used by the columns +\def\IEEEeqnarraymathstyle{\displaystyle} +% The default text style used by the columns +% default to using the current font +\def\IEEEeqnarraytextstyle{\relax} + +% like the iedlistdecl but for \IEEEeqnarray +\def\IEEEeqnarraydecl{\relax} +\def\IEEEeqnarrayboxdecl{\relax} + + + +% V1.8 flags to indicate that equation numbering is to persist +\newif\if@IEEEeqnumpersist% +\@IEEEeqnumpersistfalse +\newif\if@IEEEsubeqnumpersist% +\@IEEEsubeqnumpersistfalse +% +% V1.8 flags to indicate if (sub)equation number of last line was preadvanced +\newif\if@IEEEeqnumpreadv% +\@IEEEeqnumpreadvfalse +\newif\if@IEEEsubeqnumpreadv% +\@IEEEsubeqnumpreadvfalse + +\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it + +% \yesnumber is the opposite of \nonumber +% a novel concept with the same def as the equationarray package +% However, we give IEEE versions too since some LaTeX packages such as +% the MDWtools mathenv.sty redefine \nonumber to something else. +% This command is intended for use in non-IEEEeqnarray math environments +\providecommand{\yesnumber}{\global\@eqnswtrue} + + +% IEEEyes/nonumber +% V1.8 add persistant * forms +% These commands can alter the type of equation an IEEEeqnarray line is. +\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} + +\def\@IEEEyesnumber{\global\@eqnswtrue +\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray +\ifnum\c@IEEEsubequation>0\relax + \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label +\fi +% even if we reached this eqn num via a preadv, it is legit now +\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse +\fi} + +\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} + + +\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} +% +\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is + \else% if we are a regular equation we have to watch out for two cases + \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum + \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax + \else% non-preadvanced equations just need initialization of their sub eqnnum + \setcounter{IEEEsubequation}{1}\relax + \fi + \fi% fi already is subequation + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \global\@eqnswtrue +\fi} + + +\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} +% +\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray + \if@eqnsw % we do nothing unless we know we will display because we play with the counters here + % if it currently is a subequation, bump up to the next equation number and turn off the subequation + \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax + \fi + \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore + \gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi +\fi} + + + +% allows users to "push away" equations that get too close to the equation numbers +\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} + +% provides a way to span multiple columns within IEEEeqnarray environments +% will consider \if@advanceIEEEeqncolcnt before globally advancing the +% column counter - so as to work within \IEEEeqnarraybox +% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} +\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax +% check if column is defined for the precolumn definition +% We have to be careful here because TeX scans for & even within an \iffalse +% where it does not expand macros. So, if we used only one \ifx and a #3 +% appeared in the false branch and the user inserted another alignment +% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that +% there is an inner alignment in the false branch yet still will see any & +% there and will think that they apply to the outer alignment resulting in an +% incomplete \ifx error. +% So, here we use separate checks for the pre and post parts in order to keep +% the #3 outside of all conditionals. +\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPRE#2\endcsname +\else% if not, error and use default type +\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname +\fi +% The ten \relax are to help prevent misleading error messages in case a user +% accidently inserted a macro that tries to acquire additional arguments. +#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax +% check if column is defined for the postcolumn definition +\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax +\csname @IEEEeqnarraycolPOST#2\endcsname +\else% if not, use the default type +\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname +\fi +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} + +% like \omit, but maintains track of the column counter for \IEEEeqnarray +\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} + + +% provides a way to define a letter referenced column type +% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} +\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% +\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} + + +% provides a way to define a numerically referenced inter-column glue types +% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} +\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% +\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} + + +\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types + + +% expands and appends the given argument to the \@IEEEtrantmptoksA token list +% used to build up the \halign preamble +\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% +\@@IEEEappendtoksA} + +% also appends to \@IEEEtrantmptoksA, but does not expand the argument +% uses \toks8 as a scratchpad register +\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% +\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% +\@@IEEEappendNOEXPANDtoksA} + +% define some common column types for the user +% math +\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} +\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} +\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} +\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} +% text +\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} +\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} + +% vertical rules +\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} +\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% +{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} + +% horizontal rules +\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} +\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} + +% plain +\IEEEeqnarraydefcol{x}{}{} +\IEEEeqnarraydefcol{X}{$}{$} + +% the default column type to use in the event a column type is not defined +\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} + + +% a zero tabskip (used for "-" col types) +\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} +% a centering tabskip (used for "+" col types) +\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} + +% top level default tabskip glues for the start, end, and inter-column +% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox +\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue +\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue +\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + + + +% creates a vertical rule that extends from the bottom to the top a a cell +% Provided in case other packages redefine \vline some other way. +% usage: \IEEEeqnarrayvrule[rule thickness] +% If no argument is provided, \arrayrulewidth will be used for the rule thickness. +\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} + +% creates a blank separator row +% usage: \IEEEeqnarrayseprow[separation length][font size commands] +% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} +\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + +% creates a blank separator row, but omits all the column templates +% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] +% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers +\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} +\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} +\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% +\ifx\@IEEEeqnarrayseprowARGONE\@empty% +% get the skip value, based on the font commands +% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 +% assign within a bogus box to confine the font changes +{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% +\else% +{\setbox0=\hbox{#2\relax\global\skip5=#1}}% +\fi% +\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} + + + +% draws a single rule across all the columns optional +% argument determines the rule width, \arrayrulewidth is the default +% updates column counter as needed and turns off struts +% usage: \IEEEeqnarrayrulerow[rule line thickness] +\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule +% turn off any struts +\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} + + +% draws a double rule by using a single rule row, a separator row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% +{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]\relax% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprow[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + +% draws a double rule by using a single rule row, a separator (cutting) row, and then +% another single rule row +% first optional argument determines the rule thicknesses, \arrayrulewidth is the default +% second optional argument determines the rule spacing, \doublerulesep is the default +% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] +\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} +\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% +{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} +\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% +% we allow the user to say \IEEEeqnarraydblrulerow[][] +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +\def\@IEEEeqnarraydblrulerowARG{#2}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% +\else% +\\\IEEEeqnarrayseprowcut[#2][\relax]% +\fi% +\\\multispan{\@IEEEeqnnumcols}% +% advance column counter only if the IEEEeqnarray environment wants it +\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% +\def\@IEEEeqnarraydblrulerowARG{#1}% +\ifx\@IEEEeqnarraydblrulerowARG\@empty% +\@IEEEeqnarrayrulerow[\arrayrulewidth]% +\else% +\@IEEEeqnarrayrulerow[#1]% +\fi% +} + + + +% inserts a full row's worth of &'s +% relies on \@IEEEeqnnumcols to provide the correct number of columns +% uses \@IEEEtrantmptoksA, \count0 as scratch registers +\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% +\loop% add cols if the user did not use them all +\ifnum\count0<\@IEEEeqnnumcols\relax% +\@IEEEappendtoksA{&}% +\advance\count0 by 1\relax% update the col count +\repeat% +\the\@IEEEtrantmptoksA%execute the &'s +} + + + +\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines +\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl + +\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts +\edef\@IEEEeqnarrayTHEstrutdepth{0pt} + +\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of +\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray + +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth + +\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value +\@IEEEeqnarrayusemasterstruttrue % is to be used + + + +% saves the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutsave{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% save values +\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} + +% restores the strut height and depth of the master strut +\def\@IEEEeqnarraymasterstrutrestore{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} + + +% globally restores the strut height and depth to the +% master values and sets the master strut flag to true +\def\@IEEEeqnarraystrutreset{\relax% +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% remove stretchability +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% restore values +\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\global\@IEEEeqnarrayusemasterstruttrue} + + +% if the master strut is not to be used, make the current +% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth +% and the use master strut flag, global +% this allows user strut commands issued in the last column to be carried +% into the isolation/strut column +\def\@IEEEeqnarrayglobalizestrutstatus{\relax% +\if@IEEEeqnarrayusemasterstrut\else% +\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% +\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% +\global\@IEEEeqnarrayusemasterstrutfalse% +\fi} + + + +% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, sets the height +% and depth of both the master and local struts. If called inside +% an IEEEeqnarray line, sets the height and depth of the local strut +% only and sets the flag to indicate the use of the local strut +% values. If the height or depth is left blank, 0.7\normalbaselineskip +% and 0.3\normalbaselineskip will be used, respectively. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% +\skip0=\skip3\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizeARG{#2}% +\ifx\@IEEEeqnarraystrutsizeARG\@empty% +{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% +\skip2=\skip3\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] +% If called outside the lines of an IEEEeqnarray, adds the given height +% and depth to both the master and local struts. +% If called inside an IEEEeqnarray line, adds the given height and depth +% to the local strut only and sets the flag to indicate the use +% of the local strut values. +% In both cases, if a height or depth is left blank, 0pt is used instead. +% The optional argument can be used to evaluate the lengths under +% a different font size and styles. If none is specified, the current +% font is used. +% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 +\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} +\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip0=0pt\relax% +\else% arg one present +{\setbox0=\hbox{#3\relax\global\skip3=#1}}% +\skip0=\skip3\relax% +\fi% if null arg +\def\@IEEEeqnarraystrutsizearg{#2}% +\ifx\@IEEEeqnarraystrutsizearg\@empty% +\skip2=0pt\relax% +\else% arg two present +{\setbox0=\hbox{#3\relax\global\skip3=#2}}% +\skip2=\skip3\relax% +\fi% if null arg +% remove stretchability, just to be safe +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +\if@IEEEeqnarrayISinner% inner does not touch master strut size +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local strut size +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstrutfalse% do not use master +\else% outer, have to set master strut too +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +% add it to the user supplied values +\advance\dimen0 by \skip0\relax% +\advance\dimen2 by \skip2\relax% +% update the local and master strut sizes +\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% +\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% +\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% +\@IEEEeqnarrayusemasterstruttrue% use master strut +\fi} + + +% allow user a way to see the struts +\newif\ifIEEEvisiblestruts +\IEEEvisiblestrutsfalse + +% inserts an invisible strut using the master or local strut values +% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 +\def\@IEEEeqnarrayinsertstrut{\relax% +\if@IEEEeqnarrayusemasterstrut +% get master strut size +\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% +\else% +% get local strut size +\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% +\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +% dimen0 = height, dimen2 = depth +% allow user to see struts if desired +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0pt height\dimen0 depth\dimen2\relax\fi} + + +% creates an invisible strut, useable even outside \IEEEeqnarray +% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. +% usage: \IEEEstrut[height][depth][font size commands] +% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] +% blank arguments inherit the default values +% uses \dimen0, \dimen2, \skip0, \skip2 +\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} +\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} +\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} +\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% +\def\@IEEEstrutARG{#1}% +\ifx\@IEEEstrutARG\@empty% +\skip0=0.7\normalbaselineskip\relax% +\else% +\skip0=#1\relax% +\fi% +\def\@IEEEstrutARG{#2}% +\ifx\@IEEEstrutARG\@empty% +\skip2=0.3\normalbaselineskip\relax% +\else% +\skip2=#2\relax% +\fi% +% remove stretchability, probably not needed +\dimen0\skip0\relax% +\dimen2\skip2\relax% +\ifIEEEvisiblestruts% +\vrule width0.2pt height\dimen0 depth\dimen2\relax% +\else% +\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} + + +% enables strut mode by setting a default strut size and then zeroing the +% \baselineskip, \lineskip, \lineskiplimit and \jot +\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% +\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} + + +% equation and subequation forms to use to setup hyperref's \@currentHref +\def\@IEEEtheHrefequation{equation.\theHequation} +\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} + + +\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\def\endIEEEeqnarray{\end@IEEEeqnarray} + +\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} +\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} + + +% \IEEEeqnarray is an enhanced \eqnarray. +% The star form defaults to not putting equation numbers at the end of each row. +% usage: \IEEEeqnarray[decl]{cols} +\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} +\def\@@@IEEEeqnarray[#1]#2{\endgroup + % default to showing the equation number or not based on whether or not + % the star form was involked + \if@IEEEeqnumpersist\global\@eqnswtrue + \else% not the star form + \global\@eqnswfalse + \fi% if star form + % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) + \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax + % provide dummy hyperref commands in case hyperref is not loaded + \providecommand{\Hy@raisedlink}[1]{}\relax + \providecommand{\hyper@anchorstart}[1]{}\relax + \providecommand{\hyper@anchorend}{}\relax + \providecommand{\@currentHref}{}\relax + \@IEEEeqnumpreadvfalse% reset eqnpreadv flag + \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag + \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax + \lineskiplimit=0pt\relax + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + %V1.8 Here we preadvance to the next equation number. + % If the user later wants a continued subequation, we can roll back. + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% + \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line + \setcounter{IEEEsubequation}{0}% no subequation yet + \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally + \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally + \def\@currentlabel{\p@equation\theequation}% redefine the ref label + \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers + \global\@IEEEeqncolcnt\z@% col. count = 0 for first line + \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % put in the column for the equation number + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking + \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the isolation column + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking + \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% + % add the equation number col to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% + % note \@IEEEeqnnumcols does not count the equation col or isolation col + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the display alignment + \@IEEEeqnarrayISinnertrue% commands are now within the lines + $$\everycr{}\halign to\displaywidth\bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% enter isolation/strut column (or the next column if the user did not use +% every column), record the strut status, complete the columns, do the strut if needed, +% restore counters (to backout any equation setup for a next line that was never used) +% to their correct values and exit +\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup +\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi +\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi +\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label +\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label +$$\@ignoretrue} + + +% IEEEeqnarray uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\*[vskip amount] +% These "cr" macros are modified versions of those for LaTeX2e's eqnarray +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the next column +% as there is an isolation/strut column after the user's columns +\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@IEEEeqnarrayYCR + }{% + \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR + }% +} + +\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} + +\def\@IEEEeqnarrayXCR[#1]{% + \ifnum0=`{\fi}% + \@@IEEEeqnarraycr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% + +\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register + \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column + \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax + \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak + environment}% + {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak + specifications.}\relax% + \else + \loop% add cols if the user did not use them all + \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax + \@IEEEappendtoksA{&}% + \advance\@IEEEeqncolcnt by 1\relax% update the col count + \repeat + % this number of &'s will take us the the isolation column + \fi + % execute the &'s + \the\@IEEEtrantmptoksA% + % handle the strut/isolation column + \@IEEEeqnarrayinsertstrut% do the strut if needed + \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray + &% and enter the equation number column + \if@eqnsw% only if we display something + \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor + \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means + \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations + % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* + % equation line as would be the case under the current settings. However, there are two problems. + % One problem is that there might not ever be a next line. The second problem is that the user + % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle + % these cases we have to record the current values of the (sub)equation counters and revert back + % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv + % and \@IEEEsubeqnnumrollback stuff tracks this. + % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is + % that the equation counters and labels remain valid for what the line would be unless a + % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. + \ifnum\c@IEEEsubequation>0\relax% handle subequation + \theIEEEsubequationdis\relax + \if@IEEEsubeqnumpersist% setup for default type of next line + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \else% display a standard equation number + \theequationdis\relax + \setcounter{IEEEsubequation}{0}\relax% not really needed + \if@IEEEsubeqnumpersist% setup for default type of next line + % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a + \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax + \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax + \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label + \else + % if no subeqnum persist, go ahead and setup for a new equation number + \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation + \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax + \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax + \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label + \fi + \fi% + \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor + \fi% fi only if we display something + % reset the flags to indicate the default preferences of the display of equation numbers + \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi + \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag + % reset the number of columns the user actually used + \global\@IEEEeqncolcnt\z@\relax + % the real end of the line + \cr} + + + + + +% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything +% inside a vtop, vbox, or vcenter box depending on the letter in the second +% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, +% equation numbers are not displayed and \IEEEeqnarraybox can be nested. +% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox +% within an hbox. +% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within +% a \hbox{$ $} construct. +% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or +% \IEEEeqnarrayboxt depending on the math mode. +% The third optional argument specifies the width this box is to be set to - +% natural width is the default. +% The * forms do not add \jot line spacing +% usage: \IEEEeqnarraybox[decl][pos][width]{cols} +\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} +\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} + +\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} + +\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% +\@IEEEeqnarraybox} +\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} + +% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} +% for \vcenter in non-math mode +\newif\if@IEEEeqnarrayboxHBOXSW% +\@IEEEeqnarrayboxHBOXSWfalse + +\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} +% We have to be careful here to normalize catcodes just before acquiring the +% cols as that specification may contain punctuation which could be subject +% to document catcode changes. +\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} +\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} + +% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs +\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign + \@IEEEeqnarraymasterstrutsave% save current master strut values + \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default + \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise + \IEEEvisiblestrutsfalse% diagnostic mode defaults to off + % no extra space unless the user specifically requests it + \lineskip=0pt\relax% + \lineskiplimit=0pt\relax% + \baselineskip=\normalbaselineskip\relax% + \jot=\IEEEnormaljot\relax% + \mathsurround\z@\relax% no extra spacing around math + % the default end glues are zero for an \IEEEeqnarraybox + \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue + \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue + \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue + \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, + % used in \IEEEeqnarraymulticol and in the preamble build + \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides + #1\relax% allow user to override defaults + \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing + \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA + % add an isolation column to the preamble to stop \\'s {} from getting into the last col + \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first + \toks0={##}% + % add the isolation column to the preamble + \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% + % set the starting tabskip glue as determined by the preamble build + \tabskip=\@IEEEBPstartglue\relax + % begin the alignment + \everycr{}% + % use only the very first token to determine the positioning + \@IEEEextracttoken{#2}\relax + \ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax + \fi + % \@IEEEextractedtoken has the first token, the rest are ignored + % if we need to put things into and hbox and go into math mode, do so now + \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% + % use the appropriate vbox type + \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% + \vcenter\else\vbox\fi\fi\bgroup% + \@IEEEeqnarrayISinnertrue% commands are now within the lines + \ifx#3\relax\halign\else\halign to #3\relax\fi% + \bgroup + % "exspand" the preamble + \span\the\@IEEEtrantmptoksA\cr} + +% carry strut status and enter the isolation/strut column, +% exit from math mode if needed, and exit +\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values +% reset the strut system for next IEEEeqnarray +% (sets local strut values back to previous master strut values) +\@IEEEeqnarraystrutreset% +% ensure last line, exit from halign, close vbox +\crcr\egroup\egroup% +% exit from math mode and close hbox if needed +\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} + + + +% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to +% end rows. This allows for things like \\[vskip amount] +% This "cr" macros are modified versions those for LaTeX2e's eqnarray +% For IEEEeqnarraybox, \\* is the same as \\ +% the {\ifnum0=`} braces must be kept away from the last column to avoid +% altering spacing of its math, so we use & to advance to the isolation/strut column +% carry strut status into isolation/strut column +\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status +&% enter isolation/strut column +\@IEEEeqnarrayinsertstrut% do strut if needed +% reset the strut system for next line or IEEEeqnarray +\@IEEEeqnarraystrutreset% +{\ifnum0=`}\fi% +\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} + +% test and setup the optional argument to \\[] +\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} + +% IEEEeqnarraybox does not automatically increase line spacing by \jot +\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% +\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} + + + +% usage: \@IEEEbuildpreamble{column specifiers} +% starts the halign preamble build +% the assembled preamble is put in \@IEEEtrantmptoksA +\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register +\let\@IEEEBPcurtype=u%current column type is not yet known +\let\@IEEEBPprevtype=s%the previous column type was the start +\let\@IEEEBPnexttype=u%next column type is not yet known +% ensure these are valid +\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% +\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition +% currently acquired numerically referenced glue +% use a name that is easier to remember +\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% +\@IEEEBPcurnum=0% +% tracks number of columns in the preamble +\@IEEEeqnnumcols=0% +% record the default end glues +\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% +\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% +\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers +% now parse the user's column specifications +% \ignorespaces is used as a delimiter, need at least one trailing \relax because +% \@@IEEEbuildpreamble looks into the future +\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} + + +% usage: \@@IEEEbuildpreamble{current column}{next column} +% parses and builds the halign preamble +\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% +% use only the very first token to check the end +\@IEEEextracttokengroups{#1}\relax +\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% +% identify current and next token type +\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid +\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next +% if curtype is a glue, get the glue def +\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% +% if curtype is a column, get the column def and set the current column name +\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% +% if curtype is a numeral, acquire the user defined glue +\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% +% process the acquired glue +\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% +% process the acquired col +\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% +% ready prevtype for next col spec. +\let\@IEEEBPprevtype=\@IEEEBPcurtype% +% be sure and put back the future token(s) as a group +\fi\@@nextIEEEbuildpreamble{#2}} + + +% usage: \@@IEEEfinishpreamble{discarded} +% executed just after preamble build is completed +% warn about zero cols, and if prevtype type = u, put in end tabskip glue +% argument is not used +\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax +\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% +{At least one column type must be declared for each IEEEeqnarray.}% +\fi%num cols less than 1 +%if last type undefined, set default end tabskip glue +\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} + + +% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} +% Identify and return the column specifier's type code in the given +% \output macro: +% n = number +% g = glue (any other char in catagory 12) +% c = letter +% e = \ignorespaces (end of sequence) +% u = undefined +% error mode: 0 = no error message, 1 = error on invalid char +\def\@IEEEgetcoltype#1#2#3{% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +% \@IEEEextractedtoken has the first token, the rest are discarded +\let#2=u\relax% assume invalid until know otherwise +\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else +\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences +\if0\@IEEEextractedtoken\let#2=n\else +\if1\@IEEEextractedtoken\let#2=n\else +\if2\@IEEEextractedtoken\let#2=n\else +\if3\@IEEEextractedtoken\let#2=n\else +\if4\@IEEEextractedtoken\let#2=n\else +\if5\@IEEEextractedtoken\let#2=n\else +\if6\@IEEEextractedtoken\let#2=n\else +\if7\@IEEEextractedtoken\let#2=n\else +\if8\@IEEEextractedtoken\let#2=n\else +\if9\@IEEEextractedtoken\let#2=n\else +\ifcat,\@IEEEextractedtoken\let#2=g\relax +\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi +\if#2u\relax +\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% +{Only letters, numerals and certain other symbols are allowed \MessageBreak +as IEEEeqnarray column specifiers.}\fi\fi} + + +% usage: \@IEEEgetcurcol{col specifier} +% verify the letter referenced column exists +% and return its name in \@IEEEBPcurcolname +% if column specifier is invalid, use the default column @IEEEdefault +\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% +\def\@IEEEBPcurcolname{#1}\else% invalid column name +\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak +Using a default centering column instead}% +{You must define IEEEeqnarray column types before use.}% +\def\@IEEEBPcurcolname{@IEEEdefault}\fi} + + +% usage: \@IEEEgetcurglue{glue specifier}{\output} +% identify the predefined (punctuation) glue value +% and return it in the given output macro +\def\@IEEEgetcurglue#1#2{% +% ! = \! (neg small) -0.16667em (-3/18 em) +% , = \, (small) 0.16667em ( 3/18 em) +% : = \: (med) 0.22222em ( 4/18 em) +% ; = \; (large) 0.27778em ( 5/18 em) +% ' = \quad 1em +% " = \qquad 2em +% . = 0.5\arraycolsep +% / = \arraycolsep +% ? = 2\arraycolsep +% * = 1fil +% + = \@IEEEeqnarraycolSEPcenter +% - = \@IEEEeqnarraycolSEPzero +% Note that all em values are referenced to the math font (textfont2) fontdimen6 +% value for 1em. +% +% use only the very first token to determine the type +\@IEEEextracttoken{#1}\relax +\ifx\@IEEEextractedtokensdiscarded\@empty\else + \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax +\fi +% get the math font 1em value +% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs +% to gain access to the math (\textfont2) font's spacing parameters. +% So we create a bogus box here that uses the math font to ensure +% that \textfont2 is loaded and ready. If this is not done, +% the \textfont2 stuff here may not work. +% Thanks to Bernd Raichle for his 1997 post on this topic. +{\setbox0=\hbox{$\displaystyle\relax$}}% +% fontdimen6 has the width of 1em (a quad). +\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% +% identify the glue value based on the first token +% we discard anything after the first +\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else +\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else +\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else +\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else +\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else +\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else +\edef#2{\@IEEEeqnarraycolSEPzero}% +\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak +IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + + +% usage: \@IEEEprocessNcol{digit} +% process a numerical digit from the column specification +% and look up the corresponding user defined glue value +% can transform current type from n to g or a as the user defined glue is acquired +\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded +\@IEEEBPcurnum=0\relax% +\else% if we previously aborted a glue +\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion +\else%acquire this number +% save the previous type before the numerical digits started +\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% +\multiply\@IEEEBPcurnum by 10\relax% +\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan +\if\@IEEEBPnexttype n\else%close acquisition +\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% +\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% +\else%user glue not defined +\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak +column specifications. Using a default value of\MessageBreak +0pt instead}% +{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak +\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% +\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% +\fi% glue defined or not +\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue +\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue +\@IEEEBPcurnum=0\relax%ready for next acquisition +\fi%close acquisition, get glue +\fi%discard or acquire number +\fi%prevtype glue or not +} + + +% process an acquired glue +% add any acquired column/glue pair to the preamble +\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions +\else +% if this is the start glue, save it, but do nothing else +% as this is not used in the preamble, but before +\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% +\else%not the start glue +\if\@IEEEBPprevtype g%ignore if back to back glues +\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak +specifications. Ignoring consecutive glue specifiers\MessageBreak +after the first}% +{You cannot have two or more glue types next to each other\MessageBreak +in the IEEEeqnarray column specifications.}% +\let\@IEEEBPcurtype=a% abort this glue +\else% not a back to back glue +\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column defintion into the preamble, being careful not to expand +% the column definition +\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\else% error: non-start glue with no pending column +\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak +type in the column specifications. Ignoring this glue\MessageBreak +specifier}% +{Except for the first and last positions, glue can be placed only\MessageBreak +between column types.}% +\let\@IEEEBPcurtype=a% abort this glue +\fi% previous was a column +\fi% back-to-back glues +\fi% is start column glue +\fi% prev type not a +} + + +% process an acquired letter referenced column and, if necessary, add it to the preamble +\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else +\if\@IEEEBPnexttype n\else +% we have a column followed by something other than a glue (or numeral glue) +% so we must add this column to the preamble now +\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first +\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue +\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue +\toks0={##}% +% make preamble advance col counter if this environment needs this +\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi +% insert the column definition into the preamble, being careful not to expand +% the column definition +\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname}% +\@IEEEappendtoksA{\the\toks0}% +\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% +\@IEEEappendtoksA{\@IEEEBPcurcolname}% +\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% +\relax\relax\relax\relax\relax\endgroup}% +\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble +\fi%next type not numeral +\fi%next type not glue +} + + +%% +%% END OF IEEEeqnarray DEFINITIONS +%% + + + + + +% set up the running headers and footers +% +% header and footer font and size specifications +\def\@IEEEheaderstyle{\normalfont\scriptsize} +\def\@IEEEfooterstyle{\normalfont\scriptsize} +% +% compsoc uses sans-serif headers and footers +\ifCLASSOPTIONcompsoc + \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} + \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} +\fi + + +% standard page style, ps@headings +\def\ps@headings{% default to standard twoside headers, no footers +% will change later if the mode requires otherwise +\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +\ifCLASSOPTIONtechnote + % technote twoside + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\fi +\ifCLASSOPTIONdraftcls + % draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax +\fi +% oneside +\if@twoside\else + % standard one side headers + \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax + \let\@evenhead\@empty + \ifCLASSOPTIONdraftcls + % oneside draft footers + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \let\@evenfoot\@empty + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi +% turn off footers for draftclsnofoot +\ifCLASSOPTIONdraftclsnofoot + \let\@oddfoot\@empty + \let\@evenfoot\@empty +\fi} + + +% title page style, ps@IEEEtitlepagestyle +\def\ps@IEEEtitlepagestyle{% default title page headers, no footers +\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax +\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for title pages that are using a pubid + % do not repeat pubid on the title page if using a peer review cover page + \ifCLASSOPTIONpeerreview\else + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi + \fi +\fi +% turn off headers for conferences +\ifCLASSOPTIONconference + \let\@oddhead\@empty + \let\@evenhead\@empty +\fi} + + +% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle +\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers +\let\@oddhead\@empty +\let\@evenhead\@empty +\let\@oddfoot\@empty +\let\@evenfoot\@empty +% will change later if the mode requires otherwise +\ifCLASSOPTIONdraftcls + % draft footers + \ifCLASSOPTIONdraftclsnofoot\else + % but only if not draftclsnofoot + \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax + \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax + \fi +\else + % all nondraft mode footers + \if@IEEEusingpubid + % for peer review cover pages that are using a pubid + % for noncompsoc papers, the pubid uses footnotesize and + % is at the same vertical position as where the last baseline would normally be + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \ifCLASSOPTIONcompsoc + % for compsoc papers, the pubid is at the same vertical position as the normal footer + \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax + \fi + \fi +\fi} + + + +%% Defines the command for putting the header. +%% Note that all the text is forced into uppercase, if you have some text +%% that needs to be in lower case, for instance et. al., then either manually +%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the +%% arguments to \markboth. +%% V1.7b add \protect to work with Babel +\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% +\def\rightmark{\MakeUppercase{\protect#2}}} + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} + + + + +%% CITATION AND BIBLIOGRAPHY COMMANDS +%% +%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff +% +% +% Modify Latex2e \@citex to separate citations with "], [" +\def\@citex[#1]#2{% + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{], [}% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} + +% V1.6 we create hooks for the optional use of Donald Arseneau's +% cite.sty package. cite.sty is "smart" and will notice that the +% following format controls are already defined and will not +% redefine them. The result will be the proper sorting of the +% citation numbers and auto detection of 3 or more entry "ranges" - +% all in IEEE style: [1], [2], [5]--[7], [12] +% This also allows for an optional note, i.e., \cite[mynote]{..}. +% If the \cite with note has more than one reference, the note will +% be applied to the last of the listed references. It is generally +% desired that if a note is given, only one reference is listed in +% that \cite. +% Thanks to Mr. Arseneau for providing the required format arguments +% to produce the IEEE style. +\def\citepunct{], [} +\def\citedash{]--[} + +% V1.7 default to using same font for urls made by url.sty +\AtBeginDocument{\csname url@samestyle\endcsname} + +% V1.6 class files should always provide these +\def\newblock{\hskip .11em\@plus.33em\@minus.07em} +\let\@openbib@code\@empty +% V1.8b article.cls is now providing these too +% we do not use \@mkboth, nor alter the page style +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi + \twocolumn[\section*{\indexname}]% + \parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\if@restonecol\onecolumn\else\clearpage\fi} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} + + + +% Provide support for the control entries of IEEEtran.bst V1.00 and later. +% V1.7 optional argument allows for a different aux file to be specified in +% order to handle multiple bibliographies. For example, with multibib.sty: +% \newcites{sec}{Secondary Literature} +% \bstctlcite[@auxoutsec]{BSTcontrolhak} +\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +\def\@bstctlcite[#1]#2{\@bsphack + \@for\@citeb:=#2\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% + \@esphack} + +% \IEEEnoauxwrite{} allows for citations that do not add to or affect +% the order of the existing citation list. Can be useful for \cite +% within \thanks{}. +\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax +\if@filesw +\@fileswfalse +#1\relax\relax\relax\relax\relax +\@fileswtrue +\else +#1\relax\relax\relax\relax\relax +\fi} + +% V1.6 provide a way for a user to execute a command just before +% a given reference number - used to insert a \newpage to balance +% the columns on the last page +\edef\@IEEEtriggerrefnum{0} % the default of zero means that + % the command is not executed +\def\@IEEEtriggercmd{\newpage} + +% allow the user to alter the triggered command +\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} + +% allow user a way to specify the reference number just before the +% command is executed +\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% +\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% + +% trigger command at the given reference +\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% +\advance\@IEEEtrantmpcountA by -1\relax% +\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} + + +\def\@biblabel#1{[#1]} + +% compsoc journals and conferences left align the reference numbers +\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} + +% controls bib item spacing +\def\IEEEbibitemsep{0pt plus .5pt} + +\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} + + +\def\thebibliography#1{\section*{\refname}% + \addcontentsline{toc}{section}{\refname}% + % V1.6 add some rubber space here and provide a command trigger + \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep\relax + \itemsep \IEEEbibitemsep\relax + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \let\@IEEElatexbibitem\bibitem% + \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% +\def\newblock{\hskip .11em plus .33em minus .07em}% +% originally: +% \sloppy\clubpenalty4000\widowpenalty4000% +% by adding the \interlinepenalty here, we make it more +% difficult, but not impossible, for LaTeX to break within a reference. +% The IEEE almost never breaks a reference (but they do it more often with +% technotes). You may get an underfull vbox warning around the bibliography, +% but the final result will be much more like what the IEEE will publish. +% MDS 11/2000 +\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% +\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% + \sfcode`\.=1000\relax} +\let\endthebibliography=\endlist + + + + +% TITLE PAGE COMMANDS +% +% +% \IEEEmembership is used to produce the sublargesize italic font used to indicate author +% IEEE membership. compsoc uses a large size sans slant font +\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} + + +% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. +% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote +% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} +% reverts to using lower case roman numerals, so it cannot overflow. Do note that you +% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote +% symbols will have been turned off to prevent \thanks from creating footnote marks. +% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical +% height - this allows for a more compact line packing, but the user must ensure that +% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding +% with the text above. +% V1.7 make this a robust command +% V1.8 transmag uses an arabic author affiliation symbol +\ifCLASSOPTIONtransmag +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} +\else +\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% + \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} +\fi + + +% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS +% +% The default font styles for the author name and affiliation blocks (confmode) +\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} +\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} +% The default if the user does not use an author block +\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} + +% adjustment spacing from title (or special paper notice) to author name blocks (confmode) +% can be negative +\def\@IEEEauthorblockconfadjspace{-0.25em} +% compsoc conferences need more space here +\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} + +% spacing between name and affiliation blocks (confmode) +% This can be negative. +% The IEEE doesn't want any added spacing here, but I will leave these +% controls in place in case they ever change their mind. +% Personally, I like 0.75ex. +%\def\@IEEEauthorblockNtopspace{0.75ex} +%\def\@IEEEauthorblockAtopspace{0.75ex} +\def\@IEEEauthorblockNtopspace{0.0ex} +\def\@IEEEauthorblockAtopspace{0.0ex} +\ifCLASSOPTIONtransmag +% transmag uses one line of space above first affiliation block +\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} +\fi + +% baseline spacing within name and affiliation blocks (confmode) +% must be positive, spacings below certain values will make +% the position of line of text sensitive to the contents of the +% line above it i.e., whether or not the prior line has descenders, +% subscripts, etc. For this reason it is a good idea to keep +% these above 2.6ex +\def\@IEEEauthorblockNinterlinespace{2.6ex} +\def\@IEEEauthorblockAinterlinespace{2.75ex} + +% This tracks the required strut size. +% See the \@IEEEauthorhalign command for the actual default value used. +\def\@IEEEauthorblockXinterlinespace{2.7ex} + +% variables to retain font size and style across groups +% values given here have no effect as they will be overwritten later +\gdef\@IEEESAVESTATEfontsize{10} +\gdef\@IEEESAVESTATEfontbaselineskip{12} +\gdef\@IEEESAVESTATEfontencoding{OT1} +\gdef\@IEEESAVESTATEfontfamily{ptm} +\gdef\@IEEESAVESTATEfontseries{m} +\gdef\@IEEESAVESTATEfontshape{n} + +% saves the current font attributes +\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% +\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% +\global\let\@IEEESAVESTATEfontencoding\f@encoding% +\global\let\@IEEESAVESTATEfontfamily\f@family% +\global\let\@IEEESAVESTATEfontseries\f@series% +\global\let\@IEEESAVESTATEfontshape\f@shape} + +% restores the saved font attributes +\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% +\fontencoding{\@IEEESAVESTATEfontencoding}% +\fontfamily{\@IEEESAVESTATEfontfamily}% +\fontseries{\@IEEESAVESTATEfontseries}% +\fontshape{\@IEEESAVESTATEfontshape}% +\selectfont} + + +% variable to indicate if the current block is the first block in the column +\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse + + +% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace +% we use this technique to have complete manual control over the spacing of the lines +% within the halign environment. +% We set the below baseline portion at 30%, the above +% baseline portion at 70% of the total length. +% Responds to changes in the document's \baselinestretch +\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% +\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% +\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} + + +% blocks to hold the authors' names and affilations. +% Makes formatting easy for conferences +% +% use real definitions in conference mode +% name block +\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% +% input the author names +#1% +% end the row if the user did not already +\crcr} +% spacer row for names +\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} +% +% affiliation block +\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style +\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row +% the \expandafter hides the \cr in conditional tex, see the array.sty docs +% for details, probably not needed here as the \cr is in a macro +% do a spacer row if needed +\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi +\global\@IEEEprevauthorblockincoltrue% we now have a block in this column +%restore the correct strut value +\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% +% input the author affiliations +#1% +% end the row if the user did not already +\crcr +% V1.8 transmag does not use any additional affiliation spacing after the first author +\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} + +% spacer row for affiliations +\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} + + +% allow papers to compile even if author blocks are used in modes other +% than conference or peerreviewca. For such cases, we provide dummy blocks. +\ifCLASSOPTIONconference +\else + \ifCLASSOPTIONpeerreviewca\else + % not conference, peerreviewca or transmag mode + \ifCLASSOPTIONtransmag\else + \def\IEEEauthorblockN#1{#1}% + \def\IEEEauthorblockA#1{#1}% + \fi + \fi +\fi + + + +% we provide our own halign so as not to have to depend on tabular +\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style + \lineskip=0pt\relax% disable line spacing + \lineskiplimit=0pt\relax% + \baselineskip=0pt\relax% + \@IEEEcurfontSAVE% save the current font + \mathsurround\z@\relax% no extra spacing around math + \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one + \tabskip=0pt\relax% no column spacing + \everycr{}% ensure no problems here + \@IEEEprevauthorblockincolfalse% no author blocks yet + \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space + \vtop\bgroup%vtop box + \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax + \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} + +% ensure last line, exit from halign, close vbox +\def\end@IEEEauthorhalign{\crcr\egroup\egroup} + +% handle bogus star form +\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} + +% test and setup the optional argument to \\[] +\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} + +% end the line and do the optional spacer +\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} + + + +% flag to prevent multiple \and warning messages +\newif\if@IEEEWARNand +\@IEEEWARNandtrue + +% if in conference or peerreviewca modes, we support the use of \and as \author is a +% tabular environment, otherwise we warn the user that \and is invalid +% outside of conference or peerreviewca modes. +\def\and{\relax} % provide a bogus \and that we will then override + +\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only + when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} + +\ifCLASSOPTIONconference% +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +\ifCLASSOPTIONpeerreviewca +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi +% V1.8 transmag uses conference author format +\ifCLASSOPTIONtransmag +\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% +\fi + +% page clearing command +% based on LaTeX2e's \cleardoublepage, but allows different page styles +% for the inserted blank pages +\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else +\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} + +% V1.8b hooks to allow adjustment of space above title +\def\IEEEtitletopspace{0.5\baselineskip} +% an added extra amount to allow for adjustment/offset +\def\IEEEtitletopspaceextra{0pt} + +% user command to invoke the title page +\def\maketitle{\par% + \begingroup% + \normalfont% + \def\thefootnote{}% the \thanks{} mark type is empty + \def\footnotemark{}% and kill space from \thanks within author + \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. + \footnotesize% equal spacing between thanks lines + \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info + % V1.7 disable \thanks note indention for compsoc + \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% + \normalsize% + \ifCLASSOPTIONpeerreview + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% + \else + \if@twocolumn% + \ifCLASSOPTIONtechnote% + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \else + \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% + \fi + \else + \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% + \fi + \thispagestyle{IEEEtitlepagestyle}\@thanks% + \fi + % pullup page for pubid if used. + \if@IEEEusingpubid + \enlargethispage{-\@IEEEpubidpullup}% + \fi + \endgroup + \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax + \gdef\@thanks{}% + % v1.6b do not clear these as we will need the title again for peer review papers + % \gdef\@author{}\gdef\@title{}% + \let\thanks\relax} + + +% V1.8 parbox to format \@IEEEtitleabstractindextext +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} +% V1.8 compsoc is partial width +\ifCLASSOPTIONcompsoc +% comparison with proofs suggests it's in the range of 92.1-92.3% +\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} +\fi + +% formats the Title, authors names, affiliations and special paper notice +% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional +% spaces to enter the definition - use % at the end of each line +\def\@maketitle{\newpage +\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% +\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes + {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author + \@IEEEspecialpapernotice\par}\relax +\else% not a technote + \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip + \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax + \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% + % V1.6 handle \author differently if in conference mode + \ifCLASSOPTIONconference% + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax + \else% peerreviewca, peerreview or journal + \ifCLASSOPTIONpeerreviewca + % peerreviewca handles author names just like conference mode + {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \else% journal, peerreview or transmag + \ifCLASSOPTIONtransmag + % transmag also handles author names just like conference mode + % it also uses \@IEEEtitleabstractindextex, but with one line less + % space above, and one more below + {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% + \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par + {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax + \else% journal or peerreview + {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par + {\@IEEEcompsoconly{\vskip 1.5em\relax + \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill + \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax + \fi + \fi + \fi +\fi\par\addvspace{0.5\baselineskip}\egroup} + + +% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers +% V1.8a full width diamond line for single column use +\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} +% V1.8a narrower width diamond line for double column use +\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} +% V1.8a bare core without rules to base a last resort on for very narrow linewidths +\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak +\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak +\hspace{7.5pt}\nobreak\mbox{}\relax} + +% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. +% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) +% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) +% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth +\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax +\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax +\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax +\else +\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax +\@IEEEtrantmpdimenB=\linewidth\relax +\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax +\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax +\fi\fi} + + +% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def +% We also need to trigger the one-shot footnote rule +\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} + + +\long\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape + \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} +\let\@thanks\@empty + + +% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. +\long\def\author#1{\gdef\@author{#1}} + + +% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and +% below it because \list's \pars introduce blank lines because of the footnote struts. +\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% +\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% +\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} + + +% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item +\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse + +\ifCLASSOPTIONcompsoc +% V1.7 compsoc bullet item \thanks +% also, we need to redefine this to destroy the argument in \IEEEquantizevspace +\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule + {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax + \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} +\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} +\else +% non-compsoc, allow for dual compilation via rerouting to normal \thanks +\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} +% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] +\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% +{\@IEEEthanksswallowoptionalarg[\relax]}} +% be sure and break only after first item, be sure and ignore spaces after optional argument +\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break +\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} +\fi + + +% V1.6b define the \IEEEpeerreviewmaketitle as needed +\ifCLASSOPTIONpeerreview +\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% +\ifCLASSOPTIONtwocolumn +\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] +\else +\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip +\fi +\thispagestyle{IEEEtitlepagestyle}} +\else +% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected +\def\IEEEpeerreviewmaketitle{\relax} +\fi + +% peerreview formats the repeated title like the title in journal papers. +\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% +\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par +\par\addvspace{0.5\baselineskip}\egroup} + + + +% V1.6 +% this is a static rubber spacer between the title/authors and the main text +% used for single column text, or when the title appears in the first column +% of two column text (technotes). +\def\@IEEEstatictitlevskip{{\normalfont\normalsize +% adjust spacing to next text +% v1.6b handle peer review papers +\ifCLASSOPTIONpeerreview +% for peer review papers, the same value is used for both title pages +% regardless of the other paper modes + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip +\else + \ifCLASSOPTIONconference% conference + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% + \ifCLASSOPTIONtechnote% technote + \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% + \else% journal uses more space + \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% + \fi + \fi +\fi}} + + +% set the nominal and minimum values for the quantized title spacer +% the quantization algorithm will not allow the spacer size to +% become less than \@IEEEMINtitlevspace - instead it will be lengthened +% default to journal values +\def\@IEEENORMtitlevspace{2.5\baselineskip} +\def\@IEEEMINtitlevspace{2\baselineskip} +% conferences and technotes need tighter spacing +\ifCLASSOPTIONconference% conference + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi +\ifCLASSOPTIONtechnote% technote + \def\@IEEENORMtitlevspace{1\baselineskip} + \def\@IEEEMINtitlevspace{0.75\baselineskip} +\fi + + +% V1.8a +\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} +% \IEEEquantizevspace[output dimen register]{object}[object decl] +% {top baselineskip} +% [offset][prevdepth][lineskip limit][lineskip] +% {unit height}{nominal vspace}{minimum vspace} +% +% Calculates and creates the vspace needed to make the combined height with +% the given object an integer multiple of the given unit height. This command +% is more general than the older \@IEEEdynamictitlevspace it replaces. +% +% The star form has no effect at present, but is reserved for future use. +% +% If the optional argument [output dimen register] is given, the calculated +% vspace height is stored in the given output dimen (or skip) register +% and no other action is taken, otherwise the object followed by a vspace* +% of the appropriate height is evaluated/output. +% +% The optional object decl (declarations) is code that is evaluated just +% before the object's height is evaluated. Its intented purpose is to allow +% for the alteration or disabling of code within the object during internal +% height evaluation (e.g., \long\def\thanks#1{\relax} ). +% This special code is not invoked if/when the object is rendered at the end. +% +% The nominal vspace is the target value of the added vspace and the minimum +% vspace is the lower allowed limit. The vspacer will be the value that achieves +% integral overall height, in terms of the given unit height, that is closest +% to the nominal vspace and that is not less than the specified minimum vspace. +% +% The line spacing algorithm of TeX is somewhat involved and requires special +% care with regard to the first line of a vertical list (which is indicated +% when \prevdepth is -1000pt or less). top baselineskip specifies the +% baselineskip or topskip used prior to the object. If the height of the +% first line of the object is greater than the given top baselineskip, then +% the top baselineskip is subtracted from the height of the first line and +% that difference is considered along with the rest of the object height +% (because the object will be shifted down by an amount = +% top line height - top baselineskip). Otherwise, the height of the first line +% of the object is ignored as far as the calculations are concerned. +% This algorithm is adequate for objects that appear at the top of a page +% (e.g., titles) where \topskip spacing is used. +% +% However, as explained on page 78 of the TeXbook, interline spacing is more +% complex when \baselineskip is being used (indicated by \prevdepth > +% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and +% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and +% \lineskip, respectively, if they are omitted. +% +% The prevdepth is the depth of the line before the object, the lineskip limit +% specifies how close the top of the object can come to the bottom of the +% previous line before \baselineskip is ignored and \lineskip is inserted +% between the object and the line above it. Lineskip does not come into +% play unless the first line of the object is high enough to "get too close" +% (as specified by lineskiplimit) to the line before it. The the prevdepth, +% lineskip limit, and lineskip optional parameters are not needed for the +% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier +% \topskip spacing rules are in effect. +% +% Offset is a manual adjustment that is added to the height calculations of +% object irrespective of the value of \prevdepth. It is useful when the top +% baselineskip will result in a noninteger unit height object placement even +% if the object itself has integral height. e.g., a footnotesize baselineskip +% is used before the object, thus an offset of, say -3pt, can be given as a +% correction. + +% Common combinations of these parameters include: +% +% top baselineskip: (and default values for offset, prevdepth, etc.) +% \topskip % for objects that appear at the top of a page +% \maxdimen % always ignore the height of the top line +% 0pt % always consider any positive height of the top line +% +% for objects to appear inline in normal text: +% top baselineskip = \baselineskip +% +% set prevdepth = -1000pt and top baselineskip = 0pt to consider the +% overall height of the object without any other external skip +% consideration + +\newif\if@IEEEquantizevspacestarform % flag to indicate star form +\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used +% Use our own private registers because the object could contain a +% structure that uses the existing tmp scratch pad registers +\newdimen\@IEEEquantizeheightA +\newdimen\@IEEEquantizeheightB +\newdimen\@IEEEquantizeheightC +\newdimen\@IEEEquantizeprevdepth % need to save this early as can change +\newcount\@IEEEquantizemultiple +\newbox\@IEEEquantizeboxA + + +\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} + + +\long\def\@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% #1 optional output dimen register +% #2 object +\edef\@IEEEquantizeoutdimenreg{#1}\relax +% allow for object specifications that contain parameters +\@IEEEtrantmptoksA={#2}\relax +\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax +\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} + +\long\def\@@@IEEEquantizevspace[#1]#2{\relax +% acquire and store +% [#1] optional object decl, is \relax if not given by user +% #2 top baselineskip +% allow for object decl specifications that have parameters +\@IEEEtrantmptoksA={#1}\relax +\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax +\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} + +% acquire optional argument set and store +% [offset][prevdepth][lineskip limit][lineskip] +\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} +\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} +\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} +\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} +\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} + +% main routine +\def\@ixIEEEquantizevspace#1#2#3{\relax +\edef\@IEEEquantizeunitheight{#1}\relax +\edef\@IEEEquantizenomvspace{#2}\relax +\edef\@IEEEquantizeminvspace{#3}\relax +% \@IEEEquantizeoutdimenreg +% \@IEEEquantizeobject +% \@IEEEquantizeobjectdecl +% \@IEEEquantizetopbaselineskip +% \@IEEEquantizeoffset +% \@IEEEquantizeprevdepth +% \@IEEEquantizelineskiplimit +% \@IEEEquantizelineskip +% \@IEEEquantizeunitheight +% \@IEEEquantizenomvspace +% \@IEEEquantizeminvspace +% get overall height of object +\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax +% get height of first line of object +\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax +\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax +\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect +% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, +% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. +\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation +\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax +% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the +% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip +\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax +\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit +% standard baselineskip rules are in effect, so don't consider height of first line +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +% +\else % prevdepth <= -1000pt, simplier \topskip type rules in effect +\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip +% height of top line (already included in the total height) in excess of +% baselineskip is the amount it will be downshifted +\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax +\else +% height of first line is irrelevant, remove it +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax +\fi +\fi % prevdepth <= -1000pt +% +% adjust height for any manual offset +\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax +% add in nominal spacer +\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax +% check for nonzero unitheight +\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax +\ifnum\@IEEEquantizeheightB=0\relax +\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% +{Division by zero is not allowed.} +\@IEEEquantizeheightB=10pt\relax +\fi +% get integer number of lines +\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax +\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax +% set A to contain the excess height over the \@IEEEquantizemultiple of lines +% A = height - multiple*unitheight +\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax +\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax +% set B to contain the height short of \@IEEEquantizemultiple+1 of lines +% B = unitheight - A +\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax +% choose A or B based on which is closer +\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax +\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax +% C = nomvspace - A, go with lower +\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax +\else +% C = nomvspace + B, go with upper +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% if violate lower bound, use next integer bound +\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax +% A + B = unitheight +\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax +\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax +\fi +% export object and spacer outside of group +\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax +\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax +\endgroup +\if@IEEEquantizevspaceuseoutdimenreg +\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax +\else +\@IEEEquantizeobjectout\relax +\vskip\@IEEEquantizeheightC\relax +\fi} + + +% user command to disable all global assignments, possible use within object decl +\def\IEEEquantizedisableglobal{\let\global\relax +\let\gdef\def +\let\xdef\edef} +% user command to allow for the disabling of \thanks and other commands, possible use within object decl +\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax +\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} + + + + + +% V1.6 +% we allow the user access to the last part of the title area +% useful in emergencies such as when a different spacing is needed +% This text is NOT compensated for in the dynamic sizer. +\let\@IEEEaftertitletext=\relax +\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} + + +% V1.7 provide a way for users to enter abstract and keywords +% into the onecolumn title are. This text is compensated for +% in the dynamic sizer. +\let\@IEEEtitleabstractindextext=\relax +\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} + +% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if +% not in compsoc or transmag journal mode - this way abstract and keywords +% can still be placed in their conventional position if not in those modes. +\def\IEEEdisplaynontitleabstractindextext{% +% display for all conference formats +\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax +\else% non-conferences + % V1.8a display for all technotes + \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax + % V1.8a add diamond line after abstract and index terms for compsoc technotes + \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax + \else % non-conferences and non-technotes + \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag + \else + \ifCLASSOPTIONtransmag + \else% not compsoc journal nor transmag journal + \@IEEEtitleabstractindextext\relax + \fi + \fi + \fi +\fi} + + +% command to allow alteration of baselinestretch, but only if the current +% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. +\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont +\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% +\def\baselinestretch{#1}\selectfont\fi\relax} + + +% abstract and keywords are in \small, except +% for 9pt docs in which they are in \footnotesize +% Because 9pt docs use an 8pt footnotesize, \small +% becomes a rather awkward 8.5pt +\def\@IEEEabskeysecsize{\small} +\ifx\CLASSOPTIONpt\@IEEEptsizenine + \def\@IEEEabskeysecsize{\footnotesize} +\fi + +% compsoc journals use \footnotesize, compsoc conferences use normalsize +\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} +\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} + + +% V1.6 have abstract and keywords strip leading spaces, pars and newlines +% so that spacing is more tightly controlled. +\def\abstract{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in +% conference mode (the heading already has this much above it) +\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi + \normalfont\normalsize} + +\def\IEEEkeywords{\normalfont + \if@twocolumn + \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi + \par\if@twocolumn\else\endquotation\fi% + \normalfont\normalsize} + +% V1.7 compsoc keywords index terms +\ifCLASSOPTIONcompsoc + \ifCLASSOPTIONconference% compsoc conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \else% compsoc not conference +\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} +\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily + \if@twocolumn + \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent + \textbf{\IEEEkeywordsname}---\relax + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% + \fi\@IEEEgobbleleadPARNLSP} + \fi +\fi + +% V1.8 transmag keywords index terms +% no abstract name, use indentation +\ifCLASSOPTIONtransmag +\def\abstract{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\bfseries\indent + \else + \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize + \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} + +\def\IEEEkeywords{\normalfont\parindent 1em\relax + \if@twocolumn + \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax + \else + \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize + \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize + \fi\@IEEEgobbleleadPARNLSP} +\fi + + + +% gobbles all leading \, \\ and \par, upon finding first token that +% is not a \ , \\ or a \par, it ceases and returns that token +% +% used to strip leading \, \\ and \par from the input +% so that such things in the beginning of an environment will not +% affect the formatting of the text +\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% +\let\@IEEEgobbleleadPARNLSPtoken#1% +\let\@IEEEgobbleleadPARtoken=\par% +\let\@IEEEgobbleleadNLtoken=\\% +\let\@IEEEgobbleleadSPtoken=\ % +\def\@IEEEgobbleleadSPMACRO{\ }% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% +\let\@IEEEswallowthistoken=1% +\fi% +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% +\let\@IEEEswallowthistoken=1% +\fi% +% a control space will come in as a macro +% when it is the last one on a line +\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% +\let\@IEEEswallowthistoken=1% +\fi% +% if we have to swallow this token, do so and taste the next one +% else spit it out and stop gobbling +\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% +\let\@IEEEnextgobbleleadPARNLSP=#1\fi% +\@IEEEnextgobbleleadPARNLSP}% + + + + +% TITLING OF SECTIONS +\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are + % part of the paragraphs), need little bit more than a single space + % spacing from section number to title +% compsoc conferences use regular period/space punctuation +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +\def\@IEEEsectpunct{.\ } +\fi\fi + + +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} + +\ifCLASSOPTIONcompsoc +% compsoc journals need extra spacing +\ifCLASSOPTIONconference\else +\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} +\fi\fi + +%v1.7 put {} after #6 to allow for some types of user font control +%and use \@@par rather than \par +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + % load section label and spacer into \@svsec + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi% + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high + \begingroup #6{\relax% or low level heading + \noindent % subsections are NOT indented + % print top level headings. \@svsec is label, #8 is heading title + % The IEEE does not block indent the section title text, it flows like normal + {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% + \endgroup + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}% + \else % printout low level headings + % svsechd seems to swallow the trailing space, protect it with \mbox{} + % got rid of sectionmark stuff + \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% + \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else + \protect\numberline{\csname the#1\endcsname}\fi#7}}% + \fi%skip down + \@xsect{#5}} + + +% section* handler +%v1.7 put {} after #4 to allow for some types of user font control +%and use \@@par rather than \par +\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup + % The IEEE does not block indent the section title text, it flows like normal + \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup + % svsechd swallows the trailing space, protect it with \mbox{} + \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi + \@xsect{#3}} + + +%% SECTION heading spacing and font +%% +% arguments are: #1 - sectiontype name +% (for \@sect) #2 - section level +% #3 - section heading indent +% #4 - top separation (absolute value used, neg indicates not to indent main text) +% If negative, make stretch parts negative too! +% #5 - (absolute value used) positive: bottom separation after heading, +% negative: amount to indent main text after heading +% Both #4 and #5 negative means to indent main text and use negative top separation +% #6 - font control +% You've got to have \normalfont\normalsize in the font specs below to prevent +% trouble when you do something like: +% \section{Note}{\ttfamily TT-TEXT} is known to ... +% The IEEE sometimes REALLY stretches the area before a section +% heading by up to about 0.5in. However, it may not be a good +% idea to let LaTeX have quite this much rubber. +\ifCLASSOPTIONconference% +% The IEEE wants section heading spacing to decrease for conference mode +\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\else % for journals +\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex +{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\fi + +% for both journals and conferences +% decided to put in a little rubber above the section, might help somebody +\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize\itshape}}% + + +% compsoc +\ifCLASSOPTIONcompsoc +\ifCLASSOPTIONconference +% compsoc conference +\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% +\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% +{0ex}{\normalfont\normalsize\bfseries}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% +{0ex}{\normalfont\normalsize}}% +\else% compsoc journals +% use negative top separation as compsoc journals do not indent paragraphs after section titles +\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% +{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% +% Note that subsection and smaller may not be correct for the Computer Society, +% I have to look up an example. +\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% +{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% +\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% +{0ex}{\normalfont\normalsize}}% +\fi\fi + +% transmag +\ifCLASSOPTIONtransmag +\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% +{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% +\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% +{0.1ex}{\normalfont\normalsize\itshape}}% +\fi + + +% V1.8a provide for a raised line Introduction section for use with Computer +% Society papers. We have to remove any spacing glue after the section +% heading and then remove the blank line for the new paragraph after it. +% LaTeX's section handler alters \everypar and we need to propogate those +% changes outside of the \parbox lest there be spacing problems at the top +% of the next section. +\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} + + + +%% ENVIRONMENTS +% "box" symbols at end of proofs +\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box +% V1.6 some journals use an open box instead that will just fit around a closed one +\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} +\ifCLASSOPTIONcompsoc +\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc +\else +\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed +\fi + +%V1.8 flag to indicate if QED symbol is to be shown +\newif\if@IEEEQEDshow \@IEEEQEDshowtrue +\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired +% v1.7 name change to avoid namespace collision with amsthm. Also add support +% for an optional argument. +\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} +\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} +\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} +% qedhere for equation environments, similar to AMS \qedhere +\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax + \let\veqno\relax\hbox{\IEEEQED}} +% IEEE style qedhere for IEEEeqnarray and other environments +\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} +% command to disable QED at end of IEEEproof +\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} + + +%\itemindent is set to \z@ by list, so define new temporary variable +\newdimen\@IEEEtmpitemindent + +\ifCLASSOPTIONcompsoc +% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax + \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip + \rmfamily\trivlist\hangindent\parindent% + \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax +\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip +\rmfamily\trivlist\hangindent\parindent% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} +\else +% +% noncompsoc +% +% V1.8 allow long theorem names to break across lines. +% Thanks to Miquel Payaro for reporting this. +\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% + \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} +\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% +% V1.6 The IEEE is back to using () around theorem names which are also in italics +% Thanks to Christian Peel for reporting this. + \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} +% V1.7 remove bogus \unskip that caused equations in theorems to collide with +% lines below. +\def\@endtheorem{\endtrivlist} +\fi + + + +% V1.6 +% display command for the section the theorem is in - so that \thesection +% is not used as this will be in Roman numerals when we want arabic. +% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number +% (second part) display and \def\@thmcountersep{.} as a separator. +% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection +% to allow \appendix(ices} to override as needed. +% +% special handler for sections, allows appendix(ices) to override +\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} +% string macro +\edef\@IEEEstringsection{section} + +% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection +% if section in_counter is used +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \edef\@IEEEstringtmp{#3} + \ifx\@IEEEstringtmp\@IEEEstringsection + \expandafter\xdef\csname the#1\endcsname{% + \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep + \@thmcounter{#1}}% + \else + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \fi + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} + + + +%% SET UP THE DEFAULT PAGESTYLE +\pagestyle{headings} +\pagenumbering{arabic} + +% normally the page counter starts at 1 +\setcounter{page}{1} +% however, for peerreview the cover sheet is page 0 or page -1 +% (for duplex printing) +\ifCLASSOPTIONpeerreview + \if@twoside + \setcounter{page}{-1} + \else + \setcounter{page}{0} + \fi +\fi + +% standard book class behavior - let bottom line float up and down as +% needed when single sided +\ifCLASSOPTIONtwoside\else\raggedbottom\fi +% if two column - turn on twocolumn, allow word spacings to stretch more and +% enforce a rigid position for the last lines +\ifCLASSOPTIONtwocolumn +% the peer review option delays invoking twocolumn + \ifCLASSOPTIONpeerreview\else + \twocolumn + \fi +\sloppy +\flushbottom +\fi + + + + +% \APPENDIX and \APPENDICES definitions + +% This is the \@ifmtarg command from the LaTeX ifmtarg package +% by Peter Wilson (CUA) and Donald Arseneau +% \@ifmtarg is used to determine if an argument to a command +% is present or not. +% For instance: +% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} +% \@ifmtarg is used with our redefined \section command if +% \appendices is invoked. +% The command \section will behave slightly differently depending +% on whether the user specifies a title: +% \section{My appendix title} +% or not: +% \section{} +% This way, we can eliminate the blank lines where the title +% would be, and the unneeded : after Appendix in the table of +% contents +\begingroup +\catcode`\Q=3 +\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} +\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} +\endgroup +% end of \@ifmtarg defs + + +% V1.7 +% command that allows the one time saving of the original definition +% of section to \@IEEEappendixsavesection for \appendix or \appendices +% we don't save \section here as it may be redefined later by other +% packages (hyperref.sty, etc.) +\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section +\let\@IEEEsaveoriginalsectiononce\relax} + +% neat trick to grab and process the argument from \section{argument} +% we process differently if the user invoked \section{} with no +% argument (title) +% note we reroute the call to the old \section* +\def\@IEEEprocessthesectionargument#1{% +\@ifmtarg{#1}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% +\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% +\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} + +% we use this if the user calls \section{} after +% \appendix-- which has no meaning. So, we ignore the +% command and its argument. Then, warn the user. +\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless +\protect\section\space in Appendix (line \the\inputlineno).}} + + +% remember \thesection forms will be displayed in \ref calls +% and in the Table of Contents. +% The \sectiondis form is used in the actual heading itself + +% appendix command for one single appendix +% normally has no heading. However, if you want a +% heading, you can do so via the optional argument: +% \appendix[Optional Heading] +\def\appendix{\relax} +\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.A}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \gdef\thesection{A}% + \gdef\thesectiondis{}% + \gdef\thesubsection{\Alph{subsection}}% + \gdef\@IEEEthmcounterinsection##1{A} + \refstepcounter{section}% update the \ref counter + \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% + \addcontentsline{toc}{section}{\appendixname}}{% + \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% + \addcontentsline{toc}{section}{\appendixname: #1}}% + % redefine \section command for appendix + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% + \@IEEEdestroythesectionargument}}% throw out the argument + % of the normal form +} + + + +% appendices command for multiple appendices +% user then calls \section with an argument (possibly empty) to +% declare the individual appendices +\def\appendices{\@IEEEsaveoriginalsectiononce\par + % v1.6 keep hyperref's identifiers unique + \gdef\theHsection{Appendix.\Alph{section}}% + % v1.6 adjust hyperref's string name for the section + \xdef\Hy@chapapp{appendix}% + \setcounter{section}{-1}% we want \refstepcounter to use section 0 + \setcounter{subsection}{0}% + \setcounter{subsubsection}{0}% + \setcounter{paragraph}{0}% + \ifCLASSOPTIONromanappendices% + \gdef\thesection{\Roman{section}}% + \gdef\thesectiondis{\Roman{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% + \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} + \else% + \gdef\thesection{\Alph{section}}% + \gdef\thesectiondis{\Alph{section}}% + \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% + \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} + \fi% + \refstepcounter{section}% update the \ref counter + \setcounter{section}{0}% NEXT \section will be the FIRST appendix + % redefine \section command for appendices + % leave \section* as is + \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form + \refstepcounter{section}% or is a new section so, + \@IEEEprocessthesectionargument}}% process the argument + % of the normal form +} + + + +% V1.7 compoc uses nonbold drop cap and small caps word style +\ifCLASSOPTIONcompsoc + \def\IEEEPARstartFONTSTYLE{\mdseries} + \def\IEEEPARstartWORDFONTSTYLE{\scshape} + \def\IEEEPARstartWORDCAPSTYLE{\relax} +\fi +% +% +% \IEEEPARstart +% Definition for the big two line drop cap letter at the beginning of the +% first paragraph of journal papers. The first argument is the first letter +% of the first word, the second argument is the remaining letters of the +% first word which will be rendered in upper case. +% In V1.6 this has been completely rewritten to: +% +% 1. no longer have problems when the user begins an environment +% within the paragraph that uses \IEEEPARstart. +% 2. auto-detect and use the current font family +% 3. revise handling of the space at the end of the first word so that +% interword glue will now work as normal. +% 4. produce correctly aligned edges for the (two) indented lines. +% +% We generalize things via control macros - playing with these is fun too. +% +% V1.7 added more control macros to make it easy for IEEEtrantools.sty users +% to change the font style. +% +% the number of lines that are indented to clear it +% may need to increase if using decenders +\providecommand{\IEEEPARstartDROPLINES}{2} +% minimum number of lines left on a page to allow a \@IEEEPARstart +% Does not take into consideration rubber shrink, so it tends to +% be overly cautious +\providecommand{\IEEEPARstartMINPAGELINES}{2} +% V1.7 the height of the drop cap is adjusted to match the height of this text +% in the current font (when \IEEEPARstart is called). +\providecommand{\IEEEPARstartHEIGHTTEXT}{T} +% the depth the letter is lowered below the baseline +% the height (and size) of the letter is determined by the sum +% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current +% font. It is a good idea to set this value in terms of the baselineskip +% so that it can respond to changes therein. +\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} +% V1.7 the font the drop cap will be rendered in, +% can take zero or one argument. +\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} +% V1.7 any additional, non-font related commands needed to modify +% the drop cap letter, can take zero or one argument. +\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} +% V1.7 the font that will be used to render the rest of the word, +% can take zero or one argument. +\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} +% V1.7 any additional, non-font related commands needed to modify +% the rest of the word, can take zero or one argument. +\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} +% This is the horizontal separation distance from the drop letter to the main text. +% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced +% to the font that is active when \IEEEPARstart is called. +\providecommand{\IEEEPARstartSEP}{0.15em} +% V1.7 horizontal offset applied to the left of the drop cap. +\providecommand{\IEEEPARstartHOFFSET}{0em} +% V1.7 Italic correction command applied at the end of the drop cap. +\providecommand{\IEEEPARstartITLCORRECT}{\/} + +% width of the letter output, set globally. Can be used in \IEEEPARstartSEP +% or \IEEEPARstartHOFFSET, but not the height lengths. +\newdimen\IEEEPARstartletwidth +\IEEEPARstartletwidth 0pt\relax + +% definition of \IEEEPARstart +% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES +% +% The token \@IEEEPARstartfont will be globally defined after the first use +% of \IEEEPARstart and will be a font command which creates the big letter +% The first argument is the first letter of the first word and the second +% argument is the rest of the first word(s). +\def\IEEEPARstart#1#2{\par{% +% if this page does not have enough space, break it and lets start +% on a new one +\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% +% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE +% which uses command \leavevmode which causes an unwanted \indent to be issued +\noindent +% calculate the desired height of the big letter +% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font +% down to \IEEEPARstartDROPDEPTH below the current baseline +\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% +\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% +% extract the name of the current font in bold +% and place it in \@IEEEPARstartFONTNAME +\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% +{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% +\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% +% define a font based on this name with a point size equal to the desired +% height of the drop letter +\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% +% save this value as a counter (integer) value (sp points) +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% +% now get the height of the actual letter produced by this font size +\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% +% If something bogus happens like the first argument is empty or the +% current font is strange, do not allow a zero height. +\ifdim\@IEEEtrantmpdimenB=0pt\relax% +\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% +\typeout{ Forcing the drop letter font size to 10pt.}% +\@IEEEtrantmpdimenB=10pt% +\fi% +% and store it as a counter +\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% +% Since a font size doesn't exactly correspond to the height of the capital +% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, +% will be less than that desired, \@IEEEtrantmpcountA +% we need to raise the font size, \@IEEEtrantmpdimenA +% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB +% But, TeX doesn't have floating point division, so we have to use integer +% division. Hence the use of the counters. +% We need to reduce the denominator so that the loss of the remainder will +% have minimal affect on the accuracy of the result +\divide\@IEEEtrantmpcountB by 200% +\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% +% Then reequalize things when we use TeX's ability to multiply by +% floating point values +\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% +\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% +% \@IEEEPARstartfont is globaly set to the calculated font of the big letter +% We need to carry this out of the local calculation area to to create the +% big letter. +\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% +% Now set \@IEEEtrantmpdimenA to the width of the big letter +% We need to carry this out of the local calculation area to set the +% hanging indent +\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont +\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% +% end of the isolated calculation environment +\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% +% add in the extra clearance we want +\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% +% add in the optional offset +\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% +% V1.7 don't allow negative offsets to produce negative hanging indents +\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA +\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi +% \@IEEEtrantmpdimenA has the width of the big letter plus the +% separation space and \@IEEEPARstartfont is the font we need to use +% Now, we make the letter and issue the hanging indent command +% The letter is placed in a box of zero width and height so that other +% text won't be displaced by it. +\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% +\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% +\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% +\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% +\hspace{\IEEEPARstartSEP}}}% +{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} + + + + +% determines if the space remaining on a given page is equal to or greater +% than the specified space of argument one +% if not, execute argument two (only if the remaining space is greater than zero) +% and issue a \newpage +% +% example: \@IEEEtranneedspace{2in}{\vfill} +% +% Does not take into consideration rubber shrinkage, so it tends to +% be overly cautious +% Based on an example posted by Donald Arseneau +% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, +% so DO NOT PASS \@IEEEtrantmpdimenB to this routine +% if you need a dimen register, import with \@IEEEtrantmpdimenA instead +\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable +\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left +\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left +\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% +\newpage% +\fi\endgroup} + + + +% IEEEbiography ENVIRONMENT +% Allows user to enter biography leaving place for picture (adapts to font size) +% As of V1.5, a new optional argument allows you to have a real graphic! +% V1.5 and later also fixes the "colliding biographies" which could happen when a +% biography's text was shorter than the space for the photo. +% MDS 7/2001 +% V1.6 prevent multiple biographies from making multiple TOC entries +\newif\if@IEEEbiographyTOCentrynotmade +\global\@IEEEbiographyTOCentrynotmadetrue + +% biography counter so hyperref can jump directly to the biographies +% and not just the previous section +\newcounter{IEEEbiography} +\setcounter{IEEEbiography}{0} + +% photo area size +\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area +\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area +% area cleared for photo +\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area +\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area + % actual depth will be a multiple of + % \baselineskip, rounded up +\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography + +\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% +\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% +% we need enough space to support the hanging indent +% the nominal value of the spacer +% and one extra line for good measure +\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% +\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% +\advance\@IEEEtrantmpdimenA by 1\baselineskip% +% if this page does not have enough space, break it and lets start +% with a new one +\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% +% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill +\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% +% the default box for where the photo goes +\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% +\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% +% +% detect if the optional argument was supplied, this requires the +% \@ifmtarg command as defined in the appendix section above +% and if so, override the default box with what they want +\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% +\centering% +#1% +\end{minipage}}}}% end if optional argument supplied +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#2}% +% V1.6 properly handle if a new paragraph should occur while the +% hanging indent is still active. Do this by redefining \par so +% that it will not start a new paragraph. (But it will appear to the +% user as if it did.) Also, strip any leading pars, newlines, or spaces. +\let\@IEEEBIOORGparCMD=\par% save the original \par command +\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par +\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box +\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% +\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth +\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth +\advance\@IEEEtrantmpcountA by 1% ensure we overestimate +% set the hanging indent +\hangindent\@IEEEBIOhangwidth% +\hangafter-\@IEEEtrantmpcountA% +% reference the top of the photo area to the top of a capital T +\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% +% set the photo box, give it zero width and height so as not to disturb anything +\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% +\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% +% now place the author name and begin the bio text +\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% +% 7/2001 V1.5 detect when the biography text is shorter than the photo area +% and pad the unused area - preventing a collision from the next biography entry +% MDS +\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo + \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad + \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line + \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding + \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% + \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut +\fi% +\par\normalfont} + + + +% V1.6 +% added biography without a photo environment +\newenvironment{IEEEbiographynophoto}[1]{% +% Make an entry into the table of contents only if we have not done so before +\if@IEEEbiographyTOCentrynotmade% +% link labels to the biography counter so hyperref will jump +% to the biography, not the previous section +\setcounter{IEEEbiography}{-1}% +\refstepcounter{IEEEbiography}% +\addcontentsline{toc}{section}{Biographies}% +\global\@IEEEbiographyTOCentrynotmadefalse% +\fi% +% one more biography +\refstepcounter{IEEEbiography}% +% Make an entry for this name into the table of contents +\addcontentsline{toc}{subsection}{#1}% +\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% +\vskip 4\baselineskip plus 1fil minus 0\baselineskip% +\parskip=0pt\par% +\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} + + +% provide the user with some old font commands +% got this from article.cls +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} + + +% SPECIAL PAPER NOTICE COMMANDS +% +% holds the special notice text +\def\@IEEEspecialpapernotice{\relax} + +% for special papers, like invited papers, the user can do: +% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle +\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% +\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% +\else% +\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% +\fi} + + + + +% PUBLISHER ID COMMANDS +% to insert a publisher's ID footer +% V1.6 \IEEEpubid has been changed so that the change in page size and style +% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle +% use \IEEEpubidadjcol as before - in the second column of the title page +% These changes allow \maketitle to take the reduced page height into +% consideration when dynamically setting the space between the author +% names and the maintext. +% +% the amount the main text is pulled up to make room for the +% publisher's ID footer +% The IEEE uses about 1.3\baselineskip for journals, +% dynamic title spacing will clean up the fraction +\def\@IEEEpubidpullup{1.3\baselineskip} +\ifCLASSOPTIONtechnote +% for technotes it must be an integer of baselineskip as there can be no +% dynamic title spacing for two column mode technotes (the title is in the +% in first column) and we should maintain an integer number of lines in the +% second column +% There are some examples (such as older issues of "Transactions on +% Information Theory") in which the IEEE really pulls the text off the ID for +% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip +% and call it even. +\def\@IEEEpubidpullup{2\baselineskip} +\fi + +% V1.7 compsoc does not use a pullup +\ifCLASSOPTIONcompsoc +\def\@IEEEpubidpullup{0pt} +\fi + +% holds the ID text +\def\@IEEEpubid{\relax} + +% flag so \maketitle can tell if \IEEEpubid was called +\newif\if@IEEEusingpubid +\global\@IEEEusingpubidfalse +% issue this command in the page to have the ID at the bottom +% V1.6 use before \maketitle +\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} + + +% command which will pull up (shorten) the column it is executed in +% to make room for the publisher ID. Place in the second column of +% the title page when using \IEEEpubid +% Is smart enough not to do anything when in single column text or +% if the user hasn't called \IEEEpubid +% currently needed in for the second column of a page with the +% publisher ID. If not needed in future releases, please provide this +% command and define it as \relax for backward compatibility +% v1.6b do not allow command to operate if the peer review option has been +% selected because \IEEEpubidadjcol will not be on the cover page. +% V1.7 do nothing if compsoc +\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else +\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} + +% Special thanks to Peter Wilson, Daniel Luecking, and the other +% gurus at comp.text.tex, for helping me to understand how best to +% implement the IEEEpubid command in LaTeX. + + + +%% Lockout some commands under various conditions + +% general purpose bit bucket +\newsavebox{\@IEEEtranrubishbin} + +% flags to prevent multiple warning messages +\newif\if@IEEEWARNthanks +\newif\if@IEEEWARNIEEEPARstart +\newif\if@IEEEWARNIEEEbiography +\newif\if@IEEEWARNIEEEbiographynophoto +\newif\if@IEEEWARNIEEEpubid +\newif\if@IEEEWARNIEEEpubidadjcol +\newif\if@IEEEWARNIEEEmembership +\newif\if@IEEEWARNIEEEaftertitletext +\@IEEEWARNthankstrue +\@IEEEWARNIEEEPARstarttrue +\@IEEEWARNIEEEbiographytrue +\@IEEEWARNIEEEbiographynophototrue +\@IEEEWARNIEEEpubidtrue +\@IEEEWARNIEEEpubidadjcoltrue +\@IEEEWARNIEEEmembershiptrue +\@IEEEWARNIEEEaftertitletexttrue + + +%% Lockout some commands when in various modes, but allow them to be restored if needed +%% +% save commands which might be locked out +% so that the user can later restore them if needed +\let\@IEEESAVECMDthanks\thanks +\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart +\let\@IEEESAVECMDIEEEbiography\IEEEbiography +\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography +\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto +\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto +\let\@IEEESAVECMDIEEEpubid\IEEEpubid +\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol +\let\@IEEESAVECMDIEEEmembership\IEEEmembership +\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext + + +% disable \IEEEPARstart when in draft mode +% This may have originally been done because the pre-V1.6 drop letter +% algorithm had problems with a non-unity baselinestretch +% At any rate, it seems too formal to have a drop letter in a draft +% paper. +\ifCLASSOPTIONdraftcls +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart + is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi +% and for technotes +\ifCLASSOPTIONtechnote +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} +\fi + + +% lockout unneeded commands when in conference mode +\ifCLASSOPTIONconference +% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, +% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. +% \IEEEPARstart will output a normal character instead +% warn the user about these commands only once to prevent the console screen +% from filling up with redundant messages +\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} +\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} + + +% LaTeX treats environments and commands with optional arguments differently. +% the actual ("internal") command is stored as \\commandname +% (accessed via \csname\string\commandname\endcsname ) +% the "external" command \commandname is a macro with code to determine +% whether or not the optional argument is presented and to provide the +% default if it is absent. So, in order to save and restore such a command +% we would have to save and restore \\commandname as well. But, if LaTeX +% ever changes the way it names the internal names, the trick would break. +% Instead let us just define a new environment so that the internal +% name can be left undisturbed. +\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} +% and make biography point to our bogus biography +\let\IEEEbiography=\@IEEEbogusbiography +\let\endIEEEbiography=\end@IEEEbogusbiography + +\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% +\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} + +\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} +\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} +\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} +\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext + is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} +\fi + + +% provide a way to restore the commands that are locked out +\def\IEEEoverridecommandlockouts{% +\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% +\let\thanks\@IEEESAVECMDthanks% +\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% +\let\IEEEbiography\@IEEESAVECMDIEEEbiography% +\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% +\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% +\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% +\let\IEEEpubid\@IEEESAVECMDIEEEpubid% +\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% +\let\IEEEmembership\@IEEESAVECMDIEEEmembership% +\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} + + + +% need a backslash character for typeout output +{\catcode`\|=0 \catcode`\\=12 +|xdef|@IEEEbackslash{\}} + + +% hook to allow easy disabling of all legacy warnings +\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). +Use \@IEEEbackslash #2 instead.}} + + +% provide some legacy IEEEtran commands +\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} +\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} +% provide some legacy IEEEtran environments + + +% V1.8a no more support for these legacy commands +%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} +%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} +%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} +%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} +%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} +%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} +%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} +% and environments +%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} +%\def\endkeywords{\endIEEEkeywords} +% V1.8 no more support for legacy IED list commands +%\let\labelindent\IEEElabelindent +%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} +%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} +%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} +%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} +%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} +%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} +% V1.8 no more support for QED and proof stuff +%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} +%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} +%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} +%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} +% V1.8 no longer support biography or biographynophoto +%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} +%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} +%\def\endbiography{\endIEEEbiography} +%\def\endbiographynophoto{\endIEEEbiographynophoto} +% V1.7 and later no longer supports \overrideIEEEmargins +%\def\overrideIEEEmargins{% +%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% +%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% +% That's all folks! + diff --git a/_comparative_analysis_of_methods_for_requirements_engineering/final-paper.pdf b/_comparative_analysis_of_methods_for_requirements_engineering/final-paper.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a54230db2ad05feddceb0d2bf99cbbcd71a0de2e GIT binary patch literal 115837 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

o@0!&h&EAqy+bhwtSLa`;mzx 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