texlive[60300] Master/texmf-dist: mandi (22aug21)

commits+karl at tug.org commits+karl at tug.org
Sun Aug 22 21:58:29 CEST 2021


Revision: 60300
          http://tug.org/svn/texlive?view=revision&revision=60300
Author:   karl
Date:     2021-08-22 21:58:29 +0200 (Sun, 22 Aug 2021)
Log Message:
-----------
mandi (22aug21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/mandi/mandi.pdf
    trunk/Master/texmf-dist/doc/latex/mandi/vdemo.py
    trunk/Master/texmf-dist/source/latex/mandi/mandi.dtx
    trunk/Master/texmf-dist/source/latex/mandi/mandi.ins
    trunk/Master/texmf-dist/tex/latex/mandi/mandi.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/mandi/README.md
    trunk/Master/texmf-dist/source/latex/mandi/mandiexp.dtx
    trunk/Master/texmf-dist/source/latex/mandi/mandistudent.dtx
    trunk/Master/texmf-dist/tex/latex/mandi/mandiexp.sty
    trunk/Master/texmf-dist/tex/latex/mandi/mandistudent.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/mandi/README

Deleted: trunk/Master/texmf-dist/doc/latex/mandi/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/mandi/README	2021-08-22 10:46:35 UTC (rev 60299)
+++ trunk/Master/texmf-dist/doc/latex/mandi/README	2021-08-22 19:58:29 UTC (rev 60300)
@@ -1,10 +0,0 @@
-The mandi package  provides commands  for typesetting symbols, expressions, and
-quantities used in introductory physics and astronomy. Many of the commands are
-inspired by  Matter & Interactions  by Ruth Chabay  and Bruce Sherwood. Many of
-the astronomical commands were inspired by my own classroom needs. This package
-does not do computations. It only provides commands for typesetting.
-
-Run  mandi.ins through  pdfLaTeX to generate files mandi.sty  and vdemo.py. Run
-mandi.dtx through pdfLaTeX to generate mandi.pdf (documentation). I  assume   a
-TeX Live 2011 or later distribution is installed.
-

Added: trunk/Master/texmf-dist/doc/latex/mandi/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/mandi/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/mandi/README.md	2021-08-22 19:58:29 UTC (rev 60300)
@@ -0,0 +1,10 @@
+mandi provides commands for introductory physics. To install, open a command
+line  and  type  the  following,  repeating 2-4 until there are no warnings:
+
+  1. lualatex mandi.ins  (can also use latex)
+  2. lualatex mandi.dtx  (lualatex is required)
+  3. makeindex -s gind.ist -o mandi.ind mandi.idx
+  4. makeindex -s gglo.ist -o mandi.gls mandi.glo
+
+Move the *.sty files into a directory searched by TeX.
+The vdemo.py file is not needed.


Property changes on: trunk/Master/texmf-dist/doc/latex/mandi/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/mandi/mandi.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/mandi/vdemo.py
===================================================================
--- trunk/Master/texmf-dist/doc/latex/mandi/vdemo.py	2021-08-22 10:46:35 UTC (rev 60299)
+++ trunk/Master/texmf-dist/doc/latex/mandi/vdemo.py	2021-08-22 19:58:29 UTC (rev 60300)
@@ -1,25 +1,43 @@
-#
 from vpython import *
 
-G = 6.7e-11
+scene.width = 400
+scene.height = 760
+# constants and data
+g = 9.8       # m/s^2
+mball = 0.03  # kg
+Lo = 0.26     # m
+ks = 1.8      # N/m
+deltat = 0.01 # s
 
-# create objects
-giant = sphere(pos=vector(-1e11,0,0),radius=2e10,mass=2e30,color=color.red)
-giant.p = vector(0,0,-1e4) * giant.mass
-dwarf = sphere(pos=vector(1.5e11,0,0),radius=1e10,mass=1e30,color=color.yellow)
-dwarf.p = -giant.p
+# objects (origin is at ceiling)
+ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01,
+              width=0.2)
+ball = sphere(pos=vector(0,-0.3,0),radius=0.025,
+              color=color.orange)
+spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,
+               color=color.cyan,thickness=0.003,coils=40,
+               radius=0.010)
 
-for a in [giant,dwarf]:
-  a.orbit = curve(color=a.color,radius=2e9)
+# initial values
+pball = mball * vector(0,0,0)      # kg m/s
+Fgrav = mball * g * vector(0,-1,0) # N
+t = 0
 
-dt = 86400
-while 1:
-  rate(100)
-  dist = dwarf.pos - giant.pos
-  force = G * giant.mass * dwarf.mass * dist / mag(dist)**3
-  giant.p = giant.p + force*dt
-  dwarf.p = dwarf.p - force*dt
-  for a in [giant,dwarf]:
-    a.pos = a.pos + a.p/a.mass * dt
-    a.orbit.append(pos=a.pos)
+# improve the display
+scene.autoscale = False        # turn off automatic camera zoom
+scene.center = vector(0,-Lo,0) # move camera down
+scene.waitfor('click')         # wait for a mouse click
 
+# initial calculation loop
+# calculation loop
+while t < 10:
+    rate(100)
+    # we need the stretch
+    s = mag(ball.pos) - Lo
+    # we need the spring force
+    Fspring = ks * s * -norm(spring.axis)
+    Fnet = Fgrav + Fspring
+    pball = pball + Fnet * deltat
+    ball.pos = ball.pos + (pball / mball) * deltat
+    spring.axis = ball.pos - ceiling.pos
+    t = t + deltat

Modified: trunk/Master/texmf-dist/source/latex/mandi/mandi.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/mandi/mandi.dtx	2021-08-22 10:46:35 UTC (rev 60299)
+++ trunk/Master/texmf-dist/source/latex/mandi/mandi.dtx	2021-08-22 19:58:29 UTC (rev 60300)
@@ -1,11 +1,11 @@
 % \iffalse meta-comment
-% !TEX TS-program = dtxmk
+% !TEX program = lualatexmk
 %
-% Copyright (C) 2018 by Paul J. Heafner <heafnerj at gmail.com>
+% Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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
+% 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.
@@ -15,12 +15,16 @@
 % The Current Maintainer of this work is Paul J. Heafner.
 %
 % This work consists of the files mandi.dtx
+%                                 mandistudent.dtx
+%                                 mandiexp.dtx
 %                                 mandi.ins
 %                                 mandi.pdf
-%                                 README
+%                                 README.md
 %
 % and includes the derived files  mandi.sty
-%                                 vdemo.py.
+%                                 mandistudent.sty
+%                                 mandiexp.sty
+%                                 vdemo.py
 % ---------------------------------------------------------------------------
 %
 % \fi
@@ -31,38 +35,6 @@
 \iffalse
 %</internal>
 %
-%<*package>
-%%\ProvidesPackage{mandi}[2019/01/12 2.7.5 Macros for physics and astronomy]
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%</package>
-%
-%<*vdemo>
-#
-from vpython import *
-
-G = 6.7e-11
-
-# create objects
-giant = sphere(pos=vector(-1e11,0,0),radius=2e10,mass=2e30,color=color.red)
-giant.p = vector(0,0,-1e4) * giant.mass
-dwarf = sphere(pos=vector(1.5e11,0,0),radius=1e10,mass=1e30,color=color.yellow)
-dwarf.p = -giant.p
-
-for a in [giant,dwarf]:
-  a.orbit = curve(color=a.color,radius=2e9)
-
-dt = 86400
-while 1:
-  rate(100)
-  dist = dwarf.pos - giant.pos
-  force = G * giant.mass * dwarf.mass * dist / mag(dist)**3
-  giant.p = giant.p + force*dt
-  dwarf.p = dwarf.p - force*dt
-  for a in [giant,dwarf]:
-    a.pos = a.pos + a.p/a.mass * dt
-    a.orbit.append(pos=a.pos)
-%</vdemo>
-%
 %<*internal>
 \fi
 \def\nameofplainTeX{plain}
@@ -81,63 +53,96 @@
 %
 %<*driver>
 \ProvidesFile{mandi.dtx}
-%</driver>
-%
-%<*driver>
 \documentclass[10pt]{ltxdoc}
-\setlength{\marginparwidth}{0.50in}                 % placement of todonotes
-\usepackage{\jobname}                               % load mandi
-\usepackage{parskip}                                % no indents/space btwn paras
-\usepackage[textwidth=1.0cm]{todonotes}             % allow for todonotes
-\usepackage[left=0.75in,right=1.00in]{geometry}     % main documentation
-\usepackage{array,rotating,microtype}               % accessory packages
-\usepackage[listings,documentation]{tcolorbox}      % workhorse package
-\usepackage{anyfontsize}
-\usepackage{float}
-\usepackage{changepage} %%%%%%%%%%
-\usepackage{nameref}
-\hypersetup{colorlinks, linktoc=all}
-\tcbset{index german settings}
-\tcbset{color hyperlink=blue}
-\tcbset{doc head command={interior style={fill,left color=red!15!white}}}
-\tcbset{color command=red}
-\tcbset{doc head environment={interior style={fill,left color=red!15!white}}}
-\tcbset{color environment=red}
-\tcbset{lefthand ratio=0.70}
-\newcommandx{\ntodo}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}
-    {\todo[size=\footnotesize,fancyline,caption={#2},color=yellow!40]
-      {\begin{sideways}#2\end{sideways}}}
-    {\todo[size=\footnotesize,fancyline,caption={#1},color=yellow!40]
-      {\begin{sideways}#2\end{sideways}}}}
-\DisableCrossrefs                                  % index descriptions only
-\PageIndex                                         % index contains page numbers
-\CodelineNumbered                                  % number source lines
-\RecordChanges                                     % record changes
-\begin{document}                                   % main document
-  \DocInput{\jobname.dtx}
-  \newgeometry{left=1.00in,right=1.00in,top=1.00in,bottom=1.00in}
-  \PrintIndex
-  \restoregeometry
-\end{document}                                     % end main document
+\PassOptionsToPackage{listings,documentation}{tcolorbox} % prevent option clash
+\usepackage{\jobname}                                    % load mandi.sty
+\usepackage{mandistudent}                                % load mandistudent.sty
+\usepackage{mandiexp}                                    % load mandiexp.sty
+\usepackage{mwe}                                         % provides test images
+\usepackage[left = 1.00in,%                              %
+            right = 1.00in,%                             %
+            marginparwidth = 0.70in]{geometry}           % main documentation
+\usepackage[listings,documentation]{tcolorbox}           % workhorse package
+\tcbset{%                                                % tcolorbox options
+  index german settings,%
+  index colorize = false,%
+  lefthand ratio = 0.50,%
+  color hyperlink = blue,%
+  color command = purple,%
+  color environment = purple!65!black,%
+  doc left = 0.5in,%
+  doc marginnote = {colframe = blue!50!white,colback = blue!5!white},%
+  doc head command = {interior style = {fill,left color = blue!15!white}},%
+  doc head environment = {interior style = {fill,left color = blue!15!white}},%
+  doc head key = {interior style = {fill,left color = blue!15!white}},%
+  docexample/.style = {%
+      colback = gray!10!white,sidebyside,lefthand ratio = 0.5,center},%
+  listing style = vpython,%
+}%
+% Redefine tcolorbox's \tcbdocnew and \tcbdocupdated defaults.
+\renewcommand*{\tcbdocnew}[1]
+  {\textcolor{green!50!black}{\sffamily\bfseries N} #1}
+\renewcommand*{\tcbdocupdated}[1]
+  {\textcolor{blue!75!black}{\sffamily\bfseries U} #1}
+\hypersetup{colorlinks=true}                      % colored links; no borders
+
+%  See https://tex.stackexchange.com/q/156383/218142
+\newcommand*{\pkg}[1]{\textsf{#1}}                    % typeset package names
+\newcommand*{\mandi}{\textsf{mandi}}                  % typeset mandi
+\newcommand*{\mandistudent}{\textsf{mandistudent}}    % typeset mandistudent
+\newcommand*{\mandiexp}{\textsf{mandiexp}}            % typeset mandiexp
+\newcommand*{\GlowScript}{\texttt{GlowScript}}        % typeset GlowScript
+\newcommand*{\GlowScriptorg}{\texttt{GlowScript.org}} % typeset GlowScript.org
+\newcommand*{\VPython}{\texttt{VPython}}              % typeset VPython
+\newcommand*{\VPythonorg}{\texttt{VPython.org}}       % typeset VPython.org
+\newcommand*{\gsurl}{glowscript.org}                  % GlowScript URL
+\newcommand*{\vpurl}{vpython.org}                     % VPython URL
+\newcommand*{\lualatex}{Lua\LaTeX}                    % typeset LuaLaTeX
+
+% A customized internal hyperref tool to mimic that in tcolorbox.
+% In fact, I borrowed it from tcolorbox.
+\NewDocumentCommand{\setplace}{ s m }{%
+  \IfBooleanTF {#1}%
+    {\phantomsection}%
+    {}%
+  \label{#2}%    
+}%
+\NewDocumentCommand{\linktoplace}{ m m }{%
+  \hyperref[#1]{\texttt{#2}%
+    \ifnum\getpagerefnumber{#1}=\thepage\relax%
+    \else%
+      %\textsuperscript{\ding{213}\,{P.}\,\pageref*{#1}}%
+      % Changed with tcolorbox 4.51
+      \textsuperscript{{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\selectfont\char213}
+        \,{P.}\,\pageref*{#1}}%
+    \fi%
+  }%
+}%
+
+% We need a new command for in-line listings to prevent overfull boxes.
+% Anything in |...| will be in small plain text.
+% Previously used !...! but that conflicts with colors.
+\lstMakeShortInline[basicstyle=\normalfont\ttfamily\small]|
+
+\DisableCrossrefs                 % index descriptions only
+\PageIndex                        % index refers to page numbers
+\CodelineNumbered                 % number source lines
+\RecordChanges                    % record changes
+\begin{document}                  % main document
+  \DocInput{\jobname.dtx}         %
+  \setcounter{CodelineNo}{0}      % reset line numbers if desired 
+  \DocInput{\jobname student.dtx} %
+  \setcounter{CodelineNo}{0}      % reset line numbers if desired 
+  \DocInput{\jobname exp.dtx}     %
+  \PrintIndex                     %
+\end{document}                    % end main document
 %</driver>
 % \fi
 %
-%  \newcommand*{\pkgname}[1]{\texttt{#1}}
-%  \newcommand*{\mandi}{\pkgname{mandi}}
-%  \newcommand*{\mi}{\textit{Matter \& Interactions}}
-%  \hyphenation{Matter Interactions}
-%  \newcommand*{\opt}[1]{\textsf{\textbf{#1}}}
-%  \newcommand*{\baseunits}{\emph{baseunits}}
-%  \newcommand*{\drvdunits}{\emph{drvdunits}}
-%  \newcommand*{\altnunits}{\emph{altnunits}}
-%
-%  \IndexPrologue{\section{Index}Page numbers refer to page where the 
-%    corresponding entry is described. Not every command defined in the 
-%    package is indexed. There may be commands similar to indexed commands 
-%    described in relevant parts of the documentation.}
+% \IndexPrologue{\section{Index}Page numbers refer to page where the 
+%   corresponding entry is documented and/or referenced.}
 % 
-% \CheckSum{6558}
+% \CheckSum{2171}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -155,940 +160,190 @@
 %   Grave accent  \`     Left brace    \{     Vertical bar  \|
 %   Right brace   \}     Tilde         \~}
 %
-% \providecommand*{\url}{\texttt}
-% \GetFileInfo{\jobname.sty}
-% \title{The \textsf{mandi} package}
-% \author{Paul J. Heafner
-%   (\href{mailto:heafnerj at gmail.com?subject=[Heafner]\%20mandi}
-%   {\nolinkurl{heafnerj at gmail.com}})}
-% ^^A \date{Version \fileversion~dated \filedate}
-% \date{Version \mandiversion}
+% \title{The \href{https://ctan.org/pkg/mandi}{\mandi} Bundle}
+% \author{^^A
+%    Paul J. Heafner\thanks{^^A
+%      Email: \href{mailto:heafnerj at gmail.com?subject=[Heafner]\%20mandi}
+%      {heafnerj at gmail.com}^^A
+%    }^^A
+% }^^A
+% \date{\today}
 %
 % \newgeometry{left=1.0in,right=1.0in,top=4.0in}
-% \pagenumbering{gobble}
-% \hypersetup{pageanchor=false}
-% \begin{titlepage}
 %   \maketitle
-% \end{titlepage}
-% \hypersetup{pageanchor=true}
-% \pagenumbering{arabic}
+%   \thispagestyle{empty}
+%   \centerline{\mandi\ version \mandiversion}
+%   \centerline{\mandistudent\ version \mandistudentversion}
+%   \centerline{\mandiexp\ version \mandiexpversion}
+%   ^^A\centerline{\textbf{PLEASE DO NOT DISTRIBUTE THIS BUILD.}}
 % \restoregeometry
 %
-% ^^A \centerline{\textbf{PLEASE DO NOT DISTRIBUTE THIS VERSION.}}
-%
-% \newgeometry{left=1.0in,right=1.0in,top=1.0in,bottom=1.0in}
+% \newgeometry{left=1.0in,right=1.0in,top=0.5in,bottom=1.0in}
 %   \tableofcontents
 %   \newpage
 %   \phantomsection
+%   \addcontentsline{toc}{section}{Acknowledgements}
+%   \section*{Acknowledgements}
+%   To all of the students who have learned \LaTeX\ in my introductory
+%   physics courses over the years, I say a heartfelt thank you. You
+%   have contributed directly to the state of this software and to its
+%   use in introductory physics courses and to innovating how physics
+%   is taught.
+%
+%   I also acknowledge the \LaTeX\ developers who inhabit the
+%   \href{https://tex.stackexchange.com/}{\TeX\ StackExchange} site. 
+%   Entering a new culture is daunting for anyone, especially for
+%   newcomers. The \LaTeX\ development culture is no exception. We all
+%   share a passion for creating beautiful documents and I have learned
+%   much over the past year that improved my ability to do just that.
+%   There are too many of you to list individually, and I would surely 
+%   accidentally omit some were I to try. Collectively, I thank you all
+%   for your patience and advice.
+%   \newpage
+%   \phantomsection
 %   \addcontentsline{toc}{section}{Change History}
 %   \PrintChanges
 %   \newpage
 %   \phantomsection
-%   \addcontentsline{toc}{section}{Program Listings}
-%   \lstlistoflistings
-%   \newpage
+%   \addcontentsline{toc}{section}{List of \texttt{GlowScript} Programs}
+%   \listofglowscriptprograms
+%   \phantomsection
+%   \addcontentsline{toc}{section}{List of \texttt{VPython} Programs}
+%   \listofvpythonprograms
+%   \phantomsection
+%   \addcontentsline{toc}{section}{List of Figures}
+%   \listoffigures
 % \restoregeometry
 %
-%\changes{v2.4.0}{2014/12/16}{Made option names consistent with default behavior.} 
-%\changes{v2.4.0}{2014/12/16}{Added option for boldface vector kernels.}
-%\changes{v2.4.0}{2014/12/16}{Added option for approximate values of constants.}
-%\changes{v2.4.0}{2014/12/16}{Added magnetic charge.}
-%\changes{v2.4.0}{2014/12/16}{\cs{vpythonfile} now uses a uniform style.}
-%\changes{v2.4.0}{2014/12/16}{Added table of all predefined quantities with units.}
-%\changes{v2.4.0}{2014/12/16}{Added table of all predefined constants 
-%  with their symbols and units.}
-%\changes{v2.4.0}{2014/12/16}{Added Maxwell's equations in both integral 
-%  and differential forms, both with and without magnetic monopoles.}
-%\changes{v2.4.0}{2014/12/16}{Added Lorentz force, with and 
-%  without magnetic monopoles.}
-%\changes{v2.4.0}{2014/12/16}{\cs{vpythonline} now uses a uniform style.}
-%\changes{v2.4.0}{2014/12/16}{\texttt{vpythonblock} now uses a uniform style.}
-%\changes{v2.4.0}{2014/12/17}{Now coexists with the \pkgname{commath} package.}
-%\changes{v2.4.0}{2014/12/19}{Removed compatibility check for the \pkgname{physymb} 
-%  package.}
-%\changes{v2.4.1}{2015/02/11}{\texttt{vpythonblock} now accepts an optional caption.}
-%\changes{v2.4.1}{2015/02/11}{\cs{vpythonfile} now accepts an optional caption.}
-%\changes{v2.4.1}{2015/02/14}{Commands that use \pkgname{mdframed} 
-%  will not break over pages.}
-%\changes{v2.4.1}{2015/02/20}{Added \cs{scompsCvect} for superscripted 
-%  components.}
-%\changes{v2.4.1}{2015/02/20}{Added \cs{scompsRvect} for superscripted 
-%  components.}
-%\changes{v2.4.1}{2015/01/23}{Added more VPython keywords.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{smallanswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{mediumanswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{largeanswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{largeranswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{hugeanswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{hugeranswerform}.}
-%\changes{v2.4.2}{2015/06/08}{Added \cs{fullpageanswerform}.}
-%\changes{v2.5.0}{2016/01/26}{Added explicit mention of VPython and GlowScript.}
-%\changes{v2.5.0}{2016/01/26}{Added GlowScript keywords.}
-%\changes{v2.5.0}{2016/01/26}{Added example showing how to handle long
-%  lines and suppressing numbers on broken lines.}
-%\changes{v2.5.0}{2016/01/26}{\cs{vpythonfile} now begins listings on a new page.}
-%\changes{v2.5.0}{2015/09/13}{Removed autosized parentheses in math mode.}
-%\changes{v2.5.0}{2015/09/13}{Removed compatibility check for the \pkgname{commath}
-%  package.}
-%\changes{v2.5.0}{2015/09/13}{Renamed \cs{abs} to \cs{absof}.}
-%\changes{v2.5.0}{2015/09/13}{\cs{absof} now shows a placeholder for a 
-%  blank argument.}
-%\changes{v2.5.0}{2015/09/13}{\cs{magof} now shows a placeholder for a 
-%  blank argument.}
-%\changes{v2.5.0}{2015/09/13}{\cs{dimsof} now shows a placeholder for a 
-%  blank argument.}
-%\changes{v2.5.0}{2015/09/13}{\cs{unitsof} now shows a placeholder for a 
-%  blank argument.}
-%\changes{v2.5.0}{2015/09/13}{Added \cs{inparens} for grouping with 
-%  parentheses.}
-%\changes{v2.5.0}{2015/09/13}{Changed behavior of \cs{sneakyone}.}
-%\changes{v2.5.0}{2015/10/08}{Added \cs{eulerlagrange} command to 
-%  typeset the Euler-Lagrange equation.}
-%\changes{v2.5.0}{2015/10/08}{Added \cs{Lagr} to get symbol for 
-%  Lagrangian.}
-%\changes{v2.5.0}{2015/10/08}{Added color to \cs{checkpoint}.}
-%\changes{v2.5.0}{2015/10/08}{Added \cs{qed} symbol.}
-%\changes{v2.5.0}{2015/10/09}{Added \cs{ueuzero} and friends.}
-%\changes{v2.5.0}{2015/10/09}{Added commands for Dirac notation.}
-%\changes{v2.5.0}{2015/10/09}{Documented precise and approximate 
-%  constant values.}
-%\changes{v2.5.0}{2015/10/14}{\cs{miderivation} now prints line numbers.}
-%\changes{v2.5.0}{2015/10/14}{Added \cs{miderivation*} to suppress line 
-%  numbers.}
-%\changes{v2.5.0}{2015/10/14}{\cs{bwderivation} now shows line numbers.}
-%\changes{v2.5.0}{2015/10/14}{Added \cs{bwderivation*} to suppress line 
-%  numbers.}
-%\changes{v2.5.0}{2015/10/14}{\cs{mysolution} now prints line numbers.}
-%\changes{v2.5.0}{2015/10/14}{Added \cs{mysolution*} to suppress line numbers.}
-%\changes{v2.5.0}{2015/10/16}{Added \cs{taigrad} to get Tai's gradient symbol.}
-%\changes{v2.5.0}{2015/10/16}{Added \cs{taisvec} to get Tai's symbolic vector.}
-%\changes{v2.5.0}{2015/10/16}{Added \cs{taigrad} to get Tai's divergence symbol.}
-%\changes{v2.5.0}{2015/10/16}{Added \cs{taigrad} to get Tai's curl symbol.}
-%\changes{v2.5.0}{2015/10/20}{Added \cs{scompsdirvect}.}
-%\changes{v2.5.0}{2015/10/20}{Added \cs{compdirvect}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{componentalong}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{expcomponentalong}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{ucomponentalong}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{projectiononto}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{expprojectiononto}.}
-%\changes{v2.5.0}{2015/11/29}{Added \cs{uprojectiononto}.}
-%\changes{v2.5.0}{2015/11/29}{Fixed parentheses bug in \cs{magvectncomps}.}
-%\changes{v2.5.0}{2015/12/27}{Added option for radians in certain angular 
-%  quantities.}
-%\changes{v2.5.1}{2016/03/13}{Fixed errors in build for uploading to CTAN.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectormomentum}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectordisplacement}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorvelocityc}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorvelocity}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectoracceleration}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorgravitationalfield}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorimpulse}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorforce}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorangularvelocity}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorangularacceleration}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorangularmomentum}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorangularimpulse}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectortorque}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorwavenumber}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorelectricfield}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorelectricdipolemoment}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectormagneticfield}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectormagneticdipolemoment}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorcurrentdensity}.}
-%\changes{v2.6.0}{2016/04/30}{Added \cs{vectorcmagneticfield}.}
-%\changes{v2.6.0}{2016/05/02}{Created a student guide.}
-%\changes{v2.6.0}{2016/05/02}{Changed placeholder to underscore.}
-%\changes{v2.6.0}{2016/05/02}{Changed placeholder to underscore.}
-%\changes{v2.6.0}{2016/05/02}{Changed placeholder to underscore.}
-%\changes{v2.6.0}{2016/05/02}{Changed placeholder to underscore.}
-%\changes{v2.6.0}{2016/05/02}{Changed placeholder to underscore.}
-%\changes{v2.6.0}{2016/05/02}{Added \cs{problem} environment.}
-%\changes{v2.6.0}{2016/05/02}{Added \cs{reason}.}
-%\changes{v2.6.0}{2016/05/03}{Added \cs{energyflux}.}
-%\changes{v2.6.0}{2016/05/03}{Added \cs{momentumflux}.}
-%\changes{v2.6.0}{2016/05/03}{Added \cs{poyntingvector}.}
-%\changes{v2.6.0}{2016/05/03}{Added many new commands that format expressions
-%  with placeholders for numerical quantities.}
-%\changes{v2.6.0}{2016/05/10}{Replaced \cs{evalfromto} with \cs{evaluatedfromto}.}
-%\changes{v2.6.0}{2016/05/10}{Replaced \cs{evalat} with new \cs{evaluatedat}.}
-%\changes{v2.6.0}{2016/05/10}{Removed deprecated commands.}
-%\changes{v2.6.0}{2016/05/11}{Added \cs{direction}.}
-%\changes{v2.6.0}{2016/05/11}{Added \cs{vectordirection}.}
-%\changes{v2.6.0}{2016/05/11}{Added \cs{vectorenergyflux}.}
-%\changes{v2.6.0}{2016/05/11}{Added \cs{vectormomentumflux}.}
-%\changes{v2.6.0}{2016/05/12}{Added \cs{glowscriptline}.}
-%\changes{v2.6.0}{2016/05/12}{Added \texttt{glowscriptblock}.}
-%\changes{v2.6.0}{2016/05/12}{Added \cs{glowscriptfile}.}
-%\changes{v2.6.0}{2016/05/16}{Extensive revisions to documentation.}
-%\changes{v2.6.0}{2016/05/18}{Option \opt{singleabsbars} renamed to 
-%  \opt{singlemagbars}.}
-%\changes{v2.6.0}{2016/05/20}{Documented \cs{chkquantity}.}
-%\changes{v2.6.0}{2016/05/20}{Documented \cs{chkconstant}.}
-%\changes{v2.6.0}{2016/05/20}{Documented \cs{mandiversion}.}
-%\changes{v2.6.0}{2016/05/23}{Loads the \pkgname{tensor} package for future use.}
-%\changes{v2.6.1}{2016/06/30}{Fixed \cs{mandiversion} so it displays correctly
-%  in math mode.}
-%\changes{v2.6.1}{2016/06/30}{Fixed errors in Student Quick Guide documentation.}
-%\changes{v2.6.2}{2016/07/31}{Made minor changes to the documentation.}
-%\changes{v2.6.3}{2016/09/02}{Added \cs{mistandard} for standards.}
-%\changes{v2.6.3}{2016/09/02}{Added \cs{bwstandard} for standards.}
-%\changes{v2.6.3}{2016/09/07}{Added \cs{infeetpersecond}.}
-%\changes{v2.6.3}{2016/09/08}{Added scaling options to \cs{image}.}
-%\changes{v2.6.3}{2016/09/08}{Tweaked \cs{image} to work in documentation.}
-%\changes{v2.6.3}{2016/09/08}{Added \cs{infeet}.}
-%\changes{v2.6.3}{2016/09/08}{Added \cs{infeetpersecondsquared}.}
-%\changes{v2.6.3}{2016/09/11}{Loads the \pkgname{float} package for \cs{image}.}
-%\changes{v2.7.0}{2016/12/16}{Changed \cs{vectdotvect} to use \cs{cdot}.}
-%\changes{v2.7.0}{2016/12/16}{Added \cs{vectDotvect} to use \cs{bullet}.}
-%\changes{v2.7.0}{2017/02/02}{Made numerous internal changes to eliminate warnings.}
-%\changes{v2.7.0}{2017/02/02}{Added blank output lines around mandi messages
-%  during compilation.}
-%\changes{v2.7.0}{2017/02/02}{Changed first line of VPython programs to match 
-%  Jupyter Notebook syntax.}
-%\changes{v2.7.0}{2017/02/02}{Changed \cs{reason} to use minipage.}
-%\changes{v2.7.0}{2017/02/02}{Added fourth argument to \cs{image} for a label.}
-%\changes{v2.7.0}{2017/03/17}{Added \cs{dslashx} for inexact differentials.}
-%\changes{v2.7.0}{2017/04/13}{Added \cs{factorvect}.}
-%\changes{v2.7.0}{2017/04/13}{Added \cs{circulation}.}
-%\changes{v2.7.0}{2017/09/01}{Added better looking parallel symbol.}
-%\changes{v2.7.0}{2017/09/01}{Added an alias for the perpendicular symbol.}
-%\changes{v2.7.0}{2018/01/11}{Added instructions for Overleaf users.}
-%\changes{v2.7.2}{2018/03/14}{Changed \emph{tradunits} to \opt{altnunits}.}
-%\changes{v2.7.2}{2018/03/16}{Documented the \cs{redefinephysicsquantity} command.}
-%\changes{v2.7.2}{2018/03/16}{Documented the \cs{redefinephysicsconstant} command.}
-%\changes{v2.7.2}{2018/03/18}{Changed \cs{lorentz} to \cs{lorentzfactor}.}
-%\changes{v2.7.2}{2018/03/19}{Made \opt{drvdunits} the default.}
-%\changes{v2.7.2}{2018/03/19}{Adjusted units of some predefined quantities and 
-%  constants.}
-%\changes{v2.7.2}{2018/03/20}{Added expanded instructions for Overleaf users.}
-%\changes{v2.7.3}{2018/04/06}{Reformatted source code to allow for better
-%  documentation of changes.}
-%\changes{v2.7.3}{2018/11/10}{Added \cs{emptyunit}. Thanks to Dr. Brian Lane
-%  for suggesting this implementation.}
-%\changes{v2.7.3}{2018/11/11}{Added \cs{anglebetween}.}
-%\changes{v2.7.3}{2018/11/13}{Made variable in series expansions a parameter
-%  with \(x\) as the default.}
-%\changes{v2.7.3}{2018/12/27}{Modified \cs{vpythonfile} and \cs{vpythonblock} to
-%  include both captions and labels.}
-%\changes{v2.7.4}{2019/01/12}{Revised Overleaf instructions to reflect new version.}
-%\changes{v.2.7.5}{2019/01/12}{Revised documentation for Overleaf yet again.}
+% \changes{v3.0.0}{2021-08-21}{\mandi\ initial release}
+% \changes{v3.0.0}{2021-08-21}{\mandistudent\ initial release}
+% \changes{v3.0.0}{2021-08-21}{\mandiexp\ initial release}
 %
 % \section{Introduction}
-% This package provides a collection of commands useful in introductory physics 
-% and astronomy. The underlying philosophy is that the user, potentially an
-% introductory student, should just type the name of a physical quantity, with a
-% numerical value if needed, without having to think about the units. \mandi\
-% will typeset everything correctly. For symbolic quantities, the user should
-% type only what is necessary to get the desired result. What one types should
-% correspond as closely as possible to what one thinks when writing. The package 
-% name derives from \mi
-% \footnote{See the \mi\ home page at \url{https://www.matterandinteractions.org/}
-% for more information about this innovative introductory calculus-based physics
-% curriculum.} by Ruth Chabay and Bruce Sherwood. The package certainly is rather
-% tightly tied to that textbook but can be used for typesetting any document that
-% requires consistent physics notation. With \mandi\ many complicated expressions
-% can be typeset with just a single command. Great thought has been given to 
-% command names and I hope users find the conventions logical and easy to remember.
 %
-% There are other underlying philosophies and goals embedded within \mandi, 
-% all of which are summarized here. These philosophies are
-% \begin{itemize}
-%   \item to employ a \emph{type what you think} model for remembering commands,
-%   \item to relieve the user of having to explicitly worry about typesetting SI 
-%     units,
-%   \item to enforce certain concepts that are too frequently merged, such as the 
-%     distinction between a vector quantity and its magnitude (e.g.\ we often use 
-%     the same name for both),
-%   \item to enforce consistent terminology in the naming of quantities, with names
-%     that are both meaningful to introductory students and accurate 
-%     (e.g.\ \emph{duration} vs.\ \emph{time}), and
-%   \item to enforce consistent notation, especially for vector quantities.
-% \end{itemize}
+% The \mandi \footnote{The bundle name can be pronounced either with two 
+% syllables, to rhyme with \emph{candy}, or with three syllables, as 
+% \emph{M and I}.} bundle consists of three packages: \mandi, \mandistudent,
+% and \mandiexp. Package \linktoplace{sec:mandipkg}{mandi} provides the
+% core functionality, namely correctly typesetting physical quantities
+% and constants with their correct SI units as either scalars or vectors,
+% depending on which is appropriate. Package 
+% \linktoplace{sec:mandistudentpkg}{mandistudent} provides other typesetting
+% capability appropriate for written problem solutions. Finally, package
+% \linktoplace{sec:mandiexppkg}{mandiexp} provides commands for typesetting
+% expressions from \emph{Matter \& Interactions}\footnote{See 
+% \href{https://www.wiley.com/en-us/Matter+and+Interactions%2C+4th+Edition-p-9781118875865}
+% {\emph{Matter \& Interactions}} and
+% \url{https://matterandinteractions.org/} for details.}
 %
-% I hope that using \mandi\ will cause users to form good habits that 
-% benefit physics students.
+% \mandi\ has been completely rewritten from the ground up. It had gotten too
+% large and clumsy to use and maintain. It (unknowingly) used deprecated
+% packages. It had too many arcane ``features'' that were never used. It 
+% did not support Unicode. It was not compatible with modern engines, like
+% \lualatex. It did not have a key-value interface. Options could not be
+% changed on the fly within a document. In short, it was a mess. I hope 
+% this rewrite addresses all of the bad things and forms a better code base 
+% for maintenance, useability, and future improvements.
 %
-% \section{Building From Source}
-% I am assuming the user will use pdf\LaTeX, which creates PDF files as output, 
-% to build the documentation. I have not tested the build with with standard \LaTeX,
-% which creates DVI files.
-%
-% The latest useable version is always found on the \mandi\ home page at
-% \url{https://tensortime.sticksandshadows.com/mandi} and note that the version there
-% may not yet have been pushed to \href{https://ctan.org}{CTAN}.
+% So many changes have been made that I think the best approach for former,
+% as well as new, users is to treat this as a brand new experience. I think
+% the most important thing to keep in mind is that I assume users, 
+% expecially new users, will have a relatively recent TeX distribution 
+% (like TeX Live) that includes a recently updated \LaTeX\ kernel. If users
+% report that this is a major problem, I can provide some degree of
+% backwards compatibility.
 % 
 % \newpage
-% \section{Loading the Package}\label{LoadingthePackage}
-% To load \mandi\ with its default options, simply put the line |\usepackage{mandi}| 
-% in your document's preamble. To use the package's available options, put the line 
-% |\usepackage|\textbf{[}\opt{options}\textbf{]}|{mandi}| in your document's 
-% preamble. There are eight available options, all of which are described below.
+% \section{Student/Instructor Quick Guide}
 %
-% \begin{itemize}
-%   \item \opt{boldvectors} gives bold letters for the kernels of vector names. 
-%     No arrows are used above the kernel.
-%   \item \opt{romanvectors} gives Roman letters for the kernels of vectors names. 
-%     An arrow appears over the kernel.
-% \end{itemize}
+% Use \refCom{vec} to typeset the symbol for a vector. Use \refCom{magnitude}
+% to typeset the symbol for a vector's magnitude. Use \refCom{dirvec} to
+% typeset the symbol for a vector's direction. Use \refCom{changein} to
+% typeset the symbol for the change in a vector or scalar. Use 
+% \refCom{zerovec} to typeset the zero vector. Use \refCom{timestento} to
+% typeset scientific notation.
 %
-% If neither \opt{boldvectors} nor \opt{romanvectors} is specified (the
-% default), vectors are displayed with italic letters for the kernels of vector
-% names and an arrow appears over the kernel.
-%
-% \begin{itemize} 
-%   \item \opt{singlemagbars} gives single bars in symbols for vector magnitudes
-%     instead of the default double bars. Double bars may be more familiar to 
-%     students from their calculus courses. 
-%   \item \opt{approxconsts} gives approximate values of constants to one or two 
-%     significant figures, depending on how they appear in \mi, instead of the 
-%     default precise values.
-%   \item \opt{useradians} gives radians in the units of angular momentum,
-%     angular impulse, and torque. The default is to not use radians in the units 
-%     of these quantities.
-%   \item \opt{baseunits} causes all units to be displayed in \baseunits\ form, with
-%     SI base units. No solidi (slashes) are used. Positive and negative exponents 
-%     are used to denote powers of various base units.
-%   \item \opt{drvdunits} causes all units to be displayed, when possible, in
-%     \drvdunits\ form, with SI derived units. Students may already be familiar with
-%     many of these derived units.
-%   \item \opt{altnunits} causes all units to be displayed in \altnunits\ form,
-%     which is intended to allow for custom units when desired. This is sometimes
-%     helpful for enhancing conceptual understanding in some situations.
-% \end{itemize}
-%
-% If neither \opt{baseunits} nor \opt{altnunits} is specified, units are 
-% displayed in \drvdunits\ form, which is typically the way they would usually 
-% appear in textbooks. Units in this form may hide the underlying physical 
-% meaning or indeed may do precisely the opposite and enhance conceptual 
-% understanding. In this document, the default is to use
-% \ifthenelse{\boolean{@optbaseunits}}
-%   {base}
-%   {\ifthenelse{\boolean{@optaltnunits}}
-%     {alternate}
-%     {derived}}
-% units. As you will see later, there are ways to override these options either
-% temporarily or permanently.
-%
-% \mandi\ coexists with the \pkgname{siunitx} package. While there is some 
-% functional overlap between the two packages, \mandi\ is completely independent of 
-% \pkgname{siunitx}. The two are designed for different purposes and probably also
-% for different audiences, but can be used together if desired. \mandi\ coexists with 
-% the \pkgname{commath} package. There is no longer a conflict because \mandi's 
-% |\abs| command has been renamed to \refCom{absof}. \mandi\ no longer checks for the 
-% presence of the \pkgname{physymb} package. That package now incorporates \mandi\ 
-% dependencies, and the two are completely compatible as far as I know.
-%
-%\mandi\ loads the \pkgname{tensor} for likely future use. See that package's 
-% documentation for its commands and how to use them. There are no known conflicts
-% between \mandi\ and \pkgname{tensor}.
-%
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{mandiversion}{}
-Gives the current package version number and build date.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\mandiversion
+\begin{dispExample*}{lefthand ratio=0.80}
+  \( \vec{p} \) or \( \vec*{p} \)                                         \\
+  \( \vec{p}_{\symup{final}} \) or \( \vec*{p}_{\symup{final}} \)         \\
+  \( \magnitude{\vec{p}} \) or \( \magnitude*{\vec{p}_{\symup{final}}} \) \\
+  \( \dirvec{p} \) or \( \dirvec*{p} \)                                   \\
+  \( \changein \vec{p} \) or \( \changein t \)                            \\
+  \( \zerovec \) or \( \zerovec* \)                                       \\
+  \( 6.02\timestento{-19} \)
 \end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-% \newpage
-% \section{Overleaf Users}
-% \href{https://www.overleaf.com}{Overleaf.com} is an online \LaTeX\ environment 
-% with widespread use. It uses a full \TeX/\LaTeX\ installation but may not always 
-% have the latest version of every package installed (for stability reasons).
-% Sometimes packages are updated more frequently than the large distributions are 
-% updated. If you want to always be sure you're using the latest version of \mandi\ 
-% make sure the files \pkgname{mandi.sty} and \pkgname{mandi.pdf} are in your 
-% Overleaf project folder. The package can now be used in your documents.
+% Use a \linktoplace{ssec:physquants}{physical quantity's} name to typeset 
+% a magnitude and that quantity's units. If the quantity is a vector, you 
+% can add |vector| either to the beginning or the end of the quantity's 
+% name. For example, if you want momentum, use \refCom{momentum} and 
+% its variants.
 %
-% If you are a student, here are detailed instructions on how to use \mandi\
-% in your Overleaf project. 
-% \begin{enumerate}
-%   \item Direct your browser to 
-%   \href{https://tensortime.sticksandshadows.com/mandi}
-%   {https://tensortime.sticksandshadows.com/mandi} and fetch the file named
-%   \texttt{overleaf-template.zip}. Download it and open the zip file into a
-%   temporary folder on your computer.
-%   \item Go to the \href{https://www.overleaf.com}{Overleaf.com} website and 
-%   create a free account and then sign into that account.
-%   \item Upon signing in, you should see a list of your current projects. Look
-%   for the New Project button on the left and click on it. Click on Blank Project.
-%   You will be asked to name your new project. Choose this name very carefully
-%   because it will also be the name of the compiled PDF file generated by compiling
-%   the project's main file. 
-%   \item Once named, your new project will be created and you will be taken to its
-%   new folder. You will see a file named \texttt{main.tex}. For now, just leave it 
-%   alone.
-%   \item Click the user interface element resembling an upward arrow attached to
-%   a tray (a popup labeled \texttt{Upload} appears when you hover over it) to open 
-%   the file upload dialog. Select all the files (there should be six) in the 
-%   temporary overleaf-template folder you previously created. Upload them 
-%   into your project's folder. You can now delete the \texttt{main.tex} file.
-%   \item Click on the word \texttt{Menu} in the upper left corner of the window, 
-%   then scroll down and look for the Main document setting. Make sure 
-%   \texttt{NnnnnnnnCCPxx.tex} is selected as the project's main file.
-%   \item From now on, to start a new project, begin by copying this master
-%   project template and creating a new name for the new project. This way,
-%   you will build a neatly organized collection of logically named projects
-%   and the original Master Template will never have to be modified (but see
-%   next step) and every project will have \mandi\ available for use.
-%   \item If \mandi\ is updated by the developer, all you need to do is make
-%   sure the new \texttt{mandi.sty} and \texttt{mandi.pdf} files, and perhaps
-%   a few others if the developer has modified them, are uploaded to your project
-%   folders.
-%   \item You can now delete the \texttt{overleaf-template.zip} file and the
-%   temporary folder you created on your computer. 
-% \end{enumerate}
-% 
-% \newpage
-% \section{Student Quick Guide}
-% Use \refCom{vect} to put an arrow over a symbol to make it the symbol for a vector.
-% Typing |\vect{p}| gives \vect{p}.
-%
-% Use \refCom{vectsub} if the symbol needs a subscript. Typing |\vectsub{p}{ball}|
-% gives \vectsub{p}{ball}.
-%
-% Use \refCom{magvect} or \refCom{magvectsub} to get the symbol for a vector's
-% magnitude. Typing |\magvect{p}| gives \magvect{p}. Typing |\magvectsub{p}{ball}|  
-% gives \magvectsub{p}{ball}.
-%
-% Use \refCom{dirvect} or \refCom{dirvectsub} to get the symbol for a vector's
-% direction. Typing |\dirvect{p}| or |\dirvectsub{p}{ball}| gives \dirvect{p} or
-% \dirvectsub{p}{ball}.
-%
-% Use \refCom{compvect} to write the symbol for one of a vector's coordinate
-% components. Typing |\compvect{v}{z}| gives \compvect{v}{z}.
-%
-% Use a \hyperlink{target2}{physical quantity's} name followed by a numerical value 
-% in curly braces to typeset that numerical value and an appropriate 
-% \hyperlink{target1}{SI unit}.
-% Using \refCom{velocity} by typing |\velocity{2.5}| gives
-% \velocity{2.5}. Use \refCom{newphysicsquantity} to define any new quantity 
-% you need.
-%
-% Many \hyperlink{target3}{physical constants} are defined in \mandi\ and are
-% well documented in the corresponding section.
-%
-% Use \refCom{mivector} to write the coordinate representation of a vector.
-% Typing |\mivector{3,2,-4}| gives \mivector{3,2,-4}. Typing |\mivector{a,b,c}|
-% gives \mivector{a,b,c}.
-%
-% Use \refCom{direction} to write the coordinate representation of a unit vector,
-% which some authors call a direction. Typing |\direction{1,0,0}| gives 
-% \direction{1,0,0}. Directions have no units.
-%
-% To specify a vector quantity in terms of its coordinate components, you have two
-% options. One way is to type the vector quantity's name as above, but use
-% \refCom{mivector} to specify a list of three components separated by commas in
-% curly braces as in |\velocity{\mivector{3,2,-4}}| to get 
-% \velocity{\mivector{3,2,-4}}. Another way is to prefix |\vector| to the quantity's
-% name (with no leading backslash) and specify a list of three components separated 
-% by commas in curly braces as in |\vectorvelocity{3,2,-4}| to get 
-% \vectorvelocity{3,2,-4}. The output is the same either way.
-%
-% Use \refCom{timestento} or \refCom{xtento} to get scientific notation.
-% Typing either |2.54\timestento{-4}| or |2.54\xtento{-4}| gives 2.54\timestento{-4}.
-%
-% Use \refCom{inparens} to surround quantities with nicely formatted parentheses.
-% Typing |\inparens{x^2 + 4}| gives \inparens{x^2 + 4}.
-%
-% Use \refCom{define} to create a variable that can be used in an intermediate
-% step in a solution. This is discussed \hyperlink{target5}{later in this section}.
-%
-% To typeset a matrix in parentheses, use the \cs{pmatrix} environment by putting 
-% the rows, between |\begin{pmatrix}| and |\end{pmatrix}|. Each row, except the 
-% last, must end with |\\|. Within each row, separate the columns with |&|. Note 
-% that \cs{pmatrix} typesets the matrix in parentheses. Use \cs{bmatrix} to typeset
-% it in square brackets and \cs{vmatrix} to typeset it in single vertical bars
-% to indicate a determinant. Use \cs{Vmatrix} to typeset it in double vertical
-% bars.
-%
 %\iffalse
 %<*example>
 %\fi
- \begin{dispExample*}{sidebyside,colframe=white,colback=white, lefthand ratio=0.70}
- A second rank tensor represented as a matrix.
-   \[\begin{pmatrix}
-       \hphantom{-}T_{00} & T_{01} & -T_{02} \\
-       -T_{10} & T_{11} & -T_{12} \\
-       \hphantom{-}T_{20} & T_{21} & \hphantom{-}T_{22}
-     \end{pmatrix}\]
- Alternate notation for a matrix.
-   \[\begin{bmatrix}
-       \hphantom{-}T_{00} & T_{01} & -T_{02} \\
-       -T_{10} & T_{11} & -T_{12} \\
-       \hphantom{-}T_{20} & T_{21} & \hphantom{-}T_{22}
-     \end{bmatrix}\]
- The determinant of a matrix.
-   \[\begin{vmatrix}
-       \hphantom{-}T_{00} & T_{01}  & -T_{02} \\
-       -T_{10} & T_{11} & -T_{12} \\
-       \hphantom{-}T_{20} & T_{21} & \hphantom{-}T_{22}
-     \end{vmatrix}\]
- Alternate notation for the determinant of a matrix.
-   \[\begin{Vmatrix}
-       \hphantom{-}T_{00} & T_{01}  & -T_{02} \\
-       -T_{10} & T_{11} & -T_{12} \\
-       \hphantom{-}T_{20} & T_{21} & \hphantom{-}T_{22}
-     \end{Vmatrix}\]
- \end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% Encapsulate an entire problem solution in a \refEnv{problem} environment by 
-% putting it between |\begin{problem}| and |\end{problem}|.
-%
-% Show the steps in a calculation in a \refEnv{mysolution} environment by putting
-% them between |\begin{mysolution}| and |\end{mysolution}|.
-%
-% Use \cs{href} from the \pkgname{hyperref} package to link to URLs. 
-% |\href{http://glowscript.org}{GlowScript}| gives 
-% \href{http://glowscript.org}{GlowScript}. You can link to a specific 
-% \href{http://goo.gl/wPMqjp}{GlowScript program} when necessary. Links are 
-% active.
-%
-% Use \refCom{image} to insert diagrams. The diagram should be a PDF file. You
-% \emph{must} remember to specify a meaningful caption for the diagram. You must
-% also provide a unique label for the image so you can easily refer back to it 
-% elsewhere in your document.
-%
-% There are two main design goals behind this package. The first is to typeset 
-% numerical values of scalar and vector physical quantities and their SI units. The 
-% idea is to simply type a command corresponding to the quantity's name, specifying 
-% as an argument a single scalar value or the numerical components of a traditional 
-% Cartesian 3-vector, and let \mandi\ take care of the units. Every physical quantity 
-% you are likely to encounter in an introductory course is probably already defined, 
-% but there's a facility for defining new quantities if you need to.
-%
-% The second main design goal provides a similar approach to typesetting the most
-% frequently used symbolic expressions in introductory physics. If you want to save 
-% time in writing out the expression for the electric field of a particle, just use
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Efieldofparticle
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% which, as you can see, takes fewer keystrokes and it's easier to remember. Correct
-% vector notation is automatically enforced, leading students to get used to seeing
-% it and, hopefully, using it in their own calculations. Yes, this is a bit of an
-% agenda on my part, but my experience has been that students don't recognize or 
-% appreciate the utility of vector notation and thus their physical reasoning may
-% suffer as a result. So by using \mandi\ they use simple commands that mirror what
-% they're thinking, or what they're supposed to be thinking (yes, another agenda),
-% and in the process see the correct typeset output.
-%
-% There is another persistent problem with introductory physics textbooks, and that 
-% is that many authors do not use consistent notation. Many authors define the
-% notation for a vector's magnitude to be either \magvect{a} or \absof{\vect{a}} in 
-% an early chapter, but then completely ignore that notation and simply use \(a\)
-% later in the book. I have never understood the (lack of) logic behind this practice
-% and find it more than annoying. Textbooks authors should know better, and should
-% set a better example for introductory students. I propose that using \mandi\
-% would eliminate all last vestiges of all excuses for not setting this one good
-% example for introductory students.
-%
-% If you are a student, using this package will very likely begin with using a 
-% pre-made document template supplied by your instructor. There will likely be a 
-% lot about the document that you won't understand at first. Look for a line that 
-% says |\begin{document}| and a corresponding line that says |\end{document}| You 
-% will add content between these two lines. Most of your content will be within the 
-% \refEnv{problem} environment. Each use of this environment is intended to 
-% encapsulate one complete written solution to one physics problem. In this way, 
-% you can build a library of problem solutions for your own convenience. 
-%
-% Since students are this package's primary audience, nearly all of the commands
-% have been defined with students in mind. Writing a problem solution in \LaTeX\
-% can be tedious to the beginner and some of the commands have been designed to
-% minimize the tedium. For example, if you want to calculate something using an
-% equation, you typically must write the equation, substitute numerical quantities
-% with units if necessary, do the actual calculation, and then state the final 
-% result.Sometimes it is necessary to show intermediate steps in a calculation. 
-% \mandi\ can help with this. 
-%
-% Here is a set of commands that typeset standard equations with placeholders where
-% numerical quantities must be eventually inserted. Note that all of these commands
-% end with the word |places| as a reminder that they generate placeholders.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{genericinteractionplaces}
-{\marg{const}\marg{thing1}\marg{thing2}\marg{dist}\marg{direction}}
-Command for generic expression for an inverse square interaction. The five 
-required arguments are, from left to right, a constant of proportionality, a 
-physical property of object 1, a physical property of object 2, the objects' 
-mutual separation, and a vector direction. In practice, these should all be 
-provided in numerical form. Note that negative signs must be placed manually.
-\end{docCommand}
 \begin{dispExample}
-\genericinteractionplaces{}{}{}{}{}
+  \( \momentum{7.071} \)        \\
+  \( \vectormomentum{3,-4,5} \) \\
+  \( \momentumvector{3,-4,5} \)
 \end{dispExample}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{genericfieldofparticleplaces}
-{\marg{const}\marg{thing}\marg{dist}\marg{direction}}
-Command for generic expression for an inverse square field. The four required
-arguments are, from left to right, a constant of proportionality, a physical
-property, relative distance to field point, and a vector direction. In practice, 
-these should all be provided in numerical form. Note that negative signs must be 
-placed manually.
-\end{docCommand}
-\begin{dispExample}
-\genericfieldofparticleplaces{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% Use a \linktoplace{ssec:physconsts}{physical constant's} name 
+% to typeset its numerical value and units. Append |mathsymbol| 
+% to the constant's name to get its mathematical symbol. For 
+% example, if you want to typeset the vacuum permittivity, use 
+% \refCom{vacuumpermittivity} and its variant.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{genericpotentialenergyplaces}
-{\marg{const}\marg{thing1}\marg{thing2}\marg{dist}}
-Command for generic expression for an inverse square energy. The four required
-arguments are, from left to right, a constant of proportionality, a physical
-property of object 1, a physical property of object 2, and the objects' mutual 
-separation. In practice, these should all be provided in numerical form. Note that 
-negative signs must be placed manually.
-\end{docCommand}
-\begin{dispExample}
-\genericpotentialenergyplaces{}{}{}{}
-\end{dispExample}
+\begin{dispExample*}{lefthand ratio=0.70}
+  \( \vacuumpermittivitymathsymbol = \vacuumpermittivity \)
+\end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
+% Use \refCom{mivector} to typeset symbolic vectors with components.
+% Use the aliases \refCom{direction} to typeset a direction or unit 
+% vector.
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{gravitationalinteractionplaces}
-{\marg{mass1}\marg{mass2}\marg{distance}\marg{direction}}
-Command for gravitational interaction. The four required arguments are, from
-left to right, the first object's mass, the second object's mass, the objects'
-mutual separation, and a vector direction. In practice, these should all be 
-provided in numerical form. Note that negative signs must be placed manually.
-\end{docCommand}
-\begin{dispExample}
-\gravitationalinteractionplaces{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gfieldofparticleplaces}
-{\marg{mass}\marg{distance}\marg{direction}}
-Command for gravitational field of a particle. The three required arguments are,
-from left to right, the object's mass, the distance from the source to the field
-point, and a vector direction. In practice, these should all be provided in 
-numerical form. Note that negative signs must be placed manually.
-\end{docCommand}
-\begin{dispExample}
-\gfieldofparticleplaces{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gravitationalpotentialenergyplaces}
-{\marg{mass1}\marg{mass2}\marg{distance}}
-Command for gravitational potential energy. The three required arguments are,
-from left to right, the first object's mass, the second object's mass, and
-the object's mutual distance. In practice, these should all be provided in 
-numerical form. Note the inclusion of the leading negative sign.
-\end{docCommand}
-\begin{dispExample}
-\gravitationalpotentialenergyplaces{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springinteractionplaces}
-{\marg{stiffness}\marg{stretch}\marg{direction}}
-Command for a spring interaction. The three required arguments are, from left
-to right, the spring stiffness, the spring's stretch, and a vector direction.
-In practice, these should all be provided in numerical form. Note that negative 
-signs must be placed manually or absorbed into the displacement vector.
-\end{docCommand}
-\begin{dispExample}
-\springinteractionplaces{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springpotentialenergyplaces}
-{\marg{stiffness}\marg{stretch}}
-Command for spring potential energy. The two required arguments are, from left 
-to right, the spring stiffness and the spring stretch. In practice, these should 
-be provided in numerical form.
-\end{docCommand}
-\begin{dispExample}
-\springpotentialenergyplaces{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{genericelectricdipoleonaxisplaces}
-{\marg{const}\marg{charge}\marg{separation}\marg{dist}\marg{direction}}
-Command for generic expression for dipole field on the dipole's axis. The five
-required arguments are, from left to right, a constant of proportionality, a charge, 
-a dipole separation, the distance to the field point, and a vector direction. In 
-practice, these should all be provided in numerical form.
-\end{docCommand}
-\begin{dispExample}
-\genericelectricdipoleonaxisplaces{}{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{genericelectricdipoleplaces}
-{\marg{const}\marg{charge}\marg{separation}\marg{dist}\marg{direction}}
-Command for generic expression for dipole field. The five required arguments are, 
-from left to right, a constant of proportionality, a charge, a dipole separation, 
-the distance to the field point, and a vector direction. In practice, these should 
-all be provided in numerical form.
-\end{docCommand}
-\begin{dispExample}
-\genericelectricdipoleplaces{}{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricinteractionplaces}
-{\marg{charge1}\marg{charge2}\marg{distance}\marg{direction}}
-Command for electric interaction. The four required arguments are, from left to
-right, the first object's charge, the second object's charge, the objects' mutual
-separation, and a vector direction. In practice, these should all be provided in 
-numerical form.
-\end{docCommand}
-\begin{dispExample}
-\electricinteractionplaces{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Efieldofparticleplaces}
-{\marg{charge}\marg{distance}\marg{direction}}
-Command for electric field of a particle. The three required argument are, from
-left to right, the particle's charge, the distance form the source to the field
-point, and a vector direction. In practice, these should all be provided in 
-numerical form.
-\end{docCommand}
-\begin{dispExample}
-\Efieldofparticleplaces{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Bfieldofparticleplaces}
-{\marg{charge}\marg{magvel}\marg{magr}\marg{vhat}\marg{rhat}}
-Command for magnetic field of a particle. The five required arguments are, from
-left to right, the particle's charge, the particle's velocity, the distance from
-the source to the field point, the velocity's direction, and a direction vector
-from the source to the field point. In practice, these should all be provided in 
-numerical form.
-\end{docCommand}
-\begin{dispExample}
-\Bfieldofparticleplaces{}{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricpotentialenergyplaces}
-{\marg{charge1}\marg{charge2}\marg{distance}}
-Command for electric potential energy. The three required arguments are, from
-left to right, the first object's charge, the second object's charge, and the
-objects' mutual distance. In practice, these should all be provided in numerical 
-form.
-\end{docCommand}
-\begin{dispExample}
-\electricpotentialenergyplaces{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricdipoleonaxisplaces}
-{\marg{charge}\marg{separation}\marg{dist}\marg{direction}}
-Command for dipole electric field on the dipole's axis. The four required arguments 
-are, from left to right, a charge, a dipole separation, the distance to the field 
-point, and a vector direction. In practice, these should all be provided in numerical 
-form.
-\end{docCommand}
-\begin{dispExample}
-\electricdipoleonaxisplaces{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricdipoleonbisectorplaces}
-{\marg{charge}\marg{separation}\marg{dist}\marg{direction}}
-Command for dipole electric field. The four required arguments are, from left 
-to right, a charge, a dipole separation, the distance to the field point, and 
-a vector direction. In practice, these should all be provided in numerical form.
-\end{docCommand}
-\begin{dispExample}
-\electricdipoleonbisectorplaces{}{}{}{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% The underlying strategy is to \emph{think about how you would say what you want
-% to write and then write it the way you would say it}. With a few exceptions, this
-% is how \mandi\ works. You need not worry about units because \mandi\ knows what
-% SI units go with which physical quantities. You can define new quantities so that
-% \mandi\ knows about them and in doing so, you give the new quantities the same
-% names they would normally have.
-%
-% \hypertarget{target5}{So} now how to you go about getting numerical values (with 
-% units) into the placeholders? Use the \refCom{define} command to define a variable 
-% containing a desired quantity, and then pass that variable to the above commands 
-% and that quantity will appear in the corresponding placeholder.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{define}{\marg{variablename}\marg{quantity}}
-Defines a variable, actually a new command, named \cs{variablename} and sets its
-value to \cs{quantity}. \textbf{Note that digits are not permitted in command names 
-in \LaTeX.}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\define{\massone}{\mass{25}}
+\begin{dispExample*}{sidebyside=false}
+  \( \mivector{\slot,\slot,\slot} \) or \( \mivector{p_x,p_y,p_z} \) \\
+  \( \direction{\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}} \) or
 \end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-% Suppose you want to calculate the gravitational force on one object due to
-% another. You need two masses, and their mutual distance, and a direction. You 
-% can say, for example, |\define{\massone}{\mass{5}| to create a variable |\massone|
-% containing a mass of \mass{5}. Note that you don't have to worry about units 
-% because the \refCom{mass} command handles that for you. Similarly, you can go on 
-% and say |\define{\masstwo}{\mass{12}| and |\define{\myr}{\displacement{5}| and
-% |\define{\mydir}{\mivector{0,-1,0}|. Now just call the 
-% \refCom{gravitationalinteractionplaces} command with these arguments (in the 
-% correct order of course) and \LaTeX\ will do the rest when you compile your 
-% document. The entire process would look like this:
+% Use \refEnv{physicsproblem} and \refEnv{parts} and \refCom{problempart} 
+% for problems. For step-by-step mathematical solutions use
+% \refEnv{physicssolution}. Use \refEnv{glowscriptblock} to typeset  
+% \href{https://\gsurl}{\GlowScript} programs. Use \refCom{vpythonfile} to 
+% typeset \href{https://\vpurl}{VPython} program files. 
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{dispExample}
-\define{\massone}{\mass{5}}
-\define{\masstwo}{\mass{12}}
-\define{\myr}{\displacement{5}}
-\define{\mydir}{\mivector{0,-1,0}}
-\gravitationalinteractionplaces{\massone}{\masstwo}{\myr}{\mydir} =
-\vectorforce{0,-1.60\xtento{-10},0}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% Of course you must calculate the final numerical result yourself because \mandi\ 
-% doesn't (yet) do calculations. One very important restriction on variable names is 
-% that \LaTeX\ doesn't allow digits in command or variable names and thus that 
-% restriction applies here too.
-%
-% This barely scratches the surface in describing \mandi\ so continue reading this
-% document to see everything it can do. You will learn new commands as you need 
-% them in your work. To start with, you should at least read the section on
-% \hyperlink{target1}{SI units} and the section on 
-% \hyperlink{target2}{physical quantities}.
-%
 % \newpage
-% \section{Features and Commands}
-% \hypertarget{target1}{\subsection{SI Base Units and Dimensions}}
-% This is not a tutorial on SI units and the user is assumed 
-% to be familiar with SI rules and usage. Begin by defining shortcuts for the units 
-% for the seven SI base quantities:
-% \emph{spatial displacement} (what others call \emph{length}), \emph{mass}, 
-% \emph{temporal displacement} (what others call \emph{time}, but we will call 
-% it \emph{duration} in most cases), \emph{electric current}, \emph
-% {thermodynamic temperature}, \emph{amount}, and \emph{luminous intensity}. 
-% These shortcuts are used internally and need not explicitly be invoked by the 
-% user.
+% \section{The \mandi\ Package}\setplace{sec:mandipkg}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{m}{}
-  Command for \href{https://en.wikipedia.org/wiki/metre}{metre}, the SI unit of 
-  spatial displacement (length).
-\end{docCommand}
-%\iffalse
-%</example>
-%\fi
+% Load \mandi\ as you would any package in your preamble. 
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{kg}{}
-  Command for \href{https://en.wikipedia.org/wiki/kilogram}{kilogram}, the SI unit 
-  of mass.
-\end{docCommand}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \usepackage[options]{mandi}
+\end{dispListing*}
 %\iffalse
 %</example>
 %\fi
@@ -1096,2258 +351,881 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{s}{}
-  Command for \href{https://en.wikipedia.org/wiki/second}{second}, the SI unit 
-  of temporal displacement (duration).
+\begin{docCommand}{mandiversion}{}
+  Typesets the current version and build date.
 \end{docCommand}
+\begin{dispExample*}{sidebyside=false}
+  The version is \mandiversion\ and is a stable build.
+\end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{A}{}
-  Command for \href{https://en.wikipedia.org/wiki/ampere}{ampere}, the SI unit 
-  of electric current.
-\end{docCommand}
-%\iffalse
-%</example>
-%\fi
+% \subsection{Package Options}
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{K}{}
-  Command for \href{https://en.wikipedia.org/wiki/kelvin}{kelvin}, the SI unit 
-  of thermodynamic temperature.
-\end{docCommand}
+\begin{docKeys}[%
+    doc new = 2021-01-30,%
+    doc keypath = {},%
+  ]%
+  {%
+    {%
+      doc name = units,%
+      doc parameter = {=\meta{type of unit}},%
+      doc description = {initially unspecified, set to \docValue{alternate}},%
+    },%
+    {%
+      doc name = preciseconstants,%
+      doc parameter = {=\meta{boolean}},%
+      doc description = {initially unspecified, set to \docValue{false}},%
+    },%
+  }%
+  Now \mandi\ uses a key-value interface for options.
+  The \refKey{units} key can be set to \docValue{base}, \docValue{derived}, 
+  or \docValue{alternate}. The \refKey{preciseconstants} key is always 
+  either \docValue{true} or \docValue{false}.
+\end{docKeys}
 %\iffalse
 %</example>
 %\fi
 %
+% \subsection{The \texttt{mandisetup} Command}
+% 
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{mol}{}
-  Command for \href{https://en.wikipedia.org/wiki/mole}{mole}, the SI unit of 
-  amount.
+\begin{docCommand}[doc new = 2021-02-17]{mandisetup}{\marg{options}}
+  Command to set package options on the fly after loadtime. This 
+  can be done in the preamble or inside the 
+  |\begin{document}...\end{document}| environment.
 \end{docCommand}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \mandisetup{units=base}
+\end{dispListing*}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \mandisetup{preciseconstants}
+\end{dispListing*}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \mandisetup{preciseconstants=false}
+\end{dispListing*}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{cd}{}
-  Command for \href{https://en.wikipedia.org/wiki/candela}{candela}, the SI 
-  unit of luminous intensity.
-\end{docCommand}
-%\iffalse
-%</example>
-%\fi
+% \subsection{\lualatex\ is Required}
 %
-% If \mandi\ was loaded with \opt{baseunits}, then every physical quantity will 
-% have a unit that is some product of powers of these seven base SI units. 
-% Exceptions are angular quantities, which will include either degrees or radians 
-% depending upon the application. Again, this is what we mean by \baseunits\ form.
+% In order to make use of better fonts and Unicode features, \mandi\ now
+% requires the \lualatex\ engine for processing documents. It will not
+% work with other engines. 
 %
-% Certain combinations of the SI base units have nicknames and each such 
-% combination and nickname constitutes a \emph{derived unit}. Derived units are 
-% no more physically meaningful than the base units, they are merely nicknames for 
-% particular combinations of base units. An example of a derived unit is the 
-% newton, for which the symbol (it is not an abbreviation) is \newton. However, 
-% the symbol \newton\ is merely a nickname for a particular combination of base 
-% units. It is not the case that every unique combination of base units has a 
-% nickname, but those that do are usually named in honor of a scientist. 
-% Incidentally, in such cases, the symbol is capitalized but the \emph{name} 
-% of the unit is \emph{never} capitalized. Thus we would write the name of the 
-% derived unit of force as newton and not Newton. Again, using these select 
-% nicknames for certain combinations of base units is what we mean by \drvdunits\ 
-% form.
+% \newpage
+% \subsection{Physical Quantities}
+% \subsubsection{Typesetting Physical Quantities}\setplace{ssec:physquants}
 %
-% \subsection{SI Dimensions}
-% For each SI unit, there is at least one corresponding dimension. Every physical 
-% quantity is some multiplicative product of each of the seven basic SI dimensions 
-% raised to a power.
+% Typesetting physical quantities and constants using semantically appropriate 
+% names, along with the correct 
+% \href{https://en.wikipedia.org/wiki/International_System_of_Units}{SI units}, 
+% is the core function of \mandi. Take momentum as the prototypical physical 
+% quantity in an introductory physics course.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{dimddisplacement}{}
-Command for the symbol for the dimension of displacement.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-displacement has dimension of \dimdisplacement
+\begin{docCommands}
+  {%
+    {%
+      doc name = momentum,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = momentumvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectormomentum,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+  Command for momentum and its vector variants. The default units will depend 
+  on the options passed to \mandi\ at load time. Alternate units are the 
+  default. Other units can be forced as demonstrated. The vector variants can 
+  take more than three components. Note the other variants for the quantity's 
+  value and units.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.60}
+  \( \momentum{5} \)                         \\
+  \( \momentumvalue{5} \)                    \\
+  \( \momentumbaseunits{5} \)                \\
+  \( \momentumderivedunits{5} \)             \\
+  \( \momentumalternateunits{5} \)           \\
+  \( \momentumvector{2,3,4} \)               \\
+  \( \vectormomentum{2,3,4} \)               \\
+  \( \momentum{\mivector{2,3,4}} \)          \\
+  \( \momentumonlybaseunits \)               \\
+  \( \momentumonlyderivedunits \)            \\
+  \( \momentumonlyalternateunits \)          \\
+  \( \momentumvectorvalue{2,3,4} \)          \\
+  \( \vectormomentumvalue{2,3,4} \)          \\
+  \( \momentumvectorbaseunits{2,3,4} \)      \\
+  \( \vectormomentumbaseunits{2,3,4} \)      \\
+  \( \momentumvectorderivedunits{2,3,4} \)   \\
+  \( \vectormomentumderivedunits{2,3,4} \)   \\
+  \( \momentumvectoralternateunits{2,3,4} \) \\
+  \( \vectormomentumalternateunits{2,3,4} \) \\
+  \( \momentumvectoronlybaseunits \)         \\
+  \( \vectormomentumonlybaseunits \)         \\
+  \( \momentumvectoronlyderivedunits \)      \\
+  \( \vectormomentumonlyderivedunits \)      \\
+  \( \momentumvectoronlyalternateunits \)    \\
+  \( \vectormomentumonlyalternateunits \) 
 \end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dimmass}{}
-Command for the symbol for the dimension of mass.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-mass has dimension of \dimmass
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Commands that include the name of a physical quantity typeset units, so 
+% they shouldn't be used for algebraic or symbolic values of components.
+% For example, one shouldn't use |\vectormomentum{mv_x,mv_y,mv_z}| but
+% instead the generic |\mivector{mv_x,mv_y,mv_z}| instead.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dimduration}{}
-Command for the symbol for the dimension of duration.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-duration has dimension of \dimduration
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Checking Physical Quantities}
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{dimcurrent}{}
-Command for the symbol for the dimension of current.
+\begin{docCommand}[doc new = 2021-02-16]{checkquantity}{\marg{name}}
+  Command to check and typeset the command, base units, 
+  derived units, and alternate units of a defined physical 
+  quantity.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-current has dimension of \dimcurrent
-\end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dimtemperature}{}
-Command for the symbol for the dimension of temperature.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-temperature has dimension of \dimtemperature
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Predefined Physical Quantities}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dimamount}{}
-Command for the symbol for the dimension of amount.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-amount has dimension of \dimamount
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Every other defined physical quantity can be treated similarly. Just replace 
+% |momentum| with the quantity's name. Obviously, the variants that begin with 
+% |\vector| will not be defined for scalar quantities. Here are all the 
+% physical quantities, with all their units, defined in \mandi. Rememeber that 
+% units are not present with symbolic (algebraic) quantities, so do not use 
+% the |\vector| variants of these commands for symbolic components. 
+% Use \refCom{mivector} instead.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{dimluminous}{}
-Command for the symbol for the dimension of luminous intensity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-luminous has dimension of \dimluminous
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \hypertarget{target2}{\subsection{Defining Physical Quantities}}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{newphysicsquantity}
-{\marg{newname}\marg{\baseunits}\oarg{\drvdunits}\oarg{\altnunits}}
-Defines a new physical quantity and its associated commands.
-\end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-% Using this command causes several things to happen.
-% \begin{itemize}
-%   \item A command \colDef{\cs{newname}}\marg{magnitude}, where \colDef{newname} 
-%   is the first argument of \colDef{\cs{newphysicsquantity}}, is created that 
-%   takes one mandatory argument, a numerical magnitude. Subsequent use of your 
-%   defined scalar quantity can be invoked by typing \colDef{\cs{newname}}
-%   \marg{magnitude} and the units will be typeset according to the options 
-%   given when \mandi\ was loaded. Note that if the \drvdunits\ and \altnunits\ 
-%   forms are not specified, they will be populated with the \baseunits\ form.
-%   \item A command \colDef{\cs{newnamebaseunit}}\marg{magnitude} is created that 
-%   expresses the quantity and its units in \baseunits\ form.
-%   \item A command \colDef{\cs{newnamedrvdunit}}\marg{magnitude} is created that 
-%   expresses the quantity and its units in \drvdunits\ form. This command is 
-%   created whether or not the first optional argument is provided.
-%   \item A command \colDef{\cs{newnamealtnunit}}\marg{magnitude} is created that 
-%   expresses the quantity and its units in \altnunits\ form. This command is 
-%   created whether or not the first optional argument is provided.
-%   \item A command \colDef{\cs{newnameonlybaseunit}}\marg{magnitude} is created 
-%   that expresses \textbf{only} the quantity's units in \baseunits\ form.
-%   \item A command \colDef{\cs{newnameonlydrvdunit}}\marg{magnitude} is created 
-%   that expresses \textbf{only} the quantity's units in \drvdunits\ form. 
-%   \item A command \colDef{\cs{newnameonlyaltnunit}}\marg{magnitude} is created 
-%   that expresses \textbf{only} the quantity's units in \altnunits\ form. 
-%   \item A command \colDef{\cs{newnamevalue}}\marg{magnitude} is created that 
-%   expresses \textbf{only} the quantity's numerical value.
-% \end{itemize}
-%
-% As an example, consider momentum. The following commands are defined:
-%
-% \begin{quotation}
-% \begin{tabular}{l l l}
-%   |\momentum{3}|         &\momentum{3}          & unit set by global options   \\
-%   |\momentumbaseunit{3}| &\momentumbaseunit{3}  & quantity with base unit      \\
-%   |\momentumdrvdunit{3}| &\momentumdrvdunit{3}  & quantity with derived unit   \\
-%   |\momentumaltnunit{3}| &\momentumaltnunit{3}  & quantity with alternate unit \\
-%   |\momentumvalue{3}|    &\momentumvalue{3}     & selects only numerical value \\
-%   |\momentumonlybaseunit|&\momentumonlybaseunit & selects only base unit       \\
-%   |\momentumonlydrvdunit|&\momentumonlydrvdunit & selects only derived unit    \\
-%   |\momentumonlyaltnunit|&\momentumonlyaltnunit & selects only alternate unit
-% \end{tabular}
-% \end{quotation}
-%
-% Momentum is a vector quantity, so obviously this command really refers to the 
-% magnitude of a momentum vector. There is an interesting, and as far as I can 
-% tell unwritten, convention in physics that we use the same name for a vector 
-% and its magnitude with one exception, and that is for velocity, the magnitude 
-% of which we sometimes call speed. Conceptually, however, velocity and speed are 
-% different entities. Therefore, \mandi\ has different commands for them. Actually, 
-% the \refCom{speed} command is just an alias for \refCom{velocity} and should only 
-% be used for scalars and never for vectors. This convention means that the same 
-% name is used for vector quantities and the corresponding magnitudes. 
-%
-% \subsubsection{Defining Vector Quantities}
-%
-% All physical quantities are defined as in the momentum example above regardless
-% of whether the quantity is a scalar or a vector. To typeset a vector quantity 
-% in terms of its components in some coordinate system (usually an orthonormal
-% cartesian system, either specify an argument consisting of a vector with components 
-% as a comma separated list in a \refCom{mivector} command or prepend the quantity 
-% name with |vector|. So specifying a momentum vector is as simple as
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{dispExample}
-\momentum{\mivector{3,2,-1}} \\
-\vectormomentum{3,2,-1}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% where the notation corresponds to that used in \mi.
-%
-% \subsubsection{First Semester Physics}
-% The first semester of most introductory calculus-based physics courses focuses 
-% on mechanics, dynamics, and statistical mechanics.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{displacement}{\marg{magnitude or vector}}
-Command for displacement.
-\end{docCommand}
-\begin{docCommand}{vectordisplacement}{\marg{commadelimitedlistofcomps}}
-Command for vector displacement.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\displacement{5}                 \\
-\displacement{\mivector{3,2,-1}} \\
-\vectordisplacement{1,2,3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{mass}{\marg{magnitude}}
-Command for mass.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\mass{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{duration}{\marg{magnitude}}
-Command for duration.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\duration{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{current}{\marg{magnitude}}
-Command for current.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\current{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{temperature}{\marg{magnitude}}
-Command for temperature.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\temperature{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\begin{docCommands}
+  {%
+    {%
+      doc name = acceleration,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = accelerationvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectoracceleration,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{acceleration}
 \begin{docCommand}{amount}{\marg{magnitude}}
-Command for amount.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\amount{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{luminous}{\marg{magnitude}}
-Command for luminous intensity.
+\checkquantity{amount}
+\begin{docCommands}
+  {%
+    {%
+      doc name = angularacceleration,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = angularaccelerationvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorangularacceleration,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{angularacceleration}
+\begin{docCommand}{angularfrequency}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\luminous{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% While we're at it, let's also go ahead and define a few non-SI units from 
-% astronomy, astrophysics, and old school physics.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{infeet}{\marg{magnitude}}
-Command for magnitude of displacement in feet. This is still sometimes used
-in engineering applications and is frequently seen in older physics textbooks.
+\checkquantity{angularfrequency}
+\begin{docCommands}
+  {%
+    {%
+      doc name = angularimpulse,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = angularimpulsevector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {% 
+      doc name = vectorangularimpulse,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{angularimpulse}
+\begin{docCommands}
+  {%
+    {%
+      doc name = angularmomentum,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = angularmomentumvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorangularmomentum,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{angularmomentum}
+\begin{docCommands}
+  {%
+    {%
+      doc name = angularvelocity,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = angularvelocityvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorangularvelocity,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{angularvelocity}
+\begin{docCommand}{area}{\marg{magnitude}}
 \end{docCommand}
-\begin{docCommand}{infeetpersecond}{\marg{magnitude}}
-Command for magnitude of velocity in feet per second. This is still sometimes used
-in engineering applications and is frequently seen in older physics textbooks.
+\checkquantity{area}
+\begin{docCommand}{areachargedensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{docCommand}{infeetpersecondsquared}{\marg{magnitude}}
-Command for magnitude of acceleration in feet per second. This is still sometimes 
-used in engineering applications and is frequently seen in older physics textbooks.
+\checkquantity{areachargedensity}
+\begin{docCommand}{areamassdensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\infeet{5}                   \\
-\infeetpersecond{5}          \\
-\infeetpersecondsquared{32}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{planeangle}{\marg{magnitude}}
-Command for plane angle in radians.
+\checkquantity{areamassdensity}
+\begin{docCommand}{capacitance}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\planeangle{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{solidangle}{\marg{magnitude}}
-Command for solidangle.
+\checkquantity{capacitance}
+\begin{docCommand}{charge}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\solidangle{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{indegrees}{\marg{magnitude}}
-Command for plane angle in degrees.
+\checkquantity{charge}
+\begin{docCommands}
+  {%
+    {%
+      doc name = cmagneticfield,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = cmagneticfieldvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorcmagneticfield,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{cmagneticfield}
+\begin{docCommand}{conductance}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\indegrees{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inarcminutes}{\marg{magnitude}}
-Command for plane angle in minutes of arc.
+\checkquantity{conductance}
+\begin{docCommand}{conductivity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inarcminutes{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inarcseconds}{\marg{magnitude}}
-Command for plane angle in seconds of arc.
+\checkquantity{conductivity}
+\begin{docCommand}{conventionalcurrent}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inarcseconds{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inFarenheit}{\marg{magnitude}}
-Command for temperature in degrees Farenheit.
+\checkquantity{conventionalcurrent}
+\begin{docCommand}{current}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inFarenheit{68}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inCelsius}{\marg{magnitude}}
-Command for temperature in degrees Celsius.
+\checkquantity{current}
+\begin{docCommands}
+  {%
+    {%
+      doc name = currentdensity,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = currentdensityvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorcurrentdensity,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{currentdensity}
+\begin{docCommand}{dielectricconstant}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inCelsius{20}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ineV}{\marg{magnitude}}
-Command for energy in electron volts.
+\checkquantity{dielectricconstant}
+\begin{docCommands}
+  {%
+    {%
+      doc new = 2021-02-24,%
+      doc name = direction,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc name = directionvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectordirection,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{direction}
+\begin{docCommands}
+  {%
+    {%
+      doc name = displacement,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = displacementvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectordisplacement,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{displacement}
+\begin{docCommand}{duration}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ineV{10.2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ineVocs}{\marg{magnitude}}
-Command for mass in \(\mathrm{eV}\per c^2\).
+\checkquantity{duration}
+\begin{docCommands}
+  {%
+    {%
+      doc name = electricdipolemoment,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = electricdipolemomentvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    { doc name = vectorelectricdipolemoment,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{electricdipolemoment}
+\begin{docCommands}
+  {%
+    {%
+      doc name = electricfield,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = electricfieldvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorelectricfield,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{electricfield}
+\begin{docCommand}{electricflux}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ineVocs{1.1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ineVoc}{\marg{magnitude}}
-Command for momentum in \(\mathrm{eV}\per c\).
+\checkquantity{electricflux}
+\begin{docCommand}{electricpotential}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ineVoc{3.6}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inMeV}{\marg{magnitude}}
-Command for energy in millions of electron volts.
+\checkquantity{electricpotential}
+\begin{docCommand}[doc new = 2021-05-01]{electricpotentialdifference}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inMeV{2.2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inMeVocs}{\marg{magnitude}}
-Command for mass in \(\mathrm{MeV}\per c^2\).
+\checkquantity{electricpotentialdifference}
+\begin{docCommand}{electroncurrent}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inMeVocs{0.511}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inMeVoc}{\marg{magnitude}}
-Command for momentum in \(\mathrm{MeV}\per c\).
+\checkquantity{electroncurrent}
+\begin{docCommand}{emf}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inMeVoc{3.6}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inGeV}{\marg{magnitude}}
-Command for energy in millions of electron volts.
+\checkquantity{emf}
+\begin{docCommand}{energy}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inGeV{2.2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inGeVocs}{\marg{magnitude}}
-Command for mass in \(\mathrm{GeV}\per c^2\).
+\checkquantity{energy}
+\begin{docCommand}[doc new = 2021-04-15]{energyinev}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inGeVocs{0.511}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inGeVoc}{\marg{magnitude}}
-Command for momentum in \(\mathrm{GeV}\per c\).
+\checkquantity{energyinev}
+\begin{docCommand}[doc new = 2021-04-15]{energyinkev}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inGeVoc{3.6}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inamu}{\marg{magnitude}}
-Command for mass in atomic mass units.
+\checkquantity{energyinkev}
+\begin{docCommand}[doc new = 2021-04-15]{energyinmev}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inamu{4.002602}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inAU}{\marg{magnitude}}
-Command for displacement in astronomical units.
+\checkquantity{energyinmev}
+\begin{docCommand}{energydensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inAU{5.2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inly}{\marg{magnitude}}
-Command for displacement in light years.
+\checkquantity{energydensity}
+\begin{docCommands}
+  {%
+    {%
+      doc name = energyflux,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = energyfluxvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorenergyflux,% 
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{energyflux}
+\begin{docCommand}{entropy}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inly{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{incyr}{\marg{magnitude}}
-Command for displacement in light years written differently.
+\checkquantity{entropy}
+\begin{docCommands}
+  {%
+    {%
+      doc name = force,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = forcevector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorforce,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{force}
+\begin{docCommand}{frequency}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\incyr{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inpc}{\marg{magnitude}}
-Command for displacement in parsecs.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inpc{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarL}{\marg{magnitude}}
-Command for luminosity in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarL{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarT}{\marg{magnitude}}
-Command for temperature in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarT{2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarR}{\marg{magnitude}}
-Command for radius in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarR{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarM}{\marg{magnitude}}
-Command for mass in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarM{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarF}{\marg{magnitude}}
-Command for flux in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarF{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarf}{\marg{magnitude}}
-Command for apparent flux in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarf{4.3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarMag}{\marg{magnitude}}
-Command for absolute magnitude in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarMag{2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarmag}{\marg{magnitude}}
-Command for apparent magnitude in solar multiples.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarmag{2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{insolarD}{\marg{magnitude}}
-Command for distance in solar multiples.
-\end{docCommand}
-\begin{docCommand}{insolard}{\marg{magnitude}}
-Identical to \refCom{insolarD} but uses \(d\). 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\insolarD{2} \\
-\insolard{2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% Angles are confusing in introductory physics because sometimes we write 
-% the unit and sometimes we do not. Some concepts, such as flux, are simplified 
-% by introducing solid angle.
-%
-% Now let us continue into first semester physics, defining quantities in the 
-% approximate order in which they appear in such a course. Use \refCom{timestento}
-% or \refCom{xtento} to get scientific notation, with the mantissa immediately 
-% preceding the command and the power as the required argument. \refCom{timestento} 
-% has an optional second argument that specifies a unit, but that is not needed or 
-% used in the following examples.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{direction}{\marg{commadelimitedlistofcomps}}
-Command for coordinate representation of a vector direction. Direction has no unit.
-\end{docCommand}
-\begin{docCommand}{vectordirection}{\marg{commadelimitedlistofcomps}}
-This is an alias for \refCom{direction}.
-\end{docCommand}
-\begin{dispExample}
-\direction{a,b,c}                                                    \\
-\direction{\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}} \\
-\vectordirection{a,b,c}                                              \\
-\vectordirection{\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{velocityc}{\marg{magnitude or vector}}
-Command for velocity as a fraction of \(c\).
-\end{docCommand}
-\begin{docCommand}{vectorvelocityc}{\marg{commadelimitedlistofcomps}}
-Command for vector velocity as a fraction of \(c\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\velocityc{0.9987}                       \\
-\velocityc{\mivector{0,0.9987,0}}        \\
-\mivector{\velocityc{\frac{1}{\sqrt{3}}} \\
-\velocityc{\frac{1}{\sqrt{3}}}           \\
-\velocityc{\frac{1}{\sqrt{3}}}}          \\
-\vectorvelocityc{0,0.9987,0}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{velocity}{\marg{magnitude or vector}}
-Command for velocity. 
-\end{docCommand}
-\begin{docCommand}{vectorvelocity}{\marg{commadelimitedlistofcomps}}
-Command for vector velocity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\velocity{2.34}              \\
-\velocity{\mivector{3,2,-1}} \\
-\vectorvelocity{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{speed}{\marg{magnitude}}
-Command for speed. Technically, velocity is defined as the quotient of 
-displacement and duration while speed is defined as the quotient of distance 
-traveled and duration. They have the same dimension and unit, but are  
-conceptually different so separate commands are provided. I've never seen speed 
-used as anything other than a scalar.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\velocity{8.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{lorentzfactor}{\marg{magnitude}}
-Command for relativistic Lorentz factor. Obviously this command doesn't do 
-anything visually, but is included for thinking about calculations where this 
-quantity is needed.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\lorentzfactor{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{momentum}{\marg{magnitude or vector}}
-Command for momentum.
-\end{docCommand}
-\begin{docCommand}{vectormomentum}{\marg{commadelimitedlistofcomps}}
-Command for vector momentum.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\momentum{2.34}              \\
-\momentum{\mivector{3,2,-1}} \\
-\vectormomentum{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{acceleration}{\marg{magnitude or vector}}
-Command for acceleration.
-\end{docCommand}
-\begin{docCommand}{vectoracceleration}{\marg{commadelimitedlistofcomps}}
-Command for vector acceleration.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\acceleration{2.34}              \\
-\acceleration{\mivector{3,2,-1}} \\
-\vectoracceleration{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gravitationalfield}{\marg{commadelimitedlistofcomps}}
-Command for gravitational field.
-\end{docCommand}
-\begin{docCommand}{vectorgravitationalfield}{\marg{magnitude or vector}}
-Command for vector gravitational field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\gravitationalfield{2.34}              \\
-\gravitationalfield{\mivector{3,2,-1}} \\
-\vectorgravitationalfield{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{frequency}
+\begin{docCommands}
+  {%
+    {%
+      doc name = gravitationalfield,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = gravitationalfieldvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorgravitationalfield,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{gravitationalfield}
 \begin{docCommand}{gravitationalpotential}{\marg{magnitude}}
-Command for gravitational potential.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\gravitationalpotential{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{impulse}{\marg{magnitude or vector}}
-Command for impulse. Impulse and change in momentum are conceptually different 
-and a case can be made for expressing the in different, but equivalent, units.
+\checkquantity{gravitationalpotential}
+\begin{docCommand}[doc new = 2021-05-01]{gravitationalpotentialdifference}{\marg{magnitude}}
 \end{docCommand}
-\begin{docCommand}{vectorimpulse}{\marg{commadelimitedlistofcomps}}
-Command for vector impulse.
+\checkquantity{gravitationalpotentialdifference}
+\begin{docCommands}
+  {%
+    {%
+      doc name = impulse,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = impulsevector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorimpulse,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{impulse}
+\begin{docCommand}{indexofrefraction}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\impulse{2.34}              \\
-\impulse{\mivector{3,2,-1}} \\
-\vectorimpulse{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{force}{\marg{magnitude or vector}}
-Command for force.
+\checkquantity{indexofrefraction}
+\begin{docCommand}{inductance}{\marg{magnitude}}
 \end{docCommand}
-\begin{docCommand}{vectorforce}{\marg{commadelimitedlistofcomps}}
-Command for vector force.
+\checkquantity{inductance}
+\begin{docCommand}{linearchargedensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\force{2.34}              \\
-\force{\mivector{3,2,-1}} \\
-\vectorforce{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springstiffness}{\marg{magnitude}}
-Command for spring stiffness.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\springstiffness{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springstretch}{\marg{magnitude}}
-Command for spring stretch.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\springstretch{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{area}{\marg{magnitude}}
-Command for area.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\area{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{volume}{\marg{magnitude}}
-Command for volume.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\volume{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{linearchargedensity}
 \begin{docCommand}{linearmassdensity}{\marg{magnitude}}
-Command for linear mass density.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\linearmassdensity{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{areamassdensity}{\marg{magnitude}}
-Command for area mass density.
+\checkquantity{linearmassdensity}
+\begin{docCommand}[doc updated = 2021-05-02]{luminousintensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\areamassdensity{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{volumemassdensity}{\marg{magnitude}}
-Command for volume mass density.
+\checkquantity{luminousintensity}
+\begin{docCommand}{magneticcharge}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\volumemassdensity{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{youngsmodulus}{\marg{magnitude}}
-Command for Young's modulus.
+\checkquantity{magneticcharge}
+\begin{docCommands}
+  {%
+    {%
+      doc name = magneticdipolemoment,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = magneticdipolemomentvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectormagneticdipolemoment,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{magneticdipolemoment}
+\begin{docCommands}
+  {%
+    {%
+      doc name = magneticfield,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = magneticfieldvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectormagneticfield,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{magneticfield}
+\begin{docCommand}{magneticflux}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\youngsmodulus{2.34\timestento{9}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{work}{\marg{magnitude}}
-Command for work. Energy and work are conceptually different and a case can 
-be made for expressing them in different, but equivalent, units.
+\checkquantity{magneticflux}
+\begin{docCommand}{mass}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\work{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{energy}{\marg{magnitude}}
-Command for energy. Work and energy are conceptually different and a case can 
-be made for expressing them in different, but equivalent, units.
+\checkquantity{mass}
+\begin{docCommand}{mobility}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\energy{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{power}{\marg{magnitude}}
-Command for power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\power{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{specificheatcapacity}{\marg{magnitude}}
-Command for specific heat capacity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\specificheatcapacity{4.18\xtento{3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularvelocity}{\marg{magnitude or vector}}
-Command for angular velocity.
-\end{docCommand}
-\begin{docCommand}{vectorangularvelocity}{\marg{commadelimitedlistofcomps}}
-Command for vector angular velocity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\angularvelocity{2.34}              \\
-\angularvelocity{\mivector{3,2,-1}} \\
-\vectorangularvelocity{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularacceleration}{\marg{magnitude or vector}}
-Command for angular acceleration.
-\end{docCommand}
-\begin{docCommand}{vectorangularacceleration}{\marg{commadelimitedlistofcomps}}
-Command for vector angular acceleration.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\angularacceleration{2.34}              \\
-\angularacceleration{\mivector{3,2,-1}} \\
-\vectorangularacceleration{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularmomentum}{\marg{magnitude or vector}}
-Command for angular momentum. Whether or not the units contain radians 
-is determined by whether the \opt{useradians} option was used when 
-\pkgname{mandi} was loaded.
-\end{docCommand}
-\begin{docCommand}{vectorangularmomentum}{\marg{commadelimitedlistofcomps}}
-Command for vector angular momentum.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\angularmomentum{2.34}              \\
-\angularmomentum{\mivector{3,2,-1}} \\
-\vectorangularmomentum{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularimpulse}{\marg{magnitude or vector}}
-Command for angular impulse. Whether or not the units contain radians is 
-determined by whether the \opt{useradians} option was used when 
-\pkgname{mandi} was loaded.
-\end{docCommand}
-\begin{docCommand}{vectorangularimpulse}{\marg{commadelimitedlistofcomps}}
-Command for vector angular impulse.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\angularimpulse{2.34}              \\
-\angularimpulse{\mivector{3,2,-1}} \\
-\vectorangularimpulse{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{torque}{\marg{magnitude or vector}}
-Command for torque. Whether or not the units contain radians is 
-determined by whether the \opt{useradians} option was used when 
-\pkgname{mandi} was loaded.
-\end{docCommand}
-\begin{docCommand}{vectortorque}{\marg{commadelimitedlistofcomps}}
-Command for vector torque.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\torque{2.34}              \\
-\torque{\mivector{3,2,-1}} \\
-\vectortorque{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{mobility}
 \begin{docCommand}{momentofinertia}{\marg{magnitude}}
-Command for moment of inertia.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\momentofinertia{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{entropy}{\marg{magnitude}}
-Command for entropy.
+\checkquantity{momentofinertia}
+\begin{docCommands}
+  {%
+    {%
+      doc name = momentum,%
+      doc label = momentumdemo,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = momentumvector,%
+      doc label = momentumvectordemo,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectormomentum,%
+      doc label = vectormomentumdemo,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}} },%
+  }%
+\end{docCommands}
+\checkquantity{momentum}
+\begin{docCommands}
+  {%
+    {%
+      doc name = momentumflux,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = momentumfluxvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {% 
+      doc name = vectormomentumflux,% 
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{momentumflux}
+\begin{docCommand}{numberdensity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\entropy{2.34}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{wavelength}{\marg{magnitude}}
-Command for wavelength.
+\checkquantity{numberdensity}
+\begin{docCommand}{permeability}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\wavelength{4.00\timestento{-7}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{wavenumber}{\marg{magnitude or vector}}
-Command for wavenumber.
-\end{docCommand}
-\begin{docCommand}{vectorwavenumber}{\marg{commadelimitedlistofcomps}}
-Command for vector wavenumber.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\wavenumber{2.50\timestento{6}} \\
-\wavenumber{\mivector{3,2,-1}}  \\
-\vectorwavenumber{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{frequency}{\marg{magnitude}}
-Command for frequency.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\frequency{7.50\timestento{14}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularfrequency}{\marg{magnitude}}
-Command for angularfrequency.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\angularfrequency{4.70\timestento{15}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Second Semester Physics}
-% The second semester of introductory physics focuses on electromagnetic theory, 
-% and there are many primary and secondary quantities.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{charge}{\marg{magnitude}}
-Command for electric charge.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\charge{2\timestento{-9}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{permeability}
 \begin{docCommand}{permittivity}{\marg{magnitude}}
-Command for permittivity.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\permittivity{9\timestento{-12}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricfield}{\marg{magnitude or vector}}
-Command for electric field.
+\checkquantity{permittivity}
+\begin{docCommand}{planeangle}{\marg{magnitude}}
 \end{docCommand}
-\begin{docCommand}{vectorelectricfield}{\marg{commadelimitedlistofcomps}}
-Command for vector electric field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\electricfield{2\timestento{5}}   \\
-\electricfield{\mivector{3,2,-1}} \\
-\vectorelectricfield{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricdipolemoment}{\marg{magnitude or vector}}
-Command for electric dipole moment.
-\end{docCommand}
-\begin{docCommand}{vectorelectricdipolemoment}{\marg{commadelimitedlistofcomps}}
-Command for vector electric dipole moment.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\electricdipolemoment{2\timestento{5}}   \\
-\electricdipolemoment{\mivector{3,2,-1}} \\
-\vectorelectricdipolemoment{3,2,-1} 
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{permeability}{\marg{magnitude}}
-Command for permeability.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\permeability{4\pi\timestento{-7}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magneticfield}{\marg{magnitude or vector}}
-Command for magnetic field (also called magnetic induction).
-\end{docCommand}
-\begin{docCommand}{vectormagneticfield}{\marg{commadelimitedlistofcomps}}
-Command for vector magnetic field (also called magnetic induction).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magneticfield{1.25}              \\
-\magneticfield{\mivector{3,2,-1}} \\
-\vectormagneticfield{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{cmagneticfield}{\marg{magnitude or vector}}
-Command for product of \(c\) and magnetic field. This quantity is 
-convenient for symmetry.
-\end{docCommand}
-\begin{docCommand}{vectorcmagneticfield}{\marg{commadelimitedlistofcomps}}
-Command for product of \(c\) and magnetic field as a vector.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\cmagneticfield{1.25}              \\
-\cmagneticfield{\mivector{3,2,-1}} \\
-\vectorcmagneticfield{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{linearchargedensity}{\marg{magnitude}}
-Command for linear charge density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\linearchargedensity{4.5\timestento{-3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{areachargedensity}{\marg{magnitude}}
-Command for area charge density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\areachargedensity{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{volumechargedensity}{\marg{magnitude}}
-Command for volume charge density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\volumechargedensity{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{mobility}{\marg{magnitude}}
-Command for electron mobility.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\areachargedensity{4.5\timestento{-3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{numberdensity}{\marg{magnitude}}
-Command for electron number density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\numberdensity{2\timestento{18}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{planeangle}
 \begin{docCommand}{polarizability}{\marg{magnitude}}
-Command for polarizability.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\polarizability{1.96\timestento{-40}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricpotential}{\marg{magnitude}}
-Command for electric potential.
+\checkquantity{polarizability}
+\begin{docCommand}{power}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\electricpotential{1.5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{emf}{\marg{magnitude}}
-Command for emf.
+\checkquantity{power}
+\begin{docCommands}
+  {%
+    {%
+      doc name = poynting,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = poyntingvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorpoynting,% 
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{poynting}
+\begin{docCommand}{pressure}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\emf{1.5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dielectricconstant}{\marg{magnitude}}
-Command for dielectric constant.
+\checkquantity{pressure}
+\begin{docCommand}{relativepermeability}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dielectricconstant{1.5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{indexofrefraction}{\marg{magnitude}}
-Command for index of refraction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\indexofrefraction{1.5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{relativepermeability}
 \begin{docCommand}{relativepermittivity}{\marg{magnitude}}
-Command for relative permittivity.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\relativepermittivity{0.9}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{relativepermeability}{\marg{magnitude}}
-Command for relative permeability.
+\checkquantity{relativepermittivity}
+\begin{docCommand}{resistance}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\relativepermeability{0.9}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{poyntingvector}{\marg{commadelimitedlistofcomps}}
-Command for Poynting vector. This is an alias for \refCom{vectorenergyflux}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\poyntingvector{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{energydensity}{\marg{magnitude}}
-Command for energy density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\energydensity{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{energyflux}{\marg{magnitude or vector}}
-Command for energy flux.
-\end{docCommand}
-\begin{docCommand}{vectorenergyflux}{\marg{commadelimitedlistofcomps}}
-Command for vector energy flux.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\energyflux{4\timestento{26}}  \\
-\energyflux{\mivector{3,2,-1}} \\
-\vectorenergyflux{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{momentumflux}{\marg{magnitude or vector}}
-Command for momentum flux.
-\end{docCommand}
-\begin{docCommand}{vectormomentumflux}{\marg{commadelimitedlistofcomps}}
-Command for vector momentum flux.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\momentumflux{4\timestento{26}}  \\
-\momentumflux{\mivector{3,2,-1}} \\
-\vectormomentumflux{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electroncurrent}{\marg{magnitude}}
-Command for electron current.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\electroncurrent{2\timestento{18}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{conventionalcurrent}{\marg{magnitude}}
-Command for conventional current.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\conventionalcurrent{0.003}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magneticdipolemoment}{\marg{magnitude or vector}}
-Command for magnetic dipole moment.
-\end{docCommand}
-\begin{docCommand}{vectormagneticdipolemoment}{\marg{commadelimitedlistofcomps}}
-Command for vector magnetic dipole moment.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magneticdipolemoment{1.25}              \\
-\magneticdipolemoment{\mivector{3,2,-1}} \\
-\vectormagneticdipolemoment{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{currentdensity}{\marg{magnitude or vector}}
-Command for current density.
-\end{docCommand}
-\begin{docCommand}{vectorcurrentdensity}{\marg{commadelimitedlistofcomps}}
-Command for vector current density.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\currentdensity{1.25}              \\
-\currentdensity{\mivector{3,2,-1}} \\
-\vectorcurrentdensity{3,2,-1}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricflux}{\marg{magnitude}}
-Command for electric flux.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\electricflux{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magneticflux}{\marg{magnitude}}
-Command for magnetic flux.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magneticflux{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{capacitance}{\marg{magnitude}}
-Command for capacitance.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\capacitance{1.00}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inductance}{\marg{magnitude}}
-Command for inductance.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inductance{1.00}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{conductivity}{\marg{magnitude}}
-Command for conductivity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\conductivity{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkquantity{resistance}
 \begin{docCommand}{resistivity}{\marg{magnitude}}
-Command for resistivity.
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\resistivity{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{resistance}{\marg{magnitude}}
-Command for resistance.
+\checkquantity{resistivity}
+\begin{docCommand}{solidangle}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\resistance{1\timestento{6}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{conductance}{\marg{magnitude}}
-Command for conductance.
+\checkquantity{solidangle}
+\begin{docCommand}{specificheatcapacity}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\conductance{1\timestento{6}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magneticcharge}{\marg{magnitude}}
-Command for magnetic charge, in case it actually exists.
+\checkquantity{specificheatcapacity}
+\begin{docCommand}{springstiffness}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magneticcharge{1.25}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Further Words on Units}
-% The form of a quantity's unit can be changed on the fly regardless of the 
-% global format determined by \opt{baseunits} and \opt{drvdunits}. One way, 
-% as illustrated in the table above, is to append |baseunit|, |drvdunit|, 
-% |altnunit| to the quantity's name, and this will override the global options 
-% for that instance.
-%
-% A second way is to use the commands that change a quantity's unit on the fly.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hereusebaseunit}{\marg{magnitude}}
-Command for using base units in place.
+\checkquantity{springstiffness}
+\begin{docCommand}{springstretch}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\hereusebaseunit{\momentum{3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hereusedrvdunit}{\marg{magnitude}}
-Command for using derived units in place.
+\checkquantity{springstretch}
+\begin{docCommand}{stress}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\hereusedrvdunit{\momentum{3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hereusealtnunit}{\marg{magnitude}}
-Command for using alternate units in place.
+\checkquantity{stress}
+\begin{docCommand}{strain}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\hereusealtnunit{\momentum{3}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% A third way is to use the environments that change a quantity's unit 
-% for the duration of the environment.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{usebaseunit}{}
-Environment for using base units.
-\end{docEnvironment}
-\begin{dispExample*}{sidebyside}
-\begin{usebaseunit}
-  \momentum{3}
-\end{usebaseunit}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{usedrvdunit}{}
-Environment for using derived units.
-\end{docEnvironment}
-\begin{dispExample*}{sidebyside}
-\begin{usedrvdunit}
-  \momentum{3}
-\end{usedrvdunit}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{usealtnunit}{}
-Environment for using alternate units.
-\end{docEnvironment}
-\begin{dispExample*}{sidebyside}
-\begin{usealtnunit}
-  \momentum{3}
-\end{usealtnunit}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% A fourth way is to use the three global switches that perpetually change the 
-% default unit. \textbf{It's important to remember that these switches override 
-% the global options for the rest of the document or until overridden by one of 
-% the other two switches.}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{perpusebaseunit}{}
-Command for perpetually using base units.
+\checkquantity{strain}
+\begin{docCommand}{temperature}{\marg{magnitude}}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{perpusedrvdunit}{}
-Command for perpetually using derived units.
+\checkquantity{temperature}
+\begin{docCommands}
+  {%
+    {%
+      doc name = torque,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = torquevector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectortorque,% 
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{torque}
+\begin{docCommands}
+  {%
+    {%
+      doc name = velocity,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = velocityvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorvelocity,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = velocityc,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = velocitycvector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorvelocityc,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{velocity}
+\checkquantity{velocityc}
+\begin{docCommand}{volume}{\marg{magnitude}}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{perpusealtnunit}{}
-Command for perpetually using alternate units.
+\checkquantity{volume}
+\begin{docCommand}{volumechargedensity}{\marg{magnitude}}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-%\subsubsection{Using Alternate Units}
-% In some cases it may be helpful to use unconventional, but pedagogically
-% appropriate, units for certain physical quantities. As an example, consider
-% force. It is normally expressed in newtons, but it can also be expressed in
-% joules per meter. You can redefine a quantity's units on the fly with the 
-% \cs{redefinephysicsquantity} command. 
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{redefinephysicsquantity}
-{\marg{newname}\marg{\baseunits}\oarg{\drvdunits}\oarg{\altnunits}}
-Redefines an existing physical quantity, allowing for new alternate units. You can
-also change the other units but it strongly discouraged. The new definition takes
-effect immediately.
+\checkquantity{volumechargedensity}
+\begin{docCommand}{volumemassdensity}{\marg{magnitude}}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-%\subsubsection{All Predefined Quantities}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{chkquantity}{\marg{quantityname}}
-Diagnostic command for all of the units for a defined physical quantity. See table
-below.
+\checkquantity{volumemassdensity}
+\begin{docCommand}{wavelength}{\marg{magnitude}}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-% Here are all the predefined quantities and their units.
-%\begin{adjustwidth}{-0.5in}{-0.5in}
-%
-%\chkquantity{displacement}
-%\chkquantity{mass}
-%\chkquantity{duration}
-%\chkquantity{current}
-%\chkquantity{temperature}
-%\chkquantity{amount}
-%\chkquantity{luminous}
-%\chkquantity{infeetpersecond}
-%\chkquantity{infeet}
-%\chkquantity{planeangle}
-%\chkquantity{solidangle}
-%\chkquantity{velocity}
-%\chkquantity{acceleration}
-%\chkquantity{gravitationalfield}
-%\chkquantity{gravitationalpotential}
-%\chkquantity{momentum}
-%\chkquantity{impulse}
-%\chkquantity{force}
-%\chkquantity{springstiffness}
-%\chkquantity{springstretch}
-%\chkquantity{area}
-%\chkquantity{volume}
-%\chkquantity{linearmassdensity}
-%\chkquantity{areamassdensity}
-%\chkquantity{volumemassdensity}
-%\chkquantity{youngsmodulus}
-%\chkquantity{stress}
-%\chkquantity{pressure}
-%\chkquantity{strain}
-%\chkquantity{work}
-%\chkquantity{energy}
-%\chkquantity{power}
-%\chkquantity{specificheatcapacity}
-%\chkquantity{angularvelocity}
-%\chkquantity{angularacceleration}
-%\chkquantity{momentofinertia}
-%\chkquantity{angularmomentum}
-%\chkquantity{angularimpulse}
-%\chkquantity{torque}
-%\chkquantity{entropy}
-%\chkquantity{wavelength}
-%\chkquantity{wavenumber}
-%\chkquantity{frequency}
-%\chkquantity{angularfrequency}
-%\chkquantity{charge}
-%\chkquantity{permittivity}
-%\chkquantity{permeability}
-%\chkquantity{linearchargedensity}
-%\chkquantity{areachargedensity}
-%\chkquantity{volumechargedensity}
-%\chkquantity{electricfield}
-%\chkquantity{electricdipolemoment}
-%\chkquantity{electricflux}
-%\chkquantity{magneticfield}
-%\chkquantity{magneticflux}
-%\chkquantity{cmagneticfield}
-%\chkquantity{mobility}
-%\chkquantity{numberdensity}
-%\chkquantity{polarizability}
-%\chkquantity{electricpotential}
-%\chkquantity{emf}
-%\chkquantity{dielectricconstant}
-%\chkquantity{indexofrefraction}
-%\chkquantity{relativepermittivity}
-%\chkquantity{relativepermeability}
-%\chkquantity{energydensity}
-%\chkquantity{momentumflux}
-%\chkquantity{energyflux}
-%\chkquantity{electroncurrent}
-%\chkquantity{conventionalcurrent}
-%\chkquantity{magneticdipolemoment}
-%\chkquantity{currentdensity}
-%\chkquantity{capacitance}
-%\chkquantity{inductance}
-%\chkquantity{conductivity}
-%\chkquantity{resistivity}
-%\chkquantity{resistance}
-%\chkquantity{conductance}
-%\chkquantity{magneticcharge}
-%\end{adjustwidth}
-%
-% \subsection{When to Write Radians}\label{WhentoWriteRadians}
-% A word of clarification is in order for plane angles, solid angles, and other
-% angular quantities. There is the perpetually confusing issue of when to explicitly
-% write radians as a unit and when to omit it. The answer is that if the numerical
-% value of a quantity explicitly depends on the angular unit, then the unit should
-% be written. An example would be angular displacement; the numerical value obviously
-% depends on the unit used. If the numerical value of a quantity does not explicitly
-% depend on the angular unit, then the unit is omitted. An example would be the linear, 
-% or translational, velocity or a particle in circular motion. This quantity doesn't
-% explicitly depends on the angular unit, so the angular unit is not written.
-%
-% Torque, angular impulse, and angular momentum present special a special problem
-% in that it is sometimes pedagogically helpful to explicitly include angular units
-% in their operational definitions. While this may not be in strict accordance
-% with SI standards, loading \mandi\ with the \opt{useradians} option includes
-% angular units in these quantities. See \nameref{LoadingthePackage} for details.
-%
-% \subsection{The Empty Unit}
-% Sometimes, when discussing manipulation of units, it is helpful to have a generic
-% symbol that does not correspond to any particular existing unit. The 
-% \cs{emptyunit} is provided for this purpose. It serves as a visual placeholder
-% for any unit.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{emptyunit}{}
-Command for a generic visual placeholder symbolizing any actual unit.
+\checkquantity{wavelength}
+\begin{docCommands}
+  {%
+    {%
+      doc name = wavenumber,%
+      doc parameter = \marg{magnitude},%
+    },%
+    {%
+      doc new = 2021-02-24,%
+      doc name = wavenumbervector,%
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+    {%
+      doc name = vectorwavenumber,% 
+      doc parameter = \marg{\ensuremath{c_1,\dots,c_n}},%
+    },%
+  }%
+\end{docCommands}
+\checkquantity{wavenumber}
+\begin{docCommand}{work}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \frac{\emptyunit\squared}{\cubic\emptyunit} = \emptyunit^{-1} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \newpage
-% \hypertarget{target3}{\subsection{Physical Constants}}
-% \subsubsection{Defining Physical Constants}
-% \mandi\ has many predefined physical constants. 
-% This section explains how to use them.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{newphysicsconstant}
-{\marg{name}\marg{symbol}{\{\cs{mi at p\marg{approx}\marg{precise}}\}}\marg{\baseunits}
-\\
-\oarg{\drvdunits}\oarg{\altnunits}%
-}%
-
-Defines a new physical constant with a name, a symbol, approximate and 
-precise numerical values, required base units, optional derived units, 
-and optional alternate units. The \cs{mi at p} command is defined
-internally and is not meant to be otherwise used.
+\checkquantity{work}
+\begin{docCommand}{youngsmodulus}{\marg{magnitude}}
 \end{docCommand}
-\begin{dispListing}
-Here is how \planck (Planck's constant) is defined internally, showing 
-each part of the definition on a separate line.
-\newphysicsconstant{planck}
-  {\ensuremath{h}}
-  {\mi at p{6.6}{6.626070040}\timestento{-34}}
-  {\m\squared\usk\kg\usk\reciprocal\s}
-  [\J\usk\s]
-  [\J\usk\s]
-\end{dispListing}
+\checkquantity{youngsmodulus}
 %\iffalse
 %</example>
 %\fi
 %
-% Using this command causes several things to happen.
-% \begin{itemize}
-%   \item A command \cs{name} is created and contains the constant and 
-%   units typeset according to the options given when \mandi\ was loaded.
-%   \item A command \cs{namemathsymbol} is created that expresses
-%   \textbf{only} the constant's mathematical symbol.
-%   \item A command \cs{namevalue} is created that expresses
-%   \textbf{only} the constant's approximate or precise numerical value. 
-%   Note that both values must be present when the constant is defined. 
-%   By default, precise values are always used but this can be changed 
-%   when \mandi\ is loaded. Note how the values are specified in the 
-%   definition of the constant.
-%   \item A command \cs{namebaseunit} is created that expresses 
-%   the constant and its units in \baseunits\ form.
-%   \item A command \cs{namedrvdunit} is created that expresses 
-%   the constant and its units in \drvdunits\ form.
-%   \item A command \cs{namealtnunit} is created that 
-%   expresses the constant and its units in \altnunits\ form.
-%   \item A command \cs{nameonlybaseunit} is created that expresses 
-%   \textbf{only} the constant's units in \baseunits\ form.
-%   \item A command \cs{nameonlydrvdunit} is created that 
-%   expresses \textbf{only} the constant's units in \drvdunits\ form. 
-%   \item A command \cs{nameonlyaltnunit} is created that 
-%   expresses \textbf{only} the constant's units in \altnunits\ form. 
-% \end{itemize}
-% None of these commands takes any arguments.
+% \subsubsection{Defining and Redefining Physical Quantities}
 %
-%
-% There is a command similar to \refCom{redefinephysicsquantity} that allows for
-% redefining physical constants.
-%
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{redefinephysicsconstant}
-{\marg{name}\marg{symbol}{\{\cs{mi at p\marg{approx}\marg{precise}}\}}\marg{\baseunits}
-\\
-\oarg{\drvdunits}\oarg{\altnunits}%
-}%
-Redefines an existing physical constant. 
-The new definition takes effect immediately.
-\end{docCommand}
+\begin{docCommands}[%
+    doc parameter = \marg{name}\marg{base units}\oarg{derived units}\oarg{alternate units},%
+  ]%
+  {%
+    {%
+      doc new = 2021-02-16,%
+      doc name = newscalarquantity,%
+    },%
+    {%
+      doc new=2021-02-21,%
+      doc name = renewscalarquantity,%
+    },%
+  }%
+  Command to (re)define a new/existing scalar quantity. 
+  If the derived or alternate units are omitted, they are 
+  defined to be the same as the base units. Do not use both 
+  this command and 
+  \refCom{newvectorquantity} or \refCom{renewvectorquantity} 
+  to (re)define a quantity.
+\end{docCommands}
 %\iffalse
 %</example>
 %\fi
 %
-% \newpage
-% \subsubsection{Predefined Physical Constants}
-%
-% In this section, precise values of constants are used. Approximate 
-% values are available as an option when the package is loaded. Precise values
-% are sourced as accurately as possible, beginning with Wikipedia and following 
-% sources therein. I tried to use the most recent NIST or similarly authoritative
-% values. In no case did I make up any values.
-%
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{oofpez}{}
-Coulomb constant.
-\end{docCommand}
-\begin{dispExample}
-\(\oofpezmathsymbol \approx \oofpez\)
-\end{dispExample}
+\begin{docCommands}[%
+    doc parameter = \marg{name}\marg{base units}\oarg{derived units}\oarg{alternate units},%
+  ]%
+  {%
+    {%
+      doc new = 2021-02-16,%
+      doc name = newvectorquantity,%
+    },%
+    {%
+      doc new=2021-02-21,%
+      doc name = renewvectorquantity,%
+    },%
+  }%
+  Command to (re)define a new/existing vector quantity. 
+  If the derived or alternate units are omitted, they are 
+  defined to be the same as the base units. Do not use both 
+  this command and 
+  \refCom{newscalarquantity} or \refCom{renewscalarquantity} 
+  to (re)define a quantity.
+\end{docCommands}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{oofpezcs}{}
-Alternate form of Coulomb constant.
-\end{docCommand}
-\begin{dispExample}
-\(\oofpezcsmathsymbol \approx \oofpezcs\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Changing Units}\setplace{ssec:chgunits}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vacuumpermittivity}{}
-Vacuum permittivity.
-\end{docCommand}
-\begin{dispExample}
-\(\vacuumpermittivitymathsymbol \approx \vacuumpermittivity\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% Units are set when \mandi\ is loaded, but the default setting
+% can be easily overridden in four ways: command variants that
+% are defined when a \linktoplace{ssec:physquants}{physical quantity}
+% or \linktoplace{ssec:physconsts}{physical constant} is
+% defined, a global modal command (switch), a 
+% command that sets units for a single instance, and an
+% environment that sets units for its duration. All of these
+% methods work for both physical quantities and physical 
+% constants. 
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{mzofp}{}
-Biot-Savart constant.
-\end{docCommand}
-\begin{dispExample}
-\(\mzofpmathsymbol \approx \mzofp\)
-\end{dispExample}
+\begin{docCommands}[%
+    doc updated = 2021-02-26,%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = alwaysusebaseunits,%
+    },%
+    {%
+      doc name = alwaysusederivedunits,%
+    },%
+    {%
+      doc name = alwaysusealternateunits,%
+    },%
+  }%
+  Modal commands (switches) for setting the default unit form for the entire 
+  document. When \mandi\ is loaded, one of these three commands is executed 
+  depending on whether the optional |units| key is provided. See the section 
+  on loading the package for details. Alternate units are the default because 
+  they are the most likely ones to be seen in introductory physics textbooks.
+\end{docCommands}
 %\iffalse
 %</example>
 %\fi
@@ -3355,11 +1233,32 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{vacuumpermeability}{}
-Vacuum permeability.
-\end{docCommand}
+\begin{docCommands}[%
+    doc updated = 2021-02-26,%
+    doc parameter = \marg{content},%
+  ]%
+  {%
+    {%
+      doc name = hereusebaseunits,%
+    },%
+    {%
+      doc name = hereusederivedunits,%
+    },%
+    {%
+      doc name = hereusedalternateunits,%
+    },%
+  }%
+  Commands for setting the unit form on the fly for a single instance. The 
+  example uses momentum and the Coulomb constant, but they work for any 
+  defined quantity and constant.
+\end{docCommands}
 \begin{dispExample}
-\(\vacuumpermeabilitymathsymbol \approx \vacuumpermeability\)
+  \( \hereusebaseunits{\momentum{5}} \)      \\
+  \( \hereusederivedunits{\momentum{5}} \)   \\
+  \( \hereusealternateunits{\momentum{5}} \) \\
+  \( \hereusebaseunits{\oofpez} \)           \\
+  \( \hereusederivedunits{\oofpez} \)        \\
+  \( \hereusealternateunits{\oofpez} \)
 \end{dispExample}
 %\iffalse
 %</example>
@@ -3368,664 +1267,281 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{boltzmann}{}
-Boltzmann constant.
-\end{docCommand}
+\begin{docEnvironments}[%
+    doc updated = 2021-02-26,%
+    doc parameter = {},%
+  ]%
+  {%
+    {% 
+      doc name = usebaseunits,%
+      doc description = use base units,% 
+    },%
+    {% 
+      doc name = usederivedunits,%
+      doc description = use derived units,%
+    },%
+    {%
+      doc name = usealternateunits,% 
+      doc description = use alternate units,%
+    },%
+  }%
+  Inside these environments units are changed for the duration 
+  of the environment regardless of the global default setting.
+\end{docEnvironments}
 \begin{dispExample}
-\(\boltzmannmathsymbol \approx \boltzmann\)
+  \( \momentum{5} \)   \\
+  \( \oofpez \)        \\
+  \begin{usebaseunits}
+    \( \momentum{5} \) \\
+    \( \oofpez \)      \\
+  \end{usebaseunits}
+  \begin{usederivedunits}
+    \( \momentum{5} \) \\
+    \( \oofpez \)      \\
+  \end{usederivedunits}
+  \begin{usealternateunits}
+    \( \momentum{5} \) \\
+    \( \oofpez \)
+  \end{usealternateunits}
 \end{dispExample}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{boltzmannineV}{}
-Alternate form of Boltlzmann constant.
-\end{docCommand}
-\begin{dispExample}
-\(\boltzmannineVmathsymbol \approx \boltzmannineV\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% \subsection{Physical Constants}
+% \subsubsection{Typesetting Physical Constants}\setplace{ssec:physconsts}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{stefan}{}
-Stefan-Boltzmann constant.
-\end{docCommand}
-\begin{dispExample}
-\(\stefanboltzmannmathsymbol \approx \stefanboltzmann\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% Take the quantity \( \oofpezmathsymbol \), sometimes called the 
+% \href{https://en.wikipedia.org/wiki/Coulomb_constant}{Coulomb constant}, 
+% as the prototypical 
+% \href{https://en.wikipedia.org/wiki/Physical_constant}{physical constant} 
+% in an introductory physics course. Here are all the ways to access this 
+% quantity in \mandi. As you can see, these commands are almost identical 
+% to the corresponding commands for physical quantities.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{planck}{}
-Planck constant.
+\begin{docCommand}[doc label = oofpezdemo]{oofpez}{}
+  Command for the Coulomb constant. The constant's numerical precision and 
+  default units will depend on the options passed to \mandi\ at load time. 
+  Alternate units and approximate numerical values are the defaults. Other 
+  units can be forced as demonstrated.
 \end{docCommand}
 \begin{dispExample}
-\(\planckmathsymbol \approx \planck\)
+  \( \oofpez \)                   \\
+  \( \oofpezapproximatevalue \)   \\
+  \( \oofpezprecisevalue \)       \\
+  \( \oofpezmathsymbol \)         \\
+  \( \oofpezbaseunits \)          \\
+  \( \oofpezderivedunits \)       \\
+  \( \oofpezalternateunits \)     \\
+  \( \oofpezonlybaseunits \)      \\
+  \( \oofpezonlyderivedunits \)   \\
+  \( \oofpezonlyalternateunits \)
 \end{dispExample}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{planckineV}{}
-Alternate form of Planck constant.
-\end{docCommand}
-\begin{dispExample}
-\(\planckmathsymbol \approx \planckineV\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Checking Physical Constants}
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{planckbar}{}
-Reduced Planck constant (Dirac constant).
+\begin{docCommand}[doc updated = 2021-02-26]{checkconstant}{\marg{name}}
+  Command to check and typeset the constant's name, base units, derived 
+  units, alternate units, mathematical symbol, approximate value, and 
+  precise value.
 \end{docCommand}
-\begin{dispExample}
-\(\planckbarmathsymbol \approx \planckbar\)
-\end{dispExample}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{planckbarineV}{}
-Alternate form of reduced Planck constant (Dirac constant).
-\end{docCommand}
-\begin{dispExample}
-\(\planckbarmathsymbol \approx \planckbarineV\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Predefined Physical Constants}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{planckc}{}
-Planck constant times light speed.
-\end{docCommand}
-\begin{dispExample}
-\(\planckcmathsymbol \approx \planckc\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
+% Every other defined physical constant can be treated similarly. Just 
+% replace |oofpez| with the constant's name. Unfortunately, there is no 
+% universal agreement on the names of every constant so don't fret if 
+% the names used here vary from other sources. Here are all the physical 
+% constants, with all their units, defined in \mandi. 
+% The constants \refCom{coulombconstant} and \refCom{biotsavartconstant} are 
+% defined as semantic aliases for, respectively, \refCom{oofpez} and 
+% \refCom{mzofp}.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{planckcineV}{}
-Alternate form of Planck constant times light speed.
+\begin{docCommand}[doc description = exact]{avogadro}{}
 \end{docCommand}
-\begin{dispExample}
-\(\planckcineVmathsymbol \approx \planckcineV\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{rydberg}{}
-Rydberg constant.
+\checkconstant{avogadro}
+\begin{docCommand}[doc new = 2021-02-02]{biotsavartconstant}{}
 \end{docCommand}
-\begin{dispExample}
-\(\rydbergmathsymbol \approx \rydberg\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
+\checkconstant{biotsavartconstant}
 \begin{docCommand}{bohrradius}{}
-Bohr radius.
 \end{docCommand}
-\begin{dispExample}
-\(\bohrradiusmathsymbol \approx \bohrradius\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{finestructure}{}
-Fine structure constant.
+\checkconstant{bohrradius}
+\begin{docCommand}[doc description = exact]{boltzmann}{}
 \end{docCommand}
-\begin{dispExample}
-\(\finestructuremathsymbol \approx \finestructure\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{avogadro}{}
-Avogadro constant.
+\checkconstant{boltzmann}
+\begin{docCommand}[doc new = 2021-02-02]{coulombconstant}{}
 \end{docCommand}
-\begin{dispExample}
-\(\avogadromathsymbol \approx \avogadro\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{universalgrav}{}
-Universal gravitational constant.
+\checkconstant{coulombconstant}
+\begin{docCommand}{earthmass}{}
 \end{docCommand}
-\begin{dispExample}
-\(\universalgravmathsymbol \approx \universalgrav\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{surfacegravfield}{}
-Earth's surface gravitational field strength.
+\checkconstant{earthmass}
+\begin{docCommand}{earthmoondistance}{}
 \end{docCommand}
-\begin{dispExample}
-\(\surfacegravfieldmathsymbol \approx \surfacegravfield\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{clight}{}
-Magnitude of light's velocity (photon constant).
+\checkconstant{earthmoondistance}
+\begin{docCommand}{earthradius}{}
 \end{docCommand}
-\begin{dispExample}
-\(\clightmathsymbol \approx \clight\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{clightinfeet}{}
-Alternate of magnitude of light's velocity (photon constant).
+\checkconstant{earthradius}
+\begin{docCommand}{earthsundistance}{}
 \end{docCommand}
-\begin{dispExample}
-\(\clightinfeetmathsymbol \approx \clightinfeet\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ratom}{}
-Approximate atomic radius.
+\checkconstant{earthsundistance}
+\begin{docCommand}{electroncharge}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Ratommathsymbol \approx \Ratom\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Mproton}{}
-Proton mass.
+\checkconstant{electroncharge}
+\begin{docCommand}{electronCharge}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Mprotonmathsymbol \approx \Mproton\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Mneutron}{}
-Neutron mass.
+\checkconstant{electronCharge}
+\begin{docCommand}{electronmass}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Mneutronmathsymbol \approx \Mneutron\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Mhydrogen}{}
-Hydrogen atom mass.
+\checkconstant{electronmass}
+\begin{docCommand}[doc description = exact]{elementarycharge}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Mhydrogenmathsymbol \approx \Mhydrogen\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Melectron}{}
-Electron mass.
+\checkconstant{elementarycharge}
+\begin{docCommand}{finestructure}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Melectronmathsymbol \approx \Melectron\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{echarge}{}
-Elementary charge quantum.
+\checkconstant{finestructure}
+\begin{docCommand}{hydrogenmass}{}
 \end{docCommand}
-\begin{dispExample}
-\(\echargemathsymbol \approx \echarge\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Qelectron}{}
-Electron charge.
+\checkconstant{hydrogenmass}
+\begin{docCommand}{moonearthdistance}{}
 \end{docCommand}
-\begin{docCommand}{qelectron}{}
-Alias for \cs{Qelectron}.
+\checkconstant{moonearthdistance}
+\begin{docCommand}{moonmass}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Qelectronmathsymbol \approx \Qelectron\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Qproton}{}
-Proton charge.
+\checkconstant{moonmass}
+\begin{docCommand}{moonradius}{}
 \end{docCommand}
-\begin{docCommand}{qproton}{}
-Alias for \cs{Qproton}.
+\checkconstant{moonradius}
+\begin{docCommand}{mzofp}{}
 \end{docCommand}
-\begin{dispExample}
-\(\Qprotonmathsymbol \approx \Qproton\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{MEarth}{}
-Earth's mass.
+\checkconstant{mzofp}
+\begin{docCommand}{neutronmass}{}
 \end{docCommand}
-\begin{dispExample}
-\(\MEarthmathsymbol \approx \MEarth\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{MMoon}{}
-Moon's mass.
+\checkconstant{neutronmass}
+\begin{docCommand}{oofpez}{}
 \end{docCommand}
-\begin{dispExample}
-\(\MMoonmathsymbol \approx \MMoon\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{MSun}{}
-Sun's mass.
+\checkconstant{oofpez}
+\begin{docCommand}{oofpezcs}{}
 \end{docCommand}
-\begin{dispExample}
-\(\MSunmathsymbol \approx \MSun\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{REarth}{}
-Earth's radius.
+\checkconstant{oofpezcs}
+\begin{docCommand}[doc description = exact]{planck}{}
 \end{docCommand}
-\begin{dispExample}
-\(\REarthmathsymbol \approx \REarth\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RMoon}{}
-Moon's radius.
+\checkconstant{planck}
+\begin{docCommand}{planckbar}{}
 \end{docCommand}
-\begin{dispExample}
-\(\RMoonmathsymbol \approx \RMoon\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RSun}{}
-Sun's radius.
+\checkconstant{planckbar}
+\begin{docCommand}{planckc}{}
 \end{docCommand}
-\begin{dispExample}
-\(\RSunmathsymbol \approx \RSun\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ESdist}{}
-Earth-Sun distance.
+\checkconstant{planckc}
+\begin{docCommand}{protoncharge}{}
 \end{docCommand}
-\begin{docCommand}{SEdist}{}
-Alias for \refCom{ESdist}.
+\checkconstant{protoncharge}
+\begin{docCommand}{protonCharge}{}
 \end{docCommand}
-\begin{dispExample}
-\(\ESdistmathsymbol \approx \SEdist\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{EMdist}{}
-Earth-Moon distance.
+\checkconstant{protonCharge}
+\begin{docCommand}{protonmass}{}
 \end{docCommand}
-\begin{docCommand}{MEdist}{}
-Alias for \refCom{EMdist}.
+\checkconstant{protonmass}
+\begin{docCommand}{rydberg}{}
 \end{docCommand}
-\begin{dispExample}
-\(\EMdistmathsymbol \approx \EMdist\)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\subsubsection{All Predefined Constants}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{chkconstant}{\marg{constantname}}
-Diagnostic command for the symbol, value (either approximate or precise depending 
-on how the package was loaded), and units for a defined physical constant. See table 
-below.
+\checkconstant{rydberg}
+\begin{docCommand}[doc description = exact]{speedoflight}{}
 \end{docCommand}
-%\iffalse
-%</example>
-%\fi
-%
-% Here are all the predefined constants and their units.
-%\begin{adjustwidth}{}{}
-%
-%\chkconstant{oofpez}
-%\chkconstant{oofpezcs}
-%\chkconstant{vacuumpermittivity}
-%\chkconstant{mzofp}
-%\chkconstant{vacuumpermeability}
-%\chkconstant{boltzmann}
-%\chkconstant{boltzmannineV}
-%\chkconstant{stefanboltzmann}
-%\chkconstant{planck}
-%\chkconstant{planckineV}
-%\chkconstant{planckbar}
-%\chkconstant{planckbarineV}
-%\chkconstant{planckc}
-%\chkconstant{planckcineV}
-%\chkconstant{rydberg}
-%\chkconstant{bohrradius}
-%\chkconstant{finestructure}
-%\chkconstant{avogadro}
-%\chkconstant{universalgrav}
-%\chkconstant{surfacegravfield}
-%\chkconstant{clight}
-%\chkconstant{clightinfeet}
-%\chkconstant{Ratom}
-%\chkconstant{Mproton}
-%\chkconstant{Mneutron}
-%\chkconstant{Mhydrogen}
-%\chkconstant{Melectron}
-%\chkconstant{echarge}
-%\chkconstant{Qelectron}
-%\chkconstant{qelectron}
-%\chkconstant{Qproton}
-%\chkconstant{qproton}
-%\chkconstant{MEarth}
-%\chkconstant{MMoon}
-%\chkconstant{MSun}
-%\chkconstant{REarth}
-%\chkconstant{RMoon}
-%\chkconstant{RSun}
-%\chkconstant{ESdist}
-%\chkconstant{EMdist}
-%\chkconstant{LSun}
-%\chkconstant{TSun}
-%\chkconstant{MagSun}
-%\chkconstant{magSun}
-%\end{adjustwidth}
-%
-% \subsection{Astronomical Constants and Quantities}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LSun}{}
-Sun's luminosity.
+\checkconstant{speedoflight}
+\begin{docCommand}{stefanboltzmann}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\LSunmathsymbol \approx \LSun\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{TSun}{}
-Sun's effective temperature.
+\checkconstant{stefanboltzmann}
+\begin{docCommand}{sunearthdistance}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\TSunmathsymbol \approx \TSun\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{MagSun}{}
-Sun's absolute magnitude.
+\checkconstant{sunearthdistance}
+\begin{docCommand}{sunradius}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\MagSunmathsymbol \approx \MagSun\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magSun}{}
-Sun's apparent magnitude.
+\checkconstant{sunradius}
+\begin{docCommand}{surfacegravfield}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\magSunmathsymbol \approx \magSun\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Lstar}{\oarg{object}}
-Symbol for stellar luminosity.
+\checkconstant{surfacegravfield}
+\begin{docCommand}{universalgrav}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Lstar or \Lstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Lsolar}{}
-Symbol for solar luminosity as a unit. Really just an alias for 
-|\Lstar[\(\odot\)]|.
+\checkconstant{universalgrav}
+\begin{docCommand}{vacuumpermeability}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Lsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Tstar}{\oarg{object}}
-Symbol for stellar temperature.
+\checkconstant{vacuumpermeability}
+\begin{docCommand}{vacuumpermittivity}{}
 \end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Tstar or \Tstar[Sirius]
-\end{dispExample*}
+\checkconstant{vacuumpermittivity}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Tsolar}{}
-Symbol for solar temperature as a unit. Really just an alias for 
-|\Tstar[\(\odot\)]|.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Tsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Defining and Redefining Physical Constants}
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{Rstar}{\oarg{object}}
-Symbol for stellar radius.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Rstar or \Rstar[Sirius]
-\end{dispExample*}
+\begin{docCommands}[%
+    doc parameter = {%
+    \marg{name}\marg{symbol}\marg{approximate value}\marg{precise value}\marg{base units}\\
+    \oarg{derived units}\oarg{alternate units}%
+    },%
+  ]%
+  {%
+    {%
+      doc new = 2021-02-16,%
+      doc name = newphysicalconstant,%
+    },%
+    {%
+      doc new=2021-02-21,%
+      doc name = renewphysicalconstant,%
+    },%
+  }%
+  Command to define/redefine a new/existing physical constant. 
+  If the derived or alternate units are omitted, they are 
+  defined to be the same as the base units.
+\end{docCommands}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Rsolar}{}
-Symbol for solar radius as a unit. Really just an alias for 
-|\Rstar[\(\odot\)]|.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Rsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \subsubsection{Changing Precision}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Mstar}{\oarg{object}}
-Symbol for stellar mass.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Mstar or \Mstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \linktoplace{ssec:chgunits}{Changing units} works for
+% physical constants just as it does for physical quantities.
+% A similar mechanism is provided for changing the precision
+% of physical constants' numerical values.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{Msolar}{}
-Symbol for solar mass as a unit. Really just an alias for 
-|\Mstar[\(\odot\)]|.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Msolar
-\end{dispExample*}
+\begin{docCommands}[%
+    doc new = 2021-02-16,%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = alwaysuseapproximateconstants,%
+    },%
+    {%
+      doc name = alwaysusepreciseconstants,%
+    },%
+  }%
+  Modal commands (switches) for setting the default precision for the entire 
+  document. The default when the package is loaded is set by the presence or
+  absence of the \refKey{preciseconstants} key. 
+\end{docCommands}
 %\iffalse
 %</example>
 %\fi
@@ -4033,301 +1549,23 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{Fstar}{\oarg{object}}
-Symbol for stellar flux.
-\end{docCommand}
-\begin{docCommand}{fstar}{}
-Alias for \refCom{Fstar}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Fstar or \Fstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Fsolar}{}
-Symbol for solar flux as a unit. Really just an alias for 
-|\Fstar[\(\odot\)]|.
-\end{docCommand}
-\begin{docCommand}{fsolar}{}
-Alias for \refCom{fsolar}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Fsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Magstar}{\oarg{object}}
-Symbol for stellar absolute magnitude.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Magstar or \Magstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Magsolar}{}
-Symbol for solar absolute magnitude as a unit. Really just an alias for 
-|\Magstar[\(\odot\)]|.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Magsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magstar}{\oarg{object}}
-Symbol for stellar apparent magnitude.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magstar or \magstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magsolar}{}
-Symbol for solar apparent magnitude as a unit. Really just an alias for 
-|\magstar[\(\odot\)]|.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Dstar}{\oarg{object}}
-Symbol for stellar distance.
-\end{docCommand}
-\begin{docCommand}{dstar}{}
-Alias for \refCom{Dstar} that uses a lower case d.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Dstar or \Dstar[Sirius]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Dsolar}{}
-Symbol for solar distance as a unit. Really just an alias for 
-|\Dstar[\(\odot\)]|.
-\end{docCommand}
-\begin{docCommand}{dsolar}{}
-Alias for \refCom{Dsolar} that uses a lower case d.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Dsolar
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Symbolic Expressions with Vectors}
-% \subsubsection{Basic Vectors}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vect}{\marg{kernel}}
-Symbol for a vector quantity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vect{p}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magvect}{\marg{kernel}}
-Symbol for magnitude of a vector quantity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magvect{p}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magsquaredvect}{\marg{kernel}}
-Symbol for squared magnitude of a vector quantity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magsquaredvect{p}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magnvect}{\marg{kernel}\marg{exponent}}
-Symbol for magnitude of a vector quantity to arbitrary power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magnvect{r}{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dirvect}{\marg{kernel}}
-Symbol for direction of a vector quantity.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dirvect{p}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{factorvect}{\marg{kernel}}
-Symbol for a vector factored into its magnitude and direction. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\factorvect{E}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{componentalong}{\marg{alongvector}\marg{ofvector}}
-Symbol for the component along a vector of another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\componentalong{\vect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{expcomponentalong}{\marg{alongvector}\marg{ofvector}}
-Symbolic expression for the component along a vector of another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\expcomponentalong{\vect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ucomponentalong}{\marg{alongvector}\marg{ofvector}}
-Symbolic expression with unit vectors for the component along a vector of 
-another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ucomponentalong{\dirvect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{projectiononto}{\marg{ontovector}\marg{ofvector}}
-Symbol for the projection onto a vector of another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\projectiononto{\vect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{expprojectiononto}{\marg{alongvector}\marg{ofvector}}
-Symbolic expression for the projection onto a vector of another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\expprojectiononto{\vect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{uprojectiononto}{\marg{alongvector}\marg{ofvector}}
-Symbolic expression with unit vectors for the projection onto a vector of 
-another vector. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\uprojectiononto{\dirvect{v}}{\vect{u}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{mivector}
-  {\oarg{printeddelimiter}\marg{commadelimitedlistofcomps}\oarg{unit}}
-Generic workhorse command for vectors formatted as in \mi. Unless the first
-optional argument is specified, a comma is used in the output. Commas are
-always required in the mandatory argument.
-\end{docCommand}
+\begin{docCommands}[%
+    doc new = 2021-02-16,%
+    doc parameter = \marg{content},%
+  ]%
+  {%
+    {%
+      doc name = hereuseapproximateconstants,%
+    },%
+    {%
+      doc name = hereusepreciseconstants,%
+    },%
+  }%
+  Commands for setting the precision on the fly for a single instance.
+\end{docCommands}
 \begin{dispExample}
-\begin{mysolution*}
-  \msub{u}{\mu} &= \mivector{\ezero,\eone,\etwo,\ethree}        \\
-  \msub{u}{\mu} &= \mivector[\quad]{\ezero,\eone,\etwo,\ethree} \\
-  \vect{v} &= \mivector{1,3,5}[\velocityonlyaltnunit]           \\
-  \vect{E} &= \mivector{\oofpezmathsymbol \frac{Q}{x^2},0,0}    \\
-  \vect{E} &= \mivector[\quad]{\oofpezmathsymbol \frac{Q}{x^2},0,0}
-\end{mysolution*}
+  \( \hereuseapproximateconstants{\oofpez} \) \\
+  \( \hereusepreciseconstants{\oofpez} \)
 \end{dispExample}
 %\iffalse
 %</example>
@@ -4336,142 +1574,244 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{magvectncomps}{\marg{listofcomps}\oarg{unit}}
-Expression for a vector's magnitude with numerical components and an optional 
-unit. The first example is the preferred and recommended way to handle units when 
-they are needed. The second example requires explicitly picking out the desired 
-unit form. The third example demonstrates components of a unit vector.
-\end{docCommand}
+\begin{docEnvironments}[%
+    doc new = 2021-02-16,%
+    doc parameter = {},%
+  ]%
+  {%
+    {% 
+      doc name = useapproximateconstants,%
+      doc description = use approximate constants,% 
+    },%
+    {% 
+      doc name = usepreciseconstants,%
+      doc description = use precise constants,%
+    },%
+  }%
+  Inside these environments precision is changed for the duration 
+  of the environment regardless of the global default setting.
+\end{docEnvironments}
 \begin{dispExample}
-\magvectncomps{\velocity{3.12},\velocity{4.04},\velocity{6.73}} \\
-\magvectncomps{3.12,4.04,6.73}[\velocityonlyaltnunit]           \\
-\magvectncomps{\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}},\frac{1}{\sqrt{3}}}
+  \( \oofpez \)                   \\
+  \begin{useapproximateconstants}
+    \( \oofpez \)                 \\
+  \end{useapproximateconstants}
+  \begin{usepreciseconstants}
+    \( \oofpez \)                 \\
+  \end{usepreciseconstants}
+  \( \oofpez \)
 \end{dispExample}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsvect}{\marg{kernel}}
-Expression for a vector's symbolic components.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scompsvect{E}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \subsection{Predefined Units and Constructs}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compvect}{\marg{kernel}\marg{component}}
-Isolates one of a vector's symbolic components.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\compvect{E}{y}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% These commands should be used only in defining or
+% redefining physical quantities or physical
+% constants. One exception is \refCom{emptyunit},
+% which may be used for explanatory purposes.
 %
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{scompsdirvect}{\marg{kernel}}
-Expression for a direction's symbolic components. The hats are necessary to
-denote a direction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scompsdirvect{r}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compdirvect}{\marg{kernel}\marg{component}}
-Isolates one of a direction's symbolic components. The hat is necessary to
-denote a direction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\compdirvect{r}{z}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magvectscomps}{\marg{kernel}}
-Expression for a vector's magnitude in terms of its symbolic components.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magvectscomps{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Differentials and Derivatives of Vectors}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dvect}{\marg{kernel}}
-Symbol for the differential of a vector.
-\end{docCommand}
-\begin{docCommand}{Dvect}{\marg{kernel}}
-Identical to \refCom{dvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-a change \dvect{E} in electric field \\
-a change \Dvect{E} in electric field
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dirdvect}{\marg{kernel}}
-Symbol for the direction of a vector's differential.
-\end{docCommand}
-\begin{docCommand}{dirDvect}{\marg{kernel}}
-Identical to \refCom{dirdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the direction \dirdvect{E} of the change \\
-the direction \dirDvect{E} of the change
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ddirvect}{\marg{kernel}}
-Symbol for the differential of a vector's direction.
-\end{docCommand}
-\begin{docCommand}{Ddirvect}{\marg{kernel}}
-Identical to \refCom{ddirvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{docCommand}{ddirection}{\marg{kernel}}
-Alias for \refCom{ddirvect}.
-\end{docCommand}
-\begin{docCommand}{Ddirection}{\marg{kernel}}
-Alias for \refCom{Ddirvect}.
-\end{docCommand}
+\begin{docCommands}[%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = per,%
+    },%
+    {%
+      doc name = usk,%
+    },%
+    {%
+      doc parameter = \marg{magnitude}\marg{unit},%
+      doc name = unit,%
+    },%
+    {%
+      doc name = emptyunit,%
+    },%
+    {%
+      doc name = ampere,%
+    },%
+    {%
+      doc name = atomicmassunit,%
+    },%
+    {%
+      doc name = candela,%
+    },%
+    {%
+      doc name = coulomb,%
+    },%
+    {%
+      doc name = degree,%
+    },%
+    {%
+      doc name = electronvolt,%
+      doc description = not SI but common in introductory physics,%
+    },%
+    {%
+      doc new = 2021-04-15,%
+      doc name = ev,%
+      doc description = alias,%
+    },%
+    {%
+      doc name = farad,%
+    },%
+    {%
+      doc name = henry,%
+    },%
+    {%
+      doc name = hertz,%
+    },%
+    {%
+      doc name = joule,%
+    },%
+    {%
+      doc name = kelvin,%
+    },%
+    {%
+      doc new = 2021-04-15,%
+      doc name = kev,%
+      doc description = alias,%
+    },%
+    {%
+      doc new = 2021-04-15,%
+      doc name = kiloelectronvolt,%
+      doc description = not SI but common in introductory physics,%
+    },%
+    {%
+      doc name = kilogram,%
+    },%
+    {%
+      doc name = lightspeed,%
+      doc description = not SI but common relativity,%
+    },%
+    {%
+      doc new = 2021-04-15,%
+      doc name = megaelectronvolt,%
+      doc description = not SI but common in introductory physics,%
+    },%
+    {%
+      doc name = meter,%
+    },%
+    {%
+      doc name = metre,%
+      doc description = alias,%
+    },%
+    {%
+      doc new = 2021-04-15,%
+      doc name = mev,%
+      doc description = alias,%
+    },%
+    {%
+      doc name = mole,%
+    },%
+    {%
+      doc name = newton,%
+    },%
+    {%
+      doc name = ohm,%
+    },%
+    {%
+      doc name = pascal,%
+    },%
+    {%
+      doc name = radian,%
+    },%
+    {%
+      doc name = second,%
+    },%
+    {%
+      doc name = siemens,%
+    },%
+    {%
+      doc name = steradian,%
+    },%
+    {%
+      doc name = tesla,%
+    },%
+    {%
+      doc name = volt,%
+    },%
+    {%
+      doc name = watt,%
+    },%
+    {%
+      doc name = weber,%
+    },%
+    {%
+      doc name = tothetwo,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = tothethree,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = tothefour,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = inverse,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = totheinversetwo,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = totheinversethree,%
+      doc description = postfix,%
+    },%
+    {%
+      doc name = totheinversefour,%
+      doc description = postfix,%
+    },%
+  }%
+\end{docCommands}
 \begin{dispExample}
-the change \ddirvect{E} or \ddirection{E} in the direction of \vect{E} \\
-the change \Ddirvect{E} or \Ddirection{E} in the direction of \vect{E}
+  \( \per \)                         \\
+  \( \usk \)                         \\
+  \( \unit{3}{\meter\per\second} \)  \\
+  \( \emptyunit \)                   \\
+  \( \ampere \)                      \\
+  \( \atomicmassunit \)              \\
+  \( \candela \)                     \\
+  \( \coulomb \)                     \\
+  \( \degree \)                      \\
+  \( \electronvolt \)                \\
+  \( \farad \)                       \\
+  \( \henry \)                       \\
+  \( \hertz \)                       \\
+  \( \joule \)                       \\
+  \( \kelvin \)                      \\
+  \( \kev \)                         \\
+  \( \kilogram \)                    \\
+  \( \lightspeed \)                  \\
+  \( \meter \)                       \\
+  \( \metre \)                       \\
+  \( \mev \)                         \\
+  \( \mole \)                        \\
+  \( \newton \)                      \\
+  \( \ohm \)                         \\
+  \( \pascal \)                      \\
+  \( \radian \)                      \\
+  \( \second \)                      \\
+  \( \siemens \)                     \\
+  \( \steradian \)                   \\
+  \( \tesla \)                       \\
+  \( \volt \)                        \\
+  \( \watt \)                        \\
+  \( \weber \)                       \\
+  \( \emptyunit\tothetwo \)          \\
+  \( \emptyunit\tothethree \)        \\
+  \( \emptyunit\tothefour \)         \\
+  \( \emptyunit\inverse \)           \\
+  \( \emptyunit\totheinversetwo \)   \\
+  \( \emptyunit\totheinversethree \) \\
+  \( \emptyunit\totheinversefour \) 
 \end{dispExample}
 %\iffalse
 %</example>
@@ -4480,125 +1820,26 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{magdvect}{\marg{kernel}}
-Symbol for the magnitude of a vector's differential.
-\end{docCommand}
-\begin{docCommand}{magDvect}{\marg{kernel}}
-Identical to \refCom{magdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the magnitude \magdvect{E} of the change \\
-the magnitude \magDvect{E} of the change
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dmagvect}{\marg{kernel}}
-Symbol for the differential of a vector's magnitude.
-\end{docCommand}
-\begin{docCommand}{Dmagvect}{\marg{kernel}}
-Identical to \refCom{dmagvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the change \dmagvect{E} in the magnitude \\
-the change \Dmagvect{E} in the magnitude
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsdvect}{\marg{kernel}}
-Symbolic components of a vector.
-\end{docCommand}
-\begin{docCommand}{scompsDvect}{\marg{kernel}}
-Identical to \refCom{scompsdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the vector \scompsdvect{E} \\
-the vector \scompsDvect{E}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compdvect}{\marg{kernel}\marg{component}}
-Isolates one symbolic component of a vector's differential.
-\end{docCommand}
-\begin{docCommand}{compDvect}{\marg{kernel}\marg{component}}
-Identical to \refCom{compdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the \compdvect{E}{y} component of the change \\
-the \compDvect{E}{y} component of the change
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervect}{\marg{kernel}\marg{indvar}}
-Symbol for a vector's derivative with respect to an independent variable.
-\end{docCommand}
-\begin{docCommand}{Dervect}{\marg{kernel}\marg{indvar}}
-Identical to \refCom{dervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the derivative \dervect{E}{t} \\
-the derivative \Dervect{E}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dermagvect}{\marg{kernel}\marg{indvar}}
-Symbol for the derivative of a vector's magnitude with respect to an 
-independent variable.
-\end{docCommand}
-\begin{docCommand}{Dermagvect}{\marg{kernel}\marg{indvar}}
-Identical to \refCom{dermagvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the derivative \dermagvect{E}{t} \\
-the derivative \Dermagvect{E}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{derdirvect}{\marg{kernel}\marg{indvar}}
-Symbol for the derivative of a vector's direction with respect to an 
-independent variable.
-\end{docCommand}
-\begin{docCommand}{derdirection}{\marg{kernel}\marg{indvar}}
-Alias for \refCom{derdirvect}.
-\end{docCommand}
-\begin{docCommand}{Derdirvect}{\marg{kernel}\marg{indvar}}
-Identical to \refCom{derdirvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{docCommand}{Derdirection}{\marg{kernel}\marg{indvar}}
-Alias for \refCom{Derdirvect}.
-\end{docCommand}
+\begin{docCommands}[%
+    doc parameter = \marg{number},%
+  ]%
+  {%
+    {%
+      doc name = tento,%
+    },%
+    {%
+      doc name = timestento,%
+    },%
+    {%
+      doc name = xtento,%
+    },%
+  }%
+  Commands for powers of ten and scientific notation.
+\end{docCommands}
 \begin{dispExample}
-the derivative \derdirvect{E}{t} or \derdirection{E}{t} \\
-the derivative \Derdirvect{E}{t} or \Derdirection{E}{t}
+ \( \tento{-4} \)      \\
+ \( 3\timestento{8} \) \\
+ \( 3\xtento{8} \)
 \end{dispExample}
 %\iffalse
 %</example>
@@ -4607,6210 +1848,1028 @@
 %\iffalse
 %<*example>
 %\fi
-\begin{docCommand}{scompsdervect}{\marg{kernel}\marg{indvar}}
-Symbolic components of a vector's derivative with respect to an independent 
-variable.
+\begin{docCommand}{mivector}{%
+    \oarg{delimiter}\marg{\ensuremath{c_1,\dots,c_n}}\oarg{units}
+  }%
+  Typesets a vector as either numeric or symbolic components with an 
+  optional unit (for numerical components only). There can be more 
+  than three components. The delimiter used in the list of components 
+  can be specified; the default is a comma. The notation mirrors that of 
+  \emph{Matter \& Interactions}.
 \end{docCommand}
-\begin{docCommand}{scompsDervect}{\marg{kernel}\marg{indvar}}
-Identical to \refCom{scompsdervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the derivative \scompsdervect{E}{t} \\
-the derivative \scompsdervect{E}{t}
+\begin{dispExample*}{lefthand ratio=0.65}
+  \( \mivector{p_0,p_1,p_2,p_3} \)                        \\
+  \( \mivector{\gamma m v_x,\gamma m v_y,\gamma m v_z} \) \\
+  \( \mivector{\frac{Q_1Q_2}{x^2},0,0} \)                 \\
+  \( \mivector{-1,0,0} \)                                 \\
+  \( \mivector{-1,0,0}[\velocityonlyderivedunits] \)      \\
+  \( \mivector{-1,0,0}[\meter\per\second] \)              \\
+  \( \velocity{\mivector{-1,0,0}} \)
 \end{dispExample*}
 %\iffalse
 %</example>
 %\fi
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compdervect}{\marg{kernel}\marg{component}\marg{indvar}}
-Isolates one component of a vector's derivative with respect to an 
-independent variable.
-\end{docCommand}
-\begin{docCommand}{compDervect}{\marg{kernel}\marg{component}\marg{indvar}}
-Identical to \refCom{compdervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the derivative \compdervect{E}{y}{t} \\
-the derivative \compDervect{E}{y}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \StopEventually{}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magdervect}{\marg{kernel}\marg{indvar}}
-Symbol for the magnitude of a vector's derivative with respect to an 
-independent variable.
-\end{docCommand}
-\begin{docCommand}{magDervect}{\marg{kernel}\marg{indvar}}
-Identical to \refCom{magdervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the derivative \magdervect{E}{t} \\
-the derivative \magDervect{E}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \newgeometry{left=0.50in,right=0.50in,top=1.00in,bottom=1.00in}
+% \subsection{\mandi\ Source Code}
 %
-% \subsubsection{Naming Conventions You Have Seen}
-% By now you probably understand that commands are named as closely as 
-% possible to the way you would say or write what you want. Every time you 
-% see |comp| you should think of a single component. Every time you see 
-% |scomps| you should think of a set of symbolic components. Every time you 
-% see |der| you should think derivative. Every time you see |dir| you should 
-% think direction. I have tried to make the names simple both logically and 
-% lexically.
+% \iffalse
+%<*package>
+% \fi
+% Definine the package version and date for global use, exploiting the fact
+% that in a \pkg{.sty} file there is now no need for |\makeatletter| and
+% |\makeatother|. This simplifies defining internal commands (with |@| 
+% in the name) that are not for the user to know about.
 %
-% \subsubsection{Subscripted or Indexed Vectors}
-% Now we have commands for vectors that carry subscripts or indices, usually 
-% to identify an object or something similar. Basically, \refCom{vect} becomes 
-% \refCom{vectsub}. Ideally, a subscript should not contain mathematical symbols. 
-% However, if you wish to do so, just wrap the symbol with |\(|\(\ldots \)|\)|
-% as you normally would. All of the commands for non-subscripted vectors are 
-% available for subscripted vectors.
+%    \begin{macrocode}
+\def\mandi at version{3.0.0}
+\def\mandi at date{2021-08-21}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandi.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandi}
+  [\mandi at date\space v\mandi at version\space Macros for physical quantities]
+%    \end{macrocode}
 %
-% As a matter of convention, when the initial and final values of a quantity 
-% are referenced, they should be labeled with subscripts |i| and |f| respectively 
-% using the commands in this section and similarly named commands in other 
-% sections. If the quantity also refers to a particular entity (e.g.\ a ball), 
-% specify the |i| or |f| with a comma after the label 
-% (e.g.\ |\vectsub{r}{ball,f}|).
+% Define a convenient package version command.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsub}{\marg{kernel}\marg{sub}}
-Symbol for a subscripted vector.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-the vector \vectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\newcommand*{\mandiversion}{v\mandi at version\space dated \mandi at date}
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magvectsub}{\marg{kernel}\marg{sub}}
-Symbol for a subscripted vector's magnitude.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Load third party packages, documenting why each one is needed.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magsquaredvectsub}{\marg{kernel}\marg{sub}}
-Symbol for a subscripted vector's squared magnitude.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magsquaredvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\RequirePackage{pgfopts}      % needed for key-value interface
+\RequirePackage{array}        % needed for \checkquantity and \checkconstant
+\RequirePackage{iftex}        % needed for requiring LuaLaTeX
+\RequirePackage{unicode-math} % needed for Unicode support
+\RequireLuaTeX                % require this engine
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magnvectsub}{\marg{kernel}\marg{sub}\marg{exponent}}
-Symbol for a subscripted vector's magnitude to an arbitrary power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magnvectsub{r}{dipole}{5}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Parts of the unit engine have been rewritten with 
+% \href{https://www.ctan.org/pkg/xparse}{\pkg{xparse}} for both clarity 
+% and power. Note that \pkg{xparse} is now part of the \LaTeX\ kernel. 
+% Other parts have been rewriten in 
+% \href{https://www.ctan.org/pkg/expl}{\pkg{expl}} with a look to the 
+% future.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dirvectsub}{\marg{kernel}\marg{sub}}
-Symbol for a subscripted vector's direction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dirvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Generic internal selectors.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsvectsub}{\marg{kernel}\marg{sub}}
-Symbolic components of a subscripted vector.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scompsvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\newcommand*{\mandi at selectunits}{}
+\newcommand*{\mandi at selectprecision}{}
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compvectsub}{\marg{kernel}\marg{sub}\marg{component}}
-Isolates one component of a subscripted vector.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\compvectsub{p}{ball}{z}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Specific internal selectors.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magvectsubscomps}{\marg{kernel}\marg{sub}}
-Expression for a subscripted vector's magnitude in terms of symbolic 
-components.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magvectsubscomps{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-% 
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dvectsub}{\marg{kernel}\marg{sub}}
-Differential of a subscripted vector.
-\end{docCommand}
-\begin{docCommand}{Dvectsub}{\marg{kernel}\marg{sub}}
-Identical to \refCom{dvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dvectsub{p}{ball} \\
-\Dvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\newcommand*{\mandi at selectapproximate}[2]{#1}    % really \@firstoftwo
+\newcommand*{\mandi at selectprecise}[2]{#2}        % really \@secondoftwo
+\newcommand*{\mandi at selectbaseunits}[3]{#1}      % really \@firstofthree
+\newcommand*{\mandi at selectderivedunits}[3]{#2}   % really \@secondofthree
+\newcommand*{\mandi at selectalternateunits}[3]{#3} % really \@thirdofthree
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsdvectsub}{\marg{kernel}\marg{sub}}
-Symbolic components of a subscripted vector's differential.
-\end{docCommand}
-\begin{docCommand}{scompsDvectsub}{\marg{kernel}\marg{sub}}
-Identical to \refCom{scompsdvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scompsdvectsub{p}{ball} \\
-\scompsDvectsub{p}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Document level global switches.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compdvectsub}{\marg{kernel}\marg{sub}\marg{component}}
-Isolates one component of a subscripted vector's differential.
-\end{docCommand}
-\begin{docCommand}{compDvectsub}{\marg{kernel}\marg{sub}\marg{component}}
-Identical to \refCom{compdvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\compdvectsub{p}{ball}{y} \\
-\compDvectsub{p}{ball}{y}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\NewDocumentCommand{\alwaysusebaseunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectbaseunits}}%
+\NewDocumentCommand{\alwaysusederivedunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectderivedunits}}%
+\NewDocumentCommand{\alwaysusealternateunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectalternateunits}}%
+\NewDocumentCommand{\alwaysuseapproximateconstants}{}
+  {\renewcommand*{\mandi at selectprecision}{\mandi at selectapproximate}}%
+\NewDocumentCommand{\alwaysusepreciseconstants}{}
+  {\renewcommand*{\mandi at selectprecision}{\mandi at selectprecise}}%
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Symbol for derivative of a subscripted vector with respect to an 
-independent variable.
-\end{docCommand}
-\begin{docCommand}{Dervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Identical to \refCom{dervectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dervectsub{p}{ball}{t} \\
-\Dervectsub{p}{ball}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Document level localized variants.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dermagvectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Symbol for the derivative of a subscripted vector's magnitude with respect 
-to an independent variable.
-\end{docCommand}
-\begin{docCommand}{Dermagvectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Identical to \refCom{dermagvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dermagvectsub{E}{ball}{t} \\
-\Dermagvectsub{E}{ball}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\NewDocumentCommand{\hereusebaseunits}{ m }{\begingroup\alwaysusebaseunits#1\endgroup}%
+\NewDocumentCommand{\hereusederivedunits}{ m }{\begingroup\alwaysusederivedunits#1\endgroup}%
+\NewDocumentCommand{\hereusealternateunits}{ m }{\begingroup\alwaysusealternateunits#1\endgroup}%
+\NewDocumentCommand{\hereuseapproximateconstants}{ m }{\begingroup\alwaysuseapproximateconstants#1\endgroup}%
+\NewDocumentCommand{\hereusepreciseconstants}{ m }{\begingroup\alwaysusepreciseconstants#1\endgroup}%
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsdervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Symbolic components of a subscripted vector's derivative with respect to 
-an independent variable.
-\end{docCommand}
-\begin{docCommand}{scompsDervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Identical to \refCom{scompsdervectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scompsdervectsub{p}{ball}{t} \\
-\scompsDervectsub{p}{ball}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Document level environments.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{compdervectsub}{\marg{kernel}\marg{sub}\marg{component}
-\marg{indvar}}
-Isolates one component of a subscripted vector's derivative with respect 
-to an independent variable.
-\end{docCommand}
-\begin{docCommand}{compDervectsub}{\marg{kernel}\marg{sub}\marg{component}
-\marg{indvar}}
-Identical to \refCom{compdervectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\compdervectsub{p}{ball}{y}{t} \\
-\compDervectsub{p}{ball}{y}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\NewDocumentEnvironment{usebaseunits}{}{\alwaysusebaseunits}{}%
+\NewDocumentEnvironment{usederivedunits}{}{\alwaysusederivedunits}{}%
+\NewDocumentEnvironment{usealternateunits}{}{\alwaysusealternateunits}{}%
+\NewDocumentEnvironment{useapproximateconstants}{}{\alwaysuseapproximateconstants}{}%
+\NewDocumentEnvironment{usepreciseconstants}{}{\alwaysusepreciseconstants}{}%
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magdervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Symbol for magnitude of a subscripted vector's derivative with respect 
-to an independent variable.
-\end{docCommand}
-\begin{docCommand}{magDervectsub}{\marg{kernel}\marg{sub}\marg{indvar}}
-Identical to \refCom{magdervectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magdervectsub{p}{ball}{t} \\
-\magDervectsub{p}{ball}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% \mandi\ now has a key-value interface, implemented with 
+% \href{https://www.ctan.org/pkg/pgfopts}{\pkg{pgfopts}} and 
+% \href{https://www.ctan.org/pkg/pgfkeys}{\pkg{pgfkeys}}.
+% There are two options:\newline
+% \refKey{units}, with values \docValue{base}, \docValue{derived}, or 
+% \docValue{alternate} selects the default form of units\newline
+% \refKey{preciseconstants}, with values \docValue{true} and 
+% \docValue{false}, selects precise numerical values for constants 
+% rather than approximate values. 
 %
-% \subsubsection{Expressions Containing Dots}
-% Now we get to commands that will save you many, many keystrokes. All of 
-% the naming conventions documented in earlier commands still apply. There 
-% are some new ones though. Every time you see |dot| you should think 
-% \emph{dot product}. When you see |dots| you should think \emph{dot 
-% product in terms of symbolic components}. When you see |dote| you should 
-% think \emph{dot product expanded as a sum}. These, along with the previous 
-% naming conventions, handle many dot product expressions.
+% First, define the keys. The key handlers require certain commands defined 
+% by the unit engine.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotvect}{\marg{kernel1}\marg{kernel2}}
-Symbol for dot of two vectors as a single symbol.
-\end{docCommand}
-\begin{docCommand}{vectDotvect}{\marg{kernel1}\marg{kernel2}}
-Same as \cs{vectdotvect} but uses \cs{bullet}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotvect{\vect{F}}{\vect{v}} \\
-\vectDotvect{\vect{F}}{\vect{v}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\newif\ifusingpreciseconstants
+\pgfkeys{%
+  /mandi/options/.cd,
+  initial at setup/.style={%
+    /mandi/options/buffered at units/.initial=alternate,%
+  },%
+  initial at setup,%
+  preciseconstants/.is if=usingpreciseconstants,%
+  units/.is choice,%
+  units/.default=derived,%
+  units/alternate/.style={/mandi/options/buffered at units=alternate},%
+  units/base/.style={/mandi/options/buffered at units=base},%
+  units/derived/.style={/mandi/options/buffered at units=derived},%
+}%
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotsvect}{\marg{kernel1}\marg{kernel2}}
-Symbol for dot of two vectors with symbolic components.
-\end{docCommand}
-\begin{docCommand}{vectDotsvect}{\marg{kernel1}\marg{kernel2}}
-Same as \cs{vectdotsvect} but uses \cs{bullet}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotsvect{F}{v} \\
-\vectDotsvect{F}{v}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Process the options.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotevect}{\marg{kernel1}\marg{kernel2}}
-Symbol for dot of two vectors as an expanded sum.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotevect{F}{v}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+%    \begin{macrocode}
+\ProcessPgfPackageOptions{/mandi/options}
+%    \end{macrocode}
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotsdvect}{\marg{kernel1}\marg{kernel2}}
-Dot of a vector a vector's differential with symbolic components.
-\end{docCommand}
-\begin{docCommand}{vectdotsDvect}{\marg{kernel1}\marg{kernel2}}
-Identical to \refCom{vectdotsdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotsdvect{F}{r} \\
-\vectdotsDvect{F}{r}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
+% Write a banner to the console showing the options in use.
 %
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotedvect}{\marg{kernel1}\marg{kernel2}}
-Dot of a vector a vector's differential as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{vectdoteDvect}{\marg{kernel1}\marg{kernel2}}
-Identical to \refCom{vectdotedvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotedvect{F}{r} \\
-\vectdoteDvect{F}{r}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotsvectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Dot of two subscripted vectors with symbolic components.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotsvectsub{F}{grav}{r}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotevectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Dot of two subscripted vectors as an expanded sum.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotevectsub{F}{grav}{r}{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotsdvectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Dot of a subscripted vector and a subscripted vector's differential with 
-symbolic components.
-\end{docCommand}
-\begin{docCommand}{vectsubdotsDvectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Identical to \refCom{vectsubdotsdvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotsdvectsub{A}{ball}{B}{car} \\
-\vectsubdotsDvectsub{A}{ball}{B}{car}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotedvectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Dot of a subscripted vector and a subscripted vector's differential 
-as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{vectsubdoteDvectsub}
-{\marg{kernel1}\marg{sub1}\marg{kernel2}\marg{sub2}}
-Identical to \refCom{vectsubdotedvectsub} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotedvectsub{A}{ball}{B}{car} \\
-\vectsubdoteDvectsub{A}{ball}{B}{car}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotsdvect}{\marg{kernel1}\marg{sub1}\marg{kernel2}}
-Dot of a subscripted vector and a vector's differential with symbolic 
-components.
-\end{docCommand}
-\begin{docCommand}{vectsubdotsDvect}{\marg{kernel1}\marg{sub1}\marg{kernel2}}
-Identical to \refCom{vectsubdotsdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotsdvect{A}{ball}{B} \\
-\vectsubdotsDvect{A}{ball}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectsubdotedvect}{\marg{kernel1}\marg{sub1}\marg{kernel2}}
-Dot of a subscripted vector and a vector's differential as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{vectsubdoteDvect}{\marg{kernel1}\marg{sub1}\marg{kernel2}}
-Identical to \refCom{vectsubdotedvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\vectsubdotedvect{A}{ball}{B} \\
-\vectsubdoteDvect{A}{ball}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervectdotsvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Dot of a vector's derivative and a vector with symbolic components.
-\end{docCommand}
-\begin{docCommand}{Dervectdotsvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Identical to \refCom{dervectdotsvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dervectdotsvect{A}{t}{B} \\
-\Dervectdotsvect{A}{t}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervectdotevect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Dot of a vector's derivative and a vector as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{Dervectdotevect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Identical to \refCom{dervectdotevect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dervectdotevect{A}{t}{B} \\
-\Dervectdotevect{A}{t}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotsdervect}{\marg{kernel1}\marg{kernel2}\marg{indvar}}
-Dot of a vector and a vector's derivative with symbolic components.
-\end{docCommand}
-\begin{docCommand}{vectdotsDervect}{\marg{kernel1}\marg{kernel2}\marg{indvar}}
-Identical to \refCom{vectdotsdervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotsdervect{A}{B}{t} \\
-\vectdotsDervect{A}{B}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectdotedervect}{\marg{kernel1}\marg{kernel2}\marg{indvar}}
-Dot of a vector and a vector's derivative as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{vectdoteDervect}{\marg{kernel1}\marg{kernel2}\marg{indvar}}
-Identical to \cs{vectdotedervect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectdotedervect{A}{B}{t} \\
-\vectdoteDervect{A}{B}{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervectdotsdvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Dot of a vector's derivative and a vector's differential with symbolic 
-components.
-\end{docCommand}
-\begin{docCommand}{DervectdotsDvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Identical to \refCom{dervectdotsdvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\dervectdotsdvect{A}{t}{B} \\
-\DervectdotsDvect{A}{t}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dervectdotedvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Dot of a vector's derivative and a vector's differential as an expanded sum.
-\end{docCommand}
-\begin{docCommand}{DervectdoteDvect}{\marg{kernel1}\marg{indvar}\marg{kernel2}}
-Identical to \refCom{dervectdotedvect} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dervectdotedvect{A}{t}{B} \\
-\DervectdoteDvect{A}{t}{B}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Expressions Containing Crosses}
-% All of the naming conventions documented in earlier commands still apply.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vectcrossvect}{\marg{kernel1}\marg{kernel2}}
-Cross of two vectors.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vectcrossvect{\vect{r}}{\vect{p}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ltriplecross}{\marg{kernel1}\marg{kernel2}\marg{kernel3}}
-Symbol for left associated triple cross product.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ltriplecross{\vect{A}}{\vect{B}}{\vect{C}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{rtriplecross}{\marg{kernel1}\marg{kernel2}\marg{kernel3}}
-Symbol for right associated triple cross product.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\rtriplecross{\vect{A}}{\vect{B}}{\vect{C}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ltriplescalar}{\marg{kernel1}\marg{kernel2}\marg{kernel3}}
-Symbol for left associated triple scalar product.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ltriplescalar{\vect{A}}{\vect{B}}{\vect{C}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{rtriplescalar}{\marg{kernel1}\marg{kernel2}\marg{kernel3}}
-Symbol for right associated triple scalar product.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\rtriplescalar{\vect{A}}{\vect{B}}{\vect{C}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Basis Vectors and Bivectors}
-% If you use geometric algebra or tensors, eventually you will need 
-% symbols for basis vectors and basis bivectors.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ezero}{}
-Symbols for basis vectors with lower indices up to 4.
-\end{docCommand}
-\begin{docCommand}{eone}{}
-\end{docCommand}
-\begin{docCommand}{etwo}{}
-\end{docCommand}
-\begin{docCommand}{ethree}{}
-\end{docCommand}
-\begin{docCommand}{efour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ezero, \eone, \etwo, \ethree, \efour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{uezero}{}
-Symbols for normalized basis vectors with lower indices up to 4.
-\end{docCommand}
-\begin{docCommand}{ueone}{}
-\end{docCommand}
-\begin{docCommand}{uetwo}{}
-\end{docCommand}
-\begin{docCommand}{uethree}{}
-\end{docCommand}
-\begin{docCommand}{uefour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\uezero, \ueone, \uetwo, \uethree, \uefour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ezerozero}{}
-Symbols for basis bivectors with lower indices up to 4.
-\end{docCommand}
-\begin{docCommand}{ezeroone}{}
-\end{docCommand}
-\begin{docCommand}{ezerotwo}{}
-\end{docCommand}
-\begin{docCommand}{ezerothree}{}
-\end{docCommand}
-\begin{docCommand}{ezerofour}{}
-\end{docCommand}
-\begin{docCommand}{eoneone}{}
-\end{docCommand}
-\begin{docCommand}{eonetwo}{}
-\end{docCommand}
-\begin{docCommand}{eonethree}{}
-\end{docCommand}
-\begin{docCommand}{eonefour}{}
-\end{docCommand}
-\begin{docCommand}{etwoeone}{}
-\end{docCommand}
-\begin{docCommand}{etwotwo}{}
-\end{docCommand}
-\begin{docCommand}{etwothree}{}
-\end{docCommand}
-\begin{docCommand}{etwofour}{}
-\end{docCommand}
-\begin{docCommand}{ethreeeone}{}
-\end{docCommand}
-\begin{docCommand}{ethreetwo}{}
-\end{docCommand}
-\begin{docCommand}{ethreethree}{}
-\end{docCommand}
-\begin{docCommand}{ethreefour}{}
-\end{docCommand}
-\begin{docCommand}{efoureone}{}
-\end{docCommand}
-\begin{docCommand}{efourtwo}{}
-\end{docCommand}
-\begin{docCommand}{efourthree}{}
-\end{docCommand}
-\begin{docCommand}{efourfour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ezerozero, \ezeroone, \ezerotwo, \ezerothree, \ezerofour,    \\
-\eoneone, \eonetwo, \eonethree, \eonefour, \etwoone,          \\
-\etwotwo, \etwothree, \etwofour, \ethreeone, \ethreetwo,      \\
-\ethreethree, \ethreefour, \efourone, \efourtwo, \efourthree, \\
-\efourfour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{euzero}{}
-Symbols for basis vectors with upper indices up to 4.
-\end{docCommand}
-\begin{docCommand}{euone}{}
-\end{docCommand}
-\begin{docCommand}{eutwo}{}
-\end{docCommand}
-\begin{docCommand}{euthree}{}
-\end{docCommand}
-\begin{docCommand}{eufour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\euzero, \euone, \eutwo, \euthree, \eufour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ueuzero}{}
-Symbols for normalized basis vectors with upper indices up to 4.
-\end{docCommand}
-\begin{docCommand}{ueuone}{}
-\end{docCommand}
-\begin{docCommand}{ueutwo}{}
-\end{docCommand}
-\begin{docCommand}{ueuthree}{}
-\end{docCommand}
-\begin{docCommand}{ueufour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ueuzero, \ueuone, \ueutwo, \ueuthree, \ueufour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{euzerozero}{}
-Symbols for basis bivectors with upper indices up to 4.
-\end{docCommand}
-\begin{docCommand}{euzeroone}{}
-\end{docCommand}
-\begin{docCommand}{euzerotwo}{}
-\end{docCommand}
-\begin{docCommand}{euzerothree}{}
-\end{docCommand}
-\begin{docCommand}{euzerofour}{}
-\end{docCommand}
-\begin{docCommand}{euoneone}{}
-\end{docCommand}
-\begin{docCommand}{euonetwo}{}
-\end{docCommand}
-\begin{docCommand}{euonethree}{}
-\end{docCommand}
-\begin{docCommand}{euonefour}{}
-\end{docCommand}
-\begin{docCommand}{eutwoeone}{}
-\end{docCommand}
-\begin{docCommand}{eutwotwo}{}
-\end{docCommand}
-\begin{docCommand}{eutwothree}{}
-\end{docCommand}
-\begin{docCommand}{eutwofour}{}
-\end{docCommand}
-\begin{docCommand}{euthreeeone}{}
-\end{docCommand}
-\begin{docCommand}{euthreetwo}{}
-\end{docCommand}
-\begin{docCommand}{euthreethree}{}
-\end{docCommand}
-\begin{docCommand}{euthreefour}{}
-\end{docCommand}
-\begin{docCommand}{eufoureone}{}
-\end{docCommand}
-\begin{docCommand}{eufourtwo}{}
-\end{docCommand}
-\begin{docCommand}{eufourthree}{}
-\end{docCommand}
-\begin{docCommand}{eufourfour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\euzerozero, \euzeroone, \euzerotwo, \euzerothree, \euzerofour,    \\
-\euoneone, \euonetwo, \euonethree, \euonefour, \eutwoone,          \\
-\eutwotwo, \eutwothree, \eutwofour, \euthreeone, \euthreetwo,      \\
-\euthreethree, \euthreefour, \eufourone, \eufourtwo, \eufourthree, \\
-\eufourfour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gzero}{}
-Symbols for basis vectors, with \(\gamma\) as the kernel, with lower indices 
-up to 4.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\gzero, \gone, \gtwo, \gthree, \gfour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{guzero}{}
-Symbols for basis vectors, with \(\gamma\) as the kernel, with upper indices 
-up to 4.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\guzero, \guone, \gutwo, \guthree, \gufour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gzerozero}{}
-Symbols for basis bivectors, with \(\gamma\) as the kernel, with lower indices 
-up to 4.
-\end{docCommand}
-\begin{docCommand}{gzeroone}{}
-\end{docCommand}
-\begin{docCommand}{gzerotwo}{}
-\end{docCommand}
-\begin{docCommand}{gzerothree}{}
-\end{docCommand}
-\begin{docCommand}{gzerofour}{}
-\end{docCommand}
-\begin{docCommand}{goneone}{}
-\end{docCommand}
-\begin{docCommand}{gonetwo}{}
-\end{docCommand}
-\begin{docCommand}{gonethree}{}
-\end{docCommand}
-\begin{docCommand}{gonefour}{}
-\end{docCommand}
-\begin{docCommand}{gtwoeone}{}
-\end{docCommand}
-\begin{docCommand}{gtwotwo}{}
-\end{docCommand}
-\begin{docCommand}{gtwothree}{}
-\end{docCommand}
-\begin{docCommand}{gtwofour}{}
-\end{docCommand}
-\begin{docCommand}{gthreeeone}{}
-\end{docCommand}
-\begin{docCommand}{gthreetwo}{}
-\end{docCommand}
-\begin{docCommand}{gthreethree}{}
-\end{docCommand}
-\begin{docCommand}{gthreefour}{}
-\end{docCommand}
-\begin{docCommand}{gfoureone}{}
-\end{docCommand}
-\begin{docCommand}{gfourtwo}{}
-\end{docCommand}
-\begin{docCommand}{gfourthree}{}
-\end{docCommand}
-\begin{docCommand}{gfourfour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\gzerozero, \gzeroone, \gzerotwo, \gzerothree, \gzerofour,    \\
-\goneone, \gonetwo, \gonethree, \gonefour, \gtwoone,          \\
-\gtwotwo, \gtwothree, \gtwofour, \gthreeone, \gthreetwo,      \\
-\gthreethree, \gthreefour, \gfourone, \gfourtwo, \gfourthree, \\
-\gfourfour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{guzerozero}{}
-Symbols for basis bivectors, with \(\gamma\) as the kernel, with upper indices 
-up to 4.
-\end{docCommand}
-\begin{docCommand}{guzeroone}{}
-\end{docCommand}
-\begin{docCommand}{guzerotwo}{}
-\end{docCommand}
-\begin{docCommand}{guzerothree}{}
-\end{docCommand}
-\begin{docCommand}{guzerofour}{}
-\end{docCommand}
-\begin{docCommand}{guoneone}{}
-\end{docCommand}
-\begin{docCommand}{guonetwo}{}
-\end{docCommand}
-\begin{docCommand}{guonethree}{}
-\end{docCommand}
-\begin{docCommand}{guonefour}{}
-\end{docCommand}
-\begin{docCommand}{gutwoeone}{}
-\end{docCommand}
-\begin{docCommand}{gutwotwo}{}
-\end{docCommand}
-\begin{docCommand}{gutwothree}{}
-\end{docCommand}
-\begin{docCommand}{gutwofour}{}
-\end{docCommand}
-\begin{docCommand}{guthreeeone}{}
-\end{docCommand}
-\begin{docCommand}{guthreetwo}{}
-\end{docCommand}
-\begin{docCommand}{guthreethree}{}
-\end{docCommand}
-\begin{docCommand}{guthreefour}{}
-\end{docCommand}
-\begin{docCommand}{gufoureone}{}
-\end{docCommand}
-\begin{docCommand}{gufourtwo}{}
-\end{docCommand}
-\begin{docCommand}{gufourthree}{}
-\end{docCommand}
-\begin{docCommand}{gufourfour}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\guzerozero, \guzeroone, \guzerotwo, \guzerothree, \guzerofour,    \\
-\guoneone, \guonetwo, \guonethree, \guonefour, \gutwoone,          \\
-\gutwotwo, \gutwothree, \gutwofour, \guthreeone, \guthreetwo,      \\
-\guthreethree, \guthreefour, \gufourone, \gufourtwo, \gufourthree, \\
-\gufourfour
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsubsection{Other Vector Related}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{colvector}{\marg{commadelimitedlistofcomps}}
-Typesets column vectors.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\colvector{x^0,x^1,x^2,x^3} \\
-\colvector{x_0,x_1,x_2,x_3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{rowvector}{\marg{commadelimitedlistofcomps}}
-Typesets row vectors.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\rowvector{x^0,x^1,x^2,x^3} \\
-\rowvector{x_0,x_1,x_2,x_3}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompscvect}{\oarg{anynonzero}\marg{kernel}}
-Typesets subscripted symbolic components of column 3- or 4-vectors 
-(use any nonzero value for the optional argument to typeset a 4-vector).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\begin{mysolution*}
-  \vect{p} &= \scompscvect{p}   \\
-  \vect{p} &= \scompscvect[4]{p}
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsCvect}{\oarg{anynonzero}\marg{kernel}}
-Typesets superscripted symbolic components of column 3- or 4-vectors 
-(use any nonzero value for the optional argument to typeset a 4-vector).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\begin{mysolution*}
-  \vect{p} &= \scompsCvect{p}   \\
-  \vect{p} &= \scompsCvect[4]{p}
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsrvect}{\oarg{anynonzero}\marg{kernel}}
-Typesets subscripted symbolic components of row 3- or 4-vectors 
-(use any nonzero value for the optional argument to typeset a 4-vector).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\begin{mysolution*}
-  \vect{p} &= \scompsrvect{p}   \\
-  \vect{p} &= \scompsrvect[4]{p}
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scompsRvect}{\oarg{anynonzero}\marg{kernel}}
-Typesets superscripted symbolic components of row 3- or 4-vectors 
-(use any nonzero value for the optional argument to typeset a 4-vector).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\begin{mysolution*}
-  \vect{p} &= \scompsRvect{p}   \\
-  \vect{p} &= \scompsRvect[4]{p}
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{anglebetween}{\marg{kernal}\marg{kernel}}
-Typesets the symbol for the angle between two vectors.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\anglebetween{a}{b}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{parallelto}{\marg{thing}}
-A better looking parallel symbol whose height is the same as the perpendicular
-symbol's height.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\vect{A}_{\parallelto\vect{B}}\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{perpendicularto}{\marg{thing}}
-An alias for the perpendicular symbol.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\vect{A}_{\perpendicularto\vect{B}}\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{bra}{\marg{bra}}
-Typesets a Dirac bra.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\bra{\Psi^*} or \bra{\frac{1}{a}\Psi^*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ket}{\marg{ket}}
-Typesets a Dirac ket.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ket{\Psi} or \ket{\frac{1}{b}\Psi^*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{bracket}{\marg{bra}\marg{ket}}
-Typesets a Dirac bracket.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\bracket{\Psi^*}{\Psi}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Frequently Used Fractions}
-% 
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{onehalf}{}
-Small fractions with numerator 1 and denominators up to 10.
-\end{docCommand}
-\begin{docCommand}{onethird}{}
-\end{docCommand}
-\begin{docCommand}{onefourth}{}
-\end{docCommand}
-\begin{docCommand}{onefifth}{}
-\end{docCommand}
-\begin{docCommand}{onesixth}{}
-\end{docCommand}
-\begin{docCommand}{oneseventh}{}
-\end{docCommand}
-\begin{docCommand}{oneeighth}{}
-\end{docCommand}
-\begin{docCommand}{onenineth}{}
-\end{docCommand}
-\begin{docCommand}{onetenth}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\onehalf, \onethird, \onefourth, \onefifth, \onesixth, \\
-\oneseventh, \oneeighth, \oneninth, \onetenth\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{twooneths}{}
-Small fractions with numerator 2 and denominators up to 10.
-\end{docCommand}
-\begin{docCommand}{twohalves}{}
-\end{docCommand}
-\begin{docCommand}{twothirds}{}
-\end{docCommand}
-\begin{docCommand}{twofourths}{}
-\end{docCommand}
-\begin{docCommand}{twofifths}{}
-\end{docCommand}
-\begin{docCommand}{twosixths}{}
-\end{docCommand}
-\begin{docCommand}{twosevenths}{}
-\end{docCommand}
-\begin{docCommand}{twoeighths}{}
-\end{docCommand}
-\begin{docCommand}{twonineths}{}
-\end{docCommand}
-\begin{docCommand}{twotenths}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\twooneths, \twohalves, \twothirds, \twofourths, \twofifths, \\
-\twosixths, \twosevenths, \twoeighths, \twoninths, \twotenths\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{threeoneths}{}
-Small fractions with numerator 3 and denominators up to 10.
-\end{docCommand}
-\begin{docCommand}{threehalves}{}
-\end{docCommand}
-\begin{docCommand}{threethirds}{}
-\end{docCommand}
-\begin{docCommand}{threefourths}{}
-\end{docCommand}
-\begin{docCommand}{threefifths}{}
-\end{docCommand}
-\begin{docCommand}{threesixths}{}
-\end{docCommand}
-\begin{docCommand}{threesevenths}{}
-\end{docCommand}
-\begin{docCommand}{threeeighths}{}
-\end{docCommand}
-\begin{docCommand}{threenineths}{}
-\end{docCommand}
-\begin{docCommand}{threetenths}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\threeoneths, \threehalves, \threethirds, \threefourths, \threefifths, \\
-\threesixths, \threesevenths, \threeeighths, \threeninths, \threetenths\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fouroneths}{\marg{magnitude}}
-Small fractions with numerator 4 and denominators up to 10.
-\end{docCommand}
-\begin{docCommand}{fourhalves}{}
-\end{docCommand}
-\begin{docCommand}{fourthirds}{}
-\end{docCommand}
-\begin{docCommand}{fourfourths}{}
-\end{docCommand}
-\begin{docCommand}{fourfifths}{}
-\end{docCommand}
-\begin{docCommand}{foursixths}{}
-\end{docCommand}
-\begin{docCommand}{foursevenths}{}
-\end{docCommand}
-\begin{docCommand}{foureighths}{}
-\end{docCommand}
-\begin{docCommand}{fournineths}{}
-\end{docCommand}
-\begin{docCommand}{fourtenths}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\fouroneths, \fourhalves, \fourthirds, \fourfourths, \fourfifths, \\
-\foursixths, \foursevenths, \foureighths, \fourninths, \fourtenths\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Calculus}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{sumoverall}{\marg{variable}}
-Properly typesets summation over all of some user specified entities.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \sumoverall{particles} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dx}{\marg{variable}}
-Properly typesets variables of integration (the d should not be in 
-italics and should be properly spaced relative to the integrand).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \dx{y} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dslashx}{\marg{variable}}
-Symbol indicating an inexact differential. Frequently used in physics.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \dslashx{Q} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{evaluatedfromto}{\marg{lower}\oarg{upper}}
-Properly typesets the evaluation of definite integrals. Note that the upper
-limit is optional.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( {\onethird y^3}\evaluatedfromto{0}[3] \) \\
-\( {\onethird y^3}\evaluatedfromto{0} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{evaluatedat}{\marg{evaluationpoint}}
-Properly indicates evaluation at a particular point or value without 
-specifying the quantity. This is really just an alias for \cs{evaluatedfromto}
-with no optional upper limit.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \text{LMST}\evaluatedat{\longitude{0}} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{integral}{\oarg{lower}\oarg{upper}\marg{integrand}\marg{var}}
-Typesets indefinite and definite integrals.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \integral{y^2}{y} \]
-\[ \integral[0][3]{y^2}{y} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{opensurfaceintegral}{\marg{surfacename}\marg{vectorname}}
-Integral over an open surface of the normal component of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \opensurfaceintegral{S}{\vect{E}} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{closedsurfaceintegral}{\marg{surfacename}\marg{vectorname}}
-Integral over a closed surface of the normal component of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \closedsurfaceintegral{S}{\vect{E}} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{openlineintegral}{\marg{pathname}\marg{vectorname}}
-Integral over an open path of the tangential component of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \openlineintegral{C}{\vect{E}} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{closedlineintegral}{\marg{pathname}\marg{vectorname}}
-Integral over a closed path of the tangential component of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \closedlineintegral{C}{\vect{E}} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% For line integrals, I have not employed the common \dx{\vect{\ell}} symbol.
-% Instead, I use \(\hat{t}\dx{\ell}\) for two main reason. The first is that
-% line integrals require the component of a vector that is tangent to a curve, 
-% and I use \(\hat{t}\) to denote a unit tangent. The second is that the new
-% notation looks more like that for surface integrals.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{volumeintegral}{\marg{volumename}\marg{integrand}}
-Integral over a volume.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\[ \volumeintegral{V}{\rho} \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dbydt}{\oarg{operand}}
-First time derivative operator.
-\end{docCommand}
-\begin{docCommand}{DbyDt}{\oarg{operand}}
-Identical to \refCom{dbydt} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \dbydt \) or \( \dbydt x \) or \dbydt[x] \\
-\( \DbyDt \) or \( \DbyDt x \) or \DbyDt[x]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ddbydt}{\oarg{operand}}
-Second time derivative operator.
-\end{docCommand}
-\begin{docCommand}{DDbyDt}{\oarg{operand}}
-Identical to \cs{ddbydt} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \ddbydt \) or \( \ddbydt x \) or \ddbydt[x] \\
-\( \DDbyDt \) or \( \DDbyDt x \) or \DDbyDt[x]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{pbypt}{\oarg{operand}}
-First partial time derivative operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \pbypt \) or \( \pbypt x \) or \pbypt[x]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ppbypt}{\oarg{operand}}
-Second partial time derivative operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \ppbypt \) or \( \ppbypt x \) or \ppbypt[x]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dbyd}{\marg{dependentvariable}\marg{indvar}}
-Generic first derivative operator.
-\end{docCommand}
-\begin{docCommand}{DbyD}{\marg{dependentvariable}\marg{indvar}}
-Identical to \refCom{dbyd} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \dbyd{f}{y} \) \\
-\( \DbyD{f}{y} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ddbyd}{\marg{dependentvariable}\marg{indvar}}
-Generic second derivative operator.
-\end{docCommand}
-\begin{docCommand}{DDbyD}{\marg{dependentvariable}\marg{indvar}}
-Identical to \refCom{ddbyd} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \ddbyd{f}{y} \) \\
-\( \DDbyD{f}{y} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{pbyp}{\marg{dependentvariable}\marg{indvar}}
-Generic first partial derivative operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \pbyp{f}{y} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ppbyp}{\marg{dependentvariable}\marg{indvar}}
-Generic second partial derivative operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \ppbyp{f}{y} \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gradient}{}
-Gibbs' gradient operator. It's just an alias for \cs{nabla}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\gradient
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{divergence}{}
-Gibbs' divergence operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\divergence
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{curl}{}
-Gibbs' curl operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\curl
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{taigrad}{}
-Tai's gradient operator. It's just an alias for \cs{nabla}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\taigrad
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{taisvec}{}
-Tai's symbol for symbolic vector.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\taisvec
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{taidivg}{}
-Tai's symbol for divergence operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\taidivg
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{taicurl}{}
-Tai's symbol for curl operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\taicurl
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{laplacian}{}
-Laplacian operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\laplacian
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dalembertian}{}
-D'Alembertian operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dalembertian
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriesfofx}{}
-Series expansion of \(f(x)\) around \(x=a\).
-\end{docCommand}
-\begin{dispExample}
-\seriesfofx \\
-\seriesfofx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriesexpx}{}
-Series expansion of \(e^x\).
-\end{docCommand}
-\begin{dispExample}
-\seriesexpx \\
-\seriesexpx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriessinx}{}
-Series expansion of \(\sin x\).
-\end{docCommand}
-\begin{dispExample}
-\seriessinx \\
-\seriessinx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriescosx}{}
-Series expansion of \(\cos x\).
-\end{docCommand}
-\begin{dispExample}
-\seriescosx \\
-\seriescosx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriestanx}{}
-Series expansion of \(\tan x\).
-\end{docCommand}
-\begin{dispExample}
-\seriestanx \\
-\seriestanx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{seriesatox}{}
-Series expansion of \(a^x\).
-\end{docCommand}
-\begin{dispExample}
-\seriesatox \\
-\seriesatox[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{serieslnoneplusx}{}
-Series expansion of \(\ln(1+x)\).
-\end{docCommand}
-\begin{dispExample}
-\serieslnoneplusx \\
-\serieslnoneplusx[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{binomialseries}{}
-Series expansion of \((1+x)^n\).
-\end{docCommand}
-\begin{dispExample}
-\binomialseries \\
-\binomialseries[z]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{diracdelta}{\marg{arg}}
-Dirac delta function.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\diracdelta{x}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{orderof}{\marg{arg}}
-Order of indicator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\orderof{x^2}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{eulerlagrange}{\oarg{operand}}
-Euler-Lagrange equation.
-\end{docCommand}
-\begin{docCommand}{Eulerlagrange}{\oarg{operand}}
-Like \refCom{eulerlagrange} but uses \(\Delta\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\( \eulerlagrange \) or \( \eulerlagrange[x] \) \\
-\( \Eulerlagrange \) or \( \Eulerlagrange[x] \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Other Useful Commands}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{asin}{}
-Symbol for inverse sine and other inverse circular trig functions.
-\end{docCommand}
-\begin{docCommand}{acos}{}
-\end{docCommand}
-\begin{docCommand}{atan}{}
-\end{docCommand}
-\begin{docCommand}{asec}{}
-\end{docCommand}
-\begin{docCommand}{acsc}{}
-\end{docCommand}
-\begin{docCommand}{acot}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \asin, \acos, \atan, \asec, \acsc, \acot \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{sech}{}
-Hyperbolic and inverse hyperbolic functions not defined in \LaTeX.
-\end{docCommand}
-\begin{docCommand}{csch}{}
-\end{docCommand}
-\begin{docCommand}{asinh}{}
-\end{docCommand}
-\begin{docCommand}{acosh}{}
-\end{docCommand}
-\begin{docCommand}{atanh}{}
-\end{docCommand}
-\begin{docCommand}{asech}{}
-\end{docCommand}
-\begin{docCommand}{acsch}{}
-\end{docCommand}
-\begin{docCommand}{acoth}{}
-\end{docCommand}
-\begin{dispExample}
-\( \sech, \csch, \asinh, \acosh, \atanh, \asech, \acsch, \acoth \)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{sgn}{\marg{arg}}
-Signum function.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \sgn \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dex}{}
-Decimal exponentiation function (used in astrophysics).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\( \dex \)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{logb}{\oarg{base}}
-Logarithm to an arbitrary base.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\logb 8, \logb[2] 8
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{cB}{}
-Alternate symbol for magnetic field inspired by Tom Moore.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\cB, \vect{\cB}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{newpi}{}
-Bob Palais' symbol for \(2\pi\).
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\newpi
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{scripty}{\marg{kernel}}
-Command to get fonts in Griffiths' electrodynamics textbook.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\scripty{r}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Lagr}{}
-Command to get symbol for Lagrangian.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Lagr
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{flux}{\oarg{label}}
-Symbol for flux of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\flux, \flux[E]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{circulation}{\oarg{label}}
-Symbol for circulation of a vector field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\circulation, \circulation[E]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inparens}{\marg{arg}}
-Surrounds with argument with parentneses. A blank argument generates a 
-placeholder.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\inparens{\onehalf}, \inparens{-3}, \inparens{}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{absof}{\marg{arg}}
-Absolute value function. A blank argument generates a placeholder.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\absof{-4}, \absof{}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{magof}{\marg{arg}}
-Magnitude of a quantity (lets you selectively use double bars even 
-when the \opt{singlemagbars} option is use when loading the package). 
-A blank argument generates a placeholder.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\magof{\vect{E}}, \magof{}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dimsof}{\marg{arg}}
-Notation for showing the dimensions of a quantity. A blank argument 
-generates a placeholder. 
-\end{docCommand}
-\begin{dispExample}
-\( \dimsof{\vect{v}} = L \cdot T^{-1} \), \dimsof{}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{unitsof}{\marg{arg}}
-Notation for showing the units of a quantity. I propose this notation and 
-hope to propagate it because I could not find any standard notation for 
-this same idea in other sources. A blank argument generates a placeholder.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\unitsof{\vect{v}} = \velocityonlyaltnunit, \unitsof{}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Changein}{\marg{arg}}
-Notation for \emph{the change in a quantity}.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\Changein{\vect{E}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{xtento}{\marg{exponent}\oarg{unit}}
-Command for scientific notation with an optional unit.
-\end{docCommand}
-\begin{docCommand}{timestento}{\marg{exponent}\oarg{unit}}
-Another command for scientific notation with an optional unit.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-2.99\xtento{8}[\velocityonlyaltnunit] \\
-2.99\timestento{-4}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ee}{\marg{mantissa}\marg{exponent}}
-Command for scientific notation for computer code. Units are not used in computer
-code.
-\end{docCommand}
-\begin{docCommand}{EE}{\marg{mantissa}\marg{exponent}}
-Identical to \refCom{ee} but gives capital letters. 
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ee{2.99}{8} \\
-\EE{2.99}{8}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{dms}{\marg{deg}\marg{min}\marg{sec}}
-Command for formatting angles and time. Note that other packages may do 
-this better.
-\end{docCommand}
-\begin{docCommand}{hms}{\marg{deg}\marg{min}\marg{sec}}
-Like \refCom{dms} but formats time.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\dms{23}{34}{10.27} \\
-\hms{23}{34}{10.27}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{clockreading}{\marg{hrs}\marg{min}\marg{sec}}
-Command for formatting a clock reading. Really an alias for \refCom{hms}, 
-but conceptually a very different idea that introductory textbooks don't 
-do a good enough job at articulating.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\clockreading{23}{34}{10.27}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{latitude}{\marg{arg}}
-Command for formatting latitude, useful in astronomy. 
-\end{docCommand}
-\begin{docCommand}{latitudeN}{\marg{arg}}
-Command for formatting latitude with an N for north.
-\end{docCommand}
-\begin{docCommand}{latitudeS}{\marg{arg}}
-Command for formatting latitude with an S for north.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\latitude{+35}, \latitudeN{35}, \latitudeS{35}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{longitude}{\marg{arg}}
-Command for formatting longitude, useful in astronomy. 
-Use \refCom{longitudeE} or \refCom{longitudeW} to include a letter.
-\end{docCommand}
-\begin{docCommand}{longitudeE}{\marg{arg}}
-Command for formatting longitude with an E for east.
-\end{docCommand}
-\begin{docCommand}{longitudeW}{\marg{arg}}
-Command for formatting longitude with an W for east.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\longitude{-81}, \longitudeE{81}, \longitudeW{81}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ssup}{\marg{kernel}\marg{sup}}
-Command for typesetting text superscripts.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ssup{N}{contact}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ssub}{\marg{kernel}\marg{sub}}
-Command for typesetting text subscripts.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ssub{N}{AB}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ssud}{\marg{sup}\marg{sub}}
-Command for typesetting text superscripts and subscripts.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\ssud{N}{contact}{AB}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{msub}{\marg{kernel}\marg{sub}}
-Command for typesetting mathematical subscripts.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\msub{R}{\alpha\beta}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{msud}{\marg{kernel}\marg{sup}\marg{sub}}
-Command for typesetting mathematical superscripts and subscripts.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\msud{\Gamma}{\gamma}{\alpha\beta}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{levicivita}{\marg{indices}}
-Command for Levi-Civita symbol.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\levicivita{ijk}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{kronecker}{\marg{indices}}
-Command for Kronecker delta symbol.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\kronecker{ij}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{xaxis}{}
-Command for coordinate axes.
-\end{docCommand}
-\begin{docCommand}{yaxis}{}
-\end{docCommand}
-\begin{docCommand}{zaxis}{}
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
- \xaxis, \yaxis, \zaxis
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{naxis}{\oarg{axis}}
-Command for custom naming a coordinate axis.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\naxis{t}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{axis}{}
-Suffix command for custom naming a coordinate axis. You are responsible 
-for using math mode if necessary for the thing to which you apply the 
-suffix.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(t\axis\)
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{xyplane}{}
-Commands for naming coordinate planes. All combinations are defined.
-\end{docCommand}
-\begin{docCommand}{yzplane}{}
-\end{docCommand}
-\begin{docCommand}{zxplane}{}
-\end{docCommand}
-\begin{docCommand}{yxplane}{}
-\end{docCommand}
-\begin{docCommand}{zyplane}{}
-\end{docCommand}
-\begin{docCommand}{xzplane}{}
-\end{docCommand}
-\begin{dispExample}
-\xyplane, \yzplane, \zxplane, \yxplane, \zyplane, \xzplane
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{plane}{}
-Suffix command for custom naming a coordinate plane. You are responsible 
-for using math mode if necessary for the thing to which you apply the suffix.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(xt\)\plane
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fsqrt}{\marg{arg}}
-Command for square root as a fractional exponent.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\fsqrt{x}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{cuberoot}{\marg{arg}}
-Command for cube root of an argument.
-\end{docCommand}
-\begin{docCommand}{fcuberoot}{\marg{arg}}
-Command for cube root of an argument as a fractional power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\cuberoot{x} \\
-\fcuberoot{x}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fourthroot}{\marg{arg}}
-Command for fourth root of an argument.
-\end{docCommand}
-\begin{docCommand}{ffourthroot}{\marg{arg}}
-Command for fourth root of an argument as a fractional power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\fourthroot{x} \\
-\ffourthroot{x}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fifthroot}{\marg{arg}}
-Command for fifth root of an argument.
-\end{docCommand}
-\begin{docCommand}{ffifthroot}{\marg{arg}}
-Command for fifth root of an argument as a fractional power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\fifthroot{x} \\ 
-\ffifthroot{x}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{relgamma}{\marg{arg}}
-Expression for Lorentz factor.
-\end{docCommand}
-\begin{docCommand}{frelgamma}{\marg{arg}}
-Expression for Lorentz factor with a fractional power.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\begin{mysolution*}
-  \gamma &= \relgamma{\magvect{v}} \\
-  \gamma &= \frelgamma{\magvect{v}}
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{oosqrtomxs}{\marg{arg}}
-Commands for \textbf{o}ne \textbf{o}ver \textbf{s}quare root \textbf{o}f 
-\textbf{o}ne \textbf{m}inus \textbf{x} \textbf{s}quared. Say that out loud and
-you will see where the name comes from.
-\end{docCommand}
-\begin{docCommand}{oosqrtomx}{\marg{arg}}
-Commands for \textbf{o}ne \textbf{o}ver \textbf{s}quare root \textbf{o}f 
-\textbf{o}ne \textbf{m}inus \textbf{x}. Say that out loud and
-you will see where the name comes from.
-\end{docCommand}
-\begin{docCommand}{oomx}{\marg{arg}}
-Commands for \textbf{o}ne \textbf{o}ver \textbf{s}quare root \textbf{o}f 
-\textbf{o}ne \textbf{m}inus \textbf{x}. Say that out loud and
-you will see where the name comes from.
-\end{docCommand}
-\begin{docCommand}{oopx}{\marg{arg}}
-Commands for \textbf{o}ne \textbf{o}ver \textbf{s}quare root \textbf{o}f 
-\textbf{o}ne \textbf{p}lus \textbf{x}. Say that out loud and
-you will see where the name comes from.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\oosqrtomxs{0.22} \\
-\oosqrtomx{0.22}  \\
-\ooomx{0.22}      \\
-\ooopx{0.11}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Custom Operators}
-% The \(=\) operator is frequently misused. We need other operators 
-% for other cases to express conceptual relationships other than, say, 
-% mathematical equality. Some of these may seem strange to you but I have
-% found them helpful.
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{isequals}{}
-Command for \emph{test-for-equality} operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-5 \isequals 3
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{wordoperator}{\marg{firstline}\marg{secondline}}
-Command for two lines of tiny text to be use as an operator without using 
-mathematical symbols.
-\end{docCommand}
-\begin{docCommand}{pwordoperator}{\marg{firstline}\marg{secondline}}
-Like \refCom{wordoperator} but puts parentheses around the operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\wordoperator{added}{to} \\
-\pwordoperator{added}{to}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{definedas}{}
-Operator representing a definition.
-\end{docCommand}
-\begin{docCommand}{pdefinedas}{}
-Same as \refCom{definedas} but puts parentheses around the operator.
-\end{docCommand}
-\begin{docCommand}{earlierthan}{}
-Operator useful for comparing times and clock readings.
-\end{docCommand}
-\begin{docCommand}{pearlierthan}{}
-Same as \refCom{earlierthan} but puts parentheses around the operator.
-\end{docCommand}
-\begin{docCommand}{laterthan}{}
-Operator useful for comparing times and clock readings.
-\end{docCommand}
-\begin{docCommand}{platerthan}{}
-Same as \refCom{laterthan} but puts parentheses around the operator.
-\end{docCommand}
-\begin{docCommand}{adjustedby}{}
-Operator useful for comparing times and clock readings.
-\end{docCommand}
-\begin{docCommand}{padjustedby}{}
-Same as \refCom{adjustedby} but puts parentheses around the operator.
-\end{docCommand}
-\begin{docCommand}{forevery}{}
-Operator for conveying the idea of for every.
-\end{docCommand}
-\begin{docCommand}{pforevery}{}
-Same as \refCom{forevery} but puts parentheses around the operator.
-\end{docCommand}
-\begin{docCommand}{associated}{}
-Operator representing a conceptual association.
-\end{docCommand}
-\begin{docCommand}{passociated}{}
-Same as \refCom{associated} but puts parentheses around the operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\definedas     \\
-\pdefinedas    \\
-\earlierthan   \\
-\pearlierthan  \\
-\laterthan     \\
-\platerthan    \\
-\adjustedby    \\
-\padjustedby   \\
-\forevery      \\
-\pforevery     \\
-\associated    \\
-\passociated  
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{defines}{}
-Command for \emph{defines} or \emph{defined by} operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\vect{p} \defines \(\gamma m\)\vect{v}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{inframe}{\oarg{frame}}
-Command for operator indicating the coordinate representation of a vector 
-in a particular reference frame denoted by a capital letter.
-\end{docCommand}
-\begin{dispExample}
-\vect{p} \inframe[S] \momentum{\mivector{1,2,3}}          \\
-\vect{p} \inframe[S'] \momentum{\mivector{\sqrt{14},0,0}}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{associates}{}
-Command for \emph{associated with} or \emph{associates with} operator 
-(for verbal concepts). This is conceptually different from the
-\refCom{associated} or \refCom{passociated} operators.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-kinetic energy \associates velocity
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{becomes}{}
-Command for \emph{becomes} operator.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\(\gamma m\)\vect{v} \becomes \(m\)\vect{v}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{rrelatedto}{\marg{leftoperation}}
-Command for left-to-right relationship.
-\end{docCommand}
-\begin{dispExample}
-(flux ratio) \rrelatedto{taking logarithm} (mag diff)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{lrelatedto}{\marg{roperation}}
-Command for right-to-left relationship.
-\end{docCommand}
-\begin{dispExample}
-(flux ratio) \lrelatedto{exponentiation} (mag diff)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{brelatedto}{\marg{leftoperation}\marg{roperation}}
-Command for bidirectional relationship.
-\end{docCommand}
-\begin{dispExample}
-(mag diff) \brelatedto{taking logarithm}{exponentiation}(flux ratio)
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Commands Specific to \mi}
-% While these commands were inspired by \mi, they can certainly be used in
-% any introductory physics course.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{momentumprinciple}{}
-Expression for the momentum principle.
-\end{docCommand}
-\begin{docCommand}{LHSmomentumprinciple}{}
-Just the left hand side.
-\end{docCommand}
-\begin{docCommand}{RHSmomentumprinciple}{}
-Just the right hand side.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\momentumprinciple    \\
-\LHSmomentumprinciple \\
-\RHSmomentumprinciple
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{momentumprinciplediff}{}
-Expression for the momentum principle in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\momentumprinciplediff
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{energyprinciple}{}
-Expression for the energy principle. Processes other than work and 
-thermal energy transfer (e.g.\ radiation) are neglected.
-\end{docCommand}
-\begin{docCommand}{LHSenergyprinciple}{}
-Just the left hand side.
-\end{docCommand}
-\begin{docCommand}{RHSenergyprinciple}{}
-Just the right hand side.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\energyprinciple    \\
-\LHSenergyprinciple \\
-\RHSenergyprinciple
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{energyprinciplediff}{}
-Expression for the energy principle in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\energyprinciplediff
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularmomentumprinciple}{}
-Expression for the angular momentum principle.
-\end{docCommand}
-\begin{docCommand}{LHSangularmomentumprinciple}{}
-Just the left hand side.
-\end{docCommand}
-\begin{docCommand}{RHSangularmomentumprinciple}{}
-Just the right hand side.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\angularmomentumprinciple    \\
-\LHSangularmomentumprinciple \\
-\RHSangularmomentumprinciple
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{angularmomentumprinciplediff}{}
-Expression for the angular momentum principle in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\angularmomentumprinciplediff
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gravitationalinteraction}{}
-Expression for gravitational interaction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\gravitationalinteraction
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricinteraction}{}
-Expression for electric interaction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\electricinteraction
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springinteraction}{}
-Expression for spring interaction.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\springinteraction
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gfieldofparticle}{}
-Expression for a particle's gravitational field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\gfieldofparticle
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Efieldofparticle}{}
-Expression for a particle's electric field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Efieldofparticle
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Bfieldofparticle}{}
-Expression for a particle's magnetic field.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Bfieldofparticle
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% In the commands that take an optional label, note how to specify 
-% initial and final values of quantities. 
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Esys}{\oarg{label}}
-Symbol for system energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Esys, \Esys[final], \Esys[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Us}{\oarg{label}}
-Symbol for spring potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Us, \Us[final], \Us[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ug}{\oarg{label}}
-Symbol for gravitational potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Ug, \Ug[final], \Ug[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ue}{\oarg{label}}
-Symbol for electric potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Ue, \Ue[final], \Ue[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ktrans}{\oarg{label}}
-Symbol for translational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Ktrans, \Ktrans[final], \Ktrans[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Krot}{\oarg{label}}
-Symbol for rotational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Krot, \Krot[final], \Krot[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Kvib}{\oarg{label}}
-Symbol for vibrational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Kvib, \Evib[final], \Evib[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Eparticle}{\oarg{label}}
-Symbol for particle energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Eparticle, \Eparticle[final], \Eparticle[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Einternal}{\oarg{label}}
-Symbol for internal energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Einternal, \Einternal[final], \Einternal[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Erest}{\oarg{label}}
-Symbol for rest energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Erest, \Erest[final], \Erest[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Echem}{\oarg{label}}
-Symbol for chemical energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Echem, \Echem[final], \Echem[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Etherm}{\oarg{label}}
-Symbol for thermal energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Etherm, \Etherm[final], \Etherm[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Evib}{\oarg{label}}
-Symbol for vibrational energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Evib, \Evib[final], \Evib[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ephoton}{\oarg{label}}
-Symbol for photon energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Ephoton, \Ephoton[final], \Ephoton[initial]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEsys}{}
-Symbol for change in system energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEsys
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DUs}{}
-Symbol for change in spring potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DUs
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DUg}{}
-Symbol for change in gravitational potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DUg
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DUe}{}
-Symbol for change in electric potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DUe
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DKtrans}{}
-Symbol for change in translational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DKtrans
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DKrot}{}
-Symbol for change in rotational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DKrot
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DKvib}{}
-Symbol for change in vibrational kinetic energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DKvib
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEparticle}{}
-Symbol for change in particle energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEparticle
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEinternal}{}
-Symbol for change in internal energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEinternal
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DErest}{}
-Symbol for change in rest energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DErest
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEchem}{}
-Symbol for change in chemical energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEchem
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEtherm}{}
-Symbol for change in thermal energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEtherm
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEvib}{}
-Symbol for change in vibrational energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEvib
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{DEphoton}{}
-Symbol for change in photon energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\DEphoton
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{springpotentialenergy}{}
-Expression for spring potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\springpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{finalspringpotentnialenergy}{}
-Expression for final spring potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\finalspringpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{initialspringpotentialenergy}{}
-Expression for initial spring potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\initialspringpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{electricpotentialenergy}{}
-Expression for electric potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\electricpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{finalelectricpotentialenergy}{}
-Expression for final electric potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\finalelectricpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{initialelectricpotentialenergy}{}
-Expression for initial electric potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\initialelectricpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{gravitationalpotentialenergy}{}
-Expression for gravitational potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\gravitationalpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{finalgravitationalpotentialenergy}{}
-Expression for final gravitational potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\finalgravitationalpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{initialgravitationalpotentialenergy}{}
-Expression for initial gravitational potential energy.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\initialgravitationalpotentialenergy
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{ks}{}
-Symbol for spring stiffness.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\ks
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Fnet}{}
-Various symbols for net force.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Fnet, \Fnetext, \Fnetsys, \Fsub{ball,bat}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Tnet}{}
-Various symbols for net torque.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Tnet, \Tnetext, \Tnetsys, \Tsub{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{Ltotal}{}
-Various symbols for total angular momentum.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\Ltotal, \Lsys, \Lsub{ball}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwelliint}{\oarg{surfacename}}
-Left hand side of Maxwell's first equation in integral form. Note the 
-default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*} 
-  &\LHSmaxwelliint   \\
-  &\LHSmaxwelliint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliint}{}
-Right hand side of Maxwell's first equation in integral form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliint \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliinta}{\oarg{volumename}}
-Alternate form of right hand side of Maxwell's first equation in 
-integral form. Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwelliinta           \\
-  &\RHSmaxwelliinta[\upsilon]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliintfree}{}
-Right hand side of Maxwell's first equation in integral form in 
-free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliintfree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliint}{\oarg{surfacename}}
-Maxwell's first equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliint    \\
-  &\maxwelliint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliinta}{\oarg{surfacename}\oarg{volumename}}
-Alternate form of Maxwell's first equation in integral form. 
-Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliinta              \\
-  &\maxwelliinta[S][\upsilon]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliintfree}{\oarg{surfacename}}
-Maxwell's first equation in integral form in free space. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliintfree    \\
-  &\maxwelliintfree[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwelliiint}{\oarg{surfacename}}
-Left hand side of Maxwell's second equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\LHSmaxwelliiint    \\
-  &\LHSmaxwelliiint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiint}{}
-Right hand side of Maxwell's second equation in integral form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiint \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiintm}{}
-Right hand side of Maxwell's second equation in integral form 
-with magnetic monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiintm \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiintma}{\oarg{volumename}}
-Alternate form of right hand side of Maxwell's second equation in 
-integral form with magnetic monopoles. Note the default value of 
-the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*} 
-  &\RHSmaxwelliiintma           \\
-  &\RHSmaxwelliiintma[\upsilon]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiintfree}{}
-Right hand side of Maxwell's second equation in integral form in 
-free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiintfree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiint}{\oarg{surfacename}}
-Maxwell's second equation in integral form. Note the default value 
-of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*} 
-  &\maxwelliiint    \\
-  &\maxwelliiint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiintm}{\oarg{surfacename}}
-Maxwell's second equation in integral form with magnetic monopoles. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiintm    \\
-  &\maxwelliiintm[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiintma}{\oarg{surfacename}\oarg{volumename}}
-Alternate form of Maxwell's second equation in integral form with 
-magnetic monopoles. Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiintma              \\
-  &\maxwelliiintma[S][\upsilon]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiintfree}{\oarg{surfacename}}
-Maxwell's second equation in integral form in free space. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiintfree    \\
-  &\maxwelliiintfree[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwelliiiint}{\oarg{boundaryname}}
-Left hand side of Maxwell's third equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\LHSmaxwelliiiint    \\
-  &\LHSmaxwelliiiint[C]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiiint}{\oarg{surfacename}}
-Right hand side of Maxwell's third equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwelliiiint    \\
-  &\RHSmaxwelliiiint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiiintm}{\oarg{surfacename}}
-Right hand side of Maxwell's third equation in integral form with 
-magnetic monopoles. Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwelliiiintm    \\
-  &\RHSmaxwelliiiintm[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiiintma}{\oarg{surfacename}}
-Alternate form of right hand side of Maxwell's third equation in 
-integral form with magnetic monopoles. Note the default value of 
-the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwelliiiintma    \\
-  &\RHSmaxwelliiiintma[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiiintfree}{\oarg{surfacename}}
-Right hand side of Maxwell's third equation in integral form in 
-free space. Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwelliiiintfree    \\
-  &\RHSmaxwelliiiintfree[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiiint}{\oarg{boundaryname}\oarg{surfacename}}
-Maxwell's third equation in integral form. Note the default values of 
-the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiiint        \\
-  &\maxwelliiiint[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiiintm}{\oarg{boundaryname}\oarg{surfacename}}
-Maxwell's third equation in integral form with magnetic monopoles. 
-Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiiintm       \\
-  &\maxwelliiiintm[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiiintma}{\oarg{boundaryname}\oarg{surfacename}}
-Alternate form of Maxwell's third equation in integral form with magnetic 
-monopoles. Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiiintma       \\
-  &\maxwelliiiintma[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiiintfree}{\oarg{boundaryname}\oarg{surfacename}}
-Maxwell's third equation in integral form in free space. Note the default 
-values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwelliiiintfree       \\
-  &\maxwelliiiintfree[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwellivint}{\oarg{boundaryname}}
-Left hand side of Maxwell's fourth equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\LHSmaxwellivint     \\
-  &\LHSmaxwellivint[C]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellivint}{\oarg{surfacename}}
-Right hand side of Maxwell's fourth equation in integral form. 
-Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwellivint     \\
-  &\RHSmaxwellivint[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellivinta}{\oarg{surfacename}}
-Alternate form of right hand side of Maxwell's fourth equation in 
-integral form. Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwellivinta     \\
-  &\RHSmaxwellivinta[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellivintfree}{\oarg{surfacename}}
-Right hand side of Maxwell's fourth equation in integral form in 
-free space. Note the default value of the optional argument.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\RHSmaxwellivintfree     \\
-  &\RHSmaxwellivintfree[S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellivint}{\oarg{boundaryname}\oarg{surfacename}}
-Maxwell's fourth equation in integral form. Note the default values of 
-the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwellivint       \\
-  &\maxwellivint[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellivinta}{\oarg{boundaryname}\oarg{surfacename}}
-Alternate form of Maxwell's fourth equation in integral form. 
-Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwellivinta        \\
-  &\maxwellivinta[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellivintfree}{\oarg{boundaryname}\oarg{surfacename}}
-Maxwell's fourth equation in integral form in free space. 
-Note the default values of the optional arguments.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{mysolution*}
-  &\maxwellivintfree        \\
-  &\maxwellivintfree[C][S]
-\end{mysolution*}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwellidif}{}
-Left hand side of Maxwell's first equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \LHSmaxwellidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellidif}{}
-Right hand side of Maxwell's first equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwellidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellidiffree}{}
-Right hand side of Maxwell's first equation in differential form 
-in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwellidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellidif}{}
-Maxwell's first equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwellidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellidiffree}{}
-Maxwell's first equation in differential form in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwellidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwelliidif}{}
-Left hand side of Maxwell's second equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \LHSmaxwelliidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliidif}{}
-Right hand side of Maxwell's second equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliidifm}{}
-Right hand side of Maxwell's second equation in differential 
-form with magnetic monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliidifm \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliidiffree}{}
-Right hand side of Maxwell's second equation in differential 
-form in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliidif}{}
-Maxwell's second equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliidifm}{}
-Maxwell's second equation in differential form with magnetic 
-monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliidifm \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellidiiffree}{}
-Maxwell's second equation in differential form in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwelliiidif}{}
-Left hand side of Maxwell's third equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \LHSmaxwelliiidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiidif}{}
-Right hand side of Maxwell's third equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiidifm}{}
-Right hand side of Maxwell's third equation in differential form 
-with magnetic monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiidifm \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwelliiidiffree}{}
-Right hand side of Maxwell's third equation in differential form 
-in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwelliiidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiidif}{}
-Maxwell's third equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliiidif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiidifm}{}
-Maxwell's third equation in differential form with magnetic 
-monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliiidifm \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwelliiidiffree}{}
-Maxwell's third equation in differential form in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwelliiidiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{LHSmaxwellivdif}{}
-Left hand side of Maxwell's fourth equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \LHSmaxwellivdif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellivdif}{}
-Right hand side of Maxwell's fourth equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwellivdif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSmaxwellivdiffree}{}
-Right hand side of Maxwell's fourth equation in differential form 
-in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSmaxwellivdiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellivdif}{}
-Maxwell's fourth equation in differential form.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwellivdif \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{maxwellivdiffree}{}
-Maxwell's fourth equation in differential form in free space.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \maxwellivdiffree \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSlorentzforce}{}
-Right hand side of Lorentz force.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSlorentzforce \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{RHSlorentzforcem}{}
-Right hand side of Lorentz force with magnetic monopoles.
-\end{docCommand}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\[ \RHSlorentzforcem \]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{VPython and GlowScript Code}
-% There are three ways to deal with VPython\footnote{See the VPython home page at
-% \url{https://vpython.org/} for more information.} and GlowScript\footnote{See the 
-% GlowScript home page at \url{https://glowscript.org/} for more information.} code.
-% With very few exceptions, VPython code and GlowScript code are identical. The 
-% commands with |vpython| in their names can handle both, but for semantic 
-% completeness there are corresponding commands with |glowscript| in their names.
-% Because Classic VPython will no longer be developed, the first line of all
-% VPython programs not used in GlowScript will conform to Jupyter syntax.
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vpythonline}{\marg{vpythoncode}}
-Command for a single line of VPython or GlowScript code used inline.
-\end{docCommand}
-\begin{dispExample}
-\vpythonline{from vpython import *}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{glowscriptline}{\marg{glowscriptcode}}
-Command for a single line of GlowScript code used inline. Note that with very
-few exceptions, GlowScript code is identical to VPython code.
-\end{docCommand}
-\begin{dispExample}
-\glowscriptline{xyplane = box(pos=vector(0,0,0),length=10,width=10,height=0.05)}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{vpythonblock}{\marg{caption}\marg{label}}
-Environment for a block of VPython code. A caption and label are
-required. The label can be used by \cs{ref} or \cs{hyperref}.
-\end{docEnvironment}
-\begin{docEnvironment}{glowscriptblock}{\marg{caption}\marg{label}}
-Functionally identical to \refEnv{vpythonblock}.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{vpythonblock}{Example VPython Listing}{listing1}
-  from vpython import *
-  
-  sphere(pos=vector(1,2,3),color=color.green)
-  # create a named arrow
-  MyArrow=arrow(pos=earth.pos,axis=fscale*Fnet,color=color.green)
-  print ("arrow.pos = "), arrow.pos
-\end{vpythonblock}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{vpythonfile}{\marg{caption}\marg{label}\meta{filename}}
-Typesets a file in the current directory containing VPython code. A caption and
-label are required. The label can be used by \cs{ref} and \cs{hyperref}.
-The listing will begin on a new page.
-\end{docCommand}
-\begin{docCommand}{glowscriptfile}{\marg{caption}\marg{label}\meta{filename}}
-Functionally identical to \refCom{vpythonfile}.
-\end{docCommand}
-\begin{dispExample}
-\vpythonfile{Program vdemo.py}{vlisting1}{vdemo.py}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% \subsection{Boxes and Environments}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{emptyanswer}{\oarg{wdth}\oarg{hght}}
-Typesets empty space for filling answer boxes, so there is nothing to see.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\emptyanswer[0.75][0.2]
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{activityanswer}
-  {\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Main environment for typesetting boxed answers.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{activityanswer}
-  Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
-  Morbi commodo, ipsum sed pharetra gravida, orci magna 
-  rhoncus neque, id pulvinar odio lorem non turpis. Nullam 
-  sit amet enim.
-\end{activityanswer}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{adjactivityanswer}
-  {\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Like \refEnv{activityanswer} but adjusts vertically to tightly surround text.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{adjactivityanswer}
-  Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi
-  commodo, ipsum sed pharetra gravida, orci magna rhoncus neque,
-  id pulvinar odio lorem non turpis. Nullam sit amet enim. 
-  Suspendisse id velit vitae ligula volutpat condimentum. Aliquam
-  erat volutpat. Sed quis velit. Nulla facilisi. Nulla libero.
-  Vivamus pharetra posuere sapien. Nam consectetuer. Sed aliquam,
-  nunc eget euismod ullamcorper, lectus nunc ullamcorper orci,
-  fermentum bibendum enim nibh eget ipsum. Donec porttitor ligula
-  eu dolor. Maecenas vitae nulla consequat libero cursus venenatis.
-  Nam magna enim, accumsan eu, blandit sed, blandit a, eros.
-\end{adjactivityanswer}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{emptybox}
-  {\oarg{txt}\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Provides a fixed-size box with optional text.
-\end{docCommand}
-\begin{dispExample}
-\emptybox[Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
-Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque,
-id pulvinar odio lorem non turpis. Nullam sit amet enim.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{adjemptybox}
-  {\oarg{txt}\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Like \refCom{emptybox} but adjusts vertically to tightly surround text.
-\end{docCommand}
-\begin{dispExample}
-\adjemptybox[Lorem ipsum dolor sit amet, consectetuer adipiscing
-elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus
-neque, id pulvinar odio lorem non turpis. Nullam sit amet enim.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{answerbox}
-  {\oarg{txt}\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Wrapper for \refCom{emptybox}.
-\end{docCommand}
-\begin{dispExample}
-\answerbox[Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
-Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus neque,
-id pulvinar odio lorem non turpis. Nullam sit amet enim.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{adjanswerbox}
-  {\oarg{txt}\oarg{bgclr}\oarg{frmclr}\oarg{txtclr}\oarg{wdth}\oarg{hght}}
-Wrapper for \refCom{adjemptybox}.
-\end{docCommand}
-\begin{dispExample}
-\adjanswerbox[Lorem ipsum dolor sit amet, consectetuer adipiscing
-elit. Morbi commodo, ipsum sed pharetra gravida, orci magna rhoncus
-neque, id pulvinar odio lorem non turpis. Nullam sit amet enim.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{smallanswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.10 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth}.
-\end{docCommand}
-\begin{dispExample}
-\smallanswerbox[][red]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{mediumanswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.20 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth}.
-\end{docCommand}
-\begin{dispExample}
-\mediumanswerbox[][lightgray]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{largeanswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.25 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\largeanswerbox[][lightgray]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{largeranswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.33 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\largeranswerbox[][lightgray]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hugeanswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.50 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\hugeanswerbox[][lightgray]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hugeranswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 0.75 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\hugeranswerbox[][lightgray]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fullpageanswerbox}{\oarg{txt}\oarg{bgclr}}
-Answer box with height 1.00 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\fullpageanswerbox[][lightgray]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{smallanswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.10 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth}. The first argument isn't 
-really optional, and \emph{must} be different for each form used. 
-Content can be typed in the box and saved with a PDF editor or viewer 
-that supports PDF forms.
-\end{docCommand}
-\begin{dispExample}
-\smallanswerform[a1][Type your response here.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{mediumanswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.20 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth}. The first argument isn't 
-really optional, and \textbf{must} be different for each form used. 
-Content can be typed in the box and saved with a PDF editor or viewer 
-that supports PDF forms.
-\end{docCommand}
-\begin{dispExample}
-\mediumanswerform[a1][Type your response here.]
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{largeanswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.25 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\largeanswerform[a1][Type your response here.]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{largeranswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.33 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\largeranswerform[a1][Type your response here.]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hugeanswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.50 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\hugeanswerform[a1][Type your response here.]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{hugeranswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 0.75 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\hugeranswerform[a1][Type your response here.]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{fullpageanswerform}{\oarg{name}\oarg{prompt}}
-Editable answer form with height 1.00 that of current \cs{textheight} 
-and width 0.90 that of current \cs{linewidth} (too large to show here).
-\end{docCommand}
-\begin{dispListing}
-\fullpageanswerform[a1][Type your response here.]
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{miinstructornote}{}
-Environment for highlighting notes to instructors.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{miinstructornote}
-  Nunc auctor bibendum eros. Maecenas porta accumsan mauris. Etiam
-  enim enim, elementum sed, bibendum quis, rhoncus non, metus. Fusce
-  neque dolor, adipiscing sed, consectetuer et, lacinia sit amet,
-  quam. Suspendisse wisi quam, consectetuer in, blandit sed,
-  suscipit eu, eros. Etiam ligula enim, tempor ut, blandit nec, 
-  mollis eu, lectus. Nam cursus. Vivamus iaculis. Aenean risus
-  purus, pharetra in, blandit quis, gravida a, turpis. Donec nisl.
-  Aenean eget mi. Fusce mattis est id diam. Phasellus faucibus 
-  interdum sapien.
-\end{miinstructornote}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{mistudentnote}{}
-Environment for highlighting notes to students.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{mistudentnote}
-  Nunc auctor bibendum eros. Maecenas porta accumsan mauris. Etiam
-  enim enim, elementum sed, bibendum quis, rhoncus non, metus. Fusce
-  neque dolor, adipiscing sed, consectetuer et, lacinia sit amet,
-  quam. Suspendisse wisi quam, consectetuer in, blandit sed,
-  suscipit eu, eros. Etiam ligula enim, tempor ut, blandit nec, 
-  mollis eu, lectus. Nam cursus. Vivamus iaculis. Aenean risus
-  purus, pharetra in, blandit quis, gravida a, turpis. Donec nisl.
-  Aenean eget mi. Fusce mattis est id diam. Phasellus faucibus 
-  interdum sapien.
-\end{mistudentnote}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{miderivation}{}
-Environment for mathematical derivations based on the |align| environment. 
-See \refEnv{mysolution} for how to handle long lines in this environment.
-Note that using this environment resets the counter for equation numbering.
-If you want continuous numbering throughout your document, use the |align|
-environment.
-\end{docEnvironment}
-\begin{docEnvironment}{miderivation*}{}
-Like \refEnv{miderivation} but suppresses line numbers.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{miderivation}
-  \gamma         &= \relgamma{\magvect{v}} && \text{given}               \\
-  \gamma\squared &= \ooomx{\inparens{\frac{\magvect{v}}{c}}\squared}
-    &&\text{square both sides}                                           \\
-  \frac{1}{\gamma\squared} &= 1-\inparens{\frac{\magvect{v}}{c}}\squared
-    &&\text{reciprocal of both sides}                                    \\
-  \inparens{\frac{\magvect{v}}{c}}\squared &= 1-\frac{1}{\gamma\squared}
-    &&\text{rearrange}                                                   \\
-  \frac{\magvect{v}}{c} &= \sqrt{1-\frac{1}{\gamma\squared}}
-    &&\text{square root of both sides}
-\end{miderivation}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{mistandard}{}
-Environment for standards for standards-based grading. 
-\end{docEnvironment}
-\begin{dispExample}
-\begin{mistandard}
-  I can create a standard which reflects deep student learning.
-\end{mistandard}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{bwinstructornote}{}
-Like \refEnv{miinstructornote} but in black and grey.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{bwinstructornote}
-  Nunc auctor bibendum eros. Maecenas porta accumsan mauris. Etiam
-  enim enim, elementum sed, bibendum quis, rhoncus non, metus. Fusce
-  neque dolor, adipiscing sed, consectetuer et, lacinia sit amet,
-  quam. Suspendisse wisi quam, consectetuer in, blandit sed,
-  suscipit eu, eros. Etiam ligula enim, tempor ut, blandit nec, 
-  mollis eu, lectus. Nam cursus. Vivamus iaculis. Aenean risus
-  purus, pharetra in, blandit quis, gravida a, turpis. Donec nisl.
-  Aenean eget mi. Fusce mattis est id diam. Phasellus faucibus 
-  interdum sapien.
-\end{bwinstructornote}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{bwstudentnote}{}
-Like \refEnv{mistudentnote} but in black and grey.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{bwstudentnote}
-  Nunc auctor bibendum eros. Maecenas porta accumsan mauris. Etiam
-  enim enim, elementum sed, bibendum quis, rhoncus non, metus. Fusce
-  neque dolor, adipiscing sed, consectetuer et, lacinia sit amet,
-  quam. Suspendisse wisi quam, consectetuer in, blandit sed,
-  suscipit eu, eros. Etiam ligula enim, tempor ut, blandit nec, 
-  mollis eu, lectus. Nam cursus. Vivamus iaculis. Aenean risus
-  purus, pharetra in, blandit quis, gravida a, turpis. Donec nisl.
-  Aenean eget mi. Fusce mattis est id diam. Phasellus faucibus 
-  interdum sapien.
-\end{bwstudentnote}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{bwderivation}{}
-Like \refEnv{miderivation} but in black and grey. See \refEnv{mysolution} for 
-how to handle long lines in this environment.
-\end{docEnvironment}
-\begin{docEnvironment}{bwderivation*}{}
-Like \refEnv{bwderivation} but suppresses line numbers.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{bwderivation}
-  \gamma &= \relgamma{\magvect{v}} && \text{given}                       \\
-  \gamma\squared &= \ooomx{\inparens{\frac{\magvect{v}}{c}}\squared}
-    &&\text{square both sides}                                           \\
-  \frac{1}{\gamma\squared} &= 1-\inparens{\frac{\magvect{v}}{c}}\squared
-    &&\text{reciprocal of both sides}                                    \\
-  \inparens{\frac{\magvect{v}}{c}}\squared &= 1-\frac{1}{\gamma\squared}
-    &&\text{rearrange}                                                   \\
-  \frac{\magvect{v}}{c}&=\sqrt{1-\frac{1}{\gamma\squared}}
-    &&\text{square root of both sides}
-\end{bwderivation}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{bwstandard}{}
-Like \refEnv{mistandard} but in black and grey.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{bwstandard}
-  I can create a standard which reflects deep student learning.
-\end{bwstandard}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{mysolution}{}
-Alias for simple environment for mathematical derivations based on the 
-|align| environment. The second example shows how to handle long lines 
-for this and the derivation environments.
-\end{docEnvironment}
-\begin{docEnvironment}{mysolution*}{}
-Like \refEnv{mysolution} but suppresses line numbers.
-\end{docEnvironment}
-\begin{dispExample}
-\begin{mysolution}
-  \gamma &= \relgamma{\magvect{v}}                  
-    && \text{given}                                                      \\
-  \gamma\squared &= \ooomx{\inparens{\frac{\magvect{v}}{c}}\squared}
-    &&\text{square both sides}                                           \\
-  \frac{1}{\gamma\squared} &= 1-\inparens{\frac{\magvect{v}}{c}}\squared
-    &&\text{reciprocal of both sides}                                    \\
-  \inparens{\frac{\magvect{v}}{c}}\squared &= 1-\frac{1}{\gamma\squared}
-    &&\text{rearrange}                                                   \\
-  \frac{\magvect{v}}{c} &= \sqrt{1-\frac{1}{\gamma\squared}}
-    &&\text{square root of both sides}
-\end{mysolution}
-\begin{mysolution*}
-  \vect{E} &= \electricfield{\mivector{1,2,3}} + \electricfield{\mivector{2,4,6}}
-    \nonumber                                                                      \\
-  &\hphantom{{}=\electricfield{\mivector{1,1,1}}}+\electricfield{\mivector{3,5,6}} 
-    &&\text{superposition}                                                         \\
-  \vect{E} &= \electricfield{\mivector{2,3,4}} + \electricfield{\mivector{2,4,6}}  
-    \nonumber                                                                      \\
-  &+ \electricfield{\mivector{1,1,1}} +\electricfield{\mivector{3,5,6}} 
-    &&\text{superposition again}                                                   \\
-  \vect{E} &= \electricfield{\mivector{2,3,4}} + \electricfield{\mivector{2,4,6}}
-    \nonumber                                                                      \\
-  &\quad + \electricfield{\mivector{1,1,1}} +\electricfield{\mivector{3,5,6}} 
-    && \text{more superposition}
-\end{mysolution*}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docEnvironment}{problem}{\marg{problemname}}
-Creates a simple environment for problem solutions. This 
-environment is mainly for students. Each new problem starts on a new page in an 
-effort to force organization upon students. The environment also creates a new 
-|enumerate| environment called |parts| for which labels are alphabetic, 
-reflecting the organization of multipart textbook problems. The \cs{item} command 
-is renamed \cs{problempart} to, again, help with organization for newcomers to 
-\LaTeX. A typical example would be structured as follows.
-\end{docEnvironment}
-\begin{dispExample*}{sidebyside, lefthand ratio=0.50}
-\begin{problem}{Chapter 2 Problem 1}
-This problem has two parts.
-\begin{parts}
-  \problempart
-  This is the first part
-  \problempart
-  This is the second part
-\end{parts}
-\end{problem}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{reason}{\marg{text}}
-In a \refEnv{mysolution} environment, this aligns the text arguments with the 
-end of the longest line and nicely handles line wrapping. Make sure your margins 
-are narrow enough. You may need to experiment.
-\end{docCommand}
-\begin{dispExample}
-\begin{mysolution}
-  c^2 &= a^2 + b^2 && \reason{given}      \\
-  a^2 &= c^2 - b^2 && \reason{Rearrange, and add some extra text just for fun.} \\
-  a &= \sqrt{c^2 - b^2} && \reason{Take square root of both sides.}
-\end{mysolution}
-\end{dispExample}
-%\iffalse
-%</example>
-%\fi
-%
-% \newpage
-% \subsection{Miscellaneous Commands}
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{checkpoint}{}
-Centered checkpoint for student discussion.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\checkpoint
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{image}{\oarg{scalesize}\marg{filename}\marg{caption}\marg{label}}
-Centered figure displayed actual size with caption. The optional argument can be
-a scale factor (with 1 being the original image size), explicit \texttt{width}
-and/or \texttt{height} parameters, or even an \texttt{angle} for rotating the
-image. Be sure to give each image a unique label. This allows you to refer back
-to the image subsequently just by using the label.
-\end{docCommand}
-\begin{dispListing}
-  \image{sampleimage.pdf}{An image shown actual size.}{img-label1}
-  \image[scale=1.5]{sampleimage.pdf}{An image scaled by 1.5 times.}{img-label2}
-  \image[height=1cm,width=2cm]{sampleimage.pdf}{An image resized.}{img-label3}
-  \image[width=0.8\textwidth]{sampleimage.pdf}{An image 80 percent the text width.}
-  {img-label4}
-  \image[angle=45]{sampleimage.pdf}{An image actual size, rotated.}{img-label5}
-\end{dispListing}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{sneakyone}{\marg{thing}}
-Shows argument as a sneaky one.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\sneakyone{\frac{\m}{\m}}
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-%
-%\iffalse
-%<*example>
-%\fi
-\begin{docCommand}{qed}{}
-Command for QED symbol.
-\end{docCommand}
-\begin{dispExample*}{sidebyside}
-\qed
-\end{dispExample*}
-%\iffalse
-%</example>
-%\fi
-% \StopEventually{}
-%
-% \newpage
-% \section{Source Code}
-%
-% \iffalse
-%<*package>
-% \fi
-% Note the packages that must be present.
 %    \begin{macrocode}
-\RequirePackage{amsmath}
-\RequirePackage{amssymb}
-\RequirePackage{array}
-\RequirePackage{cancel}
-\RequirePackage[dvipsnames]{xcolor}
-\RequirePackage{enumitem}
-\RequirePackage{environ}
-\RequirePackage{esint}
-\RequirePackage[g]{esvect}
-\RequirePackage{etoolbox}
-\RequirePackage{filehook}
-\RequirePackage{extarrows}
-\RequirePackage{float}
-\RequirePackage[T1]{fontenc}
-\RequirePackage{graphicx}
-\RequirePackage{epstopdf}
-\RequirePackage{textcomp}
-\RequirePackage{letltxmacro}
-\RequirePackage{listings}
-\RequirePackage{mathtools}
-\RequirePackage[framemethod=TikZ]{mdframed}
-\RequirePackage{stackengine}
-\RequirePackage{suffix}
-\RequirePackage{tensor}
-\RequirePackage{xargs}
-\RequirePackage{xparse}
-\RequirePackage{xspace}
-\RequirePackage{ifthen}
-\RequirePackage{calligra}
-\RequirePackage[hypertexnames=false]{hyperref}
-\hypersetup{colorlinks=true,urlcolor=blue}
-\DeclareMathAlphabet{\mathcalligra}{T1}{calligra}{m}{n}
-\DeclareFontShape{T1}{calligra}{m}{n}{<->s*[2.2]callig15}{}
-\DeclareGraphicsRule{.tif}{png}{.png}{`convert #1 `basename #1 .tif`.png}
-\DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it}
-\usetikzlibrary{shadows}
-\definecolor{vbgcolor}{rgb}{1,1,1}           % background for code listings
-\definecolor{vshadowcolor}{rgb}{0.5,0.5,0.5} % shadow for code listings
-\lstdefinestyle{vpython}{%                   % style for code listings
-  language=Python,%                          % select language
-  morekeywords={__future__,division,append,  % VPython/GlowScript specific keywords
-  arange,arrow,astuple,axis,background,black,blue,cyan,green,%
-  magenta,orange,red,white,yellow,border,box,color,comp,%
-  cone,convex,cross,curve,cylinder,degrees,diff_angle,dot,ellipsoid,extrusion,faces,%
-  font,frame,graphs,headlength,height,headwidth,helix,index,interval,label,length,%
-  line,linecolor,mag,mag2,make_trail,material,norm,normal,objects,opacity,points,pos,%
-  print,print_function,proj,pyramid,radians,radius,rate,retain,ring,rotate,scene,%
-  shaftwidth,shape,sign,size,space,sphere,text,trail_object,trail_type,True,twist,up,%
-  vector,visual,width,offset,yoffset,GlowScript,VPython,vpython,trail_color,%
-  trail_radius,pps,clear,False,CoffeeScript,graph,gdisplay,canvas,pause,vec,clone,%
-  compound,vertex,triangle,quad,attach_trail,attach_arrow,textures,bumpmaps,%
-  print_options,get_library,read_local_file},%
-  captionpos=b,%                       % position caption
-  frame=shadowbox,%                    % shadowbox around listing
-  rulesepcolor=\color{vshadowcolor},%  % shadow color
-  basicstyle=\footnotesize,%           % basic font for code listings
-  commentstyle=\bfseries\color{red},   % font for comments
-  keywordstyle=\bfseries\color{blue},% % font for keywords
-  showstringspaces=true,%              % show spaces in strings
-  stringstyle=\bfseries\color{green},% % color for strings
-  numbers=left,%                       % where to put line numbers
-  numberstyle=\tiny,%                  % set to 'none' for no line numbers
-  xleftmargin=20pt,%                   % extra left margin
-  backgroundcolor=\color{vbgcolor},%   % some people find this annoying
-  upquote=true,%                       % how to typeset quotes
-  breaklines=true}%                    % break long lines
-\definecolor{formcolor}{gray}{0.90}    % color for form background
-\newcolumntype{C}[1]{>{\centering}m{#1}}
-\newboolean{@optromanvectors}
-\newboolean{@optboldvectors}
-\newboolean{@optsinglemagbars}
-\newboolean{@optbaseunits}
-\newboolean{@optdrvdunits}
-\newboolean{@optaltnunits}
-\newboolean{@optapproxconsts}
-\newboolean{@optuseradians}
-\setboolean{@optromanvectors}{false}   % this is where you set the default option
-\setboolean{@optboldvectors}{false}    % this is where you set the default option
-\setboolean{@optsinglemagbars}{false}  % this is where you set the default option
-\setboolean{@optbaseunits}{false}      % this is where you set the default option
-\setboolean{@optdrvdunits}{true}       % this is where you set the default option
-\setboolean{@optaltnunits}{false}      % this is where you set the default option
-\setboolean{@optapproxconsts}{false}   % this is where you set the default option
-\setboolean{@optuseradians}{false}     % this is where you set the default option
-\DeclareOption{romanvectors}{\setboolean{@optromanvectors}{true}}
-\DeclareOption{boldvectors}{\setboolean{@optboldvectors}{true}}
-\DeclareOption{singlemagbars}{\setboolean{@optsinglemagbars}{true}}
-\DeclareOption{baseunits}{\setboolean{@optbaseunits}{true}}
-\DeclareOption{drvdunits}{\setboolean{@optdrvdunits}{true}}
-\DeclareOption{approxconsts}{\setboolean{@optapproxconsts}{true}}
-\DeclareOption{useradians}{\setboolean{@optuseradians}{true}}
-\ProcessOptions\relax
+\typeout{}%
+\typeout{mandi: You are using mandi \mandiversion.}%
+\typeout{mandi: This package requires LuaLaTeX.}%
+\typeout{mandi: Loadtime options...}
 %    \end{macrocode}
 %
+% Complete the banner by showing currently selected options.
+% The value of the \refKey{units} key is used in situ to set
+% the default units.
+%
 %    \begin{macrocode}
-\newcommand*{\mandiversion}{\ifmmode%
-    2.7.5\mbox{ dated }2019/01/12%
-  \else%
-    2.7.5 dated 2019/01/12%
+\newcommand*{\mandi at do@setup}{%
+  \csname alwaysuse\pgfkeysvalueof{/mandi/options/buffered at units}units\endcsname%
+  \typeout{mandi: You will get \pgfkeysvalueof{/mandi/options/buffered at units}\space units.}%
+  \ifusingpreciseconstants
+    \alwaysusepreciseconstants
+    \typeout{mandi: You will get precise constants.}%
+  \else
+    \alwaysuseapproximateconstants
+    \typeout{mandi: You will get approximate constants.}%
   \fi
-  }%
-\typeout{                                                }
-\typeout{mandi: You're using mandi version \mandiversion.}
+  \typeout{}%
+}%
+\mandi at do@setup
 %    \end{macrocode}
 %
-% \noindent This block of code fixes a conflict with the amssymb package.
+% Define a setup command that overrides the loadtime options
+% when called with new options. A new banner is written to the console.
+%
 %    \begin{macrocode}
-\@ifpackageloaded{amssymb}{%
-  \csundef{square}
-  \typeout{mandi: Package amssymb detected. Its \protect\square\space 
-  has been redefined.}
-}{%
-  \typeout{mandi: Package amssymb not detected.}
+\NewDocumentCommand{\mandisetup}{ m }{%
+  \IfValueT{#1}{%
+    \pgfqkeys{/mandi/options}{#1}
+    \typeout{}%
+    \typeout{mandi: mandisetup options...}
+    \mandi at do@setup
+  }%
 }%
 %    \end{macrocode}
 %
-% \noindent This block of code defines unit names and symbols.
-%    \begin{macrocode}
-\newcommand*{\per}{\ensuremath{/}}
-\newcommand*{\usk}{\ensuremath{\cdot}}
-\newcommand*{\unit}[2]{\ensuremath{{#1}\;{#2}}}
-\newcommand*{\ampere}{\ensuremath{\mathrm{A}}}
-\newcommand*{\arcminute}{\ensuremath{'}}
-\newcommand*{\arcsecond}{\ensuremath{''}}
-\newcommand*{\atomicmassunit}{\ensuremath{\mathrm{u}}}
-\newcommand*{\candela}{\ensuremath{\mathrm{cd}}}
-\newcommand*{\coulomb}{\ensuremath{\mathrm{C}}}
-\newcommand*{\degree}{\ensuremath{^{\circ}}}
-\newcommand*{\electronvolt}{\ensuremath{\mathrm{eV}}}
-\newcommand*{\eV}{\electronvolt}
-\newcommand*{\farad}{\ensuremath{\mathrm{F}}}
-\newcommand*{\henry}{\ensuremath{\mathrm{H}}}
-\newcommand*{\hertz}{\ensuremath{\mathrm{Hz}}}
-\newcommand*{\hour}{\ensuremath{\mathrm{h}}}
-\newcommand*{\joule}{\ensuremath{\mathrm{J}}}
-\newcommand*{\kelvin}{\ensuremath{\mathrm{K}}}
-\newcommand*{\kilogram}{\ensuremath{\mathrm{kg}}}
-\newcommand*{\metre}{\ensuremath{\mathrm{m}}}
-\newcommand*{\minute}{\ensuremath{\mathrm{min}}}
-\newcommand*{\mole}{\ensuremath{\mathrm{mol}}}
-\newcommand*{\newton}{\ensuremath{\mathrm{N}}}
-\newcommand*{\ohm}{\ensuremath{\Omega}}
-\newcommand*{\pascal}{\ensuremath{\mathrm{Pa}}}
-\newcommand*{\radian}{\ensuremath{\mathrm{rad}}}
-\newcommand*{\second}{\ensuremath{\mathrm{s}}}
-\newcommand*{\siemens}{\ensuremath{\mathrm{S}}}
-\newcommand*{\steradian}{\ensuremath{\mathrm{sr}}}
-\newcommand*{\tesla}{\ensuremath{\mathrm{T}}}
-\newcommand*{\volt}{\ensuremath{\mathrm{V}}}
-\newcommand*{\watt}{\ensuremath{\mathrm{W}}}
-\newcommand*{\weber}{\ensuremath{\mathrm{Wb}}}
-\newcommand*{\C}{\coulomb}
-\newcommand*{\F}{\farad}
-%\H is already defined as a LaTeX accent
-\newcommand*{\J}{\joule}
-\newcommand*{\N}{\newton}
-\newcommand*{\Pa}{\pascal}
-\newcommand*{\rad}{\radian}
-\newcommand*{\sr}{\steradian}
-%\S is already defined as a LaTeX symbol
-\newcommand*{\T}{\tesla}
-\newcommand*{\V}{\volt}
-\newcommand*{\W}{\watt}
-\newcommand*{\Wb}{\weber}
-\newcommand*{\square}[1]{\ensuremath{{#1}^2}}               % prefix   2
-\newcommand*{\cubic}[1]{\ensuremath{{#1}^3}}                % prefix   3
-\newcommand*{\quartic}[1]{\ensuremath{{#1}^4}}              % prefix   4
-\newcommand*{\reciprocal}[1]{\ensuremath{{#1}^{-1}}}        % prefix  -1 
-\newcommand*{\reciprocalsquare}[1]{\ensuremath{{#1}^{-2}}}  % prefix  -2
-\newcommand*{\reciprocalcubic}[1]{\ensuremath{{#1}^{-3}}}   % prefix  -3
-\newcommand*{\reciprocalquartic}[1]{\ensuremath{{#1}^{-4}}} % prefix  -4
-\newcommand*{\squared}{\ensuremath{^2}}                     % postfix  2
-\newcommand*{\cubed}{\ensuremath{^3}}                       % postfix  3
-\newcommand*{\quarted}{\ensuremath{^4}}                     % postfix  4
-\newcommand*{\reciprocaled}{\ensuremath{^{-1}}}             % postfix -1
-\newcommand*{\reciprocalsquared}{\ensuremath{^{-2}}}        % postfix -2
-\newcommand*{\reciprocalcubed}{\ensuremath{^{-3}}}          % postfix -3
-\newcommand*{\reciprocalquarted}{\ensuremath{^{-4}}}        % postfix -4
-\newcommand*{\emptyunit}{\ensuremath{\Box}}
-%    \end{macrocode}
+% Define units and related constructs to be used with the unit engine. 
+% All single letter macros are now gone. We basically absorbed and 
+% adapted the now outdated 
+% \href{https://ctan.org/pkg/siunits}{\pkg{SIunits}} package. 
+% We make use of |\symup{...}| from the \pkg{unicode-math} package.
 %
-% \noindent Define a new named physics quantity or physical constant and 
-% commands for selecting units. My thanks to Ulrich Diez for contributing 
-% this code.
 %    \begin{macrocode}
-\newcommand*\mi at exchangeargs[2]{#2#1}%
-\newcommand*\mi at name{}%
-\long\def\mi at name#1#{\romannumeral0\mi at innername{#1}}%
-\newcommand*\mi at innername[2]{%
-  \expandafter\mi at exchangeargs\expandafter{\csname#2\endcsname}{#1}}%
-\begingroup
-\@firstofone{%
-  \endgroup
-  \newcommand*\mi at forkifnull[3]{%
-    \romannumeral\iffalse{\fi\expandafter\@secondoftwo\expandafter%
-    {\expandafter{\string#1}\expandafter\@secondoftwo\string}%
-    \expandafter\@firstoftwo\expandafter{\iffalse}\fi0 #3}{0 #2}}}%
-\newcommand*\selectbaseunit[3]{#1}
-\newcommand*\selectdrvdunit[3]{#2}
-\newcommand*\selectaltnunit[3]{#3}
-\newcommand*\selectunit{}
-\newcommand*\perpusebaseunit{\let\selectunit=\selectbaseunit}
-\newcommand*\perpusedrvdunit{\let\selectunit=\selectdrvdunit}
-\newcommand*\perpusealtnunit{\let\selectunit=\selectaltnunit}
-\newcommand*\hereusebaseunit[1]{%
-  \begingroup\perpusebaseunit#1\endgroup}%
-\newcommand*\hereusedrvdunit[1]{%
-  \begingroup\perpusedrvdunit#1\endgroup}%
-\newcommand*\hereusealtnunit[1]{%
-  \begingroup\perpusealtnunit#1\endgroup}%
-\newenvironment{usebaseunit}{\perpusebaseunit}{}%
-\newenvironment{usedrvdunit}{\perpusedrvdunit}{}%
-\newenvironment{usealtnunit}{\perpusealtnunit}{}%
-\newcommand*\newphysicsquantity{\definephysicsquantity{\newcommand}}
-\newcommand*\redefinephysicsquantity{\definephysicsquantity{\renewcommand}}
-\newcommandx*\definephysicsquantity[5][4=,5=]{%
-  \innerdefinewhatsoeverquantityfork{#3}{#4}{#5}{#1}{#2}{}{[1]}{##1}}%
-\newcommand*\newphysicsconstant{\definephysicsconstant{\newcommand}}
-\newcommand*\redefinephysicsconstant{\definephysicsconstant{\renewcommand}}
-\newcommandx*\definephysicsconstant[7][6=,7=]{%
-  \innerdefinewhatsoeverquantityfork{#5}{#6}{#7}{#1}{#2}{#3}{}{#4}}%
-\newcommand*\innerdefinewhatsoeverquantityfork[3]{%
-  \expandafter\innerdefinewhatsoeverquantity\romannumeral0%
-  \mi at forkifnull{#3}{\mi at forkifnull{#2}{{#1}}{{#2}}{#1}}%
-                 {\mi at forkifnull{#2}{{#1}}{{#2}}{#3}}{#1}}%
-\newcommand*\innerdefinewhatsoeverquantity[8]{%
-  \mi at name#4{#5}#7{\unit{#8}{\selectunit{#3}{#1}{#2}}}%
-  \mi at name#4{#5baseunit}#7{\unit{#8}{#3}}%
-  \mi at name#4{#5drvdunit}#7{\unit{#8}{#1}}%
-  \mi at name#4{#5altnunit}#7{\unit{#8}{#2}}%
-  \mi at name#4{#5onlyunit}{\selectunit{#3}{#1}{#2}}%
-  \mi at name#4{#5onlybaseunit}{\ensuremath{#3}}%
-  \mi at name#4{#5onlydrvdunit}{\ensuremath{#1}}%
-  \mi at name#4{#5onlyaltnunit}{\ensuremath{#2}}%
-  \mi at name#4{#5value}#7{\ensuremath{#8}}%
-  \mi at forkifnull{#7}{%
-    \ifx#4\renewcommand\mi at name\let{#5mathsymbol}=\relax\fi
-    \mi at name\newcommand*{#5mathsymbol}{\ensuremath{#6}}}{}}%
+\NewDocumentCommand{\per}{}{/}
+\NewDocumentCommand{\usk}{}{\cdot}
+\NewDocumentCommand{\unit}{ m m }{{#1}{\,#2}}
+\NewDocumentCommand{\ampere}{}{\symup{A}}
+\NewDocumentCommand{\atomicmassunit}{}{\symup{u}}
+\NewDocumentCommand{\candela}{}{\symup{cd}}
+\NewDocumentCommand{\coulomb}{}{\symup{C}}
+\NewDocumentCommand{\degree}{}{^{\circ}}
+\NewDocumentCommand{\electronvolt}{}{\symup{eV}}
+\NewDocumentCommand{\ev}{}{\electronvolt}
+\NewDocumentCommand{\farad}{}{\symup{F}}
+\NewDocumentCommand{\henry}{}{\symup{H}}
+\NewDocumentCommand{\hertz}{}{\symup{Hz}}
+\NewDocumentCommand{\joule}{}{\symup{J}}
+\NewDocumentCommand{\kelvin}{}{\symup{K}}
+\NewDocumentCommand{\kev}{}{\kiloelectronvolt}
+\NewDocumentCommand{\kiloelectronvolt}{}{\symup{keV}}
+\NewDocumentCommand{\kilogram}{}{\symup{kg}}
+\NewDocumentCommand{\lightspeed}{}{\symup{c}}
+\NewDocumentCommand{\megaelectronvolt}{}{\symup{MeV}}
+\NewDocumentCommand{\meter}{}{\symup{m}}
+\NewDocumentCommand{\metre}{}{\meter}
+\NewDocumentCommand{\mev}{}{\megaelectronvolt}
+\NewDocumentCommand{\mole}{}{\symup{mol}}
+\NewDocumentCommand{\newton}{}{\symup{N}}
+\NewDocumentCommand{\ohm}{}{\symup\Omega}
+\NewDocumentCommand{\pascal}{}{\symup{Pa}}
+\NewDocumentCommand{\radian}{}{\symup{rad}}
+\NewDocumentCommand{\second}{}{\symup{s}}
+\NewDocumentCommand{\siemens}{}{\symup{S}}
+\NewDocumentCommand{\steradian}{}{\symup{sr}}
+\NewDocumentCommand{\tesla}{}{\symup{T}}
+\NewDocumentCommand{\volt}{}{\symup{V}}
+\NewDocumentCommand{\watt}{}{\symup{W}}
+\NewDocumentCommand{\weber}{}{\symup{Wb}}
+\NewDocumentCommand{\tothetwo}{}{^2}             % postfix  2
+\NewDocumentCommand{\tothethree}{}{^3}           % postfix  3
+\NewDocumentCommand{\tothefour}{}{^4}            % postfix  4
+\NewDocumentCommand{\inverse}{}{^{-1}}           % postfix -1
+\NewDocumentCommand{\totheinversetwo}{}{^{-2}}   % postfix -2
+\NewDocumentCommand{\totheinversethree}{}{^{-3}} % postfix -3
+\NewDocumentCommand{\totheinversefour}{}{^{-4}}  % postfix -4
+\NewDocumentCommand{\emptyunit}{}{\mdlgwhtsquare}
+\NewDocumentCommand{\tento}{ m }{10^{#1}}
+\NewDocumentCommand{\timestento}{ m }{\times\tento{#1}}
+\NewDocumentCommand{\xtento}{ m }{\times\tento{#1}}
 %    \end{macrocode}
 %
-% \noindent This block of code processes the options.
 %    \begin{macrocode}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\typeout{mandi: You'll get bold vectors.}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\typeout{mandi: You'll get Roman vectors.}}
-   {\typeout{mandi: You'll get italic vectors.}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\typeout{mandi: You'll get single magnitude bars.}}
-  {\typeout{mandi: You'll get double magnitude bars.}}
-\ifthenelse{\boolean{@optbaseunits}}
-  {\perpusebaseunit %
-   \typeout{mandi: You'll get base units.}}
-  {\ifthenelse{\boolean{@optdrvdunits}}
-     {\perpusedrvdunit %
-      \typeout{mandi: You'll get derived units.}}
-     {\perpusealtnunit %
-      \typeout{mandi: You'll get alternate units.}}}
-\ifthenelse{\boolean{@optapproxconsts}}
-  {\typeout{mandi: You'll get approximate constants.}}
-  {\typeout{mandi: You'll get precise constants.}}
-\ifthenelse{\boolean{@optuseradians}}
-  {\typeout{mandi: You'll get radians in ang mom, ang impulse, and torque.}}
-  {\typeout{mandi: You won't get radians in ang mom, ang impulse, and torque.}}
-\typeout{                                                }
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newscalarquantity #1#2#3#4
+{%
+  \cs_new:cpn {#1} ##1 {\unit{##1}{\mandi at selectunits{#2}{#3}{#4}}}% 
+  \cs_new:cpn {#1value} ##1 {##1}%
+  \cs_new:cpn {#1baseunits} ##1 {\unit{##1}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1derivedunits} ##1 {\unit{##1}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1alternateunits} ##1 {\unit{##1}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\newscalarquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_newscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent This is a utility command for picking constants. Do not use this
-% command manually.
+% Redefining an existing scalar quantity.
+%
 %    \begin{macrocode}
-\ifthenelse{\boolean{@optapproxconsts}}
-  {\newcommand*{\mi at p}[2]{#1}} % approximate value
-  {\newcommand*{\mi at p}[2]{#2}} % precise value
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewscalarquantity #1#2#3#4
+{%
+  \cs_set:cpn {#1} ##1 {\unit{##1}{\mandi at selectunits{#2}{#3}{#4}}}% 
+  \cs_set:cpn {#1value} ##1 {##1}%
+  \cs_set:cpn {#1baseunits} ##1 {\unit{##1}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1derivedunits} ##1 {\unit{##1}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1alternateunits} ##1 {\unit{##1}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\renewscalarquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_renewscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent SI base unit of length or spatial displacement
+% Defining a new vector quantity. Note that a corresponding scalar is also defined.
+%
 %    \begin{macrocode}
-\newcommand*{\m}{\metre}
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newvectorquantity #1#2#3#4
+{%
+  \mandi_newscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+  \cs_new:cpn {vector#1} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vector} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1value} ##1 {\mivector{##1}}%
+  \cs_new:cpn {#1vectorvalue} ##1 {\mivector{##1}}%
+  \cs_new:cpn {vector#1baseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectorbaseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1derivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectorderivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1alternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectoralternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {vector#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {vector#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\newvectorquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_newvectorquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent SI base unit of mass
+% Redefining an existing vector quantity. Note that a corresponding scalar is also redefined.
+%
 %    \begin{macrocode}
-\newcommand*{\kg}{\kilogram}
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewvectorquantity #1#2#3#4
+{%
+  \mandi_renewscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+  \cs_set:cpn {vector#1} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vector} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1value} ##1 {\mivector{##1}}%
+  \cs_set:cpn {#1vectorvalue} ##1 {\mivector{##1}}%
+  \cs_set:cpn {vector#1baseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectorbaseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1derivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectorderivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1alternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectoralternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {vector#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {vector#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\renewvectorquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_renewvectorquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent SI base unit of time or temporal displacement
+% Defining a new physical constant.
+%
 %    \begin{macrocode}
-\newcommand*{\s}{\second}
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newphysicalconstant #1#2#3#4#5#6#7
+{%
+  \cs_new:cpn {#1} {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1mathsymbol} {#2}%
+  \cs_new:cpn {#1approximatevalue} {#3}%
+  \cs_new:cpn {#1precisevalue} {#4}%
+  \cs_new:cpn {#1baseunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectbaseunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1derivedunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectderivedunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1alternateunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectalternateunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#5}{#6}{#7}}%
+  \cs_new:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#5}{#6}{#7}}%
+  \cs_new:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#5}{#6}{#7}}%
+}%
+\NewDocumentCommand{\newphysicalconstant}{ m m m m m O{#5} O{#5} }%
+{%
+  \mandi_newphysicalconstant { #1 }{ #2 }{ #3 }{ #4 }{ #5 }{ #6 }{ #7 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent SI base unit of electric current
+% Redefining an existing physical constant.
+%
 %    \begin{macrocode}
-\newcommand*{\A}{\ampere}
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewphysicalconstant #1#2#3#4#5#6#7
+{%
+  \cs_set:cpn {#1} {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1mathsymbol} {#2}%
+  \cs_set:cpn {#1approximatevalue} {#3}%
+  \cs_set:cpn {#1precisevalue} {#4}%
+  \cs_set:cpn {#1baseunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectbaseunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1derivedunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectderivedunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1alternateunits} 
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectalternateunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#5}{#6}{#7}}%
+  \cs_set:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#5}{#6}{#7}}%
+  \cs_set:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#5}{#6}{#7}}%
+}%
+\NewDocumentCommand{\renewphysicalconstant}{ m m m m m O{#5} O{#5} }%
+{%
+  \mandi_renewphysicalconstant { #1 }{ #2 }{ #3 }{ #4 }{ #5 }{ #6 }{ #7 }%
+}%
+\ExplSyntaxOff
 %    \end{macrocode}
 %
-% \noindent SI base unit of thermodynamic temperature
+% Define every quantity we need in introductory physics, alphabetically
+% for convenience. This is really the core feature of \mandi\ that no other
+% package offers. There are commands for quantities that have no dimensions 
+% or units, and these quantities are defined for semantic completeness.
+%
 %    \begin{macrocode}
-\newcommand*{\K}{\kelvin}
+\newvectorquantity{acceleration}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\meter\per\second\tothetwo]%
+\newscalarquantity{amount}%
+  {\mole}%
+\newvectorquantity{angularacceleration}%
+  {\radian\usk\second\totheinversetwo}%
+  [\radian\per\second\tothetwo]%
+  [\radian\per\second\tothetwo]%
+\newscalarquantity{angularfrequency}%
+  {\radian\usk\second\inverse}%
+  [\radian\per\second]%
+  [\radian\per\second]%
+%\ifmandi at rotradians
+%  \newphysicalquantity{angularimpulse}%
+%    {\meter\tothetwo\usk\kilogram\usk\second\inverse\usk\radian\inverse}%
+%    [\joule\usk\second\per\radian]%
+%    [\newton\usk\meter\usk\second\per\radian]%
+%  \newphysicalquantity{angularmomentum}%
+%    {\meter\tothetwo\usk\kilogram\usk\second\inverse\usk\radian\inverse}%
+%    [\kilogram\usk\meter\tothetwo\per(\second\usk\radian)]%
+%    [\newton\usk\meter\usk\second\per\radian]%
+%\else
+  \newvectorquantity{angularimpulse}%
+    {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \joule\usk\second
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \newton\usk\meter\usk\second
+  \newvectorquantity{angularmomentum}%
+    {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \joule\usk\second
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \newton\usk\meter\usk\second
+%\fi
+\newvectorquantity{angularvelocity}%
+  {\radian\usk\second\inverse}%
+  [\radian\per\second]%
+  [\radian\per\second]%
+\newscalarquantity{area}%
+  {\meter\tothetwo}%
+\newscalarquantity{areachargedensity}%
+  {\ampere\usk\second\usk\meter\totheinversetwo}%
+  [\coulomb\per\meter\tothetwo]%
+  [\coulomb\per\meter\tothetwo]%
+\newscalarquantity{areamassdensity}%
+  {\kilogram\usk\meter\totheinversetwo}%
+  [\kilogram\per\meter\tothetwo]%
+  [\kilogram\per\meter\tothetwo]%
+\newscalarquantity{capacitance}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversetwo}%
+  [\farad]%
+  [\coulomb\per\volt]% % also \coulomb\tothetwo\per\newton\usk\meter, \second\per\ohm
+\newscalarquantity{charge}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]% % also \farad\usk\volt
+\newvectorquantity{cmagneticfield}%
+  {\kilogram\usk\meter\usk\ampere\inverse\usk\second\totheinversethree}%  
+  [\newton\per\coulomb]% % also \volt\per\meter
+  [\newton\per\coulomb]%
+\newscalarquantity{conductance}%
+  {\ampere\tothetwo\usk\second\tothethree\usk\kilogram\inverse\usk\meter\totheinversetwo}%
+  [\siemens]%
+  [\ampere\per\volt]%
+\newscalarquantity{conductivity}%
+  {\ampere\tothetwo\usk\second\tothethree\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\siemens\per\meter]%
+  [\ampere\per\volt\usk\meter]%
+\newscalarquantity{conventionalcurrent}%
+  {\ampere}%
+  [\coulomb\per\second]%
+  [\ampere]%
+\newscalarquantity{current}%
+  {\ampere}%
+\newscalarquantity{currentdensity}%
+  {\ampere\usk\meter\totheinversetwo}%
+  [\coulomb\per\second\usk\meter\tothetwo]%
+  [\ampere\per\meter\tothetwo]%
+\newscalarquantity{dielectricconstant}%
+  {}%
+\newvectorquantity{direction}%
+  {}%
+\newvectorquantity{displacement}%
+  {\meter}
+\newscalarquantity{duration}%
+  {\second}%
+\newvectorquantity{electricdipolemoment}%
+  {\ampere\usk\second\usk\meter}%
+  [\coulomb\usk\meter]%
+  [\coulomb\usk\meter]%
+\newvectorquantity{electricfield}%
+  {\kilogram\usk\meter\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt\per\meter]%
+  [\newton\per\coulomb]%
+\newscalarquantity{electricflux}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt\usk\meter]%
+  [\newton\usk\meter\tothetwo\per\coulomb]%
+\newscalarquantity{electricpotential}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{electricpotentialdifference}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{electroncurrent}%
+  {\second\inverse}%
+  [\ensuremath{\symup{e}}\per\second]%
+  [\ensuremath{\symup{e}}\per\second]%
+\newscalarquantity{emf}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{energy}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule]% % also \newton\usk\meter
+  [\joule]%
+\newscalarquantity{energyinev}%
+  {\electronvolt}%
+\newscalarquantity{energyinkev}%
+  {\kiloelectronvolt}%
+\newscalarquantity{energyinmev}%
+  {\megaelectronvolt}%
+\newscalarquantity{energydensity}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\joule\per\meter\tothethree]%
+  [\joule\per\meter\tothethree]%
+\newscalarquantity{energyflux}%
+  {\kilogram\usk\second\totheinversethree}%
+  [\watt\per\meter\tothetwo]%
+  [\watt\per\meter\tothetwo]%
+\newscalarquantity{entropy}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin]%
+  [\joule\per\kelvin]%
+\newvectorquantity{force}%
+  {\kilogram\usk\meter\usk\second\totheinversetwo}%
+  [\newton]%
+  [\newton]% % also \kilogram\usk\meter\per\second\tothetwo
+\newscalarquantity{frequency}%
+  {\second\inverse}%
+  [\hertz]%
+  [\hertz]%
+\newvectorquantity{gravitationalfield}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\newton\per\kilogram]%
+\newscalarquantity{gravitationalpotential}%
+  {\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule\per\kilogram]%
+  [\joule\per\kilogram]%
+\newscalarquantity{gravitationalpotentialdifference}%
+  {\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule\per\kilogram]%
+  [\joule\per\kilogram]%
+\newvectorquantity{impulse}%
+  {\kilogram\usk\meter\usk\second\inverse}%
+  [\newton\usk\second]%
+  [\newton\usk\second]%
+\newscalarquantity{indexofrefraction}%
+  {}%
+\newscalarquantity{inductance}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry]%
+  [\volt\usk\second\per\ampere]% % also \square\meter\usk\kilogram\per\coulomb\tothetwo, \Wb\per\ampere
+\newscalarquantity{linearchargedensity}%
+  {\ampere\usk\second\usk\meter\inverse}%
+  [\coulomb\per\meter]%
+  [\coulomb\per\meter]%
+\newscalarquantity{linearmassdensity}%
+  {\kilogram\usk\meter\inverse}%
+  [\kilogram\per\meter]%
+  [\kilogram\per\meter]%
+\newscalarquantity{luminousintensity}%
+  {\candela}%
+\newscalarquantity{magneticcharge}%
+  {\ampere\usk\meter}% % There is another convention. Be careful!
+\newvectorquantity{magneticdipolemoment}%
+  {\ampere\usk\meter\tothetwo}%
+  [\ampere\usk\meter\tothetwo]%
+  [\joule\per\tesla]%
+\newvectorquantity{magneticfield}%
+  {\kilogram\usk\ampere\inverse\usk\second\totheinversetwo}%
+  [\newton\per\ampere\usk\meter]% % also \Wb\per\meter\tothetwo
+  [\tesla]%
+\newscalarquantity{magneticflux}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversetwo}%
+  [\tesla\usk\meter\tothetwo]%
+  [\volt\usk\second]% % also \Wb and \joule\per\ampere
+\newscalarquantity{mass}%
+  {\kilogram}%
+\newscalarquantity{mobility}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversefour}%
+  [\meter\tothetwo\per\volt\usk\second]%
+  [\coulomb\usk\meter\per\newton\usk\second]%
+\newscalarquantity{momentofinertia}%
+  {\kilogram\usk\meter\tothetwo}%
+  [\joule\usk\second\tothetwo]%
+  [\kilogram\usk\meter\tothetwo]%
+\newvectorquantity{momentum}%
+  {\kilogram\usk\meter\usk\second\inverse}%
+  [\kilogram\usk\meter\per\second]%
+  [\kilogram\usk\meter\per\second]%
+\newvectorquantity{momentumflux}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\newton\per\meter\tothetwo]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{numberdensity}%
+  {\meter\totheinversethree}%
+  [\per\meter\tothethree]%
+  [\per\meter\tothethree]%
+\newscalarquantity{permeability}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newscalarquantity{permittivity}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\farad\per\meter]%
+  [\coulomb\tothetwo\per\newton\usk\meter\tothetwo]%
+\newscalarquantity{planeangle}%
+  {\meter\usk\meter\inverse}%
+  [\radian]%
+  [\radian]%
+\newscalarquantity{polarizability}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse}%
+  [\coulomb\usk\meter\tothetwo\per\volt]%
+  [\coulomb\tothetwo\usk\meter\per\newton]%
+\newscalarquantity{power}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversethree}%
+  [\watt]%
+  [\joule\per\second]%
+\newvectorquantity{poynting}%
+  {\kilogram\usk\second\totheinversethree}%
+  [\watt\per\meter\tothetwo]%
+  [\watt\per\meter\tothetwo]%
+\newscalarquantity{pressure}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{relativepermeability}
+  {}%
+\newscalarquantity{relativepermittivity}%
+  {}%
+\newscalarquantity{resistance}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\totheinversetwo\usk\second\totheinversethree}%
+  [\ohm]% % also \volt\per\ampere
+  [\ohm]%
+\newscalarquantity{resistivity}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversethree}%
+  [\ohm\usk\meter]%
+  [\volt\usk\meter\per\ampere]%
+\newscalarquantity{solidangle}%
+  {\meter\tothetwo\usk\meter\totheinversetwo}%
+  [\steradian]%
+  [\steradian]%
+\newscalarquantity{specificheatcapacity}%
+  {\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin\usk\kilogram]%
+  [\joule\per\kelvin\usk\kilogram]
+\newscalarquantity{springstiffness}%
+  {\kilogram\usk\second\totheinversetwo}%
+  [\newton\per\meter]%
+  [\newton\per\meter]%
+\newscalarquantity{springstretch}% % This is really just a displacement.
+  {\meter}%
+\newscalarquantity{stress}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{strain}%
+  {}%
+\newscalarquantity{temperature}%
+  {\kelvin}%
+%\ifmandi at rotradians
+%  \newphysicalquantity{torque}%
+%    {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo\usk\radian\inverse}%
+%    [\newton\usk\meter\per\radian]%
+%    [\newton\usk\meter\per\radian]%
+%\else
+\newvectorquantity{torque}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\newton\usk\meter]%
+  [\newton\usk\meter]%
+%\fi
+\newvectorquantity{velocity}%
+  {\meter\usk\second\inverse}%
+  [\meter\per\second]%
+  [\meter\per\second]%
+\newvectorquantity{velocityc}%
+  {\lightspeed}%
+  [\lightspeed]%
+  [\lightspeed]%
+\newscalarquantity{volume}%
+  {\meter\tothethree}%
+\newscalarquantity{volumechargedensity}%
+  {\ampere\usk\second\per\meter\totheinversethree}%
+  [\coulomb\per\meter\tothethree]%
+  [\coulomb\per\meter\tothethree]%
+\newscalarquantity{volumemassdensity}%
+  {\kilogram\usk\meter\totheinversethree}%
+  [\kilogram\per\meter\tothethree]%
+  [\kilogram\per\meter\tothethree]%
+\newscalarquantity{wavelength}% % This is really just a displacement.
+  {\meter}%
+\newvectorquantity{wavenumber}%
+  {\meter\inverse}%
+  [\per\meter]%
+  [\per\meter]%
+\newscalarquantity{work}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule]% % also \newton\usk\meter but discouraged 
+  [\joule]%
+\newscalarquantity{youngsmodulus}% % This is really just a stress.
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
 %    \end{macrocode}
 %
-% \noindent SI base unit of amount
+% Define physical constants for introductory physics, again alphabetically
+% for convenience.
+%
 %    \begin{macrocode}
-\newcommand*{\mol}{\mole}
+\newphysicalconstant{avogadro}%
+  {\symup{N_A}}%
+  {6\timestento{23}}{6.02214076\timestento{23}}% % exact 2019 value
+  {\mole\inverse}%
+  [\per\mole]%
+  [\per\mole]%
+\newphysicalconstant{biotsavartconstant}% % alias for \mzofp
+  {\symup{\frac{\mu_o}{4\pi}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{bohrradius}%
+  {\symup{a_o}}%
+  {5.3\timestento{-11}}{5.29177210903\timestento{-11}}%
+  {\meter}%
+\newphysicalconstant{boltzmann}%
+  {\symup{k_B}}%
+  {1.4\timestento{-23}}{1.380649\timestento{-23}}% % exact 2019 value
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin]%
+  [\joule\per\kelvin]%
+\newphysicalconstant{coulombconstant}% % alias for \oofpez
+  {\symup{\frac{1}{4\pi\epsilon_o}}}%
+  {9\timestento{9}}{8.9875517923\timestento{9}}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversefour}%
+  [\meter\per\farad]%
+  [\newton\usk\meter\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{earthmass}%
+  {\symup{M_{Earth}}}%
+  {6.0\timestento{24}}{5.9722\timestento{24}}%
+  {\kilogram}%
+\newphysicalconstant{earthmoondistance}%
+  {\symup{d_{EM}}}%
+  {3.8\timestento{8}}{3.81550\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{earthradius}%
+  {\symup{R_{Earth}}}%
+  {6.4\timestento{6}}{6.3781\timestento{6}}%
+  {\meter}%
+\newphysicalconstant{earthsundistance}%
+  {\symup{d_{ES}}}%
+  {1.5\timestento{11}}{1.496\timestento{11}}%
+  {\meter}%
+\newphysicalconstant{electroncharge}%
+  {\symup{q_e}}%
+  {-\elementarychargeapproximatevalue}{-\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{electronCharge}%
+  {\symup{Q_e}}%
+  {-\elementarychargeapproximatevalue}{-\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{electronmass}%
+  {\symup{m_e}}%
+  {9.1\timestento{-31}}{9.1093837015\timestento{-31}}%
+  {\kilogram}%
+\newphysicalconstant{elementarycharge}%
+  {\symup{e}}%
+  {1.6\timestento{-19}}{1.602176634\timestento{-19}}% % exact 2019 value
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{finestructure}%
+  {\symup{\alpha}}%
+  {\frac{1}{137}}{7.2973525693\timestento{-3}}%
+  {}%
+\newphysicalconstant{hydrogenmass}%
+  {\symup{m_H}}%
+  {1.7\timestento{-27}}{1.6737236\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{moonearthdistance}%
+  {\symup{d_{ME}}}%
+  {3.8\timestento{8}}{3.81550\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{moonmass}%
+  {\symup{M_{Moon}}}%
+  {7.3\timestento{22}}{7.342\timestento{22}}%
+  {\kilogram}%
+\newphysicalconstant{moonradius}%
+  {\symup{R_{Moon}}}%
+  {1.7\timestento{6}}{1.7371\timestento{6}}%
+  {\meter}%
+\newphysicalconstant{mzofp}%
+  {\symup{\frac{\mu_o}{4\pi}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{neutronmass}%
+  {\symup{m_n}}%
+  {1.7\timestento{-27}}{1.67492749804\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{oofpez}%
+  {\symup{\frac{1}{4\pi\epsilon_o}}}%
+  {9\timestento{9}}{8.9875517923\timestento{9}}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversefour}%
+  [\meter\per\farad]%
+  [\newton\usk\meter\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{oofpezcs}%
+  {\symup{\frac{1}{4\pi\epsilon_o c^2}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\tesla\usk\meter\tothetwo]%
+  [\newton\usk\second\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{planck}%
+  {\symup{h}}%
+  {6.6\timestento{-34}}{6.62607015\timestento{-34}}% % exact 2019 value
+  {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+  [\joule\usk\second]%
+  [\joule\usk\second]%
 %    \end{macrocode}
 %
-% \noindent SI base unit of luminous intensity
+% See \url{https://tex.stackexchange.com/a/448565/218142}.
+% 
+%
 %    \begin{macrocode}
-\newcommand*{\cd}{\candela}
+\newphysicalconstant{planckbar}%
+  {\symup{\lower0.18ex\hbox{\mathchar"AF}\mkern-7mu h}}%
+  {1.1\timestento{-34}}{1.054571817\timestento{-34}}%
+  {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+  [\joule\usk\second]%
+  [\joule\usk\second]
+\newphysicalconstant{planckc}%
+  {\symup{hc}}%
+  {2.0\timestento{-25}}{1.98644586\timestento{-25}}%
+  {\kilogram\usk\meter\tothethree\usk\second\totheinversetwo}%
+  [\joule\usk\meter]%
+  [\joule\usk\meter]%
+\newphysicalconstant{protoncharge}%
+  {\symup{q_p}}%
+  {+\elementarychargeapproximatevalue}{+\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{protonCharge}%
+  {\symup{Q_p}}%
+  {+\elementarychargeapproximatevalue}{+\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{protonmass}%
+  {\symup{m_p}}%
+  {1.7\timestento{-27}}{1.672621898\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{rydberg}%
+  {\symup{R_{\infty}}}%
+  {1.1\timestento{7}}{1.0973731568160\timestento{7}}%
+  {\meter\inverse}%
+\newphysicalconstant{speedoflight}%
+  {\symup{c}}%
+  {3\timestento{8}}{2.99792458\timestento{8}}% % exact value
+  {\meter\usk\second\inverse}%
+  [\meter\per\second]%
+  [\meter\per\second]
+\newphysicalconstant{stefanboltzmann}%
+  {\symup{\sigma}}%
+  {5.7\timestento{-8}}{5.670374\timestento{-8}}%
+  {\kilogram\usk\second\totheinversethree\usk\kelvin\totheinversefour}%
+  [\watt\per\meter\tothetwo\usk\kelvin\tothefour]%
+  [\watt\per\meter\tothetwo\usk\kelvin\tothefour]
+\newphysicalconstant{sunearthdistance}%
+  {\symup{d_{SE}}}%
+  {1.5\timestento{11}}{1.496\timestento{11}}%
+  {\meter}%
+\newphysicalconstant{sunmass}%
+  {\symup{M_{Sun}}}%
+  {2.0\timestento{30}}{1.98855\timestento{30}}%
+  {\kilogram}%
+\newphysicalconstant{sunradius}%
+  {\symup{R_{Sun}}}%
+  {7.0\timestento{8}}{6.957\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{surfacegravfield}%
+  {\symup{g}}%
+  {9.8}{9.807}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\newton\per\kilogram]%
+\newphysicalconstant{universalgrav}%
+  {\symup{G}}%
+  {6.7\timestento{-11}}{6.67430\timestento{-11}}%
+  {\meter\tothethree\usk\kilogram\inverse\usk\second\totheinversetwo}%
+  [\newton\usk\meter\tothetwo\per\kilogram\tothetwo]% % also \joule\usk\meter\per\kilogram\tothetwo
+  [\newton\usk\meter\tothetwo\per\kilogram\tothetwo]%
+\newphysicalconstant{vacuumpermeability}%
+  {\symup{\mu_o}}%
+  {4\pi\timestento{-7}}{4\pi\timestento{-7}}% % as of 2018 no longer 4\pi\timestento{-7}
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{vacuumpermittivity}%
+  {\symup{\epsilon_o}}%
+  {9\timestento{-12}}{8.854187817\timestento{-12}}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\farad\per\meter]%
+  [\coulomb\tothetwo\per\newton\usk\meter\tothetwo]%
 %    \end{macrocode}
 %
+% Diagnostic commands to provide sanity checks on commands that 
+% represent physical quantities and constants.
+%
 %    \begin{macrocode}
-\newcommand*{\dimdisplacement}{\ensuremath{\mathrm{L}}}
-\newcommand*{\dimmass}{\ensuremath{\mathrm{M}}}
-\newcommand*{\dimduration}{\ensuremath{\mathrm{T}}}
-\newcommand*{\dimcurrent}{\ensuremath{\mathrm{I}}}
-\newcommand*{\dimtemperature}{\ensuremath{\mathrm{\Theta}}}
-\newcommand*{\dimamount}{\ensuremath{\mathrm{N}}}
-\newcommand*{\dimluminous}{\ensuremath{\mathrm{J}}}
-\newcommand*{\infeet}[1]{\unit{#1}{\mathrm{ft}}}
-\newcommand*{\infeetpersecond}[1]{\unit{#1}{\mathrm{ft}\per\s}}
-\newcommand*{\infeetpersecondsquared}[1]{\unit{#1}{\mathrm{ft}\per\s\squared}}
-\newcommand*{\indegrees}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\inFarenheit}[1]{\unit{#1}{\mkern-\thickmuskip\degree\mathrm{F}}}
-\newcommand*{\inCelsius}[1]{\unit{#1}{\mkern-\thickmuskip\degree\mathrm{C}}}
-\newcommand*{\inarcminutes}[1]{\unit{#1}{\mkern-\thickmuskip\arcminute}}
-\newcommand*{\inarcseconds}[1]{\unit{#1}{\mkern-\thickmuskip\arcsecond}}
-\newcommand*{\ineV}[1]{\unit{#1}{\electronvolt}}
-\newcommand*{\ineVocs}[1]{\unit{#1}{\mathrm{eV}\per c^2}}
-\newcommand*{\ineVoc}[1]{\unit{#1}{\mathrm{eV}\per c}}
-\newcommand*{\inMeV}[1]{\unit{#1}{\mathrm{MeV}}}
-\newcommand*{\inMeVocs}[1]{\unit{#1}{\mathrm{MeV}\per c^2}}
-\newcommand*{\inMeVoc}[1]{\unit{#1}{\mathrm{MeV}\per c}}
-\newcommand*{\inGeV}[1]{\unit{#1}{\mathrm{GeV}}}
-\newcommand*{\inGeVocs}[1]{\unit{#1}{\mathrm{GeV}\per c^2}}
-\newcommand*{\inGeVoc}[1]{\unit{#1}{\mathrm{GeV}\per c}}
-\newcommand*{\inamu}[1]{\unit{#1}{\mathrm{u}}}
-\newcommand*{\ingram}[1]{\unit{#1}{\mathrm{g}}}
-\newcommand*{\ingrampercubiccm}[1]{\unit{#1}{\mathrm{g}\per\cubic\mathrm{cm}}}
-\newcommand*{\inAU}[1]{\unit{#1}{\mathrm{AU}}}
-\newcommand*{\inly}[1]{\unit{#1}{\mathrm{ly}}}
-\newcommand*{\incyr}[1]{\unit{#1}{c\usk\mathrm{year}}}
-\newcommand*{\inpc}[1]{\unit{#1}{\mathrm{pc}}}
-\newcommand*{\insolarL}[1]{\unit{#1}{\Lsolar}}
-\newcommand*{\insolarT}[1]{\unit{#1}{\Tsolar}}
-\newcommand*{\insolarR}[1]{\unit{#1}{\Rsolar}}
-\newcommand*{\insolarM}[1]{\unit{#1}{\Msolar}}
-\newcommand*{\insolarF}[1]{\unit{#1}{\Fsolar}}
-\newcommand*{\insolarf}[1]{\unit{#1}{\fsolar}}
-\newcommand*{\insolarMag}[1]{\unit{#1}{\Magsolar}}
-\newcommand*{\insolarmag}[1]{\unit{#1}{\magsolar}}
-\newcommand*{\insolarD}[1]{\unit{#1}{\Dsolar}}
-\newcommand*{\insolard}[1]{\unit{#1}{\dsolar}}
-\newcommand*{\velocityc}[1]{\ensuremath{#1c}}
-\newcommand*{\lorentzfactor}[1]{\ensuremath{#1}}
-\newcommand*{\speed}{\velocity}
-\newphysicsquantity{displacement}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsquantity{mass}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsquantity{duration}%
-  {\s}%
-  [\s]%
-  [\s]
-\newphysicsquantity{current}%
-  {\A}%
-  [\A]%
-  [\A]
-\newphysicsquantity{temperature}%
-  {\K}%
-  [\K]%
-  [\K]
-\newphysicsquantity{amount}%
-  {\mol}%
-  [\mol]%
-  [\mol]
-\newphysicsquantity{luminous}%
-  {\cd}%
-  [\cd]%
-  [\cd]
-\newphysicsquantity{planeangle}%
-  {\m\usk\reciprocal\m}%
-  [\rad]%
-  [\rad]
-\newphysicsquantity{solidangle}%
-  {\m\squared\usk\reciprocalsquare\m}%
-  [\sr]%
-  [\sr]
-\newphysicsquantity{velocity}%
-  {\m\usk\reciprocal\s}%
-  [\m\usk\reciprocal\s]%
-  [\m\per\s]
-\newphysicsquantity{acceleration}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\m\per\s\squared]
-\newphysicsquantity{gravitationalfield}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\N\per\kg]
-\newphysicsquantity{gravitationalpotential}%
-  {\square\m\usk\reciprocalsquare\s}%
-  [\J\per\kg]%
-  [\J\per\kg]
-\newphysicsquantity{momentum}%
-  {\m\usk\kg\usk\reciprocal\s}%
-  [\N\usk\s]%
-  [\kg\usk\m\per\s]
-\newphysicsquantity{impulse}%
-  {\m\usk\kg\usk\reciprocal\s}%
-  [\N\usk\s]%
-  [\N\usk\s]
-\newphysicsquantity{force}%
-  {\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N]%
-  [\N]
-\newphysicsquantity{springstiffness}%
-  {\kg\usk\s\reciprocalsquared}%
-  [\N\per\m]%
-  [\N\per\m]
-\newphysicsquantity{springstretch}%
-  {\m}%
-  []%
-  []
-\newphysicsquantity{area}%
-  {\m\squared}%
-  []%
-  []
-\newphysicsquantity{volume}%
-  {\cubic\m}%
-  []%
-  []
-\newphysicsquantity{linearmassdensity}%
-  {\reciprocal\m\usk\kg}%
-  [\kg\per\m]%
-  [\kg\per\m]
-\newphysicsquantity{areamassdensity}%
-  {\m\reciprocalsquared\usk\kg}%
-  [\kg\per\m\squared]%
-  [\kg\per\m\squared]
-\newphysicsquantity{volumemassdensity}%
-  {\m\reciprocalcubed\usk\kg}%
-  [\kg\per\m\cubed]%
-  [\kg\per\m\cubed]
-\newphysicsquantity{youngsmodulus}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{stress}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{pressure}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{strain}%
-  {}%
-  []%
-  []
-\newphysicsquantity{work}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-  [\J]%
-  [\N\usk\m]
-\newphysicsquantity{energy}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-  [\J]%
-  [\N\usk\m]
-\newphysicsquantity{power}%
-  {\m\squared\usk\kg\usk\s\reciprocalcubed}%
-  [\W]%
-  [\J\per\s]
-\newphysicsquantity{specificheatcapacity}%
-  {\J\per\K\usk\kg}%
-  [\J\per\K\usk\kg]%
-  [\J\per\K\usk\kg]
-\newphysicsquantity{angularvelocity}%
-  {\rad\usk\reciprocal\s}%
-  [\rad\per\s]%
-  [\rad\per\s]
-\newphysicsquantity{angularacceleration}%
-  {\rad\usk\s\reciprocalsquared}%
-  [\rad\per\s\squared]%
-  [\rad\per\s\squared]
-\newphysicsquantity{momentofinertia}%
-  {\m\squared\usk\kg}%
-  [\m\squared\usk\kg]%
-  [\J\usk\s\squared]
-\ifthenelse{\boolean{@optuseradians}}
-  {%
-  \newphysicsquantity{angularmomentum}%
-    {\m\squared\usk\kg\usk\reciprocal\s\usk\reciprocal\rad}%
-    [\kg\usk\m\squared\per(\s\usk\rad)]%
-    [\N\usk\m\usk\s\per\rad]
-  \newphysicsquantity{angularimpulse}%
-    {\m\squared\usk\kg\usk\reciprocal\s\usk\reciprocal\rad}%
-    [\J\usk\s\per\rad]%
-    [\N\usk\m\usk\s\per\rad]
-  \newphysicsquantity{torque}%
-    {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\rad}%
-    [\N\usk\m\per\rad]%
-    [\J\per\rad]
-  }%
-  {%
-  \newphysicsquantity{angularmomentum}%
-    {\m\squared\usk\kg\usk\reciprocal\s}%
-    [\kg\usk\m\squared\per\s]%
-    [\N\usk\m\usk\s]
-  \newphysicsquantity{angularimpulse}%
-    {\m\squared\usk\kg\usk\reciprocal\s}%
-    [\J\usk\s]%
-    [\N\usk\m\usk\s]
-  \newphysicsquantity{torque}%
-    {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-    [\N\usk\m]%
-    [\J]
-  }%
-\newphysicsquantity{entropy}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\K}%
-  [\J\per\K]%
-  [\J\per\K]
-\newphysicsquantity{wavelength}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsquantity{wavenumber}%
-  {\reciprocal\m}%
-  [\per\m]%
-  [\per\m]
-\newphysicsquantity{frequency}%
-  {\reciprocal\s}%
-  [\hertz]%
-  [\hertz]
-\newphysicsquantity{angularfrequency}%
-  {\rad\usk\reciprocal\s}%
-  [\rad\per\s]%
-  [\rad\per\s]
-\newphysicsquantity{charge}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsquantity{permittivity}%
-  {\m\reciprocalcubed\usk\reciprocal\kg\usk\s\reciprocalquarted\usk\A\squared}%
-  [\C\squared\per\N\usk\m\squared]%
-  [\F\per\m]
-\newphysicsquantity{permeability}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\T\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsquantity{electricfield}%
-  {\m\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\per\C]%
-  [\V\per\m]
-\newphysicsquantity{electricdipolemoment}%
-  {\m\usk\s\usk\A}%
-  [\C\usk\m]%
-  [\C\usk\m]
-\newphysicsquantity{electricflux}%
-  {\m\cubed\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\usk\m\squared\per\C]%
-  [\V\usk\m]
-\newphysicsquantity{magneticfield}%
-  {\kg\usk\s\reciprocalsquared\usk\reciprocal\A}%
-  [\T]%
-  [\N\per\C\usk(\m\per\s)] % also \Wb\per\m\squared
-\newphysicsquantity{magneticflux}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\A}%
-  [\T\usk\m\squared]%
-  [\volt\usk\s] % also \Wb and \J\per\A
-\newphysicsquantity{cmagneticfield}%
-  {\m\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\per\C]%
-  [\V\per\m]
-\newphysicsquantity{linearchargedensity}%
-  {\reciprocal\m\usk\s\usk\A}%
-  [\C\per\m]%
-  [\C\per\m]
-\newphysicsquantity{areachargedensity}%
-  {\reciprocalsquare\m\usk\s\usk\A}%
-  [\C\per\square\m]%
-  [\C\per\square\m]
-\newphysicsquantity{volumechargedensity}%
-  {\reciprocalcubic\m\usk\s\usk\A}%
-  [\C\per\cubic\m]%
-  [\C\per\cubic\m]
-\newphysicsquantity{mobility}%
- {\m\squared\usk\kg\usk\s\reciprocalquarted\usk\reciprocal\A}%
- [\m\squared\per\volt\usk\s]%
- [(\m\per\s)\per(\N\per\C)]
-\newphysicsquantity{numberdensity}%
-  {\reciprocalcubic\m}%
-  [\per\cubic\m]%
-  [\per\cubic\m]
-\newphysicsquantity{polarizability}%
-  {\reciprocal\kg\usk\s\quarted\usk\square\A}%
-  [\C\usk\square\m\per\V]%
-  [\C\usk\m\per(\N\per\C)]
-\newphysicsquantity{electricpotential}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocal\A}%
-  [\V]%
-  [\J\per\C]
-\newphysicsquantity{emf}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocal\A}%
-  [\V]%
-  [\J\per\C]
-\newphysicsquantity{dielectricconstant}%
-  {}%
-  []%
-  []
-\newphysicsquantity{indexofrefraction}%
-  {}%
-  []%
-  []
-\newphysicsquantity{relativepermittivity}%
-  {}%
-  []%
-  []
-\newphysicsquantity{relativepermeability}
-  {}%
-  []%
-  []
-\newphysicsquantity{energydensity}%
-  {\m\reciprocaled\usk\kg\usk\reciprocalsquare\s}%
-  [\J\per\cubic\m]%
-  [\J\per\cubic\m]
-\newphysicsquantity{energyflux}%
-  {\kg\usk\s\reciprocalcubed}%
-  [\W\per\m\squared]%
-  [\W\per\m\squared]
-\newphysicsquantity{momentumflux}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\N\per\m\squared]
-\newphysicsquantity{electroncurrent}%
-  {\reciprocal\s}%
-  [\ensuremath{\mathrm{e}}\per\s]%
-  [\ensuremath{\mathrm{e}}\per\s]
-\newphysicsquantity{conventionalcurrent}%
-  {\A}%
-  [\A]%
-  [\C\per\s]
-\newphysicsquantity{magneticdipolemoment}%
-  {\square\m\usk\A}%
-  [\A\usk\square\m]%
-  [\J\per\T]
-\newphysicsquantity{currentdensity}%
-  {\reciprocalsquare\m\usk\A}%
-  [\A\per\square\m]%
-  [\C\usk\s\per\square\m]
-\newphysicsquantity{capacitance}%
-  {\reciprocalsquare\m\usk\reciprocal\kg\usk\quartic\s\usk\square\A}%
-  [\F]%
-  [\C\per\V] % also \C\squared\per\N\usk\m, \s\per\ohm
-\newphysicsquantity{inductance}%
-  {\square\m\usk\kg\usk\reciprocalsquare\s\usk\reciprocalsquare\A}%
-  [\henry]%
-  [\volt\usk\s\per\A] % also \square\m\usk\kg\per\C\squared, \Wb\per\A
-\newphysicsquantity{conductivity}%
-  {\reciprocalcubic\m\usk\reciprocal\kg\usk\cubic\s\usk\square\A}%
-  [(\A\per\square\m)\per(\V\per\m)]%
-  [\siemens\per\m]
-\newphysicsquantity{resistivity}%
-  {\cubic\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocalsquare\A}%
-  [\ohm\usk\m]%
-  [(\V\per\m)\per(\A\per\square\m)]
-\newphysicsquantity{resistance}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocalsquare\A}%
-  [\ohm]%
-  [\V\per\A]
-\newphysicsquantity{conductance}%
-  {\reciprocalsquare\m\usk\reciprocal\kg\usk\cubic\s\usk\square\A}%
-  [\A\per\V]%
-  [\siemens]
-\newphysicsquantity{magneticcharge}%
-  {\m\usk\A}%
-  [\m\usk\A]%
-  [\m\usk\A]
-\newcommand*{\vectordisplacement}[1]{\ensuremath{\displacement{\mivector{#1}}}} 
-\newcommand*{\vectorvelocity}[1]{\ensuremath{\velocity{\mivector{#1}}}}
-\newcommand*{\vectorvelocityc}[1]{\ensuremath{\velocityc{\mivector{#1}}}}
-\newcommand*{\vectoracceleration}[1]{\ensuremath{\acceleration{\mivector{#1}}}}
-\newcommand*{\vectormomentum}[1]{\ensuremath{\momentum{\mivector{#1}}}}
-\newcommand*{\vectorforce}[1]{\ensuremath{\force{\mivector{#1}}}}
-\newcommand*{\vectorgravitationalfield}[1]
-  {\ensuremath{\gravitationalfield{\mivector{#1}}}}
-\newcommand*{\vectorimpulse}[1]{\ensuremath{\impulse{\mivector{#1}}}}
-\newcommand*{\vectorangularvelocity}[1]{\ensuremath{\angularvelocity{\mivector{#1}}}}
-\newcommand*{\vectorangularacceleration}[1]
-  {\ensuremath{\angularacceleration{\mivector{#1}}}}
-\newcommand*{\vectorangularmomentum}[1]{\ensuremath{\angularmomentum{\mivector{#1}}}}
-\newcommand*{\vectorangularimpulse}[1]{\ensuremath{\angularimpulse{\mivector{#1}}}}
-\newcommand*{\vectortorque}[1]{\ensuremath{\torque{\mivector{#1}}}}
-\newcommand*{\vectorwavenumber}[1]{\ensuremath{\wavenumber{\mivector{#1}}}}
-\newcommand*{\vectorelectricfield}[1]{\ensuremath{\electricfield{\mivector{#1}}}}
-\newcommand*{\vectorelectricdipolemoment}[1]
-  {\ensuremath{\electricdipolemoment{\mivector{#1}}}}
-\newcommand*{\vectormagneticfield}[1]{\ensuremath{\magneticfield{\mivector{#1}}}}
-\newcommand*{\vectorcmagneticfield}[1]{\ensuremath{\cmagneticfield{\mivector{#1}}}}
-\newcommand*{\vectormagneticdipolemoment}[1]
-  {\ensuremath{\magneticdipolemoment{\mivector{#1}}}}
-\newcommand*{\vectorcurrentdensity}[1]{\ensuremath{\currentdensity{\mivector{#1}}}}
-  \newcommand*{\lv}{\ensuremath{\left\langle}}
-\newcommand*{\vectorenergyflux}[1]{\ensuremath{\energyflux{\mivector{#1}}}}
-\newcommand*{\vectormomentumflux}[1]{\ensuremath{\momentumflux{\mivector{#1}}}}
-\newcommand*{\poyntingvector}{\vectorenergyflux}
-\newcommand*{\rv}{\ensuremath{\right\rangle}}
-\ExplSyntaxOn % Written in LaTeX3
-\NewDocumentCommand{\magvectncomps}{ m O{} }
-  {%
-    \sum_of_squares:nn { #1 }{ #2 }
-  }%
-\cs_new:Npn \sum_of_squares:nn #1 #2
-  {%
-    \tl_if_empty:nTF { #2 }
-      {%
-        \clist_set:Nn \l_tmpa_clist { #1 }
-        \ensuremath{%
-          \sqrt{\left(\clist_use:Nnnn \l_tmpa_clist { \right)^2+\left( } { \right)^2+
-          \left( } { \right)^2+\left( } \right)^2 }
-        }%
+\ExplSyntaxOn
+\NewDocumentCommand{\checkquantity}{ m }%
+{%
+  % Works for both scalar and vector quantities (without vector in the name!).
+  \begin{center}
+    \begin{tabular}{%
+        >{\bfseries\small}
+        p{0.5\linewidth} 
+        p{0.1\linewidth} 
+        p{0.1\linewidth} 
+        p{0.1\linewidth}
       }%
-      {%
-        \clist_set:Nn \l_tmpa_clist { #1 }
-        \ensuremath{%
-          \sqrt{\left(\clist_use:Nnnn \l_tmpa_clist {\;{ #2 }\right)^2+\left(} {\;
-          { #2 }\right)^2+\left(} {\;{ #2 }\right)^2+\left(} \;{ #2 }\right)^2}
-        }%
+      name & & & \tabularnewline
+      \ttfamily\footnotesize{\token_to_str:c {#1}} & & & \tabularnewline
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth}
       }%
-  }%
+      base & derived & alternate \tabularnewline
+      \footnotesize{\( \use:c {#1onlybaseunits}      \)} & 
+      \footnotesize{\( \use:c {#1onlyderivedunits}   \)} &
+      \footnotesize{\( \use:c {#1onlyalternateunits} \)}
+    \end{tabular}
+  \end{center}
+}%
+\NewDocumentCommand{\checkconstant}{ m }%
+{%
+  \begin{center}
+    \begin{tabular}{%
+        >{\bfseries\small}
+        p{0.5\linewidth} 
+        p{0.1\linewidth} 
+        p{0.1\linewidth} 
+        p{0.1\linewidth}
+      }%
+      name & & & \tabularnewline
+      \ttfamily\footnotesize{\token_to_str:c {#1}} & & & \tabularnewline
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth}
+      }%
+      symbol & approximate & precise \tabularnewline
+      \footnotesize{\( \use:c {#1mathsymbol}       \)} &
+      \footnotesize{\( \use:c {#1approximatevalue} \)} &
+      \footnotesize{\( \use:c {#1precisevalue}     \)}
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth} 
+        >{\bfseries\small}p{0.25\linewidth}
+      }%
+      base & derived & alternate \tabularnewline
+      \footnotesize{\( \use:c {#1onlybaseunits}      \)} &
+      \footnotesize{\( \use:c {#1onlyderivedunits}   \)} &
+      \footnotesize{\( \use:c {#1onlyalternateunits} \)}
+    \end{tabular}
+  \end{center}
+}%
 \ExplSyntaxOff
+%    \end{macrocode}
 %
-\newcommand*{\zerovect}{\vect{0}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\vect}[1]{\ensuremath{\boldsymbol{#1}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\vect}[1]{\ensuremath{\vv{\mathrm{#1}}}}}
-   {\newcommand*{\vect}[1]{\ensuremath{\vv{#1}}}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magvect}[1]{\ensuremath{\absof{\vect{#1}}}}}
-  {\newcommand*{\magvect}[1]{\ensuremath{\magof{\vect{#1}}}}}
-\newcommand*{\magsquaredvect}[1]{\ensuremath{\magvect{#1}\squared}}
-\newcommand*{\magnvect}[2]{\ensuremath{\magvect{#1}^{#2}}}
-\newcommand*{\dmagvect}[1]{\ensuremath{\dx{\magvect{#1}}}}
-\newcommand*{\Dmagvect}[1]{\ensuremath{\Delta\!\magvect{#1}}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{\boldsymbol{#1}}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{\mathrm{#1}}}}}
-   {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{#1}}}}}
-\newcommand*{\direction}[1]{\ensuremath{\mivector{#1}}}
-\newcommand*{\vectordirection}{\direction}
-\newcommand*{\factorvect}[1]{\magvect{#1}\dirvect{#1}}
-\newcommand*{\componentalong}[2]{\ensuremath{\mathrm{comp}_{#1}{#2}}}
-\newcommand*{\expcomponentalong}[2]{\ensuremath{\frac{\vectdotvect{#2}{#1}}
-{\magof{#1}}}}
-\newcommand*{\ucomponentalong}[2]{\ensuremath{\vectdotvect{#2}{#1}}}
-\newcommand*{\projectiononto}[2]{\ensuremath{\mathrm{proj}_{#1}{#2}}}
-\newcommand*{\expprojectiononto}[2]{\ensuremath{%
-  \inparens{\frac{\vectdotvect{#2}{#1}}{\magof{#1}}}\frac{#1}{\magof{#1}}}}
-\newcommand*{\uprojectiononto}[2]{\ensuremath{%
-  \inparens{\vectdotvect{#2}{#1}}#1}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compvect}[2]{\ensuremath{\ssub{\mathrm{#1}}{\(#2\)}}}}
-  {\newcommand*{\compvect}[2]{\ensuremath{\ssub{#1}{\(#2\)}}}}
-\newcommand*{\scompsvect}[1]{\ensuremath{\lv%
-  \compvect{#1}{x},%
-  \compvect{#1}{y},%
-  \compvect{#1}{z}\rv}}
-\newcommand*{\scompsdirvect}[1]{\ensuremath{\lv%
-  \compvect{\widehat{#1}}{x},%
-  \compvect{\widehat{#1}}{y},%
-  \compvect{\widehat{#1}}{z}\rv}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compdirvect}[2]{\ensuremath{%
-    \ssub{\widehat{\mathrm{#1}}}{\(#2\)}}}}
-  {\newcommand*{\compdirvect}[2]{\ensuremath{%
-    \ssub{\widehat{#1}}{\(#2\)}}}}
-\newcommand*{\magvectscomps}[1]{\ensuremath{\sqrt{%
-  \compvect{#1}{x}\squared +%
-  \compvect{#1}{y}\squared +%
-  \compvect{#1}{z}\squared}}}
-\newcommand*{\dvect}[1]{\ensuremath{\mathrm{d}\vect{#1}}}
-\newcommand*{\Dvect}[1]{\ensuremath{\Delta\vect{#1}}}
-\newcommand*{\dirdvect}[1]{\ensuremath{\widehat{\dvect{#1}}}}
-\newcommand*{\dirDvect}[1]{\ensuremath{\widehat{\Dvect{#1}}}}
-\newcommand*{\ddirvect}[1]{\ensuremath{\mathrm{d}\dirvect{#1}}}
-\newcommand*{\ddirection}{\ddirvect}
-\newcommand*{\Ddirvect}[1]{\ensuremath{\Delta\dirvect{#1}}}
-\newcommand*{\Ddirection}{\Ddirvect}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdvect}[1]{\ensuremath{\absof{\dvect{#1}}}}
-   \newcommand*{\magDvect}[1]{\ensuremath{\absof{\Dvect{#1}}}}}
-  {\newcommand*{\magdvect}[1]{\ensuremath{\magof{\dvect{#1}}}}
-   \newcommand*{\magDvect}[1]{\ensuremath{\magof{\Dvect{#1}}}}}
-\newcommand*{\compdvect}[2]{\ensuremath{\mathrm{d}\compvect{#1}{#2}}}
-\newcommand*{\compDvect}[2]{\ensuremath{\Delta\compvect{#1}{#2}}}
-\newcommand*{\scompsdvect}[1]{\ensuremath{\lv%
-  \compdvect{#1}{x},%
-  \compdvect{#1}{y},%
-  \compdvect{#1}{z}\rv}}
-\newcommand*{\scompsDvect}[1]{\ensuremath{\lv%
-  \compDvect{#1}{x},%
-  \compDvect{#1}{y},%
-  \compDvect{#1}{z}\rv}}
-\newcommand*{\dervect}[2]{\ensuremath{\frac{\dvect{#1}}{\mathrm{d}{#2}}}}
-\newcommand*{\Dervect}[2]{\ensuremath{\frac{\Dvect{#1}}{\Delta{#2}}}}
-\newcommand*{\compdervect}[3]{\ensuremath{\dbyd{\compvect{#1}{#2}}{#3}}}
-\newcommand*{\compDervect}[3]{\ensuremath{\DbyD{\compvect{#1}{#2}}{#3}}}
-\newcommand*{\scompsdervect}[2]{\ensuremath{\lv%
-  \compdervect{#1}{x}{#2},%
-  \compdervect{#1}{y}{#2},%
-  \compdervect{#1}{z}{#2}\rv}}
-\newcommand*{\scompsDervect}[2]{\ensuremath{\lv%
-  \compDervect{#1}{x}{#2},%
-  \compDervect{#1}{y}{#2},%
-  \compDervect{#1}{z}{#2}\rv}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdervect}[2]{\ensuremath{\absof{\dervect{#1}{#2}}}}
-   \newcommand*{\magDervect}[2]{\ensuremath{\absof{\Dervect{#1}{#2}}}}}
-  {\newcommand*{\magdervect}[2]{\ensuremath{\magof{\dervect{#1}{#2}}}}
-   \newcommand*{\magDervect}[2]{\ensuremath{\magof{\Dervect{#1}{#2}}}}}
-\newcommand*{\dermagvect}[2]{\ensuremath{\dbyd{\magvect{#1}}{#2}}}
-\newcommand*{\Dermagvect}[2]{\ensuremath{\DbyD{\magvect{#1}}{#2}}}
-\newcommand*{\derdirvect}[2]{\ensuremath{\dbyd{\dirvect{#1}}{#2}}}
-\newcommand*{\derdirection}{\derdirvect}
-\newcommand*{\Derdirvect}[2]{\ensuremath{\DbyD{\dirvect{#1}}{#2}}}
-\newcommand*{\Derdirection}{\Derdirvect}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\vectsub}[2]{\ensuremath{\boldsymbol{#1}_{\text{\tiny{}#2}}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\vectsub}[2]{\ensuremath{\vv{\mathrm{#1}}_{\text{\tiny{#2}}}}}}
-   {\newcommand*{\vectsub}[2]{\ensuremath{\vv{#1}_{\text{\tiny{#2}}}}}}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compvectsub}[3]{\ensuremath{\ssub{\mathrm{#1}}{#2,\(#3\)}}}}
-  {\newcommand*{\compvectsub}[3]{\ensuremath{\ssub{#1}{#2,\(#3\)}}}}
-\newcommand*{\scompsvectsub}[2]{\ensuremath{\lv%
-  \compvectsub{#1}{#2}{x},%
-  \compvectsub{#1}{#2}{y},%
-  \compvectsub{#1}{#2}{z}\rv}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magvectsub}[2]{\ensuremath{\absof{\vectsub{#1}{#2}}}}}
-  {\newcommand*{\magvectsub}[2]{\ensuremath{\magof{\vectsub{#1}{#2}}}}}
-\newcommand*{\magsquaredvectsub}[2]{\ensuremath{\magvectsub{#1}{#2}\squared}}
-\newcommand*{\magnvectsub}[3]{\ensuremath{\magvectsub{#1}{#2}^{#3}}}
-\newcommand*{\magvectsubscomps}[2]{\ensuremath{\sqrt{%
-    \compvectsub{#1}{#2}{x}\squared +%
-    \compvectsub{#1}{#2}{y}\squared +%
-    \compvectsub{#1}{#2}{z}\squared}}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\dirvectsub}[2]{\ensuremath{\ssub{\widehat{\mathrm{#1}}}{#2}}}}
-  {\newcommand*{\dirvectsub}[2]{\ensuremath{\ssub{\widehat{#1}}{#2}}}}
-\newcommand*{\dvectsub}[2]{\ensuremath{\mathrm{d}\vectsub{#1}{#2}}}
-\newcommand*{\Dvectsub}[2]{\ensuremath{\Delta\vectsub{#1}{#2}}}
-\newcommand*{\compdvectsub}[3]{\ensuremath{\mathrm{d}\compvectsub{#1}{#2}{#3}}}
-\newcommand*{\compDvectsub}[3]{\ensuremath{\Delta\compvectsub{#1}{#2}{#3}}}
-\newcommand*{\scompsdvectsub}[2]{\ensuremath{\lv%
-  \compdvectsub{#1}{#2}{x},%
-  \compdvectsub{#1}{#2}{y},%
-  \compdvectsub{#1}{#2}{z}\rv}}
-\newcommand*{\scompsDvectsub}[2]{\ensuremath{\lv%
-  \compDvectsub{#1}{#2}{x},%
-  \compDvectsub{#1}{#2}{y},%
-  \compDvectsub{#1}{#2}{z}\rv}}
-\newcommand*{\dermagvectsub}[3]{\ensuremath{\dbyd{\magvectsub{#1}{#2}}{#3}}}
-\newcommand*{\Dermagvectsub}[3]{\ensuremath{\DbyD{\magvectsub{#1}{#2}}{#3}}}
-\newcommand*{\dervectsub}[3]{\ensuremath{\dbyd{\vectsub{#1}{#2}}{#3}}}
-\newcommand*{\Dervectsub}[3]{\ensuremath{\DbyD{\vectsub{#1}{#2}}{#3}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdervectsub}[3]{\ensuremath{\absof{\dervectsub{#1}{#2}{#3}}}}
-   \newcommand*{\magDervectsub}[3]{\ensuremath{\absof{\Dervectsub{#1}{#2}{#3}}}}}
-  {\newcommand*{\magdervectsub}[3]{\ensuremath{\magof{\dervectsub{#1}{#2}{#3}}}}
-   \newcommand*{\magDervectsub}[3]{\ensuremath{\magof{\Dervectsub{#1}{#2}{#3}}}}}
-\newcommand*{\compdervectsub}[4]{\ensuremath{\dbyd{\compvectsub{#1}{#2}{#3}}{#4}}}
-\newcommand*{\compDervectsub}[4]{\ensuremath{\DbyD{\compvectsub{#1}{#2}{#3}}{#4}}}
-\newcommand*{\scompsdervectsub}[3]{\ensuremath{\lv%
-  \compdervectsub{#1}{#2}{x}{#3},%
-  \compdervectsub{#1}{#2}{y}{#3},%
-  \compdervectsub{#1}{#2}{z}{#3}\rv}}
-\newcommand*{\scompsDervectsub}[3]{\ensuremath{\lv%
-  \compDervectsub{#1}{#2}{x}{#3},%
-  \compDervectsub{#1}{#2}{y}{#3},%
-  \compDervectsub{#1}{#2}{z}{#3}\rv}}
-\newcommand*{\vectdotvect}[2]{\ensuremath{{#1}\cdot{#2}}}
-\newcommand*{\vectDotvect}[2]{\ensuremath{{#1}\bullet{#2}}}
-\newcommand*{\vectdotsvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsvect{#2}}}
-\newcommand*{\vectDotsvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsvect{#2}}}
-\newcommand*{\vectdotevect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compvect{#2}{x}+%
-  \compvect{#1}{y}\compvect{#2}{y}+%
-  \compvect{#1}{z}\compvect{#2}{z}}}
-\newcommand*{\vectdotsdvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsdvect{#2}}}
-\newcommand*{\vectDotsdvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsdvect{#2}}}
-\newcommand*{\vectdotsDvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsDvect{#2}}}
-\newcommand*{\vectDotsDvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsDvect{#2}}}
-\newcommand*{\vectdotedvect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compdvect{#2}{x}+%
-  \compvect{#1}{y}\compdvect{#2}{y}+%
-  \compvect{#1}{z}\compdvect{#2}{z}}}
-\newcommand*{\vectdoteDvect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compDvect{#2}{x}+%
-  \compvect{#1}{y}\compDvect{#2}{y}+%
-  \compvect{#1}{z}\compDvect{#2}{z}}}
-\newcommand*{\vectsubdotsvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotevectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdotsdvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsdvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsdvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsdvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotsDvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsDvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsDvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsDvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotedvectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compdvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compdvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compdvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdoteDvectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compDvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compDvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compDvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdotsdvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsdvect{#3}}}
-\newcommand*{\vectsubDotsdvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsdvect{#3}}}
-\newcommand*{\vectsubdotsDvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsDvect{#3}}}
-\newcommand*{\vectsubDotsDvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsDvect{#3}}}
-\newcommand*{\vectsubdotedvect}[3]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compdvect{#3}{x}+%
-  \compvectsub{#1}{#2}{y}\compdvect{#3}{y}+%
-  \compvectsub{#1}{#2}{z}\compdvect{#3}{z}}}
-\newcommand*{\vectsubdoteDvect}[3]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compDvect{#3}{x}+%
-  \compvectsub{#1}{#2}{y}\compDvect{#3}{y}+%
-  \compvectsub{#1}{#2}{z}\compDvect{#3}{z}}}
-\newcommand*{\dervectdotsvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\cdot\scompsvect{#3}}}
-\newcommand*{\dervectDotsvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\bullet\scompsvect{#3}}}
-\newcommand*{\Dervectdotsvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\cdot\scompsvect{#3}}}
-\newcommand*{\DervectDotsvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\bullet\scompsvect{#3}}}
-\newcommand*{\dervectdotevect}[3]{\ensuremath{%
-  \compdervect{#1}{x}{#2}\compvect{#3}{x}+%
-  \compdervect{#1}{y}{#2}\compvect{#3}{y}+%
-  \compdervect{#1}{z}{#2}\compvect{#3}{z}}}
-\newcommand*{\Dervectdotevect}[3]{\ensuremath{%
-  \compDervect{#1}{x}{#2}\compvect{#3}{x}+%
-  \compDervect{#1}{y}{#2}\compvect{#3}{y}+%
-  \compDervect{#1}{z}{#2}\compvect{#3}{z}}}
-\newcommand*{\vectdotsdervect}[3]{\ensuremath{%
-  \scompsvect{#1}\cdot\scompsdervect{#2}{#3}}}
-\newcommand*{\vectDotsdervect}[3]{\ensuremath{%
-  \scompsvect{#1}\bullet\scompsdervect{#2}{#3}}}
-\newcommand*{\vectdotsDervect}[3]{\ensuremath{%
-  \scompsvect{#1}\cdot\scompsDervect{#2}{#3}}}
-\newcommand*{\vectDotsDervect}[3]{\ensuremath{%
-  \scompsvect{#1}\bullet\scompsDervect{#2}{#3}}}
-\newcommand*{\vectdotedervect}[3]{\ensuremath{%
-  \compvect{#1}{x}\compdervect{#2}{x}{#3}+%
-  \compvect{#1}{y}\compdervect{#2}{y}{#3}+%
-  \compvect{#1}{z}\compdervect{#2}{z}{#3}}}
-\newcommand*{\vectdoteDervect}[3]{\ensuremath{%
-  \compvect{#1}{x}\compDervect{#2}{x}{#3}+%
-  \compvect{#1}{y}\compDervect{#2}{y}{#3}+%
-  \compvect{#1}{z}\compDervect{#2}{z}{#3}}}
-\newcommand*{\dervectdotsdvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\cdot\scompsdvect{#3}}}
-\newcommand*{\dervectDotsdvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\bullet\scompsdvect{#3}}}
-\newcommand*{\DervectdotsDvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\cdot\scompsDvect{#3}}}
-\newcommand*{\DervectDotsDvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\bullet\scompsDvect{#3}}}
-\newcommand*{\dervectdotedvect}[3]{\ensuremath{%
-  \compdervect{#1}{x}{#2}\compdvect{#3}{x}+%
-  \compdervect{#1}{y}{#2}\compdvect{#3}{y}+%
-  \compdervect{#1}{z}{#2}\compdvect{#3}{z}}}
-\newcommand*{\DervectdoteDvect}[3]{\ensuremath{%
-  \compDervect{#1}{x}{#2}\compDvect{#3}{x}+%
-  \compDervect{#1}{y}{#2}\compDvect{#3}{y}+%
-  \compDervect{#1}{z}{#2}\compDvect{#3}{z}}}
-\newcommand*{\vectcrossvect}[2]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}}}
-\newcommand*{\ltriplecross}[3]{\ensuremath{%
-  \inparens{{#1}\boldsymbol{\times}{#2}}\boldsymbol{\times}{#3}}}
-\newcommand*{\rtriplecross}[3]{\ensuremath{{#1}\boldsymbol{\times}%
-  \inparens{{#2}\boldsymbol{\times}{#3}}}}
-\newcommand*{\ltriplescalar}[3]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}\cdot{#3}}}
-\newcommand*{\ltripleScalar}[3]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}\bullet{#3}}}
-\newcommand*{\rtriplescalar}[3]{\ensuremath{%
-  {#1}\cdot{#2}\boldsymbol{\times}{#3}}}
-\newcommand*{\rtripleScalar}[3]{\ensuremath{%
-  {#1}\bullet{#2}\boldsymbol{\times}{#3}}}
-\newcommand*{\ezero}{\ensuremath{\boldsymbol{e}_0}}
-\newcommand*{\eone}{\ensuremath{\boldsymbol{e}_1}}
-\newcommand*{\etwo}{\ensuremath{\boldsymbol{e}_2}}
-\newcommand*{\ethree}{\ensuremath{\boldsymbol{e}_3}}
-\newcommand*{\efour}{\ensuremath{\boldsymbol{e}_4}}
-\newcommand*{\ek}[1]{\ensuremath{\boldsymbol{e}_{#1}}}
-\newcommand*{\e}{\ek}
-\newcommand*{\uezero}{\ensuremath{\widehat{\boldsymbol{e}}_0}}
-\newcommand*{\ueone}{\ensuremath{\widehat{\boldsymbol{e}}_1}}
-\newcommand*{\uetwo}{\ensuremath{\widehat{\boldsymbol{e}}_2}}
-\newcommand*{\uethree}{\ensuremath{\widehat{\boldsymbol{e}}_3}}
-\newcommand*{\uefour}{\ensuremath{\widehat{\boldsymbol{e}}_4}}
-\newcommand*{\uek}[1]{\ensuremath{\widehat{\boldsymbol{e}}_{#1}}}
-\newcommand*{\ue}{\uek}
-\newcommand*{\ezerozero}{\ek{00}}
-\newcommand*{\ezeroone}{\ek{01}}
-\newcommand*{\ezerotwo}{\ek{02}}
-\newcommand*{\ezerothree}{\ek{03}}
-\newcommand*{\ezerofour}{\ek{04}}
-\newcommand*{\eoneone}{\ek{11}}
-\newcommand*{\eonetwo}{\ek{12}}
-\newcommand*{\eonethree}{\ek{13}}
-\newcommand*{\eonefour}{\ek{14}}
-\newcommand*{\etwoone}{\ek{21}}
-\newcommand*{\etwotwo}{\ek{22}}
-\newcommand*{\etwothree}{\ek{23}}
-\newcommand*{\etwofour}{\ek{24}}
-\newcommand*{\ethreeone}{\ek{31}}
-\newcommand*{\ethreetwo}{\ek{32}}
-\newcommand*{\ethreethree}{\ek{33}}
-\newcommand*{\ethreefour}{\ek{34}}
-\newcommand*{\efourone}{\ek{41}}
-\newcommand*{\efourtwo}{\ek{42}}
-\newcommand*{\efourthree}{\ek{43}}
-\newcommand*{\efourfour}{\ek{44}}
-\newcommand*{\euzero}{\ensuremath{\boldsymbol{e}^0}}
-\newcommand*{\euone}{\ensuremath{\boldsymbol{e}^1}}
-\newcommand*{\eutwo}{\ensuremath{\boldsymbol{e}^2}}
-\newcommand*{\euthree}{\ensuremath{\boldsymbol{e}^3}}
-\newcommand*{\eufour}{\ensuremath{\boldsymbol{e}^4}}
-\newcommand*{\euk}[1]{\ensuremath{\boldsymbol{e}^{#1}}}
-\newcommand*{\eu}{\euk}
-\newcommand*{\ueuzero}{\ensuremath{\widehat{\boldsymbol{e}}^0}}
-\newcommand*{\ueuone}{\ensuremath{\widehat{\boldsymbol{e}}^1}}
-\newcommand*{\ueutwo}{\ensuremath{\widehat{\boldsymbol{e}}^2}}
-\newcommand*{\ueuthree}{\ensuremath{\widehat{\boldsymbol{e}}^3}}
-\newcommand*{\ueufour}{\ensuremath{\widehat{\boldsymbol{e}}^4}}
-\newcommand*{\ueuk}[1]{\ensuremath{\widehat{\boldsymbol{e}}^{#1}}}
-\newcommand*{\ueu}{\ueuk}
-\newcommand*{\euzerozero}{\euk{00}}
-\newcommand*{\euzeroone}{\euk{01}}
-\newcommand*{\euzerotwo}{\euk{02}}
-\newcommand*{\euzerothree}{\euk{03}}
-\newcommand*{\euzerofour}{\euk{04}}
-\newcommand*{\euoneone}{\euk{11}}
-\newcommand*{\euonetwo}{\euk{12}}
-\newcommand*{\euonethree}{\euk{13}}
-\newcommand*{\euonefour}{\euk{14}}
-\newcommand*{\eutwoone}{\euk{21}}
-\newcommand*{\eutwotwo}{\euk{22}}
-\newcommand*{\eutwothree}{\euk{23}}
-\newcommand*{\eutwofour}{\euk{24}}
-\newcommand*{\euthreeone}{\euk{31}}
-\newcommand*{\euthreetwo}{\euk{32}}
-\newcommand*{\euthreethree}{\euk{33}}
-\newcommand*{\euthreefour}{\euk{34}}
-\newcommand*{\eufourone}{\euk{41}}
-\newcommand*{\eufourtwo}{\euk{42}}
-\newcommand*{\eufourthree}{\euk{43}}
-\newcommand*{\eufourfour}{\euk{44}}
-\newcommand*{\gzero}{\ensuremath{\boldsymbol{\gamma}_0}}
-\newcommand*{\gone}{\ensuremath{\boldsymbol{\gamma}_1}}
-\newcommand*{\gtwo}{\ensuremath{\boldsymbol{\gamma}_2}}
-\newcommand*{\gthree}{\ensuremath{\boldsymbol{\gamma}_3}}
-\newcommand*{\gfour}{\ensuremath{\boldsymbol{\gamma}_4}}
-\newcommand*{\gk}[1]{\ensuremath{\boldsymbol{\gamma}_{#1}}}
-\newcommand*{\g}{\gk}
-\newcommand*{\gzerozero}{\gk{00}}
-\newcommand*{\gzeroone}{\gk{01}}
-\newcommand*{\gzerotwo}{\gk{02}}
-\newcommand*{\gzerothree}{\gk{03}}
-\newcommand*{\gzerofour}{\gk{04}}
-\newcommand*{\goneone}{\gk{11}}
-\newcommand*{\gonetwo}{\gk{12}}
-\newcommand*{\gonethree}{\gk{13}}
-\newcommand*{\gonefour}{\gk{14}}
-\newcommand*{\gtwoone}{\gk{21}}
-\newcommand*{\gtwotwo}{\gk{22}}
-\newcommand*{\gtwothree}{\gk{23}}
-\newcommand*{\gtwofour}{\gk{24}}
-\newcommand*{\gthreeone}{\gk{31}}
-\newcommand*{\gthreetwo}{\gk{32}}
-\newcommand*{\gthreethree}{\gk{33}}
-\newcommand*{\gthreefour}{\gk{34}}
-\newcommand*{\gfourone}{\gk{41}}
-\newcommand*{\gfourtwo}{\gk{42}}
-\newcommand*{\gfourthree}{\gk{43}}
-\newcommand*{\gfourfour}{\gk{44}}
-\newcommand*{\guzero}{\ensuremath{\boldsymbol{\gamma}^0}}
-\newcommand*{\guone}{\ensuremath{\boldsymbol{\gamma}^1}}
-\newcommand*{\gutwo}{\ensuremath{\boldsymbol{\gamma}^2}}
-\newcommand*{\guthree}{\ensuremath{\boldsymbol{\gamma}^3}}
-\newcommand*{\gufour}{\ensuremath{\boldsymbol{\gamma}^4}}
-\newcommand*{\guk}[1]{\ensuremath{\boldsymbol{\gamma}^{#1}}}
-\newcommand*{\gu}{\guk}
-\newcommand*{\guzerozero}{\guk{00}}
-\newcommand*{\guzeroone}{\guk{01}}
-\newcommand*{\guzerotwo}{\guk{02}}
-\newcommand*{\guzerothree}{\guk{03}}
-\newcommand*{\guzerofour}{\guk{04}}
-\newcommand*{\guoneone}{\guk{11}}
-\newcommand*{\guonetwo}{\guk{12}}
-\newcommand*{\guonethree}{\guk{13}}
-\newcommand*{\guonefour}{\guk{14}}
-\newcommand*{\gutwoone}{\guk{21}}
-\newcommand*{\gutwotwo}{\guk{22}}
-\newcommand*{\gutwothree}{\guk{23}}
-\newcommand*{\gutwofour}{\guk{24}}
-\newcommand*{\guthreeone}{\guk{31}}
-\newcommand*{\guthreetwo}{\guk{32}}
-\newcommand*{\guthreethree}{\guk{33}}
-\newcommand*{\guthreefour}{\guk{34}}
-\newcommand*{\gufourone}{\guk{41}}
-\newcommand*{\gufourtwo}{\guk{42}}
-\newcommand*{\gufourthree}{\guk{43}}
-\newcommand*{\gufourfour}{\guk{44}}
-\ExplSyntaxOn % Vectors formated as in M\&I, written in LaTeX3
+% \refCom{mivector} is a workhorse command.
+% Orginal code provided by |@egreg|.\newline
+% See \url{https://tex.stackexchange.com/a/39054/218142}.
+% 
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
 \NewDocumentCommand{\mivector}{ O{,} m o }%
  {%
-   \mi_vector:nn { #1 } { #2 }
-   \IfValueT{#3}{\;{#3}}
+   \mi_vector:nn { #1 } { #2 }%
+   \IfValueT{#3}{\,{#3}}%
  }%
 \seq_new:N \l__mi_list_seq
 \cs_new_protected:Npn \mi_vector:nn #1 #2
@@ -10823,1355 +2882,8 @@
   }%
 }%
 \ExplSyntaxOff
-\ExplSyntaxOn % Column and row vectors, written in LaTeX3
-\seq_new:N \l__vector_arg_seq
-\cs_new_protected:Npn \vector_main:nnnn #1 #2 #3 #4
- {%
-  \seq_set_split:Nnn \l__vector_arg_seq { #3 } { #4 }
-  \begin{#1matrix}
-    \seq_use:Nnnn \l__vector_arg_seq { #2 } { #2 } { #2 }
-  \end{#1matrix}
- }%
-\NewDocumentCommand{\rowvector}{ O{,} m }
- {%
-  \ensuremath{
-  \vector_main:nnnn { p } { \,\, } { #1 } { #2 }
-  }%
- }%
-\NewDocumentCommand{\colvector}{ O{,} m }
- {%
-  \ensuremath{
-  \vector_main:nnnn { p } { \\ } { #1 } { #2 }
-  }%
- }%
-\ExplSyntaxOff
-\newcommandx{\scompscvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \colvector{\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-  {%
-    \colvector{\msub{#2}{0},\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsCvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \colvector{\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-  {%
-    \colvector{\msup{#2}{0},\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsrvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \rowvector[,]{\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-  {%
-    \rowvector[,]{\msub{#2}{0},\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsRvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \rowvector[,]{\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-  {%
-    \rowvector[,]{\msup{#2}{0},\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-}%
-\newcommand*{\anglebetween}[2]{\ensuremath{\theta_{\vect{#1},\vect{#2}}}}
-\newcommand*{\bra}[1]{\ensuremath{\left\langle{#1}\right\lvert}}
-\newcommand*{\ket}[1]{\ensuremath{\left\lvert{#1}\right\rangle}}
-\newcommand*{\bracket}[2]{\ensuremath{\left\langle{#1}\!\!\right.%
-  \left\lvert{#2}\right\rangle}}
-\newphysicsconstant{oofpez}%
-  {\ensuremath{\frac{1}{\phantom{_o}4\pi\epsilon_0}}}%
-  {\mi at p{9}{8.9875517873681764}\timestento{9}}%
-  {\m\cubed\usk\kg\usk\reciprocalquartic\s\usk\A\reciprocalsquared}%
-  [\newton\usk\m\squared\per\coulomb\squared]%
-  [\m\per\farad]
-\newphysicsconstant{oofpezcs}%
-  {\ensuremath{\frac{1}{\phantom{_o}4\pi\epsilon_0 c^2\phantom{_o}}}}%
-  {\tento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\N\usk\s\squared\per\C\squared]%
-  [\T\usk\m\squared]
-\newphysicsconstant{vacuumpermittivity}%
-  {\ensuremath{\epsilon_0}}%
-  {\mi at p{9.0}{8.854187817}\timestento{-12}}%
-  {\m\reciprocalcubed\usk\reciprocal\kg\usk\s\quarted\usk\A\squared}%
-  [\C\squared\per\N\usk\m\squared]%
-  [\F\per\m]
-\newphysicsconstant{mzofp}%
-  {\ensuremath{\frac{\phantom{_oo}\mu_0\phantom{_o}}{4\pi}}}%
-  {\tento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\tesla\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsconstant{vacuumpermeability}%
-  {\ensuremath{\mu_0}}%
-  {4\pi\timestento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\T\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsconstant{boltzmann}%
-  {\ensuremath{k_B}}%
-  {\mi at p{1.4}{1.38064852}\timestento{-23}}%
-  {\m\squared\usk\kg\usk\reciprocalsquare\s\usk\reciprocal\K}%
-  [\J\per\K]%
-  [\J\per\K]
-\newphysicsconstant{boltzmannineV}%
-  {\ensuremath{k_B}}%
-  {\mi at p{8.6}{8.6173303}\timestento{-5}}%
-  {\eV\usk\reciprocal\K}%
-  [\eV\per\K]%
-  [\eV\per\K]
-\newphysicsconstant{stefanboltzmann}%
-  {\ensuremath{\sigma}}%
-  {\mi at p{5.7}{5.670367}\timestento{-8}}%
-  {\kg\usk\s\reciprocalcubed\usk\K\reciprocalquarted}%
-  [\W\per\m\squared\usk\K\quarted]%
-  [\W\per\m\squared\usk\K\quarted]
-\newphysicsconstant{planck}%
-  {\ensuremath{h}}%
-  {\mi at p{6.6}{6.626070040}\timestento{-34}}%
-  {\m\squared\usk\kg\usk\reciprocal\s}%
-  [\J\usk\s]%
-  [\J\usk\s]
-\newphysicsconstant{planckineV}%
-  {\ensuremath{h}}%
-  {\mi at p{4.1}{4.135667662}\timestento{-15}}%
-  {\eV\usk\s}%
-  [\eV\usk\s]%
-  [\eV\usk\s]
-\newphysicsconstant{planckbar}%
-  {\ensuremath{\hslash}}%
-  {\mi at p{1.1}{1.054571800}\timestento{-34}}%
-  {\m\squared\usk\kg\usk\reciprocal\s}%
-  [\J\usk\s]%
-  [\J\usk\s]
-\newphysicsconstant{planckbarineV}%
-  {\ensuremath{\hslash}}%
-  {\mi at p{6.6}{6.582119514}\timestento{-16}}%
-  {\eV\usk\s}%
-  [\eV\usk\s]%
-  [\eV\usk\s]
-\newphysicsconstant{planckc}%
-  {\ensuremath{hc}}%
-  {\mi at p{2.0}{1.98644568}\timestento{-25}}%
-  {\m\cubed\usk\kg\usk\reciprocalsquare\s}%
-  [\J\usk\m]%
-  [\J\usk\m]
-\newphysicsconstant{planckcineV}%
-  {\ensuremath{hc}}%
-  {\mi at p{1240}{1.23984193}\timestento{3}}%
-  {\eV\usk\text{n}\m}%
-  [\eV\usk\text{n}\m]%
-  [\eV\usk\text{n}\m]
-\newphysicsconstant{rydberg}%
-  {\ensuremath{\msub{R}{\infty}}}%
-  {\mi at p{1.1}{1.0973731568508}\timestento{7}}%
-  {\reciprocal\m}%
-  [\reciprocal\m]%
-  [\reciprocal\m]
-\newphysicsconstant{bohrradius}%
-  {\ensuremath{a_0}}%
-  {\mi at p{5.3}{5.2917721067}\timestento{-11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{finestructure}%
-  {\ensuremath{\alpha}}%
-  {\mi at p{\frac{1}{137}}{7.2973525664\timestento{-3}}}%
-  {}%
-  []%
-  []
-\newphysicsconstant{avogadro}%
-  {\ensuremath{N_A}}%
-  {\mi at p{6.0}{6.022140857}\timestento{23}}%
-  {\reciprocal\mol}%
-  [\reciprocal\mol]%
-  [\reciprocal\mol]
-\newphysicsconstant{universalgrav}%
-  {\ensuremath{G}}%
-  {\mi at p{6.7}{6.67408}\timestento{-11}}%
-  {\m\cubed\usk\reciprocal\kg\usk\s\reciprocalsquared}%
-  [\N\usk\m\squared\per\kg\squared]%
-  [\J\usk\m\per\kg\squared]
-\newphysicsconstant{surfacegravfield}%
-  {\ensuremath{g}}%
-  {\mi at p{9.8}{9.807}}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\N\per\kg]
-\newphysicsconstant{clight}%
-  {\ensuremath{c}}%
-  {\mi at p{3}{2.99792458}\timestento{8}}%
-  {\m\usk\reciprocal\s}%
-  [\m\per\s]%
-  [\m\per\s]
-\newphysicsconstant{clightinfeet}%
-  {\ensuremath{c}}%
-  {\mi at p{1}{0.983571}}%
-  {\text{ft}\usk\reciprocal{\text{n}\s}}%
-  [\text{ft}\per\text{n}\s]%
-  [\text{ft}\per\mathrm{n}\s]
-\newphysicsconstant{Ratom}%
-  {\ensuremath{r_{\text{atom}}}}%
-  {\tento{-10}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{Mproton}%
-  {\ensuremath{m_p}}%
-  {\mi at p{1.7}{1.672621898}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Mneutron}%
-  {\ensuremath{m_n}}%
-  {\mi at p{1.7}{1.674927471}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Mhydrogen}%
-  {\ensuremath{m_H}}%
-  {\mi at p{1.7}{1.6737236}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Melectron}%
-  {\ensuremath{m_e}}%
-  {\mi at p{9.1}{9.10938356}\timestento{-31}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{echarge}%
-  {\ensuremath{e}}%
-  {\mi at p{1.6}{1.6021766208}\timestento{-19}}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{Qelectron}%
-  {\ensuremath{Q_e}}%
-  {-\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{qelectron}%
-  {\ensuremath{q_e}}%
-  {-\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{Qproton}%
-  {\ensuremath{Q_p}}%
-  {+\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{qproton}%
-  {\ensuremath{q_p}}%
-  {+\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{MEarth}%
-  {\ensuremath{M_{\text{Earth}}}}%
-  {\mi at p{6.0}{5.97237}\timestento{24}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{MMoon}%
-  {\ensuremath{M_{\text{Moon}}}}%
-  {\mi at p{7.3}{7.342}\timestento{22}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{MSun}%
-  {\ensuremath{M_{\text{Sun}}}}%
-  {\mi at p{2.0}{1.98855}\timestento{30}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{REarth}%
-  {\ensuremath{R_{\text{Earth}}}}%
-  {\mi at p{6.4}{6.371}\timestento{6}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{RMoon}%
-  {\ensuremath{R_{\text{Moon}}}}%
-  {\mi at p{1.7}{1.7371}\timestento{6}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{RSun}%
-  {\ensuremath{R_{\text{Sun}}}}%
-  {\mi at p{7.0}{6.957}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{ESdist}%
-  {\magvectsub{r}{ES}}%
-  {\mi at p{1.5}{1.496}\timestento{11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{SEdist}%
-  {\magvectsub{r}{SE}}%
-  {\mi at p{1.5}{1.496}\timestento{11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{EMdist}%
-  {\magvectsub{r}{EM}}%
-  {\mi at p{3.8}{3.81550}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{MEdist}%
-  {\magvectsub{r}{ME}}%
-  {\mi at p{3.8}{3.81550}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{LSun}%
-  {\ensuremath{L_{\text{Sun}}}}%
-  {\mi at p{3.8}{3.8460}\timestento{26}}%
-  {\m\squared\usk\kg\usk\s\reciprocalcubed}%
-  [\W]
-  [\J\per\s]
-\newphysicsconstant{TSun}%
-  {\ensuremath{T_{\text{Sun}}}}%
-  {\mi at p{5800}{5778}}%
-  {\K}%
-  [\K]%
-  [\K]
-\newphysicsconstant{MagSun}%
-  {\ensuremath{M_{\text{Sun}}}}%
-  {+4.83}%
-  {}%
-  []%
-  []
-\newphysicsconstant{magSun}%
-  {\ensuremath{m_{\text{Sun}}}}%
-  {-26.74}%
-  {}%
-  []%
-  []
-\newcommand*{\coulombconstant}{\oofpez}
-\newcommand*{\altcoulombconstant}{\oofpezcs}
-\newcommand*{\biotsavartconstant}{\mzofp}
-\newcommand*{\boltzmannconstant}{\boltzmann}
-\newcommand*{\stefanboltzmannconstant}{\stefanboltzmann}
-\newcommand*{\planckconstant}{\planck}
-\newcommand*{\reducedplanckconstant}{\planckbar}
-\newcommand*{\planckconstanttimesc}{\planckc}
-\newcommand*{\rydbergconstant}{\rydberg}
-\newcommand*{\finestructureconstant}{\finestructure}
-\newcommand*{\avogadroconstant}{\avogadro}
-\newcommand*{\universalgravitationalconstant}{\universalgrav}
-\newcommand*{\earthssurfacegravitationalfield}{\surfacegravfield}
-\newcommand*{\photonconstant}{\clight}
-\newcommand*{\elementarycharge}{\echarge}
-\newcommand*{\EarthSundistance}{\ESdist}
-\newcommand*{\SunEarthdistance}{\SEdist}
-\newcommand*{\EarthMoondistance}{\ESdist}
-\newcommand*{\MoonEarthdistance}{\SEdist}
-\newcommand*{\Lstar}[1][\(\star\)]{\ensuremath{L_{\text{#1}}}\xspace}
-\newcommand*{\Lsolar}{\ensuremath{\Lstar[\(\odot\)]}\xspace}
-\newcommand*{\Tstar}[1][\(\star\)]{\ensuremath{T_{\text{#1}}}\xspace}
-\newcommand*{\Tsolar}{\ensuremath{\Tstar[\(\odot\)]}\xspace}
-\newcommand*{\Rstar}[1][\(\star\)]{\ensuremath{R_{\text{#1}}}\xspace}
-\newcommand*{\Rsolar}{\ensuremath{\Rstar[\(\odot\)]}\xspace}
-\newcommand*{\Mstar}[1][\(\star\)]{\ensuremath{M_{\text{#1}}}\xspace}
-\newcommand*{\Msolar}{\ensuremath{\Mstar[\(\odot\)]}\xspace}
-\newcommand*{\Fstar}[1][\(\star\)]{\ensuremath{F_{\text{#1}}}\xspace}
-\newcommand*{\fstar}[1][\(\star\)]{\ensuremath{f_{\text{#1}}}\xspace}
-\newcommand*{\Fsolar}{\ensuremath{\Fstar[\(\odot\)]}\xspace}
-\newcommand*{\fsolar}{\ensuremath{\fstar[\(\odot\)]}\xspace}
-\newcommand*{\Magstar}[1][\(\star\)]{\ensuremath{M_{\text{#1}}}\xspace}
-\newcommand*{\magstar}[1][\(\star\)]{\ensuremath{m_{\text{#1}}}\xspace}
-\newcommand*{\Magsolar}{\ensuremath{\Magstar[\(\odot\)]}\xspace}
-\newcommand*{\magsolar}{\ensuremath{\magstar[\(\odot\)]}\xspace}
-\newcommand*{\Dstar}[1][\(\star\)]{\ensuremath{D_{\text{#1}}}\xspace}
-\newcommand*{\dstar}[1][\(\star\)]{\ensuremath{d_{\text{#1}}}\xspace}
-\newcommand*{\Dsolar}{\ensuremath{\Dstar[\(\odot\)]}\xspace}
-\newcommand*{\dsolar}{\ensuremath{\dstar[\(\odot\)]}\xspace}
-\newcommand*{\onehalf}{\ensuremath{\frac{1}{2}}\xspace}
-\newcommand*{\onethird}{\ensuremath{\frac{1}{3}}\xspace}
-\newcommand*{\onefourth}{\ensuremath{\frac{1}{4}}\xspace}
-\newcommand*{\onefifth}{\ensuremath{\frac{1}{5}}\xspace}
-\newcommand*{\onesixth}{\ensuremath{\frac{1}{6}}\xspace}
-\newcommand*{\oneseventh}{\ensuremath{\frac{1}{7}}\xspace}
-\newcommand*{\oneeighth}{\ensuremath{\frac{1}{8}}\xspace}
-\newcommand*{\oneninth}{\ensuremath{\frac{1}{9}}\xspace}
-\newcommand*{\onetenth}{\ensuremath{\frac{1}{10}}\xspace}
-\newcommand*{\twooneths}{\ensuremath{\frac{2}{1}}\xspace}
-\newcommand*{\twohalves}{\ensuremath{\frac{2}{2}}\xspace}
-\newcommand*{\twothirds}{\ensuremath{\frac{2}{3}}\xspace}
-\newcommand*{\twofourths}{\ensuremath{\frac{2}{4}}\xspace}
-\newcommand*{\twofifths}{\ensuremath{\frac{2}{5}}\xspace}
-\newcommand*{\twosixths}{\ensuremath{\frac{2}{6}}\xspace}
-\newcommand*{\twosevenths}{\ensuremath{\frac{2}{7}}\xspace}
-\newcommand*{\twoeighths}{\ensuremath{\frac{2}{8}}\xspace}
-\newcommand*{\twoninths}{\ensuremath{\frac{2}{9}}\xspace}
-\newcommand*{\twotenths}{\ensuremath{\frac{2}{10}}\xspace}
-\newcommand*{\threeoneths}{\ensuremath{\frac{3}{1}}\xspace}
-\newcommand*{\threehalves}{\ensuremath{\frac{3}{2}}\xspace}
-\newcommand*{\threethirds}{\ensuremath{\frac{3}{3}}\xspace}
-\newcommand*{\threefourths}{\ensuremath{\frac{3}{4}}\xspace}
-\newcommand*{\threefifths}{\ensuremath{\frac{3}{5}}\xspace}
-\newcommand*{\threesixths}{\ensuremath{\frac{3}{6}}\xspace}
-\newcommand*{\threesevenths}{\ensuremath{\frac{3}{7}}\xspace}
-\newcommand*{\threeeighths}{\ensuremath{\frac{3}{8}}\xspace}
-\newcommand*{\threeninths}{\ensuremath{\frac{3}{9}}\xspace}
-\newcommand*{\threetenths}{\ensuremath{\frac{3}{10}}\xspace}
-\newcommand*{\fouroneths}{\ensuremath{\frac{4}{1}}\xspace}
-\newcommand*{\fourhalves}{\ensuremath{\frac{4}{2}}\xspace}
-\newcommand*{\fourthirds}{\ensuremath{\frac{4}{3}}\xspace}
-\newcommand*{\fourfourths}{\ensuremath{\frac{4}{4}}\xspace}
-\newcommand*{\fourfifths}{\ensuremath{\frac{4}{5}}\xspace}
-\newcommand*{\foursixths}{\ensuremath{\frac{4}{6}}\xspace}
-\newcommand*{\foursevenths}{\ensuremath{\frac{4}{7}}\xspace}
-\newcommand*{\foureighths}{\ensuremath{\frac{4}{8}}\xspace}
-\newcommand*{\fourninths}{\ensuremath{\frac{4}{9}}\xspace}
-\newcommand*{\fourtenths}{\ensuremath{\frac{4}{10}}\xspace}
-\newcommand*{\sumoverall}[1]{\ensuremath{\displaystyle
-  \sum_{\substack{\text{\tiny{all }}\text{\tiny{{#1}}}}}}}
-\newcommand*{\dx}[1]{\ensuremath{\,\mathrm{d}{#1}}}
-\newcommand*{\dslashx}[1]{\ensuremath{\,\mathchar'26\mkern-12mu \mathrm{d}{#1}}}
-\newcommandx{\evaluatedfromto}[2][2,usedefault]{\ensuremath{%
-  \Bigg.\Bigg\rvert_{#1}^{#2}}}
-\newcommand*{\evaluatedat}{\evaluatedfromto}
-\newcommandx{\integral}[4][1,2,usedefault]{\ensuremath{%
-  \int_{\ifthenelse{\equal{#1}{}}{}{#4=#1}}^{\ifthenelse{%
-    \equal{#2}{}}{}{#4=#2}}}{#3}\dx{#4}}
-\newcommand*{\opensurfaceintegral}[2]{\ensuremath{%
-  \iint\nolimits_{#1}\vectdotvect{#2}{\dirvect{n}}\dx{A}}}
-\newcommand*{\closedsurfaceintegral}[2]{\ensuremath{%
-  \varoiint\nolimits_{#1}\vectdotvect{#2}{\dirvect{n}}\dx{A}}}
-\newcommand*{\openlineintegral}[2]{\ensuremath{%
-  \int\nolimits_{#1}\vectdotvect{#2}{\dirvect{t}}\dx{\ell}}}
-\newcommand*{\closedlineintegral}[2]{\ensuremath{%
-  \oint\nolimits_{#1}\vectdotvect{#2}{\dirvect{t}}\dx{\ell}}}
-\newcommand*{\volumeintegral}[2]{\ensuremath{%
-  \iiint\nolimits_{#1}{#2}\dx{V}}}
-\newcommandx{\dbydt}[1][1]{\ensuremath{%
-  \frac{\mathrm{d}{#1}}{\mathrm{d}t}}}
-\newcommandx{\DbyDt}[1][1]{\ensuremath{%
-  \frac{\Delta{#1}}{\Delta t}}}
-\newcommandx{\ddbydt}[1][1]{\ensuremath{%
-  \frac{\mathrm{d}^{2}{#1}}{\mathrm{d}t^{2}}}}
-\newcommandx{\DDbyDt}[1][1]{\ensuremath{%
-  \frac{\Delta^{2}{#1}}{\Delta t^{2}}}}
-\newcommandx{\pbypt}[1][1]{\ensuremath{%
-  \frac{\partial{#1}}{\partial t}}}
-\newcommandx{\ppbypt}[1][1]{\ensuremath{%
-  \frac{\partial^{2}{#1}}{\partial t^{2}}}}
-\newcommand*{\dbyd}[2]{\ensuremath{\frac{%
-  \mathrm{d}{#1}}{\mathrm{d}{#2}}}}
-\newcommand*{\DbyD}[2]{\ensuremath{\frac{%
-  \Delta{#1}}{\Delta{#2}}}}
-\newcommand*{\ddbyd}[2]{\ensuremath{%
-  \frac{\mathrm{d}^{2}{#1}}{\mathrm{d}{#2}^{2}}}}
-\newcommand*{\DDbyD}[2]{\ensuremath{%
-  \frac{\Delta^{2}{#1}}{\Delta{#2}^{2}}}}
-\newcommand*{\pbyp}[2]{\ensuremath{%
-  \frac{\partial{#1}}{\partial{#2}}}}
-\newcommand*{\ppbyp}[2]{\ensuremath{%
-  \frac{\partial^{2}{#1}}{\partial{#2}^{2}}}}
-\newcommandx{\seriesfofx}[1][1=x,usedefault]{\ensuremath{%
-  f({#1}) \approx f(a) + \frac{f^\prime (a)}{1!}({#1}-a) + 
-  \frac{f^{\prime\prime}(a)}{2!}({#1}-a)^2 + 
-  \frac{f^{\prime\prime\prime}(a)}{3!}({#1}-a)^3 + \ldots}\xspace}
-\newcommandx{\seriesexpx}[1][1=x,usedefault]{\ensuremath{%
-  e^{#1} \approx 1 + {#1} + \frac{{#1}^2}{2!} + \frac{{#1}^3}{3!} + \ldots}\xspace}
-\newcommandx{\seriessinx}[1][1=x,usedefault]{\ensuremath{%
-  \sin {#1} \approx {#1} - \frac{{#1}^3}{3!} + \frac{{#1}^5}{5!} - \ldots}\xspace}
-\newcommandx{\seriescosx}[1][1=x,usedefault]{\ensuremath{%
-  \cos {#1} \approx 1 - \frac{{#1}^2}{2!} + \frac{{#1}^4}{4!} - \ldots}\xspace}
-\newcommandx{\seriestanx}[1][1=x,usedefault]{\ensuremath{%
-  \tan {#1} \approx {#1} + \frac{{#1}^3}{3} + \frac{2{#1}^5}{15} + \ldots}\xspace}
-\newcommandx{\seriesatox}[1][1=x,usedefault]{\ensuremath{%
-  a^{#1} \approx 1 + {#1} \ln{a} + \frac{({#1} \ln a)^2}{2!} + 
-  \frac{({#1} \ln a)^3}{3!} + \ldots}\xspace}
-\newcommandx{\serieslnoneplusx}[1][1=x,usedefault]{\ensuremath{%
-  \ln(1 \pm {#1}) \approx \pm\; {#1} - \frac{{#1}^2}{2} \pm \frac{{#1}^3}{3} - %
-    \frac{{#1}^4}{4} \pm \ldots}\xspace}
-\newcommandx{\binomialseries}[1][1=x,usedefault]{\ensuremath{%
-  (1 + {#1})^n \approx 1 + n{#1} + \frac{n(n-1)}{2!}{#1}^2 + \ldots}\xspace}
-\newcommand*{\gradient}{\ensuremath{\boldsymbol{\nabla}}}
-\newcommand*{\divergence}{\ensuremath{\boldsymbol{\nabla}\bullet}}
-\newcommand*{\curl}{\ensuremath{\boldsymbol{\nabla\times}}}
-\newcommand{\taigrad}{\ensuremath{\nabla}}%
-\newcommand{\taisvec}{\ensuremath{%
-  \stackinset{c}{0.07ex}{c}{0.1ex}{\tiny$-$}{$\nabla$}}
-}%
-\newcommand{\taidivg}{\ensuremath{%
-  \stackinset{c}{0.07ex}{c}{0.1ex}{$\cdot$}{$\nabla$}}
-}%
-\newcommand{\taicurl}{\ensuremath{%
-  \stackinset{c}{0.04ex}{c}{0.32ex}{\tiny$\times$}{$\nabla$}}
-}%
-\newcommand*{\laplacian}{\ensuremath{\boldsymbol{\nabla}^2}}
-\newcommand*{\dalembertian}{\ensuremath{\boldsymbol{\Box}}}
-\newcommand*{\diracdelta}[1]{\ensuremath{\delta}(#1)}
-\newcommand*{\orderof}[1]{\ensuremath{\mathcal{O}(#1)}}
-\DeclareMathOperator{\asin}{\sin^{-1}}
-\DeclareMathOperator{\acos}{\cos^{-1}}
-\DeclareMathOperator{\atan}{\tan^{-1}}
-\DeclareMathOperator{\asec}{\sec^{-1}}
-\DeclareMathOperator{\acsc}{\csc^{-1}}
-\DeclareMathOperator{\acot}{\cot^{-1}}
-\DeclareMathOperator{\sech}{sech}
-\DeclareMathOperator{\csch}{csch}
-\DeclareMathOperator{\asinh}{\sinh^{-1}}
-\DeclareMathOperator{\acosh}{\cosh^{-1}}
-\DeclareMathOperator{\atanh}{\tanh^{-1}}
-\DeclareMathOperator{\asech}{\sech^{-1}}
-\DeclareMathOperator{\acsch}{\csch^{-1}}
-\DeclareMathOperator{\acoth}{\coth^{-1}}
-\DeclareMathOperator{\sgn}{sgn}
-\DeclareMathOperator{\dex}{dex}
-\newcommand*{\logb}[1][\relax]{\ensuremath{\log_{#1}}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\cB}{\ensuremath{\boldsymbol{c\mskip -3.00mu B}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\cB}{\ensuremath{\textsf{c}\mskip -3.00mu\mathrm{B}}}}
-   {\newcommand*{\cB}{\ensuremath{c\mskip -3.00mu B}}}}
-\newcommand*{\newpi}{\ensuremath{\pi\mskip -7.8mu\pi}}
-\newcommand*{\scripty}[1]{\ensuremath{\mathcalligra{#1}}}
-\newcommand*{\Lagr}{\ensuremath{\mathcal{L}}}
-\newcommandx{\flux}[1][1]{\ensuremath{\ssub{\Phi}{#1}}}
-\newcommandx{\circulation}[1][1]{\ensuremath{\ssub{\Gamma}{#1}}}
-\newcommand*{\absof}[1]{\ensuremath{%
-  \left\lvert{\ifblank{#1}{\:\_\:}{#1}}\right\rvert}}
-\newcommand*{\inparens}[1]{\ensuremath{%
-  \left({\ifblank{#1}{\:\_\:}{#1}}\right)}}
-\newcommand*{\magof}[1]{\ensuremath{%
-  \left\lVert{\ifblank{#1}{\:\_\:}{#1}}\right\rVert}}
-\newcommand*{\dimsof}[1]{\ensuremath{%
-  \left[{\ifblank{#1}{\:\_\:}{#1}}\right]}}
-\newcommand*{\unitsof}[1]{\ensuremath{%
-  \left[{\ifblank{#1}{\:\_\:}{#1}}\right]_u}}
-\newcommand*{\changein}[1]{\ensuremath{\delta{#1}}}
-\newcommand*{\Changein}[1]{\ensuremath{\Delta{#1}}}
-\newcommandx{\timestento}[2][2=\!\!,usedefault]{\ensuremath{%
-  \ifthenelse{\equal{#2}{}}
-    {\unit{\;\times\;10^{#1}}{}}
-    {\unit{\;\times\;10^{#1}}{#2}}}}
-\newcommand*{\xtento}{\timestento}
-\newcommandx{\tento}[2][2=\!\!,usedefault]{\ensuremath{%
-  \ifthenelse{\equal{#2}{}}
-    {\unit{10^{#1}}{}}
-    {\unit{10^{#1}}{#2}}}}
-\newcommand*{\ee}[2]{\texttt{{#1}e{#2}}}
-\newcommand*{\EE}[2]{\texttt{{#1}E{#2}}}
-\newcommand*{\dms}[3]{\ensuremath{%
-  \indegrees{#1}\inarcminutes{#2}\inarcseconds{#3}}}
-\newcommand*{\hms}[3]{\ensuremath{%
-  {#1}^{\hour}{#2}^{\mathrm{m}}{#3}^{\s}}}
-\newcommand*{\clockreading}{\hms}
-\newcommand*{\latitude}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\latitudeN}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{N}}}
-\newcommand*{\latitudeS}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{S}}}
-\newcommand*{\longitude}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\longitudeE}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{E}}}
-\newcommand*{\longitudeW}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{W}}}
-\newcommand*{\ssub}[2]{\ensuremath{#1_{\text{#2}}}}
-\newcommand*{\ssup}[2]{\ensuremath{#1^{\text{#2}}}}
-\newcommand*{\ssud}[3]{\ensuremath{#1^{\text{#2}}_{\text{#3}}}}
-\newcommand*{\msub}[2]{\ensuremath{#1_{#2}}}
-\newcommand*{\msup}[2]{\ensuremath{#1^{#2}}}
-\newcommand*{\msud}[3]{\ensuremath{#1^{#2}_{#3}}}
-\newcommand*{\levicivita}[1]{\ensuremath{%
-  \varepsilon_{\scriptscriptstyle{#1}}}}
-\newcommand*{\kronecker}[1]{\ensuremath{%
-  \delta_{\scriptscriptstyle{#1}}}}
-\newcommand*{\xaxis}{\ensuremath{x\text{-axis}}\xspace}
-\newcommand*{\yaxis}{\ensuremath{y\text{-axis}}\xspace}
-\newcommand*{\zaxis}{\ensuremath{z\text{-axis}}\xspace}
-\newcommand*{\naxis}[1]{\ensuremath{{#1}\text{-axis}}\xspace}
-\newcommand*{\axis}{\ensuremath{\text{-axis}}\xspace}
-\newcommand*{\xyplane}{\ensuremath{xy\text{-plane}}\xspace}
-\newcommand*{\yzplane}{\ensuremath{yz\text{-plane}}\xspace}
-\newcommand*{\zxplane}{\ensuremath{zx\text{-plane}}\xspace}
-\newcommand*{\yxplane}{\ensuremath{yx\text{-plane}}\xspace}
-\newcommand*{\zyplane}{\ensuremath{zy\text{-plane}}\xspace}
-\newcommand*{\xzplane}{\ensuremath{xz\text{-plane}}\xspace}
-\newcommand*{\plane}{\ensuremath{\text{-plane}}\xspace}
-% Frequently used roots. Prepend |f| for fractional exponents.
-\newcommand*{\cuberoot}[1]{\ensuremath{\sqrt[3]{#1}}}
-\newcommand*{\fourthroot}[1]{\ensuremath{\sqrt[4]{#1}}}
-\newcommand*{\fifthroot}[1]{\ensuremath{\sqrt[5]{#1}}}
-\newcommand*{\fsqrt}[1]{\ensuremath{{#1}^\onehalf}}
-\newcommand*{\fcuberoot}[1]{\ensuremath{{#1}^\onethird}}
-\newcommand*{\ffourthroot}[1]{\ensuremath{{#1}^\onefourth}}
-\newcommand*{\ffifthroot}[1]{\ensuremath{{#1}^\onefifth}}
-\newcommand*{\relgamma}[1]{\ensuremath{%
-  \frac{1}{\sqrt{1-\inparens{\frac{#1}{c}}\squared}}}}
-\newcommand*{\frelgamma}[1]{\ensuremath{%
-  \inparens{1-\frac{{#1}\squared}{c\squared}}^{-\onehalf}}}
-\newcommand*{\oosqrtomxs}[1]{\ensuremath{\frac{1}{\sqrt{1-{#1}\squared}}}}
-\newcommand*{\oosqrtomx}[1]{\ensuremath{\frac{1}{\sqrt{1-{#1}}}}}
-\newcommand*{\ooomx}[1]{\ensuremath{\frac{1}{1-{#1}}}}
-\newcommand*{\ooopx}[1]{\ensuremath{\frac{1}{1+{#1}}}}
-\newcommand*{\isequals}{\wordoperator{?}{=}\xspace}
-\newcommand*{\wordoperator}[2]{\ensuremath{%
-  \mathrel{\vcenter{\offinterlineskip
-  \halign{\hfil\tiny\upshape##\hfil\cr\noalign{\vskip-.5ex}
-    {#1}\cr\noalign{\vskip.5ex}{#2}\cr}}}}}
-\newcommand*{\definedas}{\wordoperator{defined}{as}\xspace}
-\newcommand*{\associated}{\wordoperator{associated}{with}\xspace}
-\newcommand*{\adjustedby}{\wordoperator{adjusted}{by}\xspace}
-\newcommand*{\earlierthan}{\wordoperator{earlier}{than}\xspace}
-\newcommand*{\laterthan}{\wordoperator{later}{than}\xspace}
-\newcommand*{\forevery}{\wordoperator{for}{every}\xspace}
-\newcommand*{\pwordoperator}[2]{\ensuremath{\left(%
-  \mathrel{\vcenter{\offinterlineskip% 
-  \halign{\hfil\tiny\upshape##\hfil\cr\noalign{\vskip-.5ex}% 
-    {#1}\cr\noalign{\vskip.5ex}{#2}\cr}}}\right)}}%
-\newcommand*{\pdefinedas}{\pwordoperator{defined}{as}\xspace}
-\newcommand*{\passociated}{\pwordoperator{associated}{with}\xspace}
-\newcommand*{\padjustedby}{\pwordoperator{adjusted}{by}\xspace}
-\newcommand*{\pearlierthan}{\pwordoperator{earlier}{than}\xspace}
-\newcommand*{\platerthan}{\pwordoperator{later}{than}\xspace}
-\newcommand*{\pforevery}{\pwordoperator{for}{every}\xspace}
-\newcommand*{\defines}{\ensuremath{\stackrel{\text{\tiny{def}}}{=}}\xspace}
-\newcommand*{\inframe}[1][\relax]{\ensuremath{%
-  \xrightarrow[\text\tiny{\mathcal #1}]{}}\xspace}
-\newcommand*{\associates}{\ensuremath{%
-  \xrightarrow{\text{\tiny{assoc}}}}\xspace}
-\newcommand*{\becomes}{\ensuremath{%
-  \xrightarrow{\text{\tiny{becomes}}}}\xspace}
-\newcommand*{\rrelatedto}[1]{\ensuremath{%
-  \xLongrightarrow{\text{\tiny{#1}}}}}
-\newcommand*{\lrelatedto}[1]{\ensuremath{%
-  \xLongleftarrow[\text{\tiny{#1}}]{}}}
-\newcommand*{\brelatedto}[2]{\ensuremath{%
-  \xLongleftrightarrow[\text{\tiny{#1}}]{\text{\tiny{#2}}}}}
-\newcommand*{\genericinteractionplaces}[5]{\ensuremath{\inparens{#1}
-  \frac{\inparens{#2}\inparens{#3}}{\inparens{#4}^2}{{\ifblank{#5}{%
-  \mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\genericfieldofparticleplaces}[4]{\ensuremath{\inparens{#1}
-  \frac{\inparens{#2}}{\inparens{#3}^2}{{\ifblank{#4}{\mivector{\_ , \_ , \_}}{#4}}}}}
-\newcommand*{\genericpotentialenergyplaces}[4]{\ensuremath{%
-  \inparens{#1}\frac{\inparens{#2}\inparens{#3}}{\inparens{#4}}}}
-\newcommand*{\genericelectricdipoleplaces}[5]{%
-  \ensuremath{\inparens{#1}\frac{\inparens{#2}\inparens{#3}}{\inparens{#4}^3}%
-  {{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\genericelectricdipoleonaxisplaces}[5]{%
-  \ensuremath{\inparens{#1}\frac{2\inparens{#2}\inparens{#3}}{\inparens{#4}^3}%
-  {{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\gfieldofparticle}{\ensuremath{\universalgravmathsymbol\frac{M}%
-  {\magsquaredvect{r}}\inparens{-\dirvect{r}}}}
-\newcommand*{\gravitationalinteractionplaces}[4]{%
-  \genericinteractionplaces{\universalgrav}{#1}{#2}{#3}{#4}}
-\newcommand*{\gfieldofparticleplaces}[3]{%
-  \genericfieldofparticleplaces{\universalgrav}{#1}{#2}{#3}}
-\newcommand*{\electricinteractionplaces}[4]{%
-  \genericinteractionplaces{\oofpez}{#1}{#2}{#3}{#4}}
-\newcommand*{\Efieldofparticleplaces}[3]{%
-  \genericfieldofparticleplaces{\oofpez}{#1}{#2}{#3}}
-\newcommand*{\Bfieldofparticleplaces}[5]{\ensuremath{\inparens{\mzofp}%
-  \frac{\inparens{#1}\inparens{#2}}{\inparens{#3}^2}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}\times{{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\springinteractionplaces}[3]{\ensuremath{\inparens{#1}
-  \inparens{#2}{{\ifblank{#3}{\mivector{\_ , \_ , \_}}{#3}}}}}
-\newcommand*{\gravitationalpotentialenergyplaces}[3]{\ensuremath{%
-  -\genericpotentialenergyplaces{\universalgrav}{#1}{#2}{#3}}}
-\newcommand*{\electricpotentialenergyplaces}[3]{%
-  \genericpotentialenergyplaces{\oofpez}{#1}{#2}{#3}}
-\newcommand*{\springpotentialenergyplaces}[2]{\ensuremath{%
-  \onehalf\inparens{#1}\inparens{#2}^2}}
-\newcommand*{\electricdipoleonaxisplaces}[4]{%
-  \genericelectricdipoleonaxisplaces{\oofpez}{\absof{#1}}{#2}{#3}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}}
-\newcommand*{\electricdipoleonbisectorplaces}[4]{%
-  \genericelectricdipoleplaces{\oofpez}{\absof{#1}}{#2}{#3}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}}
-\newcommand{\define}[2]{\newcommand{#1}{#2}}
-\newcommand*{\momentumprinciple}{\ensuremath{%
-  \vectsub{p}{sys,final}=\vectsub{p}{sys,initial}+\Fnetsys\Delta t}}
-\newcommand*{\LHSmomentumprinciple}{\ensuremath{\vectsub{p}{sys,final}}}
-\newcommand*{\RHSmomentumprinciple}{\ensuremath{%
-  \vectsub{p}{sys,initial}+\Fnetsys\Delta t}}
-\newcommand*{\momentumprinciplediff}{\ensuremath{%
-  \Dvectsub{p}{sys}=\Fnetsys\Delta t}}
-\newcommand*{\energyprinciple}{\ensuremath{%
-  \ssub{E}{sys,final}=\ssub{E}{sys,initial}+W+Q}}
-\newcommand*{\LHSenergyprinciple}{\ensuremath{\ssub{E}{sys,final}}}
-\newcommand*{\RHSenergyprinciple}{\ensuremath{\ssub{E}{sys,initial}+W+Q}}
-\newcommand*{\energyprinciplediff}{\ensuremath{\Delta\ssub{E}{sys}=W+Q}}
-\newcommand*{\angularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,final}=\vectsub{L}{\(A\),sys,initial}+\Tsub{net}\Delta t}}
-\newcommand*{\LHSangularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,final}}}
-\newcommand*{\RHSangularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,initial}+\Tsub{net}\Delta t}}
-\newcommand*{\angularmomentumprinciplediff}{\ensuremath{%
-  \Dvectsub{L}{\(A\),sys}=\Tsub{net}\Delta t}}  
-\newcommand*{\gravitationalinteraction}{\ensuremath{%
-  \universalgravmathsymbol\frac{\msub{M}{1}\msub{M}{2}}{%
-  \magvectsub{r}{12}\squared}(-\dirvectsub{r}{12})}}
-\newcommand*{\electricinteraction}{\ensuremath{%
-  \oofpezmathsymbol\frac{\msub{Q}{1}\msub{Q}{2}}{\magvectsub{r}{12}\squared}
-  \dirvectsub{r}{12}}}
-\newcommand*{\springinteraction}{\ensuremath{\ks\magvect{s}(-\dirvect{s})}}
-\newcommand*{\Bfieldofparticle}{\ensuremath{%
-  \mzofpmathsymbol\frac{Q\magvect{v}}{\magsquaredvect{r}}\dirvect{v}\times
-  \dirvect{r}}}
-\newcommand*{\Efieldofparticle}{\ensuremath{%
-  \oofpezmathsymbol\frac{Q}{\magsquaredvect{r}}\dirvect{r}}}
-\newcommandx{\Esys}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{E}{sys}}{\ssub{E}{sys,#1}}}
-\newcommandx{\Us}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(s\)}}{\ssub{U}{\(s\),#1}}}
-\newcommandx{\Ug}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(g\)}}{\ssub{U}{\(g\),#1}}}
-\newcommandx{\Ue}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(e\)}}{\ssub{U}{\(e\),#1}}}
-\newcommandx{\Ktrans}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{K}{trans}}
-  {\ssub{K}{trans,#1}}}
-\newcommandx{\Krot}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{K}{rot}}{\ssub{K}{rot,#1}}}
-\newcommandx{\Kvib}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{K}{vib}}{\ssub{K}{vib,#1}}}
-\newcommandx{\Eparticle}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{particle}}
-  {\ssub{E}{particle,#1}}}
-\newcommandx{\Einternal}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{internal}}
-  {\ssub{E}{internal,#1}}}
-\newcommandx{\Erest}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{rest}}{\ssub{E}
-  {rest,#1}}}
-\newcommandx{\Echem}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{chem}}{\ssub{E}
-  {chem,#1}}}
-\newcommandx{\Etherm}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{therm}}
-  {\ssub{E}{therm,#1}}}
-\newcommandx{\Evib}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{E}{vib}}{\ssub{E}{vib,#1}}}
-\newcommandx{\Ephoton}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{photon}}
-  {\ssub{E}{photon,#1}}}
-\newcommand*{\DEsys}{\Changein\Esys}
-\newcommand*{\DUs}{\Changein\Us}
-\newcommand*{\DUg}{\Changein\Ug}
-\newcommand*{\DUe}{\Changein\Ue}
-\newcommand*{\DKtrans}{\Changein\Ktrans}
-\newcommand*{\DKrot}{\Changein\Krot}
-\newcommand*{\DKvib}{\Changein\Kvib}
-\newcommand*{\DEparticle}{\Changein\Eparticle}
-\newcommand*{\DEinternal}{\Changein\Einternal}
-\newcommand*{\DErest}{\Changein\Erest}
-\newcommand*{\DEchem}{\Changein\Echem}
-\newcommand*{\DEtherm}{\Changein\Etherm}
-\newcommand*{\DEvib}{\Changein\Evib}
-\newcommand*{\DEphoton}{\Changein\Ephoton}
-\newcommand*{\springpotentialenergy}{\onehalf\ks\magsquaredvect{s}}
-\newcommand*{\finalspringpotentialenergy}
-  {\ssub{\left(\springpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialspringpotentialenergy}
-  {\ssub{\left(\springpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\gravitationalpotentialenergy}{\ensuremath{%
-  -G\frac{\msub{M}{1}\msub{M}{2}}{\magvectsub{r}{12}}}}
-\newcommand*{\finalgravitationalpotentialenergy}
-  {\ssub{\left(\gravitationalpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialgravitationalpotentialenergy}
-  {\ssub{\left(\gravitationalpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\electricpotentialenergy}{\ensuremath{%
-  \oofpezmathsymbol\frac{\ssub{Q}{1}\ssub{Q}{2}}{\magvectsub{r}{12}}}}
-\newcommand*{\finalelectricpotentialenergy}
-  {\ssub{\left(\electricpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialelectricpotentialenergy}
-  {\ssub{\left(\electricpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\ks}{\msub{k}{s}}
-\newcommand*{\Fnet}{\ensuremath{\vectsub{F}{net}}}
-\newcommand*{\Fnetext}{\ensuremath{\vectsub{F}{net,ext}}}
-\newcommand*{\Fnetsys}{\ensuremath{\vectsub{F}{net,sys}}}
-\newcommand*{\Fsub}[1]{\ensuremath{\vectsub{F}{#1}}}
-\newcommand*{\Ltotal}{\ensuremath{\vectsub{L}{\(A\),total}}}
-\newcommand*{\Lsys}{\ensuremath{\vectsub{L}{\(A\),sys}}}
-\newcommand*{\Lsub}[1]{\ensuremath{\vectsub{L}{\(A\),{#1}}}}
-\newcommand*{\Tnet}{\ensuremath{\vectsub{\tau}{\(A\),net}}}
-\newcommand*{\Tnetext}{\ensuremath{\vectsub{\tau}{\(A\),net,ext}}}
-\newcommand*{\Tnetsys}{\ensuremath{\vectsub{\tau}{\(A\),net,sys}}}
-\newcommand*{\Tsub}[1]{\ensuremath{\vectsub{\tau}{\(A\),#1}}}
-\newcommand*{\LHSmaxwelliint}[1][\partial V]{\ensuremath{%
-  \closedsurfaceintegral{#1}{\vect{E}}}}
-\newcommand*{\RHSmaxwelliint}{\ensuremath{\frac{\ssub{Q}{\(e\),net}}%
-  {\vacuumpermittivitymathsymbol}}}
-\newcommand*{\RHSmaxwelliinta}[1][V]{\ensuremath{%
-  \frac{1}{\vacuumpermittivitymathsymbol}\volumeintegral{#1}{\msub{\rho}{e}}}}
-\newcommand*{\RHSmaxwelliintfree}{\ensuremath{0}}
-\newcommand*{\maxwelliint}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliint}}
-\newcommandx*{\maxwelliinta}[2][1={\partial V},2={V},usedefault]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliinta[#2]}}
-\newcommand*{\maxwelliintfree}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliintfree}}
-\newcommand*{\LHSmaxwelliiint}[1][\partial V]{\ensuremath{%
-  \closedsurfaceintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwelliiint}{\ensuremath{0}}
-\newcommand*{\RHSmaxwelliiintm}{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\ssub{Q}{\(m\),net}}}
-\newcommand*{\RHSmaxwelliiintma}[1][V]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\volumeintegral{#1}{\msub{\rho}{m}}}}
-\newcommand*{\RHSmaxwelliiintfree}{\ensuremath{0}}
-\newcommand*{\maxwelliiint}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiint}}
-\newcommand*{\maxwelliiintm}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintm}}
-\newcommandx*{\maxwelliiintma}[2][1={\partial V},2={V},usedefault]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintma[#2]}}
-\newcommand*{\maxwelliiintfree}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintfree}}
-\newcommand*{\LHSmaxwelliiiint}[1][\partial\Omega]{\ensuremath{%
-  \closedlineintegral{#1}{\vect{E}}}}
-\newcommand*{\RHSmaxwelliiiint}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwelliiiintm}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}%
-  -\vacuumpermeabilitymathsymbol\ssub{I}{\(m\),net}}}
-\newcommand*{\RHSmaxwelliiiintma}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}%
-  -\vacuumpermeabilitymathsymbol\opensurfaceintegral{#1}{\vectsub{J}{\(m\)}}}}
-\newcommand*{\RHSmaxwelliiiintfree}{\RHSmaxwelliiiint}
-\newcommandx*{\maxwelliiiint}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiint[#2]}}
-\newcommandx*{\maxwelliiiintm}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiintm[#2]}}
-\newcommandx*{\maxwelliiiintma}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiintma[#2]}}
-\newcommand*{\maxwelliiiintfree}{\maxwelliiiint}
-\newcommand*{\LHSmaxwellivint}[1][\partial\Omega]{\ensuremath{%
-  \closedlineintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwellivint}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}+%
-  \vacuumpermeabilitymathsymbol\ssub{I}{\(e\),net}}}
-\newcommand*{\RHSmaxwellivinta}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}+%
-  \vacuumpermeabilitymathsymbol\opensurfaceintegral{#1}{\vectsub{J}{\(e\)}}}}
-\newcommand*{\RHSmaxwellivintfree}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}}}
-\newcommandx*{\maxwellivint}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivint[#2]}}
-\newcommandx*{\maxwellivinta}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivinta[#2]}}
-\newcommandx*{\maxwellivintfree}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivintfree[#2]}}
-\newcommand*{\LHSmaxwellidif}{\ensuremath{\divergence{\vect{E}}}}
-\newcommand*{\RHSmaxwellidif}{\ensuremath{\frac{\msub{\rho}{e}}
-  {\vacuumpermittivitymathsymbol}}}
-\newcommand*{\RHSmaxwellidiffree}{\ensuremath{0}}
-\newcommand*{\maxwellidif}{\ensuremath{\LHSmaxwellidif=\RHSmaxwellidif}}
-\newcommand*{\maxwellidiffree}{\ensuremath{\LHSmaxwellidif=\RHSmaxwellidiffree}}
-\newcommand*{\LHSmaxwelliidif}{\ensuremath{\divergence{\vect{B}}}}
-\newcommand*{\RHSmaxwelliidif}{\ensuremath{0}}
-\newcommand*{\RHSmaxwelliidifm}{\ensuremath{\vacuumpermeabilitymathsymbol%
-  \msub{\rho}{m}}}
-\newcommand*{\RHSmaxwelliidiffree}{\ensuremath{0}}
-\newcommand*{\maxwelliidif}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidif}}
-\newcommand*{\maxwelliidifm}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidifm}}
-\newcommand*{\maxwelliidiffree}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidiffree}}
-\newcommand*{\LHSmaxwelliiidif}{\ensuremath{\curl{\vect{E}}}}
-\newcommand*{\RHSmaxwelliiidif}{\ensuremath{-\pbypt[\vect{B}]}}
-\newcommand*{\RHSmaxwelliiidifm}{\ensuremath{-\pbypt[\vect{B}]-%
-  \vacuumpermeabilitymathsymbol\vectsub{J}{\(m\)}}}
-\newcommand*{\RHSmaxwelliiidiffree}{\RHSmaxwelliiidif}
-\newcommand*{\maxwelliiidif}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidif}}
-\newcommand*{\maxwelliiidifm}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidifm}}
-\newcommand*{\maxwelliiidiffree}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidif}}
-\newcommand*{\LHSmaxwellivdif}{\ensuremath{\curl{\vect{B}}}}
-\newcommand*{\RHSmaxwellivdif}{\ensuremath{\vacuumpermeabilitymathsymbol%
-  \vacuumpermittivitymathsymbol\pbypt[\vect{E}]+%
-  \vacuumpermeabilitymathsymbol\vectsub{J}{\(e\)}}}
-\newcommand*{\RHSmaxwellivdiffree}{\ensuremath{\vacuumpermeabilitymathsymbol
-  \vacuumpermittivitymathsymbol\pbypt[\vect{E}]}}
-\newcommand*{\maxwellivdif}{\ensuremath{\LHSmaxwellivdif=\RHSmaxwellivdif}}
-\newcommand*{\maxwellivdiffree}{\ensuremath{\LHSmaxwellivdif=\RHSmaxwellivdiffree}}
-\newcommand*{\RHSlorentzforce}{\ensuremath{\msub{q}{e}\left(\vect{E}+%
-  \vectcrossvect{\vect{v}}{\vect{B}}\right)}}
-\newcommand*{\RHSlorentzforcem}{\ensuremath{\RHSlorentzforce+\msub{q}{m}\left(%
-  \vect{B}-\vectcrossvect{\vect{v}}{\frac{\vect{E}}{c^2}}\right)}}
-\newcommandx{\eulerlagrange}[1][1={q_i},usedefault]{\ensuremath{%
-  \pbyp{\mathcal{L}}{#1}-\dbydt\inparens{\pbyp{\mathcal{L}}{\dot{#1}}} = 0}}
-\newcommandx{\Eulerlagrange}[1][1={q_i},usedefault]{\ensuremath{%
-  \DbyD{\mathcal{L}}{#1}-\DbyDt\inparens{\DbyD{\mathcal{L}}{\dot{#1}}} = 0}}
-\newcommand*{\vpythonline}{\lstinline[style=vpython]}
-\newcommand*{\glowscriptline}{\lstinline[style=vpython]}
-\lstnewenvironment{vpythonblock}[2]{%
-  \lstset{style=vpython,caption={#1},label={#2}}}{}
-\lstnewenvironment{glowscriptblock}[2]{%
-  \lstset{style=vpython,caption={#1},label={#2}}}{}
-\newcommand*{\vpythonfile}[3]{%
-  \newpage\lstinputlisting[style=vpython,caption={#1},label={#2}]{#3}}
-\newcommand*{\glowscriptfile}[3]{%
-  \newpage\lstinputlisting[style=vpython,caption={#1},label={#2}]{#3}}
-\newcommandx{\emptyanswer}[2][1=0.80,2=0.1,usedefault]
-  {\begin{minipage}{#1\textwidth}\hfill\vspace{#2\textheight}\end{minipage}}
-\newenvironmentx{activityanswer}[5][1=white,2=black,3=black,4=0.90,%
-  5=0.10,usedefault]{%
-  \def\skipper{#5}%
-  \def\response at fbox{\fcolorbox{#2}{#1}}%
-  \begin{center}%
-    \begin{lrbox}{\@tempboxa}%
-      \begin{minipage}[c][#5\textheight][c]{#4\textwidth}\color{#3}%
-        \vspace{#5\textheight}}{%
-        \vspace{\skipper\textheight}%
-      \end{minipage}%
-    \end{lrbox}%
-    \response at fbox{\usebox{\@tempboxa}}%
-  \end{center}%
-}%
-\newenvironmentx{adjactivityanswer}[5][1=white,2=black,3=black,4=0.90,5=0.00,%
-  usedefault]{%
-  \def\skipper{#5}%
-  \def\response at fbox{\fcolorbox{#2}{#1}}%
-  \begin{center}%
-    \begin{lrbox}{\@tempboxa}%
-      \begin{minipage}[c]{#4\textwidth}\color{#3}%
-        \vspace{#5\textheight}}{%
-        \vspace{\skipper\textheight}%
-      \end{minipage}%
-    \end{lrbox}%
-    \response at fbox{\usebox{\@tempboxa}}%
-  \end{center}%
-}%
-\newcommandx{\emptybox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.10,usedefault]%
-  {\begin{center}%
-     \fcolorbox{#3}{#2}{%
-       \begin{minipage}[c][#6\textheight][c]{#5\textwidth}\color{#4}%
-         {#1}%
-       \end{minipage}}%
-     \vspace{\baselineskip}%
-   \end{center}%
-}%
-\newcommandx{\adjemptybox}[7][1=\hfill,2=white,3=black,4=black,5=0.90,6=,%
-  7=0.0,usedefault]
-  {\begin{center}%
-     \fcolorbox{#3}{#2}{%
-       \begin{minipage}[c]{#5\textwidth}\color{#4}%
-         \vspace{#7\textheight}%
-           {#1}%
-         \vspace{#7\textheight}%
-       \end{minipage}}%
-     \vspace{\baselineskip}%
-   \end{center}%
-}%
-\newcommandx{\answerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.1,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\adjanswerbox}[7][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.1,7=0.0,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\adjemptybox[#1][#2][#3][#4][#5][#6][#7]}%
-}%
-\newcommandx{\smallanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.10,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\smallanswerform}[4][1=q1,2=Response,3=0.10,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\mediumanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.20,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\mediumanswerform}[4][1=q1,2=Response,3=0.20,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\largeanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.25,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\largeanswerform}[4][1=q1,2=Response,3=0.25,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\largeranswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.33,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\largeranswerform}[4][1=q1,2=Response,3=0.33,4=0.90,%
-  usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\hugeanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.50,usedefault]{%
-  \ifthenelse{\equal{#1}{}}
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\hugeanswerform}[4][1=q1,2=Response,3=0.50,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\hugeranswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.75,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\hugeranswerform}[4][1=q1,2=Response,3=0.75,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\fullpageanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=1.00,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\fullpageanswerform}[4][1=q1,2=Response,3=1.00,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\mdfdefinestyle{miinstructornotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={INSTRUCTOR NOTE},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{miinstructornote}{%
-  \begin{mdframed}[style=miinstructornotestyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{mistudentnotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STUDENT NOTE},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{mistudentnote}{%
-  \begin{mdframed}[style=mistudentnotestyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{miderivationstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=0pt,rightmargin=0pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={DERIVATION},
-    frametitlebackgroundcolor=orange!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=orange!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{miderivation}{%
-  \begin{mdframed}[style=miderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align}
-      \BODY
-    \end{align}
-  \end{mdframed}
-}%
-\NewEnviron{miderivation*}{%
-  \begin{mdframed}[style=miderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align*}
-      \BODY
-    \end{align*}
-  \end{mdframed}
-}%
-\mdfdefinestyle{mistandardstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STANDARD},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{mistandard}{%
-  \begin{mdframed}[style=mistandardstyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwinstructornotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={INSTRUCTOR NOTE},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwinstructornote}{%
-  \begin{mdframed}[style=bwinstructornotestyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwstudentnotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STUDENT NOTE},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwstudentnote}{%
-  \begin{mdframed}[style=bwstudentnotestyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwderivationstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=0pt,rightmargin=0pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={DERIVATION},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwderivation}{%
-  \begin{mdframed}[style=bwderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align}
-      \BODY
-    \end{align}
-  \end{mdframed}
-}%
-\NewEnviron{bwderivation*}{%
-  \begin{mdframed}[style=bwderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align*}
-      \BODY
-    \end{align*}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwstandardstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STANDARD},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwstandard}{%
-  \begin{mdframed}[style=bwstandardstyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\NewEnviron{mysolution}{%
-  \setcounter{equation}{0}
-  \begin{align}
-    \BODY
-  \end{align}
-}%
-\NewEnviron{mysolution*}{%
-  \setcounter{equation}{0}
-  \begin{align*}
-    \BODY
-  \end{align*}
-}%
-\newenvironment{problem}[1]{%
-  \newpage%
-  \section*{#1}%
-  \newlist{parts}{enumerate}{2}%
-  \setlist[parts]{label=(\alph*)}}{\newpage}
-\newcommand{\problempart}{\item}%
-\newcommand{\reason}[1]{\begin{minipage}{5cm}{#1}\end{minipage}}
-\newcommand*{\checkpoint}{%
-  \vspace{1cm}\begin{center}%
-    \colorbox{yellow!80}{|--------- CHECKPOINT ---------|}%
-  \end{center}}%
-\newcommandx*{\image}[4][1={scale=1},usedefault]{%
-  \begin{figure}[H]
-    \begin{center}%
-      \includegraphics[#1]{#2}%
-    \end{center}%
-    \caption{#3}%
-    \label{#4}%
-  \end{figure}}
-\newcommand*{\sneakyone}[1]{\ensuremath{\cancelto{1}{#1}}}
-\newcommand*{\parallelto}{\ensuremath{{{\mkern3mu\vphantom{\perp}\vrule depth 0pt
-  \mkern2mu\vrule depth 0pt\mkern3mu}}}}
-\newcommand*{\perpendicularto}{\ensuremath{\perp}}
-\newcommand*{\qed}{\ensuremath{\text{ Q.E.D.}}}
-\newcommand*{\chkquantity}[1]{%
-  \begin{center}
-    \begin{tabular}{C{4.5cm} C{4cm} C{4cm} C{4cm}}
-      name    & baseunit & drvdunit & altnunit \tabularnewline 
-      \cs{#1} & \csname #1onlybaseunit\endcsname & \csname #1onlydrvdunit\endcsname & 
-        \csname #1onlyaltnunit\endcsname 
-    \end{tabular}
-  \end{center}
-}%
-\newcommand*{\chkconstant}[1]{%
-  \begin{center}
-    \begin{tabular}{C{4cm} C{4cm} C{4cm}}
-      name    & symbol & value \tabularnewline
-      \cs{#1} & \csname #1mathsymbol\endcsname & \csname #1value\endcsname 
-      \tabularnewline
-      baseunit & drvdunit & altnunit \tabularnewline
-      \csname #1onlybaseunit\endcsname & \csname #1onlydrvdunit\endcsname & 
-      \csname #1onlyaltnunit\endcsname
-    \end{tabular}
-  \end{center}
-}%
 %    \end{macrocode}
-% \newpage
-% \section{Acknowledgements}
-% I thank Marcel Heldoorn, Joseph Wright, Scott Pakin, Thomas Sturm, Aaron Titus, 
-% David Zaslavsky, Ruth Chabay, and Bruce Sherwood. Special thanks to Martin 
-% Scharrer for his \texttt{sty2dtx.pl} utility, which saved me days of typing. 
-% Special thanks also to Herbert Schulz for his custom \texttt{dtx} engine for 
-% \texttt{TeXShop}. Very special thanks to Ulrich Diez for providing the mechanism 
-% that defines physics quantities and constants. Also very special thanks to 
-% students who helped test recent versions of this package.
+% \restoregeometry
 %
 % \iffalse
 %</package>

Modified: trunk/Master/texmf-dist/source/latex/mandi/mandi.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/mandi/mandi.ins	2021-08-22 10:46:35 UTC (rev 60299)
+++ trunk/Master/texmf-dist/source/latex/mandi/mandi.ins	2021-08-22 19:58:29 UTC (rev 60300)
@@ -6,27 +6,31 @@
 %%
 %% mandi.dtx  (with options: `install')
 %% 
-%% Copyright (C) 2018 by Paul J. Heafner <heafnerj at 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.
+%%  Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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'.
+%%  This work has the LPPL maintenance status `maintained'.
 %% 
-%% The Current Maintainer of this work is Paul J. Heafner.
+%%  The Current Maintainer of this work is Paul J. Heafner.
 %% 
 %%  This work consists of the files mandi.dtx
+%%                                  mandistudent.dtx
+%%                                  mandiexp.dtx
 %%                                  mandi.ins
 %%                                  mandi.pdf
-%%                                  README
+%%                                  README.md
 %% 
 %%  and includes the derived files  mandi.sty
-%%                                  vdemo.py.
-%% ---------------------------------------------------------------------------
+%%                                  mandistudent.sty
+%%                                  mandiexp.sty
+%%                                  vdemo.py
+%%  ---------------------------------------------------------------------------
 %% 
 \input docstrip.tex
 \keepsilent
@@ -34,48 +38,54 @@
 \usedir{tex/latex/mandi}
 \preamble
 
-Copyright (C) 2018 by Paul J. Heafner <heafnerj at 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.
+ Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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'.
+ This work has the LPPL maintenance status `maintained'.
 
-The Current Maintainer of this work is Paul J. Heafner.
+ The Current Maintainer of this work is Paul J. Heafner.
 
  This work consists of the files mandi.dtx
+                                 mandistudent.dtx
+                                 mandiexp.dtx
                                  mandi.ins
                                  mandi.pdf
-                                 README
+                                 README.md
 
  and includes the derived files  mandi.sty
-                                 vdemo.py.
----------------------------------------------------------------------------
+                                 mandistudent.sty
+                                 mandiexp.sty
+                                 vdemo.py
+ ---------------------------------------------------------------------------
 
 \endpreamble
 
 \generate{\file{\jobname.sty}{\from{\jobname.dtx}{package}}}
+\generate{\file{mandistudent.sty}{\from{mandistudent.dtx}{package}}}
+\generate{\file{mandiexp.sty}{\from{mandiexp.dtx}{package}}}
 \generate{\usepreamble\empty\usepostamble\empty
-          \file{vdemo.py}{\from{\jobname.dtx}{vdemo}}}
+          \file{vdemo.py}{\from{mandistudent.dtx}{vdemo}}}
 
 \obeyspaces
 \Msg{*************************************************************}
 \Msg{*                                                           *}
-\Msg{* To finish the installation you have to move the following *}
-\Msg{* file into a directory searched by TeX:                    *}
+\Msg{* To finish the  installation, open a command line and      *}
+\Msg{* type the following, repeating 2-4 until there are no      *}
+\Msg{* warnings:                                                 *}
+\Msg{*   2. lualatex mandi.dtx  (lualatex is required)           *}
+\Msg{*   3. makeindex -s gind.ist -o mandi.ind mandi.idx         *}
+\Msg{*   4. makeindex -s gglo.ist -o mandi.gls mandi.glo         *}
+\Msg{* Move the *.sty files into a directory searched by TeX.    *}
+\Msg{* The vdemo.py file is not needed.                          *}
 \Msg{*                                                           *}
-\Msg{*     mandi.sty                                             *}
-\Msg{*                                                           *}
-\Msg{* To produce the documentation run the file mandi.dtx       *}
-\Msg{* through pdfLaTeX.                                         *}
-\Msg{*                                                           *}
 \Msg{*************************************************************}
 \endbatchfile
-
 \endinput
 %%
 %% End of file `mandi.ins'.

Added: trunk/Master/texmf-dist/source/latex/mandi/mandiexp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/mandi/mandiexp.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/mandi/mandiexp.dtx	2021-08-22 19:58:29 UTC (rev 60300)
@@ -0,0 +1,787 @@
+% \iffalse meta-comment
+% !TEX program = lualatexmk
+%
+% Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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 Paul J. Heafner.
+%
+% This work consists of the files mandi.dtx
+%                                 mandistudent.dtx
+%                                 mandiexp.dtx
+%                                 mandi.ins
+%                                 mandi.pdf
+%                                 README.md
+%
+% and includes the derived files  mandi.sty
+%                                 mandistudent.sty
+%                                 mandiexp.sty
+%                                 vdemo.py
+% ---------------------------------------------------------------------------
+%
+% \fi
+%
+% \iffalse
+%
+%<*internal>
+\iffalse
+%</internal>
+%
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+  \expandafter\begingroup
+\fi
+%</internal>
+%
+%<*internal>
+\usedir{tex/latex/mandi}
+\ifx\fmtname\nameofplainTeX
+  \expandafter\endbatchfile
+\else
+  \expandafter\endgroup
+\fi
+%</internal>
+%
+%<*driver>
+\ProvidesFile{mandiexp.dtx}
+\DisableCrossrefs         % index descriptions only
+\PageIndex                % index refers to page numbers
+\CodelineNumbered         % number source lines
+\RecordChanges            % record changes
+\begin{document}          % main document
+  \DocInput{\jobname.dtx} %
+  \PrintIndex             %
+\end{document}            % end main document
+%</driver>
+% \fi
+%
+% \CheckSum{215}
+%
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% ^^A DO NOT TRY TO COMPILE THIS DTX FILE BY ITSELF. IT WILL FAIL.
+%
+% \section{The \mandiexp\ Package}\setplace{sec:mandiexppkg}
+%
+% \mandi\ comes with an accessory package \mandiexp\  
+% which includes commands specific to 
+% \emph{Matter \& Interactions}.\footnote{See 
+% \href{https://www.wiley.com/en-us/Matter+and+Interactions%2C+4th+Edition-p-9781118875865}
+% {\emph{Matter \& Interactions}} and
+% \url{https://matterandinteractions.org/} for details.} 
+% The commands are primarily for typesetting 
+% mathematical expressions used in that text. Note that \mandiexp\
+% requires, and loads, \mandi\ but \mandi\ doesn't require, 
+% and doesn't load, \mandiexp.
+%
+% Load \mandiexp\ as you would any package in your preamble. 
+% There are no package options.
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{dispListing*}{sidebyside=false,listing only}
+  \usepackage{mandiexp}
+\end{dispListing*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}{mandiexpversion}{}
+  Typesets the current version and build date.
+\end{docCommand}
+\begin{dispExample*}{sidebyside=false}
+  The version is \mandiexpversion\ and is a stable build.
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{The Fundamenal Principles}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = lhsmomentumprinciple,%
+      doc description = {LHS of delta form, bold vectors},%
+    },%
+    {%
+      doc name = rhsmomentumprinciple,%
+      doc description = {RHS of delta form, bold vectors},%
+    },%
+    {%
+      doc name = lhsmomentumprincipleupdate,%
+      doc description = {LHS of update form, bold vectors},%
+    },%
+    {%
+      doc name = rhsmomentumprincipleupdate,%
+      doc description = {RHS of update form, bold vectors},%
+    },%
+    {%
+      doc name = momentumprinciple,%
+      doc description = {delta form, bold vectors},%
+    },%
+    {%
+      doc name = momentumprincipleupdate,%
+      doc description = {update form, bold vectors},%
+    },%
+    {%
+      doc name = lhsmomentumprinciple*,%
+      doc description = {LHS of delta form, arrow vectors},%
+    },%
+    {%
+      doc name = rhsmomentumprinciple*,%
+      doc description = {RHS of delta form, arrow vectors},%
+    },%
+    {%
+      doc name = lhsmomentumprincipleupdate*,%
+      doc description = {LHS of update form, arrow vectors},%
+    },%
+    {%
+      doc name = rhsmomentumprincipleupdate*,%
+      doc description = {RHS of update form, arrow vectors},%
+    },%
+    {%
+      doc name = momentumprinciple*,%
+      doc description = {delta form, arrow vectors},%
+    },%
+    {%
+      doc name = momentumprincipleupdate*,%
+      doc description = {update form, arrow vectors},%
+    },%
+  }%
+  Variants of command for typesetting the momentum principle.
+  Use starred variants to get arrow notation for vectors.
+\end{docCommands}
+\begin{dispExample}
+  \( \lhsmomentumprinciple \)        \\
+  \( \rhsmomentumprinciple \)        \\
+  \( \lhsmomentumprincipleupdate \)  \\
+  \( \rhsmomentumprincipleupdate \)  \\
+  \( \momentumprinciple \)           \\
+  \( \momentumprincipleupdate \)     \\
+  \( \lhsmomentumprinciple* \)       \\
+  \( \rhsmomentumprinciple* \)       \\
+  \( \lhsmomentumprincipleupdate* \) \\
+  \( \rhsmomentumprincipleupdate* \) \\
+  \( \momentumprinciple* \)          \\
+  \( \momentumprincipleupdate* \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = lhsenergyprinciple,%
+      doc description = {LHS of delta form},%
+    },%
+    {%
+      doc name = rhsenergyprinciple,%
+      doc parameter = \oarg{\(+\)process...},%
+      doc description = {RHS of delta form},%
+    },%
+    {%
+      doc name = lhsenergyprincipleupdate,%
+      doc description = {LHS of update form},%
+    },%
+    {%
+      doc name = rhsenergyprincipleupdate,%
+      doc parameter = \oarg{\(+\)process...},%
+      doc description = {RHS of update form},%
+    },%
+    {%
+      doc name = energyprinciple,%
+      doc parameter = \oarg{\(+\)process...},%
+      doc description = {delta form},%
+    },%
+    {%
+      doc name = energyprincipleupdate,%
+      doc parameter = \oarg{\(+\)process...},%
+      doc description = {update form},%
+    },%
+  }%
+  Variants of command for typesetting the energy principle.
+\end{docCommands}
+\begin{dispExample}
+  \( \lhsenergyprinciple \)           \\
+  \( \rhsenergyprinciple \)           \\
+  \( \rhsenergyprinciple[+Q] \)       \\
+  \( \energyprinciple \)              \\
+  \( \energyprinciple[+Q] \)          \\
+  \( \lhsenergyprincipleupdate \)     \\
+  \( \rhsenergyprincipleupdate \)     \\
+  \( \rhsenergyprincipleupdate[+Q] \) \\
+  \( \energyprincipleupdate \)        \\
+  \( \energyprincipleupdate[+Q] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = {},%
+  ]%
+  {%
+    {%
+      doc name = lhsangularmomentumprinciple,%
+      doc description = {LHS of delta form, bold vectors},%
+    },%
+    {%
+      doc name = rhsangularmomentumprinciple,%
+      doc description = {RHS of delta form, bold vectors},%
+    },%
+    {%
+      doc name = lhsangularmomentumprincipleupdate,%
+      doc description = {LHS of update form, bold vectors},%
+    },%
+    {%
+      doc name = rhsangularmomentumprincipleupdate,%
+      doc description = {RHS of update form, bold vectors},%
+    },%
+    {%
+      doc name = angularmomentumprinciple,%
+      doc description = {delta form, bold vectors},%
+    },%
+    {%
+      doc name = angularmomentumprincipleupdate,%
+      doc description = {update form, bold vectors},%
+    },%
+    {%
+      doc name = lhsangularmomentumprinciple*,%
+      doc description = {LHS of delta form, arrow vectors},%
+    },%
+    {%
+      doc name = rhsangularmomentumprinciple*,%
+      doc description = {RHS of delta form, arrow vectors},%
+    },%
+    {%
+      doc name = lhsangularmomentumprincipleupdate*,%
+      doc description = {LHS of update form, arrow vectors},%
+    },%
+    {%
+      doc name = rhsangularmomentumprincipleupdate*,%
+      doc description = {RHS of update form, arrow vectors},%
+    },%
+    {%
+      doc name = angularmomentumprinciple*,%
+      doc description = {delta form, arrow vectors},%
+    },%
+    {%
+      doc name = angularmomentumprincipleupdate*,%
+      doc description = {update form, arrow vectors},%
+    },%
+  }%
+  Variants of command for typesetting the angularmomentum principle.
+  Use starred variants to get arrow notation for vectors.
+\end{docCommands}
+\begin{dispExample}
+  \( \lhsangularmomentumprinciple \)        \\
+  \( \rhsangularmomentumprinciple \)        \\
+  \( \lhsangularmomentumprincipleupdate \)  \\
+  \( \rhsangularmomentumprincipleupdate \)  \\
+  \( \angularmomentumprinciple \)           \\
+  \( \angularmomentumprincipleupdate \)     \\
+  \( \lhsangularmomentumprinciple* \)       \\
+  \( \rhsangularmomentumprinciple* \)       \\
+  \( \lhsangularmomentumprincipleupdate* \) \\
+  \( \rhsangularmomentumprincipleupdate* \) \\
+  \( \angularmomentumprinciple* \)          \\
+  \( \angularmomentumprincipleupdate* \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{Other Expressions}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{energyof}{\marg{label}\oarg{label}}
+    Generic symbol for the energy of some entity.
+\end{docCommand}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \energyof{\symup{electron}} \) \\
+  \( \energyof{\symup{electron}}[\symup{final}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{systemenergy}{\oarg{label}}
+    Symbol for system energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \systemenergy \) \\
+  \( \systemenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{particleenergy}{\oarg{label}}
+    Symbol for particle energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \particleenergy \) \\
+  \( \particleenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{restenergy}{\oarg{label}}
+    Symbol for rest energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \restenergy \) \\
+  \( \restenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{internalenergy}{\oarg{label}}
+    Symbol for internal energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \internalenergy \) \\
+  \( \internalenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{chemicalenergy}{\oarg{label}}
+    Symbol for chemical energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \chemicalenergy \) \\
+  \( \chemicalenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{thermalenergy}{\oarg{label}}
+    Symbol for thermal energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \thermalenergy \) \\
+  \( \thermalenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{photonenergy}{\oarg{label}}
+    Symbol for photon energy.
+\end{docCommand}
+\begin{dispExample}
+  \( \photonenergy \) \\
+  \( \photonenergy[\symup{final}] \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+  doc new=2021-02-13,%
+  doc parameter = \oarg{label},%
+  ]%
+  {%
+    {%
+      doc name = translationalkineticenergy,%
+    },%
+    {%
+      doc name = translationalkineticenergy*,%
+    },%
+  }%
+  Symbol for translational kinetic energy.
+  The starred variant gives \(E\) notation.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \translationalkineticenergy \)                  \\
+  \( \translationalkineticenergy[\symup{initial}] \) \\
+  \( \translationalkineticenergy* \)                 \\
+  \( \translationalkineticenergy*[\symup{initial}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+  doc new=2021-02-13,%
+  doc parameter = \oarg{label},%
+  ]%
+  {%
+    {%
+      doc name = rotationalkineticenergy,%
+    },%
+    {%
+      doc name = rotationalkineticenergy*,%
+    },%
+  }%
+  Symbol for rotational kinetic energy.
+  The starred variant gives \(E\) notation.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \rotationalkineticenergy \)                  \\
+  \( \rotationalkineticenergy[\symup{initial}] \) \\
+  \( \rotationalkineticenergy* \)                 \\
+  \( \rotationalkineticenergy*[\symup{initial}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+  doc new=2021-02-13,%
+  doc parameter = \oarg{label},%
+  ]%
+  {%
+    {%
+      doc name = vibrationalkineticenergy,%
+    },%
+    {%
+      doc name = vibrationalkineticenergy*,%
+    },%
+  }%
+  Symbol for vibrational kinetic energy.
+  The starred variant gives \(E\) notation.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \vibrationalkineticenergy \)                  \\
+  \( \vibrationalkineticenergy[\symup{initial}] \) \\
+  \( \vibrationalkineticenergy* \)                 \\
+  \( \vibrationalkineticenergy*[\symup{initial}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{gravitationalpotentialenergy}
+  {\oarg{label}}
+    Symbol for gravitational potential energy.
+\end{docCommand}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \gravitationalpotentialenergy \) \\
+  \( \gravitationalpotentialenergy[\symup{final}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{electricpotentialenergy}{\oarg{label}}
+    Symbol for electric potential energy.
+\end{docCommand}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \electricpotentialenergy \) \\
+  \( \electricpotentialenergy[\symup{final}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-13]{springpotentialenergy}{\oarg{label}}
+    Symbol for spring potential energy.
+\end{docCommand}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \springpotentialenergy \) \\
+  \( \springpotentialenergy[\symup{final}] \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \StopEventually{}
+%
+% \newgeometry{left=0.50in,right=0.50in,top=1.00in,bottom=1.00in}
+% \subsection{\mandiexp\ Source Code}
+%
+% \iffalse
+%<*package>
+% \fi
+% Definine the package version and date for global use, exploiting the fact
+% that in a \pkg{.sty} file there is now no need for |\makeatletter| and
+% |\makeatother|. This simplifies defining internal commands, with |@| 
+% in the name, that are not for the user to know about.
+%
+%    \begin{macrocode}
+\def\mandiexp at version{\mandi at version}
+\def\mandiexp at date{\mandi at date}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandiexp.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandiexp}
+  [\mandiexp at date\space v\mandiexp at version\space Macros for Matter & Interactions]
+%    \end{macrocode}
+%
+% Define a convenient package version command.
+%
+%    \begin{macrocode}
+\newcommand*{\mandiexpversion}{v\mandiexp at version\space dated \mandiexp at date}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\RequirePackage{mandi}
+%
+\typeout{}%
+\typeout{mandiexp: You are using mandiexp \mandiexpversion.}
+\typeout{mandiexp: This package requires LuaLaTeX.}%
+\typeout{}%
+%
+% Commands specific to Matter & Interactions
+% The momentum principle
+\NewDocumentCommand{\lhsmomentumprinciple}{ s }{%
+  \Delta
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys}}%
+}%
+\NewDocumentCommand{\rhsmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{F}}%
+    {\vec{F}}%
+  _{\symup{sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\lhsmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys,initial}}+%
+  \IfBooleanTF{#1}%
+    {\vec*{F}}%
+    {\vec{F}}%
+  _{\symup{sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\momentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsmomentumprinciple* = \rhsmomentumprinciple*}%
+    {\lhsmomentumprinciple = \rhsmomentumprinciple}%
+}%
+\NewDocumentCommand{\momentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsmomentumprincipleupdate* = \rhsmomentumprincipleupdate*}%
+    {\lhsmomentumprincipleupdate = \rhsmomentumprincipleupdate}%
+}%
+% The momentum principle
+\NewDocumentCommand{\lhsenergyprinciple}{}{%
+  \Delta E_{\symup{sys}}%
+}%
+\NewDocumentCommand{\rhsenergyprinciple}{ O{} }{%
+  W_{\symup{ext}}#1%
+}%
+\NewDocumentCommand{\lhsenergyprincipleupdate}{}{%
+  E_{\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsenergyprincipleupdate}{ O{} }{%
+  E_{\symup{sys,initial}}+%
+  W_{\symup{ext}}#1%
+}%
+\NewDocumentCommand{\energyprinciple}{ O{} }{%
+  \lhsenergyprinciple = \rhsenergyprinciple[#1]%
+}%
+\NewDocumentCommand{\energyprincipleupdate}{ O{} }{%
+  \lhsenergyprincipleupdate = \rhsenergyprincipleupdate[#1]%
+}%
+% The angular momentum principle
+\NewDocumentCommand{\lhsangularmomentumprinciple}{ s }{%
+  \Delta
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A\symup{,sys,net}}%
+}%
+\NewDocumentCommand{\rhsangularmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{\tau}}%
+    {\vec{\tau}}%
+  _{A\symup{,sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\lhsangularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A,\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsangularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A\symup{,sys,initial}}+%
+  \IfBooleanTF{#1}%
+    {\vec*{\tau}}%
+    {\vec{\tau}}%
+  _{A\symup{,sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\angularmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsangularmomentumprinciple* = \rhsangularmomentumprinciple*}%
+    {\lhsangularmomentumprinciple = \rhsangularmomentumprinciple}%
+}%
+\NewDocumentCommand{\angularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsangularmomentumprincipleupdate* = \rhsangularmomentumprincipleupdate*}%
+    {\lhsangularmomentumprincipleupdate = \rhsangularmomentumprincipleupdate}%
+}%
+\NewDocumentCommand{\energyof}{ m o }{%
+  E_{#1\IfValueT{#2}{,#2}}%
+}%
+\NewDocumentCommand{\systemenergy}{ o }{%
+  E_{\symup{sys}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\particleenergy}{ o }{%
+  E_{\symup{particle}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\restenergy}{ o }{%
+  E_{\symup{rest}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\internalenergy}{ o }{%
+  E_{\symup{internal}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\chemicalenergy}{ o }{%
+  E_{\symup{chem}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\thermalenergy}{ o }{%
+  E_{\symup{therm}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\photonenergy}{ o }{%
+  E_{\symup{photon}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\translationalkineticenergy}{ s d[] }{%
+% d[] must be used because of the way consecutive optional
+%  arguments are handled. See xparse docs for details.
+%  See https://tex.stackexchange.com/a/569011/218142
+  \IfBooleanTF{#1}%
+  {E_\bgroup \symup{K}}%
+  {K_\bgroup\symup{trans}}%
+       \IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\rotationalkineticenergy}{ s d[] }{%
+% d[] must be used because of the way consecutive optional
+%  arguments are handled. See xparse docs for details.
+%  See https://tex.stackexchange.com/a/569011/218142
+  \IfBooleanTF{#1}%
+  {E_\bgroup}%
+  {K_\bgroup}%
+       \symup{rot}\IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\vibrationalkineticenergy}{ s d[] }{%
+% d[] must be used because of the way consecutive optional
+%  arguments are handled. See xparse docs for details.
+%  See https://tex.stackexchange.com/a/569011/218142
+  \IfBooleanTF{#1}%
+  {E_\bgroup}%
+  {K_\bgroup}%
+       \symup{vib}\IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\gravitationalpotentialenergy}{ o }{%
+  U_{\symup{g}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\electricpotentialenergy}{ o }{%
+  U_{\symup{e}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\springpotentialenergy}{ o }{%
+  U_{\symup{s}\IfValueT{#1}{,#1}}%
+}%
+%    \end{macrocode}
+%
+% \restoregeometry
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale


Property changes on: trunk/Master/texmf-dist/source/latex/mandi/mandiexp.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/mandi/mandistudent.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/mandi/mandistudent.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/mandi/mandistudent.dtx	2021-08-22 19:58:29 UTC (rev 60300)
@@ -0,0 +1,1789 @@
+% \iffalse meta-comment
+% !TEX program = lualatexmk
+%
+% Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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 Paul J. Heafner.
+%
+% This work consists of the files mandi.dtx
+%                                 mandistudent.dtx
+%                                 mandiexp.dtx
+%                                 mandi.ins
+%                                 mandi.pdf
+%                                 README.md
+%
+% and includes the derived files  mandi.sty
+%                                 mandistudent.sty
+%                                 mandiexp.sty
+%                                 vdemo.py
+% ---------------------------------------------------------------------------
+%
+% \fi
+%
+% \iffalse
+%
+%<*internal>
+\iffalse
+%</internal>
+%
+%<*vdemo>
+from vpython import *
+
+scene.width = 400
+scene.height = 760
+# constants and data
+g = 9.8       # m/s^2
+mball = 0.03  # kg
+Lo = 0.26     # m
+ks = 1.8      # N/m
+deltat = 0.01 # s 
+
+# objects (origin is at ceiling)
+ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01, 
+              width=0.2)
+ball = sphere(pos=vector(0,-0.3,0),radius=0.025,
+              color=color.orange)
+spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,
+               color=color.cyan,thickness=0.003,coils=40,
+               radius=0.010)
+
+# initial values
+pball = mball * vector(0,0,0)      # kg m/s
+Fgrav = mball * g * vector(0,-1,0) # N
+t = 0
+
+# improve the display
+scene.autoscale = False        # turn off automatic camera zoom
+scene.center = vector(0,-Lo,0) # move camera down
+scene.waitfor('click')         # wait for a mouse click
+
+# initial calculation loop
+# calculation loop
+while t < 10:
+    rate(100)
+    # we need the stretch
+    s = mag(ball.pos) - Lo
+    # we need the spring force
+    Fspring = ks * s * -norm(spring.axis)
+    Fnet = Fgrav + Fspring
+    pball = pball + Fnet * deltat
+    ball.pos = ball.pos + (pball / mball) * deltat
+    spring.axis = ball.pos - ceiling.pos
+    t = t + deltat
+%</vdemo>
+%
+%<*internal>
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+  \expandafter\begingroup
+\fi
+%</internal>
+%
+%<*internal>
+\usedir{tex/latex/mandi}
+\ifx\fmtname\nameofplainTeX
+  \expandafter\endbatchfile
+\else
+  \expandafter\endgroup
+\fi
+%</internal>
+%
+%<*driver>
+\ProvidesFile{mandistudent.dtx}
+\DisableCrossrefs         % index descriptions only
+\PageIndex                % index refers to page numbers
+\CodelineNumbered         % number source lines
+\RecordChanges            % record changes
+\begin{document}          % main document
+  \DocInput{\jobname.dtx} %
+  \PrintIndex             %
+\end{document}            % end main document
+%</driver>
+% \fi
+%
+% \CheckSum{706}
+%
+% \CharacterTable
+%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%     Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% ^^A DO NOT TRY TO COMPILE THIS DTX FILE BY ITSELF. IT WILL FAIL.
+%
+% \section{The \mandistudent\ Package}\setplace{sec:mandistudentpkg}
+%
+% \mandi\ comes with an accessory package \mandistudent,
+% which provides a collection of commands physics students can 
+% use for writing problem solutions. This package focuses on 
+% the most frequently needed tools. These commands should always 
+% be used in math mode. Note that \mandistudent\ requires, and 
+% loads, \mandi\ but \mandi\ doesn't require, and doesn't load, 
+% \mandistudent.
+%
+% Load \mandistudent\ as you would any package in your preamble. 
+% There are no package options.
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{dispListing*}{sidebyside=false,listing only}
+  \usepackage{mandistudent}
+\end{dispListing*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}{mandistudentversion}{}
+  Typesets the current version and build date.
+\end{docCommand}
+\begin{dispExample*}{sidebyside=false}
+  The version is \mandistudentversion\ and is a stable build.
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{Traditional Vector Notation}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = \marg{symbol}\oarg{labels},%
+  ]%
+  {%
+    {%
+      doc name = vec,%
+      doc description = use this variant for boldface notation,%
+    },%
+    {%
+      doc name = vec*,%
+      doc description = use this variant for arrow notation,%
+    }%
+  }%
+  Powerful and intelligent command for symbolic vector notation. The 
+  mandatory argument is the symbol for the vector quantity. The optional 
+  label(s) consists of superscripts and/or subscripts and can be 
+  mathematical or textual in nature. If textual, be sure to wrap them in 
+  |\symup{...}| for proper typesetting. The starred variant gives arrow 
+  notation whereas without the star you get boldface notation. Subscript 
+  and superscript labels can be arbitrarily mixed, and order doesn't matter.
+  This command redefines the default \LaTeX\ |\vec| command.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.6}
+  \( \vec{p} \)                                \\
+  \( \vec{p}_{2} \)                            \\
+  \( \vec{p}^{\symup{ball}} \)                 \\
+  \( \vec{p}_{\symup{final}} \)                \\
+  \( \vec{p}^{\symup{ball}}_{\symup{final}} \) \\
+  \( \vec{p}^{\symup{final}}_{\symup{ball}} \) \\
+  \( \vec*{p} \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = \marg{symbol}\oarg{labels},%
+  ]%
+  {%
+    {%
+      doc name = dirvec,%
+      doc description = use this variant for boldface notation,%
+    },%
+    {%
+      doc name = dirvec*,%
+      doc description = use this variant for arrow notation,%
+    }%
+  }%
+  Powerful and intelligent command for typesetting the direction of 
+  a vector. The options are the same as those for \refCom{vec}.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.65}
+  \( \dirvec{p} \)                                \\
+  \( \dirvec{p}_{2} \)                            \\
+  \( \dirvec{p}^{\symup{ball}} \)                 \\
+  \( \dirvec{p}_{\symup{final}} \)                \\
+  \( \dirvec{p}^{\symup{ball}}_{\symup{final}} \) \\
+  \( \dirvec{p}^{\symup{final}}_{\symup{ball}} \) \\
+  \( \dirvec*{p} \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}
+  {%
+    {%
+      doc name = zerovec,%
+      doc description = use this variant for boldface notation,%
+    },%
+    {%
+      doc name = zerovec*,%
+      doc description = use this variant for arrow notation,%
+    },%
+  }%
+  Command for typesetting the zero vector. The starred variant gives 
+  arrow notation. Without the star you get boldface notation.
+\end{docCommands}
+\begin{dispExample}
+  \( \zerovec \)  \\
+  \( \zerovec* \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}{changein}{}%
+  Semantic alias for |\Delta|.
+\end{docCommand}
+\begin{dispExample}
+ \( \changein t \)       \\
+ \( \changein \vec{p} \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc new = 2021-02-21,%
+    doc parameter = \oarg{size}\marg{quantity},%
+  ]%
+  {%
+    {%
+      doc name = doublebars,%
+      doc description = double bars,%
+    },%
+    {%
+      doc name = doublebars*,%
+      doc description = double bars for fractions,%
+    },%
+    {%
+      doc name = singlebars,%
+      doc description = single bars,%
+    },%
+    {%
+      doc name = singlebars*,%
+      doc description = single bars for fractions,%
+    },%
+    {%
+      doc name = anglebrackets,%
+      doc description = angle brackets,%
+    },%
+    {%
+      doc name = anglebrackets*,%
+      doc description = angle brackets for fractions,%
+    },%
+    {%
+      doc name = parentheses,%
+      doc description = parentheses,%
+    },%
+    {%
+      doc name = parentheses*,%
+      doc description = parentheses for fractions,%
+    },%
+    {%
+      doc name = squarebrackets,%
+      doc description = square brackets,%
+    },%
+    {%
+      doc name = squarebrackets*,%
+      doc description = square brackets for fractions,%
+    },%
+    {%
+      doc name = curlybraces,%
+      doc description = curly braces,%
+    },%
+    {%
+      doc name = curlybraces*,%
+      doc description = curly braces for fractions,%
+    },%
+  }%
+  If no argument is given, a placeholder is provided. 
+  Sizers like |\big|,|\Big|,|\bigg|, and |\Bigg| can 
+  be optionally specified. Beginners are encouraged 
+  not to use them. See the 
+  \href{https://www.ctan.org/pkg/mathtools}{\pkg{mathtools}} package 
+  documentation for details. 
+\end{docCommands}
+\begin{dispExample}
+  \[ \doublebars{} \]
+  \[ \doublebars{\vec{a}} \]
+  \[ \doublebars*{\frac{\vec{a}}{3}} \]
+  \[ \doublebars[\Bigg]{\frac{\vec{a}}{3}} \]
+\end{dispExample}
+\begin{dispExample}
+  \[ \singlebars{} \]
+  \[ \singlebars{x} \]
+  \[ \singlebars*{\frac{x}{3}} \]
+  \[ \singlebars[\Bigg]{\frac{x}{3}} \]
+\end{dispExample}
+\begin{dispExample}
+  \[ \anglebrackets{} \]
+  \[ \anglebrackets{\vec{a}} \]
+  \[ \anglebrackets*{\frac{\vec{a}}{3}} \]
+  \[ \anglebrackets[\Bigg]{\frac{\vec{a}}{3}} \]
+\end{dispExample}
+\begin{dispExample}
+  \[ \parentheses{} \]
+  \[ \parentheses{x} \]
+  \[ \parentheses*{\frac{x}{3}} \]
+  \[ \parentheses[\Bigg]{\frac{x}{3}} \]
+\end{dispExample}
+\begin{dispExample}
+  \[ \squarebrackets{} \]
+  \[ \squarebrackets{x} \]
+  \[ \squarebrackets*{\frac{x}{3}} \]
+  \[ \squarebrackets[\Bigg]{\frac{x}{3}} \]
+\end{dispExample}
+\begin{dispExample}
+  \[ \curlybraces{} \]
+  \[ \curlybraces{x} \]
+  \[ \curlybraces*{\frac{x}{3}} \]
+  \[ \curlybraces[\Bigg]{\frac{x}{3}} \]
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc new = 2021-02-21,%
+    doc parameter = \oarg{size}\marg{quantity},%
+  ]%
+  {%
+    {%
+      doc name = magnitude,%
+      doc description = alias for double bars,%
+    },%
+    {%
+      doc name = magnitude*,%
+      doc description = alias for double bars for fractions,%
+    },%
+    {%
+      doc name = norm,%
+      doc description = alias for double bars,%
+    },%
+    {%
+      doc name = norm*,%
+      doc description = alias for double bars for fractions,%
+    },%
+    {%
+      doc name = absolutevalue,%
+      doc description = alias for single bars,%
+    },%
+    {%
+      doc name = absolutevalue*,%
+      doc description = alias for single bars for fractions,%
+    },%
+  }%
+  Semantic aliases. Use \refCom{magnitude} or \refCom{magnitude*} to
+  typeset the magnitude of a vector.
+\end{docCommands}
+\begin{dispExample}
+  \[ \magnitude{\vec{p}} \]
+  \[ \magnitude{\vec*{p}} \]
+  \[ \magnitude*{\vec{p}_{\symup{final}}} \]
+  \[ \magnitude*{\vec*{p}_{\symup{final}}} \]
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc new = 2021-04-06,%
+  ]%
+  {%
+    {%
+      doc name = parallelto,%
+    },%
+    {%
+      doc name = perpendicularto,%
+    },%
+  }%
+  Commands for geometric relationships, mainly
+  intended for subscripts.
+\end{docCommands}
+\begin{dispExample*}{lefthand ratio=0.6}
+ \( \vec{F}_{\parallelto} + \vec{F}_{\perpendicularto} \)
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{Problems and Annotated Problem Solutions}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docEnvironments}[%
+    doc new = 2021-02-03,%
+    doc parameter = \marg{title},%
+    doclang/environment content = problem,%
+  ]%
+  {%
+    {%
+      doc name = physicsproblem,%
+      doc description = use this variant for vertical lists,%
+    },%
+    {%
+      doc name = physicsproblem*,%
+      doc description = use this variant for in-line lists,%
+    },%
+    {%
+      doc name = parts,%
+      doc description = provides problem parts,%
+    },%
+  }%
+  Provides an environment for stating physics problems. Each problem will 
+  begin on a new page. See the examples for how to handle single and 
+  multiple part problems.
+\end{docEnvironments}
+\begin{docCommand}[doc new = 2012-02-03]{problempart}{}
+  Denotes a part of a problem within a \refEnv{parts}
+  environment.
+\end{docCommand}
+\begin{dispExample*}{sidebyside=false}
+  \begin{physicsproblem}{Problem 1}
+    This is a physics problem with no parts.
+  \end{physicsproblem}
+\end{dispExample*}
+\begin{dispExample*}{sidebyside=false}
+  \begin{physicsproblem}{Problem 2}
+    This is a physics problem with multiple parts.
+    The list is vertical.
+    \begin{parts}
+      \problempart This is the first part.
+      \problempart This is the second part.
+      \problempart This is the third part.
+    \end{parts}
+  \end{physicsproblem}
+\end{dispExample*}
+\begin{dispExample*}{sidebyside=false}
+  \begin{physicsproblem*}{Problem 3}
+    This is a physics problem with multiple parts.
+    The list is in-line.
+    \begin{parts}
+      \problempart This is the first part.
+      \problempart This is the second part.
+      \problempart This is the third part.
+    \end{parts}
+  \end{physicsproblem*}
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docEnvironments}[%
+    doc updated = 2021-02-26,%
+    doc parameter = {},%
+    doclang/environment content = solution steps,%
+  ]%
+  {%
+    {%
+      doc name = physicssolution,%
+      doc description = use this variant for numbered steps,%
+    },%
+    {%
+      doc name = physicssolution*,%
+      doc description = use this variant for unnumbered steps,%
+    },%
+  }%
+  This environment is only for mathematical solutions. The starred 
+  variant omits numbering of steps. See the examples.
+\end{docEnvironments}
+\begin{dispExample}
+  \begin{physicssolution}
+    x &= y + z \\
+    z &= x - y \\
+    y &= x - z
+  \end{physicssolution}
+  \begin{physicssolution*}
+    x &= y + z \\
+    z &= x - y \\
+    y &= x - z
+  \end{physicssolution*}
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc updated = 2012-02-26]{reason}{\marg{reason}}
+  Provides an annotation in a step-by-step solution.
+  Keep reasons short and to the point. Wrap mathematical
+  content in math mode. 
+\end{docCommand}
+\begin{dispExample}
+  \begin{physicssolution}
+    x &= y + z \reason{This is a reason.}     \\
+    z &= x - y \reason{This is a reason too.} \\
+    y &= x - z \reason{final answer}
+  \end{physicssolution}
+  \begin{physicssolution*}
+    x &= y + z \reason{This is a reason.}     \\
+    z &= x - y \reason{This is a reason too.} \\
+    y &= x - z \reason{final answer}
+  \end{physicssolution*}
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+% When writing solutions, remember that the \refEnv{physicssolution} 
+% environment is \emph{only} for mathematical content, not textual 
+% content or explanations. 
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{dispListing*}{sidebyside=false,listing only}
+  \begin{physicsproblem}{Combined Problem and Solution}
+    This is an interesting physics problem.
+    \begin{physicssolution}
+      The solution goes here.
+    \end{physicssolution}
+  \end{physicsproblem}
+\end{dispListing*}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \begin{physicsproblem}{Combined Multipart Problem with Solutions}
+    This is a physics problem with multiple parts.
+    \begin{parts}
+      \problempart This is the first part.
+        \begin{physicssolution}
+          The solution goes here.
+        \end{physicssolution}
+      \problempart This is the second part.
+        \begin{physicssolution}
+          The solution goes here.
+        \end{physicssolution}
+      \problempart This is the third part.
+        \begin{physicssolution}
+          The solution goes here.
+        \end{physicssolution}
+    \end{parts}
+  \end{physicsproblem}
+\end{dispListing*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-02-06]{hilite}{%
+    \oarg{color}\marg{target}\oarg{shape}
+  }%
+  Hilites the desired target, which can be an entire mathematical expression 
+  or a part thereof. The default color is magenta and the default shape is a
+  rectangle.
+\end{docCommand} 
+\begin{dispListing*}{sidebyside=false,listing only}
+  \begin{align*}
+    (\Delta s)^2 &= -(\Delta t)^2 + (\Delta x)^2 + (\Delta y)^2 + 
+                     (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[rounded rectangle] + 
+                     (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[rectangle] + 
+                     (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[ellipse] + 
+                     (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^{\hilite{2}[circle]} &= \hilite[green]{-}[circle]
+                 (\Delta t)^{\hilite[cyan]{2}[circle]}+
+                 (\Delta x)^{\hilite[orange]{2}[circle]} + 
+                 (\Delta y)^{\hilite[blue!50]{2}[circle]} +
+                 (\Delta z)^{\hilite[violet!45]{2}[circle]}
+  \end{align*}
+\end{dispListing*}
+  \begin{align*}
+    (\Delta s)^2 &= -(\Delta t)^2 + (\Delta x)^2 + (\Delta y)^2 + 
+                     (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[rounded rectangle] + 
+                    (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[rectangle] + 
+                    (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^2 &= \hilite{-(\Delta t)^2 + (\Delta x)^2}[ellipse] + 
+                    (\Delta y)^2 + (\Delta z)^2 \\
+    (\Delta s)^{\hilite{2}[circle]} &= \hilite[green]{-}[circle]
+                    (\Delta t)^{\hilite[cyan]{2}[circle]}+
+                    (\Delta x)^{\hilite[orange]{2}[circle]} + 
+                    (\Delta y)^{\hilite[blue!50]{2}[circle]} +
+                    (\Delta z)^{\hilite[violet!45]{2}[circle]}
+  \end{align*}
+\begin{dispListing*}{sidebyside=false,listing only}
+  \begin{align*}
+    \Delta\vec{p} &= \vec{F}_{\sumup{net}}\Delta t \\
+    \hilite[orange]{\Delta\vec{p}}[circle] &= \vec{F}_{\symup{net}}\Delta t \\
+    \Delta\vec{p} &= \hilite[yellow!50]{\vec{F}_{\symup{net}}}
+                     [rounded rectangle]\Delta t \\
+    \Delta\vec{p} &= \vec{F}_{\symup{net}}\hilite[olive!50]
+                     {\Delta t}[rectangle] \\
+    \Delta\vec{p} &= \hilite[cyan!50]{\vec{F}_{\symup{net}}\Delta t}
+                     [ellipse] \\
+    \hilite{\Delta\vec{p}}[rectangle] &= \vec{F}_{\symup{net}}\Delta t
+  \end{align*}
+\end{dispListing*}
+  \begin{align*}
+    \Delta\vec{p} &= \vec{F}_{\symup{net}}\Delta t \\
+    \hilite[orange]{\Delta\vec{p}}[circle] &= \vec{F}_{\symup{net}}
+                     \Delta t \\
+    \Delta\vec{p} &= \hilite[yellow!50]{\vec{F}_{\symup{net}}}
+                     [rounded rectangle]\Delta t \\
+    \Delta\vec{p} &= \vec{F}_{\symup{net}}\hilite[olive!50]{\Delta t}
+                     [rectangle] \\
+    \Delta\vec{p} &= \hilite[cyan!50]{\vec{F}_{\symup{net}}\Delta t}
+                     [ellipse] \\
+    \hilite{\Delta\vec{p}}[rectangle] &= \vec{F}_{\symup{net}}\Delta t
+  \end{align*}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc updated = 2021-02-26]{image}{%
+    \oarg{options}\marg{caption}\marg{label}\marg{image}
+  }%
+  Simplified interface for importing an image. The images are treated 
+  as floats, so they may not appear at the most logically intuitive 
+  place.
+\end{docCommand}
+\begin{dispListing*}{sidebyside=false,listing only,verbatim ignore percent}
+  \image[scale=0.20]{example-image-1x1}
+    {Image shown 20 percent actual size.}{reffig1}
+\end{dispListing*}
+\image[scale=0.20]{example-image-1x1}
+    {Image shown 20 percent actual size.}{reffig1}
+\begin{dispExample*}{sidebyside=false}
+  Figure \ref{reffig1} is nice. 
+  It's captioned \nameref{reffig1} and is on page \pageref{reffig1}.
+\end{dispExample*}
+\begin{dispListing*}{sidebyside=false,listing only,verbatim ignore percent}
+  \image[scale=0.20,angle=45]{example-image-1x1}
+  {Image shown 20 percent actual size and rotated.}{reffig1}
+\end{dispListing*}
+\image[scale=0.20,angle=45]{example-image-1x1}
+{Image shown 20 percent actual size and rotated.}{reffig2}
+\begin{dispExample*}{sidebyside=false}
+  Figure \ref{reffig2} is nice. 
+  It's captioned \nameref{reffig2} and is on page \pageref{reffig2}.
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{Coordinate-Free and Index Notation}
+%
+% Beyond the current level of introductory physics, we need intelligent 
+% commands for typesetting vector and tensor symbols and components 
+% suitable for both coordinate-free and index notations.
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = \oarg{delimiter}\marg{\ensuremath{c_1,\dots,c_n}},%
+  ]%
+  {%
+    {%
+      doc name = colvec,%
+    },%
+    {%
+      doc name = rowvec,%
+    },%
+  }%
+  Typesets column vectors and row vectors as numeric or symbolic components. 
+  There can be more than three components. The delimiter used in the list of 
+  components can be specified; the default is a comma. Units are not 
+  supported, so these are mainly for symbolic work.
+\end{docCommands}
+\begin{dispExample}
+  \[ \colvec{1,2,3} \]
+  \[ \rowvec{1,2,3} \]
+  \[ \colvec{x^0,x^1,x^2,x^3} \]
+  \[ \rowvec{x_0,x_1,x_2,x_3} \]
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc parameter = \marg{symbol},%
+  ]%
+  {%
+    {%
+      doc name = veccomp,%
+      doc description = use this variant for coordinate-free vector notation,%
+    },%
+    {%
+      doc name = veccomp*,%
+      doc description = use this variant for index vector notation,%
+    },%
+    {%
+      doc name = tencomp,%
+      doc description = use this variant for coordinate-free tensor notation,%
+    },%
+    {%
+      doc name = tencomp*,%
+      doc description = use this variant for index tensor notation,%
+    },%
+  }%
+  Conforms to ISO 80000-2 notation.
+\end{docCommands}
+\begin{dispExample}
+  \( \veccomp{r} \)  \\
+  \( \veccomp*{r} \) \\
+  \( \tencomp{r} \)  \\
+  \( \tencomp*{r} \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+  doc parameter = \marg{index}\marg{index},%
+  ]%
+  {%
+    {%
+      doc name = valence,%
+    },%
+    {%
+      doc name = valence*,%
+    },%
+  }%
+  Typesets tensor valence. The starred variant typesets it horizontally.
+\end{docCommands}
+\begin{dispExample}
+  A vector is a \( \valence{1}{0} \) tensor.  \\
+  A vector is a \( \valence*{1}{0} \) tensor.
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+  doc parameter = \marg{slot,slot},%
+  ]%
+  {%
+    {%
+      doc name = contraction,%
+    },%
+    {%
+      doc name = contraction*,%
+    },%
+  }%
+  Typesets tensor contraction in coordinate-free notation. There
+  is no standard on this so we assert one here.
+\end{docCommands}
+\begin{dispExample}
+  \( \contraction{1,2} \)  \\
+  \( \contraction*{1,2} \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}%
+  {%
+    {%
+      doc name = slot,%
+      doc parameter = \oarg{vector},%
+    },%
+    {%
+      doc name = slot*,%
+      doc parameter = \oarg{vector},%
+    },%
+  }%
+  An intelligent slot command for coordinate-free vector
+  and tensor notation. The starred variants suppress the 
+  underscore.
+\end{docCommands}
+\begin{dispExample}
+  \( (\slot) \)          \\
+  \( (\slot[\vec{a}]) \) \\
+  \( (\slot*) \)         \\
+  \( (\slot*[\vec{a}]) \)
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc new=2021-04-06]{diff}{}%
+  Intelligent differential (exterior derivative)
+  operator.
+\end{docCommand}
+\begin{dispExample}
+ \[ 
+   \int x\,dx 
+ \]
+ \[
+   \int x\,\diff{x}
+ \]
+ \[
+   \int x\,\diff*{x} 
+ \]
+\end{dispExample}
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{\GlowScript\ and \VPython\ Program Listings}
+%
+% \href{https://\gsurl}{\GlowScript}\footnote{\href{https://\gsurl}{https://\gsurl}} 
+% and 
+% \href{https://\vpurl}{VPython}\footnote{\href{https://\vpurl}{https://\vpurl}} 
+% are programming environments (both use \href{https://www.python.org}{Python})
+% frequently used in introductory physics to introduce students
+% for modeling physical systems. \mandi\ makes including code listings
+% very simple for students.
+%
+% \subsection{The \texttt{\small glowscriptblock} Environment}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docEnvironment}[%
+      doc updated = 2021-02-26,doclang/environment content=GlowScript code%
+    ]%
+  {glowscriptblock}{\oarg{options}(\meta{link})\marg{caption}}
+  Code placed here is nicely formatted and optionally linked to its source on 
+  \href{https://\gsurl}{\GlowScriptorg}. Clicking anywhere in the code window 
+  will open the link in the default browser. A caption is mandatory, and a 
+  label is internally generated. The listing always begins on a new page. A 
+  URL shortening utility is recommended to keep the URL from getting unruly. 
+  For convenience, |https://| is automatically prepended to the URL and can 
+  thus be omitted. The program must exist in a public, not private, folder.
+\end{docEnvironment}
+\begin{dispListing*}{sidebyside=false}
+\begin{glowscriptblock}(tinyurl.com/y3lnqyn3){A \texttt{GlowScript} Program}
+GlowScript 3.0 vpython
+
+scene.width = 400
+scene.height = 760
+# constants and data
+g = 9.8       # m/s^2
+mball = 0.03  # kg
+Lo = 0.26     # m
+ks = 1.8      # N/m
+deltat = 0.01 # s
+
+# objects (origin is at ceiling)
+ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01, 
+              width=0.2)
+ball = sphere(pos=vector(0,-0.3,0),radius=0.025,
+              color=color.orange)
+spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,
+               color=color.cyan,thickness=0.003,coils=40,
+               radius=0.010)
+
+# initial values
+pball = mball * vector(0,0,0)      # kg m/s
+Fgrav = mball * g * vector(0,-1,0) # N
+t = 0
+
+# improve the display
+scene.autoscale = False        # turn off automatic camera zoom
+scene.center = vector(0,-Lo,0) # move camera down
+scene.waitfor('click')         # wait for a mouse click
+
+# initial calculation loop
+# calculation loop
+while t < 10:
+    rate(100)
+    # we need the stretch
+    s = mag(ball.pos) - Lo
+    # we need the spring force
+    Fspring = ks * s * -norm(spring.axis)
+    Fnet = Fgrav + Fspring
+    pball = pball + Fnet * deltat
+    ball.pos = ball.pos + (pball / mball) * deltat
+    spring.axis = ball.pos - ceiling.pos
+    t = t + deltat
+\end{glowscriptblock}
+\end{dispListing*}
+\begin{glowscriptblock}(tinyurl.com/y3lnqyn3){A \texttt{GlowScript} Program}
+GlowScript 3.0 vpython
+
+scene.width = 400
+scene.height = 760
+# constants and data
+g = 9.8       # m/s^2
+mball = 0.03  # kg
+Lo = 0.26     # m
+ks = 1.8      # N/m
+deltat = 0.01 # s
+
+# objects (origin is at ceiling)
+ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01, 
+              width=0.2)
+ball = sphere(pos=vector(0,-0.3,0),radius=0.025,
+              color=color.orange)
+spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,
+               color=color.cyan,thickness=0.003,coils=40,
+               radius=0.010)
+
+# initial values
+pball = mball * vector(0,0,0)      # kg m/s
+Fgrav = mball * g * vector(0,-1,0) # N
+t = 0
+
+# improve the display
+scene.autoscale = False        # turn off automatic camera zoom
+scene.center = vector(0,-Lo,0) # move camera down
+scene.waitfor('click')         # wait for a mouse click
+
+# initial calculation loop
+# calculation loop
+while t < 10:
+    rate(100)
+    # we need the stretch
+    s = mag(ball.pos) - Lo
+    # we need the spring force
+    Fspring = ks * s * -norm(spring.axis)
+    Fnet = Fgrav + Fspring
+    pball = pball + Fnet * deltat
+    ball.pos = ball.pos + (pball / mball) * deltat
+    spring.axis = ball.pos - ceiling.pos
+    t = t + deltat
+\end{glowscriptblock}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{dispExample*}{sidebyside=false}
+  \GlowScript\ program \ref{gs:1} is nice. 
+  It's called \nameref{gs:1} and is on page \pageref{gs:1}.
+\end{dispExample*}
+%  
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{The \texttt{\small vpythonfile} Command}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommand}[doc updated = 2021-02-26]{vpythonfile}
+  {\oarg{options}\marg{file}\marg{caption}}
+  Command to load and typeset a \VPython\ program. The file is read from 
+  \marg{file}. Clicking anywhere in the code window can optionally open 
+  a link, passed as an option, in the default browser. A caption is mandatory, 
+  and a label is internally generated. The listing always begins on a new page. 
+  A URL shortening utility is recommended to keep the URL from getting unruly. 
+  For convenience, |https://| is automatically prepended to the URL and can 
+  thus be omitted.
+\end{docCommand}
+\begin{dispListing*}{sidebyside=false}
+\vpythonfile[hyperurl interior = https://vpython.org]{vdemo.py}
+  {A \VPython\ Program}
+\end{dispListing*}
+\vpythonfile[hyperurl interior = https://vpython.org]{vdemo.py}
+  {A \VPython\ Program}
+%\iffalse
+%</example>
+%\fi
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{dispExample*}{sidebyside=false}
+  \VPython\ program \ref{vp:1} is nice. 
+  It's called \nameref{vp:1} and is on page \pageref{vp:1}.
+\end{dispExample*}
+%  
+%\iffalse
+%</example>
+%\fi
+%
+% \subsection{The \texttt{\small glowscriptinline} and 
+%   \texttt{\small vpythoninline} Commands}
+%
+%\iffalse
+%<*example>
+%\fi
+\begin{docCommands}[%
+    doc updated = 2021-02-26,%
+  ]%
+  {%
+    {%
+      doc name = glowscriptinline,%
+      doc parameter = \marg{GlowScript code},%
+    },%
+    {%
+      doc name = vpythoninline,%
+      doc parameter = \marg{VPython code},%
+    },%
+  }%
+  Typesets a small, in-line snippet of code. The snippet should be
+  less than one line long.
+\end{docCommands}
+\begin{dispExample*}{sidebyside=false}
+  \GlowScript\ programs begin with \glowscriptinline{GlowScript 3.0 VPython}
+  and \VPython\ programs begin with \vpythoninline{from vpython import *}. 
+\end{dispExample*}
+%\iffalse
+%</example>
+%\fi
+%
+% \StopEventually{}
+%
+% \newgeometry{left=0.50in,right=0.50in,top=1.00in,bottom=1.00in}
+% \subsection{\mandistudent\ Source Code}
+%
+% \iffalse
+%<*package>
+% \fi
+% Definine the package version and date for global use, exploiting the fact
+% that in a \pkg{.sty} file there is now no need for |\makeatletter| and
+% |\makeatother|. This simplifies defining internal commands, with |@| 
+% in the name, that are not for the user to know about.
+%
+%    \begin{macrocode}
+\def\mandistudent at version{\mandi at version}
+\def\mandistudent at date{\mandi at date}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandistudent.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandistudent}
+  [\mandistudent at date\space v\mandistudent at version\space Macros for introductory physics]
+%    \end{macrocode}
+%
+% Define a convenient package version command.
+%
+%    \begin{macrocode}
+\newcommand*{\mandistudentversion}{v\mandistudent at version\space dated \mandistudent at date}
+%    \end{macrocode}
+%
+% Load third party packages, documenting why each one is needed.
+%
+%    \begin{macrocode}
+\RequirePackage{amsmath}             % AMS goodness (don't load amssymb or amsfonts)
+\RequirePackage[inline]{enumitem}    % needed for physicsproblem environment
+\RequirePackage{eso-pic}             % needed for \hilite
+\RequirePackage[g]{esvect}           % needed for nice vector arrow, style g
+\RequirePackage{pgfopts}             % needed for key-value interface
+\RequirePackage{iftex}               % needed for requiring LuaLaTeX
+\RequirePackage{makebox}             % needed for consistent \dirvect; \makebox
+\RequirePackage{mandi}
+\RequirePackage{mathtools}           % needed for paired delimiters; extends amsmath
+\RequirePackage{nicematrix}          % needed for column and row vectors
+\RequirePackage[most]{tcolorbox}     % needed for program listings
+\RequirePackage{tensor}              % needed for index notation
+\RequirePackage{tikz}                % needed for \hilite
+\usetikzlibrary{shapes,fit,tikzmark} % needed for \hilite
+\RequirePackage{unicode-math}        % needed for Unicode support
+\RequirePackage{hyperref}            % load last
+\RequireLuaTeX                       % require this engine
+%    \end{macrocode}
+%
+% Set up the fonts to be consistent with ISO 80000-2 notation.
+% The \href{https://www.ctan.org/pkg/unicode-math}{\pkg{unicode-math}} package 
+% loads the \href{https://www.ctan.org/pkg/fontspec}{\pkg{fontspec}} and 
+% \href{https://www.ctan.org/pkg/xparse}{\pkg{xparse}}
+% packages. Note that \pkg{xparse} is now part of the \LaTeX\ kernel.
+% Because \pkg{unicode-math} is required, all documents using \mandi\ must
+% be compiled with an engine that supports Unicode. We recommend \lualatex.
+%
+%    \begin{macrocode}
+\unimathsetup{math-style=ISO}
+\unimathsetup{warnings-off={mathtools-colon,mathtools-overbracket}}
+%
+% Use normal math letters from Latin Modern Math for familiarity with 
+% textbooks.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase]
+  {Latin Modern Math}    % default math font; better J
+%    \end{macrocode}
+%
+% Borrow from GeX Gyre DejaVu Math for vectors and tensors to get single-storey g.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase,range={sfit/{latin},bfsfit/{latin}}]
+  {TeX Gyre DejaVu Math} % single-storey lowercase g
+%    \end{macrocode}
+%
+% Borrow from GeX Gyre DejaVu Math to get single-storey g.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase,range={sfup/{latin},bfsfup/{latin}}]
+  {TeX Gyre DejaVu Math} % single-storey lowercase g
+%    \end{macrocode}
+% Borrow |mathscr| and |mathbfscr| from XITS Math.\newline
+% See \url{https://tex.stackexchange.com/a/120073/218142}.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase,range={\mathscr,\mathbfscr}]{XITS Math}
+%    \end{macrocode}
+%
+% Get original and bold |mathcal| fonts.\newline
+% See \url{https://tex.stackexchange.com/a/21742/218142}.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase,range={\mathcal,\mathbfcal},StylisticSet=1]{XITS Math}
+%    \end{macrocode}
+%
+% Borrow Greek sfup and sfit letters from STIX Two Math.
+% Since this isn't officially supported in \pkg{unicode-math}
+% we have to manually set this up.
+%
+%    \begin{macrocode}
+\setmathfont[Scale=MatchLowercase,range={"E17C-"E1F6}]{STIX Two Math}
+\newfontfamily{\symsfgreek}{STIX Two Math}
+% I don't understand why \text{...} is necessary.
+\newcommand{\symsfupalpha}      {\text{\symsfgreek{^^^^e196}}}
+\newcommand{\symsfupbeta}       {\text{\symsfgreek{^^^^e197}}}
+\newcommand{\symsfupgamma}      {\text{\symsfgreek{^^^^e198}}}
+\newcommand{\symsfupdelta}      {\text{\symsfgreek{^^^^e199}}}
+\newcommand{\symsfupepsilon}    {\text{\symsfgreek{^^^^e1af}}}
+\newcommand{\symsfupvarepsilon} {\text{\symsfgreek{^^^^e19a}}}
+\newcommand{\symsfupzeta}       {\text{\symsfgreek{^^^^e19b}}}
+\newcommand{\symsfupeta}        {\text{\symsfgreek{^^^^e19c}}}
+\newcommand{\symsfuptheta}      {\text{\symsfgreek{^^^^e19d}}}
+\newcommand{\symsfupvartheta}   {\text{\symsfgreek{^^^^e1b0}}}
+\newcommand{\symsfupiota}       {\text{\symsfgreek{^^^^e19e}}}
+\newcommand{\symsfupkappa}      {\text{\symsfgreek{^^^^e19f}}}
+\newcommand{\symsfuplambda}     {\text{\symsfgreek{^^^^e1a0}}}
+\newcommand{\symsfupmu}         {\text{\symsfgreek{^^^^e1a1}}}
+\newcommand{\symsfupnu}         {\text{\symsfgreek{^^^^e1a2}}}
+\newcommand{\symsfupxi}         {\text{\symsfgreek{^^^^e1a3}}}
+\newcommand{\symsfupomicron}    {\text{\symsfgreek{^^^^e1a4}}}
+\newcommand{\symsfuppi}         {\text{\symsfgreek{^^^^e1a5}}}
+\newcommand{\symsfupvarpi}      {\text{\symsfgreek{^^^^e1b3}}}
+\newcommand{\symsfuprho}        {\text{\symsfgreek{^^^^e1a6}}}
+\newcommand{\symsfupvarrho}     {\text{\symsfgreek{^^^^e1b2}}}
+\newcommand{\symsfupsigma}      {\text{\symsfgreek{^^^^e1a8}}}
+\newcommand{\symsfupvarsigma}   {\text{\symsfgreek{^^^^e1a7}}}
+\newcommand{\symsfuptau}        {\text{\symsfgreek{^^^^e1a9}}}
+\newcommand{\symsfupupsilon}    {\text{\symsfgreek{^^^^e1aa}}}
+\newcommand{\symsfupphi}        {\text{\symsfgreek{^^^^e1b1}}}
+\newcommand{\symsfupvarphi}     {\text{\symsfgreek{^^^^e1ab}}}
+\newcommand{\symsfupchi}        {\text{\symsfgreek{^^^^e1ac}}}
+\newcommand{\symsfuppsi}        {\text{\symsfgreek{^^^^e1ad}}}
+\newcommand{\symsfupomega}      {\text{\symsfgreek{^^^^e1ae}}}
+\newcommand{\symsfupDelta}      {\text{\symsfgreek{^^^^e180}}}
+\newcommand{\symsfupGamma}      {\text{\symsfgreek{^^^^e17f}}}
+\newcommand{\symsfupTheta}      {\text{\symsfgreek{^^^^e18e}}}
+\newcommand{\symsfupLambda}     {\text{\symsfgreek{^^^^e187}}}
+\newcommand{\symsfupXi}         {\text{\symsfgreek{^^^^e18a}}}
+\newcommand{\symsfupPi}         {\text{\symsfgreek{^^^^e18c}}}
+\newcommand{\symsfupSigma}      {\text{\symsfgreek{^^^^e18f}}}
+\newcommand{\symsfupUpsilon}    {\text{\symsfgreek{^^^^e191}}}
+\newcommand{\symsfupPhi}        {\text{\symsfgreek{^^^^e192}}}
+\newcommand{\symsfupPsi}        {\text{\symsfgreek{^^^^e194}}}
+\newcommand{\symsfupOmega}      {\text{\symsfgreek{^^^^e195}}}
+\newcommand{\symsfitalpha}      {\text{\symsfgreek{^^^^e1d8}}}
+\newcommand{\symsfitbeta}       {\text{\symsfgreek{^^^^e1d9}}}
+\newcommand{\symsfitgamma}      {\text{\symsfgreek{^^^^e1da}}}
+\newcommand{\symsfitdelta}      {\text{\symsfgreek{^^^^e1db}}}
+\newcommand{\symsfitepsilon}    {\text{\symsfgreek{^^^^e1f1}}}
+\newcommand{\symsfitvarepsilon} {\text{\symsfgreek{^^^^e1dc}}}
+\newcommand{\symsfitzeta}       {\text{\symsfgreek{^^^^e1dd}}}
+\newcommand{\symsfiteta}        {\text{\symsfgreek{^^^^e1de}}}
+\newcommand{\symsfittheta}      {\text{\symsfgreek{^^^^e1df}}}
+\newcommand{\symsfitvartheta}   {\text{\symsfgreek{^^^^e1f2}}}
+\newcommand{\symsfitiota}       {\text{\symsfgreek{^^^^e1e0}}}
+\newcommand{\symsfitkappa}      {\text{\symsfgreek{^^^^e1e1}}}
+\newcommand{\symsfitlambda}     {\text{\symsfgreek{^^^^e1e2}}}
+\newcommand{\symsfitmu}         {\text{\symsfgreek{^^^^e1e3}}}
+\newcommand{\symsfitnu}         {\text{\symsfgreek{^^^^e1e4}}}
+\newcommand{\symsfitxi}         {\text{\symsfgreek{^^^^e1e5}}}
+\newcommand{\symsfitomicron}    {\text{\symsfgreek{^^^^e1e6}}}
+\newcommand{\symsfitpi}         {\text{\symsfgreek{^^^^e1e7}}}
+\newcommand{\symsfitvarpi}      {\text{\symsfgreek{^^^^e1f5}}}
+\newcommand{\symsfitrho}        {\text{\symsfgreek{^^^^e1e8}}}
+\newcommand{\symsfitvarrho}     {\text{\symsfgreek{^^^^e1f4}}}
+\newcommand{\symsfitsigma}      {\text{\symsfgreek{^^^^e1ea}}}
+\newcommand{\symsfitvarsigma}   {\text{\symsfgreek{^^^^e1e9}}}
+\newcommand{\symsfittau}        {\text{\symsfgreek{^^^^e1eb}}}
+\newcommand{\symsfitupsilon}    {\text{\symsfgreek{^^^^e1ec}}}
+\newcommand{\symsfitphi}        {\text{\symsfgreek{^^^^e1f3}}}
+\newcommand{\symsfitvarphi}     {\text{\symsfgreek{^^^^e1ed}}}
+\newcommand{\symsfitchi}        {\text{\symsfgreek{^^^^e1ee}}}
+\newcommand{\symsfitpsi}        {\text{\symsfgreek{^^^^e1ef}}}
+\newcommand{\symsfitomega}      {\text{\symsfgreek{^^^^e1f0}}}
+\newcommand{\symsfitDelta}      {\text{\symsfgreek{^^^^e1c2}}}
+\newcommand{\symsfitGamma}      {\text{\symsfgreek{^^^^e1c1}}}
+\newcommand{\symsfitTheta}      {\text{\symsfgreek{^^^^e1d0}}}
+\newcommand{\symsfitLambda}     {\text{\symsfgreek{^^^^e1c9}}}
+\newcommand{\symsfitXi}         {\text{\symsfgreek{^^^^e1cc}}}
+\newcommand{\symsfitPi}         {\text{\symsfgreek{^^^^e1ce}}}
+\newcommand{\symsfitSigma}      {\text{\symsfgreek{^^^^e1d1}}}
+\newcommand{\symsfitUpsilon}    {\text{\symsfgreek{^^^^e1d3}}}
+\newcommand{\symsfitPhi}        {\text{\symsfgreek{^^^^e1d4}}}
+\newcommand{\symsfitPsi}        {\text{\symsfgreek{^^^^e1d6}}}
+\newcommand{\symsfitOmega}      {\text{\symsfgreek{^^^^e1d7}}}
+%    \end{macrocode}
+%
+% Tweak the \href{https://www.ctan.org/pkg/esvect}{\pkg{esvect}} package 
+% fonts to get the correct font size. Code provided by |@egreg|.\newline
+% See \url{https://tex.stackexchange.com/a/566676}.
+%
+%    \begin{macrocode}
+\DeclareFontFamily{U}{esvect}{}
+\DeclareFontShape{U}{esvect}{m}{n}{%
+  <-5.5> vect5
+  <5.5-6.5> vect6
+  <6.5-7.5> vect7
+  <7.5-8.5> vect8
+  <8.5-9.5> vect9
+  <9.5-> vect10
+}{}%
+%    \end{macrocode}
+%
+% Write a banner to the console showing the options in use.
+%
+%    \begin{macrocode}
+\typeout{}%
+\typeout{mandistudent: You are using mandistudent \mandistudentversion.}%
+\typeout{mandistudent: This package requires LuaLaTeX.}%
+\typeout{mandistudent: This package changes the default math font(s).}%
+\typeout{mandistudent: This package redefines the \protect\vec\space command.}%
+\typeout{}%
+%    \end{macrocode}
+%
+% A better, intelligent coordinate-free \refCom{vec} command. Note the use of 
+% the |e{_^}| type of optional argument. This accounts for much of the 
+% flexibility and power of this command. Also note the use of the \TeX\ 
+% primitives |\sb{}| and |\sp{}|. Why doesn't it work when I put spaces 
+% around |#3| or |#4|? Because outside of |\ExplSyntaxOn...\ExplSyntaxOff|, 
+% the |_| character has a different catcode and is treated as a mathematical 
+% entity.\newline
+% See \url{https://tex.stackexchange.com/q/554706/218142}.\newline
+% See also \url{https://tex.stackexchange.com/a/531037/218142}.
+%
+%    \begin{macrocode}
+\RenewDocumentCommand{\vec}{ s m e{_^} }{%
+    % Note the \, used to make superscript look better.
+    \IfBooleanTF {#1}
+      {\vv{#2}%      % * gives an arrow
+         % Use \sp{} primitive for superscript.
+         % Adjust superscript for the arrow.
+         \sp{\IfValueT{#4}{\,#4}\vphantom{\smash[t]{\big|}}}
+      }%         
+      {\symbfit{#2}  % no * gives us bold
+         % Use \sp{} primitive for superscript.
+         % No superscript adjustment needed.
+         \sp{\IfValueT{#4}{#4}\vphantom{\smash[t]{\big|}}}
+      }% 
+    % Use \sb{} primitive for subscript.
+    \sb{\IfValueT{#3}{#3}\vphantom{\smash[b]{|}}}
+}%
+%    \end{macrocode}
+%
+% A command for the direction of a vector.
+% We use a slight tweak to get uniform hats that 
+% requires the \href{https://www.ctan.org/pkg/makebox}{\pkg{makebox}} 
+% package.\newline
+% See \url{https://tex.stackexchange.com/a/391204/218142}.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\dirvec}{ s m e{_^} }{%
+    \widehat{\makebox*{\(w\)}{\ensuremath{%
+      \IfBooleanTF {#1}
+        {%
+          #2
+        }%
+        {%
+          \symbfit{#2}
+        }%
+       }%
+      }%
+     }%
+    \sb{\IfValueT{#3}{#3}\vphantom{\smash[b]{|}}}
+    \sp{\IfValueT{#4}{\,#4}\vphantom{\smash[t]{\big|}}}      
+}%
+%    \end{macrocode}
+%
+% The zero vector.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\zerovec}{ s }{%
+  \IfBooleanTF {#1}
+    {\vv{0}}%
+    {\symbfup{0}}%
+}%
+%    \end{macrocode}
+%
+% Notation for column and row vectors.
+% Orginal code provided by |@egreg|.\newline
+% See \url{https://tex.stackexchange.com/a/39054/218142}.
+%
+%    \begin{macrocode}
+\ExplSyntaxOn
+\NewDocumentCommand{\colvec}{ O{,} m }{%
+  \vector_main:nnnn { p } { \\ } { #1 } { #2 }
+}%
+\NewDocumentCommand{\rowvec}{ O{,} m }{%
+  \vector_main:nnnn { p } { & } { #1 } { #2 }
+}%
+\seq_new:N \l__vector_arg_seq
+\cs_new_protected:Npn \vector_main:nnnn #1 #2 #3 #4 {%
+  \seq_set_split:Nnn \l__vector_arg_seq { #3 } { #4 }
+  \begin{#1NiceMatrix}[r]
+    \seq_use:Nnnn \l__vector_arg_seq { #2 } { #2 } { #2 }
+  \end{#1NiceMatrix}
+}%
+\ExplSyntaxOff
+%    \end{macrocode}
+%
+% Students always need this symbol.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\changein}{}{\Delta}
+%    \end{macrocode}
+%
+% Intelligent delimiters provided via the 
+% \href{https://www.ctan.org/pkg/mathtools}{\pkg{mathtools}} package.
+% Use the starred variants for fractions. You can supply optional sizes.
+% Note that default placeholders are used when the argument is empty.
+%
+%    \begin{macrocode}
+\DeclarePairedDelimiterX{\doublebars}[1]{\lVert}{\rVert}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\singlebars}[1]{\lvert}{\rvert}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\anglebrackets}[1]{\langle}{\rangle}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\parentheses}[1]{(}{)}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\squarebrackets}[1]{\lbrack}{\rbrack}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\curlybraces}[1]{\lbrace}{\rbrace}{\ifblank{#1}{\:\cdot\:}{#1}}
+%    \end{macrocode}
+%
+% Some semantic aliases. Because of the way \refCom{vec} and
+% \refCom{dirvec} are defined, I reluctantly decided not to
+% implement a |\magvec| command. It would require accounting
+% for too mamy options. So \refCom{magnitude} is the new
+% solution.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\magnitude}{}{\doublebars}
+\NewDocumentCommand{\norm}{}{\doublebars}
+\NewDocumentCommand{\absolutevalue}{}{\singlebars}
+%    \end{macrocode}
+%
+% Commands for two important geometric relationships. These are meant
+% mainly to be subscripts.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\parallelto}{}
+  {\mkern3mu\vphantom{\perp}\vrule depth 0pt\mkern2mu\vrule depth 0pt\mkern3mu}
+\NewDocumentCommand{\perpendicularto}{}{\perp}
+%    \end{macrocode}
+%
+% An environment for problem statements. The starred variant gives 
+% in-line lists.
+%
+%    \begin{macrocode}
+\NewDocumentEnvironment{physicsproblem}{ m }{%
+  \newpage%
+  \section*{#1}%
+  \newlist{parts}{enumerate}{2}%
+  \setlist[parts]{label=\bfseries(\alph*)}}%
+  {}%
+\NewDocumentEnvironment{physicsproblem*}{ m }{%
+  \newpage%
+  \section*{#1}%
+  \newlist{parts}{enumerate*}{2}%
+  \setlist[parts]{label=\bfseries(\alph*)}}%
+  {}%
+\NewDocumentCommand{\problempart}{}{\item}%
+%    \end{macrocode}
+%
+% An environment for problem solutions.
+%
+%    \begin{macrocode}
+\NewDocumentEnvironment{physicssolution}{ +b }{%
+  % Make equation numbering consecutive through the document.
+  \begin{align}
+    #1
+  \end{align}
+}{}%
+\NewDocumentEnvironment{physicssolution*}{ +b }{%
+  % Make equation numbering consecutive through the document.
+  \begin{align*}
+    #1
+  \end{align*}
+}{}%
+%    \end{macrocode}
+%
+% See \url{https://tex.stackexchange.com/q/570223/218142}.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\reason}{ O{4cm} m }
+  {&&\begin{minipage}{#1}\raggedright\small #2\end{minipage}}
+%    \end{macrocode}
+%
+% Command for highlighting parts of, or entire, mathematical expressions.\newline
+% Original code by anonymous user |@abcdefg|, modified by me.\newline
+%  See \url{https://texample.net/tikz/examples/beamer-arrows/}.\newline
+%  See also \url{https://tex.stackexchange.com/a/406084/218142}.\newline
+%  See also \url{https://tex.stackexchange.com/a/570858/218142}.\newline
+%  See also \url{https://tex.stackexchange.com/a/570789/218142}.\newline
+%  See also \url{https://tex.stackexchange.com/a/79659/218142}.\newline
+%  See also \url{https://tex.stackexchange.com/q/375032/218142}.\newline
+%  See also \url{https://tex.stackexchange.com/a/571744/218142}%
+%
+%    \begin{macrocode}
+\newcounter{tikzhighlightnode}
+\NewDocumentCommand{\hilite}{ O{magenta!60} m O{rectangle} }{%
+  \stepcounter{tikzhighlightnode}%
+  \tikzmarknode{highlighted-node-\number\value{tikzhighlightnode}}{#2}%
+  \edef\temp{%
+    \noexpand\AddToShipoutPictureBG{%
+      \noexpand\begin{tikzpicture}[overlay,remember picture]%
+      \noexpand\iftikzmarkoncurrentpage{highlighted-node-\number\value{tikzhighlightnode}}%
+       \noexpand\node[inner sep=1.0pt,fill=#1,#3,fit=(highlighted-node-\number\value{tikzhighlightnode})]{};%
+      \noexpand\fi
+      \noexpand\end{tikzpicture}%
+    }%
+  }%
+  \temp%
+}%
+%    \end{macrocode}
+%
+% A simplified command for importing images.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\image}{ O{scale=1} m m m }{%
+  \begin{figure}[ht!]
+    \begin{center}%
+      \includegraphics[#1]{#2}%
+    \end{center}%
+    \caption{#3}%
+    \label{#4}%
+  \end{figure}%
+}%
+%    \end{macrocode}
+%
+% Intelligent commands for typesetting vector and tensor symbols and 
+% components suitable for use with both coordinate-free and index 
+% notations. Use starred form for index notation, unstarred form for 
+% coordinate-free.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\veccomp}{ s m }{%
+  % Consider renaming this to \vectorsym.
+  \IfBooleanTF{#1}
+  {%
+    \symnormal{#2}%
+  }%
+  {%
+    \symbfit{#2}%
+  }%
+}%
+\NewDocumentCommand{\tencomp}{ s m }{%
+  % Consider renaming this to \tensororsym.
+  \IfBooleanTF{#1}
+  {%
+    \symsfit{#2}%
+  }%
+  {%
+    \symbfsfit{#2}
+  }%
+}%
+%    \end{macrocode}
+%
+% Command to typeset tensor valence.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\valence}{ s m m }{%
+  \IfBooleanTF{#1}
+    {(#2,#3)}
+    {\binom{#2}{#3}}
+}%
+%    \end{macrocode}
+%
+% Intelligent notation for contraction on pairs of slots.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\contraction}{ s m }{%
+  \IfBooleanTF{#1}
+  {\mathsf{C}}%
+  {\symbb{C}}%
+  _{#2}
+}%
+%    \end{macrocode}
+%
+% Intelligent slot command for coordinate-free tensor notation.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\slot}{ s d[] }{%
+  % d[] must be used because of the way consecutive optional
+  %  arguments are handled. See xparse docs for details.
+  \IfBooleanTF{#1}
+  {%
+    \IfValueTF{#2}
+    {% Insert a vector, but don't show the slot.
+      \smash{\makebox[1.5em]{\ensuremath{#2}}}
+    }%
+    {% No vector, no slot.
+      \smash{\makebox[1.5em]{\ensuremath{}}}
+    }%
+  }%
+  {%
+    \IfValueTF{#2}
+    {% Insert a vector and show the slot.
+      \underline{\smash{\makebox[1.5em]{\ensuremath{#2}}}}
+    }%
+    {% No vector; just show the slot.
+      \underline{\smash{\makebox[1.5em]{\ensuremath{}}}}
+    }%
+  }%
+}%
+%    \end{macrocode}
+%
+% Intelligent differential (exterior derivative) operator.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\diff}{ s }{%
+  \mathop{}\!
+  \IfBooleanTF{#1}
+  {\symbfsfup{d}}%
+  {\symsfup{d}}%
+}%
+%    \end{macrocode}
+%
+% Here is a clever way to color digits in program listsings thanks to
+% Ulrike Fischer.\newline
+% See \url{https://tex.stackexchange.com/a/570717/218142}.
+%
+%    \begin{macrocode}
+\directlua{%
+ luaotfload.add_colorscheme("colordigits",
+   {["8000FF"] = {"one","two","three","four","five","six","seven","eight","nine","zero"}})
+}%
+\newfontfamily\colordigits{DejaVuSansMono}[RawFeature={color=colordigits}]
+%    \end{macrocode}
+%
+% Set up a color scheme and a new code environment for listings. The new colors 
+% are more restful on the eye. All listing commands now use 
+% \href{https://www.ctan.org/pkg/tcolorbox}{\pkg{tcolorbox}}.\newline
+% See \url{https://tex.stackexchange.com/a/529421/218142}.
+%
+%    \begin{macrocode}
+\newfontfamily{\gsfontfamily}{DejaVuSansMono}    % new font for listings
+\definecolor{gsbggray}     {rgb}{0.90,0.90,0.90} % background gray
+\definecolor{gsgray}       {rgb}{0.30,0.30,0.30} % gray
+\definecolor{gsgreen}      {rgb}{0.00,0.60,0.00} % green
+\definecolor{gsorange}     {rgb}{0.80,0.45,0.12} % orange
+\definecolor{gspeach}      {rgb}{1.00,0.90,0.71} % peach
+\definecolor{gspearl}      {rgb}{0.94,0.92,0.84} % pearl
+\definecolor{gsplum}       {rgb}{0.74,0.46,0.70} % plum
+\lstdefinestyle{vpython}{%                       % style for listings
+  backgroundcolor=\color{gsbggray},%             % background color
+  basicstyle=\colordigits\footnotesize,%         % default style
+  breakatwhitespace=true%                        % break at whitespace
+  breaklines=true,%                              % break long lines
+  captionpos=b,%                                 % position caption
+  classoffset=1,%                                % STILL DON'T UNDERSTAND THIS
+  commentstyle=\color{gsgray},%                  % font for comments
+  deletekeywords={print},%                       % delete keywords from the given language
+  emph={self,cls, at classmethod, at property},%       % words to emphasize
+  emphstyle=\color{gsorange}\itshape,%           % font for emphasis
+  escapeinside={(*@}{@*)},%                      % add LaTeX within your code
+  frame=tb,%                                     % frame style
+  framerule=2.0pt,%                              % frame thickness
+  framexleftmargin=5pt,%                         % extra frame left margin
+  %identifierstyle=\sffamily,%                    % style for identifiers
+  keywordstyle=\gsfontfamily\color{gsplum},%     % color for keywords
+  language=Python,%                              % select language
+  linewidth=\linewidth,%                         % width of listings
+  morekeywords={%                                % VPython/GlowScript specific keywords
+    __future__,abs,acos,align,ambient,angle,append,append_to_caption,%
+    append_to_title,arange,arrow,asin,astuple,atan,atan2,attach_arrow,%
+    attach_trail,autoscale,axis,background,billboard,bind,black,blue,border,%
+    bounding_box,box,bumpaxis,bumpmap,bumpmaps,camera,canvas,caption,capture,%
+    ceil,center,clear,clear_trail,click,clone,CoffeeScript,coils,color,combin,%
+    comp,compound,cone,convex,cos,cross,curve,cyan,cylinder,data,degrees,del,%
+    delete,depth,descender,diff_angle,digits,division,dot,draw_complete,%
+    ellipsoid,emissive,end_face_color,equals,explog,extrusion,faces,factorial,%
+    False,floor,follow,font,format,forward,fov,frame,gcurve,gdisplay,gdots,%
+    get_library,get_selected,ghbars,global,GlowScript,graph,graphs,green,gvbars,%
+    hat,headlength,headwidth,height,helix,hsv_to_rgb,index,interval,keydown,%
+    keyup,label,length,lights,line,linecolor,linewidth,logx,logy,lower_left,%
+    lower_right,mag,mag2,magenta,make_trail,marker_color,markers,material,%
+    max,min,mouse,mousedown,mousemove,mouseup,newball,norm,normal,objects,%
+    offset,one,opacity,orange,origin,path,pause,pi,pixel_to_world,pixels,plot,%
+    points,pos,pow,pps,print,print_function,print_options,proj,purple,pyramid,%
+    quad,radians,radius,random,rate,ray,read_local_file,readonly,red,redraw,%
+    retain,rgb_to_hsv,ring,rotate,round,scene,scroll,shaftwidth,shape,shapes,%
+    shininess,show_end_face,show_start_face,sign,sin,size,size_units,sleep,%
+    smooth,space,sphere,sqrt,start,start_face_color,stop,tan,text,textpos,%
+    texture,textures,thickness,title,trail_color,trail_object,trail_radius,%
+    trail_type,triangle,trigger,True,twist,unbind,up,upper_left,upper_right,%
+    userpan,userspin,userzoom,vec,vector,vertex,vertical_spacing,visible,%
+    visual,vpython,VPython,waitfor,white,width,world,xtitle,yellow,yoffset,%
+    ytitle%
+  },%
+  morekeywords={print,None,TypeError},%      % additional keywords
+  morestring=[b]{"""},%                      % treat triple quotes as strings
+  numbers=left,%                             % where to put line numbers
+  numbersep=10pt,%                           % how far line numbers are from code
+  numberstyle=\bfseries\tiny,%               % set to 'none' for no line numbers
+  showstringspaces=false,%                   % show spaces in strings
+  showtabs=false,%                           % show tabs within strings
+  stringstyle=\gsfontfamily\color{gsgreen},% % color for strings
+  upquote=true,%                             % how to typeset quotes
+}%
+%    \end{macrocode}
+%
+% Introduce a new, more intelligent \refEnv{glowscriptblock} environment.
+%
+%    \begin{macrocode}
+\NewTCBListing[auto counter,list inside=gsprogs]{glowscriptblock}
+  { O{} D(){glowscript.org} m }{%
+  breakable,%
+  center,%
+  code = \newpage,%
+  %derivpeach,%
+  enhanced,%
+  hyperurl interior = https://#2,%
+  label = {gs:\thetcbcounter},%
+  left = 8mm,%
+  list entry = \thetcbcounter~~~~~#3,%
+  listing only,%
+  listing style = vpython,%
+  nameref = {#3},%
+  title = \texttt{GlowScript} Program \thetcbcounter: #3,%
+  width = 0.9\textwidth,%
+  {#1},
+}%
+%    \end{macrocode}
+%
+% A new command for generating a list of \GlowScript\ programs.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\listofglowscriptprograms}{}{\tcblistof[\section*]{gsprogs}
+  {List of \texttt{GlowScript} Programs}}%
+%    \end{macrocode}
+%
+% Introduce a new, more intelligent \refCom{vpythonfile} command.
+%
+%    \begin{macrocode}
+\NewTCBInputListing[auto counter,list inside=vpprogs]{\vpythonfile}
+  { O{} m m }{%
+  breakable,%
+  center,%
+  code = \newpage,%
+  %derivgray,%
+  enhanced,%
+  hyperurl interior = https://,%
+  label = {vp:\thetcbcounter},%
+  left = 8mm,%
+  list entry = \thetcbcounter~~~~~#3,%
+  listing file = {#2},%
+  listing only,%
+  listing style = vpython,%
+  nameref = {#3},%
+  title = \texttt{VPython} Program \thetcbcounter: #3,%
+  width = 0.9\textwidth,%
+  {#1},%
+}%
+%    \end{macrocode}
+%
+%  A new command for generating a list of \VPython\ programs.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\listofvpythonprograms}{}{\tcblistof[\section*]{vpprogs}
+  {List of \texttt{VPython} Programs}}%
+%    \end{macrocode}
+%
+% Introduce a new \refCom{glowscriptinline} command.
+%
+%    \begin{macrocode}
+\DeclareTotalTCBox{\glowscriptinline}{ m }{%
+  bottom = 0pt,%
+  bottomrule = 0.0mm,%
+  boxsep = 1.0mm,%
+  colback = gsbggray,%
+  colframe = gsbggray,%
+  left = 0pt,%
+  leftrule = 0.0mm,%
+  nobeforeafter,%
+  right = 0pt,%
+  rightrule = 0.0mm,%
+  sharp corners,%
+  tcbox raise base,%
+  top = 0pt,%
+  toprule = 0.0mm,%
+}{\lstinline[style = vpython]{#1}}%
+%    \end{macrocode}
+%
+% Define \refCom{vpythoninline}, a semantic alias for \VPython\ 
+% in-line listings.
+%
+%    \begin{macrocode}
+\NewDocumentCommand{\vpythoninline}{}{\glowscriptinline}%
+%    \end{macrocode}
+%
+% \restoregeometry
+%
+% \iffalse
+%</package>
+% \fi
+%
+% \Finale


Property changes on: trunk/Master/texmf-dist/source/latex/mandi/mandistudent.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/latex/mandi/mandi.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/mandi/mandi.sty	2021-08-22 10:46:35 UTC (rev 60299)
+++ trunk/Master/texmf-dist/tex/latex/mandi/mandi.sty	2021-08-22 19:58:29 UTC (rev 60300)
@@ -6,1109 +6,848 @@
 %%
 %% mandi.dtx  (with options: `package')
 %% 
-%% Copyright (C) 2018 by Paul J. Heafner <heafnerj at 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.
+%%  Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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'.
+%%  This work has the LPPL maintenance status `maintained'.
 %% 
-%% The Current Maintainer of this work is Paul J. Heafner.
+%%  The Current Maintainer of this work is Paul J. Heafner.
 %% 
 %%  This work consists of the files mandi.dtx
+%%                                  mandistudent.dtx
+%%                                  mandiexp.dtx
 %%                                  mandi.ins
 %%                                  mandi.pdf
-%%                                  README
+%%                                  README.md
 %% 
 %%  and includes the derived files  mandi.sty
-%%                                  vdemo.py.
-%% ---------------------------------------------------------------------------
+%%                                  mandistudent.sty
+%%                                  mandiexp.sty
+%%                                  vdemo.py
+%%  ---------------------------------------------------------------------------
 %% 
-%%\ProvidesPackage{mandi}[2019/01/12 2.7.5 Macros for physics and astronomy]
-\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-
-\RequirePackage{amsmath}
-\RequirePackage{amssymb}
-\RequirePackage{array}
-\RequirePackage{cancel}
-\RequirePackage[dvipsnames]{xcolor}
-\RequirePackage{enumitem}
-\RequirePackage{environ}
-\RequirePackage{esint}
-\RequirePackage[g]{esvect}
-\RequirePackage{etoolbox}
-\RequirePackage{filehook}
-\RequirePackage{extarrows}
-\RequirePackage{float}
-\RequirePackage[T1]{fontenc}
-\RequirePackage{graphicx}
-\RequirePackage{epstopdf}
-\RequirePackage{textcomp}
-\RequirePackage{letltxmacro}
-\RequirePackage{listings}
-\RequirePackage{mathtools}
-\RequirePackage[framemethod=TikZ]{mdframed}
-\RequirePackage{stackengine}
-\RequirePackage{suffix}
-\RequirePackage{tensor}
-\RequirePackage{xargs}
-\RequirePackage{xparse}
-\RequirePackage{xspace}
-\RequirePackage{ifthen}
-\RequirePackage{calligra}
-\RequirePackage[hypertexnames=false]{hyperref}
-\hypersetup{colorlinks=true,urlcolor=blue}
-\DeclareMathAlphabet{\mathcalligra}{T1}{calligra}{m}{n}
-\DeclareFontShape{T1}{calligra}{m}{n}{<->s*[2.2]callig15}{}
-\DeclareGraphicsRule{.tif}{png}{.png}{`convert #1 `basename #1 .tif`.png}
-\DeclareMathAlphabet{\mathpzc}{OT1}{pzc}{m}{it}
-\usetikzlibrary{shadows}
-\definecolor{vbgcolor}{rgb}{1,1,1}           % background for code listings
-\definecolor{vshadowcolor}{rgb}{0.5,0.5,0.5} % shadow for code listings
-\lstdefinestyle{vpython}{%                   % style for code listings
-  language=Python,%                          % select language
-  morekeywords={__future__,division,append,  % VPython/GlowScript specific keywords
-  arange,arrow,astuple,axis,background,black,blue,cyan,green,%
-  magenta,orange,red,white,yellow,border,box,color,comp,%
-  cone,convex,cross,curve,cylinder,degrees,diff_angle,dot,ellipsoid,extrusion,faces,%
-  font,frame,graphs,headlength,height,headwidth,helix,index,interval,label,length,%
-  line,linecolor,mag,mag2,make_trail,material,norm,normal,objects,opacity,points,pos,%
-  print,print_function,proj,pyramid,radians,radius,rate,retain,ring,rotate,scene,%
-  shaftwidth,shape,sign,size,space,sphere,text,trail_object,trail_type,True,twist,up,%
-  vector,visual,width,offset,yoffset,GlowScript,VPython,vpython,trail_color,%
-  trail_radius,pps,clear,False,CoffeeScript,graph,gdisplay,canvas,pause,vec,clone,%
-  compound,vertex,triangle,quad,attach_trail,attach_arrow,textures,bumpmaps,%
-  print_options,get_library,read_local_file},%
-  captionpos=b,%                       % position caption
-  frame=shadowbox,%                    % shadowbox around listing
-  rulesepcolor=\color{vshadowcolor},%  % shadow color
-  basicstyle=\footnotesize,%           % basic font for code listings
-  commentstyle=\bfseries\color{red},   % font for comments
-  keywordstyle=\bfseries\color{blue},% % font for keywords
-  showstringspaces=true,%              % show spaces in strings
-  stringstyle=\bfseries\color{green},% % color for strings
-  numbers=left,%                       % where to put line numbers
-  numberstyle=\tiny,%                  % set to 'none' for no line numbers
-  xleftmargin=20pt,%                   % extra left margin
-  backgroundcolor=\color{vbgcolor},%   % some people find this annoying
-  upquote=true,%                       % how to typeset quotes
-  breaklines=true}%                    % break long lines
-\definecolor{formcolor}{gray}{0.90}    % color for form background
-\newcolumntype{C}[1]{>{\centering}m{#1}}
-\newboolean{@optromanvectors}
-\newboolean{@optboldvectors}
-\newboolean{@optsinglemagbars}
-\newboolean{@optbaseunits}
-\newboolean{@optdrvdunits}
-\newboolean{@optaltnunits}
-\newboolean{@optapproxconsts}
-\newboolean{@optuseradians}
-\setboolean{@optromanvectors}{false}   % this is where you set the default option
-\setboolean{@optboldvectors}{false}    % this is where you set the default option
-\setboolean{@optsinglemagbars}{false}  % this is where you set the default option
-\setboolean{@optbaseunits}{false}      % this is where you set the default option
-\setboolean{@optdrvdunits}{true}       % this is where you set the default option
-\setboolean{@optaltnunits}{false}      % this is where you set the default option
-\setboolean{@optapproxconsts}{false}   % this is where you set the default option
-\setboolean{@optuseradians}{false}     % this is where you set the default option
-\DeclareOption{romanvectors}{\setboolean{@optromanvectors}{true}}
-\DeclareOption{boldvectors}{\setboolean{@optboldvectors}{true}}
-\DeclareOption{singlemagbars}{\setboolean{@optsinglemagbars}{true}}
-\DeclareOption{baseunits}{\setboolean{@optbaseunits}{true}}
-\DeclareOption{drvdunits}{\setboolean{@optdrvdunits}{true}}
-\DeclareOption{approxconsts}{\setboolean{@optapproxconsts}{true}}
-\DeclareOption{useradians}{\setboolean{@optuseradians}{true}}
-\ProcessOptions\relax
-\newcommand*{\mandiversion}{\ifmmode%
-    2.7.5\mbox{ dated }2019/01/12%
-  \else%
-    2.7.5 dated 2019/01/12%
+\def\mandi at version{3.0.0}
+\def\mandi at date{2021-08-21}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandi.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandi}
+  [\mandi at date\space v\mandi at version\space Macros for physical quantities]
+\newcommand*{\mandiversion}{v\mandi at version\space dated \mandi at date}
+\RequirePackage{pgfopts}      % needed for key-value interface
+\RequirePackage{array}        % needed for \checkquantity and \checkconstant
+\RequirePackage{iftex}        % needed for requiring LuaLaTeX
+\RequirePackage{unicode-math} % needed for Unicode support
+\RequireLuaTeX                % require this engine
+\newcommand*{\mandi at selectunits}{}
+\newcommand*{\mandi at selectprecision}{}
+\newcommand*{\mandi at selectapproximate}[2]{#1}    % really \@firstoftwo
+\newcommand*{\mandi at selectprecise}[2]{#2}        % really \@secondoftwo
+\newcommand*{\mandi at selectbaseunits}[3]{#1}      % really \@firstofthree
+\newcommand*{\mandi at selectderivedunits}[3]{#2}   % really \@secondofthree
+\newcommand*{\mandi at selectalternateunits}[3]{#3} % really \@thirdofthree
+\NewDocumentCommand{\alwaysusebaseunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectbaseunits}}%
+\NewDocumentCommand{\alwaysusederivedunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectderivedunits}}%
+\NewDocumentCommand{\alwaysusealternateunits}{}
+  {\renewcommand*{\mandi at selectunits}{\mandi at selectalternateunits}}%
+\NewDocumentCommand{\alwaysuseapproximateconstants}{}
+  {\renewcommand*{\mandi at selectprecision}{\mandi at selectapproximate}}%
+\NewDocumentCommand{\alwaysusepreciseconstants}{}
+  {\renewcommand*{\mandi at selectprecision}{\mandi at selectprecise}}%
+\NewDocumentCommand{\hereusebaseunits}{ m }{\begingroup\alwaysusebaseunits#1\endgroup}%
+\NewDocumentCommand{\hereusederivedunits}{ m }{\begingroup\alwaysusederivedunits#1\endgroup}%
+\NewDocumentCommand{\hereusealternateunits}{ m }{\begingroup\alwaysusealternateunits#1\endgroup}%
+\NewDocumentCommand{\hereuseapproximateconstants}{ m }{\begingroup\alwaysuseapproximateconstants#1\endgroup}%
+\NewDocumentCommand{\hereusepreciseconstants}{ m }{\begingroup\alwaysusepreciseconstants#1\endgroup}%
+\NewDocumentEnvironment{usebaseunits}{}{\alwaysusebaseunits}{}%
+\NewDocumentEnvironment{usederivedunits}{}{\alwaysusederivedunits}{}%
+\NewDocumentEnvironment{usealternateunits}{}{\alwaysusealternateunits}{}%
+\NewDocumentEnvironment{useapproximateconstants}{}{\alwaysuseapproximateconstants}{}%
+\NewDocumentEnvironment{usepreciseconstants}{}{\alwaysusepreciseconstants}{}%
+\newif\ifusingpreciseconstants
+\pgfkeys{%
+  /mandi/options/.cd,
+  initial at setup/.style={%
+    /mandi/options/buffered at units/.initial=alternate,%
+  },%
+  initial at setup,%
+  preciseconstants/.is if=usingpreciseconstants,%
+  units/.is choice,%
+  units/.default=derived,%
+  units/alternate/.style={/mandi/options/buffered at units=alternate},%
+  units/base/.style={/mandi/options/buffered at units=base},%
+  units/derived/.style={/mandi/options/buffered at units=derived},%
+}%
+\ProcessPgfPackageOptions{/mandi/options}
+\typeout{}%
+\typeout{mandi: You are using mandi \mandiversion.}%
+\typeout{mandi: This package requires LuaLaTeX.}%
+\typeout{mandi: Loadtime options...}
+\newcommand*{\mandi at do@setup}{%
+  \csname alwaysuse\pgfkeysvalueof{/mandi/options/buffered at units}units\endcsname%
+  \typeout{mandi: You will get \pgfkeysvalueof{/mandi/options/buffered at units}\space units.}%
+  \ifusingpreciseconstants
+    \alwaysusepreciseconstants
+    \typeout{mandi: You will get precise constants.}%
+  \else
+    \alwaysuseapproximateconstants
+    \typeout{mandi: You will get approximate constants.}%
   \fi
+  \typeout{}%
+}%
+\mandi at do@setup
+\NewDocumentCommand{\mandisetup}{ m }{%
+  \IfValueT{#1}{%
+    \pgfqkeys{/mandi/options}{#1}
+    \typeout{}%
+    \typeout{mandi: mandisetup options...}
+    \mandi at do@setup
   }%
-\typeout{                                                }
-\typeout{mandi: You're using mandi version \mandiversion.}
-\@ifpackageloaded{amssymb}{%
-  \csundef{square}
-  \typeout{mandi: Package amssymb detected. Its \protect\square\space
-  has been redefined.}
-}{%
-  \typeout{mandi: Package amssymb not detected.}
 }%
-\newcommand*{\per}{\ensuremath{/}}
-\newcommand*{\usk}{\ensuremath{\cdot}}
-\newcommand*{\unit}[2]{\ensuremath{{#1}\;{#2}}}
-\newcommand*{\ampere}{\ensuremath{\mathrm{A}}}
-\newcommand*{\arcminute}{\ensuremath{'}}
-\newcommand*{\arcsecond}{\ensuremath{''}}
-\newcommand*{\atomicmassunit}{\ensuremath{\mathrm{u}}}
-\newcommand*{\candela}{\ensuremath{\mathrm{cd}}}
-\newcommand*{\coulomb}{\ensuremath{\mathrm{C}}}
-\newcommand*{\degree}{\ensuremath{^{\circ}}}
-\newcommand*{\electronvolt}{\ensuremath{\mathrm{eV}}}
-\newcommand*{\eV}{\electronvolt}
-\newcommand*{\farad}{\ensuremath{\mathrm{F}}}
-\newcommand*{\henry}{\ensuremath{\mathrm{H}}}
-\newcommand*{\hertz}{\ensuremath{\mathrm{Hz}}}
-\newcommand*{\hour}{\ensuremath{\mathrm{h}}}
-\newcommand*{\joule}{\ensuremath{\mathrm{J}}}
-\newcommand*{\kelvin}{\ensuremath{\mathrm{K}}}
-\newcommand*{\kilogram}{\ensuremath{\mathrm{kg}}}
-\newcommand*{\metre}{\ensuremath{\mathrm{m}}}
-\newcommand*{\minute}{\ensuremath{\mathrm{min}}}
-\newcommand*{\mole}{\ensuremath{\mathrm{mol}}}
-\newcommand*{\newton}{\ensuremath{\mathrm{N}}}
-\newcommand*{\ohm}{\ensuremath{\Omega}}
-\newcommand*{\pascal}{\ensuremath{\mathrm{Pa}}}
-\newcommand*{\radian}{\ensuremath{\mathrm{rad}}}
-\newcommand*{\second}{\ensuremath{\mathrm{s}}}
-\newcommand*{\siemens}{\ensuremath{\mathrm{S}}}
-\newcommand*{\steradian}{\ensuremath{\mathrm{sr}}}
-\newcommand*{\tesla}{\ensuremath{\mathrm{T}}}
-\newcommand*{\volt}{\ensuremath{\mathrm{V}}}
-\newcommand*{\watt}{\ensuremath{\mathrm{W}}}
-\newcommand*{\weber}{\ensuremath{\mathrm{Wb}}}
-\newcommand*{\C}{\coulomb}
-\newcommand*{\F}{\farad}
-\newcommand*{\J}{\joule}
-\newcommand*{\N}{\newton}
-\newcommand*{\Pa}{\pascal}
-\newcommand*{\rad}{\radian}
-\newcommand*{\sr}{\steradian}
-\newcommand*{\T}{\tesla}
-\newcommand*{\V}{\volt}
-\newcommand*{\W}{\watt}
-\newcommand*{\Wb}{\weber}
-\newcommand*{\square}[1]{\ensuremath{{#1}^2}}               % prefix   2
-\newcommand*{\cubic}[1]{\ensuremath{{#1}^3}}                % prefix   3
-\newcommand*{\quartic}[1]{\ensuremath{{#1}^4}}              % prefix   4
-\newcommand*{\reciprocal}[1]{\ensuremath{{#1}^{-1}}}        % prefix  -1
-\newcommand*{\reciprocalsquare}[1]{\ensuremath{{#1}^{-2}}}  % prefix  -2
-\newcommand*{\reciprocalcubic}[1]{\ensuremath{{#1}^{-3}}}   % prefix  -3
-\newcommand*{\reciprocalquartic}[1]{\ensuremath{{#1}^{-4}}} % prefix  -4
-\newcommand*{\squared}{\ensuremath{^2}}                     % postfix  2
-\newcommand*{\cubed}{\ensuremath{^3}}                       % postfix  3
-\newcommand*{\quarted}{\ensuremath{^4}}                     % postfix  4
-\newcommand*{\reciprocaled}{\ensuremath{^{-1}}}             % postfix -1
-\newcommand*{\reciprocalsquared}{\ensuremath{^{-2}}}        % postfix -2
-\newcommand*{\reciprocalcubed}{\ensuremath{^{-3}}}          % postfix -3
-\newcommand*{\reciprocalquarted}{\ensuremath{^{-4}}}        % postfix -4
-\newcommand*{\emptyunit}{\ensuremath{\Box}}
-\newcommand*\mi at exchangeargs[2]{#2#1}%
-\newcommand*\mi at name{}%
-\long\def\mi at name#1#{\romannumeral0\mi at innername{#1}}%
-\newcommand*\mi at innername[2]{%
-  \expandafter\mi at exchangeargs\expandafter{\csname#2\endcsname}{#1}}%
-\begingroup
-\@firstofone{%
-  \endgroup
-  \newcommand*\mi at forkifnull[3]{%
-    \romannumeral\iffalse{\fi\expandafter\@secondoftwo\expandafter%
-    {\expandafter{\string#1}\expandafter\@secondoftwo\string}%
-    \expandafter\@firstoftwo\expandafter{\iffalse}\fi0 #3}{0 #2}}}%
-\newcommand*\selectbaseunit[3]{#1}
-\newcommand*\selectdrvdunit[3]{#2}
-\newcommand*\selectaltnunit[3]{#3}
-\newcommand*\selectunit{}
-\newcommand*\perpusebaseunit{\let\selectunit=\selectbaseunit}
-\newcommand*\perpusedrvdunit{\let\selectunit=\selectdrvdunit}
-\newcommand*\perpusealtnunit{\let\selectunit=\selectaltnunit}
-\newcommand*\hereusebaseunit[1]{%
-  \begingroup\perpusebaseunit#1\endgroup}%
-\newcommand*\hereusedrvdunit[1]{%
-  \begingroup\perpusedrvdunit#1\endgroup}%
-\newcommand*\hereusealtnunit[1]{%
-  \begingroup\perpusealtnunit#1\endgroup}%
-\newenvironment{usebaseunit}{\perpusebaseunit}{}%
-\newenvironment{usedrvdunit}{\perpusedrvdunit}{}%
-\newenvironment{usealtnunit}{\perpusealtnunit}{}%
-\newcommand*\newphysicsquantity{\definephysicsquantity{\newcommand}}
-\newcommand*\redefinephysicsquantity{\definephysicsquantity{\renewcommand}}
-\newcommandx*\definephysicsquantity[5][4=,5=]{%
-  \innerdefinewhatsoeverquantityfork{#3}{#4}{#5}{#1}{#2}{}{[1]}{##1}}%
-\newcommand*\newphysicsconstant{\definephysicsconstant{\newcommand}}
-\newcommand*\redefinephysicsconstant{\definephysicsconstant{\renewcommand}}
-\newcommandx*\definephysicsconstant[7][6=,7=]{%
-  \innerdefinewhatsoeverquantityfork{#5}{#6}{#7}{#1}{#2}{#3}{}{#4}}%
-\newcommand*\innerdefinewhatsoeverquantityfork[3]{%
-  \expandafter\innerdefinewhatsoeverquantity\romannumeral0%
-  \mi at forkifnull{#3}{\mi at forkifnull{#2}{{#1}}{{#2}}{#1}}%
-                 {\mi at forkifnull{#2}{{#1}}{{#2}}{#3}}{#1}}%
-\newcommand*\innerdefinewhatsoeverquantity[8]{%
-  \mi at name#4{#5}#7{\unit{#8}{\selectunit{#3}{#1}{#2}}}%
-  \mi at name#4{#5baseunit}#7{\unit{#8}{#3}}%
-  \mi at name#4{#5drvdunit}#7{\unit{#8}{#1}}%
-  \mi at name#4{#5altnunit}#7{\unit{#8}{#2}}%
-  \mi at name#4{#5onlyunit}{\selectunit{#3}{#1}{#2}}%
-  \mi at name#4{#5onlybaseunit}{\ensuremath{#3}}%
-  \mi at name#4{#5onlydrvdunit}{\ensuremath{#1}}%
-  \mi at name#4{#5onlyaltnunit}{\ensuremath{#2}}%
-  \mi at name#4{#5value}#7{\ensuremath{#8}}%
-  \mi at forkifnull{#7}{%
-    \ifx#4\renewcommand\mi at name\let{#5mathsymbol}=\relax\fi
-    \mi at name\newcommand*{#5mathsymbol}{\ensuremath{#6}}}{}}%
-\ifthenelse{\boolean{@optboldvectors}}
-  {\typeout{mandi: You'll get bold vectors.}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\typeout{mandi: You'll get Roman vectors.}}
-   {\typeout{mandi: You'll get italic vectors.}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\typeout{mandi: You'll get single magnitude bars.}}
-  {\typeout{mandi: You'll get double magnitude bars.}}
-\ifthenelse{\boolean{@optbaseunits}}
-  {\perpusebaseunit %
-   \typeout{mandi: You'll get base units.}}
-  {\ifthenelse{\boolean{@optdrvdunits}}
-     {\perpusedrvdunit %
-      \typeout{mandi: You'll get derived units.}}
-     {\perpusealtnunit %
-      \typeout{mandi: You'll get alternate units.}}}
-\ifthenelse{\boolean{@optapproxconsts}}
-  {\typeout{mandi: You'll get approximate constants.}}
-  {\typeout{mandi: You'll get precise constants.}}
-\ifthenelse{\boolean{@optuseradians}}
-  {\typeout{mandi: You'll get radians in ang mom, ang impulse, and torque.}}
-  {\typeout{mandi: You won't get radians in ang mom, ang impulse, and torque.}}
-\typeout{                                                }
-\ifthenelse{\boolean{@optapproxconsts}}
-  {\newcommand*{\mi at p}[2]{#1}} % approximate value
-  {\newcommand*{\mi at p}[2]{#2}} % precise value
-\newcommand*{\m}{\metre}
-\newcommand*{\kg}{\kilogram}
-\newcommand*{\s}{\second}
-\newcommand*{\A}{\ampere}
-\newcommand*{\K}{\kelvin}
-\newcommand*{\mol}{\mole}
-\newcommand*{\cd}{\candela}
-\newcommand*{\dimdisplacement}{\ensuremath{\mathrm{L}}}
-\newcommand*{\dimmass}{\ensuremath{\mathrm{M}}}
-\newcommand*{\dimduration}{\ensuremath{\mathrm{T}}}
-\newcommand*{\dimcurrent}{\ensuremath{\mathrm{I}}}
-\newcommand*{\dimtemperature}{\ensuremath{\mathrm{\Theta}}}
-\newcommand*{\dimamount}{\ensuremath{\mathrm{N}}}
-\newcommand*{\dimluminous}{\ensuremath{\mathrm{J}}}
-\newcommand*{\infeet}[1]{\unit{#1}{\mathrm{ft}}}
-\newcommand*{\infeetpersecond}[1]{\unit{#1}{\mathrm{ft}\per\s}}
-\newcommand*{\infeetpersecondsquared}[1]{\unit{#1}{\mathrm{ft}\per\s\squared}}
-\newcommand*{\indegrees}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\inFarenheit}[1]{\unit{#1}{\mkern-\thickmuskip\degree\mathrm{F}}}
-\newcommand*{\inCelsius}[1]{\unit{#1}{\mkern-\thickmuskip\degree\mathrm{C}}}
-\newcommand*{\inarcminutes}[1]{\unit{#1}{\mkern-\thickmuskip\arcminute}}
-\newcommand*{\inarcseconds}[1]{\unit{#1}{\mkern-\thickmuskip\arcsecond}}
-\newcommand*{\ineV}[1]{\unit{#1}{\electronvolt}}
-\newcommand*{\ineVocs}[1]{\unit{#1}{\mathrm{eV}\per c^2}}
-\newcommand*{\ineVoc}[1]{\unit{#1}{\mathrm{eV}\per c}}
-\newcommand*{\inMeV}[1]{\unit{#1}{\mathrm{MeV}}}
-\newcommand*{\inMeVocs}[1]{\unit{#1}{\mathrm{MeV}\per c^2}}
-\newcommand*{\inMeVoc}[1]{\unit{#1}{\mathrm{MeV}\per c}}
-\newcommand*{\inGeV}[1]{\unit{#1}{\mathrm{GeV}}}
-\newcommand*{\inGeVocs}[1]{\unit{#1}{\mathrm{GeV}\per c^2}}
-\newcommand*{\inGeVoc}[1]{\unit{#1}{\mathrm{GeV}\per c}}
-\newcommand*{\inamu}[1]{\unit{#1}{\mathrm{u}}}
-\newcommand*{\ingram}[1]{\unit{#1}{\mathrm{g}}}
-\newcommand*{\ingrampercubiccm}[1]{\unit{#1}{\mathrm{g}\per\cubic\mathrm{cm}}}
-\newcommand*{\inAU}[1]{\unit{#1}{\mathrm{AU}}}
-\newcommand*{\inly}[1]{\unit{#1}{\mathrm{ly}}}
-\newcommand*{\incyr}[1]{\unit{#1}{c\usk\mathrm{year}}}
-\newcommand*{\inpc}[1]{\unit{#1}{\mathrm{pc}}}
-\newcommand*{\insolarL}[1]{\unit{#1}{\Lsolar}}
-\newcommand*{\insolarT}[1]{\unit{#1}{\Tsolar}}
-\newcommand*{\insolarR}[1]{\unit{#1}{\Rsolar}}
-\newcommand*{\insolarM}[1]{\unit{#1}{\Msolar}}
-\newcommand*{\insolarF}[1]{\unit{#1}{\Fsolar}}
-\newcommand*{\insolarf}[1]{\unit{#1}{\fsolar}}
-\newcommand*{\insolarMag}[1]{\unit{#1}{\Magsolar}}
-\newcommand*{\insolarmag}[1]{\unit{#1}{\magsolar}}
-\newcommand*{\insolarD}[1]{\unit{#1}{\Dsolar}}
-\newcommand*{\insolard}[1]{\unit{#1}{\dsolar}}
-\newcommand*{\velocityc}[1]{\ensuremath{#1c}}
-\newcommand*{\lorentzfactor}[1]{\ensuremath{#1}}
-\newcommand*{\speed}{\velocity}
-\newphysicsquantity{displacement}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsquantity{mass}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsquantity{duration}%
-  {\s}%
-  [\s]%
-  [\s]
-\newphysicsquantity{current}%
-  {\A}%
-  [\A]%
-  [\A]
-\newphysicsquantity{temperature}%
-  {\K}%
-  [\K]%
-  [\K]
-\newphysicsquantity{amount}%
-  {\mol}%
-  [\mol]%
-  [\mol]
-\newphysicsquantity{luminous}%
-  {\cd}%
-  [\cd]%
-  [\cd]
-\newphysicsquantity{planeangle}%
-  {\m\usk\reciprocal\m}%
-  [\rad]%
-  [\rad]
-\newphysicsquantity{solidangle}%
-  {\m\squared\usk\reciprocalsquare\m}%
-  [\sr]%
-  [\sr]
-\newphysicsquantity{velocity}%
-  {\m\usk\reciprocal\s}%
-  [\m\usk\reciprocal\s]%
-  [\m\per\s]
-\newphysicsquantity{acceleration}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\m\per\s\squared]
-\newphysicsquantity{gravitationalfield}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\N\per\kg]
-\newphysicsquantity{gravitationalpotential}%
-  {\square\m\usk\reciprocalsquare\s}%
-  [\J\per\kg]%
-  [\J\per\kg]
-\newphysicsquantity{momentum}%
-  {\m\usk\kg\usk\reciprocal\s}%
-  [\N\usk\s]%
-  [\kg\usk\m\per\s]
-\newphysicsquantity{impulse}%
-  {\m\usk\kg\usk\reciprocal\s}%
-  [\N\usk\s]%
-  [\N\usk\s]
-\newphysicsquantity{force}%
-  {\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N]%
-  [\N]
-\newphysicsquantity{springstiffness}%
-  {\kg\usk\s\reciprocalsquared}%
-  [\N\per\m]%
-  [\N\per\m]
-\newphysicsquantity{springstretch}%
-  {\m}%
-  []%
-  []
-\newphysicsquantity{area}%
-  {\m\squared}%
-  []%
-  []
-\newphysicsquantity{volume}%
-  {\cubic\m}%
-  []%
-  []
-\newphysicsquantity{linearmassdensity}%
-  {\reciprocal\m\usk\kg}%
-  [\kg\per\m]%
-  [\kg\per\m]
-\newphysicsquantity{areamassdensity}%
-  {\m\reciprocalsquared\usk\kg}%
-  [\kg\per\m\squared]%
-  [\kg\per\m\squared]
-\newphysicsquantity{volumemassdensity}%
-  {\m\reciprocalcubed\usk\kg}%
-  [\kg\per\m\cubed]%
-  [\kg\per\m\cubed]
-\newphysicsquantity{youngsmodulus}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{stress}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{pressure}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\Pa]
-\newphysicsquantity{strain}%
+\NewDocumentCommand{\per}{}{/}
+\NewDocumentCommand{\usk}{}{\cdot}
+\NewDocumentCommand{\unit}{ m m }{{#1}{\,#2}}
+\NewDocumentCommand{\ampere}{}{\symup{A}}
+\NewDocumentCommand{\atomicmassunit}{}{\symup{u}}
+\NewDocumentCommand{\candela}{}{\symup{cd}}
+\NewDocumentCommand{\coulomb}{}{\symup{C}}
+\NewDocumentCommand{\degree}{}{^{\circ}}
+\NewDocumentCommand{\electronvolt}{}{\symup{eV}}
+\NewDocumentCommand{\ev}{}{\electronvolt}
+\NewDocumentCommand{\farad}{}{\symup{F}}
+\NewDocumentCommand{\henry}{}{\symup{H}}
+\NewDocumentCommand{\hertz}{}{\symup{Hz}}
+\NewDocumentCommand{\joule}{}{\symup{J}}
+\NewDocumentCommand{\kelvin}{}{\symup{K}}
+\NewDocumentCommand{\kev}{}{\kiloelectronvolt}
+\NewDocumentCommand{\kiloelectronvolt}{}{\symup{keV}}
+\NewDocumentCommand{\kilogram}{}{\symup{kg}}
+\NewDocumentCommand{\lightspeed}{}{\symup{c}}
+\NewDocumentCommand{\megaelectronvolt}{}{\symup{MeV}}
+\NewDocumentCommand{\meter}{}{\symup{m}}
+\NewDocumentCommand{\metre}{}{\meter}
+\NewDocumentCommand{\mev}{}{\megaelectronvolt}
+\NewDocumentCommand{\mole}{}{\symup{mol}}
+\NewDocumentCommand{\newton}{}{\symup{N}}
+\NewDocumentCommand{\ohm}{}{\symup\Omega}
+\NewDocumentCommand{\pascal}{}{\symup{Pa}}
+\NewDocumentCommand{\radian}{}{\symup{rad}}
+\NewDocumentCommand{\second}{}{\symup{s}}
+\NewDocumentCommand{\siemens}{}{\symup{S}}
+\NewDocumentCommand{\steradian}{}{\symup{sr}}
+\NewDocumentCommand{\tesla}{}{\symup{T}}
+\NewDocumentCommand{\volt}{}{\symup{V}}
+\NewDocumentCommand{\watt}{}{\symup{W}}
+\NewDocumentCommand{\weber}{}{\symup{Wb}}
+\NewDocumentCommand{\tothetwo}{}{^2}             % postfix  2
+\NewDocumentCommand{\tothethree}{}{^3}           % postfix  3
+\NewDocumentCommand{\tothefour}{}{^4}            % postfix  4
+\NewDocumentCommand{\inverse}{}{^{-1}}           % postfix -1
+\NewDocumentCommand{\totheinversetwo}{}{^{-2}}   % postfix -2
+\NewDocumentCommand{\totheinversethree}{}{^{-3}} % postfix -3
+\NewDocumentCommand{\totheinversefour}{}{^{-4}}  % postfix -4
+\NewDocumentCommand{\emptyunit}{}{\mdlgwhtsquare}
+\NewDocumentCommand{\tento}{ m }{10^{#1}}
+\NewDocumentCommand{\timestento}{ m }{\times\tento{#1}}
+\NewDocumentCommand{\xtento}{ m }{\times\tento{#1}}
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newscalarquantity #1#2#3#4
+{%
+  \cs_new:cpn {#1} ##1 {\unit{##1}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1value} ##1 {##1}%
+  \cs_new:cpn {#1baseunits} ##1 {\unit{##1}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1derivedunits} ##1 {\unit{##1}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1alternateunits} ##1 {\unit{##1}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\newscalarquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_newscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewscalarquantity #1#2#3#4
+{%
+  \cs_set:cpn {#1} ##1 {\unit{##1}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1value} ##1 {##1}%
+  \cs_set:cpn {#1baseunits} ##1 {\unit{##1}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1derivedunits} ##1 {\unit{##1}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1alternateunits} ##1 {\unit{##1}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\renewscalarquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_renewscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newvectorquantity #1#2#3#4
+{%
+  \mandi_newscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+  \cs_new:cpn {vector#1} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vector} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1value} ##1 {\mivector{##1}}%
+  \cs_new:cpn {#1vectorvalue} ##1 {\mivector{##1}}%
+  \cs_new:cpn {vector#1baseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectorbaseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1derivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectorderivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1alternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {#1vectoralternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_new:cpn {vector#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_new:cpn {vector#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_new:cpn {vector#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+  \cs_new:cpn {#1vectoronlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\newvectorquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_newvectorquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewvectorquantity #1#2#3#4
+{%
+  \mandi_renewscalarquantity { #1 }{ #2 }{ #3 }{ #4 }%
+  \cs_set:cpn {vector#1} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vector} ##1 {\unit{\mivector{##1}}{\mandi at selectunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1value} ##1 {\mivector{##1}}%
+  \cs_set:cpn {#1vectorvalue} ##1 {\mivector{##1}}%
+  \cs_set:cpn {vector#1baseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectorbaseunits} ##1 {\unit{\mivector{##1}}{\mandi at selectbaseunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1derivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectorderivedunits} ##1 {\unit{\mivector{##1}}{\mandi at selectderivedunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1alternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {#1vectoralternateunits} ##1 {\unit{\mivector{##1}}{\mandi at selectalternateunits{#2}{#3}{#4}}}%
+  \cs_set:cpn {vector#1onlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlybaseunits} {\mandi at selectbaseunits{#2}{#3}{#4}}%
+  \cs_set:cpn {vector#1onlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlyderivedunits} {\mandi at selectderivedunits{#2}{#3}{#4}}%
+  \cs_set:cpn {vector#1onlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+  \cs_set:cpn {#1vectoronlyalternateunits} {\mandi at selectalternateunits{#2}{#3}{#4}}%
+}%
+\NewDocumentCommand{\renewvectorquantity}{ m m O{#2} O{#2} }%
+{%
+  \mandi_renewvectorquantity { #1 }{ #2 }{ #3 }{ #4 }%
+}%
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \mandi_newphysicalconstant #1#2#3#4#5#6#7
+{%
+  \cs_new:cpn {#1} {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1mathsymbol} {#2}%
+  \cs_new:cpn {#1approximatevalue} {#3}%
+  \cs_new:cpn {#1precisevalue} {#4}%
+  \cs_new:cpn {#1baseunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectbaseunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1derivedunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectderivedunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1alternateunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectalternateunits{#5}{#6}{#7}}}%
+  \cs_new:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#5}{#6}{#7}}%
+  \cs_new:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#5}{#6}{#7}}%
+  \cs_new:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#5}{#6}{#7}}%
+}%
+\NewDocumentCommand{\newphysicalconstant}{ m m m m m O{#5} O{#5} }%
+{%
+  \mandi_newphysicalconstant { #1 }{ #2 }{ #3 }{ #4 }{ #5 }{ #6 }{ #7 }%
+}%
+\ExplSyntaxOff
+\ExplSyntaxOn
+\cs_new:Npn \mandi_renewphysicalconstant #1#2#3#4#5#6#7
+{%
+  \cs_set:cpn {#1} {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1mathsymbol} {#2}%
+  \cs_set:cpn {#1approximatevalue} {#3}%
+  \cs_set:cpn {#1precisevalue} {#4}%
+  \cs_set:cpn {#1baseunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectbaseunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1derivedunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectderivedunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1alternateunits}
+    {\unit{\mandi at selectprecision{#3}{#4}}{\mandi at selectalternateunits{#5}{#6}{#7}}}%
+  \cs_set:cpn {#1onlybaseunits} {\mandi at selectbaseunits{#5}{#6}{#7}}%
+  \cs_set:cpn {#1onlyderivedunits} {\mandi at selectderivedunits{#5}{#6}{#7}}%
+  \cs_set:cpn {#1onlyalternateunits} {\mandi at selectalternateunits{#5}{#6}{#7}}%
+}%
+\NewDocumentCommand{\renewphysicalconstant}{ m m m m m O{#5} O{#5} }%
+{%
+  \mandi_renewphysicalconstant { #1 }{ #2 }{ #3 }{ #4 }{ #5 }{ #6 }{ #7 }%
+}%
+\ExplSyntaxOff
+\newvectorquantity{acceleration}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\meter\per\second\tothetwo]%
+\newscalarquantity{amount}%
+  {\mole}%
+\newvectorquantity{angularacceleration}%
+  {\radian\usk\second\totheinversetwo}%
+  [\radian\per\second\tothetwo]%
+  [\radian\per\second\tothetwo]%
+\newscalarquantity{angularfrequency}%
+  {\radian\usk\second\inverse}%
+  [\radian\per\second]%
+  [\radian\per\second]%
+  \newvectorquantity{angularimpulse}%
+    {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \joule\usk\second
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \newton\usk\meter\usk\second
+  \newvectorquantity{angularmomentum}%
+    {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \joule\usk\second
+    [\kilogram\usk\meter\tothetwo\per\second]% % also \newton\usk\meter\usk\second
+\newvectorquantity{angularvelocity}%
+  {\radian\usk\second\inverse}%
+  [\radian\per\second]%
+  [\radian\per\second]%
+\newscalarquantity{area}%
+  {\meter\tothetwo}%
+\newscalarquantity{areachargedensity}%
+  {\ampere\usk\second\usk\meter\totheinversetwo}%
+  [\coulomb\per\meter\tothetwo]%
+  [\coulomb\per\meter\tothetwo]%
+\newscalarquantity{areamassdensity}%
+  {\kilogram\usk\meter\totheinversetwo}%
+  [\kilogram\per\meter\tothetwo]%
+  [\kilogram\per\meter\tothetwo]%
+\newscalarquantity{capacitance}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversetwo}%
+  [\farad]%
+  [\coulomb\per\volt]% % also \coulomb\tothetwo\per\newton\usk\meter, \second\per\ohm
+\newscalarquantity{charge}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]% % also \farad\usk\volt
+\newvectorquantity{cmagneticfield}%
+  {\kilogram\usk\meter\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\newton\per\coulomb]% % also \volt\per\meter
+  [\newton\per\coulomb]%
+\newscalarquantity{conductance}%
+  {\ampere\tothetwo\usk\second\tothethree\usk\kilogram\inverse\usk\meter\totheinversetwo}%
+  [\siemens]%
+  [\ampere\per\volt]%
+\newscalarquantity{conductivity}%
+  {\ampere\tothetwo\usk\second\tothethree\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\siemens\per\meter]%
+  [\ampere\per\volt\usk\meter]%
+\newscalarquantity{conventionalcurrent}%
+  {\ampere}%
+  [\coulomb\per\second]%
+  [\ampere]%
+\newscalarquantity{current}%
+  {\ampere}%
+\newscalarquantity{currentdensity}%
+  {\ampere\usk\meter\totheinversetwo}%
+  [\coulomb\per\second\usk\meter\tothetwo]%
+  [\ampere\per\meter\tothetwo]%
+\newscalarquantity{dielectricconstant}%
   {}%
-  []%
-  []
-\newphysicsquantity{work}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-  [\J]%
-  [\N\usk\m]
-\newphysicsquantity{energy}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-  [\J]%
-  [\N\usk\m]
-\newphysicsquantity{power}%
-  {\m\squared\usk\kg\usk\s\reciprocalcubed}%
-  [\W]%
-  [\J\per\s]
-\newphysicsquantity{specificheatcapacity}%
-  {\J\per\K\usk\kg}%
-  [\J\per\K\usk\kg]%
-  [\J\per\K\usk\kg]
-\newphysicsquantity{angularvelocity}%
-  {\rad\usk\reciprocal\s}%
-  [\rad\per\s]%
-  [\rad\per\s]
-\newphysicsquantity{angularacceleration}%
-  {\rad\usk\s\reciprocalsquared}%
-  [\rad\per\s\squared]%
-  [\rad\per\s\squared]
-\newphysicsquantity{momentofinertia}%
-  {\m\squared\usk\kg}%
-  [\m\squared\usk\kg]%
-  [\J\usk\s\squared]
-\ifthenelse{\boolean{@optuseradians}}
-  {%
-  \newphysicsquantity{angularmomentum}%
-    {\m\squared\usk\kg\usk\reciprocal\s\usk\reciprocal\rad}%
-    [\kg\usk\m\squared\per(\s\usk\rad)]%
-    [\N\usk\m\usk\s\per\rad]
-  \newphysicsquantity{angularimpulse}%
-    {\m\squared\usk\kg\usk\reciprocal\s\usk\reciprocal\rad}%
-    [\J\usk\s\per\rad]%
-    [\N\usk\m\usk\s\per\rad]
-  \newphysicsquantity{torque}%
-    {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\rad}%
-    [\N\usk\m\per\rad]%
-    [\J\per\rad]
-  }%
-  {%
-  \newphysicsquantity{angularmomentum}%
-    {\m\squared\usk\kg\usk\reciprocal\s}%
-    [\kg\usk\m\squared\per\s]%
-    [\N\usk\m\usk\s]
-  \newphysicsquantity{angularimpulse}%
-    {\m\squared\usk\kg\usk\reciprocal\s}%
-    [\J\usk\s]%
-    [\N\usk\m\usk\s]
-  \newphysicsquantity{torque}%
-    {\m\squared\usk\kg\usk\s\reciprocalsquared}%
-    [\N\usk\m]%
-    [\J]
-  }%
-\newphysicsquantity{entropy}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\K}%
-  [\J\per\K]%
-  [\J\per\K]
-\newphysicsquantity{wavelength}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsquantity{wavenumber}%
-  {\reciprocal\m}%
-  [\per\m]%
-  [\per\m]
-\newphysicsquantity{frequency}%
-  {\reciprocal\s}%
+\newvectorquantity{direction}%
+  {}%
+\newvectorquantity{displacement}%
+  {\meter}
+\newscalarquantity{duration}%
+  {\second}%
+\newvectorquantity{electricdipolemoment}%
+  {\ampere\usk\second\usk\meter}%
+  [\coulomb\usk\meter]%
+  [\coulomb\usk\meter]%
+\newvectorquantity{electricfield}%
+  {\kilogram\usk\meter\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt\per\meter]%
+  [\newton\per\coulomb]%
+\newscalarquantity{electricflux}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt\usk\meter]%
+  [\newton\usk\meter\tothetwo\per\coulomb]%
+\newscalarquantity{electricpotential}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{electricpotentialdifference}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{electroncurrent}%
+  {\second\inverse}%
+  [\ensuremath{\symup{e}}\per\second]%
+  [\ensuremath{\symup{e}}\per\second]%
+\newscalarquantity{emf}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversethree}%
+  [\volt]% % also \joule\per\coulomb
+  [\volt]%
+\newscalarquantity{energy}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule]% % also \newton\usk\meter
+  [\joule]%
+\newscalarquantity{energyinev}%
+  {\electronvolt}%
+\newscalarquantity{energyinkev}%
+  {\kiloelectronvolt}%
+\newscalarquantity{energyinmev}%
+  {\megaelectronvolt}%
+\newscalarquantity{energydensity}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\joule\per\meter\tothethree]%
+  [\joule\per\meter\tothethree]%
+\newscalarquantity{energyflux}%
+  {\kilogram\usk\second\totheinversethree}%
+  [\watt\per\meter\tothetwo]%
+  [\watt\per\meter\tothetwo]%
+\newscalarquantity{entropy}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin]%
+  [\joule\per\kelvin]%
+\newvectorquantity{force}%
+  {\kilogram\usk\meter\usk\second\totheinversetwo}%
+  [\newton]%
+  [\newton]% % also \kilogram\usk\meter\per\second\tothetwo
+\newscalarquantity{frequency}%
+  {\second\inverse}%
   [\hertz]%
-  [\hertz]
-\newphysicsquantity{angularfrequency}%
-  {\rad\usk\reciprocal\s}%
-  [\rad\per\s]%
-  [\rad\per\s]
-\newphysicsquantity{charge}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsquantity{permittivity}%
-  {\m\reciprocalcubed\usk\reciprocal\kg\usk\s\reciprocalquarted\usk\A\squared}%
-  [\C\squared\per\N\usk\m\squared]%
-  [\F\per\m]
-\newphysicsquantity{permeability}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\T\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsquantity{electricfield}%
-  {\m\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\per\C]%
-  [\V\per\m]
-\newphysicsquantity{electricdipolemoment}%
-  {\m\usk\s\usk\A}%
-  [\C\usk\m]%
-  [\C\usk\m]
-\newphysicsquantity{electricflux}%
-  {\m\cubed\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\usk\m\squared\per\C]%
-  [\V\usk\m]
-\newphysicsquantity{magneticfield}%
-  {\kg\usk\s\reciprocalsquared\usk\reciprocal\A}%
-  [\T]%
-  [\N\per\C\usk(\m\per\s)] % also \Wb\per\m\squared
-\newphysicsquantity{magneticflux}%
-  {\m\squared\usk\kg\usk\s\reciprocalsquared\usk\reciprocal\A}%
-  [\T\usk\m\squared]%
-  [\volt\usk\s] % also \Wb and \J\per\A
-\newphysicsquantity{cmagneticfield}%
-  {\m\usk\kg\usk\s\reciprocalcubed\usk\reciprocal\A}%
-  [\N\per\C]%
-  [\V\per\m]
-\newphysicsquantity{linearchargedensity}%
-  {\reciprocal\m\usk\s\usk\A}%
-  [\C\per\m]%
-  [\C\per\m]
-\newphysicsquantity{areachargedensity}%
-  {\reciprocalsquare\m\usk\s\usk\A}%
-  [\C\per\square\m]%
-  [\C\per\square\m]
-\newphysicsquantity{volumechargedensity}%
-  {\reciprocalcubic\m\usk\s\usk\A}%
-  [\C\per\cubic\m]%
-  [\C\per\cubic\m]
-\newphysicsquantity{mobility}%
- {\m\squared\usk\kg\usk\s\reciprocalquarted\usk\reciprocal\A}%
- [\m\squared\per\volt\usk\s]%
- [(\m\per\s)\per(\N\per\C)]
-\newphysicsquantity{numberdensity}%
-  {\reciprocalcubic\m}%
-  [\per\cubic\m]%
-  [\per\cubic\m]
-\newphysicsquantity{polarizability}%
-  {\reciprocal\kg\usk\s\quarted\usk\square\A}%
-  [\C\usk\square\m\per\V]%
-  [\C\usk\m\per(\N\per\C)]
-\newphysicsquantity{electricpotential}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocal\A}%
-  [\V]%
-  [\J\per\C]
-\newphysicsquantity{emf}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocal\A}%
-  [\V]%
-  [\J\per\C]
-\newphysicsquantity{dielectricconstant}%
+  [\hertz]%
+\newvectorquantity{gravitationalfield}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\newton\per\kilogram]%
+\newscalarquantity{gravitationalpotential}%
+  {\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule\per\kilogram]%
+  [\joule\per\kilogram]%
+\newscalarquantity{gravitationalpotentialdifference}%
+  {\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule\per\kilogram]%
+  [\joule\per\kilogram]%
+\newvectorquantity{impulse}%
+  {\kilogram\usk\meter\usk\second\inverse}%
+  [\newton\usk\second]%
+  [\newton\usk\second]%
+\newscalarquantity{indexofrefraction}%
   {}%
-  []%
-  []
-\newphysicsquantity{indexofrefraction}%
+\newscalarquantity{inductance}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry]%
+  [\volt\usk\second\per\ampere]% % also \square\meter\usk\kilogram\per\coulomb\tothetwo, \Wb\per\ampere
+\newscalarquantity{linearchargedensity}%
+  {\ampere\usk\second\usk\meter\inverse}%
+  [\coulomb\per\meter]%
+  [\coulomb\per\meter]%
+\newscalarquantity{linearmassdensity}%
+  {\kilogram\usk\meter\inverse}%
+  [\kilogram\per\meter]%
+  [\kilogram\per\meter]%
+\newscalarquantity{luminousintensity}%
+  {\candela}%
+\newscalarquantity{magneticcharge}%
+  {\ampere\usk\meter}% % There is another convention. Be careful!
+\newvectorquantity{magneticdipolemoment}%
+  {\ampere\usk\meter\tothetwo}%
+  [\ampere\usk\meter\tothetwo]%
+  [\joule\per\tesla]%
+\newvectorquantity{magneticfield}%
+  {\kilogram\usk\ampere\inverse\usk\second\totheinversetwo}%
+  [\newton\per\ampere\usk\meter]% % also \Wb\per\meter\tothetwo
+  [\tesla]%
+\newscalarquantity{magneticflux}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversetwo}%
+  [\tesla\usk\meter\tothetwo]%
+  [\volt\usk\second]% % also \Wb and \joule\per\ampere
+\newscalarquantity{mass}%
+  {\kilogram}%
+\newscalarquantity{mobility}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\inverse\usk\second\totheinversefour}%
+  [\meter\tothetwo\per\volt\usk\second]%
+  [\coulomb\usk\meter\per\newton\usk\second]%
+\newscalarquantity{momentofinertia}%
+  {\kilogram\usk\meter\tothetwo}%
+  [\joule\usk\second\tothetwo]%
+  [\kilogram\usk\meter\tothetwo]%
+\newvectorquantity{momentum}%
+  {\kilogram\usk\meter\usk\second\inverse}%
+  [\kilogram\usk\meter\per\second]%
+  [\kilogram\usk\meter\per\second]%
+\newvectorquantity{momentumflux}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\newton\per\meter\tothetwo]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{numberdensity}%
+  {\meter\totheinversethree}%
+  [\per\meter\tothethree]%
+  [\per\meter\tothethree]%
+\newscalarquantity{permeability}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newscalarquantity{permittivity}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\farad\per\meter]%
+  [\coulomb\tothetwo\per\newton\usk\meter\tothetwo]%
+\newscalarquantity{planeangle}%
+  {\meter\usk\meter\inverse}%
+  [\radian]%
+  [\radian]%
+\newscalarquantity{polarizability}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse}%
+  [\coulomb\usk\meter\tothetwo\per\volt]%
+  [\coulomb\tothetwo\usk\meter\per\newton]%
+\newscalarquantity{power}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversethree}%
+  [\watt]%
+  [\joule\per\second]%
+\newvectorquantity{poynting}%
+  {\kilogram\usk\second\totheinversethree}%
+  [\watt\per\meter\tothetwo]%
+  [\watt\per\meter\tothetwo]%
+\newscalarquantity{pressure}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{relativepermeability}
   {}%
-  []%
-  []
-\newphysicsquantity{relativepermittivity}%
+\newscalarquantity{relativepermittivity}%
   {}%
-  []%
-  []
-\newphysicsquantity{relativepermeability}
+\newscalarquantity{resistance}%
+  {\kilogram\usk\meter\tothetwo\usk\ampere\totheinversetwo\usk\second\totheinversethree}%
+  [\ohm]% % also \volt\per\ampere
+  [\ohm]%
+\newscalarquantity{resistivity}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversethree}%
+  [\ohm\usk\meter]%
+  [\volt\usk\meter\per\ampere]%
+\newscalarquantity{solidangle}%
+  {\meter\tothetwo\usk\meter\totheinversetwo}%
+  [\steradian]%
+  [\steradian]%
+\newscalarquantity{specificheatcapacity}%
+  {\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin\usk\kilogram]%
+  [\joule\per\kelvin\usk\kilogram]
+\newscalarquantity{springstiffness}%
+  {\kilogram\usk\second\totheinversetwo}%
+  [\newton\per\meter]%
+  [\newton\per\meter]%
+\newscalarquantity{springstretch}% % This is really just a displacement.
+  {\meter}%
+\newscalarquantity{stress}%
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
+\newscalarquantity{strain}%
   {}%
-  []%
-  []
-\newphysicsquantity{energydensity}%
-  {\m\reciprocaled\usk\kg\usk\reciprocalsquare\s}%
-  [\J\per\cubic\m]%
-  [\J\per\cubic\m]
-\newphysicsquantity{energyflux}%
-  {\kg\usk\s\reciprocalcubed}%
-  [\W\per\m\squared]%
-  [\W\per\m\squared]
-\newphysicsquantity{momentumflux}%
-  {\reciprocal\m\usk\kg\usk\s\reciprocalsquared}%
-  [\N\per\m\squared]%
-  [\N\per\m\squared]
-\newphysicsquantity{electroncurrent}%
-  {\reciprocal\s}%
-  [\ensuremath{\mathrm{e}}\per\s]%
-  [\ensuremath{\mathrm{e}}\per\s]
-\newphysicsquantity{conventionalcurrent}%
-  {\A}%
-  [\A]%
-  [\C\per\s]
-\newphysicsquantity{magneticdipolemoment}%
-  {\square\m\usk\A}%
-  [\A\usk\square\m]%
-  [\J\per\T]
-\newphysicsquantity{currentdensity}%
-  {\reciprocalsquare\m\usk\A}%
-  [\A\per\square\m]%
-  [\C\usk\s\per\square\m]
-\newphysicsquantity{capacitance}%
-  {\reciprocalsquare\m\usk\reciprocal\kg\usk\quartic\s\usk\square\A}%
-  [\F]%
-  [\C\per\V] % also \C\squared\per\N\usk\m, \s\per\ohm
-\newphysicsquantity{inductance}%
-  {\square\m\usk\kg\usk\reciprocalsquare\s\usk\reciprocalsquare\A}%
-  [\henry]%
-  [\volt\usk\s\per\A] % also \square\m\usk\kg\per\C\squared, \Wb\per\A
-\newphysicsquantity{conductivity}%
-  {\reciprocalcubic\m\usk\reciprocal\kg\usk\cubic\s\usk\square\A}%
-  [(\A\per\square\m)\per(\V\per\m)]%
-  [\siemens\per\m]
-\newphysicsquantity{resistivity}%
-  {\cubic\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocalsquare\A}%
-  [\ohm\usk\m]%
-  [(\V\per\m)\per(\A\per\square\m)]
-\newphysicsquantity{resistance}%
-  {\square\m\usk\kg\usk\reciprocalcubic\s\usk\reciprocalsquare\A}%
-  [\ohm]%
-  [\V\per\A]
-\newphysicsquantity{conductance}%
-  {\reciprocalsquare\m\usk\reciprocal\kg\usk\cubic\s\usk\square\A}%
-  [\A\per\V]%
-  [\siemens]
-\newphysicsquantity{magneticcharge}%
-  {\m\usk\A}%
-  [\m\usk\A]%
-  [\m\usk\A]
-\newcommand*{\vectordisplacement}[1]{\ensuremath{\displacement{\mivector{#1}}}}
-\newcommand*{\vectorvelocity}[1]{\ensuremath{\velocity{\mivector{#1}}}}
-\newcommand*{\vectorvelocityc}[1]{\ensuremath{\velocityc{\mivector{#1}}}}
-\newcommand*{\vectoracceleration}[1]{\ensuremath{\acceleration{\mivector{#1}}}}
-\newcommand*{\vectormomentum}[1]{\ensuremath{\momentum{\mivector{#1}}}}
-\newcommand*{\vectorforce}[1]{\ensuremath{\force{\mivector{#1}}}}
-\newcommand*{\vectorgravitationalfield}[1]
-  {\ensuremath{\gravitationalfield{\mivector{#1}}}}
-\newcommand*{\vectorimpulse}[1]{\ensuremath{\impulse{\mivector{#1}}}}
-\newcommand*{\vectorangularvelocity}[1]{\ensuremath{\angularvelocity{\mivector{#1}}}}
-\newcommand*{\vectorangularacceleration}[1]
-  {\ensuremath{\angularacceleration{\mivector{#1}}}}
-\newcommand*{\vectorangularmomentum}[1]{\ensuremath{\angularmomentum{\mivector{#1}}}}
-\newcommand*{\vectorangularimpulse}[1]{\ensuremath{\angularimpulse{\mivector{#1}}}}
-\newcommand*{\vectortorque}[1]{\ensuremath{\torque{\mivector{#1}}}}
-\newcommand*{\vectorwavenumber}[1]{\ensuremath{\wavenumber{\mivector{#1}}}}
-\newcommand*{\vectorelectricfield}[1]{\ensuremath{\electricfield{\mivector{#1}}}}
-\newcommand*{\vectorelectricdipolemoment}[1]
-  {\ensuremath{\electricdipolemoment{\mivector{#1}}}}
-\newcommand*{\vectormagneticfield}[1]{\ensuremath{\magneticfield{\mivector{#1}}}}
-\newcommand*{\vectorcmagneticfield}[1]{\ensuremath{\cmagneticfield{\mivector{#1}}}}
-\newcommand*{\vectormagneticdipolemoment}[1]
-  {\ensuremath{\magneticdipolemoment{\mivector{#1}}}}
-\newcommand*{\vectorcurrentdensity}[1]{\ensuremath{\currentdensity{\mivector{#1}}}}
-  \newcommand*{\lv}{\ensuremath{\left\langle}}
-\newcommand*{\vectorenergyflux}[1]{\ensuremath{\energyflux{\mivector{#1}}}}
-\newcommand*{\vectormomentumflux}[1]{\ensuremath{\momentumflux{\mivector{#1}}}}
-\newcommand*{\poyntingvector}{\vectorenergyflux}
-\newcommand*{\rv}{\ensuremath{\right\rangle}}
-\ExplSyntaxOn % Written in LaTeX3
-\NewDocumentCommand{\magvectncomps}{ m O{} }
-  {%
-    \sum_of_squares:nn { #1 }{ #2 }
-  }%
-\cs_new:Npn \sum_of_squares:nn #1 #2
-  {%
-    \tl_if_empty:nTF { #2 }
-      {%
-        \clist_set:Nn \l_tmpa_clist { #1 }
-        \ensuremath{%
-          \sqrt{\left(\clist_use:Nnnn \l_tmpa_clist { \right)^2+\left( } { \right)^2+
-          \left( } { \right)^2+\left( } \right)^2 }
-        }%
+\newscalarquantity{temperature}%
+  {\kelvin}%
+\newvectorquantity{torque}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\newton\usk\meter]%
+  [\newton\usk\meter]%
+\newvectorquantity{velocity}%
+  {\meter\usk\second\inverse}%
+  [\meter\per\second]%
+  [\meter\per\second]%
+\newvectorquantity{velocityc}%
+  {\lightspeed}%
+  [\lightspeed]%
+  [\lightspeed]%
+\newscalarquantity{volume}%
+  {\meter\tothethree}%
+\newscalarquantity{volumechargedensity}%
+  {\ampere\usk\second\per\meter\totheinversethree}%
+  [\coulomb\per\meter\tothethree]%
+  [\coulomb\per\meter\tothethree]%
+\newscalarquantity{volumemassdensity}%
+  {\kilogram\usk\meter\totheinversethree}%
+  [\kilogram\per\meter\tothethree]%
+  [\kilogram\per\meter\tothethree]%
+\newscalarquantity{wavelength}% % This is really just a displacement.
+  {\meter}%
+\newvectorquantity{wavenumber}%
+  {\meter\inverse}%
+  [\per\meter]%
+  [\per\meter]%
+\newscalarquantity{work}%
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo}%
+  [\joule]% % also \newton\usk\meter but discouraged
+  [\joule]%
+\newscalarquantity{youngsmodulus}% % This is really just a stress.
+  {\kilogram\usk\meter\inverse\usk\second\totheinversetwo}%
+  [\pascal]%
+  [\newton\per\meter\tothetwo]%
+\newphysicalconstant{avogadro}%
+  {\symup{N_A}}%
+  {6\timestento{23}}{6.02214076\timestento{23}}% % exact 2019 value
+  {\mole\inverse}%
+  [\per\mole]%
+  [\per\mole]%
+\newphysicalconstant{biotsavartconstant}% % alias for \mzofp
+  {\symup{\frac{\mu_o}{4\pi}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{bohrradius}%
+  {\symup{a_o}}%
+  {5.3\timestento{-11}}{5.29177210903\timestento{-11}}%
+  {\meter}%
+\newphysicalconstant{boltzmann}%
+  {\symup{k_B}}%
+  {1.4\timestento{-23}}{1.380649\timestento{-23}}% % exact 2019 value
+  {\kilogram\usk\meter\tothetwo\usk\second\totheinversetwo\usk\kelvin\inverse}%
+  [\joule\per\kelvin]%
+  [\joule\per\kelvin]%
+\newphysicalconstant{coulombconstant}% % alias for \oofpez
+  {\symup{\frac{1}{4\pi\epsilon_o}}}%
+  {9\timestento{9}}{8.9875517923\timestento{9}}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversefour}%
+  [\meter\per\farad]%
+  [\newton\usk\meter\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{earthmass}%
+  {\symup{M_{Earth}}}%
+  {6.0\timestento{24}}{5.9722\timestento{24}}%
+  {\kilogram}%
+\newphysicalconstant{earthmoondistance}%
+  {\symup{d_{EM}}}%
+  {3.8\timestento{8}}{3.81550\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{earthradius}%
+  {\symup{R_{Earth}}}%
+  {6.4\timestento{6}}{6.3781\timestento{6}}%
+  {\meter}%
+\newphysicalconstant{earthsundistance}%
+  {\symup{d_{ES}}}%
+  {1.5\timestento{11}}{1.496\timestento{11}}%
+  {\meter}%
+\newphysicalconstant{electroncharge}%
+  {\symup{q_e}}%
+  {-\elementarychargeapproximatevalue}{-\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{electronCharge}%
+  {\symup{Q_e}}%
+  {-\elementarychargeapproximatevalue}{-\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{electronmass}%
+  {\symup{m_e}}%
+  {9.1\timestento{-31}}{9.1093837015\timestento{-31}}%
+  {\kilogram}%
+\newphysicalconstant{elementarycharge}%
+  {\symup{e}}%
+  {1.6\timestento{-19}}{1.602176634\timestento{-19}}% % exact 2019 value
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{finestructure}%
+  {\symup{\alpha}}%
+  {\frac{1}{137}}{7.2973525693\timestento{-3}}%
+  {}%
+\newphysicalconstant{hydrogenmass}%
+  {\symup{m_H}}%
+  {1.7\timestento{-27}}{1.6737236\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{moonearthdistance}%
+  {\symup{d_{ME}}}%
+  {3.8\timestento{8}}{3.81550\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{moonmass}%
+  {\symup{M_{Moon}}}%
+  {7.3\timestento{22}}{7.342\timestento{22}}%
+  {\kilogram}%
+\newphysicalconstant{moonradius}%
+  {\symup{R_{Moon}}}%
+  {1.7\timestento{6}}{1.7371\timestento{6}}%
+  {\meter}%
+\newphysicalconstant{mzofp}%
+  {\symup{\frac{\mu_o}{4\pi}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{neutronmass}%
+  {\symup{m_n}}%
+  {1.7\timestento{-27}}{1.67492749804\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{oofpez}%
+  {\symup{\frac{1}{4\pi\epsilon_o}}}%
+  {9\timestento{9}}{8.9875517923\timestento{9}}%
+  {\kilogram\usk\meter\tothethree\usk\ampere\totheinversetwo\usk\second\totheinversefour}%
+  [\meter\per\farad]%
+  [\newton\usk\meter\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{oofpezcs}%
+  {\symup{\frac{1}{4\pi\epsilon_o c^2}}}%
+  {\tento{-7}}{\tento{-7}}%
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\tesla\usk\meter\tothetwo]%
+  [\newton\usk\second\tothetwo\per\coulomb\tothetwo]%
+\newphysicalconstant{planck}%
+  {\symup{h}}%
+  {6.6\timestento{-34}}{6.62607015\timestento{-34}}% % exact 2019 value
+  {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+  [\joule\usk\second]%
+  [\joule\usk\second]%
+\newphysicalconstant{planckbar}%
+  {\symup{\lower0.18ex\hbox{\mathchar"AF}\mkern-7mu h}}%
+  {1.1\timestento{-34}}{1.054571817\timestento{-34}}%
+  {\kilogram\usk\meter\tothetwo\usk\second\inverse}%
+  [\joule\usk\second]%
+  [\joule\usk\second]
+\newphysicalconstant{planckc}%
+  {\symup{hc}}%
+  {2.0\timestento{-25}}{1.98644586\timestento{-25}}%
+  {\kilogram\usk\meter\tothethree\usk\second\totheinversetwo}%
+  [\joule\usk\meter]%
+  [\joule\usk\meter]%
+\newphysicalconstant{protoncharge}%
+  {\symup{q_p}}%
+  {+\elementarychargeapproximatevalue}{+\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{protonCharge}%
+  {\symup{Q_p}}%
+  {+\elementarychargeapproximatevalue}{+\elementarychargeprecisevalue}%
+  {\ampere\usk\second}%
+  [\coulomb]%
+  [\coulomb]%
+\newphysicalconstant{protonmass}%
+  {\symup{m_p}}%
+  {1.7\timestento{-27}}{1.672621898\timestento{-27}}%
+  {\kilogram}%
+\newphysicalconstant{rydberg}%
+  {\symup{R_{\infty}}}%
+  {1.1\timestento{7}}{1.0973731568160\timestento{7}}%
+  {\meter\inverse}%
+\newphysicalconstant{speedoflight}%
+  {\symup{c}}%
+  {3\timestento{8}}{2.99792458\timestento{8}}% % exact value
+  {\meter\usk\second\inverse}%
+  [\meter\per\second]%
+  [\meter\per\second]
+\newphysicalconstant{stefanboltzmann}%
+  {\symup{\sigma}}%
+  {5.7\timestento{-8}}{5.670374\timestento{-8}}%
+  {\kilogram\usk\second\totheinversethree\usk\kelvin\totheinversefour}%
+  [\watt\per\meter\tothetwo\usk\kelvin\tothefour]%
+  [\watt\per\meter\tothetwo\usk\kelvin\tothefour]
+\newphysicalconstant{sunearthdistance}%
+  {\symup{d_{SE}}}%
+  {1.5\timestento{11}}{1.496\timestento{11}}%
+  {\meter}%
+\newphysicalconstant{sunmass}%
+  {\symup{M_{Sun}}}%
+  {2.0\timestento{30}}{1.98855\timestento{30}}%
+  {\kilogram}%
+\newphysicalconstant{sunradius}%
+  {\symup{R_{Sun}}}%
+  {7.0\timestento{8}}{6.957\timestento{8}}%
+  {\meter}%
+\newphysicalconstant{surfacegravfield}%
+  {\symup{g}}%
+  {9.8}{9.807}%
+  {\meter\usk\second\totheinversetwo}%
+  [\newton\per\kilogram]%
+  [\newton\per\kilogram]%
+\newphysicalconstant{universalgrav}%
+  {\symup{G}}%
+  {6.7\timestento{-11}}{6.67430\timestento{-11}}%
+  {\meter\tothethree\usk\kilogram\inverse\usk\second\totheinversetwo}%
+  [\newton\usk\meter\tothetwo\per\kilogram\tothetwo]% % also \joule\usk\meter\per\kilogram\tothetwo
+  [\newton\usk\meter\tothetwo\per\kilogram\tothetwo]%
+\newphysicalconstant{vacuumpermeability}%
+  {\symup{\mu_o}}%
+  {4\pi\timestento{-7}}{4\pi\timestento{-7}}% % as of 2018 no longer 4\pi\timestento{-7}
+  {\kilogram\usk\meter\usk\ampere\totheinversetwo\usk\second\totheinversetwo}%
+  [\henry\per\meter]%
+  [\tesla\usk\meter\per\ampere]%
+\newphysicalconstant{vacuumpermittivity}%
+  {\symup{\epsilon_o}}%
+  {9\timestento{-12}}{8.854187817\timestento{-12}}%
+  {\ampere\tothetwo\usk\second\tothefour\usk\kilogram\inverse\usk\meter\totheinversethree}%
+  [\farad\per\meter]%
+  [\coulomb\tothetwo\per\newton\usk\meter\tothetwo]%
+\ExplSyntaxOn
+\NewDocumentCommand{\checkquantity}{ m }%
+{%
+  % Works for both scalar and vector quantities (without vector in the name!).
+  \begin{center}
+    \begin{tabular}{%
+        >{\bfseries\small}
+        p{0.5\linewidth}
+        p{0.1\linewidth}
+        p{0.1\linewidth}
+        p{0.1\linewidth}
       }%
-      {%
-        \clist_set:Nn \l_tmpa_clist { #1 }
-        \ensuremath{%
-          \sqrt{\left(\clist_use:Nnnn \l_tmpa_clist {\;{ #2 }\right)^2+\left(} {\;
-          { #2 }\right)^2+\left(} {\;{ #2 }\right)^2+\left(} \;{ #2 }\right)^2}
-        }%
+      name & & & \tabularnewline
+      \ttfamily\footnotesize{\token_to_str:c {#1}} & & & \tabularnewline
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
       }%
-  }%
+      base & derived & alternate \tabularnewline
+      \footnotesize{\( \use:c {#1onlybaseunits}      \)} &
+      \footnotesize{\( \use:c {#1onlyderivedunits}   \)} &
+      \footnotesize{\( \use:c {#1onlyalternateunits} \)}
+    \end{tabular}
+  \end{center}
+}%
+\NewDocumentCommand{\checkconstant}{ m }%
+{%
+  \begin{center}
+    \begin{tabular}{%
+        >{\bfseries\small}
+        p{0.5\linewidth}
+        p{0.1\linewidth}
+        p{0.1\linewidth}
+        p{0.1\linewidth}
+      }%
+      name & & & \tabularnewline
+      \ttfamily\footnotesize{\token_to_str:c {#1}} & & & \tabularnewline
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
+      }%
+      symbol & approximate & precise \tabularnewline
+      \footnotesize{\( \use:c {#1mathsymbol}       \)} &
+      \footnotesize{\( \use:c {#1approximatevalue} \)} &
+      \footnotesize{\( \use:c {#1precisevalue}     \)}
+    \end{tabular}~ % This nonbreaking space is important!
+    \begin{tabular}{%
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
+        >{\bfseries\small}p{0.25\linewidth}
+      }%
+      base & derived & alternate \tabularnewline
+      \footnotesize{\( \use:c {#1onlybaseunits}      \)} &
+      \footnotesize{\( \use:c {#1onlyderivedunits}   \)} &
+      \footnotesize{\( \use:c {#1onlyalternateunits} \)}
+    \end{tabular}
+  \end{center}
+}%
 \ExplSyntaxOff
-\newcommand*{\zerovect}{\vect{0}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\vect}[1]{\ensuremath{\boldsymbol{#1}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\vect}[1]{\ensuremath{\vv{\mathrm{#1}}}}}
-   {\newcommand*{\vect}[1]{\ensuremath{\vv{#1}}}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magvect}[1]{\ensuremath{\absof{\vect{#1}}}}}
-  {\newcommand*{\magvect}[1]{\ensuremath{\magof{\vect{#1}}}}}
-\newcommand*{\magsquaredvect}[1]{\ensuremath{\magvect{#1}\squared}}
-\newcommand*{\magnvect}[2]{\ensuremath{\magvect{#1}^{#2}}}
-\newcommand*{\dmagvect}[1]{\ensuremath{\dx{\magvect{#1}}}}
-\newcommand*{\Dmagvect}[1]{\ensuremath{\Delta\!\magvect{#1}}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{\boldsymbol{#1}}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{\mathrm{#1}}}}}
-   {\newcommand*{\dirvect}[1]{\ensuremath{\widehat{#1}}}}}
-\newcommand*{\direction}[1]{\ensuremath{\mivector{#1}}}
-\newcommand*{\vectordirection}{\direction}
-\newcommand*{\factorvect}[1]{\magvect{#1}\dirvect{#1}}
-\newcommand*{\componentalong}[2]{\ensuremath{\mathrm{comp}_{#1}{#2}}}
-\newcommand*{\expcomponentalong}[2]{\ensuremath{\frac{\vectdotvect{#2}{#1}}
-{\magof{#1}}}}
-\newcommand*{\ucomponentalong}[2]{\ensuremath{\vectdotvect{#2}{#1}}}
-\newcommand*{\projectiononto}[2]{\ensuremath{\mathrm{proj}_{#1}{#2}}}
-\newcommand*{\expprojectiononto}[2]{\ensuremath{%
-  \inparens{\frac{\vectdotvect{#2}{#1}}{\magof{#1}}}\frac{#1}{\magof{#1}}}}
-\newcommand*{\uprojectiononto}[2]{\ensuremath{%
-  \inparens{\vectdotvect{#2}{#1}}#1}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compvect}[2]{\ensuremath{\ssub{\mathrm{#1}}{\(#2\)}}}}
-  {\newcommand*{\compvect}[2]{\ensuremath{\ssub{#1}{\(#2\)}}}}
-\newcommand*{\scompsvect}[1]{\ensuremath{\lv%
-  \compvect{#1}{x},%
-  \compvect{#1}{y},%
-  \compvect{#1}{z}\rv}}
-\newcommand*{\scompsdirvect}[1]{\ensuremath{\lv%
-  \compvect{\widehat{#1}}{x},%
-  \compvect{\widehat{#1}}{y},%
-  \compvect{\widehat{#1}}{z}\rv}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compdirvect}[2]{\ensuremath{%
-    \ssub{\widehat{\mathrm{#1}}}{\(#2\)}}}}
-  {\newcommand*{\compdirvect}[2]{\ensuremath{%
-    \ssub{\widehat{#1}}{\(#2\)}}}}
-\newcommand*{\magvectscomps}[1]{\ensuremath{\sqrt{%
-  \compvect{#1}{x}\squared +%
-  \compvect{#1}{y}\squared +%
-  \compvect{#1}{z}\squared}}}
-\newcommand*{\dvect}[1]{\ensuremath{\mathrm{d}\vect{#1}}}
-\newcommand*{\Dvect}[1]{\ensuremath{\Delta\vect{#1}}}
-\newcommand*{\dirdvect}[1]{\ensuremath{\widehat{\dvect{#1}}}}
-\newcommand*{\dirDvect}[1]{\ensuremath{\widehat{\Dvect{#1}}}}
-\newcommand*{\ddirvect}[1]{\ensuremath{\mathrm{d}\dirvect{#1}}}
-\newcommand*{\ddirection}{\ddirvect}
-\newcommand*{\Ddirvect}[1]{\ensuremath{\Delta\dirvect{#1}}}
-\newcommand*{\Ddirection}{\Ddirvect}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdvect}[1]{\ensuremath{\absof{\dvect{#1}}}}
-   \newcommand*{\magDvect}[1]{\ensuremath{\absof{\Dvect{#1}}}}}
-  {\newcommand*{\magdvect}[1]{\ensuremath{\magof{\dvect{#1}}}}
-   \newcommand*{\magDvect}[1]{\ensuremath{\magof{\Dvect{#1}}}}}
-\newcommand*{\compdvect}[2]{\ensuremath{\mathrm{d}\compvect{#1}{#2}}}
-\newcommand*{\compDvect}[2]{\ensuremath{\Delta\compvect{#1}{#2}}}
-\newcommand*{\scompsdvect}[1]{\ensuremath{\lv%
-  \compdvect{#1}{x},%
-  \compdvect{#1}{y},%
-  \compdvect{#1}{z}\rv}}
-\newcommand*{\scompsDvect}[1]{\ensuremath{\lv%
-  \compDvect{#1}{x},%
-  \compDvect{#1}{y},%
-  \compDvect{#1}{z}\rv}}
-\newcommand*{\dervect}[2]{\ensuremath{\frac{\dvect{#1}}{\mathrm{d}{#2}}}}
-\newcommand*{\Dervect}[2]{\ensuremath{\frac{\Dvect{#1}}{\Delta{#2}}}}
-\newcommand*{\compdervect}[3]{\ensuremath{\dbyd{\compvect{#1}{#2}}{#3}}}
-\newcommand*{\compDervect}[3]{\ensuremath{\DbyD{\compvect{#1}{#2}}{#3}}}
-\newcommand*{\scompsdervect}[2]{\ensuremath{\lv%
-  \compdervect{#1}{x}{#2},%
-  \compdervect{#1}{y}{#2},%
-  \compdervect{#1}{z}{#2}\rv}}
-\newcommand*{\scompsDervect}[2]{\ensuremath{\lv%
-  \compDervect{#1}{x}{#2},%
-  \compDervect{#1}{y}{#2},%
-  \compDervect{#1}{z}{#2}\rv}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdervect}[2]{\ensuremath{\absof{\dervect{#1}{#2}}}}
-   \newcommand*{\magDervect}[2]{\ensuremath{\absof{\Dervect{#1}{#2}}}}}
-  {\newcommand*{\magdervect}[2]{\ensuremath{\magof{\dervect{#1}{#2}}}}
-   \newcommand*{\magDervect}[2]{\ensuremath{\magof{\Dervect{#1}{#2}}}}}
-\newcommand*{\dermagvect}[2]{\ensuremath{\dbyd{\magvect{#1}}{#2}}}
-\newcommand*{\Dermagvect}[2]{\ensuremath{\DbyD{\magvect{#1}}{#2}}}
-\newcommand*{\derdirvect}[2]{\ensuremath{\dbyd{\dirvect{#1}}{#2}}}
-\newcommand*{\derdirection}{\derdirvect}
-\newcommand*{\Derdirvect}[2]{\ensuremath{\DbyD{\dirvect{#1}}{#2}}}
-\newcommand*{\Derdirection}{\Derdirvect}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\vectsub}[2]{\ensuremath{\boldsymbol{#1}_{\text{\tiny{}#2}}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\vectsub}[2]{\ensuremath{\vv{\mathrm{#1}}_{\text{\tiny{#2}}}}}}
-   {\newcommand*{\vectsub}[2]{\ensuremath{\vv{#1}_{\text{\tiny{#2}}}}}}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\compvectsub}[3]{\ensuremath{\ssub{\mathrm{#1}}{#2,\(#3\)}}}}
-  {\newcommand*{\compvectsub}[3]{\ensuremath{\ssub{#1}{#2,\(#3\)}}}}
-\newcommand*{\scompsvectsub}[2]{\ensuremath{\lv%
-  \compvectsub{#1}{#2}{x},%
-  \compvectsub{#1}{#2}{y},%
-  \compvectsub{#1}{#2}{z}\rv}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magvectsub}[2]{\ensuremath{\absof{\vectsub{#1}{#2}}}}}
-  {\newcommand*{\magvectsub}[2]{\ensuremath{\magof{\vectsub{#1}{#2}}}}}
-\newcommand*{\magsquaredvectsub}[2]{\ensuremath{\magvectsub{#1}{#2}\squared}}
-\newcommand*{\magnvectsub}[3]{\ensuremath{\magvectsub{#1}{#2}^{#3}}}
-\newcommand*{\magvectsubscomps}[2]{\ensuremath{\sqrt{%
-    \compvectsub{#1}{#2}{x}\squared +%
-    \compvectsub{#1}{#2}{y}\squared +%
-    \compvectsub{#1}{#2}{z}\squared}}}
-\ifthenelse{\boolean{@optromanvectors}}
-  {\newcommand*{\dirvectsub}[2]{\ensuremath{\ssub{\widehat{\mathrm{#1}}}{#2}}}}
-  {\newcommand*{\dirvectsub}[2]{\ensuremath{\ssub{\widehat{#1}}{#2}}}}
-\newcommand*{\dvectsub}[2]{\ensuremath{\mathrm{d}\vectsub{#1}{#2}}}
-\newcommand*{\Dvectsub}[2]{\ensuremath{\Delta\vectsub{#1}{#2}}}
-\newcommand*{\compdvectsub}[3]{\ensuremath{\mathrm{d}\compvectsub{#1}{#2}{#3}}}
-\newcommand*{\compDvectsub}[3]{\ensuremath{\Delta\compvectsub{#1}{#2}{#3}}}
-\newcommand*{\scompsdvectsub}[2]{\ensuremath{\lv%
-  \compdvectsub{#1}{#2}{x},%
-  \compdvectsub{#1}{#2}{y},%
-  \compdvectsub{#1}{#2}{z}\rv}}
-\newcommand*{\scompsDvectsub}[2]{\ensuremath{\lv%
-  \compDvectsub{#1}{#2}{x},%
-  \compDvectsub{#1}{#2}{y},%
-  \compDvectsub{#1}{#2}{z}\rv}}
-\newcommand*{\dermagvectsub}[3]{\ensuremath{\dbyd{\magvectsub{#1}{#2}}{#3}}}
-\newcommand*{\Dermagvectsub}[3]{\ensuremath{\DbyD{\magvectsub{#1}{#2}}{#3}}}
-\newcommand*{\dervectsub}[3]{\ensuremath{\dbyd{\vectsub{#1}{#2}}{#3}}}
-\newcommand*{\Dervectsub}[3]{\ensuremath{\DbyD{\vectsub{#1}{#2}}{#3}}}
-\ifthenelse{\boolean{@optsinglemagbars}}
-  {\newcommand*{\magdervectsub}[3]{\ensuremath{\absof{\dervectsub{#1}{#2}{#3}}}}
-   \newcommand*{\magDervectsub}[3]{\ensuremath{\absof{\Dervectsub{#1}{#2}{#3}}}}}
-  {\newcommand*{\magdervectsub}[3]{\ensuremath{\magof{\dervectsub{#1}{#2}{#3}}}}
-   \newcommand*{\magDervectsub}[3]{\ensuremath{\magof{\Dervectsub{#1}{#2}{#3}}}}}
-\newcommand*{\compdervectsub}[4]{\ensuremath{\dbyd{\compvectsub{#1}{#2}{#3}}{#4}}}
-\newcommand*{\compDervectsub}[4]{\ensuremath{\DbyD{\compvectsub{#1}{#2}{#3}}{#4}}}
-\newcommand*{\scompsdervectsub}[3]{\ensuremath{\lv%
-  \compdervectsub{#1}{#2}{x}{#3},%
-  \compdervectsub{#1}{#2}{y}{#3},%
-  \compdervectsub{#1}{#2}{z}{#3}\rv}}
-\newcommand*{\scompsDervectsub}[3]{\ensuremath{\lv%
-  \compDervectsub{#1}{#2}{x}{#3},%
-  \compDervectsub{#1}{#2}{y}{#3},%
-  \compDervectsub{#1}{#2}{z}{#3}\rv}}
-\newcommand*{\vectdotvect}[2]{\ensuremath{{#1}\cdot{#2}}}
-\newcommand*{\vectDotvect}[2]{\ensuremath{{#1}\bullet{#2}}}
-\newcommand*{\vectdotsvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsvect{#2}}}
-\newcommand*{\vectDotsvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsvect{#2}}}
-\newcommand*{\vectdotevect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compvect{#2}{x}+%
-  \compvect{#1}{y}\compvect{#2}{y}+%
-  \compvect{#1}{z}\compvect{#2}{z}}}
-\newcommand*{\vectdotsdvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsdvect{#2}}}
-\newcommand*{\vectDotsdvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsdvect{#2}}}
-\newcommand*{\vectdotsDvect}[2]{\ensuremath{\scompsvect{#1}\cdot\scompsDvect{#2}}}
-\newcommand*{\vectDotsDvect}[2]{\ensuremath{\scompsvect{#1}\bullet\scompsDvect{#2}}}
-\newcommand*{\vectdotedvect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compdvect{#2}{x}+%
-  \compvect{#1}{y}\compdvect{#2}{y}+%
-  \compvect{#1}{z}\compdvect{#2}{z}}}
-\newcommand*{\vectdoteDvect}[2]{\ensuremath{%
-  \compvect{#1}{x}\compDvect{#2}{x}+%
-  \compvect{#1}{y}\compDvect{#2}{y}+%
-  \compvect{#1}{z}\compDvect{#2}{z}}}
-\newcommand*{\vectsubdotsvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotevectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdotsdvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsdvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsdvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsdvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotsDvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsDvectsub{#3}{#4}}}
-\newcommand*{\vectsubDotsDvectsub}[4]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsDvectsub{#3}{#4}}}
-\newcommand*{\vectsubdotedvectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compdvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compdvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compdvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdoteDvectsub}[4]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compDvectsub{#3}{#4}{x}+%
-  \compvectsub{#1}{#2}{y}\compDvectsub{#3}{#4}{y}+%
-  \compvectsub{#1}{#2}{z}\compDvectsub{#3}{#4}{z}}}
-\newcommand*{\vectsubdotsdvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsdvect{#3}}}
-\newcommand*{\vectsubDotsdvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsdvect{#3}}}
-\newcommand*{\vectsubdotsDvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\cdot\scompsDvect{#3}}}
-\newcommand*{\vectsubDotsDvect}[3]{\ensuremath{%
-  \scompsvectsub{#1}{#2}\bullet\scompsDvect{#3}}}
-\newcommand*{\vectsubdotedvect}[3]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compdvect{#3}{x}+%
-  \compvectsub{#1}{#2}{y}\compdvect{#3}{y}+%
-  \compvectsub{#1}{#2}{z}\compdvect{#3}{z}}}
-\newcommand*{\vectsubdoteDvect}[3]{\ensuremath{%
-  \compvectsub{#1}{#2}{x}\compDvect{#3}{x}+%
-  \compvectsub{#1}{#2}{y}\compDvect{#3}{y}+%
-  \compvectsub{#1}{#2}{z}\compDvect{#3}{z}}}
-\newcommand*{\dervectdotsvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\cdot\scompsvect{#3}}}
-\newcommand*{\dervectDotsvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\bullet\scompsvect{#3}}}
-\newcommand*{\Dervectdotsvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\cdot\scompsvect{#3}}}
-\newcommand*{\DervectDotsvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\bullet\scompsvect{#3}}}
-\newcommand*{\dervectdotevect}[3]{\ensuremath{%
-  \compdervect{#1}{x}{#2}\compvect{#3}{x}+%
-  \compdervect{#1}{y}{#2}\compvect{#3}{y}+%
-  \compdervect{#1}{z}{#2}\compvect{#3}{z}}}
-\newcommand*{\Dervectdotevect}[3]{\ensuremath{%
-  \compDervect{#1}{x}{#2}\compvect{#3}{x}+%
-  \compDervect{#1}{y}{#2}\compvect{#3}{y}+%
-  \compDervect{#1}{z}{#2}\compvect{#3}{z}}}
-\newcommand*{\vectdotsdervect}[3]{\ensuremath{%
-  \scompsvect{#1}\cdot\scompsdervect{#2}{#3}}}
-\newcommand*{\vectDotsdervect}[3]{\ensuremath{%
-  \scompsvect{#1}\bullet\scompsdervect{#2}{#3}}}
-\newcommand*{\vectdotsDervect}[3]{\ensuremath{%
-  \scompsvect{#1}\cdot\scompsDervect{#2}{#3}}}
-\newcommand*{\vectDotsDervect}[3]{\ensuremath{%
-  \scompsvect{#1}\bullet\scompsDervect{#2}{#3}}}
-\newcommand*{\vectdotedervect}[3]{\ensuremath{%
-  \compvect{#1}{x}\compdervect{#2}{x}{#3}+%
-  \compvect{#1}{y}\compdervect{#2}{y}{#3}+%
-  \compvect{#1}{z}\compdervect{#2}{z}{#3}}}
-\newcommand*{\vectdoteDervect}[3]{\ensuremath{%
-  \compvect{#1}{x}\compDervect{#2}{x}{#3}+%
-  \compvect{#1}{y}\compDervect{#2}{y}{#3}+%
-  \compvect{#1}{z}\compDervect{#2}{z}{#3}}}
-\newcommand*{\dervectdotsdvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\cdot\scompsdvect{#3}}}
-\newcommand*{\dervectDotsdvect}[3]{\ensuremath{%
-  \scompsdervect{#1}{#2}\bullet\scompsdvect{#3}}}
-\newcommand*{\DervectdotsDvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\cdot\scompsDvect{#3}}}
-\newcommand*{\DervectDotsDvect}[3]{\ensuremath{%
-  \scompsDervect{#1}{#2}\bullet\scompsDvect{#3}}}
-\newcommand*{\dervectdotedvect}[3]{\ensuremath{%
-  \compdervect{#1}{x}{#2}\compdvect{#3}{x}+%
-  \compdervect{#1}{y}{#2}\compdvect{#3}{y}+%
-  \compdervect{#1}{z}{#2}\compdvect{#3}{z}}}
-\newcommand*{\DervectdoteDvect}[3]{\ensuremath{%
-  \compDervect{#1}{x}{#2}\compDvect{#3}{x}+%
-  \compDervect{#1}{y}{#2}\compDvect{#3}{y}+%
-  \compDervect{#1}{z}{#2}\compDvect{#3}{z}}}
-\newcommand*{\vectcrossvect}[2]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}}}
-\newcommand*{\ltriplecross}[3]{\ensuremath{%
-  \inparens{{#1}\boldsymbol{\times}{#2}}\boldsymbol{\times}{#3}}}
-\newcommand*{\rtriplecross}[3]{\ensuremath{{#1}\boldsymbol{\times}%
-  \inparens{{#2}\boldsymbol{\times}{#3}}}}
-\newcommand*{\ltriplescalar}[3]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}\cdot{#3}}}
-\newcommand*{\ltripleScalar}[3]{\ensuremath{%
-  {#1}\boldsymbol{\times}{#2}\bullet{#3}}}
-\newcommand*{\rtriplescalar}[3]{\ensuremath{%
-  {#1}\cdot{#2}\boldsymbol{\times}{#3}}}
-\newcommand*{\rtripleScalar}[3]{\ensuremath{%
-  {#1}\bullet{#2}\boldsymbol{\times}{#3}}}
-\newcommand*{\ezero}{\ensuremath{\boldsymbol{e}_0}}
-\newcommand*{\eone}{\ensuremath{\boldsymbol{e}_1}}
-\newcommand*{\etwo}{\ensuremath{\boldsymbol{e}_2}}
-\newcommand*{\ethree}{\ensuremath{\boldsymbol{e}_3}}
-\newcommand*{\efour}{\ensuremath{\boldsymbol{e}_4}}
-\newcommand*{\ek}[1]{\ensuremath{\boldsymbol{e}_{#1}}}
-\newcommand*{\e}{\ek}
-\newcommand*{\uezero}{\ensuremath{\widehat{\boldsymbol{e}}_0}}
-\newcommand*{\ueone}{\ensuremath{\widehat{\boldsymbol{e}}_1}}
-\newcommand*{\uetwo}{\ensuremath{\widehat{\boldsymbol{e}}_2}}
-\newcommand*{\uethree}{\ensuremath{\widehat{\boldsymbol{e}}_3}}
-\newcommand*{\uefour}{\ensuremath{\widehat{\boldsymbol{e}}_4}}
-\newcommand*{\uek}[1]{\ensuremath{\widehat{\boldsymbol{e}}_{#1}}}
-\newcommand*{\ue}{\uek}
-\newcommand*{\ezerozero}{\ek{00}}
-\newcommand*{\ezeroone}{\ek{01}}
-\newcommand*{\ezerotwo}{\ek{02}}
-\newcommand*{\ezerothree}{\ek{03}}
-\newcommand*{\ezerofour}{\ek{04}}
-\newcommand*{\eoneone}{\ek{11}}
-\newcommand*{\eonetwo}{\ek{12}}
-\newcommand*{\eonethree}{\ek{13}}
-\newcommand*{\eonefour}{\ek{14}}
-\newcommand*{\etwoone}{\ek{21}}
-\newcommand*{\etwotwo}{\ek{22}}
-\newcommand*{\etwothree}{\ek{23}}
-\newcommand*{\etwofour}{\ek{24}}
-\newcommand*{\ethreeone}{\ek{31}}
-\newcommand*{\ethreetwo}{\ek{32}}
-\newcommand*{\ethreethree}{\ek{33}}
-\newcommand*{\ethreefour}{\ek{34}}
-\newcommand*{\efourone}{\ek{41}}
-\newcommand*{\efourtwo}{\ek{42}}
-\newcommand*{\efourthree}{\ek{43}}
-\newcommand*{\efourfour}{\ek{44}}
-\newcommand*{\euzero}{\ensuremath{\boldsymbol{e}^0}}
-\newcommand*{\euone}{\ensuremath{\boldsymbol{e}^1}}
-\newcommand*{\eutwo}{\ensuremath{\boldsymbol{e}^2}}
-\newcommand*{\euthree}{\ensuremath{\boldsymbol{e}^3}}
-\newcommand*{\eufour}{\ensuremath{\boldsymbol{e}^4}}
-\newcommand*{\euk}[1]{\ensuremath{\boldsymbol{e}^{#1}}}
-\newcommand*{\eu}{\euk}
-\newcommand*{\ueuzero}{\ensuremath{\widehat{\boldsymbol{e}}^0}}
-\newcommand*{\ueuone}{\ensuremath{\widehat{\boldsymbol{e}}^1}}
-\newcommand*{\ueutwo}{\ensuremath{\widehat{\boldsymbol{e}}^2}}
-\newcommand*{\ueuthree}{\ensuremath{\widehat{\boldsymbol{e}}^3}}
-\newcommand*{\ueufour}{\ensuremath{\widehat{\boldsymbol{e}}^4}}
-\newcommand*{\ueuk}[1]{\ensuremath{\widehat{\boldsymbol{e}}^{#1}}}
-\newcommand*{\ueu}{\ueuk}
-\newcommand*{\euzerozero}{\euk{00}}
-\newcommand*{\euzeroone}{\euk{01}}
-\newcommand*{\euzerotwo}{\euk{02}}
-\newcommand*{\euzerothree}{\euk{03}}
-\newcommand*{\euzerofour}{\euk{04}}
-\newcommand*{\euoneone}{\euk{11}}
-\newcommand*{\euonetwo}{\euk{12}}
-\newcommand*{\euonethree}{\euk{13}}
-\newcommand*{\euonefour}{\euk{14}}
-\newcommand*{\eutwoone}{\euk{21}}
-\newcommand*{\eutwotwo}{\euk{22}}
-\newcommand*{\eutwothree}{\euk{23}}
-\newcommand*{\eutwofour}{\euk{24}}
-\newcommand*{\euthreeone}{\euk{31}}
-\newcommand*{\euthreetwo}{\euk{32}}
-\newcommand*{\euthreethree}{\euk{33}}
-\newcommand*{\euthreefour}{\euk{34}}
-\newcommand*{\eufourone}{\euk{41}}
-\newcommand*{\eufourtwo}{\euk{42}}
-\newcommand*{\eufourthree}{\euk{43}}
-\newcommand*{\eufourfour}{\euk{44}}
-\newcommand*{\gzero}{\ensuremath{\boldsymbol{\gamma}_0}}
-\newcommand*{\gone}{\ensuremath{\boldsymbol{\gamma}_1}}
-\newcommand*{\gtwo}{\ensuremath{\boldsymbol{\gamma}_2}}
-\newcommand*{\gthree}{\ensuremath{\boldsymbol{\gamma}_3}}
-\newcommand*{\gfour}{\ensuremath{\boldsymbol{\gamma}_4}}
-\newcommand*{\gk}[1]{\ensuremath{\boldsymbol{\gamma}_{#1}}}
-\newcommand*{\g}{\gk}
-\newcommand*{\gzerozero}{\gk{00}}
-\newcommand*{\gzeroone}{\gk{01}}
-\newcommand*{\gzerotwo}{\gk{02}}
-\newcommand*{\gzerothree}{\gk{03}}
-\newcommand*{\gzerofour}{\gk{04}}
-\newcommand*{\goneone}{\gk{11}}
-\newcommand*{\gonetwo}{\gk{12}}
-\newcommand*{\gonethree}{\gk{13}}
-\newcommand*{\gonefour}{\gk{14}}
-\newcommand*{\gtwoone}{\gk{21}}
-\newcommand*{\gtwotwo}{\gk{22}}
-\newcommand*{\gtwothree}{\gk{23}}
-\newcommand*{\gtwofour}{\gk{24}}
-\newcommand*{\gthreeone}{\gk{31}}
-\newcommand*{\gthreetwo}{\gk{32}}
-\newcommand*{\gthreethree}{\gk{33}}
-\newcommand*{\gthreefour}{\gk{34}}
-\newcommand*{\gfourone}{\gk{41}}
-\newcommand*{\gfourtwo}{\gk{42}}
-\newcommand*{\gfourthree}{\gk{43}}
-\newcommand*{\gfourfour}{\gk{44}}
-\newcommand*{\guzero}{\ensuremath{\boldsymbol{\gamma}^0}}
-\newcommand*{\guone}{\ensuremath{\boldsymbol{\gamma}^1}}
-\newcommand*{\gutwo}{\ensuremath{\boldsymbol{\gamma}^2}}
-\newcommand*{\guthree}{\ensuremath{\boldsymbol{\gamma}^3}}
-\newcommand*{\gufour}{\ensuremath{\boldsymbol{\gamma}^4}}
-\newcommand*{\guk}[1]{\ensuremath{\boldsymbol{\gamma}^{#1}}}
-\newcommand*{\gu}{\guk}
-\newcommand*{\guzerozero}{\guk{00}}
-\newcommand*{\guzeroone}{\guk{01}}
-\newcommand*{\guzerotwo}{\guk{02}}
-\newcommand*{\guzerothree}{\guk{03}}
-\newcommand*{\guzerofour}{\guk{04}}
-\newcommand*{\guoneone}{\guk{11}}
-\newcommand*{\guonetwo}{\guk{12}}
-\newcommand*{\guonethree}{\guk{13}}
-\newcommand*{\guonefour}{\guk{14}}
-\newcommand*{\gutwoone}{\guk{21}}
-\newcommand*{\gutwotwo}{\guk{22}}
-\newcommand*{\gutwothree}{\guk{23}}
-\newcommand*{\gutwofour}{\guk{24}}
-\newcommand*{\guthreeone}{\guk{31}}
-\newcommand*{\guthreetwo}{\guk{32}}
-\newcommand*{\guthreethree}{\guk{33}}
-\newcommand*{\guthreefour}{\guk{34}}
-\newcommand*{\gufourone}{\guk{41}}
-\newcommand*{\gufourtwo}{\guk{42}}
-\newcommand*{\gufourthree}{\guk{43}}
-\newcommand*{\gufourfour}{\guk{44}}
-\ExplSyntaxOn % Vectors formated as in M\&I, written in LaTeX3
+\ExplSyntaxOn
 \NewDocumentCommand{\mivector}{ O{,} m o }%
  {%
-   \mi_vector:nn { #1 } { #2 }
-   \IfValueT{#3}{\;{#3}}
+   \mi_vector:nn { #1 } { #2 }%
+   \IfValueT{#3}{\,{#3}}%
  }%
 \seq_new:N \l__mi_list_seq
 \cs_new_protected:Npn \mi_vector:nn #1 #2
@@ -1121,1344 +860,6 @@
   }%
 }%
 \ExplSyntaxOff
-\ExplSyntaxOn % Column and row vectors, written in LaTeX3
-\seq_new:N \l__vector_arg_seq
-\cs_new_protected:Npn \vector_main:nnnn #1 #2 #3 #4
- {%
-  \seq_set_split:Nnn \l__vector_arg_seq { #3 } { #4 }
-  \begin{#1matrix}
-    \seq_use:Nnnn \l__vector_arg_seq { #2 } { #2 } { #2 }
-  \end{#1matrix}
- }%
-\NewDocumentCommand{\rowvector}{ O{,} m }
- {%
-  \ensuremath{
-  \vector_main:nnnn { p } { \,\, } { #1 } { #2 }
-  }%
- }%
-\NewDocumentCommand{\colvector}{ O{,} m }
- {%
-  \ensuremath{
-  \vector_main:nnnn { p } { \\ } { #1 } { #2 }
-  }%
- }%
-\ExplSyntaxOff
-\newcommandx{\scompscvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \colvector{\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-  {%
-    \colvector{\msub{#2}{0},\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsCvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \colvector{\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-  {%
-    \colvector{\msup{#2}{0},\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsrvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \rowvector[,]{\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-  {%
-    \rowvector[,]{\msub{#2}{0},\msub{#2}{1},\msub{#2}{2},\msub{#2}{3}}%
-  }%
-}%
-\newcommandx{\scompsRvect}[2][1,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-  {%
-    \rowvector[,]{\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-  {%
-    \rowvector[,]{\msup{#2}{0},\msup{#2}{1},\msup{#2}{2},\msup{#2}{3}}%
-  }%
-}%
-\newcommand*{\anglebetween}[2]{\ensuremath{\theta_{\vect{#1},\vect{#2}}}}
-\newcommand*{\bra}[1]{\ensuremath{\left\langle{#1}\right\lvert}}
-\newcommand*{\ket}[1]{\ensuremath{\left\lvert{#1}\right\rangle}}
-\newcommand*{\bracket}[2]{\ensuremath{\left\langle{#1}\!\!\right.%
-  \left\lvert{#2}\right\rangle}}
-\newphysicsconstant{oofpez}%
-  {\ensuremath{\frac{1}{\phantom{_o}4\pi\epsilon_0}}}%
-  {\mi at p{9}{8.9875517873681764}\timestento{9}}%
-  {\m\cubed\usk\kg\usk\reciprocalquartic\s\usk\A\reciprocalsquared}%
-  [\newton\usk\m\squared\per\coulomb\squared]%
-  [\m\per\farad]
-\newphysicsconstant{oofpezcs}%
-  {\ensuremath{\frac{1}{\phantom{_o}4\pi\epsilon_0 c^2\phantom{_o}}}}%
-  {\tento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\N\usk\s\squared\per\C\squared]%
-  [\T\usk\m\squared]
-\newphysicsconstant{vacuumpermittivity}%
-  {\ensuremath{\epsilon_0}}%
-  {\mi at p{9.0}{8.854187817}\timestento{-12}}%
-  {\m\reciprocalcubed\usk\reciprocal\kg\usk\s\quarted\usk\A\squared}%
-  [\C\squared\per\N\usk\m\squared]%
-  [\F\per\m]
-\newphysicsconstant{mzofp}%
-  {\ensuremath{\frac{\phantom{_oo}\mu_0\phantom{_o}}{4\pi}}}%
-  {\tento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\tesla\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsconstant{vacuumpermeability}%
-  {\ensuremath{\mu_0}}%
-  {4\pi\timestento{-7}}%
-  {\m\usk\kg\usk\s\reciprocalsquared\usk\A\reciprocalsquared}%
-  [\T\usk\m\per\A]%
-  [\henry\per\m]
-\newphysicsconstant{boltzmann}%
-  {\ensuremath{k_B}}%
-  {\mi at p{1.4}{1.38064852}\timestento{-23}}%
-  {\m\squared\usk\kg\usk\reciprocalsquare\s\usk\reciprocal\K}%
-  [\J\per\K]%
-  [\J\per\K]
-\newphysicsconstant{boltzmannineV}%
-  {\ensuremath{k_B}}%
-  {\mi at p{8.6}{8.6173303}\timestento{-5}}%
-  {\eV\usk\reciprocal\K}%
-  [\eV\per\K]%
-  [\eV\per\K]
-\newphysicsconstant{stefanboltzmann}%
-  {\ensuremath{\sigma}}%
-  {\mi at p{5.7}{5.670367}\timestento{-8}}%
-  {\kg\usk\s\reciprocalcubed\usk\K\reciprocalquarted}%
-  [\W\per\m\squared\usk\K\quarted]%
-  [\W\per\m\squared\usk\K\quarted]
-\newphysicsconstant{planck}%
-  {\ensuremath{h}}%
-  {\mi at p{6.6}{6.626070040}\timestento{-34}}%
-  {\m\squared\usk\kg\usk\reciprocal\s}%
-  [\J\usk\s]%
-  [\J\usk\s]
-\newphysicsconstant{planckineV}%
-  {\ensuremath{h}}%
-  {\mi at p{4.1}{4.135667662}\timestento{-15}}%
-  {\eV\usk\s}%
-  [\eV\usk\s]%
-  [\eV\usk\s]
-\newphysicsconstant{planckbar}%
-  {\ensuremath{\hslash}}%
-  {\mi at p{1.1}{1.054571800}\timestento{-34}}%
-  {\m\squared\usk\kg\usk\reciprocal\s}%
-  [\J\usk\s]%
-  [\J\usk\s]
-\newphysicsconstant{planckbarineV}%
-  {\ensuremath{\hslash}}%
-  {\mi at p{6.6}{6.582119514}\timestento{-16}}%
-  {\eV\usk\s}%
-  [\eV\usk\s]%
-  [\eV\usk\s]
-\newphysicsconstant{planckc}%
-  {\ensuremath{hc}}%
-  {\mi at p{2.0}{1.98644568}\timestento{-25}}%
-  {\m\cubed\usk\kg\usk\reciprocalsquare\s}%
-  [\J\usk\m]%
-  [\J\usk\m]
-\newphysicsconstant{planckcineV}%
-  {\ensuremath{hc}}%
-  {\mi at p{1240}{1.23984193}\timestento{3}}%
-  {\eV\usk\text{n}\m}%
-  [\eV\usk\text{n}\m]%
-  [\eV\usk\text{n}\m]
-\newphysicsconstant{rydberg}%
-  {\ensuremath{\msub{R}{\infty}}}%
-  {\mi at p{1.1}{1.0973731568508}\timestento{7}}%
-  {\reciprocal\m}%
-  [\reciprocal\m]%
-  [\reciprocal\m]
-\newphysicsconstant{bohrradius}%
-  {\ensuremath{a_0}}%
-  {\mi at p{5.3}{5.2917721067}\timestento{-11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{finestructure}%
-  {\ensuremath{\alpha}}%
-  {\mi at p{\frac{1}{137}}{7.2973525664\timestento{-3}}}%
-  {}%
-  []%
-  []
-\newphysicsconstant{avogadro}%
-  {\ensuremath{N_A}}%
-  {\mi at p{6.0}{6.022140857}\timestento{23}}%
-  {\reciprocal\mol}%
-  [\reciprocal\mol]%
-  [\reciprocal\mol]
-\newphysicsconstant{universalgrav}%
-  {\ensuremath{G}}%
-  {\mi at p{6.7}{6.67408}\timestento{-11}}%
-  {\m\cubed\usk\reciprocal\kg\usk\s\reciprocalsquared}%
-  [\N\usk\m\squared\per\kg\squared]%
-  [\J\usk\m\per\kg\squared]
-\newphysicsconstant{surfacegravfield}%
-  {\ensuremath{g}}%
-  {\mi at p{9.8}{9.807}}%
-  {\m\usk\s\reciprocalsquared}%
-  [\N\per\kg]%
-  [\N\per\kg]
-\newphysicsconstant{clight}%
-  {\ensuremath{c}}%
-  {\mi at p{3}{2.99792458}\timestento{8}}%
-  {\m\usk\reciprocal\s}%
-  [\m\per\s]%
-  [\m\per\s]
-\newphysicsconstant{clightinfeet}%
-  {\ensuremath{c}}%
-  {\mi at p{1}{0.983571}}%
-  {\text{ft}\usk\reciprocal{\text{n}\s}}%
-  [\text{ft}\per\text{n}\s]%
-  [\text{ft}\per\mathrm{n}\s]
-\newphysicsconstant{Ratom}%
-  {\ensuremath{r_{\text{atom}}}}%
-  {\tento{-10}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{Mproton}%
-  {\ensuremath{m_p}}%
-  {\mi at p{1.7}{1.672621898}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Mneutron}%
-  {\ensuremath{m_n}}%
-  {\mi at p{1.7}{1.674927471}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Mhydrogen}%
-  {\ensuremath{m_H}}%
-  {\mi at p{1.7}{1.6737236}\timestento{-27}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{Melectron}%
-  {\ensuremath{m_e}}%
-  {\mi at p{9.1}{9.10938356}\timestento{-31}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{echarge}%
-  {\ensuremath{e}}%
-  {\mi at p{1.6}{1.6021766208}\timestento{-19}}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{Qelectron}%
-  {\ensuremath{Q_e}}%
-  {-\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{qelectron}%
-  {\ensuremath{q_e}}%
-  {-\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{Qproton}%
-  {\ensuremath{Q_p}}%
-  {+\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{qproton}%
-  {\ensuremath{q_p}}%
-  {+\echargevalue}%
-  {\A\usk\s}%
-  [\C]%
-  [\C]
-\newphysicsconstant{MEarth}%
-  {\ensuremath{M_{\text{Earth}}}}%
-  {\mi at p{6.0}{5.97237}\timestento{24}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{MMoon}%
-  {\ensuremath{M_{\text{Moon}}}}%
-  {\mi at p{7.3}{7.342}\timestento{22}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{MSun}%
-  {\ensuremath{M_{\text{Sun}}}}%
-  {\mi at p{2.0}{1.98855}\timestento{30}}%
-  {\kg}%
-  [\kg]%
-  [\kg]
-\newphysicsconstant{REarth}%
-  {\ensuremath{R_{\text{Earth}}}}%
-  {\mi at p{6.4}{6.371}\timestento{6}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{RMoon}%
-  {\ensuremath{R_{\text{Moon}}}}%
-  {\mi at p{1.7}{1.7371}\timestento{6}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{RSun}%
-  {\ensuremath{R_{\text{Sun}}}}%
-  {\mi at p{7.0}{6.957}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{ESdist}%
-  {\magvectsub{r}{ES}}%
-  {\mi at p{1.5}{1.496}\timestento{11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{SEdist}%
-  {\magvectsub{r}{SE}}%
-  {\mi at p{1.5}{1.496}\timestento{11}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{EMdist}%
-  {\magvectsub{r}{EM}}%
-  {\mi at p{3.8}{3.81550}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{MEdist}%
-  {\magvectsub{r}{ME}}%
-  {\mi at p{3.8}{3.81550}\timestento{8}}%
-  {\m}%
-  [\m]%
-  [\m]
-\newphysicsconstant{LSun}%
-  {\ensuremath{L_{\text{Sun}}}}%
-  {\mi at p{3.8}{3.8460}\timestento{26}}%
-  {\m\squared\usk\kg\usk\s\reciprocalcubed}%
-  [\W]
-  [\J\per\s]
-\newphysicsconstant{TSun}%
-  {\ensuremath{T_{\text{Sun}}}}%
-  {\mi at p{5800}{5778}}%
-  {\K}%
-  [\K]%
-  [\K]
-\newphysicsconstant{MagSun}%
-  {\ensuremath{M_{\text{Sun}}}}%
-  {+4.83}%
-  {}%
-  []%
-  []
-\newphysicsconstant{magSun}%
-  {\ensuremath{m_{\text{Sun}}}}%
-  {-26.74}%
-  {}%
-  []%
-  []
-\newcommand*{\coulombconstant}{\oofpez}
-\newcommand*{\altcoulombconstant}{\oofpezcs}
-\newcommand*{\biotsavartconstant}{\mzofp}
-\newcommand*{\boltzmannconstant}{\boltzmann}
-\newcommand*{\stefanboltzmannconstant}{\stefanboltzmann}
-\newcommand*{\planckconstant}{\planck}
-\newcommand*{\reducedplanckconstant}{\planckbar}
-\newcommand*{\planckconstanttimesc}{\planckc}
-\newcommand*{\rydbergconstant}{\rydberg}
-\newcommand*{\finestructureconstant}{\finestructure}
-\newcommand*{\avogadroconstant}{\avogadro}
-\newcommand*{\universalgravitationalconstant}{\universalgrav}
-\newcommand*{\earthssurfacegravitationalfield}{\surfacegravfield}
-\newcommand*{\photonconstant}{\clight}
-\newcommand*{\elementarycharge}{\echarge}
-\newcommand*{\EarthSundistance}{\ESdist}
-\newcommand*{\SunEarthdistance}{\SEdist}
-\newcommand*{\EarthMoondistance}{\ESdist}
-\newcommand*{\MoonEarthdistance}{\SEdist}
-\newcommand*{\Lstar}[1][\(\star\)]{\ensuremath{L_{\text{#1}}}\xspace}
-\newcommand*{\Lsolar}{\ensuremath{\Lstar[\(\odot\)]}\xspace}
-\newcommand*{\Tstar}[1][\(\star\)]{\ensuremath{T_{\text{#1}}}\xspace}
-\newcommand*{\Tsolar}{\ensuremath{\Tstar[\(\odot\)]}\xspace}
-\newcommand*{\Rstar}[1][\(\star\)]{\ensuremath{R_{\text{#1}}}\xspace}
-\newcommand*{\Rsolar}{\ensuremath{\Rstar[\(\odot\)]}\xspace}
-\newcommand*{\Mstar}[1][\(\star\)]{\ensuremath{M_{\text{#1}}}\xspace}
-\newcommand*{\Msolar}{\ensuremath{\Mstar[\(\odot\)]}\xspace}
-\newcommand*{\Fstar}[1][\(\star\)]{\ensuremath{F_{\text{#1}}}\xspace}
-\newcommand*{\fstar}[1][\(\star\)]{\ensuremath{f_{\text{#1}}}\xspace}
-\newcommand*{\Fsolar}{\ensuremath{\Fstar[\(\odot\)]}\xspace}
-\newcommand*{\fsolar}{\ensuremath{\fstar[\(\odot\)]}\xspace}
-\newcommand*{\Magstar}[1][\(\star\)]{\ensuremath{M_{\text{#1}}}\xspace}
-\newcommand*{\magstar}[1][\(\star\)]{\ensuremath{m_{\text{#1}}}\xspace}
-\newcommand*{\Magsolar}{\ensuremath{\Magstar[\(\odot\)]}\xspace}
-\newcommand*{\magsolar}{\ensuremath{\magstar[\(\odot\)]}\xspace}
-\newcommand*{\Dstar}[1][\(\star\)]{\ensuremath{D_{\text{#1}}}\xspace}
-\newcommand*{\dstar}[1][\(\star\)]{\ensuremath{d_{\text{#1}}}\xspace}
-\newcommand*{\Dsolar}{\ensuremath{\Dstar[\(\odot\)]}\xspace}
-\newcommand*{\dsolar}{\ensuremath{\dstar[\(\odot\)]}\xspace}
-\newcommand*{\onehalf}{\ensuremath{\frac{1}{2}}\xspace}
-\newcommand*{\onethird}{\ensuremath{\frac{1}{3}}\xspace}
-\newcommand*{\onefourth}{\ensuremath{\frac{1}{4}}\xspace}
-\newcommand*{\onefifth}{\ensuremath{\frac{1}{5}}\xspace}
-\newcommand*{\onesixth}{\ensuremath{\frac{1}{6}}\xspace}
-\newcommand*{\oneseventh}{\ensuremath{\frac{1}{7}}\xspace}
-\newcommand*{\oneeighth}{\ensuremath{\frac{1}{8}}\xspace}
-\newcommand*{\oneninth}{\ensuremath{\frac{1}{9}}\xspace}
-\newcommand*{\onetenth}{\ensuremath{\frac{1}{10}}\xspace}
-\newcommand*{\twooneths}{\ensuremath{\frac{2}{1}}\xspace}
-\newcommand*{\twohalves}{\ensuremath{\frac{2}{2}}\xspace}
-\newcommand*{\twothirds}{\ensuremath{\frac{2}{3}}\xspace}
-\newcommand*{\twofourths}{\ensuremath{\frac{2}{4}}\xspace}
-\newcommand*{\twofifths}{\ensuremath{\frac{2}{5}}\xspace}
-\newcommand*{\twosixths}{\ensuremath{\frac{2}{6}}\xspace}
-\newcommand*{\twosevenths}{\ensuremath{\frac{2}{7}}\xspace}
-\newcommand*{\twoeighths}{\ensuremath{\frac{2}{8}}\xspace}
-\newcommand*{\twoninths}{\ensuremath{\frac{2}{9}}\xspace}
-\newcommand*{\twotenths}{\ensuremath{\frac{2}{10}}\xspace}
-\newcommand*{\threeoneths}{\ensuremath{\frac{3}{1}}\xspace}
-\newcommand*{\threehalves}{\ensuremath{\frac{3}{2}}\xspace}
-\newcommand*{\threethirds}{\ensuremath{\frac{3}{3}}\xspace}
-\newcommand*{\threefourths}{\ensuremath{\frac{3}{4}}\xspace}
-\newcommand*{\threefifths}{\ensuremath{\frac{3}{5}}\xspace}
-\newcommand*{\threesixths}{\ensuremath{\frac{3}{6}}\xspace}
-\newcommand*{\threesevenths}{\ensuremath{\frac{3}{7}}\xspace}
-\newcommand*{\threeeighths}{\ensuremath{\frac{3}{8}}\xspace}
-\newcommand*{\threeninths}{\ensuremath{\frac{3}{9}}\xspace}
-\newcommand*{\threetenths}{\ensuremath{\frac{3}{10}}\xspace}
-\newcommand*{\fouroneths}{\ensuremath{\frac{4}{1}}\xspace}
-\newcommand*{\fourhalves}{\ensuremath{\frac{4}{2}}\xspace}
-\newcommand*{\fourthirds}{\ensuremath{\frac{4}{3}}\xspace}
-\newcommand*{\fourfourths}{\ensuremath{\frac{4}{4}}\xspace}
-\newcommand*{\fourfifths}{\ensuremath{\frac{4}{5}}\xspace}
-\newcommand*{\foursixths}{\ensuremath{\frac{4}{6}}\xspace}
-\newcommand*{\foursevenths}{\ensuremath{\frac{4}{7}}\xspace}
-\newcommand*{\foureighths}{\ensuremath{\frac{4}{8}}\xspace}
-\newcommand*{\fourninths}{\ensuremath{\frac{4}{9}}\xspace}
-\newcommand*{\fourtenths}{\ensuremath{\frac{4}{10}}\xspace}
-\newcommand*{\sumoverall}[1]{\ensuremath{\displaystyle
-  \sum_{\substack{\text{\tiny{all }}\text{\tiny{{#1}}}}}}}
-\newcommand*{\dx}[1]{\ensuremath{\,\mathrm{d}{#1}}}
-\newcommand*{\dslashx}[1]{\ensuremath{\,\mathchar'26\mkern-12mu \mathrm{d}{#1}}}
-\newcommandx{\evaluatedfromto}[2][2,usedefault]{\ensuremath{%
-  \Bigg.\Bigg\rvert_{#1}^{#2}}}
-\newcommand*{\evaluatedat}{\evaluatedfromto}
-\newcommandx{\integral}[4][1,2,usedefault]{\ensuremath{%
-  \int_{\ifthenelse{\equal{#1}{}}{}{#4=#1}}^{\ifthenelse{%
-    \equal{#2}{}}{}{#4=#2}}}{#3}\dx{#4}}
-\newcommand*{\opensurfaceintegral}[2]{\ensuremath{%
-  \iint\nolimits_{#1}\vectdotvect{#2}{\dirvect{n}}\dx{A}}}
-\newcommand*{\closedsurfaceintegral}[2]{\ensuremath{%
-  \varoiint\nolimits_{#1}\vectdotvect{#2}{\dirvect{n}}\dx{A}}}
-\newcommand*{\openlineintegral}[2]{\ensuremath{%
-  \int\nolimits_{#1}\vectdotvect{#2}{\dirvect{t}}\dx{\ell}}}
-\newcommand*{\closedlineintegral}[2]{\ensuremath{%
-  \oint\nolimits_{#1}\vectdotvect{#2}{\dirvect{t}}\dx{\ell}}}
-\newcommand*{\volumeintegral}[2]{\ensuremath{%
-  \iiint\nolimits_{#1}{#2}\dx{V}}}
-\newcommandx{\dbydt}[1][1]{\ensuremath{%
-  \frac{\mathrm{d}{#1}}{\mathrm{d}t}}}
-\newcommandx{\DbyDt}[1][1]{\ensuremath{%
-  \frac{\Delta{#1}}{\Delta t}}}
-\newcommandx{\ddbydt}[1][1]{\ensuremath{%
-  \frac{\mathrm{d}^{2}{#1}}{\mathrm{d}t^{2}}}}
-\newcommandx{\DDbyDt}[1][1]{\ensuremath{%
-  \frac{\Delta^{2}{#1}}{\Delta t^{2}}}}
-\newcommandx{\pbypt}[1][1]{\ensuremath{%
-  \frac{\partial{#1}}{\partial t}}}
-\newcommandx{\ppbypt}[1][1]{\ensuremath{%
-  \frac{\partial^{2}{#1}}{\partial t^{2}}}}
-\newcommand*{\dbyd}[2]{\ensuremath{\frac{%
-  \mathrm{d}{#1}}{\mathrm{d}{#2}}}}
-\newcommand*{\DbyD}[2]{\ensuremath{\frac{%
-  \Delta{#1}}{\Delta{#2}}}}
-\newcommand*{\ddbyd}[2]{\ensuremath{%
-  \frac{\mathrm{d}^{2}{#1}}{\mathrm{d}{#2}^{2}}}}
-\newcommand*{\DDbyD}[2]{\ensuremath{%
-  \frac{\Delta^{2}{#1}}{\Delta{#2}^{2}}}}
-\newcommand*{\pbyp}[2]{\ensuremath{%
-  \frac{\partial{#1}}{\partial{#2}}}}
-\newcommand*{\ppbyp}[2]{\ensuremath{%
-  \frac{\partial^{2}{#1}}{\partial{#2}^{2}}}}
-\newcommandx{\seriesfofx}[1][1=x,usedefault]{\ensuremath{%
-  f({#1}) \approx f(a) + \frac{f^\prime (a)}{1!}({#1}-a) +
-  \frac{f^{\prime\prime}(a)}{2!}({#1}-a)^2 +
-  \frac{f^{\prime\prime\prime}(a)}{3!}({#1}-a)^3 + \ldots}\xspace}
-\newcommandx{\seriesexpx}[1][1=x,usedefault]{\ensuremath{%
-  e^{#1} \approx 1 + {#1} + \frac{{#1}^2}{2!} + \frac{{#1}^3}{3!} + \ldots}\xspace}
-\newcommandx{\seriessinx}[1][1=x,usedefault]{\ensuremath{%
-  \sin {#1} \approx {#1} - \frac{{#1}^3}{3!} + \frac{{#1}^5}{5!} - \ldots}\xspace}
-\newcommandx{\seriescosx}[1][1=x,usedefault]{\ensuremath{%
-  \cos {#1} \approx 1 - \frac{{#1}^2}{2!} + \frac{{#1}^4}{4!} - \ldots}\xspace}
-\newcommandx{\seriestanx}[1][1=x,usedefault]{\ensuremath{%
-  \tan {#1} \approx {#1} + \frac{{#1}^3}{3} + \frac{2{#1}^5}{15} + \ldots}\xspace}
-\newcommandx{\seriesatox}[1][1=x,usedefault]{\ensuremath{%
-  a^{#1} \approx 1 + {#1} \ln{a} + \frac{({#1} \ln a)^2}{2!} +
-  \frac{({#1} \ln a)^3}{3!} + \ldots}\xspace}
-\newcommandx{\serieslnoneplusx}[1][1=x,usedefault]{\ensuremath{%
-  \ln(1 \pm {#1}) \approx \pm\; {#1} - \frac{{#1}^2}{2} \pm \frac{{#1}^3}{3} - %
-    \frac{{#1}^4}{4} \pm \ldots}\xspace}
-\newcommandx{\binomialseries}[1][1=x,usedefault]{\ensuremath{%
-  (1 + {#1})^n \approx 1 + n{#1} + \frac{n(n-1)}{2!}{#1}^2 + \ldots}\xspace}
-\newcommand*{\gradient}{\ensuremath{\boldsymbol{\nabla}}}
-\newcommand*{\divergence}{\ensuremath{\boldsymbol{\nabla}\bullet}}
-\newcommand*{\curl}{\ensuremath{\boldsymbol{\nabla\times}}}
-\newcommand{\taigrad}{\ensuremath{\nabla}}%
-\newcommand{\taisvec}{\ensuremath{%
-  \stackinset{c}{0.07ex}{c}{0.1ex}{\tiny$-$}{$\nabla$}}
-}%
-\newcommand{\taidivg}{\ensuremath{%
-  \stackinset{c}{0.07ex}{c}{0.1ex}{$\cdot$}{$\nabla$}}
-}%
-\newcommand{\taicurl}{\ensuremath{%
-  \stackinset{c}{0.04ex}{c}{0.32ex}{\tiny$\times$}{$\nabla$}}
-}%
-\newcommand*{\laplacian}{\ensuremath{\boldsymbol{\nabla}^2}}
-\newcommand*{\dalembertian}{\ensuremath{\boldsymbol{\Box}}}
-\newcommand*{\diracdelta}[1]{\ensuremath{\delta}(#1)}
-\newcommand*{\orderof}[1]{\ensuremath{\mathcal{O}(#1)}}
-\DeclareMathOperator{\asin}{\sin^{-1}}
-\DeclareMathOperator{\acos}{\cos^{-1}}
-\DeclareMathOperator{\atan}{\tan^{-1}}
-\DeclareMathOperator{\asec}{\sec^{-1}}
-\DeclareMathOperator{\acsc}{\csc^{-1}}
-\DeclareMathOperator{\acot}{\cot^{-1}}
-\DeclareMathOperator{\sech}{sech}
-\DeclareMathOperator{\csch}{csch}
-\DeclareMathOperator{\asinh}{\sinh^{-1}}
-\DeclareMathOperator{\acosh}{\cosh^{-1}}
-\DeclareMathOperator{\atanh}{\tanh^{-1}}
-\DeclareMathOperator{\asech}{\sech^{-1}}
-\DeclareMathOperator{\acsch}{\csch^{-1}}
-\DeclareMathOperator{\acoth}{\coth^{-1}}
-\DeclareMathOperator{\sgn}{sgn}
-\DeclareMathOperator{\dex}{dex}
-\newcommand*{\logb}[1][\relax]{\ensuremath{\log_{#1}}}
-\ifthenelse{\boolean{@optboldvectors}}
-  {\newcommand*{\cB}{\ensuremath{\boldsymbol{c\mskip -3.00mu B}}}}
-  {\ifthenelse{\boolean{@optromanvectors}}
-   {\newcommand*{\cB}{\ensuremath{\textsf{c}\mskip -3.00mu\mathrm{B}}}}
-   {\newcommand*{\cB}{\ensuremath{c\mskip -3.00mu B}}}}
-\newcommand*{\newpi}{\ensuremath{\pi\mskip -7.8mu\pi}}
-\newcommand*{\scripty}[1]{\ensuremath{\mathcalligra{#1}}}
-\newcommand*{\Lagr}{\ensuremath{\mathcal{L}}}
-\newcommandx{\flux}[1][1]{\ensuremath{\ssub{\Phi}{#1}}}
-\newcommandx{\circulation}[1][1]{\ensuremath{\ssub{\Gamma}{#1}}}
-\newcommand*{\absof}[1]{\ensuremath{%
-  \left\lvert{\ifblank{#1}{\:\_\:}{#1}}\right\rvert}}
-\newcommand*{\inparens}[1]{\ensuremath{%
-  \left({\ifblank{#1}{\:\_\:}{#1}}\right)}}
-\newcommand*{\magof}[1]{\ensuremath{%
-  \left\lVert{\ifblank{#1}{\:\_\:}{#1}}\right\rVert}}
-\newcommand*{\dimsof}[1]{\ensuremath{%
-  \left[{\ifblank{#1}{\:\_\:}{#1}}\right]}}
-\newcommand*{\unitsof}[1]{\ensuremath{%
-  \left[{\ifblank{#1}{\:\_\:}{#1}}\right]_u}}
-\newcommand*{\changein}[1]{\ensuremath{\delta{#1}}}
-\newcommand*{\Changein}[1]{\ensuremath{\Delta{#1}}}
-\newcommandx{\timestento}[2][2=\!\!,usedefault]{\ensuremath{%
-  \ifthenelse{\equal{#2}{}}
-    {\unit{\;\times\;10^{#1}}{}}
-    {\unit{\;\times\;10^{#1}}{#2}}}}
-\newcommand*{\xtento}{\timestento}
-\newcommandx{\tento}[2][2=\!\!,usedefault]{\ensuremath{%
-  \ifthenelse{\equal{#2}{}}
-    {\unit{10^{#1}}{}}
-    {\unit{10^{#1}}{#2}}}}
-\newcommand*{\ee}[2]{\texttt{{#1}e{#2}}}
-\newcommand*{\EE}[2]{\texttt{{#1}E{#2}}}
-\newcommand*{\dms}[3]{\ensuremath{%
-  \indegrees{#1}\inarcminutes{#2}\inarcseconds{#3}}}
-\newcommand*{\hms}[3]{\ensuremath{%
-  {#1}^{\hour}{#2}^{\mathrm{m}}{#3}^{\s}}}
-\newcommand*{\clockreading}{\hms}
-\newcommand*{\latitude}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\latitudeN}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{N}}}
-\newcommand*{\latitudeS}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{S}}}
-\newcommand*{\longitude}[1]{\unit{#1}{\mkern-\thickmuskip\degree}}
-\newcommand*{\longitudeE}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{E}}}
-\newcommand*{\longitudeW}[1]{\unit{#1}{\mkern-\thickmuskip\degree\;\mathrm{W}}}
-\newcommand*{\ssub}[2]{\ensuremath{#1_{\text{#2}}}}
-\newcommand*{\ssup}[2]{\ensuremath{#1^{\text{#2}}}}
-\newcommand*{\ssud}[3]{\ensuremath{#1^{\text{#2}}_{\text{#3}}}}
-\newcommand*{\msub}[2]{\ensuremath{#1_{#2}}}
-\newcommand*{\msup}[2]{\ensuremath{#1^{#2}}}
-\newcommand*{\msud}[3]{\ensuremath{#1^{#2}_{#3}}}
-\newcommand*{\levicivita}[1]{\ensuremath{%
-  \varepsilon_{\scriptscriptstyle{#1}}}}
-\newcommand*{\kronecker}[1]{\ensuremath{%
-  \delta_{\scriptscriptstyle{#1}}}}
-\newcommand*{\xaxis}{\ensuremath{x\text{-axis}}\xspace}
-\newcommand*{\yaxis}{\ensuremath{y\text{-axis}}\xspace}
-\newcommand*{\zaxis}{\ensuremath{z\text{-axis}}\xspace}
-\newcommand*{\naxis}[1]{\ensuremath{{#1}\text{-axis}}\xspace}
-\newcommand*{\axis}{\ensuremath{\text{-axis}}\xspace}
-\newcommand*{\xyplane}{\ensuremath{xy\text{-plane}}\xspace}
-\newcommand*{\yzplane}{\ensuremath{yz\text{-plane}}\xspace}
-\newcommand*{\zxplane}{\ensuremath{zx\text{-plane}}\xspace}
-\newcommand*{\yxplane}{\ensuremath{yx\text{-plane}}\xspace}
-\newcommand*{\zyplane}{\ensuremath{zy\text{-plane}}\xspace}
-\newcommand*{\xzplane}{\ensuremath{xz\text{-plane}}\xspace}
-\newcommand*{\plane}{\ensuremath{\text{-plane}}\xspace}
-\newcommand*{\cuberoot}[1]{\ensuremath{\sqrt[3]{#1}}}
-\newcommand*{\fourthroot}[1]{\ensuremath{\sqrt[4]{#1}}}
-\newcommand*{\fifthroot}[1]{\ensuremath{\sqrt[5]{#1}}}
-\newcommand*{\fsqrt}[1]{\ensuremath{{#1}^\onehalf}}
-\newcommand*{\fcuberoot}[1]{\ensuremath{{#1}^\onethird}}
-\newcommand*{\ffourthroot}[1]{\ensuremath{{#1}^\onefourth}}
-\newcommand*{\ffifthroot}[1]{\ensuremath{{#1}^\onefifth}}
-\newcommand*{\relgamma}[1]{\ensuremath{%
-  \frac{1}{\sqrt{1-\inparens{\frac{#1}{c}}\squared}}}}
-\newcommand*{\frelgamma}[1]{\ensuremath{%
-  \inparens{1-\frac{{#1}\squared}{c\squared}}^{-\onehalf}}}
-\newcommand*{\oosqrtomxs}[1]{\ensuremath{\frac{1}{\sqrt{1-{#1}\squared}}}}
-\newcommand*{\oosqrtomx}[1]{\ensuremath{\frac{1}{\sqrt{1-{#1}}}}}
-\newcommand*{\ooomx}[1]{\ensuremath{\frac{1}{1-{#1}}}}
-\newcommand*{\ooopx}[1]{\ensuremath{\frac{1}{1+{#1}}}}
-\newcommand*{\isequals}{\wordoperator{?}{=}\xspace}
-\newcommand*{\wordoperator}[2]{\ensuremath{%
-  \mathrel{\vcenter{\offinterlineskip
-  \halign{\hfil\tiny\upshape##\hfil\cr\noalign{\vskip-.5ex}
-    {#1}\cr\noalign{\vskip.5ex}{#2}\cr}}}}}
-\newcommand*{\definedas}{\wordoperator{defined}{as}\xspace}
-\newcommand*{\associated}{\wordoperator{associated}{with}\xspace}
-\newcommand*{\adjustedby}{\wordoperator{adjusted}{by}\xspace}
-\newcommand*{\earlierthan}{\wordoperator{earlier}{than}\xspace}
-\newcommand*{\laterthan}{\wordoperator{later}{than}\xspace}
-\newcommand*{\forevery}{\wordoperator{for}{every}\xspace}
-\newcommand*{\pwordoperator}[2]{\ensuremath{\left(%
-  \mathrel{\vcenter{\offinterlineskip%
-  \halign{\hfil\tiny\upshape##\hfil\cr\noalign{\vskip-.5ex}%
-    {#1}\cr\noalign{\vskip.5ex}{#2}\cr}}}\right)}}%
-\newcommand*{\pdefinedas}{\pwordoperator{defined}{as}\xspace}
-\newcommand*{\passociated}{\pwordoperator{associated}{with}\xspace}
-\newcommand*{\padjustedby}{\pwordoperator{adjusted}{by}\xspace}
-\newcommand*{\pearlierthan}{\pwordoperator{earlier}{than}\xspace}
-\newcommand*{\platerthan}{\pwordoperator{later}{than}\xspace}
-\newcommand*{\pforevery}{\pwordoperator{for}{every}\xspace}
-\newcommand*{\defines}{\ensuremath{\stackrel{\text{\tiny{def}}}{=}}\xspace}
-\newcommand*{\inframe}[1][\relax]{\ensuremath{%
-  \xrightarrow[\text\tiny{\mathcal #1}]{}}\xspace}
-\newcommand*{\associates}{\ensuremath{%
-  \xrightarrow{\text{\tiny{assoc}}}}\xspace}
-\newcommand*{\becomes}{\ensuremath{%
-  \xrightarrow{\text{\tiny{becomes}}}}\xspace}
-\newcommand*{\rrelatedto}[1]{\ensuremath{%
-  \xLongrightarrow{\text{\tiny{#1}}}}}
-\newcommand*{\lrelatedto}[1]{\ensuremath{%
-  \xLongleftarrow[\text{\tiny{#1}}]{}}}
-\newcommand*{\brelatedto}[2]{\ensuremath{%
-  \xLongleftrightarrow[\text{\tiny{#1}}]{\text{\tiny{#2}}}}}
-\newcommand*{\genericinteractionplaces}[5]{\ensuremath{\inparens{#1}
-  \frac{\inparens{#2}\inparens{#3}}{\inparens{#4}^2}{{\ifblank{#5}{%
-  \mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\genericfieldofparticleplaces}[4]{\ensuremath{\inparens{#1}
-  \frac{\inparens{#2}}{\inparens{#3}^2}{{\ifblank{#4}{\mivector{\_ , \_ , \_}}{#4}}}}}
-\newcommand*{\genericpotentialenergyplaces}[4]{\ensuremath{%
-  \inparens{#1}\frac{\inparens{#2}\inparens{#3}}{\inparens{#4}}}}
-\newcommand*{\genericelectricdipoleplaces}[5]{%
-  \ensuremath{\inparens{#1}\frac{\inparens{#2}\inparens{#3}}{\inparens{#4}^3}%
-  {{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\genericelectricdipoleonaxisplaces}[5]{%
-  \ensuremath{\inparens{#1}\frac{2\inparens{#2}\inparens{#3}}{\inparens{#4}^3}%
-  {{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\gfieldofparticle}{\ensuremath{\universalgravmathsymbol\frac{M}%
-  {\magsquaredvect{r}}\inparens{-\dirvect{r}}}}
-\newcommand*{\gravitationalinteractionplaces}[4]{%
-  \genericinteractionplaces{\universalgrav}{#1}{#2}{#3}{#4}}
-\newcommand*{\gfieldofparticleplaces}[3]{%
-  \genericfieldofparticleplaces{\universalgrav}{#1}{#2}{#3}}
-\newcommand*{\electricinteractionplaces}[4]{%
-  \genericinteractionplaces{\oofpez}{#1}{#2}{#3}{#4}}
-\newcommand*{\Efieldofparticleplaces}[3]{%
-  \genericfieldofparticleplaces{\oofpez}{#1}{#2}{#3}}
-\newcommand*{\Bfieldofparticleplaces}[5]{\ensuremath{\inparens{\mzofp}%
-  \frac{\inparens{#1}\inparens{#2}}{\inparens{#3}^2}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}\times{{\ifblank{#5}{\mivector{\_ , \_ , \_}}{#5}}}}}
-\newcommand*{\springinteractionplaces}[3]{\ensuremath{\inparens{#1}
-  \inparens{#2}{{\ifblank{#3}{\mivector{\_ , \_ , \_}}{#3}}}}}
-\newcommand*{\gravitationalpotentialenergyplaces}[3]{\ensuremath{%
-  -\genericpotentialenergyplaces{\universalgrav}{#1}{#2}{#3}}}
-\newcommand*{\electricpotentialenergyplaces}[3]{%
-  \genericpotentialenergyplaces{\oofpez}{#1}{#2}{#3}}
-\newcommand*{\springpotentialenergyplaces}[2]{\ensuremath{%
-  \onehalf\inparens{#1}\inparens{#2}^2}}
-\newcommand*{\electricdipoleonaxisplaces}[4]{%
-  \genericelectricdipoleonaxisplaces{\oofpez}{\absof{#1}}{#2}{#3}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}}
-\newcommand*{\electricdipoleonbisectorplaces}[4]{%
-  \genericelectricdipoleplaces{\oofpez}{\absof{#1}}{#2}{#3}{{\ifblank{#4}{%
-  \mivector{\_ , \_ , \_}}{#4}}}}
-\newcommand{\define}[2]{\newcommand{#1}{#2}}
-\newcommand*{\momentumprinciple}{\ensuremath{%
-  \vectsub{p}{sys,final}=\vectsub{p}{sys,initial}+\Fnetsys\Delta t}}
-\newcommand*{\LHSmomentumprinciple}{\ensuremath{\vectsub{p}{sys,final}}}
-\newcommand*{\RHSmomentumprinciple}{\ensuremath{%
-  \vectsub{p}{sys,initial}+\Fnetsys\Delta t}}
-\newcommand*{\momentumprinciplediff}{\ensuremath{%
-  \Dvectsub{p}{sys}=\Fnetsys\Delta t}}
-\newcommand*{\energyprinciple}{\ensuremath{%
-  \ssub{E}{sys,final}=\ssub{E}{sys,initial}+W+Q}}
-\newcommand*{\LHSenergyprinciple}{\ensuremath{\ssub{E}{sys,final}}}
-\newcommand*{\RHSenergyprinciple}{\ensuremath{\ssub{E}{sys,initial}+W+Q}}
-\newcommand*{\energyprinciplediff}{\ensuremath{\Delta\ssub{E}{sys}=W+Q}}
-\newcommand*{\angularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,final}=\vectsub{L}{\(A\),sys,initial}+\Tsub{net}\Delta t}}
-\newcommand*{\LHSangularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,final}}}
-\newcommand*{\RHSangularmomentumprinciple}{\ensuremath{%
-  \vectsub{L}{\(A\),sys,initial}+\Tsub{net}\Delta t}}
-\newcommand*{\angularmomentumprinciplediff}{\ensuremath{%
-  \Dvectsub{L}{\(A\),sys}=\Tsub{net}\Delta t}}
-\newcommand*{\gravitationalinteraction}{\ensuremath{%
-  \universalgravmathsymbol\frac{\msub{M}{1}\msub{M}{2}}{%
-  \magvectsub{r}{12}\squared}(-\dirvectsub{r}{12})}}
-\newcommand*{\electricinteraction}{\ensuremath{%
-  \oofpezmathsymbol\frac{\msub{Q}{1}\msub{Q}{2}}{\magvectsub{r}{12}\squared}
-  \dirvectsub{r}{12}}}
-\newcommand*{\springinteraction}{\ensuremath{\ks\magvect{s}(-\dirvect{s})}}
-\newcommand*{\Bfieldofparticle}{\ensuremath{%
-  \mzofpmathsymbol\frac{Q\magvect{v}}{\magsquaredvect{r}}\dirvect{v}\times
-  \dirvect{r}}}
-\newcommand*{\Efieldofparticle}{\ensuremath{%
-  \oofpezmathsymbol\frac{Q}{\magsquaredvect{r}}\dirvect{r}}}
-\newcommandx{\Esys}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{E}{sys}}{\ssub{E}{sys,#1}}}
-\newcommandx{\Us}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(s\)}}{\ssub{U}{\(s\),#1}}}
-\newcommandx{\Ug}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(g\)}}{\ssub{U}{\(g\),#1}}}
-\newcommandx{\Ue}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{U}{\(e\)}}{\ssub{U}{\(e\),#1}}}
-\newcommandx{\Ktrans}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{K}{trans}}
-  {\ssub{K}{trans,#1}}}
-\newcommandx{\Krot}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{K}{rot}}{\ssub{K}{rot,#1}}}
-\newcommandx{\Kvib}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{K}{vib}}{\ssub{K}{vib,#1}}}
-\newcommandx{\Eparticle}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{particle}}
-  {\ssub{E}{particle,#1}}}
-\newcommandx{\Einternal}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{internal}}
-  {\ssub{E}{internal,#1}}}
-\newcommandx{\Erest}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{rest}}{\ssub{E}
-  {rest,#1}}}
-\newcommandx{\Echem}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{chem}}{\ssub{E}
-  {chem,#1}}}
-\newcommandx{\Etherm}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{therm}}
-  {\ssub{E}{therm,#1}}}
-\newcommandx{\Evib}[1][1]{\ifthenelse{%
-  \equal{#1}{}}{\ssub{E}{vib}}{\ssub{E}{vib,#1}}}
-\newcommandx{\Ephoton}[1][1]{\ifthenelse{\equal{#1}{}}{\ssub{E}{photon}}
-  {\ssub{E}{photon,#1}}}
-\newcommand*{\DEsys}{\Changein\Esys}
-\newcommand*{\DUs}{\Changein\Us}
-\newcommand*{\DUg}{\Changein\Ug}
-\newcommand*{\DUe}{\Changein\Ue}
-\newcommand*{\DKtrans}{\Changein\Ktrans}
-\newcommand*{\DKrot}{\Changein\Krot}
-\newcommand*{\DKvib}{\Changein\Kvib}
-\newcommand*{\DEparticle}{\Changein\Eparticle}
-\newcommand*{\DEinternal}{\Changein\Einternal}
-\newcommand*{\DErest}{\Changein\Erest}
-\newcommand*{\DEchem}{\Changein\Echem}
-\newcommand*{\DEtherm}{\Changein\Etherm}
-\newcommand*{\DEvib}{\Changein\Evib}
-\newcommand*{\DEphoton}{\Changein\Ephoton}
-\newcommand*{\springpotentialenergy}{\onehalf\ks\magsquaredvect{s}}
-\newcommand*{\finalspringpotentialenergy}
-  {\ssub{\left(\springpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialspringpotentialenergy}
-  {\ssub{\left(\springpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\gravitationalpotentialenergy}{\ensuremath{%
-  -G\frac{\msub{M}{1}\msub{M}{2}}{\magvectsub{r}{12}}}}
-\newcommand*{\finalgravitationalpotentialenergy}
-  {\ssub{\left(\gravitationalpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialgravitationalpotentialenergy}
-  {\ssub{\left(\gravitationalpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\electricpotentialenergy}{\ensuremath{%
-  \oofpezmathsymbol\frac{\ssub{Q}{1}\ssub{Q}{2}}{\magvectsub{r}{12}}}}
-\newcommand*{\finalelectricpotentialenergy}
-  {\ssub{\left(\electricpotentialenergy\right)}{\!\!final}}
-\newcommand*{\initialelectricpotentialenergy}
-  {\ssub{\left(\electricpotentialenergy\right)}{\!\!initial}}
-\newcommand*{\ks}{\msub{k}{s}}
-\newcommand*{\Fnet}{\ensuremath{\vectsub{F}{net}}}
-\newcommand*{\Fnetext}{\ensuremath{\vectsub{F}{net,ext}}}
-\newcommand*{\Fnetsys}{\ensuremath{\vectsub{F}{net,sys}}}
-\newcommand*{\Fsub}[1]{\ensuremath{\vectsub{F}{#1}}}
-\newcommand*{\Ltotal}{\ensuremath{\vectsub{L}{\(A\),total}}}
-\newcommand*{\Lsys}{\ensuremath{\vectsub{L}{\(A\),sys}}}
-\newcommand*{\Lsub}[1]{\ensuremath{\vectsub{L}{\(A\),{#1}}}}
-\newcommand*{\Tnet}{\ensuremath{\vectsub{\tau}{\(A\),net}}}
-\newcommand*{\Tnetext}{\ensuremath{\vectsub{\tau}{\(A\),net,ext}}}
-\newcommand*{\Tnetsys}{\ensuremath{\vectsub{\tau}{\(A\),net,sys}}}
-\newcommand*{\Tsub}[1]{\ensuremath{\vectsub{\tau}{\(A\),#1}}}
-\newcommand*{\LHSmaxwelliint}[1][\partial V]{\ensuremath{%
-  \closedsurfaceintegral{#1}{\vect{E}}}}
-\newcommand*{\RHSmaxwelliint}{\ensuremath{\frac{\ssub{Q}{\(e\),net}}%
-  {\vacuumpermittivitymathsymbol}}}
-\newcommand*{\RHSmaxwelliinta}[1][V]{\ensuremath{%
-  \frac{1}{\vacuumpermittivitymathsymbol}\volumeintegral{#1}{\msub{\rho}{e}}}}
-\newcommand*{\RHSmaxwelliintfree}{\ensuremath{0}}
-\newcommand*{\maxwelliint}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliint}}
-\newcommandx*{\maxwelliinta}[2][1={\partial V},2={V},usedefault]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliinta[#2]}}
-\newcommand*{\maxwelliintfree}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliint[#1]=\RHSmaxwelliintfree}}
-\newcommand*{\LHSmaxwelliiint}[1][\partial V]{\ensuremath{%
-  \closedsurfaceintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwelliiint}{\ensuremath{0}}
-\newcommand*{\RHSmaxwelliiintm}{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\ssub{Q}{\(m\),net}}}
-\newcommand*{\RHSmaxwelliiintma}[1][V]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\volumeintegral{#1}{\msub{\rho}{m}}}}
-\newcommand*{\RHSmaxwelliiintfree}{\ensuremath{0}}
-\newcommand*{\maxwelliiint}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiint}}
-\newcommand*{\maxwelliiintm}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintm}}
-\newcommandx*{\maxwelliiintma}[2][1={\partial V},2={V},usedefault]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintma[#2]}}
-\newcommand*{\maxwelliiintfree}[1][\partial V]{\ensuremath{%
-  \LHSmaxwelliiint[#1]=\RHSmaxwelliiintfree}}
-\newcommand*{\LHSmaxwelliiiint}[1][\partial\Omega]{\ensuremath{%
-  \closedlineintegral{#1}{\vect{E}}}}
-\newcommand*{\RHSmaxwelliiiint}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwelliiiintm}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}%
-  -\vacuumpermeabilitymathsymbol\ssub{I}{\(m\),net}}}
-\newcommand*{\RHSmaxwelliiiintma}[1][\Omega]{\ensuremath{%
-  -\dbydt\opensurfaceintegral{#1}{\vect{B}}%
-  -\vacuumpermeabilitymathsymbol\opensurfaceintegral{#1}{\vectsub{J}{\(m\)}}}}
-\newcommand*{\RHSmaxwelliiiintfree}{\RHSmaxwelliiiint}
-\newcommandx*{\maxwelliiiint}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiint[#2]}}
-\newcommandx*{\maxwelliiiintm}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiintm[#2]}}
-\newcommandx*{\maxwelliiiintma}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwelliiiint[#1]=\RHSmaxwelliiiintma[#2]}}
-\newcommand*{\maxwelliiiintfree}{\maxwelliiiint}
-\newcommand*{\LHSmaxwellivint}[1][\partial\Omega]{\ensuremath{%
-  \closedlineintegral{#1}{\vect{B}}}}
-\newcommand*{\RHSmaxwellivint}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}+%
-  \vacuumpermeabilitymathsymbol\ssub{I}{\(e\),net}}}
-\newcommand*{\RHSmaxwellivinta}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}+%
-  \vacuumpermeabilitymathsymbol\opensurfaceintegral{#1}{\vectsub{J}{\(e\)}}}}
-\newcommand*{\RHSmaxwellivintfree}[1][\Omega]{\ensuremath{%
-  \vacuumpermeabilitymathsymbol\vacuumpermittivitymathsymbol%
-  \dbydt\opensurfaceintegral{#1}{\vect{E}}}}
-\newcommandx*{\maxwellivint}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivint[#2]}}
-\newcommandx*{\maxwellivinta}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivinta[#2]}}
-\newcommandx*{\maxwellivintfree}[2][1={\partial\Omega},2={\Omega},usedefault]%
-  {\ensuremath{\LHSmaxwellivint[#1]=\RHSmaxwellivintfree[#2]}}
-\newcommand*{\LHSmaxwellidif}{\ensuremath{\divergence{\vect{E}}}}
-\newcommand*{\RHSmaxwellidif}{\ensuremath{\frac{\msub{\rho}{e}}
-  {\vacuumpermittivitymathsymbol}}}
-\newcommand*{\RHSmaxwellidiffree}{\ensuremath{0}}
-\newcommand*{\maxwellidif}{\ensuremath{\LHSmaxwellidif=\RHSmaxwellidif}}
-\newcommand*{\maxwellidiffree}{\ensuremath{\LHSmaxwellidif=\RHSmaxwellidiffree}}
-\newcommand*{\LHSmaxwelliidif}{\ensuremath{\divergence{\vect{B}}}}
-\newcommand*{\RHSmaxwelliidif}{\ensuremath{0}}
-\newcommand*{\RHSmaxwelliidifm}{\ensuremath{\vacuumpermeabilitymathsymbol%
-  \msub{\rho}{m}}}
-\newcommand*{\RHSmaxwelliidiffree}{\ensuremath{0}}
-\newcommand*{\maxwelliidif}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidif}}
-\newcommand*{\maxwelliidifm}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidifm}}
-\newcommand*{\maxwelliidiffree}{\ensuremath{\LHSmaxwelliidif=\RHSmaxwelliidiffree}}
-\newcommand*{\LHSmaxwelliiidif}{\ensuremath{\curl{\vect{E}}}}
-\newcommand*{\RHSmaxwelliiidif}{\ensuremath{-\pbypt[\vect{B}]}}
-\newcommand*{\RHSmaxwelliiidifm}{\ensuremath{-\pbypt[\vect{B}]-%
-  \vacuumpermeabilitymathsymbol\vectsub{J}{\(m\)}}}
-\newcommand*{\RHSmaxwelliiidiffree}{\RHSmaxwelliiidif}
-\newcommand*{\maxwelliiidif}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidif}}
-\newcommand*{\maxwelliiidifm}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidifm}}
-\newcommand*{\maxwelliiidiffree}{\ensuremath{\LHSmaxwelliiidif=\RHSmaxwelliiidif}}
-\newcommand*{\LHSmaxwellivdif}{\ensuremath{\curl{\vect{B}}}}
-\newcommand*{\RHSmaxwellivdif}{\ensuremath{\vacuumpermeabilitymathsymbol%
-  \vacuumpermittivitymathsymbol\pbypt[\vect{E}]+%
-  \vacuumpermeabilitymathsymbol\vectsub{J}{\(e\)}}}
-\newcommand*{\RHSmaxwellivdiffree}{\ensuremath{\vacuumpermeabilitymathsymbol
-  \vacuumpermittivitymathsymbol\pbypt[\vect{E}]}}
-\newcommand*{\maxwellivdif}{\ensuremath{\LHSmaxwellivdif=\RHSmaxwellivdif}}
-\newcommand*{\maxwellivdiffree}{\ensuremath{\LHSmaxwellivdif=\RHSmaxwellivdiffree}}
-\newcommand*{\RHSlorentzforce}{\ensuremath{\msub{q}{e}\left(\vect{E}+%
-  \vectcrossvect{\vect{v}}{\vect{B}}\right)}}
-\newcommand*{\RHSlorentzforcem}{\ensuremath{\RHSlorentzforce+\msub{q}{m}\left(%
-  \vect{B}-\vectcrossvect{\vect{v}}{\frac{\vect{E}}{c^2}}\right)}}
-\newcommandx{\eulerlagrange}[1][1={q_i},usedefault]{\ensuremath{%
-  \pbyp{\mathcal{L}}{#1}-\dbydt\inparens{\pbyp{\mathcal{L}}{\dot{#1}}} = 0}}
-\newcommandx{\Eulerlagrange}[1][1={q_i},usedefault]{\ensuremath{%
-  \DbyD{\mathcal{L}}{#1}-\DbyDt\inparens{\DbyD{\mathcal{L}}{\dot{#1}}} = 0}}
-\newcommand*{\vpythonline}{\lstinline[style=vpython]}
-\newcommand*{\glowscriptline}{\lstinline[style=vpython]}
-\lstnewenvironment{vpythonblock}[2]{%
-  \lstset{style=vpython,caption={#1},label={#2}}}{}
-\lstnewenvironment{glowscriptblock}[2]{%
-  \lstset{style=vpython,caption={#1},label={#2}}}{}
-\newcommand*{\vpythonfile}[3]{%
-  \newpage\lstinputlisting[style=vpython,caption={#1},label={#2}]{#3}}
-\newcommand*{\glowscriptfile}[3]{%
-  \newpage\lstinputlisting[style=vpython,caption={#1},label={#2}]{#3}}
-\newcommandx{\emptyanswer}[2][1=0.80,2=0.1,usedefault]
-  {\begin{minipage}{#1\textwidth}\hfill\vspace{#2\textheight}\end{minipage}}
-\newenvironmentx{activityanswer}[5][1=white,2=black,3=black,4=0.90,%
-  5=0.10,usedefault]{%
-  \def\skipper{#5}%
-  \def\response at fbox{\fcolorbox{#2}{#1}}%
-  \begin{center}%
-    \begin{lrbox}{\@tempboxa}%
-      \begin{minipage}[c][#5\textheight][c]{#4\textwidth}\color{#3}%
-        \vspace{#5\textheight}}{%
-        \vspace{\skipper\textheight}%
-      \end{minipage}%
-    \end{lrbox}%
-    \response at fbox{\usebox{\@tempboxa}}%
-  \end{center}%
-}%
-\newenvironmentx{adjactivityanswer}[5][1=white,2=black,3=black,4=0.90,5=0.00,%
-  usedefault]{%
-  \def\skipper{#5}%
-  \def\response at fbox{\fcolorbox{#2}{#1}}%
-  \begin{center}%
-    \begin{lrbox}{\@tempboxa}%
-      \begin{minipage}[c]{#4\textwidth}\color{#3}%
-        \vspace{#5\textheight}}{%
-        \vspace{\skipper\textheight}%
-      \end{minipage}%
-    \end{lrbox}%
-    \response at fbox{\usebox{\@tempboxa}}%
-  \end{center}%
-}%
-\newcommandx{\emptybox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.10,usedefault]%
-  {\begin{center}%
-     \fcolorbox{#3}{#2}{%
-       \begin{minipage}[c][#6\textheight][c]{#5\textwidth}\color{#4}%
-         {#1}%
-       \end{minipage}}%
-     \vspace{\baselineskip}%
-   \end{center}%
-}%
-\newcommandx{\adjemptybox}[7][1=\hfill,2=white,3=black,4=black,5=0.90,6=,%
-  7=0.0,usedefault]
-  {\begin{center}%
-     \fcolorbox{#3}{#2}{%
-       \begin{minipage}[c]{#5\textwidth}\color{#4}%
-         \vspace{#7\textheight}%
-           {#1}%
-         \vspace{#7\textheight}%
-       \end{minipage}}%
-     \vspace{\baselineskip}%
-   \end{center}%
-}%
-\newcommandx{\answerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.1,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\adjanswerbox}[7][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.1,7=0.0,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\adjemptybox[#1][#2][#3][#4][#5][#6][#7]}%
-}%
-\newcommandx{\smallanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.10,usedefault]%
-  {\ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\smallanswerform}[4][1=q1,2=Response,3=0.10,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\mediumanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.20,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\mediumanswerform}[4][1=q1,2=Response,3=0.20,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\largeanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.25,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\largeanswerform}[4][1=q1,2=Response,3=0.25,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\largeranswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.33,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\largeranswerform}[4][1=q1,2=Response,3=0.33,4=0.90,%
-  usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\hugeanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.50,usedefault]{%
-  \ifthenelse{\equal{#1}{}}
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\hugeanswerform}[4][1=q1,2=Response,3=0.50,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\hugeranswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=0.75,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\hugeranswerform}[4][1=q1,2=Response,3=0.75,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\newcommandx{\fullpageanswerbox}[6][1=\hfill,2=white,3=black,4=black,5=0.90,%
-  6=1.00,usedefault]{%
-  \ifthenelse{\equal{#1}{}}%
-    {\begin{center}%
-       \fcolorbox{#3}{#2}{%
-         \emptyanswer[#5][#6]}%
-     \vspace{\baselineskip}%
-     \end{center}}%
-    {\emptybox[#1][#2][#3][#4][#5][#6]}%
-}%
-\newcommandx{\fullpageanswerform}[4][1=q1,2=Response,3=1.00,4=0.90,usedefault]{%
-  \vspace{\baselineskip}%
-    \begin{Form}
-      \begin{center}%
-        \TextField[value={#2},%
-        name=#1,%
-        width=#4\linewidth,%
-        height=#3\textheight,%
-        backgroundcolor=formcolor,%
-        multiline=true,%
-        charsize=10pt,%
-        bordercolor=black]{}%
-      \end{center}%
-    \end{Form}%
-  \vspace{\baselineskip}%
-}%
-\mdfdefinestyle{miinstructornotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={INSTRUCTOR NOTE},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{miinstructornote}{%
-  \begin{mdframed}[style=miinstructornotestyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{mistudentnotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STUDENT NOTE},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{mistudentnote}{%
-  \begin{mdframed}[style=mistudentnotestyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{miderivationstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=0pt,rightmargin=0pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={DERIVATION},
-    frametitlebackgroundcolor=orange!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=orange!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{miderivation}{%
-  \begin{mdframed}[style=miderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align}
-      \BODY
-    \end{align}
-  \end{mdframed}
-}%
-\NewEnviron{miderivation*}{%
-  \begin{mdframed}[style=miderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align*}
-      \BODY
-    \end{align*}
-  \end{mdframed}
-}%
-\mdfdefinestyle{mistandardstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STANDARD},
-    frametitlebackgroundcolor=cyan!60,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=cyan!25,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{mistandard}{%
-  \begin{mdframed}[style=mistandardstyle]
-    \begin{adjactivityanswer}[cyan!25][cyan!25][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwinstructornotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={INSTRUCTOR NOTE},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwinstructornote}{%
-  \begin{mdframed}[style=bwinstructornotestyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwstudentnotestyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STUDENT NOTE},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwstudentnote}{%
-  \begin{mdframed}[style=bwstudentnotestyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwderivationstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=0pt,rightmargin=0pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={DERIVATION},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwderivation}{%
-  \begin{mdframed}[style=bwderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align}
-      \BODY
-    \end{align}
-  \end{mdframed}
-}%
-\NewEnviron{bwderivation*}{%
-  \begin{mdframed}[style=bwderivationstyle]
-  \setcounter{equation}{0}
-    \begin{align*}
-      \BODY
-    \end{align*}
-  \end{mdframed}
-}%
-\mdfdefinestyle{bwstandardstyle}{%
-    hidealllines=false,skipbelow=\baselineskip,skipabove=\baselineskip,
-    leftmargin=40pt,rightmargin=40pt,linewidth=1,roundcorner=10,
-    nobreak=true,
-    frametitle={STANDARD},
-    frametitlebackgroundcolor=gray!50,frametitlerule=true,frametitlerulewidth=1,
-    backgroundcolor=gray!20,
-    linecolor=black,fontcolor=black,shadow=true}
-\NewEnviron{bwstandard}{%
-  \begin{mdframed}[style=bwstandardstyle]
-    \begin{adjactivityanswer}[gray!20][gray!20][black]
-      \BODY
-    \end{adjactivityanswer}
-  \end{mdframed}
-}%
-\NewEnviron{mysolution}{%
-  \setcounter{equation}{0}
-  \begin{align}
-    \BODY
-  \end{align}
-}%
-\NewEnviron{mysolution*}{%
-  \setcounter{equation}{0}
-  \begin{align*}
-    \BODY
-  \end{align*}
-}%
-\newenvironment{problem}[1]{%
-  \newpage%
-  \section*{#1}%
-  \newlist{parts}{enumerate}{2}%
-  \setlist[parts]{label=(\alph*)}}{\newpage}
-\newcommand{\problempart}{\item}%
-\newcommand{\reason}[1]{\begin{minipage}{5cm}{#1}\end{minipage}}
-\newcommand*{\checkpoint}{%
-  \vspace{1cm}\begin{center}%
-    \colorbox{yellow!80}{|--------- CHECKPOINT ---------|}%
-  \end{center}}%
-\newcommandx*{\image}[4][1={scale=1},usedefault]{%
-  \begin{figure}[H]
-    \begin{center}%
-      \includegraphics[#1]{#2}%
-    \end{center}%
-    \caption{#3}%
-    \label{#4}%
-  \end{figure}}
-\newcommand*{\sneakyone}[1]{\ensuremath{\cancelto{1}{#1}}}
-\newcommand*{\parallelto}{\ensuremath{{{\mkern3mu\vphantom{\perp}\vrule depth 0pt
-  \mkern2mu\vrule depth 0pt\mkern3mu}}}}
-\newcommand*{\perpendicularto}{\ensuremath{\perp}}
-\newcommand*{\qed}{\ensuremath{\text{ Q.E.D.}}}
-\newcommand*{\chkquantity}[1]{%
-  \begin{center}
-    \begin{tabular}{C{4.5cm} C{4cm} C{4cm} C{4cm}}
-      name    & baseunit & drvdunit & altnunit \tabularnewline
-      \cs{#1} & \csname #1onlybaseunit\endcsname & \csname #1onlydrvdunit\endcsname &
-        \csname #1onlyaltnunit\endcsname
-    \end{tabular}
-  \end{center}
-}%
-\newcommand*{\chkconstant}[1]{%
-  \begin{center}
-    \begin{tabular}{C{4cm} C{4cm} C{4cm}}
-      name    & symbol & value \tabularnewline
-      \cs{#1} & \csname #1mathsymbol\endcsname & \csname #1value\endcsname
-      \tabularnewline
-      baseunit & drvdunit & altnunit \tabularnewline
-      \csname #1onlybaseunit\endcsname & \csname #1onlydrvdunit\endcsname &
-      \csname #1onlyaltnunit\endcsname
-    \end{tabular}
-  \end{center}
-}%
 \endinput
 %%
 %% End of file `mandi.sty'.

Added: trunk/Master/texmf-dist/tex/latex/mandi/mandiexp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/mandi/mandiexp.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/mandi/mandiexp.sty	2021-08-22 19:58:29 UTC (rev 60300)
@@ -0,0 +1,201 @@
+%%
+%% This is file `mandiexp.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% mandiexp.dtx  (with options: `package')
+%% 
+%%  Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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 Paul J. Heafner.
+%% 
+%%  This work consists of the files mandi.dtx
+%%                                  mandistudent.dtx
+%%                                  mandiexp.dtx
+%%                                  mandi.ins
+%%                                  mandi.pdf
+%%                                  README.md
+%% 
+%%  and includes the derived files  mandi.sty
+%%                                  mandistudent.sty
+%%                                  mandiexp.sty
+%%                                  vdemo.py
+%%  ---------------------------------------------------------------------------
+%% 
+\def\mandiexp at version{\mandi at version}
+\def\mandiexp at date{\mandi at date}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandiexp.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandiexp}
+  [\mandiexp at date\space v\mandiexp at version\space Macros for Matter & Interactions]
+\newcommand*{\mandiexpversion}{v\mandiexp at version\space dated \mandiexp at date}
+\RequirePackage{mandi}
+\typeout{}%
+\typeout{mandiexp: You are using mandiexp \mandiexpversion.}
+\typeout{mandiexp: This package requires LuaLaTeX.}%
+\typeout{}%
+\NewDocumentCommand{\lhsmomentumprinciple}{ s }{%
+  \Delta
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys}}%
+}%
+\NewDocumentCommand{\rhsmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{F}}%
+    {\vec{F}}%
+  _{\symup{sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\lhsmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{p}}%
+    {\vec{p}}%
+  _{\symup{sys,initial}}+%
+  \IfBooleanTF{#1}%
+    {\vec*{F}}%
+    {\vec{F}}%
+  _{\symup{sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\momentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsmomentumprinciple* = \rhsmomentumprinciple*}%
+    {\lhsmomentumprinciple = \rhsmomentumprinciple}%
+}%
+\NewDocumentCommand{\momentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsmomentumprincipleupdate* = \rhsmomentumprincipleupdate*}%
+    {\lhsmomentumprincipleupdate = \rhsmomentumprincipleupdate}%
+}%
+\NewDocumentCommand{\lhsenergyprinciple}{}{%
+  \Delta E_{\symup{sys}}%
+}%
+\NewDocumentCommand{\rhsenergyprinciple}{ O{} }{%
+  W_{\symup{ext}}#1%
+}%
+\NewDocumentCommand{\lhsenergyprincipleupdate}{}{%
+  E_{\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsenergyprincipleupdate}{ O{} }{%
+  E_{\symup{sys,initial}}+%
+  W_{\symup{ext}}#1%
+}%
+\NewDocumentCommand{\energyprinciple}{ O{} }{%
+  \lhsenergyprinciple = \rhsenergyprinciple[#1]%
+}%
+\NewDocumentCommand{\energyprincipleupdate}{ O{} }{%
+  \lhsenergyprincipleupdate = \rhsenergyprincipleupdate[#1]%
+}%
+\NewDocumentCommand{\lhsangularmomentumprinciple}{ s }{%
+  \Delta
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A\symup{,sys,net}}%
+}%
+\NewDocumentCommand{\rhsangularmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{\tau}}%
+    {\vec{\tau}}%
+  _{A\symup{,sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\lhsangularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A,\symup{sys,final}}%
+}%
+\NewDocumentCommand{\rhsangularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\vec*{L}}%
+    {\vec{L}}%
+  _{A\symup{,sys,initial}}+%
+  \IfBooleanTF{#1}%
+    {\vec*{\tau}}%
+    {\vec{\tau}}%
+  _{A\symup{,sys,net}}\,\Delta t%
+}%
+\NewDocumentCommand{\angularmomentumprinciple}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsangularmomentumprinciple* = \rhsangularmomentumprinciple*}%
+    {\lhsangularmomentumprinciple = \rhsangularmomentumprinciple}%
+}%
+\NewDocumentCommand{\angularmomentumprincipleupdate}{ s }{%
+  \IfBooleanTF{#1}%
+    {\lhsangularmomentumprincipleupdate* = \rhsangularmomentumprincipleupdate*}%
+    {\lhsangularmomentumprincipleupdate = \rhsangularmomentumprincipleupdate}%
+}%
+\NewDocumentCommand{\energyof}{ m o }{%
+  E_{#1\IfValueT{#2}{,#2}}%
+}%
+\NewDocumentCommand{\systemenergy}{ o }{%
+  E_{\symup{sys}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\particleenergy}{ o }{%
+  E_{\symup{particle}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\restenergy}{ o }{%
+  E_{\symup{rest}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\internalenergy}{ o }{%
+  E_{\symup{internal}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\chemicalenergy}{ o }{%
+  E_{\symup{chem}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\thermalenergy}{ o }{%
+  E_{\symup{therm}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\photonenergy}{ o }{%
+  E_{\symup{photon}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\translationalkineticenergy}{ s d[] }{%
+  \IfBooleanTF{#1}%
+  {E_\bgroup \symup{K}}%
+  {K_\bgroup\symup{trans}}%
+       \IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\rotationalkineticenergy}{ s d[] }{%
+  \IfBooleanTF{#1}%
+  {E_\bgroup}%
+  {K_\bgroup}%
+       \symup{rot}\IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\vibrationalkineticenergy}{ s d[] }{%
+  \IfBooleanTF{#1}%
+  {E_\bgroup}%
+  {K_\bgroup}%
+       \symup{vib}\IfValueT{#2}{,#2}%
+     \egroup%
+}%
+\NewDocumentCommand{\gravitationalpotentialenergy}{ o }{%
+  U_{\symup{g}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\electricpotentialenergy}{ o }{%
+  U_{\symup{e}\IfValueT{#1}{,#1}}%
+}%
+\NewDocumentCommand{\springpotentialenergy}{ o }{%
+  U_{\symup{s}\IfValueT{#1}{,#1}}%
+}%
+\endinput
+%%
+%% End of file `mandiexp.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/mandi/mandiexp.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/latex/mandi/mandistudent.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/mandi/mandistudent.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/mandi/mandistudent.sty	2021-08-22 19:58:29 UTC (rev 60300)
@@ -0,0 +1,473 @@
+%%
+%% This is file `mandistudent.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% mandistudent.dtx  (with options: `package')
+%% 
+%%  Copyright (C) 2021 by Paul J. Heafner <heafnerj at 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 Paul J. Heafner.
+%% 
+%%  This work consists of the files mandi.dtx
+%%                                  mandistudent.dtx
+%%                                  mandiexp.dtx
+%%                                  mandi.ins
+%%                                  mandi.pdf
+%%                                  README.md
+%% 
+%%  and includes the derived files  mandi.sty
+%%                                  mandistudent.sty
+%%                                  mandiexp.sty
+%%                                  vdemo.py
+%%  ---------------------------------------------------------------------------
+%% 
+\def\mandistudent at version{\mandi at version}
+\def\mandistudent at date{\mandi at date}
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+\DeclareRelease{v3.0.0}{2021-08-21}{mandistudent.sty}
+\DeclareCurrentRelease{v\mandi at version}{\mandi at date}
+\ProvidesPackage{mandistudent}
+  [\mandistudent at date\space v\mandistudent at version\space Macros for introductory physics]
+\newcommand*{\mandistudentversion}{v\mandistudent at version\space dated \mandistudent at date}
+\RequirePackage{amsmath}             % AMS goodness (don't load amssymb or amsfonts)
+\RequirePackage[inline]{enumitem}    % needed for physicsproblem environment
+\RequirePackage{eso-pic}             % needed for \hilite
+\RequirePackage[g]{esvect}           % needed for nice vector arrow, style g
+\RequirePackage{pgfopts}             % needed for key-value interface
+\RequirePackage{iftex}               % needed for requiring LuaLaTeX
+\RequirePackage{makebox}             % needed for consistent \dirvect; \makebox
+\RequirePackage{mandi}
+\RequirePackage{mathtools}           % needed for paired delimiters; extends amsmath
+\RequirePackage{nicematrix}          % needed for column and row vectors
+\RequirePackage[most]{tcolorbox}     % needed for program listings
+\RequirePackage{tensor}              % needed for index notation
+\RequirePackage{tikz}                % needed for \hilite
+\usetikzlibrary{shapes,fit,tikzmark} % needed for \hilite
+\RequirePackage{unicode-math}        % needed for Unicode support
+\RequirePackage{hyperref}            % load last
+\RequireLuaTeX                       % require this engine
+\unimathsetup{math-style=ISO}
+\unimathsetup{warnings-off={mathtools-colon,mathtools-overbracket}}
+\setmathfont[Scale=MatchLowercase]
+  {Latin Modern Math}    % default math font; better J
+\setmathfont[Scale=MatchLowercase,range={sfit/{latin},bfsfit/{latin}}]
+  {TeX Gyre DejaVu Math} % single-storey lowercase g
+\setmathfont[Scale=MatchLowercase,range={sfup/{latin},bfsfup/{latin}}]
+  {TeX Gyre DejaVu Math} % single-storey lowercase g
+\setmathfont[Scale=MatchLowercase,range={\mathscr,\mathbfscr}]{XITS Math}
+\setmathfont[Scale=MatchLowercase,range={\mathcal,\mathbfcal},StylisticSet=1]{XITS Math}
+\setmathfont[Scale=MatchLowercase,range={"E17C-"E1F6}]{STIX Two Math}
+\newfontfamily{\symsfgreek}{STIX Two Math}
+\newcommand{\symsfupalpha}      {\text{\symsfgreek{^^^^e196}}}
+\newcommand{\symsfupbeta}       {\text{\symsfgreek{^^^^e197}}}
+\newcommand{\symsfupgamma}      {\text{\symsfgreek{^^^^e198}}}
+\newcommand{\symsfupdelta}      {\text{\symsfgreek{^^^^e199}}}
+\newcommand{\symsfupepsilon}    {\text{\symsfgreek{^^^^e1af}}}
+\newcommand{\symsfupvarepsilon} {\text{\symsfgreek{^^^^e19a}}}
+\newcommand{\symsfupzeta}       {\text{\symsfgreek{^^^^e19b}}}
+\newcommand{\symsfupeta}        {\text{\symsfgreek{^^^^e19c}}}
+\newcommand{\symsfuptheta}      {\text{\symsfgreek{^^^^e19d}}}
+\newcommand{\symsfupvartheta}   {\text{\symsfgreek{^^^^e1b0}}}
+\newcommand{\symsfupiota}       {\text{\symsfgreek{^^^^e19e}}}
+\newcommand{\symsfupkappa}      {\text{\symsfgreek{^^^^e19f}}}
+\newcommand{\symsfuplambda}     {\text{\symsfgreek{^^^^e1a0}}}
+\newcommand{\symsfupmu}         {\text{\symsfgreek{^^^^e1a1}}}
+\newcommand{\symsfupnu}         {\text{\symsfgreek{^^^^e1a2}}}
+\newcommand{\symsfupxi}         {\text{\symsfgreek{^^^^e1a3}}}
+\newcommand{\symsfupomicron}    {\text{\symsfgreek{^^^^e1a4}}}
+\newcommand{\symsfuppi}         {\text{\symsfgreek{^^^^e1a5}}}
+\newcommand{\symsfupvarpi}      {\text{\symsfgreek{^^^^e1b3}}}
+\newcommand{\symsfuprho}        {\text{\symsfgreek{^^^^e1a6}}}
+\newcommand{\symsfupvarrho}     {\text{\symsfgreek{^^^^e1b2}}}
+\newcommand{\symsfupsigma}      {\text{\symsfgreek{^^^^e1a8}}}
+\newcommand{\symsfupvarsigma}   {\text{\symsfgreek{^^^^e1a7}}}
+\newcommand{\symsfuptau}        {\text{\symsfgreek{^^^^e1a9}}}
+\newcommand{\symsfupupsilon}    {\text{\symsfgreek{^^^^e1aa}}}
+\newcommand{\symsfupphi}        {\text{\symsfgreek{^^^^e1b1}}}
+\newcommand{\symsfupvarphi}     {\text{\symsfgreek{^^^^e1ab}}}
+\newcommand{\symsfupchi}        {\text{\symsfgreek{^^^^e1ac}}}
+\newcommand{\symsfuppsi}        {\text{\symsfgreek{^^^^e1ad}}}
+\newcommand{\symsfupomega}      {\text{\symsfgreek{^^^^e1ae}}}
+\newcommand{\symsfupDelta}      {\text{\symsfgreek{^^^^e180}}}
+\newcommand{\symsfupGamma}      {\text{\symsfgreek{^^^^e17f}}}
+\newcommand{\symsfupTheta}      {\text{\symsfgreek{^^^^e18e}}}
+\newcommand{\symsfupLambda}     {\text{\symsfgreek{^^^^e187}}}
+\newcommand{\symsfupXi}         {\text{\symsfgreek{^^^^e18a}}}
+\newcommand{\symsfupPi}         {\text{\symsfgreek{^^^^e18c}}}
+\newcommand{\symsfupSigma}      {\text{\symsfgreek{^^^^e18f}}}
+\newcommand{\symsfupUpsilon}    {\text{\symsfgreek{^^^^e191}}}
+\newcommand{\symsfupPhi}        {\text{\symsfgreek{^^^^e192}}}
+\newcommand{\symsfupPsi}        {\text{\symsfgreek{^^^^e194}}}
+\newcommand{\symsfupOmega}      {\text{\symsfgreek{^^^^e195}}}
+\newcommand{\symsfitalpha}      {\text{\symsfgreek{^^^^e1d8}}}
+\newcommand{\symsfitbeta}       {\text{\symsfgreek{^^^^e1d9}}}
+\newcommand{\symsfitgamma}      {\text{\symsfgreek{^^^^e1da}}}
+\newcommand{\symsfitdelta}      {\text{\symsfgreek{^^^^e1db}}}
+\newcommand{\symsfitepsilon}    {\text{\symsfgreek{^^^^e1f1}}}
+\newcommand{\symsfitvarepsilon} {\text{\symsfgreek{^^^^e1dc}}}
+\newcommand{\symsfitzeta}       {\text{\symsfgreek{^^^^e1dd}}}
+\newcommand{\symsfiteta}        {\text{\symsfgreek{^^^^e1de}}}
+\newcommand{\symsfittheta}      {\text{\symsfgreek{^^^^e1df}}}
+\newcommand{\symsfitvartheta}   {\text{\symsfgreek{^^^^e1f2}}}
+\newcommand{\symsfitiota}       {\text{\symsfgreek{^^^^e1e0}}}
+\newcommand{\symsfitkappa}      {\text{\symsfgreek{^^^^e1e1}}}
+\newcommand{\symsfitlambda}     {\text{\symsfgreek{^^^^e1e2}}}
+\newcommand{\symsfitmu}         {\text{\symsfgreek{^^^^e1e3}}}
+\newcommand{\symsfitnu}         {\text{\symsfgreek{^^^^e1e4}}}
+\newcommand{\symsfitxi}         {\text{\symsfgreek{^^^^e1e5}}}
+\newcommand{\symsfitomicron}    {\text{\symsfgreek{^^^^e1e6}}}
+\newcommand{\symsfitpi}         {\text{\symsfgreek{^^^^e1e7}}}
+\newcommand{\symsfitvarpi}      {\text{\symsfgreek{^^^^e1f5}}}
+\newcommand{\symsfitrho}        {\text{\symsfgreek{^^^^e1e8}}}
+\newcommand{\symsfitvarrho}     {\text{\symsfgreek{^^^^e1f4}}}
+\newcommand{\symsfitsigma}      {\text{\symsfgreek{^^^^e1ea}}}
+\newcommand{\symsfitvarsigma}   {\text{\symsfgreek{^^^^e1e9}}}
+\newcommand{\symsfittau}        {\text{\symsfgreek{^^^^e1eb}}}
+\newcommand{\symsfitupsilon}    {\text{\symsfgreek{^^^^e1ec}}}
+\newcommand{\symsfitphi}        {\text{\symsfgreek{^^^^e1f3}}}
+\newcommand{\symsfitvarphi}     {\text{\symsfgreek{^^^^e1ed}}}
+\newcommand{\symsfitchi}        {\text{\symsfgreek{^^^^e1ee}}}
+\newcommand{\symsfitpsi}        {\text{\symsfgreek{^^^^e1ef}}}
+\newcommand{\symsfitomega}      {\text{\symsfgreek{^^^^e1f0}}}
+\newcommand{\symsfitDelta}      {\text{\symsfgreek{^^^^e1c2}}}
+\newcommand{\symsfitGamma}      {\text{\symsfgreek{^^^^e1c1}}}
+\newcommand{\symsfitTheta}      {\text{\symsfgreek{^^^^e1d0}}}
+\newcommand{\symsfitLambda}     {\text{\symsfgreek{^^^^e1c9}}}
+\newcommand{\symsfitXi}         {\text{\symsfgreek{^^^^e1cc}}}
+\newcommand{\symsfitPi}         {\text{\symsfgreek{^^^^e1ce}}}
+\newcommand{\symsfitSigma}      {\text{\symsfgreek{^^^^e1d1}}}
+\newcommand{\symsfitUpsilon}    {\text{\symsfgreek{^^^^e1d3}}}
+\newcommand{\symsfitPhi}        {\text{\symsfgreek{^^^^e1d4}}}
+\newcommand{\symsfitPsi}        {\text{\symsfgreek{^^^^e1d6}}}
+\newcommand{\symsfitOmega}      {\text{\symsfgreek{^^^^e1d7}}}
+\DeclareFontFamily{U}{esvect}{}
+\DeclareFontShape{U}{esvect}{m}{n}{%
+  <-5.5> vect5
+  <5.5-6.5> vect6
+  <6.5-7.5> vect7
+  <7.5-8.5> vect8
+  <8.5-9.5> vect9
+  <9.5-> vect10
+}{}%
+\typeout{}%
+\typeout{mandistudent: You are using mandistudent \mandistudentversion.}%
+\typeout{mandistudent: This package requires LuaLaTeX.}%
+\typeout{mandistudent: This package changes the default math font(s).}%
+\typeout{mandistudent: This package redefines the \protect\vec\space command.}%
+\typeout{}%
+\RenewDocumentCommand{\vec}{ s m e{_^} }{%
+    % Note the \, used to make superscript look better.
+    \IfBooleanTF {#1}
+      {\vv{#2}%      % * gives an arrow
+         % Use \sp{} primitive for superscript.
+         % Adjust superscript for the arrow.
+         \sp{\IfValueT{#4}{\,#4}\vphantom{\smash[t]{\big|}}}
+      }%
+      {\symbfit{#2}  % no * gives us bold
+         % Use \sp{} primitive for superscript.
+         % No superscript adjustment needed.
+         \sp{\IfValueT{#4}{#4}\vphantom{\smash[t]{\big|}}}
+      }%
+    % Use \sb{} primitive for subscript.
+    \sb{\IfValueT{#3}{#3}\vphantom{\smash[b]{|}}}
+}%
+\NewDocumentCommand{\dirvec}{ s m e{_^} }{%
+    \widehat{\makebox*{\(w\)}{\ensuremath{%
+      \IfBooleanTF {#1}
+        {%
+          #2
+        }%
+        {%
+          \symbfit{#2}
+        }%
+       }%
+      }%
+     }%
+    \sb{\IfValueT{#3}{#3}\vphantom{\smash[b]{|}}}
+    \sp{\IfValueT{#4}{\,#4}\vphantom{\smash[t]{\big|}}}
+}%
+\NewDocumentCommand{\zerovec}{ s }{%
+  \IfBooleanTF {#1}
+    {\vv{0}}%
+    {\symbfup{0}}%
+}%
+\ExplSyntaxOn
+\NewDocumentCommand{\colvec}{ O{,} m }{%
+  \vector_main:nnnn { p } { \\ } { #1 } { #2 }
+}%
+\NewDocumentCommand{\rowvec}{ O{,} m }{%
+  \vector_main:nnnn { p } { & } { #1 } { #2 }
+}%
+\seq_new:N \l__vector_arg_seq
+\cs_new_protected:Npn \vector_main:nnnn #1 #2 #3 #4 {%
+  \seq_set_split:Nnn \l__vector_arg_seq { #3 } { #4 }
+  \begin{#1NiceMatrix}[r]
+    \seq_use:Nnnn \l__vector_arg_seq { #2 } { #2 } { #2 }
+  \end{#1NiceMatrix}
+}%
+\ExplSyntaxOff
+\NewDocumentCommand{\changein}{}{\Delta}
+\DeclarePairedDelimiterX{\doublebars}[1]{\lVert}{\rVert}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\singlebars}[1]{\lvert}{\rvert}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\anglebrackets}[1]{\langle}{\rangle}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\parentheses}[1]{(}{)}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\squarebrackets}[1]{\lbrack}{\rbrack}{\ifblank{#1}{\:\cdot\:}{#1}}
+\DeclarePairedDelimiterX{\curlybraces}[1]{\lbrace}{\rbrace}{\ifblank{#1}{\:\cdot\:}{#1}}
+\NewDocumentCommand{\magnitude}{}{\doublebars}
+\NewDocumentCommand{\norm}{}{\doublebars}
+\NewDocumentCommand{\absolutevalue}{}{\singlebars}
+\NewDocumentCommand{\parallelto}{}
+  {\mkern3mu\vphantom{\perp}\vrule depth 0pt\mkern2mu\vrule depth 0pt\mkern3mu}
+\NewDocumentCommand{\perpendicularto}{}{\perp}
+\NewDocumentEnvironment{physicsproblem}{ m }{%
+  \newpage%
+  \section*{#1}%
+  \newlist{parts}{enumerate}{2}%
+  \setlist[parts]{label=\bfseries(\alph*)}}%
+  {}%
+\NewDocumentEnvironment{physicsproblem*}{ m }{%
+  \newpage%
+  \section*{#1}%
+  \newlist{parts}{enumerate*}{2}%
+  \setlist[parts]{label=\bfseries(\alph*)}}%
+  {}%
+\NewDocumentCommand{\problempart}{}{\item}%
+\NewDocumentEnvironment{physicssolution}{ +b }{%
+  % Make equation numbering consecutive through the document.
+  \begin{align}
+    #1
+  \end{align}
+}{}%
+\NewDocumentEnvironment{physicssolution*}{ +b }{%
+  % Make equation numbering consecutive through the document.
+  \begin{align*}
+    #1
+  \end{align*}
+}{}%
+\NewDocumentCommand{\reason}{ O{4cm} m }
+  {&&\begin{minipage}{#1}\raggedright\small #2\end{minipage}}
+\newcounter{tikzhighlightnode}
+\NewDocumentCommand{\hilite}{ O{magenta!60} m O{rectangle} }{%
+  \stepcounter{tikzhighlightnode}%
+  \tikzmarknode{highlighted-node-\number\value{tikzhighlightnode}}{#2}%
+  \edef\temp{%
+    \noexpand\AddToShipoutPictureBG{%
+      \noexpand\begin{tikzpicture}[overlay,remember picture]%
+      \noexpand\iftikzmarkoncurrentpage{highlighted-node-\number\value{tikzhighlightnode}}%
+       \noexpand\node[inner sep=1.0pt,fill=#1,#3,fit=(highlighted-node-\number\value{tikzhighlightnode})]{};%
+      \noexpand\fi
+      \noexpand\end{tikzpicture}%
+    }%
+  }%
+  \temp%
+}%
+\NewDocumentCommand{\image}{ O{scale=1} m m m }{%
+  \begin{figure}[ht!]
+    \begin{center}%
+      \includegraphics[#1]{#2}%
+    \end{center}%
+    \caption{#3}%
+    \label{#4}%
+  \end{figure}%
+}%
+\NewDocumentCommand{\veccomp}{ s m }{%
+  % Consider renaming this to \vectorsym.
+  \IfBooleanTF{#1}
+  {%
+    \symnormal{#2}%
+  }%
+  {%
+    \symbfit{#2}%
+  }%
+}%
+\NewDocumentCommand{\tencomp}{ s m }{%
+  % Consider renaming this to \tensororsym.
+  \IfBooleanTF{#1}
+  {%
+    \symsfit{#2}%
+  }%
+  {%
+    \symbfsfit{#2}
+  }%
+}%
+\NewDocumentCommand{\valence}{ s m m }{%
+  \IfBooleanTF{#1}
+    {(#2,#3)}
+    {\binom{#2}{#3}}
+}%
+\NewDocumentCommand{\contraction}{ s m }{%
+  \IfBooleanTF{#1}
+  {\mathsf{C}}%
+  {\symbb{C}}%
+  _{#2}
+}%
+\NewDocumentCommand{\slot}{ s d[] }{%
+  % d[] must be used because of the way consecutive optional
+  %  arguments are handled. See xparse docs for details.
+  \IfBooleanTF{#1}
+  {%
+    \IfValueTF{#2}
+    {% Insert a vector, but don't show the slot.
+      \smash{\makebox[1.5em]{\ensuremath{#2}}}
+    }%
+    {% No vector, no slot.
+      \smash{\makebox[1.5em]{\ensuremath{}}}
+    }%
+  }%
+  {%
+    \IfValueTF{#2}
+    {% Insert a vector and show the slot.
+      \underline{\smash{\makebox[1.5em]{\ensuremath{#2}}}}
+    }%
+    {% No vector; just show the slot.
+      \underline{\smash{\makebox[1.5em]{\ensuremath{}}}}
+    }%
+  }%
+}%
+\NewDocumentCommand{\diff}{ s }{%
+  \mathop{}\!
+  \IfBooleanTF{#1}
+  {\symbfsfup{d}}%
+  {\symsfup{d}}%
+}%
+\directlua{%
+ luaotfload.add_colorscheme("colordigits",
+   {["8000FF"] = {"one","two","three","four","five","six","seven","eight","nine","zero"}})
+}%
+\newfontfamily\colordigits{DejaVuSansMono}[RawFeature={color=colordigits}]
+\newfontfamily{\gsfontfamily}{DejaVuSansMono}    % new font for listings
+\definecolor{gsbggray}     {rgb}{0.90,0.90,0.90} % background gray
+\definecolor{gsgray}       {rgb}{0.30,0.30,0.30} % gray
+\definecolor{gsgreen}      {rgb}{0.00,0.60,0.00} % green
+\definecolor{gsorange}     {rgb}{0.80,0.45,0.12} % orange
+\definecolor{gspeach}      {rgb}{1.00,0.90,0.71} % peach
+\definecolor{gspearl}      {rgb}{0.94,0.92,0.84} % pearl
+\definecolor{gsplum}       {rgb}{0.74,0.46,0.70} % plum
+\lstdefinestyle{vpython}{%                       % style for listings
+  backgroundcolor=\color{gsbggray},%             % background color
+  basicstyle=\colordigits\footnotesize,%         % default style
+  breakatwhitespace=true%                        % break at whitespace
+  breaklines=true,%                              % break long lines
+  captionpos=b,%                                 % position caption
+  classoffset=1,%                                % STILL DON'T UNDERSTAND THIS
+  commentstyle=\color{gsgray},%                  % font for comments
+  deletekeywords={print},%                       % delete keywords from the given language
+  emph={self,cls, at classmethod, at property},%       % words to emphasize
+  emphstyle=\color{gsorange}\itshape,%           % font for emphasis
+  escapeinside={(*@}{@*)},%                      % add LaTeX within your code
+  frame=tb,%                                     % frame style
+  framerule=2.0pt,%                              % frame thickness
+  framexleftmargin=5pt,%                         % extra frame left margin
+  %identifierstyle=\sffamily,%                    % style for identifiers
+  keywordstyle=\gsfontfamily\color{gsplum},%     % color for keywords
+  language=Python,%                              % select language
+  linewidth=\linewidth,%                         % width of listings
+  morekeywords={%                                % VPython/GlowScript specific keywords
+    __future__,abs,acos,align,ambient,angle,append,append_to_caption,%
+    append_to_title,arange,arrow,asin,astuple,atan,atan2,attach_arrow,%
+    attach_trail,autoscale,axis,background,billboard,bind,black,blue,border,%
+    bounding_box,box,bumpaxis,bumpmap,bumpmaps,camera,canvas,caption,capture,%
+    ceil,center,clear,clear_trail,click,clone,CoffeeScript,coils,color,combin,%
+    comp,compound,cone,convex,cos,cross,curve,cyan,cylinder,data,degrees,del,%
+    delete,depth,descender,diff_angle,digits,division,dot,draw_complete,%
+    ellipsoid,emissive,end_face_color,equals,explog,extrusion,faces,factorial,%
+    False,floor,follow,font,format,forward,fov,frame,gcurve,gdisplay,gdots,%
+    get_library,get_selected,ghbars,global,GlowScript,graph,graphs,green,gvbars,%
+    hat,headlength,headwidth,height,helix,hsv_to_rgb,index,interval,keydown,%
+    keyup,label,length,lights,line,linecolor,linewidth,logx,logy,lower_left,%
+    lower_right,mag,mag2,magenta,make_trail,marker_color,markers,material,%
+    max,min,mouse,mousedown,mousemove,mouseup,newball,norm,normal,objects,%
+    offset,one,opacity,orange,origin,path,pause,pi,pixel_to_world,pixels,plot,%
+    points,pos,pow,pps,print,print_function,print_options,proj,purple,pyramid,%
+    quad,radians,radius,random,rate,ray,read_local_file,readonly,red,redraw,%
+    retain,rgb_to_hsv,ring,rotate,round,scene,scroll,shaftwidth,shape,shapes,%
+    shininess,show_end_face,show_start_face,sign,sin,size,size_units,sleep,%
+    smooth,space,sphere,sqrt,start,start_face_color,stop,tan,text,textpos,%
+    texture,textures,thickness,title,trail_color,trail_object,trail_radius,%
+    trail_type,triangle,trigger,True,twist,unbind,up,upper_left,upper_right,%
+    userpan,userspin,userzoom,vec,vector,vertex,vertical_spacing,visible,%
+    visual,vpython,VPython,waitfor,white,width,world,xtitle,yellow,yoffset,%
+    ytitle%
+  },%
+  morekeywords={print,None,TypeError},%      % additional keywords
+  morestring=[b]{"""},%                      % treat triple quotes as strings
+  numbers=left,%                             % where to put line numbers
+  numbersep=10pt,%                           % how far line numbers are from code
+  numberstyle=\bfseries\tiny,%               % set to 'none' for no line numbers
+  showstringspaces=false,%                   % show spaces in strings
+  showtabs=false,%                           % show tabs within strings
+  stringstyle=\gsfontfamily\color{gsgreen},% % color for strings
+  upquote=true,%                             % how to typeset quotes
+}%
+\NewTCBListing[auto counter,list inside=gsprogs]{glowscriptblock}
+  { O{} D(){glowscript.org} m }{%
+  breakable,%
+  center,%
+  code = \newpage,%
+  %derivpeach,%
+  enhanced,%
+  hyperurl interior = https://#2,%
+  label = {gs:\thetcbcounter},%
+  left = 8mm,%
+  list entry = \thetcbcounter~~~~~#3,%
+  listing only,%
+  listing style = vpython,%
+  nameref = {#3},%
+  title = \texttt{GlowScript} Program \thetcbcounter: #3,%
+  width = 0.9\textwidth,%
+  {#1},
+}%
+\NewDocumentCommand{\listofglowscriptprograms}{}{\tcblistof[\section*]{gsprogs}
+  {List of \texttt{GlowScript} Programs}}%
+\NewTCBInputListing[auto counter,list inside=vpprogs]{\vpythonfile}
+  { O{} m m }{%
+  breakable,%
+  center,%
+  code = \newpage,%
+  %derivgray,%
+  enhanced,%
+  hyperurl interior = https://,%
+  label = {vp:\thetcbcounter},%
+  left = 8mm,%
+  list entry = \thetcbcounter~~~~~#3,%
+  listing file = {#2},%
+  listing only,%
+  listing style = vpython,%
+  nameref = {#3},%
+  title = \texttt{VPython} Program \thetcbcounter: #3,%
+  width = 0.9\textwidth,%
+  {#1},%
+}%
+\NewDocumentCommand{\listofvpythonprograms}{}{\tcblistof[\section*]{vpprogs}
+  {List of \texttt{VPython} Programs}}%
+\DeclareTotalTCBox{\glowscriptinline}{ m }{%
+  bottom = 0pt,%
+  bottomrule = 0.0mm,%
+  boxsep = 1.0mm,%
+  colback = gsbggray,%
+  colframe = gsbggray,%
+  left = 0pt,%
+  leftrule = 0.0mm,%
+  nobeforeafter,%
+  right = 0pt,%
+  rightrule = 0.0mm,%
+  sharp corners,%
+  tcbox raise base,%
+  top = 0pt,%
+  toprule = 0.0mm,%
+}{\lstinline[style = vpython]{#1}}%
+\NewDocumentCommand{\vpythoninline}{}{\glowscriptinline}%
+\endinput
+%%
+%% End of file `mandistudent.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/mandi/mandistudent.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property


More information about the tex-live-commits mailing list.