summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorNorbert Preining <preining@logic.at>2013-05-27 01:22:20 +0000
committerNorbert Preining <preining@logic.at>2013-05-27 01:22:20 +0000
commit607ddea4532c7768b2e2b44bd602fae2c98b9456 (patch)
tree6660587ab0926889411ecca7655bdcf0acda42c8 /Master
parentbddefbf234bbe8889456b2e1b09cce68cf590891 (diff)
skmath 5/27
git-svn-id: svn://tug.org/texlive/trunk@30698 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/skmath/README36
-rw-r--r--Master/texmf-dist/doc/latex/skmath/skmath.pdfbin219146 -> 220603 bytes
-rw-r--r--Master/texmf-dist/doc/latex/skmath/skmath.tex485
-rw-r--r--Master/texmf-dist/source/latex/skmath/skmath.tex782
-rw-r--r--Master/texmf-dist/tex/latex/skmath/skmath.sty237
5 files changed, 1004 insertions, 536 deletions
diff --git a/Master/texmf-dist/doc/latex/skmath/README b/Master/texmf-dist/doc/latex/skmath/README
new file mode 100644
index 00000000000..5055637e744
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/skmath/README
@@ -0,0 +1,36 @@
+%% skmath improved math commands
+%%
+%% Copyright (C) 2012-2013 by Simon Sigurdhsson <sigurdhsson@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Simon Sigurdhsson.
+%%
+%% This work consists of the file skmath.tex
+%% and the derived file skmath.sty.
+
+This is version 0.3 of the skmath package, a package which provides
+improved and new math commands for superior typesetting with lower effort.
+
+The following files are enclosed.
+
+ README - This file
+ Makefile - GNU Makefile for making the package and documentation
+ skmath.tex - LaTeX source code of the package and documentation
+ skmath.pdf - PDF version of the documentation
+
+Installation notes:
+The easiest way to install this package, assuming you have obtained the
+source code from Github or CTAN, is to simply run `make install`. This
+will generate package code and documentation, install it into TEXMFHOME
+and run `mktexlsr`. If you wish to compile the package but not install
+it, run `make all` instead. If you insist on doing it manually, remember
+that you must use `pdflatex` (not `tex` or `latex`).
diff --git a/Master/texmf-dist/doc/latex/skmath/skmath.pdf b/Master/texmf-dist/doc/latex/skmath/skmath.pdf
index 1ff3ab254b7..9516b821d8c 100644
--- a/Master/texmf-dist/doc/latex/skmath/skmath.pdf
+++ b/Master/texmf-dist/doc/latex/skmath/skmath.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/skmath/skmath.tex b/Master/texmf-dist/doc/latex/skmath/skmath.tex
deleted file mode 100644
index 46cc2d20d81..00000000000
--- a/Master/texmf-dist/doc/latex/skmath/skmath.tex
+++ /dev/null
@@ -1,485 +0,0 @@
-%% skmath improved math commands
-%%
-%% Copyright (C) 2012 by Simon Sigurdhsson <sigurdhsson@gmail.com>
-%%
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Maintainer of this work is Simon Sigurdhsson.
-%%
-%% This work consists of the file skmath.tex
-%% and the derived file skmath.sty.
-\PassOptionsToPackage{intlimits}{amsmath}
-\documentclass[commonsets,load]{skdoc}
-\usepackage[intlimits]{amsmath}
-\usepackage{csquotes}
-\ProvideDocumentCommand\d{m}{#1}
-\ProvideDocumentCommand\abs{m}{#1}
-\ProvideDocumentCommand\norm{m}{#1}
-\ProvideDocumentCommand\abs{m}{#1}
-\ProvideDocumentCommand\P{m}{#1}
-\ProvideDocumentCommand\given{}{}
-\ProvideDocumentCommand\E{m}{#1}
-\ProvideDocumentCommand\var{m}{#1}
-\ProvideDocumentCommand\cov{mm}{#1#2}
-\ProvideDocumentCommand\N{}{}
-\ProvideDocumentCommand\Z{}{}
-\ProvideDocumentCommand\Q{}{}
-\ProvideDocumentCommand\R{}{}
-\ProvideDocumentCommand\C{}{}
-\ProvideDocumentCommand\sfrac{mm}{#1#2}
-
-% Declare the target files
-\SelfPreambleTo{\mypreamble}
-\DeclareFile[key=package,preamble=\mypreamble]{skmath.sty}
-
-% This is where the documentation begins
-\begin{document}
- % Change & version info
- \version{0.1g}
- \changes{0.1}{Initial version}
- \changes{0.1c}{Moved package from \pkg{docstrip} to \pkg{skdoc}}
- \changes{0.1d}{Fixed fatal documentation and package errors}
- \changes{0.1e}{Added statistics commands}
- \changes{0.1g}{Documentation fixes}
-
- % Metadata
- \package[ctan=skbundle,vcs=https://github.com/urdh/skmath]{skmath}
- \author{Simon Sigurdhsson}
- \email{sigurdhsson@gmail.com}
-
- % First page
- \maketitle
- \begin{abstract}
- The \thepackage\ package provides improved and new math commands
- for superior typesetting with less effort.
- \end{abstract}
-
- \section{Introduction}
- This package intends to provide helpful (re-)definitions of commands
- related to typesetting mathematics, and specifically typesetting
- them in a more intuitive, less verbose and more beautiful way.
- It was originally not intended for use by the public, and as such
- there may be incompatibilities with other packages of which I am
- not aware, but I figured it could be useful to other people as well.
-
- \section{Usage}
- \subsection{Options}
- As of version \theversion, there is only one option: \opt{commonsets}.
- By default, it is disabled but if the option is given the package will
- define \cs{N}, \cs{Z}, \cs{Q}, \cs{R} and \cs{C} as blackboard
- variants of the respective letters, to represent the common sets
- of numbers.
-
- \subsection{New commands}
- The package defines a number of new commands that aid in typesetting
- certain mathematical formulae.
-
- \DescribeMacro\N
- \DescribeMacro\Z
- \DescribeMacro\Q
- \DescribeMacro\R
- \DescribeMacro\C
- These commands are only available if the \opt{commonsets}
- option is given. They typeset the set of natural, integer, rational,
- real and complex numbers respectively.
- \begin{example}
- \begin{equation*}
- \N, \Z, \Q, \R, \C.
- \end{equation*}
- \end{example}
-
- \DescribeMacro\norm{<expression>}
- \DescribeMacro\abs{<expression>}
- The commands \Macro\norm and \Macro\abs, quite expectedly, typeset
- the norm ans absolute value of an expression, respectively. They
- have one mandatory argument (the expression), and different norms
- can be achieved by appending a subscript after the argument of
- \Macro\norm.
- \begin{example}
- \begin{equation*}
- \norm{\vec{x}}_p = \left(\sum_{i=1}^n \abs{x_i}^p\right)^{\sfrac{1}{p}}
- \end{equation*}
- \end{example}
-
- \DescribeMacro\d{<variable>}
- There is also a command \Macro\d, with one mandatory argument, that
- typesets the differential part of an integral.
- \begin{example}
- \begin{equation*}
- \int_{\R}\! \frac{\sin{x}}{x} \d{x}
- \end{equation*}
- \end{example}
-
- \DescribeMacro\E{<expression>}
- The command \Macro\E typesets the expectation of a random variable.
- \begin{example}
- \begin{equation*}
- \E{\hat{\mu}} = \mu
- \end{equation*}
- \end{example}
-
- \DescribeMacro\P{<expression>\AlsoMacro\given <expression>}
- The \Macro\P command typesets a probability. The \Macro\given command
- can be used to typeset conditional probabilities, within \Macro\P.
- \begin{example}
- \begin{equation*}
- \P{A\given B} = \frac{\P{B\given A}\P{A}}{\P{B}}
- \end{equation*}
- \end{example}
-
- \DescribeMacro\var{<expression>}
- \DescribeMacro\cov{<expression>}{<expression>}
- The commands \Macro\var and \Macro\cov typeset the variance and
- covariance of an expression.
- \begin{example}
- \begin{gather*}
- \var{X} = \E{(X-\mu)^2}\\
- \cov{X}{Y} = \E{XY}-\E{X}\E{Y}
- \end{gather*}
- \end{example}
-
- \subsection{Improved commands}
- In addition to adding new commands, this package also redefines
- already existing commands in a mostly backwards-compatible way
- to improve their usefulness.
-
- \DescribeMacro\sin[<power>]{<expression>}
- \DescribeMacro\arcsin{<expression>}
- \DescribeMacro\cos[<power>]{<expression>}
- \DescribeMacro\arccos{<expression>}
- \DescribeMacro\tan[<power>]{<expression>}
- \DescribeMacro\arctan{<expression>}
- \DescribeMacro\cot[<power>]{<expression>}
- The trigonometric functions have been redefined
- to typeset more easily. They typeset \meta{expression} as an
- argument of the expression, and (if applicable) \meta{power} as
- a superscript between the function and its argument,
- \emph{e.g.} \(\sin[2]{\phi}\).
-
- \DescribeMacro\ln{<expression>}
- The natural logarithm macro \Macro\ln has also been redefined to
- require an argument which is typeset as the argument of the logarithm.
- \DescribeMacro\log[<base>]{<expression>}
- The related macro \Macro\log is redefined in a similar way, but also
- accepts an optional argument denoting the base of the logarithm:
- \(\log[2]{x}\).
-
- \DescribeMacro\exp{<expression>}
- The exponential, \Macro\exp, is redefined to typeset its argument as a
- superscript of \(e\) in some display styles, and as an argument of
- \(\mathrm{exp}\) otherwise:
- \begin{equation*}
- \exp{\sqrt{2}\exp{x}}
- \end{equation*}
-
- \subsection{Stylistic changes}
- Some commands have been redefined in a completely backwards-compatible
- way to improve the end result of their typesetting.
-
- \DescribeMacro\frac{<numerator>}{<denominator>}
- The \Macro\frac command has been changed to improve typesetting,
- allowing displaystyle math in some settings.
-
- \DescribeMacro\bar{<expression>}
- \DescribeMacro\vec{<expression>}
- The \Macro\bar command has been changed to cover the entire
- \meta{expression} (\emph{i.e.} \(\bar{uv}\)), and \Macro\vec has
- been changed to match the \cs{vectorsym} command provided by
- \pkg{isomath}.
-
- \section{Known issues}
- A list of current issues is available in the Github repository of this
- package\footnote{\url{https://github.com/urdh/skmath/issues}}, but as
- of the release of \theversion, there is only one known issue:
- \begin{description}
- \item[\#4] When using both \pkg{fontspec} and \thepackage, sometimes
- \LaTeX\ bails out saying that \enquote{\cs{bar} is already
- defined}. This is probably due to fonts defining their own
- \cs{bar}, and will happen with other font packages as well,
- but I haven't figured out a suitable solution yet.
- \end{description}
- If you discover any bugs in this package, please report them to the issue
- tracker in the \thepackage\ Github repository.
-
- \section{Implementation}
- The package implementation is very simple. First, we do the standard
- \LaTeXe\ preamble thing, then we require some dependencies.
- \changes{0.1b}{Load \textsf{amsmath} with \texttt{intlimits} option}
-\begin{MacroCode}{package}
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{skmath}%
- [2013/02/18 v0.1e skmath improved math commands]
-\RequirePackage{xparse}
-\PassOptionsToPackage{intlimits}{amsmath}
-\RequirePackage{kvoptions,amssymb,mathtools,xfrac,isomath}
-\end{MacroCode}
-
- We begin by declaring an option.
-\begin{MacroCode}{package}
-\SetupKeyvalOptions{family=skmath,prefix=skmath@}
-\DeclareBoolOption[false]{commonsets}
-\ProcessKeyvalOptions*
-\end{MacroCode}
-
- We optionally provide commands to typeset common sets.
-\begin{MacroCode}{package}
-\ifskmath@commonsets
-\end{MacroCode}
- \begin{macro}{\N}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
- \NewDocumentCommand\N{}{\ensuremath{\mathbb{N}}}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\Z}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
- \NewDocumentCommand\Z{}{\ensuremath{\mathbb{Z}}}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\Q}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
- \NewDocumentCommand\Q{}{\ensuremath{\mathbb{Q}}}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\R}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
- \NewDocumentCommand\R{}{\ensuremath{\mathbb{R}}}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\C}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
- \NewDocumentCommand\C{}{\ensuremath{\mathbb{C}}}
-\end{MacroCode}
- \end{macro}
-\begin{MacroCode}{package}
-\fi
-\end{MacroCode}
-
- This is followed by commands to typeset the norm and absolute value.
- \begin{macro}{\abs}
-\begin{MacroCode}{package}
-\DeclarePairedDelimiter\abs{\lvert}{\rvert}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\norm}
-\begin{MacroCode}{package}
-\DeclarePairedDelimiter\norm{\lVert}{\rVert}
-\end{MacroCode}
- \end{macro}
-
- Next come the statistical commands.
- \begin{macro}{\E}
- \changes{0.1e}{Added \cs{E} command}
- \changes{0.1f}{Fixed \enquote{Command \cs{E} already defined!} error}
- Here, we define \cs{E} after the preamble since it may break otherwise.
-\begin{MacroCode}{package}
-\AtBeginDocument{
- \DeclareDocumentCommand\E{m}{%
- \ensuremath{\mathop{\mathrm{E}}\left[#1\right]}%
- }
-}
-\end{MacroCode}
- \end{macro}
- The \Macro\P command saves any old \Macro\given command, replacing
- it locally with the new \Macro\given command provided by the package.
- \begin{macro}{\P}
- \changes{0.1e}{Added \cs{P} command}
-\begin{MacroCode}{package}
-\DeclareDocumentCommand\P{m}{%
- \ensuremath{\mathop{\mathrm{P}}%
- \left(%
- \let\skmath@given\given%
-\end{MacroCode}
- \begin{macro}{\given}
- \changes{0.1e}{Added \cs{given} command}
-\begin{MacroCode}{package}
- \DeclareDocumentCommand\given{}{\mid}%
-\end{MacroCode}
- \end{macro}
-\begin{MacroCode}{package}
- #1%
- \let\given\skmath@given%
- \right)%
- }%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\var}
- \changes{0.1e}{Added \cs{var} command}
-\begin{MacroCode}{package}
- \DeclareDocumentCommand\var{m}{%
- \ensuremath{\mathop{\mathrm{Var}}\left(#1\right)}%
- }
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\cov}
- \changes{0.1e}{Added \cs{cov} command}
-\begin{MacroCode}{package}
- \DeclareDocumentCommand\cov{mm}{%
- \ensuremath{\mathop{\mathrm{Cov}}\left(#1,#2\right)}%
- }
-\end{MacroCode}
- \end{macro}
-
- We replace all trigonometric functions and some other
- common functions with alternatives that take an argument
- (or optionally, several arguments).
-\begin{MacroCode}{package}
-\let\skmath@sin\sin
-\let\skmath@cos\cos
-\let\skmath@tan\tan
-\let\skmath@cot\cot
-\let\skmath@arcsin\arcsin
-\let\skmath@arccos\arccos
-\let\skmath@arccos\arctan
-\let\skmath@ln\log
-\let\skmath@log\log
-\let\skmath@exp\exp
-\end{MacroCode}
- \begin{macro}{\sin}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\sin{om}{%
- \IfNoValueTF{#1}
- {\ensuremath{\skmath@sin\left(#2\right)}}
- {\ensuremath{\skmath@sin^{#1}\left(#2\right)}}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\cos}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\cos{om}{%
- \IfNoValueTF{#1}
- {\ensuremath{\skmath@cos\left(#2\right)}}
- {\ensuremath{\skmath@cos^{#1}\left(#2\right)}}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\tan}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\tan{om}{%
- \IfNoValueTF{#1}
- {\ensuremath{\skmath@tan\left(#2\right)}}
- {\ensuremath{\skmath@tan^{#1}\left(#2\right)}}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\cot}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\cot{om}{%
- \IfNoValueTF{#1}
- {\ensuremath{\skmath@cot\left(#2\right)}}
- {\ensuremath{\skmath@cot^{#1}\left(#2\right)}}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\arcsin}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\arcsin{m}{%
- \ensuremath{\skmath@arcsin\left(#1\right)}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\arccos}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\arccos{m}{%
- \ensuremath{\skmath@arccos\left(#1\right)}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\arctan}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\arctan{m}{%
- \ensuremath{\skmath@arctan\left(#1\right)}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\ln}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\ln{m}{%
- \ensuremath{\skmath@ln\left(#1\right)}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\log}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\log{om}{%
- \IfNoValueTF{#1}
- {\ensuremath{\skmath@log\left(#2\right)}}
- {\ensuremath{\skmath@log_{#1}\left(#2\right)}}%
-}
-\end{MacroCode}
- \end{macro}
- \begin{macro}{\exp}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\exp{m}{\ensuremath{\mathchoice%
- {e^{#1}}%
- {\skmath@exp\left(#1\right)}%
- {\skmath@exp\left(#1\right)}%
- {\skmath@exp\left(#1\right)}%
-}}
-\end{MacroCode}
- \end{macro}
-
- The fraction command is modified to improve typesetting.
- \begin{macro}{\frac}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\frac{mm}{\genfrac{}{}{}{}%
- {\displaystyle #1}{\displaystyle #2}}
-\end{MacroCode}
- \end{macro}
-
- The \cs{bar} command is also modified to impove typesetting.
- \begin{macro}{\bar}
- \changes{0.1b}{Added \cs{bar} replacement}
-\begin{MacroCode}{package}
-\RenewDocumentCommand\bar{m}{%
- \ensuremath{\mkern 1.5mu\overline{\mkern-1.5mu{#1}\mkern-1.5mu}\mkern 1.5mu}}
-\end{MacroCode}
- \end{macro}
-
- We introduce a command to typeset the differential part
- of integrals, shamefully stolen from an answer on \TeX.SE.
- Definition is deferred until after all packages are loaded
- to avoid collisions with other \cs{d} commands.
-\begin{MacroCode}{package}
-\AtBeginDocument{%
-\end{MacroCode}
- \begin{macro}{\d}
- \changes{0.1a}{Fixed obtuse errors}
- \changes{0.1b}{Moved to \textsf{xparse} command definition}
-\begin{MacroCode}{package}
-\DeclareDocumentCommand\d{m}{\ensuremath{\,\mathrm{d}#1%
- \@ifnextchar\d{\!}{}}}
-\end{MacroCode}
- \end{macro}
-\begin{MacroCode}{package}
-}
-\end{MacroCode}
-
- Finally, we define a nicer way to denote vectors.
- \begin{macro}{\vec}
-\begin{MacroCode}{package}
-\let\vec\vectorsym
-\end{MacroCode}
- \end{macro}
-\begin{MacroCode}{package}
-\endinput
-\end{MacroCode}
-
- \PrintChanges
- \PrintIndex
-\end{document}
diff --git a/Master/texmf-dist/source/latex/skmath/skmath.tex b/Master/texmf-dist/source/latex/skmath/skmath.tex
new file mode 100644
index 00000000000..328f2d03fb5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/skmath/skmath.tex
@@ -0,0 +1,782 @@
+%% skmath improved math commands
+%%
+%% Copyright (C) 2012-2013 by Simon Sigurdhsson <sigurdhsson@gmail.com>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Simon Sigurdhsson.
+%%
+%% This work consists of the file skmath.tex
+%% and the derived file skmath.sty.
+\PassOptionsToPackage{intlimits,sumlimits,namelimits}{amsmath}
+\documentclass[commonsets,load]{skdoc}
+\usepackage{amsmath}
+\usepackage{csquotes}
+\ProvideDocumentCommand\d{m}{#1}
+\ProvideDocumentCommand\pd{smm}{#2#3}
+\ProvideDocumentCommand\abs{m}{#1}
+\ProvideDocumentCommand\norm{m}{#1}
+\ProvideDocumentCommand\abs{m}{#1}
+\ProvideDocumentCommand\P{m}{#1}
+\ProvideDocumentCommand\given{}{}
+\ProvideDocumentCommand\E{m}{#1}
+\ProvideDocumentCommand\var{m}{#1}
+\ProvideDocumentCommand\cov{mm}{#1#2}
+\ProvideDocumentCommand\N{}{}
+\ProvideDocumentCommand\Z{}{}
+\ProvideDocumentCommand\Q{}{}
+\ProvideDocumentCommand\R{}{}
+\ProvideDocumentCommand\C{}{}
+\ProvideDocumentCommand\sfrac{mm}{#1#2}
+\ProvideDocumentCommand\argmin{om}{#1}
+\ProvideDocumentCommand\argmax{om}{#1}
+
+% Declare the target files
+\SelfPreambleTo{\mypreamble}
+\DeclareFile[key=package,preamble=\mypreamble]{skmath.sty}
+
+% Hack for LaTeX3 code
+\ExplSyntaxOn
+\cs_set_protected_nopar:Npn\ExplHack{
+\char_set_catcode_letter:n{ 58 }
+\char_set_catcode_letter:n{ 95 } }
+\ExplSyntaxOff
+
+% This is where the documentation begins
+\begin{document}
+ % Change & version info
+ \version{0.3}
+ \changes{0.1}{Initial version}
+ \changes{0.1c}{Moved package from \pkg{docstrip} to \pkg{skdoc}}
+ \changes{0.1d}{Fixed fatal documentation and package errors}
+ \changes{0.1e}{Added statistics commands}
+ \changes{0.1g}{Documentation fixes}
+ \changes{0.2}{Use \pkg{expl3} functionality throughout the package}
+ \changes{0.3}{Added \cs{min}/\cs{max} and friends. Added \cs{pd}}
+
+ % Metadata
+ \package[ctan=skmath,vcs=https://github.com/urdh/skmath]{skmath}
+ \author{Simon Sigurdhsson}
+ \email{sigurdhsson@gmail.com}
+
+ % First page
+ \maketitle
+ \begin{abstract}
+ The \thepackage\ package provides improved and new math commands
+ for superior typesetting with less effort.
+ \end{abstract}
+
+ \section{Introduction}
+ This package intends to provide helpful (re-)definitions of commands
+ related to typesetting mathematics, and specifically typesetting
+ them in a more intuitive, less verbose and more beautiful way.
+ It was originally not intended for use by the public, and as such
+ there may be incompatibilities with other packages of which I am
+ not aware, but I figured it could be useful to other people as well.
+
+ \section{Usage}
+ \subsection{Options}
+ As of version \theversion, there is only one option: \opt{commonsets}.
+ By default, it is disabled but if the option is given the package will
+ define \cs{N}, \cs{Z}, \cs{Q}, \cs{R} and \cs{C} as blackboard
+ variants of the respective letters, to represent the common sets
+ of numbers.
+
+ \subsection{New commands}
+ The package defines a number of new commands that aid in typesetting
+ certain mathematical formulae.
+
+ \DescribeMacro\N
+ \DescribeMacro\Z
+ \DescribeMacro\Q
+ \DescribeMacro\R
+ \DescribeMacro\C
+ These commands are only available if the \opt{commonsets}
+ option is given. They typeset the set of natural, integer, rational,
+ real and complex numbers respectively.
+\begin{example}
+\begin{equation*}
+ \N, \Z, \Q, \R, \C.
+\end{equation*}
+\end{example}
+
+ \DescribeMacro\norm{<expression>}
+ \DescribeMacro\abs{<expression>}
+ The commands \Macro\norm and \Macro\abs, quite expectedly, typeset
+ the norm ans absolute value of an expression, respectively. They
+ have one mandatory argument (the expression), and different norms
+ can be achieved by appending a subscript after the argument of
+ \Macro\norm.
+\begin{example}
+\begin{equation*}
+ \norm{\vec{x}}_p =
+ \left(\sum_{i=1}^n \abs{x_i}^p\right)%
+ ^{\sfrac{1}{p}}
+\end{equation*}
+\end{example}
+
+ \DescribeMacro\d{<variable>}
+ There is also a command \Macro\d, with one mandatory argument, that
+ typesets the differential part of an integral.
+\begin{example}
+\begin{equation*}
+ \int_{\R}\! \frac{\sin{x}}{x} \d{x}
+\end{equation*}
+\end{example}
+
+ \DescribeMacro\pd*{<function>}{<var>,\meta{var},...}
+ This macro typesets a partial derivative. The starred variant typesets
+ derivatives as subscripts, i.e. \(\pd*{f}{x^2,y}\), while the unstarred
+ variant typesets full fractions:
+\begin{example}
+\begin{equation*}
+ \pd{f}{x^m,y^n}
+\end{equation*}
+\end{example}
+
+ As the example shows, the comma-separated list of variables also
+ supports superscripts to denote the number of derivatives, and the
+ sum of the variables is automatically calculated.
+
+ \DescribeMacro\E{<expression>}
+ The command \Macro\E typesets the expectation of a random variable.
+\begin{example}
+\begin{equation*}
+ \E{\hat{\mu}} = \mu
+\end{equation*}
+\end{example}
+
+ \DescribeMacro\P{<expression>\AlsoMacro\given <expression>}
+ The \Macro\P command typesets a probability. The \Macro\given command
+ can be used to typeset conditional probabilities, within \Macro\P.
+\begin{example}
+\begin{equation*}
+ \P{A\given B} =
+ \frac{\P{B\given A}\P{A}}{\P{B}}
+\end{equation*}
+\end{example}
+
+ \DescribeMacro\var{<expression>}
+ \DescribeMacro\cov{<expression>}{<expression>}
+ The commands \Macro\var and \Macro\cov typeset the variance and
+ covariance of an expression.
+\begin{example}
+\begin{gather*}
+ \var{X} = \E{(X-\mu)^2}\\
+ \cov{X}{Y} = \E{XY}-\E{X}\E{Y}
+\end{gather*}
+\end{example}
+
+ \subsection{Improved commands}
+ In addition to adding new commands, this package also redefines
+ already existing commands in a mostly backwards-compatible way
+ to improve their usefulness.
+
+ \DescribeMacro\sin[<power>]{<expression>}
+ \DescribeMacro\arcsin{<expression>}
+ \DescribeMacro\cos[<power>]{<expression>}
+ \DescribeMacro\arccos{<expression>}
+ \DescribeMacro\tan[<power>]{<expression>}
+ \DescribeMacro\arctan{<expression>}
+ \DescribeMacro\cot[<power>]{<expression>}
+ The trigonometric functions have been redefined
+ to typeset more easily. They typeset \meta{expression} as an
+ argument of the expression, and (if applicable) \meta{power} as
+ a superscript between the function and its argument,
+ \emph{e.g.} \(\sin[2]{\phi}\).
+
+ \DescribeMacro\ln{<expression>}
+ The natural logarithm macro \Macro\ln has also been redefined to
+ require an argument which is typeset as the argument of the logarithm.
+ \DescribeMacro\log[<base>]{<expression>}
+ The related macro \Macro\log is redefined in a similar way, but also
+ accepts an optional argument denoting the base of the logarithm:
+ \(\log[2]{x}\).
+
+ \DescribeMacro\exp{<expression>}
+ The exponential, \Macro\exp, is redefined to typeset its argument as a
+ superscript of \(e\) in some display styles, and as an argument of
+ \(\mathrm{exp}\) otherwise:
+ \begin{equation*}
+ \exp{\sqrt{2}\exp{x}}
+ \end{equation*}
+
+ \DescribeMacro\min*[<domain>]{<expression>}
+ \DescribeMacro\argmin*[<domain>]{<expression>}
+ \DescribeMacro\max*[<domain>]{<expression>}
+ \DescribeMacro\argmax*[<domain>]{<expression>}
+ \DescribeMacro\sup*[<domain>]{<expression>}
+ \DescribeMacro\inf*[<domain>]{<expression>}
+ The maximum/minimum macros have been redefined in a manner similar to
+ the trigonometric functions. They typeset \meta{expression} inside
+ curly brackets (the starred version omits the brackets), with the
+ optional \meta{domain} typeset in a subscript after the operator
+ (\emph{e.g.} \(\min*[x\in\R_{+}]{f(x)}\)). Argument variants are also
+ provided, and the \meta{expression} is centered underneath the operator
+ if possible:
+ \begin{equation*}
+ \argmin*[x\in\R_{+}]{f(x)}
+ \end{equation*}
+
+ \subsection{Stylistic changes}
+ Some commands have been redefined in a completely backwards-compatible
+ way to improve the end result of their typesetting.
+
+ \DescribeMacro\frac{<numerator>}{<denominator>}
+ The \Macro\frac command has been changed to improve typesetting,
+ allowing displaystyle math in some settings.
+
+ \DescribeMacro\bar{<expression>}
+ \DescribeMacro\vec{<expression>}
+ The \Macro\bar command has been changed to cover the entire
+ \meta{expression} (\emph{i.e.} \(\bar{uv}\)), and \Macro\vec has
+ been changed to match the \cs{vectorsym} command provided by
+ \pkg{isomath}.
+
+ \section{Known issues}
+ A list of current issues is available in the Github repository of this
+ package\footnote{\url{https://github.com/urdh/skmath/issues}}, but as
+ of the release of \theversion, there are no known issues
+ %\begin{description}
+ % \item[\#?] ???
+ %\end{description}
+
+ If you discover any bugs in this package, please report them to the issue
+ tracker in the \thepackage\ Github repository.
+
+ \Implementation\ExplHack
+ \section{Implementation}
+ The package implementation is very simple. First, we do the standard
+ \LaTeXe\ preamble thing, then we require some dependencies.
+ \changes{0.1b}{Load \pkg{amsmath} with \texttt{intlimits} option}
+ \changes{0.2a}{Load \pkg{amsmath} with more \texttt{limits} options}
+\begin{MacroCode}{package}
+\RequirePackage{expl3,l3keys2e,xparse}
+\ProvidesExplPackage{skmath}
+ {2013/05/24}{0.3}{improved math commands}
+\PassOptionsToPackage{intlimits,sumlimits,namelimits}{amsmath}
+\RequirePackage{amssymb,mathtools,xfrac,isomath}
+\end{MacroCode}
+
+ We optionally provide commands to typeset common sets.
+ \begin{macro}{\__skmath_define_common_sets:}
+\begin{MacroCode}{package}
+\cs_new:Nn\__skmath_define_common_sets:{
+\end{MacroCode}
+ \begin{macro}{\N}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+ \NewDocumentCommand\N{}{\ensuremath{\mathbb{N}}}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\Z}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+ \NewDocumentCommand\Z{}{\ensuremath{\mathbb{Z}}}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\Q}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+ \NewDocumentCommand\Q{}{\ensuremath{\mathbb{Q}}}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\R}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+ \NewDocumentCommand\R{}{\ensuremath{\mathbb{R}}}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\C}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+ \NewDocumentCommand\C{}{\ensuremath{\mathbb{C}}}
+\end{MacroCode}
+ \end{macro}
+\begin{MacroCode}{package}
+}
+\end{MacroCode}
+ \end{macro}
+
+ This is followed by commands to typeset the norm and absolute value.
+ \begin{macro}{\abs}
+\begin{MacroCode}{package}
+\DeclarePairedDelimiter\abs{\lvert}{\rvert}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\norm}
+\begin{MacroCode}{package}
+\DeclarePairedDelimiter\norm{\lVert}{\rVert}
+\end{MacroCode}
+ \end{macro}
+
+ Next come the statistical commands.
+ \begin{macro}{\E}
+ \changes{0.1e}{Added \cs{E} command}
+ \changes{0.1f}{Fixed \enquote{Command \cs{E} already defined!} error}
+ \changes{0.2}{Use \cs{operatorname}}
+ Here, we define \cs{E} after the preamble since it may break otherwise.
+\begin{MacroCode}{package}
+\AtBeginDocument{
+ \DeclareDocumentCommand\E{m}{%
+ \ensuremath{\operatorname{E}\left[#1\right]}%
+ }
+}
+\end{MacroCode}
+ \end{macro}
+ The \Macro\P command saves any old \Macro\given command, replacing
+ it locally with the new \Macro\given command provided by the package.
+ \begin{macro}{\P}
+ \changes{0.1e}{Added \cs{P} command}
+ \changes{0.2}{Use \cs{operatorname}, use \cs{cs_new_eq:NN} instead of
+ \cs{let}}
+\begin{MacroCode}{package}
+\DeclareDocumentCommand\P{m}{%
+ \ensuremath{\operatorname{P}%
+ \mkern-1.5mu\left(%
+ \cs_set_eq:NN\__skmath_saved_given:\given%
+\end{MacroCode}
+ \begin{macro}{\given}
+ \changes{0.1e}{Added \cs{given} command}
+\begin{MacroCode}{package}
+ \DeclareDocumentCommand\given{}{\mid}%
+\end{MacroCode}
+ \end{macro}
+\begin{MacroCode}{package}
+ #1%
+ \cs_set_eq:NN\given\__skmath_saved_given:%
+ \right)%
+ }%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\var}
+ \changes{0.1e}{Added \cs{var} command}
+ \changes{0.2}{Use \cs{operatorname}}
+\begin{MacroCode}{package}
+ \DeclareDocumentCommand\var{m}{%
+ \ensuremath{\operatorname{Var}\left(#1\right)}%
+ }
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\cov}
+ \changes{0.1e}{Added \cs{cov} command}
+ \changes{0.2}{Use \cs{operatorname}}
+\begin{MacroCode}{package}
+ \DeclareDocumentCommand\cov{mm}{%
+ \ensuremath{\operatorname{Cov}\left(#1,#2\right)}%
+ }
+\end{MacroCode}
+ \end{macro}
+
+ We replace all trigonometric functions and some other
+ common functions with alternatives that take an argument
+ (or optionally, several arguments).
+\begin{MacroCode}{package}
+\cs_new_eq:NN\__skmath_sin:\sin
+\cs_new_eq:NN\__skmath_cos:\cos
+\cs_new_eq:NN\__skmath_tan:\tan
+\cs_new_eq:NN\__skmath_cot:\cot
+\cs_new_eq:NN\__skmath_arcsin:\arcsin
+\cs_new_eq:NN\__skmath_arccos:\arccos
+\cs_new_eq:NN\__skmath_arctan:\arctan
+\cs_new_eq:NN\__skmath_ln:\log
+\cs_new_eq:NN\__skmath_log:\log
+\cs_new_eq:NN\__skmath_exp:\exp
+\cs_new_eq:NN\__skmath_min:\min
+\cs_new_eq:NN\__skmath_max:\max
+\cs_new_eq:NN\__skmath_sup:\sup
+\cs_new_eq:NN\__skmath_inf:\inf
+\end{MacroCode}
+ \begin{macro}{\sin}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\sin{om}{%
+ \IfNoValueTF{#1}
+ {\ensuremath{\__skmath_sin:\left(#2\right)}}
+ {\ensuremath{\__skmath_sin:\c_math_superscript_token{#1}\left(#2\right)}}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\cos}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\cos{om}{%
+ \IfNoValueTF{#1}
+ {\ensuremath{\__skmath_cos:\left(#2\right)}}
+ {\ensuremath{\__skmath_cos:\c_math_superscript_token{#1}\left(#2\right)}}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\tan}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\tan{om}{%
+ \IfNoValueTF{#1}
+ {\ensuremath{\__skmath_tan:\left(#2\right)}}
+ {\ensuremath{\__skmath_tan:\c_math_superscript_token{#1}\left(#2\right)}}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\cot}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\cot{om}{%
+ \IfNoValueTF{#1}
+ {\ensuremath{\__skmath_cot:\left(#2\right)}}
+ {\ensuremath{\__skmath_cot:\c_math_superscript_token{#1}\left(#2\right)}}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\arcsin}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\arcsin{m}{%
+ \ensuremath{\__skmath_arcsin:\left(#1\right)}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\arccos}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\arccos{m}{%
+ \ensuremath{\__skmath_arccos:\left(#1\right)}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\arctan}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\arctan{m}{%
+ \ensuremath{\__skmath_arctan:\left(#1\right)}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\ln}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\ln{m}{%
+ \ensuremath{\__skmath_ln:\left(#1\right)}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\log}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\log{om}{%
+ \IfNoValueTF{#1}
+ {\ensuremath{\__skmath_log:\left(#2\right)}}
+ {\ensuremath{\__skmath_log:\c_math_subscript_token{#1}\left(#2\right)}}%
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\exp}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\exp{m}{\ensuremath{\mathchoice%
+ {e\c_math_superscript_token{#1}}%
+ {\__skmath_exp:\left(#1\right)}%
+ {\__skmath_exp:\left(#1\right)}%
+ {\__skmath_exp:\left(#1\right)}%
+}}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro*}{\__skmath_minmax_backend:nnn}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_minmax_backend:nnnn#1#2#3#4{%
+ \use:c{__skmath_#1:}
+ \IfNoValueF{#3}{
+ \c_math_subscript_token{
+ \mathchoice{\mathclap{#3}}{#3}{#3}{#3}
+ }
+ }
+ \IfBooleanTF{#2}{#4}{\left\{#4\right\}}
+}
+\end{MacroCode}
+ \end{macro*}
+ \begin{macro}{\min}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\min{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{min}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\argmin}
+\begin{MacroCode}{package}
+\NewDocumentCommand\argmin{som}{%
+ \ensuremath{\arg\__skmath_minmax_backend:nnnn{min}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\max}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\max{som}{%
+ \ensuremath{\__skmath_max_minbackend:nnnn{max}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\argmax}
+\begin{MacroCode}{package}
+\NewDocumentCommand\argmax{som}{%
+ \ensuremath{\arg\__skmath_minmax_backend:nnnn{max}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\sup}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\sup{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{sup}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+ \begin{macro}{\inf}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\inf{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{inf}{#1}{#2}{#3}}
+}
+\end{MacroCode}
+ \end{macro}
+
+ The fraction command is modified to improve typesetting.
+ \begin{macro}{\frac}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+\begin{MacroCode}{package}
+\RenewDocumentCommand\frac{mm}{\genfrac{}{}{}{}%
+ {\displaystyle #1}{\displaystyle #2}}
+\end{MacroCode}
+ \end{macro}
+
+ We introduce a couple of helper macros for the \cs{pd} macro backend.
+ \begin{macro*}{\__skmath_if_numerical_p:n}
+ \begin{macro*}{\__skmath_if_numerical:nT}
+ \begin{macro*}{\__skmath_if_numerical:nF}
+ \begin{macro*}{\__skmath_if_numerical:nTF}[1]
+ {Token or string}
+\begin{MacroCode}{package}
+\prg_new_conditional:Npnn\__skmath_if_numerical:n#1{p,T,F,TF}{
+ \str_case_x:nnn{#1}{
+ {0}{\prg_return_true:}
+ {1}{\prg_return_true:}
+ {2}{\prg_return_true:}
+ {3}{\prg_return_true:}
+ {4}{\prg_return_true:}
+ {5}{\prg_return_true:}
+ {6}{\prg_return_true:}
+ {7}{\prg_return_true:}
+ {8}{\prg_return_true:}
+ {9}{\prg_return_true:}
+ }{\prg_return_false:}
+}
+\end{MacroCode}
+ \end{macro*}
+ \end{macro*}
+ \end{macro*}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_vars_sum:n}[1]
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_pd_vars_sum:n#1{
+ \tl_clear:N\l_tmpa_tl
+ \int_zero:N\l_tmpa_int
+ \bool_set_true:N\l_tmpa_bool
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \int_compare:nT{\seq_count:N\l_tmpa_seq<\c_two}{
+ \seq_put_right:Nn\l_tmpa_seq{1}
+ }
+ \seq_get_right:NN\l_tmpa_seq\l_tmpb_tl
+ \__skmath_if_numerical:nTF{\tl_use:N\l_tmpb_tl}{
+ \int_add:Nn\l_tmpa_int{\tl_use:N\l_tmpb_tl}
+ }{
+ \bool_set_false:N\l_tmpa_bool
+ \tl_if_empty:NF\l_tmpa_tl{\tl_put_right:Nn\l_tmpa_tl{+}}
+ \tl_put_right:Nx\l_tmpa_tl{\tl_use:N\l_tmpb_tl}
+ }
+ }
+ \int_compare:nT{\l_tmpa_int>\c_zero}{\int_use:N\l_tmpa_int}
+ \bool_if:NF\l_tmpa_bool{
+ \int_compare:nT{\l_tmpa_int>\c_zero}{+}
+ \tl_use:N\l_tmpa_tl
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_if_vars_sum_above_one_p:n}
+ \begin{macro*}{\__skmath_pd_if_vars_sum_above_one:nT}
+ \begin{macro*}{\__skmath_pd_if_vars_sum_above_one:nF}
+ \begin{macro*}{\__skmath_pd_if_vars_sum_above_one:nTF}[1]
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\prg_new_conditional:Npnn\__skmath_pd_if_vars_sum_above_one:n#1{p,T,F,TF}{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \int_compare:nTF{\clist_count:N\l_tmpa_clist>\c_one}{
+ \prg_return_true:
+ }{
+ \clist_pop:NN\l_tmpa_clist\l_tmpa_tl
+ \seq_set_split:NnV\l_tmpa_seq{^}{\l_tmpa_tl}
+ \int_compare:nTF{\seq_count:N\l_tmpa_seq<\c_two}{
+ \prg_return_false:
+ }{
+ \prg_return_true:
+ }
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+ \end{macro*}
+ \end{macro*}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_superscript_vars:n}[1]
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_pd_superscript_vars:n#1{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \partial
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \tl_use:N\l_tmpb_tl
+ \int_compare:nT{\seq_count:N\l_tmpa_seq>0}{
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \c_math_superscript_token
+ \tl_use:N\l_tmpb_tl
+ }
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_subscript_vars:n}[1]
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_pd_subscript_vars:n#1{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \seq_pop:NN\l_tmpa_seq\l_tmpa_tl
+ \int_set:Nn\l_tmpa_int{\c_one}
+ \int_compare:nT{\seq_count:N\l_tmpa_seq>\c_zero}{
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \int_set:Nn\l_tmpa_int{\tl_use:N\l_tmpb_tl}
+ }
+ \prg_replicate:nn{\l_tmpa_int}{\tl_use:N\l_tmpa_tl}
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_fraction:nn}[2]
+ {Tokens representing a mathematical function}
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_pd_fraction:nn#1#2{
+ \frac{
+ \partial
+ \__skmath_pd_if_vars_sum_above_one:nT{#2}{
+ \c_math_superscript_token{\__skmath_pd_vars_sum:n{#2}}
+ }
+ {#1}
+ }{
+ \__skmath_pd_superscript_vars:n{#2}
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+ \begin{macro*}{\__skmath_pd_subscript:nn}[2]
+ {Tokens representing a mathematical function}
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\cs_new_nopar:Npn\__skmath_pd_subscript:nn#1#2{
+ {#1}\c_math_subscript_token{
+ \__skmath_pd_subscript_vars:n{#2}
+ }
+}
+\end{MacroCode}
+ \end{macro*}
+
+ Definition of \cs{bar}, \cs{pd} and \cs{d} is deferred until after all
+ packages are loaded to avoid collisions with other packages.
+\begin{MacroCode}{package}
+\AtBeginDocument{%
+\end{MacroCode}
+ The \cs{bar} command is modified to impove typesetting.
+ \begin{macro}{\bar}
+ \changes{0.1b}{Added \cs{bar} replacement}
+ \changes{0.1h}{Wrap in \cs{AtBeginDocument}}
+\begin{MacroCode}{package}
+\DeclareDocumentCommand\bar{m}{%
+ \ensuremath{\mkern 1.5mu\overline{\mkern-1.5mu{#1}\mkern-1.5mu}\mkern 1.5mu}}
+\end{MacroCode}
+ \end{macro}
+
+ This is the partial derivative macro, but most of the functionality
+ was defined as private macros earlier.
+ \begin{macro}{\pd}[3]
+ {Boolean distinguishing between starred and unstarred variant}
+ {Tokens representing a mathematical function}
+ {Comma-separated list of variables, possibly with superscripts}
+\begin{MacroCode}{package}
+\DeclareDocumentCommand\pd{smm}{
+ \ensuremath{
+ \IfBooleanTF{#1}
+ {\__skmath_pd_subscript:nn{#2}{#3}}
+ {\__skmath_pd_fraction:nn{#2}{#3}}
+ }
+}
+\end{MacroCode}
+ \end{macro}
+
+ We introduce a command to typeset the differential part
+ of integrals, shamefully stolen from an answer on \TeX.SE.
+ \begin{macro}{\d}
+ \changes{0.1a}{Fixed obtuse errors}
+ \changes{0.1b}{Moved to \textsf{xparse} command definition}
+ \changes{0.2}{Use \cs{peek_meaning_ignore_spaces:NT} instead of \cs{@ifnextchar}}
+\begin{MacroCode}{package}
+\DeclareDocumentCommand\d{m}{\ensuremath{\,\mathrm{d}#1%
+ \peek_meaning_ignore_spaces:NT\d{\!}}}
+\end{MacroCode}
+ \end{macro}
+\begin{MacroCode}{package}
+}
+\end{MacroCode}
+
+ Finally, we define a nicer way to denote vectors.
+ \begin{macro}{\vec}
+ \changes{0.2}{Use \cs{cs_new_eq:NN} instead of \cs{let}}
+\begin{MacroCode}{package}
+\cs_set_eq:NN\vec\vectorsym
+\end{MacroCode}
+ \end{macro}
+
+ We end by declaring an option.
+\begin{MacroCode}{package}
+\keys_define:nn{skmath}{
+ commonsets .code:n =
+ {\__skmath_define_common_sets:}
+}
+\ProcessKeysOptions{skmath}
+\end{MacroCode}
+
+\begin{MacroCode}{package}
+\endinput
+\end{MacroCode}
+
+ \Finale
+ \section{Installation}
+ The easiest way to install this package is using the package
+ manager provided by your \LaTeX\ installation if such a program
+ is available. Failing that, provided you have obtained the package
+ source (\file{skmath.tex} and \file{Makefile}) from either CTAN
+ or Github, running \texttt{make install} inside the source directory
+ works well. This will extract the documentation and code from
+ \file{skmath.tex}, install all files into the TDS tree at
+ \texttt{TEXMFHOME} and run \texttt{mktexlsr}.
+
+ If you want to extract code and documentation without installing
+ the package, run \texttt{make all} instead. If you insist on not
+ using \texttt{make}, remember that packages distributed using
+ \pkg{skdoc} must be extracted using \texttt{pdflatex}, \emph{not}
+ \texttt{tex} or \texttt{latex}.
+
+ \PrintChanges
+ \PrintIndex
+\end{document}
diff --git a/Master/texmf-dist/tex/latex/skmath/skmath.sty b/Master/texmf-dist/tex/latex/skmath/skmath.sty
index c378474654a..382ee9c2365 100644
--- a/Master/texmf-dist/tex/latex/skmath/skmath.sty
+++ b/Master/texmf-dist/tex/latex/skmath/skmath.sty
@@ -1,7 +1,7 @@
%% This is file `skmath.sty', generated from `skmath.tex' (key `package').
%% skmath improved math commands
%%
-%% Copyright (C) 2012 by Simon Sigurdhsson <sigurdhsson@gmail.com>
+%% Copyright (C) 2012-2013 by Simon Sigurdhsson <sigurdhsson@gmail.com>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -18,106 +18,241 @@
%% This work consists of the file skmath.tex
%% and the derived file skmath.sty.
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{skmath}%
- [2013/02/18 v0.1e skmath improved math commands]
-\RequirePackage{xparse}
-\PassOptionsToPackage{intlimits}{amsmath}
-\RequirePackage{kvoptions,amssymb,mathtools,xfrac,isomath}
-\SetupKeyvalOptions{family=skmath,prefix=skmath@}
-\DeclareBoolOption[false]{commonsets}
-\ProcessKeyvalOptions*
-\ifskmath@commonsets
+\RequirePackage{expl3,l3keys2e,xparse}
+\ProvidesExplPackage{skmath}
+ {2013/05/24}{0.3}{improved math commands}
+\PassOptionsToPackage{intlimits,sumlimits,namelimits}{amsmath}
+\RequirePackage{amssymb,mathtools,xfrac,isomath}
+\cs_new:Nn\__skmath_define_common_sets:{
\NewDocumentCommand\N{}{\ensuremath{\mathbb{N}}}
\NewDocumentCommand\Z{}{\ensuremath{\mathbb{Z}}}
\NewDocumentCommand\Q{}{\ensuremath{\mathbb{Q}}}
\NewDocumentCommand\R{}{\ensuremath{\mathbb{R}}}
\NewDocumentCommand\C{}{\ensuremath{\mathbb{C}}}
-\fi
+}
\DeclarePairedDelimiter\abs{\lvert}{\rvert}
\DeclarePairedDelimiter\norm{\lVert}{\rVert}
\AtBeginDocument{
\DeclareDocumentCommand\E{m}{%
- \ensuremath{\mathop{\mathrm{E}}\left[#1\right]}%
+ \ensuremath{\operatorname{E}\left[#1\right]}%
}
}
\DeclareDocumentCommand\P{m}{%
- \ensuremath{\mathop{\mathrm{P}}%
- \left(%
- \let\skmath@given\given%
+ \ensuremath{\operatorname{P}%
+ \mkern-1.5mu\left(%
+ \cs_set_eq:NN\__skmath_saved_given:\given%
\DeclareDocumentCommand\given{}{\mid}%
#1%
- \let\given\skmath@given%
+ \cs_set_eq:NN\given\__skmath_saved_given:%
\right)%
}%
}
\DeclareDocumentCommand\var{m}{%
- \ensuremath{\mathop{\mathrm{Var}}\left(#1\right)}%
+ \ensuremath{\operatorname{Var}\left(#1\right)}%
}
\DeclareDocumentCommand\cov{mm}{%
- \ensuremath{\mathop{\mathrm{Cov}}\left(#1,#2\right)}%
+ \ensuremath{\operatorname{Cov}\left(#1,#2\right)}%
}
-\let\skmath@sin\sin
-\let\skmath@cos\cos
-\let\skmath@tan\tan
-\let\skmath@cot\cot
-\let\skmath@arcsin\arcsin
-\let\skmath@arccos\arccos
-\let\skmath@arccos\arctan
-\let\skmath@ln\log
-\let\skmath@log\log
-\let\skmath@exp\exp
+\cs_new_eq:NN\__skmath_sin:\sin
+\cs_new_eq:NN\__skmath_cos:\cos
+\cs_new_eq:NN\__skmath_tan:\tan
+\cs_new_eq:NN\__skmath_cot:\cot
+\cs_new_eq:NN\__skmath_arcsin:\arcsin
+\cs_new_eq:NN\__skmath_arccos:\arccos
+\cs_new_eq:NN\__skmath_arctan:\arctan
+\cs_new_eq:NN\__skmath_ln:\log
+\cs_new_eq:NN\__skmath_log:\log
+\cs_new_eq:NN\__skmath_exp:\exp
+\cs_new_eq:NN\__skmath_min:\min
+\cs_new_eq:NN\__skmath_max:\max
+\cs_new_eq:NN\__skmath_sup:\sup
+\cs_new_eq:NN\__skmath_inf:\inf
\RenewDocumentCommand\sin{om}{%
\IfNoValueTF{#1}
- {\ensuremath{\skmath@sin\left(#2\right)}}
- {\ensuremath{\skmath@sin^{#1}\left(#2\right)}}%
+ {\ensuremath{\__skmath_sin:\left(#2\right)}}
+ {\ensuremath{\__skmath_sin:\c_math_superscript_token{#1}\left(#2\right)}}%
}
\RenewDocumentCommand\cos{om}{%
\IfNoValueTF{#1}
- {\ensuremath{\skmath@cos\left(#2\right)}}
- {\ensuremath{\skmath@cos^{#1}\left(#2\right)}}%
+ {\ensuremath{\__skmath_cos:\left(#2\right)}}
+ {\ensuremath{\__skmath_cos:\c_math_superscript_token{#1}\left(#2\right)}}%
}
\RenewDocumentCommand\tan{om}{%
\IfNoValueTF{#1}
- {\ensuremath{\skmath@tan\left(#2\right)}}
- {\ensuremath{\skmath@tan^{#1}\left(#2\right)}}%
+ {\ensuremath{\__skmath_tan:\left(#2\right)}}
+ {\ensuremath{\__skmath_tan:\c_math_superscript_token{#1}\left(#2\right)}}%
}
\RenewDocumentCommand\cot{om}{%
\IfNoValueTF{#1}
- {\ensuremath{\skmath@cot\left(#2\right)}}
- {\ensuremath{\skmath@cot^{#1}\left(#2\right)}}%
+ {\ensuremath{\__skmath_cot:\left(#2\right)}}
+ {\ensuremath{\__skmath_cot:\c_math_superscript_token{#1}\left(#2\right)}}%
}
\RenewDocumentCommand\arcsin{m}{%
- \ensuremath{\skmath@arcsin\left(#1\right)}%
+ \ensuremath{\__skmath_arcsin:\left(#1\right)}%
}
\RenewDocumentCommand\arccos{m}{%
- \ensuremath{\skmath@arccos\left(#1\right)}%
+ \ensuremath{\__skmath_arccos:\left(#1\right)}%
}
\RenewDocumentCommand\arctan{m}{%
- \ensuremath{\skmath@arctan\left(#1\right)}%
+ \ensuremath{\__skmath_arctan:\left(#1\right)}%
}
\RenewDocumentCommand\ln{m}{%
- \ensuremath{\skmath@ln\left(#1\right)}%
+ \ensuremath{\__skmath_ln:\left(#1\right)}%
}
\RenewDocumentCommand\log{om}{%
\IfNoValueTF{#1}
- {\ensuremath{\skmath@log\left(#2\right)}}
- {\ensuremath{\skmath@log_{#1}\left(#2\right)}}%
+ {\ensuremath{\__skmath_log:\left(#2\right)}}
+ {\ensuremath{\__skmath_log:\c_math_subscript_token{#1}\left(#2\right)}}%
}
\RenewDocumentCommand\exp{m}{\ensuremath{\mathchoice%
- {e^{#1}}%
- {\skmath@exp\left(#1\right)}%
- {\skmath@exp\left(#1\right)}%
- {\skmath@exp\left(#1\right)}%
+ {e\c_math_superscript_token{#1}}%
+ {\__skmath_exp:\left(#1\right)}%
+ {\__skmath_exp:\left(#1\right)}%
+ {\__skmath_exp:\left(#1\right)}%
}}
+\cs_new_nopar:Npn\__skmath_minmax_backend:nnnn#1#2#3#4{%
+ \use:c{__skmath_#1:}
+ \IfNoValueF{#3}{
+ \c_math_subscript_token{
+ \mathchoice{\mathclap{#3}}{#3}{#3}{#3}
+ }
+ }
+ \IfBooleanTF{#2}{#4}{\left\{#4\right\}}
+}
+\RenewDocumentCommand\min{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{min}{#1}{#2}{#3}}
+}
+\NewDocumentCommand\argmin{som}{%
+ \ensuremath{\arg\__skmath_minmax_backend:nnnn{min}{#1}{#2}{#3}}
+}
+\RenewDocumentCommand\max{som}{%
+ \ensuremath{\__skmath_max_minbackend:nnnn{max}{#1}{#2}{#3}}
+}
+\NewDocumentCommand\argmax{som}{%
+ \ensuremath{\arg\__skmath_minmax_backend:nnnn{max}{#1}{#2}{#3}}
+}
+\RenewDocumentCommand\sup{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{sup}{#1}{#2}{#3}}
+}
+\RenewDocumentCommand\inf{som}{%
+ \ensuremath{\__skmath_minmax_backend:nnnn{inf}{#1}{#2}{#3}}
+}
\RenewDocumentCommand\frac{mm}{\genfrac{}{}{}{}%
{\displaystyle #1}{\displaystyle #2}}
-\RenewDocumentCommand\bar{m}{%
- \ensuremath{\mkern 1.5mu\overline{\mkern-1.5mu{#1}\mkern-1.5mu}\mkern 1.5mu}}
+\prg_new_conditional:Npnn\__skmath_if_numerical:n#1{p,T,F,TF}{
+ \str_case_x:nnn{#1}{
+ {0}{\prg_return_true:}
+ {1}{\prg_return_true:}
+ {2}{\prg_return_true:}
+ {3}{\prg_return_true:}
+ {4}{\prg_return_true:}
+ {5}{\prg_return_true:}
+ {6}{\prg_return_true:}
+ {7}{\prg_return_true:}
+ {8}{\prg_return_true:}
+ {9}{\prg_return_true:}
+ }{\prg_return_false:}
+}
+\cs_new_nopar:Npn\__skmath_pd_vars_sum:n#1{
+ \tl_clear:N\l_tmpa_tl
+ \int_zero:N\l_tmpa_int
+ \bool_set_true:N\l_tmpa_bool
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \int_compare:nT{\seq_count:N\l_tmpa_seq<\c_two}{
+ \seq_put_right:Nn\l_tmpa_seq{1}
+ }
+ \seq_get_right:NN\l_tmpa_seq\l_tmpb_tl
+ \__skmath_if_numerical:nTF{\tl_use:N\l_tmpb_tl}{
+ \int_add:Nn\l_tmpa_int{\tl_use:N\l_tmpb_tl}
+ }{
+ \bool_set_false:N\l_tmpa_bool
+ \tl_if_empty:NF\l_tmpa_tl{\tl_put_right:Nn\l_tmpa_tl{+}}
+ \tl_put_right:Nx\l_tmpa_tl{\tl_use:N\l_tmpb_tl}
+ }
+ }
+ \int_compare:nT{\l_tmpa_int>\c_zero}{\int_use:N\l_tmpa_int}
+ \bool_if:NF\l_tmpa_bool{
+ \int_compare:nT{\l_tmpa_int>\c_zero}{+}
+ \tl_use:N\l_tmpa_tl
+ }
+}
+\prg_new_conditional:Npnn\__skmath_pd_if_vars_sum_above_one:n#1{p,T,F,TF}{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \int_compare:nTF{\clist_count:N\l_tmpa_clist>\c_one}{
+ \prg_return_true:
+ }{
+ \clist_pop:NN\l_tmpa_clist\l_tmpa_tl
+ \seq_set_split:NnV\l_tmpa_seq{^}{\l_tmpa_tl}
+ \int_compare:nTF{\seq_count:N\l_tmpa_seq<\c_two}{
+ \prg_return_false:
+ }{
+ \prg_return_true:
+ }
+ }
+}
+\cs_new_nopar:Npn\__skmath_pd_superscript_vars:n#1{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \partial
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \tl_use:N\l_tmpb_tl
+ \int_compare:nT{\seq_count:N\l_tmpa_seq>0}{
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \c_math_superscript_token
+ \tl_use:N\l_tmpb_tl
+ }
+ }
+}
+\cs_new_nopar:Npn\__skmath_pd_subscript_vars:n#1{
+ \clist_set:Nn\l_tmpa_clist{#1}
+ \clist_map_inline:Nn\l_tmpa_clist{
+ \seq_set_split:Nnn\l_tmpa_seq{^}{##1}
+ \seq_pop:NN\l_tmpa_seq\l_tmpa_tl
+ \int_set:Nn\l_tmpa_int{\c_one}
+ \int_compare:nT{\seq_count:N\l_tmpa_seq>\c_zero}{
+ \seq_pop:NN\l_tmpa_seq\l_tmpb_tl
+ \int_set:Nn\l_tmpa_int{\tl_use:N\l_tmpb_tl}
+ }
+ \prg_replicate:nn{\l_tmpa_int}{\tl_use:N\l_tmpa_tl}
+ }
+}
+\cs_new_nopar:Npn\__skmath_pd_fraction:nn#1#2{
+ \frac{
+ \partial
+ \__skmath_pd_if_vars_sum_above_one:nT{#2}{
+ \c_math_superscript_token{\__skmath_pd_vars_sum:n{#2}}
+ }
+ {#1}
+ }{
+ \__skmath_pd_superscript_vars:n{#2}
+ }
+}
+\cs_new_nopar:Npn\__skmath_pd_subscript:nn#1#2{
+ {#1}\c_math_subscript_token{
+ \__skmath_pd_subscript_vars:n{#2}
+ }
+}
\AtBeginDocument{%
+\DeclareDocumentCommand\bar{m}{%
+ \ensuremath{\mkern 1.5mu\overline{\mkern-1.5mu{#1}\mkern-1.5mu}\mkern 1.5mu}}
+\DeclareDocumentCommand\pd{smm}{
+ \ensuremath{
+ \IfBooleanTF{#1}
+ {\__skmath_pd_subscript:nn{#2}{#3}}
+ {\__skmath_pd_fraction:nn{#2}{#3}}
+ }
+}
\DeclareDocumentCommand\d{m}{\ensuremath{\,\mathrm{d}#1%
- \@ifnextchar\d{\!}{}}}
+ \peek_meaning_ignore_spaces:NT\d{\!}}}
+}
+\cs_set_eq:NN\vec\vectorsym
+\keys_define:nn{skmath}{
+ commonsets .code:n =
+ {\__skmath_define_common_sets:}
}
-\let\vec\vectorsym
+\ProcessKeysOptions{skmath}
\endinput