% \iffalse meta-comment % !TEX program = lualatexmk % % Copyright (C) 2021 by Paul J. Heafner % --------------------------------------------------------------------------- % 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> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % % %<*internal> \usedir{tex/latex/mandi} \ifx\fmtname\nameofplainTeX \expandafter\endbatchfile \else \expandafter\endgroup \fi % % %<*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 % % \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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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 % %\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@version{\mandi@version} \def\mandiexp@date{\mandi@date} \NeedsTeXFormat{LaTeX2e}[2020-02-02] \DeclareRelease{v3.0.0}{2021-08-21}{mandiexp.sty} \DeclareCurrentRelease{v\mandi@version}{\mandi@date} \ProvidesPackage{mandiexp} [\mandiexp@date\space v\mandiexp@version\space Macros for Matter & Interactions] % \end{macrocode} % % Define a convenient package version command. % % \begin{macrocode} \newcommand*{\mandiexpversion}{v\mandiexp@version\space dated \mandiexp@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 % % \fi % % \Finale