hpcs-16-mic-v2

Speedup of deep neural network learning on the MIC-architecture
git clone https://git.igankevich.com/hpcs-16-mic-v2.git
Log | Files | Refs

HPCSTrans.cls (201191B)


      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{HPCSTrans}[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 1ex 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{Figure}
   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{Keywords}
   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       {\mbox{}\vskip\@IEEEauthorblockconfadjspace%
   3454        \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par\par\par\@IEEEspecialpapernotice}\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{{\vspace*{1em}\bf\Large\textrm{#1}\vspace*{1em}}}%
   4458 \else%
   4459 \def\@IEEEspecialpapernotice{{\\*[1.5ex]\LARGE\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!