From 6cc1d05a1abff09121462dc8f0154437b2f0102a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Ke=C3=9Fler?= Date: Sat, 18 Sep 2021 10:37:47 +0200 Subject: [PATCH] remove IEEEtrantools --- ctan/IEEEtrantools.sty | 2799 ---------------------------------------- 1 file changed, 2799 deletions(-) delete mode 100644 ctan/IEEEtrantools.sty diff --git a/ctan/IEEEtrantools.sty b/ctan/IEEEtrantools.sty deleted file mode 100644 index e4a808c..0000000 --- a/ctan/IEEEtrantools.sty +++ /dev/null @@ -1,2799 +0,0 @@ -%% -%% IEEEtrantools.sty 2015/08/26 version V1.5 -%% -%% -%% This package provides several popular and unique commands from the -%% IEEEtran.cls class (version 1.8b) file. -%% -%% The provided commands include \IEEEPARstart, \IEEEitemize, \IEEEenumerate, -%% \IEEEdescription as well as the \IEEEeqnarray, \IEEEeqnarraybox family -%% of commands including support commands such as \IEEEstrut, the IEEEproof -%% environment and its support commands and the \IEEEauthorrefmark command. -%% Also provides the \bstctlcite command for the control entry types of -%% IEEEtran.bst V1.00 and later, as well as \IEEEnoauxwrite. -%% -%% IEEEtrantools.sty should not be used with IEEEtran.cls. -%% -%% Support sites: -%% http://www.michaelshell.org/tex/ieeetran/ -%% http://www.ctan.org/pkg/ieeetran -%% -%% -%% Copyright (c) 2002-2015 by Michael Shell -%% See: http://www.michaelshell.org/ -%% for current contact information. -%% -%%************************************************************************* -%% Legal Notice: -%% This code is offered as-is without any warranty either expressed or -%% implied; without even the implied warranty of MERCHANTABILITY or -%% FITNESS FOR A PARTICULAR PURPOSE! -%% User assumes all risk. -%% In no event shall the IEEE or any contributor to this code be liable for -%% any damages or losses, including, but not limited to, incidental, -%% consequential, or any other damages, resulting from the use or misuse -%% of any information contained here. -%% -%% All comments are the opinions of their respective authors and are not -%% necessarily endorsed by the IEEE. -%% -%% This work is distributed under the LaTeX Project Public License (LPPL) -%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, -%% distributed and modified. A copy of the LPPL, version 1.3, is included -%% in the base LaTeX documentation of all distributions of LaTeX released -%% 2003/12/01 or later. -%% Retain all contribution notices and credits. -%% ** Modified files should be clearly indicated as such, including ** -%% ** renaming them and changing author support contact information. ** -%% -%% File list of work: IEEEtrantools.sty, IEEEtrantools_doc.txt -%%************************************************************************* -%% -%% -%% -%% Available package options (e.g., \usepackage[redeflists]{IEEEtrantools} -%% -%% redeflists -%% Causes IEEEtrantools to redefine the standard itemize, enumerate and -%% description (IED) list environments to their IEEE versions. -%% IEEEitemize, IEEEenumerate and IEEEdescription remain available in any -%% case. This option may not be compatible with packages that alter the -%% standard IED list environments. -%% -%% -%%********************************************************************** - - -\ProvidesPackage{IEEEtrantools}[2015/08/26 V1.5 by Michael Shell] -\typeout{-- See the "IEEEtrantools_doc.txt" manual for usage information.} -\typeout{-- http://www.michaelshell.org/tex/ieeetran/tools/} -\NeedsTeXFormat{LaTeX2e} - - -% If \@IEEEeqnarray is detected, error. -{\@ifundefined{@IEEEeqnarray}{\relax}{% -\PackageError{IEEEtrantools}{The IEEEtrantools package is not for use\MessageBreak - with classes that already provide it}% - {Do not load IEEEtrantools - you don't need it.}% -}} - - -% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting -\def\@IEEEclspkgerror{\PackageError{IEEEtrantools}} - - -% define needed flags to indicate document options -\newif\if@IEEETOOLSredeflists -\global\@IEEETOOLSredeflistsfalse - - -% IEEEtran class scratch pad registers -% dimen -\newdimen\@IEEEtrantmpdimenA -\newdimen\@IEEEtrantmpdimenB -\newdimen\@IEEEtrantmpdimenC -% count -\newcount\@IEEEtrantmpcountA -\newcount\@IEEEtrantmpcountB -\newcount\@IEEEtrantmpcountC -% token list -\newtoks\@IEEEtrantmptoksA - - -% declare the options -\DeclareOption{redeflists}{\@IEEETOOLSredefliststrue} -% provide legacy support for retainorgcmds which does nothing now. -\DeclareOption{retainorgcmds}{\@IEEETOOLSredeflistsfalse} - -% get and process any supplied options -\ProcessOptions - - -% store the nominal value of jot -\newdimen\IEEEnormaljot -\IEEEnormaljot\jot\relax -% V1.4 allow for other packages that later change \jot -\AtBeginDocument{\IEEEnormaljot\jot\relax} - - - - -%% -- Command Argument Scanning Support Functions -- - -% Sets the category codes for punctuation to their normal values. -% For local use with argument scanning. -\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 -\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 -\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 -\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 -\catcode`\]=12 \catcode`\==12 \catcode`\|=12} -% Sets the category codes for numbers to their normal values. -% For local use with argument scanning. -\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 -\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 -\catcode`\8=12 \catcode`\9=12} -% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum -\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} - - -% usage: \@IEEEstripouterbraces*{} -% \@IEEEstripouterbraces fully expands its argument (which it then stores -% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing -% braces, and finally stores the result in the macro -% \@IEEEstrippedouterbraces. -% -% For example: -% \@IEEEstripouterbraces{{{{ab}c}}} -% results in: -% -% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} -% \@IEEEstrippedouterbraces ==> a macro containing {ab}c -% -% the *-star form,\@IEEEstripouterbraces*, does not expand the argument -% contents during processing -\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} - -\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax -% If the macro is unchanged after being acquired as a single delimited -% argument, we know we have one sequence of tokens without any enclosing -% braces. Loop until this is true. -\loop - \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER -\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg -\else - \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces -\repeat} - -\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} - - - -% usage: \@IEEEextractgroup*{} -% \@IEEEextractgroup fully expands its argument (which it then stores in -% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" -% of tokens to the macro \@IEEEextractedgroup. -% The remaining groups, if any, are stored in the macro -% \@IEEEextractedgroupremain. If the argument does not contain the requisite -% groups, the respective macros will be defined to be empty. -% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first -% outer grouping while \@IEEEextractedgroupremain retains even the outer -% grouping (if present) that originally identified it as a group. -% -% For example: -% \@IEEEextractgroup{{{ab}}{c{de}}} -% results in: -% -% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} -% \@IEEEextractedgroup ==> a macro containing {ab} -% \@IEEEextractedgroupremain ==> a macro containing {c{de}} -% -% The *-star form, \@IEEEextractgroup*, does not expand its argument -% contents during processing. -\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} - -\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax -% trap the case of an empty extracted group as this would cause problems with -% \@IEEEextractgroupremain's argument acquisition -\ifx\@IEEEextractgrouparg\@empty - \def\@IEEEextractedgroup{}\relax - \def\@IEEEextractedgroupremain{}\relax -\else - % We have to use some dirty tricks here. We want to insert {} around - % whatever remains after the first group so that TeX's argument scanner - % will preserve any originally enclosing braces as well as provide an - % empty argument to acquire even if there isn't a second group. - % In this first of two dirty tricks, we put a } at the end of the structure - % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow - % what would otherwise be an unbalanced macro definition for - % \@@IEEEextractgroup to be acceptable to it. - \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax -\fi} - -% In the second part of the dirty tricks, we insert a leading { right after -% the first group is acquired, but before the remainder is. Again, the -% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear -% during run time. -\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} - -\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} - - - -% usage: \@IEEEextracttoken*{} -% \@IEEEextracttoken fully expands its argument (which it then stores in -% \@IEEEextracttokenarg) via \edef and then the meaning of the first -% nonbrace (but including the empty group) token found is assigned via \let -% to \@IEEEextractedtoken as well as stored in the macro -% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during -% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, -% however their original relative brace nesting depths are not guaranteed to -% be preserved. -% If the argument is empty, or if a first nonbrace token does not exist (or -% is an empty group), \@IEEEextractedtoken will be \relax and -% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. -% -% For example: -% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} -% results in: -% -% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} -% \@IEEEextractedtoken ==> the letter a -% \@IEEEextractedtokenmacro ==> a macro containing a -% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g -% -% the *-star form, \@IEEEextracttoken*, does not expand its argument -% contents during processing. -\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} - -\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax -\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty -% if the macro is unchanged after being acquired as a single undelimited argument -% with anything after it being stripped off as a delimited argument -% we know we have one token without any enclosing braces. loop until this is true. -\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg -\loop - % trap case of an empty argument as this would cause a problem with - % \@@@IEEEextracttoken's first (nondelimited) argument acquisition - \ifx\@IEEEextracttokencurgroup\@empty - \def\@IEEEextractedtokenmacro{}\relax - \else - \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax - \fi - \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup - \else - \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro -\repeat -% we can safely do a \let= here because there should be at most one token -% the relax is needed to handle the case of no token found -\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} - -\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax -\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter -\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter -{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} - - - -% usage: \@IEEEextracttokengroups*{} -% \@IEEEextracttokengroups fully expands its argument (which it then stores -% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of -% tokens (with the outermost braces removed) to the macro -% \@IEEEextractedfirstgroup. -% The meaning of the first nonbrace (but including the empty group) token -% within this first group is assigned via \let to \@IEEEextractedfirsttoken -% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first -% nonbrace token does not exist (or is an empty group), these will be \relax -% and empty, respectively. Tokens that would otherwise be discarded during -% the acquisition of the first token in the first group are stored in -% \@IEEEextractedfirsttokensdiscarded, however their original relative brace -% nesting depths are not guaranteed to be preserved. -% The first group within this first group is stored in the macro -% \@IEEEextractedfirstfirstgroup. -% Likewise for the next group after the first: \@IEEEextractednextgroup, -% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, -% \@IEEEextractednextgroupfirsttokenmacro, and -% \@IEEEextractednextfirsttokensdiscarded. -% All tokens/groups after the first group, including any enclosing braces, -% are stored in the macro \@IEEEextractedafterfirstgroupremain which will -% be empty if none exist. -% -% For example: -% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} -% will result in: -% -% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} -% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} -% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} -% \@IEEEextractedfirsttoken ==> the letter a -% \@IEEEextractedfirsttokenmacro ==> a macro containing a -% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd -% \@IEEEextractedfirstfirstgroup ==> a macro containing ab -% \@IEEEextractednextgroup ==> a macro containing {ef}g -% \@IEEEextractednextfirsttoken ==> the letter e -% \@IEEEextractednextfirsttokenmacro ==> a macro containing e -% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg -% \@IEEEextractednextfirstgroup ==> a macro containing ef -% -% If given an empty argument, \@IEEEextractedfirsttoken and -% \@IEEEextractednextfirsttoken will be set to \relax -% and all the macros will be empty. -% the *-star form, \@IEEEextracttokengroups*, does not expand its argument -% contents during processing. -% -% Depends on: \@IEEEextractgroup, \@IEEEextracttoken -\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} -\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax -% begin extraction, these functions are safe with empty arguments -% first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax -\let\@IEEEextractedfirstgroup\@IEEEextractedgroup -\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain -\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax -\let\@IEEEextractedfirsttoken\@IEEEextractedtoken -\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro -\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded -% first first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax -\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup -% next group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax -\let\@IEEEextractednextgroup\@IEEEextractedgroup -\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax -\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken -\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro -\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded -% next first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax -\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} - - -%% -%% -- End of Command Argument Scanning Support Functions -- - - - - -% -- page setup commands -- - -% The default sample text for calculating margins -\def\IEEEdefaultsampletext{\normalfont\normalsize gT} -\def\IEEEdefaultheadersampletext{\normalfont\normalsize T} -\def\IEEEdefaultfootersampletext{\normalfont\normalsize gT} - - - -% usage: \IEEEsettextwidth{inner margin}{outer margin} -% Sets \textwidth to allow the specified inner and outer margins -% for the current \paperwidth. -\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth -\@IEEEtrantmpdimenB#1\relax -\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\@IEEEtrantmpdimenB#2\relax -\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\textwidth\@IEEEtrantmpdimenA} - - - -% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} -% Sets \oddsidemargin and \evensidemargin to yield the specified margin -% of the given mode. -% The available modes are: -% i = inner margin -% o = outer margin -% c = centered, with the given offset -% a = adjust the margins using the given offset -% For the offsets, positive values increase the inner margin. -% \textwidth should be set properly for the given margins before calling this -% function. -\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax -\@IEEEextracttoken{#1}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax - \let\@IEEEextractedtoken=i\relax - \def\@IEEEextractedtokenmacro{i}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken c\relax - \oddsidemargin\paperwidth - \advance\oddsidemargin by -\textwidth - \divide\oddsidemargin by 2\relax - \advance\oddsidemargin by -1in\relax - \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken o\relax - \oddsidemargin\paperwidth - \advance\oddsidemargin by -\textwidth - \advance\oddsidemargin by -\@IEEEtrantmpdimenA - \advance\oddsidemargin by -1in\relax -\else - \if\@IEEEextractedtoken i\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `i'}% - {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% - \fi - \oddsidemargin\@IEEEtrantmpdimenA - \advance\oddsidemargin by -1in\relax -\fi\fi\fi -% odd and even side margins both mean "inner" for single sided pages -\evensidemargin\oddsidemargin -% but are mirrors of each other when twosided is in effect -\if@twoside - \evensidemargin\paperwidth - \advance\evensidemargin by -\textwidth - \advance\evensidemargin by -\oddsidemargin - % have to compensate for both the builtin 1in LaTex offset - % and the fact we already subtracted this offset from \oddsidemargin - \advance\evensidemargin -2in\relax -\fi} - - - -% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} -% Sets \textheight based on the specified top margin and bottom margin. -% Takes into consideration \paperheight, \topskip, and (by default) the -% the actual height and depth of the \IEEEdefaultsampletext text. -\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} -\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax - \@IEEEtrantmpdimenA #2\relax - \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin - \@IEEEtrantmpdimenA #3\relax - \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin - \advance \textheight by \topskip% add \topskip - % subtract off everything above the top, and below the bottom, baselines - \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance \textheight by -\@IEEEtrantmpdimenA - \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance \textheight by -\@IEEEtrantmpdimenA} - - - -\newdimen\IEEEquantizedlength -\IEEEquantizedlength 0sp\relax -\newdimen\IEEEquantizedlengthdiff -\IEEEquantizedlengthdiff 0sp\relax -\def\IEEEquantizedlengthint{0} - -% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} -% Sets the length \IEEEquantizedlength to be an integer multiple of the given -% (nonzero) base unit such that \IEEEquantizedlength approximates the given -% length. -% \IEEEquantizedlengthdiff is a length equal to the difference between the -% \IEEEquantizedlength and the given length. -% \IEEEquantizedlengthint is a macro containing the integer number of base units -% in \IEEEquantizedlength. -% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit -% The mode determines how \IEEEquantizedlength is quantized: -% d = always decrease (always round down \IEEEquantizeint) -% c = use the closest match -% i = always increase (always round up \IEEEquantizeint) -% In anycase, if the given length is already quantized, -% \IEEEquantizedlengthdiff will be set to zero. -\def\IEEEquantizelength#1#2#3{\begingroup -% work in isolation so as not to externally disturb the \@IEEEtrantmp -% variables -% load the argument values indirectly via \IEEEquantizedlengthdiff -% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, -% etc. in the arguments. we also will work with these as counters, -% i.e., in sp units -% A has the base unit -\IEEEquantizedlengthdiff #2\relax\relax\relax\relax -\@IEEEtrantmpcountA\IEEEquantizedlengthdiff -% B has the input length -\IEEEquantizedlengthdiff #3\relax\relax\relax\relax -\@IEEEtrantmpcountB\IEEEquantizedlengthdiff -\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax -\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax -% \@IEEEtrantmpcountC will have the quantized int -% \IEEEquantizedlength will have the quantized length -% \@IEEEtrantmpdimenC will have the quantized diff -% initialize them to zero as this is what will be -% exported if an error occurs -\@IEEEtrantmpcountC 0\relax -\IEEEquantizedlength 0sp\relax -\@IEEEtrantmpdimenC 0sp\relax -% extract mode -\@IEEEextracttoken{#1}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax - \let\@IEEEextractedtoken=d\relax - \def\@IEEEextractedtokenmacro{d}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% check for base unit is zero error -\ifnum\@IEEEtrantmpcountA=0\relax -\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax -\else% base unit is nonzero - % \@IEEEtrantmpcountC carries the number of integer units - % in the quantized length (integer length \ base) - \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax - \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax - % \IEEEquantizedlength has the (rounded down) quantized length - % = base * int - \IEEEquantizedlength\@IEEEtrantmpdimenA\relax - \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax - % \@IEEEtrantmpdimenC has the difference - % = quantized length - length - \@IEEEtrantmpdimenC\IEEEquantizedlength\relax - \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax - % trap special case of length being already quantized - % to avoid a roundup under i option - \ifdim\@IEEEtrantmpdimenC=0sp\relax - \else % length not is already quantized - % set dimenA to carry the upper quantized (absolute value) difference: - % quantizedlength + base - length - \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax - % set dimenB to carry the lower quantized (absolute value) difference: - % length - quantizedlength - \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax - % handle each mode - \if\@IEEEextractedtoken c\relax - % compare upper and lower amounts, select upper if lower > upper - \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax - % use upper - \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax - \advance\@IEEEtrantmpcountC by 1\relax - \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA - \else% <=. uselower - % no need to do anything for lower, use output values already setup - \fi - \else% not mode c - \if\@IEEEextractedtoken i\relax - % always round up under i mode - \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax - \advance\@IEEEtrantmpcountC by 1\relax - \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA - \else - \if\@IEEEextractedtoken d\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - Defaulting to `d'}% - {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax - \fi % if d - % no need to do anything for d, use output values already setup - \fi\fi % if i, c - \fi % if length is already quantized -\fi% if base unit is zero -% globally assign the results to macros we use here to escape the enclosing -% group without needing to call \global on any of the \@IEEEtrantmp variables. -% \@IEEEtrantmpcountC has the quantized int -% \IEEEquantizedlength has the quantized length -% \@IEEEtrantmpdimenC has the quantized diff -\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlength\relax -\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax -\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax -\endgroup -% locally assign the outputs here from the macros -\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax -\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax -\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} - - - -\newdimen\IEEEquantizedtextheightdiff -\IEEEquantizedtextheightdiff 0sp\relax - -% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} -% Sets \textheight to be an integer multiple of the current \baselineskip -% (or the optionally specified base unit) plus the first (\topskip) line. -% \IEEEquantizedtextheightdiff is a length equal to the difference between -% the new quantized and original \textheight. -% \IEEEquantizedtextheightlpc is a macro containing the integer number of -% lines per column under the quantized \textheight. i.e., -% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip -% The mode determines how \textheight is quantized: -% d = always decrease (always round down the number of lines per column) -% c = use the closest match -% i = always increase (always round up the number of lines per column) -% In anycase, if \textheight is already quantized, it will remain unchanged, -% and \IEEEquantizedtextheightdiff will be set to zero. -% Depends on: \IEEEquantizelength -\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} -\def\@IEEEquantizetextheight[#1]#2{\begingroup -% use our \IEEEquantizedtextheightdiff as a scratch pad -% we need to subtract off \topskip before quantization -\IEEEquantizedtextheightdiff\textheight -\advance\IEEEquantizedtextheightdiff by -\topskip\relax -\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} -% add back \topskip line -\advance\IEEEquantizedlength by \topskip -\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax -\advance\@IEEEtrantmpcountC by 1\relax -% globally assign the results to macros we use here to escape the enclosing -% group without needing to call \global on any of the \@IEEEtrantmp variables. -\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlength\relax -\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax -\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax -\endgroup -% locally assign the outputs here from the macros -\textheight\@IEEEquantizedtextheightmacro sp\relax -\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax -\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} - - - -% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} -% Sets \topmargin based on the specified vertical margin. -% Takes into consideration the base 1in offset, \headheight, \headsep, -% \topskip, and (by default) the the actual height (or, for the bottom, depth) -% of the \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin -% b = bottom margin -% c = vertically centered, with the given offset -% a = adjust the vertical margins using the given offset -% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset -% For the offsets, positive values increase the top margin. -% \headheight, \headsep, \topskip and \textheight should be set properly for the -% given margins before calling this function. -\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} -\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax -\@IEEEextracttoken{#2}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken q\relax - % we need to adjust by half the \IEEEquantizedtextheightdiff value - \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax - \divide\@IEEEtrantmpdimenB by 2\relax - % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin - % because \textheight has been lenghtened - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken c\relax - \topmargin\paperheight - \advance\topmargin by -\textheight - % \textheight includes \topskip, but we should not count topskip whitespace here, backout - \advance \topmargin by \topskip - \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \divide\topmargin by 2\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken b\relax - \topmargin\paperheight - \advance\topmargin by -\textheight - % \textheight includes \topskip, but we should not count topskip whitespace here, backout - \advance \topmargin by \topskip - \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \advance\topmargin by -\@IEEEtrantmpdimenA\relax -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax - \fi - \topmargin\@IEEEtrantmpdimenA\relax - \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by \@IEEEtrantmpdimenB\relax -\fi\fi % if t, b, c -% convert desired top margin into actual \topmargin -% this is not done for the q or a modes because they are only adjustments -\advance \topmargin by -\topskip -\advance \topmargin by -1in -\advance \topmargin by -\headheight -\advance \topmargin by -\headsep -\fi\fi % if q, a -} - - - -% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} -% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) -% based on the specified header margin. -% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) -% the actual height (or depth) of the \IEEEdefaultheadersampletext and -% \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin (top of the header text to the top of the page) -% b = bottom margin (bottom of the header text to the top of the main text) -% c = vertically centered between the main text and the top of the page, -% with the given offset -% a = adjust the vertical position using the given offset -% For the offsets, positive values move the header downward. -% \headheight, \headsep, \topskip and \topmargin should be set properly before -% calling this function. -\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} -\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} -\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax -\@IEEEextracttoken{#3}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - % No need to do anything here and can pass through the adjustment - % value as is. The end adjustment of \topmargin and \headsep will - % do all that is needed -\else -\if\@IEEEextractedtoken c\relax - % get the bottom margin - \@IEEEtrantmpdimenB\headsep\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \advance\@IEEEtrantmpdimenB by \topskip - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header bottom margin - % subtract from it the top header margin - \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin - \advance\@IEEEtrantmpdimenB by -\topmargin - \advance\@IEEEtrantmpdimenB by -\headheight - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins - % we need to adjust by half this amount to center the header - \divide\@IEEEtrantmpdimenB by 2\relax - % and add to offset - \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB -\else -\if\@IEEEextractedtoken b\relax - \@IEEEtrantmpdimenB\headsep\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \advance\@IEEEtrantmpdimenB by \topskip - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header bottom margin - % get the difference between the actual and the desired - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA - \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax - \fi - \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin - \advance\@IEEEtrantmpdimenB by \topmargin - \advance\@IEEEtrantmpdimenB by \headheight - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header top margin - % get the difference between the desired and the actual - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\fi\fi % if t, b, c -\fi % if a -% advance \topmargin by the needed amount and reduce \headsep by the same -% so as not to disturb the location of the main text -\advance\topmargin by \@IEEEtrantmpdimenA\relax -\advance\headsep by -\@IEEEtrantmpdimenA\relax -} - - - -% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} -% Adjusts \footskip based on the specified footer margin. -% Takes into consideration the base 1in offset, \paperheight, \headheight, -% \headsep, \textheight and (by default) the actual height (or depth) of the -% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin (top of the footer text to the bottom of the main text) -% b = bottom margin (bottom of the footer text to the bottom of page) -% c = vertically centered between the main text and the bottom of the page, -% with the given offset -% a = adjust the vertical position using the given offset -% For the offsets, positive values move the footer downward. -% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set -% properly before calling this function. -\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} -\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} -\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax -\@IEEEextracttoken{#3}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - % No need to do anything here and can pass through the adjustment - % value as is. The end adjustment of \footskip will do all that - % is needed -\else -\if\@IEEEextractedtoken c\relax - % calculate the bottom margin - \@IEEEtrantmpdimenB 1in\relax % system 1in offset - \advance\@IEEEtrantmpdimenB\topmargin\relax - \advance\@IEEEtrantmpdimenB\headheight\relax - \advance\@IEEEtrantmpdimenB\headsep\relax - \advance\@IEEEtrantmpdimenB\textheight\relax - \advance\@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB - \@IEEEtrantmpdimenB\paperheight - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin - % now subtract off the footer top margin - \advance\@IEEEtrantmpdimenB -\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the difference between the bottom - % and top footer margins - % our adjustment must be half this value to center the footer - \divide\@IEEEtrantmpdimenB by 2\relax - % add to the offset - \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB -\else -\if\@IEEEextractedtoken b\relax - % calculate the bottom margin - \@IEEEtrantmpdimenB 1in\relax % system 1in offset - \advance\@IEEEtrantmpdimenB\topmargin\relax - \advance\@IEEEtrantmpdimenB\headheight\relax - \advance\@IEEEtrantmpdimenB\headsep\relax - \advance\@IEEEtrantmpdimenB\textheight\relax - \advance\@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB - \@IEEEtrantmpdimenB\paperheight - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin - % get the difference between the actual and the desired - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA - \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax - \fi - \@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer top margin - % get the difference between the desired and the actual - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\fi\fi % if t, b, c -\fi % if a -% advance \footskip by the needed amount -\advance\footskip by \@IEEEtrantmpdimenA\relax -} - - -% -- End page setup commands -- - - - - -% Itemize, Enumerate and Description (IED) List Controls -% *************************** -% -% -% The IEEE seems to use at least two different values by -% which ITEMIZED list labels are indented to the right -% For The Journal of Lightwave Technology (JLT) and The Journal -% on Selected Areas in Communications (JSAC), they tend to use -% an indention equal to \parindent. For Transactions on Communications -% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. -% We'll provide both values here for you so that you can choose -% which one you like in your document using a command such as: -% setlength{\IEEEilabelindent}{\IEEEilabelindentB} -\newdimen\IEEEilabelindentA -\IEEEilabelindentA \parindent - -\newdimen\IEEEilabelindentB -\IEEEilabelindentB 1.3\parindent -% However, we'll default to using \parindent -% which makes more sense to me -\newdimen\IEEEilabelindent -\IEEEilabelindent \IEEEilabelindentA - - -% This controls the default amount the enumerated list labels -% are indented to the right. -% Normally, this is the same as the paragraph indention -\newdimen\IEEEelabelindent -\IEEEelabelindent \parindent - -% This controls the default amount the description list labels -% are indented to the right. -% Normally, this is the same as the paragraph indention -\newdimen\IEEEdlabelindent -\IEEEdlabelindent \parindent - -% This is the value actually used within the IED lists. -% The IED environments automatically set its value to -% one of the three values above, so global changes do -% not have any effect -\newdimen\IEEElabelindent -\IEEElabelindent \parindent - -% The actual amount labels will be indented is -% \IEEElabelindent multiplied by the factor below -% corresponding to the level of nesting depth -% This provides a means by which the user can -% alter the effective \IEEElabelindent for deeper -% levels -% There may not be such a thing as correct "standard IEEE" -% values. What the IEEE actually does may depend on the specific -% circumstances. -% The first list level almost always has full indention. -% The second levels I've seen have only 75% of the normal indentation -% Three level or greater nestings are very rare. I am guessing -% that they don't use any indentation. -\def\IEEElabelindentfactori{1.0} % almost always one -\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases -\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? -\def\IEEElabelindentfactoriv{0.0} -\def\IEEElabelindentfactorv{0.0} -\def\IEEElabelindentfactorvi{0.0} - -% value actually used within IED lists, it is auto -% set to one of the 6 values above -% global changes here have no effect -\def\IEEElabelindentfactor{1.0} - -% This controls the default spacing between the end of the IED -% list labels and the list text, when normal text is used for -% the labels. -\newdimen\IEEEiednormlabelsep -\IEEEiednormlabelsep 0.6em - -% This controls the default spacing between the end of the IED -% list labels and the list text, when math symbols are used for -% the labels (nomenclature lists). The IEEE usually increases the -% spacing in these cases -\newdimen\IEEEiedmathlabelsep -\IEEEiedmathlabelsep 1.2em - -% This controls the extra vertical separation put above and -% below each IED list. The IEEE usually puts a little extra spacing -% around each list. However, this spacing is barely noticeable. -\newskip\IEEEiedtopsep -\IEEEiedtopsep 2pt plus 1pt minus 1pt - - -% This command is executed within each IED list environment -% at the beginning of the list. You can use this to set the -% parameters for some/all your IED list(s) without disturbing -% global parameters that affect things other than lists. -% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} -% will alter the \labelsep for the next list(s) until -% \IEEEiedlistdecl is redefined. -\def\IEEEiedlistdecl{\relax} - -% This command provides an easy way to set \leftmargin based -% on the \labelwidth, \labelsep and the argument \IEEElabelindent -% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} -% output is in the \leftmargin variable, i.e., effectively: -% \leftmargin = argument + \labelwidth + \labelsep -% Note controlled spacing here, shield end of lines with % -\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% -\addtolength{\leftmargin}{\labelwidth}% -\addtolength{\leftmargin}{\labelsep}} - -% This command provides an easy way to set \labelwidth to the -% width of the given text. It is the same as -% \settowidth{\labelwidth}{label-text} -% and useful as a shorter alternative. -% Typically used to set \labelwidth to be the width -% of the longest label in the list -\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} - -% When this command is executed, IED lists will use the -% IEEEiedmathlabelsep label separation rather than the normal -% spacing. To have an effect, this command must be executed via -% the \IEEEiedlistdecl or within the option of the IED list -% environments. -\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} - -% A flag which controls whether the IED lists automatically -% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep -% Useful if you want to specify your own \leftmargin -% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) -% via the \IEEEiedlistdecl or within the option of the IED list -% environments to have an effect. -\newif\ifIEEEnocalcleftmargin -\IEEEnocalcleftmarginfalse - -% A flag which controls whether \IEEElabelindent is multiplied by -% the \IEEElabelindentfactor for each list level. -% This flag must be set via the \IEEEiedlistdecl or within the option -% of the IED list environments to have an effect. -\newif\ifIEEEnolabelindentfactor -\IEEEnolabelindentfactorfalse - - -% internal variable to indicate type of IED label -% justification -% 0 - left; 1 - center; 2 - right -\def\@IEEEiedjustify{0} - - - -% commands to allow the user to control IED -% label justifications. Use these commands within -% the IED environment option or in the \IEEEiedlistdecl -% Note that changing the normal list justifications -% is nonstandard and the IEEE may not like it if you do so! -% I include these commands as they may be helpful to -% those who are using these enhanced list controls for -% other non-IEEE related LaTeX work. -% itemize and enumerate automatically default to right -% justification, description defaults to left. -\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left -\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center -\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right - - - - -% commands to save to and restore from the list parameter copies -% this allows us to set all the list parameters within -% the list_decl and prevent \list (and its \@list) -% from overriding any of our parameters -% V1.6 use \edefs instead of dimen's to conserve dimen registers -% Note controlled spacing here, shield end of lines with % -\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% -\edef\@IEEEiedlabelwidth{\the\labelwidth}% -\edef\@IEEEiedlabelsep{\the\labelsep}% -\edef\@IEEEiedleftmargin{\the\leftmargin}% -\edef\@IEEEiedpartopsep{\the\partopsep}% -\edef\@IEEEiedparsep{\the\parsep}% -\edef\@IEEEieditemsep{\the\itemsep}% -\edef\@IEEEiedrightmargin{\the\rightmargin}% -\edef\@IEEEiedlistparindent{\the\listparindent}% -\edef\@IEEEieditemindent{\the\itemindent}} - -% Note controlled spacing here -\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% -\labelwidth\@IEEEiedlabelwidth\relax% -\labelsep\@IEEEiedlabelsep\relax% -\leftmargin\@IEEEiedleftmargin\relax% -\partopsep\@IEEEiedpartopsep\relax% -\parsep\@IEEEiedparsep\relax% -\itemsep\@IEEEieditemsep\relax% -\rightmargin\@IEEEiedrightmargin\relax% -\listparindent\@IEEEiedlistparindent\relax% -\itemindent\@IEEEieditemindent\relax} - - -% v1.6b provide original LaTeX IED list environments -% note that latex.ltx defines \itemize and \enumerate, but not \description -% which must be created by the base classes -% save original LaTeX itemize and enumerate -\let\LaTeXitemize\itemize -\let\endLaTeXitemize\enditemize -\let\LaTeXenumerate\enumerate -\let\endLaTeXenumerate\endenumerate -% base class should define \description -\let\LaTeXdescription\description -\let\endLaTeXdescription\enddescription - - -% override LaTeX's default IED lists, if the user requested it -\if@IEEETOOLSredeflists -\def\itemize{\@IEEEitemize} -\def\enditemize{\@endIEEEitemize} -\def\enumerate{\@IEEEenumerate} -\def\endenumerate{\@endIEEEenumerate} -\def\description{\@IEEEdescription} -\def\enddescription{\@endIEEEdescription} -\fi - - -% provide the user with the IEEE IED commands -\def\IEEEitemize{\@IEEEitemize} -\def\endIEEEitemize{\@endIEEEitemize} -\def\IEEEenumerate{\@IEEEenumerate} -\def\endIEEEenumerate{\@endIEEEenumerate} -\def\IEEEdescription{\@IEEEdescription} -\def\endIEEEdescription{\@endIEEEdescription} - - -% V1.6 we want to keep the IEEEtran IED list definitions as our own internal -% commands so they are protected against redefinition -\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} -\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} -\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} -\def\@endIEEEitemize{\endlist} -\def\@endIEEEenumerate{\endlist} -\def\@endIEEEdescription{\endlist} - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran itemized list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEitemize[#1]{% - \ifnum\@itemdepth>3\relax\@toodeep\else% - \ifnum\@listdepth>5\relax\@toodeep\else% - \advance\@itemdepth\@ne% - \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{2}% right justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEilabelindent% - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % calculate the label width - % the user can override this later if - % they specified a \labelwidth - \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% - \@IEEEsavelistparams% save our list parameters - \list{\csname\@itemitem\endcsname}{% - \@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % IEEElabelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}% - \fi}\fi\fi}% - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran enumerate list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEenumerate[#1]{% - \ifnum\@enumdepth>3\relax\@toodeep\else% - \ifnum\@listdepth>5\relax\@toodeep\else% - \advance\@enumdepth\@ne% - \edef\@enumctr{enum\romannumeral\the\@enumdepth}% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{2}% right justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEelabelindent% - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % calculate the label width - % We'll set it to the width suitable for all labels using - % normalfont 1) to 9) - % The user can override this later - \settowidth{\labelwidth}{9)}% - \@IEEEsavelistparams% save our list parameters - \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% - \@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % IEEElabelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}% - \fi}\fi\fi}% - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran description list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEdescription[#1]{% - \ifnum\@listdepth>5\relax\@toodeep\else% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{0}% left justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEdlabelindent% - % assume normal labelsep - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % Bogus label width in case the user forgets - % to set it. - % TIP: If you want to see what a variable's width is you - % can use the TeX command \showthe\width-variable to - % display it on the screen during compilation - % (This might be helpful to know when you need to find out - % which label is the widest) - \settowidth{\labelwidth}{Hello}% - \@IEEEsavelistparams% save our list parameters - \list{}{\@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % labelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% - \fi}\fi} - -% v1.6b we use one makelabel that does justification as needed. -\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax -\makebox[\labelwidth][l]{\normalfont #1}\else -\if\@IEEEiedjustify 1\relax -\makebox[\labelwidth][c]{\normalfont #1}\else -\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} - - - - - - - - - -% used only by IEEEtran's IEEEeqnarray as other packages may -% have their own, different, implementations -\newcounter{IEEEsubequation}[equation] - -% e.g., "1a" (used only by IEEEtran's IEEEeqnarray) -\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} -% just like LaTeX2e's \@eqnnum -\def\theequationdis{(\theequation)}% (1) -% IEEEsubequation used only by IEEEtran's IEEEeqnarray -\def\theIEEEsubequationdis{(\theIEEEsubequation)}% (1a) - - - - -%% -%% START OF IEEEeqnarray DEFINITIONS -%% -%% Inspired by the concepts, examples, and previous works of LaTeX -%% coders and developers such as Donald Arseneau, Fred Bartlett, -%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, -%% Roland Winkler and Mark Wooding. -%% I don't make the claim that my work here is even near their calibre. ;) - - -\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form -\@IEEEeqnarrayboxnojotfalse - -\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter -% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray -% used by IEEEeqnarraymulticol so that it can work properly in both -\@advanceIEEEeqncolcnttrue - -\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined -\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used - - -% The default math style used by the columns -\def\IEEEeqnarraymathstyle{\displaystyle} -% The default text style used by the columns -% default to using the current font -\def\IEEEeqnarraytextstyle{\relax} - -% like the iedlistdecl but for \IEEEeqnarray -\def\IEEEeqnarraydecl{\relax} -\def\IEEEeqnarrayboxdecl{\relax} - - - -% V1.8 flags to indicate that equation numbering is to persist -\newif\if@IEEEeqnumpersist% -\@IEEEeqnumpersistfalse -\newif\if@IEEEsubeqnumpersist% -\@IEEEsubeqnumpersistfalse -% -% V1.8 flags to indicate if (sub)equation number of last line was preadvanced -\newif\if@IEEEeqnumpreadv% -\@IEEEeqnumpreadvfalse -\newif\if@IEEEsubeqnumpreadv% -\@IEEEsubeqnumpreadvfalse - -\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it - -% \yesnumber is the opposite of \nonumber -% a novel concept with the same def as the equationarray package -% However, we give IEEE versions too since some LaTeX packages such as -% the MDWtools mathenv.sty redefine \nonumber to something else. -% This command is intended for use in non-IEEEeqnarray math environments -\providecommand{\yesnumber}{\global\@eqnswtrue} - - -% IEEEyes/nonumber -% V1.8 add persistant * forms -% These commands can alter the type of equation an IEEEeqnarray line is. -\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} - -\def\@IEEEyesnumber{\global\@eqnswtrue -\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray -\ifnum\c@IEEEsubequation>0\relax - \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label -\fi -% even if we reached this eqn num via a preadv, it is legit now -\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse -\fi} - -\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} - - -\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} -% -\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray - \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is - \else% if we are a regular equation we have to watch out for two cases - \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum - \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax - \else% non-preadvanced equations just need initialization of their sub eqnnum - \setcounter{IEEEsubequation}{1}\relax - \fi - \fi% fi already is subequation - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore - \global\@eqnswtrue -\fi} - - -\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} -% -\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray - \if@eqnsw % we do nothing unless we know we will display because we play with the counters here - % if it currently is a subequation, bump up to the next equation number and turn off the subequation - \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax - \fi - \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore - \gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi -\fi} - - - -% allows users to "push away" equations that get too close to the equation numbers -\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} - -% provides a way to span multiple columns within IEEEeqnarray environments -% will consider \if@advanceIEEEeqncolcnt before globally advancing the -% column counter - so as to work within \IEEEeqnarraybox -% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} -\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax -% check if column is defined for the precolumn definition -% We have to be careful here because TeX scans for & even within an \iffalse -% where it does not expand macros. So, if we used only one \ifx and a #3 -% appeared in the false branch and the user inserted another alignment -% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that -% there is an inner alignment in the false branch yet still will see any & -% there and will think that they apply to the outer alignment resulting in an -% incomplete \ifx error. -% So, here we use separate checks for the pre and post parts in order to keep -% the #3 outside of all conditionals. -\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax -\csname @IEEEeqnarraycolPRE#2\endcsname -\else% if not, error and use default type -\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak -Using a default centering column instead}% -{You must define IEEEeqnarray column types before use.}% -\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname -\fi -% The ten \relax are to help prevent misleading error messages in case a user -% accidently inserted a macro that tries to acquire additional arguments. -#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax -% check if column is defined for the postcolumn definition -\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax -\csname @IEEEeqnarraycolPOST#2\endcsname -\else% if not, use the default type -\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname -\fi -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} - -% like \omit, but maintains track of the column counter for \IEEEeqnarray -\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} - - -% provides a way to define a letter referenced column type -% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} -\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% -\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% -\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} - - -% provides a way to define a numerically referenced inter-column glue types -% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} -\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% -\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} - - -\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types - - -% expands and appends the given argument to the \@IEEEtrantmptoksA token list -% used to build up the \halign preamble -\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% -\@@IEEEappendtoksA} - -% also appends to \@IEEEtrantmptoksA, but does not expand the argument -% uses \toks8 as a scratchpad register -\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% -\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% -\@@IEEEappendNOEXPANDtoksA} - -% define some common column types for the user -% math -\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} -\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} -\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} -\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} -\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} -\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} -% text -\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} -\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} -\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} - -% vertical rules -\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% -{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} - -% horizontal rules -\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} -\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} - -% plain -\IEEEeqnarraydefcol{x}{}{} -\IEEEeqnarraydefcol{X}{$}{$} - -% the default column type to use in the event a column type is not defined -\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} - - -% a zero tabskip (used for "-" col types) -\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} -% a centering tabskip (used for "+" col types) -\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} - -% top level default tabskip glues for the start, end, and inter-column -% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox -\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue -\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue -\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue - - - -% creates a vertical rule that extends from the bottom to the top a a cell -% Provided in case other packages redefine \vline some other way. -% usage: \IEEEeqnarrayvrule[rule thickness] -% If no argument is provided, \arrayrulewidth will be used for the rule thickness. -\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} - -% creates a blank separator row -% usage: \IEEEeqnarrayseprow[separation length][font size commands] -% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers -\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} -\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} -\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% -\ifx\@IEEEeqnarrayseprowARGONE\@empty% -% get the skip value, based on the font commands -% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 -% assign within a bogus box to confine the font changes -{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% -\else% -{\setbox0=\hbox{#2\relax\global\skip5=#1}}% -\fi% -\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} - -% creates a blank separator row, but omits all the column templates -% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] -% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers -\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} -\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} -\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% -\ifx\@IEEEeqnarrayseprowARGONE\@empty% -% get the skip value, based on the font commands -% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 -% assign within a bogus box to confine the font changes -{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% -\else% -{\setbox0=\hbox{#2\relax\global\skip5=#1}}% -\fi% -\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} - - - -% draws a single rule across all the columns optional -% argument determines the rule width, \arrayrulewidth is the default -% updates column counter as needed and turns off struts -% usage: \IEEEeqnarrayrulerow[rule line thickness] -\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} -\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule -% turn off any struts -\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} - - -% draws a double rule by using a single rule row, a separator row, and then -% another single rule row -% first optional argument determines the rule thicknesses, \arrayrulewidth is the default -% second optional argument determines the rule spacing, \doublerulesep is the default -% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] -\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} -\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% -{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} -\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% -% we allow the user to say \IEEEeqnarraydblrulerow[][] -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]\relax% -\fi% -\def\@IEEEeqnarraydblrulerowARG{#2}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% -\else% -\\\IEEEeqnarrayseprow[#2][\relax]% -\fi% -\\\multispan{\@IEEEeqnnumcols}% -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\def\@IEEEeqnarraydblrulerowARG{#1}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -} - -% draws a double rule by using a single rule row, a separator (cutting) row, and then -% another single rule row -% first optional argument determines the rule thicknesses, \arrayrulewidth is the default -% second optional argument determines the rule spacing, \doublerulesep is the default -% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] -\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} -\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% -{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} -\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% -% we allow the user to say \IEEEeqnarraydblrulerow[][] -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -\def\@IEEEeqnarraydblrulerowARG{#2}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% -\else% -\\\IEEEeqnarrayseprowcut[#2][\relax]% -\fi% -\\\multispan{\@IEEEeqnnumcols}% -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\def\@IEEEeqnarraydblrulerowARG{#1}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -} - - - -% inserts a full row's worth of &'s -% relies on \@IEEEeqnnumcols to provide the correct number of columns -% uses \@IEEEtrantmptoksA, \count0 as scratch registers -\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% -\loop% add cols if the user did not use them all -\ifnum\count0<\@IEEEeqnnumcols\relax% -\@IEEEappendtoksA{&}% -\advance\count0 by 1\relax% update the col count -\repeat% -\the\@IEEEtrantmptoksA%execute the &'s -} - - - -\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines -\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl - -\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts -\edef\@IEEEeqnarrayTHEstrutdepth{0pt} - -\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of -\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray - -\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height -\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth - -\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value -\@IEEEeqnarrayusemasterstruttrue % is to be used - - - -% saves the strut height and depth of the master strut -\def\@IEEEeqnarraymasterstrutsave{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% save values -\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} - -% restores the strut height and depth of the master strut -\def\@IEEEeqnarraymasterstrutrestore{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% restore values -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} - - -% globally restores the strut height and depth to the -% master values and sets the master strut flag to true -\def\@IEEEeqnarraystrutreset{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% restore values -\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\global\@IEEEeqnarrayusemasterstruttrue} - - -% if the master strut is not to be used, make the current -% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth -% and the use master strut flag, global -% this allows user strut commands issued in the last column to be carried -% into the isolation/strut column -\def\@IEEEeqnarrayglobalizestrutstatus{\relax% -\if@IEEEeqnarrayusemasterstrut\else% -\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% -\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% -\global\@IEEEeqnarrayusemasterstrutfalse% -\fi} - - - -% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] -% If called outside the lines of an IEEEeqnarray, sets the height -% and depth of both the master and local struts. If called inside -% an IEEEeqnarray line, sets the height and depth of the local strut -% only and sets the flag to indicate the use of the local strut -% values. If the height or depth is left blank, 0.7\normalbaselineskip -% and 0.3\normalbaselineskip will be used, respectively. -% The optional argument can be used to evaluate the lengths under -% a different font size and styles. If none is specified, the current -% font is used. -% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 -\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} -\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% -\ifx\@IEEEeqnarraystrutsizeARG\@empty% -{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% -\skip0=\skip3\relax% -\else% arg one present -{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% -\skip0=\skip3\relax% -\fi% if null arg -\def\@IEEEeqnarraystrutsizeARG{#2}% -\ifx\@IEEEeqnarraystrutsizeARG\@empty% -{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% -\skip2=\skip3\relax% -\else% arg two present -{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% -\skip2=\skip3\relax% -\fi% if null arg -% remove stretchability, just to be safe -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -\if@IEEEeqnarrayISinner% inner does not touch master strut size -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstrutfalse% do not use master -\else% outer, have to set master strut too -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstruttrue% use master strut -\fi} - - -% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] -% If called outside the lines of an IEEEeqnarray, adds the given height -% and depth to both the master and local struts. -% If called inside an IEEEeqnarray line, adds the given height and depth -% to the local strut only and sets the flag to indicate the use -% of the local strut values. -% In both cases, if a height or depth is left blank, 0pt is used instead. -% The optional argument can be used to evaluate the lengths under -% a different font size and styles. If none is specified, the current -% font is used. -% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 -\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} -\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% -\ifx\@IEEEeqnarraystrutsizearg\@empty% -\skip0=0pt\relax% -\else% arg one present -{\setbox0=\hbox{#3\relax\global\skip3=#1}}% -\skip0=\skip3\relax% -\fi% if null arg -\def\@IEEEeqnarraystrutsizearg{#2}% -\ifx\@IEEEeqnarraystrutsizearg\@empty% -\skip2=0pt\relax% -\else% arg two present -{\setbox0=\hbox{#3\relax\global\skip3=#2}}% -\skip2=\skip3\relax% -\fi% if null arg -% remove stretchability, just to be safe -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -\if@IEEEeqnarrayISinner% inner does not touch master strut size -% get local strut size -\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% -% add it to the user supplied values -\advance\dimen0 by \skip0\relax% -\advance\dimen2 by \skip2\relax% -% update the local strut size -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstrutfalse% do not use master -\else% outer, have to set master strut too -% get master strut size -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% add it to the user supplied values -\advance\dimen0 by \skip0\relax% -\advance\dimen2 by \skip2\relax% -% update the local and master strut sizes -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstruttrue% use master strut -\fi} - - -% allow user a way to see the struts -\newif\ifIEEEvisiblestruts -\IEEEvisiblestrutsfalse - -% inserts an invisible strut using the master or local strut values -% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 -\def\@IEEEeqnarrayinsertstrut{\relax% -\if@IEEEeqnarrayusemasterstrut -% get master strut size -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -\else% -% get local strut size -\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% -\fi% -% remove stretchability, probably not needed -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -% allow user to see struts if desired -\ifIEEEvisiblestruts% -\vrule width0.2pt height\dimen0 depth\dimen2\relax% -\else% -\vrule width0pt height\dimen0 depth\dimen2\relax\fi} - - -% creates an invisible strut, useable even outside \IEEEeqnarray -% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. -% usage: \IEEEstrut[height][depth][font size commands] -% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \dimen0, \dimen2, \skip0, \skip2 -\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} -\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} -\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} -\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% -\def\@IEEEstrutARG{#1}% -\ifx\@IEEEstrutARG\@empty% -\skip0=0.7\normalbaselineskip\relax% -\else% -\skip0=#1\relax% -\fi% -\def\@IEEEstrutARG{#2}% -\ifx\@IEEEstrutARG\@empty% -\skip2=0.3\normalbaselineskip\relax% -\else% -\skip2=#2\relax% -\fi% -% remove stretchability, probably not needed -\dimen0\skip0\relax% -\dimen2\skip2\relax% -\ifIEEEvisiblestruts% -\vrule width0.2pt height\dimen0 depth\dimen2\relax% -\else% -\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} - - -% enables strut mode by setting a default strut size and then zeroing the -% \baselineskip, \lineskip, \lineskiplimit and \jot -\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% -\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} - - -% equation and subequation forms to use to setup hyperref's \@currentHref -\def\@IEEEtheHrefequation{equation.\theHequation} -\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} - - -\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} -\def\endIEEEeqnarray{\end@IEEEeqnarray} - -\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} -\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} - - -% \IEEEeqnarray is an enhanced \eqnarray. -% The star form defaults to not putting equation numbers at the end of each row. -% usage: \IEEEeqnarray[decl]{cols} -\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} -% We have to be careful here to normalize catcodes just before acquiring the -% cols as that specification may contain punctuation which could be subject -% to document catcode changes. -\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} -\def\@@@IEEEeqnarray[#1]#2{\endgroup - % default to showing the equation number or not based on whether or not - % the star form was involked - \if@IEEEeqnumpersist\global\@eqnswtrue - \else% not the star form - \global\@eqnswfalse - \fi% if star form - % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) - \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax - % provide dummy hyperref commands in case hyperref is not loaded - \providecommand{\Hy@raisedlink}[1]{}\relax - \providecommand{\hyper@anchorstart}[1]{}\relax - \providecommand{\hyper@anchorend}{}\relax - \providecommand{\@currentHref}{}\relax - \@IEEEeqnumpreadvfalse% reset eqnpreadv flag - \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag - \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign - \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default - \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise - \IEEEvisiblestrutsfalse% diagnostic mode defaults to off - % no extra space unless the user specifically requests it - \lineskip=0pt\relax - \lineskiplimit=0pt\relax - \baselineskip=\normalbaselineskip\relax% - \jot=\IEEEnormaljot\relax% - \mathsurround\z@\relax% no extra spacing around math - \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, - % used in \IEEEeqnarraymulticol and in the preamble build - %V1.8 Here we preadvance to the next equation number. - % If the user later wants a continued subequation, we can roll back. - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% - \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line - \setcounter{IEEEsubequation}{0}% no subequation yet - \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally - \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally - \def\@currentlabel{\p@equation\theequation}% redefine the ref label - \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides - #1\relax% allow user to override defaults - \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers - \global\@IEEEeqncolcnt\z@% col. count = 0 for first line - \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA - % put in the column for the equation number - \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first - \toks0={##}% - % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking - \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% - % add the isolation column - \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% - % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking - \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% - % add the equation number col to the preamble - \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% - % note \@IEEEeqnnumcols does not count the equation col or isolation col - % set the starting tabskip glue as determined by the preamble build - \tabskip=\@IEEEBPstartglue\relax - % begin the display alignment - \@IEEEeqnarrayISinnertrue% commands are now within the lines - $$\everycr{}\halign to\displaywidth\bgroup - % "exspand" the preamble - \span\the\@IEEEtrantmptoksA\cr} - -% enter isolation/strut column (or the next column if the user did not use -% every column), record the strut status, complete the columns, do the strut if needed, -% restore counters (to backout any equation setup for a next line that was never used) -% to their correct values and exit -\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup -\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi -\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi -\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label -\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label -$$\@ignoretrue} - - -% IEEEeqnarray uses a modifed \\ instead of the plain \cr to -% end rows. This allows for things like \\*[vskip amount] -% These "cr" macros are modified versions of those for LaTeX2e's eqnarray -% the {\ifnum0=`} braces must be kept away from the last column to avoid -% altering spacing of its math, so we use & to advance to the next column -% as there is an isolation/strut column after the user's columns -\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column - {\ifnum0=`}\fi - \@ifstar{% - \global\@eqpen\@M\@IEEEeqnarrayYCR - }{% - \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR - }% -} - -\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} - -\def\@IEEEeqnarrayXCR[#1]{% - \ifnum0=`{\fi}% - \@@IEEEeqnarraycr - \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% - -\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register - \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column - \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax - \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak - environment}% - {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak - specifications.}\relax% - \else - \loop% add cols if the user did not use them all - \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax - \@IEEEappendtoksA{&}% - \advance\@IEEEeqncolcnt by 1\relax% update the col count - \repeat - % this number of &'s will take us the the isolation column - \fi - % execute the &'s - \the\@IEEEtrantmptoksA% - % handle the strut/isolation column - \@IEEEeqnarrayinsertstrut% do the strut if needed - \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray - &% and enter the equation number column - \if@eqnsw% only if we display something - \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor - \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means - \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations - % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* - % equation line as would be the case under the current settings. However, there are two problems. - % One problem is that there might not ever be a next line. The second problem is that the user - % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle - % these cases we have to record the current values of the (sub)equation counters and revert back - % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv - % and \@IEEEsubeqnnumrollback stuff tracks this. - % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is - % that the equation counters and labels remain valid for what the line would be unless a - % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. - \ifnum\c@IEEEsubequation>0\relax% handle subequation - \theIEEEsubequationdis\relax - \if@IEEEsubeqnumpersist% setup for default type of next line - \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \else - % if no subeqnum persist, go ahead and setup for a new equation number - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation - \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax - \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi - \else% display a standard equation number - \theequationdis\relax - \setcounter{IEEEsubequation}{0}\relax% not really needed - \if@IEEEsubeqnumpersist% setup for default type of next line - % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a - \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \else - % if no subeqnum persist, go ahead and setup for a new equation number - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation - \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax - \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi - \fi% - \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor - \fi% fi only if we display something - % reset the flags to indicate the default preferences of the display of equation numbers - \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi - \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag - % reset the number of columns the user actually used - \global\@IEEEeqncolcnt\z@\relax - % the real end of the line - \cr} - - - - - -% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything -% inside a vtop, vbox, or vcenter box depending on the letter in the second -% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, -% equation numbers are not displayed and \IEEEeqnarraybox can be nested. -% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox -% within an hbox. -% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within -% a \hbox{$ $} construct. -% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or -% \IEEEeqnarrayboxt depending on the math mode. -% The third optional argument specifies the width this box is to be set to - -% natural width is the default. -% The * forms do not add \jot line spacing -% usage: \IEEEeqnarraybox[decl][pos][width]{cols} -\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} -\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} -\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} - -\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} -\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} -\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} - -\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% -\@IEEEeqnarraybox} -\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} - -\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% -\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} - -% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} -% for \vcenter in non-math mode -\newif\if@IEEEeqnarrayboxHBOXSW% -\@IEEEeqnarrayboxHBOXSWfalse - -\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} -% We have to be careful here to normalize catcodes just before acquiring the -% cols as that specification may contain punctuation which could be subject -% to document catcode changes. -\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} -\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} - -% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs -\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign - \@IEEEeqnarraymasterstrutsave% save current master strut values - \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default - \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise - \IEEEvisiblestrutsfalse% diagnostic mode defaults to off - % no extra space unless the user specifically requests it - \lineskip=0pt\relax% - \lineskiplimit=0pt\relax% - \baselineskip=\normalbaselineskip\relax% - \jot=\IEEEnormaljot\relax% - \mathsurround\z@\relax% no extra spacing around math - % the default end glues are zero for an \IEEEeqnarraybox - \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue - \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue - \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue - \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, - % used in \IEEEeqnarraymulticol and in the preamble build - \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides - #1\relax% allow user to override defaults - \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing - \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA - % add an isolation column to the preamble to stop \\'s {} from getting into the last col - \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first - \toks0={##}% - % add the isolation column to the preamble - \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% - % set the starting tabskip glue as determined by the preamble build - \tabskip=\@IEEEBPstartglue\relax - % begin the alignment - \everycr{}% - % use only the very first token to determine the positioning - \@IEEEextracttoken{#2}\relax - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi - % \@IEEEextractedtoken has the first token, the rest are ignored - % if we need to put things into and hbox and go into math mode, do so now - \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% - % use the appropriate vbox type - \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% - \vcenter\else\vbox\fi\fi\bgroup% - \@IEEEeqnarrayISinnertrue% commands are now within the lines - \ifx#3\relax\halign\else\halign to #3\relax\fi% - \bgroup - % "exspand" the preamble - \span\the\@IEEEtrantmptoksA\cr} - -% carry strut status and enter the isolation/strut column, -% exit from math mode if needed, and exit -\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status -&% enter isolation/strut column -\@IEEEeqnarrayinsertstrut% do strut if needed -\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values -% reset the strut system for next IEEEeqnarray -% (sets local strut values back to previous master strut values) -\@IEEEeqnarraystrutreset% -% ensure last line, exit from halign, close vbox -\crcr\egroup\egroup% -% exit from math mode and close hbox if needed -\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} - - - -% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to -% end rows. This allows for things like \\[vskip amount] -% This "cr" macros are modified versions those for LaTeX2e's eqnarray -% For IEEEeqnarraybox, \\* is the same as \\ -% the {\ifnum0=`} braces must be kept away from the last column to avoid -% altering spacing of its math, so we use & to advance to the isolation/strut column -% carry strut status into isolation/strut column -\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status -&% enter isolation/strut column -\@IEEEeqnarrayinsertstrut% do strut if needed -% reset the strut system for next line or IEEEeqnarray -\@IEEEeqnarraystrutreset% -{\ifnum0=`}\fi% -\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} - -% test and setup the optional argument to \\[] -\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} - -% IEEEeqnarraybox does not automatically increase line spacing by \jot -\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% -\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} - - - -% usage: \@IEEEbuildpreamble{column specifiers} -% starts the halign preamble build -% the assembled preamble is put in \@IEEEtrantmptoksA -\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register -\let\@IEEEBPcurtype=u%current column type is not yet known -\let\@IEEEBPprevtype=s%the previous column type was the start -\let\@IEEEBPnexttype=u%next column type is not yet known -% ensure these are valid -\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% -\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition -% currently acquired numerically referenced glue -% use a name that is easier to remember -\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% -\@IEEEBPcurnum=0% -% tracks number of columns in the preamble -\@IEEEeqnnumcols=0% -% record the default end glues -\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% -\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% -\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers -% now parse the user's column specifications -% \ignorespaces is used as a delimiter, need at least one trailing \relax because -% \@@IEEEbuildpreamble looks into the future -\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} - - -% usage: \@@IEEEbuildpreamble{current column}{next column} -% parses and builds the halign preamble -\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% -% use only the very first token to check the end -\@IEEEextracttokengroups{#1}\relax -\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% -% identify current and next token type -\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid -\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next -% if curtype is a glue, get the glue def -\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% -% if curtype is a column, get the column def and set the current column name -\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% -% if curtype is a numeral, acquire the user defined glue -\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% -% process the acquired glue -\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% -% process the acquired col -\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% -% ready prevtype for next col spec. -\let\@IEEEBPprevtype=\@IEEEBPcurtype% -% be sure and put back the future token(s) as a group -\fi\@@nextIEEEbuildpreamble{#2}} - - -% usage: \@@IEEEfinishpreamble{discarded} -% executed just after preamble build is completed -% warn about zero cols, and if prevtype type = u, put in end tabskip glue -% argument is not used -\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax -\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% -{At least one column type must be declared for each IEEEeqnarray.}% -\fi%num cols less than 1 -%if last type undefined, set default end tabskip glue -\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} - - -% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} -% Identify and return the column specifier's type code in the given -% \output macro: -% n = number -% g = glue (any other char in catagory 12) -% c = letter -% e = \ignorespaces (end of sequence) -% u = undefined -% error mode: 0 = no error message, 1 = error on invalid char -\def\@IEEEgetcoltype#1#2#3{% -% use only the very first token to determine the type -\@IEEEextracttoken{#1}\relax -% \@IEEEextractedtoken has the first token, the rest are discarded -\let#2=u\relax% assume invalid until know otherwise -\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else -\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences -\if0\@IEEEextractedtoken\let#2=n\else -\if1\@IEEEextractedtoken\let#2=n\else -\if2\@IEEEextractedtoken\let#2=n\else -\if3\@IEEEextractedtoken\let#2=n\else -\if4\@IEEEextractedtoken\let#2=n\else -\if5\@IEEEextractedtoken\let#2=n\else -\if6\@IEEEextractedtoken\let#2=n\else -\if7\@IEEEextractedtoken\let#2=n\else -\if8\@IEEEextractedtoken\let#2=n\else -\if9\@IEEEextractedtoken\let#2=n\else -\ifcat,\@IEEEextractedtoken\let#2=g\relax -\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi -\if#2u\relax -\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% -{Only letters, numerals and certain other symbols are allowed \MessageBreak -as IEEEeqnarray column specifiers.}\fi\fi} - - -% usage: \@IEEEgetcurcol{col specifier} -% verify the letter referenced column exists -% and return its name in \@IEEEBPcurcolname -% if column specifier is invalid, use the default column @IEEEdefault -\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% -\def\@IEEEBPcurcolname{#1}\else% invalid column name -\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak -Using a default centering column instead}% -{You must define IEEEeqnarray column types before use.}% -\def\@IEEEBPcurcolname{@IEEEdefault}\fi} - - -% usage: \@IEEEgetcurglue{glue specifier}{\output} -% identify the predefined (punctuation) glue value -% and return it in the given output macro -\def\@IEEEgetcurglue#1#2{% -% ! = \! (neg small) -0.16667em (-3/18 em) -% , = \, (small) 0.16667em ( 3/18 em) -% : = \: (med) 0.22222em ( 4/18 em) -% ; = \; (large) 0.27778em ( 5/18 em) -% ' = \quad 1em -% " = \qquad 2em -% . = 0.5\arraycolsep -% / = \arraycolsep -% ? = 2\arraycolsep -% * = 1fil -% + = \@IEEEeqnarraycolSEPcenter -% - = \@IEEEeqnarraycolSEPzero -% Note that all em values are referenced to the math font (textfont2) fontdimen6 -% value for 1em. -% -% use only the very first token to determine the type -\@IEEEextracttoken{#1}\relax -\ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax -\fi -% get the math font 1em value -% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs -% to gain access to the math (\textfont2) font's spacing parameters. -% So we create a bogus box here that uses the math font to ensure -% that \textfont2 is loaded and ready. If this is not done, -% the \textfont2 stuff here may not work. -% Thanks to Bernd Raichle for his 1997 post on this topic. -{\setbox0=\hbox{$\displaystyle\relax$}}% -% fontdimen6 has the width of 1em (a quad). -\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% -% identify the glue value based on the first token -% we discard anything after the first -\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else -\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else -\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else -\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else -\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else -\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else -\edef#2{\@IEEEeqnarraycolSEPzero}% -\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak -column specifications. Using a default value of\MessageBreak -0pt instead}% -{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak -IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - - -% usage: \@IEEEprocessNcol{digit} -% process a numerical digit from the column specification -% and look up the corresponding user defined glue value -% can transform current type from n to g or a as the user defined glue is acquired -\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% -\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak -specifications. Ignoring consecutive glue specifiers\MessageBreak -after the first}% -{You cannot have two or more glue types next to each other\MessageBreak -in the IEEEeqnarray column specifications.}% -\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded -\@IEEEBPcurnum=0\relax% -\else% if we previously aborted a glue -\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion -\else%acquire this number -% save the previous type before the numerical digits started -\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% -\multiply\@IEEEBPcurnum by 10\relax% -\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan -\if\@IEEEBPnexttype n\else%close acquisition -\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% -\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% -\else%user glue not defined -\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak -column specifications. Using a default value of\MessageBreak -0pt instead}% -{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak -\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% -\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% -\fi% glue defined or not -\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue -\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue -\@IEEEBPcurnum=0\relax%ready for next acquisition -\fi%close acquisition, get glue -\fi%discard or acquire number -\fi%prevtype glue or not -} - - -% process an acquired glue -% add any acquired column/glue pair to the preamble -\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions -\else -% if this is the start glue, save it, but do nothing else -% as this is not used in the preamble, but before -\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% -\else%not the start glue -\if\@IEEEBPprevtype g%ignore if back to back glues -\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak -specifications. Ignoring consecutive glue specifiers\MessageBreak -after the first}% -{You cannot have two or more glue types next to each other\MessageBreak -in the IEEEeqnarray column specifications.}% -\let\@IEEEBPcurtype=a% abort this glue -\else% not a back to back glue -\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble -\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi -\toks0={##}% -% make preamble advance col counter if this environment needs this -\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi -% insert the column defintion into the preamble, being careful not to expand -% the column definition -\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% -\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname}% -\@IEEEappendtoksA{\the\toks0}% -\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\endgroup}% -\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble -\else% error: non-start glue with no pending column -\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak -type in the column specifications. Ignoring this glue\MessageBreak -specifier}% -{Except for the first and last positions, glue can be placed only\MessageBreak -between column types.}% -\let\@IEEEBPcurtype=a% abort this glue -\fi% previous was a column -\fi% back-to-back glues -\fi% is start column glue -\fi% prev type not a -} - - -% process an acquired letter referenced column and, if necessary, add it to the preamble -\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else -\if\@IEEEBPnexttype n\else -% we have a column followed by something other than a glue (or numeral glue) -% so we must add this column to the preamble now -\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first -\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue -\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue -\toks0={##}% -% make preamble advance col counter if this environment needs this -\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi -% insert the column definition into the preamble, being careful not to expand -% the column definition -\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname}% -\@IEEEappendtoksA{\the\toks0}% -\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\endgroup}% -\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble -\fi%next type not numeral -\fi%next type not glue -} - - -%% -%% END OF IEEEeqnarray DEFINITIONS -%% - - - - -% \IEEEPARstart -% Definition for the big two line drop cap letter at the beginning of the -% first paragraph of journal papers. The first argument is the first letter -% of the first word, the second argument is the remaining letters of the -% first word which will be rendered in upper case. -% In V1.6 this has been completely rewritten to: -% -% 1. no longer have problems when the user begins an environment -% within the paragraph that uses \IEEEPARstart. -% 2. auto-detect and use the current font family -% 3. revise handling of the space at the end of the first word so that -% interword glue will now work as normal. -% 4. produce correctly aligned edges for the (two) indented lines. -% -% We generalize things via control macros - playing with these is fun too. -% -% V1.7 added more control macros to make it easy for IEEEtrantools.sty users -% to change the font style. -% -% the number of lines that are indented to clear it -% may need to increase if using decenders -\providecommand{\IEEEPARstartDROPLINES}{2} -% minimum number of lines left on a page to allow a \@IEEEPARstart -% Does not take into consideration rubber shrink, so it tends to -% be overly cautious -\providecommand{\IEEEPARstartMINPAGELINES}{2} -% V1.7 the height of the drop cap is adjusted to match the height of this text -% in the current font (when \IEEEPARstart is called). -\providecommand{\IEEEPARstartHEIGHTTEXT}{T} -% the depth the letter is lowered below the baseline -% the height (and size) of the letter is determined by the sum -% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current -% font. It is a good idea to set this value in terms of the baselineskip -% so that it can respond to changes therein. -\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} -% V1.7 the font the drop cap will be rendered in, -% can take zero or one argument. -\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} -% V1.7 any additional, non-font related commands needed to modify -% the drop cap letter, can take zero or one argument. -\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} -% V1.7 the font that will be used to render the rest of the word, -% can take zero or one argument. -\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} -% V1.7 any additional, non-font related commands needed to modify -% the rest of the word, can take zero or one argument. -\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} -% This is the horizontal separation distance from the drop letter to the main text. -% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced -% to the font that is active when \IEEEPARstart is called. -\providecommand{\IEEEPARstartSEP}{0.15em} -% V1.7 horizontal offset applied to the left of the drop cap. -\providecommand{\IEEEPARstartHOFFSET}{0em} -% V1.7 Italic correction command applied at the end of the drop cap. -\providecommand{\IEEEPARstartITLCORRECT}{\/} - -% width of the letter output, set globally. Can be used in \IEEEPARstartSEP -% or \IEEEPARstartHOFFSET, but not the height lengths. -\newdimen\IEEEPARstartletwidth -\IEEEPARstartletwidth 0pt\relax - -% definition of \IEEEPARstart -% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES -% -% The token \@IEEEPARstartfont will be globally defined after the first use -% of \IEEEPARstart and will be a font command which creates the big letter -% The first argument is the first letter of the first word and the second -% argument is the rest of the first word(s). -\def\IEEEPARstart#1#2{\par{% -% if this page does not have enough space, break it and lets start -% on a new one -\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% -% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE -% which uses command \leavevmode which causes an unwanted \indent to be issued -\noindent -% calculate the desired height of the big letter -% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font -% down to \IEEEPARstartDROPDEPTH below the current baseline -\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% -\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% -% extract the name of the current font in bold -% and place it in \@IEEEPARstartFONTNAME -\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% -{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% -\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% -% define a font based on this name with a point size equal to the desired -% height of the drop letter -\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% -% save this value as a counter (integer) value (sp points) -\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% -% now get the height of the actual letter produced by this font size -\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% -% If something bogus happens like the first argument is empty or the -% current font is strange, do not allow a zero height. -\ifdim\@IEEEtrantmpdimenB=0pt\relax% -\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% -\typeout{ Forcing the drop letter font size to 10pt.}% -\@IEEEtrantmpdimenB=10pt% -\fi% -% and store it as a counter -\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% -% Since a font size doesn't exactly correspond to the height of the capital -% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, -% will be less than that desired, \@IEEEtrantmpcountA -% we need to raise the font size, \@IEEEtrantmpdimenA -% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB -% But, TeX doesn't have floating point division, so we have to use integer -% division. Hence the use of the counters. -% We need to reduce the denominator so that the loss of the remainder will -% have minimal affect on the accuracy of the result -\divide\@IEEEtrantmpcountB by 200% -\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% -% Then reequalize things when we use TeX's ability to multiply by -% floating point values -\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% -\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% -% \@IEEEPARstartfont is globaly set to the calculated font of the big letter -% We need to carry this out of the local calculation area to to create the -% big letter. -\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% -% Now set \@IEEEtrantmpdimenA to the width of the big letter -% We need to carry this out of the local calculation area to set the -% hanging indent -\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont -\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% -% end of the isolated calculation environment -\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% -% add in the extra clearance we want -\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% -% add in the optional offset -\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% -% V1.7 don't allow negative offsets to produce negative hanging indents -\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA -\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi -% \@IEEEtrantmpdimenA has the width of the big letter plus the -% separation space and \@IEEEPARstartfont is the font we need to use -% Now, we make the letter and issue the hanging indent command -% The letter is placed in a box of zero width and height so that other -% text won't be displaced by it. -\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% -\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% -\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% -\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% -\hspace{\IEEEPARstartSEP}}}% -{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} - - - - - - -% determines if the space remaining on a given page is equal to or greater -% than the specified space of argument one -% if not, execute argument two (only if the remaining space is greater than zero) -% and issue a \newpage -% -% example: \@IEEEtranneedspace{2in}{\vfill} -% -% Does not take into consideration rubber shrinkage, so it tends to -% be overly cautious -% Based on an example posted by Donald Arseneau -% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, -% so DO NOT PASS \@IEEEtrantmpdimenB to this routine -% if you need a dimen register, import with \@IEEEtrantmpdimenA instead -\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable -\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left -\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left -\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% -\newpage% -\fi\endgroup} - - -% \IEEEauthorrefmark -\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% - \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% - \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} - - -% V1.3 IEEEQED and IEEEproof -\def\IEEEproofname{Proof} - -\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box -\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} -\def\IEEEQED{\IEEEQEDclosed} % default to closed - -%V1.8 flag to indicate if QED symbol is to be shown -\newif\if@IEEEQEDshow \@IEEEQEDshowtrue -\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired -% v1.7 name change to avoid namespace collision with amsthm. Also add support -% for an optional argument. -\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} -\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} -\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} -% qedhere for equation environments, similar to AMS \qedhere -\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax - \let\veqno\relax\hbox{\IEEEQED}} -% IEEE style qedhere for IEEEeqnarray and other environments -\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} -% command to disable QED at end of IEEEproof -\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} - - -% Provide support for the control entries of IEEEtran.bst V1.00 and later. -% V1.7 optional argument allows for a different aux file to be specified in -% order to handle multiple bibliographies. For example, with multibib.sty: -% \newcites{sec}{Secondary Literature} -% \bstctlcite[@auxoutsec]{BSTcontrolhak} -% V1.7 I see no need for \providecommand here. -\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} -\def\@bstctlcite[#1]#2{\@bsphack - \@for\@citeb:=#2\do{% - \edef\@citeb{\expandafter\@firstofone\@citeb}% - \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% - \@esphack} - -% \IEEEnoauxwrite{} allows for citations that do not add to or affect -% the order of the existing citation list. Can be useful for \cite -% within \thanks{}. -\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax -\if@filesw -\@fileswfalse -#1\relax\relax\relax\relax\relax -\@fileswtrue -\else -#1\relax\relax\relax\relax\relax -\fi} - -% need a backslash character for typeout output -{\catcode`\|=0 \catcode`\\=12 -|xdef|@IEEEbackslash{\}} - - -% hook to allow easy disabling of all legacy warnings -\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). -Use \@IEEEbackslash #2 instead.}} - - -% V1.4 no longer support these legacy commands -% \def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} -% \let\labelindent\IEEElabelindent -% \def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} -% \def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} -% \def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} -% \def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} -% \def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} -% \def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} - - -\endinput -%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtrantools.sty %%%%%%%%%%%%%%%%%%%%%% -% That's all folks! -