summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/cool
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-09-25 23:46:58 +0000
committerKarl Berry <karl@freefriends.org>2006-09-25 23:46:58 +0000
commitd4f96dc70d6aad918f541123e66589a2e44e18f1 (patch)
treebc933bc54a70e3ab4cf699a6c2d778b062287d16 /Master/texmf-dist/source/latex/cool
parent66d540bf33713d5f36291b9e7c8a8f8039aebdb4 (diff)
new package cool (25sep06)
git-svn-id: svn://tug.org/texlive/trunk@2199 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/cool')
-rw-r--r--Master/texmf-dist/source/latex/cool/cool.dtx5787
-rw-r--r--Master/texmf-dist/source/latex/cool/cool.ins40
2 files changed, 5827 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/cool/cool.dtx b/Master/texmf-dist/source/latex/cool/cool.dtx
new file mode 100644
index 00000000000..0312fb8fee0
--- /dev/null
+++ b/Master/texmf-dist/source/latex/cool/cool.dtx
@@ -0,0 +1,5787 @@
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{cool}
+%<package> [2006/09/17 v1.2 COntent Oriented LaTeX]
+%<package>\RequirePackage{ifthen}
+%<package>\RequirePackage{coollist}
+%<package>\RequirePackage{coolstr}
+%<package>\RequirePackage{forloop}
+%<package>\RequirePackage{amsmath}
+%<package>\RequirePackage{amssymb}
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{cool}
+\usepackage{url}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{cool.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \iffalse meta-comment
+% remove this comment to get a checksum
+% \CheckSum{0}
+% \fi
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \changes{v0}{2005/07/20}{pre-Initial version [tenative edition]}
+% \changes{v1.0}{2005/08/27}{Initial Release}
+% \changes{v1.1}{2006/03/19}{Added listlenstore to package to allow storing of the list length}
+% \changes{v1.2}{2006/09/17}{Split off the list, string, and forloop parts to separate packages}
+%
+% \GetFileInfo{cool.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
+% \DoNotIndex{\@ne,\expandafter}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
+% \DoNotIndex{\closeout,\day,\def,\edef,\gdef,\let,\empty,\endgroup}
+% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic}
+% \DoNotIndex{\if,\fi,\ifthenelse,\else,\setboolean,\boolean,\newboolean,\provideboolean,\equal,\AND,\OR,\NOT,\whiledo}
+% \DoNotIndex{\ifcase,\ifcat,\or,\else}
+% \DoNotIndex{\par,\parbox,\mbox,\hbox,\begin,\end,\nabla,\partial}
+% \DoNotIndex{\overline,\bar,\small,\tiny,\mathchoice,\scriptsize,\textrm,\texttt}
+% \DoNotIndex{\alpha,\beta,\gamma,\epsilon,\varepsilon,\delta,\zeta,\eta,\theta,\vartheta,\iota,\kappa,\lambda,\mu,\nu}
+% \DoNotIndex{\xi,\omicron,\pi,\varpi,\rho,\varrho,\sigma,\tau,\upsilon,\phi,\varphi,\chi,\psi,\omega}
+% \DoNotIndex{\Delta,\Gamma,\Theta,\Lambda,\Xi,\Pi,\Sigma,\Phi,\Psi,\Omega}
+% \DoNotIndex{\digamma,\lceil,\rceil,\lfloor,\rfloor,\left,\right,\inp,\inb,\inbr,\inap,\nop}
+% \DoNotIndex{\sum,\prod,\int,\log,\ln,\exp,\sin,\cos,\tan,\csc,\sec,\cot,\arcsin,\arccos,\arctan,\det}
+% \DoNotIndex{\sinh,\cosh,\tanh,\csch,\sech,\coth,\arcsinh,\arccosh,\arctanh}
+% \DoNotIndex{\mod,\max,\min,\gcd,\lcm,\wp,\arg,\dots,\infty,}
+% \DoNotIndex{\frac,\binom,\braket,\@@atop}
+% \DoNotIndex{\cdot,\ldots,\tilde,\times,\dagger,\relax}
+% \DoNotIndex{\mathbb,\roman,\bf,\mathord,\cal,\DeclareMathOperator,\PackageError,\PackageWarning}
+% \DoNotIndex{\csname,\endcsname,\ifx,\ifnum}
+% \DoNotIndex{\COOL@Hypergeometric@pq,\COOL@Hypergeometric@pq@ab@value,\hideOnSF,\COOL@decide@paren}
+% \DoNotIndex{\COOL@decide@indicies}
+% \DoNotIndex{\mod,\bmod,\pmod,\pod,\operatorname}
+% \DoNotIndex{\forLoop}
+% \DoNotIndex{
+% \COOL@notation@AiryAiParen,
+% \COOL@notation@AiryBiParen,
+% \COOL@notation@AppellFOneParen,
+% \COOL@notation@ArcCoshParen,
+% \COOL@notation@ArcCosParen,
+% \COOL@notation@ArcCothParen,
+% \COOL@notation@ArcCotParen,
+% \COOL@notation@ArcCschParen,
+% \COOL@notation@ArcCscParen,
+% \COOL@notation@ArcSechParen,
+% \COOL@notation@ArcSecParen,
+% \COOL@notation@ArcSinhParen,
+% \COOL@notation@ArcSinParen,
+% \COOL@notation@ArcTanhParen,
+% \COOL@notation@ArcTanParen,
+% \COOL@notation@ArithGeoMeanParen,
+% \COOL@notation@AssocLegendrePParen,
+% \COOL@notation@AssocLegendreQParen,
+% \COOL@notation@BernoulliParen,
+% \COOL@notation@BernoulliBParen,
+% \COOL@notation@BesselIParen,
+% \COOL@notation@BesselJParen,
+% \COOL@notation@BesselKParen,
+% \COOL@notation@BesselYParen,
+% \COOL@notation@BetaParen,
+% \COOL@notation@BetaRegularizedParen,
+% \COOL@notation@CarmichaelLambdaParen,
+% \COOL@notation@ChebyshevTParen,
+% \COOL@notation@ChebyshevUParen,
+% \COOL@notation@ConjugateParen,
+% \COOL@notation@CoshIntParen,
+% \COOL@notation@CoshParen,
+% \COOL@notation@CosIntParen,
+% \COOL@notation@CosParen,
+% \COOL@notation@CothParen,
+% \COOL@notation@CotParen,
+% \COOL@notation@CschParen,
+% \COOL@notation@CscParen,
+% \COOL@notation@CyclotomicCParen,
+% \COOL@notation@DaggerParen,
+% \COOL@notation@DedekindEtaParen,
+% \COOL@notation@DetParen,
+% \COOL@notation@DiGammaParen,
+% \COOL@notation@DiracDeltaParen,
+% \COOL@notation@DivisorsParen,
+% \COOL@notation@DivisorSigmaParen,
+% \COOL@notation@DiscreteDeltaParen,
+% \COOL@notation@EllipticEParen,
+% \COOL@notation@EllipticExpParen,
+% \COOL@notation@EllipticFParen,
+% \COOL@notation@EllipticKParen,
+% \COOL@notation@EllipticLogParen,
+% \COOL@notation@EllipticNomeQInvParen,
+% \COOL@notation@EllipticNomeQParen,
+% \COOL@notation@EllipticPiParen,
+% \COOL@notation@EllipticThetaParen,
+% \COOL@notation@ErfcInvParen,
+% \COOL@notation@ErfcParen,
+% \COOL@notation@ErfInvParen,
+% \COOL@notation@ErfiParen,
+% \COOL@notation@ErfParen,
+% \COOL@notation@EulerParen,
+% \COOL@notation@EulerEParen,
+% \COOL@notation@EulerPhiParen,
+% \COOL@notation@ExpIntEiParen,
+% \COOL@notation@ExpIntEParen,
+% \COOL@notation@ExpParen,
+% \COOL@notation@ExtendedGCDParen,
+% \COOL@notation@FactorIntegerParen,
+% \COOL@notation@FibonacciParen,
+% \COOL@notation@FibonacciFParen,
+% \COOL@notation@FractionalPartParen,
+% \COOL@notation@FresnelCParen,
+% \COOL@notation@FresnelSParen,
+% \COOL@notation@GammaFuncParen,
+% \COOL@notation@GammaRegularizedParen,
+% \COOL@notation@GCDParen,
+% \COOL@notation@GegenbauerCParen,
+% \COOL@notation@HeavisideStepParen,
+% \COOL@notation@HermiteHParen,
+% \COOL@notation@HypergeometricParen,
+% \COOL@notation@IdentityMatrixParen,
+% \COOL@notation@ImagParen,
+% \COOL@notation@IntegerPartParen,
+% \COOL@notation@InverseBetaRegularizedParen,
+% \COOL@notation@InverseGammaRegularizedParen,
+% \COOL@notation@JacobiAmplitudeParen,
+% \COOL@notation@JacobiCDInvParen,
+% \COOL@notation@JacobiCDParen,
+% \COOL@notation@JacobiCNInvParen,
+% \COOL@notation@JacobiCNParen,
+% \COOL@notation@JacobiCSInvParen,
+% \COOL@notation@JacobiCSParen,
+% \COOL@notation@JacobiDCInvParen,
+% \COOL@notation@JacobiDCParen,
+% \COOL@notation@JacobiDNInvParen,
+% \COOL@notation@JacobiDNParen,
+% \COOL@notation@JacobiDSInvParen,
+% \COOL@notation@JacobiDSParen,
+% \COOL@notation@JacobiNCInvParen,
+% \COOL@notation@JacobiNCParen,
+% \COOL@notation@JacobiNDInvParen,
+% \COOL@notation@JacobiNDParen,
+% \COOL@notation@JacobiNSInvParen,
+% \COOL@notation@JacobiNSParen,
+% \COOL@notation@JacobiPParen,
+% \COOL@notation@JacobiSCInvParen,
+% \COOL@notation@JacobiSCParen,
+% \COOL@notation@JacobiSDInvParen,
+% \COOL@notation@JacobiSDParen,
+% \COOL@notation@JacobiSNInvParen,
+% \COOL@notation@JacobiSNParen,
+% \COOL@notation@JacobiZetaParen,
+% \COOL@notation@KleinInvariantJParen,
+% \COOL@notation@LaugerreLParen,
+% \COOL@notation@LCMParen,
+% \COOL@notation@LegendrePParen,
+% \COOL@notation@LegendreQParen,
+% \COOL@notation@LerchPhiParen,
+% \COOL@notation@LogGammaParen,
+% \COOL@notation@LogIntParen,
+% \COOL@notation@LogParen,
+% \COOL@notation@MathieuCharacteristicAParen,
+% \COOL@notation@MathieuCharacteristicBParen,
+% \COOL@notation@MathieuCharacteristicExponentParen,
+% \COOL@notation@MathieuSParen,
+% \COOL@notation@MathieuCParen,
+% \COOL@notation@MoebiusMuParen,
+% \COOL@notation@MaxParen,
+% \COOL@notation@MinParen,
+% \COOL@notation@ModularLambdaParen,
+% \COOL@notation@NevilleThetaCParen,
+% \COOL@notation@NevilleThetaDParen,
+% \COOL@notation@NevilleThetaNParen,
+% \COOL@notation@NevilleThetaSParen,
+% \COOL@notation@NielsenPolyLogParen,
+% \COOL@notation@PartitionsPParen,
+% \COOL@notation@PartitionsQParen,
+% \COOL@notation@PolyGammaParen,
+% \COOL@notation@PolyLogParen,
+% \COOL@notation@PrimeParen,
+% \COOL@notation@PrimePiParen,
+% \COOL@notation@ProductLogParen,
+% \COOL@notation@QuotientParen,
+% \COOL@notation@RealParen,
+% \COOL@notation@RegHypergeometricParen,
+% \COOL@notation@RiemannSiegelThetaParen,
+% \COOL@notation@RiemannSiegelZParen,
+% \COOL@notation@SechParen,
+% \COOL@notation@SecParen,
+% \COOL@notation@SignParen,
+% \COOL@notation@SinhIntParen,
+% \COOL@notation@SinhParen,
+% \COOL@notation@SinIntParen,
+% \COOL@notation@SinParen,
+% \COOL@notation@SphericalHarmonicYParen,
+% \COOL@notation@StruveHParen,
+% \COOL@notation@StruveLParen,
+% \COOL@notation@TanhParen,
+% \COOL@notation@TanParen,
+% \COOL@notation@TransposeParen,
+% \COOL@notation@TrParen,
+% \COOL@notation@WeierstrassPInvParen,
+% \COOL@notation@WeierstrassPParen,
+% \COOL@notation@WeierstrassZetaParen,
+% \COOL@notation@ZetaParen}
+% \DoNotIndex{\COOL@notation@KroneckerDeltaIndicies,\COOL@notation@LeviCivitaIndicies}
+% \DoNotIndex{\COOL@notation@SphericalHarmonicParen,\COOL@notation@SphericalHarmonicSymb}
+% \DoNotIndex{\COOL@notation@WeierstrassPHalfPeriodValuesDisplay,\COOL@notation@WeierstrassZetaHalfPeriodValuesDisplay}
+% \DoNotIndex{
+% \COOL@Beta@arg@i,
+% \COOL@Beta@arg@ii,
+% \COOL@Beta@arg@iii,
+% \COOL@Beta@arg@iv,
+% \COOL@BetaRegularized@arg@i,
+% \COOL@BetaRegularized@arg@ii,
+% \COOL@BetaRegularized@arg@iii,
+% \COOL@BetaRegularized@arg@iv,
+% \COOL@EllipticE@arg@i,
+% \COOL@EllipticE@arg@ii,
+% \COOL@EllipticF@arg@i,
+% \COOL@EllipticF@arg@ii,
+% \COOL@EllipticPi@arg@i,
+% \COOL@EllipticPi@arg@ii,
+% \COOL@EllipticPi@arg@iii,
+% \COOL@Euler@arg@i,
+% \COOL@Euler@arg@ii,
+% \COOL@Fibonacci@arg@i,
+% \COOL@Fibonacci@arg@ii,
+% \COOL@InverseBetaRegularized@arg@i,
+% \COOL@InverseBetaRegularized@arg@ii,
+% \COOL@InverseBetaRegularized@arg@iii,
+% \COOL@InverseBetaRegularized@arg@iv,
+% \COOL@LegendreP@arg@i,
+% \COOL@LegendreP@arg@ii,
+% \COOL@LegendreP@arg@iii,
+% \COOL@LegendreP@arg@iv,
+% \COOL@LegendreQ@arg@i,
+% \COOL@LegendreQ@arg@ii,
+% \COOL@LegendreQ@arg@iii,
+% \COOL@LegendreQ@arg@iv,
+% \COOL@PolyLog@arg@i,
+% \COOL@PolyLog@arg@ii,
+% \COOL@PolyLog@arg@iii,
+% \COOL@WeiSigma@arg@z@i,
+% \COOL@WeiSigma@arg@z@ii,
+% \COOL@Zeta@arg@i,
+% \COOL@Zeta@arg@ii}
+% \DoNotIndex{
+% \COOL@notation@AssocLegendrePSymb,
+% \COOL@notation@AssocLegendreQSymb,
+% \COOL@notation@BesselISymb,
+% \COOL@notation@BesselJSymb,
+% \COOL@notation@BesselKSymb,
+% \COOL@notation@BesselYSymb,
+% \COOL@notation@ChebyshevTSymb,
+% \COOL@notation@ChebyshevUSymb,
+% \COOL@notation@EllipticESymb,
+% \COOL@notation@EllipticFSymb,
+% \COOL@notation@EllipticKSymb,
+% \COOL@notation@EllipticPiSymb,
+% \COOL@notation@GegenbauerCSymb,
+% \COOL@notation@HermiteHSymb,
+% \COOL@notation@HypergeometricSymb,
+% \COOL@notation@HypergeometricUSymb,
+% \COOL@notation@JacobiPSymb,
+% \COOL@notation@JacobiZetaSymb,
+% \COOL@notation@LaugerreLSymb,
+% \COOL@notation@LegendrePSymb,
+% \COOL@notation@LegendreQSymb,
+% \COOL@notation@LogBaseESymb,
+% \COOL@notation@MeijerGSymb,
+% \COOL@notation@RegHypergeometricSymb,
+% \COOL@notation@SphericalHarmonicYSymb}
+% \DoNotIndex{\COOL@wrt@temp,\COOL@temp@D@top@power,\COOL@temp@D@top,\COOL@temp@D@result,\COOL@temp@D@bot}
+% \DoNotIndex{\COOL@power@temp}
+% \DoNotIndex{\listval,\liststore,\isint,\isnumeric}
+% \DoNotIndex{
+% \COOL@list@temp@i,
+% \COOL@list@temp@ii,
+% \COOL@list@temp@iii}
+% \DoNotIndex{
+% \COOL@MeijerG@sniffer,
+% \COOL@MeijerG@sniffer@end}
+% \DoNotIndex{\COOL@Multinomial@tempa}
+% \DoNotIndex{
+% \COOL@notation@ArcTrig,
+% \COOL@notation@Conjugate,
+% \COOL@notation@DShorten,
+% \COOL@notation@LogShowBase}
+% \DoNotIndex{
+% \COOL@notation@DDisplayFunc,
+% \COOL@notation@DetDisplay,
+% \COOL@notation@IntegrateDisplayFunc,
+% \COOL@notation@ModDisplay}
+% \DoNotIndex{
+% \COOL@notation@KroneckerDeltaUseComma,
+% \COOL@notation@LeviCivitaUseComma}
+%
+% \title{The \textsf{cool} package\thanks{This document
+% corresponds to \textsf{cool}~\fileversion,
+% dated~\filedate.}}
+% \author{nsetzer}
+%
+% \maketitle
+%
+% \setcounter{IndexColumns}{2}
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+%
+% This is the \textsf{cool} package: a COntent Oriented \LaTeX{} package. That is, it is designed to give \LaTeX{}
+% commands the ability to contain the mathematical meaning while retaining the typesetting versatility.
+%
+% This package requires the following, non-standard \LaTeX{} packages (all of which are available on \url{www.ctan.org}):
+% \textsf{coolstr},
+% \textsf{coollist},
+% \textsf{forloop}
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Implementation}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macrocode}
+\newcounter{COOL@ct} %just a general counter
+\newcounter{COOL@ct@}%just a general counter
+% \end{macrocode}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{Parenthesis}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macrocode}
+\newcommand{\inp}[2][0cm]{\left(#2\parbox[h][#1]{0cm}{}\right)}
+ % in parentheses ()
+\newcommand{\inb}[2][0cm]{\left[#2\parbox[h][#1]{0cm}{}\right]}
+ % in brackets []
+\newcommand{\inbr}[2][0cm]{\left\{#2\parbox[h][#1]{0cm}{}\right\}}
+ % in braces {}
+\newcommand{\inap}[2][0cm]{\left<{#2}\parbox[h][#1]{0cm}{}\right>}
+ % in angular parentheses <>
+\newcommand{\nop}[1]{\left.{#1}\right.}
+ % no parentheses
+% \end{macrocode}
+%
+%
+% \begin{macro}{\COOL@decide@paren}
+% |\COOL@decide@paren[|\meta{parenthesis type}|]{|\meta{function name}|}{|\meta{contained text}|}|.
+%
+% \noindent Since the handling of parentheses is something that will be common to many elements this
+% function will take care of it.
+%
+% If the optional argument is given, |\COOL@notation@|\meta{function name}|Paren| is ignored and
+% \meta{parenthesis type} is used
+%
+% \meta{parenthesis type} and |\COOL@notation@|\meta{function name}|Paren| must be one of |none|, |p| for |()|, |b| for |[]|, |br| for |{}|, |ap| for \meta{}, |inv| for |\left.\right.|
+% \begin{macrocode}
+\let\COOL@decide@paren@no@type=\relax
+\newcommand{\COOL@decide@paren}[3][\COOL@decide@paren@no@type]{%
+\ifthenelse{ \equal{#1}{\COOL@decide@paren@no@type} }%
+ {%
+ \def\COOL@decide@paren@type{\csname COOL@notation@#2Paren\endcsname}%
+ }%
+% Else
+ {%
+ \def\COOL@decide@paren@type{#1}%
+ }%
+\ifthenelse{ \equal{\COOL@decide@paren@type}{none} }%
+ {%
+ #3%
+ }%
+% Else
+ {%
+ \ifthenelse{ \equal{\COOL@decide@paren@type}{p} }%
+ {%
+ \inp{#3}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{\COOL@decide@paren@type}{b} }%
+ {%
+ \inb{#3}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{\COOL@decide@paren@type}{br} }%
+ {%
+ \inbr{#3}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{\COOL@decide@paren@type}{ap} }%
+ {%
+ \inap{#3}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{\COOL@decide@paren@type}{inv} }%
+ {%
+ \nop{#3}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Parenthesis Option}%
+ {*Paren can only be `none', `p', `b', `br', `ap', `inv'}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{Indicies}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\COOL@decide@indicies}
+% |\COOL@decide@indicies|\marg{function name}\marg{local indication}\marg{indicies}
+%
+% \noindent Since up or down indicies can be as common as the parenthesis decision, this macro is the solution.
+%
+% \meta{local indication} must be either |u| or |d|
+%
+% \meta{indicies} is very likely to be required to be a comma separated list in the near future
+%
+% the options for indicies are
+%
+% \begin{tabular}{ll}
+% |local| & allow the indicies to be decided by an optional argument to \\
+% & the function (such as |\LeviCivita[u]{i j}|) \\
+% |up| & force the indicies to appear as superscript \\
+% |down| & force the indicies to appear as subscript \\
+% \end{tabular}
+%
+% \begin{macrocode}
+\newcommand{\COOL@decide@indicies}[3]{%
+\def\COOL@decide@indicies@placement%
+ {\csname COOL@notation@#1Indicies\endcsname}%
+\ifthenelse{\equal{\COOL@decide@indicies@placement}{local}}%
+ {%
+ \ifthenelse{\equal{#2}{u}}%
+ {^{#3}}%
+ {_{#3}}%
+ }%
+% Else
+ {%
+ \ifthenelse{\equal{\COOL@decide@indicies@placement}{up}}%
+ {%
+ {^{#3}}%
+ }%
+ % Else
+ {%
+ \ifthenelse{\equal{\COOL@decide@indicies@placement}{down}}%
+ {%
+ {_{#3}}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {#1Indices can only be 'up', 'down', or 'local'}%
+ }%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+%\subsection{COntent Oriented LaTeX (COOL)}
+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Style}
+% |\Style{|\meta{options}|}| sets the style of the output (how to notate particular functions).
+% \meta{options} is a comma delimited list of the form \meta{key}|=|\meta{value}, where \meta{key} is the \emph{long}
+% form of the command name without the preceeding backslash (i.e. |Integrate| and not |Int| or |\Int|).
+% The list can be in any order and need only contain the styles that the user desires to set.
+%
+% There can be multiple |\Style| commands within any document---the styled output of the command depends on the
+% last |\Style| command to have specified its style.
+%
+% For a list of styling options for a command, see the code where the command is defined
+%
+% \begin{macrocode}
+\newcommand{\Style}[1]{%
+\COOL@keyeater#1,\COOL@keystop\COOL@keyend%
+}
+\newcommand{\COOL@keystop}{@@@}%
+\def\COOL@keyeater#1=#2,#3\COOL@keyend{%
+\ifx#3\COOL@keystop%
+ \expandafter\gdef\csname COOL@notation@#1\endcsname{#2}%
+\else%
+ \expandafter\gdef\csname COOL@notation@#1\endcsname{#2}%
+ \COOL@keyeater#3\COOL@keyend%
+\fi%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\UseStyleFile}
+% Since notational style should be kept consistent and will likely need to span several documents, use this command
+% to input a notation style file that has previously been prepared. (to be implemented in a future release)
+% \begin{macrocode}
+\newcommand{\UseStyleFile}[1]{}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Fundamental Constants}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% see \url{http://functions.wolfram.com/} for the definitions
+% \begin{macro}{\I}
+% The square root of minus 1 ($\sqrt{-1}$), $\I$.
+% \begin{macrocode}
+\newcommand{\I}{i}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\E}
+% Euler's constant and the base of the natural logarithm, $\E$.
+% \begin{macrocode}
+\newcommand{\E}{e}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PI}
+% Pi---the ratio of the circumference of a circle to its diameter, $\PI$.
+% \begin{macrocode}
+\newcommand{\PI}{\pi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GoldenRatio}
+% The Golden Ratio, $\GoldenRatio$
+% \begin{macrocode}
+\newcommand{\GoldenRatio}{\varphi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EulerGamma}
+% Euler's Gamma constant, $\EulerGamma$
+% \begin{macrocode}
+\newcommand{\EulerGamma}{\gamma}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Catalan}
+% Catalan constant, $\Catalan$
+% \begin{macrocode}
+\newcommand{\Catalan}{C}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Glaisher}
+% Glaisher constant, $\Glaisher$
+% \begin{macrocode}
+\newcommand{\Glaisher}{\mathord{\operatorname{Glaisher}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Khinchin}
+% Khinchin constant, $\Khinchin$
+% \begin{macrocode}
+\newcommand{\Khinchin}{\mathord{\operatorname{Khinchin}}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Symbols}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Infinity}
+% Infinity, $\Infinity$
+% \begin{macrocode}
+\newcommand{\Infinity}{\infty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Indeterminant}
+% An indeterminant quantity
+% \begin{macrocode}
+\newcommand{\Indeterminant}{%
+ \mathchoice%
+ {\mbox{\textrm>}}%
+ {\mbox{\small>}}%
+ {\mbox{\scriptsize>}}%
+ {\mbox{\tiny>}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DirectedInfinity}
+% \begin{macro}{\DirInfty}
+% Directed Infinity |\DirectedInfinity{|\meta{complex number}|}| or |\DirInfty{|\meta{complex number}|}|
+% \begin{macrocode}
+\newcommand{\DirectedInfinity}[1]{#1 \, \infty}
+\newcommand{\DirInfty}[1]{\DirectedInfinity{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ComplexInfinity}
+% \begin{macro}{\CInfty}
+% Complex infinity, $\CInfty$
+% \begin{macrocode}
+\newcommand{\ComplexInfinity}{\tilde{\infty}}
+\newcommand{\CInfty}{\ComplexInfinity}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Exponential Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Exp}
+% Exponential---for use when $\E^x$ won't suffice, $\Exp{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ExpParen}{p}
+\newcommand{\Exp}[1]
+{%
+\exp\COOL@decide@paren{Exp}{#1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Log}
+% Logarithm, |\Log{x}|. This function has several options to be set. The usual parentheses, then some
+% about the notation to be used for displaying the symbol.
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LogParen}{none}
+% \end{macrocode}
+% The following set the symbols:
+%
+% |LogBaseESymb| can be |ln| or |log|, indicating what symbol should be used for the natural logarithm. If set to
+% |log| then logarithms of base 10 are displayed as $\log_{10}$.
+%
+% |LogShowBase| can be either |at will| or |always| and decides whether or not one should show the base, as in
+% |log_b x|. If this option is set to |always| then |LogBaseESymb| is ignored.
+%
+% \begin{tabular}{lll}
+% |\Log{5}| & $\Log{5}$ & $\displaystyle \Log{5}$ \\
+% |\Log[10]{5}| & $\Log[10]{5}$ & $\displaystyle \Log[10]{5}$ \\
+% |\Log[4]{5}| & $\Log[4]{5}$ & $\displaystyle \Log[4]{5}$ \\
+% |\Style{LogBaseESymb=log}|%
+% \Style{LogBaseESymb=log} \\
+% |\Log{5}| & $\Log{5}$ & $\displaystyle \Log{5}$ \\
+% |\Log[10]{5}| & $\Log[10]{5}$ & $\displaystyle \Log[10]{5}$ \\
+% |\Log[4]{5}| & $\Log[4]{5}$ & $\displaystyle \Log[4]{5}$ \\
+% |\Style{LogShowBase=always}|%
+% \Style{LogBaseESymb=ln}%
+% \Style{LogShowBase=always} \\
+% |\Log{5}| & $\Log{5}$ & $\displaystyle \Log{5}$ \\
+% |\Log[10]{5}| & $\Log[10]{5}$ & $\displaystyle \Log[10]{5}$ \\
+% |\Log[4]{5}| & $\Log[4]{5}$ & $\displaystyle \Log[4]{5}$ \\
+% |\Style{LogShowBase=at will}|%
+% \Style{LogShowBase=at will} \\
+% |\Log{5}| & $\Log{5}$ & $\displaystyle \Log{5}$ \\
+% |\Log[10]{5}| & $\Log[10]{5}$ & $\displaystyle \Log[10]{5}$ \\
+% |\Log[4]{5}| & $\Log[4]{5}$ & $\displaystyle \Log[4]{5}$ \\
+% |\Style{LogParen=p}|%
+% \Style{LogParen=p} \\
+% |\Log[4]{5}| & $\Log[4]{5}$ & $\displaystyle \Log[4]{5}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LogBaseESymb}{ln}% 'ln', 'log'
+ \newcommand{\COOL@notation@LogShowBase}{at will}% 'at will', 'always'
+\newcommand{\Log}[2][\E]
+{%
+\ifthenelse{ \equal{\COOL@notation@LogShowBase}{at will} }%
+ {%
+ \ifthenelse{ \equal{#1}{\E} }%
+ {%
+ \ifthenelse{ \equal{\COOL@notation@LogBaseESymb}{ln} }%
+ {%
+ \ln \COOL@decide@paren{Log}{#2}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{\COOL@notation@LogBaseESymb}{log} }%
+ {%
+ \log \COOL@decide@paren{Log}{#2}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {LogBaseESymb can only be `ln' or `log'}%
+ }%
+ }%
+ }%
+ % Else
+ {%
+ \ifthenelse{ \equal{#1}{10} \AND
+ \NOT \equal{\COOL@notation@LogBaseESymb}{log} }%
+ {%
+ \log \COOL@decide@paren{Log}{#2}%
+ }%
+ % Else
+ {%
+ \log_{#1} \COOL@decide@paren{Log}{#2}%
+ }%
+ }%
+ }%
+% Else
+ {%
+ \ifthenelse{ \equal{\COOL@notation@LogShowBase}{always} }%
+ {%
+ \log_{#1}\COOL@decide@paren{Log}{#2}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {LogShowBase can only be 'at will' or 'always'}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Trigonometric Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Sin}
+% The sine function, |\Sin{x}|, $\Sin{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SinParen}{p}
+\newcommand{\Sin}[1]{\sin\COOL@decide@paren{Sin}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Cos}
+% The cosine function, |\Cos{x}|, $\Cos{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CosParen}{p}
+\newcommand{\Cos}[1]{\cos\COOL@decide@paren{Cos}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Tan}
+% The tangent function, |\Tan{x}|, $\Tan{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@TanParen}{p}
+\newcommand{\Tan}[1]{\tan\COOL@decide@paren{Tan}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Csc}
+% The cosecant function, |\Csc{x}|, $\Csc{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CscParen}{p}
+\newcommand{\Csc}[1]{\csc\COOL@decide@paren{Csc}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Sec}
+% The secant function, |\Sec{x}|, $\Sec{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SecParen}{p}
+\newcommand{\Sec}[1]{\sec\COOL@decide@paren{Sec}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Cot}
+% The cotangent function, |\Cot{x}|, $\Cot{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CotParen}{p}
+\newcommand{\Cot}[1]{\cot\COOL@decide@paren{Cot}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Inverse Trigonometric Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\COOL@notation@ArcTrig}
+% The inverse trigoneometric functions style is governed by this global key. It's options are
+%
+% |inverse| (default), this displays as $\sin^{-1}$
+%
+% |arc|, this displays as $\arcsin$
+% \begin{macrocode}
+ \def\COOL@notation@ArcTrig{inverse}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcSin}
+% The inverse of the sine function, |\ArcSin{x}|, $\ArcSin{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcSinParen}{p}
+\newcommand{\ArcSin}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+ {%
+ \sin^{-1}\COOL@decide@paren{ArcSin}{#1}%
+ }
+% else
+ {
+ \ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+ {%
+ \arcsin\COOL@decide@paren{ArcSin}{#1}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid option sent}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCos}
+% the inverse of the cosine function, |\ArcCos{x}|, $\ArcCos{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCosParen}{p}
+\newcommand{\ArcCos}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+ {%
+ \cos^{-1}\COOL@decide@paren{ArcCos}{#1}%
+ }%
+% else
+ {%
+ \ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+ {%
+ \arccos\COOL@decide@paren{ArcCos}{#1}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid option sent}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcTan}
+% The inverse of the tangent function, |\ArcTan{x}|, $\ArcTan{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcTanParen}{p}
+\newcommand{\ArcTan}[1]{%
+\ifthenelse{ \equal{\COOL@notation@ArcTrig}{inverse} }%
+ {%
+ \tan^{-1}\COOL@decide@paren{ArcTan}{#1}%
+ }%
+% else
+ {%
+ \ifthenelse{\equal{\COOL@notation@ArcTrig}{arc}}%
+ {%
+ \arctan\COOL@decide@paren{ArcTan}{#1}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid option sent}{}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCsc}
+% The Inverse Cosecant function, |\ArcCsc{x}|, $\ArcCsc{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCscParen}{p}
+\newcommand{\ArcCsc}[1]{\csc^{-1}\COOL@decide@paren{ArcCsc}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcSec}
+% The inverse secant function, |\ArcSec{x}|, $\ArcSec{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcSecParen}{p}
+\newcommand{\ArcSec}[1]{\sec^{-1}\COOL@decide@paren{ArcSec}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCot}
+% The inverse cotangent function, |\ArcCot{x}|, $\ArcCot{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCotParen}{p}
+\newcommand{\ArcCot}[1]{\cot^{-1}\COOL@decide@paren{ArcCot}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Hyperbolic Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Sinh}
+% Hyperbolic sine, |\Sinh{x}|, $\Sinh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SinhParen}{p}
+\newcommand{\Sinh}[1]{\sinh\COOL@decide@paren{Sinh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Cosh}
+% Hyperbolic cosine, |\Cosh{x}|, $\Cosh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CoshParen}{p}
+\newcommand{\Cosh}[1]{\cosh\COOL@decide@paren{Cosh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Tanh}
+% Hyperbolic Tangent, |\Tanh{x}|, $\Tanh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@TanhParen}{p}
+\newcommand{\Tanh}[1]{\tanh\COOL@decide@paren{Tanh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Csch}
+% Hyperbolic cosecant |\Csch{x}|, $\Csch{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CschParen}{p}
+ \DeclareMathOperator{\csch}{csch}
+\newcommand{\Csch}[1]{\csch\COOL@decide@paren{Csch}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Sech}
+% Hyperbolic secant, |\Sech{x}|, $\Sech{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SechParen}{p}
+ \DeclareMathOperator{\sech}{sech}
+\newcommand{\Sech}[1]{\sech\COOL@decide@paren{Sech}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Coth}
+% Hyperbolic Cotangent, |\Coth{x}|, $\Coth{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CothParen}{p}
+\newcommand{\Coth}[1]{\coth\COOL@decide@paren{Coth}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Inverse Hyperbolic Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\ArcSinh}
+% Inverse hyperbolic sine, |\ArcSinh{x}|, $\ArcSinh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcSinhParen}{p}
+\newcommand{\ArcSinh}[1]{\sinh^{-1}\COOL@decide@paren{ArcSinh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCosh}
+% Inverse hyperbolic cosine, |\ArcCosh{x}|, $\ArcCosh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCoshParen}{p}
+\newcommand{\ArcCosh}[1]{\cosh^{-1}\COOL@decide@paren{ArcCosh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcTanh}
+% Inverse hyperbolic tangent, |\ArcTanh{x}|, $\ArcTanh{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcTanhParen}{p}
+\newcommand{\ArcTanh}[1]{\tanh^{-1}\COOL@decide@paren{ArcTanh}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCsch}
+% Inverse hyperbolic cosecant, |\ArcCsch{x}|, $\ArcCsch{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCschParen}{p}
+\newcommand{\ArcCsch}[1]{\csch^{-1}\COOL@decide@paren{ArcCsch}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcSech}
+% Inverse hyperbolic secant, |\ArcSech{x}|, $\ArcSech{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcSechParen}{p}
+\newcommand{\ArcSech}[1]{\sech^{-1}\COOL@decide@paren{ArcSech}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ArcCoth}
+% Inverse hyperbolic cotangent, |\ArcCoth{x}|, $\ArcCoth{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArcCothParen}{p}
+\newcommand{\ArcCoth}[1]{\coth^{-1}\COOL@decide@paren{ArcCoth}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Product Logarithms}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+% \begin{macro}{\LambertW}
+% Lambert Function. |\LambertW| is an alias for |\ProductLog| and its properties are therefore set using that function
+% \begin{macrocode}
+\newcommand{\LambertW}[1]{\ProductLog{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ProductLog}
+% Generalized Lambert Function |\ProductLog{|[\meta{index}|,|]\meta{variable}|}|.
+%
+% \begin{tabular}{lll}
+% Lambert Function & |\ProductLog{x}| & $\ProductLog{x}$ \\
+% Generalized Lambert Function & |\ProductLog{k,x}| & $\ProductLog{k,x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ProductLogParen}{p}
+\newcommand{\ProductLog}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=1}%
+ {%
+ W\!\COOL@decide@paren{ProductLog}{#1}%
+ }%
+% else
+ {%
+ \ifthenelse{\value{COOL@listpointer}=2}%
+ {%
+ W_{\listval{#1}{1}}\!\COOL@decide@paren{ProductLog}{\listval{#1}{2}}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{`ProductLog' Invaid Argument}%
+ {Must have a comma separated list of length 1 or 2}
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Max and Min}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Max}
+% the maximum function, |\Max{x,y,z}|, $\Max{x,y,z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MaxParen}{p}
+\newcommand{\Max}[1]{\max\COOL@decide@paren{Max}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Min}
+% the minimum function, |\Min{x,y,z}|, $\Min{x,y,z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MinParen}{p}
+\newcommand{\Min}[1]{\min\COOL@decide@paren{Min}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Bessel Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\BesselJ}
+% Bessel Function of the first kind, |\BesselJ{\nu}{x}|, $\BesselJ{\nu}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BesselJSymb}{J}
+ \newcommand{\COOL@notation@BesselJParen}{p}
+\newcommand{\BesselJ}[2]%
+{\COOL@notation@BesselJSymb_{#1}\!\COOL@decide@paren{BesselJ}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BesselY}
+% Bessel Function of the second kind, |\BesselY{\nu}{x}|, $\BesselY{\nu}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BesselYSymb}{Y}
+ \newcommand{\COOL@notation@BesselYParen}{p}
+\newcommand{\BesselY}[2]%
+{\COOL@notation@BesselYSymb_{#1}\!\COOL@decide@paren{BesselY}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BesselI}
+% Modified Bessel Function of the first kind, |\BesselI{\nu}{x}|, $\BesselI{\nu}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BesselISymb}{I}
+ \newcommand{\COOL@notation@BesselIParen}{p}
+\newcommand{\BesselI}[2]%
+{\COOL@notation@BesselISymb_{#1}\!\COOL@decide@paren{BesselI}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BesselK}
+% Modified Bessel Function of the second kind, |\BesselK{\nu}{x}|, $\BesselK{\nu}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BesselKSymb}{K}
+ \newcommand{\COOL@notation@BesselKParen}{p}
+\newcommand{\BesselK}[2]%
+{\COOL@notation@BesselKSymb_{#1}\!\COOL@decide@paren{BesselK}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Airy Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\AiryAi}
+% Airy Ai Function, |\AiryAi{x}|, $\AiryAi{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@AiryAiParen}{p}
+ \DeclareMathOperator{\AiryAiSymb}{Ai}
+\newcommand{\AiryAi}[1]{\AiryAiSymb\!\COOL@decide@paren{AiryAi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AiryBi}
+% Airy Bi Function, |\AiryBi{x}|, $\AiryBi{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@AiryBiParen}{p}
+ \DeclareMathOperator{\AiryBiSymb}{Bi}
+\newcommand{\AiryBi}[1]{\AiryBiSymb\!\COOL@decide@paren{AiryBi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Struve Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\StruveH}
+% Struve H function, |\StruveH{\nu}{z}|, $\StruveH{\nu}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@StruveHParen}{p}
+\newcommand{\StruveH}[2]{ {\bf H}_{#1}\!\COOL@decide@paren{StruveH}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StruveL}
+% Struve L function, |\StruveL{\nu}{z}|, $\StruveL{\nu}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@StruveLParen}{p}
+\newcommand{\StruveL}[2]{ {\bf L}_{#1}\!\COOL@decide@paren{StruveL}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Integer Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Floor}
+% floor, |\Floor{x}|, $\Floor{x}$
+% \begin{macrocode}
+\newcommand{\Floor}[1]{\lfloor #1 \rfloor}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Ceiling}
+% ceiling, |\Ceiling{x}|, $\Ceiling{x}$
+% \begin{macrocode}
+\newcommand{\Ceiling}[1]{\lceil #1 \rceil}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Round}
+% round, |\Round{x}|, $\Round{x}$
+% \begin{macrocode}
+\newcommand{\Round}[1]{\lfloor #1 \rceil}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\iPart}
+% \begin{macro}{\IntegerPart}
+% The integer part of a real number, |\iPart{x}|, |\IntegerPart{x}|, $\iPart{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@IntegerPartParen}{p}
+ \DeclareMathOperator{\iPartSymb}{int}
+\newcommand{\iPart}[1]{\iPartSymb\COOL@decide@paren{IntegerPart}{#1}}
+\newcommand{\IntegerPart}[1]{\iPart{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fPart}
+% \begin{macro}{\FractionalPart}
+% the fractional part of a real number, |\fPart{x}|, |\FractionalPart{x}|, $\fPart{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@FractionalPartParen}{p}
+ \DeclareMathOperator{\fPartSymb}{frac}
+\newcommand{\fPart}[1]{\fPartSymb\COOL@decide@paren{FractionalPart}{#1}}
+\newcommand{\FractionalPart}[1]{\fPart{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Mod}
+% Modulo, |\Mod{n}{m}|, $\Mod{n}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ModDisplay}{mod}
+\newcommand{\Mod}[2]{%
+\ifthenelse{\equal{\COOL@notation@ModDisplay}{mod}}%
+ {%
+ #1 \mod #2%
+ }%
+% ElseIf
+{ \ifthenelse{\equal{\COOL@notation@ModDisplay}{bmod}}%
+ {%
+ #1 \bmod #2%
+ }%
+% ElseIf
+{ \ifthenelse{\equal{\COOL@notation@ModDisplay}{pmod}}%
+ {%
+ #1 \pmod #2%
+ }%
+% ElseIf
+{\ifthenelse{\equal{\COOL@notation@ModDisplay}{pod}}%
+ {%
+ #1 \pod #2%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {ModDisplay can only be `mod', `bmod', `pmod', or `pod'}%
+ }}}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Quotient}
+% quotient, |\Quotient{m}{n}|, $\Quotient{m}{n}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@QuotientParen}{p}
+ \DeclareMathOperator{\QuotientSymb}{quotient}
+\newcommand{\Quotient}[2]%
+{\QuotientSymb\COOL@decide@paren{Quotient}{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GCD}
+% greatest common divisor, |\GCD{n_1,n_2,\dots,n_m}|, $\GCD{n_1,n_2,\dots,n_m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@GCDParen}{p}
+\newcommand{\GCD}[1]{\gcd\COOL@decide@paren{GCD}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ExtendedGCD}
+% \begin{macro}{\EGCD}
+% Extended Greatest Common Divisor,
+%
+%|\EGCD{n}{m}|, |\ExtendedGCD{n}{m}|, $\EGCD{n}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ExtendedGCDParen}{p}
+ \DeclareMathOperator{\ExtendedGCDSymb}{egcd}
+\newcommand{\ExtendedGCD}[2]%
+{\ExtendedGCDSymb\COOL@decide@paren{ExtendedGCD}{#1,#2}}
+\newcommand{\EGCD}[2]{\ExtendedGCD{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\LCM}
+% Least Common Multiple, |\LCM{n_1,n_2,\ldots,n_m}|, $\LCM{n_1,n_2,\ldots,n_m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LCMParen}{p}
+ \DeclareMathOperator{\LCMSymb}{lcm}
+\newcommand{\LCM}[1]{\LCMSymb\COOL@decide@paren{LCM}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Fibonacci}
+% Fibonacci number, |\Fibonacci{n}|, $\Fibonacci{n}$, and
+%
+% Fibonacci Polynomial, |\Fibonacci{n,x}|, $\Fibonacci{n,x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@FibonacciParen}{p}
+\newcommand{\Fibonacci}[1]{%
+\liststore{#1}{COOL@Fibonacci@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ F_{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ F_{\COOL@Fibonacci@arg@i}\!%
+ \COOL@decide@paren{Fibonacci}{\COOL@Fibonacci@arg@ii}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Fibonacci' can only accept a
+ comma separate list of length 1 or 2}%
+ }}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Euler}
+% Euler number, |\Euler{n}|, $\Euler{n}$, and Euler Polynomial, |\Euler{n,x}|, $\Euler{n,x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EulerParen}{p}
+\newcommand{\Euler}[1]{%
+\liststore{#1}{COOL@Euler@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ E_{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ E_{\COOL@Euler@arg@i}\!%
+ \COOL@decide@paren{Euler}{\COOL@Euler@arg@ii}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Euler' can only accept a
+ comma separate list of length 1 or 2}%
+ }}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bernoulli}
+% Bernoulli number, |\Bernoulli{n}|, $\Bernoulli{n}$ and
+%
+% Bernoulli Polynomial |\Bernoulli{n,x}|, $\Bernoulli{n,x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BernoulliParen}{p}
+\newcommand{\Bernoulli}[1]{%
+\liststore{#1}{COOL@Bernoulli@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ B_{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ B_{\COOL@Bernoulli@arg@i}\!%
+ \COOL@decide@paren{Bernoulli}{\COOL@Bernoulli@arg@ii}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Bernoulli' can only accept a
+ comma separate list of length 1 or 2}%
+ }}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StirlingSOne}
+% Stirling number of the first kind |\StirlingSOne{n}{m}|, $\StirlingSOne{n}{m}$
+% \begin{macrocode}
+\newcommand{\StirlingSOne}[2]{S_{#1}^{\inp{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StirlingSTwo}
+% Stirling number of the second kind, |\StirlingSTwo{n}{m}|, $\StirlingSTwo{n}{m}$
+% \begin{macrocode}
+\newcommand{\StirlingSTwo}[2]{{\cal S}_{#1}^{\inp{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PartitionsP}
+% Number of unrestricted partitions of an integer, |\PartitionsP{x}|, $\PartitionsP{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PartitionsPParen}{p}
+\newcommand{\PartitionsP}[1]{p\!\COOL@decide@paren{PartitionsP}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PartitionsQ}
+% number of partitions of an integer into distinct parts, |\PartitionsQ{x}|, $\PartitionsQ{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PartitionsQParen}{p}
+\newcommand{\PartitionsQ}[1]{q\!\COOL@decide@paren{PartitionsQ}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DiscreteDelta}
+% Discrete delta function,
+%
+% |\DiscreteDelta{n_1,n_2,\ldots,n_m}|, $\DiscreteDelta{n_1,n_2,\ldots,n_m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DiscreteDeltaParen}{p}
+\newcommand{\DiscreteDelta}[1]%
+{\delta\COOL@decide@paren{DiscreteDelta}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KroneckerDelta}
+% Kronecker Delta, |\KroneckerDelta{n_1,n_2,\ldots,n_m}|, $\KroneckerDelta{n_1,n_2,\ldots,n_m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@KroneckerDeltaUseComma}{false}%
+ \newcommand{\COOL@notation@KroneckerDeltaIndicies}{local}
+\newcommand{\KroneckerDelta}[2][u]{%
+\liststore{#2}{COOL@arg@}%
+\listval{#2}{0}%
+\def\COOL@arg@temp{}%
+\forLoop{1}{\value{COOL@listpointer}}{COOL@ct}%
+ {%
+ \ifthenelse{\equal{\COOL@notation@KroneckerDeltaUseComma}{true}}%
+ {%
+ \ifthenelse{\NOT \value{COOL@ct} = 1}
+ {%
+ \edef\COOL@arg@temp%
+ {\COOL@arg@temp, \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+ }%
+ % Else
+ {%
+ \edef\COOL@arg@temp%
+ {\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+ }%
+ }%
+ % Else
+ {%
+ \edef\COOL@arg@temp%
+ {\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+ }%
+ }%
+\delta\COOL@decide@indicies{KroneckerDelta}{#1}{\COOL@arg@temp}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LeviCivita}
+% \begin{macro}{\Signature}
+% Levi-Civita totally anti-symmetric Tensor density,
+%
+% |\LeviCivita{n_1,n_2,\ldots,n_m}|, $\LeviCivita{n_1,n_2,\ldots,n_m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LeviCivitaUseComma}{false}
+ \newcommand{\COOL@notation@LeviCivitaIndicies}{local}
+\newcommand{\LeviCivita}[2][u]{%
+\liststore{#2}{COOL@arg@}%
+\listval{#2}{0}%
+\def\COOL@arg@temp{}%
+\forLoop{1}{\value{COOL@listpointer}}{COOL@ct}%
+ {%
+ \ifthenelse{\equal{\COOL@notation@LeviCivitaUseComma}{true}}%
+ {%
+ \ifthenelse{\NOT \value{COOL@ct} = 1}{,}{}%
+ \edef\COOL@arg@temp%
+ {\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+ }%
+ % Else
+ {%
+ \edef\COOL@arg@temp%
+ {\COOL@arg@temp \csname COOL@arg@\roman{COOL@ct}\endcsname}%
+ }%
+ }%
+\epsilon\COOL@decide@indicies{LeviCivita}{#1}{\COOL@arg@temp}%
+}%
+\newcommand{\Signature}[2][u]{\LeviCivita[#1]{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Classical Orthogonal Polynomials}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\HermiteH}
+% Hermite Polynomial, |\HermiteH{n}{x}|, $\HermiteH{n}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@HermiteHParen}{p}
+ \newcommand{\COOL@notation@HermiteHSymb}{H}
+\newcommand{\HermiteH}[2]%
+{\COOL@notation@HermiteHSymb_{#1}\!\COOL@decide@paren{HermiteH}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LaugerreL}
+% Laugerre Polynomial, |\LaugerreL{\nu,x}|, $\LaugerreL{\nu,x}$ and
+%
+% \noindent Generalized Laugerre Polynomial |\LaugerreL{\nu,\lambda,x}|, $\LaugerreL{\nu,\lambda,x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LaugerreLParen}{p}
+ \newcommand{\COOL@notation@LaugerreLSymb}{L}
+\newcommand{\LaugerreL}[1]{%
+\liststore{#1}{COOL@list@temp@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=2}%
+ {%
+ \COOL@notation@LaugerreLSymb_{\COOL@list@temp@i}%
+ \!\COOL@decide@paren{LaugerreL}{\COOL@list@temp@ii}%
+ }%
+% Else If
+{ \ifthenelse{\value{COOL@listpointer}=3}%
+ {%
+ \COOL@notation@LaugerreLSymb_{\COOL@list@temp@i}^{\COOL@list@temp@ii}%
+ \!\COOL@decide@paren{LaugerreL}{\COOL@list@temp@iii}%
+ }%
+% Else
+{%
+ \PackageError{cool}{Invalid Argument}%
+ {`LaugerrL' only accepts a comma separated list of length 2 or 3}%
+}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LegendreP}
+% Legendre Polynomials
+%
+% \begin{tabular}{lll}
+% Legendre Polynomial & |\LegendreP{n,x}| & $\LegendreP{n,x}$ \\
+% Associated Legendre Polynomial \\
+% \indent of the first kind of type 2
+% & |\LegendreP{\ell,m,x}| & $\LegendreP{\ell,m,x}$ \\
+% & |\LegendreP{\ell,m,2,x}| & $\LegendreP{\ell,m,2,x}$ \\
+% Associated Legendre Function \\
+% \indent of the first kind of type 3
+% & |\LegendreP{\ell,m,3,x}| & $\LegendreP{\ell,m,3,x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LegendrePParen}{p}
+ \newcommand{\COOL@notation@LegendrePSymb}{P}
+\newcommand{\LegendreP}[1]{%
+\liststore{#1}{COOL@LegendreP@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}\!%
+ \COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@ii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ \COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}%
+ ^{\COOL@LegendreP@arg@ii}\!%
+ \COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+ {%
+ \isint{\COOL@LegendreP@arg@iii}%
+ \ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \ifcase\COOL@LegendreP@arg@iii\relax%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreP' third argument must be $>$ 1}%
+ \or%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreP' third argument must be $>$ 1}%
+ \or%
+ \COOL@notation@LegendrePSymb_{\COOL@LegendreP@arg@i}%
+ ^{\COOL@LegendreP@arg@ii}\!%
+ \COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iv}%
+ \or%
+ {\cal P}_{\COOL@LegendreP@arg@i}%
+ ^{\COOL@LegendreP@arg@ii}\!%
+ \COOL@decide@paren{LegendreP}{\COOL@LegendreP@arg@iv}%
+ \else%
+ \PackageError{cool}{Invalid Argument}{unsupported}%
+ \fi%
+ }
+ % Else
+ {%
+ \PackageError{cool}{Invalid Argument}{third arg must be int}%
+ }%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreP' can only accept a%
+ comma separated list of length 2-4}%
+ }}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LegendreQ}
+% Legendre Polynomials of the second kind
+%
+% \begin{tabular}{lll}
+% Legendre Polynomial & |\LegendreQ{n,x}| & $\LegendreQ{n,x}$ \\
+% Associated Legendre Polynomial \\
+% \indent of the second kind of type 2
+% & |\LegendreQ{\ell,m,x}| & $\LegendreQ{\ell,m,x}$ \\
+% & |\LegendreQ{\ell,m,2,x}| & $\LegendreQ{\ell,m,2,x}$ \\
+% Associated Legendre Function \\
+% \indent of the second kind of type 3
+% & |\LegendreQ{\ell,m,3,x}| & $\LegendreQ{\ell,m,3,x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LegendreQParen}{p}
+ \newcommand{\COOL@notation@LegendreQSymb}{Q}
+\newcommand{\LegendreQ}[1]{%
+\liststore{#1}{COOL@LegendreQ@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}\!%
+ \COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@ii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ \COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}%
+ ^{\COOL@LegendreQ@arg@ii}\!%
+ \COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+ {%
+ \isint{\COOL@LegendreQ@arg@iii}%
+ \ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \ifcase\COOL@LegendreQ@arg@iii\relax%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreQ' third argument must be $>$ 1}%
+ \or%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreQ' third argument must be $>$ 1}%
+ \or%
+ \COOL@notation@LegendreQSymb_{\COOL@LegendreQ@arg@i}%
+ ^{\COOL@LegendreQ@arg@ii}\!%
+ \COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iv}%
+ \or%
+ {\cal Q}_{\COOL@LegendreQ@arg@i}%
+ ^{\COOL@LegendreQ@arg@ii}\!%
+ \COOL@decide@paren{LegendreQ}{\COOL@LegendreQ@arg@iv}%
+ \else%
+ \PackageError{cool}{Invalid Argument}{unsupported}%
+ \fi%
+ }
+ % Else
+ {%
+ \PackageError{cool}{Invalid Argument}{third arg must be int}%
+ }%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`LegendreQ' can only accept a%
+ comma separated list of length 2-4}%
+ }}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ChebyshevT}
+% Chebyshev Polynomial of the first kind, |ChebyshevT{n}{x}|, $ChebyshevT{n}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ChebyshevTParen}{p}
+ \newcommand{\COOL@notation@ChebyshevTSymb}{T}
+\newcommand{\ChebyshevT}[2]%
+{\COOL@notation@ChebyshevTSymb_{#1}\!\COOL@decide@paren{ChebyshevT}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ChebyshevU}, |\ChebyshevU{n}{z}|, $\ChebyshevU{n}{z}$
+% Chebyshev Polynomial of the second kind
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ChebyshevUParen}{p}
+ \newcommand{\COOL@notation@ChebyshevUSymb}{U}
+\newcommand{\ChebyshevU}[2]%
+{\COOL@notation@ChebyshevUSymb_{#1}\!\COOL@decide@paren{ChebyshevU}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\JacobiP}
+% Jacobi Polynomial, |\JacobiP{n}{a}{b}{x}|, $\JacobiP{n}{a}{b}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiPParen}{p}
+ \newcommand{\COOL@notation@JacobiPSymb}{P}
+\newcommand{\JacobiP}[4]{%
+\COOL@notation@JacobiPSymb_{#1}^{\inp{#2, #3}}%
+\!\COOL@decide@paren{JacobiP}{#4}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Associated Polynomials}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\AssocLegendreP}
+% Associated Legendre Polynomial of the first kind of type 2
+%
+% |\AssocLegendreP{\ell}{m}{x}|, $\AssocLegendreP{\ell}{m}{x}$
+% \begin{macrocode}
+\newcommand{\AssocLegendreP}[3]{\LegendreP{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AssocLegendreQ}
+% Associated Legendre Polynomial of the second kind of type 2
+%
+% |\AssocLegendreQ{\ell}{m}{x}|, $\AssocLegendreQ{\ell}{m}{x}$
+% \begin{macrocode}
+\newcommand{\AssocLegendreQ}[3]{\LegendreQ{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GegenbauerC}
+% Gegenbauer Polynomial, |\GegenbauerC{n}{\lambda}{x}|, $\GegenbauerC{n}{\lambda}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@GegenbauerCParen}{p}
+ \newcommand{\COOL@notation@GegenbauerCSymb}{C}
+\newcommand{\GegenbauerC}[3]{%
+\COOL@notation@GegenbauerCSymb_{#1}^{#2}%
+\!\COOL@decide@paren{GegenbauerC}{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SphericalHarmonicY}
+% \begin{macro}{\SphericalHarmY}
+% \begin{macro}{\SpHarmY}
+% Spherical Harmonic, |\SpHarmY{\ell}{m}{\theta}{\phi}|,
+%
+% |\SphericalHarmY{\ell}{m}{\theta}{\phi}|,
+%
+% |\SphericalHarmonicY{\ell}{m}{\theta}{\phi}|, $\SpHarmY{\ell}{m}{\theta}{\phi}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SphericalHarmonicYParen}{p}
+ \newcommand{\COOL@notation@SphericalHarmonicYSymb}{Y}
+\newcommand{\SphericalHarmonicY}[4]{%
+\COOL@notation@SphericalHarmonicYSymb_{#1}^{#2}%
+\!\COOL@decide@paren{SphericalHarmonicY}{#3,#4}%
+}
+\newcommand{\SphericalHarmY}[4]{\SphericalHarmonicY{#1}{#2}{#3}{#4}}
+\newcommand{\SpHarmY}[4]{\SphericalHarmonicY{#1}{#2}{#3}{#4}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Other Polynomials}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\CyclotomicC}
+% Cyclotomic Polynomial, |\CyclotomicC{n}{z}|, $\CyclotomicC{n}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CyclotomicCParen}{p}
+\newcommand{\CyclotomicC}[2]%
+{C_{#1}\!\COOL@decide@paren{CyclotomicC}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FibonacciF}
+% Fibonacci Polynomial, |\FibonacciF{n}{z}|, $\FibonacciF{n}{z}$
+% \begin{macrocode}
+\newcommand{\FibonacciF}[2]{\Fibonacci{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EulerE}
+% Euler Polynomial, |\EulerE{n}{z}|, $\EulerE{n}{z}$
+% \begin{macrocode}
+\newcommand{\EulerE}[2]{\Euler{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BernoulliB}
+% Bernoulli Polynomial, |\BernoulliB{n}{z}|, $\BernoulliB{n}{z}$
+% \begin{macrocode}
+\newcommand{\BernoulliB}[2]{\Bernoulli{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Factorial Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Factorial}
+% Factorial, |\Factorial{n}|, $\Factorial{n}$
+% \begin{macrocode}
+\newcommand{\Factorial}[1]{#1!}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DblFactorial}
+% Double Factorial, |\DblFactorial{n}|, $\DblFactorial{n}$
+% \begin{macrocode}
+\newcommand{\DblFactorial}[1]{#1!!}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Binomial}
+% binomial, |\Binomial{n}{r}|, $\Binomial{n}{r}$
+% \begin{macrocode}
+\newcommand{\Binomial}[2]{ \binom{#1}{#2} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Multinomial}
+% Multinomial, |\Multinomial{n_1,\ldots,n_m}|, $\Multinomial{n_1,\ldots,n_m}$
+% \begin{macrocode}
+\newcommand{\Multinomial}[1]%
+{%
+\listval{#1}{0}% get the length of the list
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}% record length
+\liststore{#1}{COOL@list@temp@}%
+\isint{\COOL@list@temp@i}% check that the entries are integers
+\setcounter{COOL@ct}{2}%
+\whiledo{ \boolean{COOL@isint} \AND
+ \NOT \value{COOL@ct}>\value{COOL@listlen} }%
+ {%
+ \def\COOL@Multinomial@tempa%
+ {\csname COOL@list@temp@\roman{COOL@ct}\endcsname}%
+ \isint{\COOL@Multinomial@tempa}%
+ \stepcounter{COOL@ct}%
+ }%
+\ifthenelse{\boolean{COOL@isint}}%
+ {%
+ % all of them are integers
+ \setcounter{COOL@ct@}{ \COOL@list@temp@i }% records the sum
+ \forLoop{2}{\value{COOL@listlen}}{COOL@ct}%
+ {%
+ \addtocounter{COOL@ct@}%
+ {\csname COOL@list@temp@\roman{COOL@ct}\endcsname}%
+ }%
+ \left(\arabic{COOL@ct@}%
+ }%
+% Else
+ {%
+ \left(%
+ \listval{#1}{1}%
+ \forLoop{2}{\value{COOL@listlen}}{COOL@ct}%
+ {%
+ + \listval{#1}{\arabic{COOL@ct}}%
+ }%
+ }%
+;#1\right)%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Gamma Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\GammaFunc}
+% Gamma Function
+%
+% \noindent \begin{tabular}{lll}
+% Gamma Function & |\GammaFunc{z}| & $\GammaFunc{z}$ \\
+% Incomplete Gamma Function & |\GammaFunc{a,z}| & $\GammaFunc{a,z}$ \\
+% Generalized Incomplete Gamma Function & |\GammaFunc{a,x,y}| & $\GammaFunc{a,x,y}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@GammaFuncParen}{p}
+\newcommand{\GammaFunc}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ \Gamma\!\COOL@decide@paren{GammaFunc}{#1}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`GammaFunc' can only accept a comma separate list of length 1 to 3}%
+ }%
+}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IncGamma}
+% incomplete Gamma function, |\IncGamma{a}{x}|, $\IncGamma{a}{x}$
+% \begin{macrocode}
+\newcommand{\IncGamma}[2]{\GammaFunc{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GenIncGamma}
+% Generalized Incomplete Gamma, |\GenIncGamma{a}{x}{y}|, $\GenIncGamma{a}{x}{y}$
+% \begin{macrocode}
+\newcommand{\GenIncGamma}[3]{\GammaFunc{#1, #2, #3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GammaRegularized}
+% \begin{macro}{\RegIncGamma}
+% \begin{macro}{\GammaReg}
+% Regularized Incomplete Gamma
+%
+% \begin{tabular}{ll}
+% |\GammaRegularized{a,x}| & $\GammaRegularized{a,x}$ \\
+% |\RegIncGamma{a}{x}| & $\RegIncGamma{a}{x}$ \\
+% |\GammaReg{a,x}| & $\GammaReg{a,x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@GammaRegularizedParen}{p}%
+\newcommand{\GammaRegularized}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ Q\!\COOL@decide@paren{GammaRegularized}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ Q\!\COOL@decide@paren{GammaRegularized}{#1}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`GammaRegularized' can only accept comma%
+ separated lists of length 2 or 3}%
+ }%
+}%
+}
+\newcommand{\RegIncGamma}[2]{\GammaRegularized{#1, #2}}
+\newcommand{\GammaReg}[1]{\GammaRegularized{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\RegIncGammaInv}
+% \begin{macro}{\InverseGammaRegularized}
+% \begin{macro}{\GammaRegInv}
+% Inverse of Regularized Incomplete Gamma,
+%
+% \begin{tabular}{ll}
+% |\RegIncGammaInv{a}{x}| & $\RegIncGammaInv{a}{x}$ \\
+% |\InverseGammaRegularized{a,x}| & $\InverseGammaRegularized{a,x}$ \\
+% |\GammaRegInv{a,x}| & $\GammaRegInv{a,x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@InverseGammaRegularizedParen}{p}
+\newcommand{\InverseGammaRegularized}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ Q^{-1}\!\COOL@decide@paren{InverseGammaRegularized}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ Q^{-1}\!\COOL@decide@paren{InverseGammaRegularized}{#1}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`InverseGammaRegularized' can only accept%
+ a comma separated list of length 2 or 3}%
+ }%
+}%
+}
+\newcommand{\RegIncGammaInv}[2]{\InverseGammaRegularized{#1, #2}}
+\newcommand{\GammaRegInv}[1]{\InverseGammaRegularized{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GenRegIncGamma}
+% Generalized Regularized Incomplete Gamma
+%
+% \begin{tabular}{ll}
+% |\GenRegIncGamma{a}{x}{y}| & $\GenRegIncGamma{a}{x}{y}$ \\
+% |\GammaRegularized{a,x,y}| & $\GammaRegularized{a,x,y}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\GenRegIncGamma}[3]{\GammaRegularized{#1, #2, #3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GenRegIncGammaInv}
+% Inverse of Gen. Reg. Incomplete Gamma, |\GenRegIncGammaInv{a}{x}{y}|, $\GenRegIncGammaInv{a}{x}{y}$
+% \begin{macrocode}
+\newcommand{\GenRegIncGammaInv}[3]{\InverseGammaRegularized{#1, #2, #3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Pochhammer}
+% Pochhammer Symbol |\Pochhammer{a}{n}|, $\Pochhammer{a}{n}$
+% \begin{macrocode}
+\newcommand{\Pochhammer}[2]{\inp{#1}_{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LogGamma}
+% Log Gamma Function, |\LogGamma{x}|, $\LogGamma{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LogGammaParen}{p}
+ \DeclareMathOperator{\LogGammaSymb}{log\Gamma}
+\newcommand{\LogGamma}[1]{\LogGammaSymb\COOL@decide@paren{LogGamma}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Derivatives of Gamma Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\DiGamma}
+% Digamma function, |\DiGamma{x}|, $\DiGamma{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DiGammaParen}{p}
+\newcommand{\DiGamma}[1]{\digamma\!\COOL@decide@paren{DiGamma}{#1}}
+% \end{macrocode}
+% \end{macro}
+% PolyGamma function, |\PolyGamma{\nu}{x}|, $\PolyGamma{\nu}{x}$
+% \begin{macro}{\PolyGamma}
+%
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PolyGammaParen}{p}
+\newcommand{\PolyGamma}[2]%
+{\psi^{\inp{#1}}\!\COOL@decide@paren{PolyGamma}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HarmNum}
+% Harmonic Number
+%
+% \begin{tabular}{lll}
+% Harmonic Number & |\HarmNum{x}| & $\HarmNum{x}$ \\
+% General Harmonic Number & |\HarmNum{x,r}| & $\HarmNum{x,r}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\HarmNum}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer}=1}%
+ {%
+ H_{#1}
+ }%
+% Else If
+{ \ifthenelse{\value{COOL@listpointer}=2}%
+ {%
+ \liststore{#1}{COOL@list@temp@}%
+ H^{\inp{\COOL@list@temp@ii}}_{\COOL@list@temp@i}%
+ }%
+% Else
+{%
+ \PackageError{cool}{Invalid Argument}%
+ {`Harm Num' can only accept a comma separated list of length 1 or 2}%
+}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Beta Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Beta}
+% \begin{tabular}{lll}
+% Beta Function & |\Beta{a,b}| & $\Beta{a,b}$ \\
+% Incomplete Beta Function & |\Beta{z,a,b}| & $\Beta{z,a,b}$ \\
+% Generalized Incomplete Beta Function & |\Beta{z_1,z_2,a,b}| & $\Beta{z_1,z_2,a,b}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BetaParen}{p}
+\newcommand{\Beta}[1]{%
+\liststore{#1}{COOL@Beta@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ B\!\COOL@decide@paren{Beta}{\COOL@Beta@arg@i, \COOL@Beta@arg@ii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ B_{\COOL@Beta@arg@i}\!%
+ \COOL@decide@paren{Beta}{\COOL@Beta@arg@ii, \COOL@Beta@arg@iii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+ {%
+ B_{\inp{\COOL@Beta@arg@i,\COOL@Beta@arg@ii}}\!%
+ \COOL@decide@paren{Beta}{\COOL@Beta@arg@iii, \COOL@Beta@arg@iv}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Beta' can only accept a comma separated list of length 2 to 4}%
+ }%
+}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\IncBeta}
+% Incomplete Beta Function
+%
+% \begin{tabular}{ll}
+% |\IncBeta{z}{a}{b}| & $\IncBeta{z}{a}{b}$ \\
+% |\Beta{z,a,b}| & $\Beta{z,a,b}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\IncBeta}[3]{\Beta{#1,#2, #3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GenIncBeta}
+% Generalized Incomplete Beta Function
+%
+% \begin{tabular}{ll}
+% |\GenIncBeta{x}{y}{a}{b}| & $\GenIncBeta{x}{y}{a}{b}$ \\
+% |\Beta{x,y,a,b}| & $\Beta{x,y,a,b}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\GenIncBeta}[4]{\Beta{#1,#2,#3,#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BetaRegularized}
+% \begin{macro}{\BetaReg}
+% \begin{macro}{\RegIncBeta}
+% Regularized Incomplete Beta Function
+%
+% \begin{tabular}{ll}
+% |\BetaRegularized{z,a,b}| & $\BetaRegularized{z,a,b}$ \\
+% |\BetaReg{z,a,b}| & $\BetaReg{z,a,b}$ \\
+% |\RegIncBeta{z}{a}{b}| & $\RegIncBeta{z}{a}{b}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@BetaRegularizedParen}{p}
+\newcommand{\BetaRegularized}[1]{%
+\liststore{#1}{COOL@BetaRegularized@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ I_{\COOL@BetaRegularized@arg@i}\!%
+ \COOL@decide@paren{BetaRegularized}%
+ {\COOL@BetaRegularized@arg@ii, \COOL@BetaRegularized@arg@iii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+ {%
+ I_{\inp{\COOL@BetaRegularized@arg@i, \COOL@BetaRegularized@arg@ii}}\!%
+ \COOL@decide@paren{BetaRegularized}%
+ {\COOL@BetaRegularized@arg@iii, \COOL@BetaRegularized@arg@iv}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`BetaRegularized' can only accept%
+ a comma separated list of length 3 or 4}%
+ }%
+}%
+}
+\newcommand{\RegIncBeta}[3]{\BetaRegularized{#1,#2,#3}}
+\newcommand{\BetaReg}[1]{\BetaRegularized{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\InverseBetaRegularized}
+% \begin{macro}{\BetaRegInv}
+% \begin{macro}{\RegIncBetaInv}
+% Inverse of Regularized Incomplete Beta Function
+%
+% \begin{tabular}{ll}
+% |\InverseBetaRegularized{z,a,b}| & $\InverseBetaRegularized{z,a,b}$ \\
+% |\BetaRegInv{z,a,b}| & $\BetaRegInv{z,a,b}$ \\
+% |\RegIncBetaInv{z}{a}{b}| & $\RegIncBetaInv{z}{a}{b}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@InverseBetaRegularizedParen}{p}
+\newcommand{\InverseBetaRegularized}[1]{%
+\liststore{#1}{COOL@InverseBetaRegularized@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ I^{-1}_{\COOL@InverseBetaRegularized@arg@i}\!%
+ \COOL@decide@paren{InverseBetaRegularized}%
+ {\COOL@InverseBetaRegularized@arg@ii,%
+ \COOL@InverseBetaRegularized@arg@iii}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 4}%
+ {%
+ I^{-1}_{\inp{ \COOL@InverseBetaRegularized@arg@i,%
+ \COOL@InverseBetaRegularized@arg@ii%
+ }%
+ }\!%
+ \COOL@decide@paren{InverseBetaRegularized}%
+ {\COOL@InverseBetaRegularized@arg@iii,%
+ \COOL@InverseBetaRegularized@arg@iv}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`InverseBetaRegularized' can only accept%
+ a comma separated list of length 3 or 4}%
+ }%
+}%
+}
+\newcommand{\RegIncBetaInv}[3]{\InverseBetaRegularized{#1,#2,#3}}
+\newcommand{\BetaRegInv}[1]{\InverseBetaRegularized{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\GenRegIncBeta}
+% Generalized Regularized Incomplete Beta Func
+%
+% \begin{tabular}{ll}
+% |\GenRegIncBeta{x}{y}{a}{b}| & $\GenRegIncBeta{x}{y}{a}{b}$ \\
+% |\Beta{x,y,a,b}| & $\Beta{x,y,a,b}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\GenRegIncBeta}[4]{\Beta{#1,#2,#3,#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\GenRegIncBetaInv}
+% Inverse of Generalized Regularized Incomplete Beta Function
+%
+% \begin{tabular}{ll}
+% |\GenRegIncBetaInv{x}{y}{z}{b}| & $\GenRegIncBetaInv{x}{y}{z}{b}$ \\
+% |\InverseBetaRegularized{x,y,z,b}| & $\InverseBetaRegularized{x,y,z,b}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\GenRegIncBetaInv}[4]{\InverseBetaRegularized{#1,#2,#3,#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Error Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Erf}
+% \begin{tabular}{lll}
+% Error Function & |\Erf{x}| & $\Erf{x}$ \\
+% Generalized Error Function & |\Erf{x,y}| & $\Erf{x,y}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ErfParen}{p}
+ \DeclareMathOperator{\ErfSymb}{erf}
+\newcommand{\Erf}[1]{%
+\liststore{#1}{COOL@Erf@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \ErfSymb\!\COOL@decide@paren{Erf}{#1}
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \ErfSymb\!\COOL@decide@paren{Erf}{#1}
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Erf' can only accept a comma separated list of length 1 or 2}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ErfInv}
+% Inverse of Error Function
+%
+% \begin{tabular}{ll}
+% |\ErfInv{x}| & $\ErfInv{x}$ \\
+% |\ErfInv{x,y}| & $\ErfInv{x,y}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ErfInvParen}{p}
+\newcommand{\ErfInv}[1]{%
+\liststore{#1}{COOL@Erf@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \ErfSymb^{-1}\!\COOL@decide@paren{ErfInv}{#1}
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \ErfSymb^{-1}\!\COOL@decide@paren{ErfInv}{#1}
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Erf' can only accept a comma separated list of length 1 or 2}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+
+%
+% \begin{macro}{\GenErf}
+% \begin{macro}{\GenErfInv}
+% Generalized Error Function and its inverse
+%
+% \begin{tabular}{ll}
+% |\GenErf{z_1}{z_2}| & $\GenErf{z_1}{z_2}$ \\
+% |\GenErfInv{z_1}{z_2}| & $\GenErfInv{z_1}{z_2}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\GenErf}[2]{\Erf{#1,#2}}
+\newcommand{\GenErfInv}[2]{\ErfInv{#1, #2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Erfc}
+% Complimentary Error Function and its inverse
+%
+% \begin{tabular}{ll}
+% |\Erfc{z}| & $\Erfc{z}$ \\
+% |\ErfcInv{z}| & $\ErfcInv{z}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ErfcParen}{p}
+ \DeclareMathOperator{\ErfcSymb}{erfc}
+\newcommand{\Erfc}[1]{\ErfcSymb\!\COOL@decide@paren{Erfc}{#1}}
+ \newcommand{\COOL@notation@ErfcInvParen}{p}
+\newcommand{\ErfcInv}[1]%
+{\ErfcSymb^{-1}\!\COOL@decide@paren{ErfcInv}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Erfi}
+% Imaginary Error Function, |\Erfi{z}|, $\Erfi{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ErfiParen}{p}
+ \DeclareMathOperator{\ErfiSymb}{erfi}
+\newcommand{\Erfi}[1]{\ErfiSymb\!\COOL@decide@paren{Erfi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Fresnel Integrals}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\FresnelS}
+% Fresnel Integral, |\FresnelS{z}|, $\FresnelS{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@FresnelSParen}{p}
+\newcommand{\FresnelS}[1]{S\!\COOL@decide@paren{FresnelS}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FresnelC}
+% Fresnel Integral, |\FresnelC{z}|, $\FresnelC{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@FresnelCParen}{p}
+\newcommand{\FresnelC}[1]{C\!\COOL@decide@paren{FresnelC}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Exponential Integrals}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\ExpIntE}
+% Exponential Integral, |\ExpIntE{\nu}{x}|, $\ExpIntE{\nu}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ExpIntEParen}{p}
+\newcommand{\ExpIntE}[2]{E_{#1}\!\COOL@decide@paren{ExpIntE}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ExpIntEi}
+% Exponential Integral, |\ExpIntEi{x}|, $\ExpIntEi{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ExpIntEiParen}{p}
+ \DeclareMathOperator{\ExpIntEiSymb}{Ei}
+\newcommand{\ExpIntEi}[1]%
+{\ExpIntEiSymb\!\COOL@decide@paren{ExpIntEi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LogInt}
+% Logarithmic Integral, |\LogInt{x}|, $\LogInt{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LogIntParen}{p}
+ \DeclareMathOperator{\LogIntSymb}{li}
+\newcommand{\LogInt}[1]{\LogIntSymb\!\COOL@decide@paren{LogInt}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SinInt}
+% Sine Integral, |\SinInt{x}|, $\SinInt{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SinIntParen}{p}
+ \DeclareMathOperator{\SinIntSymb}{Si}
+\newcommand{\SinInt}[1]{\SinIntSymb\!\COOL@decide@paren{SinInt}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CosInt}
+% Cosine Integral, |\CosInt{x}|, $\CosInt{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CosIntParen}{p}
+ \DeclareMathOperator{\CosIntSymb}{Ci}
+\newcommand{\CosInt}[1]{\CosIntSymb\!\COOL@decide@paren{CosInt}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SinhInt}
+% Hyberbolic Sine Integral, |\SinhInt{x}|, $\SinhInt{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SinhIntParen}{p}
+ \DeclareMathOperator{\SinhIntSymb}{Shi}
+\newcommand{\SinhInt}[1]{\SinhIntSymb\!\COOL@decide@paren{SinhInt}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CoshInt}
+% Hyberbolic Cosine Integral, |\CoshInt{x}|, $\CoshInt{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CoshIntParen}{p}
+ \DeclareMathOperator{\CoshIntSymb}{Chi}
+\newcommand{\CoshInt}[1]{\CoshIntSymb\!\COOL@decide@paren{CoshInt}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Hypergeometric Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\COOL@Hypergeometric@pq@ab@value}
+% This macro is a decision maker that decides what to return for the Hypergeometric function since
+% its results vary based on the nature of the input. This macro is called as
+%
+% |\COOL@Hypergeometric@pq@ab@value|
+% \DeleteShortVerb{\|}%
+% \verb|{|`p'\texttt{|}`q'\verb|}|%
+% \marg{p\_input\textnormal{\texttt{|}}q\_input}%
+% \verb|{|`a'\texttt{|}`b'\verb|}|%
+% \marg{a\_input\textnormal{\texttt{|}}b\_input}%
+% \MakeShortVerb{\|}
+% \begin{macrocode}
+\newcommand{\COOL@Hypergeometric@pq@ab@value}[4]{%
+\ifthenelse{\boolean{COOL@#1@isint} \AND \boolean{COOL@#3@islist}}%
+ {% #1 is an INT and #3 is a LIST
+ \ifthenelse{ #2 = 0 }%
+ {%
+ \PackageWarning{cool}{`#3'-arg ignored}%
+ }%
+ % Else
+ {%
+ \ifthenelse{ #2 = 1 }%
+ {%
+ \PackageError{cool}{`Hypergeometric' `#1'-arg mismatch with `#3'-arg}{}%
+ }%
+ % Else
+ {%
+ #4%
+ }%
+ }%
+ }%
+% Else
+ {}%
+\ifthenelse{ \boolean{COOL@#1@isint} \AND
+ \NOT \boolean{COOL@#3@islist} }%
+ {%
+ \ifthenelse{ #2 = 0 }%
+ {%
+ % return nothing
+ }%
+ % Else
+ {%
+ \ifthenelse{ #2 = 1 }%
+ {%
+ % return
+ #4%
+ }%
+ % Else
+ {%
+ \forLoop{1}{#2}{COOL@ct}
+ {%
+ \ifthenelse{ \value{COOL@ct} = 1 }{}{,}%
+ #4_{\arabic{COOL@ct}}%
+ }% end for loop
+ }%
+ }%
+ }%
+% else
+ {}%
+\ifthenelse{ \NOT \boolean{COOL@#1@isint} \AND
+ \boolean{COOL@#3@islist} }%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`Hypergeometric': `#1'-arg is not int but `#3'-arg is list}
+ }%
+% else
+ {}%
+\ifthenelse{ \NOT \boolean{COOL@#1@isint} \AND
+ \NOT \boolean{COOL@#3@islist} }%
+ {%
+ %return
+ #4_1,\ldots,#4_{#2}%
+ }%
+% else
+ {}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Hypergeometric}
+% Generalized Hypergeometric function. $\Hypergeometric{p}{q}{a}{b}{x}$
+%
+% \begin{tabular}{lr}
+% |\Hypergeometric{0}{0}{}{}{x}| & $\Hypergeometric{0}{0}{}{}{x}$ \\
+% |\Hypergeometric{0}{1}{}{b}{x}| & $\Hypergeometric{0}{1}{}{b}{x}$ \\
+% |\Hypergeometric{1}{1}{a}{b}{x}| & $\Hypergeometric{1}{1}{a}{b}{x}$ \\
+% |\Hypergeometric{1}{1}{1}{1}{x}| & $\Hypergeometric{1}{1}{1}{1}{x}$ \\
+% |\Hypergeometric{3}{5}{a}{b}{x}| \\
+% \multicolumn{2}{r}{$\Hypergeometric{3}{5}{a}{b}{x}$}
+% \\
+% |\Hypergeometric{3}{5}{1,2,3}{1,2,3,4,5}{x}|
+% \\
+% \multicolumn{2}{r}{$\Hypergeometric{3}{5}{1,2,3}{1,2,3,4,5}{x}$}
+% \\
+% |\Hypergeometric{p}{5}{a}{b}{x}| \\
+% \multicolumn{2}{r}{$\Hypergeometric{p}{5}{a}{b}{x}$}
+% \\
+% |\Hypergeometric{p}{3}{a}{1,2,3}{x}| \\
+% \multicolumn{2}{r}{$\Hypergeometric{p}{3}{a}{1,2,3}{x}$ }
+% \\
+% |\Hypergeometric{p}{q}{a}{b}{x}| \\
+% \multicolumn{2}{r}{$\Hypergeometric{p}{q}{a}{b}{x}$}
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@HypergeometricParen}{p}
+ \newcommand{\COOL@notation@HypergeometricSymb}{F}
+\newcommand{\Hypergeometric}[6][F]{%
+\provideboolean{COOL@p@isint}%
+\provideboolean{COOL@q@isint}%
+\provideboolean{COOL@a@islist}%
+\provideboolean{COOL@b@islist}%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {\setboolean{COOL@p@isint}{true}}%
+% Else
+ {\setboolean{COOL@p@isint}{false}}%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {\setboolean{COOL@q@isint}{true}}%
+% Else
+ {\setboolean{COOL@q@isint}{false}}%
+\listval{#4}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+ {\setboolean{COOL@a@islist}{true}}%
+% Else
+ {\setboolean{COOL@a@islist}{false}}%
+% \end{macrocode}
+% ensure that the submitted list is the same length as p
+% \begin{macrocode}
+\ifthenelse{ \boolean{COOL@p@isint} \AND
+ \boolean{COOL@a@islist} \AND
+ \NOT \( #2 = \value{COOL@listpointer} \) }%
+ {%
+ \PackageError{cool}{`Hypergeometric' `p'-arg mismatch with `a'-arg}{}%
+ }%
+% else
+ {}%
+\listval{#5}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+ {\setboolean{COOL@b@islist}{true}}%
+% Else
+ {\setboolean{COOL@b@islist}{false}}%
+% \end{macrocode}
+% ensure that the submitted `b' list is the same length as q
+% \begin{macrocode}
+\ifthenelse{ \boolean{COOL@q@isint} \AND
+ \boolean{COOL@b@islist} \AND
+ \NOT \( #3 = \value{COOL@listpointer} \) }%
+ {%
+ \PackageError{cool}{`Hypergeometric' `q'-arg mismatch with `b'-arg}%
+ {`b' list is not the same length as `q'}%
+ }%
+% else
+ {}%
+% troubleshoot
+\ifthenelse{ \boolean{COOL@a@islist} \AND \NOT \boolean{COOL@p@isint} }%
+ {%
+ \PackageError{cool}{`Hypergeometric' `a'-arg mismatch with `p'-arg}%
+ {happens if `a'-arg is a list and `p'-arg isn't an integer}%
+ }%
+% else
+ {}%
+\ifthenelse{ \boolean{COOL@b@islist} \AND \NOT \boolean{COOL@q@isint} }%
+ {%
+ \PackageError{cool}{`Hypergeometric' `b'-arg mismatch with `q'-arg}%
+ {happens if `b'-arg is a list and `q'-arg isn't an integer}%
+ }%
+% else
+ {}%
+% \end{macrocode}
+% First print the ${}_p F_q$
+% \begin{macrocode}
+{}_{#2}{\COOL@notation@HypergeometricSymb}_{#3}\!%
+\COOL@decide@paren{Hypergeometric}%
+ {%
+ \COOL@Hypergeometric@pq@ab@value{p}{#2}{a}{#4};%
+ \COOL@Hypergeometric@pq@ab@value{q}{#3}{b}{#5};%
+ #6%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\RegHypergeometric}
+% Regularized hypergeometric function $\RegHypergeometric{p}{q}{a}{b}{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@RegHypergeometricParen}{p}
+ \newcommand{\COOL@notation@RegHypergeometricSymb}{\tilde{F}}
+\newcommand{\RegHypergeometric}[6][\tilde{F}]{%
+\provideboolean{COOL@p@isint}%
+\provideboolean{COOL@q@isint}%
+\provideboolean{COOL@a@islist}%
+\provideboolean{COOL@b@islist}%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {\setboolean{COOL@p@isint}{true}}%
+% Else
+ {\setboolean{COOL@p@isint}{false}}%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {\setboolean{COOL@q@isint}{true}}%
+% Else
+ {\setboolean{COOL@q@isint}{false}}%
+\listval{#4}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+ {\setboolean{COOL@a@islist}{true}}%
+% Else
+ {\setboolean{COOL@a@islist}{false}}%
+% \end{macrocode}
+% ensure that the submitted list is the same length as p
+% \begin{macrocode}
+\ifthenelse{ \boolean{COOL@p@isint} \AND
+ \boolean{COOL@a@islist} \AND
+ \NOT \( #2 = \value{COOL@listpointer} \) }%
+ {%
+ \PackageError{cool}%
+ {`RegHypergeometric' `p'-arg mismatch with `a'-arg}{}%
+ }%
+% else
+ {}%
+\listval{#5}{0}%
+\ifthenelse{\value{COOL@listpointer}>1}%
+ {\setboolean{COOL@b@islist}{true}}%
+% Else
+ {\setboolean{COOL@b@islist}{false}}%
+% \end{macrocode}
+% ensure that the submitted `b' list is the same length as q
+% \begin{macrocode}
+\ifthenelse{ \boolean{COOL@q@isint} \AND
+ \boolean{COOL@b@islist} \AND
+ \NOT \( #3 = \value{COOL@listpointer} \) }%
+ {%
+ \PackageError{cool}%
+ {`RegHypergeometric' `q'-arg mismatch with `b'-arg}%
+ {`b' list is not the same length as `q'}%
+ }%
+% else
+ {}%
+% troubleshoot
+\ifthenelse{ \boolean{COOL@a@islist} \AND \NOT \boolean{COOL@p@isint} }%
+ {%
+ \PackageError{cool}%
+ {`RegHypergeometric' `a'-arg mismatch with `p'-arg}%
+ {happens if `a'-arg is a list and `p'-arg isn't an integer}%
+ }%
+% else
+ {}%
+\ifthenelse{ \boolean{COOL@b@islist} \AND \NOT \boolean{COOL@q@isint} }%
+ {%
+ \PackageError{cool}%
+ {`RegHypergeometric' `b'-arg mismatch with `q'-arg}%
+ {happens if `b'-arg is a list and `q'-arg isn't an integer}%
+ }%
+% else
+ {}%
+% \end{macrocode}
+% First print the ${}_p F_q$
+% \begin{macrocode}
+{}_{#2}{\COOL@notation@RegHypergeometricSymb}_{#3}\!%
+\COOL@decide@paren{RegHypergeometric}%
+ {%
+ \COOL@Hypergeometric@pq@ab@value{p}{#2}{a}{#4};%
+ \COOL@Hypergeometric@pq@ab@value{q}{#3}{b}{#5};%
+ #6%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\AppellFOne}
+% Appell Hypergeometric Function
+%
+% \begin{tabular}{ll}
+% |\AppellFOne{a}{b_1,b_2}{c}{z_1,z_2}| & $\AppellFOne{a}{b_1,b_2}{c}{z_1,z_2}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@AppellFOneParen}{p}
+\newcommand{\AppellFOne}[4]%
+ {F_{1}\!\COOL@decide@paren{AppellFOne}{#1; #2; #3; #4}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\HypergeometricU}
+% Tricomi confluent hypergeometric function
+%
+% \begin{tabular}{ll}
+% |\HypergeometricU{a}{b}{z}| & $\HypergeometricU{a}{b}{z}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@HypergeometricUSymb}{U}
+\newcommand{\HypergeometricU}[3]%
+{\COOL@notation@HypergeometricUSymb\!\inp{#1, #2, #3}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\COOL@MeijerG@anp@value}
+% This macro is a decision maker for the |\MeijerG| macro. Despite the name it is used for both $p$ and $q$.
+% It is called as
+%
+% |\COOL@MeijerG@anp@value|
+% \DeleteShortVerb{\|}
+% \marg{a\textnormal{\texttt{|}}b}
+% \marg{n\textnormal{\texttt{|}}m}
+% \marg{p\textnormal{\texttt{|}}q}
+% \MakeShortVerb{\|}
+% \begin{macrocode}
+\newcommand{\COOL@MeijerG@anp@value}[3]{%
+\isint{#3}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \isint{#2}%
+ \ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \forLoop{1}{#3}{COOL@ct}%
+ {%
+ \ifthenelse{\value{COOL@ct}=1}{}{,}%
+ #1_{\arabic{COOL@ct}}%
+ }%
+ }%
+ % else
+ {%
+ #1_1,\ldots,#1_{#2},#1_{#2+1},\dots,#1_{#3}%
+ }%
+ }%
+% else
+ {%
+ \isint{#2}%
+ \ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \forLoop{1}{#2}{COOL@ct}%
+ {%
+ \ifthenelse{\value{COOL@ct}=1}{}{,}%
+ #1_{\arabic{COOL@ct}}%
+ }%
+ \setcounter{COOL@ct}{#2}%
+ \addtocounter{COOL@ct}{1}%
+ ,#1_{\arabic{COOL@ct}}, \ldots, #1_{#3}%
+ }%
+ % else
+ {%
+ #1_1,\ldots,#1_{#2},#1_{#2+1},\dots,#1_{#3}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\MeijerG}
+% |\MeijerG{|$a_1, \ldots, a_n$|}{|$a_{n+1}, \ldots, a_p$|}{|$b_1, \ldots, b_m$|}{|$b_{m+1}, \ldots, b_q$|}|\marg{x}
+%
+% \noindent |\MeijerG[|\meta{a list symbol},\meta{b list symbol}|]|\marg{n}\marg{p}\marg{m}\marg{q}\marg{x}
+%
+% \noindent |\MeijerG[|\meta{a list symbol}|]|\marg{n}\marg{p}|{|$b_1, \ldots, b_m$|}{|$b_{m+1}, \ldots, b_q$|}|\marg{x}
+%
+% \noindent |\MeijerG[,|\meta{b list symbol}|]{|$a_1, \ldots, a_n$|}{|$a_{n+1}, \ldots, a_p$|}|\marg{m}\marg{q}\marg{x}
+%
+% \hspace{0.25cm}
+%
+% \begin{tabular}{c}
+% Meijer $G$-Function
+% \\
+% \begin{tabular}{ll}
+% |\MeijerG[a,b]{n}{p}{m}{q}{z}| & $\MeijerG[a,b]{n}{p}{m}{q}{z}$ \\
+% \end{tabular}
+% \\
+% Meijer $G$-Function
+% \\
+% \begin{tabular}{ll}
+% |\MeijerG{1,2}{3}{a,b}{c,d}{z}| & $\MeijerG{1,2}{3}{a,b}{c,d}{z}$ \\
+% \end{tabular}
+% \\
+% Generalized Meijer $G$-Function
+% \\
+% \begin{tabular}{ll}
+% |\MeijerG[a,b]{n}{p}{m}{q}{z,r}| & $\MeijerG[a,b]{n}{p}{m}{q}{z,r}$ \\
+% \end{tabular}
+% \\
+% Generalized Meijer $G$-Function
+% \\
+% \begin{tabular}{ll}
+% |\MeijerG{1,2}{3}{a,b}{c,d}{z,r}| & $\MeijerG{1,2}{3}{a,b}{c,d}{z,r}$
+% \end{tabular}
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MeijerGSymb}{G}
+\newcommand{\MeijerG}[6][@,@]{%
+\listval{#1}{0}
+\ifthenelse{\value{COOL@listpointer}>2 \OR \value{COOL@listpointer}<1}%
+ {%
+ \PackageError{cool}{`MeijerG' Invalid Optional Argument}%
+ {Must be a comma separated list of length 1 or 2}%
+ }%
+% else
+ {%
+ }%
+\COOL@notation@MeijerGSymb%
+\ifthenelse{\equal{#1}{@,@}}%
+ {%
+ \listval{#2}{0}% n
+ \setcounter{COOL@ct}{\value{COOL@listpointer}}%
+ \listval{#4}{0}% m
+ \setcounter{COOL@ct@}{\value{COOL@listpointer}}%
+ ^{\arabic{COOL@ct@},\arabic{COOL@ct}}%
+ \listval{#3}{0}% p - n
+ \addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+ \listval{#5}{0}% q - m
+ \addtocounter{COOL@ct@}{\value{COOL@listpointer}}%
+ _{\arabic{COOL@ct},\arabic{COOL@ct@}}%
+ \!\left(%
+ #6%
+ \left|%
+ { {#2,#3} \@@atop {#4,#5} }%
+ \right)\right.%
+ }%
+% else
+ {%
+ \listval{#1}{0}%
+ \ifthenelse{\value{COOL@listpointer}=2}%
+ {%
+ \provideboolean{COOL@MeijerG@opt@one@blank}%
+ \def\COOL@MeijerG@sniffer##1,##2\COOL@MeijerG@sniffer@end{%
+ \ifthenelse{\equal{##1}{}}%
+ {%
+ \setboolean{COOL@MeijerG@opt@one@blank}{true}%
+ }%
+ % else
+ {%
+ \setboolean{COOL@MeijerG@opt@one@blank}{false}%
+ }%
+ }%
+ \expandafter\COOL@MeijerG@sniffer#1\COOL@MeijerG@sniffer@end\relax%
+ \ifthenelse{\boolean{COOL@MeijerG@opt@one@blank}}%
+ {%
+% \end{macrocode}
+% this is |\MeijerG[,b]{a_1,...,a_n}{a_{n++},...,a_p}{m}{q}{x}|
+% \begin{macrocode}
+ \listval{#2}{0}% n
+ \setcounter{COOL@ct}{\value{COOL@listpointer}}%
+ ^{#4,\arabic{COOL@ct}}%
+ \listval{#3}{0}% p
+ \addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+ _{\arabic{COOL@ct},#5}%
+ \!\left(%
+ #6%
+ \left|%
+ {%
+ {#2,#3} \@@atop {\COOL@MeijerG@anp@value{\listval{#1}{2}}{#4}{#5}}
+ }%
+ \right)\right.%
+ }%
+ % else
+ {%
+ ^{#4,#2}_{#3,#5}%
+ \!\left(%
+ #6%
+ \left|%
+ {%
+ {\COOL@MeijerG@anp@value{\listval{#1}{1}}{#2}{#3}}%
+ \@@atop%
+ {\COOL@MeijerG@anp@value{\listval{#1}{2}}{#4}{#5}}
+ }%
+ \right)\right.%
+ }%
+ }%
+ % else
+ {%
+% \end{macrocode}
+% this is| \MeijerG[a]{n}{p}{b_1,...,b_m}{b_{m++},...,a_p}{x}|
+% \begin{macrocode}
+ \listval{#4}{0}% m
+ \setcounter{COOL@ct}{\value{COOL@listpointer}}%
+ ^{\arabic{COOL@ct}, #2}%
+ \listval{#5}{0}% q
+ \addtocounter{COOL@ct}{\value{COOL@listpointer}}%
+ _{#3, \arabic{COOL@ct}}%
+ \!\left(%
+ #6%
+ \left|%
+ {%
+ {\COOL@MeijerG@anp@value{#1}{#2}{#3}} \@@atop {#4,#5}
+ }%
+ \right)\right.%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Angular Momentum Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\ClebschGordon}
+% Clebsch-Gordon Coefficients
+%
+% \begin{tabular}{ll}
+% |\ClebschGordon{j_1,m_1}{j_2,m_2}{j,m}| & $\ClebschGordon{j_1,m_1}{j_2,m_2}{j,m}$ \\
+% \end{tabular}
+%
+% \noindent \url{http://functions.wolfram.com/HypergeometricFunctions/ClebschGordan/}
+% \begin{macrocode}
+\newcommand{\ClebschGordon}[3]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ClebschGordon' Invalid Argument}%
+ {Must have a comma separated list of length two}%
+ }%
+% else
+ {}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ClebschGordon' Invalid Argument}%
+ {Must have a comma separated list of length two}%
+ }%
+% else
+ {}%
+\listval{#3}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ClebschGordon' Invalid Argument}%
+ {Must have a comma separated list of length two}%
+ }%
+% else
+ {}%
+\left<%
+ \listval{#1}{1},\listval{#2}{1};%
+ \listval{#1}{2},\listval{#2}{2}%
+ \left|%
+ \listval{#1}{1},\listval{#2}{1};%
+ \listval{#3}{1},\listval{#3}{2}%
+\right>\right.%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\ThreeJSymbol}
+% Wigner 3-j Symbol
+%
+% \begin{tabular}{ll}
+% |\ThreeJSymbol{j_1,m_1}{j_2,m_2}{j_3,m_3}| & $\ThreeJSymbol{j_1,m_1}{j_2,m_2}{j_3,m_3}$ \\
+% \end{tabular}
+%
+% \noindent \url{http://functions.wolfram.com/HypergeometricFunctions/ThreeJSymbol/}
+% \begin{macrocode}
+\newcommand{\ThreeJSymbol}[3]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+ {Must have comma separated list of length 2}%
+ }%
+% else
+ {}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+ {Must have comma separated list of length 2}%
+ }%
+% else
+ {}%
+\listval{#3}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=2}%
+ {%
+ \PackageError{cool}{`ThreeJSymbol' Invalid Argument}%
+ {Must have comma separated list of length 2}%
+ }%
+% else
+ {}%
+\mathchoice{%
+% displaystyle
+\inp{\!%
+ \begin{array}{ccc}%
+ \listval{#1}{1} & \listval{#2}{1} & \listval{#3}{1} \\%
+ \listval{#1}{2} & \listval{#2}{2} & \listval{#3}{2}
+ \end{array}%
+ \!}%
+ }%
+ {%
+% inline
+\inp{\!%
+ {\listval{#1}{1} \@@atop \listval{#1}{2}}%
+ {\listval{#2}{1} \@@atop \listval{#2}{2}}%
+ {\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+ {%
+% subscript
+\inp{\!%
+ {\listval{#1}{1} \@@atop \listval{#1}{2}}%
+ {\listval{#2}{1} \@@atop \listval{#2}{2}}%
+ {\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+ {%
+% subsubscript
+\inp{\!%
+ {\listval{#1}{1} \@@atop \listval{#1}{2}}%
+ {\listval{#2}{1} \@@atop \listval{#2}{2}}%
+ {\listval{#3}{1} \@@atop \listval{#3}{2}}%
+ \!}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\SixJSymbol}
+% Racah 6-j Symbol
+%
+% \begin{tabular}{ll}
+% |\SixJSymbol{j_1,j_2,j_3}{j_4,j_5,j_6}| & $\SixJSymbol{j_1,j_2,j_3}{j_4,j_5,j_6}$ \\
+% \end{tabular}
+%
+% \url{http://functions.wolfram.com/HypergeometricFunctions/SixJSymbol/}
+% \begin{macrocode}
+\newcommand{\SixJSymbol}[2]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=3}%
+ {%
+ \PackageError{cool}{`SixJSymbol' Invalid Argument}%
+ {Must have a comma separated list of length 3}%
+ }%
+%else
+ {}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer}=3}%
+ {%
+ \PackageError{cool}{`SixJSymbol' Invalid Argument}%
+ {Must have a comma separated list of length 3}%
+ }%
+%else
+ {}%
+\mathchoice{%
+% displaystyle
+\inbr{\!%
+\begin{array}{ccc}%
+\listval{#1}{1} & \listval{#1}{2} & \listval{#1}{3} \\%
+\listval{#2}{1} & \listval{#2}{2} & \listval{#2}{3}%
+\end{array}%
+ \!}%
+ }%
+ {%
+% inline
+\inbr{\!%
+ {\listval{#1}{1} \@@atop \listval{#2}{1}}%
+ {\listval{#1}{2} \@@atop \listval{#2}{2}}%
+ {\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+ {%
+% superscript
+\inbr{\!%
+ {\listval{#1}{1} \@@atop \listval{#2}{1}}%
+ {\listval{#1}{2} \@@atop \listval{#2}{2}}%
+ {\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+ {%
+% supersuperscript
+\inbr{\!%
+ {\listval{#1}{1} \@@atop \listval{#2}{1}}%
+ {\listval{#1}{2} \@@atop \listval{#2}{2}}%
+ {\listval{#1}{3} \@@atop \listval{#2}{3}}%
+ \!}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Complete Elliptic Integrals}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\EllipticK}
+% Complete Elliptic Integral of the First Kind
+%
+% \begin{tabular}{ll}
+% |\EllipticK{x}| & $\EllipticK{x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticKParen}{p}
+ \newcommand{\COOL@notation@EllipticKSymb}{K}
+\newcommand{\EllipticK}[1]%
+ {\COOL@notation@EllipticKSymb\!\COOL@decide@paren{EllipticK}{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\EllipticE}
+% Complete Elliptic Integral of the Second Kind
+%
+% \begin{tabular}{ll}
+% |\EllipticE{x}| & $\EllipticE{x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticEParen}{p}
+ \newcommand{\COOL@notation@EllipticESymb}{E}
+\newcommand{\EllipticE}[1]{%
+\liststore{#1}{COOL@EllipticE@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \COOL@notation@EllipticESymb\!\COOL@decide@paren{EllipticE}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \COOL@notation@EllipticESymb\!%
+ \COOL@decide@paren{EllipticE}%
+ {\COOL@EllipticE@arg@i \left| \, \COOL@EllipticE@arg@ii \!\!\right.}%
+ }%
+% Else
+ {%
+ \PackageError{Invalid Argument}%
+ {`EllipticE' can only accept a comma separated list of length 1 or 2}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\EllipticPi}
+% Complete Elliptic Integral of the Third Kind
+%
+% \begin{tabular}{ll}
+% |\EllipticPi{n,m}| & $\EllipticPi{n,m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticPiParen}{p}
+ \newcommand{\COOL@notation@EllipticPiSymb}{\Pi}
+\newcommand{\EllipticPi}[1]{%
+\liststore{#1}{COOL@EllipticPi@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \COOL@notation@EllipticPiSymb%
+ \!\COOL@decide@paren{EllipticPi}%
+ {\COOL@EllipticPi@arg@i \left| \, \COOL@EllipticPi@arg@ii \!\!\right.}%
+ }%
+% ElseIf
+{ \ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ \COOL@notation@EllipticPiSymb%
+ \!\COOL@decide@paren{EllipticPi}%
+ { \COOL@EllipticPi@arg@i; \,%
+ \COOL@EllipticPi@arg@ii \left| \,%
+ \COOL@EllipticPi@arg@iii \!\!\right.%
+ }%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`EllipticPi' can only accept a comma separated list of length 2 or 3}%
+ }%
+}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Incomplete Elliptic Integrals}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\EllipticF}
+% \begin{macro}{\IncEllipticF}
+% Incomplete Elliptic Integral of the First Kind
+%
+% \begin{tabular}{ll}
+% |\EllipticF{z,m}| & $\EllipticF{z,m}$ \\
+% |\IncEllipticF{z}{m}| & $\IncEllipticF{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticFParen}{p}
+ \newcommand{\COOL@notation@EllipticFSymb}{F}
+\newcommand{\EllipticF}[1]{%
+\liststore{#1}{COOL@EllipticF@arg@}%
+\listval{#1}{0}%
+\ifthenelse{ \value{COOL@listpointer} = 2 }%
+ {%
+ \COOL@notation@EllipticFSymb%
+ \!\COOL@decide@paren{EllipticF}%
+ {\COOL@EllipticF@arg@i \left| \, \COOL@EllipticF@arg@ii \!\!\right.}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`EllipticF' can only accept a comma separated list of length 2}%
+ }%
+}
+\newcommand{\IncEllipticF}[2]{\EllipticF{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\IncEllipticE}
+% Incomplete Elliptic Integral of the Second Kind
+%
+% \begin{tabular}{ll}
+% |\IncEllipticE{z}{m}| & $\IncEllipticE{z}{m}$ \\
+% |\EllipticE{z,m}| & $\EllipticE{z,m}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\IncEllipticE}[2]{\EllipticE{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\IncEllipticPi}
+% \begin{macro}{\EllipticPi}
+% Incomplete Elliptic Integral of the Third Kind
+%
+% \begin{tabular}{ll}
+% |\IncEllipticPi{n}{z}{m}| & $\IncEllipticPi{n}{z}{m}$ \\
+% |\EllipticPi{n,z,m}| & $\EllipticPi{n,z,m}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\IncEllipticPi}[3]{\EllipticPi{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\JacobiZeta}
+% Jacobi Zeta Function
+%
+% \begin{tabular}{ll}
+% |\JacobiZeta{z}{m}| & $\JacobiZeta{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiZetaParen}{p}
+ \newcommand{\COOL@notation@JacobiZetaSymb}{Z}
+\newcommand{\JacobiZeta}[2]{%
+\COOL@notation@JacobiZetaSymb
+\!\COOL@decide@paren{JacobiZeta}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Jacobi Theta Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\EllipticTheta}
+% \begin{macro}{\JacobiTheta}
+% Jacobi Theta Functions
+%
+% \begin{tabular}{ll}
+% |\JacobiTheta{1}{z}{q}| & $\JacobiTheta{1}{z}{q}$ \\
+% |\JacobiTheta{2}{z}{q}| & $\JacobiTheta{2}{z}{q}$ \\
+% |\JacobiTheta{3}{z}{q}| & $\JacobiTheta{3}{z}{q}$ \\
+% |\JacobiTheta{4}{z}{q}| & $\JacobiTheta{4}{z}{q}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticThetaParen}{p}
+\newcommand{\EllipticTheta}[3]%
+ {\vartheta_{#1}\!\COOL@decide@paren{EllipticTheta}{#2, #3}}
+\newcommand{\JacobiTheta}[3]{\EllipticTheta{#1}{#2}{#3}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Neville Theta Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\NevilleThetaC}
+% Neville Theta Function, |\NevilleThetaC{z}{m}|, $\NevilleThetaC{z}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@NevilleThetaCParen}{p}
+\newcommand{\NevilleThetaC}[2]{%
+ \vartheta_{c}\!\COOL@decide@paren{NevilleThetaC}%
+ {#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NevilleThetaD}
+% Neville Theta Function, |\NevilleThetaD{z}{m}|, $\NevilleThetaD{z}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@NevilleThetaDParen}{p}
+\newcommand{\NevilleThetaD}[2]{%
+ \vartheta_{d}\!\COOL@decide@paren{NevilleThetaD}%
+ {#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NevilleThetaN}
+% Neville Theta Function, |\NevilleThetaN{z}{m}|, $\NevilleThetaN{z}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@NevilleThetaNParen}{p}
+\newcommand{\NevilleThetaN}[2]{%
+ \vartheta_{n}\!\COOL@decide@paren{NevilleThetaN}%
+ {#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NevilleThetaS}
+% Neville Theta Function, |\NevilleThetaS{z}{m}|, $\NevilleThetaS{z}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@NevilleThetaSParen}{p}
+\newcommand{\NevilleThetaS}[2]{%
+ \vartheta_{s}\!\COOL@decide@paren{NevilleThetaS}%
+ {#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Weierstrass Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\WeierstrassP}
+% \begin{macro}{\WeiP}
+% Weierstrass Elliptic Function
+%
+% \begin{tabular}{ll}
+% |\WeierstrassP{z}{g_2,g_3}| & $\WeierstrassP{z}{g_2,g_3}$ \\
+% |\WeiP{z}{g_2,g_3}| & $\WeiP{z}{g_2,g_3}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@WeierstrassPParen}{p}
+\newcommand{\WeierstrassP}[2]{%
+\liststore{#2}{COOL@WeiP@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassP' second argument must be%
+ a comma separated list of length 2}%
+ }
+% Else
+ {%
+ \wp\!\COOL@decide@paren{WeierstrassP}{#1; #2}
+ }%
+}
+\newcommand{\WeiP}[2]{\WeierstrassP{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassPInv}
+% \begin{macro}{\WeiPInv}
+% Inverse of Weierstrass Elliptic Function
+%
+% \begin{tabular}{lll}
+% Inverse & |\WeiPInv{z}{g_2,g_3}| & $\WeiPInv{z}{g_2,g_3}$
+% \\
+% Generalized Inverse & |\WeiPInv{z_1,z_2}{g_2,g_3}| & $\WeiPInv{z_1,z_2}{g_2,g_3}$
+% \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@WeierstrassPInvParen}{p}
+\newcommand{\WeierstrassPInv}[2]{%
+\liststore{#1}{COOL@WeiPinv@arg@z@}%
+\liststore{#1}{COOL@WeiPinv@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassPInv' second argument must be%
+ a comma separated list of length 2}%
+ }
+% Else
+ {
+ \listval{#1}{0}%
+ \ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \wp^{-1}\!\COOL@decide@paren{WeierstrassPInv}{#1; #2}%
+ }%
+ % ElseIf
+ { \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \wp^{-1}\!\COOL@decide@paren{WeierstrassPInv}{#1; #2}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassPInv' first argument must be%
+ a comma separate list of length 1 or 2}%
+ }}%
+ }%
+}
+\newcommand{\WeiPInv}[2]{\WeierstrassPInv{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassPGenInv}
+% Generalized Inverse of Weierstrass Elliptic Function
+%
+% |\WierstrassPGenInv{z_1}{z_2}{g_1}{g_2}|
+% \begin{macrocode}
+\newcommand{\WeierstrassPGenInv}[4]{\WeierstrassPInv{#1,#2}{#3,#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassSigma}
+% \begin{macro}{\WeiSigma}
+% Wierstrass Sigma Function
+%
+% \begin{tabular}{lll}
+% Sigma & |\WeierstrassSigma{z}{g_2,g_3}| & $\WeierstrassSigma{z}{g_2,g_3}$ \\
+% & |\WeiSigma{z}{g_2,g_3}| & $\WeiSigma{z}{g_2,g_3}$ \\
+% Associated Sigma & |\WeierstrassSigma{n,z}{g_2,g_3}| & $\WeierstrassSigma{n,z}{g_2,g_3}$ \\
+% & |\WeiSigma{n,z}{g_2,g_3}| & $\WeiSigma{n,z}{g_2,g_3}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\WeierstrassSigma}[2]{%
+\liststore{#1}{COOL@WeiSigma@arg@z@}%
+\liststore{#2}{COOL@WeiSigma@arg@g@}%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassSigma' second argument must be%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \listval{#1}{0}%
+ \ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \sigma\!\inp{#1; #2}%
+ }%
+ % ElseIf
+ { \ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \sigma_{\COOL@WeiSigma@arg@z@i}\!\inp{\COOL@WeiSigma@arg@z@ii; #2}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassSigma' first argument must be%
+ a comma separated list of length 1 or 2}%
+ }}%
+ }%
+}
+\newcommand{\WeiSigma}[2]{\WeierstrassSigma{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AssocWeierstrassSigma}
+% Associated Weierstrass Sigma Function
+%
+% \begin{tabular}{ll}
+% |\AssocWeierstrassSigma{n}{z}{g_2}{g_3}| & $\AssocWeierstrassSigma{n}{z}{g_2}{g_3}$ \\
+% |\WeiSigma{n,z}{g_2,g_3}| & $\WeiSigma{n,z}{g_2,g_3}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\AssocWeierstrassSigma}[4]{\WeierstrassSigma{#1,#2}{#3,#4}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassZeta}
+% \begin{macro}{\WeiZeta}
+% Weierstrass Zeta Function
+%
+% \begin{tabular}{ll}
+% |\WeierstrassZeta{z}{g_2,g_3}| & $\WeierstrassZeta{z}{g_2,g_3}$ \\
+% |\WeiZeta{z}{g_2,g_3}| & $\WeiZeta{z}{g_2,g_3}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@WeierstrassZetaParen}{p}%
+\newcommand{\WeierstrassZeta}[2]{%
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassZeta' second argument must be%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \zeta\!\COOL@decide@paren{WeierstrassZeta}{#1; #2}%
+ }%
+}
+\newcommand{\WeiZeta}[2]{\WeierstrassZeta{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassHalfPeriods}
+% \begin{macro}{\WeiHalfPeriods}
+% Weierstrass half-periods
+%
+% \begin{tabular}{ll}
+% |\WeierstrassHalfPeriods{g_2,g_3}| & $\WeierstrassHalfPeriods{g_2,g_3}$ \\
+% |\WeiHalfPeriods{g_2,g_3}| & $\WeiHalfPeriods{g_2,g_3}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\WeierstrassHalfPeriods}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassHalfPeriods' can only accept%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \{ \omega_1\!\inp{#1}, \omega_3\!\inp{#1} \}%
+ }%
+}
+\newcommand{\WeiHalfPeriods}[1]{\WeierstrassHalfPeriods{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassInvariants}
+% Weierstrass Invariants
+%
+% \noindent
+% \begin{tabular}{ll}
+% |\WeierstrassInvariants{\omega_1,\omega_3}| & $\WeierstrassInvariants{\omega_1,\omega_3}$ \\
+% |\WeiInvars{\omega_1,\omega_3}| & $\WeiInvars{\omega_1,\omega_3}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\WeierstrassInvariants}[1]{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassInvariants' can only accept%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \{ g_2\!\inp{#1}, g_3\!\inp{#1} \}%
+ }%
+}
+\newcommand{\WeiInvars}[1]{\WeierstrassInvariants{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\COOL@hideOnSF}
+% Used to hide inputs or other when style is |sf|
+%
+% \begin{tabular}{ll}
+% |sf| & short form \\
+% |ff| & full form
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@hideOnSF}[2]
+ {%
+ \ifthenelse{ \equal{\csname COOL@notation@#1\endcsname}{sf} }%
+ {}%
+ % Else
+ {#2}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassPHalfPeriodValues}
+% \begin{macro}{\WeiPHalfPeriodVal}
+% Weierstrass elliptic function values at half-periods
+%
+% \begin{tabular}{c}
+% |\Style{WeierstrassPHalfPeriodValuesDisplay=sf}| (Default) \\
+% |\WeierstrassPHalfPeriodValues{g_2,g_3}| \\
+% |\WeiPHalfPeriodVal{g_2,g_3}| \\
+% $\WeiPHalfPeriodVal{g_2,g_3}$ \\
+% \\
+% |\Style{WeierstrassPHalfPeriodValuesDisplay=ff}|
+% \Style{WeierstrassPHalfPeriodValuesDisplay=ff}% \\
+% |\WeierstrassPHalfPeriodValues{g_2,g_3}| \\
+% |\WeiPHalfPeriodVal{g_2,g_3}| \\
+% $\WeiPHalfPeriodVal{g_2,g_3}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@WeierstrassPHalfPeriodValuesDisplay}{sf}
+\newcommand{\WeierstrassPHalfPeriodValues}[1]
+{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassPHalfPeriodValues' can only accept%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \{ e_1\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}},%
+ e_2\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}},%
+ e_3\COOL@hideOnSF{WeierstrassPHalfPeriodValuesDisplay}{\!\inp{#1}}%
+ \}%
+ }%
+}
+\newcommand{\WeiPHalfPeriodVal}[1]{\WeierstrassPHalfPeriodValues{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\WeierstrassZetaHalfPeriodValues}
+% \begin{macro}{\WeiZetaHalfPeriodVal}
+% Weierstrass zeta function values at half-periods
+%
+% \begin{tabular}{c}
+% |\Style{WeierstrassZetaHalfPeriodValuesDisplay=sf}| (Default) \\
+% |\WeierstrassZetaHalfPeriodValues{g_2,g_3}| \\
+% |\WeiZetaHalfPeriodVal{g_2,g_3}| \\
+% $\WeiZetaHalfPeriodVal{g_2,g_3}$ \\
+% \\
+% |\Style{WeierstrassZetaHalfPeriodValuesDisplay=ff}|
+% \Style{WeierstrassZetaHalfPeriodValuesDisplay=ff}% \\
+% |\WeierstrassZetaHalfPeriodValues{g_2,g_3}| \\
+% |\WeiZetaHalfPeriodVal{g_2,g_3}| \\
+% $\WeiZetaHalfPeriodVal{g_2,g_3}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@WeierstrassZetaHalfPeriodValuesDisplay}{sf}
+\newcommand{\WeierstrassZetaHalfPeriodValues}[1]
+{%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`WeierstrassZetaHalfPeriodValues' can only accept%
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \{%
+ \eta_1\COOL@hideOnSF%
+ {WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}},%
+ \eta_2\COOL@hideOnSF%
+ {WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}},%
+ \eta_3\COOL@hideOnSF%
+ {WeierstrassZetaHalfPeriodValuesDisplay}{\!\inp{#1}}%
+ \}%
+ }%
+}
+\newcommand{\WeiZetaHalfPeriodVal}[1]%
+ {\WeierstrassZetaHalfPeriodValues{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Jacobi Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\JacobiAmplitude}
+% Amplitude, |\JacobiAmplitude{z}{m}|, $\JacobiAmplitude{z}{m}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiAmplitudeParen}{p}
+ \DeclareMathOperator{\JacobiAmplitudeSymb}{am}
+\newcommand{\JacobiAmplitude}[2]{%
+\JacobiAmplitudeSymb\!\COOL@decide@paren%
+ {JacobiAmplitude}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\JacobiCD}
+% \begin{macro}{\JacobiCDInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiCD{z}{m}| & $\JacobiCD{z}{m}$ \\
+% |\JacobiCDInv{z}{m}| & $\JacobiCDInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiCDParen}{p}
+ \newcommand{\COOL@notation@JacobiCDInvParen}{p}
+ \DeclareMathOperator{\JacobiCDSymb}{cd}
+\newcommand{\JacobiCD}[2]{%
+\JacobiCDSymb\!\COOL@decide@paren%
+ {JacobiCD}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCDInv}[2]{%
+\JacobiCDSymb^{-1}\!\COOL@decide@paren%
+ {JacobiCDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiCN}
+% \begin{macro}{\JacobiCNInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiCN{z}{m}| & $\JacobiCN{z}{m}$ \\
+% |\JacobiCNInv{z}{m}| & $\JacobiCNInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiCNParen}{p}
+ \newcommand{\COOL@notation@JacobiCNInvParen}{p}
+ \DeclareMathOperator{\JacobiCNSymb}{cn}
+\newcommand{\JacobiCN}[2]{%
+\JacobiCNSymb\!\COOL@decide@paren%
+ {JacobiCN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCNInv}[2]{%
+\JacobiCNSymb^{-1}\!\COOL@decide@paren%
+ {JacobiCNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiCS}
+% \begin{macro}{\JacobiCSInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiCS{z}{m}| & $\JacobiCS{z}{m}$ \\
+% |\JacobiCSInv{z}{m}| & $\JacobiCSInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiCSParen}{p}
+ \newcommand{\COOL@notation@JacobiCSInvParen}{p}
+ \DeclareMathOperator{\JacobiCSSymb}{cs}
+\newcommand{\JacobiCS}[2]{%
+\JacobiCSSymb\!\COOL@decide@paren%
+ {JacobiCS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiCSInv}[2]{%
+\JacobiCSSymb^{-1}\!\COOL@decide@paren%
+ {JacobiCSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiDC}
+% \begin{macro}{\JacobiDCInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiDC{z}{m}| & $\JacobiDC{z}{m}$ \\
+% |\JacobiDCInv{z}{m}| & $\JacobiDCInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiDCParen}{p}
+ \newcommand{\COOL@notation@JacobiDCInvParen}{p}
+ \DeclareMathOperator{\JacobiDCSymb}{dc}
+\newcommand{\JacobiDC}[2]{%
+\JacobiDCSymb\!\COOL@decide@paren%
+ {JacobiDC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDCInv}[2]{%
+\JacobiDCSymb^{-1}\!\COOL@decide@paren%
+ {JacobiDCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiDN}
+% \begin{macro}{\JacobiDNInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiDN{z}{m}| & $\JacobiDN{z}{m}$ \\
+% |\JacobiDNInv{z}{m}| & $\JacobiDNInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiDNParen}{p}
+ \newcommand{\COOL@notation@JacobiDNInvParen}{p}
+ \DeclareMathOperator{\JacobiDNSymb}{dn}
+\newcommand{\JacobiDN}[2]{%
+\JacobiDNSymb\!\COOL@decide@paren%
+ {JacobiDN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDNInv}[2]{%
+\JacobiDNSymb^{-1}\!\COOL@decide@paren%
+ {JacobiDNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiDS}
+% \begin{macro}{\JacobiDSInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiDS{z}{m}| & $\JacobiDS{z}{m}$ \\
+% |\JacobiDSInv{z}{m}| & $\JacobiDSInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiDSParen}{p}
+ \newcommand{\COOL@notation@JacobiDSInvParen}{p}
+ \DeclareMathOperator{\JacobiDSSymb}{ds}
+\newcommand{\JacobiDS}[2]{%
+\JacobiDSSymb\!\COOL@decide@paren%
+ {JacobiDS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiDSInv}[2]{%
+\JacobiDSSymb^{-1}\!\COOL@decide@paren%
+ {JacobiDSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiNC}
+% \begin{macro}{\JacobiNCInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiNC{z}{m}| & $\JacobiNC{z}{m}$ \\
+% |\JacobiNCInv{z}{m}| & $\JacobiNCInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiNCParen}{p}
+ \newcommand{\COOL@notation@JacobiNCInvParen}{p}
+ \DeclareMathOperator{\JacobiNCSymb}{nc}
+\newcommand{\JacobiNC}[2]{%
+\JacobiNCSymb\!\COOL@decide@paren%
+ {JacobiNC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNCInv}[2]{%
+\JacobiNCSymb^{-1}\!\COOL@decide@paren%
+ {JacobiNCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiND}
+% \begin{macro}{\JacobiNDinv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiND{z}{m}| & $\JacobiND{z}{m}$ \\
+% |\JacobiNDInv{z}{m}| & $\JacobiNDInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiNDParen}{p}
+ \newcommand{\COOL@notation@JacobiNDInvParen}{p}
+ \DeclareMathOperator{\JacobiNDSymb}{nd}
+\newcommand{\JacobiND}[2]{%
+\JacobiNDSymb\!\COOL@decide@paren%
+ {JacobiND}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNDInv}[2]{%
+\JacobiNDSymb^{-1}\!\COOL@decide@paren%
+ {JacobiNDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiNS}
+% \begin{macro}{\JacobiNSInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiNS{z}{m}| & $\JacobiNS{z}{m}$ \\
+% |\JacobiNSInv{z}{m}| & $\JacobiNSInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiNSParen}{p}
+ \newcommand{\COOL@notation@JacobiNSInvParen}{p}
+ \DeclareMathOperator{\JacobiNSSymb}{ns}
+\newcommand{\JacobiNS}[2]{%
+\JacobiNSSymb\!\COOL@decide@paren%
+ {JacobiNS}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiNSInv}[2]{%
+\JacobiNSSymb^{-1}\!\COOL@decide@paren%
+ {JacobiNSInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiSC}
+% \begin{macro}{\JacobiSCInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiSC{z}{m}| & $\JacobiSC{z}{m}$ \\
+% |\JacobiSCInv{z}{m}| & $\JacobiSCInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiSCParen}{p}
+ \newcommand{\COOL@notation@JacobiSCInvParen}{p}
+ \DeclareMathOperator{\JacobiSCSymb}{sc}
+\newcommand{\JacobiSC}[2]{%
+\JacobiSCSymb\!\COOL@decide@paren%
+ {JacobiSC}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSCInv}[2]{%
+\JacobiSCSymb^{-1}\!\COOL@decide@paren%
+ {JacobiSCInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiSD}
+% \begin{macro}{\JacobiSDInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiSD{z}{m}| & $\JacobiSD{z}{m}$ \\
+% |\JacobiSDInv{z}{m}| & $\JacobiSDInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiSDParen}{p}
+ \newcommand{\COOL@notation@JacobiSDInvParen}{p}
+ \DeclareMathOperator{\JacobiSDSymb}{sd}
+\newcommand{\JacobiSD}[2]{%
+\JacobiSDSymb\!\COOL@decide@paren%
+ {JacobiSD}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSDInv}[2]{%
+\JacobiSDSymb^{-1}\!\COOL@decide@paren%
+ {JacobiSDInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\JacobiSN}
+% \begin{macro}{\JacobiSNInv}
+% Jacobi elliptic function and its inverse
+%
+% \begin{tabular}{ll}
+% |\JacobiSN{z}{m}| & $\JacobiSN{z}{m}$ \\
+% |\JacobiSNInv{z}{m}| & $\JacobiSNInv{z}{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@JacobiSNParen}{p}
+ \newcommand{\COOL@notation@JacobiSNInvParen}{p}
+ \DeclareMathOperator{\JacobiSNSymb}{sn}
+\newcommand{\JacobiSN}[2]{%
+\JacobiSNSymb\!\COOL@decide@paren%
+ {JacobiSN}{#1 \left| \, #2 \right.\!\!}%
+}
+\newcommand{\JacobiSNInv}[2]{%
+\JacobiSNSymb^{-1}\!\COOL@decide@paren%
+ {JacobiSNInv}{#1 \left| \, #2 \right.\!\!}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Modular Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\DedekindEta}
+% Dedekind eta modular function, |\DedekindEta{z}|, $\DedekindEta{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DedekindEtaParen}{p}
+\newcommand{\DedekindEta}[1]{\eta\!\COOL@decide@paren{DedekindEta}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KleinInvariantJ}
+% Klein invariant modular function, |\KleinInvariantJ{z}|, $\KleinInvariantJ{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@KleinInvariantJParen}{p}
+\newcommand{\KleinInvariantJ}[1]%
+ {J\!\COOL@decide@paren{KleinInvariantJ}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ModularLambda}
+% Modular lambda function, |\ModularLambda{z}|, $\ModularLambda{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ModularLambdaParen}{p}
+\newcommand{\ModularLambda}[1]%
+ {\lambda\!\COOL@decide@paren{ModularLambda}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EllipticNomeQ}
+% \begin{macro}{\EllipticNomeQInv}
+% Nome and its inverse
+%
+% \begin{tabular}{ll}
+% |\EllipticNomeQ{m}| & $\EllipticNomeQ{m}$ \\
+% |\EllipticNomeQInv{m}| & $\EllipticNomeQInv{m}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticNomeQParen}{p}
+ \newcommand{\COOL@notation@EllipticNomeQInvParen}{p}
+\newcommand{\EllipticNomeQ}[1]%
+ {q\!\COOL@decide@paren{EllipticNomeQ}{#1}}
+\newcommand{\EllipticNomeQInv}[1]%
+ {q^{-1}\!\COOL@decide@paren{EllipticNomeQ}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Arithmetic Geometric Mean}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\ArithGeoMean}
+% \begin{macro}{\AGM}
+% Arithmetic Geometric Mean
+%
+% \begin{tabular}{ll}
+% |\ArithGeoMean{a}{b}| & $\ArithGeoMean{a}{b}$ \\
+% |\AGM{a}{b}| & $\AGM{a}{b}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ArithGeoMeanParen}{p}
+ \DeclareMathOperator{\ArithGeoMeanSymb}{agm}
+\newcommand{\ArithGeoMean}[2]%
+ {\ArithGeoMeanSymb\!\COOL@decide@paren{ArithGeoMean}{#1, #2}}
+\newcommand{\AGM}[2]{\ArithGeoMean{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Elliptic Exp and Log}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\EllipticExp}
+% \begin{macro}{\EExp}
+% Elliptic exponential
+%
+% \begin{tabular}{ll}
+% |\EllipticExp{z}{a,b}| & $\EllipticExp{z}{a,b}$ \\
+% |\EExp{z}{a,b}| & $\EExp{z}{a,b}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticExpParen}{p}
+ \DeclareMathOperator{\EllipticExpSymb}{eexp}
+\newcommand{\EllipticExp}[2]{%
+\liststore{#2}{COOL@EllipticExp@arg@}
+\listval{#2}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`EllipticExp' second argument must be
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \EllipticExpSymb\!\COOL@decide@paren{EllipticExp}{#1; #2}%
+ }%
+}
+\newcommand{\EExp}[2]{\EllipticExp{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\EllipticLog}
+% \begin{macro}{\ELog}
+% Elliptic logarithm
+%
+% \begin{tabular}{ll}
+% |\EllipticLog{z_1,z_2}{a,b}| & $\EllipticLog{z_1,z_2}{a,b}$ \\
+% |\ELog{z_1,z_2}{a,b}| & $\ELog{z_1,z_2}{a,b}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EllipticLogParen}{p}
+ \DeclareMathOperator{\EllipticLogSymb}{elog}
+\newcommand{\EllipticLog}[2]{%
+\liststore{#1}{COOL@EllipticLog@arg@z@}%
+\liststore{#2}{COOL@EllipticLog@arg@a@}%
+\listval{#1}{0}%
+\ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`EllipticLog' first argument must be
+ a comma separated list of length 2}%
+ }%
+% Else
+ {%
+ \listval{#2}{0}%
+ \ifthenelse{\NOT \value{COOL@listpointer} = 2}%
+ {%
+ \PackageError{cool}{Invalid Argument}%
+ {`EllipticLog' second argument must be%
+ a comma separated list of length 2}%
+ }%
+ % Else
+ {%
+ \EllipticLogSymb\!\COOL@decide@paren{EllipticLog}{#1; #2}%
+ }%
+ }%
+}
+\newcommand{\ELog}[2]{\EllipticLog{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Zeta Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\RiemannZeta}
+% Riemann Zeta Function
+%
+% \begin{tabular}{ll}
+% |\RiemannZeta{s}| & $\RiemannZeta{s}$ \\
+% |\Zeta{s}| & $\Zeta{s}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\RiemannZeta}[1]{\Zeta{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HurwitzZeta}
+% Hurwitz Zeta Function
+%
+% \begin{tabular}{ll}
+% |\HurwitzZeta{s}{a}| & $\HurwitzZeta{s}{a}$ \\
+% |\Zeta{s,a}| & $\Zeta{s,a}$
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\HurwitzZeta}[2]{\Zeta{#1,#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Zeta}
+% Riemann and Hurwitz Zeta
+%
+% \begin{tabular}{lll}
+% Riemann Zeta & |\Zeta{s}| & $\Zeta{s}$ \\
+% Hurwitz Zeta & |\Zeta{s,a}| & $\Zeta{s,a}$
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ZetaParen}{p}
+\newcommand{\Zeta}[1]{%
+\liststore{#1}{COOL@Zeta@arg@}%
+\listval{#1}{0}% get the list length
+\ifthenelse{\value{COOL@listpointer} = 2}%
+ {%
+ \zeta\!\COOL@decide@paren{Zeta}{\COOL@Zeta@arg@i,\COOL@Zeta@arg@ii}%
+ }%
+% else
+ {%
+ \ifthenelse{\value{COOL@listpointer} = 1}%
+ {%
+ \zeta\!\COOL@decide@paren{Zeta}{#1}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{`Zeta' Invalid Argument}%
+ {the Zeta function can only accept%
+ a comma deliminated list of length 1 or 2}
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RiemannSiegelTheta}
+% Riemann-Siegel Theta Function, |\RiemannSiegelTheta{z}|, $\RiemannSiegelTheta{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@RiemannSiegelThetaParen}{p}
+\newcommand{\RiemannSiegelTheta}[1]%
+ {\vartheta\!\COOL@decide@paren{RiemannSiegelTheta}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RiemannSiegelZ}
+% Riemann-Siegel Z Function, |\RiemannSiegelZ{z}|, $\RiemannSiegelZ{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@RiemannSiegelZParen}{p}
+\newcommand{\RiemannSiegelZ}[1]%
+ {Z\!\COOL@decide@paren{RiemannSiegelZ}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\StieltjesGamma}
+% Stieltjes Constant, |\StieltjesGamma{n}|, $\StieltjesGamma{n}$
+% \begin{macrocode}
+\newcommand{\StieltjesGamma}[1]{\gamma_{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LerchPhi}
+% Lerch transcendent, |\LerchPhi{z}{s}{a}|, $\LerchPhi{z}{s}{a}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@LerchPhiParen}{p}
+\newcommand{\LerchPhi}[3]{\Phi\!\COOL@decide@paren{LerchPhi}{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Polylogarithms}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\NielsenPolyLog}
+% Nielsen Polylogarithm, |\NielsenPolyLog{\nu}{p}{z}|, $\NielsenPolyLog{\nu}{p}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@NielsenPolyLogParen}{p}
+\newcommand{%
+\NielsenPolyLog}[3]{S_{#1}^{#2}\!%
+ \COOL@decide@paren{NielsenPolyLog}{#3}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PolyLog}
+% Polylogarithm
+%
+% \begin{tabular}{lll}
+% Nielsen PolyLog & |\PolyLog{\nu,p,z}| & $\PolyLog{\nu,p,z}$ \\
+% PolyLog & |\PolyLog{\nu,z}| & $\PolyLog{\nu,z}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PolyLogParen}{p}
+ \DeclareMathOperator{\PolyLogSymb}{Li}
+\newcommand{\PolyLog}[1]{%
+\liststore{#1}{COOL@PolyLog@arg@}%
+\listval{#1}{0}%
+\ifthenelse{\value{COOL@listpointer} = 3}%
+ {%
+ \NielsenPolyLog{\COOL@PolyLog@arg@i}%
+ {\COOL@PolyLog@arg@ii}{\COOL@PolyLog@arg@iii}%
+ }%
+% else
+ {%
+ \ifthenelse{ \value{COOL@listpointer} = 2 }%
+ {%
+ \PolyLogSymb_{\COOL@PolyLog@arg@i}\!%
+ \COOL@decide@paren{PolyLog}{\COOL@PolyLog@arg@ii}%
+ }%
+ % else
+ {%
+ \PackageError{cool}{`PolyLog' Invalid Argument}%
+ {This function returns either the Polylogarithm or the%
+ Nielsen Polylogarithm. It therefore only accepts a comma%
+ deliminated list of length two or three (1 or 2 commas)}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DiLog}
+% Dilogarithm (alias for |\PolyLog{2,x}|); |\DiLog{x}|, $\DiLog{x}$
+% \begin{macrocode}
+\newcommand{\DiLog}[1]{\PolyLog{2,#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Mathieu Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\MathieuC}
+% Even Mathieu Function, |\MathieuC{a}{q}{z}|, $\MathieuC{a}{q}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MathieuCParen}{p}
+ \DeclareMathOperator{\MathieuCSymb}{Ce}
+\newcommand{\MathieuC}[3]%
+ {\MathieuCSymb\!\COOL@decide@paren{MathieuC}{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MathieuS}
+% Odd Mathieu Function, |\MathieuS{a}{q}{z}|, $\MathieuS{a}{q}{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MathieuSParen}{p}
+ \DeclareMathOperator{\MathieuSSymb}{Se}
+\newcommand{\MathieuS}[3]%
+ {\mathord{\MathieuSSymb}\!\COOL@decide@paren{MathieuS}{#1,#2,#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Mathieu Characteristics}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\MathieuCharacteristicA}
+% \begin{macro}{\MathieuCharisticA}
+% Characteristic Value of Even Mathieu Function
+%
+% \begin{tabular}{ll}
+% |\MathieuCharacteristicA{r}{q}| & $\MathieuCharacteristicA{r}{q}$ \\
+% |\MathieuCharisticA{r}{q}| & $\MathieuCharisticA{r}{q}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MathieuCharacteristicAParen}{p}
+\newcommand{\MathieuCharacteristicA}[2]%
+ {a_{#1}\!\COOL@decide@paren{MathieuCharacteristicA}{#2}}
+\newcommand{\MathieuCharisticA}[2]{\MathieuCharacteristicA{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\MathieuCharacteristicB}
+% \begin{macro}{\MathieuCharisticB}
+% Characteristic Value of Even Mathieu Fucntion
+%
+% \begin{tabular}{ll}
+% |\MathieuCharacteristicB{r}{q}| & $\MathieuCharacteristicB{r}{q}$ \\
+% |\MathieuCharisticB{r}{q}| & $\MathieuCharisticB{r}{q}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MathieuCharacteristicBParen}{p}
+\newcommand{\MathieuCharacteristicB}[2]%
+ {b_{#1}\!\COOL@decide@paren{MathieuCharacteristicB}{#2}}
+\newcommand{\MathieuCharisticB}[2]{\MathieuCharacteristicB{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\MathieuCharacteristicExponent}
+% \begin{macro}{\MathieuCharisticExp}
+% Characteristic Exponent of a Mathieu Fucntion
+%
+% \begin{tabular}{ll}
+% |\MathieuCharateristicExponent{a}{q}| & $\MathieuCharacteristicExponent{a}{q}$ \\
+% |\MathieuCharisticExp{a}{q}| & $\MathieuCharisticExp{a}{q}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MathieuCharacteristicExponentParen}{p}
+\newcommand{\MathieuCharacteristicExponent}[2]%
+ {r\!\COOL@decide@paren{MathieuCharacteristicExponent}{#1,#2}}
+\newcommand{\MathieuCharisticExp}[2]%
+ {\MathieuCharacteristicExponent{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Complex variables}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Abs}
+% Absolute value, |\Abs{z}|, $\Abs{z}$
+% \begin{macrocode}
+\newcommand{\Abs}[1]{ \left|#1\right| }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Arg}
+% Argument, |\Arg{z}|, $\Arg{z}$
+% \begin{macrocode}
+\newcommand{\Arg}[1]{ \arg\!\inp{#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Conjugate}
+% \begin{macro}{\Conj}
+% Complex Conjugate
+%
+% \begin{tabular}{ll}
+% |\Conj{z}| & $\Conj{z}$ \\
+% |\Conjugate{z}| & $\Conjugate{z}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \def\COOL@notation@Conjugate{star}
+ \newcommand{\COOL@notation@ConjugateParen}{inv}
+\newcommand{\Conjugate}[1]{\Conj{#1}}
+\newcommand{\Conj}[1]{%
+\ifthenelse{\equal{\COOL@notation@Conjugate}{bar}}%
+ {%
+ \bar{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\equal{\COOL@notation@Conjugate}{overline}}%
+ {%
+ \overline{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\equal{\COOL@notation@Conjugate}{star}}%
+ {%
+ \COOL@decide@paren{Conjugate}{#1}^*%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {`Conjugate' can only be set at `star', `bar', or `overline'}%
+ }%
+}}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Real}
+% Real Part, |\Real{z}|, $\Real{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@RealParen}{none}
+ \DeclareMathOperator{\RealSymb}{Re}
+\newcommand{\Real}[1]{%
+% \end{macrocode}
+% we put a space if there is no parentheses, or leave it out if there are
+% \begin{macrocode}
+\ifthenelse{\equal{\COOL@notation@ImagParen}{none}}%
+ {%
+ \RealSymb{#1}%
+ }%
+% Else
+ {%
+ \RealSymb\!\COOL@decide@paren{Imag}{#1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Imag}
+% Imaginary Part, |\Imag{z}|, $\Imag{z}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@ImagParen}{none}
+ \DeclareMathOperator{\ImagSymb}{Im}
+\newcommand{\Imag}[1]{%
+% \end{macrocode}
+% we put a space if there is no parentheses, or leave it out if there are
+% \begin{macrocode}
+\ifthenelse{\equal{\COOL@notation@ImagParen}{none}}%
+ {%
+ \ImagSymb{#1}%
+ }%
+% Else
+ {%
+ \ImagSymb\!\COOL@decide@paren{Imag}{#1}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Sign}
+% Sign function, |\Sign{x}|, $\Sign{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@SignParen}{p}
+\newcommand{\Sign}[1]{\operatorname{sgn}\!\COOL@decide@paren{Sign}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Number Theory Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\FactorInteger}
+% \begin{macro}{\Factors}
+% Prime decomposition, |\Factors{n}|, $\Factors{n}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@FactorIntegerParen}{p}
+ \DeclareMathOperator{\FactorIntegerSymb}{factors}
+\newcommand{\FactorInteger}[1]%
+ {\FactorIntegerSymb\!\COOL@decide@paren{FactorInteger}{#1}}
+\newcommand{\Factors}[1]{\FactorInteger{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Divisors}
+% Divisors, |\Divisors{n}|, $\Divisors{n}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DivisorsParen}{p}
+ \DeclareMathOperator{\DivisorsSymb}{divisors}
+\newcommand{\Divisors}[1]%
+ {\mathord{\DivisorsSymb}\!\COOL@decide@paren{Divisors}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Prime}
+% The $n$th Prime, |\Prime{n}|, $\Prime{n}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PrimeParen}{p}
+ \DeclareMathOperator{\PrimeSymb}{prime}
+\newcommand{\Prime}[1]%
+ {\mathord{\PrimeSymb}\!\COOL@decide@paren{Prime}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PrimePi}
+% Prime counting function, |\PrimePi{x}|, $\PrimePi{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@PrimePiParen}{p}
+\newcommand{\PrimePi}[1]{\pi\!\COOL@decide@paren{PrimePi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DivisorSigma}
+% Sum of divisor powers, |\DivisorSigma{k}{n}|, $\DivisorSigma{k}{n}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DivisorSigmaParen}{p}
+\newcommand{\DivisorSigma}[2]%
+ {\sigma_{#1}\!\COOL@decide@paren{DivisorSigma}{#2}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EulerPhi}
+% Euler Totient Function, |\EulerPhi{x}|, $\EulerPhi{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@EulerPhiParen}{p}
+\newcommand{\EulerPhi}[1]{\varphi\!\COOL@decide@paren{EulerPhi}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\MoebiusMu}
+% Moebius Function, |\MoebiusMu{x}|, $\MoebiusMu{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@MoebiusMuParen}{p}
+\newcommand{\MoebiusMu}[1]{\mu\!\COOL@decide@paren{MoebiusMu}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\JacobiSymbol}
+% Jacobi Symbol, |\JacobiSymbol{n}{m}|, $\JacobiSymbol{n}{m}$
+% \begin{macrocode}
+\newcommand{\JacobiSymbol}[2]{\inp{\frac{#1}{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CarmichaelLambda}
+% Carmichael Lambda Function, |\CarmichaelLambda{x}|, $\CarmichaelLambda{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@CarmichaelLambdaParen}{p}
+\newcommand{\CarmichaelLambda}[1]%
+ {\lambda\!\COOL@decide@paren{CarmichaelLambda}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DigitCount}
+% Count the digits of an integer n for a given base b
+%
+% \begin{tabular}{c}
+% |\DigitCount{n}{b}| \\
+% $\DigitCount{n}{b}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\DigitCount}[2]{%
+\isint{#2}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \{%
+ \setcounter{COOL@ct@}{#2}%
+ \addtocounter{COOL@ct@}{-1}%
+ \forLoop{1}{\arabic{COOL@ct@}}{COOL@ct}%
+ {%
+ s^{\arabic{COOL@ct}}_{#2}\!\inp{#1},
+ }%
+ s^{\inp{0}}_{#2}\!\inp{#1}%
+ \}%
+ }%
+% else
+ {%
+ \{%
+ s^{\inp{1}}_{#2}\!\inp{#1},%
+ s^{\inp{2}}_{#2}\!\inp{#1},%
+ \ldots,%
+ s^{\inp{#2} - 1}_{#2}\!\inp{#1},%
+ s^{\inp{0}}_{#2}\!\inp{#1}%
+ \}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Generalized Functions}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\DiracDelta}
+% Dirac Delta Function, |\DiracDelta{x}|, $\DiracDelta{x}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DiracDeltaParen}{p}
+\newcommand{\DiracDelta}[1]{\delta\!\COOL@decide@paren{DiracDelta}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\HeavisideStep}
+% \begin{macro}{\UnitStep}
+% Heaviside Step Function
+%
+% \begin{tabular}{ll}
+% |\HeavisideStep{x}| & $\HeavisideStep{x}$ \\
+% |\UnitStep{x}| & $\UnitStep{x}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@HeavisideStepParen}{p}
+\newcommand{\HeavisideStep}[1]%
+ {\theta\!\COOL@decide@paren{HeavisideStep}{#1}}
+\newcommand{\UnitStep}[1]{\HeavisideStep{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Calculus}
+% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\COOL@notation@DDisplayFunc}
+% \begin{macro}{\COOL@notation@DShorten}
+% Both |\D| and |\pderiv| are controlled by these keys.
+%
+% |DDisplayFunc| controls how the function is displayed, it can take the values:
+%
+% \begin{tabular}{ll}
+% inset & Display as $\frac{d f}{d x}$ \\
+% outset & Display as $\frac{d}{d x} f$
+% \end{tabular}
+%
+% |DShorten| is for multiple derivatives. it can take the values
+%
+% \begin{tabular}{ll}
+% true & force derivatives to be consolidated, as in $\frac{d^2}{dx dy} f$ \\
+% false & expand derivatives as in $\frac{d}{dx} \frac{d}{dx} f$
+% \end{tabular}
+%
+% \begin{macrocode}
+ \newcounter{COOL@multideriv}
+ \newcommand{\COOL@notation@DDisplayFunc}{inset}
+ \newcommand{\COOL@notation@DShorten}{true}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\COOL@derivative}
+% Both |\D| and |pderiv| have the same basic operation, so a macro is defined that does the internals
+%
+% |\COOL@derivative{|\meta{derivative power(s)}|}{|\meta{function}|}{|\meta{wrt}|}{|\meta{symbol}|}|
+%
+% \meta{wrt} is a comma separated list of length $\ge$ 1.
+%
+% \meta{symbol} is passed by |\D| or |\pderiv| and is `d' or `$\partial$' respectively
+%
+% \begin{tabular}{ll}
+% |\COOL@derivative{2,3}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,3}{f}{x,y,z}{d}$
+% \makeatother
+% \vspace{.15cm}
+% \\
+% |\COOL@derivative{2,3,4,5}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,3,4,5}{f}{x,y,z}{d}$
+% \makeatother
+% \vspace{.15cm}
+% \\
+% |\COOL@derivative{2,n,1}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,n,1}{f}{x,y,z}{d}$
+% \makeatother
+% \vspace{.15cm}
+% \\
+% |\COOL@derivative{2,n}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,n}{f}{x,y,z}{d}$
+% \makeatother
+% \\
+% \\
+% |\Style{DDisplayFunc=outset}| \Style{DDisplayFunc=outset}
+% \\
+% |\COOL@derivative{2,n}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,n}{f}{x,y,z}{d}$
+% \makeatother
+% \\
+% \\
+% |\Style{DShorten=false,DDisplayFunc=inset}| \Style{DShorten=false}\Style{DDisplayFunc=inset}
+% \\
+% |\COOL@derivative{2,n}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,n}{f}{x,y,z}{d}$
+% \makeatother
+% \vspace{.15cm}
+% \\
+% |\COOL@derivative{2,3,4,5}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,3,4,5}{f}{x,y,z}{d}$
+% \makeatother
+% \\
+% \\
+% |\Style{DShorten=false,DDisplayFunc=outset}| \Style{DShorten=false}\Style{DDisplayFunc=outset}
+% \\
+% |\COOL@derivative{2,n}{f}{x,y,z}{d}| & \makeatletter
+% $\COOL@derivative{2,n}{f}{x,y,z}{d}$
+% \makeatother
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\COOL@derivative}[4]{%
+% \end{macrocode}
+% Get the length of \meta{wrt} argument.
+% |\listval{#3}{0}| gives the length of the list since lists begin indexing at 1.
+% \begin{macrocode}
+\listval{#3}{0}%
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}%
+% \end{macrocode}
+% Store the \meta{wrt} list and get the length of \meta{derivative power(s)}.
+% \begin{macrocode}
+\liststore{#3}{COOL@deriv@wrt@}%
+\listval{#1}{0}%
+\setcounter{COOL@ct}{\value{COOL@listpointer}}%
+\ifthenelse{\value{COOL@ct}>\value{COOL@listlen}}%
+ {\setcounter{COOL@ct}{\value{COOL@listlen}}}{}%
+\liststore{#1}{COOL@deriv@powers@}%
+% \end{macrocode}
+% Check to see if all of the powers are integers---if they are, then we may sum them in the usual sense
+% \begin{macrocode}
+\isint{\COOL@deriv@powers@i}%
+\setcounter{COOL@multideriv}{2}%
+\whiledo{ \boolean{COOL@isint} \AND
+ \NOT \value{COOL@multideriv}>\value{COOL@ct} }%
+ {%
+ \def\COOL@tempd%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \isint{\COOL@tempd}%
+ \stepcounter{COOL@multideriv}%
+ }%
+% \end{macrocode}
+% If the length of \meta{derivative power(s)} is less than the length of \meta{wrt}, then we assume that
+% the last value applies to \emph{all} the remaining derivatives.
+%
+%^^A ==================================================================================================================
+%^^A ============================================ BEGIN SHORTEN AND INSET =============================================
+%^^A ==================================================================================================================
+% \begin{macrocode}
+\ifthenelse{ \equal{\COOL@notation@DShorten}{true} \AND
+ \equal{\COOL@notation@DDisplayFunc}{inset} }%
+ {%
+ \ifthenelse{ \boolean{COOL@isint} }%
+ {%
+ \def\COOL@temp@D@bot{}%
+ \setcounter{COOL@ct@}{0}%
+ \forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \addtocounter{COOL@ct@}{\COOL@power@temp}%
+ \ifthenelse{ \value{COOL@multideriv}=1 }{}%
+ {\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \stepcounter{COOL@ct}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+ {%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \addtocounter{COOL@ct@}{\COOL@power@temp}%
+ \ifthenelse{ \value{COOL@multideriv}=1 }{}%
+ {\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+ }%
+ % Else
+ {}%
+ \ifthenelse{\value{COOL@ct@}=1}%
+ {%
+ \frac{#4 #2}{\COOL@temp@D@bot}%
+ }%
+ % Else
+ {%
+ \frac{#4^{\arabic{COOL@ct@}} #2}{\COOL@temp@D@bot}%
+ }%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+% Powers are not all Integers
+% \begin{macrocode}
+ \edef\COOL@temp@D@bot{}%
+ \def\COOL@temp@D@top@power{}%
+ \forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \value{COOL@multideriv} = 1}%
+ {%
+ \edef\COOL@temp@D@top@power{\COOL@power@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top@power%
+ {\COOL@temp@D@top@power + \COOL@power@temp}%
+ \edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+ }%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \stepcounter{COOL@ct}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+ {%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \value{COOL@multideriv} = 1}%
+ {%
+ \edef\COOL@temp@D@top@power{\COOL@power@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top@power%
+ {\COOL@temp@D@top@power + \COOL@power@temp}%
+ \edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+ }%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+ }%
+ % Else
+ {}%
+ \frac{#4^{\COOL@temp@D@top@power} #2}{\COOL@temp@D@bot}%
+ }%
+ }%
+% \end{macrocode}
+%^^A ==================================================================================================================
+%^^A ============================================= END SHORTEN AND INSET ==============================================
+%^^A ==================================================================================================================
+%
+%^^A ==================================================================================================================
+%^^A ============================================ BEGIN SHORTEN AND OUTSET ============================================
+%^^A ==================================================================================================================
+% \begin{macrocode}
+% Else If
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{true} \AND
+ \equal{\COOL@notation@DDisplayFunc}{outset} }%
+ {%
+ \ifthenelse{ \boolean{COOL@isint} }%
+ {%
+ \def\COOL@temp@D@bot{}%
+ \setcounter{COOL@ct@}{0}%
+ \forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \addtocounter{COOL@ct@}{\COOL@power@temp}%
+ \ifthenelse{ \value{COOL@multideriv}=1 }{}%
+ {\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \stepcounter{COOL@ct}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+ {%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \addtocounter{COOL@ct@}{\COOL@power@temp}%
+ \ifthenelse{ \value{COOL@multideriv}=1 }{}%
+ {\edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+ }%
+ % Else
+ {}%
+ \ifthenelse{\value{COOL@ct@}=1}%
+ {%
+ \frac{#4}{\COOL@temp@D@bot} #2%
+ }%
+ % Else
+ {%
+ \frac{#4^{\arabic{COOL@ct@}}}{\COOL@temp@D@bot} #2%
+ }%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+% Powers are not all Integers
+% \begin{macrocode}
+ \edef\COOL@temp@D@bot{}%
+ \def\COOL@temp@D@top@power{}%
+ \forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \value{COOL@multideriv} = 1}%
+ {%
+ \edef\COOL@temp@D@top@power{\COOL@power@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top@power%
+ {\COOL@temp@D@top@power + \COOL@power@temp}%
+ \edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+ }%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \stepcounter{COOL@ct}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+ {%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \value{COOL@multideriv} = 1}%
+ {%
+ \edef\COOL@temp@D@top@power{\COOL@power@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top@power%
+ {\COOL@temp@D@top@power + \COOL@power@temp}%
+ \edef\COOL@temp@D@bot{\COOL@temp@D@bot \,}%
+ }%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@bot%
+ {\COOL@temp@D@bot #4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ }%
+ }%
+ % Else
+ {}%
+ \frac{#4^{\COOL@temp@D@top@power} }{\COOL@temp@D@bot} #2%
+ }%
+ }%
+% \end{macrocode}
+%^^A ==================================================================================================================
+%^^A ============================================= END SHORTEN AND OUTSET =============================================
+%^^A ==================================================================================================================
+%
+%^^A ==================================================================================================================
+%^^A =========================================== BEGIN NO SHORTEN AND INSET ===========================================
+%^^A ==================================================================================================================
+% \begin{macrocode}
+% Else If
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{false} \AND
+ \equal{\COOL@notation@DDisplayFunc}{inset} }%
+ {%
+ \def\COOL@temp@D@result{}%
+ \def\COOL@temp@D@bot{}%
+ \def\COOL@temp@D@top{}%
+ \setcounter{COOL@ct@}{\value{COOL@ct}}%
+ \addtocounter{COOL@ct@}{-1}
+ \forLoop{1}{\value{COOL@ct@}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+% \end{macrocode}
+% Must pick up the one for |\value{COOL@ct}|
+% \begin{macrocode}
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@ct}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+% \end{macrocode}
+% Now add the ones beyond
+% \begin{macrocode}
+ \stepcounter{COOL@ct}%
+ \setcounter{COOL@ct@}{\value{COOL@listlen}}%
+ \addtocounter{COOL@ct@}{-1}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@ct@}}{COOL@multideriv}%
+ {%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+ }%
+% \end{macrocode}
+% Must pick up the one for |\value{COOL@listlen}|
+% \begin{macrocode}
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@listlen}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top #2}{\COOL@temp@D@bot}}%
+ }%
+ % Else
+ {%
+% \end{macrocode}
+% Must pick up the one for |\value{COOL@ct}|
+% \begin{macrocode}
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@ct}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top #2}{\COOL@temp@D@bot}}%
+ }%
+ \COOL@temp@D@result%
+ }%
+% \end{macrocode}
+%^^A ==================================================================================================================
+%^^A ============================================ END NO SHORTEN AND INSET ============================================
+%^^A ==================================================================================================================
+%
+%^^A ==================================================================================================================
+%^^A =========================================== BEGIN NO SHORTEN AND OUTSET ==========================================
+%^^A ==================================================================================================================
+% \begin{macrocode}
+% Else If
+{ \ifthenelse{ \equal{\COOL@notation@DShorten}{false} \AND
+ \equal{\COOL@notation@DDisplayFunc}{outset} }%
+ {%
+ \def\COOL@temp@D@result{}%
+ \def\COOL@temp@D@bot{}%
+ \def\COOL@temp@D@top{}%
+ \forLoop{1}{\value{COOL@ct}}{COOL@multideriv}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@multideriv}\endcsname}%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+ }%
+% \end{macrocode}
+% we're done with the length of the \meta{derivative power(s)} argument, and we want to start at it $+ \; 1$
+% to add the remainders
+% \begin{macrocode}
+ \ifthenelse{\value{COOL@ct}<\value{COOL@listlen}}%
+ {%
+ \edef\COOL@power@temp%
+ {\csname COOL@deriv@powers@\roman{COOL@ct}\endcsname}%
+ \stepcounter{COOL@ct}%
+ \forLoop{\value{COOL@ct}}{\value{COOL@listlen}}{COOL@multideriv}%
+ {%
+ \edef\COOL@wrt@temp%
+ {\csname COOL@deriv@wrt@\roman{COOL@multideriv}\endcsname}%
+ \ifthenelse{ \equal{\COOL@power@temp}{1} }%
+ {%
+ \edef\COOL@temp@D@top{#4}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp}%
+ }%
+ % Else
+ {%
+ \edef\COOL@temp@D@top{#4^\COOL@power@temp}%
+ \edef\COOL@temp@D@bot{#4 \COOL@wrt@temp^\COOL@power@temp}%
+ }%
+ \edef\COOL@temp@D@result%
+ {\COOL@temp@D@result \frac{\COOL@temp@D@top}{\COOL@temp@D@bot}}%
+ }%
+ }%
+ % Else
+ {%
+ }%
+ \COOL@temp@D@result #2
+ }%
+% \end{macrocode}
+%^^A ==================================================================================================================
+%^^A ============================================ END NO SHORTEN AND OUTSET ===========================================
+%^^A ==================================================================================================================
+% \begin{macrocode}
+% Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {DShorten can only be `true' or `false';%
+ DDisplayFunc can only be `inset' or `outset'}%
+ }%
+}}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\D}
+% \begin{macro}{\pderiv}
+% Derivatives
+%
+% \begin{tabular}{ll}
+% |\D{f}{x}| & \vspace{0.15cm}$\D{f}{x}$ \\
+% |\D[n]{f}{x}| & \vspace{0.15cm}$\D[n]{f}{x}$ \\
+% |\D{f}{x,y,z}| & \vspace{0.15cm}$\D{f}{x,y,z}$ \\
+% |\D[1,2,1]{f}{x,y,z}| & \vspace{0.15cm}$\D[1,2,1]{f}{x,y,z}$ \\
+% |\pderiv{f}{x}| & \vspace{0.15cm}$\pderiv{f}{x}$ \\
+% |\pderiv[n]{f}{x}| & \vspace{0.15cm}$\pderiv[n]{f}{x}$ \\
+% |\pderiv{f}{x,y,z}| & \vspace{0.15cm}$\pderiv{f}{x,y,z}$ \\
+% |\pderiv[1,2,1]{f}{x,y,z}| & \vspace{0.15cm}$\pderiv[1,2,1]{f}{x,y,z}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\D}[3][1]{\COOL@derivative{#1}{#2}{#3}{d}}
+\newcommand{\pderiv}[3][1]{\COOL@derivative{#1}{#2}{#3}{\partial}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\Integrate}
+% \begin{macro}{\Int}
+% Integrate
+%
+% This has the option |IntegrateDisplayFunc| which can be |inset| or |outset|:
+%
+% \begin{tabular}{c}
+% |\Style{IntegrateDisplayFunc=inset}| (Default)%
+% \Style{IntegrateDisplayFunc=inset}
+% \\
+% \begin{tabular}{ll}
+% |\Integrate{f}{x}| & \vspace{0.15cm}$\Integrate{f}{x}$ \\
+% |\Int{f}{x}| & \vspace{0.15cm}$\Int{f}{x}$ \\
+% |\Integrate{f}{x,A}| & \vspace{0.15cm}$\Integrate{f}{x,A}$ \\
+% |\Int{f}{x,A}| & \vspace{0.15cm}$\Int{f}{x,A}$ \\
+% |\Integrate{f}{x,a,b}| & \vspace{0.15cm}$\Integrate{f}{x,a,b}$ \\
+% |\Int{f}{x,a,b}| & \vspace{0.15cm}$\Int{f}{x,a,b}$ \\
+% \end{tabular}
+% \\
+% \\
+% |\Style{IntegrateDisplayFunc=outset}|%
+% \Style{IntegrateDisplayFunc=outset}
+% \\
+% \begin{tabular}{ll}
+% |\Integrate{f}{x}| & \vspace{0.15cm}$\Integrate{f}{x}$ \\
+% |\Int{f}{x}| & \vspace{0.15cm}$\Int{f}{x}$ \\
+% |\Integrate{f}{x,A}| & \vspace{0.15cm}$\Integrate{f}{x,A}$ \\
+% |\Int{f}{x,A}| & \vspace{0.15cm}$\Int{f}{x,A}$ \\
+% |\Integrate{f}{x,a,b}| & \vspace{0.15cm}$\Integrate{f}{x,a,b}$ \\
+% |\Int{f}{x,a,b}| & \vspace{0.15cm}$\Int{f}{x,a,b}$ \\
+% \end{tabular}
+% \Style{IntegrateDisplayFunc=inset}
+% \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@IntegrateDisplayFunc}{inset}
+\newcommand{\Integrate}[2]{%
+\listval{#2}{0}%
+% \end{macrocode}
+% record the length of the list
+% \begin{macrocode}
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}%
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+ {%
+ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+ {%
+ \int \! d#2 \, #1%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+ {%
+ \int #1 \, d#2%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {`DisplayFunc' can only be `inset' or `outset'}%
+ }}%
+ }%
+% ElseIf
+{ \ifthenelse{ \value{COOL@listlen} = 2 }%
+ {%
+ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+ {%
+ \int_{\listval{#2}{2}} \! d{\listval{#2}{1}} \, #1%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+ {%
+ \int_{\listval{#2}{2}} #1 \, d{\listval{#2}{1}}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {`DisplayFunc' can only be `inset' or `outset'}%
+ }}%
+ }%
+% ElseIf
+{ \ifthenelse{ \value{COOL@listlen} = 3 }%
+ {%
+ \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{outset}}%
+ {%
+ \int_{\listval{#2}{2}}^{\listval{#2}{3}} \! d{\listval{#2}{1}} \, #1%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IntegrateDisplayFunc}{inset}}%
+ {%
+ \int_{\listval{#2}{2}}^{\listval{#2}{3}} #1 \, d{\listval{#2}{1}}%
+ }%
+ % Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {`DisplayFunc' can only be `inset' or `outset'}%
+ }}%
+ }%
+% Else
+ {%
+ \PackageError{cool}{`Integrate' has invalid parameter list}%
+ {this happens when the second argument has more than two commas}%
+ }}}%
+}%
+\newcommand{\Int}[2]{\Integrate{#1}{#2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\Sum}
+% Sum
+%
+% \begin{tabular}{ll}
+% |\Sum{a_n}{n}| & \vspace{0.1cm}$\Sum{a_n}{n}$ \\
+% |\Sum{a_n}{n,1,N}| & \vspace{0.1cm}$\Sum{a_n}{n,1,N}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\Sum}[2]{%
+\listval{#2}{0}%
+% \end{macrocode}
+% record the length of the list
+% \begin{macrocode}
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+ {%
+ \sum_{#2} #1%
+ }%
+% else
+ {%
+ \ifthenelse{ \value{COOL@listlen} = 3 }%
+ {%
+ \sum_{ \listval{#2}{1} = \listval{#2}{2} }^{ \listval{#2}{3} } #1
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid list length for `Sum'}%
+ {can only have none or two commas for second argument}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Prod}
+% Product
+%
+% \begin{tabular}{ll}
+% |\Prod{a_n}{n}| & \vspace{0.1cm}$\Prod{a_n}{n}$ \\
+% |\Prod{a_n}{n,1,N}| & \vspace{0.1cm}$\Prod{a_n}{n,1,N}$ \\
+% \end{tabular}
+% \begin{macrocode}
+\newcommand{\Prod}[2]{%
+\listval{#2}{0}%
+% \end{macrocode}
+% record the length of the list
+% \begin{macrocode}
+\setcounter{COOL@listlen}{\value{COOL@listpointer}}
+\ifthenelse{ \value{COOL@listlen} = 1 }%
+ {%
+ \prod_{#2} #1%
+ }%
+% else
+ {%
+ \ifthenelse{ \value{COOL@listlen} = 3 }%
+ {%
+ \prod_{ \listval{#2}{1} = \listval{#2}{2} }^{ \listval{#2}{3} } #1
+ }%
+ % else
+ {%
+ \PackageError{cool}{Invalid list length for `Prod'}%
+ {can only have none or two commas for second argument}%
+ }%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Vector Operators}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\DotProduct}
+% The dot product, |\DotProduct{\vec{A}}{\vec{B}}|, $\DotProduct{\vec{A}}{\vec{B}}$
+% \begin{macrocode}
+\newcommand{\DotProduct}[2]{#1 \cdot #2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Cross}
+% The cross product, |\Cross{\vec{A}}{\vec{B}}|, $\Cross{\vec{A}}{\vec{B}}$
+% \begin{macrocode}
+\newcommand{\Cross}[2]{#1 \times #2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Div}
+% the divergence, |\Div{\vec{A}}|, $\Div{\vec{A}}$
+% \begin{macrocode}
+\newcommand{\Div}[1]{\nabla \cdot #1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Grad}
+% The gradient, |\Grad{f}|, $\Grad{f}$
+% \begin{macrocode}
+\newcommand{\Grad}[1]{\nabla #1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Curl}
+% The curl, |\Curl{\vec{A}}|, $\Curl{\vec{A}}$
+% \begin{macrocode}
+\newcommand{\Curl}[1]{\nabla \times #1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Laplacian}
+% The laplacian, |\Laplacian{f}|, $\Laplacian{f}$
+% \begin{macrocode}
+\newcommand{\Laplacian}[1]{\nabla^2 #1}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Matrix Operations}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\Transpose}
+% Transpose of a matrix, |\Transpose{A}|, $\Transpose{A}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@TransposeParen}{inv}
+\newcommand{\Transpose}[1]{ \COOL@decide@paren{Transpose}{#1}^T }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Dagger}
+% Conjugate Transpose of a matrix, |\Dagger{A}|, $\Dagger{A}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DaggerParen}{inv}
+\newcommand{\Dagger}[1]{ \COOL@decide@paren{Dagger}{#1}^\dagger }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Det}
+% determinant of a matrix
+%
+% \begin{tabular}{ll}
+% |\Style{DetDisplay=det}|%
+% \Style{DetDisplay=det} (Default) \\
+% |\Det{A}| & $\Det{A}$ \\
+% |\Style{DetDisplay=barenc}|%
+% \Style{DetDisplay=barenc} \\
+% |\Det{A}| & $\Det{A}$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@DetParen}{none}
+ \newcommand{\COOL@notation@DetDisplay}{det}
+\newcommand{\Det}[1]{%
+\ifthenelse{\equal{\COOL@notation@DetDisplay}{det}}%
+ {%
+ \det\COOL@decide@paren{Det}{#1}%
+ }%
+% ElseIf
+{ \ifthenelse{\equal{\COOL@notation@DetDisplay}{barenc}}%
+ {%
+ \left|#1\right|%
+ }%
+% Else
+ {%
+ \PackageError{cool}{Invalid Option Sent}%
+ {`DetDisplay' can only be `det' or `barenc'}%
+ }}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Tr}
+% Trace of a Matrix, |\Tr{A}|, $\Tr{A}$
+% \begin{macrocode}
+ \newcommand{\COOL@notation@TrParen}{none}
+\newcommand{\Tr}[2][]{%
+\ifthenelse{\equal{#1}{}}
+ {%
+ \operatorname{Tr}\COOL@decide@paren{Tr}{#2}%
+ }%
+% Else
+ {%
+ \operatorname{Tr}_{#1}\COOL@decide@paren{Tr}{#2}%
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% \subsubsection{Matricies}
+% % %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %% %
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \begin{macro}{\IdentityMatrix}
+% The Identity Matrix
+%
+% \begin{tabular}{cc}
+% |\IdentityMatrix| & $\IdentityMatrix$ \\
+% |\IdentityMatrix[2]| & $\IdentityMatrix[2]$ \\
+% \end{tabular}
+% \begin{macrocode}
+ \newcommand{\COOL@notation@IdentityMatrixParen}{p}
+ \newcounter{COOL@row}%
+ \newcounter{COOL@col}%
+\newcommand{\IdentityMatrix}[1][0]{%
+\isint{#1}%
+\ifthenelse{\boolean{COOL@isint}}%
+ {%
+ \ifthenelse{ #1=0 }%
+ {%
+ \mathbb{I}%
+ }%
+ % Else
+ {%
+ \setcounter{COOL@ct}{\value{MaxMatrixCols}}%
+ \setcounter{MaxMatrixCols}{#1}%
+ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{p}}%
+ {%
+ \begin{pmatrix}%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{b}}%
+ {%
+ \begin{bmatrix}%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{br}}%
+ {%
+ \begin{Bmatrix}%
+ }%
+ % Else
+ {%
+ \begin{matrix}%
+ }}}%
+ \forLoop{1}{#1}{COOL@row}%
+ {%
+ \ifthenelse{\NOT \value{COOL@row} = 1}{\\}{}%
+ \forLoop{1}{#1}{COOL@col}%
+ {%
+ \ifthenelse{ \NOT \value{COOL@col} = 1 }{&}{}%
+ \ifthenelse{ \value{COOL@row}=\value{COOL@col} }{1}{0}%
+ }%
+ }%
+ \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{p}}%
+ {%
+ \end{pmatrix}%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{b}}%
+ {%
+ \end{bmatrix}%
+ }%
+ % ElseIf
+ { \ifthenelse{\equal{\COOL@notation@IdentityMatrixParen}{br}}%
+ {%
+ \end{Bmatrix}%
+ }%
+ % Else
+ {%
+ \end{matrix}%
+ }}}%
+ \setcounter{MaxMatrixCols}{\value{COOL@ct}}%
+ }%
+ }%
+% Else
+ {%
+ \mathbb{I}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/cool/cool.ins b/Master/texmf-dist/source/latex/cool/cool.ins
new file mode 100644
index 00000000000..0f41b595606
--- /dev/null
+++ b/Master/texmf-dist/source/latex/cool/cool.ins
@@ -0,0 +1,40 @@
+%%
+%% Copyright (C) 2005 by nsetzer
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the Lesser General Product License
+%%
+
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{texmf/tex/latex/cool}
+
+\preamble
+
+This is a generated file
+
+This file may be distributed and/or modified under the
+conditions of the Limited General Product License
+
+\endpreamble
+
+
+\generate{\file{cool.sty}{\from{cool.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* cool.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* cool.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile \ No newline at end of file