tIEEEtran.cls - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
       tIEEEtran.cls (201353B)
       ---
            1 %%
            2 %% IEEEtran.cls 2007/03/05 version V1.7a
            3 %% 
            4 %% 
            5 %% This is the official IEEE LaTeX class for authors of the Institute of 
            6 %% Electrical and Electronics Engineers (IEEE) Transactions journals and
            7 %% conferences.
            8 %% 
            9 %% Support sites:
           10 %% http://www.michaelshell.org/tex/ieeetran/
           11 %% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
           12 %% and
           13 %% http://www.ieee.org/
           14 %%
           15 %% Based on the original 1993 IEEEtran.cls, but with many bug fixes
           16 %% and enhancements (from both JVH and MDS) over the 1996/7 version.
           17 %%
           18 %%
           19 %% Contributors:
           20 %% Gerry Murray (1993), Silvano Balemi (1993),
           21 %% Jon Dixon (1996), Peter N"uchter (1996),
           22 %% Juergen von Hagen (2000), and Michael Shell (2001-2007)
           23 %% 
           24 %% 
           25 %% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, 
           26 %%                         Jon Dixon, Peter N"uchter,
           27 %%                         Juergen von Hagen
           28 %%                         and
           29 %% Copyright (c) 2001-2007 by Michael Shell
           30 %%
           31 %% Current maintainer (V1.3 to V1.7): Michael Shell
           32 %%                                    See:
           33 %%                                    http://www.michaelshell.org/
           34 %%                                    for current contact information.
           35 %%
           36 %% Special thanks to Peter Wilson (CUA) and Donald Arseneau
           37 %% for allowing the inclusion of the \@ifmtarg command 
           38 %% from their ifmtarg LaTeX package. 
           39 %% 
           40 %%*************************************************************************
           41 %% Legal Notice:
           42 %% This code is offered as-is without any warranty either expressed or
           43 %% implied; without even the implied warranty of MERCHANTABILITY or
           44 %% FITNESS FOR A PARTICULAR PURPOSE! 
           45 %% User assumes all risk.
           46 %% In no event shall IEEE or any contributor to this code be liable for
           47 %% any damages or losses, including, but not limited to, incidental,
           48 %% consequential, or any other damages, resulting from the use or misuse
           49 %% of any information contained here.
           50 %%
           51 %% All comments are the opinions of their respective authors and are not
           52 %% necessarily endorsed by the IEEE.
           53 %%
           54 %% This work is distributed under the LaTeX Project Public License (LPPL)
           55 %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
           56 %% distributed and modified. A copy of the LPPL, version 1.3, is included
           57 %% in the base LaTeX documentation of all distributions of LaTeX released
           58 %% 2003/12/01 or later.
           59 %% Retain all contribution notices and credits.
           60 %% ** Modified files should be clearly indicated as such, including  **
           61 %% ** renaming them and changing author support contact information. **
           62 %%
           63 %% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex,
           64 %%                    bare_conf.tex, bare_jrnl.tex, bare_jrnl_compsoc.tex
           65 %% 
           66 %% Major changes to the user interface should be indicated by an 
           67 %% increase in the version numbers. If a version is a beta, it will 
           68 %% be indicated with a BETA suffix, i.e., 1.4 BETA.
           69 %% Small changes can be indicated by appending letters to the version
           70 %% such as "IEEEtran_v14a.cls".
           71 %% In all cases, \Providesclass, any \typeout messages to the user,
           72 %% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the
           73 %% correct version information.
           74 %% The changes should also be documented via source comments.
           75 %%*************************************************************************
           76 %%
           77 %
           78 % Available class options 
           79 % e.g., \documentclass[10pt,conference]{IEEEtran} 
           80 % 
           81 %             *** choose only one from each category ***
           82 %
           83 % 9pt, 10pt, 11pt, 12pt
           84 %    Sets normal font size. The default is 10pt.
           85 % 
           86 % conference, journal, technote, peerreview, peerreviewca
           87 %    determines format mode - conference papers, journal papers,
           88 %    correspondence papers (technotes), or peer review papers. The user
           89 %    should also select 9pt when using technote. peerreview is like
           90 %    journal mode, but provides for a single-column "cover" title page for
           91 %    anonymous peer review. The paper title (without the author names) is
           92 %    repeated at the top of the page after the cover page. For peer review
           93 %    papers, the \IEEEpeerreviewmaketitle command must be executed (will
           94 %    automatically be ignored for non-peerreview modes) at the place the
           95 %    cover page is to end, usually just after the abstract (keywords are
           96 %    not normally used with peer review papers). peerreviewca is like
           97 %    peerreview, but allows the author names to be entered and formatted
           98 %    as with conference mode so that author affiliation and contact
           99 %    information can be easily seen on the cover page.
          100 %    The default is journal.
          101 %
          102 % draft, draftcls, draftclsnofoot, final
          103 %    determines if paper is formatted as a widely spaced draft (for
          104 %    handwritten editor comments) or as a properly typeset final version.
          105 %    draftcls restricts draft mode to the class file while all other LaTeX
          106 %    packages (i.e., \usepackage{graphicx}) will behave as final - allows
          107 %    for a draft paper with visible figures, etc. draftclsnofoot is like
          108 %    draftcls, but does not display the date and the word "DRAFT" at the foot
          109 %    of the pages. If using one of the draft modes, the user will probably
          110 %    also want to select onecolumn.
          111 %    The default is final.
          112 %
          113 % letterpaper, a4paper
          114 %    determines paper size: 8.5in X 11in or 210mm X 297mm. CHANGING THE PAPER
          115 %    SIZE WILL NOT ALTER THE TYPESETTING OF THE DOCUMENT - ONLY THE MARGINS
          116 %    WILL BE AFFECTED. In particular, documents using the a4paper option will
          117 %    have reduced side margins (A4 is narrower than US letter) and a longer
          118 %    bottom margin (A4 is longer than US letter). For both cases, the top
          119 %    margins will be the same and the text will be horizontally centered. 
          120 %    For final submission to IEEE, authors should use US letter (8.5 X 11in)
          121 %    paper. Note that authors should ensure that all post-processing 
          122 %    (ps, pdf, etc.) uses the same paper specificiation as the .tex document.
          123 %    Problems here are by far the number one reason for incorrect margins.
          124 %    IEEEtran will automatically set the default paper size under pdflatex 
          125 %    (without requiring a change to pdftex.cfg), so this issue is more
          126 %    important to dvips users. Fix config.ps, config.pdf, or ~/.dvipsrc for
          127 %    dvips, or use the dvips -t papersize option instead as needed. See the
          128 %    testflow documentation
          129 %    http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow
          130 %    for more details on dvips paper size configuration.
          131 %    The default is letterpaper.
          132 %
          133 % oneside, twoside
          134 %    determines if layout follows single sided or two sided (duplex)
          135 %    printing. The only notable change is with the headings at the top of
          136 %    the pages.
          137 %    The default is oneside.
          138 %
          139 % onecolumn, twocolumn
          140 %    determines if text is organized into one or two columns per page. One
          141 %    column mode is usually used only with draft papers.
          142 %    The default is twocolumn.
          143 %
          144 % compsoc
          145 %    Use the format of the IEEE Computer Society.
          146 %
          147 % romanappendices
          148 %    Use the "Appendix I" convention when numbering appendices. IEEEtran.cls
          149 %    now defaults to Alpha "Appendix A" convention - the opposite of what
          150 %    v1.6b and earlier did.
          151 %
          152 % captionsoff
          153 %    disables the display of the figure/table captions. Some IEEE journals
          154 %    request that captions be removed and figures/tables be put on pages
          155 %    of their own at the end of an initial paper submission. The endfloat
          156 %    package can be used with this class option to achieve this format.
          157 %
          158 % nofonttune
          159 %    turns off tuning of the font interword spacing. Maybe useful to those
          160 %    not using the standard Times fonts or for those who have already "tuned"
          161 %    their fonts.
          162 %    The default is to enable IEEEtran to tune font parameters.
          163 %
          164 %
          165 %----------
          166 % Available CLASSINPUTs provided (all are macros unless otherwise noted):
          167 % \CLASSINPUTbaselinestretch
          168 % \CLASSINPUTinnersidemargin
          169 % \CLASSINPUToutersidemargin
          170 % \CLASSINPUTtoptextmargin
          171 % \CLASSINPUTbottomtextmargin
          172 %
          173 % Available CLASSINFOs provided:
          174 % \ifCLASSINFOpdf                       (TeX if conditional)
          175 % \CLASSINFOpaperwidth                  (macro)
          176 % \CLASSINFOpaperheight                 (macro)
          177 % \CLASSINFOnormalsizebaselineskip      (length)
          178 % \CLASSINFOnormalsizeunitybaselineskip (length)
          179 %
          180 % Available CLASSOPTIONs provided:
          181 % all class option flags (TeX if conditionals) unless otherwise noted,
          182 % e.g., \ifCLASSOPTIONcaptionsoff
          183 % point size options provided as a single macro:
          184 % \CLASSOPTIONpt
          185 % which will be defined as 9, 10, 11, or 12 depending on the document's
          186 % normalsize point size.
          187 % also, class option peerreviewca implies the use of class option peerreview
          188 % and classoption draft implies the use of class option draftcls
          189 
          190 
          191 
          192 
          193 
          194 \ProvidesClass{IEEEtran}[2007/03/05 V1.7a by Michael Shell]
          195 \typeout{-- See the "IEEEtran_HOWTO" manual for usage information.}
          196 \typeout{-- http://www.michaelshell.org/tex/ieeetran/}
          197 \NeedsTeXFormat{LaTeX2e}
          198 
          199 % IEEEtran.cls version numbers, provided as of V1.3
          200 % These values serve as a way a .tex file can
          201 % determine if the new features are provided.
          202 % The version number of this IEEEtrans.cls can be obtained from 
          203 % these values. i.e., V1.4
          204 % KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that-
          205 % (no need to enumerate "a" minor changes here)
          206 \def\IEEEtransversionmajor{1}
          207 \def\IEEEtransversionminor{7}
          208 
          209 % These do nothing, but provide them like in article.cls
          210 \newif\if@restonecol
          211 \newif\if@titlepage
          212 
          213 
          214 % class option conditionals
          215 \newif\ifCLASSOPTIONonecolumn       \CLASSOPTIONonecolumnfalse
          216 \newif\ifCLASSOPTIONtwocolumn       \CLASSOPTIONtwocolumntrue
          217 
          218 \newif\ifCLASSOPTIONoneside         \CLASSOPTIONonesidetrue
          219 \newif\ifCLASSOPTIONtwoside         \CLASSOPTIONtwosidefalse
          220 
          221 \newif\ifCLASSOPTIONfinal           \CLASSOPTIONfinaltrue
          222 \newif\ifCLASSOPTIONdraft           \CLASSOPTIONdraftfalse
          223 \newif\ifCLASSOPTIONdraftcls        \CLASSOPTIONdraftclsfalse
          224 \newif\ifCLASSOPTIONdraftclsnofoot  \CLASSOPTIONdraftclsnofootfalse
          225 
          226 \newif\ifCLASSOPTIONpeerreview      \CLASSOPTIONpeerreviewfalse
          227 \newif\ifCLASSOPTIONpeerreviewca    \CLASSOPTIONpeerreviewcafalse
          228 
          229 \newif\ifCLASSOPTIONjournal         \CLASSOPTIONjournaltrue
          230 \newif\ifCLASSOPTIONconference      \CLASSOPTIONconferencefalse
          231 \newif\ifCLASSOPTIONtechnote        \CLASSOPTIONtechnotefalse
          232 
          233 \newif\ifCLASSOPTIONnofonttune      \CLASSOPTIONnofonttunefalse
          234 
          235 \newif\ifCLASSOPTIONcaptionsoff     \CLASSOPTIONcaptionsofffalse
          236 
          237 \newif\ifCLASSOPTIONcompsoc         \CLASSOPTIONcompsocfalse
          238 
          239 \newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse
          240 
          241 
          242 % class info conditionals
          243 
          244 % indicates if pdf (via pdflatex) output
          245 \newif\ifCLASSINFOpdf               \CLASSINFOpdffalse
          246 
          247 
          248 % V1.6b internal flag to show if using a4paper
          249 \newif\if@IEEEusingAfourpaper       \@IEEEusingAfourpaperfalse
          250 
          251 
          252 
          253 % IEEEtran class scratch pad registers
          254 % dimen
          255 \newdimen\@IEEEtrantmpdimenA
          256 \newdimen\@IEEEtrantmpdimenB
          257 % count
          258 \newcount\@IEEEtrantmpcountA
          259 \newcount\@IEEEtrantmpcountB
          260 % token list
          261 \newtoks\@IEEEtrantmptoksA
          262 
          263 % we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs)
          264 % as well as LaTeX's \@ptsize to retain some compatability with some
          265 % external packages
          266 \def\@ptsize{0}
          267 % LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt
          268 \DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}}
          269 \DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}}
          270 \DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}}
          271 \DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}}
          272 
          273 
          274 
          275 \DeclareOption{letterpaper}{\setlength{\paperheight}{11in}%
          276                             \setlength{\paperwidth}{8.5in}%
          277                             \@IEEEusingAfourpaperfalse
          278                             \def\CLASSOPTIONpaper{letter}%
          279                             \def\CLASSINFOpaperwidth{8.5in}%
          280                             \def\CLASSINFOpaperheight{11in}}
          281 
          282 
          283 \DeclareOption{a4paper}{\setlength{\paperheight}{297mm}%
          284                         \setlength{\paperwidth}{210mm}%
          285                         \@IEEEusingAfourpapertrue
          286                         \def\CLASSOPTIONpaper{a4}%
          287                         \def\CLASSINFOpaperwidth{210mm}%
          288                         \def\CLASSINFOpaperheight{297mm}}
          289 
          290 \DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse
          291                         \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse}
          292 \DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue
          293                         \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse}
          294 
          295 \DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse}
          296 \DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse}
          297 
          298 % If the user selects draft, then this class AND any packages
          299 % will go into draft mode.
          300 \DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue
          301                       \CLASSOPTIONdraftclsnofootfalse} 
          302 % draftcls is for a draft mode which will not affect any packages
          303 % used by the document.
          304 \DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
          305                          \CLASSOPTIONdraftclsnofootfalse} 
          306 % draftclsnofoot is like draftcls, but without the footer.
          307 \DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
          308                                \CLASSOPTIONdraftclsnofoottrue} 
          309 \DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse
          310                       \CLASSOPTIONdraftclsnofootfalse}
          311 
          312 \DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
          313                         \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
          314 
          315 \DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
          316                            \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse}
          317 
          318 \DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
          319                          \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue}
          320 
          321 \DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse
          322                            \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
          323 
          324 \DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue
          325                              \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
          326 
          327 \DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue}
          328 
          329 \DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue}
          330 
          331 \DeclareOption{compsoc}{\CLASSOPTIONcompsoctrue}
          332 
          333 \DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue}
          334 
          335 
          336 % default to US letter paper, 10pt, twocolumn, one sided, final, journal
          337 \ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal}
          338 % overrride these defaults per user requests
          339 \ProcessOptions
          340 
          341 
          342 
          343 % Computer Society conditional execution command
          344 \long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax}
          345 % inverse
          346 \long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax}
          347 % compsoc conference
          348 \long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax}
          349 % compsoc not conference
          350 \long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax}
          351 
          352 
          353 % IEEE uses Times Roman font, so we'll default to Times.
          354 % These three commands make up the entire times.sty package.
          355 \renewcommand{\sfdefault}{phv}
          356 \renewcommand{\rmdefault}{ptm}
          357 \renewcommand{\ttdefault}{pcr}
          358 
          359 \@IEEEcompsoconly{\typeout{-- Using IEEE Computer Society mode.}}
          360 
          361 % V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font,
          362 % not Times Roman.
          363 \@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}}
          364 
          365 % enable Times/Palatino main text font
          366 \normalfont\selectfont
          367 
          368 
          369 
          370 
          371 
          372 % V1.7 conference notice message hook
          373 \def\@IEEEconsolenoticeconference{\typeout{}%
          374 \typeout{** Conference Paper **}%
          375 \typeout{Before submitting the final camera ready copy, remember to:}%
          376 \typeout{}%
          377 \typeout{ 1. Manually equalize the lengths of two columns on the last page}%
          378 \typeout{ of your paper;}%
          379 \typeout{}%
          380 \typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}%
          381 \typeout{ uses only Type 1 fonts and that every step in the generation}%
          382 \typeout{ process uses the appropriate paper size.}%
          383 \typeout{}}
          384 
          385 
          386 % we can send console reminder messages to the user here
          387 \AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi}
          388 
          389 
          390 % warn about the use of single column other than for draft mode
          391 \ifCLASSOPTIONtwocolumn\else%
          392   \ifCLASSOPTIONdraftcls\else%
          393    \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}%
          394   \fi%
          395 \fi
          396 
          397 
          398 % V1.7 improved paper size setting code.
          399 % Set pdfpage and dvips paper sizes. Conditional tests are similar to that
          400 % of ifpdf.sty. Retain within {} to ensure tested macros are never altered,
          401 % even if only effect is to set them to \relax.
          402 % if \pdfoutput is undefined or equal to relax, output a dvips special
          403 {\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{%
          404 % pdfoutput is defined and not equal to \relax
          405 % check for pdfpageheight existence just in case someone sets pdfoutput
          406 % under non-pdflatex. If exists, set them regardless of value of \pdfoutput.
          407 \@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth
          408 \global\pdfpageheight\paperheight}%
          409 % if using \pdfoutput=0 under pdflatex, send dvips papersize special
          410 \ifcase\pdfoutput
          411 \AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}%
          412 \else
          413 % we are using pdf output, set CLASSINFOpdf flag
          414 \global\CLASSINFOpdftrue
          415 \fi}}
          416 
          417 % let the user know the selected papersize
          418 \typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space
          419 (\CLASSOPTIONpaper)\space paper.}
          420 
          421 \ifCLASSINFOpdf
          422 \typeout{-- Using PDF output.}
          423 \else
          424 \typeout{-- Using DVI output.}
          425 \fi
          426 
          427 
          428 % The idea hinted here is for LaTeX to generate markleft{} and markright{}
          429 % automatically for you after you enter \author{}, \journal{},
          430 % \journaldate{}, journalvol{}, \journalnum{}, etc.
          431 % However, there may be some backward compatibility issues here as
          432 % well as some special applications for IEEEtran.cls and special issues
          433 % that may require the flexible \markleft{}, \markright{} and/or \markboth{}.
          434 % We'll leave this as an open future suggestion.
          435 %\newcommand{\journal}[1]{\def\@journal{#1}}
          436 %\def\@journal{}
          437 
          438 
          439 
          440 % pointsize values
          441 % used with ifx to determine the document's normal size
          442 \def\@IEEEptsizenine{9}
          443 \def\@IEEEptsizeten{10}
          444 \def\@IEEEptsizeeleven{11}
          445 \def\@IEEEptsizetwelve{12}
          446 
          447 
          448 
          449 % FONT DEFINITIONS (No sizexx.clo file needed) 
          450 % V1.6 revised font sizes, displayskip values and
          451 %      revised normalsize baselineskip to reduce underfull vbox problems
          452 %      on the 58pc = 696pt = 9.5in text height we want
          453 %      normalsize     #lines/column  baselineskip (aka leading)
          454 %             9pt     63             11.0476pt (truncated down)
          455 %            10pt     58             12pt      (exact)
          456 %            11pt     52             13.3846pt (truncated down)
          457 %            12pt     50             13.92pt   (exact)
          458 %
          459 
          460 % we need to store the nominal baselineskip for the given font size
          461 % in case baselinestretch ever changes.
          462 % this is a dimen, so it will not hold stretch or shrink
          463 \newdimen\@IEEEnormalsizeunitybaselineskip
          464 \@IEEEnormalsizeunitybaselineskip\baselineskip
          465 
          466 \ifx\CLASSOPTIONpt\@IEEEptsizenine
          467 \typeout{-- This is a 9 point document.}
          468 \def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}}%
          469 \setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt}%
          470 \normalsize
          471 \abovedisplayskip 1.5ex plus3pt minus1pt%
          472 \belowdisplayskip \abovedisplayskip%
          473 \abovedisplayshortskip 0pt plus3pt%
          474 \belowdisplayshortskip 1.5ex plus3pt minus1pt
          475 \def\small{\@setfontsize{\small}{8.5}{10pt}}
          476 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}}
          477 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}}
          478 \def\tiny{\@setfontsize{\tiny}{5}{6pt}}
          479 % sublargesize is the same as large - 10pt
          480 \def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}}
          481 \def\large{\@setfontsize{\large}{10}{12pt}}
          482 \def\Large{\@setfontsize{\Large}{12}{14pt}}
          483 \def\LARGE{\@setfontsize{\LARGE}{14}{17pt}}
          484 \def\huge{\@setfontsize{\huge}{17}{20pt}}
          485 \def\Huge{\@setfontsize{\Huge}{20}{24pt}}
          486 \fi
          487 
          488 
          489 % Check if we have selected 10 points
          490 \ifx\CLASSOPTIONpt\@IEEEptsizeten
          491 \typeout{-- This is a 10 point document.}
          492 \def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}}%
          493 \setlength{\@IEEEnormalsizeunitybaselineskip}{12pt}%
          494 \normalsize
          495 \abovedisplayskip 1.5ex plus4pt minus2pt%
          496 \belowdisplayskip \abovedisplayskip%
          497 \abovedisplayshortskip 0pt plus4pt%
          498 \belowdisplayshortskip 1.5ex plus4pt minus2pt
          499 \def\small{\@setfontsize{\small}{9}{10pt}}
          500 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}}
          501 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}}
          502 \def\tiny{\@setfontsize{\tiny}{5}{6pt}}
          503 % sublargesize is a tad smaller than large - 11pt
          504 \def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}}
          505 \def\large{\@setfontsize{\large}{12}{14pt}}
          506 \def\Large{\@setfontsize{\Large}{14}{17pt}}
          507 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}}
          508 \def\huge{\@setfontsize{\huge}{20}{24pt}}
          509 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
          510 \fi
          511 
          512 
          513 % Check if we have selected 11 points
          514 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven
          515 \typeout{-- This is an 11 point document.}
          516 \def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}}%
          517 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt}%
          518 \normalsize
          519 \abovedisplayskip 1.5ex plus5pt minus3pt%
          520 \belowdisplayskip \abovedisplayskip%
          521 \abovedisplayshortskip 0pt plus5pt%
          522 \belowdisplayshortskip 1.5ex plus5pt minus3pt
          523 \def\small{\@setfontsize{\small}{10}{12pt}}
          524 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}}
          525 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}}
          526 \def\tiny{\@setfontsize{\tiny}{6}{7pt}}
          527 % sublargesize is the same as large - 12pt
          528 \def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}}
          529 \def\large{\@setfontsize{\large}{12}{14pt}}
          530 \def\Large{\@setfontsize{\Large}{14}{17pt}}
          531 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}}
          532 \def\huge{\@setfontsize{\huge}{20}{24pt}}
          533 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
          534 \fi
          535 
          536 
          537 % Check if we have selected 12 points
          538 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve
          539 \typeout{-- This is a 12 point document.}
          540 \def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}}%
          541 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt}%
          542 \normalsize
          543 \abovedisplayskip 1.5ex plus6pt minus4pt%
          544 \belowdisplayskip \abovedisplayskip%
          545 \abovedisplayshortskip 0pt plus6pt%
          546 \belowdisplayshortskip 1.5ex plus6pt minus4pt
          547 \def\small{\@setfontsize{\small}{10}{12pt}}
          548 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}}
          549 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}}
          550 \def\tiny{\@setfontsize{\tiny}{6}{7pt}}
          551 % sublargesize is the same as large - 14pt
          552 \def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}}
          553 \def\large{\@setfontsize{\large}{14}{17pt}}
          554 \def\Large{\@setfontsize{\Large}{17}{20pt}}
          555 \def\LARGE{\@setfontsize{\LARGE}{20}{24pt}}
          556 \def\huge{\@setfontsize{\huge}{22}{26pt}}
          557 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
          558 \fi
          559 
          560 
          561 % V1.6 The Computer Modern Fonts will issue a substitution warning for
          562 % 24pt titles (24.88pt is used instead) increase the substitution
          563 % tolerance to turn off this warning
          564 \def\fontsubfuzz{.9pt}
          565 % However, the default (and correct) Times font will scale exactly as needed.
          566 
          567 
          568 % warn the user in case they forget to use the 9pt option with
          569 % technote
          570 \ifCLASSOPTIONtechnote%
          571  \ifx\CLASSOPTIONpt\@IEEEptsizenine\else%
          572   \typeout{** ATTENTION: Technotes are normally 9pt documents.}%
          573  \fi%
          574 \fi
          575 
          576 
          577 % V1.7
          578 % Improved \textunderscore to provide a much better fake _ when used with
          579 % OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use
          580 % available true _ glyph for those two typewriter fonts.
          581 \def\@IEEEstringptm{ptm} % Times Roman family
          582 \def\@IEEEstringppl{ppl} % Palatino Roman family
          583 \def\@IEEEstringphv{phv} % Helvetica Sans Serif family
          584 \def\@IEEEstringpcr{pcr} % Courier typewriter family
          585 \def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family
          586 \DeclareTextCommandDefault{\textunderscore}{\leavevmode
          587 \ifx\f@family\@IEEEstringpcr\string_\else
          588 \ifx\f@family\@IEEEstringcmtt\string_\else
          589 \ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
          590 \ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
          591 \ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else
          592 \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}
          593 
          594 
          595 
          596 
          597 % set the default \baselinestretch
          598 \def\baselinestretch{1}
          599 \ifCLASSOPTIONdraftcls
          600   \def\baselinestretch{1.5}% default baselinestretch for draft modes
          601 \fi 
          602 
          603 
          604 % process CLASSINPUT baselinestretch
          605 \ifx\CLASSINPUTbaselinestretch\@IEEEundefined
          606 \else
          607   \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override
          608   \typeout{** ATTENTION: Overriding \string\baselinestretch\space to
          609            \baselinestretch\space via \string\CLASSINPUT.}
          610 \fi
          611 
          612 \normalsize % make \baselinestretch take affect
          613 
          614 
          615 
          616 
          617 % store the normalsize baselineskip
          618 \newdimen\CLASSINFOnormalsizebaselineskip
          619 \CLASSINFOnormalsizebaselineskip=\baselineskip\relax
          620 % and the normalsize unity (baselinestretch=1) baselineskip
          621 % we could save a register by giving the user access to
          622 % \@IEEEnormalsizeunitybaselineskip. However, let's protect
          623 % its read only internal status
          624 \newdimen\CLASSINFOnormalsizeunitybaselineskip
          625 \CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax
          626 % store the nominal value of jot
          627 \newdimen\IEEEnormaljot
          628 \IEEEnormaljot=0.25\baselineskip\relax
          629 
          630 % set \jot
          631 \jot=\IEEEnormaljot\relax
          632 
          633 
          634 
          635 
          636 % V1.6, we are now going to fine tune the interword spacing
          637 % The default interword glue for Times under TeX appears to use a
          638 % nominal interword spacing of 25% (relative to the font size, i.e., 1em)
          639 % a maximum of 40% and a minimum of 19%.
          640 % For example, 10pt text uses an interword glue of:
          641 % 
          642 % 2.5pt plus 1.49998pt minus 0.59998pt
          643 % 
          644 % However, IEEE allows for a more generous range which reduces the need
          645 % for hyphenation, especially for two column text. Furthermore, IEEE
          646 % tends to use a little bit more nominal space between the words.
          647 % IEEE's interword spacing percentages appear to be:
          648 % 35% nominal
          649 % 23% minimum
          650 % 50% maximum
          651 % (They may even be using a tad more for the largest fonts such as 24pt.)
          652 % 
          653 % for bold text, IEEE increases the spacing a little more:
          654 % 37.5% nominal
          655 % 23% minimum
          656 % 55% maximum
          657 
          658 % here are the interword spacing ratios we'll use
          659 % for medium (normal weight)
          660 \def\@IEEEinterspaceratioM{0.35}
          661 \def\@IEEEinterspaceMINratioM{0.23}
          662 \def\@IEEEinterspaceMAXratioM{0.50}
          663 
          664 % for bold
          665 \def\@IEEEinterspaceratioB{0.375}
          666 \def\@IEEEinterspaceMINratioB{0.23}
          667 \def\@IEEEinterspaceMAXratioB{0.55}
          668 
          669 
          670 % command to revise the interword spacing for the current font under TeX:
          671 % \fontdimen2 = nominal interword space
          672 % \fontdimen3 = interword stretch
          673 % \fontdimen4 = interword shrink
          674 % since all changes to the \fontdimen are global, we can enclose these commands
          675 % in braces to confine any font attribute or length changes
          676 \def\@@@IEEEsetfontdimens#1#2#3{{%
          677 \setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead.
          678 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}%
          679 \fontdimen2\font=\@IEEEtrantmpdimenA\relax
          680 \addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}%
          681 \fontdimen3\font=-\@IEEEtrantmpdimenA\relax
          682 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}%
          683 \addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}%
          684 \fontdimen4\font=\@IEEEtrantmpdimenA\relax}}
          685 
          686 % revise the interword spacing for each font weight
          687 \def\@@IEEEsetfontdimens{{%
          688 \mdseries
          689 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}%
          690 \bfseries
          691 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}%
          692 }}
          693 
          694 % revise the interword spacing for each font shape
          695 % \slshape is not often used for IEEE work and is not altered here. The \scshape caps are
          696 % already a tad too large in the free LaTeX fonts (as compared to what IEEE uses) so we
          697 % won't alter these either.
          698 \def\@IEEEsetfontdimens{{%
          699 \normalfont
          700 \@@IEEEsetfontdimens
          701 \normalfont\itshape
          702 \@@IEEEsetfontdimens
          703 }}
          704 
          705 % command to revise the interword spacing for each font size (and shape
          706 % and weight). Only the \rmfamily is done here as \ttfamily uses a 
          707 % fixed spacing and \sffamily is not used as the main text of IEEE papers.
          708 \def\@IEEEtunefonts{{\selectfont\rmfamily
          709 \tiny\@IEEEsetfontdimens
          710 \scriptsize\@IEEEsetfontdimens
          711 \footnotesize\@IEEEsetfontdimens
          712 \small\@IEEEsetfontdimens
          713 \normalsize\@IEEEsetfontdimens
          714 \sublargesize\@IEEEsetfontdimens
          715 \large\@IEEEsetfontdimens
          716 \LARGE\@IEEEsetfontdimens
          717 \huge\@IEEEsetfontdimens
          718 \Huge\@IEEEsetfontdimens}}
          719 
          720 % if the nofonttune class option is not given, revise the interword spacing
          721 % now - in case IEEEtran makes any default length measurements, and make
          722 % sure all the default fonts are loaded
          723 \ifCLASSOPTIONnofonttune\else
          724 \@IEEEtunefonts
          725 \fi
          726 
          727 % and again at the start of the document in case the user loaded different fonts
          728 \AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi}
          729 
          730 
          731 
          732 % V1.6 
          733 % LaTeX is a little to quick to use hyphenations
          734 % So, we increase the penalty for their use and raise
          735 % the badness level that triggers an underfull hbox
          736 % warning. The author may still have to tweak things,
          737 % but the appearance will be much better "right out
          738 % of the box" than that under V1.5 and prior.
          739 % TeX default is 50
          740 \hyphenpenalty=750
          741 % If we didn't adjust the interword spacing, 2200 might be better.
          742 % The TeX default is 1000
          743 \hbadness=1350
          744 % IEEE does not use extra spacing after punctuation
          745 \frenchspacing
          746 
          747 % V1.7 increase this a tad to discourage equation breaks
          748 \binoppenalty=1000 % default 700
          749 \relpenalty=800     % default 500
          750 
          751 
          752 % margin note stuff
          753 \marginparsep      10pt
          754 \marginparwidth    20pt
          755 \marginparpush     25pt
          756 
          757 
          758 % if things get too close, go ahead and let them touch
          759 \lineskip            0pt
          760 \normallineskip      0pt
          761 \lineskiplimit       0pt
          762 \normallineskiplimit 0pt
          763 
          764 % The distance from the lower edge of the text body to the
          765 % footline
          766 \footskip 0.4in
          767 
          768 % normally zero, should be relative to font height.
          769 % put in a little rubber to help stop some bad breaks (underfull vboxes)
          770 \parskip 0ex plus 0.2ex minus 0.1ex
          771 
          772 \parindent    1.0em
          773 
          774 \topmargin    -49.0pt
          775 \headheight   12pt
          776 \headsep      0.25in
          777 
          778 % use the normal font baselineskip
          779 % so that \topskip is unaffected by changes in \baselinestretch
          780 \topskip=\@IEEEnormalsizeunitybaselineskip
          781 \textheight       58pc  % 9.63in, 696pt
          782 % Tweak textheight to a perfect integer number of lines/page.
          783 % The normal baselineskip for each document point size is used 
          784 % to determine these values.
          785 \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=63\@IEEEnormalsizeunitybaselineskip\fi      % 63 lines/page
          786 \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=58\@IEEEnormalsizeunitybaselineskip\fi       % 58 lines/page
          787 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=52\@IEEEnormalsizeunitybaselineskip\fi    % 52 lines/page
          788 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=50\@IEEEnormalsizeunitybaselineskip\fi    % 50 lines/page
          789 
          790 
          791 \columnsep         1pc
          792 \textwidth        43pc   % 2 x 21pc + 1pc = 43pc
          793  
          794 
          795 % the default side margins are equal
          796 \if@IEEEusingAfourpaper 
          797 \oddsidemargin        14.32mm
          798 \evensidemargin       14.32mm
          799 \else
          800 \oddsidemargin        0.680in
          801 \evensidemargin       0.680in
          802 \fi
          803 % compensate for LaTeX's 1in offset
          804 \addtolength{\oddsidemargin}{-1in}
          805 \addtolength{\evensidemargin}{-1in}
          806 
          807 
          808 
          809 % adjust margins for conference mode
          810 \ifCLASSOPTIONconference
          811  \topmargin        -0.25in
          812  % we retain the reserved, but unused space for headers
          813  \addtolength{\topmargin}{-\headheight}
          814  \addtolength{\topmargin}{-\headsep}
          815  \textheight        9.25in % The standard for conferences (668.4975pt)
          816  % Tweak textheight to a perfect integer number of lines/page.
          817  \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=61\@IEEEnormalsizeunitybaselineskip\fi      % 61 lines/page
          818  \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=56\@IEEEnormalsizeunitybaselineskip\fi       % 56 lines/page
          819  \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=50\@IEEEnormalsizeunitybaselineskip\fi    % 50 lines/page
          820  \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=48\@IEEEnormalsizeunitybaselineskip\fi    % 48 lines/page
          821 \fi
          822 
          823 
          824 % compsoc conference
          825 \ifCLASSOPTIONcompsoc
          826 \ifCLASSOPTIONconference
          827  % compsoc conference use a larger value for columnsep
          828  \columnsep 0.375in
          829  % compsoc conferences want 1in top margin, 1.125in bottom margin
          830  \topmargin        0in
          831  \addtolength{\topmargin}{-6pt}% we tweak this a tad to better comply with top of line stuff
          832  % we retain the reserved, but unused space for headers
          833  \addtolength{\topmargin}{-\headheight}
          834  \addtolength{\topmargin}{-\headsep}
          835  \textheight        8.875in % (641.39625pt)
          836  % Tweak textheight to a perfect integer number of lines/page.
          837  \ifx\CLASSOPTIONpt\@IEEEptsizenine\textheight=58\@IEEEnormalsizeunitybaselineskip\fi      % 58 lines/page
          838  \ifx\CLASSOPTIONpt\@IEEEptsizeten\textheight=53\@IEEEnormalsizeunitybaselineskip\fi       % 53 lines/page
          839  \ifx\CLASSOPTIONpt\@IEEEptsizeeleven\textheight=48\@IEEEnormalsizeunitybaselineskip\fi    % 48 lines/page
          840  \ifx\CLASSOPTIONpt\@IEEEptsizetwelve\textheight=46\@IEEEnormalsizeunitybaselineskip\fi    % 46 lines/page 
          841  \textwidth 6.5in
          842  % the default side margins are equal
          843  \if@IEEEusingAfourpaper 
          844   \oddsidemargin        22.45mm
          845   \evensidemargin       22.45mm
          846  \else
          847   \oddsidemargin        1in
          848   \evensidemargin       1in
          849  \fi
          850  % compensate for LaTeX's 1in offset
          851  \addtolength{\oddsidemargin}{-1in}
          852  \addtolength{\evensidemargin}{-1in}
          853 \fi\fi
          854 
          855 
          856 
          857 % draft mode settings override that of all other modes
          858 % provides a nice 1in margin all around the paper and extra
          859 % space between the lines for editor's comments
          860 \ifCLASSOPTIONdraftcls 
          861   % want 1in from top of paper to text
          862   \setlength{\topmargin}{-\headsep}%
          863   \addtolength{\topmargin}{-\headheight}%
          864   % we want 1in side margins regardless of paper type
          865   \oddsidemargin      0in
          866   \evensidemargin     0in
          867   % set the text width
          868   \setlength{\textwidth}{\paperwidth}%
          869   \addtolength{\textwidth}{-2.0in}%
          870   \setlength{\textheight}{\paperheight}%
          871   \addtolength{\textheight}{-2.0in}%
          872   % digitize textheight to be an integer number of lines.
          873   % this may cause the bottom margin to be off a tad
          874   \addtolength{\textheight}{-1\topskip}%
          875   \divide\textheight  by \baselineskip%
          876   \multiply\textheight  by \baselineskip%
          877   \addtolength{\textheight}{\topskip}%
          878 \fi
          879 
          880 
          881 
          882 % process CLASSINPUT inner/outer margin
          883 % if inner margin defined, but outer margin not, set outer to inner.
          884 \ifx\CLASSINPUTinnersidemargin\@IEEEundefined
          885 \else
          886   \ifx\CLASSINPUToutersidemargin\@IEEEundefined
          887     \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin}
          888   \fi
          889 \fi
          890 
          891 \ifx\CLASSINPUToutersidemargin\@IEEEundefined
          892 \else
          893   % if outer margin defined, but inner margin not, set inner to outer.
          894   \ifx\CLASSINPUTinnersidemargin\@IEEEundefined
          895     \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin}
          896   \fi
          897   \setlength{\oddsidemargin}{\CLASSINPUTinnersidemargin}
          898   \ifCLASSOPTIONtwoside
          899     \setlength{\evensidemargin}{\CLASSINPUToutersidemargin}
          900   \else
          901     \setlength{\evensidemargin}{\CLASSINPUTinnersidemargin}
          902   \fi
          903   \addtolength{\oddsidemargin}{-1in}
          904   \addtolength{\evensidemargin}{-1in}
          905   \setlength{\textwidth}{\paperwidth}
          906   \addtolength{\textwidth}{-\CLASSINPUTinnersidemargin}
          907   \addtolength{\textwidth}{-\CLASSINPUToutersidemargin}
          908   \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and 
          909            outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.}
          910 \fi
          911 
          912 
          913 
          914 % process CLASSINPUT top/bottom text margin
          915 % if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin
          916 \ifx\CLASSINPUTtoptextmargin\@IEEEundefined
          917 \else
          918   \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined
          919     \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin}
          920   \fi
          921 \fi
          922 
          923 \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined
          924 \else
          925   % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin
          926   \ifx\CLASSINPUTtoptextmargin\@IEEEundefined
          927     \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin}
          928   \fi
          929   \setlength{\topmargin}{\CLASSINPUTtoptextmargin}
          930   \addtolength{\topmargin}{-1in}
          931   \addtolength{\topmargin}{-\headheight}
          932   \addtolength{\topmargin}{-\headsep}
          933   \setlength{\textheight}{\paperheight}
          934   \addtolength{\textheight}{-\CLASSINPUTtoptextmargin}
          935   \addtolength{\textheight}{-\CLASSINPUTbottomtextmargin}
          936   % in the default format we use the normal baselineskip as topskip
          937   % we only need 0.7 of this to clear typical top text and we need
          938   % an extra 0.3 spacing at the bottom for descenders. This will
          939   % correct for both.
          940   \addtolength{\topmargin}{-0.3\@IEEEnormalsizeunitybaselineskip}
          941   \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and 
          942            bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.}
          943 \fi
          944 
          945 
          946 
          947 
          948 
          949 
          950 
          951 % LIST SPACING CONTROLS
          952 
          953 % Controls the amount of EXTRA spacing
          954 % above and below \trivlist 
          955 % Both \list and IED lists override this.
          956 % However, \trivlist will use this as will most
          957 % things built from \trivlist like the \center
          958 % environment.
          959 \topsep           0.5\baselineskip
          960 
          961 % Controls the additional spacing around lists preceded
          962 % or followed by blank lines. IEEE does not increase
          963 % spacing before or after paragraphs so it is set to zero.
          964 % \z@ is the same as zero, but faster.
          965 \partopsep          \z@
          966 
          967 % Controls the spacing between paragraphs in lists. 
          968 % IEEE does not increase spacing before or after paragraphs
          969 % so this is also zero. 
          970 % With IEEEtran.cls, global changes to
          971 % this value DO affect lists (but not IED lists).
          972 \parsep             \z@
          973 
          974 % Controls the extra spacing between list items. 
          975 % IEEE does not put extra spacing between items.
          976 % With IEEEtran.cls, global changes to this value DO affect
          977 % lists (but not IED lists).
          978 \itemsep            \z@
          979 
          980 % \itemindent is the amount to indent the FIRST line of a list
          981 % item. It is auto set to zero within the \list environment. To alter
          982 % it, you have to do so when you call the \list.
          983 % However, IEEE uses this for the theorem environment
          984 % There is an alternative value for this near \leftmargini below
          985 \itemindent         -1em
          986 
          987 % \leftmargin, the spacing from the left margin of the main text to
          988 % the left of the main body of a list item is set by \list.
          989 % Hence this statement does nothing for lists.
          990 % But, quote and verse do use it for indention.
          991 \leftmargin         2em
          992 
          993 % we retain this stuff from the older IEEEtran.cls so that \list
          994 % will work the same way as before. However, itemize, enumerate and
          995 % description (IED) could care less about what these are as they
          996 % all are overridden.
          997 \leftmargini        2em
          998 %\itemindent         2em  % Alternative values: sometimes used.
          999 %\leftmargini        0em
         1000 \leftmarginii       1em
         1001 \leftmarginiii    1.5em
         1002 \leftmarginiv     1.5em
         1003 \leftmarginv      1.0em
         1004 \leftmarginvi     1.0em
         1005 \labelsep         0.5em 
         1006 \labelwidth         \z@
         1007 
         1008 
         1009 % The old IEEEtran.cls behavior of \list is retained.
         1010 % However, the new V1.3 IED list environments override all the
         1011 % @list stuff (\@listX is called within \list for the
         1012 % appropriate level just before the user's list_decl is called). 
         1013 % \topsep is now 2pt as IEEE puts a little extra space around
         1014 % lists - used by those non-IED macros that depend on \list.
         1015 % Note that \parsep and \itemsep are not redefined as in 
         1016 % the sizexx.clo \@listX (which article.cls uses) so global changes
         1017 % of these values DO affect \list
         1018 % 
         1019 \def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt}
         1020 \let\@listI\@listi
         1021 \def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii%
         1022     \advance\labelwidth-\labelsep \topsep 2pt}
         1023 \def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii%
         1024     \advance\labelwidth-\labelsep \topsep 2pt}
         1025 \def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv%
         1026     \advance\labelwidth-\labelsep \topsep 2pt}
         1027 \def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv%
         1028     \advance\labelwidth-\labelsep \topsep 2pt}
         1029 \def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi%
         1030     \advance\labelwidth-\labelsep \topsep 2pt}
         1031 
         1032 
         1033 % IEEE uses 5) not 5.
         1034 \def\labelenumi{\theenumi)}     \def\theenumi{\arabic{enumi}}
         1035 
         1036 % IEEE uses a) not (a)
         1037 \def\labelenumii{\theenumii)}  \def\theenumii{\alph{enumii}}
         1038 
         1039 % IEEE uses iii) not iii.
         1040 \def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}}
         1041 
         1042 % IEEE uses A) not A.
         1043 \def\labelenumiv{\theenumiv)}   \def\theenumiv{\Alph{enumiv}}
         1044 
         1045 % exactly the same as in article.cls
         1046 \def\p@enumii{\theenumi}
         1047 \def\p@enumiii{\theenumi(\theenumii)}
         1048 \def\p@enumiv{\p@enumiii\theenumiii}
         1049 
         1050 % itemized list label styles
         1051 \def\labelitemi{$\scriptstyle\bullet$}
         1052 \def\labelitemii{\textbf{--}}
         1053 \def\labelitemiii{$\ast$}
         1054 \def\labelitemiv{$\cdot$}
         1055 
         1056 
         1057 
         1058 % **** V1.3 ENHANCEMENTS ****
         1059 % Itemize, Enumerate and Description (IED) List Controls
         1060 % ***************************
         1061 % 
         1062 % 
         1063 % IEEE seems to use at least two different values by
         1064 % which ITEMIZED list labels are indented to the right
         1065 % For The Journal of Lightwave Technology (JLT) and The Journal
         1066 % on Selected Areas in Communications (JSAC), they tend to use
         1067 % an indention equal to \parindent. For Transactions on Communications
         1068 % they tend to indent ITEMIZED lists a little more--- 1.3\parindent.
         1069 % We'll provide both values here for you so that you can choose 
         1070 % which one you like in your document using a command such as:
         1071 % setlength{\IEEEilabelindent}{\IEEEilabelindentB}
         1072 \newdimen\IEEEilabelindentA
         1073 \IEEEilabelindentA \parindent
         1074 
         1075 \newdimen\IEEEilabelindentB
         1076 \IEEEilabelindentB 1.3\parindent
         1077 % However, we'll default to using \parindent
         1078 % which makes more sense to me
         1079 \newdimen\IEEEilabelindent
         1080 \IEEEilabelindent \IEEEilabelindentA
         1081 
         1082 
         1083 % This controls the default amount the enumerated list labels
         1084 % are indented to the right.
         1085 % Normally, this is the same as the paragraph indention
         1086 \newdimen\IEEEelabelindent
         1087 \IEEEelabelindent \parindent
         1088 
         1089 % This controls the default amount the description list labels
         1090 % are indented to the right.
         1091 % Normally, this is the same as the paragraph indention
         1092 \newdimen\IEEEdlabelindent
         1093 \IEEEdlabelindent \parindent
         1094 
         1095 % This is the value actually used within the IED lists.
         1096 % The IED environments automatically set its value to
         1097 % one of the three values above, so global changes do 
         1098 % not have any effect
         1099 \newdimen\IEEElabelindent
         1100 \IEEElabelindent \parindent
         1101 
         1102 % The actual amount labels will be indented is
         1103 % \IEEElabelindent multiplied by the factor below
         1104 % corresponding to the level of nesting depth
         1105 % This provides a means by which the user can
         1106 % alter the effective \IEEElabelindent for deeper
         1107 % levels
         1108 % There may not be such a thing as correct "standard IEEE"
         1109 % values. What IEEE actually does may depend on the specific
         1110 % circumstances.
         1111 % The first list level almost always has full indention.
         1112 % The second levels I've seen have only 75% of the normal indentation
         1113 % Three level or greater nestings are very rare. I am guessing
         1114 % that they don't use any indentation.
         1115 \def\IEEElabelindentfactori{1.0}   % almost always one
         1116 \def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases
         1117 \def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0?
         1118 \def\IEEElabelindentfactoriv{0.0}
         1119 \def\IEEElabelindentfactorv{0.0}
         1120 \def\IEEElabelindentfactorvi{0.0}
         1121 
         1122 % value actually used within IED lists, it is auto
         1123 % set to one of the 6 values above
         1124 % global changes here have no effect
         1125 \def\IEEElabelindentfactor{1.0}
         1126 
         1127 % This controls the default spacing between the end of the IED
         1128 % list labels and the list text, when normal text is used for
         1129 % the labels.
         1130 \newdimen\IEEEiednormlabelsep
         1131 \IEEEiednormlabelsep 0.6em
         1132 
         1133 % This controls the default spacing between the end of the IED
         1134 % list labels and the list text, when math symbols are used for
         1135 % the labels (nomenclature lists). IEEE usually increases the 
         1136 % spacing in these cases
         1137 \newdimen\IEEEiedmathlabelsep
         1138 \IEEEiedmathlabelsep 1.2em
         1139 
         1140 % This controls the extra vertical separation put above and
         1141 % below each IED list. IEEE usually puts a little extra spacing
         1142 % around each list. However, this spacing is barely noticeable.
         1143 \newskip\IEEEiedtopsep
         1144 \IEEEiedtopsep 2pt plus 1pt minus 1pt
         1145 
         1146 
         1147 % This command is executed within each IED list environment
         1148 % at the beginning of the list. You can use this to set the 
         1149 % parameters for some/all your IED list(s) without disturbing 
         1150 % global parameters that affect things other than lists.
         1151 % i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}}
         1152 % will alter the \labelsep for the next list(s) until 
         1153 % \IEEEiedlistdecl is redefined. 
         1154 \def\IEEEiedlistdecl{\relax}
         1155 
         1156 % This command provides an easy way to set \leftmargin based
         1157 % on the \labelwidth, \labelsep and the argument \IEEElabelindent
         1158 % Usage: \IEEEcalcleftmargin{width-to-indent-the-label}
         1159 % output is in the \leftmargin variable, i.e., effectively:
         1160 % \leftmargin = argument + \labelwidth + \labelsep
         1161 % Note controlled spacing here, shield end of lines with %
         1162 \def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}%
         1163 \addtolength{\leftmargin}{\labelwidth}%
         1164 \addtolength{\leftmargin}{\labelsep}}
         1165 
         1166 % This command provides an easy way to set \labelwidth to the
         1167 % width of the given text. It is the same as
         1168 % \settowidth{\labelwidth}{label-text}
         1169 % and useful as a shorter alternative.
         1170 % Typically used to set \labelwidth to be the width
         1171 % of the longest label in the list
         1172 \def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}}
         1173 
         1174 % When this command is executed, IED lists will use the 
         1175 % IEEEiedmathlabelsep label separation rather than the normal
         1176 % spacing. To have an effect, this command must be executed via
         1177 % the \IEEEiedlistdecl or within the option of the IED list
         1178 % environments.
         1179 \def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}}
         1180 
         1181 % A flag which controls whether the IED lists automatically
         1182 % calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep
         1183 % Useful if you want to specify your own \leftmargin
         1184 % This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) 
         1185 % via the \IEEEiedlistdecl or within the option of the IED list
         1186 % environments to have an effect.
         1187 \newif\ifIEEEnocalcleftmargin
         1188 \IEEEnocalcleftmarginfalse
         1189 
         1190 % A flag which controls whether \IEEElabelindent is multiplied by
         1191 % the \IEEElabelindentfactor for each list level.
         1192 % This flag must be set via the \IEEEiedlistdecl or within the option 
         1193 % of the IED list environments to have an effect.
         1194 \newif\ifIEEEnolabelindentfactor
         1195 \IEEEnolabelindentfactorfalse
         1196 
         1197 
         1198 % internal variable to indicate type of IED label
         1199 % justification
         1200 % 0 - left; 1 - center; 2 - right
         1201 \def\@IEEEiedjustify{0}
         1202 
         1203 
         1204 % commands to allow the user to control IED
         1205 % label justifications. Use these commands within
         1206 % the IED environment option or in the \IEEEiedlistdecl
         1207 % Note that changing the normal list justifications
         1208 % is nonstandard and IEEE may not like it if you do so!
         1209 % I include these commands as they may be helpful to
         1210 % those who are using these enhanced list controls for
         1211 % other non-IEEE related LaTeX work.
         1212 % itemize and enumerate automatically default to right
         1213 % justification, description defaults to left.
         1214 \def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left
         1215 \def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center
         1216 \def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right
         1217 
         1218 
         1219 
         1220 
         1221 % commands to save to and restore from the list parameter copies
         1222 % this allows us to set all the list parameters within
         1223 % the list_decl and prevent \list (and its \@list) 
         1224 % from overriding any of our parameters
         1225 % V1.6 use \edefs instead of dimen's to conserve dimen registers
         1226 % Note controlled spacing here, shield end of lines with %
         1227 \def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}%
         1228 \edef\@IEEEiedlabelwidth{\the\labelwidth}%
         1229 \edef\@IEEEiedlabelsep{\the\labelsep}%
         1230 \edef\@IEEEiedleftmargin{\the\leftmargin}%
         1231 \edef\@IEEEiedpartopsep{\the\partopsep}%
         1232 \edef\@IEEEiedparsep{\the\parsep}%
         1233 \edef\@IEEEieditemsep{\the\itemsep}%
         1234 \edef\@IEEEiedrightmargin{\the\rightmargin}%
         1235 \edef\@IEEEiedlistparindent{\the\listparindent}%
         1236 \edef\@IEEEieditemindent{\the\itemindent}}
         1237 
         1238 % Note controlled spacing here
         1239 \def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax%
         1240 \labelwidth\@IEEEiedlabelwidth\relax%
         1241 \labelsep\@IEEEiedlabelsep\relax%
         1242 \leftmargin\@IEEEiedleftmargin\relax%
         1243 \partopsep\@IEEEiedpartopsep\relax%
         1244 \parsep\@IEEEiedparsep\relax%
         1245 \itemsep\@IEEEieditemsep\relax%
         1246 \rightmargin\@IEEEiedrightmargin\relax%
         1247 \listparindent\@IEEEiedlistparindent\relax%
         1248 \itemindent\@IEEEieditemindent\relax}
         1249 
         1250 
         1251 % v1.6b provide original LaTeX IED list environments
         1252 % note that latex.ltx defines \itemize and \enumerate, but not \description
         1253 % which must be created by the base classes
         1254 % save original LaTeX itemize and enumerate
         1255 \let\LaTeXitemize\itemize
         1256 \let\endLaTeXitemize\enditemize
         1257 \let\LaTeXenumerate\enumerate
         1258 \let\endLaTeXenumerate\endenumerate
         1259 
         1260 % provide original LaTeX description environment from article.cls
         1261 \newenvironment{LaTeXdescription}
         1262                {\list{}{\labelwidth\z@ \itemindent-\leftmargin
         1263                         \let\makelabel\descriptionlabel}}
         1264                {\endlist}
         1265 \newcommand*\descriptionlabel[1]{\hspace\labelsep
         1266                                  \normalfont\bfseries #1}
         1267 
         1268 
         1269 % override LaTeX's default IED lists
         1270 \def\itemize{\@IEEEitemize}
         1271 \def\enditemize{\@endIEEEitemize}
         1272 \def\enumerate{\@IEEEenumerate}
         1273 \def\endenumerate{\@endIEEEenumerate}
         1274 \def\description{\@IEEEdescription}
         1275 \def\enddescription{\@endIEEEdescription}
         1276 
         1277 % provide the user with aliases - may help those using packages that
         1278 % override itemize, enumerate, or description
         1279 \def\IEEEitemize{\@IEEEitemize}
         1280 \def\endIEEEitemize{\@endIEEEitemize}
         1281 \def\IEEEenumerate{\@IEEEenumerate}
         1282 \def\endIEEEenumerate{\@endIEEEenumerate}
         1283 \def\IEEEdescription{\@IEEEdescription}
         1284 \def\endIEEEdescription{\@endIEEEdescription}
         1285 
         1286 
         1287 % V1.6 we want to keep the IEEEtran IED list definitions as our own internal
         1288 % commands so they are protected against redefinition
         1289 \def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}}
         1290 \def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}}
         1291 \def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}}
         1292 \def\@endIEEEitemize{\endlist}
         1293 \def\@endIEEEenumerate{\endlist}
         1294 \def\@endIEEEdescription{\endlist}
         1295 
         1296 
         1297 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
         1298 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
         1299 % IEEEtran itemized list MDS 1/2001
         1300 % Note controlled spacing here, shield end of lines with %
         1301 \def\@@IEEEitemize[#1]{%
         1302                 \ifnum\@itemdepth>3\relax\@toodeep\else%
         1303                 \ifnum\@listdepth>5\relax\@toodeep\else%
         1304                 \advance\@itemdepth\@ne%
         1305                 \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
         1306                 % get the labelindentfactor for this level
         1307                 \advance\@listdepth\@ne% we need to know what the level WILL be
         1308                 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
         1309                 \advance\@listdepth-\@ne% undo our increment
         1310                 \def\@IEEEiedjustify{2}% right justified labels are default
         1311                 % set other defaults
         1312                 \IEEEnocalcleftmarginfalse%
         1313                 \IEEEnolabelindentfactorfalse%
         1314                 \topsep\IEEEiedtopsep%
         1315                 \IEEElabelindent\IEEEilabelindent%
         1316                 \labelsep\IEEEiednormlabelsep%
         1317                 \partopsep 0ex%
         1318                 \parsep 0ex%
         1319                 \itemsep 0ex%
         1320                 \rightmargin 0em%
         1321                 \listparindent 0em%
         1322                 \itemindent 0em%
         1323                 % calculate the label width
         1324                 % the user can override this later if
         1325                 % they specified a \labelwidth
         1326                 \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}%
         1327                 \@IEEEsavelistparams% save our list parameters
         1328                 \list{\csname\@itemitem\endcsname}{%
         1329                 \@IEEErestorelistparams% override any list{} changes
         1330                                        % to our globals
         1331                 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
         1332                 \IEEEiedlistdecl% let user alter parameters
         1333                 #1\relax%
         1334                 % If the user has requested not to use the
         1335                 % labelindent factor, don't revise \labelindent
         1336                 \ifIEEEnolabelindentfactor\relax%
         1337                 \else\IEEElabelindent=\IEEElabelindentfactor\labelindent%
         1338                 \fi%
         1339                 % Unless the user has requested otherwise,
         1340                 % calculate our left margin based
         1341                 % on \IEEElabelindent, \labelwidth and
         1342                 % \labelsep
         1343                 \ifIEEEnocalcleftmargin\relax%
         1344                 \else\IEEEcalcleftmargin{\IEEElabelindent}%
         1345                 \fi}\fi\fi}%
         1346 
         1347 
         1348 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
         1349 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
         1350 % IEEEtran enumerate list MDS 1/2001
         1351 % Note controlled spacing here, shield end of lines with %
         1352 \def\@@IEEEenumerate[#1]{%
         1353                 \ifnum\@enumdepth>3\relax\@toodeep\else%
         1354                 \ifnum\@listdepth>5\relax\@toodeep\else%
         1355                 \advance\@enumdepth\@ne%
         1356                 \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
         1357                 % get the labelindentfactor for this level
         1358                 \advance\@listdepth\@ne% we need to know what the level WILL be
         1359                 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
         1360                 \advance\@listdepth-\@ne% undo our increment
         1361                 \def\@IEEEiedjustify{2}% right justified labels are default
         1362                 % set other defaults
         1363                 \IEEEnocalcleftmarginfalse%
         1364                 \IEEEnolabelindentfactorfalse%
         1365                 \topsep\IEEEiedtopsep%
         1366                 \IEEElabelindent\IEEEelabelindent%
         1367                 \labelsep\IEEEiednormlabelsep%
         1368                 \partopsep 0ex%
         1369                 \parsep 0ex%
         1370                 \itemsep 0ex%
         1371                 \rightmargin 0em%
         1372                 \listparindent 0em%
         1373                 \itemindent 0em%
         1374                 % calculate the label width
         1375                 % We'll set it to the width suitable for all labels using
         1376                 % normalfont 1) to 9)
         1377                 % The user can override this later
         1378                 \settowidth{\labelwidth}{9)}%
         1379                 \@IEEEsavelistparams% save our list parameters
         1380                 \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}%
         1381                 \@IEEErestorelistparams% override any list{} changes
         1382                                        % to our globals
         1383                 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
         1384                 \IEEEiedlistdecl% let user alter parameters 
         1385                 #1\relax%
         1386                 % If the user has requested not to use the
         1387                 % IEEElabelindent factor, don't revise \IEEElabelindent
         1388                 \ifIEEEnolabelindentfactor\relax%
         1389                 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent%
         1390                 \fi%
         1391                 % Unless the user has requested otherwise,
         1392                 % calculate our left margin based
         1393                 % on \IEEElabelindent, \labelwidth and
         1394                 % \labelsep
         1395                 \ifIEEEnocalcleftmargin\relax%
         1396                 \else\IEEEcalcleftmargin{\IEEElabelindent}%
         1397                 \fi}\fi\fi}%
         1398 
         1399 
         1400 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
         1401 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
         1402 % IEEEtran description list MDS 1/2001
         1403 % Note controlled spacing here, shield end of lines with %
         1404 \def\@@IEEEdescription[#1]{%
         1405                 \ifnum\@listdepth>5\relax\@toodeep\else%
         1406                 % get the labelindentfactor for this level
         1407                 \advance\@listdepth\@ne% we need to know what the level WILL be
         1408                 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
         1409                 \advance\@listdepth-\@ne% undo our increment
         1410                 \def\@IEEEiedjustify{0}% left justified labels are default
         1411                 % set other defaults
         1412                 \IEEEnocalcleftmarginfalse%
         1413                 \IEEEnolabelindentfactorfalse%
         1414                 \topsep\IEEEiedtopsep% 
         1415                 \IEEElabelindent\IEEEdlabelindent%
         1416                 % assume normal labelsep
         1417                 \labelsep\IEEEiednormlabelsep%
         1418                 \partopsep 0ex%
         1419                 \parsep 0ex%
         1420                 \itemsep 0ex%
         1421                 \rightmargin 0em%
         1422                 \listparindent 0em%
         1423                 \itemindent 0em%
         1424                 % Bogus label width in case the user forgets
         1425                 % to set it.
         1426                 % TIP: If you want to see what a variable's width is you
         1427                 % can use the TeX command \showthe\width-variable to 
         1428                 % display it on the screen during compilation 
         1429                 % (This might be helpful to know when you need to find out
         1430                 % which label is the widest)
         1431                 \settowidth{\labelwidth}{Hello}%
         1432                 \@IEEEsavelistparams% save our list parameters
         1433                 \list{}{\@IEEErestorelistparams% override any list{} changes
         1434                                                % to our globals
         1435                 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
         1436                 \IEEEiedlistdecl% let user alter parameters 
         1437                 #1\relax%
         1438                 % If the user has requested not to use the
         1439                 % labelindent factor, don't revise \IEEElabelindent
         1440                 \ifIEEEnolabelindentfactor\relax%
         1441                 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent%
         1442                 \fi%
         1443                 % Unless the user has requested otherwise,
         1444                 % calculate our left margin based
         1445                 % on \IEEElabelindent, \labelwidth and
         1446                 % \labelsep
         1447                 \ifIEEEnocalcleftmargin\relax%
         1448                 \else\IEEEcalcleftmargin{\IEEElabelindent}\relax%
         1449                 \fi}\fi}
         1450 
         1451 % v1.6b we use one makelabel that does justification as needed.
         1452 \def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax
         1453 \makebox[\labelwidth][l]{\normalfont #1}\else
         1454 \if\@IEEEiedjustify 1\relax
         1455 \makebox[\labelwidth][c]{\normalfont #1}\else
         1456 \makebox[\labelwidth][r]{\normalfont #1}\fi\fi}
         1457 
         1458 
         1459 % VERSE and QUOTE
         1460 % V1.7 define environments with newenvironment
         1461 \newenvironment{verse}{\let\\=\@centercr
         1462     \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
         1463     \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax}
         1464     {\endlist}
         1465 \newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent
         1466     \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax}
         1467     {\endlist}
         1468 \newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax}
         1469     {\endlist}
         1470 
         1471 
         1472 % \titlepage
         1473 % provided only for backward compatibility. \maketitle is the correct
         1474 % way to create the title page. 
         1475 \newif\if@restonecol
         1476 \def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
         1477     \else \newpage \fi \thispagestyle{empty}\c@page\z@}
         1478 \def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
         1479 
         1480 % standard values from article.cls
         1481 \arraycolsep     5pt
         1482 \arrayrulewidth .4pt
         1483 \doublerulesep   2pt
         1484 
         1485 \tabcolsep       6pt
         1486 \tabbingsep      0.5em
         1487 
         1488 
         1489 %% FOOTNOTES
         1490 %
         1491 %\skip\footins 10pt plus 4pt minus 2pt
         1492 % V1.6 respond to changes in font size
         1493 % space added above the footnotes (if present)
         1494 \skip\footins 0.9\baselineskip  plus 0.4\baselineskip  minus 0.2\baselineskip
         1495 
         1496 % V1.6, we need to make \footnotesep responsive to changes
         1497 % in \baselineskip or strange spacings will result when in
         1498 % draft mode. Here is a little LaTeX secret - \footnotesep
         1499 % determines the height of an invisible strut that is placed
         1500 % *above* the baseline of footnotes after the first. Since
         1501 % LaTeX considers the space for characters to be 0.7/baselineskip
         1502 % above the baseline and 0.3/baselineskip below it, we need to
         1503 % use 0.7/baselineskip as a \footnotesep to maintain equal spacing
         1504 % between all the lines of the footnotes. IEEE often uses a tad
         1505 % more, so use 0.8\baselineskip. This slightly larger value also helps
         1506 % the text to clear the footnote marks. Note that \thanks in IEEEtran
         1507 % uses its own value of \footnotesep which is set in \maketitle.
         1508 {\footnotesize
         1509 \global\footnotesep 0.8\baselineskip}
         1510 
         1511 
         1512 \skip\@mpfootins = \skip\footins
         1513 \fboxsep = 3pt
         1514 \fboxrule = .4pt
         1515 % V1.6 use 1em, then use LaTeX2e's \@makefnmark
         1516 % Note that IEEE normally *left* aligns the footnote marks, so we don't need
         1517 % box resizing tricks here.
         1518 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em
         1519 % V1.7 compsoc does not use superscipts for footnote marks
         1520 \ifCLASSOPTIONcompsoc
         1521 \def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }}
         1522 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1}
         1523 \fi
         1524 
         1525 % IEEE does not use footnote rules
         1526 \def\footnoterule{}
         1527 
         1528 % V1.7 for compsoc, IEEE uses a footnote rule only for \thanks. We devise a "one-shot"
         1529 % system to implement this.
         1530 \newif\if@IEEEenableoneshotfootnoterule
         1531 \@IEEEenableoneshotfootnoterulefalse
         1532 \ifCLASSOPTIONcompsoc
         1533 \def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule
         1534 \kern-5pt
         1535 \hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill}
         1536 \kern4.6pt
         1537 \global\@IEEEenableoneshotfootnoterulefalse
         1538 \else
         1539 \relax
         1540 \fi}
         1541 \fi
         1542 
         1543 % V1.6 do not allow LaTeX to break a footnote across multiple pages
         1544 \interfootnotelinepenalty=10000
         1545 
         1546 % V1.6 discourage breaks within equations
         1547 % Note that amsmath normally sets this to 10000,
         1548 % but LaTeX2e normally uses 100.
         1549 \interdisplaylinepenalty=2500
         1550 
         1551 % default allows section depth up to /paragraph
         1552 \setcounter{secnumdepth}{4}
         1553 
         1554 % technotes do not allow /paragraph
         1555 \ifCLASSOPTIONtechnote
         1556    \setcounter{secnumdepth}{3}
         1557 \fi
         1558 % neither do compsoc conferences
         1559 \@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}}
         1560 
         1561 
         1562 \newcounter{section}
         1563 \newcounter{subsection}[section]
         1564 \newcounter{subsubsection}[subsection]
         1565 \newcounter{paragraph}[subsubsection]
         1566 
         1567 % used only by IEEEtran's IEEEeqnarray as other packages may
         1568 % have their own, different, implementations
         1569 \newcounter{IEEEsubequation}[equation]
         1570 
         1571 % as shown when called by user from \ref, \label and in table of contents
         1572 \def\theequation{\arabic{equation}}                          % 1
         1573 \def\theIEEEsubequation{\theequation\alph{IEEEsubequation}}  % 1a (used only by IEEEtran's IEEEeqnarray)
         1574 \ifCLASSOPTIONcompsoc
         1575 % compsoc is all arabic
         1576 \def\thesection{\arabic{section}}                
         1577 \def\thesubsection{\thesection.\arabic{subsection}}
         1578 \def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
         1579 \def\theparagraph{\thesubsubsection.\arabic{paragraph}}
         1580 \else
         1581 \def\thesection{\Roman{section}}                             % I
         1582 % V1.7, \mbox prevents breaks around - 
         1583 \def\thesubsection{\mbox{\thesection-\Alph{subsection}}}     % I-A
         1584 % V1.7 use I-A1 format used by IEEE rather than I-A.1
         1585 \def\thesubsubsection{\thesubsection\arabic{subsubsection}}  % I-A1
         1586 \def\theparagraph{\thesubsubsection\alph{paragraph}}         % I-A1a
         1587 \fi
         1588 
         1589 % From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to
         1590 % tell hyperref to disable the \mbox command when making PDF bookmarks.
         1591 % This done already with hyperref.sty version 6.74o and later, but
         1592 % it will not hurt to do it here again for users of older versions.
         1593 \@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}%
         1594 \g@addto@macro\pdfstringdefPreHook{\let\mbox\relax}
         1595 
         1596 
         1597 % Main text forms (how shown in main text headings)
         1598 % V1.6, using \thesection in \thesectiondis allows changes
         1599 % in the former to automatically appear in the latter
         1600 \ifCLASSOPTIONcompsoc
         1601   \ifCLASSOPTIONconference% compsoc conference
         1602     \def\thesectiondis{\thesection.}
         1603     \def\thesubsectiondis{\thesectiondis\arabic{subsection}.}
         1604     \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.}
         1605     \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.}
         1606   \else% compsoc not conferencs
         1607     \def\thesectiondis{\thesection}
         1608     \def\thesubsectiondis{\thesectiondis.\arabic{subsection}}
         1609     \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}}
         1610     \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}}
         1611   \fi
         1612 \else% not compsoc
         1613   \def\thesectiondis{\thesection.}                   % I.
         1614   \def\thesubsectiondis{\Alph{subsection}.}          % B.
         1615   \def\thesubsubsectiondis{\arabic{subsubsection})}  % 3)
         1616   \def\theparagraphdis{\alph{paragraph})}            % d)
         1617 \fi
         1618 
         1619 % just like LaTeX2e's \@eqnnum
         1620 \def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1)
         1621 % IEEEsubequation used only by IEEEtran's IEEEeqnarray
         1622 \def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a)
         1623 % redirect LaTeX2e's equation number display and all that depend on
         1624 % it, through IEEEtran's \theequationdis
         1625 \def\@eqnnum{\theequationdis}
         1626 
         1627 
         1628 
         1629 % V1.7 provide string macros as article.cls does
         1630 \def\contentsname{Contents}
         1631 \def\listfigurename{List of Figures}
         1632 \def\listtablename{List of Tables}
         1633 \def\refname{References}
         1634 \def\indexname{Index}
         1635 \def\figurename{Fig.}
         1636 \def\tablename{TABLE}
         1637 \@IEEEcompsocconfonly{\def\figurename{Figure}\def\tablename{Table}}
         1638 \def\partname{Part}
         1639 \def\appendixname{Appendix}
         1640 \def\abstractname{Abstract}
         1641 % IEEE specific names
         1642 \def\IEEEkeywordsname{Index Terms}
         1643 \def\IEEEproofname{Proof}
         1644 
         1645 
         1646 % LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS
         1647 %
         1648 \def\@pnumwidth{1.55em}
         1649 \def\@tocrmarg{2.55em}
         1650 \def\@dotsep{4.5}
         1651 \setcounter{tocdepth}{3}
         1652 
         1653 % adjusted some spacings here so that section numbers will not easily 
         1654 % collide with the section titles. 
         1655 % VIII; VIII-A; and VIII-A.1 are usually the worst offenders.
         1656 % MDS 1/2001
         1657 \def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
         1658 \def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}%
         1659     \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth%
         1660     \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par%
         1661     \endgroup}
         1662 % argument format #1:level, #2:labelindent,#3:labelsep
         1663 \def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}}
         1664 \def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}}
         1665 % must provide \l@ defs for ALL sublevels EVEN if tocdepth
         1666 % is such as they will not appear in the table of contents
         1667 % these defs are how TOC knows what level these things are!
         1668 \def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}}
         1669 \def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}}
         1670 \def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
         1671 \def\l@figure{\@dottedtocline{1}{0em}{2.75em}}
         1672 \def\listoftables{\section*{\listtablename}\@starttoc{lot}}
         1673 \let\l@table\l@figure
         1674 
         1675 
         1676 %% Definitions for floats
         1677 %%
         1678 %% Normal Floats
         1679 \floatsep 1\baselineskip plus  0.2\baselineskip minus  0.2\baselineskip
         1680 \textfloatsep 1.7\baselineskip plus  0.2\baselineskip minus  0.4\baselineskip
         1681 \@fptop 0pt plus 1fil
         1682 \@fpsep 0.75\baselineskip plus 2fil 
         1683 \@fpbot 0pt plus 1fil
         1684 \def\topfraction{0.9}
         1685 \def\bottomfraction{0.4}
         1686 \def\floatpagefraction{0.8}
         1687 % V1.7, let top floats approach 90% of page
         1688 \def\textfraction{0.1}
         1689 
         1690 %% Double Column Floats
         1691 \dblfloatsep 1\baselineskip plus  0.2\baselineskip minus  0.2\baselineskip
         1692 
         1693 \dbltextfloatsep 1.7\baselineskip plus  0.2\baselineskip minus  0.4\baselineskip
         1694 % Note that it would be nice if the rubber here actually worked in LaTeX2e.
         1695 % There is a long standing limitation in LaTeX, first discovered (to the best
         1696 % of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable
         1697 % portion of \dbltextfloatsep, and as a result, double column figures can and
         1698 % do result in an non-integer number of lines in the main text columns with
         1699 % underfull vbox errors as a consequence. A post to comp.text.tex
         1700 % by Donald Arseneau confirms that this had not yet been fixed in 1998.
         1701 % IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't
         1702 % protect you from other double floats. Happy vspace'ing.
         1703 
         1704 \@dblfptop 0pt plus 1fil
         1705 \@dblfpsep 0.75\baselineskip plus 2fil
         1706 \@dblfpbot 0pt plus 1fil
         1707 \def\dbltopfraction{0.8}
         1708 \def\dblfloatpagefraction{0.8}
         1709 \setcounter{dbltopnumber}{4}
         1710 
         1711 \intextsep 1\baselineskip plus 0.2\baselineskip minus  0.2\baselineskip
         1712 \setcounter{topnumber}{2}
         1713 \setcounter{bottomnumber}{2}
         1714 \setcounter{totalnumber}{4}
         1715 
         1716 
         1717 
         1718 % article class provides these, we should too.
         1719 \newlength\abovecaptionskip
         1720 \newlength\belowcaptionskip
         1721 % but only \abovecaptionskip is used above figure captions and *below* table
         1722 % captions
         1723 \setlength\abovecaptionskip{0.5\baselineskip}
         1724 \setlength\belowcaptionskip{0pt}
         1725 % V1.6 create hooks in case the caption spacing ever needs to be
         1726 % overridden by a user
         1727 \def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}%
         1728 \def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}%
         1729 
         1730 
         1731 % 1.6b revise caption system so that \@makecaption uses two arguments
         1732 % as with LaTeX2e. Otherwise, there will be problems when using hyperref.
         1733 \def\@IEEEtablestring{table}
         1734 
         1735 \ifCLASSOPTIONcompsoc
         1736 % V1.7 compsoc \@makecaption
         1737 \ifCLASSOPTIONconference% compsoc conference
         1738 \long\def\@makecaption#1#2{%
         1739 % test if is a for a figure or table
         1740 \ifx\@captype\@IEEEtablestring%
         1741 % if a table, do table caption
         1742 \normalsize\begin{center}{\normalfont\sffamily\normalsize {#1.}~ #2}\end{center}%
         1743 \@IEEEtablecaptionsepspace
         1744 % if not a table, format it as a figure
         1745 \else
         1746 \@IEEEfigurecaptionsepspace
         1747 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ #2}%
         1748 \ifdim \wd\@tempboxa >\hsize%
         1749 % if caption is longer than a line, let it wrap around
         1750 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ }%
         1751 \parbox[t]{\hsize}{\normalfont\sffamily\normalsize \noindent\unhbox\@tempboxa#2}%
         1752 % if caption is shorter than a line, center
         1753 \else%
         1754 \hbox to\hsize{\normalfont\sffamily\normalsize\hfil\box\@tempboxa\hfil}%
         1755 \fi\fi}
         1756 \else% nonconference compsoc
         1757 \long\def\@makecaption#1#2{%
         1758 % test if is a for a figure or table
         1759 \ifx\@captype\@IEEEtablestring%
         1760 % if a table, do table caption
         1761 \normalsize\begin{center}{\normalfont\sffamily\normalsize #1}\\{\normalfont\sffamily\normalsize #2}\end{center}%
         1762 \@IEEEtablecaptionsepspace
         1763 % if not a table, format it as a figure
         1764 \else
         1765 \@IEEEfigurecaptionsepspace
         1766 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ #2}%
         1767 \ifdim \wd\@tempboxa >\hsize%
         1768 % if caption is longer than a line, let it wrap around
         1769 \setbox\@tempboxa\hbox{\normalfont\sffamily\normalsize {#1.}~ }%
         1770 \parbox[t]{\hsize}{\normalfont\sffamily\normalsize \noindent\unhbox\@tempboxa#2}%
         1771 % if caption is shorter than a line, left justify
         1772 \else%
         1773 \hbox to\hsize{\normalfont\sffamily\normalsize\box\@tempboxa\hfil}%
         1774 \fi\fi}
         1775 \fi
         1776 
         1777 \else% traditional noncompsoc \@makecaption
         1778 \long\def\@makecaption#1#2{%
         1779 % test if is a for a figure or table
         1780 \ifx\@captype\@IEEEtablestring%
         1781 % if a table, do table caption
         1782 \footnotesize\begin{center}{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\end{center}%
         1783 \@IEEEtablecaptionsepspace
         1784 % if not a table, format it as a figure
         1785 \else
         1786 \@IEEEfigurecaptionsepspace
         1787 % 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one
         1788 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}~~ #2}%
         1789 \ifdim \wd\@tempboxa >\hsize%
         1790 % if caption is longer than a line, let it wrap around
         1791 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}~~ }%
         1792 \parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}%
         1793 % if caption is shorter than a line, center if conference, left justify otherwise
         1794 \else%
         1795 \ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}%
         1796 \else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}%
         1797 \fi\fi\fi}
         1798 \fi
         1799 
         1800 
         1801 
         1802 % V1.7 disable captions class option, do so in a way that retains operation of \label
         1803 % within \caption
         1804 \ifCLASSOPTIONcaptionsoff
         1805 \long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\begin{center}{\footnotesize #1}\end{center}%
         1806 \let\@IEEEtemporiglabeldefsave\label
         1807 \let\@IEEEtemplabelargsave\relax
         1808 \def\label##1{\gdef\@IEEEtemplabelargsave{##1}}%
         1809 \setbox\@tempboxa\hbox{#2}%
         1810 \let\label\@IEEEtemporiglabeldefsave
         1811 \ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi}
         1812 \fi
         1813 
         1814 
         1815 % V1.7 define end environments with \def not \let so as to work OK with
         1816 % preview-latex
         1817 \newcounter{figure}
         1818 \def\thefigure{\@arabic\c@figure}
         1819 \def\fps@figure{tbp}
         1820 \def\ftype@figure{1}
         1821 \def\ext@figure{lof}
         1822 \def\fnum@figure{\figurename~\thefigure}
         1823 \def\figure{\@float{figure}}
         1824 \def\endfigure{\end@float}
         1825 \@namedef{figure*}{\@dblfloat{figure}}
         1826 \@namedef{endfigure*}{\end@dblfloat}
         1827 \newcounter{table}
         1828 \ifCLASSOPTIONcompsoc
         1829 \def\thetable{\arabic{table}}
         1830 \else
         1831 \def\thetable{\@Roman\c@table}
         1832 \fi
         1833 \def\fps@table{tbp}
         1834 \def\ftype@table{2}
         1835 \def\ext@table{lot}
         1836 \def\fnum@table{\tablename~\thetable}
         1837 % V1.6 IEEE uses 8pt text for tables
         1838 % to default to footnotesize, we hack into LaTeX2e's \@floatboxreset and pray
         1839 \def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}}
         1840 \def\endtable{\end@float}
         1841 % v1.6b double column tables need to default to footnotesize as well.
         1842 \@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}}
         1843 \@namedef{endtable*}{\end@dblfloat}
         1844 
         1845 
         1846 
         1847 
         1848 %%
         1849 %% START OF IEEEeqnarry DEFINITIONS
         1850 %%
         1851 %% Inspired by the concepts, examples, and previous works of LaTeX 
         1852 %% coders and developers such as Donald Arseneau, Fred Bartlett, 
         1853 %% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, 
         1854 %% Roland Winkler and Mark Wooding.
         1855 %% I don't make the claim that my work here is even near their calibre. ;)
         1856 
         1857 
         1858 % hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting
         1859 \def\@IEEEclspkgerror{\ClassError{IEEEtran}}
         1860 
         1861 \newif\if@IEEEeqnarraystarform% flag to indicate if the environment was called as the star form
         1862 \@IEEEeqnarraystarformfalse
         1863 
         1864 \newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter
         1865 % allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray
         1866 % used by IEEEeqnarraymulticol so that it can work properly in both
         1867 \@advanceIEEEeqncolcnttrue
         1868 
         1869 \newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined
         1870 \newcount\@IEEEeqncolcnt  % tracks how many IEEEeqnarray cols the user actually used
         1871 
         1872 
         1873 % The default math style used by the columns
         1874 \def\IEEEeqnarraymathstyle{\displaystyle}
         1875 % The default text style used by the columns
         1876 % default to using the current font
         1877 \def\IEEEeqnarraytextstyle{\relax}
         1878 
         1879 % like the iedlistdecl but for \IEEEeqnarray
         1880 \def\IEEEeqnarraydecl{\relax}
         1881 \def\IEEEeqnarrayboxdecl{\relax}
         1882 
         1883 % \yesnumber is the opposite of \nonumber
         1884 % a novel concept with the same def as the equationarray package
         1885 % However, we give IEEE versions too since some LaTeX packages such as 
         1886 % the MDWtools mathenv.sty redefine \nonumber to something else.
         1887 \providecommand{\yesnumber}{\global\@eqnswtrue}
         1888 \def\IEEEyesnumber{\global\@eqnswtrue}
         1889 \def\IEEEnonumber{\global\@eqnswfalse}
         1890 
         1891 
         1892 \def\IEEEyessubnumber{\global\@IEEEissubequationtrue\global\@eqnswtrue%
         1893 \if@IEEEeqnarrayISinner% only do something inside an IEEEeqnarray
         1894 \if@IEEElastlinewassubequation\addtocounter{equation}{-1}\else\setcounter{IEEEsubequation}{1}\fi%
         1895 \def\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\fi}
         1896 
         1897 % flag to indicate that an equation is a sub equation
         1898 \newif\if@IEEEissubequation%
         1899 \@IEEEissubequationfalse
         1900 
         1901 % allows users to "push away" equations that get too close to the equation numbers
         1902 \def\IEEEeqnarraynumspace{\hphantom{\if@IEEEissubequation\theIEEEsubequationdis\else\theequationdis\fi}}
         1903 
         1904 % provides a way to span multiple columns within IEEEeqnarray environments
         1905 % will consider \if@advanceIEEEeqncolcnt before globally advancing the
         1906 % column counter - so as to work within \IEEEeqnarraybox
         1907 % usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text}
         1908 \long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}%
         1909 % check if column is defined
         1910 \relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined%
         1911 \csname @IEEEeqnarraycolPRE#2\endcsname#3\relax\relax\relax\relax\relax%
         1912 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST#2\endcsname%
         1913 \else% if not, error and use default type
         1914 \@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak
         1915 Using a default centering column instead}%
         1916 {You must define IEEEeqnarray column types before use.}%
         1917 \csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname#3\relax\relax\relax\relax\relax%
         1918 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname%
         1919 \fi%
         1920 % advance column counter only if the IEEEeqnarray environment wants it
         1921 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi}
         1922 
         1923 % like \omit, but maintains track of the column counter for \IEEEeqnarray
         1924 \def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi}
         1925 
         1926 
         1927 % provides a way to define a letter referenced column type
         1928 % usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text}
         1929 \def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}%
         1930 \expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}%
         1931 \expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}}
         1932 
         1933 
         1934 % provides a way to define a numerically referenced inter-column glue types
         1935 % usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition}
         1936 \def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}%
         1937 \expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}}
         1938 
         1939 
         1940 \def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types
         1941 
         1942 
         1943 % expands and appends the given argument to the \@IEEEtrantmptoksA token list
         1944 % used to build up the \halign preamble
         1945 \def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}%
         1946 \@@IEEEappendtoksA}
         1947 
         1948 % also appends to \@IEEEtrantmptoksA, but does not expand the argument
         1949 % uses \toks8 as a scratchpad register
         1950 \def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}%
         1951 \edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}%
         1952 \@@IEEEappendNOEXPANDtoksA}
         1953 
         1954 % define some common column types for the user
         1955 % math
         1956 \IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil}
         1957 \IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil}
         1958 \IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$}
         1959 \IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil}
         1960 \IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil}
         1961 \IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$}
         1962 % text
         1963 \IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil}
         1964 \IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil}
         1965 \IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{}
         1966 
         1967 % vertical rules
         1968 \IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth}
         1969 \IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth}
         1970 \IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth}
         1971 \IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}%
         1972 {\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth}
         1973 
         1974 % horizontal rules
         1975 \IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil}
         1976 \IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil}
         1977 
         1978 % plain
         1979 \IEEEeqnarraydefcol{x}{}{}
         1980 \IEEEeqnarraydefcol{X}{$}{$}
         1981 
         1982 % the default column type to use in the event a column type is not defined
         1983 \IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil}
         1984 
         1985 
         1986 % a zero tabskip (used for "-" col types)
         1987 \def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt}
         1988 % a centering tabskip (used for "+" col types)
         1989 \def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt}
         1990 
         1991 % top level default tabskip glues for the start, end, and inter-column
         1992 % may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox
         1993 \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue
         1994 \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue
         1995 \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue
         1996 
         1997 
         1998 
         1999 % creates a vertical rule that extends from the bottom to the top a a cell
         2000 % Provided in case other packages redefine \vline some other way.
         2001 % usage: \IEEEeqnarrayvrule[rule thickness]
         2002 % If no argument is provided, \arrayrulewidth will be used for the rule thickness. 
         2003 \newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax}
         2004 
         2005 % creates a blank separator row
         2006 % usage: \IEEEeqnarrayseprow[separation length][font size commands]
         2007 % default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax]
         2008 % blank arguments inherit the default values
         2009 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers
         2010 \def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}}
         2011 \def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}}
         2012 \def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}%
         2013 \ifx\@IEEEeqnarrayseprowARGONE\@empty%
         2014 % get the skip value, based on the font commands
         2015 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3
         2016 % assign within a bogus box to confine the font changes
         2017 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}%
         2018 \else%
         2019 {\setbox0=\hbox{#2\relax\global\skip5=#1}}%
         2020 \fi%
         2021 \@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax}
         2022 
         2023 % creates a blank separator row, but omits all the column templates
         2024 % usage: \IEEEeqnarrayseprowcut[separation length][font size commands]
         2025 % default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax]
         2026 % blank arguments inherit the default values
         2027 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers
         2028 \def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
         2029 % advance column counter only if the IEEEeqnarray environment wants it
         2030 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2031 \@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}}
         2032 \def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}}
         2033 \def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}%
         2034 \ifx\@IEEEeqnarrayseprowARGONE\@empty%
         2035 % get the skip value, based on the font commands
         2036 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3
         2037 % assign within a bogus box to confine the font changes
         2038 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}%
         2039 \else%
         2040 {\setbox0=\hbox{#2\relax\global\skip5=#1}}%
         2041 \fi%
         2042 \IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax}
         2043 
         2044 
         2045 
         2046 % draws a single rule across all the columns optional
         2047 % argument determines the rule width, \arrayrulewidth is the default
         2048 % updates column counter as needed and turns off struts
         2049 % usage: \IEEEeqnarrayrulerow[rule line thickness]
         2050 \def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
         2051 % advance column counter only if the IEEEeqnarray environment wants it
         2052 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2053 \@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}}
         2054 \def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule 
         2055 % turn off any struts
         2056 \IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax}
         2057 
         2058 
         2059 % draws a double rule by using a single rule row, a separator row, and then
         2060 % another single rule row 
         2061 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default
         2062 % second optional argument determines the rule spacing, \doublerulesep is the default
         2063 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing]
         2064 \def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
         2065 % advance column counter only if the IEEEeqnarray environment wants it
         2066 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2067 \@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}}
         2068 \def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}%
         2069 {\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}}
         2070 \def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}%
         2071 % we allow the user to say \IEEEeqnarraydblrulerow[][]
         2072 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2073 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
         2074 \else%
         2075 \@IEEEeqnarrayrulerow[#1]\relax%
         2076 \fi%
         2077 \def\@IEEEeqnarraydblrulerowARG{#2}%
         2078 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2079 \\\IEEEeqnarrayseprow[\doublerulesep][\relax]%
         2080 \else%
         2081 \\\IEEEeqnarrayseprow[#2][\relax]%
         2082 \fi%
         2083 \\\multispan{\@IEEEeqnnumcols}%
         2084 % advance column counter only if the IEEEeqnarray environment wants it
         2085 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2086 \def\@IEEEeqnarraydblrulerowARG{#1}%
         2087 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2088 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
         2089 \else%
         2090 \@IEEEeqnarrayrulerow[#1]%
         2091 \fi%
         2092 }
         2093 
         2094 % draws a double rule by using a single rule row, a separator (cutting) row, and then
         2095 % another single rule row 
         2096 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default
         2097 % second optional argument determines the rule spacing, \doublerulesep is the default
         2098 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing]
         2099 \def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
         2100 % advance column counter only if the IEEEeqnarray environment wants it
         2101 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2102 \@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}}
         2103 \def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}%
         2104 {\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}}
         2105 \def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}%
         2106 % we allow the user to say \IEEEeqnarraydblrulerow[][]
         2107 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2108 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
         2109 \else%
         2110 \@IEEEeqnarrayrulerow[#1]%
         2111 \fi%
         2112 \def\@IEEEeqnarraydblrulerowARG{#2}%
         2113 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2114 \\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]%
         2115 \else%
         2116 \\\IEEEeqnarrayseprowcut[#2][\relax]%
         2117 \fi%
         2118 \\\multispan{\@IEEEeqnnumcols}%
         2119 % advance column counter only if the IEEEeqnarray environment wants it
         2120 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
         2121 \def\@IEEEeqnarraydblrulerowARG{#1}%
         2122 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
         2123 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
         2124 \else%
         2125 \@IEEEeqnarrayrulerow[#1]%
         2126 \fi%
         2127 }
         2128 
         2129 
         2130 
         2131 % inserts a full row's worth of &'s
         2132 % relies on \@IEEEeqnnumcols to provide the correct number of columns
         2133 % uses \@IEEEtrantmptoksA, \count0 as scratch registers
         2134 \def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax%
         2135 \loop% add cols if the user did not use them all
         2136 \ifnum\count0<\@IEEEeqnnumcols\relax%
         2137 \@IEEEappendtoksA{&}%
         2138 \advance\count0 by 1\relax% update the col count
         2139 \repeat%
         2140 \the\@IEEEtrantmptoksA%execute the &'s
         2141 }
         2142 
         2143 
         2144 
         2145 \newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines
         2146 \@IEEEeqnarrayISinnerfalse    % of an IEEEeqnarray - after the IEEEeqnarraydecl
         2147 
         2148 \edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts
         2149 \edef\@IEEEeqnarrayTHEstrutdepth{0pt}
         2150 
         2151 \edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of
         2152 \edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt}  % struts within an IEEEeqnarray
         2153 
         2154 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height
         2155 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth
         2156 
         2157 \newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value
         2158 \@IEEEeqnarrayusemasterstruttrue     % is to be used
         2159 
         2160 
         2161 
         2162 % saves the strut height and depth of the master strut
         2163 \def\@IEEEeqnarraymasterstrutsave{\relax%
         2164 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
         2165 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
         2166 % remove stretchability
         2167 \dimen0\skip0\relax%
         2168 \dimen2\skip2\relax%
         2169 % save values
         2170 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}%
         2171 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}}
         2172 
         2173 % restores the strut height and depth of the master strut
         2174 \def\@IEEEeqnarraymasterstrutrestore{\relax%
         2175 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax%
         2176 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax%
         2177 % remove stretchability
         2178 \dimen0\skip0\relax%
         2179 \dimen2\skip2\relax%
         2180 % restore values
         2181 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
         2182 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}}
         2183 
         2184 
         2185 % globally restores the strut height and depth to the 
         2186 % master values and sets the master strut flag to true
         2187 \def\@IEEEeqnarraystrutreset{\relax%
         2188 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
         2189 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
         2190 % remove stretchability
         2191 \dimen0\skip0\relax%
         2192 \dimen2\skip2\relax%
         2193 % restore values
         2194 \xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
         2195 \xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
         2196 \global\@IEEEeqnarrayusemasterstruttrue}
         2197 
         2198 
         2199 % if the master strut is not to be used, make the current
         2200 % values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth
         2201 % and the use master strut flag, global
         2202 % this allows user strut commands issued in the last column to be carried
         2203 % into the isolation/strut column
         2204 \def\@IEEEeqnarrayglobalizestrutstatus{\relax%
         2205 \if@IEEEeqnarrayusemasterstrut\else%
         2206 \xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}%
         2207 \xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}%
         2208 \global\@IEEEeqnarrayusemasterstrutfalse%
         2209 \fi}
         2210 
         2211 
         2212 
         2213 % usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands]
         2214 % If called outside the lines of an IEEEeqnarray, sets the height
         2215 % and depth of both the master and local struts. If called inside
         2216 % an IEEEeqnarray line, sets the height and depth of the local strut
         2217 % only and sets the flag to indicate the use of the local strut
         2218 % values. If the height or depth is left blank, 0.7\normalbaselineskip
         2219 % and 0.3\normalbaselineskip will be used, respectively.
         2220 % The optional argument can be used to evaluate the lengths under
         2221 % a different font size and styles. If none is specified, the current
         2222 % font is used.
         2223 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2
         2224 \def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}}
         2225 \def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}%
         2226 \ifx\@IEEEeqnarraystrutsizeARG\@empty%
         2227 {\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}%
         2228 \skip0=\skip3\relax%
         2229 \else% arg one present
         2230 {\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}%
         2231 \skip0=\skip3\relax%
         2232 \fi% if null arg
         2233 \def\@IEEEeqnarraystrutsizeARG{#2}%
         2234 \ifx\@IEEEeqnarraystrutsizeARG\@empty%
         2235 {\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}%
         2236 \skip2=\skip3\relax%
         2237 \else% arg two present
         2238 {\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}%
         2239 \skip2=\skip3\relax%
         2240 \fi% if null arg
         2241 % remove stretchability, just to be safe
         2242 \dimen0\skip0\relax%
         2243 \dimen2\skip2\relax%
         2244 % dimen0 = height, dimen2 = depth
         2245 \if@IEEEeqnarrayISinner% inner does not touch master strut size
         2246 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
         2247 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
         2248 \@IEEEeqnarrayusemasterstrutfalse% do not use master
         2249 \else% outer, have to set master strut too
         2250 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
         2251 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}%
         2252 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
         2253 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
         2254 \@IEEEeqnarrayusemasterstruttrue% use master strut
         2255 \fi}
         2256 
         2257 
         2258 % usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands]
         2259 % If called outside the lines of an IEEEeqnarray, adds the given height
         2260 % and depth to both the master and local struts.
         2261 % If called inside an IEEEeqnarray line, adds the given height and depth
         2262 % to the local strut only and sets the flag to indicate the use 
         2263 % of the local strut values.
         2264 % In both cases, if a height or depth is left blank, 0pt is used instead.
         2265 % The optional argument can be used to evaluate the lengths under
         2266 % a different font size and styles. If none is specified, the current
         2267 % font is used.
         2268 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2
         2269 \def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}}
         2270 \def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}%
         2271 \ifx\@IEEEeqnarraystrutsizearg\@empty%
         2272 \skip0=0pt\relax%
         2273 \else% arg one present
         2274 {\setbox0=\hbox{#3\relax\global\skip3=#1}}%
         2275 \skip0=\skip3\relax%
         2276 \fi% if null arg
         2277 \def\@IEEEeqnarraystrutsizearg{#2}%
         2278 \ifx\@IEEEeqnarraystrutsizearg\@empty%
         2279 \skip2=0pt\relax%
         2280 \else% arg two present
         2281 {\setbox0=\hbox{#3\relax\global\skip3=#2}}%
         2282 \skip2=\skip3\relax%
         2283 \fi% if null arg
         2284 % remove stretchability, just to be safe
         2285 \dimen0\skip0\relax%
         2286 \dimen2\skip2\relax%
         2287 % dimen0 = height, dimen2 = depth
         2288 \if@IEEEeqnarrayISinner% inner does not touch master strut size
         2289 % get local strut size
         2290 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax%
         2291 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax%
         2292 % add it to the user supplied values
         2293 \advance\dimen0 by \skip0\relax%
         2294 \advance\dimen2 by \skip2\relax%
         2295 % update the local strut size
         2296 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
         2297 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
         2298 \@IEEEeqnarrayusemasterstrutfalse% do not use master
         2299 \else% outer, have to set master strut too
         2300 % get master strut size
         2301 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
         2302 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
         2303 % add it to the user supplied values
         2304 \advance\dimen0 by \skip0\relax%
         2305 \advance\dimen2 by \skip2\relax%
         2306 % update the local and master strut sizes
         2307 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
         2308 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}%
         2309 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
         2310 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
         2311 \@IEEEeqnarrayusemasterstruttrue% use master strut
         2312 \fi}
         2313 
         2314 
         2315 % allow user a way to see the struts
         2316 \newif\ifIEEEvisiblestruts
         2317 \IEEEvisiblestrutsfalse
         2318 
         2319 % inserts an invisible strut using the master or local strut values
         2320 % uses scratch registers \skip0, \skip2, \dimen0, \dimen2
         2321 \def\@IEEEeqnarrayinsertstrut{\relax%
         2322 \if@IEEEeqnarrayusemasterstrut
         2323 % get master strut size
         2324 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
         2325 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
         2326 \else%
         2327 % get local strut size
         2328 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax%
         2329 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax%
         2330 \fi%
         2331 % remove stretchability, probably not needed
         2332 \dimen0\skip0\relax%
         2333 \dimen2\skip2\relax%
         2334 % dimen0 = height, dimen2 = depth
         2335 % allow user to see struts if desired
         2336 \ifIEEEvisiblestruts%
         2337 \vrule width0.2pt height\dimen0 depth\dimen2\relax%
         2338 \else%
         2339 \vrule width0pt height\dimen0 depth\dimen2\relax\fi}
         2340 
         2341 
         2342 % creates an invisible strut, useable even outside \IEEEeqnarray
         2343 % if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. 
         2344 % usage: \IEEEstrut[height][depth][font size commands]
         2345 % default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax]
         2346 % blank arguments inherit the default values
         2347 % uses \dimen0, \dimen2, \skip0, \skip2
         2348 \def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}}
         2349 \def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}}
         2350 \def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}}
         2351 \def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax%
         2352 \def\@IEEEstrutARG{#1}%
         2353 \ifx\@IEEEstrutARG\@empty%
         2354 \skip0=0.7\normalbaselineskip\relax%
         2355 \else%
         2356 \skip0=#1\relax%
         2357 \fi%
         2358 \def\@IEEEstrutARG{#2}%
         2359 \ifx\@IEEEstrutARG\@empty%
         2360 \skip2=0.3\normalbaselineskip\relax%
         2361 \else%
         2362 \skip2=#2\relax%
         2363 \fi%
         2364 % remove stretchability, probably not needed
         2365 \dimen0\skip0\relax%
         2366 \dimen2\skip2\relax%
         2367 \ifIEEEvisiblestruts%
         2368 \vrule width0.2pt height\dimen0 depth\dimen2\relax%
         2369 \else%
         2370 \vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}}
         2371 
         2372 
         2373 % enables strut mode by setting a default strut size and then zeroing the
         2374 % \baselineskip, \lineskip, \lineskiplimit and \jot
         2375 \def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]%
         2376 \baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt}
         2377 
         2378 
         2379 
         2380 \def\IEEEeqnarray{\@IEEEeqnarraystarformfalse\@IEEEeqnarray}
         2381 \def\endIEEEeqnarray{\end@IEEEeqnarray}
         2382 
         2383 \@namedef{IEEEeqnarray*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarray}
         2384 \@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray}
         2385 
         2386 
         2387 % \IEEEeqnarray is an enhanced \eqnarray. 
         2388 % The star form defaults to not putting equation numbers at the end of each row.
         2389 % usage: \IEEEeqnarray[decl]{cols}
         2390 \def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}}
         2391 \def\@@IEEEeqnarray[#1]#2{%
         2392    % default to showing the equation number or not based on whether or not
         2393    % the star form was involked
         2394    \if@IEEEeqnarraystarform\global\@eqnswfalse
         2395    \else% not the star form
         2396    \global\@eqnswtrue
         2397    \fi% if star form
         2398    \@IEEEissubequationfalse% default to no subequations
         2399    \@IEEElastlinewassubequationfalse% assume last line is not a sub equation
         2400    \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign
         2401    \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default
         2402    \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise
         2403    \IEEEvisiblestrutsfalse% diagnostic mode defaults to off
         2404    % no extra space unless the user specifically requests it
         2405    \lineskip=0pt\relax
         2406    \lineskiplimit=0pt\relax
         2407    \baselineskip=\normalbaselineskip\relax%
         2408    \jot=\IEEEnormaljot\relax%
         2409    \mathsurround\z@\relax% no extra spacing around math
         2410    \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, 
         2411                              % used in \IEEEeqnarraymulticol and in the preamble build
         2412    \stepcounter{equation}% advance equation counter before first line
         2413    \setcounter{IEEEsubequation}{0}% no subequation yet 
         2414    \def\@currentlabel{\p@equation\theequation}% redefine the ref label
         2415    \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides
         2416    #1\relax% allow user to override defaults
         2417    \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers
         2418    \global\@IEEEeqncolcnt\z@% col. count = 0 for first line
         2419    \@IEEEbuildpreamble #2\end\relax% build the preamble and put it into \@IEEEtrantmptoksA 
         2420    % put in the column for the equation number
         2421    \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first
         2422    \toks0={##}%
         2423    % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking
         2424    \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}%
         2425    % add the isolation column
         2426    \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}%
         2427    % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking
         2428    \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}%
         2429    % add the equation number col to the preamble
         2430    \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}%
         2431    % note \@IEEEeqnnumcols does not count the equation col or isolation col
         2432    % set the starting tabskip glue as determined by the preamble build
         2433    \tabskip=\@IEEEBPstartglue\relax
         2434    % begin the display alignment
         2435    \@IEEEeqnarrayISinnertrue% commands are now within the lines
         2436    $$\everycr{}\halign to\displaywidth\bgroup
         2437    % "exspand" the preamble
         2438    \span\the\@IEEEtrantmptoksA\cr}
         2439 
         2440 % enter isolation/strut column (or the next column if the user did not use
         2441 % every column), record the strut status, complete the columns, do the strut if needed,
         2442 % restore counters to correct values and exit
         2443 \def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup%
         2444 \if@IEEElastlinewassubequation\global\advance\c@IEEEsubequation\m@ne\fi%
         2445 \global\advance\c@equation\m@ne%
         2446 $$\@ignoretrue}
         2447 
         2448 % need a way to remember if last line is a subequation
         2449 \newif\if@IEEElastlinewassubequation%
         2450 \@IEEElastlinewassubequationfalse
         2451 
         2452 % IEEEeqnarray uses a modifed \\ instead of the plain \cr to
         2453 % end rows. This allows for things like \\*[vskip amount]
         2454 % This "cr" macros are modified versions those for LaTeX2e's eqnarray
         2455 % the {\ifnum0=`} braces must be kept away from the last column to avoid
         2456 % altering spacing of its math, so we use & to advance to the next column
         2457 % as there is an isolation/strut column after the user's columns
         2458 \def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column
         2459    {\ifnum0=`}\fi
         2460    \@ifstar{%
         2461       \global\@eqpen\@M\@IEEEeqnarrayYCR
         2462    }{%
         2463       \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR
         2464    }%
         2465 }
         2466 
         2467 \def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip}
         2468 
         2469 \def\@IEEEeqnarrayXCR[#1]{%
         2470    \ifnum0=`{\fi}%
         2471    \@@IEEEeqnarraycr
         2472    \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}%
         2473 
         2474 \def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register
         2475     \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column
         2476     \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax
         2477     \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak
         2478                           environment}%
         2479     {Use fewer \string &'s or put more columns in the IEEEeqnarry column\MessageBreak 
         2480      specifications.}\relax%
         2481     \else
         2482     \loop% add cols if the user did not use them all
         2483     \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax
         2484     \@IEEEappendtoksA{&}%
         2485     \advance\@IEEEeqncolcnt by 1\relax% update the col count
         2486     \repeat
         2487     % this number of &'s will take us the the isolation column
         2488     \fi
         2489     % execute the &'s
         2490     \the\@IEEEtrantmptoksA%
         2491     % handle the strut/isolation column
         2492     \@IEEEeqnarrayinsertstrut% do the strut if needed
         2493     \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray
         2494     &% and enter the equation number column
         2495     % is this line needs an equation number, display it and advance the
         2496     % (sub)equation counters, record what type this line was
         2497     \if@eqnsw%
         2498      \if@IEEEissubequation\theIEEEsubequationdis\addtocounter{equation}{1}\stepcounter{IEEEsubequation}%
         2499      \global\@IEEElastlinewassubequationtrue%
         2500      \else% display a standard equation number, initialize the IEEEsubequation counter
         2501      \theequationdis\stepcounter{equation}\setcounter{IEEEsubequation}{0}%
         2502      \global\@IEEElastlinewassubequationfalse\fi%
         2503     \fi%
         2504     % reset the eqnsw flag to indicate default preference of the display of equation numbers
         2505     \if@IEEEeqnarraystarform\global\@eqnswfalse\else\global\@eqnswtrue\fi
         2506     \global\@IEEEissubequationfalse% reset the subequation flag
         2507     % reset the number of columns the user actually used
         2508     \global\@IEEEeqncolcnt\z@\relax
         2509     % the real end of the line
         2510     \cr}
         2511 
         2512 
         2513 
         2514 
         2515 
         2516 % \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything
         2517 % inside a vtop, vbox, or vcenter box depending on the letter in the second
         2518 % optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray,
         2519 % equation numbers are not displayed and \IEEEeqnarraybox can be nested.
         2520 % \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox
         2521 % within an hbox.
         2522 % \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within
         2523 % a \hbox{$ $} construct.
         2524 % \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or 
         2525 % \IEEEeqnarrayboxt depending on the math mode.
         2526 % The third optional argument specifies the width this box is to be set to -
         2527 % natural width is the default.
         2528 % The * forms do not add \jot line spacing
         2529 % usage: \IEEEeqnarraybox[decl][pos][width]{cols}
         2530 \def\IEEEeqnarrayboxm{\@IEEEeqnarraystarformfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox}
         2531 \def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox}
         2532 \@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox}
         2533 \@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox}
         2534 
         2535 \def\IEEEeqnarrayboxt{\@IEEEeqnarraystarformfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
         2536 \def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox}
         2537 \@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarraystarformtrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
         2538 \@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox}
         2539 
         2540 \def\IEEEeqnarraybox{\@IEEEeqnarraystarformfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
         2541 \@IEEEeqnarraybox}
         2542 \def\endIEEEeqnarraybox{\end@IEEEeqnarraybox}
         2543 
         2544 \@namedef{IEEEeqnarraybox*}{\@IEEEeqnarraystarformtrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
         2545 \@IEEEeqnarraybox}
         2546 \@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox}
         2547 
         2548 % flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} 
         2549 % for \vcenter in non-math mode
         2550 \newif\if@IEEEeqnarrayboxHBOXSW%
         2551 \@IEEEeqnarrayboxHBOXSWfalse
         2552 
         2553 \def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}}
         2554 \def\@@IEEEeqnarraybox[#1]{\relax\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}}
         2555 \def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}}
         2556 
         2557 % #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs
         2558 \def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign
         2559    \@IEEEeqnarraymasterstrutsave% save current master strut values
         2560    \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default
         2561    \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise
         2562    \IEEEvisiblestrutsfalse% diagnostic mode defaults to off
         2563    % no extra space unless the user specifically requests it
         2564    \lineskip=0pt\relax%
         2565    \lineskiplimit=0pt\relax%
         2566    \baselineskip=\normalbaselineskip\relax%
         2567    \jot=\IEEEnormaljot\relax%
         2568    \mathsurround\z@\relax% no extra spacing around math
         2569    % the default end glues are zero for an \IEEEeqnarraybox
         2570    \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue
         2571    \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue
         2572    \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue
         2573    \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, 
         2574                               % used in \IEEEeqnarraymulticol and in the preamble build
         2575    \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides
         2576    #1\relax% allow user to override defaults
         2577    \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing
         2578    \@IEEEbuildpreamble #4\end\relax% build the preamble and put it into \@IEEEtrantmptoksA
         2579    % add an isolation column to the preamble to stop \\'s {} from getting into the last col
         2580    \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first
         2581    \toks0={##}%
         2582    % add the isolation column to the preamble
         2583    \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% 
         2584    % set the starting tabskip glue as determined by the preamble build
         2585    \tabskip=\@IEEEBPstartglue\relax
         2586    % begin the alignment
         2587    \everycr{}%
         2588    % use only the very first token to determine the positioning
         2589    % this stops some problems when the user uses more than one letter,
         2590    % but is probably not worth the effort
         2591    % \noindent is used as a delimiter
         2592    \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}%
         2593    \@IEEEgrabfirstoken#2\relax\relax\noindent
         2594    % \@IEEEgrabbedfirstoken has the first token, the rest are discarded
         2595    % if we need to put things into and hbox and go into math mode, do so now
         2596    \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi%
         2597    % use the appropriate vbox type
         2598    \if\@IEEEgrabbedfirstoken t\relax\vtop\else\if\@IEEEgrabbedfirstoken c\relax%
         2599    \vcenter\else\vbox\fi\fi\bgroup%
         2600    \@IEEEeqnarrayISinnertrue% commands are now within the lines
         2601    \ifx#3\relax\halign\else\halign to #3\relax\fi%
         2602    \bgroup
         2603    % "exspand" the preamble
         2604    \span\the\@IEEEtrantmptoksA\cr}
         2605 
         2606 % carry strut status and enter the isolation/strut column, 
         2607 % exit from math mode if needed, and exit
         2608 \def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status
         2609 &% enter isolation/strut column
         2610 \@IEEEeqnarrayinsertstrut% do strut if needed
         2611 \@IEEEeqnarraymasterstrutrestore% restore the previous master strut values
         2612 % reset the strut system for next IEEEeqnarray
         2613 % (sets local strut values back to previous master strut values)
         2614 \@IEEEeqnarraystrutreset%
         2615 % ensure last line, exit from halign, close vbox
         2616 \crcr\egroup\egroup%
         2617 % exit from math mode and close hbox if needed
         2618 \if@IEEEeqnarrayboxHBOXSW $\egroup\fi}
         2619 
         2620 
         2621 
         2622 % IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to
         2623 % end rows. This allows for things like \\[vskip amount]
         2624 % This "cr" macros are modified versions those for LaTeX2e's eqnarray
         2625 % For IEEEeqnarraybox, \\* is the same as \\
         2626 % the {\ifnum0=`} braces must be kept away from the last column to avoid
         2627 % altering spacing of its math, so we use & to advance to the isolation/strut column
         2628 % carry strut status into isolation/strut column
         2629 \def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status
         2630 &% enter isolation/strut column
         2631 \@IEEEeqnarrayinsertstrut% do strut if needed
         2632 % reset the strut system for next line or IEEEeqnarray
         2633 \@IEEEeqnarraystrutreset%
         2634 {\ifnum0=`}\fi%
         2635 \@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}}
         2636 
         2637 % test and setup the optional argument to \\[]
         2638 \def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip}
         2639 
         2640 % IEEEeqnarraybox does not automatically increase line spacing by \jot
         2641 \def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}%
         2642 \cr\noalign{\if@IEEEeqnarraystarform\else\vskip\jot\fi\vskip#1\relax}}
         2643 
         2644 
         2645 
         2646 % starts the halign preamble build
         2647 \def\@IEEEbuildpreamble{\@IEEEtrantmptoksA={}% clear token register
         2648 \let\@IEEEBPcurtype=u%current column type is not yet known
         2649 \let\@IEEEBPprevtype=s%the previous column type was the start
         2650 \let\@IEEEBPnexttype=u%next column type is not yet known
         2651 % ensure these are valid
         2652 \def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}%
         2653 \def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition
         2654 % currently acquired numerically referenced glue
         2655 % use a name that is easier to remember
         2656 \let\@IEEEBPcurnum=\@IEEEtrantmpcountA%
         2657 \@IEEEBPcurnum=0%
         2658 % tracks number of columns in the preamble
         2659 \@IEEEeqnnumcols=0%
         2660 % record the default end glues
         2661 \edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}%
         2662 \edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}%
         2663 % now parse the user's column specifications
         2664 \@@IEEEbuildpreamble}
         2665 
         2666 
         2667 % parses and builds the halign preamble
         2668 \def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble%
         2669 % use only the very first token to check the end
         2670 % \noindent is used as a delimiter as \end can be present here
         2671 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}%
         2672 \@IEEEgrabfirstoken#1\relax\relax\noindent
         2673 \ifx\@IEEEgrabbedfirstoken\end\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else%
         2674 % identify current and next token type
         2675 \@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid
         2676 \@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next
         2677 % if curtype is a glue, get the glue def
         2678 \if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi%
         2679 % if curtype is a column, get the column def and set the current column name
         2680 \if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi%
         2681 % if curtype is a numeral, acquire the user defined glue
         2682 \if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi%
         2683 % process the acquired glue 
         2684 \if\@IEEEBPcurtype g\@IEEEprocessGcol\fi%
         2685 % process the acquired col 
         2686 \if\@IEEEBPcurtype c\@IEEEprocessCcol\fi%
         2687 % ready prevtype for next col spec.
         2688 \let\@IEEEBPprevtype=\@IEEEBPcurtype%
         2689 % be sure and put back the future token(s) as a group
         2690 \fi\@@nextIEEEbuildpreamble{#2}}
         2691 
         2692 
         2693 % executed just after preamble build is completed
         2694 % warn about zero cols, and if prevtype type = u, put in end tabskip glue
         2695 \def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax
         2696 \@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}%
         2697 {At least one column type must be declared for each IEEEeqnarray.}%
         2698 \fi%num cols less than 1
         2699 %if last type undefined, set default end tabskip glue
         2700 \if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi}
         2701 
         2702 
         2703 % Identify and return the column specifier's type code
         2704 \def\@IEEEgetcoltype#1#2#3{%
         2705 % use only the very first token to determine the type
         2706 % \noindent is used as a delimiter as \end can be present here
         2707 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}%
         2708 \@IEEEgrabfirstoken#1\relax\relax\noindent
         2709 % \@IEEEgrabfirstoken has the first token, the rest are discarded
         2710 % n = number
         2711 % g = glue (any other char in catagory 12)
         2712 % c = letter
         2713 % e = \end
         2714 % u = undefined
         2715 % third argument: 0 = no error message, 1 = error on invalid char
         2716 \let#2=u\relax% assume invalid until know otherwise
         2717 \ifx\@IEEEgrabbedfirstoken\end\let#2=e\else
         2718 \ifcat\@IEEEgrabbedfirstoken\relax\else% screen out control sequences
         2719 \if0\@IEEEgrabbedfirstoken\let#2=n\else
         2720 \if1\@IEEEgrabbedfirstoken\let#2=n\else
         2721 \if2\@IEEEgrabbedfirstoken\let#2=n\else
         2722 \if3\@IEEEgrabbedfirstoken\let#2=n\else
         2723 \if4\@IEEEgrabbedfirstoken\let#2=n\else
         2724 \if5\@IEEEgrabbedfirstoken\let#2=n\else
         2725 \if6\@IEEEgrabbedfirstoken\let#2=n\else
         2726 \if7\@IEEEgrabbedfirstoken\let#2=n\else
         2727 \if8\@IEEEgrabbedfirstoken\let#2=n\else
         2728 \if9\@IEEEgrabbedfirstoken\let#2=n\else
         2729 \ifcat,\@IEEEgrabbedfirstoken\let#2=g\relax
         2730 \else\ifcat a\@IEEEgrabbedfirstoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
         2731 \if#2u\relax
         2732 \if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}%
         2733 {Only letters, numerals and certain other symbols are allowed \MessageBreak
         2734 as IEEEeqnarray column specifiers.}\fi\fi}
         2735 
         2736 
         2737 % identify the current letter referenced column
         2738 % if invalid, use a default column
         2739 \def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined%
         2740 \def\@IEEEBPcurcolname{#1}\else% invalid column name
         2741 \@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak
         2742 Using a default centering column instead}%
         2743 {You must define IEEEeqnarray column types before use.}%
         2744 \def\@IEEEBPcurcolname{@IEEEdefault}\fi}
         2745 
         2746 
         2747 % identify and return the predefined (punctuation) glue value
         2748 \def\@IEEEgetcurglue#1#2{%
         2749 % ! = \! (neg small)  -0.16667em (-3/18 em)
         2750 % , = \, (small)       0.16667em ( 3/18 em)
         2751 % : = \: (med)         0.22222em ( 4/18 em)
         2752 % ; = \; (large)       0.27778em ( 5/18 em)
         2753 % ' = \quad            1em
         2754 % " = \qquad           2em
         2755 % . = 0.5\arraycolsep
         2756 % / = \arraycolsep
         2757 % ? = 2\arraycolsep
         2758 % * = 1fil
         2759 % + = \@IEEEeqnarraycolSEPcenter
         2760 % - = \@IEEEeqnarraycolSEPzero
         2761 % Note that all em values are referenced to the math font (textfont2) fontdimen6
         2762 % value for 1em.
         2763 % 
         2764 % use only the very first token to determine the type
         2765 % this prevents errant tokens from getting in the main text
         2766 % \noindent is used as a delimiter here
         2767 \def\@IEEEgrabfirstoken##1##2\noindent{\let\@IEEEgrabbedfirstoken=##1}%
         2768 \@IEEEgrabfirstoken#1\relax\relax\noindent
         2769 % get the math font 1em value
         2770 % LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs
         2771 % to gain access to the math (\textfont2) font's spacing parameters.
         2772 % So we create a bogus box here that uses the math font to ensure
         2773 % that \textfont2 is loaded and ready. If this is not done,
         2774 % the \textfont2 stuff here may not work.
         2775 % Thanks to Bernd Raichle for his 1997 post on this topic.
         2776 {\setbox0=\hbox{$\displaystyle\relax$}}%
         2777 % fontdimen6 has the width of 1em (a quad).
         2778 \@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax%
         2779 % identify the glue value based on the first token
         2780 % we discard anything after the first
         2781 \if!\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2782 \if,\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2783 \if:\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2784 \if;\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2785 \if'\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2786 \if"\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
         2787 \if.\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else
         2788 \if/\@IEEEgrabbedfirstoken\edef#2{\the\arraycolsep}\else
         2789 \if?\@IEEEgrabbedfirstoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else
         2790 \if *\@IEEEgrabbedfirstoken\edef#2{0pt plus 1fil minus 0pt}\else
         2791 \if+\@IEEEgrabbedfirstoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else
         2792 \if-\@IEEEgrabbedfirstoken\edef#2{\@IEEEeqnarraycolSEPzero}\else
         2793 \edef#2{\@IEEEeqnarraycolSEPzero}%
         2794 \@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak
         2795 column specifications. Using a default value of\MessageBreak
         2796 0pt instead}%
         2797 {Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak 
         2798 IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
         2799 
         2800 
         2801 
         2802 % process a numerical digit from the column specification
         2803 % and look up the corresponding user defined glue value
         2804 % can transform current type from n to g or a as the user defined glue is acquired
         2805 \def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g%
         2806 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak
         2807 specifications. Ignoring consecutive glue specifiers\MessageBreak
         2808 after the first}%
         2809 {You cannot have two or more glue types next to each other\MessageBreak 
         2810 in the IEEEeqnarray column specifications.}%
         2811 \let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded
         2812 \@IEEEBPcurnum=0\relax%
         2813 \else% if we previously aborted a glue
         2814 \if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion
         2815 \else%acquire this number
         2816 % save the previous type before the numerical digits started
         2817 \if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi%
         2818 \multiply\@IEEEBPcurnum by 10\relax%
         2819 \advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan
         2820 \if\@IEEEBPnexttype n\else%close acquisition
         2821 \expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined%
         2822 \edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}%
         2823 \else%user glue not defined
         2824 \@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak
         2825 column specifications. Using a default value of\MessageBreak
         2826 0pt instead}%
         2827 {You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak
         2828 \string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}%
         2829 \edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}%
         2830 \fi% glue defined or not
         2831 \let\@IEEEBPcurtype=g% change the type to reflect the acquired glue
         2832 \let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue
         2833 \@IEEEBPcurnum=0\relax%ready for next acquisition
         2834 \fi%close acquisition, get glue
         2835 \fi%discard or acquire number
         2836 \fi%prevtype glue or not
         2837 }
         2838 
         2839 
         2840 % process an acquired glue
         2841 % add any acquired column/glue pair to the preamble
         2842 \def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions
         2843 \else
         2844 % if this is the start glue, save it, but do nothing else 
         2845 % as this is not used in the preamble, but before
         2846 \if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}%
         2847 \else%not the start glue
         2848 \if\@IEEEBPprevtype g%ignore if back to back glues
         2849 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak
         2850 specifications. Ignoring consecutive glue specifiers\MessageBreak
         2851 after the first}%
         2852 {You cannot have two or more glue types next to each other\MessageBreak 
         2853 in the IEEEeqnarray column specifications.}%
         2854 \let\@IEEEBPcurtype=a% abort this glue
         2855 \else% not a back to back glue
         2856 \if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble
         2857 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi
         2858 \toks0={##}%
         2859 % make preamble advance col counter if this environment needs this
         2860 \if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi
         2861 % insert the column defintion into the preamble, being careful not to expand
         2862 % the column definition
         2863 \@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}%
         2864 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}%
         2865 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
         2866 \@IEEEappendNOEXPANDtoksA{\endcsname}%
         2867 \@IEEEappendtoksA{\the\toks0}%
         2868 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax%
         2869 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}%
         2870 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
         2871 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax%
         2872 \relax\relax\relax\relax\relax\endgroup}%
         2873 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble
         2874 \else% error: non-start glue with no pending column
         2875 \@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak
         2876 type in the column specifications. Ignoring this glue\MessageBreak 
         2877 specifier}%
         2878 {Except for the first and last positions, glue can be placed only\MessageBreak
         2879 between column types.}%
         2880 \let\@IEEEBPcurtype=a% abort this glue
         2881 \fi% previous was a column
         2882 \fi% back-to-back glues
         2883 \fi% is start column glue
         2884 \fi% prev type not a
         2885 }
         2886 
         2887 
         2888 % process an acquired letter referenced column and, if necessary, add it to the preamble
         2889 \def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else
         2890 \if\@IEEEBPnexttype n\else
         2891 % we have a column followed by something other than a glue (or numeral glue)
         2892 % so we must add this column to the preamble now
         2893 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first
         2894 \if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue
         2895 \@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue
         2896 \toks0={##}%
         2897 % make preamble advance col counter if this environment needs this
         2898 \if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi
         2899 % insert the column definition into the preamble, being careful not to expand
         2900 % the column definition
         2901 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}%
         2902 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
         2903 \@IEEEappendNOEXPANDtoksA{\endcsname}%
         2904 \@IEEEappendtoksA{\the\toks0}%
         2905 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax%
         2906 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}%
         2907 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
         2908 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax%
         2909 \relax\relax\relax\relax\relax\endgroup}%
         2910 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble
         2911 \fi%next type not numeral
         2912 \fi%next type not glue
         2913 }
         2914 
         2915 
         2916 %%
         2917 %% END OF IEEEeqnarry DEFINITIONS
         2918 %%
         2919 
         2920 
         2921 
         2922 
         2923 % set up the running headings, this complex because of all the different
         2924 % modes IEEEtran supports
         2925 \if@twoside
         2926  \ifCLASSOPTIONtechnote
         2927    \def\ps@headings{%
         2928        \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}
         2929        \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}
         2930        \ifCLASSOPTIONdraftcls
         2931             \ifCLASSOPTIONdraftclsnofoot
         2932                \def\@oddfoot{}\def\@evenfoot{}%
         2933             \else
         2934                \def\@oddfoot{\scriptsize\@date\hfil DRAFT}
         2935                \def\@evenfoot{\scriptsize DRAFT\hfil\@date}
         2936             \fi
         2937        \else
         2938             \def\@oddfoot{}\def\@evenfoot{}
         2939        \fi}
         2940  \else % not a technote
         2941    \def\ps@headings{%
         2942        \ifCLASSOPTIONconference
         2943         \def\@oddhead{}
         2944         \def\@evenhead{}
         2945        \else
         2946         \def\@oddhead{\hbox{}\scriptsize\rightmark \hfil \thepage}
         2947         \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}
         2948        \fi
         2949        \ifCLASSOPTIONdraftcls
         2950             \def\@oddhead{\hbox{}\scriptsize\rightmark \hfil \thepage}
         2951             \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}
         2952             \ifCLASSOPTIONdraftclsnofoot
         2953                \def\@oddfoot{}\def\@evenfoot{}%
         2954             \else
         2955                \def\@oddfoot{\scriptsize\@date\hfil DRAFT}
         2956                \def\@evenfoot{\scriptsize DRAFT\hfil\@date}
         2957             \fi
         2958        \else
         2959             \def\@oddfoot{}\def\@evenfoot{}%
         2960        \fi}
         2961  \fi
         2962 \else % single side
         2963 \def\ps@headings{%
         2964     \ifCLASSOPTIONconference
         2965      \def\@oddhead{}
         2966      \def\@evenhead{}
         2967     \else
         2968      \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}
         2969      \def\@evenhead{}
         2970     \fi
         2971     \ifCLASSOPTIONdraftcls
         2972           \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}
         2973           \def\@evenhead{}
         2974           \ifCLASSOPTIONdraftclsnofoot
         2975              \def\@oddfoot{}
         2976           \else
         2977              \def\@oddfoot{\scriptsize \@date \hfil DRAFT}
         2978           \fi
         2979     \else
         2980          \def\@oddfoot{}
         2981     \fi
         2982     \def\@evenfoot{}}
         2983 \fi
         2984 
         2985 
         2986 % title page style
         2987 \def\ps@IEEEtitlepagestyle{\def\@oddfoot{}\def\@evenfoot{}%
         2988 \ifCLASSOPTIONconference
         2989    \def\@oddhead{}%
         2990    \def\@evenhead{}%
         2991 \else
         2992    \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}%
         2993    \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}%
         2994 \fi
         2995 \ifCLASSOPTIONdraftcls
         2996    \def\@oddhead{\hbox{}\scriptsize\leftmark \hfil \thepage}%
         2997    \def\@evenhead{\scriptsize\thepage \hfil \leftmark\hbox{}}%
         2998    \ifCLASSOPTIONdraftclsnofoot\else
         2999       \def\@oddfoot{\scriptsize \@date\hfil DRAFT}%
         3000       \def\@evenfoot{\scriptsize DRAFT\hfil \@date}%
         3001    \fi
         3002 \else
         3003    % all non-draft mode footers
         3004    \if@IEEEusingpubid
         3005       % for title pages that are using a pubid
         3006       % do not repeat pubid if using peer review option
         3007       \ifCLASSOPTIONpeerreview
         3008       \else
         3009          \footskip 0pt%
         3010          \ifCLASSOPTIONcompsoc
         3011            \def\@oddfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}%
         3012            \def\@evenfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}%
         3013          \else
         3014            \def\@oddfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}%
         3015            \def\@evenfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}%
         3016          \fi
         3017       \fi
         3018    \fi
         3019 \fi}
         3020 
         3021 
         3022 % peer review cover page style
         3023 \def\ps@IEEEpeerreviewcoverpagestyle{%
         3024 \def\@oddhead{}\def\@evenhead{}%
         3025 \def\@oddfoot{}\def\@evenfoot{}%
         3026 \ifCLASSOPTIONdraftcls
         3027    \ifCLASSOPTIONdraftclsnofoot\else
         3028       \def\@oddfoot{\scriptsize \@date\hfil DRAFT}%
         3029       \def\@evenfoot{\scriptsize DRAFT\hfil \@date}%
         3030    \fi
         3031 \else
         3032    % non-draft mode footers
         3033    \if@IEEEusingpubid
         3034       \footskip 0pt%
         3035       \ifCLASSOPTIONcompsoc
         3036         \def\@oddfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}%
         3037         \def\@evenfoot{\hss\normalfont\scriptsize\raisebox{-1.5\@IEEEnormalsizeunitybaselineskip}[0ex][0ex]{\@IEEEpubid}\hss}%
         3038       \else
         3039         \def\@oddfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}%
         3040         \def\@evenfoot{\hss\normalfont\footnotesize\raisebox{1.5ex}[1.5ex]{\@IEEEpubid}\hss}%
         3041       \fi
         3042    \fi
         3043 \fi}
         3044 
         3045 
         3046 % start with empty headings
         3047 \def\rightmark{}\def\leftmark{}
         3048 
         3049 
         3050 %% Defines the command for putting the header. \footernote{TEXT} is the same
         3051 %% as \markboth{TEXT}{TEXT}. 
         3052 %% Note that all the text is forced into uppercase, if you have some text
         3053 %% that needs to be in lower case, for instance et. al., then either manually
         3054 %% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the
         3055 %% arguments to \markboth.
         3056 \def\markboth#1#2{\def\leftmark{\@IEEEcompsoconly{\sffamily}\MakeUppercase{#1}}%
         3057 \def\rightmark{\@IEEEcompsoconly{\sffamily}\MakeUppercase{#2}}}
         3058 \def\footernote#1{\markboth{#1}{#1}}
         3059 
         3060 \def\today{\ifcase\month\or
         3061     January\or February\or March\or April\or May\or June\or
         3062     July\or August\or September\or October\or November\or December\fi
         3063     \space\number\day, \number\year}
         3064 
         3065 
         3066 
         3067 
         3068 %% CITATION AND BIBLIOGRAPHY COMMANDS
         3069 %% 
         3070 %% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff
         3071 % 
         3072 % 
         3073 % Modify Latex2e \@citex to separate citations with "], ["
         3074 \def\@citex[#1]#2{%
         3075   \let\@citea\@empty
         3076   \@cite{\@for\@citeb:=#2\do
         3077     {\@citea\def\@citea{], [}%
         3078      \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
         3079      \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
         3080      \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
         3081        \G@refundefinedtrue
         3082        \@latex@warning
         3083          {Citation `\@citeb' on page \thepage \space undefined}}%
         3084        {\hbox{\csname b@\@citeb\endcsname}}}}{#1}}
         3085 
         3086 % V1.6 we create hooks for the optional use of Donald Arseneau's
         3087 % cite.sty package. cite.sty is "smart" and will notice that the
         3088 % following format controls are already defined and will not
         3089 % redefine them. The result will be the proper sorting of the
         3090 % citation numbers and auto detection of 3 or more entry "ranges" -
         3091 % all in IEEE style:  [1], [2], [5]--[7], [12]
         3092 % This also allows for an optional note, i.e., \cite[mynote]{..}.
         3093 % If the \cite with note has more than one reference, the note will
         3094 % be applied to the last of the listed references. It is generally
         3095 % desired that if a note is given, only one reference is listed in
         3096 % that \cite.
         3097 % Thanks to Mr. Arseneau for providing the required format arguments
         3098 % to produce the IEEE style.
         3099 \def\citepunct{], [}
         3100 \def\citedash{]--[}
         3101 
         3102 % V1.7 default to using same font for urls made by url.sty
         3103 \AtBeginDocument{\csname url@samestyle\endcsname}
         3104 
         3105 % V1.6 class files should always provide these
         3106 \def\newblock{\hskip .11em\@plus.33em\@minus.07em}
         3107 \let\@openbib@code\@empty
         3108 
         3109 
         3110 % Provide support for the control entries of IEEEtran.bst V1.00 and later.
         3111 % V1.7 optional argument allows for a different aux file to be specified in
         3112 % order to handle multiple bibliographies. For example, with multibib.sty:
         3113 % \newcites{sec}{Secondary Literature}
         3114 % \bstctlcite[@auxoutsec]{BSTcontrolhak}
         3115 \def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
         3116 \def\@bstctlcite[#1]#2{\@bsphack
         3117   \@for\@citeb:=#2\do{%
         3118     \edef\@citeb{\expandafter\@firstofone\@citeb}%
         3119     \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
         3120   \@esphack}
         3121 
         3122 % V1.6 provide a way for a user to execute a command just before 
         3123 % a given reference number - used to insert a \newpage to balance
         3124 % the columns on the last page
         3125 \edef\@IEEEtriggerrefnum{0}   % the default of zero means that
         3126                               % the command is not executed
         3127 \def\@IEEEtriggercmd{\newpage}
         3128 
         3129 % allow the user to alter the triggered command
         3130 \long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}}
         3131 
         3132 % allow user a way to specify the reference number just before the
         3133 % command is executed
         3134 \def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1%
         3135 \edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}%
         3136 
         3137 % trigger command at the given reference
         3138 \def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax%
         3139 \advance\@IEEEtrantmpcountA by -1\relax%
         3140 \ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi}
         3141 
         3142 
         3143 \def\@biblabel#1{[#1]}
         3144 
         3145 % compsoc journals left align the reference numbers
         3146 \@IEEEcompsocnotconfonly{\def\@biblabel#1{[#1]\hfill}}
         3147 
         3148 % controls bib item spacing
         3149 \def\IEEEbibitemsep{0pt plus .5pt}
         3150 
         3151 \@IEEEcompsocconfonly{\def\IEEEbibitemsep{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}}
         3152 
         3153 
         3154 \def\thebibliography#1{\section*{\refname}%
         3155     \addcontentsline{toc}{section}{\refname}%
         3156     % V1.6 add some rubber space here and provide a command trigger
         3157     \footnotesize\@IEEEcompsocconfonly{\small}\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip%
         3158     \list{\@biblabel{\@arabic\c@enumiv}}%
         3159     {\settowidth\labelwidth{\@biblabel{#1}}%
         3160     \leftmargin\labelwidth
         3161     \advance\leftmargin\labelsep\relax
         3162     \itemsep \IEEEbibitemsep\relax
         3163     \usecounter{enumiv}%
         3164     \let\p@enumiv\@empty
         3165     \renewcommand\theenumiv{\@arabic\c@enumiv}}%
         3166     \let\@IEEElatexbibitem\bibitem%
         3167     \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}%
         3168 \def\newblock{\hskip .11em plus .33em minus .07em}%
         3169 % originally:
         3170 %   \sloppy\clubpenalty4000\widowpenalty4000%
         3171 % by adding the \interlinepenalty here, we make it more
         3172 % difficult, but not impossible, for LaTeX to break within a reference.
         3173 % IEEE almost never breaks a reference (but they do it more often with
         3174 % technotes). You may get an underfull vbox warning around the bibliography, 
         3175 % but the final result will be much more like what IEEE will publish. 
         3176 % MDS 11/2000
         3177 \ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100%
         3178 \else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi%
         3179     \sfcode`\.=1000\relax}
         3180 \let\endthebibliography=\endlist
         3181 
         3182 
         3183 
         3184 
         3185 % TITLE PAGE COMMANDS
         3186 % 
         3187 % 
         3188 % \IEEEmembership is used to produce the sublargesize italic font used to indicate author 
         3189 % IEEE membership. compsoc uses a large size sans slant font
         3190 \def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}}
         3191  
         3192 
         3193 % \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation.
         3194 % When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote
         3195 % symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} 
         3196 % reverts to using lower case roman numerals, so it cannot overflow. Do note that you 
         3197 % cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote
         3198 % symbols will have been turned off to prevent \thanks from creating footnote marks.
         3199 % \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical
         3200 % height - this allows for a more compact line packing, but the user must ensure that
         3201 % the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding
         3202 % with the text above.
         3203 % V1.7 make this a robust command
         3204 \DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or%
         3205     \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger%
         3206     \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}}
         3207 
         3208 
         3209 % FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS
         3210 % 
         3211 % The default font styles for the author name and affiliation blocks (confmode)
         3212 \def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize\@IEEEcompsocconfonly{\large}}
         3213 \def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize\@IEEEcompsocconfonly{\large}}
         3214 % The default if the user does not use an author block
         3215 \def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize}
         3216 
         3217 % spacing from title (or special paper notice) to author name blocks (confmode)
         3218 % can be negative
         3219 \def\@IEEEauthorblockconfadjspace{-0.25em}
         3220 % compsoc conferences need more space here
         3221 \@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}}
         3222 
         3223 % spacing between name and affiliation blocks (confmode)
         3224 % This can be negative.
         3225 % IEEE doesn't want any added spacing here, but I will leave these
         3226 % controls in place in case they ever change their mind.
         3227 % Personally, I like 0.75ex.
         3228 %\def\@IEEEauthorblockNtopspace{0.75ex}
         3229 %\def\@IEEEauthorblockAtopspace{0.75ex}
         3230 \def\@IEEEauthorblockNtopspace{0.0ex}
         3231 \def\@IEEEauthorblockAtopspace{0.0ex}
         3232 % baseline spacing within name and affiliation blocks (confmode)
         3233 % must be positive, spacings below certain values will make 
         3234 % the position of line of text sensitive to the contents of the
         3235 % line above it i.e., whether or not the prior line has descenders, 
         3236 % subscripts, etc. For this reason it is a good idea to keep
         3237 % these above 2.6ex
         3238 \def\@IEEEauthorblockNinterlinespace{2.6ex}
         3239 \def\@IEEEauthorblockAinterlinespace{2.75ex}
         3240 
         3241 % This tracks the required strut size.
         3242 % See the \@IEEEauthorhalign command for the actual default value used.
         3243 \def\@IEEEauthorblockXinterlinespace{2.7ex}
         3244 
         3245 % variables to retain font size and style across groups
         3246 % values given here have no effect as they will be overwritten later
         3247 \gdef\@IEEESAVESTATEfontsize{10}
         3248 \gdef\@IEEESAVESTATEfontbaselineskip{12}
         3249 \gdef\@IEEESAVESTATEfontencoding{OT1}
         3250 \gdef\@IEEESAVESTATEfontfamily{ptm}
         3251 \gdef\@IEEESAVESTATEfontseries{m}
         3252 \gdef\@IEEESAVESTATEfontshape{n}
         3253 
         3254 % saves the current font attributes
         3255 \def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size%
         3256 \global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip%
         3257 \global\let\@IEEESAVESTATEfontencoding\f@encoding%
         3258 \global\let\@IEEESAVESTATEfontfamily\f@family%
         3259 \global\let\@IEEESAVESTATEfontseries\f@series%
         3260 \global\let\@IEEESAVESTATEfontshape\f@shape}
         3261 
         3262 % restores the saved font attributes
         3263 \def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}%
         3264 \fontencoding{\@IEEESAVESTATEfontencoding}%
         3265 \fontfamily{\@IEEESAVESTATEfontfamily}%
         3266 \fontseries{\@IEEESAVESTATEfontseries}%
         3267 \fontshape{\@IEEESAVESTATEfontshape}%
         3268 \selectfont}
         3269 
         3270 
         3271 % variable to indicate if the current block is the first block in the column
         3272 \newif\if@IEEEprevauthorblockincol   \@IEEEprevauthorblockincolfalse
         3273 
         3274 
         3275 % the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace
         3276 % we use this technique to have complete manual control over the spacing of the lines
         3277 % within the halign environment.
         3278 % We set the below baseline portion at 30%, the above
         3279 % baseline portion at 70% of the total length.
         3280 % Responds to changes in the document's \baselinestretch
         3281 \def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace%
         3282 \@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA%
         3283 \rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}}
         3284 
         3285 
         3286 % blocks to hold the authors' names and affilations. 
         3287 % Makes formatting easy for conferences
         3288 %
         3289 % use real definitions in conference mode
         3290 % name block
         3291 \def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style
         3292 \gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row
         3293 % the \expandafter hides the \cr in conditional tex, see the array.sty docs
         3294 % for details, probably not needed here as the \cr is in a macro
         3295 % do a spacer row if needed
         3296 \if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi
         3297 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column
         3298 %restore the correct strut value
         3299 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}%
         3300 % input the author names
         3301 #1%
         3302 % end the row if the user did not already
         3303 \crcr}
         3304 % spacer row for names
         3305 \def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}}
         3306 %
         3307 % affiliation block
         3308 \def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style
         3309 \gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row
         3310 % the \expandafter hides the \cr in conditional tex, see the array.sty docs
         3311 % for details, probably not needed here as the \cr is in a macro
         3312 % do a spacer row if needed
         3313 \if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi
         3314 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column
         3315 %restore the correct strut value
         3316 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}%
         3317 % input the author affiliations
         3318 #1%
         3319 % end the row if the user did not already
         3320 \crcr}
         3321 % spacer row for affiliations
         3322 \def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}}
         3323 
         3324 
         3325 % allow papers to compile even if author blocks are used in modes other
         3326 % than conference or peerreviewca. For such cases, we provide dummy blocks.
         3327 \ifCLASSOPTIONconference
         3328 \else
         3329    \ifCLASSOPTIONpeerreviewca\else
         3330       % not conference or peerreviewca mode
         3331       \def\IEEEauthorblockN#1{#1}%
         3332       \def\IEEEauthorblockA#1{#1}%
         3333    \fi
         3334 \fi
         3335 
         3336 
         3337 
         3338 % we provide our own halign so as not to have to depend on tabular
         3339 \def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style
         3340    \lineskip=0pt\relax% disable line spacing
         3341    \lineskiplimit=0pt\relax%
         3342    \baselineskip=0pt\relax%
         3343    \@IEEEcurfontSAVE% save the current font
         3344    \mathsurround\z@\relax% no extra spacing around math
         3345    \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one
         3346    \tabskip=0pt\relax% no column spacing
         3347    \everycr{}% ensure no problems here
         3348    \@IEEEprevauthorblockincolfalse% no author blocks yet
         3349    \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space
         3350    \vtop\bgroup%vtop box
         3351    \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax
         3352    \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr}
         3353 
         3354 % ensure last line, exit from halign, close vbox
         3355 \def\end@IEEEauthorhalign{\crcr\egroup\egroup}
         3356 
         3357 % handle bogus star form
         3358 \def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}}
         3359 
         3360 % test and setup the optional argument to \\[]
         3361 \def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip}
         3362 
         3363 % end the line and do the optional spacer
         3364 \def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}}
         3365 
         3366 
         3367 
         3368 % flag to prevent multiple \and warning messages
         3369 \newif\if@IEEEWARNand
         3370 \@IEEEWARNandtrue
         3371 
         3372 % if in conference or peerreviewca modes, we support the use of \and as \author is a
         3373 % tabular environment, otherwise we warn the user that \and is invalid
         3374 % outside of conference or peerreviewca modes.
         3375 \def\and{\relax} % provide a bogus \and that we will then override
         3376 
         3377 \renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only
         3378                                when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse}
         3379 
         3380 \ifCLASSOPTIONconference%
         3381 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}%
         3382 \fi
         3383 \ifCLASSOPTIONpeerreviewca
         3384 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}%
         3385 \fi
         3386 
         3387 
         3388 % page clearing command
         3389 % based on LaTeX2e's \cleardoublepage, but allows different page styles
         3390 % for the inserted blank pages
         3391 \def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else
         3392 \hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi}
         3393 
         3394 
         3395 % user command to invoke the title page
         3396 \def\maketitle{\par%
         3397   \begingroup%
         3398   \normalfont%
         3399   \def\thefootnote{}%  the \thanks{} mark type is empty
         3400   \def\footnotemark{}% and kill space from \thanks within author
         3401   \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well.
         3402   \footnotesize%       equal spacing between thanks lines
         3403   \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info
         3404   % V1.7 disable \thanks note indention for compsoc
         3405   \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}%
         3406   \normalsize%
         3407   \ifCLASSOPTIONpeerreview
         3408      \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
         3409      \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks%
         3410   \else
         3411      \if@twocolumn%
         3412         \ifCLASSOPTIONtechnote%
         3413            \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
         3414         \else
         3415            \twocolumn[\@maketitle\@IEEEdynamictitlevspace\@IEEEaftertitletext]%
         3416         \fi
         3417      \else
         3418         \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
         3419      \fi
         3420      \thispagestyle{IEEEtitlepagestyle}\@thanks%
         3421   \fi
         3422   % pullup page for pubid if used.
         3423   \if@IEEEusingpubid
         3424      \enlargethispage{-\@IEEEpubidpullup}%
         3425   \fi 
         3426   \endgroup
         3427   \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax
         3428   \gdef\@thanks{}%
         3429   % v1.6b do not clear these as we will need the title again for peer review papers
         3430   % \gdef\@author{}\gdef\@title{}%
         3431   \let\thanks\relax}
         3432 
         3433 
         3434 
         3435 % V1.7 parbox to format \@IEEEcompsoctitleabstractindextext
         3436 \long\def\@IEEEcompsoctitleabstractindextextbox#1{\parbox{0.915\textwidth}{#1}}
         3437 
         3438 % formats the Title, authors names, affiliations and special paper notice
         3439 % THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional
         3440 % spaces to enter the definition - use % at the end of each line
         3441 \def\@maketitle{\newpage
         3442 \begin{center}%
         3443 \ifCLASSOPTIONtechnote% technotes
         3444    {\bfseries\large\@IEEEcompsoconly{\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\sffamily}\@author
         3445    \@IEEEspecialpapernotice\par{\@IEEEcompsoconly{\vskip 1.5em\relax
         3446    \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par
         3447    \hfill\@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax
         3448 \else% not a technote
         3449    \vskip0.2em{\Huge\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip
         3450    \bfseries\Large}\@title\par}\vskip1.0em\par%
         3451    % V1.6 handle \author differently if in conference mode
         3452    \ifCLASSOPTIONconference%
         3453       {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace%
         3454        \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax
         3455    \else% peerreviewca, peerreview or journal
         3456       \ifCLASSOPTIONpeerreviewca
         3457          % peerreviewca handles author names just like conference mode
         3458          {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace%
         3459           \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par
         3460           {\@IEEEcompsoconly{\vskip 1.5em\relax
         3461            \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par\hfill
         3462            \@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax
         3463       \else% journal or peerreview
         3464          {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par
         3465           {\@IEEEcompsoconly{\vskip 1.5em\relax
         3466            \@IEEEcompsoctitleabstractindextextbox{\@IEEEcompsoctitleabstractindextext}\par\hfill
         3467            \@IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax
         3468       \fi
         3469    \fi
         3470 \fi\end{center}}
         3471 
         3472 
         3473 
         3474 % V1.7 Computer Society "diamond line" which follows index terms for nonconference papers
         3475 \def\@IEEEcompsocdiamondline{\vrule depth 0pt height 0.5pt width 4cm\hspace{7.5pt}%
         3476 \raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}%
         3477 \hspace{7.5pt}\vrule depth 0pt height 0.5pt width 4cm\relax}
         3478 
         3479 % V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def
         3480 % We also need to trigger the one-shot footnote rule
         3481 \def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue}
         3482 
         3483 
         3484 \long\def\thanks#1{\footnotemark
         3485     \protected@xdef\@thanks{\@thanks
         3486         \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape
         3487         \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}}
         3488 \let\@thanks\@empty
         3489 
         3490 % V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par.
         3491 \long\def\author#1{\gdef\@author{#1}}
         3492 
         3493 
         3494 % in addition to setting up IEEEitemize, we need to remove a baselineskip space above and
         3495 % below it because \list's \pars introduce blank lines because of the footnote struts.
         3496 \def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}%
         3497 \setlength{\IEEElabelindent}{0pt}\setlength{\parskip}{0pt}%
         3498 \setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax}
         3499 
         3500 
         3501 % flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item
         3502 \newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse
         3503 
         3504 \ifCLASSOPTIONcompsoc
         3505 % V1.7 compsoc bullet item \thanks
         3506 % also, we need to redefine this to destroy the argument in \@IEEEdynamictitlevspace
         3507 \long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark
         3508     \protected@xdef\@thanks{\@thanks
         3509         \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule
         3510         {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax
         3511         \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}}
         3512 \DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item}
         3513 \else
         3514 % non-compsoc, allow for dual compilation via rerouting to normal \thanks
         3515 \long\def\IEEEcompsocitemizethanks#1{\thanks{#1}}
         3516 % redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[]
         3517 \DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}%
         3518 {\@IEEEthanksswallowoptionalarg[\relax]}}
         3519 % be sure and break only after first item, be sure and ignore spaces after optional argument
         3520 \def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break
         3521 \indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces}
         3522 \fi
         3523 
         3524 
         3525 % V1.6b define the \IEEEpeerreviewmaketitle as needed
         3526 \ifCLASSOPTIONpeerreview
         3527 \def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}%
         3528 \ifCLASSOPTIONtwocolumn
         3529 \twocolumn[\@IEEEpeerreviewmaketitle\@IEEEdynamictitlevspace]
         3530 \else
         3531 \newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip
         3532 \fi
         3533 \thispagestyle{IEEEtitlepagestyle}}
         3534 \else
         3535 % \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected
         3536 \def\IEEEpeerreviewmaketitle{\relax}
         3537 \fi
         3538 
         3539 % peerreview formats the repeated title like the title in journal papers.
         3540 \def\@IEEEpeerreviewmaketitle{\begin{center}\@IEEEcompsoconly{\sffamily}%
         3541 \normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par
         3542 \end{center}}
         3543 
         3544 
         3545 
         3546 % V1.6 
         3547 % this is a static rubber spacer between the title/authors and the main text
         3548 % used for single column text, or when the title appears in the first column
         3549 % of two column text (technotes). 
         3550 \def\@IEEEstatictitlevskip{{\normalfont\normalsize
         3551 % adjust spacing to next text
         3552 % v1.6b handle peer review papers
         3553 \ifCLASSOPTIONpeerreview
         3554 % for peer review papers, the same value is used for both title pages
         3555 % regardless of the other paper modes
         3556    \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip
         3557 \else
         3558    \ifCLASSOPTIONconference% conference
         3559       \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip%
         3560    \else%
         3561       \ifCLASSOPTIONtechnote% technote
         3562          \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip%
         3563       \else% journal uses more space
         3564          \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip%
         3565       \fi
         3566    \fi
         3567 \fi}}
         3568 
         3569 
         3570 % V1.6
         3571 % This is a dynamically determined rigid spacer between the title/authors 
         3572 % and the main text. This is used only for single column titles over two 
         3573 % column text (most common)
         3574 % This is bit tricky because we have to ensure that the textheight of the
         3575 % main text is an integer multiple of \baselineskip
         3576 % otherwise underfull vbox problems may develop in the second column of the
         3577 % text on the titlepage
         3578 % The possible use of \IEEEpubid must also be taken into account.
         3579 \def\@IEEEdynamictitlevspace{{%
         3580     % we run within a group so that all the macros can be forgotten when we are done
         3581     \long\def\thanks##1{\relax}%don't allow \thanks to run when we evaluate the vbox height
         3582     \long\def\IEEEcompsocitemizethanks##1{\relax}%don't allow \IEEEcompsocitemizethanks to run when we evaluate the vbox height
         3583     \normalfont\normalsize% we declare more descriptive variable names
         3584     \let\@IEEEmaintextheight=\@IEEEtrantmpdimenA%height of the main text columns
         3585     \let\@IEEEINTmaintextheight=\@IEEEtrantmpdimenB%height of the main text columns with integer # lines
         3586     % set the nominal and minimum values for the title spacer
         3587     % the dynamic algorithm will not allow the spacer size to
         3588     % become less than \@IEEEMINtitlevspace - instead it will be
         3589     % lengthened
         3590     % default to journal values
         3591     \def\@IEEENORMtitlevspace{2.5\baselineskip}%
         3592     \def\@IEEEMINtitlevspace{2\baselineskip}%
         3593     % conferences and technotes need tighter spacing
         3594     \ifCLASSOPTIONconference%conference
         3595      \def\@IEEENORMtitlevspace{1\baselineskip}%
         3596      \def\@IEEEMINtitlevspace{0.75\baselineskip}%
         3597     \fi
         3598     \ifCLASSOPTIONtechnote%technote
         3599       \def\@IEEENORMtitlevspace{1\baselineskip}%
         3600       \def\@IEEEMINtitlevspace{0.75\baselineskip}%
         3601     \fi%
         3602     % get the height that the title will take up
         3603     \ifCLASSOPTIONpeerreview
         3604        \settoheight{\@IEEEmaintextheight}{\vbox{\hsize\textwidth \@IEEEpeerreviewmaketitle}}%
         3605     \else
         3606        \settoheight{\@IEEEmaintextheight}{\vbox{\hsize\textwidth \@maketitle}}%
         3607     \fi
         3608     \@IEEEmaintextheight=-\@IEEEmaintextheight% title takes away from maintext, so reverse sign
         3609     % add the height of the page textheight
         3610     \advance\@IEEEmaintextheight by \textheight%
         3611     % correct for title pages using pubid
         3612     \ifCLASSOPTIONpeerreview\else
         3613        % peerreview papers use the pubid on the cover page only.
         3614        % And the cover page uses a static spacer.
         3615        \if@IEEEusingpubid\advance\@IEEEmaintextheight by -\@IEEEpubidpullup\fi
         3616     \fi%
         3617     % subtract off the nominal value of the title bottom spacer
         3618     \advance\@IEEEmaintextheight by -\@IEEENORMtitlevspace%
         3619     % \topskip takes away some too
         3620     \advance\@IEEEmaintextheight by -\topskip%
         3621     % calculate the column height of the main text for lines
         3622     % now we calculate the main text height as if holding
         3623     % an integer number of \normalsize lines after the first
         3624     % and discard any excess fractional remainder
         3625     % we subtracted the first line, because the first line
         3626     % is placed \topskip into the maintext, not \baselineskip like the
         3627     % rest of the lines.
         3628     \@IEEEINTmaintextheight=\@IEEEmaintextheight%
         3629     \divide\@IEEEINTmaintextheight  by \baselineskip%
         3630     \multiply\@IEEEINTmaintextheight  by \baselineskip%
         3631     % now we calculate how much the title spacer height will
         3632     % have to be reduced from nominal (\@IEEEREDUCEmaintextheight is always
         3633     % a positive value) so that the maintext area will contain an integer
         3634     % number of normal size lines
         3635     % we change variable names here (to avoid confusion) as we no longer
         3636     % need \@IEEEINTmaintextheight and can reuse its dimen register
         3637     \let\@IEEEREDUCEmaintextheight=\@IEEEINTmaintextheight%
         3638     \advance\@IEEEREDUCEmaintextheight by -\@IEEEmaintextheight%
         3639     \advance\@IEEEREDUCEmaintextheight by \baselineskip%
         3640     % this is the calculated height of the spacer
         3641     % we change variable names here (to avoid confusion) as we no longer
         3642     % need \@IEEEmaintextheight and can reuse its dimen register
         3643     \let\@IEEECOMPENSATElen=\@IEEEmaintextheight%
         3644     \@IEEECOMPENSATElen=\@IEEENORMtitlevspace% set the nominal value
         3645     % we go with the reduced length if it is smaller than an increase
         3646     \ifdim\@IEEEREDUCEmaintextheight < 0.5\baselineskip\relax%
         3647      \advance\@IEEECOMPENSATElen by -\@IEEEREDUCEmaintextheight%
         3648      % if the resulting spacer is too small back out and go with an increase instead
         3649      \ifdim\@IEEECOMPENSATElen<\@IEEEMINtitlevspace\relax%
         3650       \advance\@IEEECOMPENSATElen by \baselineskip%
         3651      \fi%
         3652     \else%
         3653      % go with an increase because it is closer to the nominal than a decrease
         3654      \advance\@IEEECOMPENSATElen by -\@IEEEREDUCEmaintextheight%
         3655      \advance\@IEEECOMPENSATElen by \baselineskip%
         3656     \fi%
         3657     % set the calculated rigid spacer
         3658     \vspace{\@IEEECOMPENSATElen}}}
         3659 
         3660 
         3661 
         3662 % V1.6
         3663 % we allow the user access to the last part of the title area
         3664 % useful in emergencies such as when a different spacing is needed
         3665 % This text is NOT compensated for in the dynamic sizer.
         3666 \let\@IEEEaftertitletext=\relax
         3667 \long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}}
         3668 
         3669 % V1.7 provide a way for users to enter abstract and keywords
         3670 % into the onecolumn title are. This text is compensated for
         3671 % in the dynamic sizer.
         3672 \let\@IEEEcompsoctitleabstractindextext=\relax
         3673 \long\def\IEEEcompsoctitleabstractindextext#1{\def\@IEEEcompsoctitleabstractindextext{#1}}
         3674 % V1.7 provide a way for users to get the \@IEEEcompsoctitleabstractindextext if
         3675 % not in compsoc journal mode - this way abstract and keywords can be placed
         3676 % in their conventional position if not in compsoc mode.
         3677 \def\IEEEdisplaynotcompsoctitleabstractindextext{%
         3678 \ifCLASSOPTIONcompsoc% display if compsoc conf
         3679 \ifCLASSOPTIONconference\@IEEEcompsoctitleabstractindextext\fi
         3680 \else% or if not compsoc
         3681 \@IEEEcompsoctitleabstractindextext\fi}
         3682 
         3683 
         3684 % command to allow alteration of baselinestretch, but only if the current
         3685 % baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing.
         3686 \def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont
         3687 \global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip%
         3688 \def\baselinestretch{#1}\selectfont\fi\relax}
         3689 
         3690 
         3691 % abstract and keywords are in \small, except 
         3692 % for 9pt docs in which they are in \footnotesize
         3693 % Because 9pt docs use an 8pt footnotesize, \small
         3694 % becomes a rather awkward 8.5pt
         3695 \def\@IEEEabskeysecsize{\small}
         3696 \ifx\CLASSOPTIONpt\@IEEEptsizenine
         3697  \def\@IEEEabskeysecsize{\footnotesize}
         3698 \fi
         3699 
         3700 % compsoc journals use \footnotesize, compsoc conferences use normalsize
         3701 \@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}}
         3702 \@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\normalsize}}
         3703 
         3704 
         3705 
         3706 
         3707 % V1.6 have abstract and keywords strip leading spaces, pars and newlines
         3708 % so that spacing is more tightly controlled.
         3709 \def\abstract{\normalfont
         3710     \if@twocolumn
         3711       \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax
         3712     \else
         3713       \begin{center}\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\end{center}\quotation\@IEEEabskeysecsize
         3714     \fi\@IEEEgobbleleadPARNLSP}
         3715 % V1.6 IEEE wants only 1 pica from end of abstract to introduction heading when in 
         3716 % conference mode (the heading already has this much above it)
         3717 \def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi
         3718     \normalfont\normalsize}
         3719 
         3720 \def\IEEEkeywords{\normalfont
         3721     \if@twocolumn
         3722       \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax
         3723     \else
         3724       \begin{center}\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\end{center}\quotation\@IEEEabskeysecsize
         3725     \fi\@IEEEgobbleleadPARNLSP}
         3726 \def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi
         3727     \par\if@twocolumn\else\endquotation\fi%
         3728     \normalfont\normalsize}
         3729 
         3730 % V1.7 compsoc keywords index terms
         3731 \ifCLASSOPTIONcompsoc
         3732   \ifCLASSOPTIONconference% compsoc conference
         3733 \def\abstract{\normalfont
         3734       \begin{center}\@IEEEabskeysecsize\textbf{\large\abstractname}\end{center}\vskip 0.5\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip
         3735       \if@twocolumn\else\quotation\fi\itshape\@IEEEabskeysecsize%
         3736       \par\@IEEEgobbleleadPARNLSP}
         3737 \def\IEEEkeywords{\normalfont\vskip 1.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip
         3738       \begin{center}\@IEEEabskeysecsize\textbf{\large\IEEEkeywordsname}\end{center}\vskip 0.5\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip
         3739       \if@twocolumn\else\quotation\fi\itshape\@IEEEabskeysecsize%
         3740       \par\@IEEEgobbleleadPARNLSP}
         3741   \else% compsoc not conference
         3742 \def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily
         3743     \if@twocolumn
         3744       \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax
         3745     \else
         3746       \begin{center}\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\end{center}\quotation\@IEEEabskeysecsize%
         3747     \fi\@IEEEgobbleleadPARNLSP}
         3748 \def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily
         3749     \if@twocolumn
         3750       \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent
         3751       \textbf{\IEEEkeywordsname}---\relax
         3752     \else
         3753       \begin{center}\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\end{center}\quotation\@IEEEabskeysecsize%
         3754     \fi\@IEEEgobbleleadPARNLSP}
         3755   \fi
         3756 \fi
         3757 
         3758 
         3759 
         3760 % gobbles all leading \, \\ and \par, upon finding first token that
         3761 % is not a \ , \\ or a \par, it ceases and returns that token
         3762 % 
         3763 % used to strip leading \, \\ and \par from the input
         3764 % so that such things in the beginning of an environment will not
         3765 % affect the formatting of the text
         3766 \long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0%
         3767 \let\@IEEEgobbleleadPARNLSPtoken#1%
         3768 \let\@IEEEgobbleleadPARtoken=\par%
         3769 \let\@IEEEgobbleleadNLtoken=\\%
         3770 \let\@IEEEgobbleleadSPtoken=\ %
         3771 \def\@IEEEgobbleleadSPMACRO{\ }%
         3772 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken%
         3773 \let\@IEEEswallowthistoken=1%
         3774 \fi%
         3775 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken%
         3776 \let\@IEEEswallowthistoken=1%
         3777 \fi%
         3778 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken%
         3779 \let\@IEEEswallowthistoken=1%
         3780 \fi%
         3781 % a control space will come in as a macro
         3782 % when it is the last one on a line
         3783 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO%
         3784 \let\@IEEEswallowthistoken=1%
         3785 \fi%
         3786 % if we have to swallow this token, do so and taste the next one
         3787 % else spit it out and stop gobbling
         3788 \ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else%
         3789 \let\@IEEEnextgobbleleadPARNLSP=#1\fi%
         3790 \@IEEEnextgobbleleadPARNLSP}%
         3791 
         3792 
         3793 
         3794 
         3795 % TITLING OF SECTIONS
         3796 \def\@IEEEsectpunct{:\ \,}  % Punctuation after run-in section heading  (headings which are
         3797                             % part of the paragraphs), need little bit more than a single space
         3798                             % spacing from section number to title
         3799 % compsoc conferences use regular period/space punctuation
         3800 \ifCLASSOPTIONcompsoc
         3801 \ifCLASSOPTIONconference
         3802 \def\@IEEEsectpunct{.\ }
         3803 \fi\fi
         3804 
         3805 
         3806 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax}
         3807 
         3808 \ifCLASSOPTIONcompsoc
         3809 % compsoc journals need extra spacing
         3810 \ifCLASSOPTIONconference\else
         3811 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax}
         3812 \fi\fi
         3813 
         3814 %v1.7 put {} after #6 to allow for some types of user font control
         3815 %and use \@@par rather than \par
         3816 \def\@sect#1#2#3#4#5#6[#7]#8{%
         3817   \ifnum #2>\c@secnumdepth
         3818      \let\@svsec\@empty
         3819   \else
         3820      \refstepcounter{#1}%
         3821      % load section label and spacer into \@svsec
         3822      \protected@edef\@svsec{\@seccntformat{#1}\relax}%
         3823   \fi%
         3824   \@tempskipa #5\relax
         3825   \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high
         3826      \begingroup #6{\relax% or low level heading
         3827       \noindent % subsections are NOT indented
         3828        % print top level headings. \@svsec is label, #8 is heading title
         3829        % IEEE does not block indent the section title text, it flows like normal
         3830        {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}%
         3831      \endgroup
         3832      \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else
         3833                \protect\numberline{\csname the#1\endcsname}\fi#7}%
         3834   \else % printout low level headings
         3835      % svsechd seems to swallow the trailing space, protect it with \mbox{}
         3836      % got rid of sectionmark stuff
         3837      \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}%
         3838      \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else
         3839                \protect\numberline{\csname the#1\endcsname}\fi#7}}%
         3840   \fi%skip down
         3841   \@xsect{#5}}
         3842 
         3843 
         3844 % section* handler
         3845 %v1.7 put {} after #4 to allow for some types of user font control
         3846 %and use \@@par rather than \par
         3847 \def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
         3848   \ifdim \@tempskipa>\z@
         3849      %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
         3850      % IEEE does not block indent the section title text, it flows like normal
         3851      \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup
         3852   % svsechd swallows the trailing space, protect it with \mbox{}
         3853   \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi
         3854   \@xsect{#3}}
         3855 
         3856 
         3857 %% SECTION heading spacing and font
         3858 %%
         3859 % arguments are: #1 - sectiontype name
         3860 % (for \@sect)   #2 - section level
         3861 %                #3 - section heading indent
         3862 %                #4 - top separation (absolute value used, neg indicates not to indent main text)
         3863 %                     If negative, make stretch parts negative too!
         3864 %                #5 - (absolute value used) positive: bottom separation after heading,
         3865 %                      negative: amount to indent main text after heading
         3866 %                Both #4 and #5 negative means to indent main text and use negative top separation
         3867 %                #6 - font control
         3868 % You've got to have \normalfont\normalsize in the font specs below to prevent
         3869 % trouble when you do something like:
         3870 % \section{Note}{\ttfamily TT-TEXT} is known to ... 
         3871 % IEEE sometimes REALLY stretches the area before a section
         3872 % heading by up to about 0.5in. However, it may not be a good
         3873 % idea to let LaTeX have quite this much rubber.
         3874 \ifCLASSOPTIONconference%
         3875 % IEEE wants section heading spacing to decrease for conference mode
         3876 \def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}%
         3877 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}%
         3878 \def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}%
         3879 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}%
         3880 \else % for journals
         3881 \def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex
         3882 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}%
         3883 \def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}%
         3884 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}%
         3885 \fi
         3886 
         3887 % for both journals and conferences
         3888 % decided to put in a little rubber above the section, might help somebody
         3889 \def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}%
         3890 {0ex}{\normalfont\normalsize\itshape}}%
         3891 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}%
         3892 {0ex}{\normalfont\normalsize\itshape}}%
         3893 
         3894 
         3895 % compsoc
         3896 \ifCLASSOPTIONcompsoc
         3897 \ifCLASSOPTIONconference
         3898 % compsoc conference
         3899 \def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
         3900 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}%
         3901 \def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
         3902 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}%
         3903 \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
         3904 {0ex}{\normalfont\normalsize\bfseries}}%
         3905 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}%
         3906 {0ex}{\normalfont\normalsize}}%
         3907 \else% compsoc journals
         3908 % use negative top separation as compsoc journals do not indent paragraphs after section titles
         3909 \def\section{\@startsection{section}{1}{\z@}{-3ex plus -2ex minus -1.5ex}%
         3910 {0.7ex plus 1ex minus 0ex}{\normalfont\large\sffamily\bfseries\scshape}}%
         3911 % Note that subsection and smaller may not be correct for the Computer Society,
         3912 % I have to look up an example.
         3913 \def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}%
         3914 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}%
         3915 \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}%
         3916 {0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}%
         3917 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}%
         3918 {0ex}{\normalfont\normalsize}}%
         3919 \fi\fi
         3920 
         3921 
         3922 
         3923 
         3924 %% ENVIRONMENTS
         3925 % "box" symbols at end of proofs
         3926 \def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box
         3927 % V1.6 some journals use an open box instead that will just fit around a closed one
         3928 \def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}}
         3929 \ifCLASSOPTIONcompsoc
         3930 \def\IEEEQED{\IEEEQEDopen}   % default to open for compsoc
         3931 \else
         3932 \def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed
         3933 \fi
         3934 
         3935 % v1.7 name change to avoid namespace collision with amsthm. Also add support
         3936 % for an optional argument.
         3937 \def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}}
         3938 \def\@IEEEproof[#1]{\par\noindent\hspace{2em}{\itshape #1: }}
         3939 \def\endIEEEproof{\hspace*{\fill}~\IEEEQED\par}
         3940 
         3941 
         3942 %\itemindent is set to \z@ by list, so define new temporary variable
         3943 \newdimen\@IEEEtmpitemindent
         3944 \def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\topsep 0pt\rmfamily\trivlist%
         3945     \item[\hskip \labelsep{\indent\itshape #1\ #2:}]\itemindent\@IEEEtmpitemindent}
         3946 \def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\topsep 0pt\rmfamily \trivlist%
         3947 % V1.6 IEEE is back to using () around theorem names which are also in italics
         3948 % Thanks to Christian Peel for reporting this.
         3949     \item[\hskip\labelsep{\indent\itshape #1\ #2\ (#3):}]\itemindent\@IEEEtmpitemindent}
         3950 % V1.7 remove bogus \unskip that caused equations in theorems to collide with
         3951 % lines below.
         3952 \def\@endtheorem{\endtrivlist}
         3953 
         3954 % V1.6
         3955 % display command for the section the theorem is in - so that \thesection
         3956 % is not used as this will be in Roman numerals when we want arabic.
         3957 % LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number
         3958 % (second part) display and \def\@thmcountersep{.} as a separator.
         3959 % V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection
         3960 % to allow \appendix(ices} to override as needed.
         3961 %
         3962 % special handler for sections, allows appendix(ices) to override
         3963 \gdef\@IEEEthmcounterinsection#1{\arabic{#1}}
         3964 % string macro
         3965 \edef\@IEEEstringsection{section}
         3966 
         3967 % redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection
         3968 % if section in_counter is used
         3969 \def\@xnthm#1#2[#3]{%
         3970   \expandafter\@ifdefinable\csname #1\endcsname
         3971     {\@definecounter{#1}\@newctr{#1}[#3]%
         3972      \edef\@IEEEstringtmp{#3}
         3973      \ifx\@IEEEstringtmp\@IEEEstringsection
         3974      \expandafter\xdef\csname the#1\endcsname{%
         3975      \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep
         3976           \@thmcounter{#1}}%
         3977      \else
         3978      \expandafter\xdef\csname the#1\endcsname{%
         3979        \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
         3980           \@thmcounter{#1}}%
         3981      \fi
         3982      \global\@namedef{#1}{\@thm{#1}{#2}}%
         3983      \global\@namedef{end#1}{\@endtheorem}}}
         3984 
         3985 
         3986 
         3987 %% SET UP THE DEFAULT PAGESTYLE
         3988 \ps@headings
         3989 \pagenumbering{arabic}
         3990 
         3991 % normally the page counter starts at 1
         3992 \setcounter{page}{1}
         3993 % however, for peerreview the cover sheet is page 0 or page -1
         3994 % (for duplex printing)
         3995 \ifCLASSOPTIONpeerreview
         3996    \if@twoside
         3997       \setcounter{page}{-1}
         3998    \else
         3999       \setcounter{page}{0}
         4000    \fi
         4001 \fi
         4002 
         4003 % standard book class behavior - let bottom line float up and down as
         4004 % needed when single sided
         4005 \ifCLASSOPTIONtwoside\else\raggedbottom\fi
         4006 % if two column - turn on twocolumn, allow word spacings to stretch more and
         4007 % enforce a rigid position for the last lines
         4008 \ifCLASSOPTIONtwocolumn
         4009 % the peer review option delays invoking twocolumn
         4010    \ifCLASSOPTIONpeerreview\else
         4011       \twocolumn
         4012    \fi
         4013 \sloppy 
         4014 \flushbottom
         4015 \fi
         4016 
         4017 
         4018 
         4019 
         4020 % \APPENDIX and \APPENDICES definitions
         4021 
         4022 % This is the \@ifmtarg command from the LaTeX ifmtarg package
         4023 % by Peter Wilson (CUA) and Donald Arseneau
         4024 % \@ifmtarg is used to determine if an argument to a command
         4025 % is present or not.
         4026 % For instance:
         4027 % \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}}
         4028 % \@ifmtarg is used with our redefined \section command if
         4029 % \appendices is invoked.
         4030 % The command \section will behave slightly differently depending
         4031 % on whether the user specifies a title: 
         4032 % \section{My appendix title}
         4033 % or not:
         4034 % \section{}
         4035 % This way, we can eliminate the blank lines where the title
         4036 % would be, and the unneeded : after Appendix in the table of
         4037 % contents 
         4038 \begingroup
         4039 \catcode`\Q=3
         4040 \long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}
         4041 \long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}
         4042 \endgroup
         4043 % end of \@ifmtarg defs
         4044 
         4045 
         4046 % V1.7
         4047 % command that allows the one time saving of the original definition
         4048 % of section to \@IEEEappendixsavesection for \appendix or \appendices 
         4049 % we don't save \section here as it may be redefined later by other
         4050 % packages (hyperref.sty, etc.)
         4051 \def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section
         4052 \let\@IEEEsaveoriginalsectiononce\relax}
         4053 
         4054 % neat trick to grab and process the argument from \section{argument}
         4055 % we process differently if the user invoked \section{} with no
         4056 % argument (title)
         4057 % note we reroute the call to the old \section*
         4058 \def\@IEEEprocessthesectionargument#1{%
         4059 \@ifmtarg{#1}{%
         4060 \@IEEEappendixsavesection*{\appendixname~\thesectiondis}%
         4061 \addcontentsline{toc}{section}{\appendixname~\thesection}}{%
         4062 \@IEEEappendixsavesection*{\appendixname~\thesectiondis \\* #1}%
         4063 \addcontentsline{toc}{section}{\appendixname~\thesection: #1}}}
         4064 
         4065 % we use this if the user calls \section{} after
         4066 % \appendix-- which has no meaning. So, we ignore the
         4067 % command and its argument. Then, warn the user.
         4068 \def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless
         4069 \protect\section\space in Appendix (line \the\inputlineno).}}
         4070 
         4071 
         4072 % remember \thesection forms will be displayed in \ref calls
         4073 % and in the Table of Contents.
         4074 % The \sectiondis form is used in the actual heading itself
         4075 
         4076 % appendix command for one single appendix
         4077 % normally has no heading. However, if you want a 
         4078 % heading, you can do so via the optional argument:
         4079 % \appendix[Optional Heading]
         4080 \def\appendix{\relax}
         4081 \renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par
         4082     % v1.6 keep hyperref's identifiers unique
         4083     \gdef\theHsection{Appendix.A}%
         4084     % v1.6 adjust hyperref's string name for the section
         4085     \xdef\Hy@chapapp{appendix}%
         4086     \setcounter{section}{0}%
         4087     \setcounter{subsection}{0}%
         4088     \setcounter{subsubsection}{0}%
         4089     \setcounter{paragraph}{0}%
         4090     \gdef\thesection{A}%
         4091     \gdef\thesectiondis{}% 
         4092     \gdef\thesubsection{\Alph{subsection}}%
         4093     \gdef\@IEEEthmcounterinsection##1{A}
         4094     \refstepcounter{section}% update the \ref counter
         4095     \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}%
         4096                   \addcontentsline{toc}{section}{\appendixname}}{%
         4097              \@IEEEappendixsavesection*{\appendixname~\\* #1}%
         4098              \addcontentsline{toc}{section}{\appendixname: #1}}%
         4099     % redefine \section command for appendix
         4100     % leave \section* as is
         4101     \def\section{\@ifstar{\@IEEEappendixsavesection*}{%
         4102                     \@IEEEdestroythesectionargument}}% throw out the argument
         4103                                                      % of the normal form
         4104 }
         4105 
         4106 
         4107 
         4108 % appendices command for multiple appendices
         4109 % user then calls \section with an argument (possibly empty) to
         4110 % declare the individual appendices
         4111 \def\appendices{\@IEEEsaveoriginalsectiononce\par
         4112     % v1.6 keep hyperref's identifiers unique
         4113     \gdef\theHsection{Appendix.\Alph{section}}%
         4114     % v1.6 adjust hyperref's string name for the section
         4115     \xdef\Hy@chapapp{appendix}%
         4116     \setcounter{section}{-1}% we want \refstepcounter to use section 0
         4117     \setcounter{subsection}{0}%
         4118     \setcounter{subsubsection}{0}%
         4119     \setcounter{paragraph}{0}%
         4120     \ifCLASSOPTIONromanappendices%
         4121     \gdef\thesection{\Roman{section}}%
         4122     \gdef\thesectiondis{\Roman{section}}%
         4123     \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}%
         4124     \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}}
         4125     \else%
         4126     \gdef\thesection{\Alph{section}}%
         4127     \gdef\thesectiondis{\Alph{section}}%
         4128     \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}%
         4129     \gdef\@IEEEthmcounterinsection##1{\Alph{##1}}
         4130     \fi%
         4131     \refstepcounter{section}% update the \ref counter
         4132     \setcounter{section}{0}% NEXT \section will be the FIRST appendix
         4133     % redefine \section command for appendices
         4134     % leave \section* as is
         4135     \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form
         4136                     \refstepcounter{section}% or is a new section so,
         4137                     \@IEEEprocessthesectionargument}}% process the argument 
         4138                                                  % of the normal form
         4139 }
         4140 
         4141 
         4142 
         4143 % \IEEEPARstart
         4144 % Definition for the big two line drop cap letter at the beginning of the
         4145 % first paragraph of journal papers. The first argument is the first letter
         4146 % of the first word, the second argument is the remaining letters of the
         4147 % first word which will be rendered in upper case.
         4148 % In V1.6 this has been completely rewritten to:
         4149 % 
         4150 % 1. no longer have problems when the user begins an environment
         4151 %    within the paragraph that uses \IEEEPARstart.
         4152 % 2. auto-detect and use the current font family
         4153 % 3. revise handling of the space at the end of the first word so that
         4154 %    interword glue will now work as normal.
         4155 % 4. produce correctly aligned edges for the (two) indented lines.
         4156 % 
         4157 % We generalize things via control macros - playing with these is fun too.
         4158 % 
         4159 % V1.7 added more control macros to make it easy for IEEEtrantools.sty users
         4160 % to change the font style.
         4161 % 
         4162 % the number of lines that are indented to clear it
         4163 % may need to increase if using decenders
         4164 \def\@IEEEPARstartDROPLINES{2}
         4165 % minimum number of lines left on a page to allow a \@IEEEPARstart
         4166 % Does not take into consideration rubber shrink, so it tends to
         4167 % be overly cautious
         4168 \def\@IEEEPARstartMINPAGELINES{2}
         4169 % V1.7 the height of the drop cap is adjusted to match the height of this text
         4170 % in the current font (when \IEEEPARstart is called).
         4171 \def\@IEEEPARstartHEIGHTTEXT{T}
         4172 % the depth the letter is lowered below the baseline
         4173 % the height (and size) of the letter is determined by the sum
         4174 % of this value and the height of the \@IEEEPARstartHEIGHTTEXT in the current
         4175 % font. It is a good idea to set this value in terms of the baselineskip
         4176 % so that it can respond to changes therein.
         4177 \def\@IEEEPARstartDROPDEPTH{1.1\baselineskip}
         4178 % V1.7 the font the drop cap will be rendered in,
         4179 % can take zero or one argument.
         4180 \def\@IEEEPARstartFONTSTYLE{\bfseries}
         4181 % V1.7 any additional, non-font related commands needed to modify
         4182 % the drop cap letter, can take zero or one argument.
         4183 \def\@IEEEPARstartCAPSTYLE{\MakeUppercase}
         4184 % V1.7 the font that will be used to render the rest of the word,
         4185 % can take zero or one argument.
         4186 \def\@IEEEPARstartWORDFONTSTYLE{\relax}
         4187 % V1.7 any additional, non-font related commands needed to modify
         4188 % the rest of the word, can take zero or one argument.
         4189 \def\@IEEEPARstartWORDCAPSTYLE{\MakeUppercase}
         4190 % This is the horizontal separation distance from the drop letter to the main text.
         4191 % Lengths that depend on the font (e.g., ex, em, etc.) will be referenced
         4192 % to the font that is active when \IEEEPARstart is called. 
         4193 \def\@IEEEPARstartSEP{0.15em}
         4194 % V1.7 horizontal offset applied to the left of the drop cap.
         4195 \def\@IEEEPARstartHOFFSET{0em}
         4196 % V1.7 Italic correction command applied at the end of the drop cap.
         4197 \def\@IEEEPARstartITLCORRECT{\/}
         4198 
         4199 % V1.7 compoc uses nonbold drop cap and small caps word style
         4200 \ifCLASSOPTIONcompsoc
         4201 \def\@IEEEPARstartFONTSTYLE{\mdseries}
         4202 \def\@IEEEPARstartWORDFONTSTYLE{\scshape}
         4203 \def\@IEEEPARstartWORDCAPSTYLE{\relax}
         4204 \fi
         4205 
         4206 % definition of \IEEEPARstart
         4207 % THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES
         4208 % 
         4209 % The token \@IEEEPARstartfont will be globally defined after the first use
         4210 % of \IEEEPARstart and will be a font command which creates the big letter
         4211 % The first argument is the first letter of the first word and the second
         4212 % argument is the rest of the first word(s).
         4213 \def\IEEEPARstart#1#2{\par{%
         4214 % if this page does not have enough space, break it and lets start
         4215 % on a new one
         4216 \@IEEEtranneedspace{\@IEEEPARstartMINPAGELINES\baselineskip}{\relax}%
         4217 % V1.7 move this up here in case user uses \textbf for \@IEEEPARstartFONTSTYLE
         4218 % which uses command \leavevmode which causes an unwanted \indent to be issued
         4219 \noindent
         4220 % calculate the desired height of the big letter
         4221 % it extends from the top of \@IEEEPARstartHEIGHTTEXT in the current font
         4222 % down to \@IEEEPARstartDROPDEPTH below the current baseline
         4223 \settoheight{\@IEEEtrantmpdimenA}{\@IEEEPARstartHEIGHTTEXT}%
         4224 \addtolength{\@IEEEtrantmpdimenA}{\@IEEEPARstartDROPDEPTH}%
         4225 % extract the name of the current font in bold
         4226 % and place it in \@IEEEPARstartFONTNAME
         4227 \def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}%
         4228 {\@IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}%
         4229 \xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}%
         4230 % define a font based on this name with a point size equal to the desired
         4231 % height of the drop letter
         4232 \font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax%
         4233 % save this value as a counter (integer) value (sp points)
         4234 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenA%
         4235 % now get the height of the actual letter produced by this font size
         4236 \settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\@IEEEPARstartCAPSTYLE{#1}}%
         4237 % If something bogus happens like the first argument is empty or the
         4238 % current font is strange, do not allow a zero height.
         4239 \ifdim\@IEEEtrantmpdimenB=0pt\relax%
         4240 \typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}%
         4241 \typeout{ Forcing the drop letter font size to 10pt.}%
         4242 \@IEEEtrantmpdimenB=10pt%
         4243 \fi%
         4244 % and store it as a counter
         4245 \@IEEEtrantmpcountB=\@IEEEtrantmpdimenB%
         4246 % Since a font size doesn't exactly correspond to the height of the capital
         4247 % letters in that font, the actual height of the letter, \@IEEEtrantmpcountB,
         4248 % will be less than that desired, \@IEEEtrantmpcountA
         4249 % we need to raise the font size, \@IEEEtrantmpdimenA 
         4250 % by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB
         4251 % But, TeX doesn't have floating point division, so we have to use integer
         4252 % division. Hence the use of the counters.
         4253 % We need to reduce the denominator so that the loss of the remainder will
         4254 % have minimal affect on the accuracy of the result
         4255 \divide\@IEEEtrantmpcountB by 200%
         4256 \divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB%
         4257 % Then reequalize things when we use TeX's ability to multiply by
         4258 % floating point values
         4259 \@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA%
         4260 \multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA%
         4261 % \@IEEEPARstartfont is globaly set to the calculated font of the big letter
         4262 % We need to carry this out of the local calculation area to to create the
         4263 % big letter.
         4264 \global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB%
         4265 % Now set \@IEEEtrantmpdimenA to the width of the big letter
         4266 % We need to carry this out of the local calculation area to set the
         4267 % hanging indent
         4268 \settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont
         4269 \@IEEEPARstartCAPSTYLE{#1\@IEEEPARstartITLCORRECT}}}%
         4270 % end of the isolated calculation environment
         4271 % add in the extra clearance we want
         4272 \advance\@IEEEtrantmpdimenA by \@IEEEPARstartSEP\relax%
         4273 % add in the optional offset
         4274 \advance\@IEEEtrantmpdimenA by \@IEEEPARstartHOFFSET\relax%
         4275 % V1.7 don't allow negative offsets to produce negative hanging indents
         4276 \@IEEEtrantmpdimenB\@IEEEtrantmpdimenA
         4277 \ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi
         4278 % \@IEEEtrantmpdimenA has the width of the big letter plus the
         4279 % separation space and \@IEEEPARstartfont is the font we need to use
         4280 % Now, we make the letter and issue the hanging indent command
         4281 % The letter is placed in a box of zero width and height so that other
         4282 % text won't be displaced by it.
         4283 \hangindent\@IEEEtrantmpdimenB\hangafter=-\@IEEEPARstartDROPLINES%
         4284 \makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}%
         4285 \raisebox{-\@IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\@IEEEPARstartHOFFSET}%
         4286 \@IEEEPARstartfont\@IEEEPARstartCAPSTYLE{#1\@IEEEPARstartITLCORRECT}%
         4287 \hspace{\@IEEEPARstartSEP}}}%
         4288 {\@IEEEPARstartWORDFONTSTYLE{\@IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}}
         4289 
         4290 
         4291 
         4292 
         4293 
         4294 
         4295 % determines if the space remaining on a given page is equal to or greater
         4296 % than the specified space of argument one
         4297 % if not, execute argument two (only if the remaining space is greater than zero)
         4298 % and issue a \newpage
         4299 % 
         4300 % example: \@IEEEtranneedspace{2in}{\vfill}
         4301 % 
         4302 % Does not take into consideration rubber shrinkage, so it tends to
         4303 % be overly cautious
         4304 % Based on an example posted by Donald Arseneau
         4305 % Note this macro uses \@IEEEtrantmpdimenB internally for calculations,
         4306 % so DO NOT PASS \@IEEEtrantmpdimenB to this routine
         4307 % if you need a dimen register, import with \@IEEEtrantmpdimenA instead
         4308 \def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable
         4309 \@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left
         4310 \ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left
         4311 \ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi%
         4312 \newpage%
         4313 \fi\endgroup}
         4314 
         4315 
         4316 
         4317 % IEEEbiography ENVIRONMENT
         4318 % Allows user to enter biography leaving place for picture (adapts to font size)
         4319 % As of V1.5, a new optional argument allows you to have a real graphic!
         4320 % V1.5 and later also fixes the "colliding biographies" which could happen when a 
         4321 % biography's text was shorter than the space for the photo.
         4322 % MDS 7/2001
         4323 % V1.6 prevent multiple biographies from making multiple TOC entries
         4324 \newif\if@IEEEbiographyTOCentrynotmade
         4325 \global\@IEEEbiographyTOCentrynotmadetrue
         4326 
         4327 % biography counter so hyperref can jump directly to the biographies
         4328 % and not just the previous section
         4329 \newcounter{IEEEbiography}
         4330 \setcounter{IEEEbiography}{0}
         4331 
         4332 % photo area size
         4333 \def\@IEEEBIOphotowidth{1.0in}    % width of the biography photo area
         4334 \def\@IEEEBIOphotodepth{1.25in}   % depth (height) of the biography photo area
         4335 % area cleared for photo
         4336 \def\@IEEEBIOhangwidth{1.14in}    % width cleared for the biography photo area
         4337 \def\@IEEEBIOhangdepth{1.25in}    % depth cleared for the biography photo area
         4338                                   % actual depth will be a multiple of 
         4339                                   % \baselineskip, rounded up
         4340 \def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography
         4341 
         4342 \newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize%
         4343 \unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500%
         4344 % we need enough space to support the hanging indent
         4345 % the nominal value of the spacer
         4346 % and one extra line for good measure
         4347 \@IEEEtrantmpdimenA=\@IEEEBIOhangdepth%
         4348 \advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN%
         4349 \advance\@IEEEtrantmpdimenA by 1\baselineskip%
         4350 % if this page does not have enough space, break it and lets start
         4351 % with a new one
         4352 \@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}%
         4353 % nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill
         4354 \vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip%
         4355 % the default box for where the photo goes
         4356 \def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{%
         4357 \begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}%
         4358 %
         4359 % detect if the optional argument was supplied, this requires the
         4360 % \@ifmtarg command as defined in the appendix section above
         4361 % and if so, override the default box with what they want
         4362 \@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}%
         4363 \centering%
         4364 #1%
         4365 \end{minipage}}}}% end if optional argument supplied
         4366 % Make an entry into the table of contents only if we have not done so before
         4367 \if@IEEEbiographyTOCentrynotmade%
         4368 % link labels to the biography counter so hyperref will jump
         4369 % to the biography, not the previous section
         4370 \setcounter{IEEEbiography}{-1}%
         4371 \refstepcounter{IEEEbiography}%
         4372 \addcontentsline{toc}{section}{Biographies}%
         4373 \global\@IEEEbiographyTOCentrynotmadefalse%
         4374 \fi%
         4375 % one more biography
         4376 \refstepcounter{IEEEbiography}%
         4377 % Make an entry for this name into the table of contents 
         4378 \addcontentsline{toc}{subsection}{#2}%
         4379 % V1.6 properly handle if a new paragraph should occur while the
         4380 % hanging indent is still active. Do this by redefining \par so
         4381 % that it will not start a new paragraph. (But it will appear to the
         4382 % user as if it did.) Also, strip any leading pars, newlines, or spaces.
         4383 \let\@IEEEBIOORGparCMD=\par% save the original \par command
         4384 \edef\par{\hfil\break\indent}% the new \par will not be a "real" \par
         4385 \settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box
         4386 \@IEEEtrantmpdimenB=\@IEEEBIOhangdepth%
         4387 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth
         4388 \divide\@IEEEtrantmpcountA by \baselineskip%  calculates lines needed to produce the hang depth
         4389 \advance\@IEEEtrantmpcountA by 1% ensure we overestimate
         4390 % set the hanging indent
         4391 \hangindent\@IEEEBIOhangwidth%
         4392 \hangafter-\@IEEEtrantmpcountA%
         4393 % reference the top of the photo area to the top of a capital T
         4394 \settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}%
         4395 % set the photo box, give it zero width and height so as not to disturb anything
         4396 \noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{%
         4397 \raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}%
         4398 % now place the author name and begin the bio text
         4399 \noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par%
         4400 % 7/2001 V1.5 detect when the biography text is shorter than the photo area
         4401 % and pad the unused area - preventing a collision from the next biography entry
         4402 % MDS
         4403 \ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo
         4404     \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad
         4405     \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line
         4406     \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding
         4407     \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA%
         4408     \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut
         4409 \fi%
         4410 \par\normalfont}
         4411 
         4412 
         4413 
         4414 % V1.6
         4415 % added biography without a photo environment
         4416 \newenvironment{IEEEbiographynophoto}[1]{%
         4417 % Make an entry into the table of contents only if we have not done so before
         4418 \if@IEEEbiographyTOCentrynotmade%
         4419 % link labels to the biography counter so hyperref will jump
         4420 % to the biography, not the previous section
         4421 \setcounter{IEEEbiography}{-1}%
         4422 \refstepcounter{IEEEbiography}%
         4423 \addcontentsline{toc}{section}{Biographies}%
         4424 \global\@IEEEbiographyTOCentrynotmadefalse%
         4425 \fi%
         4426 % one more biography
         4427 \refstepcounter{IEEEbiography}%
         4428 % Make an entry for this name into the table of contents 
         4429 \addcontentsline{toc}{subsection}{#1}%
         4430 \normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500%
         4431 \vskip 4\baselineskip plus 1fil minus 0\baselineskip%
         4432 \parskip=0pt\par%
         4433 \noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont}
         4434 
         4435 
         4436 % provide the user with some old font commands
         4437 % got this from article.cls
         4438 \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
         4439 \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
         4440 \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
         4441 \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
         4442 \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
         4443 \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
         4444 \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
         4445 \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
         4446 \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
         4447 
         4448 
         4449 % SPECIAL PAPER NOTICE COMMANDS
         4450 % 
         4451 % holds the special notice text
         4452 \def\@IEEEspecialpapernotice{\relax}
         4453  
         4454 % for special papers, like invited papers, the user can do:
         4455 % \IEEEspecialpapernotice{(Invited Paper)} before \maketitle
         4456 \def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference%
         4457 \def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}%
         4458 \else%
         4459 \def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}%
         4460 \fi}
         4461 
         4462 
         4463 
         4464 
         4465 % PUBLISHER ID COMMANDS
         4466 % to insert a publisher's ID footer
         4467 % V1.6 \IEEEpubid has been changed so that the change in page size and style
         4468 % occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle
         4469 % use \IEEEpubidadjcol as before - in the second column of the title page
         4470 % These changes allow \maketitle to take the reduced page height into
         4471 % consideration when dynamically setting the space between the author 
         4472 % names and the maintext.
         4473 %
         4474 % the amount the main text is pulled up to make room for the
         4475 % publisher's ID footer
         4476 % IEEE uses about 1.3\baselineskip for journals, 
         4477 % dynamic title spacing will clean up the fraction
         4478 \def\@IEEEpubidpullup{1.3\baselineskip}
         4479 \ifCLASSOPTIONtechnote
         4480 % for technotes it must be an integer of baselineskip as there can be no
         4481 % dynamic title spacing for two column mode technotes (the title is in the
         4482 % in first column) and we should maintain an integer number of lines in the
         4483 % second column
         4484 % There are some examples (such as older issues of "Transactions on
         4485 % Information Theory") in which IEEE really pulls the text off the ID for
         4486 % technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip
         4487 % and call it even.
         4488 \def\@IEEEpubidpullup{2\baselineskip}
         4489 \fi
         4490 
         4491 % V1.7 compsoc does not use a pullup
         4492 \ifCLASSOPTIONcompsoc
         4493 \def\@IEEEpubidpullup{0pt}
         4494 \fi
         4495 
         4496 % holds the ID text
         4497 \def\@IEEEpubid{\relax}
         4498 
         4499 % flag so \maketitle can tell if \IEEEpubid was called
         4500 \newif\if@IEEEusingpubid
         4501 \global\@IEEEusingpubidfalse
         4502 % issue this command in the page to have the ID at the bottom
         4503 % V1.6 use before \maketitle
         4504 \def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue}
         4505 
         4506 
         4507 % command which will pull up (shorten) the column it is executed in
         4508 % to make room for the publisher ID. Place in the second column of
         4509 % the title page when using \IEEEpubid
         4510 % Is smart enough not to do anything when in single column text or
         4511 % if the user hasn't called \IEEEpubid
         4512 % currently needed in for the second column of a page with the
         4513 % publisher ID. If not needed in future releases, please provide this
         4514 % command and define it as \relax for backward compatibility
         4515 % v1.6b do not allow command to operate if the peer review option has been 
         4516 % selected because \IEEEpubidadjcol will not be on the cover page.
         4517 % V1.7 do nothing if compsoc
         4518 \def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else
         4519 \if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi}
         4520 
         4521 % Special thanks to Peter Wilson, Daniel Luecking, and the other
         4522 % gurus at comp.text.tex, for helping me to understand how best to
         4523 % implement the IEEEpubid command in LaTeX.
         4524 
         4525 
         4526 
         4527 %% Lockout some commands under various conditions
         4528 
         4529 % general purpose bit bucket
         4530 \newsavebox{\@IEEEtranrubishbin}
         4531 
         4532 % flags to prevent multiple warning messages
         4533 \newif\if@IEEEWARNthanks
         4534 \newif\if@IEEEWARNIEEEPARstart
         4535 \newif\if@IEEEWARNIEEEbiography
         4536 \newif\if@IEEEWARNIEEEbiographynophoto
         4537 \newif\if@IEEEWARNIEEEpubid
         4538 \newif\if@IEEEWARNIEEEpubidadjcol
         4539 \newif\if@IEEEWARNIEEEmembership
         4540 \newif\if@IEEEWARNIEEEaftertitletext
         4541 \@IEEEWARNthankstrue
         4542 \@IEEEWARNIEEEPARstarttrue
         4543 \@IEEEWARNIEEEbiographytrue
         4544 \@IEEEWARNIEEEbiographynophototrue
         4545 \@IEEEWARNIEEEpubidtrue
         4546 \@IEEEWARNIEEEpubidadjcoltrue
         4547 \@IEEEWARNIEEEmembershiptrue
         4548 \@IEEEWARNIEEEaftertitletexttrue
         4549 
         4550 
         4551 %% Lockout some commands when in various modes, but allow them to be restored if needed
         4552 %%
         4553 % save commands which might be locked out
         4554 % so that the user can later restore them if needed
         4555 \let\@IEEESAVECMDthanks\thanks
         4556 \let\@IEEESAVECMDIEEEPARstart\IEEEPARstart
         4557 \let\@IEEESAVECMDIEEEbiography\IEEEbiography
         4558 \let\@IEEESAVECMDendIEEEbiography\endIEEEbiography
         4559 \let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto
         4560 \let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto
         4561 \let\@IEEESAVECMDIEEEpubid\IEEEpubid
         4562 \let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol
         4563 \let\@IEEESAVECMDIEEEmembership\IEEEmembership
         4564 \let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext
         4565 
         4566 
         4567 % disable \IEEEPARstart when in draft mode
         4568 % This may have originally been done because the pre-V1.6 drop letter
         4569 % algorithm had problems with a non-unity baselinestretch
         4570 % At any rate, it seems too formal to have a drop letter in a draft
         4571 % paper.
         4572 \ifCLASSOPTIONdraftcls
         4573 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart
         4574  is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
         4575 \fi
         4576 % and for technotes
         4577 \ifCLASSOPTIONtechnote
         4578 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart
         4579  is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
         4580 \fi
         4581 
         4582 
         4583 % lockout unneeded commands when in conference mode
         4584 \ifCLASSOPTIONconference
         4585 % when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid,
         4586 % \IEEEmembership and \IEEEaftertitletext will all swallow their given text. 
         4587 % \IEEEPARstart will output a normal character instead
         4588 % warn the user about these commands only once to prevent the console screen
         4589 % from filling up with redundant messages
         4590 \def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks
         4591  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse}
         4592 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart
         4593  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
         4594 
         4595 
         4596 % LaTeX treats environments and commands with optional arguments differently.
         4597 % the actual ("internal") command is stored as \\commandname 
         4598 % (accessed via \csname\string\commandname\endcsname )
         4599 % the "external" command \commandname is a macro with code to determine
         4600 % whether or not the optional argument is presented and to provide the 
         4601 % default if it is absent. So, in order to save and restore such a command
         4602 % we would have to save and restore \\commandname as well. But, if LaTeX
         4603 % ever changes the way it names the internal names, the trick would break.
         4604 % Instead let us just define a new environment so that the internal
         4605 % name can be left undisturbed.
         4606 \newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography
         4607  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse%
         4608 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax}
         4609 % and make biography point to our bogus biography
         4610 \let\IEEEbiography=\@IEEEbogusbiography
         4611 \let\endIEEEbiography=\end@IEEEbogusbiography
         4612 
         4613 \renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto
         4614  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse%
         4615 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax}
         4616 
         4617 \def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid 
         4618  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse}
         4619 \def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol
         4620  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse}
         4621 \def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership
         4622  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse}
         4623 \def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext
         4624  is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse}
         4625 \fi
         4626 
         4627 
         4628 % provide a way to restore the commands that are locked out
         4629 \def\IEEEoverridecommandlockouts{%
         4630 \typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}%
         4631 \let\thanks\@IEEESAVECMDthanks%
         4632 \let\IEEEPARstart\@IEEESAVECMDIEEEPARstart%
         4633 \let\IEEEbiography\@IEEESAVECMDIEEEbiography%
         4634 \let\endIEEEbiography\@IEEESAVECMDendIEEEbiography%
         4635 \let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto%
         4636 \let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto%
         4637 \let\IEEEpubid\@IEEESAVECMDIEEEpubid%
         4638 \let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol%
         4639 \let\IEEEmembership\@IEEESAVECMDIEEEmembership%
         4640 \let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext}
         4641 
         4642 
         4643 
         4644 % need a backslash character for typeout output
         4645 {\catcode`\|=0 \catcode`\\=12
         4646 |xdef|@IEEEbackslash{\}}
         4647 
         4648 
         4649 % hook to allow easy disabling of all legacy warnings
         4650 \def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno).
         4651 Use \@IEEEbackslash #2 instead.}}
         4652 
         4653 
         4654 % provide for legacy commands
         4655 \def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA}
         4656 \def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN}
         4657 \def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark}
         4658 \def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart}
         4659 \def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid}
         4660 \def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol}
         4661 \def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED}
         4662 \def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed}
         4663 \def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen}
         4664 \def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice}
         4665 
         4666 
         4667 
         4668 % provide for legacy environments
         4669 \def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography}
         4670 \def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto}
         4671 \def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords}
         4672 \def\endbiography{\endIEEEbiography}
         4673 \def\endbiographynophoto{\endIEEEbiographynophoto}
         4674 \def\endkeywords{\endIEEEkeywords}
         4675 
         4676 
         4677 % provide for legacy IED commands/lengths when possible
         4678 \let\labelindent\IEEElabelindent
         4679 \def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin}
         4680 \def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth}
         4681 \def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep}
         4682 \def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc}
         4683 \def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl}
         4684 \def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr}
         4685 
         4686 
         4687 
         4688 % let \proof use the IEEEtran version even after amsthm is loaded
         4689 % \proof is now deprecated in favor of \IEEEproof
         4690 \AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}}
         4691 
         4692 % V1.7 \overrideIEEEmargins is no longer supported.
         4693 \def\overrideIEEEmargins{%
         4694 \typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}%
         4695 \typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}}
         4696 
         4697 
         4698 \endinput
         4699 
         4700 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls  %%%%%%%%%%%%%%%%%%%%%%%%%%%%
         4701 % That's all folks!
         4702