% \iffalse meta-comment % File: thermodynamics.dtx Copyright (C) 2022-2024 Karl D. Hammond % % Karl D. Hammond % Chemical Engineering Program % University of Missouri % Contact: hammondkd@missouri.edu % % 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 K. D. Hammond. % % This work consists of the files thermodynamics.dtx and thermodynamics.ins % and the derived files thermodynamics.sty, thermodynamics.pdf, % thermodynamics-examples.tex, and thermodynamics-examples.pdf. % \fi % % \iffalse %<*driver> \ProvidesFile{thermodynamics.dtx} % % %\NeedsTeXFormat{LaTeX2e} %\RequirePackage{expl3} %\ProvidesPackage{thermodynamics} %<*package> [2024/06/14 v2.02 thermodynamics notation] % %<*driver> \documentclass[11pt,letterpaper]{ltxdoc} %^^X\bool_set_false:N \l__codedoc_allow_indexing_bool \usepackage[margin=0.80in,left=2.05in]{geometry} \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{amsmath} \usepackage{mathrsfs} \usepackage{pxfonts} \usepackage{array} \usepackage{booktabs} \usepackage{footmisc} \usepackage{pdflscape} \usepackage{supertabular} \usepackage{graphicx} %^^A for \reflectbox \usepackage{xcolor} \usepackage[labelfont=bf,labelsep=period,font=small]{caption} \usepackage{emf} \GetFileInfo{thermodynamics.dtx} \usepackage{thermodynamics}[\filedate\space\fileversion] \DeclareMathAlphabet{\mathdutchcal}{U}{dutchcal}{m}{n} \DisableCrossrefs \CodelineIndex \PageIndex \CodelineNumbered \RecordChanges %^^X\OnlyDescription %^^X Preparing to use l3doc.cls, but it's not quite mature yet.... %^^A\DisableDocumentation %^^A\DisableImplementation %^^X\ExplSyntaxOff \let\tn\cs \let\env\texttt \let\pkg\textsf \IndexPrologue{\section*{Index}% \markboth{Index}{Index}% Numbers written in italics refer to the page where the corresponding entry is described; numbers underlined refer to the %^^A\ifcodeline@index code line of the %^^A\fi definition.%^^A; numbers in Roman refer to the %^^A\ifcodeline@index %^^A code lines %^^A\else %^^A pages %^^A\fi %^^Awhere the entry is used. } \makeatother \begin{document} \DocInput{thermodynamics.dtx} \end{document} % % \fi % % \CheckSum{3537} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v1.00}{2022/04/29}{Initial public release} % \changes{v2.00}{2023/11/16}{Revision to use \LaTeX3 % (\pkg{expl3}/\pkg{xparse}) syntax layer.} % % \newcommand*{\setmarginparsize}[1] % {\bgroup % \RenewExpandableDocumentCommand{\MacroFont}{}{\fontencoding\encodingdefault % \fontfamily\ttdefault % \fontseries\mddefault % \fontshape\shapedefault % #1} % } % \newcommand*{\restoremarginparsize}{\egroup} % % \GetFileInfo{thermodynamics.dtx} %^^X \title{The \textsf{thermodynamics} package\thanks{This document %^^X corresponds to \textsf{thermodynamics}~\ExplFileVersion, %^^X dated \ExplFileDate.}} % \title{The \textsf{thermodynamics} package\thanks{This document % corresponds to \textsf{thermodynamics}~\fileversion, % dated \filedate.}} % \author{Karl D. Hammond \\ \texttt{hammondkd@missouri.edu}} %^^X \date{\ExplFileDate} % \date{\filedate} % \maketitle % % \begin{abstract} % A package, \textsf{thermodynamics}, is defined that makes typesetting % quantities found in thermodynamics texts relatively simple. The commands are % flexible and intended to be relatively intuitive. It handles several sets % of notation for total, specific, and molar quantities; allows changes between % symbols (e.g., $A$ vs.\ $F$ for Helmholtz free energy); and greatly % simplifies the typesetting of symbols and partial derivatives commonly % encountered in mixture thermodynamics. Changes of one's notes from one % textbook to another can be achieved relatively easily by changing package % options. % \end{abstract} % %^^X \begin{documentation} % \section{Introduction} % The purpose of this package is to simplify the typesetting of equations in % thermodynamics, particularly chemical engineering thermodynamics, which are % often cumbersome to enter. For example, consider the following equation: % \begin{equation} % d\Ut = \Partial*{\Ut}{\St}{\Vt,\allNs} \,d\St % + \Partial*{\Ut}{\Vt}{\St,\allNs} \,d\Vt % + \sumall_i \Partial*{\Ut}{\Nt_i}{\St,\Vt,\allNsbut{i}} d\Nt_i. % \label{eq:chain-rule-U} % \end{equation} % This equation is pretty basic, and equations like it occur all the time in % thermodynamics. Without this package, you might typeset it like this: % \begin{verbatim} % \[ d\underline{U} = % \left(\frac{\partial\underline{U}} % {\partial\underline{S}}\right)_{\underline{V},\vec{n}} % d\underline{S} % + \left(\frac{\partial\underline{U}} % {\partial\underline{V}}\right)_{\underline{S},\vec{n}} % d\underline{V} % + \sum_{i=1}^C \left(\frac{\partial\underline{U}} % {\partial n_i}\right)_{\underline{S},\underline{V},n_{j\neq i}} % dn_i. \] %\end{verbatim} % This is a lot of code, and even then the output is slightly clunky: % \[ d\underline{U} = % \left(\frac{\partial\underline{U}} % {\partial\underline{S}}\right)_{\underline{V},\vec{n}} % d\underline{S} % + \left(\frac{\partial\underline{U}} % {\partial\underline{V}}\right)_{\underline{S},\vec{n}} % d\underline{V} % + \sum_{i=1}^C \left(\frac{\partial\underline{U}} % {\partial n_i}\right)_{\underline{S},\underline{V},n_{j\neq i}} % dn_i. % \] % It is also frustratingly difficult to change one's notes or handouts from one % textbook that uses, say, $n_1$ to denote moles of component 1 to another % textbook that uses $N_1$ for the same quantity, or perhaps denotes the % total internal energy as $U$ or $U^t$ rather than $\Ut$. % For example, if you wanted it to be % \[\begin{thermomolesrange} % \begin{thermoextensiveplain} % \RenewExpandableDocumentCommand{\Nt}{}{N} % \RenewExpandableDocumentCommand{\ncomponents}{}{\mathcal{C}} % d\Ut = \Partial*{\Ut}{\St}{\Vt,\allNs} \,d\St % + \Partial*{\Ut}{\Vt}{\St,\allNs} \,d\Vt % + \sumall_i \Partial*{\Ut}{\Nt_i}{\St,\Vt,\allNsbut{i}} d\Nt_i. % \end{thermoextensiveplain} % \end{thermomolesrange} % \] % without changing any of your code---to update it across all handouts, exams, % and homework sets after changing textbooks, say---you would be out of luck % (or in for a lot of work). % % With this package, you could reduce the code to typeset this equation to % \begin{verbatim} % \begin{equation} % d\Ut = \Partial*{\Ut}{\St}{\Vt,\allNs} d\St % + \Partial*{\Ut}{\Vt}{\St,\allNs} d\Vt % + \sumall_i \Partial*{\Ut}{\Nt_i}{\St,\Vt,\allNsbut{i}} d\Nt_i % \end{equation} %\end{verbatim} % and it will render similarly to Equation~\eqref{eq:chain-rule-U}, including % the shortened underscores and negative kerning. % If you later decide to change the notation such that extensive properties are % not underlined, you can do that without changing any of your code (just % change a package option). Similarly, if you want $\vec{n}$ replaced by % $n_1,\dots,n_C$, you can do that with a package option, too. % % The package handles second derivatives, too. For example, % \begin{verbatim} % \[ \Partial*{\Hm}{T}{P} = T\Partial*{\Sm}{T}{P} % = -T\PartialSecond*{\Gm}{T}{P} = \cP \] %\end{verbatim} % renders (using the default options) % \[ \Partial*{\Hm}{T}{P} = T\Partial*{\Sm}{T}{P} % = -T\PartialSecond*{\Gm}{T}{P} = \cP. \] % Similarly, macros are defined for mixed second partial derivatives that allow % things like % \begin{verbatim} % \[ \Partial*{\Gpm_i}{P}{T,\allNs} % = \PartialMixSecond*{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} = \Vpm_i \], %\end{verbatim} % which renders % \[ \Partial*{\Gpm_i}{P}{T,\allNs} % = \PartialMixSecond*{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} = \Vpm_i % \] % using the defaults. % %^^A------------------------------------------------------------------------- % % \section{Using the Package} \label{sec:using} % There are three categories of macros defined in this package: macros % that produce symbols (or groups of them), macros that typeset derivatives, % and macros that are used internally that the user need not know about. % There are also several environments that allow the user to change notation % temporarily. % % \subsection{Predefined Symbols} % The macros used to produce symbols fall into five categories: extensive % properties, molar properties, specific properties (i.e., per unit mass), % partial molar properties, and shortcut macros (e.g., macros for the heat % capacities, saturation pressure, and so forth). The macros corresponding to % extensive, molar, and specific properties are shown in % Table~\ref{table:symbols}. Examples using the enthalpy are % \DescribeMacro{\Ht} % \DescribeMacro{\Hm} % \DescribeMacro{\Hs} % \DescribeMacro{\Hpm} % \begin{verbatim} % \[ \Ht \quad \Hm \quad \Hs \quad \Hpm_i. \] %\end{verbatim} % Using the default package options, the above renders as % \[ \Ht \quad \Hm \quad \hat H \quad \Hpm{i}. \] % In addition, the properties in % Table~\ref{table:conveniences} are defined for convenience. A more % comprehensive list, including how those properties are represented in the % various textbook-related options supported by this package, are shown in % Appendix~\ref{sec:symbols}. % % \DescribeMacro{\Ut} % \DescribeMacro{\Um} % How these symbols are rendered can be customized by package options. As long % as the user consistently uses \cs{Ut} to render the total internal energy, % \cs{Um} to render the molar internal energy, and so forth, switching notation % from, say, $\Ut$ to $U^t$ for extensive properties is trivial. % % \DescribeMacro{\cP} % \DescribeMacro{\cV} % \DescribeMacro{\cPt} % \DescribeMacro{\cVt} % \DescribeMacro{\cPs} % \DescribeMacro{\cVs} % \DescribeMacro{\cPpm} % \DescribeMacro{\cVpm} % The heat capacities (see Table~\ref{table:conveniences}) are generally % assumed to be molar (e.g., \cs{cP} is interpreted to be the molar heat % capacity). To get the specific heat capacities, the macros \cs{cPs} and % \cs{cVs} are provided, which by default render as $\cPs$ and $\cVs$, % respectively. There are also extensive versions, so \cs{cPt} and \cs{cVt} % will render as $\cPt$ and $\cVt,$ % respectively. Note that \cs{cP} and friends require you to surround % \cs{text} with brackets. For example, \verb"\cP_i^\text{A}" will not work, % nor will \verb"\cP^\text{A}_i"; you need to use \verb"\cP_i^{\text{A}}" and % \verb"\cP^{\text{A}}_i". Using \verb"\cP^\IG_i" will work as expected. % % You can also get partial molar heat capacities via \cs{cPpm} and \cs{cVpm}, % though the latter's mathematical definition is a bit hard to wrap one's head % around: % \begin{verbatim} % \[ \cVpm_i = \Partial*{\cVt}{\Nt_i}{T,P,\allNsbut{i}} % = \frac{\partial}{\partial\Nt_i} % \left[ -T\PartialSecond{\Ft}{T}{\Vt,\allNs} % \right]_{T,P,\allNsbut{i}} \] %\end{verbatim} % yields % \[ \cVpm{i} = \Partial*{\cVt}{\Nt_i}{T,P,\allNsbut{i}} % = \frac{\partial}{\partial\Nt_i} % \left[ -T\PartialSecond{\Ft}{T}{\Vt,\allNs} % \right]_{T,P,\allNsbut{i}}. \] % % \begin{table} % \caption{Commands defined in this package to represent extensive % thermodynamic quantities and their molar and specific analogs. % These macros should be used even if the symbol the user % wishes to use does not match the command used (e.g., \cs{Ft} % for total Helmholtz free energy even if it ends up being set as % $\Ft$)\@. % } % \label{table:symbols} %^^A TODO The \leavevmode macro here is to prevent whitespace from building %^^A up due to a bug in old versions of hypdoc. It should be harmless to %^^A leave it in there, but consider removing it at some point. % \leavevmode % \SpecialMacroIndex{\Qt}\relax % \SpecialMacroIndex{\Qm}\relax % \SpecialMacroIndex{\Qs}\relax % \SpecialMacroIndex{\Wt}\relax % \SpecialMacroIndex{\Wm}\relax % \SpecialMacroIndex{\Ws}\relax % \SpecialMacroIndex{\Et}\relax % \SpecialMacroIndex{\Em}\relax % \SpecialMacroIndex{\Es}\relax % \SpecialMacroIndex{\Epm}\relax % \SpecialMacroIndex{\EEt}\relax % \SpecialMacroIndex{\EE}\relax % \SpecialMacroIndex{\EEs}\relax % \SpecialMacroIndex{\EEpm}\relax % \SpecialMacroIndex{\ERt}\relax % \SpecialMacroIndex{\ER}\relax % \SpecialMacroIndex{\ERs}\relax % \SpecialMacroIndex{\ERpm}\relax % \SpecialMacroIndex{\Ut}\relax % \SpecialMacroIndex{\Um}\relax % \SpecialMacroIndex{\Us}\relax % \SpecialMacroIndex{\Upm}\relax % \SpecialMacroIndex{\UEt}\relax % \SpecialMacroIndex{\UE}\relax % \SpecialMacroIndex{\UEs}\relax % \SpecialMacroIndex{\UEpm}\relax % \SpecialMacroIndex{\URt}\relax % \SpecialMacroIndex{\UR}\relax % \SpecialMacroIndex{\URs}\relax % \SpecialMacroIndex{\URpm}\relax % \SpecialMacroIndex{\Ht}\relax % \SpecialMacroIndex{\Hm}\relax % \SpecialMacroIndex{\Hs}\relax % \SpecialMacroIndex{\Hpm}\relax % \SpecialMacroIndex{\HEt}\relax % \SpecialMacroIndex{\HE}\relax % \SpecialMacroIndex{\HEs}\relax % \SpecialMacroIndex{\HEpm}\relax % \SpecialMacroIndex{\HRt}\relax % \SpecialMacroIndex{\HR}\relax % \SpecialMacroIndex{\HRs}\relax % \SpecialMacroIndex{\HRpm}\relax % \SpecialMacroIndex{\St}\relax % \SpecialMacroIndex{\Sm}\relax % \SpecialMacroIndex{\Ss}\relax % \SpecialMacroIndex{\Spm}\relax % \SpecialMacroIndex{\SEt}\relax % \SpecialMacroIndex{\SE}\relax % \SpecialMacroIndex{\SEs}\relax % \SpecialMacroIndex{\SEpm}\relax % \SpecialMacroIndex{\SRt}\relax % \SpecialMacroIndex{\SR}\relax % \SpecialMacroIndex{\SRs}\relax % \SpecialMacroIndex{\SRpm}\relax % \SpecialMacroIndex{\Ft}\relax % \SpecialMacroIndex{\Fm}\relax % \SpecialMacroIndex{\Fs}\relax % \SpecialMacroIndex{\Fpm}\relax % \SpecialMacroIndex{\FEt}\relax % \SpecialMacroIndex{\FE}\relax % \SpecialMacroIndex{\FEs}\relax % \SpecialMacroIndex{\FEpm}\relax % \SpecialMacroIndex{\FRt}\relax % \SpecialMacroIndex{\FR}\relax % \SpecialMacroIndex{\FRs}\relax % \SpecialMacroIndex{\FRpm}\relax % \SpecialMacroIndex{\Gt}\relax % \SpecialMacroIndex{\Gm}\relax % \SpecialMacroIndex{\Gs}\relax % \SpecialMacroIndex{\Gpm}\relax % \SpecialMacroIndex{\GEt}\relax % \SpecialMacroIndex{\GE}\relax % \SpecialMacroIndex{\GEs}\relax % \SpecialMacroIndex{\GEpm}\relax % \SpecialMacroIndex{\GRt}\relax % \SpecialMacroIndex{\GR}\relax % \SpecialMacroIndex{\GRs}\relax % \SpecialMacroIndex{\GRpm}\relax % \SpecialMacroIndex{\At}\relax % \SpecialMacroIndex{\Am}\relax % \SpecialMacroIndex{\As}\relax % \SpecialMacroIndex{\Apm}\relax % \SpecialMacroIndex{\Nt}\relax % \SpecialMacroIndex{\Lt}\relax % \SpecialMacroIndex{\Lm}\relax % \SpecialMacroIndex{\Ls}\relax % \SpecialMacroIndex{\Lpm}\relax % \SpecialMacroIndex{\LEt}\relax % \SpecialMacroIndex{\LE}\relax % \SpecialMacroIndex{\LEs}\relax % \SpecialMacroIndex{\LEpm}\relax % \SpecialMacroIndex{\LRt}\relax % \SpecialMacroIndex{\LR}\relax % \SpecialMacroIndex{\LRs}\relax % \SpecialMacroIndex{\LRpm}\relax % \centering % \begin{minipage}{\linewidth}\renewcommand*{\footnoterule}{\vskip-1.75ex}% % \centering\scriptsize\setlength{\tabcolsep}{0.05in} % \begin{tabular}{l l l l l l l l l l l l l} % \toprule % & & & & & \multicolumn{4}{c}{Excess} % & \multicolumn{4}{c}{Residual (Departure)} \\ % \cmidrule(r{0.5ex}){6-9} % \cmidrule(l{0.5ex}){10-13} % Property & Total & Molar & Specific & \parbox[b]{0.45in}{Partial Molar} % & T & M & S & PM & T & M & S & PM \\ % \midrule % Heat & \cs{Qt} & \cs{Qm} & \cs{Qs} & \\ % Work & \cs{Wt} & \cs{Wm} & \cs{Ws} & \\ % Total energy & \cs{Et} & \cs{Em} & \cs{Es} & \cs{Epm} % & \cs{EEt} & \cs{EE} & \cs{EEs} & \cs{EEpm} % & \cs{ERt} & \cs{ER} & \cs{ERs} & \cs{ERpm} \\ % Internal energy & \cs{Ut} & \cs{Um} & \cs{Us} & \cs{Upm} % & \cs{UEt} & \cs{UE} & \cs{UEs} & \cs{UEpm} % & \cs{URt} & \cs{UR} & \cs{URs} & \cs{URpm} \\ % Enthalpy & \cs{Ht} & \cs{Hm} & \cs{Hs} & \cs{Hpm} % & \cs{HEt} & \cs{HE} & \cs{HEs} & \cs{HEpm} % & \cs{HRt} & \cs{HR} & \cs{HRs} & \cs{HRpm} \\ % Entropy & \cs{St} & \cs{Sm} & \cs{Ss} & \cs{Spm} % & \cs{SEt} & \cs{SE} & \cs{SEs} & \cs{SEpm} % & \cs{SRt} & \cs{SR} & \cs{SRs} & \cs{SRpm} \\ % Volume & \cs{Vt} & \cs{Vm} & \cs{Vs} & \cs{Vpm} % & \cs{VEt} & \cs{VE} & \cs{VEs} & \cs{VEpm} % & \cs{VRt} & \cs{VR} & \cs{VRs} & \cs{VRpm} \\ % Helmholtz free energy & \cs{Ft} & \cs{Fm} & \cs{Fs} & \cs{Fpm} % & \cs{FEt} & \cs{FE} & \cs{FEs} & \cs{FEpm} % & \cs{FRt} & \cs{FR} & \cs{FRs} & \cs{FRpm} \\ % Gibbs free energy & \cs{Gt} & \cs{Gm} & \cs{Gs} & \cs{Gpm} % & \cs{GEt} & \cs{GE} & \cs{GEs} & \cs{GEpm} % & \cs{GRt} & \cs{GR} & \cs{GRs} & \cs{GRpm} \\ % Surface area & \cs{At} & \cs{Am} & \cs{As} & \cs{Apm} \\ % Grand potential\footnote{The grand potential, % $\begin{thermomolesrange}\Lt(T,\Vt,\allmus)\end{thermomolesrange} % = \Ut - T\St - \sumall_i \mu_i \Nt_i,$ % is also called the Landau free energy by some authors.} % & \cs{Lt} & \cs{Lm} & \cs{Ls} & \cs{Lpm} % & \cs{LEt} & \cs{LE} & \cs{LEs} & \cs{LEpm} % & \cs{LRt} & \cs{LR} & \cs{LRs} & \cs{LRpm} \\ % Moles & \cs{Nt} & \\ % \bottomrule % \end{tabular} % \end{minipage} % \end{table} % % \begin{table} % \caption{Convenience macros and their default symbols. % These are generally ``smart'': for example, % \texttt{\textbackslash cP\_i} renders as $C_{P,i}$, as expected, and % \texttt{\textbackslash cP\_i\^{}\textbackslash std} renders as % $C_{P,i}^\circ$, also as expected. You can also reverse it: % \texttt{\textbackslash cP\^{}\textbackslash std\_i} becomes % $C^\circ_{P,i}$.}\relax % \label{table:conveniences}\relax %^^A TODO The \leavevmode macro here is to prevent whitespace from building %^^A up due to a bug in old versions of hypdoc. It should be harmless to %^^A leave it in there, but consider removing it at some point. % \leavevmode % \SpecialMacroIndex{\cP}\relax % \SpecialMacroIndex{\cV}\relax % \SpecialMacroIndex{\kappaT}\relax % \SpecialMacroIndex{\kappaS}\relax % \SpecialMacroIndex{\alphaP}\relax % \SpecialMacroIndex{\alphaS}\relax % \SpecialMacroIndex{\muJT}\relax % \SpecialMacroIndex{\heatcapacitysymbol}\relax % \SpecialMacroIndex{\compressibilitysymbol}\relax % \SpecialMacroIndex{\expansivitysymbol}\relax % \SpecialMacroIndex{\fpure}\relax % \SpecialMacroIndex{\fmix}\relax % \SpecialMacroIndex{\fsat}\relax % \SpecialMacroIndex{\phipure}\relax % \SpecialMacroIndex{\phimix}\relax % \SpecialMacroIndex{\phisat}\relax % \SpecialMacroIndex{\actrel}\relax % \SpecialMacroIndex{\Psat}\relax % \SpecialMacroIndex{\Pvap}\relax % \SpecialMacroIndex{\sat}\relax % \SpecialMacroIndex{\std}\relax % \SpecialMacroIndex{\Pstd}\relax % \SpecialMacroIndex{\Cstd}\relax % \SpecialMacroIndex{\fstd}\relax % \SpecialMacroIndex{\mustd}\relax % \SpecialMacroIndex{\Henryrat}\relax % \SpecialMacroIndex{\Henrymol}\relax % \SpecialMacroIndex{\gammarat}\relax % \SpecialMacroIndex{\gammamol}\relax % \SpecialMacroIndex{\Deltamix}\relax % \SpecialMacroIndex{\Deltarxn}\relax % \SpecialMacroIndex{\Deltavap}\relax % \SpecialMacroIndex{\Deltasub}\relax % \SpecialMacroIndex{\Deltafus}\relax % \SpecialMacroIndex{\mixing}\relax % \SpecialMacroIndex{\reaction}\relax % \SpecialMacroIndex{\fusion}\relax % \SpecialMacroIndex{\vaporization}\relax % \SpecialMacroIndex{\sublimation}\relax % \SpecialMacroIndex{\Epot}\relax % \SpecialMacroIndex{\xrxn}\relax % \begin{minipage}{\linewidth}\relax % \footnotesize % \addtolength{\tabcolsep}{-2.75pt}\relax % \addtolength{\extrarowheight}{0.50ex}\relax % \renewcommand*{\footnoterule}{\vskip-1.5ex}\relax % \begin{tabular}{l l l l l} % \toprule % \\[-1.5\normalbaselineskip] % Name & Macro & Sym. & Definition & Base Symbol Macro \\ % \midrule % Isobaric heat capacity & \cmd\cP\footnote{\relax % Extensive and specific (per-unit-mass) versions are available % as \cs{cPt} and \cmd\cPs, respectively, with similar macros for the % isochoric heat capacity.\label{fn:cP}} % & \(\cP\) & \(\displaystyle T\Partial{\Sm}{T}{P}\) % & \cmd\heatcapacitysymbol \\[1.75ex] % Isochoric heat capacity & \verb"\cV"\footref{fn:cP} & \(\cV\) % & \(\displaystyle T\Partial{\Sm}{T}{\Vm}\) % & \cmd\heatcapacitysymbol \\[1.75ex] % Isothermal compressibility & \cmd\kappaT & $\kappaT$ % & \(\displaystyle -\frac{1}{\Vm} \Partial{\Vm}{P}{T} \) % & {\footnotesize\cmd\compressibilitysymbol} \\[1.75ex] % Isentropic compressibility & \cmd\kappaS & $\kappaS$ % & \(\displaystyle -\frac{1}{\Vm} \Partial{\Vm}{P}{\Sm}\) % & {\footnotesize\cmd\compressibilitysymbol} \\[1.75ex] % Isobaric expansivity & \cmd\alphaP & $\alphaP$ % & \(\displaystyle \frac{1}{\Vm} \Partial{\Vm}{T}{P}\) % & \cmd\expansivitysymbol \\[1.75ex] % Isentropic expansivity & \cmd\alphaS & $\alphaS$ % & \(\displaystyle \frac{1}{\Vm} \Partial{\Vm}{T}{\Sm}\) % & \cmd\expansivitysymbol \\[1.75ex] % Joule--Thomson coeff. & \cmd\muJT & $\muJT$ % & \(\displaystyle \Partial{T}{P}{\Hm}\) & \cmd\JTsymbol \\ % Pure fugacity & \cmd\fpure & $f$ & $\phi P$ \\ % Saturation fugacity & \cmd\fsat & $\fsat$ % & $\phisat \Psat$ & \cmd\sat \\ % Mixture fugacity & \cmd\fmix & $\fmix$ % & $\fmix_i = x_i\phimix_i P$ \\ % Pure fugacity coefficient & \cmd\phipure & $\phipure$ & % \multicolumn{2}{l}{\( \phipure_i % = \exp\left(\frac{1}{RT}\int_0^P \Vm_i(T,p) % - \frac{RT}{p}\,dp\right) \)} \\ % Saturation fugacity coeff.\ & \cmd\phisat & $\phisat$ % & $\phipure(T,\Psat)$ & \cmd\sat \\ % Mixture fugacity coeff.\ & \cmd\phimix & $\phimix$ % & \multicolumn{2}{l}{\( \phimix_i % = \exp\left(\frac{1}{RT}\int_0^P \Vpm{i}(T,p,\allXs) % - \frac{RT}{p}\,dp\right) \)} \\[1.25ex] % Absolute activity & \cmd\actabs & $\actabs$ % & \multicolumn{2}{l}{\(\actabs_i = \exp(\mu_i/{RT})\)} \\ % Relative activity & \cmd\actrel & $\actrel$ % & \multicolumn{2}{l}{\(\actrel_i = \exp\left(\frac{\mu_i - \mu_i^\std}{RT}\right) = \frac{\fmix_i(T,P,\allXs)}{\fstd_i(T)}\)} \\ % Henry's constant (rational) & \cmd\Henryrat & $\Henryrat$ % & $\gamma_i^\infty f_i$ \\ % Henry's constant (molal) & \cmd\Henrymol & $\Henrymol$ % & $M_s \gamma_i^\infty f_i$ \\ % Rational activity coeff.\ & \cmd\gammarat & $\gammarat$ % & $\gamma/\gamma^\infty$ \\ % Molal activity coeff.\ & \cmd\gammamol & $\gammamol$ % & $x_s \gamma/\gamma^\infty$ \\ % Saturation pressure & \cmd\Psat\footnote{\cs{Pvap} is a synonym for % \cs{Psat}; if you want it to produce $P^\text{vap}$, you should % redefine the \cs{sat} macro} & $\Psat$ && \cmd\sat \\ % Standard state & \cmd\std\footnote{Typical usage would be % \texttt{\$\cs{mu}\_i = \cs{mu}\textasciicircum\cs{std}\_i % + RT \cs{log} a\_i\$}, % yielding $\mu_i = \mu_i^\std + RT \log a_i$.} & $\std$ \\ % Standard pressure & \cmd\Pstd & $\Pstd$ & & \cs{std} \\ % Standard molality & \cmd\Cstd & $\Cstd$ & & \cs{std} \\ % Standard fugacity & \cmd\fstd & $\fstd$ % & $\fstd_i = \fpure_i(T,\Pstd,x^\std)$ & \cs{std} \\ % Standard chemical potential & \cmd\mustd & $\mustd$ % & $\mustd_i = \mu(T,\Pstd,x^\std)$ & \cs{std} \\ % Change on mixing & \cmd\Deltamix\footnote{The usual usage would be % something like % \texttt{\$\cs{Deltamix}\cs{Vm}\textasciicircum\cs{IGM} = 0\$}.\relax % \label{fn:Deltausage}} % & $\Delta M$\textsubscript{mix} % & $M - \sumall_i x_i M_i$ & \cmd\mixing \\ % Change on reaction & \cmd\Deltarxn\footref{fn:Deltausage} % & $\Deltarxn M$ % & $\sumall_i \nu_i M_i$ & \cmd\reaction \\ % Change on melting & \cmd\Deltafus\footref{fn:Deltausage} % & $\Deltafus M$ & $M^L - M^S$ & \cmd\fusion \\ % Change on boiling & \cmd\Deltavap\footref{fn:Deltausage} % & $\Deltavap M$ & $M^V - M^L$ & \cmd\vaporization \\ % Change on subliming & \cmd\Deltasub\footref{fn:Deltausage} % & $\Deltasub M$ & $M^V - M^S$ & \cmd\sublimation \\ % Electric potential & \cmd\Epot & $\Epot$ % & $-n_e\mathscr{F}\Deltarxn\Gm$ \\ % Extent of reaction & \cmd\xrxn & $\xrxn$ & & \\ % \bottomrule % \end{tabular} % \end{minipage} % \end{table} % % \subsection{Partial Molar Properties} % \DescribeMacro{\Upm} % \DescribeMacro{\Vpm} % Partial molar quantities are defined with the suffix \verb"pm". % For example, \cs{Upm} refers to the partial molar internal energy. There % are two options for how to enter partial molar quantities: as commands or % as super/subscripts. For example, % \begin{verbatim} % \[ \Upm{i} \quad \Upm[\IG]{i} \quad \Vpm_i \quad \Vpm^\IG_i \] %\end{verbatim} % will typeset as % \[ \Upm{i} \quad \Upm[\text{IG}]{i} \quad \Vpm{i} \quad \Vpm^{\text{IG}}_i.\] % There are also partial molar heat capacities available via the macros % \cs{cPpm} and \cs{cVpm}. % \textbf{Important}: The \tn{text} command defined by the \pkg{amstext} % package is usually robust enough that something like \verb"\Um^\text{L}" will % work as expected, without additional braces. This does \emph{not} work for % partial molar properties; for example, \verb"\Hpm^\text{L}_i" will produce an % error, as will \verb"\Hpm_i^\text{L}". The expression % \verb"\Hpm_i^{\text{L}}" will work as expected. % % \DescribeMacro{\partialmolar} % New partial molar properties can be defined for any ``simple'' symbol using % the \cs{partialmolar} macro. ``Simple'' means it has no subscripts or % superscripts. For example, the macro for the partial molar Gibbs free energy % is effectively defined via the macro % \DescribeMacro{\Gpm} % \begin{verbatim} % \NewDocumentCommand{\Gpm}{}{\partialmolar{G}}. %\end{verbatim} % A list of pre-defined macros for total, molar, specific, and partial molar % quantities commonly used in thermodynamics is included in % Table~\ref{table:symbols}. % % \subsection{Defining New Properties} % \DescribeMacro{\NewExtensiveProperty} % Users can create new properties using a family of commands. Typically, a % user would want to define at least the total, molar, and specific properties, % which can be accomplished by the \cs{NewExtensiveProperty} command. % For example, % \begin{verbatim} % \NewExtensiveProperty{J}{K} %\end{verbatim} % \NewExtensiveProperty{J}{K}\relax % would define the commands \cs{Jt}, \cs{Jm}, and \cs{Js}, which would produce % (using the default package options) the symbols $\Jt$, $K$, and $\hat{K}$, % respectively. % % \DescribeMacro{\NewPartialMolarProperty}% % Partial molar properties can be created either with the \cs{partialmolar} % macro directly as described above or with \cs{NewPartialMolarProperty}, which % has the same argument style as \cs{NewExtensiveProperty}. % % \DescribeMacro{\NewExcessProperty}% % \DescribeMacro{\NewResidualProperty}% % Similarly, one can define commands for the total, molar, and specific excess % properties using \cs{NewExcessProperty} in a similar manner, and similar % commands for the residual properties with \cs{NewResidualProperty}. % % \setmarginparsize{\footnotesize} % \DescribeMacro{\NewThermodynamicProperty}\relax % \restoremarginparsize % \NewThermodynamicProperty{B}{B}\relax % \NewExtensiveProperty{M}{M}\relax % It is common that a user wants the total, molar, specific, and partial molar % commands for a new symbol, as well as excess and residual (departure) % properties for each case. Users can define such properties---common examples % are $\Bt$ and $\Mt$ to represent uncommon or arbitrary properties---by using % \cs{NewThermodynamicProperty}, which calls all four of the aforementioned % declarations on the same command/\allowbreak{}symbol combinations. For % example, % \begin{verbatim} % \NewThermodynamicProperty{B}{B} %\end{verbatim} % defines the commands \cs{Bt}, \cs{Bm}, \cs{Bs}, and \cs{Bpm}, which define % the total, molar, specific, and partial molar properties, respectively. % It also defines \cs{BEt}, \cs{BE}, \cs{BEs}, and \cs{BEpm} for the % corresponding excess properties, and \cs{BRt}, \cs{BR}, \cs{BRs}, and % \cs{BRpm} for residual (departure) properties. These produce, respectively, % $\Bt, \Bm, \Bs, \Bpm{i}, \BEt, \BE, \BEs, \BEpm{i}, \BRt, \BR, \BRs,$ and % $\BRpm{i}$ using the defaults. % % \subsection{Other Predefined Symbols and Modifiers} % There are a number of predefined symbols and modifiers. % While these symbols could be defined or used without these macros, such use % is not recommended: changing package options will result in inconsistencies % if these macros are not used. % % \subsubsection{Heat Capacities, Compressibilities, and Expansivities} % \DescribeMacro{\cP} % \DescribeMacro{\cV} % \DescribeMacro{\kappaS} % \DescribeMacro{\kappaT} % \DescribeMacro{\alphaP} % \DescribeMacro{\alphaS} % The isobaric and isochoric heat capacities are produced with \cs{cP} and % \cs{cV}, respectively. Four other measurable quantities are defined: the % isothermal and isentropic compressibilities, \cs{kappaT} and \cs{kappaS}, % respectively; and the isobaric and isentropic volume expansivities, % \cs{alphaP} and \cs{alphaS}, respectively. Some textbooks use $\beta$ instead % of $\alpha$ for the volume expansivity to differentiate it from the % \emph{linear} expansivity; this can be changed by redefining % \cs{expansivitysymbol}, which is done automatically by some of the % package options that create notation specific to a particular textbook. % % \subsubsection{Joule--Thomson Coefficient} % \changes{v2.00}{2023/11/16}{Added \cs{muJT} to represent Joule--Thomson % coefficients (which have different notation across textbooks).} % \DescribeMacro{\muJT} % The Joule--Thomson coefficient is produced with \cs{muJT}, which by default % is rendered $\muJT$. Some books call this coefficient $\alpha_H$; this is % handled automatically for books of which the package author is aware. % % \subsubsection{Chemical Potentials} % \DescribeMacro{\mu} % \DescribeMacro{\muit} % The chemical potential is always produced by the macro \cs{mu}. Some % textbook-related options use \(\muup\) instead of \(\mu\) for chemical % potential; if so, the macro \cs{muit} will always produce \(\muit\). % % \subsubsection{Fugacities and Fugacity Coefficients} % \DescribeMacro{\fpure} % \DescribeMacro{\fmix} % \DescribeMacro{\phipure} % \DescribeMacro{\phimix} % Different textbooks use different variations on the symbol $f$ for % fugacity, so it is recommended to use the macro \cs{fpure} to denote the % pure-component fugacity and \cs{fmix} to denote the mixture fugacity. % Similarly, the pure-component fugacity coefficient should be generated with % \cs{phipure}, and that in a mixture should be \cs{phimix}. % % For example, the following markup is an example of a common equation in % mixture thermodynamics: % \begin{verbatim} % \[ \fmix_j = x_j \phimix_j P = x_j \gamma_j \fpure_j % = x_j \gamma_j \phipure_j P. \] %\end{verbatim} % With the default package options, this produces % \[ \fmix_j = x_j \phimix_j P = x_j \gamma_j \fpure_j % = x_j \gamma_j \phipure_j P. \] % With the |Thompson| package option, however, the same markup produces % \[ \hat f_j = x_j \hat\phi_j P = x_j \gamma_j f^\bullet_j % = x_j \gamma_j \phi^\bullet_j P. \] % Similarly, the |Prausnitz| package option causes it to generate % \[ f_j = x_j \phi_j P = x_j \gamma_j f_{\text{pure},j} % = x_j \gamma_j \phi_{\text{pure},j} P, \] % and the |Sandler| option causes it to generate % \[ \bar f_j = x_j \bar \phi_j P = x_j \gamma_j f_j % = x_j \gamma_j \phi_j P. \] % % \subsubsection{Activity Coefficients and Henry's Constants} % \DescribeMacro{\gamma} % \DescribeMacro{\gammait} % \DescribeMacro{\gammarat} % \DescribeMacro{\gammamol} % \DescribeMacro{\Henryrat} % \DescribeMacro{\Henrymol} % The activity coefficient based on the Lewis--Randall rule can be generated % with \cs{gamma}, as usual. The symbol \cs{gammait} is provided just in case % \cs{gamma} has been redefined by a package option and you want to use the % original symbol for some reason. The Henry's Law activity coefficients should % be produced with \cs{gammarat} (rational basis) and \cs{gammamol} (molal % basis). There are also macros to generate the Henry's law constants for both % the rational basis (\cs{Henryrat}) and the molal basis (\cs{Henrymol}). % These are interrelated: % \begin{verbatim} % \[ \fmix_i = x_i \gamma_i \fpure_i = x_i \gammarat_i \Henryrat_i % = C_i \gammamol_i \Henrymol_i \] %\end{verbatim} % produces % \[ \fmix_i = x_i \gamma_i \fpure_i = x_i \gammarat_i \Henryrat_i % = C_i \gammamol_i \Henrymol_i \] % using the default options. % These symbols can be customized either directly or by using package options. % For example, the |TesterModell| package option changes the equation % above to % \[ \hat f_i = x_i \gamma_i f_i = x_i \gamma_i^{**} f_i^{**} % = C_i \gamma_i^* f_i^* \] % without any changes in markup. % % Note that some books (e.g., |ElliottLira|) prefer the atmospheric chemistry % convention for the molal basis, namely % \[ \fmix_i = x_i \gamma_i \fpure_i = x_i \gammarat_i \Henryrat_i % = C_i \gammamol_i / K_{H,i} \] % (that is, using $1/K_{H,i}$ in place of $\Henrymol_i$). % Unfortunately, this makes it impossible to change symbols without any edits % to markup, so this convention is \emph{not} supported by this package. % % \subsubsection{Saturation Properties} % \DescribeMacro{\Psat} % \DescribeMacro{\Pvap} % \DescribeMacro{\fsat} % \DescribeMacro{\phisat} % The saturation pressure is generated with \cs{Psat}. The macro \cs{Pvap} is % an alias for \cs{Psat}. The fugacity and fugacity coefficient at saturation % are accessed via \cs{fsat} and \cs{phisat}, respectively. Package options % can be used to change some of these to match the notation of specific % textbooks. % % \DescribeMacro{\sat} % The \cs{sat} macro is used ``behind the scenes'' as part of % \cs{Psat}, \cs{fsat}, and \cs{phisat}, which produce $\Psat$, % $\fsat$, and $\phisat$, respectively (using the defaults). If you wanted to % redefine them to be $P^\text{vap}$, $f^\text{vap}$, and $\phi^\text{vap}$, % you could simply redefine \cs{sat} with % \verb"\RenewDocumentCommand{\sat}{}{{\text{vap}}}". % This is done automatically using package option |Sandler|. % % \subsubsection{Standard States and Chemical Reactions} % \DescribeMacro{\std} % \DescribeMacro{\Pstd} % \DescribeMacro{\Cstd} % \DescribeMacro{\fstd} % \DescribeMacro{\mustd} % The symbol $\circ$ (\cs{circ}) is used by default for standard states. % This is intended to be easy to change should the user want to replace % $P^\circ$ with $P^\ominus$, say. This is accessed via the \cs{std} macro. % The macro \cs{Pstd} is defined as |P^\std| for convenience to denote % standard pressure, \cs{Cstd} is defined as |C^\std| to denote standard % molality, \cs{fstd} is defined for standard fugacities, and \cs{mustd} is % defined for standard chemical potentials so as to ease implementation across % textbooks. % % The usual usage would be something like this: % \begin{verbatim} % \[ \Deltarxn\Gm = \sumall_i \nu_i \mu_i = \sumall_i \left[ \nu_i \mustd_i % + \nu_i RT \log\left(\frac{\fmix_i}{\fstd_i}\right) \right] % = \Deltarxn\Gm^\std + RT \log\left[\prodall_i a_i^{\nu_i} \right] \], %\end{verbatim} % which produces % \[ \Deltarxn\Gm = \sumall_i \nu_i \mu_i = \sumall_i \left[ \nu_i \mustd_i % + \nu_i RT \log\left(\frac{\fmix_i}{\fstd_i}\right) \right] % = \Deltarxn\Gm^\std + RT \log\left[\prodall_i a_i^{\nu_i} \right] \] % with the default settings. % % The extent of reaction is generated by the macro \cs{xrxn}, which by default % is printed as \(\xrxn\). % % \subsubsection{Changes on Mixing, Reaction, Fusion, Vaporization, and % Sublimation} % \DescribeMacro{\Deltamix} % Mixing properties are handled via the \cs{Deltamix} macro, and are used as in % the following example: % \begin{verbatim} % \[ \Deltamix\Gm = \Gm - \sumall_i x_i \Gm_i % = \Deltamix\Hm - T\Deltamix\Sm \], %\end{verbatim} % which yields, using the default options, % \[ \Deltamix\Gm = \Gm - \sumall_i x_i \Gm_i = \Deltamix\Hm - T\Deltamix\Sm \] % Some textbooks (|Sandler|, |Thompson|) choose to typeset these with the word % ``mix'' \emph{before} the symbol, which is handled automatically by this % package. % \DescribeMacro{\mixing} % The macro \cs{mixing} determines how the change in mixing label is rendered; % the default is \verb"{\text{mix}}". % % \DescribeMacro{\Deltafus} % \DescribeMacro{\Deltasub} % \DescribeMacro{\Deltavap} % The commands \cs{Deltafus}, \cs{Deltasub}, and \cs{Deltavap} % typeset changes due to fusion (melting), sublimation (subliming), and % vaporization (boiling), respectively. Their use is straightforward, viz., % \begin{verbatim} % \[ \Deltasub\Hm = \Hm^V - \Hm^S = \Hm^V - \Hm^L + (\Hm^L - \Hm^S) % = \Deltafus\Hm + \Deltavap\Hm \], %\end{verbatim} % yielding % \[ \Deltasub\Hm = \Hm^V - \Hm^S = \Hm^V - \Hm^L + (\Hm^L - \Hm^S) % = \Deltafus\Hm + \Deltavap\Hm \] % with the default options. Note that some textbooks (e.g., |Sandler|) typeset % these quantities quite differently; this is handled automatically. Other % textbooks (e.g., |Koretsky|) typeset them as subscripts; this is also % handled automatically. % % \DescribeMacro{\Deltaf} % \DescribeMacro{\Deltarxn} % The macros \cs{Deltaf} and \cs{Deltarxn} are intended to typeset the enthalpy % or free energy of formation and reaction, respectively. For example, % \begin{verbatim} % \[ \Deltarxn\Hm^\std = \sumall_i \nu_i \Deltaf\Hm_i^\std \] %\end{verbatim} % results in % \[ \Deltarxn\Hm^\std = \sumall_i \nu_i \Deltaf\Hm_i^\std. \] % It is not anticipated that this command will be combined with something like % a heat capacity, which already has a (potentially double) subscript, but as % there is no ``formation'' heat capacity, that should not present a problem. % % \subsection{Residual and Excess Properties} % \DescribeMacro{\UR} % \DescribeMacro{\URt} % \DescribeMacro{\URs} % \DescribeMacro{\URpm} % \DescribeMacro{\UE} % \DescribeMacro{\UEt} % \DescribeMacro{\UEs} % \DescribeMacro{\UEpm} % Additional macros are defined that make it easy to typeset the residual % (also called ``departure'') and excess total, molar, specific, and partial % molar properties. These macros follow the same pattern: \cs{UR}, \cs{URt}, % \cs{URs}, and \cs{URpm} typeset the molar, total, specific, and partial molar % residual internal energies, respectively, and by default expand to $U^R,$ % $\URt,$ $\URs, $ and $\smash[t]{\URpm{i}}$ (the last % is called as \verb"\URpm{i}" or \verb"\URpm_i"). Similarly, \cs{UE}, % \cs{UEt}, \cs{UEs}, and \cs{UEpm} typeset the corresponding excess % properties. The first character of the macros for other properties follow the % same pattern as in Table~\ref{table:symbols}. % % The $R$ and $E$ characters are generated by the macros \cs{residual} and % \cs{excess}, respectively. These macros can be redefined; for example, if you % \DescribeMacro{\excess} % \DescribeMacro{\residual} % want \cs{SE}, which normally produces $\SE$, to give you $S^{EX}$---and let's % be honest, who doesn't want that?\footnote{You knew that joke was % coming.}---then you can redefine it with % \begin{verbatim} % \RenewDocumentCommand{\excess}{}{{EX}}, %\end{verbatim} % or possibly % \begin{verbatim} % \RenewDocumentCommand{\excess}{}{{\mathrm{EX}}} %\end{verbatim} % or even % \begin{verbatim} % \RenewDocumentCommand{\excess}{}{\text{EX}}, %\end{verbatim} % which cause \cs{SE} to expand to $S^{EX},$ $S^\mathrm{EX},$ and % $S^\text{EX},$ respectively. % % It is generally possible to use superscripts with the excess or residual % properties; in the event this fails, the \cs{excess} and \cs{residual} macros % can be used directly, viz., % \begin{verbatim} % \begin{gather*} % \HE^\std = \Hm^{\excess,\std} = \HE(T,\Pstd) % = \HR(T,\Pstd) - \HR^\IS(T,\Pstd) = \HR^\std - \HR^{\IS,\std} \\ % \RenewDocumentCommand{\excess}{{EX}} % \HE^\std = \Hm^{\excess,\std} = \HE(T,\Pstd) % = \HR(T,\Pstd) - \HR^\IS(T,\Pstd) % \end{gather*}, %\end{verbatim} % which yields % \begin{gather*} % \HE^\std = \Hm^{\excess,\std} = \HE(T,\Pstd) % = \HR(T,\Pstd) - \HR^\IS(T,\Pstd) = \HR^\std - \HR^{\IS,\std} \\ % \RenewDocumentCommand{\excess}{}{{EX}} % \HE^\std = \Hm^{\excess,\std} = \HE(T,\Pstd) % = \HR(T,\Pstd) - \HR^\IS(T,\Pstd) % \end{gather*} % using the default options. % % \subsection{Partial Derivatives} % \DescribeMacro{\Partial}% % \DescribeMacro{\Partial*}% % Partial derivatives are easily rendered using the \cs{Partial} command. % There is a starred form (\cs{Partial*}) that additionally adjusts the % spacing after the closing symbol to remove some of the space, anticipating % that the following binary operator will overhang the subscripts. % Compare the following: % \begin{verbatim} % \[ \Partial{\Hm}{T}{P} = \cP \qquad \Partial*{\Hm}{T}{P} = \cP \], %\end{verbatim} % which yields % \[ \Partial{\Hm}{T}{P} = \cP \qquad \Partial*{\Hm}{T}{P} = \cP. \] % % \DescribeMacro{\Partialinline}% % Inline first derivatives\footnote{The ``inline'' versions of % partial derivatives are ``sticky'': if you issue \cs{Partialinline} or % its second-order equivalents anywhere in a line, all subsequent % \cs{Partial} and \cs{Partial[Mix]Second} macros on the same line % (technically, anywhere in the same \TeX\ ``group'') will % expand inline as well. To prevent this, enclose your \cs{Partialinline} and % associated arguments in its own group (i.e., % \texttt{\{\cs{Partialinline}\dots\}}).% % \label{fn:inline}} % can be entered the same way; compare: % \begin{verbatim} % \[ \Partial*{\Hm}{T}{P} = \Partialinline{\Hm}{T}{P} % = T\Partial{\Sm}{T}{P} \], %\end{verbatim} % which results in % \[ \Partial*{\Hm}{T}{P} = \Partialinline{\Hm}{T}{P} % = T\Partial{\Sm}{T}{P}. \] % There is no need for an inline starred form, as the subscripts do not % extend far enough below the baseline. % % \subsubsection{Second-Order Partial Derivatives} % \DescribeMacro{\PartialSecond}% % \DescribeMacro{\PartialSecond*}% % \DescribeMacro{\PartialMixSecond}% % \DescribeMacro{\PartialMixSecond*}% % Second partial derivatives and mixed-second partial derivatives are typeset % with the commands \cs{PartialSecond} and \cs{PartialMixSecond}, respectively. % Like the first-order variety, these also have starred versions that remove % the space immediately following the closing symbols, anticipating that the % equals sign or other binary operator following the derivative will overhang % the elements held constant. For example, % \begin{verbatim} % \[ \Vpm_i = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partial{\Gpm_i}{P}{T,\allNs} \] %\end{verbatim} % looks like % \[ \Vpm_i = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecond*{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partial{\Gpm_i}{P}{T,\allNs}. \] % \DescribeMacro{\PartialSecondinline}% % \DescribeMacro{\PartialMixSecondinline}% % Inline versions\footref{fn:inline} of second-order derivatives are handled % with \cs{PartialSecondinline} and \cs{PartialMixSecondinline}, viz., % \begin{verbatim} % \begin{equation} % \Vpm_i = \Partialinline{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecondinline{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecondinline{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partialinline{\Gpm_i}{P}{T,\allNs} \] % \end{equation} %\end{verbatim} % looks like % \begin{equation} % \Vpm_i = \Partialinline{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecondinline{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecondinline{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partialinline{\Gpm_i}{P}{T,\allNs} % \label{eq:Vpm-inline} % \end{equation} % with the default options. % \pagebreak[0]% % % \subsubsection{Delimiter Sizing} % \DescribeMacro{\PartialBigg}% % \DescribeMacro{\PartialSecondBigg}% % \DescribeMacro{\PartialMixSecondBigg}% % \DescribeMacro{\Partialbigg}% % \DescribeMacro{\PartialSecondbigg}% % \DescribeMacro{\PartialMixSecondbigg}% % There are instances (such as the line above) when \cs{Partial} causes % parentheses that are slightly % too tall but do not need to be---particularly when partial molar properties, % specific quantities, or fugacities are involved. The macro \cs{PartialBigg} % uses \pkg{amsmath}'s \tn{Biggl} and \tn{Biggr} macros in place of \tn{left} % and \tn{right} to size the delimiters accordingly; \cs{Partialbigg} uses % \tn{biggl} and \tn{biggr} in a similar fashion. For example, compare the % following: % \begin{verbatim} % \[ \Vpm_i = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial*{\Gpm_i}{P}{T,\allNs} % = \PartialBigg*{\Gpm_i}{P}{T,\allNs} % = RT\Partial*{\log\fmix_i}{P}{T,\allNs} % = RT\PartialBigg*{\log\fmix_i}{P}{T,\allNs} % = RT\Partialbigg{\log\fmix_i}{P}{T,\allNs} \], %\end{verbatim} % which typesets as % \[ \Vpm{i} = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial*{\Gpm{i}}{P}{T,\allNs} % = \PartialBigg*{\Gpm{i}}{P}{T,\allNs} % = RT\Partial*{\log\fmix_i}{P}{T,\allNs} % = RT\PartialBigg*{\log\fmix_i}{P}{T,\allNs} % = RT\Partialbigg{\log\fmix_i}{P}{T,\allNs}. \] % Note that a similar effect---possibly with other side effects---can be % achieved with \pkg{amsmath}'s \tn{smash} command, which has the effect of % removing all vertical space associated with a particular character. % Observe: % \begin{verbatim} % \[ \Vpm_i = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\smash{\Gpm_i}}{P}{T,\allNs} \] %\end{verbatim} % produces % \[ \Vpm_i = \Partial*{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\smash{\Gpm_i}}{P}{T,\allNs}. \] % % \setmarginparsize{\footnotesize}% % \DescribeMacro{\Partialinlinetext}% % \DescribeMacro{\PartialSecondinlinetext}% % \restoremarginparsize % \setmarginparsize{\scriptsize} % \DescribeMacro{\PartialMixSecondinlinetext}% % \restoremarginparsize % Similarly, there are times when \cs{Partialinline} causes parentheses that % are too big for inline text, and they do not need to be---particularly for % symbols with overlines, underlines, or other decorations. In this case, the % macros \cs{Partialinlinetext}, \cs{PartialSecondinlinetext}, and % \cs{PartialMixSecondinlinetext} come in handy; using these macros like so, % \begin{verbatim} % \[ \Vpm_i = \Partialinlinetext{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecondinlinetext{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecondinlinetext{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partialinlinetext{\Gpm_i}{P}{T,\allNs} \], %\end{verbatim} % Equation~\eqref{eq:Vpm-inline} looks like % \[ \Vpm{i} = \Partialinlinetext{\Vt}{\Nt_i}{T,P,\allNsbut{i}} % = \PartialMixSecondinlinetext{\Gt}{\Nt_i}{P}{T,\allNsbut{i}} % = \PartialMixSecondinlinetext{\Gt}{P}{\Nt_i}{T,\allNsbut{i}} % = \Partialinlinetext{\Gpm{i}}{P}{T,\allNs}. \] % % \subsubsection{Higher-Order Derivatives} % It is possible to ``fake'' higher-order derivatives via some trickery. % For example, % \begin{verbatim} % \[ \cPpm_i = T\Partial*{\Spm_i}{T}{P,\allXs} % = T\PartialMixSecond*{\St}{T}{\Nt_i}{P,\allNsbut{i}} % = -T\Partial{^3\Gt}{T^2\partial\Nt_i}{P,\allNsbut{i}} \] %\end{verbatim} % gives % \[ \cPpm{i} = T\Partial*{\Spm{i}}{T}{P,\allXs} % = T\PartialMixSecond*{\St}{T}{\Nt_i}{P,\allNsbut{i}} % = -T\Partial{^3\Gt}{T^2\partial\Nt_i}{P,\allNsbut{i}}, \] % which is probably pretty close to what you wanted. Using this trickery with % the package option \verb"nosubscripts" will not work, and the use of % third- and higher-order derivatives with this package should generally be % considered unsupported. % % \subsection{Holding Constant the Number of Moles of Several Species} % \DescribeMacro{\allNs}% % \DescribeMacro{\allNsbut}% % \DescribeMacro{\allmus}% % \DescribeMacro{\allmusbut}% % \DescribeMacro{\allXs}% % \DescribeMacro{\allXsbut}% % \DescribeMacro{\allYs}% % \DescribeMacro{\allYsbut}% % \DescribeMacro{\allMs}% % \DescribeMacro{\allMsbut}% % \DescribeMacro{\allWs}% % \DescribeMacro{\allWsbut}% % It is common in thermodynamics to use notation such as % \[ \Vpm_k = \Partial{\Vt}{\Nt_k}{T,P,\allNsbut{k}}, \] % or perhaps % \begin{thermomolesrange} % \[ \Vpm{k} = \Partial{\Vt}{\Nt_k}{T,P,\allNsbut{k}} \] % \end{thermomolesrange} % or % \[ \Vpm{k} = \left(\frac{\partial\Vt}{\partial\Nt_k}\right)_{T,P,\Nt_j[k]}, \] % to mean partial derivatives that hold the number of moles of each species % constant \emph{except} the one being changed. % Similarly, a property determined with all mole fractions held % constant might be written % \[ \cP = \Partial{\Hm}{T}{P,\allXs}, \] % or perhaps % \begin{thermomolesrange}\relax % \[ \cP = \Partial{\Hm}{T}{P,\allXs}. \] % \end{thermomolesrange}\relax % There are several macros that standardize such constructs. % The \cs{allNs} macro expands to something meaning the number of moles of all % species; by default, this is $\vec{n}$ (package option % \verb"moles-index"), but can be changed to $n_1,\dotsc,n_C$ using the package % option \verb"moles-range". Similarly, the macros \cs{allmus} and % \cs{allmusbut} do the same but with $n$ replaced by $\mu$, and \cs{allMsbut} % is the same with $m$ instead of $n$. There are analogous macros for mole % fractions, namely \cs{allXs} and \cs{allXsbut} for $x$ and \cs{allYs} and % \cs{allYsbut} for $y$, as well as \cs{allWs} and \cs{allWsbut} for mass % fractions---these implicitly assume that all mole or mass fractions % \emph{except} the last are used as variables. % These macros all take an optional argument; for example, % \begin{verbatim} % \[ \Partial{\Ht}{\Nt_1}{T,P,\allNsbut{1}} = % \Partial{\Ht}{\Nt_1}{T,P,\allNsbut[m]{1}} = \Hpm_1 \] %\end{verbatim} % typesets as % \[ \Partial{\Ht}{\Nt_1}{T,P,\allNsbut{1}} = % \Partial{\Ht}{\Nt_1}{T,P,\allNsbut[m]{1}} = \Hpm{1}. \] % Similarly, % \begin{verbatim} % \[ \Partial{\Hm}{x_i}{T,P,\allXsbut{i}} % = \Partial{\Hm}{x_i}{T,P,\allXsbut[m]{i}} % = \Hpm_i - \Hpm_\ncomponents \] %\end{verbatim} % becomes % \[ \Partial{\Hm}{x_i}{T,P,\allXsbut{i}} % = \Partial{\Hm}{x_i}{T,P,\allXsbut[m]{i}} % = \Hpm{i} - \Hpm{\ncomponents}. \] % Users must supply their own redefinitions if they wish to hold something % other than \cs{ncomponents} constant in addition to the argument for mole % and mass fractions. % Using the \verb"moles-range" package option, for which \verb"\allXsbut{k}" % expands to % \( \begin{thermomolesrange}\allXsbut{k}\end{thermomolesrange} \) % rather than \( \allXsbut{k} \), the optional argument is ignored. % % The optional argument to \cs{allNs} and similar commands is ignored when % using the default options; it is relevant for package options that redefine % \cs{allNs} to make $N_i$, for example; in this case, one can enter % \cs{allNs[j]} to make \TeX\ render $N_j$ instead of $N_i$. This is useful % if you are using $i$ somewhere else in the equation. % % \DescribeMacro{\allbut} % \DescribeMacro{\allbutlastand} % Users can define new ``all but'' macros using the \cs{allbut} and % \cs{allbutlastand} commands. For example, % \begin{verbatim} % \NewDocumentCommand{\allNsbut}{O{j} m}{\allbut[#1]{#2}{\Nt}} % \NewDocumentCommand{\allXsbut}{O{j} m}{\allbutlastand[#1]{#2}{x}} %\end{verbatim} % are the definitions of \cs{allNsbut} and \cs{allXsbut}, respectively. % % \subsection{Jacobians} % \DescribeMacro{\Jacobian}% % \DescribeMacro{\Jacobiandet}% % The Jacobian determinant is often denoted with Leibnitz-like notation, viz., % \begin{verbatim} % \[ \Jacobian{K,L}{X,Y} = \Jacobiandet{K,L}{X,Y} \], %\end{verbatim} % which produces (assuming the \pkg{amsmath} package has been loaded) % \[ \Jacobian{K,L}{X,Y} = \Jacobiandet{K,L}{X,Y}. \] % There are two optional arguments to \cs{Jacobiandet}. The first will be % pre-pended before every element of the matrix (typically \cs{textstyle} or % \cs{displaystyle}); the second is the extra spacing added between rows % (default is 1.25~ex for text-style fractions and 2.75~ex for display-style % fractions). More than two variables can be specified, viz., % \begin{verbatim} % \[ \Jacobian{K,L,M}{X,Y,Z} % = \Jacobiandet[\displaystyle][3ex]{K,L,M}{X,Y,Z} \] %\end{verbatim} % will produce % \[ \Jacobian{K,L,M}{X,Y,Z} = \Jacobiandet[\displaystyle][3ex]{K,L,M}{X,Y,Z}. % \] % The \cs{Jacobiandet} macro will understand implied multicomponent Jacobians, % too, namely, % \begin{verbatim} % \[ \Jacobian{f_1,\dots,f_m}{x_1,\dots,x_m} = % \Jacobiandet{f_1,\dots,f_m}{x_1,\dots,x_m} \] %\end{verbatim} % typesets as % \[ \Jacobian{f_1,\dots,f_m}{x_1,\dots,x_m} = % \Jacobiandet{f_1,\dots,f_m}{x_1,\dots,x_m}. \] % If the option |moles-range| or the \env{thermomolesrange} environment is % used, the same code produces % \begin{thermomolesrange} % \[ \Jacobian{f_1,\dots,f_m}{x_1,\dots,x_m} = % \Jacobiandet{f_1,\dots,f_m}{x_1,\dots,x_m}. \] % \end{thermomolesrange} % % \subsection{Sums and Products} % \DescribeMacro{\sumall} % \DescribeMacro{\sumallbutlast} % \DescribeMacro{\prodall} % It is common to require sums and products such as % \[ \sumall_i x_i = 1 \quad \text{or} \quad % x_\ncomponents = 1 - \sumallbutlast_i x_i \quad \text{or} \quad % \Gt = \sumall_j \mu_j\Nt_j \quad \text{and} \quad % K = \prodall_k a_k^{\nu_k}. \] % This package defines shortcuts to typeset such terms thus: % \begin{verbatim} % \[ \sumall_i x_i = 1 \quad \text{or} \quad % x_\ncomponents = 1 - \sumallbutlast_i x_i \quad \text{or} \quad % \Gt = \sumall_j \mu_j\Nt_j \quad \text{and} \quad % K = \prodall_k a_k^{\nu_k} \]. %\end{verbatim} % The symbol $C$ can be changed by redefining the expandable macro % \cs{ncomponents}. This is done automatically by some package options (e.g., % |TesterModell| changes it to $n$; |Sandler| changes it to $\mathcal{C}$; % |Thompson| changes it to $c$). % % \section{Loading the Package} \label{sec:loading} % To load the package with the defaults enabled, load it the usual way: % \begin{verbatim} % \usepackage{thermodynamics} %\end{verbatim} % The package options loaded by default are \verb"EUAGHan", \verb"subscripts", % \verb"parentheses", \verb"intensive-plain", and \verb"moles-index". % These define, respectively, the default symbols to use for total energy, % internal energy, Helmholtz free energy, and so forth; the manner of writing % partial derivatives; the delimiters around partial derivatives; the % manner of denoting extensive, molar, and specific properties; and the % manner of writing the number of moles of all or most species in partial % derivatives. The default behavior can be altered by options in the following % section. % % \subsection{Package Options} % There are three categories of options: options that affect which symbols are % used, options that affect how symbols are decorated, and options that affect % how partial derivatives are displayed. These are presented in turn. % % \subsubsection{Options that Change Symbol Sets} % There are several options that choose the set of symbols to use for total % energy, internal energy, Helmholtz free energy, and so forth. These are % summarized in Table~\ref{table:symbol-sets}. The default is \verb"EUAGHan". % % \NewExtensiveProperty{f}{F} % \NewExtensiveProperty{a}{A} % \NewExtensiveProperty{ee}{\mathcal{E}} % \NewExtensiveProperty{aa}{\mathcal{A}} % \begin{table} % \caption{Options controlling which symbols to use by default. The % macros \cs{Et}, \cs{Ut}, \cs{Ft}, \cs{Gt}, \cs{Ht}, \cs{At}, and % \cs{Nt} represent the total energy, internal energy, % Helmholtz free energy, Gibbs free energy, enthalpy, surface area, % and number of moles, respectively. Symbols are shown as they would % appear with the (default) option \texttt{intensive-plain}. % } % \label{table:symbol-sets} % \centering\small % \begin{tabular}{l l l l l l l l l} % \toprule % Option & \verb"\Et" & \verb"\Ut" & \verb"\Ft" & \verb"\Gt" & \verb"\Ht" % & \verb"\At" & \verb"\Nt" \\ % \midrule % |EUAGHan| & $\Et$ & $\Ut$ & $\Ft$ & $\Gt$ & $\Ht$ & $\At$ & $n$ \\ % |EUAGHaN| & $\Et$ & $\Ut$ & $\Ft$ & $\Gt$ & $\Ht$ & $\At$ & $N$ \\ % |EUHAGan| & \multicolumn{7}{l}{(synonym for \texttt{EUAGHan})} \\ % |EUHAGaN| & \multicolumn{7}{l}{(synonym for \texttt{EUAGHaN})} \\ % |EUFGHAn| & $\Et$ & $\Ut$ & $\ft$ & $\Gt$ & $\Ht$ & $\at$ & $n$ \\ % |EUFGHAN| & $\Et$ & $\Ut$ & $\ft$ & $\Gt$ & $\Ht$ & $\at$ & $N$ \\ % |EEFGHAn| & $\eet$ & $\Et$ & $\ft$ & $\Gt$ & $\Ht$ & $\at$ & $n$ \\ % |EEFGHAN| & $\eet$ & $\Et$ & $\ft$ & $\Gt$ & $\Ht$ & $\at$ & $N$ \\ % |EEFGHan| & $\eet$ & $\Et$ & $\ft$ & $\Gt$ & $\Ht$ & $\At$ & $n$ \\ % |EEFGHaN| & $\eet$ & $\Et$ & $\ft$ & $\Gt$ & $\Ht$ & $\At$ & $N$ \\ % |EEAGHaN| & $\eet$ & $\Et$ & $\Ft$ & $\Gt$ & $\Ht$ & $\At$ & $N$ \\ % |EEAGHAN| & $\eet$ & $\Et$ & $\Ft$ & $\Gt$ & $\Ht$ & $\aat$ & $n$ \\ % |EUAGHAN| & $\Et$ & $\Ut$ & $\Ft$ & $\Gt$ & $\Ht$ & $\aat$ & $N$ \\ % |EUFGHan| & $\Et$ & $\Ut$ & $\ft$ & $\Gt$ & $\Ht$ & $\At$ & $n$ \\ % |EUFGHaN| & $\Et$ & $\Ut$ & $\ft$ & $\Gt$ & $\Ht$ & $\At$ & $N$ \\ % \bottomrule % \end{tabular} % \end{table} % % Using \verb"EUAGHan" (the default), we might use the following markup: % \begin{verbatim} % \[ \Ft = \Ut - T\St = -P\Vt + \sumall_i \mu_i \Nt_i + \sigma \At % \qquad \Hm = \Um + P\Vm \qquad \Et = \Ut + \frac12 mv^2 \], %\end{verbatim} % which would look like % \[ \Ft = \Ut - T\St = -P\Vt + \sumall_i \mu_i \Nt_i + \sigma \At % \qquad \Hm = \Um + P\Vm \qquad \Et = \Ut + \frac12 mv^2 \] % Using the \verb"EEFGHAN" option, the same markup would yield % \[ \ft % = \Et - T\St % = -P\Vt + \sumall_i \mu_i N_i + \sigma \at % \qquad H = U + PV % \qquad \eet = \Et + \frac12 mv^2. \] % % \subsubsection{Options for Extensive vs.\ Molar Properties} % There are four sets of notation that define how extensive properties are % represented, as shown in Table~\ref{table:extensive}. % The default is \verb"intensive-plain", which (using the volume as an % example) represents the total, molar, specific, and partial molar volumes, % respectively, as $\Vt,$ $\Vm,$ $\Vs,$ and $\Vpm{j}$. % % For example, the definition of the partial molar enthalpy would be different % depending on which set of notation is used. The markup % \begin{verbatim} % \[ \Hpm_i = \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\Nt\Hm}{\Nt_i}{T,P,\allNsbut{i}} \] %\end{verbatim} % yields the following, depending on the package option loaded: % \begin{align*} % \Hpm_i &= \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\Nt\Hm}{\Nt_i}{T,P,\allNsbut{i}} % && \text{\texttt{intensive-plain}} \\ % \Hpm_i &= % \begin{thermoextensiveplain} % \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\Nt\Hm}{\Nt_i}{T,P,\allNsbut{i}} % \end{thermoextensiveplain} % && \text{\texttt{extensive-plain}} \\ % \Hpm_i &= % \begin{thermoextensivesuperscript} % \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\Nt\Hm}{\Nt_i}{T,P,\allNsbut{i}} % \end{thermoextensivesuperscript} % && \text{\texttt{extensive-superscript}} \\ % \begin{thermointensivelowercase} % \Hpm_i % \end{thermointensivelowercase} % &= % \begin{thermointensivelowercase} % \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} % = \Partial{\Nt\Hm}{\Nt_i}{T,P,\allNsbut{i}} % \end{thermointensivelowercase} % && \text{\texttt{intensive-lowercase}} % \end{align*} % The use of \verb"intensive-lowercase" is strongly discouraged. % % Note that the number of moles can be changed from $n$ to $N$ via the % options in the previous section. % % \begin{table} % \caption{Notation sets that can be set using the options % \texttt{intensive-plain} (the default), \texttt{extensive-plain}, % \texttt{extensive-superscript}, and \texttt{intensive-lowercase}.} % \label{table:extensive} % \centering\small % \begin{tabular}{l l l l l l} % \toprule % Option & \verb"\Vt" & \verb"\Vm" & \verb"\Vs" & \verb"\Vpm_i" \\ % \midrule % \verb"intensive-plain" & $\Vt$ & $\Vm$ & $\Vs$ & $\Vpm{i}$ \\[2ex] % \verb"extensive-plain" & % \begin{thermoextensiveplain}$\Vt$\end{thermoextensiveplain} & % \begin{thermoextensiveplain}$\Vm$\end{thermoextensiveplain} & % \begin{thermoextensiveplain}$\Vs$\end{thermoextensiveplain} & % \begin{thermoextensiveplain}$\Vpm{i}$\end{thermoextensiveplain} % \\[2ex] % \verb"extensive-superscript" & % \begin{thermoextensivesuperscript}$\Vt$\end{thermoextensivesuperscript} & % \begin{thermoextensivesuperscript}$\Vm$\end{thermoextensivesuperscript} & % \begin{thermoextensivesuperscript}$\Vs$\end{thermoextensivesuperscript} & % \begin{thermoextensivesuperscript}$\Vpm{i}$\end{thermoextensivesuperscript} \\[2ex] % \verb"intensive-lowercase" & % \begin{thermointensivelowercase}$\Vt$\end{thermointensivelowercase} & % \begin{thermointensivelowercase}$\Vm$\end{thermointensivelowercase} & % \begin{thermointensivelowercase}$\Vs$\end{thermointensivelowercase} & % \begin{thermointensivelowercase}$\Vpm{i}$\end{thermointensivelowercase} % \\ % \bottomrule % \end{tabular} % \end{table} % % \pagebreak[1]\relax % \setmarginparsize{\footnotesize} % \DescribeEnv{thermointensiveplain} % \DescribeEnv{thermoextensiveplain} % \DescribeEnv{thermoextensivesuperscript} % \DescribeEnv{thermointensivelowercase} % \restoremarginparsize % It is possible to change notation locally, though there are very, very few % good reasons why you would want to do this in a regular document---normally, % one would use the corresponding package options. The environment % \env{thermointensiveplain} means \cs{St} will become $\St$ and \cs{Sm} will % become $\Sm$ in the text. Similarly, inside \env{thermoextensiveplain}, % \cs{St} will become $S$ and \cs{Sm} will become $\St$. % Inside \env{thermoextensivesuperscript}, \cs{St} will become $S^t$ and % \cs{Sm} will be $S$; and inside \env{thermointensivesubscript}, % \cs{St} will be $S$ and \cs{Sm} will be $s$. % % \subsubsection{Options Affecting Partial Molar Properties} % There are two options that change how partial molar properties are typeset. % For option |longpm| (the default), the subscript and superscript are % considered part of the symbol, producing something like $\HEpm_i$. % The option |shortpm| makes it display as % \begin{thermoshortpm} % $\HEpm_i$. % \end{thermoshortpm} % The |shortpm| option is the default for several textbook-related options. % % \DescribeEnv{thermolongpm} % \DescribeEnv{thermoshortpm} % It is possible to change partial molar notation locally---this could be % useful if you have a very, very long superscript or subscript and the % default option looks silly, say. The environment \env{thermolongpm} sets % the style equivalent to the |longpm| option, while the \env{thermoshortpm} % environment sets the local style equivalent to the |shortpm| option. % For example, % \begin{verbatim} % \[ \Spm_i = \Spm_i^\IGM + \SRpm_i % \begin{thermoshortpm} % = \Spm_i^\IGM + \SRpm_i % \end{thermoshortpm} \] %\end{verbatim} % produces % \[ \Spm_i = \Spm_i^\IGM + \SRpm_i % \begin{thermoshortpm} % = \Spm_i^\IGM + \SRpm_i, % \end{thermoshortpm} \] % assuming the default options are loaded. % % \subsubsection{Options Affecting Partial Derivatives} % There are several options that change how partial derivatives are rendered. % First are the options that affect the delimiters. We will use the following % code as an example: % \begin{verbatim} % \[ \Partial*{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} % = \PartialMixSecond{\Gm}{P}{T}{} % = -\Partial{\Sm}{P}{T}. \] %\end{verbatim} % Using the |parentheses| option (the default), this gives % \[ \Partial*{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} % = \PartialMixSecond{\Gm}{P}{T}{} % = -\Partial{\Sm}{P}{T}. \] % The option |brackets| changes the output to % \begin{thermobrackets} % \[ \Partial*{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} % = \PartialMixSecond{\Gm}{P}{T}{} % = -\Partial{\Sm}{P}{T}. \] % \end{thermobrackets}\relax % The option \verb"bar" changes the output to % \begin{thermobar} % \[ \Partial*{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} % = \PartialMixSecond{\Gm}{P}{T}{} % = -\Partial{\Sm}{P}{T}. \] % \end{thermobar}\relax % The option \verb"plain-derivatives" eliminates all delimiters; this forces % the \verb"nosubscripts" option. The output in this case is % \begin{thermoplain}% % \[ \Partial*{\Vm}{T}{P} = \PartialMixSecond{\Gm}{T}{P}{} % = \PartialMixSecond{\Gm}{P}{T}{} % = -\Partial{\Sm}{P}{T}. \] % \end{thermoplain}\relax % Accompanying the \verb"plain-derivatives" option is the \verb"nosubscripts" % option, which overrides the default option \verb"subscripts". This option % makes partial derivatives such as % \[ \begin{thermosubscripts} % \Partial{\Vm}{P}{T} \qquad \text{(\texttt{subscripts} option)}, % \end{thermosubscripts}\relax \] % and instead renders them % \[ \begin{thermoNOsubscripts} % \Partial{\Vm}{P}{T} \qquad \text{(\texttt{nosubscripts} option)}. % \end{thermoNOsubscripts} \] % Combined with \verb"plain-derivatives", this would give % \[ \begin{thermoplain} % \Partial{\Vm}{P}{T} \qquad \text{(\texttt{nosubscripts} and % \texttt{plain-derivatives} options)}. % \end{thermoplain} \] % The variables are sorted into an order defined by an internal constant, % meaning $T$ will always be listed before $P$. The order by default is in % the order that terms appear in the fundamental equations, that is, % \begin{gather*} % d\Ut = T \,d\St - P \,d\Vt + \mu \,d\Nt \\ % d\Ht = T \,d\St + \Vt \,dP + \mu \,d\Nt \\ % d\Ft = -\St\,dT - P \,d\Vt + \mu \,d\Nt \\ % \vdots \\ % d\Lt = -\St\,dT - P \,d\Vt - \Nt\,d\mu, % \end{gather*} % with the exception that subscripted variables are (currently) not sortable. % If \verb"\Nt_i" or some similar construct appears as a variable and % \verb"\allNsbut{i}" appears in the held-constant list, the package will % assume that the argument list \emph{should} contain all of the mole numbers. % Symbols without subscripts that are not in the fundamental equation or one of % its variants are sorted in alphabetical order. % % \DescribeEnv{thermoparentheses} % \DescribeEnv{thermobrackets} % \DescribeEnv{thermobraces} % \DescribeEnv{thermobar} % \DescribeEnv{thermoplain} % If you want to use parentheses \emph{locally}, even though your overall % document uses another delimiter, the \env{thermoparentheses} environment will % do that. Similarly, \env{thermobrackets} will temporarily switch to brackets, % \env{thermobar} will temporarily switch to a tailing vertical bar, and % \env{thermoplain} will remove delimiters altogether. % % \DescribeEnv{thermosubscripts} % \DescribeEnv{thermoNOsubscripts} % The environments \env{thermosubscripts} and \env{thermoNOsubscripts} % force the use or disuse of subscripts, respectively. % % \subsubsection{Options Regarding the Number of Moles} % \DescribeMacro{\allNs}% % \DescribeMacro{\allNsbut}% % The default option \verb"moles-index" defines the macro \cs{allNs} to expand % to $\allNs$ and the macro \verb"\allNsbut{i}" to expand to $\allNsbut{i}$. % You can change the dummy index: \verb"\allNsbut[k]{i}" expands to % $\allNsbut[k]{i}$ by default. This is typically not necessary, however: if % you type \verb"\allNsbut{j}", the package will figure out that you want % $\allNsbut{j}$ rather than $\Nt_{j\neq j}$. The time to use the optional % argument is in situations such as % \[ \Partial{\mu_j}{\Nt_k}{\allNsbut[i]{k}}, \] % which is incorrect if the dummy index $j$ is used in place of the $i$. % % You can change these to expand to ranges using the \verb"moles-range" % option, which renders \cs{allNs} as % $\begin{thermomolesrange}\allNs\end{thermomolesrange}$ and % \verb"\allNsbut{i}" as % $\begin{thermomolesrange}\allNsbut{i}\end{thermomolesrange}.$ % The optional argument is ignored in this set of notation. Examples of these % options are shown in Table~\ref{table:allNs}. % % \DescribeEnv{thermomolesrange} % The environment \env{thermomolesrange} temporarily redefines \cs{allNs} and % other range-oriented macros as though the |moles-range| package option had % been invoked. % % \DescribeMacro{\ncomponents}% % You can change the symbol for the number of components (default: $C$) by % redefining the macro \cs{ncomponents}. This is done for you by some package % options that define notation for particular textbooks. % % \begin{table} % \caption{Illustration of the \texttt{moles-index} and \texttt{moles-range} % options and their effects on \cs{allNs} and \cs{allNsbut}.} % \label{table:allNs} %^^A TODO The \leavevmode macro here is to prevent whitespace from building %^^A up due to a bug in old versions of hypdoc. It should be harmless to %^^A leave it in there, but consider removing it at some point. % \leavevmode % \SpecialMacroIndex{\allNs}\relax % \SpecialMacroIndex{\allNsbut}\relax % \SpecialMacroIndex{\allXs}\relax % \SpecialMacroIndex{\allXsbut}\relax % \centering % \begin{minipage}{4.49in}\renewcommand*{\footnoterule}{\vskip-1.5ex}% % \small % \begin{tabular}{l l l} % \toprule % Macro\footnote{You may use $C$ directly instead of \cs{ncomponents} % here, but then it will not change to another symbol if you want to % switch to an option that redefines \cs{ncomponents} later.} % & \verb"moles-index" & \verb"moles-range" \\ % \midrule % \verb"\allNs" & $\allNs$ % & $\begin{thermomolesrange}\allNs\end{thermomolesrange}$ \\ % \verb"\allNsbut{1}" & $\allNsbut{1}$ % & $\begin{thermomolesrange}\allNsbut{1}\end{thermomolesrange}$ \\ % \verb"\allNsbut{i}" & $\allNsbut{i}$ % & $\begin{thermomolesrange}\allNsbut{i}\end{thermomolesrange}$ \\ % \verb"\allNsbut{j}" & $\allNsbut{j}$ % & $\begin{thermomolesrange}\allNsbut{j}\end{thermomolesrange}$ \\ % \verb"\allNsbut{\ncomponents}" & $\allNsbut{\ncomponents}$ % & $\begin{thermomolesrange}\allNsbut{\ncomponents}\end{thermomolesrange}$\\ % \verb"\allNsbut[k]{i}" & $\allNsbut[k]{i}$ % & $\begin{thermomolesrange}\allNsbut[k]{i}\end{thermomolesrange}$\\ % \verb"\allXs" & $\allXs$ % & $\begin{thermomolesrange}\allXs\end{thermomolesrange}$ \\ % \verb"\allXsbut{1}" & $\allXsbut{1}$ % & $\begin{thermomolesrange}\allXsbut{1}\end{thermomolesrange}$ \\ % \verb"\allXsbut{i}" & $\allXsbut{i}$ % & $\begin{thermomolesrange}\allXsbut{i}\end{thermomolesrange}$ \\ % \verb"\allXsbut{j}" & $\allXsbut{j}$ % & $\begin{thermomolesrange}\allXsbut{j}\end{thermomolesrange}$ \\ % \verb"\allXsbut{\ncomponents-1}" & $\allXsbut{\ncomponents-1}$ % & $\begin{thermomolesrange}\allXsbut{\ncomponents-1} % \end{thermomolesrange}$ \\ % \verb"\allXsbut[k]{\ncomponents-1}" & $\allXsbut[k]{\ncomponents-1}$ % & $\begin{thermomolesrange}\allXsbut[k]{\ncomponents-1} % \end{thermomolesrange}$ \\ % \verb"\allXsbut{\ncomponents}"\footnote{This would typically be used % to denote something like % \( \begin{thermomolesrange} % \Gt(T,P,\Nt,\allXsbut{\ncomponents}) % \end{thermomolesrange} % \) rather than in a subscript, but it looks silly if we do not % handle this case this way.} % & $\allXsbut{\ncomponents}$ % & $\begin{thermomolesrange}\allXsbut{\ncomponents} % \end{thermomolesrange}$ \\ % \bottomrule % \end{tabular} % \end{minipage} % \end{table} % % \subsubsection{Other Options} % \DescribeMacro{\dbar}% % The default for path-dependent one-forms (often called ``inexact % differentials'') is \cs{dbar}, which looks like $\dbar$. This can be changed, % if desired, to a delta ($\delta$) with the \verb"delta" option to the % package. % % It should be noted that the \cs{dbar} macro is context-dependent: changing % the typeface to something not supported will probably ruin it, as the kerning % is very font-specific. This package currently supports Computer Modern, % Times, Palatino, Bitstream Charter, Garamond, and Utopia, but other typefaces % may require a manual redefinition. % % \subsubsection{Options for Particular Textbooks} \label{sec:textbooks} % There are several options that load package options and/or redefine % particular commands to match the notation in a particular textbook. % A table showing how various properties are typeset using each of these % packages is included in Appendix~\ref{sec:symbols}. % So far, the following textbooks are supported: % \begin{description} % \item[Bejan] Notation used by Bejan, \emph{Advanced Engineering % Thermodynamics}, Third Edition. Wiley: Hoboken, 2006. % \item[CBK] Notation used by \c Cengel, Boles, and Kano\u glu, % \emph{Thermodynamics: An Engineering Approach}, Ninth Edition. % McGraw Hill: Singapore, 2020. Their symbols for specific and % total volume, which appear to be from the font ITC Benguiat Gothic (and % reasonably approximated by Krub Italic), are not directly % supported.\footnote{% % \providecommand*{\XeTeX}{X\kern-0.125em \lower 0.5ex % \hbox{\reflectbox{\hbox{E}}}\kern-0.125em \TeX} % If you have ITC Benguiat Gothic installed and want to use it for the % volume symbol, you can use it through \XeTeX; try this:\\ % \texttt{\textbackslash usepackage\{fontspec\}} \\ % \texttt{\textbackslash setsansfont\{ITC Benguiat Gothic\}} \\ % \texttt{\textbackslash ExplSyntaxOn} \\ % \texttt{\mbox{}~~\textbackslash tl\_gset:Nn % \textbackslash g\_\_thermodynamics\_volume\_symbol % \{\{\textbackslash text\{\textbackslash % sffamily V\}\}\}} \\ % \texttt{\textbackslash ExplSyntaxOff} % \label{fn:XeTeX}} % \item[ElliottLira] Notation used by Elliott and Lira, \emph{Introductory % Chemical Engineering Thermodynamics}, Second Edition. Prentice Hall: % Upper Saddle River, 2012. \emph{Note: these authors use % Henry's Law (molal basis) in the form \(y_i P = m_i/K_{H,i}\), which is % inconsistent with their notation for the rational basis, so that macro % is left set to its default.} % \item[KlotzRosenberg] Notation used by Klotz and Rosenberg, \emph{Chemical % Thermodynamics: Basic Concepts and Methods}, Seventh Edition. % Wiley: Hoboken, 2008. % \item[Koretsky] Notation used by Koretsky, \emph{Engineering and Chemical % Thermodynamics}, Second Edition. Wiley: New Caledonia, 2013. % \item[ModellReid] Alias for \verb"TesterModell" (the first and second % editions were by Modell and Reid; Reid died prior to the third edition). % \item[MSBB] Notation used by Moran, Shapiro, Boettner, and Bailey, % \emph{Fundamentals of Engineering Thermodynamics}, Eighth Edition. % Wiley: Kendallville, 2014. % \item[Prausnitz] Notation used by Prausnitz, Lichtenthaler, and de Azevedo, % \emph{Molecular Thermodynamics of Fluid-Phase Equilibria}, Third Edition, % Pearson, 1998. % \item[Sandler] Notation used by Sandler, \emph{Chemical, Biochemical, and % Engineering Thermodynamics}, Fifth Edition. Wiley: Hoboken, 2017. % \item[SVNAS] Notation used by Smith, Van Ness, Abbott, and Swihart, % \emph{Introduction to Chemical Engineering Thermodynamics}, Ninth % Edition. McGraw-Hill: Boston, 2021. % \item[TesterModell] Notation used by Tester and Modell, % \emph{Thermodynamics and Its Applications}, Third Edition, Prentice Hall: % Upper Saddle River, 1997. % \item[Thompson] Notation used by Thompson, \emph{A Unified Introduction to % Chemical Engineering Thermodynamics}, Stillwater Press: Orono, 2000. % Note that he uses $c$, $\mathrm{c}$, $n_C$, and $\mathrm{n}$ for the % number of components in various places in the book; I chose $c$ for the % definition of \cs{ncomponents}, but it is impossible to be completely % consistent with his notation. % \end{description} % There may well be some inconsistencies between the notation in these books % and the symbols used here. I will fix such inconsistencies as I become aware % of them. % % \textbf{Important}: Some textbooks use symbols other than \(\mu\) for % chemical potential and \(\gamma\) for activity coefficients. For example, % |KlotzRosenberg| uses $\muup$ for the chemical potential and $\gammaup$ % for the activity coefficient. In such cases, % the macro \verb"\mu" will produce whatever symbol \emph{is} used for the % chemical potential, and \verb"\gamma" will produce the activity coefficient. % The original symbols will still be available as \cs{gammait} and \cs{muit}, % respectively. % % \appendix % \section{Notation Across Textbooks} \label{sec:symbols} % \changes{v2.02}{2024/06/14}{Improved consistency of package options for % textbooks and added a table of symbols organized by textbook option.} % Some of the textbooks supported by this package use multiple symbols for the % same quantity---for example, Sandler's textbook uses both \(P^\text{sat}\) % and \(P^\text{vap}\) for vapor (saturation) pressure, and Elliott and Lira % use both \(\Delta H^\circ\) and \(\Delta H_R^o\) for the standard enthalpy % of reaction. This package may only support one of the two in such cases. % % Table~\ref{table:textbooks} gives a description of each symbol supported % by the package, the corresponding command, and the way that command is % rendered using each of the textbook-related options in % Section~\ref{sec:textbooks}. Packages consisting of two names are shortened % to one name in the headers for space considerations. % % \NewDocumentCommand{\inherit}{m}{\textcolor{gray}{#1}} % \begin{landscape}\scriptsize % \tablehead{% % \toprule % Quantity & Macro & Default & Bejan & CBK & Elliott & Klotz % & Koretsky & MSBB & Prausnitz & Sandler & SVNAS & Modell & Thompson \\ % \midrule % } % \tabletail{% % \midrule\multicolumn{13}{l}{\emph{continued on next page\dots}} \\ % } % \tablelasttail{\bottomrule} % \tablecaption{How symbols are typeset for various textbooks. % Entries in \inherit{gray} indicate quantities that are not directly or % indirectly defined in a particular textbook and are therefore inherited % fromthe defaults. % \emph{Note: Options with two authors, such as \texttt{ElliottLira}, % only include one name so as to fit on one page.} % \label{table:textbooks}} % \setlength{\extrarowheight}{3.5pt}% % \begin{mpsupertabular}{l l l l l l l l l l l l l l} % \# components & \verb"\ncomponents" & $\ncomponents$ & $n$ & $\inherit{\ncomponents}$ & $\inherit{\ncomponents}$ & $\inherit{\ncomponents}$ & $m$ & $\inherit{\ncomponents}$ & $m$ & $\mathcal{C}$ & $\inherit{\ncomponents}$ & $n$ & $c$ \\ % activity (absolute) & \verb"\actabs_i" & $\actabs_i$ & $\inherit{\lambda_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ & $\inherit{\lambda_i}$ & $\inherit{\lambda_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ & $\inherit{\actabs_i}$ \\ % activity (relative) & \verb"\actrel_i" & $\actrel_i$ & $\inherit{\actrel_i}$ & $\inherit{\actrel_i}$ & $a_i$ & $a_i$ & $\inherit{a_i}$ & $\inherit{\actrel_i}$ & $\mathdutchcal{a}_i$\relax % \footnote{The symbol $\mathdutchcal{a}$ requires the |dutchcal| fonts to be installed, % though the package itself is not loaded. This symbol is an approximation to the one % the book actually uses.} & $a_i$ & $a_i$ & $a_i$ & $\widehat a_i$ \\ % activity coefficient (ordinary) & \verb"\gamma_i" & $\gamma_i$ & $\inherit{\gamma_i}$ & $\inherit{\gamma_i}$ & $\gamma_i$ & $\gammaup_i$ & $\gamma_i$ & $\inherit{\gamma_i}$ & $\gamma_i$ & $\gamma_i$ & $\gamma_i$ & $\gammaup_i$ & $\gamma_i$ \\ % activity coefficient (Henry, rational) & \verb"\gammarat_i" & $\gammarat_i$ & $\inherit{\gammarat_i}$ & $\inherit{\gammarat_i}$ & $\gamma_i^\ast$ & $\gammaup_i$ & $\gamma_i^\text{Henry's}$ & $\inherit{\gammarat_i}$ & $\inherit{\gammarat_i}$ & $\gamma_i^\ast$ & $\inherit{\gammarat_i}$ & $\gammaup_i^{\ast\ast}$ & $\inherit{\gammarat_i}$ \\ % activity coefficient (Henry, molal) & \verb"\gammamol_i" & $\gammamol_i$ & $\inherit{\gammamol_i}$ & $\inherit{\gammamol_i}$ & $\gamma_i^\square$ & $\gammaup_i$ & $\gamma_i^m$ & $\inherit{\gammamol_i}$ & $\inherit{\gammamol_i}$ & $\gamma_i^\square$ & $\gammarat_i$ & $\gammaup_i^\ast$ & $\inherit{\gammamol_i}$ \\ % adiabatic compressibility & \multicolumn{13}{l}{\emph{See} isentropic compressibility} \\ % adiabatic expansivity & \multicolumn{13}{l}{\emph{See} isentropic expansivity} \\ % area (total) & \verb"\At" & $\At$ & $A$ & $A$ & $\inherit{\At}$ & $\inherit{a}$ & $A$ & $A$ & $\inherit{A}$ & $\inherit{a}$ & $\inherit{a^t}$ & {\large$\underline{a}$} & $\inherit{\mkern2mu\underline{\mkern-2mu\mathcal{A}\mkern-2mu}\mkern2mu}$ \\ % chemical potential & \verb"\mu" & $\mu$ & $\mu$ & $\mu$ & $\mu$ & $\muup$ & $\mu$ & $\mu$ & $\mu$ & $\mu$ & $\mu$ & $\muup$ & $\mu$ \\ % electric potential & \verb"\Epot" & $\Epot$ & $\inherit{\Epot}$ & $\inherit{\Epot}$ & $E$ & $\emf$\footnote{The % symbol $\emf$ requires the \pkg{emf} package. If that package is not % loaded, $\mathcal{E}$ is used instead.\label{fn:emf}} % & $E$ & $\inherit{\Epot}$ & $\emf$\footref{fn:emf} & $E$ & $E$ & $\exists$ & $E$ \\ % electric potential (standard) & \verb"\Epot^\std" & $\Epot^\std$ & $\inherit{\Epot^\std}$ & $\inherit{\Epot^\std}$ & $E^\circ$ & $\emf^\circ$ & $E^o$ & $\inherit{\Epot^\std}$ & $\emf^0$ & $\inherit{E^\circ}$ & $E^\circ$ & $\exists^o$ & $E^\circ$ \\ % energy (total) & \verb"\Et" & $\Et$ & $E$ & $E$ & $\inherit{\Et}$ & $\inherit{E}$ & $E$ & $E$ & $E$ & $\inherit{E}$ & $\inherit{E^t}$ & $\Et$ & $\inherit{\Et}$ \\ % energy (molar) & \verb"\Em" & $\Em$ & $\overline{e}$ & $\overline{e}$ & $\inherit{\Em}$ & $\inherit{E_{\textrm{m}}}$ & $e$ & $\overline{e}$ & $\inherit{e}$ & \begin{thermoextensiveplain}$\inherit{\Em}$\end{thermoextensiveplain} & $\inherit{E}$ & $\Em$ & $\inherit{\Em}$ \\ % energy (specific) & \verb"\Es" & $\Es$ & $e$ & $e$ & $\inherit{E}$ & $\inherit{\hat E}$ & $\hat e$ & $e$ & $\inherit{\hat e}$ & $\hat E$ & $\inherit{E}$ & $\Es$ & $\inherit{\Em}$ \\ % enthalpy (total) & \verb"\Ht" & $\Ht$ & $H$ & $H$ & $\Ht$ & $H$ & $H$ & $H$ & $H$ & $H$ & $H^t$ & $\Ht$ & $\Ht$ \\ % enthalpy (molar) & \verb"\Hm" & $\Hm$ & $\overline{h}$ & $\overline{h}$ & $H$ & $H_{\textrm{m}}$ & $h$ & $\overline{h}$ & $h$ & \begin{thermoextensiveplain}$\Hm$\end{thermoextensiveplain} & $H$ & $\Hm$ & $\Hm$ \\ % enthalpy (specific) & \verb"\Hs" & $\Hs$ & $h$ & $h$ & $H$ & $\inherit{\Hs}$ & $\hat h$ & $h$ & $\inherit{\hat h}$ & $\hat H$ & $H$ & $\Hs$ & $\inherit{\Hs}$ \\ % enthalpy (partial molar) of $i$ & \verb"\Hpm_i" & $\Hpm_i$ & $\inherit{\overline{h}_i}$ & $\widetilde{h}_i$ & $\overline{H}_i$ & $H_{\mathrm{m}i}$ & $\overline{H}_i$ & $\Hpm_i$ & $\overline{h}_i$ & \begin{thermoshortpm}$\Hpm_i$\end{thermoshortpm} & $\overline{H}_i$ & $\Hpm_i$ & $\Hpm_i$ \\ % enthalpy of reaction & \verb"\Deltarxn\Hm" & $\Deltarxn\Hm$ & $\inherit{\Delta\overline{h}_\text{rxn}}$ & $\overline{h}_R$ & $\Delta H$ & $\Delta H_{\mathrm{m}}$ & $\Delta h_\text{rxn}$ & $\inherit{\Delta\overline{h}_\text{rxn}}$ & $\inherit{\Delta h_\text{rxn}}$ & \begin{thermoextensiveplain}$\Delta_{\text{rxn}}\Hm$\end{thermoextensiveplain} & $\Delta H$ & $\Delta H_{rx}$ & $\Delta H_R$ \\ % enthalpy of fusion & \verb"\Deltafus\Hm" & $\Deltafus\Hm$ & $\overline{h}_{sf}$ & $\overline{h}_{sf}$ & $\Delta H^{fus}$ & $\Delta H_{\mathrm{m}}$ & $\Delta h_\text{fus}$ & $\inherit{\overline{h}^\text{fus}}$ & $\inherit{\Delta h^\text{fus}}$ & \begin{thermoextensiveplain}$\Delta_\text{fus}\Hm$\end{thermoextensiveplain} & $\Delta H^{sl}$ & $\inherit{\Deltafus H}$ & $\Delta H^{SL}$ \\ % enthalpy of vaporization & \verb"\Deltavap\Hm" & $\Deltavap\Hm$ & $\overline{h}_{sf}$ & $\overline{h}_{fg}$ & $\Delta H^{vap}$ & $\Delta H_{\mathrm{m}}$ & $\Delta h_\text{vap}$ & $\inherit{\overline{h}^\text{vap}}$ & $\inherit{\Delta h^\text{vap}}$ & \begin{thermoextensiveplain}$\Delta_\text{vap}\Hm$\end{thermoextensiveplain} & $\Delta H^{vl}$ & $\inherit{\Deltavap H}$ & $\Delta H^{LV}$ \\ % enthalpy of sublimation & \verb"\Deltasub\Hm" & $\Deltasub\Hm$ & $\overline{h}_{sg}$ & $\overline{h}_{sg}$ & $\inherit{\Delta H^{sub}}$ & $\Delta H_{\mathrm{m}}$ & $\Delta h_\text{sub}$ & $\inherit{\overline{h}^\text{sub}}$ & $\inherit{\Delta h^\text{sub}}$ & $\Delta_\text{sub}\Ht$ & $\Delta H^{vs}$ & $\inherit{\Deltasub H}$ & $\inherit{\Delta H^{SV}}$ \\ % entropy (total) & \verb"\St" & $\St$ & $S$ & $S$ & $\St$ & $S$ & $S$ & $S$ & $S$ & $S$ & $S^t$ & $\St$ & $\St$ \\ % entropy (molar) & \verb"\Sm" & $\Sm$ & $\overline{s}$ & $\overline{s}$ & $S$ & $S_{\mathrm{m}}$ & $s$ & $\overline{s}$ & $s$ & $\St$ & $S$ & $S$ & $S$ \\ % entropy (specific) & \verb"\Ss" & $\Ss$ & $s$ & $s$ & $S$ & $\inherit{\Ss}$ & $\hat s$ & $s$ & $\inherit{\hat s}$ & $\hat S$ & $S$ & $\hat S$ & $\inherit{\Ss}$ \\ % entropy (partial molar) of $i$ & \verb"\Spm_i" & $\Spm_i$ & $\overline{S}_i$ & $\widetilde{s}_i$ & $\overline{S}_i$ & $S_{\mathrm{m}i}$ & $\overline{S}_i$ & $\Spm_i$ & $\overline{s}_i$ & \begin{thermoshortpm}$\Spm_i$\end{thermoshortpm} & $\overline{S}_i$ & $\Spm_i$ & $\Spm_i$ \\ % extent of reaction & \verb"\xrxn" & $\xrxn$ & $\zeta$ & $\inherit{\xrxn}$ & $\xi$ & $\xiup$ & $\xi$ & $\varepsilon$ & $\inherit{\xi}$ & $X$ & $\varepsilon$ & $\xiup$ & $\xi$ \\ % fugacity of pure substance & \verb"\fpure" & $\fpure$ & $f$ & $\inherit{\fpure}$ & $f$ & $f$ & $f$ & $f$ & $f_\text{pure}$ & $f$ & $f$ & $f$ & $f$ \\ % fugacity of pure $i$ & \verb"\fpure_i" & $\fpure_i$ & $\inherit{f_i^\bullet}$ & $\inherit{\fpure_i}$ & $f_i$ & $f_i^\bullet$ & $f_i$ & $f_i$ & $f_{\text{pure}\,i}$ & $f_i$ & $f_i$ & $f_i$ & $f_i^\bullet$ \\ % fugacity of $i$ in mixture & \verb"\fmix_i" & $\fmix_i$ & $f_i$ & $\inherit{\fmix_i}$ & $\hat f_i$ & $f_i$ & $\hat f_i$ & $\bar f_i$ & $f_i$ & $\bar f_i$ & $\hat f_i$ & $\hat f_i$ & $\widehat{f}_i$ \\ % fugacity at saturation & \verb"\fsat" & $\fsat$ & $\inherit{f^\sat}$ & $\inherit{\fsat}$ & $f^{sat}$ & $\inherit{f^\text{sat}}$ & $\inherit{f^\text{sat}}$ & $\inherit{f^\text{sat}}$ & $f^s_\text{pure}$ & $f^\text{sat}$ & $f^\text{sat}$ & $\inherit{\fsat}$ & $f^\text{sat}$ \\ % fugacity coefficient of pure substance & \verb"\phipure" & $\phipure$ & $\inherit{\phi}$ & $\inherit{\phipure}$ & $\phi$ & $\gamma$ & $\varphi$ & $\inherit{\phi}$ & $\varphi_{\text{pure}}$ & $\phi$ & $\phi$ & $\phiup$ & $\phi$ \\ % fugacity coefficient of pure $i$ & \verb"\phipure_i" & $\phipure_i$ & $\inherit{\phi_i^\bullet}$ & $\inherit{\phipure_i}$ & $\phi_i$ & $\gamma_i^\bullet$ & $\varphi_i$ & $\inherit{\phi_i}$ & $\varphi_{\text{pure}\,i}$ & $\phi_i$ & $\phi_i$ & $\phiup_i$ & $\phi_i^\bullet$ \\ % fugacity coefficient of $i$ in mixture & \verb"\phimix_i" & $\phimix_i$ & $\inherit{\phi_i}$ & $\inherit{\phimix_i}$ & $\hat\phi_i$ & $\gamma_i$ & $\hat\varphi_i$ & $\bar\phi_i$ & $\varphi_i$ & $\bar\phi_i$ & $\hat\phi_i$ & $\hat\phiup_i$ & $\widehat{\phi}_i$ \\ % fugacity coefficient at saturation & \verb"\phisat" & $\phisat$ & $\inherit{\phisat}$ & $\inherit{\phisat}$ & $\phi^{sat}$ & $\inherit{\gamma^\text{sat}}$ & $\varphi^\text{sat}$ & $\inherit{\phi^\text{sat}}$ & $\varphi^s$ & $\phi^\text{sat}$ & $\phi^\text{sat}$ & $\inherit{\phiup^\sat}$ & $\phi^\text{sat}$ \\ % Gibbs free energy (total) & \verb"\Gt" & $\Gt$ & $G$ & $G$ & $\Gt$ & $G$ & $G$ & $G$ & $G$ & $G$ & $G^t$ & $\Gt$ & $\Gt$ \\ % Gibbs free energy (molar) & \verb"\Gm" & $\Gm$ & $\overline{g}$ & $\overline{g}$ & $G$ & $G_{\mathrm{m}}$ & $g$ & $\overline{g}$ & $g$ & $\Gt$ & $G$ & $G$ & $G$ \\ % Gibbs free energy (specific) & \verb"\Gs" & $\Gs$ & $g$ & $g$ & $G$ & $\inherit{\Gs}$ & $\hat g$ & $g$ & $\inherit{\hat g}$ & $\hat G$ & $G$ & $\Gs$ & $\inherit{\Gs}$ \\ % Gibbs free energy (partial molar) & \verb"\Gpm_i" & $\Gpm_i$ & $\overline{G}_i$ & $\widetilde{g}_i$ & $\Gpm_i$ & $G_{\mathrm{m}i}$ & $\overline{G}_i$ & $\Gpm_i$ & $\partialmolar{g}_i$ & \begin{thermoshortpm}$\Gpm_i$\end{thermoshortpm} & $\Gpm_i$ & $\Gpm_i$ & $\partialmolar{G}_i$ \\ % Gibbs free energy of mixing & \verb"\Deltamix\Gt" & $\Deltamix\Gt$ & $\inherit{\Deltamix G}$ & $\inherit{\Deltamix G}$ & $\Delta\Gt_\text{mix}$ & $\Delta G_\text{mix}$ & $\Delta G_\text{mix}$ & $\inherit{\Deltamix G}$ & $\Delta G_\text{mixing}$ & $\Delta_\text{mix}G$ & $\Delta G^t$ & $\Deltamix\Gt$ & $\Delta_{MIX}\Gt$ \\ % Gibbs free energy of reaction & \verb"\Deltarxn\Gm" & $\Deltarxn\Gm$ & $\inherit{\Deltarxn{\bar{g}}}$ & $\overline{g}_R$ & $\Delta G$ & $\Delta G_{\mathrm{m}}$ & $\Delta g_\text{rxn}$ & $\inherit{\Deltarxn{\overline{g}}}$ & $\inherit{\Delta g_\text{rxn}}$ & $\Delta_\text{rxn}\Gt$ & $\Delta G$ & $\Delta G_{rx}$ & $\Delta G_R$ \\ % grand potential (total) & \verb"\Lt" & $\Lt$ & $F_\mu$ & $\inherit{\Omega}$ & $\inherit{\Lt}$ & $\inherit{\Omega}$ & $\inherit{\Omega}$ & $\inherit{\Omega}$ & $\inherit{\Omega}$ & $\inherit{\Omega}$ & $\inherit{\Lt}$ & $\inherit{\Lt}$ & $\inherit{\Lt}$ \\ % grand potential (molar) & \verb"\Lm" & $\Lm$ & $\overline{f}_\mu$ & $\inherit{\overline{\omega}}$ & $\inherit{\Lm}$ & $\inherit{\Omega_{\mathrm{m}}}$ & $\inherit{\omega}$ & $\inherit{\overline{\omega}}$ & $\inherit{\omega}$ & $\inherit{\Lt}$ & $\inherit{\Lm}$ & $\inherit{\Lm}$ & $\inherit{\Lm}$ \\ % grand potential (specific) & \verb"\Ls" & $\Ls$ & $f_\mu$ & $\inherit{\omega}$ & $\inherit{\Ls}$ & $\inherit{\Ls}$ & $\inherit{\hat\omega}$ & $\inherit{\omega}$ & $\inherit{\hat\omega}$ & $\inherit{\Ls}$ & $\inherit{\Lm}$ & $\inherit{\Ls}$ & $\inherit{\Ls}$ \\ % heat (total) & \verb"\Qt" & $\Qt$ & $Q$ & $Q$ & $\Qt$ & $Q$ & $Q$ & $Q$ & $Q$ & $Q$ & $Q^t$ & $\inherit{\Qt}$ & $\inherit{\Qt}$ \\ % heat (molar) & \verb"\Qm" & $\Qm$ & $\overline{q}$ & $\overline{q}$ & $Q$ & $\inherit{Q_{\mathrm{m}}}$ & $q$ & $\overline{q}$ & $\inherit{q}$ & $\inherit{\Qt}$ & $Q$ & $Q$ & $Q$ \\ % heat (specific) & \verb"\Qs" & $\Qs$ & $q$ & $q$ & $Q$ & $\inherit{\Qs}$ & $\hat q$ & $q$ & $\inherit{\hat q}$ & $\inherit{\Qs}$ & $Q$ & $\inherit{\hat Q}$ & $\inherit{\Qs}$ \\ % heat capacity (isobaric, total) & \verb"\cPt" & $\cPt$ & $C_P$ & $\inherit{C_p}$ & $\underline{C}_P$ & $C_P$ & $\inherit{C_P}$ & $\inherit{C_p}$ & $C_p$ & $NC_P$ & $nC_P$ & $\inherit{\underline{C}_p}$ & $\inherit{\cPt}$ \\ % heat capacity (isobaric, molar) & \verb"\cP" & $\cP$ & $\overline{c}_P$ & $\overline{c}_p$ & $C_P$ & $C_{P\mathrm{m}}$ & $c_P$ & $\overline{c}_p$ & $c_p$ & $C_P$ & $C_P$ & $C_p$ & $C_P$ \\ % heat capacity of $i$ (isobaric, molar) & \verb"\cP_i" & $\cP_i$ & $\overline{c}_{P,i}$ & $\overline{c}_{p,i}$ & $C_{P,i}$ & $C_{P\mathrm{m}i}^\bullet$ & $C_{P,i}$ & $\overline{c}_{p,i}$ & $c_{p\,i}$ & $C_{P,i}$ & ${C_P}_i$ & $C_{pi}$ & $C_{P,i}$ \\ % heat capacity (isobaric, specific) & \verb"\cPs" & $\cPs$ & $c_P$ & $c_p$ & $C_P$ & $\inherit{\cPs}$ & $\hat c_P$ & $c_p$ & $\inherit{\hat c_p}$ & $\hat C_P$ & $C_P$ & $\inherit{\hat C_p}$ & $\inherit{\hat C_p}$ \\ % heat capacity (isobaric, partial molar) & \verb"\cPpm_i" & $\cPpm_i$ & $\overline{c}_{P,i}$ & $\inherit{\widetilde{C}_{p,i}}$ & $\overline{C}_{P,i}$ & $C_{P\mathrm{m}i}$ & $\overline{C}_{P,i}$ & \begin{thermoshortpm}$\partialmolar{C}_{p,i}$\end{thermoshortpm} & $\inherit{\bar c_{p\,i}}$ & \begin{thermoshortpm}$\cPpm_i$\end{thermoshortpm} & ${\overline{C}_P}_i$ & $\overline{C}_{pi}$ & \begin{thermoshortpm}$\inherit{\cPpm_i}$\end{thermoshortpm} \\ % heat capacity (isochoric, total) & \verb"\cVt" & $\cVt$ & $C_V$ & $\inherit{C_V}$\footref{fn:XeTeX} & $\underline{C}_V$ & $C_V$ & $C_V$ & $C_v$ & $C_v$ & $NC_V$ & $nC_V$ & $\inherit{\underline{C}_v}$ & $\inherit{\cVt}$ \\ % heat capacity (isochoric, molar) & \verb"\cV" & $\cV$ & $\overline{c}_v$ & $\overline{c}_V$\footref{fn:XeTeX} & $C_V$ & $C_{V\mathrm{m}}$ & $c_V$ & $\overline c_v$ & $c_v$ & $C_V$ & $C_V$ & $C_v$ & $C_V$ \\ % heat capacity (isochoric, specific) & \verb"\cVs" & $\cVs$ & $c_v$ & $c_V$\footref{fn:XeTeX} & $C_V$ & $\inherit{\cVs}$ & $\hat c_v$ & $c_v$ & $\inherit{\hat c_p}$ & $\hat C_V$ & $C_V$ & $\inherit{\hat C_v}$ & $\inherit{\cVs}$ \\ % heat capacity (isochoric, partial molar) & \verb"\cVpm_i" & $\cVpm_i$ & $\overline{c}_{v,i}$ & $\widetilde{C}_{V,i}$\footref{fn:XeTeX} & $\overline{C}_{V,i}$ & $C_{V\mathrm{m}i}$ & $\overline{C}_V$ & \begin{thermoshortpm}$\partialmolar{C}_{v,i}$\end{thermoshortpm} & $\inherit{\bar c_{v\,i}}$ & \begin{thermoshortpm}$\cVpm_i$\end{thermoshortpm} & ${\overline{C}_V}_i$ & $\overline{C}_{vi}$ & \begin{thermoshortpm}$\inherit{\cVpm_i}$\end{thermoshortpm} \\ % Helmholtz free energy (total) & \verb"\Ft" & $\Ft$ & $F$ & $A$ & $\underline{A}$ & $A$ & $A$ & $\Psi$ & $A$ & $A$ & $A^t$ & $\Ft$ & $\Ft$ \\ % Helmholtz free energy (molar) & \verb"\Fm" & $\Fm$ & $\bar{f}$ & $\overline{a}$ & $A$ & $A_{\mathrm{m}}$ & $a$ & $\overline{\psi}$ & $a$ & $\Ft$ & $A$ & $A$ & $A$ \\ % Helmholtz free energy (specific) & \verb"\Fs" & $\Fs$ & $f$ & $a$ & $A$ & $\inherit{\Fs}$ & $\hat a$ & $\psi$ & $\inherit{\hat a}$ & $\hat A$ & $A$ & $\Fs$ & $\inherit{\Fs}$ \\ % Helmholtz free energy (partial molar) & \verb"\Fpm_i" & $\Fpm_i$ & $\overline{f}_i$ & $\widetilde{a}_i$ & $\overline{A}_i$ & $A_{\mathrm{m}i}$ & $\overline{A}_i$ & $\overline{\Psi}_i$ & $\overline a_i$ & \begin{thermoshortpm}$\Fpm_i$\end{thermoshortpm} & $\begin{thermoshortpm}\Fpm_i\end{thermoshortpm}$ & $\partialmolar{A}_i$ & \begin{thermoshortpm}$\partialmolar{A}_i$\end{thermoshortpm} \\ % Henry's constant (rational basis) & \verb"\Henryrat_i" & $\Henryrat_i$ & $\inherit{\Henryrat_i}$ & $\inherit{\Henryrat_i}$ & $h_i$ & $k_i$ & $\mathcal{H}_i$ & $\inherit{\Henryrat_i}$ & $H_i$ & $H_i$ & $\mathcal{H}_i$ & $f^{**}$ & $k_{H,i}$ \\ % Henry's constant (molal basis) & \verb"\Henrymol_i" & $\Henrymol_i$ & $\inherit{\Henrymol_i}$ & $\inherit{\Henrymol_i}$ & $\inherit{\Henrymol_i}$ & $k''_i$ & $\inherit{\Henrymol_i}$ & $\inherit{\Henrymol_i}$ & $\inherit{\Henrymol_i}$ & $\mathcal{H}_i$ & $\inherit{\Henrymol_i}$ & $f^*$ & $k_{H,i}$ \\ % ideal gas enthalpy & \verb"\Hm^\IG" & $\Hm^\IG$ & $\inherit{\bar{h}^\IG}$ & $\inherit{\overline{h}^\IG}$ & $H^{ig}$ & $\inherit{H_{\mathrm{m}}^\IG}$ & $h^\text{ideal~gas}$ & $\smash{\overline{h}}^\ast$ & $h^\text{id}$ & $H^\text{IG}$ & $H^{ig}$ & $H^o$ & $H^{IG}$ \\ % ideal gas mixture enthalpy & \verb"\Hm^\IGM" & $\Hm^\IGM$ & $\inherit{\bar{h}^\IG}$ & $\inherit{\overline{h}^\IGM}$ & $H^{ig}$ & $\inherit{H_{\mathrm{m}}^\IGM}$ & $h^\text{ideal}$ & $\smash{\overline{h}}^\ast$ & $h^\text{id}$ & $H^\text{IGM}$ & $H^{ig}$ & $H^o$ & $H^{IG}$ \\ % ideal solution enthalpy & \verb"\Hm^\IS" & $\Hm^\IS$ & $\inherit{\bar{h}^\IS}$ & $\inherit{\overline{h}^\IS}$ & $H^{is}$ & $\inherit{H_{\mathrm{m}}^\IS}$ & $h^\text{ideal}$ & $\inherit{\smash{\overline{h}}^\IS}$ & $h^\text{(ideal)}$ & $H^\text{IM}$ & $H^{id}$ & $H^{ID}$ & $H^{IS}$ \\ % inexact differential & \verb"\dbar" & $\dbar$ & $\delta$ & $\delta$ & $d$ & $d$ & $\delta$ & $\delta$ & $\inherit{\dbar}$ & $\inherit{\dbar}$ & $\dbar$ & $\delta$ & $\delta$ \\ % internal energy (total) & \verb"\Ut" & $\Ut$ & $U$ & $U$ & $\underline{U}$ & $U$ & $U$ & $U$ & $U$ & $U$ & $U^t$ & $\Ut$ & $\Ut$ \\ % internal energy (molar) & \verb"\Um" & $\Ut$ & $\bar{u}$ & $\overline{u}$ & $U$ & $U_{\mathrm{m}}$ & $u$ & $\overline{u}$ & $u$ & $\Ut$ & $U$ & $U$ & $U$ \\ % internal energy (specific) & \verb"\Us" & $\Us$ & $u$ & $u$ & $U$ & $\inherit{\Us}$ & $\hat u$ & $u$ & $\inherit{\hat u}$ & $\hat U$ & $U$ & $u$ & $\inherit{\Us}$ \\ % internal energy (partial molar) & \verb"\Upm_i" & $\Upm_i$ & $\overline{u}_i$ & $\widetilde{u}_i$ & $\overline{U}_i$ & $U_{\mathrm{m}i}$ & $\overline{U}_i$ & $\Upm_i$ & $\overline{u}_i$ & \begin{thermoshortpm}$\Upm_i$\end{thermoshortpm} & \begin{thermoshortpm}$\Upm_i$\end{thermoshortpm} & $\Upm_i$ & $\Upm_i$ \\ % isothermal compressibility & \verb"\kappaT" & $\kappaT$ & $\kappa$ & $\alpha$ & $\kappa_T$ & $\betaup$ & $\kappa$ & $\kappa$ & $\beta$ & $\kappa_T$ & $\kappa$ & $\kappa_T$ & $\inherit{\kappaT}$ \\ % isentropic compressibility & \verb"\kappaS" & $\kappaS$ & $\inherit{\kappaS}$ & $\inherit{\alpha_S}$ & $\inherit{\kappa_S}$ & $\inherit{\beta_S}$ & $\inherit{\kappaS}$ & $\alpha$ & $\inherit{\beta_S}$ & $\inherit{\kappaS}$ & $\inherit{\kappaS}$ & $\inherit{\kappaS}$ & $\inherit{\kappaS}$ \\ % isobaric expansivity & \verb"\alphaP" & $\alphaP$ & $\beta$ & $\beta$ & $\alpha_P$ & $\alpha$ & $\beta$ & $\beta$ & $\alpha$ & $\alpha$ & $\beta$ & $\alpha_P$ & $\inherit{\alphaP}$ \\ % isentropic expansivity & \verb"\alphaS" & $\alphaS$ & $\inherit{\beta_S}$ & $\inherit{\beta_S}$ & $\inherit{\alpha_S}$ & $\inherit{\alpha_S}$ & $\inherit{\beta_S}$ & $\inherit{\beta_S}$ & $\alpha_S$ & $\inherit{\alphaS}$ & $\inherit{\beta_S}$ & $\inherit{\alphaS}$ & $\inherit{\alphaS}$ \\ % Joule--Thomson coefficient & \verb"\muJT" & $\muJT$ & $\mu_J$ & $\mu_\text{JT}$ & $\mu_{JT}$ & $\mu_\text{J.T.}$ & $\mu_\text{JT}$ & $\mu_J$ & $\inherit{\muJT}$ & $\mu$ & $\mu$ & $\alpha_H$ & $\alpha_H$ \\ % moles & \verb"\Nt" & $\Nt$ & $N$ & $N$ & $n$ & $n$ & $n$ & $n$ & $n$ & $N$ & $n$ & $N$ & $n$ \\ % saturation pressure & \verb"\Psat" & $\Psat$ & $\inherit{\Psat}$ & $P^v$ & $P^{sat}$ & $p$ & $P^\text{sat}$ & $\inherit{P^\text{sat}}$ & $P^s$ & $P^\text{sat}$ & $P^\text{sat}$ & $P^\text{sat}$ & $P^\text{sat}$ \\ % saturation pressure of $i$ & \verb"\Psat_i" & $\Psat_i$ & $\inherit{\Psat_i}$ & $P^v_i$ & $P^{sat}_i$ & $p^\bullet_i$ & $P^\text{sat}_i$ & $\inherit{P^\text{sat}_i}$ & $P^s_i$ & $P^\text{sat}_i$ & $P^\text{sat}_i$ & $P^\text{sat}_i$ & $P^\text{sat}_i$ \\ % standard molality & \verb"\Cstd_i" & $\Cstd_i$ & $\inherit{\Cstd_i}$ & $\inherit{\Cstd_i}$ & $m_i^\circ$ & $m_i^\circ$ & $\inherit{C_i^o}$ & $\inherit{\Cstd_i}$ & $C_i^0$ & \text{1~molal} & $m^\circ$ & $m^+$ & $m_i^\circ$ \\ % standard chemical potential & \verb"\mustd" & $\mustd$ & $\inherit{\mustd}$ & $\inherit{\mustd}$ & $\mu^\circ$ & $\muup^\circ$ & $\mu^o$ & $\overline{g}^\circ$ & $\mu^0$ & $\mu^\circ$ & $G^\circ$ & $\muup^o$ & $\Gamma$ \\ % standard enthalpy & \verb"\Hm^\std" & $\Hm^\std$ & $\bar{h}^\circ$ & $\smash{\overline{h}}^\circ$ & $H^\circ$ & $H^\circ_{\mathrm{m}}$ & $h^o$ & $\overline{h}^\circ$ & $h^0$ & $\Ht^\circ$ & $H^\circ$ & $H^o$ & $H^\circ$ \\ % standard enthalphy of formation & \verb"\Deltaf\Hm^std" & $\Deltaf\Hm^\std$ & $\bar{h}^\circ_f$ & $\smash{\overline{h}}_f^\circ$ & $\Delta H_f^\circ$ & $\Delta_f H^\circ_{\mathrm{m}}$ & $\Delta h_f^o$ & $\bar{h}^\circ_{\mathrm{f}}$ & $\Delta h_f^0$ & $\Delta_{\mathrm{f}}\Ht^\circ$ & $\Delta H^\circ_{f298}$ & $\Delta H_f^o$ & $\Delta H_F^\circ$ \\ % standard enthalphy of formation of $i$ & \verb"\Deltaf\Hm^std_i" & $\Deltaf\Hm^\std_i$ & $\bar{h}^\circ_{f,i}$ & $\smash{\overline{h}}_{f,i}^\circ$ & $\Delta H_{f,i}^\circ$ & $\Delta_f H^\circ_{\mathrm{m}i}$ & $(\Delta h_f^o)_i$ & $(\bar{h}^\circ_{\mathrm{f}})_i$ & $\Delta h_{f\,i}^0$ & $\Delta_{\mathrm{f}}\Ht^\circ_i$ & $\Delta H^\circ_{f298i}$ & $\Delta H^o_{fi}$ & $\Delta H_{F,i}^\circ$ \\ % standard enthalphy of reaction & \verb"\Deltarxn\Hm^std" & $\Deltarxn\Hm^\std$ & $\inherit{\bar{h}^\circ_\reaction}$ & $\smash{\overline{h}}_R^\circ$ & $\Delta H^\circ$ & $\Delta H_{\mathrm{m}}$ & $\Delta h^o_\text{rxn}$ & $\inherit{\Delta\bar{h}^\circ_\text{rxn}}$ & $\Delta h^0_\text{rxn}$ & $\Delta_\text{rxn}\Ht^\circ$ & $\Delta H^\circ$ & $\Delta H_{rx}^o$ & $\Delta H_R^\circ$ \\ % standard free energy of formation & \verb"\Deltaf\Gm^std" & $\Deltaf\Gm^\std$ & $\bar{g}^\circ$ & $\smash{\bar{g}}_f^\circ$ & $\Delta G_f^\circ$ & $\Delta_f G^\circ_{\mathrm{m}}$ & $\Delta g_f^o$ & $\bar{g}^\circ_{\mathrm{f}}$ & $\Delta g_f^0$ & $\Delta_{\mathrm{f}}\Gt^\circ$ & $\Delta G^\circ_{f298}$ & $\Delta G_f^o$ & $\Delta G_F^\circ$ \\ % standard free energy of formation of $i$ & \verb"\Deltaf\Gm_i^std" & $\Deltaf\Gm_i^\std$ & $\bar{g}^\circ_{f,i}$ & $\smash{\bar{g}}_{f,i}^\circ$ & $\Delta G_{f,i}^\circ$ & $\Delta_f G^\circ_{\mathrm{m}i}$ & $(\Delta g_f^o)_i$ & $(\bar{g}^\circ_{\mathrm{f}})_i$ & $\Delta g_{f\,i}^0$ & $\Delta_{\mathrm{f}}\Gt^\circ_i$ & $\Delta G^\circ_{f298i}$ & $\Delta G^o_{fi}$ & $\Delta G_{F,i}^\circ$ \\ % standard free energy of reaction & \verb"\Deltarxn\Gm^std" & $\Deltarxn\Gm^\std$ & $\inherit{\bar{g}^\circ_\reaction}$ & $\smash{\bar{g}}^\circ_R$ & $\Delta G^\circ$ & $\Delta G_{\mathrm{m}}$ & $\Delta g^o_\text{rxn}$ & $\inherit{\Delta\bar{g}^\circ_\text{rxn}}$ & $\Delta g_\text{rxn}^0$ & $\Delta_\text{rxn}\Gt^\std$ & $\Delta G^\circ$ & $\Delta G^o_{rx}$ & $\Delta G_R^\circ$ \\ % standard fugacity & \verb"\fstd" & $\fstd$ & $\inherit{f^\circ}$ & $\inherit{f^\circ}$ & $f^\circ$ & $f^\circ$ & $f^o$ & $\inherit{f^\circ}$ & $f^0$ & $\bar f^\circ$ & $f^\circ$ & $\inherit{\fstd}$ & $f^\circ$ \\ % standard Gibbs free energy & \verb"\Gm^\std" & $\Gm^\std$ & $\bar{g}^\circ$ & $\bar{g}^\circ$ & $G^\circ$ & $G^\circ_{\mathrm{m}}$ & $g^o$ & $\overline{g}^\circ$ & $g^0$ & $\Gt^\circ$ & $G^\circ$ & $G^o$ & $G^\circ$ \\ % standard Gibbs free energy of $i$ & \verb"\Gm^\std_i" & $\Gm^\std_i$ & $\bar{g}^\circ_i$ & $\bar{g}_i^\circ$ & $G^\circ_i$ & $G^\circ_{\mathrm{m}i}$ & $g_i^o$ & $\overline{g}^\circ_i$ & $g^0_i$ & $\Gt^\circ_i$ & $G^\circ_i$ & $G^o_i$ & $G^\circ_i$ \\ % standard pressure & \verb"\Pstd" & $\Pstd$ & $P_0$ & $P_0$ & $P^\circ$ & $P^\circ$ & $\inherit{P^o}$ & $p_\text{ref}$ & $P^0$ & \text{1~bar} & $P^\circ$ & $P^\ast$ & $P^\circ$ \\ % vapor pressure & \verb"\Pvap" & $\Pvap$ & $\inherit{\Pvap}$ & $P^v$ & $P^{std}$ & $p$ & $\inherit{P^\text{sat}}$ & $p_\text{ref}$ & $P^s$ & $P^\text{vap}$ & $P^\text{sat}$ & $P^\text{sat}$ & $P^\text{sat}$ \\ % volume (total) & \verb"\Vt" & $\Vt$ & $V$ & $V$\footref{fn:XeTeX} & $\Vt$ & $V$ & $V$ & $V$ & $V$ & $V$ & $V^t$ & $\Vt$ & $\Vt$ \\ % volume (molar) & \verb"\Vm" & $\Vm$ & $\bar{v}$ & $\overline{v}$\footref{fn:XeTeX} & $V$ & $V_{\mathrm{m}}$ & $v$ & $\overline{v}$ & $v$ & $\Vt$ & $V$ & $V$ & $V$ \\ % volume (specific) & \verb"\Vs" & $\Vs$ & $v$ & $v$\footref{fn:XeTeX} & $V$ & $\inherit{\Vs}$ & $\hat v$ & $v$ & $\inherit{\hat v}$ & $\hat V$ & $V$ & $\inherit{v}$ & $\inherit{\Vs}$ \\ % volume (molar, residual) & \verb"\VR" & $\VR$ & $\inherit{\bar{v}^\residual}$ & $\inherit{\overline{v}^\residual}$\footref{fn:XeTeX} & $\inherit{V^R}$ & $\inherit{V^{\mathrm{R}}_{\mathrm{m}}}$ & $v^\text{dep}$ & $\inherit{\overline{v}^R}$ & $v^R$ & $\Vt^r$ & $V^R$ & $\inherit{\VR}$ & $V^R$ \\ % volume (molar, excess) & \verb"\VE" & $\VE$ & $\inherit{\bar{v}^\excess}$ & $\inherit{\overline{v}^\excess}$\footref{fn:XeTeX} & $V^E$ & $V^{\mathrm{E}}_{\mathrm{m}}$ & $v^E$ & $\inherit{\overline{v}^E}$ & $v^E$ & $\Vt^\text{ex}$ & $V^E$ & $V^{EX}$ & $V^{EX}$ \\ % volume (partial molar, excess) & \verb"\VEpm_i" & $\VEpm_i$ & $\inherit{\overline{v}_i^\excess}$ & $\inherit{\widetilde{v}^\excess}$\footref{fn:XeTeX} & $\smash{\overline{V}}^E_i$ & $V^{\mathrm{E}}_{\mathrm{m}i}$ & $\smash{\overline{V}}^E_i$ & $\inherit{\overline{V}^E_i}$ & $\overline{v}^E_i$ & \begin{thermoshortpm}$\Vpm^{\text{ex}}_i$\end{thermoshortpm} & \begin{thermoshortpm}$\VEpm_i$\end{thermoshortpm} & \begin{thermoshortpm}$\Vpm^{EX}_i$\end{thermoshortpm} & \begin{thermoshortpm}$\Vpm^{EX}_i$\end{thermoshortpm} \\ % work (total) & \verb"\Wt" & $\Wt$ & $W$ & $W$ & $\underline{W}$ & $W$ & $W$ & $W$ & $W$ & $W$ & $\inherit{W^t}$ & $\inherit{\Wt}$ & $\inherit{\Wt}$ \\ % work (molar) & \verb"\Wm" & $\Wm$ & $\bar{w}$ & $\overline{w}$ & $W$ & $\inherit{W_{\mathrm{m}}}$ & $w$ & $\inherit{\overline{w}}$ & $\inherit{w}$ & $\inherit{\Wt}$ & $W$ & $W$ & $W$ \\ % work (specific) & \verb"\Ws" & $\Ws$ & $w$ & $w$ & $W$ & $\inherit{\Ws}$ & $\hat w$ & $\inherit{w}$ & $\inherit{\hat w}$ & $\inherit{\hat W}$ & $\inherit{W}$ & $w$ & $\inherit{\Ws}$ \\ % \end{mpsupertabular} % \end{landscape} % %^^X \end{documentation} % % \setcounter{IndexColumns}{2} % \StopEventually{\PrintChanges\PrintIndex} % % ^^A-------------------------------------------------------------------------- % \iffalse %<*package> %<@@=thermodynamics> % \fi % %^^X\begin{implementation} % \section{Implementation} % We set up some non-standard token comparison variants; these are designed % to catch both \cs{ncomponents}=\cs{ncomponents} and \cs{ncomponents}=$C$ % (using the default options); we have to define \cs{ncomponents} to be % expandable to make these work at all. % \begin{macrocode} \ExplSyntaxOn \cs_generate_variant:Nn \tl_if_eq:nnTF { xxTF } % \end{macrocode} % % This package requires the \pkg{amstext} package, as \tn{text} is used to % handle \cs{sat}, \cs{IS}, \cs{IG}, \cs{IGM}, \cs{Henrymol}, \cs{fusion}, % \cs{reaction}, \cs{vaporization}, and \cs{sublimation} by default, as well % as several other macros defined by package options. % \begin{macrocode} \RequirePackage{amstext} % \end{macrocode} % % \subsection{Symbols Controlled by Package Options} % We set some symbols prior to declaring the package options. The default % symbols follow package option |EUAGHan|, even though the macros follow % the option |EUFGHAN|. % % \begin{macro}{\dbar} % The way \cs{dbar} is defined depends on the typeface you are using. % We try to determine, at \verb"\begin{document}", which typeface you chose % based on the packages that are loaded and some of their internal definitions. % The \textsf{thermodynamics} package currently supports % Computer Modern (the default or through \pkg{lmodern}), % Palatino (through \pkg{pxfonts} or \pkg{newpxmath}), % Times (through \pkg{txfonts}, \pkg{mathptmx}, or \pkg{newtxmath}), % Utopia (through \pkg{mathdesign}), % Bitstream Charter (through \pkg{mathdesign}), and % Garamond (through \pkg{mathdesign}). % Definitions of \cs{dbar} (with \cs{newcommand*}, \cs{providecommand*}, % \cs{NewDocumentCommand}, or \cs{ProvideDocumentCommand}) % in the preamble will override the ones here. % \begin{macrocode} \AtBeginDocument{ \@ifpackageloaded{pxfonts}{% \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-10mu d} }{} \@ifpackageloaded{newpxmath}{% \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-10mu d} }{} \@ifpackageloaded{txfonts}{% \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-11mu d} }{} \@ifpackageloaded{mathptmx}{% \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-10mu d} }{} \@ifpackageloaded{newtxmath}{% \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-11mu d} }{} \@ifpackageloaded{mathdesign}{% \tl_const:Nn \c_@@_charter_tl {mdbch} \tl_const:Nn \c_@@_utopia_tl {mdput} \tl_const:Nn \c_@@_garamond_tl {mdugm} \tl_if_eq:NNT \MD@default@family \c_@@_utopia_tl { \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-20mu d} } \tl_if_eq:NNT \MD@default@family \c_@@_charter_tl { \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-15mu d} } \tl_if_eq:NNT \MD@default@family \c_@@_garamond_tl { \ProvideDocumentCommand{\dbar}{} {\mkern5mu\mathchar'26\mkern-17mu d} } }{} % Defaults to Computer Modern \ProvideDocumentCommand{\dbar}{} {\mkern3mu\mathchar'26\mkern-12mu d} } % \end{macrocode} % \end{macro} % % Symbols are defined for the total energy, internal energy, Helmholtz free % energy, Gibbs free energy, grand potential (Landau free energy), enthalpy, % entropy, surface area, volume, number of moles, heat, and work; these are % $E$, $U$, $A$, $G$, $\Omega$, $H$, $S$, $a$, $V$, $n$, $Q$, and $W$, % respectively. These commands should not be used on their own, but rather % accessed through the macros \cs{Ut}, \cs{Um}, and \cs{Us} (using the internal % energy as an example). % % The default symbols are not intended to be easy to change---the intended % mechanism is through package options. If you want to use a non-standard % symbol that is not available through one of the package options, you can % redefine the internal token lists inside % \cs{ExplSyntaxOn}\,\dots\!\cs{ExplSyntaxOff}. For example, % \begin{verbatim} % \ExplSyntaxOn % \tl_gset:Nn \g__thermodynamics_Helmholtz_symbol {H} % \tl_gset:Nn \g__thermodynamics_enthalpy_symbol {h} % \ExplSyntaxOff %\end{verbatim} % would define the ill-advised notation that I have nonetheless heard of % that uses $H$ for Helmholtz free energy and $h$ for enthalpy. % Note that the macros for temperature and pressure are only used inside % the definitions of the compressibilities, expansivities, and heat % capacities; there is no user-level macro for the temperature or the pressure, % so it is up to the user to use consistent symbols for those properties. % \begin{macrocode} \tl_new:N \g_@@_total_energy_symbol \tl_new:N \g_@@_internal_energy_symbol \tl_new:N \g_@@_Helmholtz_symbol \tl_new:N \g_@@_Gibbs_symbol \tl_new:N \g_@@_Landau_symbol \tl_new:N \g_@@_enthalpy_symbol \tl_new:N \g_@@_entropy_symbol \tl_new:N \g_@@_area_symbol \tl_new:N \g_@@_volume_symbol \tl_new:N \g_@@_mole_symbol \tl_new:N \g_@@_heat_symbol \tl_new:N \g_@@_work_symbol \tl_new:N \g_@@_temperature_symbol \tl_new:N \g_@@_pressure_symbol \tl_gset:Nn \g_@@_total_energy_symbol E \tl_gset:Nn \g_@@_internal_energy_symbol U \tl_gset:Nn \g_@@_Helmholtz_symbol A \tl_gset:Nn \g_@@_Gibbs_symbol G \cs_if_exist:NTF \Omegait { \tl_gset:Nn \g_@@_Landau_symbol \Omegait } { \tl_gset:Nn \g_@@_Landau_symbol \Omega } \tl_gset:Nn \g_@@_enthalpy_symbol H \tl_gset:Nn \g_@@_entropy_symbol S \tl_gset:Nn \g_@@_area_symbol a \tl_gset:Nn \g_@@_volume_symbol V \tl_gset:Nn \g_@@_mole_symbol n \tl_gset:Nn \g_@@_heat_symbol Q \tl_gset:Nn \g_@@_work_symbol W \tl_gset:Nn \g_@@_temperature_symbol T \tl_gset:Nn \g_@@_pressure_symbol P % \end{macrocode} % % We then define two functions and several lengths that we shall use when % drawing rules above or below a symbol. The default is to use underlined % symbols for extensive quantities, plain symbols for molar quantities, and % carets for specific quantities, but this can be changed using package % options. %^^A TODO these might work better as kern 0.1*width, symbol, kern 0.2*width % \begin{macrocode} \cs_new:Nn \@@_underline:n { \mkern1mu\underline{\mkern-1mu #1\mkern-4mu}\mkern4mu } \cs_new:Nn \@@_overline:n { \mkern2mu\overline{\mkern-2mu #1\mkern-1mu}\mkern1mu } % \end{macrocode} % % \begin{macro}{\PartialOpen,\PartialClose,\PartialEmptyClose} % We define three commands to use to denote the beginning and end of partial % derivatives. These symbols can be customized by package options. Default % is |parentheses|, meaning that \verb"\[ \Partial{f}{x}{y} \]" renders as % \[ \left(\frac{\partial f}{\partial x}\right)_y \] % with the defaults. The macro \cs{PartialEmptyClose} is used when the last % argument to \cs{Partial} is empty, which is important for the |bar| % option to the document class or inside the \env{thermobar} environment. % \begin{macrocode} \tl_new:N \l_@@_PartialOpen_tl \tl_new:N \l_@@_PartialEmptyClose_tl \tl_new:N \l_@@_PartialClose_tl \tl_set:Nn \l_@@_PartialOpen_tl {(} \tl_set:Nn \l_@@_PartialClose_tl {)} \tl_set:Nn \l_@@_PartialEmptyClose_tl {)} % \end{macrocode} % \end{macro} % % \subsection{Package Options} % We declare a bunch of options for which sets of symbols to use. % These are summarized in Table~\ref{table:symbol-sets}. % \changes{v1.01}{2023/09/15}{Changed options with two $E$ or two $A$ % variables to use calligraphic letters for the less-common of the two.} % \begin{macrocode} \DeclareOption{EUAGHan}{}% the default \DeclareOption{EUAGHaN}{\tl_gset:Nn \g_@@_mole_symbol N}% \DeclareOption{EUHAGan}{\ExecuteOptions{EUAGHan}} \DeclareOption{EUHAGaN}{\ExecuteOptions{EUAGHaN}} \DeclareOption{EUFGHAn}{% \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_area_symbol A } \DeclareOption{EUFGHAN}{% \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_area_symbol A \tl_gset:Nn \g_@@_mole_symbol N } \DeclareOption{EEFGHAn}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_area_symbol A } \DeclareOption{EEFGHAN}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_area_symbol A \tl_gset:Nn \g_@@_mole_symbol N } \DeclareOption{EEFGHan}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E \tl_gset:Nn \g_@@_Helmholtz_symbol F } \DeclareOption{EEFGHaN}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_mole_symbol N } \DeclareOption{EEAGHan}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E } \DeclareOption{EEAGHaN}{% \tl_gset:Nn \g_@@_total_energy_symbol {\mathcal{E}} \tl_gset:Nn \g_@@_internal_energy_symbol E \tl_gset:Nn \g_@@_mole_symbol N } \DeclareOption{EUAGHAn}{% \tl_gset:Nn \g_@@_area_symbol {\mathcal{A}} } \DeclareOption{EUAGHAN}{% \tl_gset:Nn \g_@@_area_symbol {\mathcal{A}} \tl_gset:Nn \g_@@_mole_symbol N } \DeclareOption{EUFGHan}{% \tl_gset:Nn \g_@@_Helmholtz_symbol F } \DeclareOption{EUFGHaN}{% \tl_gset:Nn \g_@@_Helmholtz_symbol F \tl_gset:Nn \g_@@_mole_symbol N } % \end{macrocode} % The |delta| option redefines \cs{dbar} to produce the symbol $\delta$. % The default is to use a $d$ with a slash through it ($\dbar$) for inexact % differentials unless the user overrides it with this option. The macro could % also be redefined manually, of course. % \begin{macrocode} \DeclareOption{delta}{ \cs_set_eq:NN \dbar \delta } % \end{macrocode} % % Next, we define options for the set of notation. The default is % |intensive-plain|, which produces things like $V$ for molar volume, % $\Vt$ for total volume, and $\hat V$ for specific volume. % The symbols themselves are produced via internal (non-user-facing) macros. % \begin{macrocode} \cs_new:Nn \@@_extensive:n {#1} \cs_new:Nn \@@_intensive:n {#1} \cs_new:Nn \@@_specific:n {\hat{#1}} \cs_new:Npn \@@_set_intensive_plain { \cs_set:Nn \@@_extensive:n {\@@_underline:n{##1}} \cs_set:Nn \@@_intensive:n {##1} } \cs_new:Npn \@@_set_extensive_plain { \cs_set:Nn \@@_extensive:n {##1} \cs_set:Nn \@@_intensive:n {\@@_underline:n{##1}} } \cs_new:Npn \@@_set_lowercase_pms { \RenewDocumentCommand{\partialmolar}{m} { \tl_set:Nn \l_@@_pm_symbol_tl {\text_lowercase:n {##1}} \@@_generic_pm: } } \cs_new:Npn \@@_set_intensive_lowercase { \cs_set:Nn \@@_extensive:n {\text_uppercase:n {##1}} \cs_set:Nn \@@_intensive:n {\text_lowercase:n {##1}} \cs_set:Nn \@@_specific:n {\hat{\text_lowercase:n {##1}}} } \cs_new:Npn \@@_set_extensive_superscripts { \cs_set:Nn \@@_extensive_one:n { \c_math_superscript_token {##1\l_@@_super_separator_tl t} } \cs_set:Nn \@@_extensive:n { \peek_catcode_remove:NTF \c_math_superscript_token { ##1 \@@_extensive_one:n } { ##1 \c_math_superscript_token t } } \cs_set:Nn \@@_intensive:n {##1} } \DeclareOption{extensive-plain}{\@@_set_extensive_plain} \DeclareOption{intensive-plain}{\@@_set_intensive_plain} % the default \DeclareOption{intensive-lowercase}{% PLEASE don't use this! \@@_set_intensive_lowercase \AtEndOfPackage{ \@@_set_lowercase_pms } } \DeclareOption{extensive-superscript}{% \@@_set_extensive_superscripts %^^A \AtEndOfPackage{% %^^A \RenewDocumentCommand{\URt}{}{\g_@@_internal_energy_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\HRt}{}{\g_@@_enthalpy_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\FRt}{}{\g_@@_Helmoholtz_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\GRt}{}{\g_@@_Gibbs_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\VRt}{}{\g_@@_volume_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\SRt}{}{\g_@@_entropy_symbol %^^A \c_math_superscript_token{\residual,t}} %^^A \RenewDocumentCommand{\UEt}{}{\g_@@_internal_energy_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A \RenewDocumentCommand{\HEt}{}{\g_@@_enthalpy_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A \RenewDocumentCommand{\FEt}{}{\g_@@_Helmoholtz_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A \RenewDocumentCommand{\GEt}{}{\g_@@_Gibbs_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A \RenewDocumentCommand{\VEt}{}{\g_@@_volume_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A \RenewDocumentCommand{\SEt}{}{\g_@@_entropy_symbol %^^A \c_math_superscript_token{\excess,t}} %^^A } } % \end{macrocode} % \begin{environment}{thermolongpm,thermoshortpm} % The |longpm| option (the default) makes partial molar quantities that % look like \(\UEpm_i\). The |shortpm| option (which is used by several % textbooks) makes partial molar quantities look like % \(\smash{\mkern2mu\overline{\mkern-2mu U}}_i^E\). % The environments \env{thermolongpm} and \env{thermoshortpm} do the same % thing locally. % \changes{v2.02}{2024/06/14}{Added ``longpm'' and ``shortpm'' options to % control how partial molar properties are rendered along with the % environments \env{thermolongpm} and \env{thermoshortpm} to change them % locally.} % \begin{macrocode} \bool_new:N \l_@@_longpm_bool \DeclareOption{longpm}{\bool_set_true:N \l_@@_longpm_bool} \cs_set_eq:NN \@@_overline_copy:n \@@_overline:n \DeclareOption{shortpm}{ \bool_set_false:N \l_@@_longpm_bool \AtEndOfPackage{ \RenewDocumentCommand{\cPpm}{} { \cs_set:Nn \@@_overline:n {##1} \partialmolar{\cPpmshort} } \RenewDocumentCommand{\cVpm}{} { \cs_set:Nn \@@_overline:n {##1} \partialmolar{\cVpmshort} } } } \NewDocumentEnvironment{thermolongpm}{}{% \bool_set_true:N \l_@@_longpm_bool }{} \NewDocumentEnvironment{thermoshortpm}{}{% \bool_set_false:N \l_@@_longpm_bool \RenewSubscriptedSymbol{\cPpm}{\@@_overline:n \heatcapacitysymbol} {\g_@@_pressure_symbol} \RenewSubscriptedSymbol{\cVpm}{\@@_overline:n \heatcapacitysymbol} {\g_@@_volume_symbol} }{} % \end{macrocode} % \end{environment} % % The next two options choose whether variables held constant are subscripted % (the default) or placed next to the function. The difference is % \[ \Partial{\Um}{\Sm}{\Vm} \quad\text{versus}\quad % \begin{thermoNOsubscripts} % \Partial{\Um}{\Sm}{\Vm} % \end{thermoNOsubscripts} \] % for \verb"subscripts" and \verb"nosubscripts", respectively. % \begin{macrocode} \bool_new:N \l_@@_subscripted_bool \bool_set_true:N \l_@@_subscripted_bool \DeclareOption{subscripts}{\bool_set_true:N \l_@@_subscripted_bool} \DeclareOption{nosubscripts}{\bool_set_false:N \l_@@_subscripted_bool} % \end{macrocode} % These options change how \cs{Partial} and friends render derivatives. % The default is parentheses, but other options include brackets, braces, % a vertical bar on the right side, or plain (undecorated) derivatives. % \begin{macrocode} \DeclareOption{parentheses}{} \DeclareOption{brackets}{% \tl_set:Nn \l_@@_PartialOpen_tl {[} \tl_set:Nn \l_@@_PartialClose_tl {]} \tl_set:Nn \l_@@_PartialEmptyClose_tl {]} } \DeclareOption{braces}{% \tl_set:Nn \l_@@_PartialOpen_t1 {\{} \tl_set:Nn \l_@@_PartialClose_t1 {\}} \tl_set:Nn \l_@@_PartialEmptyClose_tl {\}} } \DeclareOption{bar}{% \tl_set:Nn \l_@@_PartialOpen_tl {.} \tl_set:Nn \l_@@_PartialClose_tl {\rvert} \tl_set:Nn \l_@@_PartialEmptyClose_tl {.} } \DeclareOption{plain-derivatives}{% This implies dU(S,V,N)/dS notation \tl_set:Nn \l_@@_PartialOpen_tl {.} \tl_set:Nn \l_@@_PartialClose_tl {.} \tl_set:Nn \l_@@_PartialEmptyClose_tl {.} \ExecuteOptions{nosubscripts} } % \end{macrocode} % \subsection{The Number of Moles Macros} % \begin{macro}{\ncomponents} % We define the number of components, default $C$, for use in the ``all moles'' % and related macros. The command is expandable so we can perform comparisons % to user-entered values. % \begin{macrocode} \NewExpandableDocumentCommand \ncomponents {} {C} % \end{macrocode} % \end{macro} % % \begin{macro}{\allNs,\allXs,\allYs,\allmus,\allMs,\allWs} % Several macros define a shorthand for ``moles of all species'' (\cs{allNs}) % and ``moles of all species except'' (\cs{allNsbut}), as well as similar % quantities for masses (\cs{allMs}, \cs{allMsbut}) and chemical potentials % (\cs{allmus}, \cs{allmusbut}), which occur frequently in mixture % thermodynamics. The default is for \cs{allNs} to become $\vec{n}$ and % \verb"allNsbut{i}" to become $n_{j\neq i}$. The optional argument changes % which index (default: $j$) to use in the left side of the inequality.\relax % \footnote{The index \!$j$ is automatically replaced with $k$ if the user % issues \texttt{\textbackslash allNsbut\{j\}}.} % Essentially identical commands are defined for chemical potentials and % masses: \cs{allmus} and \cs{allmusbut} and \cs{allMs} and \cs{allMsbut}, % respectively. % \begin{macrocode} \NewDocumentCommand{\allNs}{O{i}}{\allcomponents[#1]{\Nt}} \NewDocumentCommand{\allXs}{O{i}}{\allcomponents[#1]{x}} \NewDocumentCommand{\allYs}{O{i}}{\allcomponents[#1]{y}} \NewDocumentCommand{\allmus}{O{i}}{\allcomponents[#1]{\mu}} \NewDocumentCommand{\allMs}{O{i}}{\allcomponents[#1]{m}} \NewDocumentCommand{\allWs}{O{i}}{\allcomponents[#1]{w}} % \end{macrocode} % \end{macro} % \begin{macro}{\allNsbut,\allXsbut,\allYsbut,\allMsbut,\allWsbut} % Similar commands are defined for mole fractions (\cs{allXs}, \cs{allYs}, % etc.), but these assume the last mole fraction is \emph{not} one of the % variables---that is, \cs{allXsbut} and \cs{allYsbut} assume the argument % \emph{and} \cs{ncomponents} are held constant. For example, % \begin{verbatim} % \[ \Partial{\Gm}{T}{P,\allXs} = -\Sm \qquad % \Partial{\Gm}{x_i}{T,P,\allXsbut{i}} \neq \Gpm_i \] %\end{verbatim} % yields % \[ \Partial{G}{T}{P,\allXs} = -S \qquad % \Partial{G}{x_i}{T,P,x_{j\neq i,C}} \neq \Gpm{i}. \] % \begin{macrocode} \NewDocumentCommand{\allNsbut}{O{j} m} {\allbut[#1]{#2}{\Nt}} \NewDocumentCommand{\allXsbut}{O{j} m} {\allbutlastand[#1]{#2}{x}} \NewDocumentCommand{\allYsbut}{O{j} m} {\allbutlastand[#1]{#2}{y}} \NewDocumentCommand{\allmusbut}{O{j} m} {\allbut[#1]{#2}{\mu}} \NewDocumentCommand{\allMsbut}{O{j} m} {\allbut[#1]{#2}{m}} \NewDocumentCommand{\allWsbut}{O{j} m} {\allbutlastand[#1]{#2}{w}} % \end{macrocode} % \end{macro} % \begin{macro}{\allbutlastand,\allbut,\allcomponents} % \changes{v1.01}{10/04/2023}{Updated \cs{allcomponents} to include an % optional argument that changes $N_i$ to $N_j$, say, when using % TesterModell or other options that denote moles of all components that % way. Similar updates to \cs{allNs} and friends.} % The \cs{allcomponents}, \cs{allbut}, and \cs{allbutlastand} macros can be % used to define new entities; say, if you want to use $z_i$ as a mole % fraction, then use % \begin{verbatim} % \NewDocumentCommand{\allZsbut}{O{j} m}{\allbutlastand[#1]{#2}{z}} %\end{verbatim} % Similarly, something meaning the concentrations of every species could be % defined via % \begin{verbatim} % \NewDocumentCommand{\allCs}{O{}}{\allcomponents{C}} %\end{verbatim} % \begin{macrocode} \NewDocumentCommand{\allcomponents}{O{} m}{\vec{#2}} \NewDocumentCommand{\allbut}{O{j} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token{k \neq #2} } { {#3}\c_math_subscript_token{#1 \neq #2} } } \NewDocumentCommand{\allbutlastand}{O{j} m m} { \tl_if_eq:xxTF {#2} {\ncomponents} { {#3}\c_math_subscript_token{#1 \neq #2} } { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token{k \neq #2,\ncomponents} } { {#3}\c_math_subscript_token{#1 \neq #2,\ncomponents} } } } % \end{macrocode} % \end{macro} % % \subsection{Package Options} % We define two package options that change how to render \cs{allNs} and % friends.\relax % \changes{v1.01}{2022/05/04}{Fixed bug in \cs{allbutlastand} when using the % |moles-range| option ($C$ should have been $C-1$ in the last option).} % \begin{macrocode} \DeclareOption{moles-index}{} \DeclareOption{moles-range}{ \@@_set_moles_range } \cs_new:Npn \@@_set_moles_range {% \RenewDocumentCommand{\allcomponents}{O{} m} { {##2}\c_math_subscript_token 1,\dots, {##2}\c_math_subscript_token{\ncomponents} } \RenewDocumentCommand{\allbut}{O{j} m m} { \tl_if_eq:nnTF {##2} {1} { {##3}\c_math_subscript_token 2,\dots, {##3}\c_math_subscript_token{\ncomponents} } { \tl_if_eq:xxTF {##2} {\ncomponents} { {##3}\c_math_subscript_token 1,\dots, {##3}\c_math_subscript_token{\ncomponents-1} } { {##3}\c_math_subscript_token 1,\dots, [{##3}\c_math_subscript_token{##2}], \dots,{##3}\c_math_subscript_token{\ncomponents} } } } \RenewDocumentCommand{\allbutlastand}{O{j} m m} { \tl_if_eq:nnTF {##2} {1} { {##3}\c_math_subscript_token 2,\dots, {##3}\c_math_subscript_token{\ncomponents-1} } { \tl_if_eq:xxTF {##2} {\ncomponents} { {##3}\c_math_subscript_token 1,\dots, {##3}\c_math_subscript_token{\ncomponents-1} } { \tl_if_eq:xxTF {##2} {\ncomponents-1} { {##3}\c_math_subscript_token 1,\dots, {##3}\c_math_subscript_token{\ncomponents-2} } { {##3}\c_math_subscript_token 1,\dots, [{##3}\c_math_subscript_token{##2}],\dots, {##3}\c_math_subscript_token{\ncomponents-1} } } } } } % \end{macrocode} % The remaining options define textbook-specific notation. % \changes{v2.02}{2024/06/14}{Added \texttt{KlotzRosenberg} option.} % \begin{macrocode} \DeclareOption{Bejan}{ \ExecuteOptions{EUFGHAN,intensive-lowercase,delta,shortpm} \AtEndOfPackage{ \cs_set:Nn \@@_specific:n {\text_lowercase:n {#1}} \cs_set:Nn \@@_intensive:n {\bar{\text_lowercase:n {#1}}} \cs_set:Nn \@@_extensive:n {\text_uppercase:n {#1}} \tl_gset:Nn \g_@@_volume_symbol v \RenewExpandableDocumentCommand{\ncomponents}{}{n} \RenewSubscriptedSymbol{\Lt}{\g_@@_Helmholtz_symbol}{\mu} \RenewSubscriptedSymbol{\Lm} {\bar{\text_lowercase:n \g_@@_Helmholtz_symbol}}{\mu} \RenewSubscriptedSymbol{\Ls} {\text_lowercase:n \g_@@_Helmholtz_symbol}{\mu} \cs_new:Npn \Delta_vap_sym {} {} \NewSubscriptedSymbol{\Delta_vap}{\Delta_vap_sym}{{fg}} \RenewDocumentCommand{\Deltavap}{m}{ \cs_set:Npn \Delta_vap_sym {} {#1} \Delta_vap } \cs_new:Npn \Delta_fus_sym {} {} \NewSubscriptedSymbol{\Delta_fus}{\Delta_fus_sym}{{sf}} \RenewDocumentCommand{\Deltafus}{m}{ \cs_set:Npn \Delta_fus_sym {} {#1} \Delta_fus } \cs_new:Npn \Delta_sub_sym {} {} \NewSubscriptedSymbol{\Delta_sub}{\Delta_sub_sym}{{sg}} \RenewDocumentCommand{\Deltasub}{m}{ \cs_set:Npn \Delta_sub_sym {} {#1} \Delta_sub } \RenewExpandableDocumentCommand{\heatcapacitysymbol}{}{c} \RenewSubscriptedSymbol{\cV}{\@@_intensive:n {\heatcapacitysymbol}} {\text_lowercase:n \g_@@_volume_symbol} \RenewSubscriptedSymbol{\cVt}{\@@_extensive:n {\heatcapacitysymbol}} {\text_uppercase:n \g_@@_volume_symbol} \RenewSubscriptedSymbol{\cVpm}{\heatcapacitysymbol} {\text_lowercase:n \g_@@_volume_symbol} \RenewSubscriptedSymbol{\cPpm}{\heatcapacitysymbol} {\text_lowercase:n \g_@@_pressure_symbol} \RenewExpandableDocumentCommand{\xrxn}{}{\zeta} \RenewDocumentCommand{\fmix}{}{f} \RenewDocumentCommand{\Qm}{}{Q} \RenewDocumentCommand{\Qs}{}{Q} \RenewExpandableDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewExpandableDocumentCommand{\expansivitysymbol}{}{\beta} \RenewExpandableDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewSubscriptedSymbol{\muJT}{\JTsymbol}{J} \RenewDocumentCommand{\Deltaf}{m} { \tl_set:Nn \l_@@_Deltaf_sym_tl {#1} \@@_Deltaf } \RenewDocumentCommand{\Pstd}{}{P\c_math_subscript_token 0} \RenewDocumentCommand{\Wm}{}{W} \RenewDocumentCommand{\Ws}{}{W} \cs_new:Nn \@@_fpure_one:n { f\c_math_subscript_token{#1} \peek_catcode_remove:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\fpure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_fpure_one:n } { f } } \cs_new:Nn \@@_phipure_one:n { \phi\c_math_subscript_token{#1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\phipure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_phipure_one:n } {\phi} } \RenewDocumentCommand{\phimix}{}{\phi} } } \DeclareOption{CBK}{ \ExecuteOptions{EUAGHAN,intensive-lowercase,delta,shortpm} \AtEndOfPackage{ \cs_set:Nn \@@_overline:n {\widetilde #1} \cs_set:Nn \@@_overline_copy:n {\widetilde #1} \cs_set:Nn \@@_specific:n {\text_lowercase:n {#1}} \cs_set:Nn \@@_intensive:n {\bar{\text_lowercase:n{#1}}} \tl_gset:Nn \g_@@_area_symbol A \RenewExpandableDocumentCommand{\reaction}{}{R} \cs_new:Npn \Delta_vap_sym {} {} \NewSubscriptedSymbol{\Delta_vap}{\Delta_vap_sym}{{fg}} \RenewDocumentCommand{\Deltavap}{m}{ \cs_set:Npn \Delta_vap_sym {} {#1} \Delta_vap } \cs_new:Npn \Delta_fus_sym {} {} \NewSubscriptedSymbol{\Delta_fus}{\Delta_fus_sym}{{sf}} \RenewDocumentCommand{\Deltafus}{m}{ \cs_set:Npn \Delta_fus_sym {} {#1} \Delta_fus } \cs_new:Npn \Delta_sub_sym {} {} \NewSubscriptedSymbol{\Delta_sub}{\Delta_sub_sym}{{sg}} \RenewDocumentCommand{\Deltasub}{m}{ \cs_set:Npn \Delta_sub_sym {} {#1} \Delta_sub } \tl_gset:Nn \g_@@_pressure_symbol p \RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\alpha} \RenewExpandableDocumentCommand{\expansivitysymbol}{}{\beta} \RenewExpandableDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewExpandableDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewSuperscriptedSymbol{\Psat}{P}{v} \RenewDocumentCommand{\Deltaf}{m} { \tl_set:Nn \l_@@_Deltaf_sym_tl {#1} \@@_Deltaf } \RenewDocumentCommand{\Pstd}{}{P\c_math_subscript_token 0} \RenewDocumentCommand{\Lm}{}{\@@_intensive:n\omega} \RenewDocumentCommand{\Ls}{}{\@@_specific:n\omega} } } \DeclareOption{ElliottLira}{ \ExecuteOptions{shortpm} \AtEndOfPackage{ \cs_gset_eq:NN \@@_specific:n \@@_intensive:n %^^A\RenewDocumentCommand{\partialmolar}{m}{\@@_overline:n #1} \RenewDocumentCommand{\allcomponents}{O{} m}{#2} \RenewDocumentCommand{\Deltarxn}{m}{\Delta #1} \RenewDocumentCommand{\fusion}{}{{fus}} \RenewDocumentCommand{\sublimation}{}{{sub}} \RenewDocumentCommand{\vaporization}{}{{vap}} \RenewDocumentCommand{\sat}{}{{sat}} %^^A\RenewSubscriptedSymbol{\Henrymol}{/K}{H} %^^A FIXME \RenewDocumentCommand{\IG}{}{{ig}} \RenewDocumentCommand{\IGM}{}{{ig}} \RenewDocumentCommand{\IS}{}{{is}} \RenewDocumentCommand{\Cstd}{}{m\c_math_superscript_token \std} \RenewDocumentCommand{\muJT}{}{\mu\c_math_subscript_token{JT}} } } \DeclareOption{KlotzRosenberg}{ \ExecuteOptions{delta} \AtEndOfPackage{ \tl_set:Nn \l_@@_sub_separator_tl {} \cs_set:Nn \@@_extensive:n {#1} \cs_new:Nn \@@_intensive_one:n { \c_math_superscript_token {#1} \peek_catcode_remove:NTF \c_math_subscript_token { \@@_intensive_three:n } { \c_math_subscript_token{\mathrm{m}} } } \cs_new:Nn \@@_intensive_three:n { \c_math_subscript_token{\mathrm{m}\l_@@_sub_separator_tl #1} } \cs_new:Nn \@@_intensive_two:n { \c_math_subscript_token{\mathrm{m}\l_@@_sub_separator_tl #1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \cs_set:Nn \@@_intensive:n { #1 \peek_catcode_remove:NTF \c_math_superscript_token { \@@_intensive_one:n } { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_intensive_two:n } { \c_math_subscript_token{\mathrm{m}} } } } \cs_new:Nn \@@_fpure_one:n { f\c_math_subscript_token{#1} \peek_catcode_remove:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\fpure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_fpure_one:n } { f } } \cs_new:Nn \@@_phipure_one:n { \gamma\c_math_subscript_token{#1} \peek_catcode_remove:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\phipure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_phipure_one:n } { \gamma } } \RenewDocumentCommand{\fmix}{}{f} \RenewDocumentCommand{\phimix}{}{\gamma} \RenewDocumentCommand{\phisat}{}{\gamma^\sat} \cs_if_exist:NTF \gammaup { \RenewDocumentCommand{\gamma}{}{\gammaup} } { \cs_if_exist:NT \upgamma { \RenewDocumentCommand{\gamma}{}{\upgamma} } } \RenewDocumentCommand{\gammarat}{}{\gamma} \RenewDocumentCommand{\gammamol}{}{\gamma} \cs_if_exist:NTF \muup {\RenewDocumentCommand{\mu}{}{\muup}} {\cs_if_exist:NT \upmu {\RenewDocumentCommand{\mu}{}{\upmu}} } \cs_if_exist:NTF \alphaup {\RenewExpandableDocumentCommand{\expansivitysymbol}{}{\alphaup}} {\cs_if_exist:NTF \upalpha {\RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\alphaup}} {\RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\alpha}} } \cs_if_exist:NTF \betaup {\RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\betaup}} {\cs_if_exist:NTF \upbeta {\RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\betaup}} {\RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\beta}} } \cs_if_exist:NTF \xiup {\RenewDocumentCommand{\xrxn}{}{\xiup}} {\cs_if_exist:NT \upxi {\RenewDocumentCommand{\xrxn}{}{\upxi}} } \RenewDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewSubscriptedSymbol{\muJT}{\JTsymbol}{\text{J.T.}} \RenewDocumentCommand{\Deltarxn}{m}{\Delta #1} \RenewDocumentCommand{\Deltaf}{}{\Delta\c_math_subscript_token\formation} \RenewDocumentCommand{\Deltafus}{}{\Delta} \RenewDocumentCommand{\Deltavap}{}{\Delta} \RenewDocumentCommand{\Deltasub}{}{\Delta} %^^A FIXME: should be \Delta G_{\text{mix},\mathrm{m}} not other way around \RenewDocumentCommand{\Deltamix}{m}{ \tl_set:Nn \l_@@_sub_separator_tl {,} \Delta #1\c_math_subscript_token{\mixing} } \RenewDocumentCommand{\excess}{}{{\mathrm{E}}} \RenewDocumentCommand{\residual}{}{{\mathrm{R}}} \cs_set:Nn \@@_overline:n {#1} \RenewDocumentCommand{\IS}{}{{\mathrm{I}}} \RenewDocumentCommand{\Psat}{} { \peek_catcode:NTF \c_math_subscript_token {p\c_math_superscript_token\bullet} {p} } \RenewDocumentCommand{\Cstd}{}{m^\std} \RenewDocumentCommand{\Henryrat}{}{k} \RenewDocumentCommand{\Henrymol}{}{k''} % Fix partial molar properties \cs_set:Npn \@@_pm_case_one #1 { \l_@@_pm_symbol_tl\c_math_subscript_token{\mathrm{m}#1} } \cs_set:Npn \@@_pm_case_two [#1]#2 { \l_@@_pm_symbol_tl \c_math_superscript_token{#1}\c_math_subscript_token{\mathrm{m}#2} } \cs_set:Npn \@@_pm_case_three_part_two #1 { \l_@@_pm_symbol_tl \c_math_superscript_token{\l_@@_pm_arg_tl} \c_math_subscript_token{\mathrm{m}#1} } \cs_set:Npn \@@_pm_case_four #1 { \l_@@_pm_symbol_tl\c_math_superscript_token{#1} \c_math_subscript_token{\mathrm{m}\l_@@_pm_arg_tl} } \cs_set:Npn \@@_pm_case_five { \l_@@_pm_symbol_tl \c_math_subscript_token{\mathrm{m}\l_@@_pm_arg_tl} } % fix heat capacities \RenewSubscriptedSymbol{\cP}{\heatcapacitysymbol} {\g_@@_pressure_symbol\mathrm{m}} \RenewSubscriptedSymbol{\cV}{\heatcapacitysymbol} {\g_@@_volume_symbol\mathrm{m}} \RenewDocumentCommand{\cPpm}{}{\partialmolar{\cPt}} \RenewDocumentCommand{\cVpm}{}{\partialmolar{\cVt}} \cs_set:Npn \cP_two:n #1 { \heatcapacitysymbol \c_math_subscript_token{\g_@@_pressure_symbol\mathrm{m} \l_@@_sub_separator_tl #1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \cs_set:Npn \cV_two:n #1 { \heatcapacitysymbol \c_math_subscript_token{\g_@@_volume_symbol\mathrm{m} \l_@@_sub_separator_tl #1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } } \AtBeginDocument{ \@ifpackageloaded{emf}{\RenewDocumentCommand{\Epot}{}{\emf}} {% \PackageWarningNoLine{thermodynamics} {Package~emf~not~loaded;~load~to~make~Epot~match~Klotz~ and~Rosenberg's~notation}% } } } \DeclareOption{Koretsky}{ \ExecuteOptions{EUAGHAn,brackets,intensive-lowercase,delta,shortpm} \AtEndOfPackage{ \tl_gset:Nn \g_@@_area_symbol {A} \RenewExpandableDocumentCommand{\std}{}{o} \RenewExpandableDocumentCommand{\ncomponents}{}{m} \RenewDocumentCommand{\partialmolar}{m} { \tl_set:Nn \l_@@_pm_symbol_tl {#1} \@@_generic_pm: } \RenewDocumentCommand{\expansivitysymbol}{}{\beta} \RenewDocumentCommand{\IS}{}{{\text{ideal}}} \RenewDocumentCommand{\residual}{}{{\text{dep}}} \RenewDocumentCommand{\IG}{}{{\text{ideal~gas}}} \RenewDocumentCommand{\IGM}{}{{\text{ideal}}} \RenewDocumentCommand{\Henryrat}{}{{\mathcal{H}}} \RenewDocumentCommand{\gammarat}{} {\gamma\c_math_superscript_token\text{Henry's}} \RenewDocumentCommand{\gammamol}{}{\gamma\c_math_superscript_token{m}} \RenewDocumentCommand{\phipure}{}{\varphi} \RenewDocumentCommand{\phimix}{}{\hat\varphi} \RenewDocumentCommand{\phisat}{}{\varphi\c_math_superscript_token\sat} \cs_new:Npn \Delta_fus_sym {} {} \NewSubscriptedSymbol{\Delta_fus}{\Delta_fus_sym}{\fusion} \RenewDocumentCommand{\Deltafus}{m}{ \cs_set:Npn \Delta_fus_sym {} { \Delta #1 } \Delta_fus } \cs_new:Npn \Delta_vap_sym {} {} \NewSubscriptedSymbol{\Delta_vap}{\Delta_vap_sym}{\vaporization} \RenewDocumentCommand{\Deltavap}{m}{ \cs_set:Npn \Delta_vap_sym {} { \Delta #1 } \Delta_vap } \cs_new:Npn \Delta_sub_sym {} {} \NewSubscriptedSymbol{\Delta_sub}{\Delta_sub_sym}{\sublimation} \RenewDocumentCommand{\Deltasub}{m}{ \cs_set:Npn \Delta_sub_sym {} { \Delta #1 } \Delta_sub } \tl_new:N \l_@@_Deltaf_superscript_tl \tl_new:N \l_@@_Deltaf_subscript_tl \bool_new:N \l_@@_Deltaf_parentheses_bool \tl_new:N \l_@@_Deltaf_entity_tl \cs_set:Nn \@@_Deltaf_one:n { \tl_set:Nn \l_@@_Deltaf_superscript_tl {#1} \peek_catcode_remove:NTF \c_math_subscript_token { \bool_set_true:N \l_@@_Deltaf_parentheses_bool \@@_Deltaf_two:n } { \bool_if:NTF \l_@@_Deltaf_parentheses_bool { (\Delta\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } ) \tl_if_empty:NF \l_@@_Deltaf_subscript_tl { \c_math_subscript_token\l_@@_Deltaf_subscript_tl } } { \Delta\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } } } } \cs_set:Nn \@@_Deltaf_two:n { \tl_set:Nn \l_@@_Deltaf_subscript_tl {#1} % check for case 4 \peek_catcode_remove:NTF \c_math_superscript_token { \@@_Deltaf_one:n } { \bool_if:NTF \l_@@_Deltaf_parentheses_bool { (\Delta\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl {\c_math_superscript_token\l_@@_Deltaf_superscript_tl} ) \tl_if_empty:NF \l_@@_Deltaf_subscript_tl \c_math_subscript_token\l_@@_Deltaf_subscript_tl } { \Delta\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl {\c_math_superscript_token\l_@@_Deltaf_superscript_tl} } } } \RenewDocumentCommand{\Deltaf}{m} { \tl_clear:N \l_@@_Deltaf_superscript_tl \tl_clear:N \l_@@_Deltaf_subscript_tl \tl_set:Nn \l_@@_Deltaf_entity_tl {#1} \bool_set_false:N \l_@@_Deltaf_parentheses_bool \peek_catcode_remove:NTF \c_math_superscript_token { \@@_Deltaf_one:n } { \peek_catcode_remove:NTF \c_math_subscript_token { \bool_set_true:N \l_@@_Deltaf_parentheses_bool \@@_Deltaf_two:n } { \Delta #1\c_math_subscript_token \formation } } } \RenewDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewSubscriptedSymbol{\cV}{\@@_intensive:n \heatcapacitysymbol} {\@@_intensive:n \g_@@_volume_symbol} \RenewSubscriptedSymbol{\cVs}{\@@_specific:n \heatcapacitysymbol} {\@@_intensive:n \g_@@_volume_symbol} \RenewDocumentCommand{\Lm}{}{\omega} \RenewDocumentCommand{\Ls}{}{\hat\omega} } } \DeclareOption{MSBB}{ \ExecuteOptions{EUFGHAn,intensive-lowercase,delta,shortpm} \AtEndOfPackage{ \RenewDocumentCommand{\IGM}{}{\ast} % FIXME: is this * or \circ? \RenewDocumentCommand{\IG}{}{\ast} \RenewDocumentCommand{\expansivitysymbol}{}{\beta} \RenewDocumentCommand{\muJT}{}{\mu\c_math_subscript_token J} \RenewDocumentCommand{\allcomponents}{O{} m}{#2} \RenewDocumentCommand{\allbut}{O{j} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token k } { {#3}\c_math_subscript_token{#1} } } \tl_gset_eq:NN \g_@@_Helmholtz_symbol \psi \RenewDocumentCommand{\Ft}{}{\Psi} \RenewDocumentCommand{\Fpm}{}{\partialmolar{\Psi}} \cs_set:Nn \@@_intensive:n {\@@_overline:n{\text_lowercase:n{#1}}} \cs_set:Nn \@@_specific:n {\text_lowercase:n{#1}} \RenewDocumentCommand{\fmix}{}{\bar f} \RenewDocumentCommand{\phimix}{}{\bar\phi} \RenewDocumentCommand{\phimix}{}{\bar\phi} \tl_gset:Nn \g_@@_pressure_symbol p \tl_gset:Nn \g_@@_volume_symbol v \RenewDocumentCommand{\partialmolar}{m} { \tl_set:Nn \l_@@_pm_symbol_tl {\text_uppercase:n #1} \@@_generic_pm: } \RenewDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewDocumentCommand{\mustd}{}{\Gm^\std} \RenewExpandableDocumentCommand{\formation}{}{{\mathrm{f}}} \RenewDocumentCommand{\Pstd}{} {\g_@@_pressure_symbol\c_math_subscript_token\text{ref}} \RenewExpandableDocumentCommand{\xrxn}{}{\varepsilon} \RenewExpandableDocumentCommand{\Lm}{}{\@@_intensive:n \omega} \RenewExpandableDocumentCommand{\Ls}{}{\@@_specific:n \omega} \RenewExpandableDocumentCommand{\heatcapacitysymbol}{}{C} \tl_new:N \l_@@_Deltaf_superscript_tl \tl_new:N \l_@@_Deltaf_subscript_tl \bool_new:N \l_@@_Deltaf_parentheses_bool \tl_new:N \l_@@_Deltaf_entity_tl \cs_set:Nn \@@_Deltaf_one:n { \tl_set:Nn \l_@@_Deltaf_superscript_tl {#1} \peek_catcode_remove:NTF \c_math_subscript_token { \bool_set_true:N \l_@@_Deltaf_parentheses_bool \@@_Deltaf_two:n } { \bool_if:NTF \l_@@_Deltaf_parentheses_bool { (\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } ) \tl_if_empty:NF \l_@@_Deltaf_subscript_tl { \c_math_subscript_token\l_@@_Deltaf_subscript_tl } } { \l_@@_Deltaf_entity_tl\c_math_subscript_token{\formation} \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } } } } \cs_set:Nn \@@_Deltaf_two:n { \tl_set:Nn \l_@@_Deltaf_subscript_tl {#1} % check for case 4 \peek_catcode_remove:NTF \c_math_superscript_token { \@@_Deltaf_one:n } { \bool_if:NTF \l_@@_Deltaf_parentheses_bool { (\l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } ) \tl_if_empty:NF \l_@@_Deltaf_subscript_tl { \c_math_subscript_token\l_@@_Deltaf_subscript_tl } } { \l_@@_Deltaf_entity_tl\c_math_subscript_token\formation \tl_if_empty:NF \l_@@_Deltaf_superscript_tl { \c_math_superscript_token\l_@@_Deltaf_superscript_tl } } } } \RenewDocumentCommand{\Deltaf}{m} { \tl_clear:N \l_@@_Deltaf_superscript_tl \tl_clear:N \l_@@_Deltaf_subscript_tl \tl_set:Nn \l_@@_Deltaf_entity_tl {#1} \bool_set_false:N \l_@@_Deltaf_parentheses_bool \peek_catcode_remove:NTF \c_math_superscript_token { \@@_Deltaf_one:n } { \peek_catcode_remove:NTF \c_math_subscript_token { \bool_set_true:N \l_@@_Deltaf_parentheses_bool \@@_Deltaf_two:n } { \Delta #1\c_math_subscript_token \formation } } } } } \DeclareOption{Prausnitz}{ \ExecuteOptions{intensive-lowercase,shortpm} \AtEndOfPackage{ \RenewExpandableDocumentCommand{\ncomponents}{}{m} \RenewDocumentCommand{\fmix}{}{f} \RenewDocumentCommand{\fsat}{}{\fpure\c_math_superscript_token\sat} % TODO: this should pick up H_2 and make it into H_{2,1} (assuming % the solvent is always 1...?) \RenewDocumentCommand{\Henryrat}{}{H} %^^A\RenewDocumentCommand{\residual}{}{{{\mathcal{R}}}} \RenewDocumentCommand{\allcomponents}{O{i} m} { {#2}\c_math_subscript_token{#1} } \RenewDocumentCommand{\allbut}{O{i} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token k } { {#3}\c_math_subscript_token{#1} } } \tl_set:Nn \l_@@_sub_separator_tl {\,} \tl_gset:Nn \g_@@_pressure_symbol {p} \tl_gset:Nn \g_@@_volume_symbol {v} \RenewSubscriptedSymbol{\fpure}{f}{{\text{pure}}} \RenewDocumentCommand{\phimix}{}{\varphi} \RenewDocumentCommand{\phisat}{}{\varphi^\sat} \RenewDocumentCommand{\sat}{}{s} \RenewDocumentCommand{\mixing}{}{\text{mixing}} \RenewDocumentCommand{\Lm}{}{\omega} \RenewDocumentCommand{\Ls}{}{\@@_specific:n \omega} \RenewSubscriptedSymbol{\phipure}{\varphi}{{\text{pure}}} \RenewDocumentCommand{\IG}{}{{\text{id}}} \RenewDocumentCommand{\IGM}{}{{\text{id}}} \RenewDocumentCommand{\IS}{}{{\text{(ideal)}}} \RenewExpandableDocumentCommand{\compressibilitysymbol}{}{\beta} \RenewDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewExpandableDocumentCommand{\std}{}{0} \@ifpackageloaded{emf} {\RenewDocumentCommand{\Epot}{}{\emf}} {\RenewDocumentCommand{\Epot}{}{\mathcal{E}}} \DeclareMathAlphabet{\mathdutchcal}{U}{dutchcal}{m}{n} \RenewExpandableDocumentCommand{\actrel}{}{\mathdutchcal{a}} } } \DeclareOption{Sandler}{ \ExecuteOptions{EUAGHaN,extensive-plain,shortpm} \AtEndOfPackage{ \RenewDocumentCommand{\Pvap}{} {{P\c_math_superscript_token{\text{vap}}}} \RenewDocumentCommand{\excess}{}{{\text{ex}}} \RenewDocumentCommand{\residual}{}{{\text{r}}} \RenewExpandableDocumentCommand{\ncomponents}{}{\mathcal{C}} \RenewDocumentCommand{\fmix}{}{\bar f} \RenewDocumentCommand{\fstd}{}{\bar f\c_math_superscript_token\std} \RenewDocumentCommand{\phimix}{}{\bar\phi} \RenewDocumentCommand{\allcomponents}{O{} m}{\@@_underline:n{#2}} \RenewDocumentCommand{\IG}{}{{\text{IG}}} \RenewDocumentCommand{\IGM}{}{{\text{IGM}}} \RenewDocumentCommand{\IS}{}{{\text{IM}}} \RenewDocumentCommand{\Deltamix}{m} {\Delta\c_math_subscript_token\mixing #1} \RenewDocumentCommand{\Deltarxn}{m} {\Delta\c_math_subscript_token\reaction #1} \RenewDocumentCommand{\Deltasub}{m} {\Delta\c_math_subscript_token\sublimation #1} \RenewDocumentCommand{\Deltafus}{m} {\Delta\c_math_subscript_token\fusion #1} \RenewDocumentCommand{\Deltavap}{m} {\Delta\c_math_subscript_token\vaporization #1} \RenewDocumentCommand{\Pstd}{}{\text{1~bar} \peek_catcode_remove:NT \c_math_subscript_token {\use_none:n} } \RenewDocumentCommand{\Cstd}{}{\text{1~molal} \peek_catcode_remove:NT \c_math_subscript_token {\use_none:n} } \RenewDocumentCommand{\Henryrat}{}{H} \RenewSubscriptedSymbol{\cV} {\heatcapacitysymbol}{\g_@@_volume_symbol} \RenewSubscriptedSymbol{\cP} {\heatcapacitysymbol}{\g_@@_pressure_symbol} \RenewSubscriptedSymbol{\cVt} {\Nt\heatcapacitysymbol}{\g_@@_volume_symbol} \RenewSubscriptedSymbol{\cPt} {\Nt\heatcapacitysymbol}{\g_@@_pressure_symbol} \RenewDocumentCommand{\formation}{}{\mathrm{f}} \RenewDocumentCommand{\Deltaf}{} {\Delta\c_math_subscript_token\formation} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewDocumentCommand{\muJT}{}{\mu} \RenewDocumentCommand{\xrxn}{}{X} } } \DeclareOption{SVNAS}{ \ExecuteOptions{extensive-superscript,shortpm} \AtEndOfPackage{ \RenewDocumentCommand{\allcomponents}{O{} m}{#2} \RenewDocumentCommand{\allbut}{O{j} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token k } { {#3}\c_math_subscript_token{#1} } } \RenewDocumentCommand{\IG}{}{{ig}} \RenewDocumentCommand{\IGM}{}{{ig}} \RenewDocumentCommand{\IS}{}{{id}} \RenewDocumentCommand{\IS}{}{{id}} \RenewDocumentCommand{\fusion}{}{{sl}} \RenewDocumentCommand{\vaporization}{}{{vl}} \RenewDocumentCommand{\sublimation}{}{{vs}} \RenewDocumentCommand{\expansivitysymbol}{}{\beta} \RenewDocumentCommand{\xrxn}{}{\varepsilon} \RenewDocumentCommand{\Deltarxn}{m}{\Delta #1} \RenewDocumentCommand{\Deltamix}{m}{\Delta #1} \RenewSubscriptedSymbol{\cVt} {\Nt\heatcapacitysymbol}{\g_@@_volume_symbol} \RenewSubscriptedSymbol{\cPt} {\Nt\heatcapacitysymbol}{\g_@@_pressure_symbol} % FIXME \RenewDocumentCommand{\cP}{} {{\heatcapacitysymbol\c_math_subscript_token\g_@@_pressure_symbol}} \RenewDocumentCommand{\cV}{} {{\heatcapacitysymbol\c_math_subscript_token\g_@@_volume_symbol}} \RenewDocumentCommand{\kappaT}{}{\compressibilitysymbol} \RenewDocumentCommand{\alphaP}{}{\expansivitysymbol} \RenewDocumentCommand{\muJT}{}{\mu} \RenewDocumentCommand{\Cstd}{}{m\c_math_superscript_token\std \peek_catcode_remove:NT \c_math_subscript_token {\use_none:n} } \RenewDocumentCommand{\mustd}{}{\Gm\c_math_superscript_token\std} \RenewDocumentCommand{\Henryrat}{}{\mathcal{H}} \RenewDocumentCommand{\formation}{} { \tl_set:Nn \l_@@_sub_separator_tl {} f298 } \cs_set:Nn \@@_specific:n {#1} } } \DeclareOption{ModellReid}{\ExecuteOptions{TesterModell}} \DeclareOption{TesterModell}{ \ExecuteOptions{EUAGHaN,delta,shortpm} \AtEndOfPackage{ \cs_set:Nn \@@_specific:n {\text_lowercase:n{#1}} \RenewExpandableDocumentCommand{\ncomponents}{}{n} \RenewDocumentCommand{\allcomponents}{O{i} m} { {#2}\c_math_subscript_token{#1} } \RenewDocumentCommand{\allbut}{O{i} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token{k}[#2] } { {#3}\c_math_subscript_token{#1}[#2] } } \RenewDocumentCommand{\allbutlastand}{O{j} m m} { \tl_if_eq:xxTF {#2} {\ncomponents} { {#3}\c_math_subscript_token{#1}\relax[#2] } { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token{k}[#2,\ncomponents] } { {#3}\c_math_subscript_token{#1}[#2,\ncomponents] } } } \RenewDocumentCommand{\IG}{}{{o}} \RenewDocumentCommand{\IGM}{}{{o}} \RenewDocumentCommand{\IS}{}{{ID}} \RenewDocumentCommand{\excess}{}{{EX}} \RenewDocumentCommand{\reaction}{}{{rx}} \RenewDocumentCommand{\Henryrat}{} {f\c_math_superscript_token{\ast\ast}} \RenewDocumentCommand{\Henrymol}{}{f\c_math_superscript_token\ast} \cs_if_exist:NTF \gammaup { \RenewDocumentCommand{\gamma}{}{\gammaup} } { \cs_if_exist:NT \upgamma { \RenewDocumentCommand{\gamma}{}{\upgamma} } } \RenewDocumentCommand{\gammarat}{} {\gamma\c_math_superscript_token{\ast\ast}} \RenewDocumentCommand{\gammamol}{} {\gamma\c_math_superscript_token\ast} \RenewExpandableDocumentCommand{\JTsymbol}{}{\alpha} \RenewSubscriptedSymbol{\muJT}{\JTsymbol}{H} \cs_if_exist:NTF \xiup { \RenewDocumentCommand{\xrxn}{}{\xiup} } { \cs_if_exist:NT \upxi { \RenewDocumentCommand{\xrxn}{}{\upxi} } } \cs_if_exist:NTF \phiup { \RenewDocumentCommand{\phipure}{}{\phiup} \RenewDocumentCommand{\phimix}{}{\hat\phiup} \RenewDocumentCommand{\phisat}{}{\phiup\c_math_superscript_token\sat} } { \cs_if_exist:NT \upphi { \RenewDocumentCommand{\phipure}{}{\upphi} \RenewDocumentCommand{\phimix}{}{\hat\upphi} \RenewDocumentCommand{\phisat}{}{\upphi\c_math_superscript_token\sat} } } \RenewDocumentCommand{\Cstd}{}{m\c_math_superscript_token+ \peek_catcode_remove:NT \c_math_subscript_token {\use_none:n} } \cs_if_exist:NTF \muup { \RenewDocumentCommand{\mu}{}{\muup} } { \cs_if_exist:NT \upmu { \RenewDocumentCommand{\mu}{}{\upmu} } } \RenewDocumentCommand{\std}{}{o} \RenewDocumentCommand{\Pstd}{}{P^\ast} \tl_gset:Nn \g_@@_area_symbol {\text{\large\(\mathit{a}\)}} \RenewDocumentCommand{\Epot}{}{\exists} \tl_set:Nn \l_@@_sub_separator_tl {} \tl_gset:Nn \g_@@_pressure_symbol {p} \RenewSubscriptedSymbol{\cVt}{\@@_extensive:n {\heatcapacitysymbol}}{v} \RenewSubscriptedSymbol{\cV}{\@@_intensive:n {\heatcapacitysymbol}}{v} \RenewSubscriptedSymbol{\cVs}{\@@_specific:n {\heatcapacitysymbol}}{v} } } \DeclareOption{Thompson}{ \ExecuteOptions{EUAGHAn,delta,shortpm} \AtEndOfPackage { \RenewDocumentCommand{\excess}{}{{EX}} \RenewDocumentCommand{\residual}{}{{R}} \RenewDocumentCommand{\actrel}{}{\widehat{a}} \RenewSubscriptedSymbol{\Henryrat}{k}{H} \RenewSubscriptedSymbol{\Henrymol}{k}{H} \RenewDocumentCommand{\allcomponents}{O{j} m} { {#2}\c_math_subscript_token{#1} } \RenewDocumentCommand{\allNs}{O{j}}{\allcomponents[#1]{\Nt}} \RenewDocumentCommand{\allXs}{O{j}}{\allcomponents[#1]{x}} \RenewDocumentCommand{\allYs}{O{j}}{\allcomponents[#1]{y}} \RenewDocumentCommand{\allmus}{O{j}}{\allcomponents[#1]{\mu}} \RenewDocumentCommand{\allMs}{O{j}}{\allcomponents[#1]{m}} \RenewDocumentCommand{\allWs}{O{j}}{\allcomponents[#1]{w}} \RenewExpandableDocumentCommand{\ncomponents}{}{c} \RenewDocumentCommand{\IS}{}{{IS}} \RenewDocumentCommand{\IG}{}{{IG}} \RenewDocumentCommand{\IGM}{}{{IG}} \cs_new:Nn \@@_fpure_one:n { f\c_math_subscript_token{#1} \peek_catcode_remove:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\fpure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_fpure_one:n } { f } } \cs_new:Nn \@@_intensive_two:n { \c_math_subscript_token{#1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \cs_set:Nn \@@_intensive:n { #1 \peek_catcode_remove:NT \c_math_subscript_token { \@@_intensive_two:n } } \cs_new:Nn \@@_phipure_one:n { \phi\c_math_subscript_token{#1} \peek_catcode:NF \c_math_superscript_token { \c_math_superscript_token\bullet } } \RenewDocumentCommand{\phipure}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \@@_phipure_one:n } {\phi} } \RenewDocumentCommand{\phimix}{}{\widehat\phi} \RenewDocumentCommand{\fmix}{}{\widehat f} \RenewDocumentCommand{\mixing}{}{{MIX}} \RenewDocumentCommand{\muJT}{}{\alpha\c_math_subscript_token H} \RenewDocumentCommand{\Deltamix}{m} {\Delta\c_math_subscript_token\mixing #1} \RenewDocumentCommand{\reaction}{}{R} \RenewDocumentCommand{\fusion}{}{{SL}} \RenewDocumentCommand{\vaporization}{}{{LV}} \RenewDocumentCommand{\sublimation}{}{{SV}} \RenewDocumentCommand{\allbut}{O{j} m m} { \tl_if_eq:nnTF {#1} {#2} { {#3}\c_math_subscript_token k\neq{#3}\c_math_subscript_token{#2} } { {#3}\c_math_subscript_token{#1}\neq{#3}\c_math_subscript_token{#2} } } \RenewDocumentCommand{\Cstd}{}{m^\std} \RenewDocumentCommand{\mustd}{}{\Gamma} \RenewDocumentCommand{\formation}{}{F} %^^A \RenewDocumentCommand{\Deltarxn}{}{\Delta} } } % \end{macrocode} % We execute the default options below. % \begin{macrocode} \ExecuteOptions{EUAGHan,subscripts,parentheses,intensive-plain, moles-index,longpm} \ProcessOptions % \end{macrocode} % \subsection{Variable Order} % We next encode a routine to sort non-subscripted variables into a consistent % order. It currently does not sort variables with subscripts. % \changes{v2.00}{2023/11/16}{Added a sorting routine to make function % arguments be in a consistent order using the \texttt{nosubscripts} % option.} % \begin{macrocode} \tl_const:Nn \c_@@_sort_order_tl {\Et\Em\Es\Ut\Um\Us\Ht\Hm\Hs\Ft\Fm\Fs\Gt\Gm\Gs\Lt\Lm\Ls T\St\Sm\Ss P\Vt\Vm\Vs\mu\Nt mwxyz\At\Am\As\sigma ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklnopqrstuvwxyz} \clist_new:N \l_@@_in_list_clist \clist_new:N \l_@@_sorted_list_clist \clist_new:N \l_@@_remaining_list_clist \cs_new:Nn \@@_sort_clist:n {% Sort the list in the order of \c_@@_sort_order_tl % Wipe out any remnants from the last sort \clist_clear:N \l_@@_in_list_clist \clist_clear:N \l_@@_sorted_list_clist % Make a copy of the list \clist_set:Nn \l_@@_remaining_list_clist {#1} % Make a list of everything that's in the known sort order list % and put everything else in the "not in sort order list" list. \tl_map_inline:Nn \c_@@_sort_order_tl { \clist_if_in:NnT \l_@@_remaining_list_clist {##1} { \clist_put_right:Nn \l_@@_in_list_clist {##1} } \clist_remove_all:Nn \l_@@_remaining_list_clist {##1} } % Then merge the lists back together again. \clist_if_empty:NF \l_@@_in_list_clist { \clist_put_right:Nn \l_@@_sorted_list_clist \l_@@_in_list_clist } \clist_if_empty:NF \l_@@_remaining_list_clist { \clist_put_right:Nn \l_@@_sorted_list_clist \l_@@_remaining_list_clist } \clist_use:Nn \l_@@_sorted_list_clist , } % \end{macrocode} % % \subsection{Commands for Partial Derivatives} % The \cs{Partial} command and its second-order siblings are defined as below. % They typeset partial derivatives of the first argument with respect to % the second (and third, in the case of mixed second partial derivatives) % arguments, holding the last argument constant. % % The starred forms adjust the spacing after the partial derivative so the % trailing binary operator (assumed to be the same width as an equals sign) % overhangs the variables held constant. % We thus set \verb"operator_width" to be \emph{just} greater than the width of % an equals sign. % \begin{macrocode} \dim_new:N \l_@@_Partial_const_dim \dim_new:N \l_@@_operator_width_dim \dim_new:N \l_@@_adjust_width_dim \settowidth{\l_@@_operator_width_dim}{=} \dim_set:Nn \l_@@_adjust_width_dim {0.1\l_@@_operator_width_dim} \dim_add:Nn \l_@@_operator_width_dim \l_@@_adjust_width_dim % \end{macrocode} % \begin{macro}{\Partial} % The command \cs{Partial} and its friends drastically simplify the creation % of partial derivatives. The command \cs{Partial*} is the same as % \cs{Partial} except that it adjusts the spacing so the (presumably) binary % operator that follows it slightly overlaps the subscripts. % \changes{v1.01}{2022/03/01}{Changed \cs{adjust@width} to 2pt (up from 1pt).} % \changes{v1.01}{2022/04/21}{Changed \cs{adjust@width} 0.1\cs{operator@width} % (from 2pt).} % \changes{v2.00}{2023/11/16}{Changed length added to % \ExplSyntaxOn % \cs{l_@@_Partial_const_dim}~ % \ExplSyntaxOff % from $-0.15$ to $-0.20$.} % \begin{macrocode} \tl_new:N \l_@@_Partial_start_tl \tl_new:N \l_@@_Partial_end_tl \tl_new:N \l_@@_Partial_empty_end_tl \tl_new:N \l_@@_Partial_middle_tl \tl_set:Nn \l_@@_Partial_start_tl {\left\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\right\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\right\l_@@_PartialEmptyClose_tl} \tl_set:Nn \l_@@_Partial_middle_tl {\middle} \cs_set_eq:NN \@@_frac:nn \frac \NewDocumentCommand{\Partial}{s m m m} { \bool_if:nTF {#1} {% Starred form (recursive) \settowidth{\l_@@_Partial_const_dim}{\ensuremath{#4}}% \dim_add:Nn \l_@@_Partial_const_dim {-0.20\l_@@_Partial_const_dim}% \Partial{#2}{#3}{#4}% \bool_if:NT \l_@@_subscripted_bool { \dim_compare:nNnTF \l_@@_operator_width_dim < \l_@@_Partial_const_dim { \kern -\l_@@_operator_width_dim } { \kern -\l_@@_Partial_const_dim } } } {% Unstarred form \bool_if:NTF \l_@@_subscripted_bool {% Handle case of empty variables held constant \tl_if_eq:nnTF {#4} {} { \l_@@_Partial_start_tl \@@_frac:nn{\partial #2}{\partial #3}\l_@@_Partial_empty_end_tl } { \l_@@_Partial_start_tl\@@_frac:nn{\partial #2} {\partial #3}\l_@@_Partial_end_tl \c_math_subscript_token{#4}% } } {% Check whether #4 contains \allNsbut{i} and #3 is \Nt_i \tl_if_in:nnTF {#3} {\Nt} { \RenewDocumentCommand{\allbut}{O{j} m m}{\allcomponents{##3}} \l_@@_Partial_start_tl \@@_frac:nn{\partial #2(\@@_sort_clist:n{#4})} {\partial #3}\l_@@_Partial_end_tl } { \l_@@_Partial_start_tl \@@_frac:nn{\partial #2(\@@_sort_clist:n{#3,#4})} {\partial #3}\l_@@_Partial_end_tl } } } } % \end{macrocode} % \end{macro} % % \begin{macro}{\PartialBigg} % The \cs{PartialBigg} macro (and its starred form) replace the \tn{left} % and \tn{right} commands in \cs{Partial} with \pkg{amsmath}'s \tn{Biggl} % and \tn{Biggr} variants. The starred form is inherited from \cs{Partial} % without modification. % \begin{macrocode} \NewDocumentCommand{\PartialBigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\Biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\Biggr\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_Empty_end_tl {\Biggr\l_@@_PartialEmptyClose_tl} \Partial } % \end{macrocode} % \end{macro} % \begin{macro}{\Partialbigg} % The \cs{Partialbigg} macro does the same thing as \cs{PartialBigg}, except % using \pkg{amsmath}'s \tn{biggl}/\tn{biggr} variants. % \begin{macrocode} \NewDocumentCommand{\Partialbigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\biggr\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\biggr\l_@@_PartialEmptyClose_tl} \Partial } % \end{macrocode} % \end{macro} % % \begin{macro}{\PartialSecond} % The second partial derivatives are defined similarly to \cs{Partial}. % \begin{macrocode} \NewDocumentCommand{\PartialSecond}{s m m m} { \bool_if:nTF {#1} {% Starred form \settowidth{\l_@@_Partial_const_dim}{\ensuremath{#4}}% \dim_add:Nn \l_@@_Partial_const_dim {-0.20\l_@@_Partial_const_dim} \PartialSecond{#2}{#3}{#4}% \bool_if:nT \l_@@_subscripted_bool { \dim_compare:nNnTF {\l_@@_operator_width_dim} < {\l_@@_Partial_const_dim} { \kern -\l_@@_operator_width_dim } { \kern -\l_@@_Partial_const_dim } } } {% Unstarred form \bool_if:NTF \l_@@_subscripted_bool {% Handles case of empty variables held constant \tl_if_eq:nnTF {#4} {} { \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2} {\partial #3\c_math_superscript_token 2}\l_@@_Partial_empty_end_tl } { \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2} {\partial #3\c_math_superscript_token 2}\l_@@_Partial_end_tl \c_math_subscript_token{#4}% } } {% Check whether #4 contains \allNsbut{i} and #3 is \Nt_i \tl_if_in:nnTF {#2} {\Nt} { \RenewDocumentCommand{\allbut}{O{j} m m}{\allcomponents{##3}} \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(#4)} {\partial\c_math_superscript_token 2 #3}\l_@@_Partial_end_tl } { \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#3,#4})} {\partial #3\c_math_superscript_token 2}\l_@@_Partial_end_tl } } } } % \end{macrocode} % \end{macro} % \begin{macro}{\PartialSecondBigg} % The \cs{PartialSecondBigg} macro and its starred variant replace \cs{left} % and \tn{right} with \pkg{amsmath}'s \cs{Biggl} and % \cs{Biggr}. % \begin{macrocode} \NewDocumentCommand{\PartialSecondBigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\biggl\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\biggl\l_@@_PartialClose_tl} \PartialSecond } % \end{macrocode} % \end{macro} % \begin{macro}{\PartialSecondbigg} % The \cs{PartialSecondbigg} macro and its starred variant replace \tn{left} % and \tn{right} with \pkg{amsmath}'s \cs{biggl} and % \cs{biggr}. % \begin{macrocode} \NewDocumentCommand{\PartialSecondbigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\biggl\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\biggl\l_@@_PartialClose_tl} \PartialSecond } % \end{macrocode} % \end{macro} % % \begin{macro}{\PartialMixSecond} % The macro \cs{PartialMixSecond} takes an extra argument, but is otherwise % the same as its same-variable cousin. % \begin{macrocode} \bool_new:N \l_@@_has_x_or_y_bool \NewDocumentCommand{\PartialMixSecond}{s m m m m} { \bool_if:nTF {#1} {% Starred version \settowidth{\l_@@_Partial_const_dim}{\ensuremath{#4}}% \dim_add:Nn \l_@@_Partial_const_dim {-0.20\l_@@_Partial_const_dim} \PartialMixSecond{#2}{#3}{#4}{#5} \bool_if:nT \l_@@_subscripted_bool { \dim_compare:nNnTF {\l_@@_operator_width_dim} < {\l_@@_Partial_const_dim} { \kern -\l_@@_operator_width_dim } { \kern -\l_@@_Partial_const_dim } } } {% Unstarred version \bool_if:nTF \l_@@_subscripted_bool {% subscripted version \tl_if_eq:nnTF {#5} {} {% Handle case of empty variables held constant \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2} {\partial #3\partial #4}\l_@@_Partial_empty_end_tl } { \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2} {\partial #3\partial #4}\l_@@_Partial_end_tl \c_math_subscript_token{#5} } } {% not subscripted \tl_if_eq:nnTF {#5} {} {% empty argument \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#3,#4,#5})} {\partial #3\partial #4}\l_@@_Partial_empty_end_tl } {% Check whether #3 OR #4 are \Nt_i/etc. \tl_if_in:nnTF {#3} {\Nt} { \RenewDocumentCommand{\allbut}{O{j} m m}{\allcomponents{##3}}% \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#4,#5})} {\partial #3\partial #4}\l_@@_Partial_end_tl } { \tl_if_in:nnTF {#4} {\Nt} { \RenewDocumentCommand{\allbut}{O{j} m m}{\allcomponents{##3}}% \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#3,#5})} {\partial #3\partial #4}\l_@@_Partial_end_tl } {% Check for x, y, or w \bool_set_false:N \l_@@_has_x_or_y_bool \tl_if_in:nnT {#3} {x} { \l_@@_has_x_or_y_bool } \tl_if_in:nnT {#3} {y} { \l_@@_has_x_or_y_bool } \tl_if_in:nnT {#3} {w} { \l_@@_has_x_or_y_bool } \bool_if:NTF \l_@@_has_x_or_y_bool { \RenewDocumentCommand{\allbutlastand}{O{j} m m} {\allcomponents{##3}} \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#4,#5})} {\partial #3\partial #4}\l_@@_Partial_end_tl } { \l_@@_Partial_start_tl \@@_frac:nn{\partial\c_math_superscript_token 2 #2(\@@_sort_clist:n{#3,#4,#5})} {\partial #3\partial #4}\l_@@_Partial_end_tl } } } } } } } % \end{macrocode} % \end{macro} % \begin{macro}{\PartialMixSecondBigg,\PartialMixSecondbigg} % The macro \cs{PartialMixSecondBigg} is analogous to the aforementioned macros % \cs{PartialBigg} and \cs{PartialSecondBigg}. \cs{PartialMixSecondbigg} is % analogous to \cs{Partialbigg} and \cs{PartialSecondbigg}. % \begin{macrocode} \NewDocumentCommand{\PartialMixSecondBigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\Biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\Biggl\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\Biggl\l_@@_PartialClose_tl} \PartialMixSecond } \NewDocumentCommand{\PartialMixSecondbigg}{} { \tl_set:Nn \l_@@_Partial_start_tl {\biggl\l_@@_PartialOpen_tl} \tl_set:Nn \l_@@_Partial_end_tl {\biggl\l_@@_PartialClose_tl} \tl_set:Nn \l_@@_Partial_empty_end_tl {\biggl\l_@@_PartialClose_tl} \PartialMixSecond } % \end{macrocode} % % If the user does not load the \pkg{amsmath} package, we will not have access % to \cs{Biggl}, \cs{Biggr}, \cs{biggl}, and \cs{biggr}, so we revert them back % to the ordinary \cs{left} and \cs{right} versions and warn the user. % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{amsmath}{}{% \PackageWarningNoLine{thermodynamics} {Package~amsmath~not~loaded;~load~to~make~PartialBigg~and~friends~ work~correctly}% \cs_set_eq:NN \PartialBigg \Partial \cs_set_eq:NN \Partialbigg \Partial \cs_set_eq:NN \PartialSecondBigg \PartialSecond \cs_set_eq:NN \PartialSecondbigg \PartialSecond \cs_set_eq:NN \PartialMixSecondBigg \PartialMixSecond \cs_set_eq:NN \PartialMixSecondbigg \PartialMixSecond \ProvideDocumentCommand{\rvert}{}{|} \ProvideDocumentCommand{\lvert}{}{|} }% } % \end{macrocode} % \end{macro} % \changes{v1.01}{2023/09/15}{Added \cs{Partialinline} and friends to % facilitate in-line (non-display-mode) partial derivatives, with % corresponding changes to \cs{Partial} and friends for ease of % implementation. Also added \cs{Partialinlinetext} and friends for % non-expanding delimiters.} % \begin{macro}{\Partialinline,\PartialSecondinline,\PartialMixSecondinline} % Inline partial derivatives. % \begin{macrocode} \NewDocumentCommand{\Partialinline}{} { \cs_set:Nn \@@_frac:nn { ##1 \l_@@_Partial_middle_tl / ##2 } \Partial } \NewDocumentCommand{\PartialSecondinline}{} { \cs_set:Nn \@@_frac:nn { ##1 \l_@@_Partial_middle_tl / ##2 } \PartialSecond } \NewDocumentCommand{\PartialMixSecondinline}{} { \cs_set:Nn \@@_frac:nn { ##1 \l_@@_Partial_middle_tl / ##2 } \PartialMixSecond } % \end{macrocode} % \end{macro} % \pagebreak[1] % \setmarginparsize{\footnotesize} % \begin{macro}{\Partialinlinetext} % \begin{macro}{\PartialSecondinlinetext} % \begin{macro}{\PartialMixSecondinlinetext} % Text-only (non-extensible delimiter) versions of \cs{Partialinline} % and friends. %^^A TODO: These currently "pollute" other partial derivatives until the end %^^A of the line (i.e., \Partialinline{z}{x}{y} = \Partial{z}{x}{y} will %^^A produce identical things on both sides). For now, it's a "feature." % \begin{macrocode} \NewDocumentCommand{\Partialinlinetext}{} { \cs_set_eq:NN \l_@@_Partial_start_tl \l_@@_PartialOpen_tl \cs_set_eq:NN \l_@@_Partial_end_tl \l_@@_PartialClose_tl \cs_set_eq:NN \l_@@_Partial_empty_end_tl \l_@@_PartialEmptyClose_tl \cs_set_eq:NN \l_@@_Partial_middle_tl \relax \Partialinline } \NewDocumentCommand{\PartialSecondinlinetext}{} { \cs_set_eq:NN \l_@@_Partial_start_tl \l_@@_PartialOpen_tl \cs_set_eq:NN \l_@@_Partial_end_tl \l_@@_PartialClose_tl \cs_set_eq:NN \l_@@_Partial_empty_end_tl \l_@@_PartialEmptyClose_tl \cs_set_eq:NN \l_@@_Partial_middle_tl \relax \PartialSecondinline } \NewDocumentCommand{\PartialMixSecondinlinetext}{} { \cs_set_eq:NN \l_@@_Partial_start_tl \l_@@_PartialOpen_tl \cs_set_eq:NN \l_@@_Partial_end_tl \l_@@_PartialClose_tl \cs_set_eq:NN \l_@@_Partial_empty_end_tl \l_@@_PartialEmptyClose_tl \cs_set_eq:NN \l_@@_Partial_middle_tl \relax \PartialMixSecondinline } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \restoremarginparsize % % \subsection{Local Override of Delimiters} % We define several environments that \emph{locally} override the delimiters on % partial derivatives generated with \cs{Partial} and friends, the % subscript notation for partial derivatives, and/or the definitions of % range-oriented macros such as \cs{allNs}. These environments can be nested; % the inner-most one will be honored if conflicts occur. % \begin{environment}{thermoparentheses} % Inside this environment, partial derivatives will have parentheses around % them, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermoparentheses}{} { \cs_set:Nn \l_@@_PartialOpen_tl {(} \cs_set:Nn \l_@@_PartialClose_tl {)} \cs_set:Nn \l_@@_PartialEmptyClose_tl {)} }{} % \end{macrocode} % \end{environment} % \begin{environment}{thermobrackets} % Inside this environment, partial derivatives will have brackets around % them, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermobrackets}{} { \tl_set:Nn \l_@@_PartialOpen_tl {[} \tl_set:Nn \l_@@_PartialClose_tl {]} \tl_set:Nn \l_@@_PartialEmptyClose_tl {]} }{} % \end{macrocode} % \end{environment} % \begin{environment}{thermobraces} % Inside this environment, partial derivatives will have braces around % them, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermobraces}{} { \tl_set:Nn \l_@@_PartialOpen_tl {\{} \tl_set:Nn \l_@@_PartialClose_tl {\}} \tl_set:Nn \l_@@_PartialEmptyClose_tl {\}} }{} % \end{macrocode} % \end{environment} % \begin{environment}{thermobar} % Inside this environment, partial derivatives will have a trailing vertical % bar, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermobar}{} { \tl_set:Nn \l_@@_PartialOpen_tl {.} \tl_set:Nn \l_@@_PartialClose_tl {\rvert} \tl_set:Nn \l_@@_PartialEmptyClose_tl {.} }{} % \end{macrocode} % \end{environment} % \begin{environment}{thermoplain} % Inside this environment, partial derivatives will have no decorations % around them, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermoplain}{} { \tl_set:Nn \l_@@_PartialOpen_tl {.} \tl_set:Nn \l_@@_PartialClose_tl {.} \tl_set:Nn \l_@@_PartialEmptyClose_tl {.} \bool_set_false:N \l_@@_subscripted_bool }{} % \end{macrocode} % \end{environment} % \begin{environment}{thermoNOsubscripts} % Inside this environment, subscripts will not be displayed to the right of % partial derivatives, regardless of package options. % \begin{macrocode} \NewDocumentEnvironment{thermoNOsubscripts}{} {\bool_set_false:N \l_@@_subscripted_bool} {} % \end{macrocode} % \begin{environment}{thermosubscripts} % Inside this environment, subscripts will be displayed to the right of % partial derivatives, regardless of package options. % \end{environment} % \begin{macrocode} \NewDocumentEnvironment{thermosubscripts}{} {\bool_set_true:N \l_@@_subscripted_bool} {} % \end{macrocode} % \end{environment} % \begin{environment}{thermomolesrange} % Inside this environment, the macro \cs{allNs} will expand to % $n_1,\dotsc,n_C$ (or equivalent symbols if \cs{Nt} and/or \cs{ncomponents} % have been redefined), regardless of package options. Similar expansions will % result for \cs{allXs}, \cs{allYs}, \cs{allMs}, and so on. % \changes{v2.00}{2023/11/16}{Added environment to invoke the ``moles-range'' % definitions of \cs{allNs} and friends locally.} % \begin{macrocode} \NewDocumentEnvironment{thermomolesrange}{} { \@@_set_moles_range } {} % \end{macrocode} % \end{environment} % \begin{environment}{thermointensiveplain} % \changes{v2.00}{2023/11/16}{Added environment to invoke the % ``intensive-plain'' option locally.} % \begin{macrocode} % \begin{macrocode} \NewDocumentEnvironment{thermointensiveplain}{} { \@@_set_intensive_plain } {} % \end{macrocode} % \end{environment} % \begin{environment}{thermoextensiveplain} % \changes{v2.00}{2023/11/16}{Added environment to invoke the % ``extensive-plain'' option locally.} % \begin{macrocode} \NewDocumentEnvironment{thermoextensiveplain}{} { \@@_set_extensive_plain } {} % \end{macrocode} % \end{environment} % \setmarginparsize{\scriptsize} % \begin{environment}{thermointensivelowercase} % \changes{v2.00}{2023/11/16}{Added environment to invoke the % ``intensive-lowercase'' option locally.} % \begin{macrocode} \NewDocumentEnvironment{thermointensivelowercase}{} {% { % \RenewExpandableDocumentCommand{\MacroFont}{}{ % \fontencoding\encodingdefault % \fontfamily\ttdefault % \fontseries\mddefault % \fontshape\shapedefault % \footnotesize} \@@_set_intensive_lowercase \@@_set_lowercase_pms } {} % \end{macrocode} % \end{environment} % \begin{environment}{thermoextensivesuperscript} % \changes{v2.00}{2023/11/16}{Added environment to invoke the % ``extensive-superscript'' option locally.} % \begin{macrocode} \NewDocumentEnvironment{thermoextensivesuperscript}{} { \@@_set_extensive_superscripts } {} % \end{macrocode} % \end{environment} % \restoremarginparsize % % \subsection{User-Interface Macros to Define Symbols} % \begin{macro}{\NewSubscriptedSymbol} % First, we define a command that serves to create ``subscripted'' % symbols; for example, typing \verb"\cP_i" should yield $C_{P,i}$ rather % than $C_{Pi}$, ${C_P}_i$, or ${C_{P_i}}$. Superscripts are also handled % properly and can be in either order. % \changes{v2.00}{2023/11/16}{Deleted \cs{DeclareSubscriptedSymbol} in favor % of \pkg{xparse}-based \cs{NewSubscriptedSymbol} and % \cs{RenewSubscriptedSymbol}.} % \begin{macrocode} \str_new:N \l_@@_tmp_str \cs_new:Npn \@@_check_definable:nN #1#2 { \tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nTF { \str_set:Nx \l_@@_tmp_str {\tl_to_str:n {#1}} \int_compare:nNnT {\str_count:N \l_@@_tmp_str} = 1 { \PackageError{thermodynamics} {First~argument~of~'\tl_trim_spaces:o {\tl_to_str:n {#2}}'~ must~be~a~command} {The~first~argument~of~'\tl_trim_spaces:o {\tl_to_str:n {#2}}'~ should~be~the~macro~that~will~be~used~to~refer~to~the~symbol.~ The~provided~argument~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~ is~a~single~character. \MessageBreak Perhaps~a~backslash~is~missing?} } } { \PackageError{thermodynamics} {First~argument~of~'\tl_trim_spaces:o {\tl_to_str:n {#2}}'~ must~be~a~command} {The~first~argument~of~'\tl_trim_spaces:o {\tl_to_str:n {#2}}'~ should~be~the~macro~that~will~be~used~to~refer~to~the~symbol.~ The~provided~argument~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~ contains~more~than~one~token. \MessageBreak Perhaps~a~backslash~is~missing?} } } \tl_new:N \l_@@_super_separator_tl \tl_new:N \l_@@_sub_separator_tl \tl_set:Nn \l_@@_super_separator_tl {,} \tl_set:Nn \l_@@_sub_separator_tl {,} \NewDocumentCommand{\NewSubscriptedSymbol}{m m m} { \@@_check_definable:nN {#1} \NewSubscriptedSymbol \cs_if_exist:NT #1 { \PackageError{thermodynamics} {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~already~defined} {You~have~used~ '\tl_trim_spaces:o {\tl_to_str:n {\NewSubscriptedSymbol}}'~ with~a~command~that~already~has~a~definition} } \cs_new:cpn {\cs_to_str:N #1_one:n} ##1 { {#2}\c_math_superscript_token{##1} \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_three:n} } { \c_math_subscript_token{#3} } } \cs_new:cpn {\cs_to_str:N #1_two:n} ##1 { {#2}\c_math_subscript_token{#3\l_@@_sub_separator_tl ##1} } \cs_new:cpn {\cs_to_str:N #1_three:n} ##1 { \c_math_subscript_token{#3\l_@@_sub_separator_tl ##1} } \NewDocumentCommand{#1}{} {% @branch \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_one:n} } { \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_two:n} } { {#2}\c_math_subscript_token{#3} } } } } \NewDocumentCommand{\RenewSubscriptedSymbol}{m m m} { \@@_check_definable:nN {#1} \RenewSubscriptedSymbol \cs_if_exist:NF #1 { \PackageError{thermodynamics} {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~not~defined} {You~have~used~ '\tl_trim_spaces:o {\tl_to_str:n {\RenewSubscriptedSymbol}}'~ with~a~command~that~does~not~have~a~definition} } \cs_set:cpn {\cs_to_str:N #1_one:n} ##1 { {#2}\c_math_superscript_token{##1} \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_three:n} } { \c_math_subscript_token{#3} } } \cs_set:cpn {\cs_to_str:N #1_two:n} ##1 { {#2}\c_math_subscript_token{#3\l_@@_sub_separator_tl ##1} } \cs_set:cpn {\cs_to_str:N #1_three:n} ##1 { \c_math_subscript_token{#3\l_@@_sub_separator_tl ##1} } \RenewDocumentCommand{#1}{} {% @branch \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_one:n} } { \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_two:n} } { {#2}\c_math_subscript_token{#3} } } } } % \end{macrocode} % \end{macro} % \begin{macro}{\NewSuperscriptedSymbol} % \changes{v2.00}{2023/11/16}{Created \cs{NewSuperscriptedSymbol} to handle % superscripted excess and residual properties without intervention.} % \changes{v2.01}{2023/12/05}{Fixed two typos in \cs{NewSuperscriptedSymbol}.} % \begin{macrocode} \NewDocumentCommand{\NewSuperscriptedSymbol}{m m m} { \@@_check_definable:nN {#1} \NewSuperscriptedSymbol \cs_if_exist:NT #1 { \PackageError{thermodynamics} {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~already~defined} {You~have~used~ '\tl_trim_spaces:o {\tl_to_str:n {\NewSuperscriptedSymbol}}'~ with~a~command~that~already~has~a~definition} } \cs_new:cpn {\cs_to_str:N #1_one:n} ##1 { {#2}\c_math_subscript_token{##1} \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_three:n} } { \c_math_superscript_token{#3} } } \cs_new:cpn {\cs_to_str:N #1_two:n} ##1 { {#2}\c_math_superscript_token{#3\l_@@_super_separator_tl ##1} } \cs_new:cpn {\cs_to_str:N #1_three:n} ##1 { {#2}\c_math_superscript_token{#3\l_@@_super_separator_tl ##1} } \NewDocumentCommand{#1}{} { \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_one:n} } { \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_two:n} } { {#2}\c_math_superscript_token{#3} } } } } \NewDocumentCommand{\RenewSuperscriptedSymbol}{m m m} { \@@_check_definable:nN {#1} \RenewSuperscriptedSymbol \cs_if_exist:NF #1 { \PackageError{thermodynamics} {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~not~defined} {You~have~used~ '\tl_trim_spaces:o {\tl_to_str:n {\RenewSuperscriptedSymbol}}'~ with~a~command~that~does~not~have~a~definition} } \cs_set:cpn {\cs_to_str:N #1_one:n} ##1 { {#2}\c_math_subscript_token{##1} \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_three:n} } { \c_math_superscript_token{#3} } } \cs_set:cpn {\cs_to_str:N #1_two:n} ##1 { {#2}\c_math_superscript_token{#3\l_@@_super_separator_tl ##1} } \cs_set:cpn {\cs_to_str:N #1_three:n} ##1 { \c_math_superscript_token{#3\l_@@_super_separator_tl ##1} } \RenewDocumentCommand{#1}{} {% @branch \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_one:n} } { \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_two:n} } { {#2}\c_math_superscript_token{#3} } } } } \cs_new:Nn \@@_subscripted_and_superscripted_core:nnnn { \cs_set:cpn {\cs_to_str:N #1_one:n} ##1 { {#2}\c_math_superscript_token{##1} \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_three:n} } { \c_math_subscript_token{#3} } } \cs_set:cpn {\cs_to_str:N #1_two:n} ##1 { {#2}\c_math_subscript_token{#3 ##1} \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_four:n} } { \c_math_superscript_token{#4 \bullet} } } \cs_set:cpn {\cs_to_str:N #1_three:n} ##1 { \c_math_subscript_token{#3 ##1} } \cs_set:cpn {\cs_to_str:N #1_four:n} ##1 { \c_math_superscript_token{#4 ##1} } } \NewDocumentCommand{\NewSubscriptedandSuperscriptedSymbol}{m m m m} { \@@_check_definable:nN {#1} \NewSubscriptedandSuperscriptedSymbol \cs_if_exist:NT #1 { \PackageError{thermodynamics} {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~already~defined} {You~have~used~ '\tl_trim_spaces:o {\tl_to_str:n {\NewSubscriptedandSuperScriptedSymbol}}'~ with~a~command~that~already~has~a~definition} } \@@_subscripted_and_superscripted_core:nnnn {#1} {#2} {#3} {#4} \NewDocumentCommand{#1}{} { \peek_catcode_remove:NTF \c_math_superscript_token { \use:c {\cs_to_str:N #1_one:n} } { \peek_catcode_remove:NTF \c_math_subscript_token { \use:c {\cs_to_str:N #1_two:n} } { {#2}\c_math_subscript_token{#3}\c_math_superscript_token{#4} } } } } \NewDocumentCommand{\RenewSubscriptedandSuperscriptedSymbol}{m m m m} { \@@_check_definable:nN {#1} \RenewSubscriptedandSuperscriptedSymbol %^^A \cs_if_exist:NF #1 %^^A { \PackageError{thermodynamics} %^^A {Command~'\tl_trim_spaces:o {\tl_to_str:n {#1}}'~not~already~defined} %^^A {You~have~used~ %^^A '\tl_trim_spaces:o %^^A {\tl_to_str:n {\RenewSubscriptedandSuperScriptedSymbol}}'~ %^^A with~a~command~that~does~not~have~a~definition} %^^A } %^^A \@@_subscripted_and_superscripted_core:nnnn {#1} {#2} {#3} {#4} %^^A \RenewDocumentCommand{#1}{} %^^A { %^^A \peek_catcode_remove:NTF \c_math_superscript_token %^^A { \use:c {\cs_to_str:N #1_one:n} } %^^A { \peek_catcode_remove:NTF \c_math_subscript_token %^^A { \use:c {\cs_to_str:N #1_two:n} } %^^A { {#2}\c_math_subscript_token{#3}\c_math_superscript_token{#4} } %^^A } %^^A } } % \end{macrocode} % \end{macro} % \subsection{Symbol Definitions} % \begin{macro}{\heatcapacitysymbol,\compressibilitysymbol,\expansivitysymbol} % We define symbols for the heat capacities, compressibilities, and so forth. % \begin{macrocode} \NewExpandableDocumentCommand{\heatcapacitysymbol}{}{C} \NewExpandableDocumentCommand{\compressibilitysymbol}{}{\kappa} \NewExpandableDocumentCommand{\expansivitysymbol}{}{\alpha} \NewExpandableDocumentCommand{\JTsymbol}{}{\mu} % \end{macrocode} % \end{macro} % \begin{macro}{\cV,\cP} % The heat capacities are molar by default; we also declare extensive and % specific heat capacities. % The heat capacities themselves are defined to be ``smart'': \verb"\cV_i" will % recognize the subscript appropriately and render $C_{V,i}$ rather than % ${C_V}_i$ or some other unintended symbol. Superscripts are also handled % appropriately and can be in either order. % \begin{macrocode} \NewSubscriptedSymbol{\cV}{\@@_intensive:n \heatcapacitysymbol} {\g_@@_volume_symbol} \NewSubscriptedSymbol{\cP}{\@@_intensive:n \heatcapacitysymbol} {\g_@@_pressure_symbol} % \end{macrocode} % \end{macro} % \begin{macro}{\cVt,\cPt} % We also introduce \emph{extensive} (rather than molar) heat capacity macros. % \begin{macrocode} \NewSubscriptedSymbol{\cVt}{\@@_extensive:n \heatcapacitysymbol} {\g_@@_volume_symbol} \NewSubscriptedSymbol{\cPt}{\@@_extensive:n \heatcapacitysymbol} {\g_@@_pressure_symbol} % \end{macrocode} % \end{macro} % \begin{macro}{\cVs,\cPs} % \cs{cPs} and \cs{cVs} are the specific heat capacities. % \begin{macrocode} \NewSubscriptedSymbol{\cVs}{\@@_specific:n \heatcapacitysymbol} {\g_@@_volume_symbol} \NewSubscriptedSymbol{\cPs}{\@@_specific:n \heatcapacitysymbol} {\g_@@_pressure_symbol} % \end{macrocode} % \end{macro} % % \begin{macro}{\kappaT,\kappaS} % The isothermal and adiabatic compressibilities are defined similarly, but % those do not have extensive versions for obvious reasons. % \begin{macrocode} \NewSubscriptedSymbol{\kappaT}{\compressibilitysymbol} {\g_@@_temperature_symbol} \NewSubscriptedSymbol{\kappaS}{\compressibilitysymbol} {\g_@@_entropy_symbol} % \end{macrocode} % \end{macro} % \begin{macro}{\alphaP,\alphaS} % The macro \cs{alphaP} is intended to refer to the isobaric volume % expansivity, while \cs{alphaS} is the isentropic volume expansivity. % \begin{macrocode} \NewSubscriptedSymbol{\alphaP}{\expansivitysymbol}{\g_@@_pressure_symbol} \NewSubscriptedSymbol{\alphaS}{\expansivitysymbol}{\g_@@_entropy_symbol} % \end{macrocode} % \end{macro} % \begin{macro}{\muJT} % The macro \cs{muJT} renders the Joule--Thomson coefficient. % \begin{macrocode} \NewSubscriptedSymbol{\muJT}{\JTsymbol}{\text{JT}} % \end{macrocode} % \end{macro} % % \begin{macro}{\Psat,\Pvap,\phisat,\fsat,\sat} % The \cs{Psat} macro (and its clone, the \cs{Pvap} macro) should be used for % the saturation pressure. % Similarly, a \cs{phisat} macro typesets the fugacity coefficient at % saturation. The \cs{fsat} macro similarly renders the fugacity at saturation. % Other saturation properties should use \verb"M^\sat" or similar, preferably % by defining another macro such as \verb"\Gmsat". % \begin{macrocode} \NewDocumentCommand{\sat}{}{{\text{sat}}} \NewDocumentCommand{\Psat}{}{P\c_math_superscript_token\sat} \NewDocumentCommand{\Pvap}{}{\Psat} \NewDocumentCommand{\phisat}{}{\phi\c_math_superscript_token\sat} \NewDocumentCommand{\fsat}{}{\fpure\c_math_superscript_token\sat} % \end{macrocode} % \end{macro} % \begin{macro}{\std,\Pstd,\fstd,\Cstd,\mustd} % The \cs{std} macro denotes standard properties. \cs{Pstd}, \cs{Cstd}, % \cs{fstd}, and \cs{mustd} are defined for convenience and for consistency % across textbooks. % \changes{v2.02}{2024/06/14}{Added \cs{Cstd} and \cs{mustd} to standardize % standard molalities and chemical potentials across textbooks.} % \begin{macrocode} \NewDocumentCommand{\std}{}{\circ} \NewDocumentCommand{\Pstd}{}{P\c_math_superscript_token \std} \NewDocumentCommand{\Cstd}{}{C\c_math_superscript_token \std} \NewDocumentCommand{\fstd}{}{f\c_math_superscript_token \std} \NewDocumentCommand{\mustd}{}{\mu\c_math_superscript_token \std} % \end{macrocode} % \end{macro} % \begin{macro}{\xrxn} % The \cs{xrxn} macro denotes the extent of reaction. % \changes{v2.02}{2024/06/14}{Added \cs{xrxn} macro to standardize the % extent of reaction macro across textbooks.} % \begin{macrocode} \NewDocumentCommand{\xrxn}{}{\xi} % \end{macrocode} % \end{macro} % % \begin{macro}{\fmix} % The \cs{fmix} command is intended to describe fugacities in mixtures. % It renders as $\hat f$ by default, and would be used as \verb"\fmix_i" or % the like, producing $\hat f_i$; some authors like to use $\bar f_i$ or % just $f_i$, and this command creates a consistent way to change between % such options. % \begin{macrocode} \NewDocumentCommand{\fmix}{}{\hat{f}} % \end{macrocode} % \end{macro} % \begin{macro}{\phimix} % A similar command, \cs{phimix}, renders $\hat\phi$ by default to represent % the fugacity coefficient in a mixture. % \begin{macrocode} \NewDocumentCommand{\phimix}{}{\hat\phi} % \end{macrocode} % \end{macro} % \begin{macro}{\fpure} % The \cs{fpure} command is intended to describe fugacities in pure substances. % It renders as $f$ by default, and would be used as \verb"\fpure" or % \verb"\fpure_i" or the like, producing $f_i$; some authors like to use % $f_{\text{pure}\,i}$, and others like to use $f_i^\bullet$; this command % creates a consistent way to change between the these options. A similar % command for $\phi$ is given, \cs{phipure}, for fugacity coefficients. % \begin{macrocode} \NewDocumentCommand{\fpure}{}{f} \NewDocumentCommand{\phipure}{}{\phi} % \end{macrocode} % \end{macro} % \begin{macro}{\actabs,\actrel} % The \cs{actabs} and \cs{actrel} macros are intended to standardize the macro % for the absolute and relative activities, respectively, across textbooks. % The defaults are \(\actabs\) and \(\actrel\), respectively. % \changes{v2.02}{2024/06/14}{Added \cs{actabs} and \cs{actrel} to make % absolute and relative activity symbols consistent.} % \begin{macrocode} \NewExpandableDocumentCommand{\actabs}{}{\lambda} \NewExpandableDocumentCommand{\actrel}{}{a} % \end{macrocode} % \end{macro} % % \subsubsection{Property Changes} % \begin{macro}{\Deltamix,\mixing} % Mixing properties, such as $\Deltamix\Gm$, should be accessed using % \verb"\Deltamix\Gm" and similar constructions---this construct will typeset % as $\Delta_{MIX}G$ using the |Thompson| package option, for example, % and as $\Delta_\text{mix}\Gt$ using the |Sandler| package option. % \begin{macrocode} \NewDocumentCommand{\mixing}{}{{\text{mix}}} \NewDocumentCommand{\Deltamix}{m} {\Delta{#1}\c_math_subscript_token\mixing} % \end{macrocode} % \end{macro} % % \pagebreak[2]% % \begin{macro}{\formation,\fusion,\reaction,\sublimation,\vaporization} % Macros for subscripts/superscripts on property changes, % \begin{macrocode} \NewDocumentCommand{\formation}{}{f} \NewDocumentCommand{\fusion}{}{{\text{fus}}} \NewDocumentCommand{\reaction}{}{{\text{rxn}}} \NewDocumentCommand{\sublimation}{}{{\text{sub}}} \NewDocumentCommand{\vaporization}{}{{\text{vap}}} % \end{macrocode} % \end{macro} % \begin{macro}{\Deltafus,\Deltasub,\Deltavap,\Deltarxn} % and similar macros for the property changes themselves. Some of these may % be redefined by package options that select a particular textbook. % \changes{v2.02}{2024/06/14}{Changed implementation of \cs{Deltarxn} to % handle subscripts.} % \begin{macrocode} \NewDocumentCommand{\Deltafus}{m} {\Delta #1\c_math_superscript_token\fusion} \NewDocumentCommand{\Deltasub}{m} {\Delta #1\c_math_superscript_token\sublimation} \NewDocumentCommand{\Deltavap}{m} {\Delta #1\c_math_superscript_token\vaporization} \NewDocumentCommand{\Deltarxn}{m} { \cs_set:Npn \@@_Deltarxn_one ##1 { \Delta #1\c_math_subscript_token{\reaction,##1} } \peek_catcode_remove:NTF \c_math_subscript_token { \@@_Deltarxn_one } { \Delta #1\c_math_subscript_token{\reaction} } } \tl_new:N \l_@@_Deltaf_sym_tl \NewSubscriptedSymbol{\@@_Deltaf}{\l_@@_Deltaf_sym_tl}{\formation} \NewDocumentCommand{\Deltaf}{m} { \tl_set:Nn \l_@@_Deltaf_sym_tl {\Delta #1} \@@_Deltaf } % \end{macrocode} % \end{macro} % % \subsubsection{Partial Molar Quantities} % \begin{macro}{\partialmolar} % Partial molar quantities with superscripts appear as $\Gpm[\IG]{i}$ or % $\GRpm{i}$ (or, with the |shortpm| option, as % \begin{thermoshortpm}$\Gpm[\IG]{i}$ or $\GRpm{i}$\end{thermoshortpm}), % rather than something like $\overline{G}^\IG_i$ or $\overline{G}_i^R$; the % former looks better but is harder to implement for obvious reasons. Their % definitions allow them to be used as symbols, something like \verb"\Gpm_i", % \verb"\Gpm^{\IGM}_i", \verb"\Gpm^{\IGM}_i", and even \verb"\Gpm_i^{\IGM}"; % they can also be treated as commands: \verb"\Gpm{i}" is equivalent to % \verb"\Gpm_i" and \verb"\Gpm[\IGM]{i}" is equivalent to \verb"\Gpm_i^{\IGM}". % The macro \cs{partialmolar} can be used to create an arbitrary partial % molar symbol. % \begin{macrocode} \tl_new:N \l_@@_pm_symbol_tl \tl_new:N \l_@@_pm_arg_tl \NewDocumentCommand{\partialmolar}{m} { \tl_set:Nn \l_@@_pm_symbol_tl {#1} \@@_generic_pm: } %% cases to consider: %% (1) \Mpm{i} %% (2) \Mpm[S]{i} %% (3) \Mpm^S_i %% (4) \Mpm_i^S %% (5) \Mpm_i %% note that \Mpm^S with no subscript makes no sense and is thus forbidden \cs_new:Nn \@@_generic_pm: { \peek_catcode_remove:NTF \c_math_subscript_token {% case 4 or case 5 \@@_pm_case_four_or_five } {% look for superscript token \peek_catcode_remove:NTF \c_math_superscript_token {% case 3: \Mpm^{#1}_{#2} or \Mpm^{#1}{#2} \@@_pm_case_three } {% Look for optional argument [...] \peek_charcode:NTF [ {% case 2: \Mpm[S]{i} \@@_pm_case_two } {% case 1: \Mpm{i} \@@_pm_case_one } } } } \cs_new:Npn \@@_pm_case_one #1 { \bool_if:NTF \l_@@_longpm_bool { \@@_overline:n {\l_@@_pm_symbol_tl\c_math_subscript_token{#1}} } { \@@_overline:n {\l_@@_pm_symbol_tl}\c_math_subscript_token{#1} } } \cs_new:Npn \@@_pm_case_two [#1]#2 { \bool_if:NTF \l_@@_longpm_bool { \@@_overline:n {\l_@@_pm_symbol_tl \c_math_superscript_token{#1}\c_math_subscript_token{#2}} } { \@@_overline:n {\l_@@_pm_symbol_tl} \c_math_superscript_token{#1}\c_math_subscript_token{#2} } } \cs_new:Npn \@@_pm_case_three #1 { \tl_set:Nn \l_@@_pm_arg_tl {#1} \peek_catcode_remove:NTF \c_math_subscript_token { \@@_pm_case_three_part_two } { \@@_pm_case_three_part_two } } \cs_new:Npn \@@_pm_case_three_part_two #1 { \bool_if:NTF \l_@@_longpm_bool { \@@_overline:n {\l_@@_pm_symbol_tl \c_math_superscript_token{\l_@@_pm_arg_tl} \c_math_subscript_token{#1}} } { \@@_overline:n {\l_@@_pm_symbol_tl} \c_math_superscript_token{\l_@@_pm_arg_tl} \c_math_subscript_token{#1} } } \cs_new:Npn \@@_pm_case_four_or_five #1 { \tl_set:Nn \l_@@_pm_arg_tl {#1} \peek_catcode_remove:NTF \c_math_superscript_token { \@@_pm_case_four } { \@@_pm_case_five } } \cs_new:Npn \@@_pm_case_four #1 { \bool_if:NTF \l_@@_longpm_bool { \@@_overline:n {\l_@@_pm_symbol_tl\c_math_superscript_token{#1} \c_math_subscript_token{\l_@@_pm_arg_tl}} } { \@@_overline:n {\l_@@_pm_symbol_tl}\c_math_superscript_token{#1} \c_math_subscript_token{\l_@@_pm_arg_tl} } } \cs_new:Npn \@@_pm_case_five { \bool_if:NTF \l_@@_longpm_bool { \@@_overline:n {\l_@@_pm_symbol_tl \c_math_subscript_token{\l_@@_pm_arg_tl}} } { \@@_overline:n {\l_@@_pm_symbol_tl} \c_math_subscript_token{\l_@@_pm_arg_tl} } } % \end{macrocode} % \end{macro} % % \subsubsection{Thermodynamic Property Definitions} % These macros define the user interface to the symbols for energy, volume, % and so forth. There are five commands that define thermodynamic properties. % % \begin{macro}{\NewExtensiveProperty} % The command \cs{NewExtensiveProperty} declares macros for a total, molar, and % specific version of the symbol; for example, a second heat-like property % could be defined via % \begin{verbatim} % \NewExtensiveProperty{R}{\mathcal{Q}} %\end{verbatim} % \NewExtensiveProperty{R}{\mathcal{Q}}\relax % The command above would declare the macros \cs{Rt}, \cs{Rm}, and \cs{Rs} % that expand to $\Rt$, $\Rm$, and $\Rs$, respectively, using the default % package options. % \end{macro} % % \begin{macro}{\NewPartialMolarProperty} % The command \cs{NewPartialMolarProperty} declares a macro for the partial % molar quantity. For example, % \begin{verbatim} % \NewPartialMolarProperty{I}{\Psi} %\end{verbatim} % \NewPartialMolarProperty{I}{\Psi}\relax % would create the command \cs{Ipm}, which would typeset a partial molar % command with the base symbol $\Psi$, yielding $\Ipm{i}$. % \end{macro} % % \begin{macro}{\NewThermodynamicProperty} % Declaring a new potential is handled by the % \cs{NewThermodynamicProperty} macro, which takes two arguments. The first % is the base of the name, and the second is the base of the symbol. This % declares four new commands for the extensive, molar, specific, and partial % molar properties. These commands consist of the first argument followed by % \verb"t", \verb"m", \verb"s", and \verb"pm", respectively. For example, one % might define the entropy via % \begin{verbatim} % \NewThermodynamicProperty{S}{S} %\end{verbatim} % and it would define the macros \cs{St}, \cs{Sm}, \cs{Ss}, and \cs{Spm} that % yield, respectively, $\St$, S, $\hat S$, and $\Spm{i}$ (assuming the % subscript to the partial molar quantity was $i$). % It would also declare residual and excess properties for that base symbol. % Note that the actual definition of the entropy and the other standard % properties is slightly more complicated so as to allow for different symbols % to be used in different textbooks. % \begin{macrocode} \NewDocumentCommand{\NewThermodynamicProperty}{m m} { \NewExtensiveProperty{#1}{#2} \NewPartialMolarProperty{#1}{#2} \NewResidualProperty{#1}{#2} \NewExcessProperty{#1}{#2} } \ProvideDocumentCommand{\NewExtensiveProperty}{m m} { % Extensive property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1t\cs_end:}{}{\@@_extensive:n {#2}} % Molar property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1m\cs_end:}{}{\@@_intensive:n {#2}} % Specific property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1s\cs_end:}{}{\@@_specific:n {#2}} } \NewDocumentCommand{\NewPartialMolarProperty}{m m} { % Partial molar property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1pm\cs_end:}{}{\partialmolar{#2}} } \ProvideDocumentCommand{\NewExcessProperty}{m m} { \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 Et\cs_end:}{\@@_extensive:n{#2}}{\excess} \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 E\cs_end:}{\@@_intensive:n{#2}}{\excess} \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 Es\cs_end:}{\@@_specific:n{#2}}{\excess} % Excess partial molar property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1Epm\cs_end:}{}{\partialmolar{#2} \c_math_superscript_token\excess} } \ProvideDocumentCommand{\NewResidualProperty}{m m} { \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 Rt\cs_end:}{\@@_extensive:n{#2}}{\residual} \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 R\cs_end:}{\@@_intensive:n{#2}}{\residual} \exp_after:wN \NewSuperscriptedSymbol \exp_after:wN {\cs:w #1 Rs\cs_end:}{\@@_specific:n{#2}}{\residual} % Residual partial molar property \exp_after:wN \NewDocumentCommand \exp_after:wN {\cs:w #1Rpm\cs_end:}{}{\partialmolar{#2} \c_math_superscript_token\residual} } % \end{macrocode} % \end{macro} % \begin{macro}{\Nt,\Et,\Em,\Es,\Epm} % \penalty-600% % We define \cs{Nt} as the number of moles, as that changes between books a % lot, but it does not have extensive, molar, and specific equivalents. % Heat and work are defined, but lack partial molar properties. Area does not % have excess or residual properties. % \begin{macrocode} \NewDocumentCommand{\Nt}{}{\g_@@_mole_symbol} \NewThermodynamicProperty{E}{\g_@@_total_energy_symbol} \NewThermodynamicProperty{U}{\g_@@_internal_energy_symbol} \NewThermodynamicProperty{F}{\g_@@_Helmholtz_symbol} \NewThermodynamicProperty{G}{\g_@@_Gibbs_symbol} \NewThermodynamicProperty{H}{\g_@@_enthalpy_symbol} \NewThermodynamicProperty{L}{\g_@@_Landau_symbol} \NewThermodynamicProperty{V}{\g_@@_volume_symbol} \NewThermodynamicProperty{S}{\g_@@_entropy_symbol} \NewExtensiveProperty{A}{\g_@@_area_symbol} \NewPartialMolarProperty{A}{\g_@@_area_symbol} \NewExtensiveProperty{Q}{\g_@@_heat_symbol} \NewExtensiveProperty{W}{\g_@@_work_symbol} % \end{macrocode} % \end{macro} % % \begin{macro}{\cVpm,\cPpm} % Partial molar heat capacities are \emph{hard}, but the following % implementation seems to work flawlessly\dots so far. % \changes{v2.02}{2024/06/14}{Simplified implementations of partial molar % heat capacities that take advantage of \cs{NewPartialMolarProperty} and % \cs{NewSubscriptedProperty}. This fixes the issue of the subscripts being % ``persistent'' after \cs{cPpm} is used in a line. Also declared alternative % symbols for use with the \texttt{shortpm} option.} % \begin{macrocode} \NewPartialMolarProperty{cP}{\cP} \NewPartialMolarProperty{cV}{\cV} \NewSubscriptedSymbol{\cPpmshort}{\@@_overline_copy:n{\heatcapacitysymbol}} {\g_@@_pressure_symbol} \NewSubscriptedSymbol{\cVpmshort}{\@@_overline_copy:n{\heatcapacitysymbol}} {\g_@@_volume_symbol} % \end{macrocode} % \end{macro} % % \subsubsection{Electrochemistry} % \begin{macro}{\Epot} % \changes{v2.02}{2024/06/14}{Added \cs{Epot} to standardize the electric % potential across textbooks for electrochemistry.} % The \cs{Epot} command can be used for the electric potential. % \begin{macrocode} \NewExpandableDocumentCommand{\Epot}{}{E} % \end{macrocode} % \end{macro} % % \subsubsection{Residual and Excess Properties} % \begin{macro}{\residual,\excess} % Macros are defined for residual properties (departure from ideal gases) % and excess properties (departure from ideal solutions). We begin with two % macros to use for defining generic residual and excess properties that are % not already defined. % \begin{macrocode} \NewDocumentCommand{\residual}{}{R} \NewDocumentCommand{\excess}{}{E} % \end{macrocode} % \end{macro} % % \pagebreak[1]\relax % \begin{macro}{\prodall,\sumall,\summallbutlast} % The \cs{sumall} macro and its cousin, \cs{sumallbutlast}, simplify the % typesetting of commonly-used sums; the command \cs{prodall} does the same % thing for products, viz., % \begin{verbatim} % \[ \sumall_i x_i = 1 \qquad \sumallbutlast_i x_i = 1 - x_\ncomponents % \qquad K = \exp\left(\frac{-\Deltarxn\Gm^\std}{RT}\right) % = \prodall_i a_i^{\nu_i} \] %\end{verbatim} % gives % \[ \sumall_i x_i = 1 \qquad \sumallbutlast_i x_i = 1 - x_\ncomponents % \qquad K = \exp\left(\frac{-\Deltarxn\Gm^\std}{RT}\right) % = \prodall_i a_i^{\nu_i} \] % \begin{macrocode} \NewDocumentCommand{\sumall}{m m} { \sum\c_math_subscript_token{#2=1} \c_math_superscript_token{\ncomponents} } \NewDocumentCommand{\sumallbutlast}{m m} { \sum\c_math_subscript_token{#2=1} \c_math_superscript_token{\ncomponents-1} } \NewDocumentCommand{\prodall}{m m} { \prod\c_math_subscript_token{#2=1} \c_math_superscript_token{\ncomponents} } % \end{macrocode} % \end{macro} % % \begin{macro}{\IG,\IGM,\IS} % The \cs{IG}, \cs{IGM}, and \cs{IS} macros (meaning ``ideal gas,'' ``ideal % gas mixture,'' and ``ideal solution,'' respectively) should be used to % make clean transitions between textbooks---some use ``IM'' or ``ID'' rather % than ``IS,'' for example. % \begin{macrocode} \NewDocumentCommand{\IG}{}{{\text{IG}}} \NewDocumentCommand{\IGM}{}{{\text{IGM}}} \NewDocumentCommand{\IS}{}{{\text{IS}}} % \end{macrocode} % \end{macro} % % \begin{macro}{\Henryrat,\Henrymol} % \subsubsection{Henry's Law Constants and Activity Coefficients} % The Henry's Law constants for the rational basis ($y_i P = x_i h_i$) and % the molal basis ($y_i P = C_i \mathcal{H}_i$) are given by the macros % \cs{Henryrat} and \cs{Henrymol}, respectively. Using them this way % consistently allows for easy switching back and forth. % \begin{macrocode} \NewDocumentCommand{\Henryrat}{}{h} \NewDocumentCommand{\Henrymol}{}{\mathcal{H}} % \end{macrocode} % \end{macro} % % \begin{macro}{\gammait,\muit} % \changes{v2.02}{2024/06/14}{Added \cs{muit} and \cs{gammait} to preserve % symbols in case the base macros are redefined by a package.} % \begin{macro}{\gammarat,\gammamol} % The ordinary activity coefficient is typically denoted $\gamma$ or % $\gammaup$, so the base symbol will still be \cs{gamma}. The macro % \cs{gammait} is defined just in case \cs{gamma} is redefined by a package % option. However, symbols for the Henry's Law activity coefficients are far % from universal, so I have defined macros to make their use consistent. The % defaults render \cs{gammarat} as $\gamma^\ast$ and \cs{gammamol} as % $\gamma^\square$. \cs{gammamol} will use \cs{square} from packages if it is % defined; if not, it ``fakes it'' with the definition below. % The symbol for the chemical potential is \cs{mu}, but \cs{muit} is defined % so the symbol is still available, should \cs{mu} be redefined later. %^^A Backup for \square adapted from amsthm.sty with tweaks to make it %^^A look reasonably similar to that from newpx (i.e., smaller than the %^^A amsfonts version) % \begin{macrocode} \cs_gset_eq:NN \gammait \gamma \cs_gset_eq:NN \muit \mu \AtBeginDocument{% \ProvideDocumentCommand{\square}{}{% \text{\leavevmode \hbox to.65em{% \hfil\vrule \vbox to.53em{\hrule width.45em\vfil\hrule}% \vrule\hfil}% }% }% } \NewDocumentCommand{\gammarat}{}{\gamma\c_math_superscript_token\ast} \NewDocumentCommand{\gammamol}{}{\gamma\c_math_superscript_token\square} % \end{macrocode} % \end{macro} % \end{macro} % \subsection{Jacobians} % \begin{environment}{thermovmatrix} % This is a non-user-interface wrapper environment used to detect, in % effect, whether \pkg{amsmath} has been loaded. If so, it uses its % \env{vmatrix} environment for Jacobians; if not, it fakes it with % \env{array} (which does not look nearly as good). % \begin{macrocode} \NewDocumentEnvironment{thermovmatrix}{} { \cs_if_exist:NTF \vmatrix { \begin{vmatrix} } { \left|\begin{array}{c c c c c c c c c c} } } { \cs_if_exist:NTF \endvmatrix { \end{vmatrix} } { \end{array}\right| } } % \end{macrocode} % \end{environment} % \begin{macro}{Jacobian} % The \cs{Jacobian} command typesets the Leibnitz notation for the Jacobian % determinant.\relax % \changes{v2.00}{2023/11/16}{Reimplemented \cs{Jacobian} to handle an % arbitary number of variables and implemented \cs{Jacobiandet} to % handle the matrix representation of the Jacobian.} % \begin{macrocode} \NewDocumentCommand{\Jacobian}{m m} {\@@_frac:nn{\partial(#1)}{\partial{(#2)}}} % \end{macrocode} % \end{macro} % \begin{macro}{Jacobiandet} % Similarly, the \cs{Jacobiandet} macro typesets the actual determinant that % the Jacobian notation represents. % \begin{macrocode} \NewDocumentCommand{\Jacobiandet}{O{} O{} m m} { \@@_Jacobian_set_ncomponents:nn {#3} {#4} \begin{thermovmatrix} \@@_Jacobianmatrix:nnnn {#1} {#2} {#3} {#4} \end{thermovmatrix} } \seq_new:N \l_@@_row_seq \seq_new:N \l_@@_matrix_seq \clist_new:N \l_@@_other_vars_clist \clist_new:N \l_@@_other_vars_copy_clist \tl_new:N \l_@@_Jacobian_x_tl \tl_new:N \l_@@_Jacobian_n_tl \tl_new:N \l_@@_Jacobian_temp_tl \bool_new:N \l_@@_found_dots_bool \cs_new:Nn \@@_Jacobian_set_ncomponents:nn { % If any entry is \dots, we assume the Jacobian is of the form % d(f_1,\dots,f_n)/d(x_1,\dots,x_n) where f is some function % (any symbol) and x is some variable (any symbol). \tl_if_in:nnTF {#1} {\dots} {% Has dots \bool_set_true:N \l_@@_found_dots_bool % look for what "x" is \tl_set:Nn \l_@@_Jacobian_x_tl {\tl_head:n {#2}} % look for what "n" is and set \ncomponents to it \tl_set:Nx \l_@@_Jacobian_n_tl {\tl_item:nn {#2} {-1}} \RenewExpandableDocumentCommand{\ncomponents}{}{\l_@@_Jacobian_n_tl} } {% Does not have dots; proceed accordingly \bool_set_false:N \l_@@_found_dots_bool } } \cs_new_protected:Nn \@@_Jacobianmatrix:nnnn { \seq_clear:N \l_@@_matrix_seq \clist_set:Nn \l_@@_other_vars_clist {#4} \clist_set_eq:NN \l_@@_other_vars_copy_clist \l_@@_other_vars_clist \clist_map_inline:nn {#3} { \seq_clear:N \l_@@_row_seq \tl_if_in:nnTF {##1} {\dots} {% The current row has "dots" => row is \vdots && \vdots \seq_put_right:Nn \l_@@_matrix_seq { \vdots \c_alignment_token \c_alignment_token \vdots } } {% Ordinary row \clist_map_inline:nn {#4} { \tl_if_in:nnTF {####1} {\dots} {% this column has "dots" in it \seq_put_right:Nn \l_@@_row_seq \dots } {% Normal column \clist_set_eq:NN \l_@@_other_vars_clist \l_@@_other_vars_copy_clist \clist_remove_all:Nn \l_@@_other_vars_clist {####1} \bool_if:NTF \l_@@_found_dots_bool { \tl_set:Nn \l_@@_Jacobian_temp_tl {\tl_item:nn {####1} {-1}} \seq_put_right:Nx \l_@@_row_seq { #1\Partial{##1}{####1} {\allbut{\l_@@_Jacobian_temp_tl}{\l_@@_Jacobian_x_tl}} } } { \seq_put_right:Nx \l_@@_row_seq { #1\Partial{##1}{####1} {\clist_use:Nn \l_@@_other_vars_clist ,} } } } } \seq_put_right:Nx \l_@@_matrix_seq { \seq_use:Nn \l_@@_row_seq { \c_alignment_token } } } } \tl_if_empty:nTF {#2} { \tl_if_eq:nnTF {#1} {\displaystyle} { \seq_use:Nn \l_@@_matrix_seq { \\[2.75ex] } } { \seq_use:Nn \l_@@_matrix_seq { \\[1.25ex] } } } { \seq_use:Nn \l_@@_matrix_seq { \\[#2] } } } % \end{macrocode} % \end{macro} %^^X\end{implementation} % % \Finale % \iffalse % %<*example> \documentclass{article} \usepackage[margin=1in]{geometry} \usepackage{amsmath,amssymb} \usepackage{thermodynamics} \title{Examples to Accompany the \textsf{thermodynamics} Package} \author{Karl D. Hammond} \date{} \begin{document} \NewThermodynamicProperty{B}{B} \maketitle\noindent The combined laws: \begin{align*} d\Et &= d\Ut + d\left(\frac12 m v^2\right) - d(m\phi) \\ d\Ut &= \dbar\Qt + \dbar\Wt + \Um d\Nt = \dbar\Qt - P d\Vt + \Hm d\Nt \\ &= \Partial*{\Ut}{\St}{\Vt,\allNs} d\St + \Partial*{\Ut}{\Vt}{\St,\allNs} d\Vt + \sumall_i \Partial*{\Ut}{\Nt_i}{\Vt,\St,\allNsbut{i}} d\Nt_i \\ &= T d\St - P d\Vt + \sumall_i \mu_i d\Nt_i \end{align*} With surfaces present: \begin{gather*} d\Ut = T d\St - P d\Vt + \sigma d\At + \sumall_i \mu_i d\Nt_i \\ d\Ht = T d\St + \Vt dP + \sigma d\At + \sumall_i \mu_i d\Nt_i \\ d\Ft = -\St dT - P d\Vt + \sigma d\At + \sumall_i \mu_i d\Nt_i \\ d\Gt = -\St dT + \Vt dP + \sigma d\At + \sumall_i \mu_i d\Nt_i \\ d\Lt = -\St dT - P d\Vt + \sigma d\At - \sumall_i \Nt_i d\mu_i \\ \Bt = \Ut + P\Vt - T\St - \sigma\At \\ d\Bt = -\St dT + \Vt dP - \At d\sigma + \sumall_i \mu_i d\Nt_i \\ \mu_i = \Bpm_i = \Gpm_i + \sigma \Apm_i \end{gather*} Some Maxwell reciprocity relations: \begin{gather*} \Partial*{\Vt}{T}{P,\allNs} = \PartialMixSecond*{\Gt}{T}{P}{\allNs} = \PartialMixSecond*{\Gt}{P}{T}{\allNs} = -\Partial{\St}{P}{T,\allNs} \\ \Partial*{\Gpm_i}{T}{P,\allXs} = \PartialMixSecond*{\Gt}{T}{\Nt_i}{P,\allNsbut{i}} = \PartialMixSecond*{\Gt}{\Nt_i}{T}{P,\allNsbut{i}} = -\Partial*{\St}{\Nt_i}{T,P,\allNsbut{i}} = -\Spm_i \end{gather*} Temporary changes of derivative delimiters: \begin{gather*} \begin{thermobrackets} \Partial*{\Vt}{T}{P,\allNs} \end{thermobrackets} \begin{thermobar} = \PartialMixSecond*{\Gt}{T}{P}{\allNs} \end{thermobar} \begin{thermomolesrange} = \PartialMixSecond*{\Gt}{P}{T}{\allNs} \end{thermomolesrange} \begin{thermobraces} = -\Partial*{\St}{P}{T,\allNs} \begin{thermoNOsubscripts} \begin{thermomolesrange} = -\Partial{\St}{P}{T,\allNs} \end{thermomolesrange} \end{thermoNOsubscripts} \end{thermobraces} \end{gather*} Inline derivatives: \begin{gather*} \mu_i = \Partialinline{\Gt}{\Nt_i}{T,P,\allNsbut{i}} = \Partialinline{\Ft}{\Nt_i}{T,\Vt,\allNsbut{i}} = \Partialinline{\Ht}{\Nt_i}{\St,P,\allNsbut{i}} = \Partialinline{\Ut}{\Nt_i}{\St,\Vt,\allNsbut{i}} \end{gather*} The heat capacities: \begin{gather*} \cV = T \Partial*{\Sm}{T}{\Vm,\allXs} = \Partial*{\Um}{T}{\Vm,\allXs} = -T\PartialSecond{\Fm}{T}{\Vm,\allXs} \\ \cP^\IGM = T \Partial*{\Sm^\IGM}{T}{P,\allYs} = \Partial*{\Hm^\IGM}{T}{P,\allYs} \begin{thermobrackets} = -T\PartialSecond{\Gm^\IGM}{T}{P,\allYs} \end{thermobrackets} \\ \cVt = T \Partial*{\St}{T}{\Vt,\allNs} = \Partial*{\Ut}{T}{\Vt,\allNs} \begin{thermobraces} = -T\PartialSecond{\Ft}{T}{\Vm,\allNs} \end{thermobraces} \\ \begin{thermobar} \cPt = T \Partial*{\St}{T}{P,\allNs} = \Partial*{\Ht}{T}{P,\allNs} = -T\PartialSecond{\Gt}{T}{P,\allNs} \end{thermobar} \\ \cVs = T \Partial*{\Ss}{T}{\Vs,\allWs} = \Partial*{\Us}{T}{\Vs,\allWs} \begin{thermoplain} = -T\PartialSecond{\Fs}{T}{\Vs,\allWs} \end{thermoplain} \\ \cPs = T \Partialbigg*{\Ss}{T}{P,\allWs} = \Partialbigg*{\Hs}{T}{P,\allWs} = -T\PartialSecondbigg{\Gs}{T}{P,\allWs} \\ \begin{split} \cPpm_i &= \Partial*{\cPt}{\Nt_i}{T,P,\allNsbut{i}} = T \PartialMixSecond*{\St}{\Nt_i}{T}{P,\allNsbut{i}} = T \PartialMixSecond*{\St}{T}{\Nt_i}{P,\allNsbut{i}} \\ &= T \Partial*{\Spm_i}{T}{P,\allXs} = \Partial*{\Hpm_i}{T}{P,\allXs} = \PartialMixSecond*{\Ht}{T}{\Nt_i}{P,\allNsbut{i}} = \PartialMixSecond*{\Ht}{\Nt_i}{T}{P,\allNsbut{i}} \\ &= -T\PartialSecond*{\Gpm_i}{T}{P,\allXs} = -T\Partial{{}^3 \Gt}{T^2\partial \Nt_i}{P,\allNsbut{i}} \end{split} \end{gather*} Other measurable quantities: \begin{align*} \alphaS &= \frac{1}{\Vm} \Partial{\Vm}{T}{\Sm} & \alphaP &= \frac{1}{\Vm} \Partial{\Vm}{T}{P} \\ \kappaS &= -\frac{1}{\Vm} \Partial{\Vm}{P}{\Sm} & \kappaT &= -\frac{1}{\Vm} \Partial{\Vm}{P}{T} \end{align*} The chemical potential, fugacity, and activity: \[ \mu_i = \Gpm_i = \Gm_i^\std + RT \ln a_i = \Gm_i^\std + RT\ln\left(\frac{\fmix_i}{\fstd_i}\right) \] Equilibrium in a chemical reaction: \[ \sumall_i \nu_i \mu_i = 0 \Rightarrow \exp\left(\frac{-\Delta\Gm^\std}{RT}\right) = K = \prodall_i a_i^{\nu_i} \] Partial molar quantities: \begin{align*} \Hpm{i} &= \Partial*{\Ht}{\Nt_i}{T,P,\allNsbut{i}} = \Hm + \Nt \Partial*{\Hm}{\Nt_i}{T,P,\allNsbut{i}} \\ &= \Hm + \Partial*{\Hm}{x_i}{T,P,\allXsbut{i}} - \sumallbutlast_j x_j \Partial*{\Hm}{x_j}{T,P,\allXsbut{j}} = \Partial*{\Hm}{x_i}{T,P,\allXsbut{i}} + \Hpm_\ncomponents \end{align*} \[ \Vpm_i = \Partial{\Vt}{\Nt_i}{T,P,\allNsbut{i}} \] Fugacity and related properties: \begin{gather*} \Gpm_i = \mu_i = \Gm_i^\std(T) + RT\ln a_i = \Gm_i^\std(T) + RT\ln\left(\frac{\fmix_i}{\fstd_i}\right) \\ a_i = \frac{\fmix_i}{\fstd_i} = x_i \gamma_i \exp\left(\frac{1}{RT} \int_{\Pstd}^P \Vm_i(T,p)\,dp\right) \approx x_i \gamma_i \\ \begin{split} \fmix_i &= x_i \phimix_i P = x_i \gamma_i \fpure_i = x_i \gamma_i \phipure_i P = x_i \gammarat_i \Henryrat_i = C_i \gammamol_i \Henrymol_i = x_i \gamma_i \fsat_i \exp\left(\frac{1}{RT} \int_{\Psat_i}^P \Vm_i(T,p)\,dp\right) \\ &= x_i \gamma_i \Psat_i \phisat_i \exp\left(\frac{1}{RT} \int_{\Psat_i}^P \Vm_i(T,p)\,dp\right) \approx x_i \gamma_i \Psat_i \end{split} \end{gather*} Chemical Equilibria: \begin{gather*} \Deltarxn\Hm^\std = \sumall_i \nu_i \Deltaf\Hm_i^\std \\ \Deltarxn\Gm^\std = \sumall_i \nu_i \Deltaf\Gm_i^\std = \sumall_i \nu_i \mu_i^\std \\ \Deltarxn\cP^\std = \sumall_i \nu_i \cP_i^\std \\ \mu_i = \mu_i^\std + RT\ln a_i \\ a_i = \begin{cases} \displaystyle \frac{y_i \phimix_i P}{\Pstd} \approx \frac{y_i P}{\Pstd} & \text{(gases)} \\ \rule{0pt}{5ex}% \displaystyle x_i \gamma_i \exp\left(\frac{1}{RT} \int_{\Pstd}^P \Vm_i(T,p)\,dp\right) \approx x_i \gamma_i \exp\left(\frac{\Vm_i(P-\Pstd)}{RT}\right) \approx x_i \gamma_i \approx 1 & \text{(solids, solvents)} \\ \displaystyle \rule{0pt}{5ex}% \frac{C_i \gammamol_i}{C_i^\std} \exp\left(\frac{1}{RT} \int_{\Pstd}^P \Vpm_i^\infty(T,p,\allXs)\,dp\right) \approx \frac{C_i \gammamol_i}{C_i^\std} \approx \frac{C_i}{C_i^\std} & \text{(solutes)} \end{cases} \end{gather*} Phase change properties: \begin{gather*} \Deltafus\Sm = \Sm^L - \Sm^S \\ \Deltasub\Vm = \Vm^V - \Vm^S \\ \Deltavap\Gm = \Gm^V - \Gm^L \end{gather*} Specific properties: \newcommand*{\Btilde}[2][]{\widetilde{B}_{#2}^{#1}} \[ \Btilde{j} \equiv \Partial{\Bt}{m_j}{T,\Vs,\allMsbut[i]{j}} \] and thus \[ \Btilde{i} = \frac{\Bpm{i}}{M_i} + \Biggl(\Vs - \frac{\Vpm_i}{M_i}\Biggr) \Partial*{\Bs}{\Vs}{T,\allMs} = \frac{\Bpm{i}}{M_i} + \Biggl(\Vs - \frac{\Vpm_i}{M_i}\Biggr) \Partial{\Bs}{\Vs}{T,m,\allWs} \] and \[ \Bs = \sumall_i w_i \Btilde{i}. \] Excess and Residual (Departure) Properties: \begin{align*} \HR &= \Hm - \Hm^\IG & \FR &= \Fm - \Fm^\IGM \\ \SE &= \Sm - \Sm^\IS & \VRpm_k &= \Vpm_k - \Vpm_k^\IGM \end{align*} Jacobians: \begin{gather*} \Jacobian{\St,\Vt}{T,P} = \Jacobiandet{\St,\Vt}{T,P} \\ \Jacobian{f,g,h}{x,y,z} = \Jacobiandet[\displaystyle]{f,g,h}{x,y,z} \\ \Jacobian{h_1,\dots,h_k}{z_1,\dots,z_k} = \Jacobiandet{h_1,\dots,h_k}{z_1,\dots,z_k} \\ \cP = T\Partial{\Sm}{T}{P} = T\Jacobian{\Sm,P}{T,P} = -T\Jacobian{\Sm,P}{T,\Vm} \Jacobian{T,\Vm}{T,P} = -T\Jacobian{P,\Sm}{\Vm,\Sm} \Jacobian{\Vm,\Sm}{T,\Vm} \Jacobian{T,\Vm}{T,P} = \gamma \cV \end{gather*} \end{document} % % \fi % % \Finale \endinput