2 %% IEEEtran.cls 2015/08/26 version V1.8b
4 %% This is the IEEEtran LaTeX class for authors of the Institute of
5 %% Electrical and Electronics Engineers (IEEE) Transactions journals and
9 %% http://www.michaelshell.org/tex/ieeetran/
10 %% http://www.ctan.org/pkg/ieeetran
12 %% http://www.ieee.org/
14 %% Based on the original 1993 IEEEtran.cls, but with many bug fixes
15 %% and enhancements (from both JVH and MDS) over the 1996/7 version.
19 %% Gerry Murray (1993), Silvano Balemi (1993),
20 %% Jon Dixon (1996), Peter N"uchter (1996),
21 %% Juergen von Hagen (2000), and Michael Shell (2001-2014)
24 %% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi,
25 %% Jon Dixon, Peter N"uchter,
28 %% Copyright (c) 2001-2015 by Michael Shell
30 %% Current maintainer (V1.3 to V1.8b): Michael Shell
32 %% http://www.michaelshell.org/
33 %% for current contact information.
35 %% Special thanks to Peter Wilson (CUA) and Donald Arseneau
36 %% for allowing the inclusion of the \@ifmtarg command
37 %% from their ifmtarg LaTeX package.
39 %%*************************************************************************
41 %% This code is offered as-is without any warranty either expressed or
42 %% implied; without even the implied warranty of MERCHANTABILITY or
43 %% FITNESS FOR A PARTICULAR PURPOSE!
44 %% User assumes all risk.
45 %% In no event shall the IEEE or any contributor to this code be liable for
46 %% any damages or losses, including, but not limited to, incidental,
47 %% consequential, or any other damages, resulting from the use or misuse
48 %% of any information contained here.
50 %% All comments are the opinions of their respective authors and are not
51 %% necessarily endorsed by the IEEE.
53 %% This work is distributed under the LaTeX Project Public License (LPPL)
54 %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
55 %% distributed and modified. A copy of the LPPL, version 1.3, is included
56 %% in the base LaTeX documentation of all distributions of LaTeX released
57 %% 2003/12/01 or later.
58 %% Retain all contribution notices and credits.
59 %% ** Modified files should be clearly indicated as such, including **
60 %% ** renaming them and changing author support contact information. **
62 %% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex,
63 %% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex,
64 %% 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, cspaper
114 % determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in.
115 % Changing the paper size in the standard journal and conference modes
116 % will not alter the typesetting of the document - only the margins will
117 % be affected. In particular, documents using the a4paper option will
118 % have reduced side margins (A4 is narrower than US letter) and a longer
119 % bottom margin (A4 is longer than US letter). For both cases, the top
120 % margins will be the same and the text will be horizontally centered.
121 % For the compsoc conference and draft modes, it is the margins that will
122 % remain constant, and thus the text area size will vary, with changes in
124 % The cspaper option is the special ``trim'' paper size (7.875in x 10.75in)
125 % used in the actual publication of Computer Society journals. Under
126 % compsoc journal mode, this option does not alter the typesetting of the
127 % document. Authors should invoke the cspaper option only if requested to
128 % do so by the editors of the specific journal they are submitting to.
129 % For final submission to the IEEE, authors should generally use US letter
130 % (8.5 X 11in) paper unless otherwise instructed. Note that authors should
131 % ensure that all post-processing (ps, pdf, etc.) uses the same paper
132 % specificiation as the .tex document. Problems here are by far the number
133 % one reason for incorrect margins. IEEEtran will automatically set the
134 % default paper size under pdflatex (without requiring any change to
135 % pdftex.cfg), so this issue is more important to dvips users. Fix
136 % config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the
137 % dvips -t papersize option instead as needed. For the cspaper option,
138 % the corresponding dvips paper name is "ieeecs".
139 % See the testflow documentation
140 % http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow
141 % for more details on dvips paper size configuration.
142 % The default is letterpaper.
145 % determines if layout follows single sided or two sided (duplex)
146 % printing. The only notable change is with the headings at the top of
148 % The default is oneside.
150 % onecolumn, twocolumn
151 % determines if text is organized into one or two columns per page. One
152 % column mode is usually used only with draft papers.
153 % The default is twocolumn.
155 % comsoc, compsoc, transmag
156 % Use the format of the IEEE Communications Society, IEEE Computer Society
157 % or IEEE Transactions on Magnetics, respectively.
160 % Use the "Appendix I" convention when numbering appendices. IEEEtran.cls
161 % now defaults to Alpha "Appendix A" convention - the opposite of what
162 % v1.6b and earlier did.
165 % disables the display of the figure/table captions. Some IEEE journals
166 % request that captions be removed and figures/tables be put on pages
167 % of their own at the end of an initial paper submission. The endfloat
168 % package can be used with this class option to achieve this format.
171 % turns off tuning of the font interword spacing. Maybe useful to those
172 % not using the standard Times fonts or for those who have already "tuned"
174 % The default is to enable IEEEtran to tune font parameters.
178 % Available CLASSINPUTs provided (all are macros unless otherwise noted):
179 % \CLASSINPUTbaselinestretch
180 % \CLASSINPUTinnersidemargin
181 % \CLASSINPUToutersidemargin
182 % \CLASSINPUTtoptextmargin
183 % \CLASSINPUTbottomtextmargin
185 % Available CLASSINFOs provided:
186 % \ifCLASSINFOpdf (TeX if conditional)
187 % \CLASSINFOpaperwidth (macro)
188 % \CLASSINFOpaperheight (macro)
189 % \CLASSINFOnormalsizebaselineskip (length)
190 % \CLASSINFOnormalsizeunitybaselineskip (length)
192 % Available CLASSOPTIONs provided:
193 % all class option flags (TeX if conditionals) unless otherwise noted,
194 % e.g., \ifCLASSOPTIONcaptionsoff
195 % point size options provided as a single macro:
197 % which will be defined as 9, 10, 11, or 12 depending on the document's
198 % normalsize point size.
199 % also, class option peerreviewca implies the use of class option peerreview
200 % and classoption draft implies the use of class option draftcls
206 \ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell]
207 \typeout{-- See the "IEEEtran_HOWTO" manual for usage information.}
208 \typeout{-- http://www.michaelshell.org/tex/ieeetran/}
209 \NeedsTeXFormat{LaTeX2e}
211 % IEEEtran.cls version numbers, provided as of V1.3
212 % These values serve as a way a .tex file can
213 % determine if the new features are provided.
214 % The version number of this IEEEtrans.cls can be obtained from
215 % these values. i.e., V1.4
216 % KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that-
217 % (no need to enumerate "a" minor changes here)
218 \def\IEEEtransversionmajor{1}
219 \def\IEEEtransversionminor{8}
222 % hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting
223 \def\@IEEEclspkgerror{\ClassError{IEEEtran}}
226 % These do nothing, but provide them like in article.cls
231 % class option conditionals
232 \newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse
233 \newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue
235 \newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue
236 \newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse
238 \newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue
239 \newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse
240 \newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse
241 \newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse
243 \newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse
244 \newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse
246 \newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue
247 \newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse
248 \newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse
250 \newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse
252 \newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse
254 \newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse
255 \newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse
256 \newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse
258 \newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse
261 % class info conditionals
263 % indicates if pdf (via pdflatex) output
264 \newif\ifCLASSINFOpdf \CLASSINFOpdffalse
267 % V1.6b internal flag to show if using a4paper
268 \newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse
269 % V1.6b internal flag to show if using cspaper
270 \newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse
273 % IEEEtran class scratch pad registers
275 \newdimen\@IEEEtrantmpdimenA
276 \newdimen\@IEEEtrantmpdimenB
277 \newdimen\@IEEEtrantmpdimenC
279 \newcount\@IEEEtrantmpcountA
280 \newcount\@IEEEtrantmpcountB
281 \newcount\@IEEEtrantmpcountC
283 \newtoks\@IEEEtrantmptoksA
285 % we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs)
286 % as well as LaTeX's \@ptsize to retain some compatability with some
289 % LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt
290 \DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}}
291 \DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}}
292 \DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}}
293 \DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}}
297 \DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}%
298 \setlength{\paperheight}{11in}%
299 \@IEEEusingAfourpaperfalse
300 \@IEEEusingcspaperfalse
301 \def\CLASSOPTIONpaper{letter}%
302 \def\CLASSINFOpaperwidth{8.5in}%
303 \def\CLASSINFOpaperheight{11in}}
306 \DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}%
307 \setlength{\paperheight}{297mm}%
308 \@IEEEusingAfourpapertrue
309 \@IEEEusingcspaperfalse
310 \def\CLASSOPTIONpaper{a4}%
311 \def\CLASSINFOpaperwidth{210mm}%
312 \def\CLASSINFOpaperheight{297mm}}
314 % special paper option for compsoc journals
315 \DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}%
316 \setlength{\paperheight}{10.75in}%
317 \@IEEEusingcspapertrue
318 \@IEEEusingAfourpaperfalse
319 \def\CLASSOPTIONpaper{ieeecs}%
320 \def\CLASSINFOpaperwidth{7.875in}%
321 \def\CLASSINFOpaperheight{10.75in}}
323 \DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse
324 \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse}
325 \DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue
326 \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse}
328 \DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse}
329 \DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse}
331 % If the user selects draft, then this class AND any packages
332 % will go into draft mode.
333 \DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue
334 \CLASSOPTIONdraftclsnofootfalse}
335 % draftcls is for a draft mode which will not affect any packages
336 % used by the document.
337 \DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
338 \CLASSOPTIONdraftclsnofootfalse}
339 % draftclsnofoot is like draftcls, but without the footer.
340 \DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
341 \CLASSOPTIONdraftclsnofoottrue}
342 \DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse
343 \CLASSOPTIONdraftclsnofootfalse}
345 \DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
346 \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
348 \DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
349 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse}
351 \DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
352 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue}
354 \DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse
355 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
357 \DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue
358 \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
360 \DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue}
362 \DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue}
364 \DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse}
366 \DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse}
368 \DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse}
370 \DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue}
373 % default to US letter paper, 10pt, twocolumn, one sided, final, journal
374 \ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal}
375 % overrride these defaults per user requests
380 %% -- Command Argument Scanning Support Functions --
382 % Sets the category codes for punctuation to their normal values.
383 % For local use with argument scanning.
384 \def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12
385 \catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12
386 \catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12
387 \catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12
388 \catcode`\]=12 \catcode`\==12 \catcode`\|=12}
389 % Sets the category codes for numbers to their normal values.
390 % For local use with argument scanning.
391 \def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12
392 \catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12
393 \catcode`\8=12 \catcode`\9=12}
394 % combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum
395 \def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum}
398 % usage: \@IEEEextracttoken*{}
399 % \@IEEEextracttoken fully expands its argument (which it then stores in
400 % \@IEEEextracttokenarg) via \edef and then the meaning of the first
401 % nonbrace (but including the empty group) token found is assigned via \let
402 % to \@IEEEextractedtoken as well as stored in the macro
403 % \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during
404 % the acquisition of the first are stored in \@IEEEextractedtokensdiscarded,
405 % however their original relative brace nesting depths are not guaranteed to
407 % If the argument is empty, or if a first nonbrace token does not exist (or
408 % is an empty group), \@IEEEextractedtoken will be \relax and
409 % \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty.
412 % \@IEEEextracttoken{{{ab}{cd}}{{ef}g}}
415 % \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g}
416 % \@IEEEextractedtoken ==> the letter a
417 % \@IEEEextractedtokenmacro ==> a macro containing a
418 % \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g
420 % the *-star form, \@IEEEextracttoken*, does not expand its argument
421 % contents during processing.
422 \def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}}
424 \def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax
425 \def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty
426 % if the macro is unchanged after being acquired as a single undelimited argument
427 % with anything after it being stripped off as a delimited argument
428 % we know we have one token without any enclosing braces. loop until this is true.
429 \let\@IEEEextracttokencurgroup\@IEEEextracttokenarg
431 % trap case of an empty argument as this would cause a problem with
432 % \@@@IEEEextracttoken's first (nondelimited) argument acquisition
433 \ifx\@IEEEextracttokencurgroup\@empty
434 \def\@IEEEextractedtokenmacro{}\relax
436 \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax
438 \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup
440 \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro
442 % we can safely do a \let= here because there should be at most one token
443 % the relax is needed to handle the case of no token found
444 \expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax}
446 \def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax
447 \def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter
448 \@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter
449 {\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}}
451 %% -- End of Command Argument Scanning Support Functions --
455 % Computer Society conditional execution command
456 \long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax}
458 \long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax}
460 \long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax}
461 % compsoc not conference
462 \long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax}
465 % comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded
466 \def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax
467 \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}}
468 \def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}}
469 \def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}}
470 \def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}}
472 % comsoc, if a Times math font was not loaded by user, enforce it
473 \def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax
474 \IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}}
475 \def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}}
476 \def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}}
477 \def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}}
478 % if no acceptable Times math font package found, error with newtxmath requirement
479 \def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}}
483 % ensure that if newtxmath is used, the cmintegrals option is also invoked
484 \PassOptionsToPackage{cmintegrals}{newtxmath}
485 % comsoc requires a Times like math font
486 % ensure this requirement is satisfied at document start
487 \AtBeginDocument{\@IEEEcomsocverifymathfont}
492 % The IEEE uses Times Roman font, so we'll default to Times.
493 % These three commands make up the entire times.sty package.
494 \renewcommand{\sfdefault}{phv}
495 \renewcommand{\rmdefault}{ptm}
496 \renewcommand{\ttdefault}{pcr}
498 % V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font,
500 \@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}}
502 % enable the selected main text font
503 \normalfont\selectfont
507 \typeout{-- Using IEEE Communications Society mode.}
510 \ifCLASSOPTIONcompsoc
511 \typeout{-- Using IEEE Computer Society mode.}
515 % V1.7 conference notice message hook
516 \def\@IEEEconsolenoticeconference{\typeout{}%
517 \typeout{** Conference Paper **}%
518 \typeout{Before submitting the final camera ready copy, remember to:}%
520 \typeout{ 1. Manually equalize the lengths of two columns on the last page}%
521 \typeout{ of your paper;}%
523 \typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}%
524 \typeout{ uses only Type 1 fonts and that every step in the generation}%
525 \typeout{ process uses the appropriate paper size.}%
529 % we can send console reminder messages to the user here
530 \AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi}
533 % warn about the use of single column other than for draft mode
534 \ifCLASSOPTIONtwocolumn\else%
535 \ifCLASSOPTIONdraftcls\else%
536 \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}%
541 % V1.7 improved paper size setting code.
542 % Set pdfpage and dvips paper sizes. Conditional tests are similar to that
543 % of ifpdf.sty. Retain within {} to ensure tested macros are never altered,
544 % even if only effect is to set them to \relax.
545 % if \pdfoutput is undefined or equal to relax, output a dvips special
546 {\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{%
547 % pdfoutput is defined and not equal to \relax
548 % check for pdfpageheight existence just in case someone sets pdfoutput
549 % under non-pdflatex. If exists, set them regardless of value of \pdfoutput.
550 \@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth
551 \global\pdfpageheight\paperheight}%
552 % if using \pdfoutput=0 under pdflatex, send dvips papersize special
554 \AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}%
556 % we are using pdf output, set CLASSINFOpdf flag
557 \global\CLASSINFOpdftrue
560 % let the user know the selected papersize
561 \typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space
562 (\CLASSOPTIONpaper)\space paper.}
565 \typeout{-- Using PDF output.}
567 \typeout{-- Using DVI output.}
571 % The idea hinted here is for LaTeX to generate markleft{} and markright{}
572 % automatically for you after you enter \author{}, \journal{},
573 % \journaldate{}, journalvol{}, \journalnum{}, etc.
574 % However, there may be some backward compatibility issues here as
575 % well as some special applications for IEEEtran.cls and special issues
576 % that may require the flexible \markleft{}, \markright{} and/or \markboth{}.
577 % We'll leave this as an open future suggestion.
578 %\newcommand{\journal}[1]{\def\@journal{#1}}
584 % used with ifx to determine the document's normal size
585 \def\@IEEEptsizenine{9}
586 \def\@IEEEptsizeten{10}
587 \def\@IEEEptsizeeleven{11}
588 \def\@IEEEptsizetwelve{12}
592 % FONT DEFINITIONS (No sizexx.clo file needed)
593 % V1.6 revised font sizes, displayskip values and
594 % revised normalsize baselineskip to reduce underfull vbox problems
595 % on the 58pc = 696pt = 9.5in text height we want
596 % normalsize #lines/column baselineskip (aka leading)
597 % 9pt 63 11.0476pt (truncated down)
598 % 10pt 58 12pt (exact)
599 % 11pt 52 13.3846pt (truncated down)
600 % 12pt 50 13.92pt (exact)
603 % we need to store the nominal baselineskip for the given font size
604 % in case baselinestretch ever changes.
605 % this is a dimen, so it will not hold stretch or shrink
606 \newdimen\@IEEEnormalsizeunitybaselineskip
607 \@IEEEnormalsizeunitybaselineskip\baselineskip
611 %% ******* WARNING! *******
613 %% Authors should not alter font sizes, baselineskip ("leading"),
614 %% margins or other spacing values in an attempt to squeeze more
615 %% material on each page.
617 %% The IEEE's own typesetting software will restore the correct
618 %% values when re-typesetting/proofing the submitted document,
619 %% possibly resulting in unexpected article over length charges.
621 %% ******* WARNING! *******
624 % 9pt option defaults
625 \ifx\CLASSOPTIONpt\@IEEEptsizenine
626 \typeout{-- This is a 9 point document.}
627 \def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}}
628 \setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt}
630 \abovedisplayskip 1.5ex plus 3pt minus 1pt
631 \belowdisplayskip \abovedisplayskip
632 \abovedisplayshortskip 0pt plus 3pt
633 \belowdisplayshortskip 1.5ex plus 3pt minus 1pt
634 \def\small{\@setfontsize{\small}{8.5}{10pt}}
635 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}}
636 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}}
637 \def\tiny{\@setfontsize{\tiny}{5}{6pt}}
638 % sublargesize is the same as large - 10pt
639 \def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}}
640 \def\large{\@setfontsize{\large}{10}{12pt}}
641 \def\Large{\@setfontsize{\Large}{12}{14pt}}
642 \def\LARGE{\@setfontsize{\LARGE}{14}{17pt}}
643 \def\huge{\@setfontsize{\huge}{17}{20pt}}
644 \def\Huge{\@setfontsize{\Huge}{20}{24pt}}
647 % 10pt option defaults
648 \ifx\CLASSOPTIONpt\@IEEEptsizeten
649 \typeout{-- This is a 10 point document.}
650 \def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}}
651 \setlength{\@IEEEnormalsizeunitybaselineskip}{12pt}
653 \abovedisplayskip 1.5ex plus 4pt minus 2pt
654 \belowdisplayskip \abovedisplayskip
655 \abovedisplayshortskip 0pt plus 4pt
656 \belowdisplayshortskip 1.5ex plus 4pt minus 2pt
657 \def\small{\@setfontsize{\small}{9}{10pt}}
658 \def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}}
659 \def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}}
660 \def\tiny{\@setfontsize{\tiny}{5}{6pt}}
661 % sublargesize is a tad smaller than large - 11pt
662 \def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}}
663 \def\large{\@setfontsize{\large}{12}{14pt}}
664 \def\Large{\@setfontsize{\Large}{14}{17pt}}
665 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}}
666 \def\huge{\@setfontsize{\huge}{20}{24pt}}
667 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
670 % 11pt option defaults
671 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven
672 \typeout{-- This is an 11 point document.}
673 \def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}}
674 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt}
676 \abovedisplayskip 1.5ex plus 5pt minus 3pt
677 \belowdisplayskip \abovedisplayskip
678 \abovedisplayshortskip 0pt plus 5pt
679 \belowdisplayshortskip 1.5ex plus 5pt minus 3pt
680 \def\small{\@setfontsize{\small}{10}{12pt}}
681 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}}
682 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}}
683 \def\tiny{\@setfontsize{\tiny}{6}{7pt}}
684 % sublargesize is the same as large - 12pt
685 \def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}}
686 \def\large{\@setfontsize{\large}{12}{14pt}}
687 \def\Large{\@setfontsize{\Large}{14}{17pt}}
688 \def\LARGE{\@setfontsize{\LARGE}{17}{20pt}}
689 \def\huge{\@setfontsize{\huge}{20}{24pt}}
690 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
693 % 12pt option defaults
694 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve
695 \typeout{-- This is a 12 point document.}
696 \def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}}
697 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt}
699 \abovedisplayskip 1.5ex plus 6pt minus 4pt
700 \belowdisplayskip \abovedisplayskip
701 \abovedisplayshortskip 0pt plus 6pt
702 \belowdisplayshortskip 1.5ex plus 6pt minus 4pt
703 \def\small{\@setfontsize{\small}{10}{12pt}}
704 \def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}}
705 \def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}}
706 \def\tiny{\@setfontsize{\tiny}{6}{7pt}}
707 % sublargesize is the same as large - 14pt
708 \def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}}
709 \def\large{\@setfontsize{\large}{14}{17pt}}
710 \def\Large{\@setfontsize{\Large}{17}{20pt}}
711 \def\LARGE{\@setfontsize{\LARGE}{20}{24pt}}
712 \def\huge{\@setfontsize{\huge}{22}{26pt}}
713 \def\Huge{\@setfontsize{\Huge}{24}{28pt}}
718 % V1.8a compsoc font sizes
719 % compsoc font sizes use bp "Postscript" point units (1/72in)
720 % rather than the traditional pt (1/72.27)
721 \ifCLASSOPTIONcompsoc
722 % -- compsoc defaults --
723 % ** will override some of these values later **
725 \ifx\CLASSOPTIONpt\@IEEEptsizenine
726 \def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}}
727 \setlength{\@IEEEnormalsizeunitybaselineskip}{11bp}
729 \abovedisplayskip 1.5ex plus 3bp minus 1bp
730 \belowdisplayskip \abovedisplayskip
731 \abovedisplayshortskip 0bp plus 3bp
732 \belowdisplayshortskip 1.5ex plus 3bp minus 1bp
733 \def\small{\@setfontsize{\small}{8.5bp}{10bp}}
734 \def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}}
735 \def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}}
736 \def\tiny{\@setfontsize{\tiny}{5bp}{6bp}}
737 % sublargesize is the same as large - 10bp
738 \def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}}
739 \def\large{\@setfontsize{\large}{10bp}{12bp}}
740 \def\Large{\@setfontsize{\Large}{12bp}{14bp}}
741 \def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}}
742 \def\huge{\@setfontsize{\huge}{17bp}{20bp}}
743 \def\Huge{\@setfontsize{\Huge}{20bp}{24bp}}
747 \ifx\CLASSOPTIONpt\@IEEEptsizeten
748 \def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}}
749 \setlength{\@IEEEnormalsizeunitybaselineskip}{12bp}
751 \abovedisplayskip 1.5ex plus 4bp minus 2bp
752 \belowdisplayskip \abovedisplayskip
753 \abovedisplayshortskip 0pt plus 4bp
754 \belowdisplayshortskip 1.5ex plus 4bp minus 2bp
755 \def\small{\@setfontsize{\small}{9bp}{10bp}}
756 \def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}}
757 \def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}}
758 \def\tiny{\@setfontsize{\tiny}{5bp}{6bp}}
759 % sublargesize is a tad smaller than large - 11bp
760 \def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}}
761 \def\large{\@setfontsize{\large}{12bp}{14bp}}
762 \def\Large{\@setfontsize{\Large}{14bp}{17bp}}
763 \def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}}
764 \def\huge{\@setfontsize{\huge}{20bp}{24bp}}
765 \def\Huge{\@setfontsize{\Huge}{24bp}{28bp}}
769 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven
770 \def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}}
771 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp}
773 \abovedisplayskip 1.5ex plus 5bp minus 3bp
774 \belowdisplayskip \abovedisplayskip
775 \abovedisplayshortskip 0pt plus 5bp
776 \belowdisplayshortskip 1.5ex plus 5bp minus 3bp
777 \def\small{\@setfontsize{\small}{10bp}{12bp}}
778 \def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}}
779 \def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}}
780 \def\tiny{\@setfontsize{\tiny}{6bp}{7bp}}
781 % sublargesize is the same as large - 12bp
782 \def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}}
783 \def\large{\@setfontsize{\large}{12bp}{14bp}}
784 \def\Large{\@setfontsize{\Large}{14bp}{17bp}}
785 \def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}}
786 \def\huge{\@setfontsize{\huge}{20bp}{24bp}}
787 \def\Huge{\@setfontsize{\Huge}{24bp}{28bp}}
791 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve
792 \def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}%
793 \setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}%
795 \abovedisplayskip 1.5ex plus 6bp minus 4bp
796 \belowdisplayskip \abovedisplayskip
797 \abovedisplayshortskip 0pt plus 6bp
798 \belowdisplayshortskip 1.5ex plus 6bp minus 4bp
799 \def\small{\@setfontsize{\small}{10bp}{12bp}}
800 \def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}}
801 \def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}}
802 \def\tiny{\@setfontsize{\tiny}{6bp}{7bp}}
803 % sublargesize is the same as large - 14bp
804 \def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}}
805 \def\large{\@setfontsize{\large}{14bp}{17bp}}
806 \def\Large{\@setfontsize{\Large}{17bp}{20bp}}
807 \def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}}
808 \def\huge{\@setfontsize{\huge}{22bp}{26bp}}
809 \def\Huge{\@setfontsize{\Huge}{24bp}{28bp}}
812 % -- override defaults: compsoc journals use special normalsizes --
813 \ifCLASSOPTIONconference
815 % compsoc conferences
817 \ifx\CLASSOPTIONpt\@IEEEptsizenine
818 \def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}}
819 \setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp}
821 \abovedisplayskip 1.5ex plus 3bp minus 1bp
822 \belowdisplayskip \abovedisplayskip
823 \abovedisplayshortskip 0bp plus 3bp
824 \belowdisplayshortskip 1.5ex plus 3bp minus 1bp
827 \ifx\CLASSOPTIONpt\@IEEEptsizeten
828 \def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}}
829 \setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp}
831 \abovedisplayskip 1.5ex plus 4bp minus 2bp
832 \belowdisplayskip \abovedisplayskip
833 \abovedisplayshortskip 0pt plus 4bp
834 \belowdisplayshortskip 1.5ex plus 4bp minus 2bp
837 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven
838 \def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}}
839 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp}
841 \abovedisplayskip 1.5ex plus 5bp minus 3bp
842 \belowdisplayskip \abovedisplayskip
843 \abovedisplayshortskip 0pt plus 5bp
844 \belowdisplayshortskip 1.5ex plus 5bp minus 3bp
847 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve
848 \def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}}
849 \setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp}
851 \abovedisplayskip 1.5ex plus 6bp minus 4bp
852 \belowdisplayskip \abovedisplayskip
853 \abovedisplayshortskip 0pt plus 6bp
854 \belowdisplayshortskip 1.5ex plus 6bp minus 4bp
857 % compsoc nonconferences
860 \ifx\CLASSOPTIONpt\@IEEEptsizenine
861 \def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}}
862 \setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp}
864 \abovedisplayskip 1.5ex plus 3bp minus 1bp
865 \belowdisplayskip \abovedisplayskip
866 \abovedisplayshortskip 0bp plus 3bp
867 \belowdisplayshortskip 1.5ex plus 3bp minus 1bp
870 \ifx\CLASSOPTIONpt\@IEEEptsizeten
871 % the official spec is 9.5bp with 11.4bp leading for 10pt,
872 % but measurements of proofs suggest upto 11.723bp leading
873 % here we'll use 11.54bp which gives 61 lines per column
874 % with the standard compsoc margins
875 \def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}}
876 \setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp}
878 \abovedisplayskip 1.5ex plus 4bp minus 2bp
879 \belowdisplayskip \abovedisplayskip
880 \abovedisplayshortskip 0pt plus 4bp
881 \belowdisplayshortskip 1.5ex plus 4bp minus 2bp
884 \ifx\CLASSOPTIONpt\@IEEEptsizeeleven
885 \def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}}
886 \setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp}
888 \abovedisplayskip 1.5ex plus 5bp minus 3bp
889 \belowdisplayskip \abovedisplayskip
890 \abovedisplayshortskip 0pt plus 5bp
891 \belowdisplayshortskip 1.5ex plus 5bp minus 3bp
894 \ifx\CLASSOPTIONpt\@IEEEptsizetwelve
895 \def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}}
896 \setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp}
898 \abovedisplayskip 1.5ex plus 6bp minus 4bp
899 \belowdisplayskip \abovedisplayskip
900 \abovedisplayshortskip 0pt plus 6bp
901 \belowdisplayshortskip 1.5ex plus 6bp minus 4bp
908 % V1.6 The Computer Modern Fonts will issue a substitution warning for
909 % 24pt titles (24.88pt is used instead, but the default and correct
910 % Times font will scale exactly as needed) increase the substitution
911 % tolerance to turn off this warning.
913 % V1.8a, the compsoc bp font sizes can also cause bogus font substitution
914 % warnings with footnote or scriptsize math and the $\bullet$ itemized
915 % list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more.
916 \def\fontsubfuzz{1.7bp}
919 % warn the user in case they forget to use the 9pt option with
921 \ifCLASSOPTIONtechnote%
922 \ifx\CLASSOPTIONpt\@IEEEptsizenine\else%
923 \typeout{** ATTENTION: Technotes are normally 9pt documents.}%
929 % Improved \textunderscore to provide a much better fake _ when used with
930 % OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use
931 % available true _ glyph for those two typewriter fonts.
932 \def\@IEEEstringptm{ptm} % Times Roman family
933 \def\@IEEEstringppl{ppl} % Palatino Roman family
934 \def\@IEEEstringphv{phv} % Helvetica Sans Serif family
935 \def\@IEEEstringpcr{pcr} % Courier typewriter family
936 \def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family
937 \DeclareTextCommandDefault{\textunderscore}{\leavevmode
938 \ifx\f@family\@IEEEstringpcr\string_\else
939 \ifx\f@family\@IEEEstringcmtt\string_\else
940 \ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
941 \ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else
942 \ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else
943 \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}
948 % set the default \baselinestretch
949 \def\baselinestretch{1}
950 \ifCLASSOPTIONdraftcls
951 \def\baselinestretch{1.5}% default baselinestretch for draft modes
955 % process CLASSINPUT baselinestretch
956 \ifx\CLASSINPUTbaselinestretch\@IEEEundefined
958 \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override
959 \typeout{** ATTENTION: Overriding \string\baselinestretch\space to
960 \baselinestretch\space via \string\CLASSINPUT.}
963 \small\normalsize % make \baselinestretch take affect
968 % store the normalsize baselineskip
969 \newdimen\CLASSINFOnormalsizebaselineskip
970 \CLASSINFOnormalsizebaselineskip=\baselineskip\relax
971 % and the normalsize unity (baselinestretch=1) baselineskip
972 % we could save a register by giving the user access to
973 % \@IEEEnormalsizeunitybaselineskip. However, let's protect
974 % its read only internal status
975 \newdimen\CLASSINFOnormalsizeunitybaselineskip
976 \CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax
977 % store the nominal value of jot
978 \newdimen\IEEEnormaljot
979 \IEEEnormaljot=0.25\baselineskip\relax
982 \jot=\IEEEnormaljot\relax
987 % V1.6, we are now going to fine tune the interword spacing
988 % The default interword glue for Times under TeX appears to use a
989 % nominal interword spacing of 25% (relative to the font size, i.e., 1em)
990 % a maximum of 40% and a minimum of 19%.
991 % For example, 10pt text uses an interword glue of:
993 % 2.5pt plus 1.49998pt minus 0.59998pt
995 % However, the IEEE allows for a more generous range which reduces the need
996 % for hyphenation, especially for two column text. Furthermore, the IEEE
997 % tends to use a little bit more nominal space between the words.
998 % The IEEE's interword spacing percentages appear to be:
1002 % (They may even be using a tad more for the largest fonts such as 24pt.)
1004 % for bold text, the IEEE increases the spacing a little more:
1009 % here are the interword spacing ratios we'll use
1010 % for medium (normal weight)
1011 \def\@IEEEinterspaceratioM{0.35}
1012 \def\@IEEEinterspaceMINratioM{0.23}
1013 \def\@IEEEinterspaceMAXratioM{0.50}
1016 \def\@IEEEinterspaceratioB{0.375}
1017 \def\@IEEEinterspaceMINratioB{0.23}
1018 \def\@IEEEinterspaceMAXratioB{0.55}
1021 % compsoc nonconference papers use Palatino,
1022 % tweak settings to better match the proofs
1023 \ifCLASSOPTIONcompsoc
1024 \ifCLASSOPTIONconference\else
1025 % for medium (normal weight)
1026 \def\@IEEEinterspaceratioM{0.28}
1027 \def\@IEEEinterspaceMINratioM{0.21}
1028 \def\@IEEEinterspaceMAXratioM{0.47}
1030 \def\@IEEEinterspaceratioB{0.305}
1031 \def\@IEEEinterspaceMINratioB{0.21}
1032 \def\@IEEEinterspaceMAXratioB{0.52}
1036 % command to revise the interword spacing for the current font under TeX:
1037 % \fontdimen2 = nominal interword space
1038 % \fontdimen3 = interword stretch
1039 % \fontdimen4 = interword shrink
1040 % since all changes to the \fontdimen are global, we can enclose these commands
1041 % in braces to confine any font attribute or length changes
1042 \def\@@@IEEEsetfontdimens#1#2#3{{%
1043 \setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead.
1044 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}%
1045 \fontdimen2\font=\@IEEEtrantmpdimenA\relax
1046 \addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}%
1047 \fontdimen3\font=-\@IEEEtrantmpdimenA\relax
1048 \setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}%
1049 \addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}%
1050 \fontdimen4\font=\@IEEEtrantmpdimenA\relax}}
1052 % revise the interword spacing for each font weight
1053 \def\@@IEEEsetfontdimens{{%
1055 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}%
1057 \@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}%
1060 % revise the interword spacing for each font shape
1061 % \slshape is not often used for IEEE work and is not altered here. The \scshape caps are
1062 % already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we
1063 % won't alter these either.
1064 \def\@IEEEsetfontdimens{{%
1066 \@@IEEEsetfontdimens
1068 \@@IEEEsetfontdimens
1071 % command to revise the interword spacing for each font size (and shape
1072 % and weight). Only the \rmfamily is done here as \ttfamily uses a
1073 % fixed spacing and \sffamily is not used as the main text of IEEE papers.
1074 \def\@IEEEtunefonts{{\selectfont\rmfamily
1075 \tiny\@IEEEsetfontdimens
1076 \scriptsize\@IEEEsetfontdimens
1077 \footnotesize\@IEEEsetfontdimens
1078 \small\@IEEEsetfontdimens
1079 \normalsize\@IEEEsetfontdimens
1080 \sublargesize\@IEEEsetfontdimens
1081 \large\@IEEEsetfontdimens
1082 \LARGE\@IEEEsetfontdimens
1083 \huge\@IEEEsetfontdimens
1084 \Huge\@IEEEsetfontdimens}}
1086 % if the nofonttune class option is not given, revise the interword spacing
1087 % now - in case IEEEtran makes any default length measurements, and make
1088 % sure all the default fonts are loaded
1089 \ifCLASSOPTIONnofonttune\else
1093 % and again at the start of the document in case the user loaded different fonts
1094 \AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi}
1100 % -- V1.8a page setup commands --
1102 % The default sample text for calculating margins
1103 % Note that IEEE publications use \scriptsize for headers and footers.
1104 \def\IEEEdefaultsampletext{\normalfont\normalsize gT}
1105 \def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase
1106 \def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT}
1110 % usage: \IEEEsettextwidth{inner margin}{outer margin}
1111 % Sets \textwidth to allow the specified inner and outer margins
1112 % for the current \paperwidth.
1113 \def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth
1114 \@IEEEtrantmpdimenB#1\relax
1115 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB
1116 \@IEEEtrantmpdimenB#2\relax
1117 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB
1118 \textwidth\@IEEEtrantmpdimenA}
1122 % usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset}
1123 % Sets \oddsidemargin and \evensidemargin to yield the specified margin
1124 % of the given mode.
1125 % The available modes are:
1128 % c = centered, with the given offset
1129 % a = adjust the margins using the given offset
1130 % For the offsets, positive values increase the inner margin.
1131 % \textwidth should be set properly for the given margins before calling this
1133 \def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax
1134 \@IEEEextracttoken{#1}\relax
1135 % check for mode errors
1136 \ifx\@IEEEextractedtokenmacro\@empty
1137 \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak
1138 Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax
1139 \let\@IEEEextractedtoken=i\relax
1140 \def\@IEEEextractedtokenmacro{i}\relax
1142 \ifx\@IEEEextractedtokensdiscarded\@empty\else
1143 \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
1147 \if\@IEEEextractedtoken a\relax
1148 \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax
1150 \if\@IEEEextractedtoken c\relax
1151 \oddsidemargin\paperwidth
1152 \advance\oddsidemargin by -\textwidth
1153 \divide\oddsidemargin by 2\relax
1154 \advance\oddsidemargin by -1in\relax
1155 \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax
1157 \if\@IEEEextractedtoken o\relax
1158 \oddsidemargin\paperwidth
1159 \advance\oddsidemargin by -\textwidth
1160 \advance\oddsidemargin by -\@IEEEtrantmpdimenA
1161 \advance\oddsidemargin by -1in\relax
1163 \if\@IEEEextractedtoken i\relax
1165 \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak
1167 {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}%
1169 \oddsidemargin\@IEEEtrantmpdimenA
1170 \advance\oddsidemargin by -1in\relax
1172 % odd and even side margins both mean "inner" for single sided pages
1173 \evensidemargin\oddsidemargin
1174 % but are mirrors of each other when twosided is in effect
1176 \evensidemargin\paperwidth
1177 \advance\evensidemargin by -\textwidth
1178 \advance\evensidemargin by -\oddsidemargin
1179 % have to compensate for both the builtin 1in LaTex offset
1180 % and the fact we already subtracted this offset from \oddsidemargin
1181 \advance\evensidemargin -2in\relax
1186 % usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin}
1187 % Sets \textheight based on the specified top margin and bottom margin.
1188 % Takes into consideration \paperheight, \topskip, and (by default) the
1189 % the actual height and depth of the \IEEEdefaultsampletext text.
1190 \def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}}
1191 \def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax
1192 \@IEEEtrantmpdimenA #2\relax
1193 \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin
1194 \@IEEEtrantmpdimenA #3\relax
1195 \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin
1196 \advance \textheight by \topskip% add \topskip
1197 % subtract off everything above the top, and below the bottom, baselines
1198 \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax
1199 \advance \textheight by -\@IEEEtrantmpdimenA
1200 \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax
1201 \advance \textheight by -\@IEEEtrantmpdimenA}
1205 \newdimen\IEEEquantizedlength
1206 \IEEEquantizedlength 0sp\relax
1207 \newdimen\IEEEquantizedlengthdiff
1208 \IEEEquantizedlengthdiff 0sp\relax
1209 \def\IEEEquantizedlengthint{0}
1211 % usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length}
1212 % Sets the length \IEEEquantizedlength to be an integer multiple of the given
1213 % (nonzero) base unit such that \IEEEquantizedlength approximates the given
1215 % \IEEEquantizedlengthdiff is a length equal to the difference between the
1216 % \IEEEquantizedlength and the given length.
1217 % \IEEEquantizedlengthint is a macro containing the integer number of base units
1218 % in \IEEEquantizedlength.
1219 % i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit
1220 % The mode determines how \IEEEquantizedlength is quantized:
1221 % d = always decrease (always round down \IEEEquantizeint)
1222 % c = use the closest match
1223 % i = always increase (always round up \IEEEquantizeint)
1224 % In anycase, if the given length is already quantized,
1225 % \IEEEquantizedlengthdiff will be set to zero.
1226 \def\IEEEquantizelength#1#2#3{\begingroup
1227 % work in isolation so as not to externally disturb the \@IEEEtrantmp
1229 % load the argument values indirectly via \IEEEquantizedlengthdiff
1230 % in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength,
1231 % etc. in the arguments. we also will work with these as counters,
1233 % A has the base unit
1234 \IEEEquantizedlengthdiff #2\relax\relax\relax\relax
1235 \@IEEEtrantmpcountA\IEEEquantizedlengthdiff
1236 % B has the input length
1237 \IEEEquantizedlengthdiff #3\relax\relax\relax\relax
1238 \@IEEEtrantmpcountB\IEEEquantizedlengthdiff
1239 \@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax
1240 \@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax
1241 % \@IEEEtrantmpcountC will have the quantized int
1242 % \IEEEquantizedlength will have the quantized length
1243 % \@IEEEtrantmpdimenC will have the quantized diff
1244 % initialize them to zero as this is what will be
1245 % exported if an error occurs
1246 \@IEEEtrantmpcountC 0\relax
1247 \IEEEquantizedlength 0sp\relax
1248 \@IEEEtrantmpdimenC 0sp\relax
1250 \@IEEEextracttoken{#1}\relax
1251 % check for mode errors
1252 \ifx\@IEEEextractedtokenmacro\@empty
1253 \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak
1254 Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax
1255 \let\@IEEEextractedtoken=d\relax
1256 \def\@IEEEextractedtokenmacro{d}\relax
1258 \ifx\@IEEEextractedtokensdiscarded\@empty\else
1259 \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
1262 % check for base unit is zero error
1263 \ifnum\@IEEEtrantmpcountA=0\relax
1264 \@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak
1265 \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax
1266 \else% base unit is nonzero
1267 % \@IEEEtrantmpcountC carries the number of integer units
1268 % in the quantized length (integer length \ base)
1269 \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax
1270 \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax
1271 % \IEEEquantizedlength has the (rounded down) quantized length
1273 \IEEEquantizedlength\@IEEEtrantmpdimenA\relax
1274 \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax
1275 % \@IEEEtrantmpdimenC has the difference
1276 % = quantized length - length
1277 \@IEEEtrantmpdimenC\IEEEquantizedlength\relax
1278 \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax
1279 % trap special case of length being already quantized
1280 % to avoid a roundup under i option
1281 \ifdim\@IEEEtrantmpdimenC=0sp\relax
1282 \else % length not is already quantized
1283 % set dimenA to carry the upper quantized (absolute value) difference:
1284 % quantizedlength + base - length
1285 \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax
1286 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax
1287 % set dimenB to carry the lower quantized (absolute value) difference:
1288 % length - quantizedlength
1289 \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax
1291 \if\@IEEEextractedtoken c\relax
1292 % compare upper and lower amounts, select upper if lower > upper
1293 \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax
1295 \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax
1296 \advance\@IEEEtrantmpcountC by 1\relax
1297 \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA
1299 % no need to do anything for lower, use output values already setup
1302 \if\@IEEEextractedtoken i\relax
1303 % always round up under i mode
1304 \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax
1305 \advance\@IEEEtrantmpcountC by 1\relax
1306 \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA
1308 \if\@IEEEextractedtoken d\relax
1310 \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak
1312 {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax
1314 % no need to do anything for d, use output values already setup
1316 \fi % if length is already quantized
1317 \fi% if base unit is zero
1318 % globally assign the results to macros we use here to escape the enclosing
1319 % group without needing to call \global on any of the \@IEEEtrantmp variables.
1320 % \@IEEEtrantmpcountC has the quantized int
1321 % \IEEEquantizedlength has the quantized length
1322 % \@IEEEtrantmpdimenC has the quantized diff
1323 \xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax
1324 \@IEEEtrantmpcountC\IEEEquantizedlength\relax
1325 \xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax
1326 \@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax
1327 \xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax
1329 % locally assign the outputs here from the macros
1330 \expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax
1331 \expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax
1332 \edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax}
1336 \newdimen\IEEEquantizedtextheightdiff
1337 \IEEEquantizedtextheightdiff 0sp\relax
1339 % usage: \IEEEquantizetextheight[base unit]{mode: d, c, i}
1340 % Sets \textheight to be an integer multiple of the current \baselineskip
1341 % (or the optionally specified base unit) plus the first (\topskip) line.
1342 % \IEEEquantizedtextheightdiff is a length equal to the difference between
1343 % the new quantized and original \textheight.
1344 % \IEEEquantizedtextheightlpc is a macro containing the integer number of
1345 % lines per column under the quantized \textheight. i.e.,
1346 % \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip
1347 % The mode determines how \textheight is quantized:
1348 % d = always decrease (always round down the number of lines per column)
1349 % c = use the closest match
1350 % i = always increase (always round up the number of lines per column)
1351 % In anycase, if \textheight is already quantized, it will remain unchanged,
1352 % and \IEEEquantizedtextheightdiff will be set to zero.
1353 % Depends on: \IEEEquantizelength
1354 \def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}}
1355 \def\@IEEEquantizetextheight[#1]#2{\begingroup
1356 % use our \IEEEquantizedtextheightdiff as a scratch pad
1357 % we need to subtract off \topskip before quantization
1358 \IEEEquantizedtextheightdiff\textheight
1359 \advance\IEEEquantizedtextheightdiff by -\topskip\relax
1360 \IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff}
1361 % add back \topskip line
1362 \advance\IEEEquantizedlength by \topskip
1363 \@IEEEtrantmpcountC\IEEEquantizedlengthint\relax
1364 \advance\@IEEEtrantmpcountC by 1\relax
1365 % globally assign the results to macros we use here to escape the enclosing
1366 % group without needing to call \global on any of the \@IEEEtrantmp variables.
1367 \xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax
1368 \@IEEEtrantmpcountC\IEEEquantizedlength\relax
1369 \xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax
1370 \@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax
1371 \xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax
1373 % locally assign the outputs here from the macros
1374 \textheight\@IEEEquantizedtextheightmacro sp\relax
1375 \IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax
1376 \edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}}
1380 % usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset}
1381 % Sets \topmargin based on the specified vertical margin.
1382 % Takes into consideration the base 1in offset, \headheight, \headsep,
1383 % \topskip, and (by default) the the actual height (or, for the bottom, depth)
1384 % of the \IEEEdefaultsampletext text.
1385 % The available modes are:
1388 % c = vertically centered, with the given offset
1389 % a = adjust the vertical margins using the given offset
1390 % q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset
1391 % For the offsets, positive values increase the top margin.
1392 % \headheight, \headsep, \topskip and \textheight should be set properly for the
1393 % given margins before calling this function.
1394 \def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}}
1395 \def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax
1396 \@IEEEextracttoken{#2}\relax
1397 % check for mode errors
1398 \ifx\@IEEEextractedtokenmacro\@empty
1399 \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak
1400 Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax
1401 \let\@IEEEextractedtoken=t\relax
1402 \def\@IEEEextractedtokenmacro{t}\relax
1404 \ifx\@IEEEextractedtokensdiscarded\@empty\else
1405 \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
1409 \if\@IEEEextractedtoken a\relax
1410 \advance\topmargin by \@IEEEtrantmpdimenA\relax
1412 \if\@IEEEextractedtoken q\relax
1413 % we need to adjust by half the \IEEEquantizedtextheightdiff value
1414 \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax
1415 \divide\@IEEEtrantmpdimenB by 2\relax
1416 % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin
1417 % because \textheight has been lenghtened
1418 \advance\topmargin by -\@IEEEtrantmpdimenB\relax
1419 \advance\topmargin by \@IEEEtrantmpdimenA\relax
1421 \if\@IEEEextractedtoken c\relax
1422 \topmargin\paperheight
1423 \advance\topmargin by -\textheight
1424 % \textheight includes \topskip, but we should not count topskip whitespace here, backout
1425 \advance \topmargin by \topskip
1426 \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax
1427 \advance\topmargin by -\@IEEEtrantmpdimenB\relax
1428 \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax
1429 \advance\topmargin by -\@IEEEtrantmpdimenB\relax
1430 \divide\topmargin by 2\relax
1431 \advance\topmargin by \@IEEEtrantmpdimenA\relax
1433 \if\@IEEEextractedtoken b\relax
1434 \topmargin\paperheight
1435 \advance\topmargin by -\textheight
1436 % \textheight includes \topskip, but we should not count topskip whitespace here, backout
1437 \advance \topmargin by \topskip
1438 \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax
1439 \advance\topmargin by -\@IEEEtrantmpdimenB\relax
1440 \advance\topmargin by -\@IEEEtrantmpdimenA\relax
1442 \if\@IEEEextractedtoken t\relax
1444 \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak
1446 {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax
1448 \topmargin\@IEEEtrantmpdimenA\relax
1449 \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax
1450 \advance\topmargin by \@IEEEtrantmpdimenB\relax
1452 % convert desired top margin into actual \topmargin
1453 % this is not done for the q or a modes because they are only adjustments
1454 \advance \topmargin by -\topskip
1455 \advance \topmargin by -1in
1456 \advance \topmargin by -\headheight
1457 \advance \topmargin by -\headsep
1463 % usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset}
1464 % Differentially adjusts \topmargin and \headsep (such that their sum is unchanged)
1465 % based on the specified header margin.
1466 % Takes into consideration the base 1in offset, \headheight, \topskip, and (by default)
1467 % the actual height (or depth) of the \IEEEdefaultheadersampletext and
1468 % \IEEEdefaultsampletext text.
1469 % The available modes are:
1470 % t = top margin (top of the header text to the top of the page)
1471 % b = bottom margin (bottom of the header text to the top of the main text)
1472 % c = vertically centered between the main text and the top of the page,
1473 % with the given offset
1474 % a = adjust the vertical position using the given offset
1475 % For the offsets, positive values move the header downward.
1476 % \headheight, \headsep, \topskip and \topmargin should be set properly before
1477 % calling this function.
1478 \def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}}
1479 \def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}}
1480 \def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax
1481 \@IEEEextracttoken{#3}\relax
1482 % check for mode errors
1483 \ifx\@IEEEextractedtokenmacro\@empty
1484 \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak
1485 Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax
1486 \let\@IEEEextractedtoken=t\relax
1487 \def\@IEEEextractedtokenmacro{t}\relax
1489 \ifx\@IEEEextractedtokensdiscarded\@empty\else
1490 \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
1494 \if\@IEEEextractedtoken a\relax
1495 % No need to do anything here and can pass through the adjustment
1496 % value as is. The end adjustment of \topmargin and \headsep will
1497 % do all that is needed
1499 \if\@IEEEextractedtoken c\relax
1500 % get the bottom margin
1501 \@IEEEtrantmpdimenB\headsep\relax
1502 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1503 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1504 \advance\@IEEEtrantmpdimenB by \topskip
1505 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax
1506 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1507 % at this point \@IEEEtrantmpdimenB has the actual header bottom margin
1508 % subtract from it the top header margin
1509 \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin
1510 \advance\@IEEEtrantmpdimenB by -\topmargin
1511 \advance\@IEEEtrantmpdimenB by -\headheight
1512 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1513 \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC
1514 % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins
1515 % we need to adjust by half this amount to center the header
1516 \divide\@IEEEtrantmpdimenB by 2\relax
1518 \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB
1520 \if\@IEEEextractedtoken b\relax
1521 \@IEEEtrantmpdimenB\headsep\relax
1522 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1523 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1524 \advance\@IEEEtrantmpdimenB by \topskip
1525 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax
1526 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1527 % at this point \@IEEEtrantmpdimenB has the actual header bottom margin
1528 % get the difference between the actual and the desired
1529 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA
1530 \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB
1532 \if\@IEEEextractedtoken t\relax
1534 \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak
1536 {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax
1538 \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin
1539 \advance\@IEEEtrantmpdimenB by \topmargin
1540 \advance\@IEEEtrantmpdimenB by \headheight
1541 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1542 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1543 % at this point \@IEEEtrantmpdimenB has the actual header top margin
1544 % get the difference between the desired and the actual
1545 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB
1548 % advance \topmargin by the needed amount and reduce \headsep by the same
1549 % so as not to disturb the location of the main text
1550 \advance\topmargin by \@IEEEtrantmpdimenA\relax
1551 \advance\headsep by -\@IEEEtrantmpdimenA\relax
1556 % usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset}
1557 % Adjusts \footskip based on the specified footer margin.
1558 % Takes into consideration the base 1in offset, \paperheight, \headheight,
1559 % \headsep, \textheight and (by default) the actual height (or depth) of the
1560 % \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text.
1561 % The available modes are:
1562 % t = top margin (top of the footer text to the bottom of the main text)
1563 % b = bottom margin (bottom of the footer text to the bottom of page)
1564 % c = vertically centered between the main text and the bottom of the page,
1565 % with the given offset
1566 % a = adjust the vertical position using the given offset
1567 % For the offsets, positive values move the footer downward.
1568 % \headheight, \headsep, \topskip, \topmargin, and \textheight should be set
1569 % properly before calling this function.
1570 \def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}}
1571 \def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}}
1572 \def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax
1573 \@IEEEextracttoken{#3}\relax
1574 % check for mode errors
1575 \ifx\@IEEEextractedtokenmacro\@empty
1576 \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak
1577 Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax
1578 \let\@IEEEextractedtoken=t\relax
1579 \def\@IEEEextractedtokenmacro{t}\relax
1581 \ifx\@IEEEextractedtokensdiscarded\@empty\else
1582 \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
1586 \if\@IEEEextractedtoken a\relax
1587 % No need to do anything here and can pass through the adjustment
1588 % value as is. The end adjustment of \footskip will do all that
1591 \if\@IEEEextractedtoken c\relax
1592 % calculate the bottom margin
1593 \@IEEEtrantmpdimenB 1in\relax % system 1in offset
1594 \advance\@IEEEtrantmpdimenB\topmargin\relax
1595 \advance\@IEEEtrantmpdimenB\headheight\relax
1596 \advance\@IEEEtrantmpdimenB\headsep\relax
1597 \advance\@IEEEtrantmpdimenB\textheight\relax
1598 \advance\@IEEEtrantmpdimenB\footskip\relax
1599 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1600 \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB
1601 \@IEEEtrantmpdimenB\paperheight
1602 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1603 % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin
1604 % now subtract off the footer top margin
1605 \advance\@IEEEtrantmpdimenB -\footskip\relax
1606 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax
1607 \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC
1608 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1609 \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC
1610 % at this point \@IEEEtrantmpdimenB has the difference between the bottom
1611 % and top footer margins
1612 % our adjustment must be half this value to center the footer
1613 \divide\@IEEEtrantmpdimenB by 2\relax
1615 \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB
1617 \if\@IEEEextractedtoken b\relax
1618 % calculate the bottom margin
1619 \@IEEEtrantmpdimenB 1in\relax % system 1in offset
1620 \advance\@IEEEtrantmpdimenB\topmargin\relax
1621 \advance\@IEEEtrantmpdimenB\headheight\relax
1622 \advance\@IEEEtrantmpdimenB\headsep\relax
1623 \advance\@IEEEtrantmpdimenB\textheight\relax
1624 \advance\@IEEEtrantmpdimenB\footskip\relax
1625 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1626 \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB
1627 \@IEEEtrantmpdimenB\paperheight
1628 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1629 % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin
1630 % get the difference between the actual and the desired
1631 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA
1632 \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB
1634 \if\@IEEEextractedtoken t\relax
1636 \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak
1638 {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax
1640 \@IEEEtrantmpdimenB\footskip\relax
1641 \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax
1642 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1643 \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax
1644 \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC
1645 % at this point \@IEEEtrantmpdimenB has the actual footer top margin
1646 % get the difference between the desired and the actual
1647 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB
1650 % advance \footskip by the needed amount
1651 \advance\footskip by \@IEEEtrantmpdimenA\relax
1654 % -- End V1.8a page setup commands --
1661 % LaTeX is a little to quick to use hyphenations
1662 % So, we increase the penalty for their use and raise
1663 % the badness level that triggers an underfull hbox
1664 % warning. The author may still have to tweak things,
1665 % but the appearance will be much better "right out
1666 % of the box" than that under V1.5 and prior.
1669 \ifCLASSOPTIONcompsoc
1672 % If we didn't adjust the interword spacing, 2200 might be better.
1673 % The TeX default is 1000
1675 % The IEEE does not use extra spacing after punctuation
1678 % V1.7 increase this a tad to discourage equation breaks
1679 \binoppenalty=1000 % default 700
1680 \relpenalty=800 % default 500
1682 % v1.8a increase these to discourage widows and orphans
1683 \clubpenalty=1000 % default 150
1684 \widowpenalty=1000 % default 150
1685 \displaywidowpenalty=1000 % default 50
1690 \marginparwidth 20pt
1694 % if things get too close, go ahead and let them touch
1698 \normallineskiplimit 0pt
1700 % The distance from the lower edge of the text body to the
1704 % normally zero, should be relative to font height.
1705 % put in a little rubber to help stop some bad breaks (underfull vboxes)
1706 \parskip 0ex plus 0.2ex minus 0.1ex
1709 \ifCLASSOPTIONcompsoc
1715 % use the normal font baselineskip
1716 % so that \topskip is unaffected by changes in \baselinestretch
1717 \topskip=\@IEEEnormalsizeunitybaselineskip
1720 % V1.8 \maxdepth defaults to 4pt, but should be font size dependent
1721 \maxdepth=0.5\@IEEEnormalsizeunitybaselineskip
1722 \textheight 58pc % 9.63in, 696pt
1724 % set the default top margin to 58pt
1725 % which results in a \topmargin of -49.59pt for 10pt documents
1726 \IEEEsettopmargin{t}{58pt}
1727 % tweak textheight to a perfect integer number of lines/column.
1728 % standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc
1729 \IEEEquantizetextheight{c}
1730 % tweak top margin so that the error is shared equally at the top and bottom
1731 \IEEEsettopmargin{q}{0sp}
1735 \textwidth 43pc % 2 x 21pc + 1pc = 43pc
1737 % set the default side margins to center the text
1738 \IEEEsetsidemargin{c}{0pt}
1741 % adjust margins for default conference mode
1742 \ifCLASSOPTIONconference
1743 \textheight 9.25in % The standard for conferences (668.4975pt)
1744 \IEEEsettopmargin{t}{0.75in}
1745 % tweak textheight to a perfect integer number of lines/page.
1746 % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc
1747 \IEEEquantizetextheight{c}
1748 % tweak top margin so that the error is shared equally at the top and bottom
1749 \IEEEsettopmargin{q}{0sp}
1753 % compsoc text sizes, margins and spacings
1754 \ifCLASSOPTIONcompsoc
1756 % CS specs for \textwdith are 6.875in
1757 % \textwidth 6.875in
1758 % however, measurements from proofs show they are using 3.5in columns
1760 \advance\textwidth by \columnsep
1761 % set the side margins to center the text
1762 \IEEEsetsidemargin{c}{0pt}
1763 % top/bottom margins to center
1764 % could just set \textheight to 9.75in for all the different paper sizes
1765 % and then quantize, but we'll do it the long way here to allow for easy
1766 % future per-paper size adjustments
1767 \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals
1768 \IEEEsettopmargin{t}{0.625in}
1769 \if@IEEEusingcspaper
1770 \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in
1771 \IEEEsettopmargin{t}{0.5in}
1773 \if@IEEEusingAfourpaper
1774 \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in)
1775 \IEEEsettopmargin{t}{24.675mm}
1777 % tweak textheight to a perfect integer number of lines/page.
1778 % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc
1779 \IEEEquantizetextheight{c}
1780 % tweak top margin so that the error is shared equally at the top and bottom
1781 \IEEEsettopmargin{q}{0sp}
1783 % compsoc conference
1784 \ifCLASSOPTIONconference
1785 % compsoc conference use a larger value for columnsep
1787 \IEEEsettextwidth{0.75in}{0.75in}
1788 % set the side margins to center the text (0.75in for letterpaper)
1789 \IEEEsetsidemargin{c}{0pt}
1790 % compsoc conferences want 1in top and bottom margin
1791 \IEEEsettextheight{1in}{1in}
1792 \IEEEsettopmargin{t}{1in}
1793 % tweak textheight to a perfect integer number of lines/page.
1794 % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc
1795 \IEEEquantizetextheight{c}
1796 % tweak top margin so that the error is shared equally at the top and bottom
1797 \IEEEsettopmargin{q}{0sp}
1803 % draft mode settings override that of all other modes
1804 % provides a nice 1in margin all around the paper and extra
1805 % space between the lines for editor's comments
1806 \ifCLASSOPTIONdraftcls
1807 % we want 1in side margins regardless of paper type
1808 \IEEEsettextwidth{1in}{1in}
1809 \IEEEsetsidemargin{c}{0pt}
1810 % want 1in top and bottom margins
1811 \IEEEsettextheight{1in}{1in}
1812 \IEEEsettopmargin{t}{1in}
1813 % digitize textheight to be an integer number of lines.
1814 % this may cause the top and bottom margins to be off a tad
1815 \IEEEquantizetextheight{c}
1816 % tweak top margin so that the error is shared equally at the top and bottom
1817 \IEEEsettopmargin{q}{0sp}
1822 % process CLASSINPUT inner/outer margin
1823 % if inner margin defined, but outer margin not, set outer to inner.
1824 \ifx\CLASSINPUTinnersidemargin\@IEEEundefined
1826 \ifx\CLASSINPUToutersidemargin\@IEEEundefined
1827 \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin}
1831 \ifx\CLASSINPUToutersidemargin\@IEEEundefined
1833 % if outer margin defined, but inner margin not, set inner to outer.
1834 \ifx\CLASSINPUTinnersidemargin\@IEEEundefined
1835 \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin}
1837 \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin}
1838 \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin}
1839 \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and
1840 outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.}
1845 % process CLASSINPUT top/bottom text margin
1846 % if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin
1847 \ifx\CLASSINPUTtoptextmargin\@IEEEundefined
1849 \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined
1850 \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin}
1854 \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined
1856 % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin
1857 \ifx\CLASSINPUTtoptextmargin\@IEEEundefined
1858 \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin}
1860 \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin}
1861 \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin}
1862 \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and
1863 bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.}
1868 % default to center header and footer text in the margins
1869 \IEEEsetheadermargin{c}{0pt}
1870 \IEEEsetfootermargin{c}{0pt}
1872 % adjust header and footer positions for compsoc journals
1873 \ifCLASSOPTIONcompsoc
1874 \ifCLASSOPTIONjournal
1875 \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip}
1876 \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip}
1881 % V1.8a display lines per column info message on user's console
1882 \def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight
1883 % topskip represents only one line even if > baselineskip
1884 \advance\@IEEEtrantmpdimenA by -1\topskip
1885 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenA
1886 \@IEEEtrantmpcountB=\@IEEEtrantmpdimenA
1887 \divide\@IEEEtrantmpcountB by \baselineskip
1888 % need to add one line to include topskip (first) line
1889 \advance\@IEEEtrantmpcountB by 1
1890 % save lines per column value as text
1891 \edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB}
1892 % backout topskip advance to allow direct \@IEEEtrantmpcountA comparison
1893 \advance\@IEEEtrantmpcountB by -1
1894 % restore value as text height (without topskip) rather than just as number of lines
1895 \multiply\@IEEEtrantmpcountB by \baselineskip
1896 % is the column height an integer number of lines per column?
1897 \ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB
1898 \edef\@IEEEnumlinespercolumnexactinfotxt{exact}
1900 \@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax
1901 \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax
1902 \edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA}
1904 \typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}}
1905 % delay execution till start of document to allow for user changes
1906 \AtBeginDocument{\IEEEdisplayinfolinespercolumn}
1910 % LIST SPACING CONTROLS
1912 % Controls the amount of EXTRA spacing
1913 % above and below \trivlist
1914 % Both \list and IED lists override this.
1915 % However, \trivlist will use this as will most
1916 % things built from \trivlist like the \center
1918 \topsep 0.5\baselineskip
1920 % Controls the additional spacing around lists preceded
1921 % or followed by blank lines. the IEEE does not increase
1922 % spacing before or after paragraphs so it is set to zero.
1923 % \z@ is the same as zero, but faster.
1926 % Controls the spacing between paragraphs in lists.
1927 % The IEEE does not increase spacing before or after paragraphs
1928 % so this is also zero.
1929 % With IEEEtran.cls, global changes to
1930 % this value DO affect lists (but not IED lists).
1933 % Controls the extra spacing between list items.
1934 % The IEEE does not put extra spacing between items.
1935 % With IEEEtran.cls, global changes to this value DO affect
1936 % lists (but not IED lists).
1939 % \itemindent is the amount to indent the FIRST line of a list
1940 % item. It is auto set to zero within the \list environment. To alter
1941 % it, you have to do so when you call the \list.
1942 % However, the IEEE uses this for the theorem environment
1943 % There is an alternative value for this near \leftmargini below
1946 % \leftmargin, the spacing from the left margin of the main text to
1947 % the left of the main body of a list item is set by \list.
1948 % Hence this statement does nothing for lists.
1949 % But, quote and verse do use it for indention.
1952 % we retain this stuff from the older IEEEtran.cls so that \list
1953 % will work the same way as before. However, itemize, enumerate and
1954 % description (IED) could care less about what these are as they
1955 % all are overridden.
1957 %\itemindent 2em % Alternative values: sometimes used.
1960 \leftmarginiii 1.5em
1968 % The old IEEEtran.cls behavior of \list is retained.
1969 % However, the new V1.3 IED list environments override all the
1970 % @list stuff (\@listX is called within \list for the
1971 % appropriate level just before the user's list_decl is called).
1972 % \topsep is now 2pt as the IEEE puts a little extra space around
1973 % lists - used by those non-IED macros that depend on \list.
1974 % Note that \parsep and \itemsep are not redefined as in
1975 % the sizexx.clo \@listX (which article.cls uses) so global changes
1976 % of these values DO affect \list
1978 \def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt}
1980 \def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii%
1981 \advance\labelwidth-\labelsep \topsep 2pt}
1982 \def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii%
1983 \advance\labelwidth-\labelsep \topsep 2pt}
1984 \def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv%
1985 \advance\labelwidth-\labelsep \topsep 2pt}
1986 \def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv%
1987 \advance\labelwidth-\labelsep \topsep 2pt}
1988 \def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi%
1989 \advance\labelwidth-\labelsep \topsep 2pt}
1992 % The IEEE uses 5) not 5.
1993 \def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}}
1995 % The IEEE uses a) not (a)
1996 \def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}}
1998 % The IEEE uses iii) not iii.
1999 \def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}}
2001 % The IEEE uses A) not A.
2002 \def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}}
2004 % exactly the same as in article.cls
2005 \def\p@enumii{\theenumi}
2006 \def\p@enumiii{\theenumi(\theenumii)}
2007 \def\p@enumiv{\p@enumiii\theenumiii}
2009 % itemized list label styles
2010 \def\labelitemi{$\scriptstyle\bullet$}
2011 \def\labelitemii{\textbf{--}}
2012 \def\labelitemiii{$\ast$}
2013 \def\labelitemiv{$\cdot$}
2017 % **** V1.3 ENHANCEMENTS ****
2018 % Itemize, Enumerate and Description (IED) List Controls
2019 % ***************************
2022 % The IEEE seems to use at least two different values by
2023 % which ITEMIZED list labels are indented to the right
2024 % For The Journal of Lightwave Technology (JLT) and The Journal
2025 % on Selected Areas in Communications (JSAC), they tend to use
2026 % an indention equal to \parindent. For Transactions on Communications
2027 % they tend to indent ITEMIZED lists a little more--- 1.3\parindent.
2028 % We'll provide both values here for you so that you can choose
2029 % which one you like in your document using a command such as:
2030 % setlength{\IEEEilabelindent}{\IEEEilabelindentB}
2031 \newdimen\IEEEilabelindentA
2032 \IEEEilabelindentA \parindent
2034 \newdimen\IEEEilabelindentB
2035 \IEEEilabelindentB 1.3\parindent
2036 % However, we'll default to using \parindent
2037 % which makes more sense to me
2038 \newdimen\IEEEilabelindent
2039 \IEEEilabelindent \IEEEilabelindentA
2042 % This controls the default amount the enumerated list labels
2043 % are indented to the right.
2044 % Normally, this is the same as the paragraph indention
2045 \newdimen\IEEEelabelindent
2046 \IEEEelabelindent \parindent
2048 % This controls the default amount the description list labels
2049 % are indented to the right.
2050 % Normally, this is the same as the paragraph indention
2051 \newdimen\IEEEdlabelindent
2052 \IEEEdlabelindent \parindent
2054 % This is the value actually used within the IED lists.
2055 % The IED environments automatically set its value to
2056 % one of the three values above, so global changes do
2057 % not have any effect
2058 \newdimen\IEEElabelindent
2059 \IEEElabelindent \parindent
2061 % The actual amount labels will be indented is
2062 % \IEEElabelindent multiplied by the factor below
2063 % corresponding to the level of nesting depth
2064 % This provides a means by which the user can
2065 % alter the effective \IEEElabelindent for deeper
2067 % There may not be such a thing as correct "standard IEEE"
2068 % values. What the IEEE actually does may depend on the specific
2070 % The first list level almost always has full indention.
2071 % The second levels I've seen have only 75% of the normal indentation
2072 % Three level or greater nestings are very rare. I am guessing
2073 % that they don't use any indentation.
2074 \def\IEEElabelindentfactori{1.0} % almost always one
2075 \def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases
2076 \def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0?
2077 \def\IEEElabelindentfactoriv{0.0}
2078 \def\IEEElabelindentfactorv{0.0}
2079 \def\IEEElabelindentfactorvi{0.0}
2081 % value actually used within IED lists, it is auto
2082 % set to one of the 6 values above
2083 % global changes here have no effect
2084 \def\IEEElabelindentfactor{1.0}
2086 % This controls the default spacing between the end of the IED
2087 % list labels and the list text, when normal text is used for
2089 % compsoc uses a larger value here, but we'll set that later
2090 % in the class so that this code block area can be extracted
2091 % as-is for IEEEtrantools.sty
2092 \newdimen\IEEEiednormlabelsep
2093 \IEEEiednormlabelsep 0.6em
2095 % This controls the default spacing between the end of the IED
2096 % list labels and the list text, when math symbols are used for
2097 % the labels (nomenclature lists). The IEEE usually increases the
2098 % spacing in these cases
2099 \newdimen\IEEEiedmathlabelsep
2100 \IEEEiedmathlabelsep 1.2em
2102 % This controls the extra vertical separation put above and
2103 % below each IED list. the IEEE usually puts a little extra spacing
2104 % around each list. However, this spacing is barely noticeable.
2105 % compsoc uses a larger value here, but we'll set that later
2106 % in the class so that this code block area can be extracted
2107 % as-is for IEEEtrantools.sty
2108 \newskip\IEEEiedtopsep
2109 \IEEEiedtopsep 2pt plus 1pt minus 1pt
2112 % This command is executed within each IED list environment
2113 % at the beginning of the list. You can use this to set the
2114 % parameters for some/all your IED list(s) without disturbing
2115 % global parameters that affect things other than lists.
2116 % i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}}
2117 % will alter the \labelsep for the next list(s) until
2118 % \IEEEiedlistdecl is redefined.
2119 \def\IEEEiedlistdecl{\relax}
2121 % This command provides an easy way to set \leftmargin based
2122 % on the \labelwidth, \labelsep and the argument \IEEElabelindent
2123 % Usage: \IEEEcalcleftmargin{width-to-indent-the-label}
2124 % output is in the \leftmargin variable, i.e., effectively:
2125 % \leftmargin = argument + \labelwidth + \labelsep
2126 % Note controlled spacing here, shield end of lines with %
2127 \def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}%
2128 \addtolength{\leftmargin}{\labelwidth}%
2129 \addtolength{\leftmargin}{\labelsep}}
2131 % This command provides an easy way to set \labelwidth to the
2132 % width of the given text. It is the same as
2133 % \settowidth{\labelwidth}{label-text}
2134 % and useful as a shorter alternative.
2135 % Typically used to set \labelwidth to be the width
2136 % of the longest label in the list
2137 \def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}}
2139 % When this command is executed, IED lists will use the
2140 % IEEEiedmathlabelsep label separation rather than the normal
2141 % spacing. To have an effect, this command must be executed via
2142 % the \IEEEiedlistdecl or within the option of the IED list
2144 \def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}}
2146 % A flag which controls whether the IED lists automatically
2147 % calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep
2148 % Useful if you want to specify your own \leftmargin
2149 % This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse)
2150 % via the \IEEEiedlistdecl or within the option of the IED list
2151 % environments to have an effect.
2152 \newif\ifIEEEnocalcleftmargin
2153 \IEEEnocalcleftmarginfalse
2155 % A flag which controls whether \IEEElabelindent is multiplied by
2156 % the \IEEElabelindentfactor for each list level.
2157 % This flag must be set via the \IEEEiedlistdecl or within the option
2158 % of the IED list environments to have an effect.
2159 \newif\ifIEEEnolabelindentfactor
2160 \IEEEnolabelindentfactorfalse
2163 % internal variable to indicate type of IED label
2165 % 0 - left; 1 - center; 2 - right
2166 \def\@IEEEiedjustify{0}
2169 % commands to allow the user to control IED
2170 % label justifications. Use these commands within
2171 % the IED environment option or in the \IEEEiedlistdecl
2172 % Note that changing the normal list justifications
2173 % is nonstandard and the IEEE may not like it if you do so!
2174 % I include these commands as they may be helpful to
2175 % those who are using these enhanced list controls for
2176 % other non-IEEE related LaTeX work.
2177 % itemize and enumerate automatically default to right
2178 % justification, description defaults to left.
2179 \def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left
2180 \def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center
2181 \def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right
2186 % commands to save to and restore from the list parameter copies
2187 % this allows us to set all the list parameters within
2188 % the list_decl and prevent \list (and its \@list)
2189 % from overriding any of our parameters
2190 % V1.6 use \edefs instead of dimen's to conserve dimen registers
2191 % Note controlled spacing here, shield end of lines with %
2192 \def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}%
2193 \edef\@IEEEiedlabelwidth{\the\labelwidth}%
2194 \edef\@IEEEiedlabelsep{\the\labelsep}%
2195 \edef\@IEEEiedleftmargin{\the\leftmargin}%
2196 \edef\@IEEEiedpartopsep{\the\partopsep}%
2197 \edef\@IEEEiedparsep{\the\parsep}%
2198 \edef\@IEEEieditemsep{\the\itemsep}%
2199 \edef\@IEEEiedrightmargin{\the\rightmargin}%
2200 \edef\@IEEEiedlistparindent{\the\listparindent}%
2201 \edef\@IEEEieditemindent{\the\itemindent}}
2203 % Note controlled spacing here
2204 \def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax%
2205 \labelwidth\@IEEEiedlabelwidth\relax%
2206 \labelsep\@IEEEiedlabelsep\relax%
2207 \leftmargin\@IEEEiedleftmargin\relax%
2208 \partopsep\@IEEEiedpartopsep\relax%
2209 \parsep\@IEEEiedparsep\relax%
2210 \itemsep\@IEEEieditemsep\relax%
2211 \rightmargin\@IEEEiedrightmargin\relax%
2212 \listparindent\@IEEEiedlistparindent\relax%
2213 \itemindent\@IEEEieditemindent\relax}
2216 % v1.6b provide original LaTeX IED list environments
2217 % note that latex.ltx defines \itemize and \enumerate, but not \description
2218 % which must be created by the base classes
2219 % save original LaTeX itemize and enumerate
2220 \let\LaTeXitemize\itemize
2221 \let\endLaTeXitemize\enditemize
2222 \let\LaTeXenumerate\enumerate
2223 \let\endLaTeXenumerate\endenumerate
2225 % provide original LaTeX description environment from article.cls
2226 \newenvironment{LaTeXdescription}
2227 {\list{}{\labelwidth\z@ \itemindent-\leftmargin
2228 \let\makelabel\descriptionlabel}}
2230 \newcommand*\descriptionlabel[1]{\hspace\labelsep
2231 \normalfont\bfseries #1}
2234 % override LaTeX's default IED lists
2235 \def\itemize{\@IEEEitemize}
2236 \def\enditemize{\@endIEEEitemize}
2237 \def\enumerate{\@IEEEenumerate}
2238 \def\endenumerate{\@endIEEEenumerate}
2239 \def\description{\@IEEEdescription}
2240 \def\enddescription{\@endIEEEdescription}
2242 % provide the user with aliases - may help those using packages that
2243 % override itemize, enumerate, or description
2244 \def\IEEEitemize{\@IEEEitemize}
2245 \def\endIEEEitemize{\@endIEEEitemize}
2246 \def\IEEEenumerate{\@IEEEenumerate}
2247 \def\endIEEEenumerate{\@endIEEEenumerate}
2248 \def\IEEEdescription{\@IEEEdescription}
2249 \def\endIEEEdescription{\@endIEEEdescription}
2252 % V1.6 we want to keep the IEEEtran IED list definitions as our own internal
2253 % commands so they are protected against redefinition
2254 \def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}}
2255 \def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}}
2256 \def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}}
2257 \def\@endIEEEitemize{\endlist}
2258 \def\@endIEEEenumerate{\endlist}
2259 \def\@endIEEEdescription{\endlist}
2262 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
2263 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
2264 % IEEEtran itemized list MDS 1/2001
2265 % Note controlled spacing here, shield end of lines with %
2266 \def\@@IEEEitemize[#1]{%
2267 \ifnum\@itemdepth>3\relax\@toodeep\else%
2268 \ifnum\@listdepth>5\relax\@toodeep\else%
2269 \advance\@itemdepth\@ne%
2270 \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
2271 % get the IEEElabelindentfactor for this level
2272 \advance\@listdepth\@ne% we need to know what the level WILL be
2273 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
2274 \advance\@listdepth-\@ne% undo our increment
2275 \def\@IEEEiedjustify{2}% right justified labels are default
2276 % set other defaults
2277 \IEEEnocalcleftmarginfalse%
2278 \IEEEnolabelindentfactorfalse%
2279 \topsep\IEEEiedtopsep%
2280 \IEEElabelindent\IEEEilabelindent%
2281 \labelsep\IEEEiednormlabelsep%
2288 % calculate the label width
2289 % the user can override this later if
2290 % they specified a \labelwidth
2291 \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}%
2292 \@IEEEsavelistparams% save our list parameters
2293 \list{\csname\@itemitem\endcsname}{%
2294 \@IEEErestorelistparams% override any list{} changes
2296 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
2297 \IEEEiedlistdecl% let user alter parameters
2299 % If the user has requested not to use the
2300 % IEEElabelindent factor, don't revise \IEEElabelindent
2301 \ifIEEEnolabelindentfactor\relax%
2302 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent%
2304 % Unless the user has requested otherwise,
2305 % calculate our left margin based
2306 % on \IEEElabelindent, \labelwidth and
2308 \ifIEEEnocalcleftmargin\relax%
2309 \else\IEEEcalcleftmargin{\IEEElabelindent}%
2313 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
2314 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
2315 % IEEEtran enumerate list MDS 1/2001
2316 % Note controlled spacing here, shield end of lines with %
2317 \def\@@IEEEenumerate[#1]{%
2318 \ifnum\@enumdepth>3\relax\@toodeep\else%
2319 \ifnum\@listdepth>5\relax\@toodeep\else%
2320 \advance\@enumdepth\@ne%
2321 \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
2322 % get the IEEElabelindentfactor for this level
2323 \advance\@listdepth\@ne% we need to know what the level WILL be
2324 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
2325 \advance\@listdepth-\@ne% undo our increment
2326 \def\@IEEEiedjustify{2}% right justified labels are default
2327 % set other defaults
2328 \IEEEnocalcleftmarginfalse%
2329 \IEEEnolabelindentfactorfalse%
2330 \topsep\IEEEiedtopsep%
2331 \IEEElabelindent\IEEEelabelindent%
2332 \labelsep\IEEEiednormlabelsep%
2339 % calculate the label width
2340 % We'll set it to the width suitable for all labels using
2341 % normalfont 1) to 9)
2342 % The user can override this later
2343 \settowidth{\labelwidth}{9)}%
2344 \@IEEEsavelistparams% save our list parameters
2345 \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}%
2346 \@IEEErestorelistparams% override any list{} changes
2348 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
2349 \IEEEiedlistdecl% let user alter parameters
2351 % If the user has requested not to use the
2352 % IEEElabelindent factor, don't revise \IEEElabelindent
2353 \ifIEEEnolabelindentfactor\relax%
2354 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent%
2356 % Unless the user has requested otherwise,
2357 % calculate our left margin based
2358 % on \IEEElabelindent, \labelwidth and
2360 \ifIEEEnocalcleftmargin\relax%
2361 \else\IEEEcalcleftmargin{\IEEElabelindent}%
2365 % DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS
2366 % AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS
2367 % IEEEtran description list MDS 1/2001
2368 % Note controlled spacing here, shield end of lines with %
2369 \def\@@IEEEdescription[#1]{%
2370 \ifnum\@listdepth>5\relax\@toodeep\else%
2371 % get the IEEElabelindentfactor for this level
2372 \advance\@listdepth\@ne% we need to know what the level WILL be
2373 \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}%
2374 \advance\@listdepth-\@ne% undo our increment
2375 \def\@IEEEiedjustify{0}% left justified labels are default
2376 % set other defaults
2377 \IEEEnocalcleftmarginfalse%
2378 \IEEEnolabelindentfactorfalse%
2379 \topsep\IEEEiedtopsep%
2380 \IEEElabelindent\IEEEdlabelindent%
2381 % assume normal labelsep
2382 \labelsep\IEEEiednormlabelsep%
2389 % Bogus label width in case the user forgets
2391 % TIP: If you want to see what a variable's width is you
2392 % can use the TeX command \showthe\width-variable to
2393 % display it on the screen during compilation
2394 % (This might be helpful to know when you need to find out
2395 % which label is the widest)
2396 \settowidth{\labelwidth}{Hello}%
2397 \@IEEEsavelistparams% save our list parameters
2398 \list{}{\@IEEErestorelistparams% override any list{} changes
2400 \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel
2401 \IEEEiedlistdecl% let user alter parameters
2403 % If the user has requested not to use the
2404 % labelindent factor, don't revise \IEEElabelindent
2405 \ifIEEEnolabelindentfactor\relax%
2406 \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent%
2408 % Unless the user has requested otherwise,
2409 % calculate our left margin based
2410 % on \IEEElabelindent, \labelwidth and
2412 \ifIEEEnocalcleftmargin\relax%
2413 \else\IEEEcalcleftmargin{\IEEElabelindent}\relax%
2416 % v1.6b we use one makelabel that does justification as needed.
2417 \def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax
2418 \makebox[\labelwidth][l]{\normalfont #1}\else
2419 \if\@IEEEiedjustify 1\relax
2420 \makebox[\labelwidth][c]{\normalfont #1}\else
2421 \makebox[\labelwidth][r]{\normalfont #1}\fi\fi}
2424 % compsoc uses a larger value for the normal labelsep
2425 % and also extra spacing above and below each list
2426 \ifCLASSOPTIONcompsoc
2427 \IEEEiednormlabelsep 1.2em
2428 \IEEEiedtopsep 6pt plus 3pt minus 3pt
2433 % V1.7 define environments with newenvironment
2434 \newenvironment{verse}{\let\\=\@centercr
2435 \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent
2436 \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax}
2438 \newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent
2439 \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax}
2441 \newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax}
2446 % provided only for backward compatibility. \maketitle is the correct
2447 % way to create the title page.
2448 \def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn
2449 \else \newpage \fi \thispagestyle{empty}\c@page\z@}
2450 \def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi}
2452 % standard values from article.cls
2454 \arrayrulewidth .4pt
2463 %\skip\footins 10pt plus 4pt minus 2pt
2464 % V1.6 respond to changes in font size
2465 % space added above the footnotes (if present)
2466 \skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip
2468 % V1.6, we need to make \footnotesep responsive to changes
2469 % in \baselineskip or strange spacings will result when in
2470 % draft mode. Here is a little LaTeX secret - \footnotesep
2471 % determines the height of an invisible strut that is placed
2472 % *above* the baseline of footnotes after the first. Since
2473 % LaTeX considers the space for characters to be 0.7\baselineskip
2474 % above the baseline and 0.3\baselineskip below it, we need to
2475 % use 0.7\baselineskip as a \footnotesep to maintain equal spacing
2476 % between all the lines of the footnotes. The IEEE often uses a tad
2477 % more, so use 0.8\baselineskip. This slightly larger value also helps
2478 % the text to clear the footnote marks. Note that \thanks in IEEEtran
2479 % uses its own value of \footnotesep which is set in \maketitle.
2481 \global\footnotesep 0.8\baselineskip}
2484 \skip\@mpfootins = \skip\footins
2487 % V1.6 use 1em, then use LaTeX2e's \@makefnmark
2488 % Note that the IEEE normally *left* aligns the footnote marks, so we don't need
2489 % box resizing tricks here.
2490 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em
2491 % V1.7 compsoc does not use superscipts for footnote marks
2492 \ifCLASSOPTIONcompsoc
2493 \def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }}
2494 \long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1}
2497 % The IEEE does not use footnote rules
2500 % V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot"
2501 % system to implement this.
2502 \newif\if@IEEEenableoneshotfootnoterule
2503 \@IEEEenableoneshotfootnoterulefalse
2504 \ifCLASSOPTIONcompsoc
2505 \def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule
2507 \hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill}
2509 \global\@IEEEenableoneshotfootnoterulefalse
2515 % V1.6 do not allow LaTeX to break a footnote across multiple pages
2516 \interfootnotelinepenalty=10000
2518 % V1.6 discourage breaks within equations
2519 % Note that amsmath normally sets this to 10000,
2520 % but LaTeX2e normally uses 100.
2521 \interdisplaylinepenalty=2500
2523 % default allows section depth up to /paragraph
2524 \setcounter{secnumdepth}{4}
2526 % technotes do not allow /paragraph
2527 \ifCLASSOPTIONtechnote
2528 \setcounter{secnumdepth}{3}
2530 % neither do compsoc conferences
2531 \@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}}
2534 \newcounter{section}
2535 \newcounter{subsection}[section]
2536 \newcounter{subsubsection}[subsection]
2537 \newcounter{paragraph}[subsubsection]
2539 % used only by IEEEtran's IEEEeqnarray as other packages may
2540 % have their own, different, implementations
2541 \newcounter{IEEEsubequation}[equation]
2543 % as shown when called by user from \ref, \label and in table of contents
2544 \def\theequation{\arabic{equation}} % 1
2545 \def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray)
2546 \ifCLASSOPTIONcompsoc
2547 % compsoc is all arabic
2548 \def\thesection{\arabic{section}}
2549 \def\thesubsection{\thesection.\arabic{subsection}}
2550 \def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
2551 \def\theparagraph{\thesubsubsection.\arabic{paragraph}}
2553 \def\thesection{\Roman{section}} % I
2554 % V1.7, \mbox prevents breaks around -
2555 \def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A
2556 % V1.7 use I-A1 format used by the IEEE rather than I-A.1
2557 \def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1
2558 \def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a
2561 % From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to
2562 % tell hyperref to disable the \mbox command when making PDF bookmarks.
2563 % This done already with hyperref.sty version 6.74o and later, but
2564 % it will not hurt to do it here again for users of older versions.
2565 \@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}%
2566 \g@addto@macro\pdfstringdefPreHook{\let\mbox\relax}
2569 % Main text forms (how shown in main text headings)
2570 % V1.6, using \thesection in \thesectiondis allows changes
2571 % in the former to automatically appear in the latter
2572 \ifCLASSOPTIONcompsoc
2573 \ifCLASSOPTIONconference% compsoc conference
2574 \def\thesectiondis{\thesection.}
2575 \def\thesubsectiondis{\thesectiondis\arabic{subsection}.}
2576 \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.}
2577 \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.}
2578 \else% compsoc not conferencs
2579 \def\thesectiondis{\thesection}
2580 \def\thesubsectiondis{\thesectiondis.\arabic{subsection}}
2581 \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}}
2582 \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}}
2585 \def\thesectiondis{\thesection.} % I.
2586 \def\thesubsectiondis{\Alph{subsection}.} % B.
2587 \def\thesubsubsectiondis{\arabic{subsubsection})} % 3)
2588 \def\theparagraphdis{\alph{paragraph})} % d)
2591 % just like LaTeX2e's \@eqnnum
2592 \def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1)
2593 % IEEEsubequation used only by IEEEtran's IEEEeqnarray
2594 \def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a)
2595 % redirect LaTeX2e's equation number display and all that depend on
2596 % it, through IEEEtran's \theequationdis
2597 \def\@eqnnum{\theequationdis}
2601 % V1.7 provide string macros as article.cls does
2602 \def\contentsname{Contents}
2603 \def\listfigurename{List of Figures}
2604 \def\listtablename{List of Tables}
2605 \def\refname{References}
2606 \def\indexname{Index}
2607 \def\figurename{Fig.}
2608 \def\tablename{TABLE}
2609 \@IEEEcompsocconfonly{\def\figurename{Figure}}
2611 \def\appendixname{Appendix}
2612 \def\abstractname{Abstract}
2613 % IEEE specific names
2614 \def\IEEEkeywordsname{Index Terms}
2615 \def\IEEEproofname{Proof}
2618 % LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS
2620 \def\@pnumwidth{1.55em}
2621 \def\@tocrmarg{2.55em}
2623 \setcounter{tocdepth}{3}
2625 % adjusted some spacings here so that section numbers will not easily
2626 % collide with the section titles.
2627 % VIII; VIII-A; and VIII-A.1 are usually the worst offenders.
2629 \def\tableofcontents{\section*{\contentsname}\@starttoc{toc}}
2630 \def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}%
2631 \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth%
2632 \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par%
2634 % argument format #1:level, #2:labelindent,#3:labelsep
2635 \def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}}
2636 \def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}}
2637 % must provide \l@ defs for ALL sublevels EVEN if tocdepth
2638 % is such as they will not appear in the table of contents
2639 % these defs are how TOC knows what level these things are!
2640 \def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}}
2641 \def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}}
2642 \def\listoffigures{\section*{\listfigurename}\@starttoc{lof}}
2643 \def\l@figure{\@dottedtocline{1}{0em}{2.75em}}
2644 \def\listoftables{\section*{\listtablename}\@starttoc{lot}}
2645 \let\l@table\l@figure
2648 % Definitions for floats
2651 % V1.8 floatsep et al. revised down by 0.15\baselineskip
2652 % to account for the sideeffects of \topskip compensation
2653 \floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip
2654 \textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip
2655 \@fptop 0pt plus 1fil
2656 \@fpsep 0.75\baselineskip plus 2fil
2657 \@fpbot 0pt plus 1fil
2658 \def\topfraction{0.9}
2659 \def\bottomfraction{0.4}
2660 \def\floatpagefraction{0.8}
2661 % V1.7, let top floats approach 90% of page
2662 \def\textfraction{0.1}
2664 % Double Column Floats
2665 \dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip
2667 \dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip
2668 % Note that it would be nice if the rubber here actually worked in LaTeX2e.
2669 % There is a long standing limitation in LaTeX, first discovered (to the best
2670 % of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable
2671 % portion of \dbltextfloatsep, and as a result, double column figures can and
2672 % do result in an non-integer number of lines in the main text columns with
2673 % underfull vbox errors as a consequence. A post to comp.text.tex
2674 % by Donald Arseneau confirms that this had not yet been fixed in 1998.
2675 % IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't
2676 % protect you from other double floats. Happy vspace'ing.
2678 \@dblfptop 0pt plus 1fil
2679 \@dblfpsep 0.75\baselineskip plus 2fil
2680 \@dblfpbot 0pt plus 1fil
2681 \def\dbltopfraction{0.8}
2682 \def\dblfloatpagefraction{0.8}
2683 \setcounter{dbltopnumber}{4}
2685 \intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip
2686 \setcounter{topnumber}{2}
2687 \setcounter{bottomnumber}{2}
2688 \setcounter{totalnumber}{4}
2692 % article class provides these, we should too.
2693 \newlength\abovecaptionskip
2694 \newlength\belowcaptionskip
2695 % but only \abovecaptionskip is used above figure captions and *below* table
2697 \setlength\abovecaptionskip{0.5\baselineskip}
2698 % compsoc journals are a little more generous
2699 \ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal
2700 \setlength\abovecaptionskip{0.75\baselineskip}
2702 \setlength\belowcaptionskip{0pt}
2703 % V1.6 create hooks in case the caption spacing ever needs to be
2704 % overridden by a user
2705 \def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}%
2706 \def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}%
2709 % 1.6b revise caption system so that \@makecaption uses two arguments
2710 % as with LaTeX2e. Otherwise, there will be problems when using hyperref.
2711 \def\@IEEEtablestring{table}
2714 % V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text
2715 % here we calculate a space equal to the amount \topskip exceeds the main text height
2716 % we hook in at \@floatboxreset
2717 \def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax
2718 \setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax
2719 \addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax
2720 \vspace*{\@IEEEtrantmpdimenA}\fi}
2721 % V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline
2722 % use a strut set on the caption baseline within \@makecaption
2723 \def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi}
2724 % the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering
2725 % because top of figure content and top of captions in tables is the first thing on the vertical
2726 % list of these floats
2727 % thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic.
2730 \ifCLASSOPTIONcompsoc
2731 % V1.7 compsoc \@makecaption
2732 \ifCLASSOPTIONconference% compsoc conference
2733 \long\def\@makecaption#1#2{%
2734 % test if is a for a figure or table
2735 \ifx\@captype\@IEEEtablestring%
2736 % if a table, do table caption
2737 \footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup%
2738 \@IEEEtablecaptionsepspace
2739 % if not a table, format it as a figure
2741 \@IEEEfigurecaptionsepspace
2742 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}%
2743 \ifdim \wd\@tempboxa >\hsize%
2744 % if caption is longer than a line, let it wrap around
2745 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}%
2746 \parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}%
2747 % if caption is shorter than a line, center
2749 \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}%
2752 \else% nonconference compsoc
2753 \long\def\@makecaption#1#2{%
2754 % test if is a for a figure or table
2755 \ifx\@captype\@IEEEtablestring%
2756 % if a table, do table caption
2757 \footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup%
2758 \@IEEEtablecaptionsepspace
2759 % if not a table, format it as a figure
2761 \@IEEEfigurecaptionsepspace
2762 \setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}%
2763 \ifdim \wd\@tempboxa >\hsize%
2764 % if caption is longer than a line, let it wrap around
2765 \setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}%
2766 \parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}%
2767 % if caption is shorter than a line, left justify
2769 \hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}%
2773 \else% traditional noncompsoc \@makecaption
2774 \long\def\@makecaption#1#2{%
2775 % test if is a for a figure or table
2776 \ifx\@captype\@IEEEtablestring%
2777 % if a table, do table caption
2778 \footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup%
2779 \@IEEEtablecaptionsepspace
2780 % if not a table, format it as a figure
2782 \@IEEEfigurecaptionsepspace
2783 % 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one
2784 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}%
2785 \ifdim \wd\@tempboxa >\hsize%
2786 % if caption is longer than a line, let it wrap around
2787 \setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}%
2788 \parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}%
2789 % if caption is shorter than a line, center if conference, left justify otherwise
2791 \ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}%
2792 \else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}%
2798 % V1.7 disable captions class option, do so in a way that retains operation of \label
2800 \ifCLASSOPTIONcaptionsoff
2801 \long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup%
2802 \let\@IEEEtemporiglabeldefsave\label
2803 \let\@IEEEtemplabelargsave\relax
2804 \def\label##1{\gdef\@IEEEtemplabelargsave{##1}}%
2805 \setbox\@tempboxa\hbox{#2}%
2806 \let\label\@IEEEtemporiglabeldefsave
2807 \ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi}
2811 % V1.7 define end environments with \def not \let so as to work OK with
2814 \def\thefigure{\@arabic\c@figure}
2815 \def\fps@figure{tbp}
2816 \def\ftype@figure{1}
2817 \def\ext@figure{lof}
2818 \def\fnum@figure{\figurename\nobreakspace\thefigure}
2819 % V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset
2820 \def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}}
2821 \def\endfigure{\end@float}
2822 % V1.8 also add \@IEEEfiguretopskipspace compensation to \figure*
2823 \@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}}
2824 \@namedef{endfigure*}{\end@dblfloat}
2827 \ifCLASSOPTIONcompsoc
2828 \def\thetable{\arabic{table}}
2830 \def\thetable{\@Roman\c@table}
2835 \def\fnum@table{\tablename\nobreakspace\thetable}
2836 % V1.6 The IEEE uses 8pt text for tables
2837 % within tables alter LaTeX2e's \@floatboxreset to use \footnotesize
2838 \def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}}
2839 \def\endtable{\end@float}
2840 % v1.6b double column tables need to default to footnotesize as well.
2841 \@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}}
2842 \@namedef{endtable*}{\end@dblfloat}
2847 %% -- Command Argument Scanning Support Functions --
2850 % usage: \@IEEEstripouterbraces*{}
2851 % \@IEEEstripouterbraces fully expands its argument (which it then stores
2852 % in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing
2853 % braces, and finally stores the result in the macro
2854 % \@IEEEstrippedouterbraces.
2857 % \@IEEEstripouterbraces{{{{ab}c}}}
2860 % \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}}
2861 % \@IEEEstrippedouterbraces ==> a macro containing {ab}c
2863 % the *-star form,\@IEEEstripouterbraces*, does not expand the argument
2864 % contents during processing
2865 \def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}}
2867 \def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax
2868 % If the macro is unchanged after being acquired as a single delimited
2869 % argument, we know we have one sequence of tokens without any enclosing
2870 % braces. Loop until this is true.
2872 \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER
2873 \ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg
2875 \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces
2878 \def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}}
2882 % usage: \@IEEEextractgroup*{}
2883 % \@IEEEextractgroup fully expands its argument (which it then stores in
2884 % \@IEEEextractgrouparg) via \edef and then assigns the first "brace group"
2885 % of tokens to the macro \@IEEEextractedgroup.
2886 % The remaining groups, if any, are stored in the macro
2887 % \@IEEEextractedgroupremain. If the argument does not contain the requisite
2888 % groups, the respective macros will be defined to be empty.
2889 % There is an asymmetry in that \@IEEEextractedgroup is stripped of its first
2890 % outer grouping while \@IEEEextractedgroupremain retains even the outer
2891 % grouping (if present) that originally identified it as a group.
2894 % \@IEEEextractgroup{{{ab}}{c{de}}}
2897 % \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}}
2898 % \@IEEEextractedgroup ==> a macro containing {ab}
2899 % \@IEEEextractedgroupremain ==> a macro containing {c{de}}
2901 % The *-star form, \@IEEEextractgroup*, does not expand its argument
2902 % contents during processing.
2903 \def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}}
2905 \def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax
2906 % trap the case of an empty extracted group as this would cause problems with
2907 % \@IEEEextractgroupremain's argument acquisition
2908 \ifx\@IEEEextractgrouparg\@empty
2909 \def\@IEEEextractedgroup{}\relax
2910 \def\@IEEEextractedgroupremain{}\relax
2912 % We have to use some dirty tricks here. We want to insert {} around
2913 % whatever remains after the first group so that TeX's argument scanner
2914 % will preserve any originally enclosing braces as well as provide an
2915 % empty argument to acquire even if there isn't a second group.
2916 % In this first of two dirty tricks, we put a } at the end of the structure
2917 % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow
2918 % what would otherwise be an unbalanced macro definition for
2919 % \@@IEEEextractgroup to be acceptable to it.
2920 \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax
2923 % In the second part of the dirty tricks, we insert a leading { right after
2924 % the first group is acquired, but before the remainder is. Again, the
2925 % \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear
2927 \def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi}
2929 \def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}}
2933 % \@IEEEextracttoken relocated at top because margin setting commands rely on it
2937 % usage: \@IEEEextracttokengroups*{}
2938 % \@IEEEextracttokengroups fully expands its argument (which it then stores
2939 % in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of
2940 % tokens (with the outermost braces removed) to the macro
2941 % \@IEEEextractedfirstgroup.
2942 % The meaning of the first nonbrace (but including the empty group) token
2943 % within this first group is assigned via \let to \@IEEEextractedfirsttoken
2944 % as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first
2945 % nonbrace token does not exist (or is an empty group), these will be \relax
2946 % and empty, respectively. Tokens that would otherwise be discarded during
2947 % the acquisition of the first token in the first group are stored in
2948 % \@IEEEextractedfirsttokensdiscarded, however their original relative brace
2949 % nesting depths are not guaranteed to be preserved.
2950 % The first group within this first group is stored in the macro
2951 % \@IEEEextractedfirstfirstgroup.
2952 % Likewise for the next group after the first: \@IEEEextractednextgroup,
2953 % \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken,
2954 % \@IEEEextractednextgroupfirsttokenmacro, and
2955 % \@IEEEextractednextfirsttokensdiscarded.
2956 % All tokens/groups after the first group, including any enclosing braces,
2957 % are stored in the macro \@IEEEextractedafterfirstgroupremain which will
2958 % be empty if none exist.
2961 % \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}}
2964 % \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g}
2965 % \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd}
2966 % \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g}
2967 % \@IEEEextractedfirsttoken ==> the letter a
2968 % \@IEEEextractedfirsttokenmacro ==> a macro containing a
2969 % \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd
2970 % \@IEEEextractedfirstfirstgroup ==> a macro containing ab
2971 % \@IEEEextractednextgroup ==> a macro containing {ef}g
2972 % \@IEEEextractednextfirsttoken ==> the letter e
2973 % \@IEEEextractednextfirsttokenmacro ==> a macro containing e
2974 % \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg
2975 % \@IEEEextractednextfirstgroup ==> a macro containing ef
2977 % If given an empty argument, \@IEEEextractedfirsttoken and
2978 % \@IEEEextractednextfirsttoken will be set to \relax
2979 % and all the macros will be empty.
2980 % the *-star form, \@IEEEextracttokengroups*, does not expand its argument
2981 % contents during processing.
2983 % Depends on: \@IEEEextractgroup, \@IEEEextracttoken
2984 \def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}}
2985 \def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax
2986 % begin extraction, these functions are safe with empty arguments
2988 \expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax
2989 \let\@IEEEextractedfirstgroup\@IEEEextractedgroup
2990 \let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain
2991 \expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax
2992 \let\@IEEEextractedfirsttoken\@IEEEextractedtoken
2993 \let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro
2994 \let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded
2996 \expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax
2997 \let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup
2999 \expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax
3000 \let\@IEEEextractednextgroup\@IEEEextractedgroup
3001 \expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax
3002 \let\@IEEEextractednextfirsttoken\@IEEEextractedtoken
3003 \let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro
3004 \let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded
3006 \expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax
3007 \let\@IEEEextractednextfirstgroup\@IEEEextractedgroup}
3010 %% -- End of Command Argument Scanning Support Functions --
3016 %% START OF IEEEeqnarray DEFINITIONS
3018 %% Inspired by the concepts, examples, and previous works of LaTeX
3019 %% coders and developers such as Donald Arseneau, Fred Bartlett,
3020 %% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum,
3021 %% Roland Winkler and Mark Wooding.
3022 %% I don't make the claim that my work here is even near their calibre. ;)
3025 \newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form
3026 \@IEEEeqnarrayboxnojotfalse
3028 \newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter
3029 % allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray
3030 % used by IEEEeqnarraymulticol so that it can work properly in both
3031 \@advanceIEEEeqncolcnttrue
3033 \newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined
3034 \newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used
3037 % The default math style used by the columns
3038 \def\IEEEeqnarraymathstyle{\displaystyle}
3039 % The default text style used by the columns
3040 % default to using the current font
3041 \def\IEEEeqnarraytextstyle{\relax}
3043 % like the iedlistdecl but for \IEEEeqnarray
3044 \def\IEEEeqnarraydecl{\relax}
3045 \def\IEEEeqnarrayboxdecl{\relax}
3049 % V1.8 flags to indicate that equation numbering is to persist
3050 \newif\if@IEEEeqnumpersist%
3051 \@IEEEeqnumpersistfalse
3052 \newif\if@IEEEsubeqnumpersist%
3053 \@IEEEsubeqnumpersistfalse
3055 % V1.8 flags to indicate if (sub)equation number of last line was preadvanced
3056 \newif\if@IEEEeqnumpreadv%
3057 \@IEEEeqnumpreadvfalse
3058 \newif\if@IEEEsubeqnumpreadv%
3059 \@IEEEsubeqnumpreadvfalse
3061 \newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it
3063 % \yesnumber is the opposite of \nonumber
3064 % a novel concept with the same def as the equationarray package
3065 % However, we give IEEE versions too since some LaTeX packages such as
3066 % the MDWtools mathenv.sty redefine \nonumber to something else.
3067 % This command is intended for use in non-IEEEeqnarray math environments
3068 \providecommand{\yesnumber}{\global\@eqnswtrue}
3072 % V1.8 add persistant * forms
3073 % These commands can alter the type of equation an IEEEeqnarray line is.
3074 \def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}}
3076 \def\@IEEEyesnumber{\global\@eqnswtrue
3077 \if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray
3078 \ifnum\c@IEEEsubequation>0\relax
3079 \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax
3080 \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label
3082 % even if we reached this eqn num via a preadv, it is legit now
3083 \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse
3086 \def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}}
3089 \def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}}
3091 \def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray
3092 \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is
3093 \else% if we are a regular equation we have to watch out for two cases
3094 \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum
3095 \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax
3096 \else% non-preadvanced equations just need initialization of their sub eqnnum
3097 \setcounter{IEEEsubequation}{1}\relax
3099 \fi% fi already is subequation
3100 \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax
3101 \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label
3102 \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore
3107 \def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}}
3109 \def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray
3110 \if@eqnsw % we do nothing unless we know we will display because we play with the counters here
3111 % if it currently is a subequation, bump up to the next equation number and turn off the subequation
3112 \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax
3114 \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore
3115 \gdef\@currentlabel{\p@equation\theequation}\relax
3116 \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label
3122 % allows users to "push away" equations that get too close to the equation numbers
3123 \def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}}
3125 % provides a way to span multiple columns within IEEEeqnarray environments
3126 % will consider \if@advanceIEEEeqncolcnt before globally advancing the
3127 % column counter - so as to work within \IEEEeqnarraybox
3128 % usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text}
3129 \long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax
3130 % check if column is defined for the precolumn definition
3131 % We have to be careful here because TeX scans for & even within an \iffalse
3132 % where it does not expand macros. So, if we used only one \ifx and a #3
3133 % appeared in the false branch and the user inserted another alignment
3134 % structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that
3135 % there is an inner alignment in the false branch yet still will see any &
3136 % there and will think that they apply to the outer alignment resulting in an
3137 % incomplete \ifx error.
3138 % So, here we use separate checks for the pre and post parts in order to keep
3139 % the #3 outside of all conditionals.
3140 \relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax
3141 \csname @IEEEeqnarraycolPRE#2\endcsname
3142 \else% if not, error and use default type
3143 \@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak
3144 Using a default centering column instead}%
3145 {You must define IEEEeqnarray column types before use.}%
3146 \csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname
3148 % The ten \relax are to help prevent misleading error messages in case a user
3149 % accidently inserted a macro that tries to acquire additional arguments.
3150 #3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax
3151 % check if column is defined for the postcolumn definition
3152 \expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax
3153 \csname @IEEEeqnarraycolPOST#2\endcsname
3154 \else% if not, use the default type
3155 \csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname
3157 % advance column counter only if the IEEEeqnarray environment wants it
3158 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi}
3160 % like \omit, but maintains track of the column counter for \IEEEeqnarray
3161 \def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi}
3164 % provides a way to define a letter referenced column type
3165 % usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text}
3166 \def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}%
3167 \expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}%
3168 \expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}}
3171 % provides a way to define a numerically referenced inter-column glue types
3172 % usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition}
3173 \def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}%
3174 \expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}}
3177 \def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types
3180 % expands and appends the given argument to the \@IEEEtrantmptoksA token list
3181 % used to build up the \halign preamble
3182 \def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}%
3185 % also appends to \@IEEEtrantmptoksA, but does not expand the argument
3186 % uses \toks8 as a scratchpad register
3187 \def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}%
3188 \edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}%
3189 \@@IEEEappendNOEXPANDtoksA}
3191 % define some common column types for the user
3193 \IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil}
3194 \IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil}
3195 \IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$}
3196 \IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil}
3197 \IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil}
3198 \IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$}
3200 \IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil}
3201 \IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil}
3202 \IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{}
3205 \IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth}
3206 \IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth}
3207 \IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth}
3208 \IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}%
3209 {\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth}
3212 \IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil}
3213 \IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil}
3216 \IEEEeqnarraydefcol{x}{}{}
3217 \IEEEeqnarraydefcol{X}{$}{$}
3219 % the default column type to use in the event a column type is not defined
3220 \IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil}
3223 % a zero tabskip (used for "-" col types)
3224 \def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt}
3225 % a centering tabskip (used for "+" col types)
3226 \def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt}
3228 % top level default tabskip glues for the start, end, and inter-column
3229 % may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox
3230 \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue
3231 \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue
3232 \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue
3236 % creates a vertical rule that extends from the bottom to the top a a cell
3237 % Provided in case other packages redefine \vline some other way.
3238 % usage: \IEEEeqnarrayvrule[rule thickness]
3239 % If no argument is provided, \arrayrulewidth will be used for the rule thickness.
3240 \newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax}
3242 % creates a blank separator row
3243 % usage: \IEEEeqnarrayseprow[separation length][font size commands]
3244 % default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax]
3245 % blank arguments inherit the default values
3246 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers
3247 \def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}}
3248 \def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}}
3249 \def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}%
3250 \ifx\@IEEEeqnarrayseprowARGONE\@empty%
3251 % get the skip value, based on the font commands
3252 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3
3253 % assign within a bogus box to confine the font changes
3254 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}%
3256 {\setbox0=\hbox{#2\relax\global\skip5=#1}}%
3258 \@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax}
3260 % creates a blank separator row, but omits all the column templates
3261 % usage: \IEEEeqnarrayseprowcut[separation length][font size commands]
3262 % default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax]
3263 % blank arguments inherit the default values
3264 % uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers
3265 \def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
3266 % advance column counter only if the IEEEeqnarray environment wants it
3267 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3268 \@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}}
3269 \def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}}
3270 \def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}%
3271 \ifx\@IEEEeqnarrayseprowARGONE\@empty%
3272 % get the skip value, based on the font commands
3273 % use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3
3274 % assign within a bogus box to confine the font changes
3275 {\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}%
3277 {\setbox0=\hbox{#2\relax\global\skip5=#1}}%
3279 \IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax}
3283 % draws a single rule across all the columns optional
3284 % argument determines the rule width, \arrayrulewidth is the default
3285 % updates column counter as needed and turns off struts
3286 % usage: \IEEEeqnarrayrulerow[rule line thickness]
3287 \def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
3288 % advance column counter only if the IEEEeqnarray environment wants it
3289 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3290 \@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}}
3291 \def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule
3292 % turn off any struts
3293 \IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax}
3296 % draws a double rule by using a single rule row, a separator row, and then
3297 % another single rule row
3298 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default
3299 % second optional argument determines the rule spacing, \doublerulesep is the default
3300 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing]
3301 \def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
3302 % advance column counter only if the IEEEeqnarray environment wants it
3303 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3304 \@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}}
3305 \def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}%
3306 {\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}}
3307 \def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}%
3308 % we allow the user to say \IEEEeqnarraydblrulerow[][]
3309 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3310 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
3312 \@IEEEeqnarrayrulerow[#1]\relax%
3314 \def\@IEEEeqnarraydblrulerowARG{#2}%
3315 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3316 \\\IEEEeqnarrayseprow[\doublerulesep][\relax]%
3318 \\\IEEEeqnarrayseprow[#2][\relax]%
3320 \\\multispan{\@IEEEeqnnumcols}%
3321 % advance column counter only if the IEEEeqnarray environment wants it
3322 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3323 \def\@IEEEeqnarraydblrulerowARG{#1}%
3324 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3325 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
3327 \@IEEEeqnarrayrulerow[#1]%
3331 % draws a double rule by using a single rule row, a separator (cutting) row, and then
3332 % another single rule row
3333 % first optional argument determines the rule thicknesses, \arrayrulewidth is the default
3334 % second optional argument determines the rule spacing, \doublerulesep is the default
3335 % usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing]
3336 \def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols
3337 % advance column counter only if the IEEEeqnarray environment wants it
3338 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3339 \@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}}
3340 \def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}%
3341 {\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}}
3342 \def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}%
3343 % we allow the user to say \IEEEeqnarraydblrulerow[][]
3344 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3345 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
3347 \@IEEEeqnarrayrulerow[#1]%
3349 \def\@IEEEeqnarraydblrulerowARG{#2}%
3350 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3351 \\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]%
3353 \\\IEEEeqnarrayseprowcut[#2][\relax]%
3355 \\\multispan{\@IEEEeqnnumcols}%
3356 % advance column counter only if the IEEEeqnarray environment wants it
3357 \if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi%
3358 \def\@IEEEeqnarraydblrulerowARG{#1}%
3359 \ifx\@IEEEeqnarraydblrulerowARG\@empty%
3360 \@IEEEeqnarrayrulerow[\arrayrulewidth]%
3362 \@IEEEeqnarrayrulerow[#1]%
3368 % inserts a full row's worth of &'s
3369 % relies on \@IEEEeqnnumcols to provide the correct number of columns
3370 % uses \@IEEEtrantmptoksA, \count0 as scratch registers
3371 \def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax%
3372 \loop% add cols if the user did not use them all
3373 \ifnum\count0<\@IEEEeqnnumcols\relax%
3374 \@IEEEappendtoksA{&}%
3375 \advance\count0 by 1\relax% update the col count
3377 \the\@IEEEtrantmptoksA%execute the &'s
3382 \newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines
3383 \@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl
3385 \edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts
3386 \edef\@IEEEeqnarrayTHEstrutdepth{0pt}
3388 \edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of
3389 \edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray
3391 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height
3392 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth
3394 \newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value
3395 \@IEEEeqnarrayusemasterstruttrue % is to be used
3399 % saves the strut height and depth of the master strut
3400 \def\@IEEEeqnarraymasterstrutsave{\relax%
3401 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
3402 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
3403 % remove stretchability
3404 \dimen0\skip0\relax%
3405 \dimen2\skip2\relax%
3407 \edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}%
3408 \edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}}
3410 % restores the strut height and depth of the master strut
3411 \def\@IEEEeqnarraymasterstrutrestore{\relax%
3412 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax%
3413 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax%
3414 % remove stretchability
3415 \dimen0\skip0\relax%
3416 \dimen2\skip2\relax%
3418 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
3419 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}}
3422 % globally restores the strut height and depth to the
3423 % master values and sets the master strut flag to true
3424 \def\@IEEEeqnarraystrutreset{\relax%
3425 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
3426 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
3427 % remove stretchability
3428 \dimen0\skip0\relax%
3429 \dimen2\skip2\relax%
3431 \xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
3432 \xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
3433 \global\@IEEEeqnarrayusemasterstruttrue}
3436 % if the master strut is not to be used, make the current
3437 % values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth
3438 % and the use master strut flag, global
3439 % this allows user strut commands issued in the last column to be carried
3440 % into the isolation/strut column
3441 \def\@IEEEeqnarrayglobalizestrutstatus{\relax%
3442 \if@IEEEeqnarrayusemasterstrut\else%
3443 \xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}%
3444 \xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}%
3445 \global\@IEEEeqnarrayusemasterstrutfalse%
3450 % usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands]
3451 % If called outside the lines of an IEEEeqnarray, sets the height
3452 % and depth of both the master and local struts. If called inside
3453 % an IEEEeqnarray line, sets the height and depth of the local strut
3454 % only and sets the flag to indicate the use of the local strut
3455 % values. If the height or depth is left blank, 0.7\normalbaselineskip
3456 % and 0.3\normalbaselineskip will be used, respectively.
3457 % The optional argument can be used to evaluate the lengths under
3458 % a different font size and styles. If none is specified, the current
3460 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2
3461 \def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}}
3462 \def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}%
3463 \ifx\@IEEEeqnarraystrutsizeARG\@empty%
3464 {\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}%
3465 \skip0=\skip3\relax%
3466 \else% arg one present
3467 {\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}%
3468 \skip0=\skip3\relax%
3470 \def\@IEEEeqnarraystrutsizeARG{#2}%
3471 \ifx\@IEEEeqnarraystrutsizeARG\@empty%
3472 {\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}%
3473 \skip2=\skip3\relax%
3474 \else% arg two present
3475 {\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}%
3476 \skip2=\skip3\relax%
3478 % remove stretchability, just to be safe
3479 \dimen0\skip0\relax%
3480 \dimen2\skip2\relax%
3481 % dimen0 = height, dimen2 = depth
3482 \if@IEEEeqnarrayISinner% inner does not touch master strut size
3483 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
3484 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
3485 \@IEEEeqnarrayusemasterstrutfalse% do not use master
3486 \else% outer, have to set master strut too
3487 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
3488 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}%
3489 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
3490 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
3491 \@IEEEeqnarrayusemasterstruttrue% use master strut
3495 % usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands]
3496 % If called outside the lines of an IEEEeqnarray, adds the given height
3497 % and depth to both the master and local struts.
3498 % If called inside an IEEEeqnarray line, adds the given height and depth
3499 % to the local strut only and sets the flag to indicate the use
3500 % of the local strut values.
3501 % In both cases, if a height or depth is left blank, 0pt is used instead.
3502 % The optional argument can be used to evaluate the lengths under
3503 % a different font size and styles. If none is specified, the current
3505 % uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2
3506 \def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}}
3507 \def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}%
3508 \ifx\@IEEEeqnarraystrutsizearg\@empty%
3510 \else% arg one present
3511 {\setbox0=\hbox{#3\relax\global\skip3=#1}}%
3512 \skip0=\skip3\relax%
3514 \def\@IEEEeqnarraystrutsizearg{#2}%
3515 \ifx\@IEEEeqnarraystrutsizearg\@empty%
3517 \else% arg two present
3518 {\setbox0=\hbox{#3\relax\global\skip3=#2}}%
3519 \skip2=\skip3\relax%
3521 % remove stretchability, just to be safe
3522 \dimen0\skip0\relax%
3523 \dimen2\skip2\relax%
3524 % dimen0 = height, dimen2 = depth
3525 \if@IEEEeqnarrayISinner% inner does not touch master strut size
3526 % get local strut size
3527 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax%
3528 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax%
3529 % add it to the user supplied values
3530 \advance\dimen0 by \skip0\relax%
3531 \advance\dimen2 by \skip2\relax%
3532 % update the local strut size
3533 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
3534 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
3535 \@IEEEeqnarrayusemasterstrutfalse% do not use master
3536 \else% outer, have to set master strut too
3537 % get master strut size
3538 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
3539 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
3540 % add it to the user supplied values
3541 \advance\dimen0 by \skip0\relax%
3542 \advance\dimen2 by \skip2\relax%
3543 % update the local and master strut sizes
3544 \edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}%
3545 \edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}%
3546 \edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}%
3547 \edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}%
3548 \@IEEEeqnarrayusemasterstruttrue% use master strut
3552 % allow user a way to see the struts
3553 \newif\ifIEEEvisiblestruts
3554 \IEEEvisiblestrutsfalse
3556 % inserts an invisible strut using the master or local strut values
3557 % uses scratch registers \skip0, \skip2, \dimen0, \dimen2
3558 \def\@IEEEeqnarrayinsertstrut{\relax%
3559 \if@IEEEeqnarrayusemasterstrut
3560 % get master strut size
3561 \expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax%
3562 \expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax%
3564 % get local strut size
3565 \expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax%
3566 \expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax%
3568 % remove stretchability, probably not needed
3569 \dimen0\skip0\relax%
3570 \dimen2\skip2\relax%
3571 % dimen0 = height, dimen2 = depth
3572 % allow user to see struts if desired
3573 \ifIEEEvisiblestruts%
3574 \vrule width0.2pt height\dimen0 depth\dimen2\relax%
3576 \vrule width0pt height\dimen0 depth\dimen2\relax\fi}
3579 % creates an invisible strut, useable even outside \IEEEeqnarray
3580 % if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide.
3581 % usage: \IEEEstrut[height][depth][font size commands]
3582 % default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax]
3583 % blank arguments inherit the default values
3584 % uses \dimen0, \dimen2, \skip0, \skip2
3585 \def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}}
3586 \def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}}
3587 \def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}}
3588 \def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax%
3589 \def\@IEEEstrutARG{#1}%
3590 \ifx\@IEEEstrutARG\@empty%
3591 \skip0=0.7\normalbaselineskip\relax%
3595 \def\@IEEEstrutARG{#2}%
3596 \ifx\@IEEEstrutARG\@empty%
3597 \skip2=0.3\normalbaselineskip\relax%
3601 % remove stretchability, probably not needed
3602 \dimen0\skip0\relax%
3603 \dimen2\skip2\relax%
3604 \ifIEEEvisiblestruts%
3605 \vrule width0.2pt height\dimen0 depth\dimen2\relax%
3607 \vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}}
3610 % enables strut mode by setting a default strut size and then zeroing the
3611 % \baselineskip, \lineskip, \lineskiplimit and \jot
3612 \def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]%
3613 \baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt}
3616 % equation and subequation forms to use to setup hyperref's \@currentHref
3617 \def\@IEEEtheHrefequation{equation.\theHequation}
3618 \def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}}
3621 \def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray}
3622 \def\endIEEEeqnarray{\end@IEEEeqnarray}
3624 \@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray}
3625 \@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray}
3628 % \IEEEeqnarray is an enhanced \eqnarray.
3629 % The star form defaults to not putting equation numbers at the end of each row.
3630 % usage: \IEEEeqnarray[decl]{cols}
3631 \def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}}
3632 % We have to be careful here to normalize catcodes just before acquiring the
3633 % cols as that specification may contain punctuation which could be subject
3634 % to document catcode changes.
3635 \def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]}
3636 \def\@@@IEEEeqnarray[#1]#2{\endgroup
3637 % default to showing the equation number or not based on whether or not
3638 % the star form was involked
3639 \if@IEEEeqnumpersist\global\@eqnswtrue
3640 \else% not the star form
3643 % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter)
3644 \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax
3645 % provide dummy hyperref commands in case hyperref is not loaded
3646 \providecommand{\Hy@raisedlink}[1]{}\relax
3647 \providecommand{\hyper@anchorstart}[1]{}\relax
3648 \providecommand{\hyper@anchorend}{}\relax
3649 \providecommand{\@currentHref}{}\relax
3650 \@IEEEeqnumpreadvfalse% reset eqnpreadv flag
3651 \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag
3652 \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign
3653 \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default
3654 \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise
3655 \IEEEvisiblestrutsfalse% diagnostic mode defaults to off
3656 % no extra space unless the user specifically requests it
3658 \lineskiplimit=0pt\relax
3659 \baselineskip=\normalbaselineskip\relax%
3660 \jot=\IEEEnormaljot\relax%
3661 \mathsurround\z@\relax% no extra spacing around math
3662 \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses,
3663 % used in \IEEEeqnarraymulticol and in the preamble build
3664 %V1.8 Here we preadvance to the next equation number.
3665 % If the user later wants a continued subequation, we can roll back.
3666 \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation%
3667 \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line
3668 \setcounter{IEEEsubequation}{0}% no subequation yet
3669 \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally
3670 \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally
3671 \def\@currentlabel{\p@equation\theequation}% redefine the ref label
3672 \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label
3673 \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides
3674 #1\relax% allow user to override defaults
3675 \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers
3676 \global\@IEEEeqncolcnt\z@% col. count = 0 for first line
3677 \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA
3678 % put in the column for the equation number
3679 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first
3681 % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking
3682 \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}%
3683 % add the isolation column
3684 \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}%
3685 % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking
3686 \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}%
3687 % add the equation number col to the preamble
3688 \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}%
3689 % note \@IEEEeqnnumcols does not count the equation col or isolation col
3690 % set the starting tabskip glue as determined by the preamble build
3691 \tabskip=\@IEEEBPstartglue\relax
3692 % begin the display alignment
3693 \@IEEEeqnarrayISinnertrue% commands are now within the lines
3694 $$\everycr{}\halign to\displaywidth\bgroup
3695 % "exspand" the preamble
3696 \span\the\@IEEEtrantmptoksA\cr}
3698 % enter isolation/strut column (or the next column if the user did not use
3699 % every column), record the strut status, complete the columns, do the strut if needed,
3700 % restore counters (to backout any equation setup for a next line that was never used)
3701 % to their correct values and exit
3702 \def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup
3703 \if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi
3704 \if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi
3705 \global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label
3706 \global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label
3710 % IEEEeqnarray uses a modifed \\ instead of the plain \cr to
3711 % end rows. This allows for things like \\*[vskip amount]
3712 % These "cr" macros are modified versions of those for LaTeX2e's eqnarray
3713 % the {\ifnum0=`} braces must be kept away from the last column to avoid
3714 % altering spacing of its math, so we use & to advance to the next column
3715 % as there is an isolation/strut column after the user's columns
3716 \def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column
3719 \global\@eqpen\@M\@IEEEeqnarrayYCR
3721 \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR
3725 \def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip}
3727 \def\@IEEEeqnarrayXCR[#1]{%
3730 \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}%
3732 \def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register
3733 \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column
3734 \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax
3735 \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak
3737 {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak
3738 specifications.}\relax%
3740 \loop% add cols if the user did not use them all
3741 \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax
3742 \@IEEEappendtoksA{&}%
3743 \advance\@IEEEeqncolcnt by 1\relax% update the col count
3745 % this number of &'s will take us the the isolation column
3748 \the\@IEEEtrantmptoksA%
3749 % handle the strut/isolation column
3750 \@IEEEeqnarrayinsertstrut% do the strut if needed
3751 \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray
3752 &% and enter the equation number column
3753 \if@eqnsw% only if we display something
3754 \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor
3755 \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means
3756 \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations
3757 % V1.8 Here we setup the counters, currentlabel and status for what would be the *next*
3758 % equation line as would be the case under the current settings. However, there are two problems.
3759 % One problem is that there might not ever be a next line. The second problem is that the user
3760 % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle
3761 % these cases we have to record the current values of the (sub)equation counters and revert back
3762 % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv
3763 % and \@IEEEsubeqnnumrollback stuff tracks this.
3764 % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is
3765 % that the equation counters and labels remain valid for what the line would be unless a
3766 % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct.
3767 \ifnum\c@IEEEsubequation>0\relax% handle subequation
3768 \theIEEEsubequationdis\relax
3769 \if@IEEEsubeqnumpersist% setup for default type of next line
3770 \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax
3771 \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax
3772 \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label
3774 % if no subeqnum persist, go ahead and setup for a new equation number
3775 \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation
3776 \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax
3777 \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax
3778 \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label
3780 \else% display a standard equation number
3781 \theequationdis\relax
3782 \setcounter{IEEEsubequation}{0}\relax% not really needed
3783 \if@IEEEsubeqnumpersist% setup for default type of next line
3784 % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a
3785 \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax
3786 \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax
3787 \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label
3789 % if no subeqnum persist, go ahead and setup for a new equation number
3790 \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation
3791 \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax
3792 \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax
3793 \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label
3796 \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor
3797 \fi% fi only if we display something
3798 % reset the flags to indicate the default preferences of the display of equation numbers
3799 \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi
3800 \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag
3801 % reset the number of columns the user actually used
3802 \global\@IEEEeqncolcnt\z@\relax
3803 % the real end of the line
3810 % \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything
3811 % inside a vtop, vbox, or vcenter box depending on the letter in the second
3812 % optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray,
3813 % equation numbers are not displayed and \IEEEeqnarraybox can be nested.
3814 % \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox
3816 % \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within
3817 % a \hbox{$ $} construct.
3818 % \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or
3819 % \IEEEeqnarrayboxt depending on the math mode.
3820 % The third optional argument specifies the width this box is to be set to -
3821 % natural width is the default.
3822 % The * forms do not add \jot line spacing
3823 % usage: \IEEEeqnarraybox[decl][pos][width]{cols}
3824 \def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox}
3825 \def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox}
3826 \@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox}
3827 \@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox}
3829 \def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
3830 \def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox}
3831 \@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox}
3832 \@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox}
3834 \def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
3836 \def\endIEEEeqnarraybox{\end@IEEEeqnarraybox}
3838 \@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi%
3840 \@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox}
3842 % flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $}
3843 % for \vcenter in non-math mode
3844 \newif\if@IEEEeqnarrayboxHBOXSW%
3845 \@IEEEeqnarrayboxHBOXSWfalse
3847 \def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}}
3848 % We have to be careful here to normalize catcodes just before acquiring the
3849 % cols as that specification may contain punctuation which could be subject
3850 % to document catcode changes.
3851 \def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}}
3852 \def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}}
3854 % #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs
3855 \def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign
3856 \@IEEEeqnarraymasterstrutsave% save current master strut values
3857 \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default
3858 \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise
3859 \IEEEvisiblestrutsfalse% diagnostic mode defaults to off
3860 % no extra space unless the user specifically requests it
3861 \lineskip=0pt\relax%
3862 \lineskiplimit=0pt\relax%
3863 \baselineskip=\normalbaselineskip\relax%
3864 \jot=\IEEEnormaljot\relax%
3865 \mathsurround\z@\relax% no extra spacing around math
3866 % the default end glues are zero for an \IEEEeqnarraybox
3867 \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue
3868 \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue
3869 \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue
3870 \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses,
3871 % used in \IEEEeqnarraymulticol and in the preamble build
3872 \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides
3873 #1\relax% allow user to override defaults
3874 \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing
3875 \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA
3876 % add an isolation column to the preamble to stop \\'s {} from getting into the last col
3877 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first
3879 % add the isolation column to the preamble
3880 \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}%
3881 % set the starting tabskip glue as determined by the preamble build
3882 \tabskip=\@IEEEBPstartglue\relax
3883 % begin the alignment
3885 % use only the very first token to determine the positioning
3886 \@IEEEextracttoken{#2}\relax
3887 \ifx\@IEEEextractedtokensdiscarded\@empty\else
3888 \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
3890 % \@IEEEextractedtoken has the first token, the rest are ignored
3891 % if we need to put things into and hbox and go into math mode, do so now
3892 \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi%
3893 % use the appropriate vbox type
3894 \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax%
3895 \vcenter\else\vbox\fi\fi\bgroup%
3896 \@IEEEeqnarrayISinnertrue% commands are now within the lines
3897 \ifx#3\relax\halign\else\halign to #3\relax\fi%
3899 % "exspand" the preamble
3900 \span\the\@IEEEtrantmptoksA\cr}
3902 % carry strut status and enter the isolation/strut column,
3903 % exit from math mode if needed, and exit
3904 \def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status
3905 &% enter isolation/strut column
3906 \@IEEEeqnarrayinsertstrut% do strut if needed
3907 \@IEEEeqnarraymasterstrutrestore% restore the previous master strut values
3908 % reset the strut system for next IEEEeqnarray
3909 % (sets local strut values back to previous master strut values)
3910 \@IEEEeqnarraystrutreset%
3911 % ensure last line, exit from halign, close vbox
3912 \crcr\egroup\egroup%
3913 % exit from math mode and close hbox if needed
3914 \if@IEEEeqnarrayboxHBOXSW $\egroup\fi}
3918 % IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to
3919 % end rows. This allows for things like \\[vskip amount]
3920 % This "cr" macros are modified versions those for LaTeX2e's eqnarray
3921 % For IEEEeqnarraybox, \\* is the same as \\
3922 % the {\ifnum0=`} braces must be kept away from the last column to avoid
3923 % altering spacing of its math, so we use & to advance to the isolation/strut column
3924 % carry strut status into isolation/strut column
3925 \def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status
3926 &% enter isolation/strut column
3927 \@IEEEeqnarrayinsertstrut% do strut if needed
3928 % reset the strut system for next line or IEEEeqnarray
3929 \@IEEEeqnarraystrutreset%
3931 \@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}}
3933 % test and setup the optional argument to \\[]
3934 \def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip}
3936 % IEEEeqnarraybox does not automatically increase line spacing by \jot
3937 \def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}%
3938 \cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}}
3942 % usage: \@IEEEbuildpreamble{column specifiers}
3943 % starts the halign preamble build
3944 % the assembled preamble is put in \@IEEEtrantmptoksA
3945 \def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register
3946 \let\@IEEEBPcurtype=u%current column type is not yet known
3947 \let\@IEEEBPprevtype=s%the previous column type was the start
3948 \let\@IEEEBPnexttype=u%next column type is not yet known
3949 % ensure these are valid
3950 \def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}%
3951 \def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition
3952 % currently acquired numerically referenced glue
3953 % use a name that is easier to remember
3954 \let\@IEEEBPcurnum=\@IEEEtrantmpcountA%
3956 % tracks number of columns in the preamble
3958 % record the default end glues
3959 \edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}%
3960 \edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}%
3961 \edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers
3962 % now parse the user's column specifications
3963 % \ignorespaces is used as a delimiter, need at least one trailing \relax because
3964 % \@@IEEEbuildpreamble looks into the future
3965 \expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax}
3968 % usage: \@@IEEEbuildpreamble{current column}{next column}
3969 % parses and builds the halign preamble
3970 \def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble%
3971 % use only the very first token to check the end
3972 \@IEEEextracttokengroups{#1}\relax
3973 \ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else%
3974 % identify current and next token type
3975 \@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid
3976 \@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next
3977 % if curtype is a glue, get the glue def
3978 \if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi%
3979 % if curtype is a column, get the column def and set the current column name
3980 \if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi%
3981 % if curtype is a numeral, acquire the user defined glue
3982 \if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi%
3983 % process the acquired glue
3984 \if\@IEEEBPcurtype g\@IEEEprocessGcol\fi%
3985 % process the acquired col
3986 \if\@IEEEBPcurtype c\@IEEEprocessCcol\fi%
3987 % ready prevtype for next col spec.
3988 \let\@IEEEBPprevtype=\@IEEEBPcurtype%
3989 % be sure and put back the future token(s) as a group
3990 \fi\@@nextIEEEbuildpreamble{#2}}
3993 % usage: \@@IEEEfinishpreamble{discarded}
3994 % executed just after preamble build is completed
3995 % warn about zero cols, and if prevtype type = u, put in end tabskip glue
3996 % argument is not used
3997 \def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax
3998 \@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}%
3999 {At least one column type must be declared for each IEEEeqnarray.}%
4000 \fi%num cols less than 1
4001 %if last type undefined, set default end tabskip glue
4002 \if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi}
4005 % usage: \@IEEEgetcoltype{col specifier}{\output}{error more}
4006 % Identify and return the column specifier's type code in the given
4009 % g = glue (any other char in catagory 12)
4011 % e = \ignorespaces (end of sequence)
4013 % error mode: 0 = no error message, 1 = error on invalid char
4014 \def\@IEEEgetcoltype#1#2#3{%
4015 % use only the very first token to determine the type
4016 \@IEEEextracttoken{#1}\relax
4017 % \@IEEEextractedtoken has the first token, the rest are discarded
4018 \let#2=u\relax% assume invalid until know otherwise
4019 \ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else
4020 \ifcat\@IEEEextractedtoken\relax\else% screen out control sequences
4021 \if0\@IEEEextractedtoken\let#2=n\else
4022 \if1\@IEEEextractedtoken\let#2=n\else
4023 \if2\@IEEEextractedtoken\let#2=n\else
4024 \if3\@IEEEextractedtoken\let#2=n\else
4025 \if4\@IEEEextractedtoken\let#2=n\else
4026 \if5\@IEEEextractedtoken\let#2=n\else
4027 \if6\@IEEEextractedtoken\let#2=n\else
4028 \if7\@IEEEextractedtoken\let#2=n\else
4029 \if8\@IEEEextractedtoken\let#2=n\else
4030 \if9\@IEEEextractedtoken\let#2=n\else
4031 \ifcat,\@IEEEextractedtoken\let#2=g\relax
4032 \else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
4034 \if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}%
4035 {Only letters, numerals and certain other symbols are allowed \MessageBreak
4036 as IEEEeqnarray column specifiers.}\fi\fi}
4039 % usage: \@IEEEgetcurcol{col specifier}
4040 % verify the letter referenced column exists
4041 % and return its name in \@IEEEBPcurcolname
4042 % if column specifier is invalid, use the default column @IEEEdefault
4043 \def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined%
4044 \def\@IEEEBPcurcolname{#1}\else% invalid column name
4045 \@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak
4046 Using a default centering column instead}%
4047 {You must define IEEEeqnarray column types before use.}%
4048 \def\@IEEEBPcurcolname{@IEEEdefault}\fi}
4051 % usage: \@IEEEgetcurglue{glue specifier}{\output}
4052 % identify the predefined (punctuation) glue value
4053 % and return it in the given output macro
4054 \def\@IEEEgetcurglue#1#2{%
4055 % ! = \! (neg small) -0.16667em (-3/18 em)
4056 % , = \, (small) 0.16667em ( 3/18 em)
4057 % : = \: (med) 0.22222em ( 4/18 em)
4058 % ; = \; (large) 0.27778em ( 5/18 em)
4061 % . = 0.5\arraycolsep
4065 % + = \@IEEEeqnarraycolSEPcenter
4066 % - = \@IEEEeqnarraycolSEPzero
4067 % Note that all em values are referenced to the math font (textfont2) fontdimen6
4070 % use only the very first token to determine the type
4071 \@IEEEextracttoken{#1}\relax
4072 \ifx\@IEEEextractedtokensdiscarded\@empty\else
4073 \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax
4075 % get the math font 1em value
4076 % LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs
4077 % to gain access to the math (\textfont2) font's spacing parameters.
4078 % So we create a bogus box here that uses the math font to ensure
4079 % that \textfont2 is loaded and ready. If this is not done,
4080 % the \textfont2 stuff here may not work.
4081 % Thanks to Bernd Raichle for his 1997 post on this topic.
4082 {\setbox0=\hbox{$\displaystyle\relax$}}%
4083 % fontdimen6 has the width of 1em (a quad).
4084 \@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax%
4085 % identify the glue value based on the first token
4086 % we discard anything after the first
4087 \if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4088 \if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4089 \if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4090 \if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4091 \if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4092 \if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else
4093 \if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else
4094 \if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else
4095 \if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else
4096 \if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else
4097 \if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else
4098 \if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else
4099 \edef#2{\@IEEEeqnarraycolSEPzero}%
4100 \@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak
4101 column specifications. Using a default value of\MessageBreak
4103 {Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak
4104 IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
4107 % usage: \@IEEEprocessNcol{digit}
4108 % process a numerical digit from the column specification
4109 % and look up the corresponding user defined glue value
4110 % can transform current type from n to g or a as the user defined glue is acquired
4111 \def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g%
4112 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak
4113 specifications. Ignoring consecutive glue specifiers\MessageBreak
4115 {You cannot have two or more glue types next to each other\MessageBreak
4116 in the IEEEeqnarray column specifications.}%
4117 \let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded
4118 \@IEEEBPcurnum=0\relax%
4119 \else% if we previously aborted a glue
4120 \if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion
4121 \else%acquire this number
4122 % save the previous type before the numerical digits started
4123 \if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi%
4124 \multiply\@IEEEBPcurnum by 10\relax%
4125 \advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan
4126 \if\@IEEEBPnexttype n\else%close acquisition
4127 \expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined%
4128 \edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}%
4129 \else%user glue not defined
4130 \@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak
4131 column specifications. Using a default value of\MessageBreak
4133 {You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak
4134 \string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}%
4135 \edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}%
4136 \fi% glue defined or not
4137 \let\@IEEEBPcurtype=g% change the type to reflect the acquired glue
4138 \let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue
4139 \@IEEEBPcurnum=0\relax%ready for next acquisition
4140 \fi%close acquisition, get glue
4141 \fi%discard or acquire number
4142 \fi%prevtype glue or not
4146 % process an acquired glue
4147 % add any acquired column/glue pair to the preamble
4148 \def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions
4150 % if this is the start glue, save it, but do nothing else
4151 % as this is not used in the preamble, but before
4152 \if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}%
4153 \else%not the start glue
4154 \if\@IEEEBPprevtype g%ignore if back to back glues
4155 \@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak
4156 specifications. Ignoring consecutive glue specifiers\MessageBreak
4158 {You cannot have two or more glue types next to each other\MessageBreak
4159 in the IEEEeqnarray column specifications.}%
4160 \let\@IEEEBPcurtype=a% abort this glue
4161 \else% not a back to back glue
4162 \if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble
4163 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi
4165 % make preamble advance col counter if this environment needs this
4166 \if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi
4167 % insert the column defintion into the preamble, being careful not to expand
4168 % the column definition
4169 \@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}%
4170 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}%
4171 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
4172 \@IEEEappendNOEXPANDtoksA{\endcsname}%
4173 \@IEEEappendtoksA{\the\toks0}%
4174 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax%
4175 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}%
4176 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
4177 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax%
4178 \relax\relax\relax\relax\relax\endgroup}%
4179 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble
4180 \else% error: non-start glue with no pending column
4181 \@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak
4182 type in the column specifications. Ignoring this glue\MessageBreak
4184 {Except for the first and last positions, glue can be placed only\MessageBreak
4185 between column types.}%
4186 \let\@IEEEBPcurtype=a% abort this glue
4187 \fi% previous was a column
4188 \fi% back-to-back glues
4189 \fi% is start column glue
4190 \fi% prev type not a
4194 % process an acquired letter referenced column and, if necessary, add it to the preamble
4195 \def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else
4196 \if\@IEEEBPnexttype n\else
4197 % we have a column followed by something other than a glue (or numeral glue)
4198 % so we must add this column to the preamble now
4199 \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first
4200 \if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue
4201 \@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue
4203 % make preamble advance col counter if this environment needs this
4204 \if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi
4205 % insert the column definition into the preamble, being careful not to expand
4206 % the column definition
4207 \@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}%
4208 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
4209 \@IEEEappendNOEXPANDtoksA{\endcsname}%
4210 \@IEEEappendtoksA{\the\toks0}%
4211 \@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax%
4212 \relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}%
4213 \@IEEEappendtoksA{\@IEEEBPcurcolname}%
4214 \@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax%
4215 \relax\relax\relax\relax\relax\endgroup}%
4216 \advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble
4217 \fi%next type not numeral
4218 \fi%next type not glue
4223 %% END OF IEEEeqnarray DEFINITIONS
4230 % set up the running headers and footers
4232 % header and footer font and size specifications
4233 \def\@IEEEheaderstyle{\normalfont\scriptsize}
4234 \def\@IEEEfooterstyle{\normalfont\scriptsize}
4236 % compsoc uses sans-serif headers and footers
4237 \ifCLASSOPTIONcompsoc
4238 \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize}
4239 \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize}
4243 % standard page style, ps@headings
4244 \def\ps@headings{% default to standard twoside headers, no footers
4245 % will change later if the mode requires otherwise
4246 \def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax
4247 \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax
4248 \let\@oddfoot\@empty
4249 \let\@evenfoot\@empty
4250 \ifCLASSOPTIONtechnote
4252 \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax
4253 \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax
4255 \ifCLASSOPTIONdraftcls
4257 \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax
4258 \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax
4262 % standard one side headers
4263 \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax
4264 \let\@evenhead\@empty
4265 \ifCLASSOPTIONdraftcls
4266 % oneside draft footers
4267 \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax
4268 \let\@evenfoot\@empty
4271 % turn off headers for conferences
4272 \ifCLASSOPTIONconference
4273 \let\@oddhead\@empty
4274 \let\@evenhead\@empty
4276 % turn off footers for draftclsnofoot
4277 \ifCLASSOPTIONdraftclsnofoot
4278 \let\@oddfoot\@empty
4279 \let\@evenfoot\@empty
4283 % title page style, ps@IEEEtitlepagestyle
4284 \def\ps@IEEEtitlepagestyle{% default title page headers, no footers
4285 \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax
4286 \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax
4287 \let\@oddfoot\@empty
4288 \let\@evenfoot\@empty
4289 % will change later if the mode requires otherwise
4290 \ifCLASSOPTIONdraftcls
4292 \ifCLASSOPTIONdraftclsnofoot\else
4293 % but only if not draftclsnofoot
4294 \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax
4295 \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax
4298 % all nondraft mode footers
4300 % for title pages that are using a pubid
4301 % do not repeat pubid on the title page if using a peer review cover page
4302 \ifCLASSOPTIONpeerreview\else
4303 % for noncompsoc papers, the pubid uses footnotesize and
4304 % is at the same vertical position as where the last baseline would normally be
4305 \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4306 \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4307 \ifCLASSOPTIONcompsoc
4308 % for compsoc papers, the pubid is at the same vertical position as the normal footer
4309 \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4310 \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4315 % turn off headers for conferences
4316 \ifCLASSOPTIONconference
4317 \let\@oddhead\@empty
4318 \let\@evenhead\@empty
4322 % peer review cover page style, ps@IEEEpeerreviewcoverpagestyle
4323 \def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers
4324 \let\@oddhead\@empty
4325 \let\@evenhead\@empty
4326 \let\@oddfoot\@empty
4327 \let\@evenfoot\@empty
4328 % will change later if the mode requires otherwise
4329 \ifCLASSOPTIONdraftcls
4331 \ifCLASSOPTIONdraftclsnofoot\else
4332 % but only if not draftclsnofoot
4333 \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax
4334 \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax
4337 % all nondraft mode footers
4339 % for peer review cover pages that are using a pubid
4340 % for noncompsoc papers, the pubid uses footnotesize and
4341 % is at the same vertical position as where the last baseline would normally be
4342 \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4343 \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4344 \ifCLASSOPTIONcompsoc
4345 % for compsoc papers, the pubid is at the same vertical position as the normal footer
4346 \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4347 \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax
4354 %% Defines the command for putting the header.
4355 %% Note that all the text is forced into uppercase, if you have some text
4356 %% that needs to be in lower case, for instance et. al., then either manually
4357 %% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the
4358 %% arguments to \markboth.
4359 %% V1.7b add \protect to work with Babel
4360 \def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}%
4361 \def\rightmark{\MakeUppercase{\protect#2}}}
4363 \def\today{\ifcase\month\or
4364 January\or February\or March\or April\or May\or June\or
4365 July\or August\or September\or October\or November\or December\fi
4366 \space\number\day, \number\year}
4371 %% CITATION AND BIBLIOGRAPHY COMMANDS
4373 %% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff
4376 % Modify Latex2e \@citex to separate citations with "], ["
4379 \@cite{\@for\@citeb:=#2\do
4380 {\@citea\def\@citea{], [}%
4381 \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
4382 \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
4383 \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
4386 {Citation `\@citeb' on page \thepage \space undefined}}%
4387 {\hbox{\csname b@\@citeb\endcsname}}}}{#1}}
4389 % V1.6 we create hooks for the optional use of Donald Arseneau's
4390 % cite.sty package. cite.sty is "smart" and will notice that the
4391 % following format controls are already defined and will not
4392 % redefine them. The result will be the proper sorting of the
4393 % citation numbers and auto detection of 3 or more entry "ranges" -
4394 % all in IEEE style: [1], [2], [5]--[7], [12]
4395 % This also allows for an optional note, i.e., \cite[mynote]{..}.
4396 % If the \cite with note has more than one reference, the note will
4397 % be applied to the last of the listed references. It is generally
4398 % desired that if a note is given, only one reference is listed in
4400 % Thanks to Mr. Arseneau for providing the required format arguments
4401 % to produce the IEEE style.
4402 \def\citepunct{], [}
4405 % V1.7 default to using same font for urls made by url.sty
4406 \AtBeginDocument{\csname url@samestyle\endcsname}
4408 % V1.6 class files should always provide these
4409 \def\newblock{\hskip .11em\@plus.33em\@minus.07em}
4410 \let\@openbib@code\@empty
4411 % V1.8b article.cls is now providing these too
4412 % we do not use \@mkboth, nor alter the page style
4413 \newenvironment{theindex}
4419 \twocolumn[\section*{\indexname}]%
4421 \parskip\z@ \@plus .3\p@\relax
4425 {\if@restonecol\onecolumn\else\clearpage\fi}
4426 \newcommand\@idxitem{\par\hangindent 40\p@}
4427 \newcommand\subitem{\@idxitem \hspace*{20\p@}}
4428 \newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
4429 \newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
4433 % Provide support for the control entries of IEEEtran.bst V1.00 and later.
4434 % V1.7 optional argument allows for a different aux file to be specified in
4435 % order to handle multiple bibliographies. For example, with multibib.sty:
4436 % \newcites{sec}{Secondary Literature}
4437 % \bstctlcite[@auxoutsec]{BSTcontrolhak}
4438 \def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
4439 \def\@bstctlcite[#1]#2{\@bsphack
4440 \@for\@citeb:=#2\do{%
4441 \edef\@citeb{\expandafter\@firstofone\@citeb}%
4442 \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
4445 % \IEEEnoauxwrite{} allows for citations that do not add to or affect
4446 % the order of the existing citation list. Can be useful for \cite
4448 \DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax
4451 #1\relax\relax\relax\relax\relax
4454 #1\relax\relax\relax\relax\relax
4457 % V1.6 provide a way for a user to execute a command just before
4458 % a given reference number - used to insert a \newpage to balance
4459 % the columns on the last page
4460 \edef\@IEEEtriggerrefnum{0} % the default of zero means that
4461 % the command is not executed
4462 \def\@IEEEtriggercmd{\newpage}
4464 % allow the user to alter the triggered command
4465 \long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}}
4467 % allow user a way to specify the reference number just before the
4468 % command is executed
4469 \def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1%
4470 \edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}%
4472 % trigger command at the given reference
4473 \def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax%
4474 \advance\@IEEEtrantmpcountA by -1\relax%
4475 \ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi}
4478 \def\@biblabel#1{[#1]}
4480 % compsoc journals and conferences left align the reference numbers
4481 \@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}}
4483 % controls bib item spacing
4484 \def\IEEEbibitemsep{0pt plus .5pt}
4486 \@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}}
4489 \def\thebibliography#1{\section*{\refname}%
4490 \addcontentsline{toc}{section}{\refname}%
4491 % V1.6 add some rubber space here and provide a command trigger
4492 \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip%
4493 \list{\@biblabel{\@arabic\c@enumiv}}%
4494 {\settowidth\labelwidth{\@biblabel{#1}}%
4495 \leftmargin\labelwidth
4496 \advance\leftmargin\labelsep\relax
4497 \itemsep \IEEEbibitemsep\relax
4498 \usecounter{enumiv}%
4499 \let\p@enumiv\@empty
4500 \renewcommand\theenumiv{\@arabic\c@enumiv}}%
4501 \let\@IEEElatexbibitem\bibitem%
4502 \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}%
4503 \def\newblock{\hskip .11em plus .33em minus .07em}%
4505 % \sloppy\clubpenalty4000\widowpenalty4000%
4506 % by adding the \interlinepenalty here, we make it more
4507 % difficult, but not impossible, for LaTeX to break within a reference.
4508 % The IEEE almost never breaks a reference (but they do it more often with
4509 % technotes). You may get an underfull vbox warning around the bibliography,
4510 % but the final result will be much more like what the IEEE will publish.
4512 \ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100%
4513 \else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi%
4514 \sfcode`\.=1000\relax}
4515 \let\endthebibliography=\endlist
4520 % TITLE PAGE COMMANDS
4523 % \IEEEmembership is used to produce the sublargesize italic font used to indicate author
4524 % IEEE membership. compsoc uses a large size sans slant font
4525 \def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}}
4528 % \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation.
4529 % When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote
4530 % symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{}
4531 % reverts to using lower case roman numerals, so it cannot overflow. Do note that you
4532 % cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote
4533 % symbols will have been turned off to prevent \thanks from creating footnote marks.
4534 % \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical
4535 % height - this allows for a more compact line packing, but the user must ensure that
4536 % the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding
4537 % with the text above.
4538 % V1.7 make this a robust command
4539 % V1.8 transmag uses an arabic author affiliation symbol
4540 \ifCLASSOPTIONtransmag
4541 \DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}}
4543 \DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or%
4544 \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger%
4545 \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}}
4549 % FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS
4551 % The default font styles for the author name and affiliation blocks (confmode)
4552 \def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize}
4553 \def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize}
4554 % The default if the user does not use an author block
4555 \def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize}
4557 % adjustment spacing from title (or special paper notice) to author name blocks (confmode)
4559 \def\@IEEEauthorblockconfadjspace{-0.25em}
4560 % compsoc conferences need more space here
4561 \@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}}
4563 % spacing between name and affiliation blocks (confmode)
4564 % This can be negative.
4565 % The IEEE doesn't want any added spacing here, but I will leave these
4566 % controls in place in case they ever change their mind.
4567 % Personally, I like 0.75ex.
4568 %\def\@IEEEauthorblockNtopspace{0.75ex}
4569 %\def\@IEEEauthorblockAtopspace{0.75ex}
4570 \def\@IEEEauthorblockNtopspace{0.0ex}
4571 \def\@IEEEauthorblockAtopspace{0.0ex}
4572 \ifCLASSOPTIONtransmag
4573 % transmag uses one line of space above first affiliation block
4574 \def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip}
4577 % baseline spacing within name and affiliation blocks (confmode)
4578 % must be positive, spacings below certain values will make
4579 % the position of line of text sensitive to the contents of the
4580 % line above it i.e., whether or not the prior line has descenders,
4581 % subscripts, etc. For this reason it is a good idea to keep
4583 \def\@IEEEauthorblockNinterlinespace{2.6ex}
4584 \def\@IEEEauthorblockAinterlinespace{2.75ex}
4586 % This tracks the required strut size.
4587 % See the \@IEEEauthorhalign command for the actual default value used.
4588 \def\@IEEEauthorblockXinterlinespace{2.7ex}
4590 % variables to retain font size and style across groups
4591 % values given here have no effect as they will be overwritten later
4592 \gdef\@IEEESAVESTATEfontsize{10}
4593 \gdef\@IEEESAVESTATEfontbaselineskip{12}
4594 \gdef\@IEEESAVESTATEfontencoding{OT1}
4595 \gdef\@IEEESAVESTATEfontfamily{ptm}
4596 \gdef\@IEEESAVESTATEfontseries{m}
4597 \gdef\@IEEESAVESTATEfontshape{n}
4599 % saves the current font attributes
4600 \def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size%
4601 \global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip%
4602 \global\let\@IEEESAVESTATEfontencoding\f@encoding%
4603 \global\let\@IEEESAVESTATEfontfamily\f@family%
4604 \global\let\@IEEESAVESTATEfontseries\f@series%
4605 \global\let\@IEEESAVESTATEfontshape\f@shape}
4607 % restores the saved font attributes
4608 \def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}%
4609 \fontencoding{\@IEEESAVESTATEfontencoding}%
4610 \fontfamily{\@IEEESAVESTATEfontfamily}%
4611 \fontseries{\@IEEESAVESTATEfontseries}%
4612 \fontshape{\@IEEESAVESTATEfontshape}%
4616 % variable to indicate if the current block is the first block in the column
4617 \newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse
4620 % the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace
4621 % we use this technique to have complete manual control over the spacing of the lines
4622 % within the halign environment.
4623 % We set the below baseline portion at 30%, the above
4624 % baseline portion at 70% of the total length.
4625 % Responds to changes in the document's \baselinestretch
4626 \def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace%
4627 \@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA%
4628 \rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}}
4631 % blocks to hold the authors' names and affilations.
4632 % Makes formatting easy for conferences
4634 % use real definitions in conference mode
4636 \def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style
4637 \gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row
4638 % the \expandafter hides the \cr in conditional tex, see the array.sty docs
4639 % for details, probably not needed here as the \cr is in a macro
4640 % do a spacer row if needed
4641 \if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi
4642 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column
4643 %restore the correct strut value
4644 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}%
4645 % input the author names
4647 % end the row if the user did not already
4649 % spacer row for names
4650 \def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}}
4653 \def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style
4654 \gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row
4655 % the \expandafter hides the \cr in conditional tex, see the array.sty docs
4656 % for details, probably not needed here as the \cr is in a macro
4657 % do a spacer row if needed
4658 \if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi
4659 \global\@IEEEprevauthorblockincoltrue% we now have a block in this column
4660 %restore the correct strut value
4661 \gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}%
4662 % input the author affiliations
4664 % end the row if the user did not already
4666 % V1.8 transmag does not use any additional affiliation spacing after the first author
4667 \ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi}
4669 % spacer row for affiliations
4670 \def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}}
4673 % allow papers to compile even if author blocks are used in modes other
4674 % than conference or peerreviewca. For such cases, we provide dummy blocks.
4675 \ifCLASSOPTIONconference
4677 \ifCLASSOPTIONpeerreviewca\else
4678 % not conference, peerreviewca or transmag mode
4679 \ifCLASSOPTIONtransmag\else
4680 \def\IEEEauthorblockN#1{#1}%
4681 \def\IEEEauthorblockA#1{#1}%
4688 % we provide our own halign so as not to have to depend on tabular
4689 \def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style
4690 \lineskip=0pt\relax% disable line spacing
4691 \lineskiplimit=0pt\relax%
4692 \baselineskip=0pt\relax%
4693 \@IEEEcurfontSAVE% save the current font
4694 \mathsurround\z@\relax% no extra spacing around math
4695 \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one
4696 \tabskip=0pt\relax% no column spacing
4697 \everycr{}% ensure no problems here
4698 \@IEEEprevauthorblockincolfalse% no author blocks yet
4699 \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space
4700 \vtop\bgroup%vtop box
4701 \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax
4702 \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr}
4704 % ensure last line, exit from halign, close vbox
4705 \def\end@IEEEauthorhalign{\crcr\egroup\egroup}
4707 % handle bogus star form
4708 \def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}}
4710 % test and setup the optional argument to \\[]
4711 \def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip}
4713 % end the line and do the optional spacer
4714 \def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}}
4718 % flag to prevent multiple \and warning messages
4719 \newif\if@IEEEWARNand
4722 % if in conference or peerreviewca modes, we support the use of \and as \author is a
4723 % tabular environment, otherwise we warn the user that \and is invalid
4724 % outside of conference or peerreviewca modes.
4725 \def\and{\relax} % provide a bogus \and that we will then override
4727 \renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only
4728 when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse}
4730 \ifCLASSOPTIONconference%
4731 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}%
4733 \ifCLASSOPTIONpeerreviewca
4734 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}%
4736 % V1.8 transmag uses conference author format
4737 \ifCLASSOPTIONtransmag
4738 \renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}%
4741 % page clearing command
4742 % based on LaTeX2e's \cleardoublepage, but allows different page styles
4743 % for the inserted blank pages
4744 \def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else
4745 \hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi}
4747 % V1.8b hooks to allow adjustment of space above title
4748 \def\IEEEtitletopspace{0.5\baselineskip}
4749 % an added extra amount to allow for adjustment/offset
4750 \def\IEEEtitletopspaceextra{0pt}
4752 % user command to invoke the title page
4753 \def\maketitle{\par%
4756 \def\thefootnote{}% the \thanks{} mark type is empty
4757 \def\footnotemark{}% and kill space from \thanks within author
4758 \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well.
4759 \footnotesize% equal spacing between thanks lines
4760 \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info
4761 % V1.7 disable \thanks note indention for compsoc
4762 \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}%
4764 \ifCLASSOPTIONpeerreview
4765 \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
4766 \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks%
4769 \ifCLASSOPTIONtechnote%
4770 \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
4772 \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]%
4775 \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext%
4777 \thispagestyle{IEEEtitlepagestyle}\@thanks%
4779 % pullup page for pubid if used.
4781 \enlargethispage{-\@IEEEpubidpullup}%
4784 \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax
4786 % v1.6b do not clear these as we will need the title again for peer review papers
4787 % \gdef\@author{}\gdef\@title{}%
4791 % V1.8 parbox to format \@IEEEtitleabstractindextext
4792 \long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}}
4793 % V1.8 compsoc is partial width
4794 \ifCLASSOPTIONcompsoc
4795 % comparison with proofs suggests it's in the range of 92.1-92.3%
4796 \long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}}
4799 % formats the Title, authors names, affiliations and special paper notice
4800 % THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional
4801 % spaces to enter the definition - use % at the end of each line
4802 \def\@maketitle{\newpage
4803 \bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering%
4804 \ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes
4805 {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author
4806 \@IEEEspecialpapernotice\par}\relax
4807 \else% not a technote
4808 \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip
4809 \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax
4810 \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par%
4811 % V1.6 handle \author differently if in conference mode
4812 \ifCLASSOPTIONconference%
4813 {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace%
4814 \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax
4815 \else% peerreviewca, peerreview or journal
4816 \ifCLASSOPTIONpeerreviewca
4817 % peerreviewca handles author names just like conference mode
4818 {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace%
4819 \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par
4820 {\@IEEEcompsoconly{\vskip 1.5em\relax
4821 \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill
4822 \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax
4823 \else% journal, peerreview or transmag
4824 \ifCLASSOPTIONtransmag
4825 % transmag also handles author names just like conference mode
4826 % it also uses \@IEEEtitleabstractindextex, but with one line less
4827 % space above, and one more below
4828 {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace%
4829 \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par
4830 {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax
4831 \else% journal or peerreview
4832 {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par
4833 {\@IEEEcompsoconly{\vskip 1.5em\relax
4834 \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill
4835 \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax
4839 \fi\par\addvspace{0.5\baselineskip}\egroup}
4842 % V1.7 Computer Society "diamond line" which follows index terms for nonconference papers
4843 % V1.8a full width diamond line for single column use
4844 \def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak
4845 \raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak
4846 \hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax}
4847 % V1.8a narrower width diamond line for double column use
4848 \def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak
4849 \raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak
4850 \hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax}
4851 % V1.8a bare core without rules to base a last resort on for very narrow linewidths
4852 \def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak
4853 \raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak
4854 \hspace{7.5pt}\nobreak\mbox{}\relax}
4856 % V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths.
4857 % Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column)
4858 % if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column)
4859 % if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth
4860 \def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax
4861 \ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax
4863 \settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax
4864 \ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax
4866 \settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax
4867 \@IEEEtrantmpdimenB=\linewidth\relax
4868 \addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax
4869 \vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax
4873 % V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def
4874 % We also need to trigger the one-shot footnote rule
4875 \def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue}
4878 \long\def\thanks#1{\footnotemark
4879 \protected@xdef\@thanks{\@thanks
4880 \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape
4881 \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}}
4885 % V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par.
4886 \long\def\author#1{\gdef\@author{#1}}
4889 % in addition to setting up IEEEitemize, we need to remove a baselineskip space above and
4890 % below it because \list's \pars introduce blank lines because of the footnote struts.
4891 \def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}%
4892 \setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}%
4893 \setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax}
4896 % flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item
4897 \newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse
4899 \ifCLASSOPTIONcompsoc
4900 % V1.7 compsoc bullet item \thanks
4901 % also, we need to redefine this to destroy the argument in \IEEEquantizevspace
4902 \long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark
4903 \protected@xdef\@thanks{\@thanks
4904 \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule
4905 {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax
4906 \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}}
4907 \DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item}
4909 % non-compsoc, allow for dual compilation via rerouting to normal \thanks
4910 \long\def\IEEEcompsocitemizethanks#1{\thanks{#1}}
4911 % redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[]
4912 \DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}%
4913 {\@IEEEthanksswallowoptionalarg[\relax]}}
4914 % be sure and break only after first item, be sure and ignore spaces after optional argument
4915 \def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break
4916 \indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces}
4920 % V1.6b define the \IEEEpeerreviewmaketitle as needed
4921 \ifCLASSOPTIONpeerreview
4922 \def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}%
4923 \ifCLASSOPTIONtwocolumn
4924 \twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}]
4926 \newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip
4928 \thispagestyle{IEEEtitlepagestyle}}
4930 % \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected
4931 \def\IEEEpeerreviewmaketitle{\relax}
4934 % peerreview formats the repeated title like the title in journal papers.
4935 \def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}%
4936 \normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par
4937 \par\addvspace{0.5\baselineskip}\egroup}
4942 % this is a static rubber spacer between the title/authors and the main text
4943 % used for single column text, or when the title appears in the first column
4944 % of two column text (technotes).
4945 \def\@IEEEstatictitlevskip{{\normalfont\normalsize
4946 % adjust spacing to next text
4947 % v1.6b handle peer review papers
4948 \ifCLASSOPTIONpeerreview
4949 % for peer review papers, the same value is used for both title pages
4950 % regardless of the other paper modes
4951 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip
4953 \ifCLASSOPTIONconference% conference
4954 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip%
4956 \ifCLASSOPTIONtechnote% technote
4957 \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip%
4958 \else% journal uses more space
4959 \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip%
4965 % set the nominal and minimum values for the quantized title spacer
4966 % the quantization algorithm will not allow the spacer size to
4967 % become less than \@IEEEMINtitlevspace - instead it will be lengthened
4968 % default to journal values
4969 \def\@IEEENORMtitlevspace{2.5\baselineskip}
4970 \def\@IEEEMINtitlevspace{2\baselineskip}
4971 % conferences and technotes need tighter spacing
4972 \ifCLASSOPTIONconference% conference
4973 \def\@IEEENORMtitlevspace{1\baselineskip}
4974 \def\@IEEEMINtitlevspace{0.75\baselineskip}
4976 \ifCLASSOPTIONtechnote% technote
4977 \def\@IEEENORMtitlevspace{1\baselineskip}
4978 \def\@IEEEMINtitlevspace{0.75\baselineskip}
4983 \def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}}
4984 % \IEEEquantizevspace[output dimen register]{object}[object decl]
4985 % {top baselineskip}
4986 % [offset][prevdepth][lineskip limit][lineskip]
4987 % {unit height}{nominal vspace}{minimum vspace}
4989 % Calculates and creates the vspace needed to make the combined height with
4990 % the given object an integer multiple of the given unit height. This command
4991 % is more general than the older \@IEEEdynamictitlevspace it replaces.
4993 % The star form has no effect at present, but is reserved for future use.
4995 % If the optional argument [output dimen register] is given, the calculated
4996 % vspace height is stored in the given output dimen (or skip) register
4997 % and no other action is taken, otherwise the object followed by a vspace*
4998 % of the appropriate height is evaluated/output.
5000 % The optional object decl (declarations) is code that is evaluated just
5001 % before the object's height is evaluated. Its intented purpose is to allow
5002 % for the alteration or disabling of code within the object during internal
5003 % height evaluation (e.g., \long\def\thanks#1{\relax} ).
5004 % This special code is not invoked if/when the object is rendered at the end.
5006 % The nominal vspace is the target value of the added vspace and the minimum
5007 % vspace is the lower allowed limit. The vspacer will be the value that achieves
5008 % integral overall height, in terms of the given unit height, that is closest
5009 % to the nominal vspace and that is not less than the specified minimum vspace.
5011 % The line spacing algorithm of TeX is somewhat involved and requires special
5012 % care with regard to the first line of a vertical list (which is indicated
5013 % when \prevdepth is -1000pt or less). top baselineskip specifies the
5014 % baselineskip or topskip used prior to the object. If the height of the
5015 % first line of the object is greater than the given top baselineskip, then
5016 % the top baselineskip is subtracted from the height of the first line and
5017 % that difference is considered along with the rest of the object height
5018 % (because the object will be shifted down by an amount =
5019 % top line height - top baselineskip). Otherwise, the height of the first line
5020 % of the object is ignored as far as the calculations are concerned.
5021 % This algorithm is adequate for objects that appear at the top of a page
5022 % (e.g., titles) where \topskip spacing is used.
5024 % However, as explained on page 78 of the TeXbook, interline spacing is more
5025 % complex when \baselineskip is being used (indicated by \prevdepth >
5026 % -1000pt). The four optional parameters offset, prevdepth, lineskip limit and
5027 % lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and
5028 % \lineskip, respectively, if they are omitted.
5030 % The prevdepth is the depth of the line before the object, the lineskip limit
5031 % specifies how close the top of the object can come to the bottom of the
5032 % previous line before \baselineskip is ignored and \lineskip is inserted
5033 % between the object and the line above it. Lineskip does not come into
5034 % play unless the first line of the object is high enough to "get too close"
5035 % (as specified by lineskiplimit) to the line before it. The the prevdepth,
5036 % lineskip limit, and lineskip optional parameters are not needed for the
5037 % first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier
5038 % \topskip spacing rules are in effect.
5040 % Offset is a manual adjustment that is added to the height calculations of
5041 % object irrespective of the value of \prevdepth. It is useful when the top
5042 % baselineskip will result in a noninteger unit height object placement even
5043 % if the object itself has integral height. e.g., a footnotesize baselineskip
5044 % is used before the object, thus an offset of, say -3pt, can be given as a
5047 % Common combinations of these parameters include:
5049 % top baselineskip: (and default values for offset, prevdepth, etc.)
5050 % \topskip % for objects that appear at the top of a page
5051 % \maxdimen % always ignore the height of the top line
5052 % 0pt % always consider any positive height of the top line
5054 % for objects to appear inline in normal text:
5055 % top baselineskip = \baselineskip
5057 % set prevdepth = -1000pt and top baselineskip = 0pt to consider the
5058 % overall height of the object without any other external skip
5061 \newif\if@IEEEquantizevspacestarform % flag to indicate star form
5062 \newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used
5063 % Use our own private registers because the object could contain a
5064 % structure that uses the existing tmp scratch pad registers
5065 \newdimen\@IEEEquantizeheightA
5066 \newdimen\@IEEEquantizeheightB
5067 \newdimen\@IEEEquantizeheightC
5068 \newdimen\@IEEEquantizeprevdepth % need to save this early as can change
5069 \newcount\@IEEEquantizemultiple
5070 \newbox\@IEEEquantizeboxA
5073 \def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}}
5076 \long\def\@@IEEEquantizevspace[#1]#2{\relax
5078 % #1 optional output dimen register
5080 \edef\@IEEEquantizeoutdimenreg{#1}\relax
5081 % allow for object specifications that contain parameters
5082 \@IEEEtrantmptoksA={#2}\relax
5083 \long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax
5084 \@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}}
5086 \long\def\@@@IEEEquantizevspace[#1]#2{\relax
5088 % [#1] optional object decl, is \relax if not given by user
5089 % #2 top baselineskip
5090 % allow for object decl specifications that have parameters
5091 \@IEEEtrantmptoksA={#1}\relax
5092 \long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax
5093 \edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace}
5095 % acquire optional argument set and store
5096 % [offset][prevdepth][lineskip limit][lineskip]
5097 \def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}}
5098 \def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}}
5099 \def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}}
5100 \def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}}
5101 \def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace}
5104 \def\@ixIEEEquantizevspace#1#2#3{\relax
5105 \edef\@IEEEquantizeunitheight{#1}\relax
5106 \edef\@IEEEquantizenomvspace{#2}\relax
5107 \edef\@IEEEquantizeminvspace{#3}\relax
5108 % \@IEEEquantizeoutdimenreg
5109 % \@IEEEquantizeobject
5110 % \@IEEEquantizeobjectdecl
5111 % \@IEEEquantizetopbaselineskip
5112 % \@IEEEquantizeoffset
5113 % \@IEEEquantizeprevdepth
5114 % \@IEEEquantizelineskiplimit
5115 % \@IEEEquantizelineskip
5116 % \@IEEEquantizeunitheight
5117 % \@IEEEquantizenomvspace
5118 % \@IEEEquantizeminvspace
5119 % get overall height of object
5120 \setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax
5121 \@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax
5122 % get height of first line of object
5123 \setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax
5124 \@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax
5125 \ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect
5126 % lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit,
5127 % otherwise the baselineskip rule is in effect and the height of the first line does not matter at all.
5128 \@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax
5129 \advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax
5130 \advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation
5131 \ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax
5132 % lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the
5133 % baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip
5134 \advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax
5135 \advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax
5136 \advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax
5138 % height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit
5139 % standard baselineskip rules are in effect, so don't consider height of first line
5140 \advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax
5143 \else % prevdepth <= -1000pt, simplier \topskip type rules in effect
5144 \ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip
5145 % height of top line (already included in the total height) in excess of
5146 % baselineskip is the amount it will be downshifted
5147 \advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax
5149 % height of first line is irrelevant, remove it
5150 \advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax
5152 \fi % prevdepth <= -1000pt
5154 % adjust height for any manual offset
5155 \advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax
5156 % add in nominal spacer
5157 \advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax
5158 % check for nonzero unitheight
5159 \@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax
5160 \ifnum\@IEEEquantizeheightB=0\relax
5161 \@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}%
5162 {Division by zero is not allowed.}
5163 \@IEEEquantizeheightB=10pt\relax
5165 % get integer number of lines
5166 \@IEEEquantizemultiple=\@IEEEquantizeheightA\relax
5167 \divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax
5168 % set A to contain the excess height over the \@IEEEquantizemultiple of lines
5169 % A = height - multiple*unitheight
5170 \@IEEEquantizeheightC\@IEEEquantizeheightB\relax
5171 \multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax
5172 \advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax
5173 % set B to contain the height short of \@IEEEquantizemultiple+1 of lines
5174 % B = unitheight - A
5175 \advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax
5176 % choose A or B based on which is closer
5177 \@IEEEquantizeheightC\@IEEEquantizenomvspace\relax
5178 \ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax
5179 % C = nomvspace - A, go with lower
5180 \advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax
5182 % C = nomvspace + B, go with upper
5183 \advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax
5185 % if violate lower bound, use next integer bound
5186 \ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax
5187 % A + B = unitheight
5188 \advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax
5189 \advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax
5191 % export object and spacer outside of group
5192 \global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax
5193 \global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax
5195 \if@IEEEquantizevspaceuseoutdimenreg
5196 \@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax
5198 \@IEEEquantizeobjectout\relax
5199 \vskip\@IEEEquantizeheightC\relax
5203 % user command to disable all global assignments, possible use within object decl
5204 \def\IEEEquantizedisableglobal{\let\global\relax
5207 % user command to allow for the disabling of \thanks and other commands, possible use within object decl
5208 \def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax
5209 \long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}}
5216 % we allow the user access to the last part of the title area
5217 % useful in emergencies such as when a different spacing is needed
5218 % This text is NOT compensated for in the dynamic sizer.
5219 \let\@IEEEaftertitletext=\relax
5220 \long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}}
5223 % V1.7 provide a way for users to enter abstract and keywords
5224 % into the onecolumn title are. This text is compensated for
5225 % in the dynamic sizer.
5226 \let\@IEEEtitleabstractindextext=\relax
5227 \long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}}
5229 % V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if
5230 % not in compsoc or transmag journal mode - this way abstract and keywords
5231 % can still be placed in their conventional position if not in those modes.
5232 \def\IEEEdisplaynontitleabstractindextext{%
5233 % display for all conference formats
5234 \ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax
5235 \else% non-conferences
5236 % V1.8a display for all technotes
5237 \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax
5238 % V1.8a add diamond line after abstract and index terms for compsoc technotes
5239 \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax
5240 \else % non-conferences and non-technotes
5241 \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag
5243 \ifCLASSOPTIONtransmag
5244 \else% not compsoc journal nor transmag journal
5245 \@IEEEtitleabstractindextext\relax
5252 % command to allow alteration of baselinestretch, but only if the current
5253 % baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing.
5254 \def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont
5255 \global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip%
5256 \def\baselinestretch{#1}\selectfont\fi\relax}
5259 % abstract and keywords are in \small, except
5260 % for 9pt docs in which they are in \footnotesize
5261 % Because 9pt docs use an 8pt footnotesize, \small
5262 % becomes a rather awkward 8.5pt
5263 \def\@IEEEabskeysecsize{\small}
5264 \ifx\CLASSOPTIONpt\@IEEEptsizenine
5265 \def\@IEEEabskeysecsize{\footnotesize}
5268 % compsoc journals use \footnotesize, compsoc conferences use normalsize
5269 \@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}}
5270 \@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}}
5273 % V1.6 have abstract and keywords strip leading spaces, pars and newlines
5274 % so that spacing is more tightly controlled.
5275 \def\abstract{\normalfont
5277 \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax
5279 \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize
5280 \fi\@IEEEgobbleleadPARNLSP}
5281 % V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in
5282 % conference mode (the heading already has this much above it)
5283 \def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi
5284 \normalfont\normalsize}
5286 \def\IEEEkeywords{\normalfont
5288 \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax
5290 \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize
5291 \fi\@IEEEgobbleleadPARNLSP}
5292 \def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi
5293 \par\if@twocolumn\else\endquotation\fi%
5294 \normalfont\normalsize}
5296 % V1.7 compsoc keywords index terms
5297 \ifCLASSOPTIONcompsoc
5298 \ifCLASSOPTIONconference% compsoc conference
5299 \def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries
5301 \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax
5303 \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize%
5304 \fi\@IEEEgobbleleadPARNLSP}
5305 \def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries
5307 \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent
5308 \textit{\IEEEkeywordsname}---\relax
5310 \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize%
5311 \fi\@IEEEgobbleleadPARNLSP}
5312 \else% compsoc not conference
5313 \def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily
5315 \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax
5317 \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize%
5318 \fi\@IEEEgobbleleadPARNLSP}
5319 \def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily
5321 \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent
5322 \textbf{\IEEEkeywordsname}---\relax
5324 \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize%
5325 \fi\@IEEEgobbleleadPARNLSP}
5329 % V1.8 transmag keywords index terms
5330 % no abstract name, use indentation
5331 \ifCLASSOPTIONtransmag
5332 \def\abstract{\normalfont\parindent 1em\relax
5334 \@IEEEabskeysecsize\bfseries\indent
5336 \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize
5337 \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize
5338 \fi\@IEEEgobbleleadPARNLSP}
5340 \def\IEEEkeywords{\normalfont\parindent 1em\relax
5342 \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax
5344 \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize
5345 \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize
5346 \fi\@IEEEgobbleleadPARNLSP}
5351 % gobbles all leading \, \\ and \par, upon finding first token that
5352 % is not a \ , \\ or a \par, it ceases and returns that token
5354 % used to strip leading \, \\ and \par from the input
5355 % so that such things in the beginning of an environment will not
5356 % affect the formatting of the text
5357 \long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0%
5358 \let\@IEEEgobbleleadPARNLSPtoken#1%
5359 \let\@IEEEgobbleleadPARtoken=\par%
5360 \let\@IEEEgobbleleadNLtoken=\\%
5361 \let\@IEEEgobbleleadSPtoken=\ %
5362 \def\@IEEEgobbleleadSPMACRO{\ }%
5363 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken%
5364 \let\@IEEEswallowthistoken=1%
5366 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken%
5367 \let\@IEEEswallowthistoken=1%
5369 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken%
5370 \let\@IEEEswallowthistoken=1%
5372 % a control space will come in as a macro
5373 % when it is the last one on a line
5374 \ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO%
5375 \let\@IEEEswallowthistoken=1%
5377 % if we have to swallow this token, do so and taste the next one
5378 % else spit it out and stop gobbling
5379 \ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else%
5380 \let\@IEEEnextgobbleleadPARNLSP=#1\fi%
5381 \@IEEEnextgobbleleadPARNLSP}%
5386 % TITLING OF SECTIONS
5387 \def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are
5388 % part of the paragraphs), need little bit more than a single space
5389 % spacing from section number to title
5390 % compsoc conferences use regular period/space punctuation
5391 \ifCLASSOPTIONcompsoc
5392 \ifCLASSOPTIONconference
5393 \def\@IEEEsectpunct{.\ }
5397 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax}
5399 \ifCLASSOPTIONcompsoc
5400 % compsoc journals need extra spacing
5401 \ifCLASSOPTIONconference\else
5402 \def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax}
5405 %v1.7 put {} after #6 to allow for some types of user font control
5406 %and use \@@par rather than \par
5407 \def\@sect#1#2#3#4#5#6[#7]#8{%
5408 \ifnum #2>\c@secnumdepth
5411 \refstepcounter{#1}%
5412 % load section label and spacer into \@svsec
5413 \protected@edef\@svsec{\@seccntformat{#1}\relax}%
5415 \@tempskipa #5\relax
5416 \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high
5417 \begingroup #6{\relax% or low level heading
5418 \noindent % subsections are NOT indented
5419 % print top level headings. \@svsec is label, #8 is heading title
5420 % The IEEE does not block indent the section title text, it flows like normal
5421 {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}%
5423 \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else
5424 \protect\numberline{\csname the#1\endcsname}\fi#7}%
5425 \else % printout low level headings
5426 % svsechd seems to swallow the trailing space, protect it with \mbox{}
5427 % got rid of sectionmark stuff
5428 \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}%
5429 \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else
5430 \protect\numberline{\csname the#1\endcsname}\fi#7}}%
5436 %v1.7 put {} after #4 to allow for some types of user font control
5437 %and use \@@par rather than \par
5438 \def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
5439 \ifdim \@tempskipa>\z@
5440 %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup
5441 % The IEEE does not block indent the section title text, it flows like normal
5442 \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup
5443 % svsechd swallows the trailing space, protect it with \mbox{}
5444 \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi
5448 %% SECTION heading spacing and font
5450 % arguments are: #1 - sectiontype name
5451 % (for \@sect) #2 - section level
5452 % #3 - section heading indent
5453 % #4 - top separation (absolute value used, neg indicates not to indent main text)
5454 % If negative, make stretch parts negative too!
5455 % #5 - (absolute value used) positive: bottom separation after heading,
5456 % negative: amount to indent main text after heading
5457 % Both #4 and #5 negative means to indent main text and use negative top separation
5459 % You've got to have \normalfont\normalsize in the font specs below to prevent
5460 % trouble when you do something like:
5461 % \section{Note}{\ttfamily TT-TEXT} is known to ...
5462 % The IEEE sometimes REALLY stretches the area before a section
5463 % heading by up to about 0.5in. However, it may not be a good
5464 % idea to let LaTeX have quite this much rubber.
5465 \ifCLASSOPTIONconference%
5466 % The IEEE wants section heading spacing to decrease for conference mode
5467 \def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}%
5468 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}%
5469 \def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}%
5470 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}%
5471 \else % for journals
5472 \def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex
5473 {0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}%
5474 \def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}%
5475 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}%
5478 % for both journals and conferences
5479 % decided to put in a little rubber above the section, might help somebody
5480 \def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}%
5481 {0ex}{\normalfont\normalsize\itshape}}%
5482 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}%
5483 {0ex}{\normalfont\normalsize\itshape}}%
5487 \ifCLASSOPTIONcompsoc
5488 \ifCLASSOPTIONconference
5489 % compsoc conference
5490 \def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
5491 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}%
5492 \def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
5493 {1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}%
5494 \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}%
5495 {0ex}{\normalfont\normalsize\bfseries}}%
5496 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}%
5497 {0ex}{\normalfont\normalsize}}%
5498 \else% compsoc journals
5499 % use negative top separation as compsoc journals do not indent paragraphs after section titles
5500 \def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}%
5501 {0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}%
5502 % Note that subsection and smaller may not be correct for the Computer Society,
5503 % I have to look up an example.
5504 \def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}%
5505 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}%
5506 \def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}%
5507 {0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}%
5508 \def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}%
5509 {0ex}{\normalfont\normalsize}}%
5513 \ifCLASSOPTIONtransmag
5514 \def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}%
5515 {0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}%
5516 \def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}%
5517 {0.1ex}{\normalfont\normalsize\itshape}}%
5521 % V1.8a provide for a raised line Introduction section for use with Computer
5522 % Society papers. We have to remove any spacing glue after the section
5523 % heading and then remove the blank line for the new paragraph after it.
5524 % LaTeX's section handler alters \everypar and we need to propogate those
5525 % changes outside of the \parbox lest there be spacing problems at the top
5526 % of the next section.
5527 \def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par}
5532 % "box" symbols at end of proofs
5533 \def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box
5534 % V1.6 some journals use an open box instead that will just fit around a closed one
5535 \def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}}
5536 \ifCLASSOPTIONcompsoc
5537 \def\IEEEQED{\IEEEQEDopen} % default to open for compsoc
5539 \def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed
5542 %V1.8 flag to indicate if QED symbol is to be shown
5543 \newif\if@IEEEQEDshow \@IEEEQEDshowtrue
5544 \def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired
5545 % v1.7 name change to avoid namespace collision with amsthm. Also add support
5546 % for an optional argument.
5547 \def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}}
5548 \def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }}
5549 \def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par}
5550 % qedhere for equation environments, similar to AMS \qedhere
5551 \def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax
5552 \let\veqno\relax\hbox{\IEEEQED}}
5553 % IEEE style qedhere for IEEEeqnarray and other environments
5554 \def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED}
5555 % command to disable QED at end of IEEEproof
5556 \def\IEEEQEDoff{\global\@IEEEQEDshowfalse}
5559 %\itemindent is set to \z@ by list, so define new temporary variable
5560 \newdimen\@IEEEtmpitemindent
5562 \ifCLASSOPTIONcompsoc
5563 % V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation
5564 % V1.8 allow long theorem names to break across lines.
5565 % Thanks to Miquel Payaro for reporting this.
5566 \def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax
5567 \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip
5568 \rmfamily\trivlist\hangindent\parindent%
5569 \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax}
5570 \def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax
5571 \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip
5572 \rmfamily\trivlist\hangindent\parindent%
5573 % V1.6 The IEEE is back to using () around theorem names which are also in italics
5574 % Thanks to Christian Peel for reporting this.
5575 \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax}
5576 % V1.7 remove bogus \unskip that caused equations in theorems to collide with
5578 \def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip}
5583 % V1.8 allow long theorem names to break across lines.
5584 % Thanks to Miquel Payaro for reporting this.
5585 \def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist%
5586 \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax}
5587 \def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist%
5588 % V1.6 The IEEE is back to using () around theorem names which are also in italics
5589 % Thanks to Christian Peel for reporting this.
5590 \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax}
5591 % V1.7 remove bogus \unskip that caused equations in theorems to collide with
5593 \def\@endtheorem{\endtrivlist}
5599 % display command for the section the theorem is in - so that \thesection
5600 % is not used as this will be in Roman numerals when we want arabic.
5601 % LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number
5602 % (second part) display and \def\@thmcountersep{.} as a separator.
5603 % V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection
5604 % to allow \appendix(ices} to override as needed.
5606 % special handler for sections, allows appendix(ices) to override
5607 \gdef\@IEEEthmcounterinsection#1{\arabic{#1}}
5609 \edef\@IEEEstringsection{section}
5611 % redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection
5612 % if section in_counter is used
5613 \def\@xnthm#1#2[#3]{%
5614 \expandafter\@ifdefinable\csname #1\endcsname
5615 {\@definecounter{#1}\@newctr{#1}[#3]%
5616 \edef\@IEEEstringtmp{#3}
5617 \ifx\@IEEEstringtmp\@IEEEstringsection
5618 \expandafter\xdef\csname the#1\endcsname{%
5619 \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep
5622 \expandafter\xdef\csname the#1\endcsname{%
5623 \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
5626 \global\@namedef{#1}{\@thm{#1}{#2}}%
5627 \global\@namedef{end#1}{\@endtheorem}}}
5631 %% SET UP THE DEFAULT PAGESTYLE
5632 \pagestyle{headings}
5633 \pagenumbering{arabic}
5635 % normally the page counter starts at 1
5636 \setcounter{page}{1}
5637 % however, for peerreview the cover sheet is page 0 or page -1
5638 % (for duplex printing)
5639 \ifCLASSOPTIONpeerreview
5641 \setcounter{page}{-1}
5643 \setcounter{page}{0}
5647 % standard book class behavior - let bottom line float up and down as
5648 % needed when single sided
5649 \ifCLASSOPTIONtwoside\else\raggedbottom\fi
5650 % if two column - turn on twocolumn, allow word spacings to stretch more and
5651 % enforce a rigid position for the last lines
5652 \ifCLASSOPTIONtwocolumn
5653 % the peer review option delays invoking twocolumn
5654 \ifCLASSOPTIONpeerreview\else
5664 % \APPENDIX and \APPENDICES definitions
5666 % This is the \@ifmtarg command from the LaTeX ifmtarg package
5667 % by Peter Wilson (CUA) and Donald Arseneau
5668 % \@ifmtarg is used to determine if an argument to a command
5669 % is present or not.
5671 % \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}}
5672 % \@ifmtarg is used with our redefined \section command if
5673 % \appendices is invoked.
5674 % The command \section will behave slightly differently depending
5675 % on whether the user specifies a title:
5676 % \section{My appendix title}
5679 % This way, we can eliminate the blank lines where the title
5680 % would be, and the unneeded : after Appendix in the table of
5684 \long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil}
5685 \long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4}
5687 % end of \@ifmtarg defs
5691 % command that allows the one time saving of the original definition
5692 % of section to \@IEEEappendixsavesection for \appendix or \appendices
5693 % we don't save \section here as it may be redefined later by other
5694 % packages (hyperref.sty, etc.)
5695 \def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section
5696 \let\@IEEEsaveoriginalsectiononce\relax}
5698 % neat trick to grab and process the argument from \section{argument}
5699 % we process differently if the user invoked \section{} with no
5701 % note we reroute the call to the old \section*
5702 \def\@IEEEprocessthesectionargument#1{%
5704 \@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}%
5705 \addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{%
5706 \@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}%
5707 \addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}}
5709 % we use this if the user calls \section{} after
5710 % \appendix-- which has no meaning. So, we ignore the
5711 % command and its argument. Then, warn the user.
5712 \def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless
5713 \protect\section\space in Appendix (line \the\inputlineno).}}
5716 % remember \thesection forms will be displayed in \ref calls
5717 % and in the Table of Contents.
5718 % The \sectiondis form is used in the actual heading itself
5720 % appendix command for one single appendix
5721 % normally has no heading. However, if you want a
5722 % heading, you can do so via the optional argument:
5723 % \appendix[Optional Heading]
5724 \def\appendix{\relax}
5725 \renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par
5726 % v1.6 keep hyperref's identifiers unique
5727 \gdef\theHsection{Appendix.A}%
5728 % v1.6 adjust hyperref's string name for the section
5729 \xdef\Hy@chapapp{appendix}%
5730 \setcounter{section}{0}%
5731 \setcounter{subsection}{0}%
5732 \setcounter{subsubsection}{0}%
5733 \setcounter{paragraph}{0}%
5734 \gdef\thesection{A}%
5735 \gdef\thesectiondis{}%
5736 \gdef\thesubsection{\Alph{subsection}}%
5737 \gdef\@IEEEthmcounterinsection##1{A}
5738 \refstepcounter{section}% update the \ref counter
5739 \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}%
5740 \addcontentsline{toc}{section}{\appendixname}}{%
5741 \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}%
5742 \addcontentsline{toc}{section}{\appendixname: #1}}%
5743 % redefine \section command for appendix
5744 % leave \section* as is
5745 \def\section{\@ifstar{\@IEEEappendixsavesection*}{%
5746 \@IEEEdestroythesectionargument}}% throw out the argument
5747 % of the normal form
5752 % appendices command for multiple appendices
5753 % user then calls \section with an argument (possibly empty) to
5754 % declare the individual appendices
5755 \def\appendices{\@IEEEsaveoriginalsectiononce\par
5756 % v1.6 keep hyperref's identifiers unique
5757 \gdef\theHsection{Appendix.\Alph{section}}%
5758 % v1.6 adjust hyperref's string name for the section
5759 \xdef\Hy@chapapp{appendix}%
5760 \setcounter{section}{-1}% we want \refstepcounter to use section 0
5761 \setcounter{subsection}{0}%
5762 \setcounter{subsubsection}{0}%
5763 \setcounter{paragraph}{0}%
5764 \ifCLASSOPTIONromanappendices%
5765 \gdef\thesection{\Roman{section}}%
5766 \gdef\thesectiondis{\Roman{section}}%
5767 \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}%
5768 \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}}
5770 \gdef\thesection{\Alph{section}}%
5771 \gdef\thesectiondis{\Alph{section}}%
5772 \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}%
5773 \gdef\@IEEEthmcounterinsection##1{\Alph{##1}}
5775 \refstepcounter{section}% update the \ref counter
5776 \setcounter{section}{0}% NEXT \section will be the FIRST appendix
5777 % redefine \section command for appendices
5778 % leave \section* as is
5779 \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form
5780 \refstepcounter{section}% or is a new section so,
5781 \@IEEEprocessthesectionargument}}% process the argument
5782 % of the normal form
5787 % V1.7 compoc uses nonbold drop cap and small caps word style
5788 \ifCLASSOPTIONcompsoc
5789 \def\IEEEPARstartFONTSTYLE{\mdseries}
5790 \def\IEEEPARstartWORDFONTSTYLE{\scshape}
5791 \def\IEEEPARstartWORDCAPSTYLE{\relax}
5796 % Definition for the big two line drop cap letter at the beginning of the
5797 % first paragraph of journal papers. The first argument is the first letter
5798 % of the first word, the second argument is the remaining letters of the
5799 % first word which will be rendered in upper case.
5800 % In V1.6 this has been completely rewritten to:
5802 % 1. no longer have problems when the user begins an environment
5803 % within the paragraph that uses \IEEEPARstart.
5804 % 2. auto-detect and use the current font family
5805 % 3. revise handling of the space at the end of the first word so that
5806 % interword glue will now work as normal.
5807 % 4. produce correctly aligned edges for the (two) indented lines.
5809 % We generalize things via control macros - playing with these is fun too.
5811 % V1.7 added more control macros to make it easy for IEEEtrantools.sty users
5812 % to change the font style.
5814 % the number of lines that are indented to clear it
5815 % may need to increase if using decenders
5816 \providecommand{\IEEEPARstartDROPLINES}{2}
5817 % minimum number of lines left on a page to allow a \@IEEEPARstart
5818 % Does not take into consideration rubber shrink, so it tends to
5819 % be overly cautious
5820 \providecommand{\IEEEPARstartMINPAGELINES}{2}
5821 % V1.7 the height of the drop cap is adjusted to match the height of this text
5822 % in the current font (when \IEEEPARstart is called).
5823 \providecommand{\IEEEPARstartHEIGHTTEXT}{T}
5824 % the depth the letter is lowered below the baseline
5825 % the height (and size) of the letter is determined by the sum
5826 % of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current
5827 % font. It is a good idea to set this value in terms of the baselineskip
5828 % so that it can respond to changes therein.
5829 \providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip}
5830 % V1.7 the font the drop cap will be rendered in,
5831 % can take zero or one argument.
5832 \providecommand{\IEEEPARstartFONTSTYLE}{\bfseries}
5833 % V1.7 any additional, non-font related commands needed to modify
5834 % the drop cap letter, can take zero or one argument.
5835 \providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase}
5836 % V1.7 the font that will be used to render the rest of the word,
5837 % can take zero or one argument.
5838 \providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax}
5839 % V1.7 any additional, non-font related commands needed to modify
5840 % the rest of the word, can take zero or one argument.
5841 \providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase}
5842 % This is the horizontal separation distance from the drop letter to the main text.
5843 % Lengths that depend on the font (e.g., ex, em, etc.) will be referenced
5844 % to the font that is active when \IEEEPARstart is called.
5845 \providecommand{\IEEEPARstartSEP}{0.15em}
5846 % V1.7 horizontal offset applied to the left of the drop cap.
5847 \providecommand{\IEEEPARstartHOFFSET}{0em}
5848 % V1.7 Italic correction command applied at the end of the drop cap.
5849 \providecommand{\IEEEPARstartITLCORRECT}{\/}
5851 % width of the letter output, set globally. Can be used in \IEEEPARstartSEP
5852 % or \IEEEPARstartHOFFSET, but not the height lengths.
5853 \newdimen\IEEEPARstartletwidth
5854 \IEEEPARstartletwidth 0pt\relax
5856 % definition of \IEEEPARstart
5857 % THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES
5859 % The token \@IEEEPARstartfont will be globally defined after the first use
5860 % of \IEEEPARstart and will be a font command which creates the big letter
5861 % The first argument is the first letter of the first word and the second
5862 % argument is the rest of the first word(s).
5863 \def\IEEEPARstart#1#2{\par{%
5864 % if this page does not have enough space, break it and lets start
5866 \@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}%
5867 % V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE
5868 % which uses command \leavevmode which causes an unwanted \indent to be issued
5870 % calculate the desired height of the big letter
5871 % it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font
5872 % down to \IEEEPARstartDROPDEPTH below the current baseline
5873 \settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}%
5874 \addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}%
5875 % extract the name of the current font in bold
5876 % and place it in \@IEEEPARstartFONTNAME
5877 \def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}%
5878 {\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}%
5879 \xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}%
5880 % define a font based on this name with a point size equal to the desired
5881 % height of the drop letter
5882 \font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax%
5883 % save this value as a counter (integer) value (sp points)
5884 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenA%
5885 % now get the height of the actual letter produced by this font size
5886 \settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}%
5887 % If something bogus happens like the first argument is empty or the
5888 % current font is strange, do not allow a zero height.
5889 \ifdim\@IEEEtrantmpdimenB=0pt\relax%
5890 \typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}%
5891 \typeout{ Forcing the drop letter font size to 10pt.}%
5892 \@IEEEtrantmpdimenB=10pt%
5894 % and store it as a counter
5895 \@IEEEtrantmpcountB=\@IEEEtrantmpdimenB%
5896 % Since a font size doesn't exactly correspond to the height of the capital
5897 % letters in that font, the actual height of the letter, \@IEEEtrantmpcountB,
5898 % will be less than that desired, \@IEEEtrantmpcountA
5899 % we need to raise the font size, \@IEEEtrantmpdimenA
5900 % by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB
5901 % But, TeX doesn't have floating point division, so we have to use integer
5902 % division. Hence the use of the counters.
5903 % We need to reduce the denominator so that the loss of the remainder will
5904 % have minimal affect on the accuracy of the result
5905 \divide\@IEEEtrantmpcountB by 200%
5906 \divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB%
5907 % Then reequalize things when we use TeX's ability to multiply by
5908 % floating point values
5909 \@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA%
5910 \multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA%
5911 % \@IEEEPARstartfont is globaly set to the calculated font of the big letter
5912 % We need to carry this out of the local calculation area to to create the
5914 \global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB%
5915 % Now set \@IEEEtrantmpdimenA to the width of the big letter
5916 % We need to carry this out of the local calculation area to set the
5918 \settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont
5919 \IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}%
5920 % end of the isolated calculation environment
5921 \global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax%
5922 % add in the extra clearance we want
5923 \advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax%
5924 % add in the optional offset
5925 \advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax%
5926 % V1.7 don't allow negative offsets to produce negative hanging indents
5927 \@IEEEtrantmpdimenB\@IEEEtrantmpdimenA
5928 \ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi
5929 % \@IEEEtrantmpdimenA has the width of the big letter plus the
5930 % separation space and \@IEEEPARstartfont is the font we need to use
5931 % Now, we make the letter and issue the hanging indent command
5932 % The letter is placed in a box of zero width and height so that other
5933 % text won't be displaced by it.
5934 \hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES%
5935 \makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}%
5936 \raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}%
5937 \@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}%
5938 \hspace{\IEEEPARstartSEP}}}%
5939 {\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}}
5944 % determines if the space remaining on a given page is equal to or greater
5945 % than the specified space of argument one
5946 % if not, execute argument two (only if the remaining space is greater than zero)
5947 % and issue a \newpage
5949 % example: \@IEEEtranneedspace{2in}{\vfill}
5951 % Does not take into consideration rubber shrinkage, so it tends to
5952 % be overly cautious
5953 % Based on an example posted by Donald Arseneau
5954 % Note this macro uses \@IEEEtrantmpdimenB internally for calculations,
5955 % so DO NOT PASS \@IEEEtrantmpdimenB to this routine
5956 % if you need a dimen register, import with \@IEEEtrantmpdimenA instead
5957 \def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable
5958 \@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left
5959 \ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left
5960 \ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi%
5966 % IEEEbiography ENVIRONMENT
5967 % Allows user to enter biography leaving place for picture (adapts to font size)
5968 % As of V1.5, a new optional argument allows you to have a real graphic!
5969 % V1.5 and later also fixes the "colliding biographies" which could happen when a
5970 % biography's text was shorter than the space for the photo.
5972 % V1.6 prevent multiple biographies from making multiple TOC entries
5973 \newif\if@IEEEbiographyTOCentrynotmade
5974 \global\@IEEEbiographyTOCentrynotmadetrue
5976 % biography counter so hyperref can jump directly to the biographies
5977 % and not just the previous section
5978 \newcounter{IEEEbiography}
5979 \setcounter{IEEEbiography}{0}
5982 \def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area
5983 \def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area
5984 % area cleared for photo
5985 \def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area
5986 \def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area
5987 % actual depth will be a multiple of
5988 % \baselineskip, rounded up
5989 \def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography
5991 \newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize%
5992 \unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500%
5993 % we need enough space to support the hanging indent
5994 % the nominal value of the spacer
5995 % and one extra line for good measure
5996 \@IEEEtrantmpdimenA=\@IEEEBIOhangdepth%
5997 \advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN%
5998 \advance\@IEEEtrantmpdimenA by 1\baselineskip%
5999 % if this page does not have enough space, break it and lets start
6001 \@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}%
6002 % nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill
6003 \vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip%
6004 % the default box for where the photo goes
6005 \def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{%
6006 \begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}%
6008 % detect if the optional argument was supplied, this requires the
6009 % \@ifmtarg command as defined in the appendix section above
6010 % and if so, override the default box with what they want
6011 \@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}%
6014 \end{minipage}}}}% end if optional argument supplied
6015 % Make an entry into the table of contents only if we have not done so before
6016 \if@IEEEbiographyTOCentrynotmade%
6017 % link labels to the biography counter so hyperref will jump
6018 % to the biography, not the previous section
6019 \setcounter{IEEEbiography}{-1}%
6020 \refstepcounter{IEEEbiography}%
6021 \addcontentsline{toc}{section}{Biographies}%
6022 \global\@IEEEbiographyTOCentrynotmadefalse%
6024 % one more biography
6025 \refstepcounter{IEEEbiography}%
6026 % Make an entry for this name into the table of contents
6027 \addcontentsline{toc}{subsection}{#2}%
6028 % V1.6 properly handle if a new paragraph should occur while the
6029 % hanging indent is still active. Do this by redefining \par so
6030 % that it will not start a new paragraph. (But it will appear to the
6031 % user as if it did.) Also, strip any leading pars, newlines, or spaces.
6032 \let\@IEEEBIOORGparCMD=\par% save the original \par command
6033 \edef\par{\hfil\break\indent}% the new \par will not be a "real" \par
6034 \settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box
6035 \@IEEEtrantmpdimenB=\@IEEEBIOhangdepth%
6036 \@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth
6037 \divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth
6038 \advance\@IEEEtrantmpcountA by 1% ensure we overestimate
6039 % set the hanging indent
6040 \hangindent\@IEEEBIOhangwidth%
6041 \hangafter-\@IEEEtrantmpcountA%
6042 % reference the top of the photo area to the top of a capital T
6043 \settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}%
6044 % set the photo box, give it zero width and height so as not to disturb anything
6045 \noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{%
6046 \raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}%
6047 % now place the author name and begin the bio text
6048 \noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par%
6049 % 7/2001 V1.5 detect when the biography text is shorter than the photo area
6050 % and pad the unused area - preventing a collision from the next biography entry
6052 \ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo
6053 \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad
6054 \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line
6055 \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding
6056 \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA%
6057 \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut
6064 % added biography without a photo environment
6065 \newenvironment{IEEEbiographynophoto}[1]{%
6066 % Make an entry into the table of contents only if we have not done so before
6067 \if@IEEEbiographyTOCentrynotmade%
6068 % link labels to the biography counter so hyperref will jump
6069 % to the biography, not the previous section
6070 \setcounter{IEEEbiography}{-1}%
6071 \refstepcounter{IEEEbiography}%
6072 \addcontentsline{toc}{section}{Biographies}%
6073 \global\@IEEEbiographyTOCentrynotmadefalse%
6075 % one more biography
6076 \refstepcounter{IEEEbiography}%
6077 % Make an entry for this name into the table of contents
6078 \addcontentsline{toc}{subsection}{#1}%
6079 \normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500%
6080 \vskip 4\baselineskip plus 1fil minus 0\baselineskip%
6082 \noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont}
6085 % provide the user with some old font commands
6086 % got this from article.cls
6087 \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
6088 \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
6089 \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
6090 \DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
6091 \DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
6092 \DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
6093 \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
6094 \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
6095 \DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
6098 % SPECIAL PAPER NOTICE COMMANDS
6100 % holds the special notice text
6101 \def\@IEEEspecialpapernotice{\relax}
6103 % for special papers, like invited papers, the user can do:
6104 % \IEEEspecialpapernotice{(Invited Paper)} before \maketitle
6105 \def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference%
6106 \def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}%
6108 \def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}%
6114 % PUBLISHER ID COMMANDS
6115 % to insert a publisher's ID footer
6116 % V1.6 \IEEEpubid has been changed so that the change in page size and style
6117 % occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle
6118 % use \IEEEpubidadjcol as before - in the second column of the title page
6119 % These changes allow \maketitle to take the reduced page height into
6120 % consideration when dynamically setting the space between the author
6121 % names and the maintext.
6123 % the amount the main text is pulled up to make room for the
6124 % publisher's ID footer
6125 % The IEEE uses about 1.3\baselineskip for journals,
6126 % dynamic title spacing will clean up the fraction
6127 \def\@IEEEpubidpullup{1.3\baselineskip}
6128 \ifCLASSOPTIONtechnote
6129 % for technotes it must be an integer of baselineskip as there can be no
6130 % dynamic title spacing for two column mode technotes (the title is in the
6131 % in first column) and we should maintain an integer number of lines in the
6133 % There are some examples (such as older issues of "Transactions on
6134 % Information Theory") in which the IEEE really pulls the text off the ID for
6135 % technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip
6137 \def\@IEEEpubidpullup{2\baselineskip}
6140 % V1.7 compsoc does not use a pullup
6141 \ifCLASSOPTIONcompsoc
6142 \def\@IEEEpubidpullup{0pt}
6146 \def\@IEEEpubid{\relax}
6148 % flag so \maketitle can tell if \IEEEpubid was called
6149 \newif\if@IEEEusingpubid
6150 \global\@IEEEusingpubidfalse
6151 % issue this command in the page to have the ID at the bottom
6152 % V1.6 use before \maketitle
6153 \def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue}
6156 % command which will pull up (shorten) the column it is executed in
6157 % to make room for the publisher ID. Place in the second column of
6158 % the title page when using \IEEEpubid
6159 % Is smart enough not to do anything when in single column text or
6160 % if the user hasn't called \IEEEpubid
6161 % currently needed in for the second column of a page with the
6162 % publisher ID. If not needed in future releases, please provide this
6163 % command and define it as \relax for backward compatibility
6164 % v1.6b do not allow command to operate if the peer review option has been
6165 % selected because \IEEEpubidadjcol will not be on the cover page.
6166 % V1.7 do nothing if compsoc
6167 \def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else
6168 \if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi}
6170 % Special thanks to Peter Wilson, Daniel Luecking, and the other
6171 % gurus at comp.text.tex, for helping me to understand how best to
6172 % implement the IEEEpubid command in LaTeX.
6176 %% Lockout some commands under various conditions
6178 % general purpose bit bucket
6179 \newsavebox{\@IEEEtranrubishbin}
6181 % flags to prevent multiple warning messages
6182 \newif\if@IEEEWARNthanks
6183 \newif\if@IEEEWARNIEEEPARstart
6184 \newif\if@IEEEWARNIEEEbiography
6185 \newif\if@IEEEWARNIEEEbiographynophoto
6186 \newif\if@IEEEWARNIEEEpubid
6187 \newif\if@IEEEWARNIEEEpubidadjcol
6188 \newif\if@IEEEWARNIEEEmembership
6189 \newif\if@IEEEWARNIEEEaftertitletext
6190 \@IEEEWARNthankstrue
6191 \@IEEEWARNIEEEPARstarttrue
6192 \@IEEEWARNIEEEbiographytrue
6193 \@IEEEWARNIEEEbiographynophototrue
6194 \@IEEEWARNIEEEpubidtrue
6195 \@IEEEWARNIEEEpubidadjcoltrue
6196 \@IEEEWARNIEEEmembershiptrue
6197 \@IEEEWARNIEEEaftertitletexttrue
6200 %% Lockout some commands when in various modes, but allow them to be restored if needed
6202 % save commands which might be locked out
6203 % so that the user can later restore them if needed
6204 \let\@IEEESAVECMDthanks\thanks
6205 \let\@IEEESAVECMDIEEEPARstart\IEEEPARstart
6206 \let\@IEEESAVECMDIEEEbiography\IEEEbiography
6207 \let\@IEEESAVECMDendIEEEbiography\endIEEEbiography
6208 \let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto
6209 \let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto
6210 \let\@IEEESAVECMDIEEEpubid\IEEEpubid
6211 \let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol
6212 \let\@IEEESAVECMDIEEEmembership\IEEEmembership
6213 \let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext
6216 % disable \IEEEPARstart when in draft mode
6217 % This may have originally been done because the pre-V1.6 drop letter
6218 % algorithm had problems with a non-unity baselinestretch
6219 % At any rate, it seems too formal to have a drop letter in a draft
6221 \ifCLASSOPTIONdraftcls
6222 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart
6223 is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
6226 \ifCLASSOPTIONtechnote
6227 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart
6228 is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
6232 % lockout unneeded commands when in conference mode
6233 \ifCLASSOPTIONconference
6234 % when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid,
6235 % \IEEEmembership and \IEEEaftertitletext will all swallow their given text.
6236 % \IEEEPARstart will output a normal character instead
6237 % warn the user about these commands only once to prevent the console screen
6238 % from filling up with redundant messages
6239 \def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks
6240 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse}
6241 \def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart
6242 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse}
6245 % LaTeX treats environments and commands with optional arguments differently.
6246 % the actual ("internal") command is stored as \\commandname
6247 % (accessed via \csname\string\commandname\endcsname )
6248 % the "external" command \commandname is a macro with code to determine
6249 % whether or not the optional argument is presented and to provide the
6250 % default if it is absent. So, in order to save and restore such a command
6251 % we would have to save and restore \\commandname as well. But, if LaTeX
6252 % ever changes the way it names the internal names, the trick would break.
6253 % Instead let us just define a new environment so that the internal
6254 % name can be left undisturbed.
6255 \newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography
6256 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse%
6257 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax}
6258 % and make biography point to our bogus biography
6259 \let\IEEEbiography=\@IEEEbogusbiography
6260 \let\endIEEEbiography=\end@IEEEbogusbiography
6262 \renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto
6263 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse%
6264 \setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax}
6266 \def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid
6267 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse}
6268 \def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol
6269 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse}
6270 \def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership
6271 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse}
6272 \def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext
6273 is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse}
6277 % provide a way to restore the commands that are locked out
6278 \def\IEEEoverridecommandlockouts{%
6279 \typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}%
6280 \let\thanks\@IEEESAVECMDthanks%
6281 \let\IEEEPARstart\@IEEESAVECMDIEEEPARstart%
6282 \let\IEEEbiography\@IEEESAVECMDIEEEbiography%
6283 \let\endIEEEbiography\@IEEESAVECMDendIEEEbiography%
6284 \let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto%
6285 \let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto%
6286 \let\IEEEpubid\@IEEESAVECMDIEEEpubid%
6287 \let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol%
6288 \let\IEEEmembership\@IEEESAVECMDIEEEmembership%
6289 \let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext}
6293 % need a backslash character for typeout output
6294 {\catcode`\|=0 \catcode`\\=12
6295 |xdef|@IEEEbackslash{\}}
6298 % hook to allow easy disabling of all legacy warnings
6299 \def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno).
6300 Use \@IEEEbackslash #2 instead.}}
6303 % provide some legacy IEEEtran commands
6304 \def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext}
6305 \def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext}
6306 % provide some legacy IEEEtran environments
6309 % V1.8a no more support for these legacy commands
6310 %\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA}
6311 %\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN}
6312 %\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark}
6313 %\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart}
6314 %\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid}
6315 %\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol}
6316 %\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice}
6318 %\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords}
6319 %\def\endkeywords{\endIEEEkeywords}
6320 % V1.8 no more support for legacy IED list commands
6321 %\let\labelindent\IEEElabelindent
6322 %\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin}
6323 %\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth}
6324 %\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep}
6325 %\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc}
6326 %\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl}
6327 %\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr}
6328 % V1.8 no more support for QED and proof stuff
6329 %\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED}
6330 %\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed}
6331 %\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen}
6332 %\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}}
6333 % V1.8 no longer support biography or biographynophoto
6334 %\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography}
6335 %\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto}
6336 %\def\endbiography{\endIEEEbiography}
6337 %\def\endbiographynophoto{\endIEEEbiographynophoto}
6338 % V1.7 and later no longer supports \overrideIEEEmargins
6339 %\def\overrideIEEEmargins{%
6340 %\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}%
6341 %\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}}
6345 %%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%%