LaTeXML
view release on metacpan or search on metacpan
lib/LaTeXML/Package/IEEEtran.cls.ltxml view on Meta::CPAN
\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue
\CLASSOPTIONdraftclsnofootfalse}
% draftcls is for a draft mode which will not affect any packages
% used by the document.
\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
\CLASSOPTIONdraftclsnofootfalse}
% draftclsnofoot is like draftcls, but without the footer.
\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue
\CLASSOPTIONdraftclsnofoottrue}
\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse
\CLASSOPTIONdraftclsnofootfalse}
\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
\CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
\CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse}
\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse
\CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue}
\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse
\CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue
\CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse}
\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue}
\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue}
\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse\RequirePackage{newtxmath}}
\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse}
\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse}
\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue}
EoTeX
# # 9pt 10pt 11pt 12pt
# foreach my $option (qw(
# draft draftcls draftclsnofoot final
# conference journal technote peerreview peerreviewca
# comsoc compsoc transmag
# letterpaper a4paper cspaper
# oneside twoside
# oncolumn twocolumn
# romanappendices
# captionsoff
# nofonttune)) {
# DeclareOption($option, undef); }
# Anything else gets passed to article.
DeclareOption(undef, sub {
PassOptions('article', 'cls', ToString(Expand(T_CS('\CurrentOption')))); });
ProcessOptions();
LoadClass('article');
#RequirePackage('multicol');
#RequirePackage('inst_support');
# This seems to be just to save stuff so that \maketitle can format it?
DefMacro('\IEEEtitleabstractindextext{}', '#1');
DefMacro('\IEEEdisplaynontitleabstractindextext', '');
DefMacro('\IEEEdisplaynotcompsoctitleabstractindextext', '');
DefMacro('\IEEEcompsoctitleabstractindextext', '');
Let('\IEEEpeerreviewmaketitle', '\maketitle');
DefMacro('\IEEEoverridecommandlockouts', '');
# V1.7 and later no longer supports \overrideIEEEmargins
DefMacro('\overrideIEEEmargins', '');
DefMacro('\IEEEaftertitletext{}', ''); # ?
DefMacro('\IEEEspecialpapernotice{}', ''); # ?
DefMacro('\IEEEmembership{}', ''); # nothing for now.
DefMacro('\IEEEauthorblockN{}', '#1'); # author
DefConstructor('\@@@affiliation{}', "^ <ltx:contact role='affiliation'>#1</ltx:contact>");
DefMacro('\IEEEauthorblockA{}', '\@add@to@frontmatter{ltx:creator}{\@@@affiliation{#1}}');
DefMacro(T_CS('\begin{IEEEkeywords}'), '\@IEEEkeywords');
DefMacro(T_CS('\end{IEEEkeywords}'), '\@endIEEEkeywords');
Let('\@endIEEEkeywords', '\relax'); # stub
DefMacro('\@IEEEkeywords XUntil:\@endIEEEkeywords', '\@add@frontmatter{ltx:keywords}[name={\IEEEkeywordsname}]{#1}');
DefMacro('\IEEEraisesectionheading{}', '#1');
DefMacro('\IEEEPARstart{}{}', '#1#2'); # Eventually, dropcap?
DefMacro('\IEEEcompsocitemizethanks{}', '\thanks{#1}');
DefMacro('\IEEEcompsocthanksitem[]', '');
DefMacro('\IEEEauthorrefmark', '');
DefMacro('\IEEEtriggeratref{}', '');
DefMacro('\IEEEpubid{}', '\@add@frontmatter{ltx:note}[role=publicationid]{pubid: #1}');
DefMacro('\IEEEpubidadjcol', '');
RawTeX(<<'EoTeX');
\ifCLASSOPTIONcompsoc
% compsoc is all arabic
\def\thesection{\arabic{section}}
\def\thesubsection{\thesection.\arabic{subsection}}
\def\thesubsubsection{\thesubsection.\arabic{subsubsection}}
\def\theparagraph{\thesubsubsection.\arabic{paragraph}}
\else
\def\thesection{\Roman{section}} % I
% V1.7, \mbox prevents breaks around -
\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A
% V1.7 use I-A1 format used by the IEEE rather than I-A.1
\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1
\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a
\fi
EoTeX
DefPrimitiveI('\ltx@ieeetran@it', undef, undef,
font => { shape => 'italic', family => 'serif', series => 'medium' }, locked => 1);
DefPrimitiveI('\ltx@ieeetran@sc', undef, undef,
font => { shape => 'smallcaps', family => 'serif', series => 'medium' }, locked => 1);
DefMacro('\format@title@font@section', '\ltx@ieeetran@sc');
DefMacro('\format@title@font@subsection', '\ltx@ieeetran@it');
DefMacro('\figurename', 'Fig.');
DefMacro('\tablename', 'TABLE');
DefMacro('\thetable', '\Roman{table}');
DefConstructor('\IEEEQEDclosed',
"?#isMath(<ltx:XMTok role='PUNCT'>\x{220E}</ltx:XMTok>)(\x{220E})");
Let('\IEEEQEDopen', '\IEEEQEDclosed');
Let('\IEEEQED', '\IEEEQEDclosed');
DefMacro('\IEEEQEDhere', sub {
my $t = PopValue('QED@stack');
PushValue('QED@stack', Tokens());
$t || (); });
# Apparently no title...
DefEnvironment('{IEEEproof} OptionalUndigested',
"<ltx:proof class='#class'>"
. "<ltx:title font='#titlefont' _force_font='true' class='#titleclass'>#title</ltx:title>"
. "#body",
# beforeDigest => sub {
# Digest(T_CS('\th@proof')); },
afterConstruct => sub { $_[0]->maybeCloseElement('ltx:proof'); },
afterDigestBegin => sub {
my ($stomach, $whatsit) = @_;
PushValue('QED@stack', T_CS('\qed'));
# Digest(Tokens(T_CS('\the'), T_CS('\thm@bodyfont')));
},
properties => sub {
my $title = Digest(TokenizeInternal('\textbf{\textit{Proof:}}'));
my $titlefont = [$title->unlist]->[1];
$titlefont = $titlefont->getFont if $titlefont;
(title => $title,
titlefont => $titlefont,
class => undef,
titleclass => 'ltx_runin'); },
beforeDigestEnd => sub {
my $qed = PopValue('QED@stack');
($qed ? Digest($qed) : ()); }
);
RawTeX(<<'EoTeX');
\newlength\abovecaptionskip
\newlength\belowcaptionskip
\setlength\abovecaptionskip{0.5\baselineskip}
\setlength\belowcaptionskip{0pt}
EoTeX
DefEnvironment('{IEEEbiography}[]{}',
"<ltx:float class='biography'><ltx:tabular>"
. "<ltx:tr><ltx:td>#1</ltx:td><ltx:td><ltx:inline-block><ltx:text class='ltx_font_bold'>#2</ltx:text> "
. "#body</ltx:inline-block></ltx:td></ltx:tr>"
. "</ltx:tabular></ltx:float>");
DefEnvironment('{IEEEbiographynophoto}[]{}',
"<ltx:float class='biography'><ltx:tabular>"
. "<ltx:tr><ltx:td><ltx:inline-block><ltx:text class='ltx_font_bold'>#2</ltx:text> "
. "#body</ltx:inline-block></ltx:td></ltx:tr>"
. "</ltx:tabular></ltx:float>");
# IEEEeqnarray is similar to eqnarray, but supports subequation numbering.
# These turn on/off (sub)numbering, much like \nonumber TODO Sort this out!
# Starred forms?
DefPrimitive('\IEEEnonumber OptionalMatch:*', sub {
my $numbering = LookupValue('EQUATION_NUMBERING');
my $tags = LookupValue('EQUATIONROW_TAGS');
if ($_[1]) {
$$numbering{retract} = 1;
$$numbering{counter} = undef; }
else {
$$tags{retract} = 1;
$$tags{counter} = undef; }
return; });
DefPrimitive('\IEEEyesnumber OptionalMatch:*', sub {
my $numbering = LookupValue('EQUATION_NUMBERING');
my $tags = LookupValue('EQUATIONROW_TAGS');
if (($$numbering{counter} || 'equation') eq 'subequation') { # Reset any subnumbering
RefStepCounter('equation'); }
if ($_[1]) {
$$numbering{retract} = 0;
$$numbering{counter} = undef; }
else {
$$tags{noretract} = 1;
$$tags{counter} = undef; }
return; });
DefPrimitive('\IEEEyessubnumber OptionalMatch:*', sub {
my $numbering = LookupValue('EQUATION_NUMBERING');
my $tags = LookupValue('EQUATIONROW_TAGS');
if ($_[1]) {
$$numbering{counter} = 'subequation'; }
else {
$$tags{counter} = 'subequation'; }
if ($$tags{preset} || $$numbering{preset}) {
RefStepCounter('subequation'); }
return; });
DefPrimitive('\IEEEnosubnumber OptionalMatch:*', sub {
my $numbering = LookupValue('EQUATION_NUMBERING');
my $tags = LookupValue('EQUATIONROW_TAGS');
if ($_[1]) {
$$numbering{counter} = 'equation'; }
else {
$$tags{counter} = 'equation'; }
return; });
# TODO: The argument is a column specification, like rCl
# We really should parse that and set up the column spec apppropriately,
# but it's different from the standard set of specs!
DefMacroI(T_CS('\IEEEeqnarray'), '{}', '\eqnarray');
Let(T_CS('\endIEEEeqnarray'), T_CS('\endeqnarray'));
DefMacroI(T_CS('\IEEEeqnarray*'), '{}', T_CS('\eqnarray*'));
Let(T_CS('\endIEEEeqnarray*'), T_CS('\endeqnarray*'));
# Let's try to treat \IEEEeqnarraybox as a variant of \array
# Note that the documentation suggests that IEEEeqnarraybox can be used INSIDE math for
# things like cases statements! Argh!!!
DefColumnType('L', sub {
$LaTeXML::BUILD_TEMPLATE->addColumn(after => Tokens(T_CS('\hfil'))); return; });
DefColumnType('C', sub {
$LaTeXML::BUILD_TEMPLATE->addColumn(before => Tokens(T_CS('\hfil')),
after => Tokens(T_CS('\hfil'))); return; });
DefColumnType('R', sub {
$LaTeXML::BUILD_TEMPLATE->addColumn(before => Tokens(T_CS('\hfil'))); return; });
DefMacro('\IEEEeqnarraybox',
'\ifmmode\def\@tempa{\let\endIEEEeqnarraybox\endIEEEeqnarrayboxm\IEEEeqnarrayboxm}'
. '\else\def\@tempa{\let\endIEEEeqnarraybox\endIEEEeqnarrayboxt\IEEEeqnarrayboxt}\fi'
. '\@tempa');
DefMacro('\IEEEeqnarrayboxm OptionalMatch:* {}',
'\@array@bindings{#2}\@@IEEE@array{#2}\@start@alignment');
DefMacroI('\endIEEEeqnarrayboxm', undef,
'\@finish@alignment\@end@array');
DefMacro('\IEEEeqnarrayboxt OptionalMatch:* {}',
'\@@BEGININLINEMATH\@array@bindings{#2}\@@IEEE@array{#2}\@start@alignment');
DefMacroI('\endIEEEeqnarrayboxt', undef,
'\@finish@alignment\@end@array\@@ENDINLINEMATH');
DefConstructor('\@@IEEE@array[] Undigested DigestedBody',
'#3',
beforeDigest => sub { $_[0]->bgroup; },
reversion => '\begin{IEEEeqnarraybox}[#1]{#2}#3\end{IEEEeqnarraybox}');
DefMacro('\IEEEeqnarraynumspace', '');
Let(T_CS('\appendices'), T_CS('\appendix'));
$$LaTeXML::Package::Pool::BIBSTYLES{IEEEtran} = { citestyle => 'numbers', sort => 'true' };
DefMacro('\IEEEsetlabelwidth{}', '\settowidth{\labelwidth}{#1}');
DefMacro('\IEEEusemathlabelsep', '');
DefMacro('\IEEEtriggercmd{}', '');
DefMacro('\IEEElabelindent', '');
DefMacro('\IEEEcalcleftmargin{}', '');
DefMacro('\IEEEiedlabeljustifyc', '');
DefMacro('\IEEEiedlabeljustifyl', '');
DefMacro('\IEEEiedlabeljustifyr', '');
# TODO: Use the optional argument.
# also, we skip the internal @-named variants for now.
DefEnvironment('{IEEEitemize}[]',
"<ltx:itemize xml:id='#id'>#body</ltx:itemize>",
properties => sub { beginItemize('itemize', '@item'); },
beforeDigestEnd => sub { Digest('\par'); },
locked => 1, mode => 'text');
DefEnvironment('{IEEEenumerate}[]',
"<ltx:enumerate xml:id='#id'>#body</ltx:enumerate>",
properties => sub { beginItemize('enumerate', 'enum'); },
beforeDigestEnd => sub { Digest('\par'); },
locked => 1, mode => 'text');
DefEnvironment('{IEEEdescription}[]',
"<ltx:description xml:id='#id'>#body</ltx:description>",
beforeDigest => sub { Let('\makelabel', '\descriptionlabel'); },
properties => sub { beginItemize('description', '@desc'); },
beforeDigestEnd => sub { Digest('\par'); },
locked => 1, mode => 'text');
# override LaTeX's default IED lists
Let('\itemize', '\IEEEitemize');
Let('\enditemize', '\endIEEEitemize');
Let('\enumerate', '\IEEEenumerate');
Let('\endenumerate', '\endIEEEenumerate');
Let('\description', '\IEEEdescription');
Let('\enddescription', '\endIEEEdescription');
Let(T_CS('\begin{itemize}'), '\IEEEitemize');
Let(T_CS('\end{itemize}'), '\endIEEEitemize');
Let(T_CS('\begin{enumerate}'), '\IEEEenumerate');
Let(T_CS('\end{enumerate}'), '\endIEEEenumerate');
Let(T_CS('\begin{description}'), '\IEEEdescription');
Let(T_CS('\end{description}'), '\endIEEEdescription');
# V1.7 provide string macros as article.cls does
DefMacro('\contentsname', 'Contents');
DefMacro('\listfigurename', 'List of Figures');
DefMacro('\listtablename', 'List of Tables');
DefMacro('\refname', 'References');
DefMacro('\indexname', 'Index');
DefMacro('\figurename', 'Fig.');
DefMacro('\tablename', 'TABLE');
DefMacro('\figurename', 'Figure');
DefMacro('\partname', 'Part');
DefMacro('\appendixname', 'Appendix');
DefMacro('\abstractname', 'Abstract');
DefMacro('\IEEEkeywordsname', 'Index Terms');
DefMacro('\IEEEproofname', 'Proof');
# V1.8a no more support for these legacy commands
Let('\authorblockA', '\IEEEauthorblockA');
Let('\authorblockN', '\IEEEauthorblockN');
Let('\authorrefmark', '\IEEEauthorrefmark');
Let('\PARstart', '\IEEEPARstart');
Let('\pubid', '\IEEEpubid');
Let('\pubidadjcol', '\IEEEpubidadjcol');
Let('\specialpapernotice', '\IEEEspecialpapernotice');
# and environments
DefMacro(T_CS('\begin{keywords}'), '\@IEEEkeywords');
DefMacro(T_CS('\end{keywords}'), '\@endIEEEkeywords');
DefMacro('\keywords', sub {
my ($gullet) = @_;
($gullet->ifNext(T_BEGIN)
? (T_CS('\keywords@onearg'))
: T_CS('\@IEEEkeywords')); },
locked => 1);
DefMacro('\keywords@onearg{}', '\@IEEEkeywords #1 \@endIEEEkeywords');
# V1.8 no more support for legacy IED list commands
Let('\labelindent', '\IEEElabelindent');
Let('\calcleftmargin', '\IEEEcalcleftmargin');
Let('\setlabelwidth', '\IEEEsetlabelwidth');
Let('\usemathlabelsep', '\IEEEusemathlabelsep');
Let('\iedlabeljustifyc', '\IEEEiedlabeljustifyc');
Let('\iedlabeljustifyl', '\IEEEiedlabeljustifyl');
Let('\iedlabeljustifyr', '\IEEEiedlabeljustifyr');
# V1.8 no more support for QED and proof stuff
Let('\QED', '\IEEEQED');
Let('\QEDclosed', '\IEEEQEDclosed');
Let('\QEDopen', '\IEEEQEDopen');
DefMacro('\qed', '\ltx@qed');
DefConstructor('\ltx@qed',
"?#isMath(<ltx:XMTok role='PUNCT'>\x{220E}</ltx:XMTok>)(\x{220E})",
reversion => '\qed');
Let('\proof', '\IEEEproof');
Let('\endproof', '\endIEEEproof');
# V1.8 no longer support biography or biographynophoto
Let('\biography', '\IEEEbiography');
Let('\biographynophoto', '\IEEEbiographynophoto');
Let('\endbiography', '\endIEEEbiography');
Let('\endbiographynophoto', '\endIEEEbiographynophoto');
# The \bstctlcite command
# which is used to invoke a BibTeX style control bibliography entry that can alter the formatting of .bst files that support it (such as IEEEtran.bst).
# see docs at http://www.michaelshell.org/tex/ieeetran/tools/
# TODO: Maybe once we can emulate ".bst" files natively this comes into play?
DefMacro('\bstctlcite[]{}', Tokens());
#======================================================================
1;
( run in 0.897 second using v1.01-cache-2.11-cpan-d8267643d1d )