diff options
author | Karl Berry <karl@freefriends.org> | 2006-09-25 23:46:58 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-09-25 23:46:58 +0000 |
commit | d4f96dc70d6aad918f541123e66589a2e44e18f1 (patch) | |
tree | bc933bc54a70e3ab4cf699a6c2d778b062287d16 /Master/texmf-dist/source/latex/cool | |
parent | 66d540bf33713d5f36291b9e7c8a8f8039aebdb4 (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.dtx | 5787 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/cool/cool.ins | 40 |
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 |