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