summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/complexity/complexity.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/complexity/complexity.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/complexity/complexity.sty')
-rw-r--r--macros/latex/contrib/complexity/complexity.sty757
1 files changed, 757 insertions, 0 deletions
diff --git a/macros/latex/contrib/complexity/complexity.sty b/macros/latex/contrib/complexity/complexity.sty
new file mode 100644
index 0000000000..8acec3ac4d
--- /dev/null
+++ b/macros/latex/contrib/complexity/complexity.sty
@@ -0,0 +1,757 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% complexity - a LaTeX package that defines commands to typeset
+% Computational Complexity Classes such as $\P$ and $\NP$ (as well
+% as hundreds of others). It also offers several options including
+% which font classes are typeset in and how many are defined (all
+% of them or just the basic, most commonly used ones).
+%
+% Written by Chris Bourke <cbourke@cse.unl.edu>
+%
+% No dependencies other than the standard ifthen package.
+% See complexity.pdf for full documentation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Copyright and license
+% =====================
+%
+% Copyright (C) 2017 Chris Bourke
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, either version 1.3c of this license
+% or (at your option) any later version. The latest version of this
+% license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008/05/04 or later.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Changes made (.81 -> .81a, 2017/09/16)
+% -Updated copyright, added LPPL 1.3c
+% Changes made (.80 -> .81, 2017/09/15)
+% -Removed \typeout message
+% -Cleaned up comments
+% -Added package option (disableredefinitions) to disable redefinitions
+% of \L, \P, \S for authors that need the originals but cannot use the
+% replacements. For backwards compatibility, the they are still redefined
+% by default. Thanks to Enrico Gregorio for the fix.
+% Changes made (.76 -> .80)
+% -Added a cool message using \typeout!
+% -Added \newclass, \newlang, \newfunc commands
+% -Added \renewclass, \renewlang, \renewfunc
+% -Added \class that acts like \lang and \func
+% Changes made (.75 -> .76)
+% -Fixed a spacing bug that may cause extra spaces when not in math
+% mode. Thanks to Nicolas Markey
+% Changes made (.50 -> .75)
+% -Fixed a few misc. bugs
+% -Added negative kerning for \BPPpath, \FPTnu, \FPTsu, \QMIPle, \QMIPne, \XPuniform
+% -Added more {} brackets to all commands using sub/super scripts to ensure
+% proper behavior when they are used as super/subscripts themselves.
+% -Raised the hyphen and added kerning for all classes with hyphens adjoining capital
+% letters
+% -Made a few new internal commands (\complexity@possiblymakesmaller and
+% \complexity@fontcommand) to support a new option: small which typesets
+% classes in inline and display modes a point smaller than the default text
+% size. Special thanks to Till Tantau for the suggestions and code
+% -Defined separate commands \lang and \func for languages and function classes with
+% full options.
+% -Updated Documentation
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e} %
+\ProvidesPackage{complexity}[09/16/17 \space v0.81a]
+
+% Require Packages
+\RequirePackage{ifthen}
+
+% Declare internal commands
+\newcommand\complexity@possiblymakesmaller[1]{#1} % default: do nothing
+\newcommand\complexity@fontcommand{\mathsf} % default: do noting
+\newcommand{\ComplexityFont}[1]{%
+{\ensuremath{\complexity@possiblymakesmaller{\complexity@fontcommand{#1}}}}%extra {} makes everyone happy.
+}
+
+\newcommand{\lang}[1]{{\ensuremath{\mathsf{#1}}}}
+\newcommand{\func}[1]{{\ensuremath{\mathsf{#1}}}}
+\newcommand{\class}[1]{\ComplexityFont{#1}}
+
+\newcommand{\newclass}[2]{\newcommand{#1}{\ComplexityFont{#2}}}
+\newcommand{\newlang}[2]{\newcommand{#1}{\lang{#2}}}
+\newcommand{\newfunc}[2]{\newcommand{#1}{\func{#2}}}
+
+\newcommand{\renewclass}[2]{\renewcommand{#1}{\ComplexityFont{#2}}}
+\newcommand{\renewlang}[2]{\renewcommand{#1}{\lang{#2}}}
+\newcommand{\renewfunc}[2]{\renewcommand{#1}{\func{#2}}}
+
+\newboolean{complexity@fullmode} %
+\setboolean{complexity@fullmode}{true}
+\DeclareOption{full}{%
+ \setboolean{complexity@fullmode}{true}%
+} %
+\DeclareOption{basic}{%
+ \setboolean{complexity@fullmode}{false}%
+} %
+
+\newif\ifcomplexity@noredef
+\DeclareOption{disableredefinitions}{\complexity@noredeftrue}
+
+\DeclareOption{sanserif}{
+ \renewcommand{\complexity@fontcommand}{\mathsf}
+ \renewcommand{\lang}[1]{{\ensuremath{\mathsf{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\mathsf{#1}}}}
+}
+
+\DeclareOption{roman}{
+ \renewcommand{\complexity@fontcommand}{\mathrm}
+ \renewcommand{\lang}[1]{{\ensuremath{\mathrm{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\mathrm{#1}}}}
+}
+
+\DeclareOption{bold}{
+ \renewcommand{\complexity@fontcommand}{\mathbf}
+ \renewcommand{\lang}[1]{{\ensuremath{\mathbf{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\mathbf{#1}}}}
+}
+
+\DeclareOption{typewriter}{
+ \renewcommand{\complexity@fontcommand}{\mathtt}
+ \renewcommand{\lang}[1]{{\ensuremath{\mathtt{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\mathtt{#1}}}}
+}
+
+\DeclareOption{italic}{
+ \renewcommand{\complexity@fontcommand}{\mathit}
+ \renewcommand{\lang}[1]{{\ensuremath{\mathit{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\mathit{#1}}}}
+}
+
+\DeclareOption{caps}{
+ \renewcommand{\complexity@fontcommand}{\textsc}
+ \renewcommand{\lang}[1]{{\ensuremath{\textsc{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\textsc{#1}}}}
+}
+
+\DeclareOption{slant}{
+ \renewcommand{\complexity@fontcommand}{\textsl}
+ \renewcommand{\lang}[1]{{\ensuremath{\textsl{#1}}}}
+ \renewcommand{\func}[1]{{\ensuremath{\textsl{#1}}}}
+}
+
+% Independent classfonts:
+\DeclareOption{classfont=sanserif}{
+ \renewcommand{\complexity@fontcommand}{\mathsf}
+}
+\DeclareOption{classfont=roman}{
+ \renewcommand{\complexity@fontcommand}{\mathrm}
+}
+\DeclareOption{classfont=bold}{
+ \renewcommand{\complexity@fontcommand}{\mathbf}
+}
+\DeclareOption{classfont=typewriter}{
+ \renewcommand{\complexity@fontcommand}{\mathtt}
+}
+\DeclareOption{classfont=italic}{
+ \renewcommand{\complexity@fontcommand}{\mathit}
+}
+\DeclareOption{classfont=caps}{
+ \renewcommand{\complexity@fontcommand}{\textsc}
+}
+\DeclareOption{classfont=slant}{
+ \renewcommand{\complexity@fontcommand}{\textsl}
+}
+
+% Independent langfonts:
+\DeclareOption{langfont=sanserif}{
+ \renewcommand{\lang}[1]{{\ensuremath{\mathsf{#1}}}}
+}
+\DeclareOption{langfont=roman}{
+ \renewcommand{\lang}[1]{{\ensuremath{\mathrm{#1}}}}
+}
+\DeclareOption{langfont=bold}{
+ \renewcommand{\lang}[1]{{\ensuremath{\mathbf{#1}}}}
+}
+\DeclareOption{langfont=typewriter}{
+ \renewcommand{\lang}[1]{{\ensuremath{\mathtt{#1}}}}
+}
+\DeclareOption{langfont=italic}{
+ \renewcommand{\lang}[1]{{\ensuremath{\mathit{#1}}}}
+}
+\DeclareOption{langfont=caps}{
+ \renewcommand{\lang}[1]{{\ensuremath{\textsc{#1}}}}
+}
+\DeclareOption{langfont=slant}{
+ \renewcommand{\lang}[1]{{\ensuremath{\textsl{#1}}}}
+}
+
+% Independent funcfonts:
+\DeclareOption{funcfont=sanserif}{
+ \renewcommand{\func}[1]{{\ensuremath{\mathsf{#1}}}}
+}
+\DeclareOption{funcfont=roman}{
+ \renewcommand{\func}[1]{{\ensuremath{\mathrm{#1}}}}
+}
+\DeclareOption{funcfont=bold}{
+ \renewcommand{\func}[1]{{\ensuremath{\mathbf{#1}}}}
+}
+\DeclareOption{funcfont=typewriter}{
+ \renewcommand{\func}[1]{{\ensuremath{\mathtt{#1}}}}
+}
+\DeclareOption{funcfont=italic}{
+ \renewcommand{\func}[1]{{\ensuremath{\mathit{#1}}}}
+}
+\DeclareOption{funcfont=caps}{
+ \renewcommand{\func}[1]{{\ensuremath{\textsc{#1}}}}
+}
+\DeclareOption{funcfont=slant}{
+ \renewcommand{\func}[1]{{\ensuremath{\textsl{#1}}}}
+}
+
+% Till Tantau's Code for the small option:
+\DeclareOption{small}{
+
+\newcommand\complexity@reducesize{%
+ \ifx\@currsize\normalsize%
+ \small%
+ \else\ifx\@currsize\small%
+ \footnotesize%
+ \else\ifx\@currsize\large%
+ \normalsize%
+ \fi\fi\fi%
+}
+
+\renewcommand\complexity@possiblymakesmaller[1]{%
+ \mathchoice%
+ {\hbox{\complexity@reducesize$#1$}}% display
+ {\hbox{\complexity@reducesize$#1$}}% normal
+ {#1}%subscript
+ {#1}%subsubscript (I think)
+}
+
+}
+
+
+\DeclareOption*{
+\PackageWarning{complexity}{Unknown option `\CurrentOption'. Using default `sanserif', and `full'} %
+\renewcommand{\ComplexityFont}[1]{{\ensuremath{\mathsf{#1}}}}
+\renewcommand{\lang}[1]{{\ensuremath{\mathsf{#1}}}}
+\setboolean{complexity@fullmode}{true}
+}
+
+\ProcessOptions
+
+% Define some internal commands
+% such as a standard kerning value for several commands
+\newcommand{\complexity@kern}{{\kern-.10em}}
+\newcommand{\complexity@hyphen}{ %
+\lower-.12em\hbox{\textrm{-}} %
+}
+
+\newcommand{\complexity@hyphenleft}{\kern-.075em\textrm{-}}
+\newcommand{\complexity@hyphenright}{\textrm{-}\kern-.05em}
+
+% Define some useful commands to append to other classes
+
+\newcommand{\co}[1]{\ComplexityFont{co}#1}
+\newcommand{\parity}{\oplus}
+
+% Define some general functions
+\newcommand{\llog}{\func{log}}
+\newcommand{\poly}{\func{poly}}
+\newcommand{\polylog}{\func{polylog}}
+\newcommand{\qpoly}{\func{qpoly}}
+\newcommand{\qlog}{\func{qlog}}
+\newcommand{\MOD}{\func{MOD}}
+\newcommand{\Mod}{\func{Mod}}
+
+% Define Common Sets/Languages
+\newcommand{\CVP}{\lang{CVP}}
+\newcommand{\SAT}{\lang{SAT}}
+\newcommand{\MaxSAT}{\lang{MaxSAT}}
+
+
+% Alternatives for \L, \P, \S if disabled
+\newcommand{\cL}{\ComplexityFont{L}}
+\newcommand{\cP}{\ComplexityFont{P}}
+\newcommand{\cS}{\ComplexityFont{S}}
+
+% We redefine 3 commands, but preserve them for usage
+\let\defaultL\L % for back compatibility
+\let\defaultP\P % for back compatibility
+\let\defaultS\S % for back compatibility
+% Only redefine if not disabled
+\ifcomplexity@noredef\else
+\renewcommand{\L}{\ComplexityFont{L}}
+\renewcommand{\P}{\ComplexityFont{P}}
+\renewcommand{\S}{\ComplexityFont{S}}
+\fi
+
+
+% Major Classes listed in Alphabetical order
+
+%%%%%%% Standard Classes
+
+% A
+\newcommand{\AC}{\ComplexityFont{AC}}
+\newcommand{\ACC}{\ComplexityFont{ACC}}
+\newcommand{\AH}{\ComplexityFont{AH}}
+\newcommand{\AL}{\ComplexityFont{AL}}
+\newcommand{\coAM}{\ComplexityFont{coAM}}
+\newcommand{\AM}{\ComplexityFont{AM}}
+\newcommand{\AMEXP}{\ComplexityFont{AM\complexity@hyphen EXP}}
+\newcommand{\AP}{\ComplexityFont{AP}}
+
+% B
+\newcommand{\BH}{\ComplexityFont{BH}}
+\newcommand{\BPE}{\ComplexityFont{BPE}}
+\newcommand{\BPEE}{\ComplexityFont{BPEE}}
+\newcommand{\BPP}{\ComplexityFont{BPP}}
+\newcommand{\coBPP}{\ComplexityFont{coBPP}}
+\newcommand{\BPSPACE}{\ComplexityFont{BPSPACE}}
+\newcommand{\BPTIME}{\ComplexityFont{BPTIME}}
+\newcommand{\BQP}{\ComplexityFont{BQP}}
+\newcommand{\BQTIME}{\ComplexityFont{BQTIME}}
+
+% C
+\newcommand{\cc}{\ComplexityFont{cc}}
+\newcommand{\C}{\ComplexityFont{C}} %This isn't a class, but used for \C_{=}\AnotherClass
+\newcommand{\CeL}{\ComplexityFont{C}_{=}\ComplexityFont{L}} %C_=L
+\newcommand{\CeP}{\ComplexityFont{C}_{=}\ComplexityFont{P}} %C_=P
+\newcommand{\coCeP}{\ComplexityFont{coC}_{=}\ComplexityFont{P}} %C_=P
+\newcommand{\CFL}{\ComplexityFont{CFL}}
+\newcommand{\CH}{\ComplexityFont{CH}}
+\newcommand{\CkP}{\ComplexityFont{C}_{\ComplexityFont{k}}\ComplexityFont{P}} %C_kP
+\newcommand{\CSIZE}{\ComplexityFont{CSIZE}}
+
+% D
+\newcommand{\DET}{\ComplexityFont{DET}}
+\newcommand{\DSPACE}{\ComplexityFont{DSPACE}}
+\newcommand{\DTIME}{\ComplexityFont{DTIME}}
+\newcommand{\DTISP}{\ComplexityFont{DTISP}}
+
+% E
+\newcommand{\E}{\ComplexityFont{E}}
+\newcommand{\EE}{\ComplexityFont{EE}}
+\newcommand{\EESPACE}{\ComplexityFont{EESPACE}}
+\newcommand{\EEXP}{\ComplexityFont{EEXP}}
+\newcommand{\EH}{\ComplexityFont{EH}}
+\newcommand{\EEE}{\ComplexityFont{EEE}}
+\newcommand{\EPTAS}{\ComplexityFont{EPTAS}}
+\newcommand{\ESPACE}{\ComplexityFont{ESPACE}}
+\newcommand{\EXP}{\ComplexityFont{EXP}}
+\newcommand{\EXPSPACE}{\ComplexityFont{EXPSPACE}}
+
+% F
+\newcommand{\FNL}{\ComplexityFont{FNL}}
+\newcommand{\FNP}{\ComplexityFont{FNP}}
+\newcommand{\FP}{\ComplexityFont{FP}}
+\newcommand{\FPRAS}{\ComplexityFont{FPRAS}}
+\newcommand{\FQMA}{\ComplexityFont{FQMA}}
+
+% G
+\newcommand{\GA}{\ComplexityFont{GA}}
+\newcommand{\Gap}{\ComplexityFont{Gap}}
+\newcommand{\GapAC}{\ComplexityFont{GapAC}}
+\newcommand{\GapL}{\ComplexityFont{GapL}}
+\newcommand{\GapP}{\ComplexityFont{GapP}}
+\newcommand{\GI}{\ComplexityFont{GI}}
+
+% H
+\newcommand{\Heur}{\ComplexityFont{Heur}}
+\newcommand{\HSPACE}{\ComplexityFont{HSPACE}}
+\newcommand{\HeurBPP}{\ComplexityFont{HeurBPP}}
+\newcommand{\HeurBPTIME}{\ComplexityFont{HeurBPTIME}}
+
+% I
+\newcommand{\IP}{\ComplexityFont{IP}}
+
+% J
+
+% K
+\newcommand{\K}{\ComplexityFont{K}}
+\newcommand{\KT}{\ComplexityFont{KT}}
+
+% L
+\newcommand{\LIN}{\ComplexityFont{LIN}}
+\newcommand{\LogFew}{\ComplexityFont{LogFew}}
+\newcommand{\LogFewNL}{\ComplexityFont{LogFewNL}}
+
+% M
+\newcommand{\MA}{\ComplexityFont{MA}}
+\newcommand{\coMA}{\ComplexityFont{coMA}}
+\newcommand{\MAC}{\ComplexityFont{MAC}}
+\newcommand{\MAE}{\ComplexityFont{MA\complexity@hyphen E}}
+\newcommand{\MAEXP}{\ComplexityFont{MA\complexity@hyphen EXP}}
+\newcommand{\mAL}{\ComplexityFont{mAL}}
+\newcommand{\MaxNP}{\ComplexityFont{MaxNP}}
+\newcommand{\MaxPB}{\ComplexityFont{MaxPB}}
+\newcommand{\MaxSNP}{\ComplexityFont{MaxSNP}}
+\newcommand{\MinPB}{\ComplexityFont{MinPB}}
+\newcommand{\MIP}{\ComplexityFont{MIP}}
+\newcommand{\mL}{\ComplexityFont{mL}}
+\newcommand{\mNC}{\ComplexityFont{mNC}}
+\newcommand{\mcoNL}{\ComplexityFont{comNL}}
+\newcommand{\mNL}{\ComplexityFont{mNL}}
+\newcommand{\mNP}{\ComplexityFont{mNP}}
+\newcommand{\ModkL}{{\ComplexityFont{Mod}_k\ComplexityFont{L}}}
+\newcommand{\ModkP}{{\ComplexityFont{Mod}_k\ComplexityFont{P}}}
+\newcommand{\ModP}{\ComplexityFont{ModP}}
+\newcommand{\mP}{\ComplexityFont{mP}}
+\newcommand{\MP}{\ComplexityFont{MP}}
+\newcommand{\MPC}{\ComplexityFont{MPC}}
+\newcommand{\mTC}{\ComplexityFont{mTC}}
+
+% N
+\newcommand{\NC}{\ComplexityFont{NC}}
+\newcommand{\coNE}{\ComplexityFont{coNE}}
+\newcommand{\NE}{\ComplexityFont{NE}}
+\newcommand{\NEE}{\ComplexityFont{NEE}}
+\newcommand{\NEEE}{\ComplexityFont{NEEE}}
+\newcommand{\NEEXP}{\ComplexityFont{NEEXP}}
+\newcommand{\coNEXP}{\ComplexityFont{coNEXP}}
+\newcommand{\NEXP}{\ComplexityFont{NEXP}}
+\newcommand{\coNL}{\ComplexityFont{coNL}}
+\newcommand{\NL}{\ComplexityFont{NL}}
+\newcommand{\NLIN}{\ComplexityFont{NLIN}}
+\newcommand{\coNP}{\ComplexityFont{coNP}}
+\newcommand{\NP}{\ComplexityFont{NP}}
+\newcommand{\NPC}{\ComplexityFont{NPC}}
+\newcommand{\NPI}{\ComplexityFont{NPI}}
+\newcommand{\NPSPACE}{\ComplexityFont{NPSPACE}}
+\newcommand{\coNQP}{\ComplexityFont{coNQP}}
+\newcommand{\NQP}{\ComplexityFont{NQP}}
+\newcommand{\NSPACE}{\ComplexityFont{NSPACE}}
+\newcommand{\NTIME}{\ComplexityFont{NTIME}}
+
+% O
+\newcommand{\Opt}{\ComplexityFont{Opt}}
+\newcommand{\OptP}{\Opt\P}
+
+% P
+\newcommand{\PAC}{\ComplexityFont{PAC}}
+\newcommand{\PCD}{\ComplexityFont{PCD}}
+\newcommand{\PCP}{\ComplexityFont{PCP}}
+\newcommand{\Ppoly}{\P/\poly}
+\newcommand{\PH}{\ComplexityFont{PH}}
+\newcommand{\PEXP}{\ComplexityFont{PEXP}}
+\newcommand{\PL}{\ComplexityFont{PL}}
+\newcommand{\PP}{\ComplexityFont{PP}}
+\newcommand{\PPSPACE}{\ComplexityFont{PPSPACE}}
+\newcommand{\p}{\ComplexityFont{p}}
+\newcommand{\Promise}{\ComplexityFont{Promise}}
+\newcommand{\PromiseBPP}{\ComplexityFont{PromiseBPP}}
+\newcommand{\PromiseBQP}{\ComplexityFont{PromiseBQP}}
+\newcommand{\PromiseP}{\ComplexityFont{PromiseP}}
+\newcommand{\PromiseRP}{\ComplexityFont{PromiseRP}}
+\newcommand{\PrSPACE}{\ComplexityFont{PrSPACE}}
+\newcommand{\PSPACE}{\ComplexityFont{PSPACE}}
+\newcommand{\PT}{\ComplexityFont{PT}}
+\newcommand{\PTAS}{\ComplexityFont{PTAS}}
+\newcommand{\PTWK}{\ComplexityFont{PT/WK}}
+
+% Q
+\newcommand{\QAC}{\ComplexityFont{QAC}}
+\newcommand{\QACC}{\ComplexityFont{QACC}}
+\newcommand{\QAM}{\ComplexityFont{QAM}}
+\newcommand{\QCFL}{\ComplexityFont{QCFL}}
+\newcommand{\QCMA}{\ComplexityFont{QCMA}}
+\newcommand{\QH}{\ComplexityFont{QH}}
+\newcommand{\QIP}{\ComplexityFont{QIP}}
+\newcommand{\QMA}{\ComplexityFont{QMA}}
+\newcommand{\QMAM}{\ComplexityFont{QMAM}}
+\newcommand{\QMIP}{\ComplexityFont{QMIP}}
+\newcommand{\QNC}{\ComplexityFont{QNC}}
+\newcommand{\QP}{\ComplexityFont{QP}}
+\newcommand{\QPSPACE}{\ComplexityFont{QPSPACE}}
+
+% R
+\newcommand{\R}{\ComplexityFont{R}}
+\newcommand{\coRE}{\ComplexityFont{coRE}}
+\newcommand{\RE}{\ComplexityFont{RE}}
+\newcommand{\REG}{\ComplexityFont{REG}}
+\newcommand{\RL}{\ComplexityFont{RL}}
+\newcommand{\coRNC}{\ComplexityFont{coRNC}}
+\newcommand{\RNC}{\ComplexityFont{RNC}}
+\newcommand{\coRP}{\ComplexityFont{coRP}}
+\newcommand{\RP}{\ComplexityFont{RP}}
+\newcommand{\RSPACE}{\ComplexityFont{RSPACE}}
+
+% S
+\newcommand{\SAC}{\ComplexityFont{SAC}}
+\newcommand{\SC}{\ComplexityFont{SC}}
+\newcommand{\SE}{\ComplexityFont{SE}}
+\newcommand{\SEH}{\ComplexityFont{SEH}}
+\newcommand{\SKC}{\ComplexityFont{SKC}}
+\newcommand{\SIZE}{\ComplexityFont{SIZE}}
+\newcommand{\SPACE}{\ComplexityFont{SPACE}}
+\newcommand{\SL}{\ComplexityFont{SL}}
+\newcommand{\coSL}{\ComplexityFont{coSL}}
+\newcommand{\SPARSE}{\ComplexityFont{SPARSE}}
+\newcommand{\SPL}{\ComplexityFont{SPL}}
+\newcommand{\SPP}{\ComplexityFont{SPP}}
+\newcommand{\SUBEXP}{\ComplexityFont{SUBEXP}}
+\newcommand{\SZK}{\ComplexityFont{SZK}}
+
+% T
+\newcommand{\TC}{\ComplexityFont{TC}}
+
+% U
+\newcommand{\coUP}{\ComplexityFont{coUP}}
+\newcommand{\UP}{\ComplexityFont{UP}}
+
+% V
+
+% W
+\newcommand{\W}{\ComplexityFont{W}}
+
+% X
+\newcommand{\ZPE}{\ComplexityFont{ZPE}}
+\newcommand{\ZPP}{\ComplexityFont{ZPP}}
+\newcommand{\ZPTIME}{\ComplexityFont{ZPTIME}}
+
+%%%%%%% Extended Classes
+\ifthenelse{\boolean{complexity@fullmode}}{ %THEN we do ALL the classes
+
+% A
+\newcommand{\A}{\ComplexityFont{A}}
+\newcommand{\AlgP}{\ComplexityFont{AlgP}}
+\newcommand{\Amp}{\ComplexityFont{Amp}}
+\newcommand{\AmpMP}{\ComplexityFont{AmpMP}}
+\newcommand{\AmpPBQP}{\ComplexityFont{AmpPBQP}}
+\newcommand{\APP}{\ComplexityFont{APP}}
+\newcommand{\APX}{\ComplexityFont{APX}}
+\newcommand{\AUCSPACE}{\ComplexityFont{AUC\complexity@hyphen SPACE}}
+\newcommand{\AuxPDA}{\ComplexityFont{AuxPDA}}
+\newcommand{\AVBPP}{\ComplexityFont{AVBPP}}
+\newcommand{\AvE}{\ComplexityFont{AvE}}
+\newcommand{\AvP}{\ComplexityFont{AvP}}
+\newcommand{\AW}{\ComplexityFont{AW}}
+\newcommand{\AWPP}{\ComplexityFont{AWPP}}
+
+% B
+\newcommand{\betaP}{\beta\ComplexityFont{P}}
+\newcommand{\BP}{\ComplexityFont{BP}}
+
+\newcommand{\BPPpath}{{\ComplexityFont{BPP}_{\complexity@kern\ComplexityFont{path}}}}
+
+\newcommand{\BPHSPACE}{{\ComplexityFont{BP_{H}SPACE}}}
+\newcommand{\BPL}{\ComplexityFont{BPL}}
+\newcommand{\BPPOBDD}{\ComplexityFont{BPP\complexity@hyphen OBDD}}
+\newcommand{\BPQP}{\ComplexityFont{BPQP}}
+\newcommand{\kBQBP}{k\complexity@hyphenright\ComplexityFont{BQBP}}
+\newcommand{\BQNC}{\ComplexityFont{BQNC}}
+\newcommand{\BQNP}{\ComplexityFont{BQNP}}
+\newcommand{\BQPOBDD}{\ComplexityFont{BQP\complexity@hyphen OBDD}}
+\newcommand{\kBWBP}{k\complexity@hyphenright\ComplexityFont{BWBP}}
+
+% C
+%\newcommand{\Check}{\ComplexityFont{Check}} this has conflicts with amsmath
+\newcommand{\CLOG}{\ComplexityFont{CLOG}}
+\newcommand{\CNP}{\ComplexityFont{CNP}}
+\newcommand{\cofrIP}{\ComplexityFont{cofrIP}}
+\newcommand{\Coh}{\ComplexityFont{Coh}}
+\newcommand{\compIP}{\ComplexityFont{compIP}}
+\newcommand{\compNP}{\ComplexityFont{compNP}}
+\newcommand{\coUCC}{\ComplexityFont{coUCC}}
+\newcommand{\CP}{\ComplexityFont{CP}}
+\newcommand{\CSL}{\ComplexityFont{CSL}}
+\newcommand{\CZK}{\ComplexityFont{CZK}}
+
+% D
+\newcommand{\D}{\ComplexityFont{D}}
+\newcommand{\DCFL}{\ComplexityFont{DCFL}}
+\newcommand{\DiffAC}{\ComplexityFont{DiffAC}}
+\newcommand{\DisNP}{\ComplexityFont{DisNP}}
+\newcommand{\DistNP}{\ComplexityFont{DistNP}}
+\newcommand{\DP}{\ComplexityFont{DP}}
+\newcommand{\DQP}{\ComplexityFont{DQP}}
+\newcommand{\Dyn}{\ComplexityFont{Dyn}}
+\newcommand{\DynFO}{\ComplexityFont{Dyn\complexity@hyphenright FO}}
+
+% E
+\newcommand{\EL}{\ComplexityFont{EL}}
+\newcommand{\ELEMENTARY}{\ComplexityFont{ELEMENTARY}}
+\newcommand{\ELkP}{{\ComplexityFont{EL}_{k}\ComplexityFont{P}}}
+\newcommand{\kEQBP}{k\complexity@hyphenright\ComplexityFont{EQBP}}
+\newcommand{\EQP}{\ComplexityFont{EQP}}
+\newcommand{\EQTIME}{\ComplexityFont{EQTIME}}
+\newcommand{\EQBP}{\ComplexityFont{EQBP}}
+\newcommand{\ExistsBPP}{\ComplexityFont{ExistsBPP}}
+\newcommand{\ExistsNISZK}{\ComplexityFont{ExistsNISZK}}
+
+
+% F
+\newcommand{\FBQP}{\ComplexityFont{FBQP}}
+\newcommand{\Few}{\ComplexityFont{Few}}
+\newcommand{\FewP}{\ComplexityFont{FewP}}
+\newcommand{\FH}{\ComplexityFont{FH}}
+\newcommand{\FO}{\ComplexityFont{FO}}
+\newcommand{\FOLL}{\ComplexityFont{FOLL}}
+\newcommand{\FPR}{\ComplexityFont{FPR}}
+\newcommand{\FPT}{\ComplexityFont{FPT}}
+\newcommand{\FPTAS}{\ComplexityFont{FPTAS}}
+\newcommand{\FPTnu}{{\ComplexityFont{FPT}_{\complexity@kern\ComplexityFont{nu}}}}
+\newcommand{\FPTsu}{{\ComplexityFont{FPT}_{\complexity@kern\ComplexityFont{su}}}}
+\newcommand{\frIP}{\ComplexityFont{frIP}}
+\newcommand{\FTAPE}{\ComplexityFont{F\complexity@hyphen TAPE}}
+\newcommand{\FTIME}{\ComplexityFont{F\complexity@hyphen TIME}}
+
+%G
+\newcommand{\G}{\ComplexityFont{G}}
+\newcommand{\GANSPACE}{\ComplexityFont{GAN\complexity@hyphen SPACE}}
+\newcommand{\GC}{\ComplexityFont{GC}}
+\newcommand{\GCSL}{\ComplexityFont{GCSL}}
+\newcommand{\GPCD}{\ComplexityFont{GPCD}}
+
+% H
+\newcommand{\HkP}{{\ComplexityFont{H}_k\ComplexityFont{P}}}
+\newcommand{\HVSZK}{\ComplexityFont{HVSZK}}
+
+% I
+\newcommand{\IC}{\ComplexityFont{IC}}
+\newcommand{\IPP}{\ComplexityFont{IPP}}
+
+% J
+% What? No "J" classes?
+
+% K
+
+% L
+\newcommand{\LkP}{{\ComplexityFont{L}_k\ComplexityFont{P}}}
+\newcommand{\LOGCFL}{\ComplexityFont{LOGCFL}}
+\newcommand{\LOGNP}{\ComplexityFont{LOGNP}}
+\newcommand{\LOGSNP}{\ComplexityFont{LOGSNP}}
+\newcommand{\LWPP}{\ComplexityFont{LWPP}}
+
+% M
+\newcommand{\M}{\ComplexityFont{M}}
+\newcommand{\ModZkL}{{\ComplexityFont{ModZ}_k\ComplexityFont{L}}}
+\newcommand{\MkP}{{\ComplexityFont{(M}_k\ComplexityFont{)P}}}
+
+% N
+\newcommand{\NAuxPDA}{\ComplexityFont{NAuxPDA}}
+\newcommand{\NIPZK}{\ComplexityFont{NIPZK}}
+\newcommand{\NIQPZK}{\ComplexityFont{NIQPZK}}
+\newcommand{\NIQSZK}{\ComplexityFont{NIQSZK}}
+\newcommand{\NISZK}{\ComplexityFont{NISZK}}
+\newcommand{\NLOG}{\ComplexityFont{NLOG}}
+\newcommand{\NPMV}{\ComplexityFont{NPMV}}
+\newcommand{\NPMVsel}{\ComplexityFont{NPMV\complexity@hyphenleft sel}}
+\newcommand{\NPO}{\ComplexityFont{NPO}}
+\newcommand{\NPOPB}{\ComplexityFont{NPOPB}}
+\newcommand{\NPSV}{\ComplexityFont{NPSV}}
+\newcommand{\NPSVsel}{\ComplexityFont{NPSV\complexity@hyphenleft sel}} %don't use a \complexity@hyphen here, it looks bad
+\newcommand{\NT}{\ComplexityFont{NT}}
+
+% O
+\newcommand{\OBDD}{\ComplexityFont{OBDD}}
+\newcommand{\OCQ}{\ComplexityFont{OCQ}}
+
+% P
+\newcommand{\PBP}{\ComplexityFont{PBP}}
+\newcommand{\kPBP}{k\complexity@hyphenright\ComplexityFont{PBP}} %don't use a \complexity@hyphen here, it looks bad
+\newcommand{\Pclose}{\ComplexityFont{P\complexity@hyphenleft close}}
+\newcommand{\PermUP}{\ComplexityFont{PermUP}}
+\newcommand{\PF}{\ComplexityFont{PF}}
+\newcommand{\PFCHK}{\ComplexityFont{PFCHK}}
+\newcommand{\PhP}{\ComplexityFont{PhP}}
+\newcommand{\PINC}{\ComplexityFont{PINC}}
+\newcommand{\PIO}{\ComplexityFont{PIO}}
+\newcommand{\PKC}{\ComplexityFont{PKC}}
+\newcommand{\PLF}{\ComplexityFont{PL}}
+\newcommand{\PLL}{\ComplexityFont{PLL}}
+\newcommand{\PLS}{\ComplexityFont{PLS}}
+\newcommand{\POBDD}{\ComplexityFont{P\complexity@hyphen OBDD}}
+\newcommand{\PODN}{\ComplexityFont{PODN}}
+\newcommand{\polyL}{\ComplexityFont{polyL}}
+\newcommand{\PostBQP}{\ComplexityFont{PostBQP}}
+\newcommand{\PPA}{\ComplexityFont{PPA}}
+\newcommand{\PPAD}{\ComplexityFont{PPAD}}
+\newcommand{\PPADS}{\ComplexityFont{PPADS}}
+\newcommand{\PPP}{\ComplexityFont{PPP}}
+\newcommand{\PQUERY}{\ComplexityFont{PQUERY}}
+\newcommand{\PR}{\ComplexityFont{PR}}
+\newcommand{\PrHSPACE}{{\ComplexityFont{Pr}_{\ComplexityFont{H}}\ComplexityFont{SPACE}}}
+\newcommand{\promiseBPP}{\ComplexityFont{promiseBPP}}
+\newcommand{\promiseBQP}{\ComplexityFont{promiseBQP}}
+\newcommand{\promiseP}{\ComplexityFont{promiseP}}
+\newcommand{\promiseRP}{\ComplexityFont{promiseRP}}
+\newcommand{\PSel}{\ComplexityFont{P\complexity@hyphen Sel}}
+\newcommand{\PSK}{\ComplexityFont{PSK}}
+\newcommand{\PTAPE}{\ComplexityFont{PTAPE}}
+\newcommand{\PZK}{\ComplexityFont{PZK}}
+
+% Q
+\newcommand{\QPLIN}{\ComplexityFont{QPLIN}}
+\newcommand{\Qpoly}{\ComplexityFont{Qpoly}}
+\newcommand{\QMIPle}{{\ComplexityFont{QMIP}_{\complexity@kern\ComplexityFont{le}}}}
+\newcommand{\QMIPne}{{\ComplexityFont{QMIP}_{\complexity@kern\ComplexityFont{ne}}}}
+\newcommand{\QSZK}{\ComplexityFont{QSZK}}
+
+% R
+\newcommand{\RevSPACE}{\ComplexityFont{RevSPACE}}
+\newcommand{\RHL}{{\ComplexityFont{R}_{\ComplexityFont{H}}\ComplexityFont{L}}}
+\newcommand{\RHSPACE}{{\ComplexityFont{R}_{\ComplexityFont{H}}\ComplexityFont{SPACE}}}
+\newcommand{\RNP}{\ComplexityFont{RNP}}
+\newcommand{\RPP}{\ComplexityFont{RPP}}
+
+% S
+\newcommand{\SAPTIME}{\ComplexityFont{SAPTIME}}
+\newcommand{\SBP}{\ComplexityFont{SBP}}
+\newcommand{\Sel}{\ComplexityFont{Sel}}
+\newcommand{\SelfNP}{\ComplexityFont{SelfNP}}
+\newcommand{\SF}{\ComplexityFont{SF}}
+\newcommand{\SLICEWISEPSPACE}{\ComplexityFont{SLICEWISEPSPACE}}
+\newcommand{\SNP}{\ComplexityFont{SNP}}
+\newcommand{\SOE}{\ComplexityFont{SO\complexity@hyphen E}}
+\newcommand{\SP}{\ComplexityFont{SP}}
+\newcommand{\spanP}{\ComplexityFont{span}\complexity@hyphenright\ComplexityFont{P}}
+\newcommand{\symP}{\ComplexityFont{symP}}
+
+% T
+\newcommand{\TALLY}{\ComplexityFont{TALLY}}
+\newcommand{\TFNP}{\ComplexityFont{TFNP}}
+\newcommand{\ThC}{\ComplexityFont{ThC}}
+\newcommand{\TreeBQP}{\ComplexityFont{TreeBQP}}
+\newcommand{\TREEREGULAR}{\ComplexityFont{TREE\complexity@hyphen REGULAR}}
+
+%U
+\newcommand{\UAP}{\ComplexityFont{UAP}}
+\newcommand{\UCC}{\ComplexityFont{UCC}}
+\newcommand{\UL}{\ComplexityFont{UL}}
+\newcommand{\UE}{\ComplexityFont{UE}}
+\newcommand{\US}{\ComplexityFont{US}}
+
+% V
+\newcommand{\VNC}{\ComplexityFont{VNC}}
+\newcommand{\VNP}{\ComplexityFont{VNP}}
+\newcommand{\VP}{\ComplexityFont{VP}}
+\newcommand{\VQP}{\ComplexityFont{VQP}}
+
+% W
+\newcommand{\WAPP}{\ComplexityFont{WAPP}}
+\newcommand{\WPP}{\ComplexityFont{WPP}}
+
+% X
+\newcommand{\XORMIP}{{\ComplexityFont{XOR\complexity@hyphen MIP}^*[2,1]}}
+\newcommand{\XP}{\ComplexityFont{XP}}
+\newcommand{\XPuniform}{{\ComplexityFont{XP}_{\complexity@kern\ComplexityFont{uniform}}}}
+
+% Y
+\newcommand{\YACC}{\ComplexityFont{YACC}}
+
+% Z
+
+% We now include the user defined commands which must be in a file named
+% mycomplexity
+% We use this convention because the primitive \input may load packages
+% more than once, leading to unnecessary redefinitions and strange results
+
+}{}
+
+\InputIfFileExists{mycomplexity.sty}{}{\PackageWarning{complexity}{User Defined Commands file `mycomplexity.sty' not found, it will not be loaded.}}