summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-06-27 20:41:31 +0000
committerKarl Berry <karl@freefriends.org>2016-06-27 20:41:31 +0000
commitf3714e22cf9b596abec6c42dc1dc9dd95ef82b61 (patch)
tree4aa08c0e81aa4e5b21e2cd909cabaa8dca30a889 /Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex
parente9f2b559eb367b62e1b88e7e73dd32c3b7d253c1 (diff)
diffcoeff (27jun16)
git-svn-id: svn://tug.org/texlive/trunk@41554 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex')
-rw-r--r--Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex1188
1 files changed, 1188 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex b/Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex
new file mode 100644
index 00000000000..1274318f916
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/diffcoeff/diffcoeff.tex
@@ -0,0 +1,1188 @@
+%% LyX 2.2.0 created this file. For more info, see http://www.lyx.org/.
+%% Do not edit unless you really know what you are doing.
+\documentclass[english,extend]{article}
+\usepackage{lmodern}
+\renewcommand{\sfdefault}{lmss}
+\renewcommand{\ttdefault}{lmtt}
+\usepackage[T1]{fontenc}
+\usepackage[latin9]{inputenc}
+\setcounter{secnumdepth}{2}
+\setcounter{tocdepth}{2}
+\usepackage{booktabs}
+\usepackage{amstext}
+
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands.
+%% Because html converters don't know tabularnewline
+\providecommand{\tabularnewline}{\\}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
+ \newenvironment{example}{\begin{center}\ttfamily}{\end{center}}
+\newenvironment{lyxcode}
+{\par\begin{list}{}{
+\setlength{\rightmargin}{\leftmargin}
+\setlength{\listparindent}{0pt}% needed for AMS classes
+\raggedright
+\setlength{\itemsep}{0pt}
+\setlength{\parsep}{0pt}
+\normalfont\ttfamily}%
+ \item[]}
+{\end{list}}
+\newcommand{\strong}[1]{\textbf{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
+\usepackage{diffcoeff}
+
+\@ifundefined{showcaptionsetup}{}{%
+ \PassOptionsToPackage{caption=false}{subfig}}
+\usepackage{subfig}
+\makeatother
+
+\usepackage{babel}
+\begin{document}
+
+\title{\texttt{diffcoeff}~\\
+a \LaTeX{} package for writing\texttt{}~\\
+differential coefficients easily}
+
+\author{Andrew Parsloe\\
+{\small{}(aparsloe@clear.net.nz)}}
+\maketitle
+\begin{abstract}
+\noindent \texttt{diffcoeff.sty} allows the easy writing of ordinary and
+partial differential coefficients of arbitrary (algebraic or numeric) order.
+For mixed partial derivatives, the overall order (the superscript on $\partial$
+in the numerator) is calculated by the package. Optional arguments allow
+the easy specification of a point of evaluation for ordinary derivatives,
+or variables held constant for partial derivatives, and the placement of
+the differentiand (in the numerator or appended). Some tweaking of the
+display is possible through key = value settings. Secondary commands provide
+analogous coefficients constructed from $D,\thinspace\Delta,$ and $\delta$,
+and a command for writing Jacobians. The package uses \texttt{expl3} and
+\texttt{xparse} from the \LaTeX{}3 bundles, \texttt{l3kernel} and \texttt{l3packages}.
+\end{abstract}
+
+\section{Requirements}
+
+The \LaTeX{} package \texttt{diffcoeff.sty} is written in the expl3 language
+of \LaTeX{}3\texttt{ }and requires the bundles \texttt{l3kernel} and \texttt{l3packages}
+(the latter for the \texttt{xparse} module). However, granted the presence
+of these bundles in your \TeX{} distribution, the \LaTeX{}3 element should
+be invisible to the user.
+
+The package is invoked in the usual way by entering
+\begin{lyxcode}
+\textbackslash{}usepackage\{diffcoeff\}
+\end{lyxcode}
+in the preamble of your document.
+
+\paragraph{Note on terminology}
+
+I refer throughout to the quantity or function being differentiated as
+the \emph{differentiand} (in line with \emph{integrand}, \emph{operand},
+etc.).
+
+\section{Ordinary differential coefficients \label{sec:Ordinary-differential-coefficien}}
+
+Writing\textbf{ }\texttt{\textbackslash{}diff\{y\}\{x\}} will produce $\diff{y}{x}$
+in text style (i.e. placed between \texttt{\$ \$}) or
+\[
+\diff{y}{x}
+\]
+in display style (i.e. placed between \texttt{\textbackslash{}{[} \textbackslash{}{]}}
+). In fact \texttt{\textbackslash{}diff yx} (omitting the braces) will
+produce these results, with a saving on keystrokes. The braces are needed
+only when differentiand or variable of differentiation is more than a single
+token.
+
+There is one other form: we can insert a slash, `/', between numerator
+and denominator: \texttt{\textbackslash{}diff f/x} produces $\diff f/x$
+which may be preferred for textstyle differential coefficients on occasion.
+Nothing is gained in this particular instance. It is quicker to type the
+five keystrokes d, f, /, d, x than it is to type the nine of \textbackslash{},
+d, i, f, f, , f, /, x but there are occasions when this is not always the
+case.
+
+An optional first argument allows the order of differentiation to be specified.
+The order need not be a number; an algebraic order of differentiation is
+perfectly acceptable or, indeed, a mix:
+\begin{example}
+\textbackslash{}diff{[}2{]}\{y\}\{x\} $\Longrightarrow\quad{\displaystyle \diff[2]{y}{x},}$\medskip{}
+
+\textbackslash{}diff{[}n+1{]}\{y\}\{x\} $\Longrightarrow\quad{\displaystyle \diff[n+1]{y}{x}}.$
+\end{example}
+(And again the braces can be omitted for single letters like \textbf{x}
+and \textbf{y}.)
+
+In slash style, \texttt{\textbackslash{}diff{[}2{]}f/x} (11 keystrokes)
+produces $\diff[2]f/x$, not significantly more typing than \texttt{d\textasciicircum{}2f/dx\textasciicircum{}2}
+(9 keystrokes).
+
+If you want to specify a point at which the derivative is evaluated, append
+a final optional argument, but note that it is given in \emph{braces} rather
+than square brackets:
+\begin{example}
+\textbackslash{}diff{[}2{]}\{y\}\{x\}\{0\} $\Longrightarrow\quad{\displaystyle \diff[2]{y}{x}{0}}$
+\end{example}
+\noindent (In this example it seems neater \emph{not} to finish with a
+full stop or other punctuation.) The use of braces means that the differential
+coefficient can be followed immediately by a mathematical expression wrapped
+in \texttt{\textbackslash{}\{ \textbackslash{}\}}, or \texttt{{[} {]}},
+without the expression being confused with the (final) optional argument.
+Note also that there must be \emph{no space} before the argument: it follows
+\emph{immediately} on the second mandatory argument (if it follows at all).
+
+We could save a few keystrokes by writing this last example as \texttt{\textbackslash{}diff{[}2{]}yx\{0\}}.
+The braces around the final optional argument can \emph{not} be omitted
+\textendash{} otherwise there is no way of knowing that it \emph{is }the
+final optional argument and not part of a following expression.
+
+In slash style, the trailing optional argument can be used, but perhaps
+should not be. It looks ugly:
+\begin{example}
+\textbackslash{}diff{[}2{]}y/x\{0\} $\Longrightarrow\quad{\displaystyle \diff[2]{y}/{x}{0}}$
+\end{example}
+Slash style is a more casual rendering of the derivative, intended for
+inline use within text and it would be better to use a phrase like `evaluated
+at zero'.
+
+\subsection{\textbackslash{}diffset: formatting tweaks}
+
+There are a number of tweaks one can make to the display of a derivative.
+Many people now use upright (roman) forms for the `d's of a differential
+coefficient, rather than math italic. To do this, put the command
+\begin{example}
+{\footnotesize{}\textbackslash{}}diffset{[}roman = true{]}
+\end{example}
+\noindent in the preamble of your document (following the \texttt{\textbackslash{}usepackage\{diffcoeff\}}
+of course). The default is math italic.
+
+It is possible that you may want more space between the `d' in the numerator
+of a differential coefficient and the superscripted order of the derivative.
+Using an upright `d' alleviates this problem, but if using the default
+math italic for the `d's, the separation can be altered by using the
+\begin{example}
+\textbackslash{}diffset{[}d-sep = $n${]}
+\end{example}
+\noindent command which adds an extra $n$~mu to \TeX{}'s spacing. The
+default value for $n$ is 1 (i.e. 1~mu). The new separation will affect
+all derivatives following the new setting. Put in the preamble, the new
+separation will be document-wide.
+
+A third tweak changes the delimiters used to indicate the point of evaluation.
+By default there is nothing on the left side and a vertical rule with the
+point of evaluation subscripted to it on the right. You may prefer subscripted
+parentheses. In that case write
+\begin{example}
+\textbackslash{}diffset{[}d-delims~=~(){]}\textmd{.}
+\end{example}
+Whatever delimiters you choose need to work with \LaTeX{}'s \texttt{\textbackslash{}left}
+and \texttt{\textbackslash{}right} commands and consist of exactly two
+tokens. \texttt{{[}} and \texttt{{]}}\textbf{ }are acceptable as also are
+pairs like \texttt{\textbackslash{}lceil \textbackslash{}rceil}, \texttt{\textbackslash{}lfloor
+\textbackslash{}rfloor} but if you want to use \texttt{\textbackslash{}\{}\textbf{
+}and\textbf{ }\texttt{\textbackslash{}\}} you need to place the \texttt{\textbackslash{}diffset}
+command between maths delimiters. The default pair, as indicated, is \texttt{. |},
+t or full stop being \LaTeX{}'s way of suppressing (in this case) the
+left delimiter.
+
+If you change the delimiters, say to \textbf{( )}, then the position of
+the subscript may need adjusting. To do this, use the command
+\begin{example}
+\textbackslash{}diffset{[}d-nudge = $n${]}
+\end{example}
+A suggested setting for parentheses \textbf{( )} is $-6$ (in fact $-6$~mu
+but the `mu' is supplied by \texttt{diffcoeff}). Thus the total change
+would be
+\begin{example}
+\textbackslash{}diffset{[}d-delims = ( ), d-nudge = -6{]}
+\end{example}
+producing, for example,
+\begin{example}
+\textbackslash{}diff{[}n{]}\{y\}\{x\}\{0\} $\diffset[d-delims=(),d-nudge=-6]\Longrightarrow\quad{\displaystyle \diff[n]{y}{x}{0}}.$
+\end{example}
+The default setting for \textbf{. |} is 0. Simply writing
+\begin{example}
+\textbackslash{}diffset $\diffset$
+\end{example}
+will return all settings to their defaults.
+
+\subsection{Variations}
+
+\subsubsection{Appending the differentiand: \textbackslash{}diff{*}}
+
+If you want the differentiand to follow the differential coefficient rather
+than sit in the numerator, perhaps because it is a fraction itself or because
+it is long, like a polynomial ($ax^{2}+bx+c$), then one way to achieve
+that is to leave the first mandatory argument in the \texttt{\textbackslash{}diff}
+command empty and immediately follow the differential operator with the
+differentiand:
+\begin{example}
+\textbackslash{}diff\{\}\{x\}(ax\textasciicircum{}2+bx+c) $\Longrightarrow\quad{\displaystyle \diff{}{x}(ax^{2}+bx+c)}.$
+\end{example}
+Another is to use the star form of the \texttt{\textbackslash{}diff }command,
+\begin{example}
+\textbackslash{}diff{*}{[}2{]}\{\textbackslash{}frac\{F(x)\}\{G(x)\}\}\{x\}
+$\Longrightarrow\quad{\displaystyle \diff*[2]{\frac{F(x)}{G(x)}}{x}.}$
+\end{example}
+\noindent The LaTeX expression can be harder to read if, as here, one is
+using a command like \texttt{\textbackslash{}frac} with its own pairs of
+braces, but it is much easier, if one isn't sure whether the differentiand
+should be appended or in the numerator, simply to insert or delete an asterisk
+than move the differentiand from one place to the other. The star form
+becomes especially useful if you want to both append the differentiand
+\emph{and }indicate the point of evaluation, since it saves having to set
+up the \texttt{\textbackslash{}left.} and \texttt{\textbackslash{}right|}\textbf{
+}delimiters and the subscript:
+\begin{example}
+\textbackslash{}diff{*}\{\textbackslash{}frac\{F(x)\}\{G(x)\}\}\{x\}\{0\}
+$\Longrightarrow\quad{\displaystyle \diffset[d-delims=.|,d-nudge=0]\diff*{\frac{F(x)}{G(x)}}{x}{0}}$
+\end{example}
+In slash style with the star option, an example above becomes
+\begin{example}
+\textbackslash{}diff{*}\{(ax\textasciicircum{}2+bx+c)\}/\{x\} $\Longrightarrow\quad\text{\ensuremath{{\displaystyle \diff*{(ax^{2}+bx+c)}/{x}}}}$,
+\end{example}
+where the derivative is automatically enclosed in parentheses by \texttt{diffcoeff}.
+
+\subsubsection{Multi-character variables of differentiation}
+
+Derivatives of a function-of-a-function may require forming a differential
+coefficient in which the variable of differentiation is more complicated
+than a single symbol like \texttt{x} or \texttt{\textbackslash{}alpha}.
+For instance, to differentiate $\ln x^{2}$ (the logarithm of $x^{2}$)
+one first differentiates in $x^{2}$ then in $x$. The initial differentiation
+can be rendered
+\begin{example}
+\textbackslash{}diff\{\textbackslash{}ln x\textasciicircum{}2\}\{x\textasciicircum{}2\}
+$\Longrightarrow\quad{\displaystyle \diff{\ln x^{2}}{x^{2}}}$; \medskip{}
+
+diff\{\textbackslash{}ln x\textasciicircum{}2\}/\{x\textasciicircum{}2\}
+$\Longrightarrow\quad{\displaystyle \diff{\ln x^{2}}/{x^{2}}}.$
+\end{example}
+\noindent Because of the superscript in the variable of differentiation
+$x^{2}$, parentheses have been automatically inserted in the denominator.
+This does not happen in a first-order derivative unless there is a superscript
+present. For instance,
+\begin{example}
+\textbackslash{}diff\{\textbackslash{}ln\textbackslash{}sin x\}\{\textbackslash{}sin
+x\} $\Longrightarrow\quad{\displaystyle \diff{\ln\sin x}{\sin x}.}$
+\end{example}
+\noindent displays without parentheses. However, for higher order derivatives
+parentheses are \emph{always} inserted to avoid confusion:
+\begin{example}
+\textbackslash{}diff{[}2{]}\{\textbackslash{}ln\textbackslash{}sin x\}\{\textbackslash{}sin
+x\} $\Longrightarrow\quad{\displaystyle \diff[2]{\ln\sin x}{\sin x}.}$
+\end{example}
+
+\paragraph{Positioning the d in the numerator}
+
+When appending a differentiand, you may want to change the position of
+the `d' in the numerator, particularly if the variable of differentiation
+is a multi-character symbol or the order of differentiation is a multi-character
+value like $n+1$.
+
+If you `manually' append the differentiand, then there are various ways
+of altering the placement of the `d' from the default midpoint: use \texttt{\textbackslash{}hfill}
+to push it hard to the left; use \texttt{\textbackslash{}hfil} to\textbf{
+}push it to the left an intermediate amount; use \texttt{\textbackslash{}hphantom}
+or \texttt{\textbackslash{}hspace}, both with a braced argument, to push
+it to the left some custom amount; use \texttt{\textbackslash{}hspace}\textbf{
+}with a \emph{negative} braced argument to push it to the right.\emph{
+}These same means can be used to shift the `d' when using the starred
+form of \texttt{\textbackslash{}diff}.\textbf{ }The effect is exactly the
+same, too:
+\begin{example}
+\textbackslash{}diff{[}n+1{]}\{\textbackslash{}hphantom\{\textbackslash{}sin
+x\}\}\{\textbackslash{}sin x\}\textbackslash{}ln\textbackslash{}sin x $\Longrightarrow\quad{\displaystyle \diff[n+1]{\hphantom{\sin x}}{\sin x}\ln\sin x},$\medskip{}
+
+\textbackslash{}diff{*}{[}n+1{]}\{\textbackslash{}hphantom\{\textbackslash{}sin
+x\}\textbackslash{}ln\textbackslash{}sin x\}\{\textbackslash{}sin x\} $\Longrightarrow\quad{\displaystyle \diff*[n+1]{\hphantom{\sin x}\ln\sin x}{\sin x}}.$
+\end{example}
+\noindent In the starred form \texttt{diffcoeff} understands that the formatting
+is not appended with the differentiand but stays in the numerator. (But
+a \emph{second} \texttt{\textbackslash{}hphantom} or \texttt{\textbackslash{}hfil}
+etc. would be appended.) These are to be compared with
+\begin{example}
+\textbackslash{}diff{*}{[}n+1{]}\{\textbackslash{}ln\textbackslash{}sin
+x\}\{\textbackslash{}sin x\} $\Longrightarrow\quad{\displaystyle \diff*[n+1]{\ln\sin x}{\sin x},}$
+\end{example}
+where no phantom has been used. Which is better? Deleting the asterisk
+gives
+\begin{example}
+\textbackslash{}diff{[}n+1{]}\{\textbackslash{}ln\textbackslash{}sin x\}\{\textbackslash{}sin
+x\} $\Longrightarrow\quad{\displaystyle \diff[n+1]{\ln\sin x}{\sin x},}$
+\end{example}
+In slash style, the phantom (or \texttt{\textbackslash{}hfil} etc.) is
+ignored:
+\begin{example}
+\textbackslash{}diff{*}{[}n+1{]}\{\textbackslash{}hphantom\{\textbackslash{}sin
+x\textbackslash{}sin x\textbackslash{}sin x\}\textbackslash{}ln\textbackslash{}sin
+x\}/\{\textbackslash{}sin x\} $\Longrightarrow\quad{\displaystyle \diff*[n+1]{\hphantom{\sin x\sin x\sin x}\ln\sin x}/{\sin x}}.$
+\end{example}
+
+\subsubsection{Iterated derivatives}
+
+A second derivative is an iterated derivative, i.e., one in which a differential
+coefficient forms the differentiand of another differential coefficient:
+\begin{example}
+\textbackslash{}diff{[}2{]}yx = \textbackslash{}diff{*}\{\textbackslash{}diff
+yx\}x $\Longrightarrow{\displaystyle \diff[2]yx=\diff*{\diff yx}x},$
+\end{example}
+or even
+\begin{example}
+\textbackslash{}diff{[}2{]}yx = \textbackslash{}diff\{\textbackslash{}diff
+yx\}x $\Longrightarrow{\displaystyle \diff[2]yx=\diff{\diff yx}x},$
+\end{example}
+where omission of unnecessary braces has aided readability. Note how easy
+it is to switch between the different forms on the right, simply by inserting
+or removing an asterisk.
+
+\subsection{Forming `derivatives' with D, \textbackslash{}Delta, \textbackslash{}delta}
+
+Often one wants to construct analogues of a differential coefficient but
+with symbols other than $d$ or $\partial$. The \texttt{diffcoeff} package
+offers three alternatives, all with the same pattern of optional and mandatory
+arguments as for \texttt{\textbackslash{}diff}, except for the slash form.
+There is \emph{no} slash option.
+
+An uppercase $D$ is used in place of $d$ for the \emph{material} or \emph{substantive}
+derivative of a quantity in (for example) fluid dynamics. Write \texttt{\textbackslash{}Diff}
+to invoke this command:\footnote{The \texttt{\textbackslash{}diffp} command, the partial derivative, in
+the example is discussed in the next section.}
+\begin{example}
+\textbackslash{}Diff\{\textbackslash{}rho\}\{t\}=\textbackslash{}diffp\textbackslash{}rho
+t + \textbackslash{}mathbf\{u\textbackslash{}cdot\}\textbackslash{}nabla\textbackslash{}rho
+$\Longrightarrow{\displaystyle \Diff{\rho}{t}=\diffp\rho t+\mathbf{u\cdot}\nabla\rho.}$
+\end{example}
+(The braces could also be removed from the arguments of \texttt{\textbackslash{}Diff}
+as they have been from the arguments of \texttt{\textbackslash{}diffp}.)\texttt{ }
+
+The `D's are romanised (along with the `d's of ordinary derivatives)
+with the
+\begin{example}
+\textbackslash{}diffset{[}roman = true{]}
+\end{example}
+command. The default is math italic.
+
+The command \texttt{\textbackslash{}diffd} will form a fraction often used
+in introductory calculus texts (and other places):\footnote{I considered using \texttt{\textbackslash{}diffg} for this command as in
+`diff greek' but decided that the more likely mind-phrase is `diff delta',
+leading to the use of `d' rather than `g'.}
+\begin{example}
+\textbackslash{}diffd\{y\}\{x\} $\Longrightarrow{\displaystyle \diffd yx.}$
+\end{example}
+Similarly, \texttt{\textbackslash{}Diffd} forms a fraction with $\Delta$:
+\begin{example}
+\textbackslash{}Diffd\{y\}\{x\} $\Longrightarrow{\displaystyle \Diffd{y}{x}.}$
+\end{example}
+Higher order forms of these derivatives are produced in the same way as
+with \texttt{\textbackslash{}diff}, using an optional argument to specify
+the order:
+\begin{example}
+\textbackslash{}diffd{[}2{]}\{y\}\{x\} $\Longrightarrow{\displaystyle \diffd[2]yx.}$
+\end{example}
+A final optional argument, enclosed in braces, specifies a point of evaluation,
+care being taken, as ever, to ensure that there is no space between it
+and the second mandatory argument:
+\begin{example}
+\textbackslash{}Diffd\{y\}\{x\}\{x=0\} $\Longrightarrow{\displaystyle \Diffd yx{x=0}.}$
+\end{example}
+
+\section{Partial differential coefficients\label{sec:Partial-differential-coefficient}}
+\noindent \begin{flushleft}
+Partial differential coefficients follow the same pattern as for ordinary
+derivatives, with some generalisations arising from the greater possibilities.
+The command this time is \texttt{\textbackslash{}diffp}. Thus \textbf{\textbackslash{}diffp\{F\}\{x\}}
+produces $\diffp{F}{x}$ in text style and
+\[
+\diffp{F}{x}
+\]
+ in display style. Braces can be omitted for single token differentiands
+and variables: \texttt{\textbackslash{}diffp Fx} does the job.\textbf{
+}As for \texttt{\textbackslash{}diff}, there is a slash form for more casual
+use: \texttt{\textbackslash{}diffp F/x} displaying as $\diffp F/x$. Given
+that \texttt{\textbackslash{}partial} takes 8 keystrokes to type, the slash
+form \emph{does }economise on keystrokes for a partial derivative.
+\par\end{flushleft}
+
+\begin{flushleft}
+Again an optional argument allows the specification of the order of differentiation
+and it may be numeric or algebraic or a mix of the two. For a second or,
+indeed, an $n+4$th-order partial derivative,
+\par\end{flushleft}
+\begin{example}
+\textbackslash{}diffp{[}n+4{]}\{F\}\{x\} $\Longrightarrow\quad{\displaystyle {\displaystyle \diffp[n+4]{F}{x},}}$\medskip{}
+
+\textbackslash{}diffp{[}n+4{]}\{F\}/\{x\} $\Longrightarrow\quad{\displaystyle {\displaystyle \diffp[n+4]{F}/{x},}}$
+\end{example}
+In a subject like thermodynamics, there is a need to indicate which variable
+or variables are held constant when the differentiation occurs. To show
+this, append a final optional argument. Thus to differentiate the entropy
+$S$ in the temperature $T$ while holding the volume $V$ constant, write
+\begin{example}
+\textbackslash{}diffp\{S\}\{T\}\{V\} $\Longrightarrow\quad{\displaystyle \diffp{S}{T}{V}}$
+\end{example}
+As with \texttt{\textbackslash{}diff}\textbf{ }note how the final optional
+argument is given in braces rather than square brackets, and that there
+must be \emph{no space} before the argument: if used, it follows \emph{immediately}
+on the second mandatory argument. This means that the differential coefficient
+can be followed immediately by a mathematical expression wrapped in \textbackslash{}\{
+\textbackslash{}\}, or {[} {]}, without the expression being confused with
+the (final) optional argument.
+
+We could save a few keystrokes by writing this last example as \texttt{\textbackslash{}diffp
+ST\{V\}}. The braces around the optional argument can \emph{not} be dispensed
+with (otherwise there is no way of knowing that it \emph{is} the final
+optional argument and not part of a following expression).
+
+Note that for the slash form of the derivative it is anticipated that there
+will be no trailing optional argument. If you \emph{do} use one, you will
+need to change the nudge value either with the \texttt{\textbackslash{}diffset}
+command or, better, by including a spacing command in the third argument:
+\begin{example}
+\textbackslash{}diffp\{S\}/\{T\}\{\textbackslash{};V\} $\Longrightarrow\quad{\displaystyle \diffp{S}/{T}{\;V}}$
+\end{example}
+Without the spacing command, the subscript encroaches on the right parenthesis.
+
+\subsubsection{Appending the differentiand}
+
+If you want to remove the differentiand from the numerator to instead follow
+the derivative, one way, as for ordinary derivatives, is to leave the first
+mandatory argument empty and manually append the differentiand:
+\begin{example}
+\textbackslash{}diffp{[}n{]}\{\}xf(x) $\Longrightarrow\quad{\displaystyle \diffp[n]{}xf(x).}$
+\end{example}
+However, you may wonder how that would look with the differentiand in the
+numerator, which is a good reason for preferring the starred form of the
+\texttt{\textbackslash{}diffp} command to achieve an appended derivative:
+\begin{example}
+\textbackslash{}diffp{*}{[}n{]}\{f(x)\}x $\Longrightarrow\quad{\displaystyle \diffp*[n]{f(x)}x.}$
+\end{example}
+Now it is easy to switch between an appended differentiand and one in the
+numerator simply by inserting or deleting the asterisk. In the slash form,
+parentheses are automatically inserted around the differential operator:
+\begin{example}
+\textbackslash{}diffp{*}{[}n{]}\{f(x)\}/x $\Longrightarrow\quad{\displaystyle \diffp*[n]{f(x)}/x.}$
+\end{example}
+It also happens, for example in thermodynamics, that you may wish to both
+append the differentiand \emph{and} indicate variables held constant. In
+that case, the starred \texttt{\textbackslash{}diffp} command is much easier
+to use. Thus, to express a relation in thermodynamics,
+\begin{example}
+\textbackslash{}diffp{*}\{\textbackslash{}frac \{P\}\{T\}\}\{U\}\{V\} =
+\textbackslash{}diffp{*}\{\textbackslash{}frac\{1\}\{T\}\}\{V\}\{U\} $\Longrightarrow\quad{\displaystyle \diffp*{\frac{P}{T}}{U}{V}=\diffp*{\frac{1}{T}}{V}{U}}$
+\end{example}
+\noindent where the starred form automatically takes care of the parentheses
+and subscripts. Again, not all the braces are necessary, with some help
+to readability:
+\begin{example}
+\textbackslash{}diffp{*}\{\textbackslash{}frac PT\}U\{V\} = \textbackslash{}diffp{*}\{\textbackslash{}frac
+1T\}V\{U\} $\Longrightarrow\quad{\displaystyle \diffp*{\frac{P}{T}}U{V}=\diffp*{\frac{1}{T}}V{U}}$
+\end{example}
+
+\subsection{Mixed partial derivatives}
+
+The new thing with partial derivatives, not present with ordinary derivatives,
+is \emph{mixed} partial derivatives, where there is more than one variable
+of differentiation. If each variable is differentiated only to the first
+order, then it is easy to specify the derivative. Say $f(x,y,z)$ is a
+function of three variables, as indicated. Then
+\begin{example}
+\textbackslash{}diffp\{f\}\{x\c{,}y,z\} $\Longrightarrow\quad{\displaystyle \diffp{f}{x,y,z}}.$
+\end{example}
+The variables of differentiation are listed in order in a comma list forming
+the second mandatory argument. The total order of differentiation (3 in
+this example) is inserted automatically \textendash{} \texttt{diffcoeff}
+does the calculation itself. There is also a slash form:
+\begin{example}
+\textbackslash{}diffp\{f\}/\{x\c{,}y,z\} $\Longrightarrow\quad{\displaystyle \diffp{f}/{x,y,z}}.$
+\end{example}
+If we want to differentiate variables to higher order, then their orders
+need to be specified explicitly. To do so use a comma list also in the
+\emph{optional} argument:
+\begin{example}
+\textbackslash{}diffp{[}2,3{]}\{f\}\{x,y,z\} $\Longrightarrow\quad{\displaystyle \diffp[2,3]{f}{x,y,z}.}$
+\end{example}
+\noindent Notice that the overall order of the derivative \textendash{}
+6 \textendash{} is again automatically calculated and inserted as a superscript
+on the $\partial$ symbol in the numerator. In this example, the comma
+list of orders has only two members, even though there are three variables.
+It is assumed that the orders given in the comma list of orders apply in
+sequence to the variables, the first order to the first variable, the second
+to the second variable, and so on, and that any subsequent orders not listed
+in the optional argument are, by default, 1. Thus we need to specify only
+2 and 3 in the example; the order of $z$ is 1 by default.
+
+But you \emph{cannot} use an order specification like \texttt{{[},,2{]}}.
+This will be treated as if it were \texttt{{[}2{]}}. (This is a feature
+of comma lists in the expl3 language used by \texttt{diffcoeff.sty}.) Instead
+write \texttt{{[}1,1,2{]}}.\textbf{ }It is only the \emph{tail} of an order
+specification which can be omitted.
+
+The automatic calculation of the overall order of differentiation remains
+true even when some or all of the orders for the individual variables are
+algebraic. For example, differentiating in three variables with orders
+\texttt{2k}, \texttt{m-k-2}, \texttt{m+k+3}, we have
+\begin{example}
+\textbackslash{}diffp{[}2k-1,m-k-2,m+k+3{]}\{F(x,y,z)\}\{x,y,z\} $\Longrightarrow\quad{\displaystyle \diffp[2k-1,m-k-2,m+k+3]{F(x,y,z)}{x,y,z}}$,
+\end{example}
+
+\subsection{The order-override option}
+
+In this example the overall order is presented as \texttt{2k+2m}. You might
+prefer this to be presented as \texttt{2(k+m)} instead. Although \texttt{diffcoeff}
+takes some steps to present the overall order appropriately, it does not
+factorise expressions. If you want to present the order in a manner distinct
+from that of \texttt{diffcoeff}, use the\emph{ order-override option},
+which is a second optional argument immediately following the first:
+\begin{example}
+\textbackslash{}diffp{[}2k-1,m-k-2,m+k+3{]}{[}2(k+m){]}\{F(x,y,z)\}\{x,y,z\}
+$\Longrightarrow\quad{\displaystyle \diffp[2k-1,m-k-2,m+k+3][2(m+k)]{F(x,y,z)}{x,y,z}}$.
+\end{example}
+The order-override option does exactly that: overrides the presentation
+of the calculated order with the manually given one. (In fact the algorithm
+does not get called at all.)
+
+\subsubsection{Order specifications beyond the scope of \texttt{diffcoeff.sty}}
+
+The order specification can include signed integers, variables like $k$
+and $\alpha$ with signed integer coeffients, and products of any number
+of variables like $mn$ or $kmn$ with signed integer coefficients. The
+algorithm that calculates the overall order in \texttt{diffcoeff.sty} \emph{cannot}
+handle\texttt{ }exponents, subscripts or parentheses. For such constructs,
+or more exotic ones, the order-override option is always available. If
+it is present (even if empty), the algorithm is bypassed completely and
+one can include `anything' there without causing error.
+
+I doubt that these limitations matter in any practical sense. We are in
+`overkill' territory here. Mixed partial derivatives are used far more
+rarely than the `pure' ones, and mixed partial derivatives to `exotic'
+orders of differentiation are used \emph{vanishingly} rarely, and in any
+case the order-override option is always available. But should you, in
+some freak circumstance, find yourself needing to write such things, then
+I suggest you use \texttt{diffcoeffx.sty}, which is \texttt{diffcoeff.sty}
+`on steroids'. It can handle the situations described above that are
+beyond the scope of \texttt{diffcoeff.sty}, and it uses exactly the same
+commands so there is nothing new to remember. It also provides additonal
+functionality for the trailing optional argument.
+
+\subsubsection{Presentation of the overall order}
+
+To take a grotesque example, that will never arise in practice, consider
+the following:
+\begin{example}
+\textbackslash{}diffp{[}kmn-mn+n-1,2kmn-mn+2n-1,n+1{]}\{f\}\{x,y,z,w\}
+$\Longrightarrow{\displaystyle \diffp[kmn-mn+n-1,2kmn-mn+2n-1,n+1]{f}{x,y,z,w}}.$
+\end{example}
+As noted earlier, since the final variable $w$ is differentiated only
+to order 1, there is no need to specify it in the comma list of orders.
+The implicit 1 contributes to the vanishing of the numerical part in the
+overall order of differentiation. In this example, the overall order contains
+multivariable terms, $kmn$ and $mn$. \texttt{diffcoeff} initially organises
+these in the sequence: \ldots{} 3-variable terms before 2-variable terms
+before single-variable terms, generally before the numerical term. However
+if a minus sign precedes the first many-variable term, and the numerical
+term is positive, it will be presented first:
+\begin{example}
+\textbackslash{}diffp{[}12-2km,k-1,km+1{]}\{f\}\{x,y,z,w\} $\Longrightarrow{\displaystyle \diffp[12-2km,km-1,k+1]{f}{x,y,z,w}}.$
+\end{example}
+Should the numerical term either vanish or be negative and the leading
+algebraic term is preceded by a minus sign, \texttt{diffcoeff} will look
+for an algebraic term with a preceding $+$ sign and put that first:
+\begin{example}
+\textbackslash{}diffp{[}2km-3k-1,2k-1,-3km+4k+1{]}\{f\}\{x,y,z,w\} $\Longrightarrow{\displaystyle \diffp[2km-3k-1,2k-1,-3km+4k+1]{f}{x,y,z,w}}.$
+\end{example}
+
+\subsection{\textbackslash{}diffset: formatting tweaks}
+
+As with ordinary derivatives, there are a number of tweaks one can make
+to the display of a partial derivative.
+
+You may want more space between the $\partial$ symbol in the numerator
+of a partial derivative and the superscripted order of the derivative.
+The separation can be altered by using the
+\begin{example}
+\textbackslash{}diffset{[}p-sep = $n${]}
+\end{example}
+\noindent command which adds an extra $n$~mu to \TeX{}'s spacing. The
+default value is 1 (i.e. 1~mu). The new separation will affect all derivatives
+following the new setting. Put in the preamble, the new separation will
+be document-wide.
+
+You may also want to adjust the spacing between the terms in the denominator.
+This can be done with the command
+\begin{example}
+\textbackslash{}diffset{[}sep=$n${]}
+\end{example}
+which adds an extra $n$~mu to \TeX{}'s spacing. The default value is
+2~mu.
+
+If you wish to indicate the point at which a partial derivative is evaluated,
+you may not want to use parentheses, since these when subscripted are widely
+held to indicate variables held constant. To change the delimiter on the
+right to a vertical line, use
+\begin{example}
+\textbackslash{}diffset{[}p-delims = . | {]}\textmd{,}
+\end{example}
+the dot suppressing the delimiter on the left. (Note that to use \texttt{\textbackslash{}\{}
+and \texttt{\textbackslash{}\}} as delimiters, \texttt{\textbackslash{}diffset
+}must be placed between maths delimiters.)
+
+Changing the delimiters will usually require a repositioning of the subscript.
+The command is
+\begin{example}
+\textbackslash{}diffset{[}p-nudge = $n${]}\textmd{.}
+\end{example}
+For parentheses the default value of $n$ is $-6$, but for the vertical
+rule a zero value is appropriate. Thus the overall command for . | would
+be
+\begin{example}
+\textbackslash{}diffset{[}p-delims = . |, p-nudge = 0{]} \textmd{.}
+\end{example}
+Writing
+\begin{example}
+\textbackslash{}diffset
+\end{example}
+will return all settings to their default values.
+
+\subsection{Variations}
+
+\subsubsection{Multi-character variables of differentiation}
+
+In thermodynamics one may want to differentiate in the reciprocal of the
+temperature, $1/T$. In tensor calculus the differentiations are almost
+always in terms of super- or subscripted coordinates, and in many other
+contexts this is the case too. This is why a comma list is used in \texttt{diffcoeff}
+for specifying the variables of differentiation for partial derivatives.
+Although it would be nice to write the minimal \texttt{\{xy\}} for this
+rather than \texttt{\{x,y}\}, the extra writing is trivial and the comma
+list allows the simplest handling of multi-character variables:
+\begin{example}
+\textbackslash{}diffp\{A\_i\}\{ x\textasciicircum{}j,x\textasciicircum{}k
+\} $\Longrightarrow{\displaystyle \diffp{A_{i}}{x^{j},x^{k}},}$
+\end{example}
+taken from tensor calculus, or this strange object taken from statistical
+mechanics:
+\begin{example}
+\textbackslash{}diffp{[}2{]}q\{\textbackslash{}frac 1\textbackslash{}Theta\}
+$\Longrightarrow{\displaystyle \diffp[2]q{\frac{1}{\Theta}}}$.
+\end{example}
+The parentheses have been inserted automatically by \texttt{diffcoeff}
+to clarify exactly what the variable of differentiation is.
+
+\subsubsection{Use of phantoms when appending differentiands}
+
+As for ordinary derivatives, when appending a differentiand you may want
+to include a phantom (\texttt{\textbackslash{}hphantom} etc.) in the numerator
+of the differential coefficient to alter the placement of the $\partial$
+symbol. This may be particularly relevant if the order of differentiation
+is a multi-character symbol or if there are a number of variables of differentiation.
+
+Either means of achieving the appended differentiand achieve the same result:
+\begin{example}
+\textbackslash{}diffp{[}m,2{]}\{\textbackslash{}hphantom\{\textbackslash{}partial
+y \textbackslash{}partial \}\}\{x,y,z\} (\textbackslash{}ln \textbackslash{}cos
+x + \textbackslash{}ln \textbackslash{}sin y)z $\Longrightarrow\quad{\displaystyle \diffp[m,2]{\hphantom{\partial y\partial}}{x,y,z}}(\ln\cos x+\ln\sin y)z,$\medskip{}
+
+\textbackslash{}diffp{*}{[}m,2{]}\{\textbackslash{}hphantom\{\textbackslash{}partial
+y \textbackslash{}partial \}(\textbackslash{}ln \textbackslash{}cos x +
+\textbackslash{}ln \textbackslash{}sin y)z\}\{x,y,z\} $\Longrightarrow\quad{\displaystyle \diffp*[m,2]{\hphantom{\partial y\partial}(\ln\cos x+\ln\sin y)z}{x,y,z}},$
+\end{example}
+which is to be compared with the derivative without the phantom,
+\begin{example}
+\textbackslash{}diffp{*}{[}m,2{]}\{(\textbackslash{}ln \textbackslash{}cos
+x + \textbackslash{}ln \textbackslash{}sin y)z\}\{x,y,z\} $\Longrightarrow\quad{\displaystyle \diffp*[m,2]{(\ln\cos x+\ln\sin y)z}{x,y,z}}.$
+\end{example}
+\noindent In the starred form, \texttt{diffcoeff} understands that the
+phantom is not appended with the differentiand but stays in the numerator.
+(But a \emph{second} phantom would be appended.)
+
+\subsubsection{Iterated derivatives}
+
+Partial derivatives can be iterated. For example,
+\begin{example}
+\textbackslash{}diffp f\{x,y\} = \textbackslash{}diffp{*}\{\textbackslash{}diffp
+fy\}x $\Longrightarrow{\displaystyle \diffp f{x,y}=\diffp*{\diffp fy}x,}$\medskip{}
+
+\textbackslash{}diffp f\{x,y\} = \textbackslash{}diffp\{\textbackslash{}diffp
+fy\}x $\Longrightarrow{\displaystyle \diffp f{x,y}=\diffp{\diffp fy}x.}$
+\end{example}
+It is easy to switch between these forms by inserting or deleting the asterisk.
+
+\subsection{Jacobians}
+
+\texttt{diffcoeff} provides a command \texttt{\textbackslash{}jacob} for
+constructing Jacobians. For example
+\begin{example}
+\textbackslash{}jacob\{u,v,w\}\{x,y,z\} $\Longrightarrow{\displaystyle \jacob{u,v,w}{x,y,z}.}$
+\end{example}
+The comma lists can contain any number of variables. \texttt{\textbackslash{}jacob}
+does \emph{not} check that the two arguments contain the same number of
+variables, so it is perfectly possible to form an object like
+\begin{example}
+\textbackslash{}jacob\{u,v,w\}\{x,y\} ,
+\end{example}
+which as far as I know has no meaning.
+
+\section{Discussion of the code}
+
+I set about creating this package when faced with trying to parse \LaTeX{}
+expressions involving derivatives for another program I was working on.
+Trying to parse \texttt{\textbackslash{}frac\{d<something>\}\{d<something
+else>\}}, perhaps with \texttt{\textbackslash{}mathrm\{d\}}'s, and a superscript
+on the first \texttt{d}, perhaps with a \texttt{\textbackslash{}tfrac}
+or \texttt{\textbackslash{}dfrac} for the \texttt{\textbackslash{}frac},\textbf{
+}wasn't quite hopeless, but it was certainly \emph{messy}. (I used regular
+expressions to transform the fraction into something more systematic.)
+
+\subsection{Other packages}
+
+Looking through the MiK\TeX{} distribution and, less assiduously, through
+CTAN, produced the following packages which provide macros for derivatives.
+(Strangely, AMS packages do not touch this subject, as far as I can see.)
+\begin{itemize}
+\item \texttt{bropd}
+\begin{itemize}
+\item \texttt{\textbackslash{}od{[}n{]}\{y\}\{x\}} and \texttt{\textbackslash{}pd{[}n{]}\{y\}\{x\}}
+for ordinary and partial derivatives of order \texttt{n} in one variable
+\item \texttt{\textbackslash{}pd\{u\}\{x,x,t\}} for a mixed partial derivative,
+order 2 in \texttt{x}, 1 in \texttt{t}
+\item \texttt{\textbackslash{}pd\{\}\{z\}\{x+y\}} for appending \texttt{(x+y)}
+\item \texttt{\textbackslash{}pd\{!\}\{z\}\{x+y\}} for appending \texttt{x+y}
+\end{itemize}
+\item \texttt{commath}
+\begin{itemize}
+\item \texttt{\textbackslash{}od{[}n{]}\{y\}\{x\}} and \texttt{\textbackslash{}pd{[}n{]}\{y\}\{x\}}
+for ordinary and partial derivatives of order \texttt{n} in one variable
+\item \texttt{\textbackslash{}md\{f\}\{5\}\{x\}\{2\}\{y\}\{3\}} for a 5th order
+mixed partial derivative
+\item \texttt{\textbackslash{}tmd}, \texttt{\textbackslash{}dmd} and similar
+commands for forcing text and display styles
+\end{itemize}
+\item \texttt{esdiff}
+\begin{itemize}
+\item \texttt{\textbackslash{}diff{[}n{]}\{y\}\{x\}}\textbf{ }and \texttt{\textbackslash{}diffp{[}n{]}\{y\}\{x\}}\textbf{
+}for ordinary and partial derivatives of order \texttt{n} in one variable
+\item \texttt{\textbackslash{}diffp\{f\}\{\{x\textasciicircum{}2\}\{y\}\{z\textasciicircum{}3\}\}}
+for a mixed partial derivative of order 6 in three variables
+\item \texttt{\textbackslash{}diff{*}{[}n{]}\{y\}\{x\}\{0\}} for indicating the
+point of evaluation of the derivative (using a subscript on parentheses)
+\item \texttt{\textbackslash{}diffp{*}\{P\}\{T\}\{V\}} to indicate a variable
+held constant
+\end{itemize}
+\item \texttt{physymb}
+\begin{itemize}
+\item \texttt{\textbackslash{}ud\{y\}\{x\}} and \texttt{\textbackslash{}pd\{y\}\{x\}}
+for ordinary and partial derivatives of first order
+\item \texttt{\textbackslash{}udd\{y\}\{x\}}, \texttt{\textbackslash{}uddd\{y\}\{x\}}
+and \texttt{\textbackslash{}pdd\{y\}\{x\}}, \texttt{\textbackslash{}pddd\{y\}\{x\}}
+for second and third order ordinary and partial derivatives
+\item higher order derivatives not catered for
+\end{itemize}
+\end{itemize}
+None of the packages quite gave what I wanted (but for all that, I suspect
+cope with well over 90\% of use cases). \texttt{esdiff} comes closest but
+failed when it came to combining algebraic and numeric orders of differentation
+in a mixed partial derivative. Also the need to em-brace variables in a
+mixed partial derivative in \texttt{esdiff}\textbf{ }was another (small)
+count against it.
+
+\subsection{diffcoeff.sty}
+\begin{itemize}
+\item The distinctive feature of \texttt{diffcoeff.sty} is that it will automatically
+form the overall order of a mixed partial derivative, including those containing
+both algebraic and numeric contributions to the order:
+\end{itemize}
+\begin{example}
+\textbackslash{}diffp{[}m-k-1,m+k{]}\{F(x,y,z)\}\{x,y,z\} $\Longrightarrow{\displaystyle \diffp[m-k-1,m+k]{F(x,y,z)}{x,y,z}}.$
+\end{example}
+\begin{itemize}
+\item Ease of use was another major consideration, trying to avoid the unnecessary
+writing of superscripts and subscripts and brace pairs. In this example,
+no superscripts are written and only the two inescapable brace pairs are
+required.
+\begin{itemize}
+\item The use of a comma list for the second mandatory argument in a partial
+derivative is another example. That makes differentiations in super- or
+subscripted symbols easier to both write and read by avoiding `entanglements'
+of braces.
+\end{itemize}
+\item I've also tried to make the options `natural' and consistent across both
+ordinary and partial derivatives. Looking at the other packages listed
+above, writing something like \texttt{\textbackslash{}diff{[}n{]}\{f\}\{x\}}
+(which can be trimmed to \texttt{\textbackslash{}diff{[}n{]}fx} in this
+instance) seems `natural' \textendash{} only \texttt{physymb} deviates
+from the pattern. It seems consistent with this pattern to use a comma
+list as an optional argument for mixed partial derivatives.
+\item I debated whether to include provision for points of evaluation and variables
+held constant into the \texttt{\textbackslash{}diff} and \texttt{\textbackslash{}diffp}
+commands. \texttt{esdiff} certainly allows this. I think a case can be
+made, in subjects like thermodynamics, to consider the parentheses and
+subscript as part of the overall symbol. The partial derivative itself
+doesn't give the full story; it is ambiguous. Hence provision for these
+extra elements was included in \texttt{\textbackslash{}diff} and \texttt{\textbackslash{}diffp}.
+It's positioning as a final optional argument also felt natural given the
+position of the resulting symbol in the displayed derivative:
+\end{itemize}
+\begin{example}
+\textbackslash{}diffp ST\{V\} $\Longrightarrow\quad{\displaystyle \diffp ST{V}}$
+\end{example}
+\begin{itemize}
+\item Although initially I used standard square brackets for this trailing optional
+argument, the possibility of an immediately following mathematical expression
+being enclosed in square brackets convinced me to use braces for the argument.
+An immediately following expression can now be enclosed in \texttt{{[}
+{]}}, or \texttt{\textbackslash{}\{ \textbackslash{}\}}, without ambiguity.
+\item The star option also prompted the reflection: is it needed? One can always
+leave the first mandatory argument empty and append the differentiand `by
+hand'. But once the provision for points of evaluation or variables held
+constant was incorporated into the \texttt{\textbackslash{}diff} and \texttt{\textbackslash{}diffp}
+commands, the star option became the simplest way of handling appended
+differentiands using the extra provision. (Note that it conflicts with
+the star option in \texttt{esdiff}, but I can't see the packages ever being
+used together.) And once the option is available, it provides a simple
+way to switch between differentiand in the numerator/differentiand appended.
+\item The final option added to the package was the slash option. This was prompted
+after seeing the expression $\diff*{[\log f(z)]}/z$ in a text on statistical
+mechanics. Alerted to the form, I then skimmed through various texts and
+found this form of the derivative was used sufficiently often to justify
+inclusion. The placement of the slash, between the two mandatory arguments,
+seemed more-or-less self-evident.
+\end{itemize}
+
+\subsection{The mixed partial derivatives algorithm}
+
+It occurred to me, after I had created an algorithm for splitting a linear
+expression composed of signs, integers and variables into its numerical
+and algebraic parts, that the same algorithm could be used in a recursive
+way to simplify the algebraic part of the expression.
+
+Given an order specification like, say, \textbf{\strong{\textbf{{[}2m+k\textendash 1,2m\textendash k+1,2k,1{]}}}},
+the idea is to concatenate the terms with intervening \textbf{+} signs,
+thus \textbf{\strong{\textbf{2m+k\textendash 1+2m\textendash k+1+ 2k+1}}},
+then split this expression into numeric and algebraic parts, giving \textbf{\strong{\textbf{\textendash 1+ 1+1}}}
+for the numeric part and \textbf{\strong{\textbf{2m+k+2m\textendash k+2k}}}
+for the algebraic part. The numeric part, assumed to be a combination of
+integers, is evaluated and the result stored. For the algebraic part, remove
+throughout all instances of one of the variables, say \textbf{\strong{\textbf{m}}}.
+The result is \textbf{\strong{\textbf{2+k+2\textendash k+2k}}}. Split
+this into numeric and algebraic parts: \textbf{\strong{\textbf{2+2}}}
+for the numeric part and \textbf{\strong{\textbf{k\textendash k+2k}}}
+for the algebraic part. Evaluate the numeric part, \textbf{\strong{\textbf{+4}}},
+and you have the overall coefficient of the variable \textbf{\strong{\textbf{m}}}.
+Repeat the process for the next variable, and so on until all variables
+have been accounted for.
+
+In fact repeating the process for the next variable, \strong{k} in this
+example, immediately reveals a problem. Removing \strong{k} from \textbf{\strong{\textbf{k\textendash k+2k}}}
+leaves \strong{\textendash +2} which evaluates to \strong{\textendash 2}
+whereas the correct coefficient for \strong{k} should be \strong{+2}.
+The solution is to insert \strong{1} before any `bare' variable \textendash{}
+a variable preceded only by a sign rather than a number. In that case the
+expression we remove \strong{k} from is \strong{1k\textendash 1k+2k}
+giving the correct overall coefficient \strong{+2}.
+
+A second problem may arise if there are terms involving products of variables
+as in the order specification \strong{{[}mk\textendash 2,2m+1,2k+1{]}}.
+This splits into a numeric part \strong{\textendash 2+1+1} evaluating
+to \strong{0}, and an algebraic part \strong{mk+2m+2k}. If we choose
+\strong{m} as the first variable to remove from this expression, we get
+\strong{+2} for the numeric part (and hence the overall coefficient of
+\strong{m}) and \strong{k+2k} for the algebraic part, which is wrong,
+since that will lead to the wrong overall coefficient \strong{+3} for
+\strong{k}, and the 2-variable term \strong{mk} will not get treated
+at all. The cure is to treat \strong{mk} as a variable itself, count the
+number of tokens in each such product and start the removal process with
+the largest.
+
+\subsubsection{The splitting algorithm}
+
+Write $s$ for a sign, one of \strong{+}, \strong{\textendash{}}, and
+\strong{s} for the state of assembling a signed term; a signed term is
+a string of one or more signs. Write $d$ for a digit, one of 0123456789,
+and \strong{n} for the state of assembling a numeric term; a numeric term
+is a signed term followed by a string of one or more digits. Write $v$
+for a variable, usually a letter from the roman alphabet but in principle
+any single token that is not a sign or a digit, and \strong{a} for the
+state of assembling an algebraic term; an algebraic term is a numeric term
+followed by a string of one or more variables. Rather than referring to
+a signed-term-assembling state, we shall (obviously) simply refer to a
+\emph{signed state}, and similarly to a \emph{numeric state} and an \emph{algebraic
+state}.
+
+\begin{table}
+\noindent \centering{}\caption{\label{tab:Input-output-states}State transitions}
+\medskip{}
+\begin{tabular}{ccccc}
+\cmidrule{2-5}
+ & Curr. state & Curr. token & Action & Next state\tabularnewline
+\cmidrule{2-5}
+1 & \strong{s} & $s$ & $Ts\to s'$; $T=s'$ & \strong{s}\tabularnewline
+\cmidrule{2-5}
+2 & \strong{s} & $d$ & $Td$ & \strong{n}\tabularnewline
+\cmidrule{2-5}
+3 & \strong{s} & $v$ & $Vv$; $T1v$ & \strong{a}\tabularnewline
+\cmidrule{2-5}
+4 & \strong{n} & $s$ & $\mathbf{N}T$; $T=s$ & \strong{s}\tabularnewline
+\cmidrule{2-5}
+5 & \strong{n} & $d$ & $Td$ & \strong{n}\tabularnewline
+\cmidrule{2-5}
+6 & \strong{n} & $v$ & $Vv$; $Tv$ & \strong{a}\tabularnewline
+\cmidrule{2-5}
+7 & \strong{a} & $s$ & $\mathbf{V}V,$; $V=\textrm{Ø}$; $\mathbf{A}T$; $T=s$ & \strong{s}\tabularnewline
+\cmidrule{2-5}
+8 & \strong{a} & $d$ & error & \strong{!!}\tabularnewline
+\cmidrule{2-5}
+9 & \strong{a} & $v$ & $Vv$; $Tv$ & \strong{a}\tabularnewline
+\cmidrule{2-5}
+\end{tabular}
+\end{table}
+We also want to record the variables in the extended sense of products
+of same. Call a one-token variable a prime variable. Then in this desired
+sense, a variable is a string of one or more prime variables.
+
+Let $\mathbf{E}$ be the initial expression. Let $\mathbf{A}$ be a container
+for the algebraic part of $\mathbf{E}$; let $\mathbf{N}$ be a container
+for the numeric part of $\mathbf{E}$; and let $\mathbf{V}$ be a container
+for the extended variables in $\mathbf{E}$. Let $T$ be a container in
+which to accumulate the current term, and $V$ a container in which to
+accumulate the current extended variable (if any). Initially all these
+containers are empty ($\textrm{Ø}$).
+
+We work through $\mathbf{E}$ token by token from the left. The table shows
+the alternatives.
+\begin{itemize}
+\item Row 1. The current token is a sign $s$ and the system is in a signed state
+\strong{s}. We append $s$ to the current term, $Ts$, then resolve the
+juxtaposition of signs according to the familiar rules: $++\to+$, $--\to+$,
+$+-\to-$, $-+\to-$, so that $T$ contains only the resolved sign $s'$.
+The system remains in a signed state.
+\item Row 2. The current token is a digit $d$ and the system is in a signed-
+state \strong{s}. We append $d$ to the current term, $Td$ (which will
+now consist of a sign and a digit), and the system shifts to a numeric
+state \strong{n}.
+\item Row 3. The current token is a prime variable $v$ and the system is in
+a signed state \strong{s}. We start assembling an extended variable,
+$Vv$, and append $1v$ to the current term, $T1v$, where the $1$ is
+necessary as discussed earlier (and in any case `sign variable' is not
+a recognised \emph{term} \textendash{} neither signed, numeric or algebraic).
+The system shifts to an algebraic state \strong{a}.
+\item Row 4. The current token is a sign $s$ and the system is in a numeric
+state \strong{n}. The current term is a numeric term, a sign followed
+by at least one digit, and is complete. We append it to the numeric part
+$\mathbf{N}$ of $\mathbf{E}$, $\mathbf{N}T$, then initialise $T$ to
+$s$. The system shifts to a signed state.
+\item Row 5. The current token is a digit $d$ and the system is in a numeric
+state \strong{n}. We append $d$ to the current term, $Td$, and remain
+in a numeric state.
+\item Row 6. The current token is a prime variable $v$ and the system is in
+a numeric state \strong{n}. We start assembling a variable, $Vv$, and
+also append $v$ to the current term, $Tv$. The system shifts to an algebraic
+state \strong{a}.
+\item Row 7. The current token is a sign $s$ and the system is in an algebraic
+state \strong{a}. The current term is an algebraic term, a sign followed
+by at least one digit followed by at least one prime variable, and is complete.
+We append it to the algebraic part $\mathbf{A}$ of $\mathbf{E}$, $\mathbf{A}T$,
+then initialise $T$ to $s$. We also append $V$, in which we have been
+accumulating the (extended) variable, to $\mathbf{V}$, $\mathbf{V}V,$,
+then empty $V$ in preparation for the next (extended) variable. Attention
+is drawn to the comma following $V$ also appended to $\mathbf{V}$, so
+that we can distinguish where one variable ends and the next begins. The
+system shifts to a signed state.
+\item Row 8. The current token is a digit $d$ and the system is in an algebraic
+state \strong{a}. This situation should not arise.\emph{ }We don't write
+$k2$; we write $2k$ \textendash{} number precedes variable. An error
+is generated.
+\item Row 9. The current token is a variable $v$ and the system is in an algebraic
+state \strong{a}. We append $v$ to the current extended variable, $Vv$,
+and also append $v$ to the current term, $Tv$. The system remains in
+an algebraic state \strong{a}.
+\end{itemize}
+To get things under way, an initial plus sign is put in $T$, $T=+$, and
+the system is set to the signed state \strong{s}. In order that \emph{all}
+terms of $\mathbf{E}$ are recorded in either $\mathbf{N}$ or $\mathbf{A}$,
+and all extended variables in $\mathbf{V}$, we append a plus sign to $\mathbf{E}$:
+$\mathbf{E}+$. Since an expression doesn't end with a trailing sign (we
+don't write, e.g., \textbf{\strong{\textbf{2m+k\textendash{}}}}), the
+process necessarily terminates either in row 4 or row 7 with the final
+term appended either to $\mathbf{N}$ or $\mathbf{A}$ and with $T=+$;
+if it terminates in row 7, the final extended variable is appended to $\mathbf{V}$,
+$\mathbf{V}V$ (and $V$ is emptied, although that hardly matters at this
+point).
+
+\subsubsection{An enlarged scheme?}
+
+Row 8 of our table generates an error: a digit following a variable. But
+having allowed products of variables like \texttt{mn} ($mn$), it is very
+tempting to allow \texttt{mm}, i.e. \texttt{m\textasciicircum{}2} ($m^{2}$)
+and, indeed, \texttt{m\textasciicircum{}n} ($m^{n}$). And if we allow
+\texttt{m\textasciicircum{}2} and \texttt{m\textasciicircum{}n}, how can
+we say no to subscripted forms like \texttt{k\_2} ($k_{2}$) and \texttt{k\_n}
+($k_{n}$)? Or, for that matter, \texttt{k\_+} ($k_{+}$) and \texttt{k\_-}
+($k_{-}$), and therefore \texttt{m\textasciicircum{}+} ($m^{+}$) and
+\texttt{m\textasciicircum{}-} ($m^{-}$)? And having extended the scheme
+in this way to exponents of \emph{variables}, surely it should also encompass
+exponents of \emph{numbers}, not only an obvious case like \texttt{2\textasciicircum{}2}
+($2^{2}$) but less obviously, yet still compellingly, \texttt{2\textasciicircum{}n}
+($2^{n}$)?
+
+Each of these extensions produces its own problems, but they can all be
+accommodated within an enlarged scheme, as can the use of parentheses (with
+numerical coefficients). Table~\ref{tab:Input-output-states} translates
+neatly into code. Rather than add these complications to \texttt{diffcoeff.sty},
+I have transferred the enlarged scheme to \texttt{diffcoeff.sty}'s `big
+brother', \texttt{diffcoeffx.sty}. The comparable table and routine resulting
+from it in \texttt{diffcoeffx.sty} is much bigger and less obvious than
+in \texttt{diffcoeff.sty}.
+
+\subsubsection{Some code details}
+
+In the code, the states are distinguished by integers as indicated in Table~\ref{tab:State-integers}.
+Tokens are assigned similar integer indexes, as indicated in the table.
+The relevant routine is \texttt{\textbackslash{}\_\_diffco\_get\_curr\_index:NN}.
+The actions embodied in Table~\ref{tab:Input-output-states} are encoded
+in \texttt{\textbackslash{}\_\_diffco\_compare\_states:NNNNN} which is
+a direct translation of the table into expl3 code.
+
+\begin{table}[h]
+\caption{Some code details}
+
+\noindent \centering{}\subfloat[\label{tab:State-integers}State integers]{\centering{}%
+\begin{tabular}{|c|c|c|}
+\hline
+State & Index & Tokens\tabularnewline
+\hline
+\hline
+signed & 0 & $+$ $-$\tabularnewline
+\hline
+numeric & 1 & 0123456789\tabularnewline
+\hline
+algebraic & 2 & variables\tabularnewline
+\hline
+\end{tabular}}~~~\subfloat[Translations]{
+\centering{}%
+\begin{tabular}{|c|c|}
+\hline
+Symbol & Code variable\tabularnewline
+\hline
+\hline
+$s$,$d$,$v$ & \texttt{\textbackslash{}l\_\_diffco\_curr\_tok\_tl}\tabularnewline
+\hline
+$T$ & \texttt{\textbackslash{}l\_\_diffco\_curr\_term\_tl}\tabularnewline
+\hline
+$V$ & \texttt{\textbackslash{}l\_\_diffco\_curr\_var\_tl}\tabularnewline
+\hline
+$\mathbf{N}$ & \texttt{\textbackslash{}l\_\_diffco\_nos\_tl}\tabularnewline
+\hline
+$\mathbf{A}$ & \texttt{\textbackslash{}l\_\_diffco\_alg\_tl}\tabularnewline
+\hline
+$\mathbf{V}$ & \texttt{\textbackslash{}l\_\_diffco\_vars\_prop}\tabularnewline
+\hline
+\end{tabular}}
+\end{table}
+A property list is used to store the variables, organised by size \textendash{}
+the number of tokens composing an extended variable. This enables the sorting
+by size needed for the determination of the overall coefficients of variables
+by removing them in turn from the algebraic part of the expression. That
+process is conducted in the routine \texttt{\textbackslash{}\_\_diffco\_eval\_vars:NN}.
+The variables are recorded only on the first scan through the order specification
+expression. This is the function of the boolean \texttt{\textbackslash{}l\_\_diffco\_vars\_noted\_bool}
+which is set in \texttt{\textbackslash{}\_\_diffco\_eval\_vars:NN}. Evaluation
+of the numeric parts of expressions is provided by \texttt{\textbackslash{}\_\_diffco\_eval\_nos:N}.
+
+\section{Summary of main commands}
+
+\subsubsection{Ordinary derivatives}
+
+The syntax is
+\begin{example}
+{\small{}\textbackslash{}diff{[}order{]}\{differentiand\}\{variable\}\{point
+of evaluation\}}{\small \par}
+\end{example}
+for the differentiand in the numerator, and where the final argument, although
+using braces, is an \emph{optional} argument. A starred form appends the
+differentiand:
+\begin{example}
+{\small{}\textbackslash{}diff{*}{[}order{]}\{differentiand\}\{variable\}\{point
+of evaluation\}}{\small \par}
+\end{example}
+No space must occur between the final optional argument, if it is used,
+and the second mandatory argument.
+
+There are also slash forms of both these commands:
+\begin{example}
+{\small{}\textbackslash{}diff{[}order{]}\{differentiand\}/\{variable\}\{point
+of evaluation\}}{\small \par}
+
+{\small{}\textbackslash{}diff{*}{[}order{]}\{differentiand\}/\{variable\}\{point
+of evaluation\}}{\small \par}
+\end{example}
+For the starred form, the differential coefficient is enclosed in parentheses.
+
+Precisely similar definitions, but without the slash forms, apply to \texttt{\textbackslash{}Diff},
+forming a differential coefficient with $D$, \texttt{\textbackslash{}diffd},
+forming a differential coefficient with $\delta$, and \texttt{\textbackslash{}Diffd},
+forming a differential coefficient with $\Delta$.
+
+\subsubsection{Partial derivatives}
+
+The syntax is
+\begin{example}
+{\small{}\textbackslash{}diffp{[}order spec.{]}{[}order override{]}\{differentiand\}\{variables\}\{constant
+variables\}}{\small \par}
+\end{example}
+for the differentiand in the numerator and where the final argument, although
+in braces, is an \emph{optional} argument. No space must occur between
+the final optional argument, if it is used, and the second mandatory argument.
+The \textbf{\strong{\textbf{order spec.}}} is a comma-separated list;
+the \strong{variables} is also a comma-separated list. A starred form
+appends the differentiand:
+\begin{example}
+{\small{}\textbackslash{}diffp{*}{[}order{]}{[}order~override{]}\{differentiand\}\{variables\}\{constant
+variables\}}{\small \par}
+\end{example}
+Slash forms exist also for these commands:
+\begin{example}
+{\small{}\textbackslash{}diffp{[}order spec.{]}{[}order override{]}\{differentiand\}/\{variables\}\{constant
+variables\}}{\small \par}
+
+{\small{}\textbackslash{}diffp{*}{[}order{]}{[}order~override{]}\{differentiand\}/\{variables\}\{constant
+variables\}}{\small \par}
+\end{example}
+For the starred version of the slash form, the differential coefficient
+is enclosed in parentheses.
+
+\subsubsection{Settings}
+\begin{example}
+\textbackslash{}diffset{[}option1=<value1>,option2=<value2>,...{]}
+\end{example}
+All numerical values should be integers (\texttt{diffcoeff} interprets
+this in units of mu, 1/18 of an em). To return all options to default values,
+write
+\begin{example}
+\textbackslash{}diffset
+\end{example}
+The options and defaults are
+\begin{description}
+\item [{\strong{roman = false}}] \textbf{\strong{\textbf{true}}} gives upright
+(roman) \textbf{\strong{\textbf{d}}} and \textbf{\strong{\textbf{D}}}
+\item [{\strong{d-delims = . |}}] delimiters which, when subscripted, indicate
+the point of evaluation of an ordinary derivative
+\item [{\strong{p-delims = ( )}}] delimiters which, when subscripted, indicate
+variables held constant for partial derivatives
+\item [{\strong{d-nudge = 0}}] adjustment for positioning the subscript to
+the preceding delimiters
+\item [{\strong{p-nudge = $-$6}}] adjustment for positioning the subscript
+to the preceding delimiters
+\item [{\strong{d-sep = 1}}] additional separation between the \textbf{$d$
+}and its superscript in the numerator of a second or higher order ordinary
+derivative
+\item [{\strong{p-sep = 1}}] additional separation between the \textbf{$\partial$}
+and its superscript in the numerator of a second or higher order partial
+derivative
+\item [{\strong{sep = 2}}] additional separation between the terms in the denominator
+of a mixed partial derivative
+\end{description}
+
+\end{document}