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