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