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